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

Retail shipments

Print run sheet
deliveries
Delivery # Sale # Date Customer Items Method Driver Progress Status

Project Gaia — static mockup in Filament v3 idiom. No backend. Retail module; customer data shared with OEM underneath (channel-flagged), screens separated.

Retail delivery

RD-26-063

Not saved

Packing posts the retail_sale movement — FEFO picks the lot automatically, no manual lot entry.

Retail shipments — field manifest

FieldFilament componentTypeSourceFK target
Delivery #TextColumn (series RD-{yy}-{seq})stringstored: shipments.code — SAME shipments table as OEM, channel=retail scopes this view; RD- series vs SHP-
Tabs (In progress / Delivered)Filament Tabs — mirrors shipments.htmlderived filterIn progress = Scheduled/Out for delivery/Failed; Delivered = Delivered. Same split as the OEM Shipments list (Open/Done), applied to shipments.status
Sale #TextColumn (link)FKstored: shipments.retail_sale_id — the retail_sales row this delivery packs; mirrors the OEM Shipments list's "Sales order" columnretail_sales.id
ProgressViewColumn (3 step dots) — same pattern as shipments.html's Progress column, sized to retail's 3-stage journey instead of OEM's 4-stage freight onederivedderived from shipments.status: Scheduled → 1 dot, Out for delivery → 2 dots (blue), Delivered → 3 dots (green), Failed → 2 dots (red, same step as Out for delivery — it failed mid-attempt)
CustomerTextColumnFKderived: sale's customer (ONE customers table, channel enum oem/retail/both)customers.id
ItemsTextColumn (list)relationderived: sale's lines (variant, qty in ctn/box) — STC30 (1 ctn = 24 box) and Double Root Coffee (1 ctn = 30 pcs) onlyretail_sale_lines
MethodBadgeenumstored: shipments.method — own_van / grab / lalamove / pickup
DriverTextColumnFK, nullablestored: shipments.driver_user_id — Ahmad on own_van rows; null ("—") for Grab / Lalamove / Pickup, drivers are users with role Driver, not a separate tableusers.id
StatusBadgeenumstored: shipments.status — Scheduled / Out for delivery / Delivered / Failed; a simple status field, no custody-bin tracking
POD ✓ indicatorIconColumn, derivedbool, derivedderived: media collection 'pod' exists on this shipment — shown on Delivered rows only
Redelivery chainBadge, amber (Failed → redelivered) / gray (↺ redelivery)FK, selfstored: shipments.redelivery_of_id — RD-26-056 (Failed, kedai closed) carries the amber badge; RD-26-060 carries the ↺ chip pointing back to it; nullable, self-referencing shipments.idshipments.id
DateTextColumn::date()datestored: shipments.scheduled_date

Engine notes

  • Stock movement is IDENTICAL to an OEM shipment: confirming a delivery posts a shipment movement with FEFO batch pick — FG stock and batch-trace don't know channels exist.
  • A failed delivery flips status to Failed; a fresh delivery row is created against the same sale for the next attempt and stamps redelivery_of_id back to the failed row — see RD-26-056 → RD-26-060.
  • Shared-data doctrine: customers is ONE table (channel enum oem/retail/both) and the shipments engine and stock movements are shared. What separates: screens, numbering series (RD-/RS- vs SHP-/SO-), CRM shape, e-invoicing path (consolidated vs per-order).