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 price lists

Edit floors in Sell → Price lists (owner)
Below-floor retail sales complete immediately — the owner gets a notification (soft floor). OEM sales keep the hard lock in Sell → Price lists.
Floor & list prices SHARED TABLE — the exact same variant_prices as Sell → Price lists not a retail copy: one floor per product, set once by the owner, enforced identically on OEM SOs and retail sales
Product Floor price List price Updated Where it's edited

Pack sizes: STC30 1 ctn = 24 boxes (confirm pack size), 1 box = 15 sachets · Double Root Coffee 1 ctn = 30 pcs.

Retail customer price memory — same memory engine as OEM, scoped to customers with channel retail / both; auto-fills their next sale
Customer Product Last paid Band (min–max) Orders Last order Flag

Project Gaia — static mockup in Filament v3 idiom. No backend. Retail module; customer data shared with OEM underneath (channel-flagged), screens separated. The Double Root RM 5–8 band is the founder's real example; OEM price memory (Roy KL Trading, Yes Global, …) lives in Sell → Price lists over the same tables.

Retail price lists — field manifest

FieldFilament componentTypeSourceFK target
Floor / List priceTextColumn (read-only here; TextInputColumn owner-only in Sell)moneystored: variant_prices (variant_id, floor_price, list_price) — ONE shared table, no retail copy. Same rows Sell → Price lists editsvariants.id
Price memory (last paid / band)Table, derivedderivedcustomer+variant last price and min–max band from sale history (OEM SO lines + retail sale lines feed the same memory); THIS VIEW scoped to customers.channel ∈ {retail, both}customers / variants
FlagBadge, derivedderivedBELOW FLOOR when price < variant_prices.floor_price — in retail this is a SOFT floor: the sale posts immediately and a notification goes to the owner. No lock, no approval_requests rowvariant_prices

Engine notes

  • Shared-data doctrine: ONE customers table (channel enum oem / retail / both) and ONE variant_prices table — data shared, views scoped. What separates Retail from Sell: screens, numbering series (RS- vs SO-), CRM shape (book vs pipeline), e-invoicing path (consolidated vs per-order).
  • Floor enforcement differs by channel: retail is a soft floor (sale completes, owner notified after the fact); OEM in Sell → Price lists keeps the hard lock (line cannot be confirmed by non-owner roles, approval_requests workflow). Counter staff move faster; the owner still sees every below-floor retail sale.
  • Neither channel's below-floor path ever edits variant_prices — only an explicit owner edit in Sell → Price lists moves the floor.