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&DMakeBuyStockPlanItemsGMPAdminInsights

Retail price lists

Edit floors in Sell → Price lists (owner)
1 below-floor approval pending: Kedai Pak Din — Kopi Cik Abang @ 2.80 (floor 3.00). The sale line is locked; staff cannot confirm it until the owner decides.
✓ Approved once by Leo Lim · 07 Jul — the 2.80 line on draft RS-26-042 is unlocked; staff can confirm the sale. Floor stays 3.00 (only an owner edit in Sell → Price lists moves it).
Rejected by Leo Lim · 07 Jul — line stays locked; staff must raise to ≥ 3.00 or drop the line. Note:
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
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 — the lock is IDENTICAL to OEM: line cannot be confirmed by non-owner rolesvariant_prices
Pending approval bannerBanner + Actions (owner role)storedapproval_requests — same flow as Sell; "Approve once" clears that sale line only, the floor itself is untouched. outcome: status approved_once / rejected, decided_by, decided_at — approving once never edits variant_pricesapproval_requests

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 is a policy, not a warning — below-floor lines lock and notify the owner in both channels. There is no "retail discount" backdoor.
  • Approving 2.80 once does not move the 3.00 floor; only an owner edit in Sell → Price lists changes variant_prices.