<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SmartDukaan &#x2013; /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/</title><description>WebSVN RSS feed &#x2013; SmartDukaan</description><lastBuildDate>Thu, 08 Oct 2026 12:02:13 +0530</lastBuildDate><generator>WebSVN 2.8.6-DEV</generator><language>en</language><link>https://svn.smartdukaan.com/log.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;max=40&amp;</link><atom:link href="https://svn.smartdukaan.com/rss.php?isdir=1&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Mon, 05 Oct 2026 18:48:21 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37845 – feat(warehouse): ACTIVE/SUSPENDED/INACTIVE status + label on sellerwarehouse replace WAREHOUSE_MAP - ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 33 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(warehouse): ACTIVE/SUSPENDED/INACTIVE status + label on sellerwarehouse replace WAREHOUSE_MAP - BillingWarehouseService (active for dashboards, active+suspended for warehouse screens, names in every state, 5 min cache); setup service: guarded status change (no suspend while franchise stores or brand mapping route there, no close while stock/unshipped orders), rename, all-warehouse overview with usage; partner store assignable only to an active warehouse; daily stock alert for suspended/inactive warehouses to logistics/accounts top 2 staffed levels + leadership; dashboard warehouse list = active (replaces r37834 stock-holding loop); migration sellerwarehouse_status_display_name_20261005.sql (applied on hadb1)&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/transaction/SellerWarehouse.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/enumuration/warehouse/WarehouseStatus.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/warehouse/PhysicalWarehouseView.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/warehouse/WarehouseStockLine.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/warehouse/WarehouseUsage.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/FofoStoreRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/inventory/InventoryWarehouseRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/inventory/SaholicInventoryCISRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/inventory/SaholicInventoryCISRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/inventory/WarehouseRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/SellerWarehouseRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/SellerWarehouseRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/solr/FofoSolr.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/AdminUser.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/authentication/JWTUtil.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/OfferServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/TransactionServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/RetailerServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/BillingWarehouseService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/BillingWarehouseServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PoStockApprovalDigestServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PoStockApprovalServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/SuspendedWarehouseStockAlertService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/SuspendedWarehouseStockAlertServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseSetupService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseSetupServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseSetupValidator.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/sellerwarehouse_status_display_name_20261005.sql&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/warehouse/BillingWarehouseServiceImplTest.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/warehouse/SuspendedWarehouseStockAlertServiceImplTest.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/warehouse/WarehouseSetupServiceImplTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37845</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37845</guid></item>
<item><pubDate>Fri, 02 Oct 2026 01:53:51 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37830 – feat(movement): one PO per source vendor warehouse and cost - ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 9 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(movement): one PO per source vendor warehouse and cost - layers carry their GOOD/OURS vendor warehouse, orders are raised pinned to it, holds of pinned orders come off their own warehouse, billing takes units at the order&apos;s price first&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/InternalMovementAllocationModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/InternalMovementPriceModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseInventoryItemRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/TransactionService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/TransactionServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InternalMovementPricingServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/warehouse/MovementPoSplitTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37830</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37830</guid></item>
<item><pubDate>Fri, 02 Oct 2026 00:03:38 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37826 – feat(warehouse): previewMovementPurchaseOrders - read-only view of the POs an internal ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(warehouse): previewMovementPurchaseOrders - read-only view of the POs an internal movement would be raised as (margin-scheme apart, one per cost)&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37826</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37826</guid></item>
<item><pubDate>Thu, 01 Oct 2026 21:06:34 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37822 – feat(warehouse): physical warehouse setup service, supplier mapping PO guard, address ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 24 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(warehouse): physical warehouse setup service, supplier mapping PO guard, address active flag&lt;br /&gt;
&lt;br /&gt;
- WarehouseSetupService + WarehouseSetupValidator: create seller (state from GSTIN,&lt;br /&gt;
  unique label/GSTIN), address master (city stored last, 6-digit pin, contact),&lt;br /&gt;
  physical warehouse (OURS/BAD vendor 40 + Dummy/G + sellerwarehouse + mapping in&lt;br /&gt;
  one transaction), activate/deactivate (sellerwarehouse.is_active), remap address&lt;br /&gt;
  with internal store sync. Limits follow column sizes (sql_mode is empty).&lt;br /&gt;
- WarehouseAddressMaster.active: only active addresses are offered for assignment.&lt;br /&gt;
  Migration sql/20261001_warehouseaddressmaster_active.sql (applied on hadb1).&lt;br /&gt;
- PO guard: createPurchaseOrder refuses a supplier with no OURS/GOOD vendor&lt;br /&gt;
  warehouse at the destination (GRN could never receive it).&lt;br /&gt;
  InventoryWarehouseRepository.hasGoodSupplierWarehouse / selectSupplierIdsWithGoodWarehouse&lt;br /&gt;
  use existence checks; 67 pairs carry duplicate OURS/GOOD rows.&lt;br /&gt;
- SellerService.syncInternalStoreAddress(store); RetailerServiceImpl syncs an&lt;br /&gt;
  INTERNAL store&apos;s address when it moves warehouse or becomes internal.&lt;br /&gt;
- Record of 2026-10-01 HR Gurugram setup SQL (seller 21, warehouses 13368/13370/13372).&lt;br /&gt;
- Tests: WarehouseSetupValidatorTest (10), WarehouseSetupServiceImplTest (7).&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/transaction/WarehouseAddressMaster.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/warehouse/NewPhysicalWarehouseRequest.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/warehouse/NewSellerRequest.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/warehouse/NewWarehouseAddressRequest.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/warehouse/PhysicalWarehouseView.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/warehouse/WarehouseAddressView.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/inventory/InventoryWarehouseRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/inventory/InventoryWarehouseRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/WarehouseAddressMappingRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/WarehouseAddressMappingRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/SellerService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/SellerServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/RetailerServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseSetupService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseSetupServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseSetupValidator.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/20261001_delete_hrgn1715_hr_uk_store.sql&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/20261001_hr_gurugram_vendor_warehouses.sql&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/20261001_hr_gurugram_virtual_warehouses.sql&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/20261001_warehouseaddressmaster_active.sql&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/warehouse/WarehouseSetupServiceImplTest.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/warehouse/WarehouseSetupValidatorTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37822</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37822</guid></item>
<item><pubDate>Wed, 30 Sep 2026 16:43:15 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37817 – fix(movement): shelf stock before arriving, one PO per cost, close ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;fix(movement): shelf stock before arriving, one PO per cost, close PO on invoice cancel&lt;br /&gt;
&lt;br /&gt;
- Internal movement fills from shelf stock before stock still arriving (a pending PO dated at&lt;br /&gt;
  midnight ranked ahead of same-day receipts, pricing movements from units that never shipped).&lt;br /&gt;
