G Gaia

Switch factory

CYTO-11 — Balakong Jaya CTSB CYTO-29 CTSB CYTOWELL-54 — Taming Jaya PIC/S CTWSB CYTOCNGZ-602 — Guangzhou CTCNGZ

Only factories you are granted appear here (Filament tenant menu).

Leo Lim

leo@navi.my · Owner / Admin

Profile settings Change password

Theme

Sign out
RetailSellR&DMakeBuyStockPlanItemsGMPOpsAdminInsights

Purchase orders

+ Draft order + Purchase order
Open 24 Draft 2 Done 521
Created date Order # Supplier Currency · Payment Total order value Expected arrival Billing status Delivery
458,917.50 MYR Total order value (Sum summarizer, all 24 open orders) — foreign POs consolidated to MYR at the PO rate (PO-561: ¥186,000 → RM 115,320)
Showing 1–19 of 24 (sample rows from Katana snapshot)

Project Gaia — static mockup in Filament v3 table idiom. No backend. Sample data: Katana tenant snapshot 2026-04-12, all locations.

Purchase orders (Open) — field manifest

FieldFilament componentTypeSourceFK target
(checkbox)Table selection + DeleteBulkActionselection— (bulk delete of selected POs)
Created dateTextColumn::date()->sortable() + Filter (date range)datestored: purchase_orders.created_date; list sorted ascending by it
Order #TextColumn::searchable(isIndividual)->url()stringstored: purchase_orders.order_no (editable; NOT unique — PK is internal id)
SupplierTextColumn::searchable(isIndividual)string (display name)stored: purchase_orders.supplier_idsuppliers.id
Currency · PaymentTextColumn::badge() (currency) + TextColumn (payment method)enum + enumstored: purchase_orders.currency + purchase_orders.payment_method — default from supplier; domestic MYR / bank_transfer, the China source CNY / Alipay. Lets purchasing scan channel at a glance
Total order valueTextColumn::numeric()->summarize(Sum)money — order currency, MYR-consolidatedderived: Σ po_lines.qty × unit_price in order currency; foreign POs show the ¥ order amount with the MYR equivalent (order value × exchange_rate); the Sum summarizer and all totals stay in the entity base MYR. 0 MYR rows existpo_lines
Expected arrivalTextColumn::date()->color(fn) red when overdue + Filter (date range)date, editablestored: purchase_orders.expected_arrival_date; red when past and not fully received
Billing statusTextColumn::badge() + SelectFilter (inline bill action in Katana)enum: Billed / Partially billed (n) / Not billedderived: netting attached supplier bills against order value; n = bill countsupplier_bills
DeliveryTextColumn::badge() + SelectFilter (inline receive action in Katana)enum: Not received / Partially receivedderived: received qty vs ordered qty across PO lines; fully received moves PO to Done tabpo_line_receipts
Location scopeSelectFilter (header "All locations" dropdown)FK filterstored: purchase_orders.location_idlocations.id
Draft tab— (dropped: Draft view not captured)lifecycle tabOpen/Draft/Done partition POs by lifecycle state

Engine notes

  • Totals row: Total: 458917.50 MYR under Total order value — sum across the 24 filtered Open rows, foreign POs converted to the MYR base at their PO exchange rate (Katana pins it above the data; Filament renders it as a tfoot summarizer).
  • Row count "24 orders" updates with tab/filter scope.
  • Total order value is derived per PO; rows with 0 MYR exist (likely zero-priced or outsourcing-supplier POs, all for "NatusVincere Marketing Sdn Bhd (Supplier)").
  • Billing status nets attached bills against order value: none → Not billed, some → Partially billed (n), fully covered → Billed.
  • Delivery is computed from received vs ordered quantities: Not received / Partially received — fully received orders move to the Done tab.
  • Overdue logic: Expected arrival shown red when the date has passed and the order is still open/not fully received.
  • Status chips are interactive inline editors in Katana (receive/bill from the list) — Filament equivalent: row Actions or an editable badge dropdown.