| Rev |
Age |
Author |
Path |
Log message |
Diff |
| 37846 |
3 d 20 h |
amit |
/trunk/profitmandi-fofo/src/main/ |
feat(warehouse): dashboards list ACTIVE warehouses only, warehouse-team screens ACTIVE+SUSPENDED (from BillingWarehouseService, WAREHOUSE_MAP gone); global $warehouseNames for labels of data rows in any state; Sellers & Warehouses screen: all-warehouse overview with status tabs, 3-state status, rename, stock/unshipped orders/stores/mapping usage, send stock alert; partner zone offers active warehouses only; brand stock 'All' = active warehouses (replaces r37838 loop); jsVersion 442 |
|
| 37770 |
14 d 20 h |
amit |
/trunk/profitmandi-fofo/src/main/ |
fix(movement): GRN of a movement invoice validated against its own PO + billed IMEIs; Reopen removed; PO list shows Created By; supplier state from GSTIN; jsVersion 436 |
|
| 37705 |
21 d 10 h |
amit |
/trunk/profitmandi-fofo/src/main/ |
PO list: show the transaction id so a movement can be found from the invoice being received
An internal movement is raised as a transaction, so the invoice on the GRN desk leads straight back to its PO
through that id. The list is a DataTable, so having the column makes it searchable - which is how someone finds
the PO to reopen when a receipt arrives after auto-close, instead of hunting through date ranges.
Placed after Status so existing column positions are unchanged. |
|
| 37704 |
21 d 10 h |
amit |
/trunk/ |
Reopen a movement PO whose stock arrived late, and stop stranding GRN price corrections
Internal movements auto-close after four days, which fits 99.6% of them - 5,491 of 5,515 receipts
land inside the window. The remainder leave the PO closed with the stock still in transit and
nowhere to receive it: 998 internal POs closed during 2026 still holding 21,996 unreceived units.
A closed movement PO can now be reopened from the purchase order list. Reopening stamps
reopenedAt, and auto-close measures from WarehousePurchaseOrder.getOpenSince() - reopenedAt when
set, the PO date otherwise - so a reopened PO gets the same fresh window a new one gets instead of
being closed straight back on the next sweep. Only movements between our own warehouses: an
external vendor PO that has closed is settled with that vendor, not reopened unilaterally.
Separately, a GRN price correction now checks that the PO it just raised is one the invoice can
actually be received against. Matching reads POs that are open and approved for the same supplier
and warehouse dated on or before the invoice; it never looks at the PO being corrected, so what
matters is that the new PO is receivable. 54 were not - backdated into INIT by the old approval
gate, hence outside the match - and each stranded silently: original line discarded, GRN completed
without it, the correction left holding a reservation for stock that had already arrived.
isOpen() names the open set - INIT, READY, PARTIALLY_FULFILLED - that the movement and commitment
queries already read.
Migration sql/add_po_reopened_at_20260918.sql adds reopenedAt, nullable and additive. It must run
before this ships: the entity maps the column. |
|
| 37088 |
87 d 0 h |
amit |
/trunk/profitmandi-fofo/src/main/ |
Add Warehouse column to purchase order listing (warehouseId -> name via WAREHOUSE_MAP) |
|
| 32145 |
1214 d 2 h |
tejbeer |
/trunk/ |
change |
|