Mango.Nop.Plugins/Nop.Plugin.Misc.AIPlugin/docs/PREORDER/PREORDER_ISSUES.md

3.0 KiB

PRE-ORDER — Known Issues

Companion to README.md. Topic PREO, prefix MGFBANKPLUG → entry IDs MGFBANKPLUG-PREO-I-<RAND> (issue) / -B- (confirmed bug). ID format, Status vocabulary, type codes and archival are not restated here — see ../../.github/TOPIC_CODES.md (which points to the framework registry). Entry template: follow AyCode.Core/.github/META_ISSUES.md.

Scope: bugs / inconsistent or observable edge-case behaviour in the pre-order subsystem — placement, allocation/conversion, conversion window, expiry sweep, order create/append, product replacement, status derivation, pricing.

Active entries

MGFBANKPLUG-PREO-B-K7M2: A konverziós pool dupla-számolja a már teljesített foglalásokat — alul-allokáció

Status: Open (2026-06-15) · Priority: P2 · Type: B (megerősített bug)

PreOrderConversionService.BuildIncomingQuantityPoolAsync (Services/PreorderConversionService.cs) a rendelkezésre álló mennyiségből kétszer vonja le a korábbi futásokban már teljesített (Fulfilled/PartiallyFulfilled) preorder-tételeket.

  • AvailableQuantity = StockQuantity + IncomingQuantity (SCHEMA.md), az élő Product.StockQuantity-ből.
  • Teljesítéskor InsertOrderItemsAsyncAdjustInventoryAsync(-FulfilledQuantity) már csökkenti a StockQuantity-t, így a következő futás AvailableQuantity-je már tartalmazza a foglalást.
  • A pool ezen felül még levonja az alreadyAllocated-et (a Fulfilled/PartiallyFulfilled itemek FulfilledQuantity összegét) → futások közötti dupla-levonás.

Reprodukció: Stock=0, Incoming=10. „A" preorder 6-ot teljesít (run 1) → Stock=-6, allocated=6. „B" preorder 6-ot kér (run 2): available = -6+10 = 4, committed = 6pool = max(0, 4-6) = 0. B nem kap semmit, pedig fizikailag 4 jár neki. Az alul-allokáció a „még nincs beérkezve" eset — az előrendelés tipikus forgatókönyve.

Miért nem puszta törlés a fix: a CreateOrderAsync korai return-jei (nincs Customer / nincs számlázási cím, sorok ~300-319) úgy lépnek ki, hogy az item a fő ciklusban (sor ~153) már Fulfilled-re lett állítva és elmentve, de a készletlevonás nem futott le. Ezeken a hibautakon az alreadyAllocated levonás helyesen kompenzál; a levonás puszta törlése túl-allokációt (overselling) okozna.

Javítási irány (ajánlott): az item csak akkor legyen Fulfilled, ha a rendelés + készletlevonás ténylegesen sikerült (korai return esetén maradjon Pending/visszaállítás), majd ezután eltávolítható a dupláló alreadyAllocated levonás. Így megszűnik az alul-allokáció túl-allokációs kockázat nélkül.

Affected:

  • Services/PreorderConversionService.csBuildIncomingQuantityPoolAsync (a alreadyAllocated levonás), ConvertPreOrdersForProductsAsync fő ciklusa (státusz-mutáció sorrendje), CreateOrderAsync korai return ágai.