- A quantity spanning stock at different costs is raised as one PO per cost at once instead of&lt;br /&gt;
  being refused (first PO takes every item&apos;s oldest cost, the next the following cost).&lt;br /&gt;
- Refuse a movement from a warehouse to itself.&lt;br /&gt;
- Cancelling a movement&apos;s invoice/DC takes the order&apos;s qty off its PO and pre-closes it when&lt;br /&gt;
  nothing is left open, as refunds already did.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/InternalMovementAvailabilityModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/OrderRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/OrderRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/PurchaseReturnServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InternalMovementPricingService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InternalMovementPricingServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37817</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37817</guid></item>
<item><pubDate>Thu, 24 Sep 2026 20:16:26 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37776 – returns: reverse a refunded debit-note return whose goods never reached ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 16 file(s) modified&lt;/strong&gt;&lt;br/&gt;returns: reverse a refunded debit-note return whose goods never reached the warehouse&lt;br /&gt;
&lt;br /&gt;
Once a return was refunded nothing could undo it - rejectReturn refuses an already&lt;br /&gt;
refunded one - so a return booked and paid for goods that never arrived left phantom&lt;br /&gt;
warehouse stock, the unit missing from partner stock, the order marked returned, a&lt;br /&gt;
wallet credit and a filed credit note, with no way back.&lt;br /&gt;
&lt;br /&gt;
ReturnReversalService.reverse(imei, reason, by, dryRun) undoes exactly one unit:&lt;br /&gt;
the warehouse return scan (row deleted so a genuine return later is not rejected as a&lt;br /&gt;
duplicate) and the stock it added, partner stock with its schemes/price drop/offers,&lt;br /&gt;
the order&apos;s return quantity and status, the wallet refund as a REVERSAL entry, and the&lt;br /&gt;
return item / debit note. Guards refuse anything that has moved since the refund, and a&lt;br /&gt;
dry run reports the plan without writing.&lt;br /&gt;
&lt;br /&gt;
The credit note follows movement and the NIC clock: inside the 24h window, and only&lt;br /&gt;
when the note credits nothing but this unit, its IRN is cancelled and the note marked&lt;br /&gt;
cancelled; past it a DBN with its own IRN is issued against the note&lt;br /&gt;
(CreditNoteService.issueReturnReversalDebitNote, stored as CN_CANCELLATION with no&lt;br /&gt;
margin month so the statement does not show it twice - the wallet REVERSAL is the&lt;br /&gt;
statement line); a note never filed at NIC is voided locally. Every local write happens&lt;br /&gt;
first and NIC last, so a refusal rolls the whole reversal back.&lt;br /&gt;
&lt;br /&gt;
fofo.return_reversal (return_reversal_20260921.sql) records each reversal and, unique&lt;br /&gt;
per return item, makes it once-only. Also adds cancelled=0 to the RETURNS_CN branches of&lt;br /&gt;
the account statement queries, without which a cancelled note keeps crediting the&lt;br /&gt;
statement - no current effect, no RETURNS note is cancelled today.&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/fofo/ReturnReversal.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/ReturnReversalRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/ReturnReversalRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CreditNoteRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CreditNoteRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/OrderRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/InventoryService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/InventoryServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/ReturnReversalModel.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/ReturnReversalService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/ReturnReversalServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/CreditNoteService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/CreditNoteServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseInventoryService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseInventoryServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/return_reversal_20260921.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37776</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37776</guid></item>
<item><pubDate>Thu, 24 Sep 2026 18:54:23 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37769 – fix(movement): receive a movement invoice only against its own PO, ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 10 file(s) modified&lt;/strong&gt;&lt;br/&gt;fix(movement): receive a movement invoice only against its own PO, stop auto-closing movements, cancel reduces the PO line&lt;br /&gt;
&lt;br /&gt;
- GRN: movement invoice resolves invoice -&gt; orders -&gt; transaction -&gt; its own movement PO (or a receive-only PO&lt;br /&gt;
  from the billing warehouse); supplier/warehouse keyed at entry must match; scanned IMEIs must be the billed ones&lt;br /&gt;
