| Rev |
Age |
Author |
Path |
Log message |
Diff |
| 37818 |
7 d 11 h |
amit |
/trunk/profitmandi-fofo/src/ |
feat(movement): allow full movable qty on PO screen, split raised as separate POs
- Cap the movement quantity at everything that can move; stock at more than one cost is
raised as one PO per cost on create (dao r37817). Note replaces 'raise a separate PO'.
- Tests: split by cost, multi-item PO grouping, same-warehouse refusal, shelf before arriving.
- jsVersion 440. |
|
| 37786 |
12 d 10 h |
amit |
/trunk/profitmandi-fofo/src/main/ |
fix(po): read PO lines only from the PO items table
Create PO collected rows from every table on the page ($("table > tbody > tr")). The aging-SKU
approval modal added in r37750 has its own table (#pmscpFlaggedRows); after a flagged attempt was
abandoned, its rows were sent as lines with itemId 0 and the server rejected the PO with
"Items are duplicate [0]". The create, add-row and over-cap loops now read #purchase-order-table only.
Bump JS version to 438. |
|
| 37770 |
13 d 8 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 |
|
| 37750 |
14 d 8 h |
ranu |
/trunk/ |
aging sku purchasing need to approval of niranjan kala sir |
|
| 37723 |
19 d 10 h |
amit |
/trunk/profitmandi-fofo/src/ |
Bulk-uploaded movement rows are validated on screen; popup shows arriving stock per PO
Bulk upload only fills the PO screen - the PO is created from the screen. It used to price
with resolvePrices(qty), so one row over what could move rejected the whole file. It now prices
from describeAvailability (same cost layer order creation uses) and never refuses on quantity:
over-cap rows turn red on render, createPO blocks while any row is red and lists them, and
the server checks again on create. An item with no stock and nothing arriving still fails
the upload (nothing to price).
Popup reads in stock + arriving (per PO, <- supplier) - promised (per PO) = can move; the
'Of these, still to arrive' line is gone. Tests for the Oppo A6 UP->Noida case. jsVersion 433.
Needs dao r37722. |
|
| 37711 |
19 d 22 h |
amit |
/trunk/ |
Bulk-uploaded PO rows show the same availability breakdown as hand-picked ones
A row added by hand showed what the warehouse holds, what older orders have promised and how many
units the order could take; the same row arriving from a bulk upload showed none of it. The file
was the one place the numbers behind a quantity were hidden, which is the case where a mistake is
least visible and hardest to unpick afterwards.
describeAvailability now also answers for a list of items. Both reads it needs already took a
list, so a whole file costs the same two queries a single item does rather than two per row. An
item the warehouse holds nothing of is left out of the result instead of failing the upload - its
quantity is still checked when the order is priced, and the row simply shows no breakdown.
The single-item and batch paths build their answer from one shared method, so the two cannot drift
apart, and the screen reuses the renderer it already had. |
|
| 37707 |
19 d 23 h |
amit |
/trunk/profitmandi-fofo/src/main/ |
GRN price mismatch: say which PO the invoice will be received against, and what to do if it closes first
Resolving a price mismatch discards the PO line and raises a replacement dated to the invoice. That
replacement is what the invoice is received against, so it is the one that has to stay open long
enough for the stock to arrive - and it closes on its own after four days for a movement, six for a
vendor order. Until now nothing said so: the GRN simply stopped matching and the correction sat
holding stock that had already arrived.
The confirmation now states what is about to happen and what to do if the stock lands late, and the
request screen explains what Po Id is. Reopening is offered only where it exists - a movement can be
reopened from Purchase Orders, a vendor order cannot and needs a fresh PO. |
|
| 37704 |
19 d 23 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. |
|
| 37701 |
20 d 2 h |
amit |
/trunk/profitmandi-fofo/src/ |
PO create: expected stock counts toward the quantity, popover wording follows
Stock still to arrive is now part of what the order can take, so the breakdown reports it as a
qualifier on that number rather than as something set aside - 'Of these, still to arrive' instead
of 'On the way in (not yet received)', which read as though it could not be ordered.
Tests follow the two rule changes: expected receipts can be ordered against, a quantity beyond
what is held and expected together is still refused and says so, and availability counts expected
receipts toward what can move. 21 tests pass. |
|
| 37699 |
20 d 4 h |
amit |
/trunk/profitmandi-fofo/src/main/ |
Fix: movement availability popover rendered empty except the closing note
The breakdown was built as a table. Bootstrap 3.4.1 sanitizes popover content against a
whitelist that includes neither table nor its rows and cells, and it removes a non-whitelisted
element together with everything inside it - so the whole table was dropped and only the note
survived, leaving a popover that referred to orders that were not shown.
Rebuilt from divs and spans, which are whitelisted. Sanitizing stays on rather than being
switched off for this popover: the content carries PO numbers and warehouse names read out of
the database.
Also stops the zero-quantity note pointing at orders that are not there - a warehouse whose
only stock is still inbound has nothing promised to point at. jsVersion bumped. |
|
| 37697 |
20 d 5 h |
amit |
/trunk/profitmandi-fofo/src/ |
PO create: show what can move, and which orders hold the rest, while the quantity is typed
Picking an item on a movement order already called getPricing, which read the sending
warehouse's stock and returned only a price. It now returns the availability too, so the row
can show it: an info marker beside the quantity box opens the breakdown - in stock, promised
with each holding order named by PO number and date, anything still arriving, and the quantity
this order can take.
The quantity box flags the moment what is typed passes that cap, so it is corrected before
submitting rather than after being refused. The marker turns amber when stock is partly
promised and red when none can move.
Outside vendors are unaffected: their pricing response carries no availability and their rows
are left exactly as they were. jsVersion bumped so the screen picks up the new script.
Tests cover the four cases that matter: what can move with orders named, zero movable reported
rather than refused, this order's cap kept separate from what the warehouse holds when stock
came in at two costs, and a warehouse holding none of the item still refusing. |
|
| 37564 |
28 d 0 h |
amit |
/trunk/profitmandi-fofo/src/main/ |
Creation screens request only live listings from the item typeahead
/item takes an activeOnly flag (default false, preserving current behaviour)
and passes it to getAllPartnerItemStringDescription. getItemAheadOptions takes
an optional 4th argument, so existing 3-argument callers are unaffected.
Sent true from the two creation entry points:
- warehouse purchase (PO) invoice line picker
- the new-price-drop modal (#typeaheaditem)
Left false where the screen works on records that already exist and may since
have been delisted: the price-drop pause/manage picker (#typeaheaditem1),
catalog-item, combo and prebooking.
jsVersion 419 -> 420 to cache-bust common.js / warehouse-purchase.js (419 was
already taken by another change). |
|
| 37072 |
86 d 9 h |
amit |
/trunk/profitmandi-fofo/src/main/ |
PO creation: alert on missing approved vendor price + JS version bump 378 (T10); POST whitespace sanitizer deserializer + VendorController search fix (T9.5) |
|
| 36532 |
147 d 15 h |
amit |
/trunk/ |
Fix moveToBill to use net availability, add bulk PO items upload UI with template download |
|
| 36520 |
149 d 12 h |
amit |
/trunk/profitmandi-fofo/src/main/ |
Add total quantity display on PO create page |
|
| 36299 |
173 d 11 h |
amit |
/trunk/profitmandi-fofo/src/main/ |
GRN correction: surface autoApproved flag to UI
Controller returns {status, autoApproved} JSON; JS shows an
'auto-approved' message when the request bypasses approval, otherwise
the existing 'raised for approval' message. Pairs with dao r36298. |
|
| 36206 |
184 d 7 h |
amit |
/trunk/profitmandi-fofo/src/main/webapp/ |
GRN correction: split space/comma-separated IMEIs in frontend, validate count, update placeholder text |
|
| 35884 |
221 d 11 h |
amit |
/trunk/profitmandi-fofo/src/main/webapp/ |
Update GRN correction UI: rename labels, add IMEI field for serialized item corrections |
|
| 35806 |
230 d 7 h |
amit |
/trunk/profitmandi-fofo/src/main/ |
Add GRN correction controller, views, and JS. Fix XSS in correction detail template, add self-approval prevention, add null check on requestId |
|
| 34047 |
665 d 10 h |
tejus.lohani |
/trunk/profitmandi-fofo/src/main/ |
create po only if status is update like, HOD , FAST MOVING , etc present , if not then first add update that item then able to create po of that item |
|