- Cancelling an unbilled movement order takes its qty off the PO line; PO CLOSED/PRECLOSED once nothing is open&lt;br /&gt;
- reopenedAt removed (movements no longer auto-close); PO records createdBy&lt;br /&gt;
- SupplierStateResolver: a supplier&apos;s state is derived from its GSTIN on save&lt;br /&gt;
- sql: add_po_created_by (applied), drop_po_reopened_at (run AFTER fofo/cron/web deploy)&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/warehouse/WarehousePurchaseOrder.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/OrderRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InvoiceService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InvoiceServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/SupplierStateResolver.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/add_po_created_by_20260924.sql&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/drop_po_reopened_at_20260924.sql&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/warehouse&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/warehouse/SupplierStateResolverTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37769</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37769</guid></item>
<item><pubDate>Thu, 24 Sep 2026 13:17:11 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37762 – aging po approval process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;aging po approval process&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PoStockApprovalServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37762</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37762</guid></item>
<item><pubDate>Thu, 24 Sep 2026 12:59:33 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37761 – aging po approval process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;aging po approval process&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/ItemAgingBreakdownModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PoStockApprovalServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/RbmDrrDashboardController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/rbm-drr-dashboard.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37761</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37761</guid></item>
<item><pubDate>Wed, 23 Sep 2026 19:24:55 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37756 – aging po approval process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;aging po approval process&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PoStockApprovalServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37756</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37756</guid></item>
<item><pubDate>Wed, 23 Sep 2026 19:23:32 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37755 – aging po approval process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;aging po approval process&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PoStockApprovalService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37755</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37755</guid></item>
<item><pubDate>Wed, 23 Sep 2026 19:16:30 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37751 – aging po approval mail to some collected users</title><description>&lt;div&gt;&lt;strong&gt;ranu – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;aging po approval mail to some collected users&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/Application.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/migrations/RunOnceTasks.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledTasks.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PoStockApprovalDigestServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37751</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37751</guid></item>
<item><pubDate>Wed, 23 Sep 2026 18:50:55 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37750 – aging sku purchasing need to approval of niranjan kala sir</title><description>&lt;div&gt;&lt;strong&gt;ranu – 15 file(s) modified&lt;/strong&gt;&lt;br/&gt;aging sku purchasing need to approval of niranjan kala sir&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/warehouse/WarehousePurchaseOrder.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/CreateWarehousePurchaseOrderModel.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/ItemAgingStockByVendorModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/PurchaseOrderApprovalRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/PurchaseOrderApprovalRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PoStockApprovalDigestService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PoStockApprovalDigestServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/MonitorController.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/warehouse/PoStockApprovalController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/warehouse/PurchaseOrderController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/warehouse-purchase.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/rbm-drr-dashboard.vm&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/warehouse-po-stock-approvals.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/warehouse-purchase-order-add-item.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37750</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37750</guid></item>
<item><pubDate>Fri, 18 Sep 2026 17:14:46 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37722 – Movement PO availability: list stock arriving into the sending warehouse, ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 6 file(s) modified&lt;/strong&gt;&lt;br/&gt;Movement PO availability: list stock arriving into the sending warehouse, per PO&lt;br /&gt;
&lt;br /&gt;
The popup showed in stock, promised and can-move, but not stock on its way in once it was&lt;br /&gt;
fully promised - so UP to Noida read &apos;in stock 0, promised 4, can move 0&apos; with the 4 units&lt;br /&gt;
arriving on PO 54031 nowhere, and looked wrong. It now reads as a sum:&lt;br /&gt;
in stock + arriving - promised = can move.&lt;br /&gt;
&lt;br /&gt;
- selectOpenInboundPurchases: open POs into the warehouse, one row per PO, same filter as the&lt;br /&gt;
  pending-stock layer so the rows add up to the arriving total&lt;br /&gt;
- InternalMovementAvailabilityModel: arrivingTotal (before holds) + arriving breakup;&lt;br /&gt;
  inbound (after holds) unchanged, still used by the refusal message&lt;br /&gt;
- describeAvailability (single + batch) carries both; batch doc: quantities are no longer&lt;br /&gt;
  checked at bulk upload, the screen flags them and order creation enforces them&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/InternalMovementAvailabilityModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/MovementCommitmentModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseInventoryItemRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseInventoryItemRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InternalMovementPricingService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InternalMovementPricingServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37722</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37722</guid></item>
<item><pubDate>Fri, 18 Sep 2026 05:05:15 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37713 – fix(warehouse): record the order&apos;s own vendor when a receipt line ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;fix(warehouse): record the order&apos;s own vendor when a receipt line carries no origin&lt;br /&gt;
&lt;br /&gt;
- r37694 took the origin only from lineitem.origin_vendor_id, which exists on orders raised from that revision onward, so goods arriving on older open orders landed with a cost but no vendor - 282 rows on the first day&lt;br /&gt;
- A purchase from an outside vendor now falls back to that supplier; internal movements are unchanged and an unknowable origin still stays NULL&lt;br /&gt;
- sql/backfill_receipt_origin_20260918.sql repairs the 282 already received (run on prod 2026-09-18; bak warehouse._bak_receipt_origin_20260918); in-stock unknown 895 -&gt; 648&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/backfill_receipt_origin_20260918.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37713</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37713</guid></item>
<item><pubDate>Fri, 18 Sep 2026 04:54:36 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37711 – Bulk-uploaded PO rows show the same availability breakdown as hand-picked ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;Bulk-uploaded PO rows show the same availability breakdown as hand-picked ones&lt;br /&gt;
&lt;br /&gt;
A row added by hand showed what the warehouse holds, what older orders have promised and how many&lt;br /&gt;
units the order could take; the same row arriving from a bulk upload showed none of it. The file&lt;br /&gt;
was the one place the numbers behind a quantity were hidden, which is the case where a mistake is&lt;br /&gt;
least visible and hardest to unpick afterwards.&lt;br /&gt;
&lt;br /&gt;
describeAvailability now also answers for a list of items. Both reads it needs already took a&lt;br /&gt;
list, so a whole file costs the same two queries a single item does rather than two per row. An&lt;br /&gt;
item the warehouse holds nothing of is left out of the result instead of failing the upload - its&lt;br /&gt;
quantity is still checked when the order is priced, and the row simply shows no breakdown.&lt;br /&gt;
&lt;br /&gt;
The single-item and batch paths build their answer from one shared method, so the two cannot drift&lt;br /&gt;
apart, and the screen reuses the renderer it already had.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InternalMovementPricingService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InternalMovementPricingServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/warehouse/PurchaseOrderController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/warehouse-purchase.js&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37711</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37711</guid></item>
<item><pubDate>Fri, 18 Sep 2026 04:18:12 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37704 – Reopen a movement PO whose stock arrived late, and stop ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 8 file(s) modified&lt;/strong&gt;&lt;br/&gt;Reopen a movement PO whose stock arrived late, and stop stranding GRN price corrections&lt;br /&gt;
&lt;br /&gt;
Internal movements auto-close after four days, which fits 99.6% of them - 5,491 of 5,515 receipts&lt;br /&gt;
land inside the window. The remainder leave the PO closed with the stock still in transit and&lt;br /&gt;
nowhere to receive it: 998 internal POs closed during 2026 still holding 21,996 unreceived units.&lt;br /&gt;
&lt;br /&gt;
A closed movement PO can now be reopened from the purchase order list. Reopening stamps&lt;br /&gt;
reopenedAt, and auto-close measures from WarehousePurchaseOrder.getOpenSince() - reopenedAt when&lt;br /&gt;
set, the PO date otherwise - so a reopened PO gets the same fresh window a new one gets instead of&lt;br /&gt;
being closed straight back on the next sweep. Only movements between our own warehouses: an&lt;br /&gt;
external vendor PO that has closed is settled with that vendor, not reopened unilaterally.&lt;br /&gt;
&lt;br /&gt;
Separately, a GRN price correction now checks that the PO it just raised is one the invoice can&lt;br /&gt;
actually be received against. Matching reads POs that are open and approved for the same supplier&lt;br /&gt;
and warehouse dated on or before the invoice; it never looks at the PO being corrected, so what&lt;br /&gt;
matters is that the new PO is receivable. 54 were not - backdated into INIT by the old approval&lt;br /&gt;
gate, hence outside the match - and each stranded silently: original line discarded, GRN completed&lt;br /&gt;
without it, the correction left holding a reservation for stock that had already arrived.&lt;br /&gt;
&lt;br /&gt;
isOpen() names the open set - INIT, READY, PARTIALLY_FULFILLED - that the movement and commitment&lt;br /&gt;
queries already read.&lt;br /&gt;
&lt;br /&gt;
Migration sql/add_po_reopened_at_20260918.sql adds reopenedAt, nullable and additive. It must run&lt;br /&gt;
before this ships: the entity maps the column.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/purchaseorder/POScheduler.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/warehouse/WarehousePurchaseOrder.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/GrnRequestServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/add_po_reopened_at_20260918.sql&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/warehouse/PurchaseOrderController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/warehouse-purchase.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/warehouse-purchase-order.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37704</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37704</guid></item>
<item><pubDate>Fri, 18 Sep 2026 04:10:51 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37703 – GRN price mismatch: ask for the original PO to be ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;GRN price mismatch: ask for the original PO to be reopened instead of stranding a correction PO&lt;br /&gt;
&lt;br /&gt;
Resolving a price mismatch raised a correction PO dated to the supplier invoice, and stored its id&lt;br /&gt;
on the GRN request item to receive against. But by then the stock has already arrived and the PO it&lt;br /&gt;
corrects is closed - every one of the 54 raised this way had its mapped PO in CLOSED. The&lt;br /&gt;
correction therefore had nowhere to land: the GRN completed against the original, nothing was ever&lt;br /&gt;
received against the correction, and it sat holding a reservation for stock that was not coming.&lt;br /&gt;
Backdated by nature, it also parked in INIT under the old approval gate, so it could not have been&lt;br /&gt;
received even if anyone tried.&lt;br /&gt;
&lt;br /&gt;
Resolving a mismatch against a closed PO now says so and names it, asking for that purchase order&lt;br /&gt;
to be reopened first, rather than silently creating a second PO that cannot be used.&lt;br /&gt;
&lt;br /&gt;
WarehousePurchaseOrder.isOpen() names the open set - INIT, READY, PARTIALLY_FULFILLED - that the&lt;br /&gt;
movement and commitment queries already read, so it stops being restated per caller.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/warehouse/WarehousePurchaseOrder.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/GrnRequestServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37703</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37703</guid></item>
<item><pubDate>Fri, 18 Sep 2026 04:06:59 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37702 – Internal movement: an unapproved PO no longer dispatches stock  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Internal movement: an unapproved PO no longer dispatches stock&lt;br /&gt;
&lt;br /&gt;
A PO raised on one of our own warehouses also raises the order that moves the stock, and that&lt;br /&gt;
order pays and processes immediately - so raising it ships goods. The approval gate never&lt;br /&gt;
governed that half. It set the PO to INIT and mailed an approval link, then created and processed&lt;br /&gt;
the order anyway, several lines later and without consulting the status it had just set. The gate&lt;br /&gt;
held back receiving - PO list, GRN matching, auto-close all skip INIT - while dispatch went ahead&lt;br /&gt;
unconditionally.&lt;br /&gt;
&lt;br /&gt;
That is how PO/07-26/52029 was delivered and invoiced while frozen out of GRN. Its goods had to be&lt;br /&gt;
received against a second PO raised for the purpose, leaving the first holding a phantom&lt;br /&gt;
unfulfilled quantity for two months.&lt;br /&gt;
&lt;br /&gt;
Order creation now waits on approval. WarehousePurchaseOrder.isApproved() names the rule once -&lt;br /&gt;
INIT is the only state before approval, every other state is something the order has already been&lt;br /&gt;
approved to do - matching how the PO list, GRN matching and the auto-close sweep already read it,&lt;br /&gt;
so callers stop restating it.&lt;br /&gt;
&lt;br /&gt;
Backdated POs are approved at creation since r37682, so this holds nothing up today; it is what&lt;br /&gt;
keeps the two halves from separating again if any future rule leaves a PO unapproved. Nothing&lt;br /&gt;
raises the order later, so such a PO simply does not move stock and has to be raised again once&lt;br /&gt;
approved - the safe failure, and it is logged.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/warehouse/WarehousePurchaseOrder.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37702</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37702</guid></item>
<item><pubDate>Fri, 18 Sep 2026 01:05:17 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37700 – Internal movement: order against expected stock, and stop reserving lines ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Internal movement: order against expected stock, and stop reserving lines that can no longer ship&lt;br /&gt;
&lt;br /&gt;
Two rules changed, both about stock that was being treated as unavailable when it is not.&lt;br /&gt;
&lt;br /&gt;
Stock still to arrive now counts toward what a movement order can be raised for. A movement is&lt;br /&gt;
planned against what the warehouse will hold, so the order is raised now and dispatched once the&lt;br /&gt;
stock lands; previously a warehouse holding only inbound stock refused outright, even though the&lt;br /&gt;
receipt was already on an open order.&lt;br /&gt;
&lt;br /&gt;
A purchase order line stops reserving stock once its own order moves past being submitted for&lt;br /&gt;
processing. Billed or shipped means the units have already come off the shelf; cancelled means&lt;br /&gt;
the line can never dispatch them. Holding either back a second time hid stock that was genuinely&lt;br /&gt;
free - on prod, 660 of 675 reserved units were on lines whose orders had already moved on. A line&lt;br /&gt;
whose order has not been raised at all is still a live promise and keeps its hold, and a line is&lt;br /&gt;
held only for the quantity still sitting in an in-process order, so a partly-shipped order&lt;br /&gt;
releases the rest.&lt;br /&gt;
&lt;br /&gt;
priceFor and describeAvailability continue to read stock through one shared examine(), so what is&lt;br /&gt;
shown while choosing a quantity stays exactly what the order is created against.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/InternalMovementPriceModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseInventoryItemRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InternalMovementPricingServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37700</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37700</guid></item>
<item><pubDate>Thu, 17 Sep 2026 22:45:33 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37696 – Internal movement: report what a warehouse can actually send, not ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 6 file(s) modified&lt;/strong&gt;&lt;br/&gt;Internal movement: report what a warehouse can actually send, not just refuse on submit&lt;br /&gt;
&lt;br /&gt;
The quantity a movement order can take was only discovered by submitting the order and being&lt;br /&gt;
refused. The stock reading that decides it already computed everything needed to say so in&lt;br /&gt;
advance - what is on the shelf, what older orders have promised, what is still arriving - and&lt;br /&gt;
then discarded it.&lt;br /&gt;
&lt;br /&gt;
selectOpenOutboundCommitments returns those promises one row per order, with the PO number,&lt;br /&gt;
PO date and destination, instead of a single summed quantity. applyOutboundCommitments now&lt;br /&gt;
aggregates those rows and behaves exactly as before, so no extra query is run.&lt;br /&gt;
&lt;br /&gt;
describeAvailability answers with the price plus that working. It shares one stock reading with&lt;br /&gt;
priceFor via examine(), so the cap shown while choosing a quantity and the cap enforced on&lt;br /&gt;
submit cannot drift apart. Unlike pricing it reports rather than refuses: stock that is entirely&lt;br /&gt;
promised comes back as zero movable with the orders holding it named, which is what lets someone&lt;br /&gt;
chase an abandoned order rather than only see a smaller number.&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/InternalMovementAvailabilityModel.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/MovementCommitmentModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseInventoryItemRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseInventoryItemRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InternalMovementPricingService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InternalMovementPricingServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37696</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37696</guid></item>
<item><pubDate>Thu, 17 Sep 2026 18:19:28 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37694 – feat(warehouse): record where stock came from and what it cost; ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 11 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(warehouse): record where stock came from and what it cost; price internal movements at that cost&lt;br /&gt;
&lt;br /&gt;
- inventoryItem.origin_vendor_id / receipt_unit_cost and lineitem.origin_vendor_id (sql/add_inventory_cost_layer_20260917.sql, applied on prod 2026-09-17 in 75s): GRN copies both from the PO line it arrived on, so origin survives any number of hops and non-serialised stock keeps it too. Unknowable origin stays NULL - never a guess, never an internal supplier&lt;br /&gt;
- A movement now moves stock at the cost it was received at, not the origin vendor&apos;s current catalog TP. Layers are grouped by cost; a quantity spanning two costs is refused with both numbers, since a PO line carries one price&lt;br /&gt;
- Stock already promised on open outbound movement orders is no longer offered again (176 item/warehouse pairs on prod are fully promised today)&lt;br /&gt;
- Stock on open inbound POs is offered for planning at that order&apos;s price and reported as &apos;on the way in&apos;, but cannot be dispatched until received; the PO item picker lists those items too&lt;br /&gt;
- Backfill: 4,010 of 4,646 in-stock rows on prod got origin and cost; 636 stay unknown and are priced from the latest approved external catalog price as before&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/warehouse/WarehouseInventoryItem.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/warehouse/WarehouseLineItem.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/InternalMovementAllocationModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/InternalMovementPriceModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseInventoryItemRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseLineItemRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseLineItemRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InternalMovementPricingServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/add_inventory_cost_layer_20260917.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37694</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37694</guid></item>
<item><pubDate>Thu, 17 Sep 2026 16:40:41 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37682 – feat(warehouse): auto-approve backdated POs in the creator&apos;s name  A ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(warehouse): auto-approve backdated POs in the creator&apos;s name&lt;br /&gt;
&lt;br /&gt;
A backdated PO used to be parked in POStatus.INIT until an HOD clicked a mailed approval link. INIT&lt;br /&gt;
keeps a PO out of the PO list, out of GRN/invoice matching and out of the auto-close sweep, so an&lt;br /&gt;
unclicked PO was frozen rather than merely pending - 440 had accumulated since 2024, of 2547 approval&lt;br /&gt;
rows only 2023 were ever clicked.&lt;br /&gt;
&lt;br /&gt;
- every PO now goes READY at creation, backdated or not&lt;br /&gt;
- the warehouse.poapproval row is still written, stamped approvedOn=now and approvedBy=&amp;lt;creator&gt; by&lt;br /&gt;
  recordAutoApproval(), since that row is what identifies a PO as backdated and who backdated it&lt;br /&gt;
- the HOD mail survives as a notification: names the creator, no approval link, PDF still attached&lt;br /&gt;
- /approve-po-date/* endpoints kept so links already sent do not 404&lt;br /&gt;
&lt;br /&gt;
Completes r37679-81. Backfill for the three POs still inside POScheduler&apos;s window is staged at&lt;br /&gt;
profitmandi-dao/src/main/resources/sql/backdated_po_auto_approval_backfill_20260917.sql, not run.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37682</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37682</guid></item>
<item><pubDate>Thu, 17 Sep 2026 16:29:06 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37679 – feat(warehouse): carry the PO creator through purchase order creation for ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(warehouse): carry the PO creator through purchase order creation for backdated auto-approval&lt;br /&gt;
&lt;br /&gt;
Backdated POs are to be auto-approved in the name of whoever raised them, but the service had no way&lt;br /&gt;
to know who that was: the model carried no user and buyerId is the seller, not a person.&lt;br /&gt;
&lt;br /&gt;
- CreateWarehousePurchaseOrderModel carries createdBy&lt;br /&gt;
- resolvedMismatchRequest takes resolvedBy, so the correction PO raised on a GRN price mismatch -&lt;br /&gt;
  dated to the supplier invoice and therefore backdated by nature - is credited to whoever resolved it&lt;br /&gt;
- staged backfill SQL for the three backdated POs still stuck in INIT inside POScheduler&apos;s&lt;br /&gt;
  auto-close window; data only, no schema change, not yet run&lt;br /&gt;
&lt;br /&gt;
The release-to-READY change in PurchaseOrderServiceImpl follows separately.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/CreateWarehousePurchaseOrderModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/GrnRequestService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/GrnRequestServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/backdated_po_auto_approval_backfill_20260917.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37679</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37679</guid></item>
<item><pubDate>Mon, 14 Sep 2026 17:10:35 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37622 – feat(billing): price warehouse billing from the external supplier of the ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 9 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(billing): price warehouse billing from the external supplier of the billed stock; auto-approve price drop DP/MOP into vendor catalog pricing&lt;br /&gt;
&lt;br /&gt;
- BillingPricingService resolves TP/NLC per order from vendor_catalog_pricing of the most recent external supplier of the units scanned out (serial trace, else own external PO); units reversed by SALE_RET are ignored&lt;br /&gt;
- Falls back to the latest approved external catalog price when no supplier can be traced; vendorId stays the warehouse vendor&lt;br /&gt;
- addBillingDetailsForGrouppedOrders no longer reads vendoritempricing (removes NPE when the row is missing); order.vendorId set to the origin supplier&lt;br /&gt;
- VendorCatalogPricingService.applyPriceDrop writes approved pricing logs for external vendors with the price drop DP/MOP, keeping each vendor&apos;s TP on the effective date&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/BillingPriceModel.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/InventoryItemExternalOriginModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseInventoryItemRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseInventoryItemRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/VendorCatalogPricingService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/VendorCatalogPricingServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/TransactionServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/BillingPricingService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/BillingPricingServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37622</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37622</guid></item>
<item><pubDate>Sun, 13 Sep 2026 02:37:36 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37612 – Value an internal PO&apos;s cart the same way the transaction ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Value an internal PO&apos;s cart the same way the transaction validates it&lt;br /&gt;
&lt;br /&gt;
Creating an internal PO failed with &quot;Cart Value-Payment value mismatch&quot; whenever a line&lt;br /&gt;
carried paise and the quantity was more than a handful. Two places were computing the same&lt;br /&gt;
cart total from the same stored float through two different decimal conversions, so they&lt;br /&gt;
disagreed on the value of prices binary cannot hold exactly.&lt;br /&gt;
&lt;br /&gt;
createOrderInternally read WarehouseLineItem.unitPrice through String.valueOf, which&lt;br /&gt;
resolves a float via Float.toString and yields 10499.99, while createTransactionForWarehouse&lt;br /&gt;
re-values the persisted cart lines with BigDecimal.valueOf, which widens that same float to&lt;br /&gt;
double and yields 10499.990234375. The per-unit gap is around two ten-thousandths of a rupee;&lt;br /&gt;
quantity multiplies it, and it crosses the 0.001 tolerance the validator allows at a quantity&lt;br /&gt;
of five. Round prices are exact in binary and passed, which is why this looked intermittent&lt;br /&gt;
rather than total - across randomised carts the old arithmetic disagreed 98% of the time.&lt;br /&gt;
&lt;br /&gt;
The total is no longer computed in its own loop. It is derived from the cart items that are&lt;br /&gt;
about to be written, using the conversion and the line-inclusion rule the validator applies,&lt;br /&gt;
so both sides are the same function over the same rows and cannot drift apart. That also&lt;br /&gt;
brings across two rules the PO side never had: quantities of zero or less, which&lt;br /&gt;
addItemsToCart drops and which therefore never reach the validated total, and the one paisa&lt;br /&gt;
carry bag, which the validator treats as a marker line rather than a billed one. Either of&lt;br /&gt;
those reaching an internal PO would have failed it outright, and a carry bag is only a&lt;br /&gt;
rounding error away from the paisa-per-unit pricing used for FOC stock.&lt;br /&gt;
&lt;br /&gt;
The wallet top-up still truncates the total to whole rupees, and now lands within a rupee of&lt;br /&gt;
where it did before, well inside the twenty rupee buffer it already carried. Nothing outside&lt;br /&gt;
internal PO creation is touched: the validator, bulk orders and the refurb split keep their&lt;br /&gt;
existing numbers, and the wallet debit is driven by the order totals, not by this value.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37612</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37612</guid></item>
<item><pubDate>Sun, 13 Sep 2026 01:49:46 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37610 – Carry stock with no recorded origin along instead of refusing ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Carry stock with no recorded origin along instead of refusing the movement&lt;br /&gt;
&lt;br /&gt;
A movement was refused whenever an item had some stock traceable to a vendor and some whose&lt;br /&gt;
origin was never recorded, telling the user to raise a second purchase order for the rest.&lt;br /&gt;
Unrecorded stock has no vendor of its own, so that second order carried no more information&lt;br /&gt;
than the first - and the prices were identical anyway: boAt 34336 at 85 both ways, Samsung&lt;br /&gt;
36343/36344 at 1099, Riversong 36589 at 524, 36590 at 657. Bulk uploads of 200 rows were&lt;br /&gt;
dying on the first such item, repeatedly.&lt;br /&gt;
&lt;br /&gt;
Only a second ORIGINAL VENDOR stops an order now, which is the case the refusal was for: a&lt;br /&gt;
line item holds one price per item, so units genuinely bought from someone else cannot ride&lt;br /&gt;
along. Unrecorded units move with the oldest stock at its price. They are not attributed to&lt;br /&gt;
that vendor as a fact - nothing persists origin today, but if that is ever added they must&lt;br /&gt;
not be stamped from this.&lt;br /&gt;
&lt;br /&gt;
The refusal also reported unrecorded stock as moving at 0.00. Such a bucket carries no price&lt;br /&gt;
until it is resolved from the catalog when units are allocated, so reading one off it early&lt;br /&gt;
reported perfectly good stock as worthless. Both sides of the message now resolve the price&lt;br /&gt;
the same way the allocation does.&lt;br /&gt;
&lt;br /&gt;
Three tests added: a mixed traceable/unrecorded item moves in one order, two genuinely&lt;br /&gt;
different vendors still refuse, and no message quotes a zero price from either side.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InternalMovementPricingServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37610</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37610</guid></item>
<item><pubDate>Sat, 12 Sep 2026 18:29:44 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37609 – Offer the stock a warehouse actually holds when ordering from ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Offer the stock a warehouse actually holds when ordering from an internal supplier&lt;br /&gt;
&lt;br /&gt;
The purchase order item picker listed whatever the supplier had vendor catalog pricing rows&lt;br /&gt;
for. For an outside vendor that is right - the order is for stock nobody holds yet, so their&lt;br /&gt;
catalogue is the only sensible list. For one of our own warehouses it is not: a movement can&lt;br /&gt;
only send stock that is standing there, and the pricing rows were never a statement about&lt;br /&gt;
stock. Vendor 275 was offering 6,845 items while Noida held 79; Delhi 6,637 against 330.&lt;br /&gt;
&lt;br /&gt;
It also made the picker depend on data the movement no longer needs. Pricing for internal&lt;br /&gt;
suppliers is derived from the stock itself since r37603, so those rows are inert - but&lt;br /&gt;
clearing them emptied the picker completely, because selectVendorItems joins&lt;br /&gt;
VendorCatalogPricing to Item and an internal supplier then matched nothing.&lt;br /&gt;
&lt;br /&gt;
Internal suppliers now list distinct items with currentQuantity &gt; 0 in their mapped&lt;br /&gt;
warehouse. External suppliers are untouched and still list from vendor catalog pricing.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseInventoryItemRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseInventoryItemRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37609</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37609</guid></item>
<item><pubDate>Sat, 12 Sep 2026 17:00:04 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37603 – Price internal warehouse movements from the stock&apos;s original vendor  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 11 file(s) modified&lt;/strong&gt;&lt;br/&gt;Price internal warehouse movements from the stock&apos;s original vendor&lt;br /&gt;
&lt;br /&gt;
Stock moving between our own warehouses was priced from the sending internal supplier&apos;s&lt;br /&gt;
own vendor catalog, which only ever holds prices copied from elsewhere - so every hop let&lt;br /&gt;
the price drift further from what the group actually paid, and a movement was blocked&lt;br /&gt;
outright whenever that supplier happened to have no row for the item.&lt;br /&gt;
&lt;br /&gt;
It is now derived from the stock being moved: the original EXTERNAL vendor is established&lt;br /&gt;
per unit and that vendor&apos;s current catalog price is used. Origin is looked for in&lt;br /&gt;
descending order of certainty - the serial traced back to the external purchase that first&lt;br /&gt;
brought the unit in, then the unit&apos;s own inbound PO when that was external, both of which&lt;br /&gt;
are facts that survive any number of internal hops. Non-serialised stock that has already&lt;br /&gt;
moved internally has no recoverable origin at all, since fungible units carry no identity&lt;br /&gt;
and the movement records nothing linking the receiving row to its source, so those fall&lt;br /&gt;
back to the most recent externally approved price for the catalog and are never recorded&lt;br /&gt;
as though their vendor were known.&lt;br /&gt;
&lt;br /&gt;
A purchase order carries one price per item, so an item can only move from one original&lt;br /&gt;
vendor at a time. Where a requested quantity would run past the oldest vendor&apos;s stock into&lt;br /&gt;
another&apos;s, this refuses and reports how many can move now and at what price, leaving the&lt;br /&gt;
second order to whoever is moving the stock, rather than averaging the two or silently&lt;br /&gt;
splitting the order. Each order therefore stays attributable to one vendor.&lt;br /&gt;
&lt;br /&gt;
Receiving no longer validates price for these movements: both sides of the comparison come&lt;br /&gt;
from the same derivation, so a mismatch cannot mean anything. That also removes a null&lt;br /&gt;
dereference in GrnRequestServiceImpl, which assumed every supplier has a circular.&lt;br /&gt;
&lt;br /&gt;
Removes addVendorPricingIfMissing, which wrote permanent approved pricing rows onto internal&lt;br /&gt;
suppliers sourced from hardcoded vendor 334 for Samsung or an arbitrary findFirst() vendor&lt;br /&gt;
otherwise, stamped with hardcoded auth ids. Those rows are now not just unnecessary but&lt;br /&gt;
harmful: they would pin a stale price that wins over the derived one.&lt;br /&gt;
&lt;br /&gt;
Verified against live data: covers every unit in every warehouse with none unresolved,&lt;br /&gt;
agrees exactly with the origin join the FOCO/ImeiSupplierPricing report already runs in&lt;br /&gt;
production, and prices 12,305 of 13,589 units within 2% of what was actually paid.&lt;br /&gt;
Resolution takes 0.7ms for one item and 1.1ms for ten.&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/InternalMovementAllocationModel.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/InternalMovementPriceModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/inventory/VendorCatalogPricingLogRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/inventory/VendorCatalogPricingLogRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseInventoryItemRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseInventoryItemRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/GrnRequestServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InternalMovementPricingService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InternalMovementPricingServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/InvoiceServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37603</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37603</guid></item>
<item><pubDate>Thu, 13 Aug 2026 13:55:10 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37302 – Split refurbished (margin scheme) items into their own order at ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Split refurbished (margin scheme) items into their own order at placement&lt;br /&gt;
&lt;br /&gt;
Refurbished lines are invoiced on the RF- series, but only the partner checkout path&lt;br /&gt;
split them out. Internal POs and bulk orders raised a single mixed transaction, which&lt;br /&gt;
billed as one invoice on whichever series its first line happened to resolve to&lt;br /&gt;
(NSPJB2757, NSPJB3212, NSUPDL3898/3899/4365/4366).&lt;br /&gt;
&lt;br /&gt;
- PurchaseOrderServiceImpl: split a mixed internal PO into a regular PO and a margin&lt;br /&gt;
  scheme PO, each with its own PO number, PDF and internal transaction. External vendor&lt;br /&gt;
  POs raise no transaction, so they are left intact.&lt;br /&gt;
- BulkOrderService: raise one transaction per billing group, each with its own loan&lt;br /&gt;
  sized to the wallet balance left to it. Pricing, combo, credit availability and the&lt;br /&gt;
  first-PO gates still validate the order as a whole, so a split first PO cannot block&lt;br /&gt;
  its own second half.&lt;br /&gt;
- TransactionServiceImpl: drop the float narrowing of walletUsed in&lt;br /&gt;
  createTransactionForCartLines - the field is a double and the cart total is validated&lt;br /&gt;
  within 0.001, so any total carrying paise was rejected.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/order/BulkOrderService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/TransactionServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37302</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37302</guid></item>
<item><pubDate>Thu, 16 Jul 2026 13:55:07 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37099 – GRN: default supplier invoiceDate to received date when blank  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;GRN: default supplier invoiceDate to received date when blank&lt;br /&gt;
&lt;br /&gt;
Operators frequently leave invoiceDate empty on PO-based GRN uploads&lt;br /&gt;
(addPORowModels), persisting NULL invoice.invoiceDate (~26% of received&lt;br /&gt;
invoices historically). This breaks the warehouse ageing/valuation&lt;br /&gt;
reports that key off invoiceDate. Default it to the received date at the&lt;br /&gt;
single feed into addWarehouseSupplierInvoice, matching the historical&lt;br /&gt;
backfill convention. Fofo newReceiveInvoice already enforces this.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37099</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=37099</guid></item>
<item><pubDate>Wed, 24 Jun 2026 11:53:31 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36910 – Internal PO: map created transaction to PO; block warehouse change ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 6 file(s) modified&lt;/strong&gt;&lt;br/&gt;Internal PO: map created transaction to PO; block warehouse change for PO-mapped orders&lt;br /&gt;
&lt;br /&gt;
- WarehousePurchaseOrder: add transactionId column + selectByTransactionId&lt;br /&gt;
- createOrderInternally returns txn id; createPurchaseOrder maps it onto the PO&lt;br /&gt;
- Block order.setWarehouseId for PO-mapped orders in changeFulfillmentWarehouse; cron moveOrders skips them&lt;br /&gt;
- Migration: add warehouse.purchaseorder.transactionId&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/warehouse/WarehousePurchaseOrder.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehousePurchaseOrderRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehousePurchaseOrderRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/TransactionServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/migration_po_transaction_mapping.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36910</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36910</guid></item>
<item><pubDate>Fri, 22 May 2026 19:29:00 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36640 – Fix NPE in addQuantity when inventory snapshot missing for partner ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix NPE in addQuantity when inventory snapshot missing for partner warehouse - use addAvailability which creates snapshot if absent&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseInventoryService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseInventoryServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36640</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36640</guid></item>
<item><pubDate>Thu, 21 May 2026 14:45:45 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36624 – Thrift cleanup: migrate types, remove dead code, add moved files ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 13 file(s) modified&lt;/strong&gt;&lt;br/&gt;Thrift cleanup: migrate types, remove dead code, add moved files&lt;br /&gt;
&lt;br /&gt;
- Added Affiliate.java POJO (replaces Thrift struct)&lt;br /&gt;
- Moved from profitmandi-common: WalletHistoryModel, ExcelUtils, CustomOrder&lt;br /&gt;
- Removed dead createReturnTransaction method from ReturnService/Impl&lt;br /&gt;
- Removed dead getPartnerStockOnDate from InventoryService/Impl&lt;br /&gt;
- Replaced CatalogServiceException with Exception in PdfPoSheetGenerator&lt;br /&gt;
- Removed Thrift client imports from UserServiceImpl&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/common&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/common/model&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/common/model/CustomOrder.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/common/util&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/common/util/ExcelUtils.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/common/util/WalletHistoryModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/InventoryService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/InventoryServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/ReturnService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/ReturnServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/UserServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PdfPoSheetGenerator.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/in/shop2020/model/v1/user/Affiliate.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36624</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36624</guid></item>
<item><pubDate>Wed, 20 May 2026 14:44:36 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36611 – Allow GRN corrections for SALE_RET items in addition to PURCHASE ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Allow GRN corrections for SALE_RET items in addition to PURCHASE - serial correction, serialized item change, and non-serialized item change paths all now accept SALE_RET scan type since the item is back in warehouse custody&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36611</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36611</guid></item>
<item><pubDate>Mon, 18 May 2026 12:07:36 +0530</pubDate><dc:creator>aman</dc:creator><title>Rev 36586 – Fix:Restructure mail send</title><description>&lt;div&gt;&lt;strong&gt;aman – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix:Restructure mail send&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/fofo/FofoOrder.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/StoreTimelineTatServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36586</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36586</guid></item>
<item><pubDate>Thu, 14 May 2026 19:49:06 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36542 – Validate oldItemId exists on invoice at GRN correction request creation ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Validate oldItemId exists on invoice at GRN correction request creation time&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36542</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36542</guid></item>
<item><pubDate>Sat, 02 May 2026 17:14:12 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36450 – Refactor applyReceipt: extract scan creation to WarehouseInventoryService.recordReturnScan with validation for ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Refactor applyReceipt: extract scan creation to WarehouseInventoryService.recordReturnScan with validation for all return types (SALE_RET/DOA_IN/SALE_RET_UNUSABLE), qty&gt;0, sold-qty capacity check, and SALE_RET warehouse capacity check&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/PurchaseReturnServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseInventoryService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseInventoryServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36450</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36450</guid></item>
<item><pubDate>Tue, 28 Apr 2026 18:17:53 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36417 – Fix:PO item swap — update/delete old PURCHASE scan record when ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix:PO item swap — update/delete old PURCHASE scan record when reducing quantity on swapped inventory item&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36417</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36417</guid></item>
<item><pubDate>Tue, 28 Apr 2026 16:48:05 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36414 – without vendor catalog pricing po will not create</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;without vendor catalog pricing po will not create&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36414</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fservice%2Fwarehouse%2F&amp;isdir=1&amp;rev=36414</guid></item>
</channel></rss>