<?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; /</title><description>WebSVN RSS feed &#x2013; SmartDukaan</description><lastBuildDate>Fri, 18 Sep 2026 00:23:16 +0530</lastBuildDate><generator>WebSVN 2.8.6-DEV</generator><language>en</language><link>https://svn.smartdukaan.com/log.php?repname=SmartDukaan&amp;path=%2F&amp;max=40&amp;peg=37543</link><atom:link href="https://svn.smartdukaan.com/rss.php?peg=37543&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Tue, 08 Sep 2026 12:10:42 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37543 – receive debit note: resolve the DOA section from the declared ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;receive debit note: resolve the DOA section from the declared condition, not from a change&lt;br /&gt;
&lt;br /&gt;
The condition dropdown renders with the partner&apos;s declared value already selected, so&lt;br /&gt;
a declared BAD - the ordinary DOA case - fired no change event and the DOA certificate&lt;br /&gt;
radios stayed hidden. The operator could not supply a certificate, and receiveDebitNoteItems&lt;br /&gt;
then refused the receipt for a missing one, making those debit notes unreceivable.&lt;br /&gt;
&lt;br /&gt;
applyDeclaredConditions seeds each dropdown from the row&apos;s data-declared and settles the&lt;br /&gt;
dependent sections on load; the show/hide logic moves out of the change handler into&lt;br /&gt;
syncReceiveConditionState, which reads the current state of the form rather than whatever&lt;br /&gt;
was last touched. The change handler now calls the same function.&lt;br /&gt;
&lt;br /&gt;
The server-side &apos;selected&apos; stays as a fallback: without it a declared BAD would present as&lt;br /&gt;
GOOD if the script failed to load, and the server reads that difference as the warehouse&lt;br /&gt;
disagreeing with the partner, which rejects the whole debit note.&lt;br /&gt;
&lt;br /&gt;
jsVersion 417 -&gt; 418.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/business/return.js&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37543&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37543&amp;peg=37543</guid></item>
<item><pubDate>Mon, 07 Sep 2026 17:52:35 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37542 – loi process added, revival and code changes process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;loi process added, revival and code changes process&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/enumuration/onBorading/onBoardingFormEnums/StoreType.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37542&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37542&amp;peg=37543</guid></item>
<item><pubDate>Mon, 07 Sep 2026 17:51:16 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37541 – loi process added, revival and code changes process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;loi process added, revival and code changes process&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/enumuration/dtr/LeadSource.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/lead.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37541&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37541&amp;peg=37543</guid></item>
<item><pubDate>Mon, 07 Sep 2026 17:49:34 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37540 – loi process added, revival and code changes process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;loi process added, revival and code changes process&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/service/KnowlarityInsightsService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37540&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37540&amp;peg=37543</guid></item>
<item><pubDate>Mon, 07 Sep 2026 12:42:16 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37539 – Fixed mail sender everywhere</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed mail sender everywhere&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/WalletController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37539&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37539&amp;peg=37543</guid></item>
<item><pubDate>Sat, 05 Sep 2026 05:56:43 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37538 – gstpro: a shipped delivery challan is a return, not a ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;gstpro: a shipped delivery challan is a return, not a cancellation&lt;br /&gt;
&lt;br /&gt;
Movement becomes the single discriminator for both document types. Nothing has&lt;br /&gt;
left the warehouse, so nothing happened and the document can be withdrawn; once&lt;br /&gt;
the goods have shipped the document records a movement that really occurred, and&lt;br /&gt;
the only honest reversal is an opposing document - a credit note through finance.&lt;br /&gt;
&lt;br /&gt;
The clock is the only thing that differs. A tax invoice must also be inside its&lt;br /&gt;
24h IRN window, because past that NIC will not cancel the IRN. A delivery challan&lt;br /&gt;
has no IRN and no acknowledgement - every DC row carries a placeholder irn and a&lt;br /&gt;
null ack_date - so no clock applies to it: an unshipped challan stays withdrawable&lt;br /&gt;
whatever its age, and its e-way bill is cancelled on that path since nothing moved&lt;br /&gt;
under it.&lt;br /&gt;
&lt;br /&gt;
Previously a DC short-circuited to cancellable regardless of shipping, which would&lt;br /&gt;
have voided challans whose goods were already in transit.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/gstpro/GstProService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37538&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37538&amp;peg=37543</guid></item>
<item><pubDate>Fri, 04 Sep 2026 23:19:27 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37537 – carlcare activation: retry a transient failure once before giving up ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;carlcare activation: retry a transient failure once before giving up&lt;br /&gt;
&lt;br /&gt;
One retry after a 1.5s backoff - long enough to clear the far end&apos;s rate window,&lt;br /&gt;
short enough to still fit inside a scheduler tick. A transient network blip was&lt;br /&gt;
otherwise recorded as a hard activation failure for that IMEI.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CarlcareImeiActivationService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37537&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37537&amp;peg=37543</guid></item>
<item><pubDate>Fri, 04 Sep 2026 23:19:26 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37536 – purchase return: order the invoice-return queue by what still needs ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;purchase return: order the invoice-return queue by what still needs doing&lt;br /&gt;
&lt;br /&gt;
A return with no debit note sorts first - it is the one still owing an action -&lt;br /&gt;
and the screen reflects that ordering. Also refuses the cancel path when any order&lt;br /&gt;
on the invoice is in a state that must not be cancelled.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PurchaseReturnController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/invoice-return.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37536&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37536&amp;peg=37543</guid></item>
<item><pubDate>Fri, 04 Sep 2026 23:19:17 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37535 – purchase return: guard invoice cancellation, and surface rejected-with-DN returns  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;purchase return: guard invoice cancellation, and surface rejected-with-DN returns&lt;br /&gt;
&lt;br /&gt;
PurchaseReturnServiceImpl gains assertInvoiceNotCancelled and assertNotGrnd, so a&lt;br /&gt;
cancellation is refused when the invoice is already cancelled or the goods have been&lt;br /&gt;
GRN&apos;d - a return cannot be undone once the stock has been received in.&lt;br /&gt;
&lt;br /&gt;
PurchaseReturnOrderRepositoryImpl also counts returns that were rejected but never&lt;br /&gt;
acknowledged by the retailer while carrying a debit note, which otherwise fell out&lt;br /&gt;
of the pending queue despite still owing an action.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/PurchaseReturnOrderRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/PurchaseReturnServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37535&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37535&amp;peg=37543</guid></item>
<item><pubDate>Fri, 04 Sep 2026 01:37:10 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37534 – loi process added, revival and code changes process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;loi process added, revival and code changes process&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesHierarchyBrandPartnerCountModel.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesHierarchyBrandSoldModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37534&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37534&amp;peg=37543</guid></item>
<item><pubDate>Fri, 04 Sep 2026 01:35:50 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37533 – loi process added, revival and code changes process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;loi process added, revival and code changes process&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.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=%2F&amp;isdir=1&amp;rev=37533&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37533&amp;peg=37543</guid></item>
<item><pubDate>Thu, 03 Sep 2026 18:23:08 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37532 – gstpro: do not cancel a DC e-way bill once the ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;gstpro: do not cancel a DC e-way bill once the consignment has shipped&lt;br /&gt;
&lt;br /&gt;
Three cases on cancelling a delivery-challan invoice:&lt;br /&gt;
- no EWB recorded: nothing to cancel at NIC&lt;br /&gt;
- already shipped: leave the EWB intact and void the challan locally. The goods&lt;br /&gt;
  moved under that bill, so it is the record of a journey that happened; cancelling&lt;br /&gt;
  would strip cover from it, and NIC refuses the cancel anyway once a bill has been&lt;br /&gt;
  verified in transit. The return leg is a fresh movement needing its own EWB.&lt;br /&gt;
- never dispatched: cancel the EWB, since nothing moved under it.&lt;br /&gt;
&lt;br /&gt;
Also reuses the orders already fetched for the shipped check rather than selecting&lt;br /&gt;
by invoice number twice.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/gstpro/GstProService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37532&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37532&amp;peg=37543</guid></item>
<item><pubDate>Thu, 03 Sep 2026 18:22:12 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37531 – offer circular: stop letter-led model names inheriting the previous variant ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;offer circular: stop letter-led model names inheriting the previous variant&lt;br /&gt;
&lt;br /&gt;
A part that is ONLY a memory spec inherits the preceding model name, because Oppo&lt;br /&gt;
writes &apos;RENO 15 PRO 256GB, 512GB&apos; and the second part is not a product. The pattern&lt;br /&gt;
matched too loosely: the optional unit group matched the FIRST letter of a model&lt;br /&gt;
name and the rest fell through the trailing character class, so &apos;G06, G37, G37&lt;br /&gt;
Power&apos; inherited its way to &apos;G06 G37&apos; - two Motorola phones fused into one entity&lt;br /&gt;
that matches no SKU, costing G37 its cashback on five offers.&lt;br /&gt;
&lt;br /&gt;
Requiring a leading digit makes it a memory spec rather than anything that merely&lt;br /&gt;
contains G/T and digits. Realme &apos;GT 7&apos; matches the same way and survived only&lt;br /&gt;
because it never follows a comma.&lt;br /&gt;
&lt;br /&gt;
Same root cause as the word-boundary guards on CAPACITY and MEMORY_PAIR: a digit&lt;br /&gt;
glued to letters belongs to the model name.&lt;br /&gt;
&lt;br /&gt;
ProductNamesTest: 11 -&gt; 12, covering &apos;G06, G37, G37 Power&apos; and &apos;GT 7T, GT 7&apos;.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/ProductNames.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/ProductNamesTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37531&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37531&amp;peg=37543</guid></item>
<item><pubDate>Thu, 03 Sep 2026 18:22:01 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37530 – purchase return: use the auto-approve check on invoice cancellation  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;purchase return: use the auto-approve check on invoice cancellation&lt;br /&gt;
&lt;br /&gt;
Calls GstProService.isCancellableWithoutApproval (r37529) so a DC invoice, or an&lt;br /&gt;
unshipped order whose IRN is still cancellable, skips the approval step.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PurchaseReturnController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37530&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37530&amp;peg=37543</guid></item>
<item><pubDate>Thu, 03 Sep 2026 18:21:48 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37529 – purchase return: auto-approve invoice cancellation where it is safe  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;purchase return: auto-approve invoice cancellation where it is safe&lt;br /&gt;
&lt;br /&gt;
GstProService.isCancellableWithoutApproval: a DC invoice cancels without approval;&lt;br /&gt;
anything else needs the order to be unshipped AND the IRN to still be cancellable.&lt;br /&gt;
&lt;br /&gt;
PurchaseReturnServiceImpl marks the order INVOICE_CANCELLED with the refund actor,&lt;br /&gt;
timestamp and reason recorded, and sets each line item&apos;s returnQty to its full&lt;br /&gt;
quantity - a cancelled invoice returns everything on it.&lt;br /&gt;
&lt;br /&gt;
Committed on behalf of the working copy; dao goes first so the method exists before&lt;br /&gt;
the fofo controller that calls it.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/gstpro/GstProService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/PurchaseReturnServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37529&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37529&amp;peg=37543</guid></item>
<item><pubDate>Thu, 03 Sep 2026 18:17:05 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37528 – offer circular: apply the supersede rule on ingest (fofo)  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;offer circular: apply the supersede rule on ingest (fofo)&lt;br /&gt;
&lt;br /&gt;
A published circular now expires still-running offers from earlier circulars, and&lt;br /&gt;
deactivates the web offers they produced, so the same cashback is never current&lt;br /&gt;
twice. The converse also holds: re-ingesting an older circular while a newer one is&lt;br /&gt;
live leaves it expired rather than resurrecting it.&lt;br /&gt;
&lt;br /&gt;
Older offers remain readable as reference - only status changes, never end_date.&lt;br /&gt;
&lt;br /&gt;
Counts appear in the ingest summary as supersededOlderOffers / expiredAsSuperseded&lt;br /&gt;
and, on the web side, supersededOlderMonths / notPublishedSuperseded.&lt;br /&gt;
&lt;br /&gt;
ScopeConfigTest&apos;s stub gains the two new CircularIngestRepository methods - the same&lt;br /&gt;
brittleness the scripts/offer_circular README notes for JdbcIngestRepo.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/CircularIngestService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/WebOfferSyncService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/ScopeConfigTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37528&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37528&amp;peg=37543</guid></item>
<item><pubDate>Thu, 03 Sep 2026 18:16:40 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37527 – offer circular: a new month supersedes every older one  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;offer circular: a new month supersedes every older one&lt;br /&gt;
&lt;br /&gt;
Publishing a circular expires still-running offers from earlier circulars, at the&lt;br /&gt;
offers level and again for the web offers they produced.&lt;br /&gt;
&lt;br /&gt;
Why: the new circular restates whatever is still live, so leaving the old month&lt;br /&gt;
ACTIVE means the same cashback is current twice. Verified Aug&apos;26 -&gt; Sep&apos;26: all 24&lt;br /&gt;
SKUs covered by August&apos;s four still-running Apple offers were carried into&lt;br /&gt;
September, six of them twice.&lt;br /&gt;
&lt;br /&gt;
- expireOlderDocumentOffers: status ACTIVE -&gt; EXPIRED for earlier documents.&lt;br /&gt;
  end_date is deliberately NOT touched - it is what the OEM said, and older offers&lt;br /&gt;
  stay readable as reference. They simply stop being current.&lt;br /&gt;
- expireIfSuperseded: the converse, so re-ingesting an OLD circular while a newer&lt;br /&gt;
  one is live cannot resurrect it. With both, &apos;newest circular wins&apos; holds whatever&lt;br /&gt;
  order documents are ingested in.&lt;br /&gt;
- deactivateOlderPeriods / hasNewerPublishedPeriod do the same for dtr.web_offer.&lt;br /&gt;
&lt;br /&gt;
Verified on real data in a rolled-back transaction: publishing Sep expired 165&lt;br /&gt;
still-ACTIVE Aug offers (many stale since the 18 Aug ingest), Sep did not expire&lt;br /&gt;
itself, and re-ingesting Aug while Sep is live self-expired its 4 revived offers.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/CircularIngestRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/CircularIngestRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/WebOfferSyncRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/WebOfferSyncRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37527&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37527&amp;peg=37543</guid></item>
<item><pubDate>Thu, 03 Sep 2026 17:44:48 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37526 – offer circular: scope config screen, resolve screen, web offer sync ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 17 file(s) modified&lt;/strong&gt;&lt;br/&gt;offer circular: scope config screen, resolve screen, web offer sync (fofo)&lt;br /&gt;
&lt;br /&gt;
Screens (each its own endpoint, under the OFFER CIRCULAR menu):&lt;br /&gt;
- /offerCircularScope - add/edit divisions, take a brand in or out of scope,&lt;br /&gt;
  register label aliases. &apos;Remove&apos; is in_scope=0 + a required reason, never a&lt;br /&gt;
  DELETE: offer.division_id is an FK and the history would go with it.&lt;br /&gt;
- /offerCircularResolve - the product queue, split out of the review screen. The&lt;br /&gt;
  editor was a &amp;lt;td colspan=6&gt; pretending to be a form, which is why it never&lt;br /&gt;
  aligned; it is now master-detail. Naming and Coverage are separate tabs because&lt;br /&gt;
  an alias cannot answer a bundle at all - the coverage panel says so and offers&lt;br /&gt;
  the two answers that ARE safe (ignore, or reclassify as naming).&lt;br /&gt;
&lt;br /&gt;
Ingest:&lt;br /&gt;
- ScopeConfig resolves division aliases and carries the canonical label on&lt;br /&gt;
  Decision. insertOffer and ProductAliases.find use it; offer_raw_row keeps the&lt;br /&gt;
  verbatim label, being the source of truth for re-parsing.&lt;br /&gt;
- CircularIngestRunner publishes to dtr.web_offer after the document is marked&lt;br /&gt;
  PUBLISHED, in its own transaction with exceptions swallowed - a circular that&lt;br /&gt;
  parsed correctly must stay published even if the web sync fails.&lt;br /&gt;
&lt;br /&gt;
Review screen:&lt;br /&gt;
- the ingest summary was a raw Map.toString() inside a nowrap span and ran off&lt;br /&gt;
  the card; now parsed into chips with the drop reasons behind a disclosure.&lt;br /&gt;
&lt;br /&gt;
jsVersion -&gt; 417 (merged with r37525&apos;s 412; cssVersion 53 kept from that commit).&lt;/div&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/OfferCircularController.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/OfferCircularScopeController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/CircularIngestRunner.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/CircularIngestService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/ScopeConfig.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/WebOfferSyncService.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/js/offer-circular-resolve.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/offer-circular-review.js&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/js/offer-circular-scope.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/admin.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/include-scripts.vm&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/offer-circular-resolve.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/offer-circular-review.vm&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/offer-circular-scope.vm&lt;br /&gt;+ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/ScopeConfigTest.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/offercircular/WebOfferSyncServiceTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37526&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37526&amp;peg=37543</guid></item>
<item><pubDate>Thu, 03 Sep 2026 17:43:36 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37525 – offer circular: division aliases, portal-editable scope, web offer sync (dao) ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 11 file(s) modified&lt;/strong&gt;&lt;br/&gt;offer circular: division aliases, portal-editable scope, web offer sync (dao)&lt;br /&gt;
&lt;br /&gt;
- division_alias support: CircularIngestRepository.selectDivisionAliases so an&lt;br /&gt;
  alternate OEM label resolves onto an existing division instead of dropping the&lt;br /&gt;
  rows as UNKNOWN. Both pdf_label columns are ALIASED - Hibernate discovers&lt;br /&gt;
  native-query results by name and throws NonUniqueDiscoveredSqlAlias on a dup.&lt;br /&gt;
&lt;br /&gt;
- OfferScopeRepository{,Impl}: write side for scope config (add/edit a division,&lt;br /&gt;
  in_scope toggle, label aliases). Kept apart from OfferCurationRepository, whose&lt;br /&gt;
  contract is limited to product_alias - a bad alias mismaps one product, a bad&lt;br /&gt;
  scope change silently drops a whole brand.&lt;br /&gt;
&lt;br /&gt;
- OfferCircularRepositoryImpl: label-side division join now resolves through&lt;br /&gt;
  division_alias (dva), otherwise an UNPARSED row under an aliased label is hidden&lt;br /&gt;
  by the inScopeOnly filter - exactly the rows the review screen exists to show.&lt;br /&gt;
  Also isoDate(): period_month left as java.sql.Date serialised to epoch millis,&lt;br /&gt;
  which an &amp;lt;input type=date&gt; silently rejects, so the circular filter cleared&lt;br /&gt;
  itself and every circular showed every row.&lt;br /&gt;
&lt;br /&gt;
- WebOfferSyncRepository{,Impl} + migration: publish a parsed circular into&lt;br /&gt;
  dtr.web_offer / web_offer_product. Anchored on (document, page, row) stored as&lt;br /&gt;
  VALUES, never offers.offer.id, which is recreated on every re-ingest. source&lt;br /&gt;
  defaults to MANUAL so the 3850 hand-typed rows are untouched; web_offer_sync_shadow&lt;br /&gt;
  is what lets a human edit win over a later sync.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/CircularIngestRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/CircularIngestRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/OfferCircularRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/OfferScopeRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/OfferScopeRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/WebOfferSyncRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/WebOfferSyncRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/add_web_offer_circular_sync.sql&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/dao/repository&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/dao/repository/offers&lt;br /&gt;+ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/dao/repository/offers/OfferCircularDateSerialisationTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37525&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37525&amp;peg=37543</guid></item>
<item><pubDate>Thu, 03 Sep 2026 01:10:30 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37524 – loi process added, revival and code changes process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;loi process added, revival and code changes process&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/enumuration/onBorading/OnboardingType.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37524&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37524&amp;peg=37543</guid></item>
<item><pubDate>Thu, 03 Sep 2026 01:08:56 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37523 – loi process added, revival and code changes process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 12 file(s) modified&lt;/strong&gt;&lt;br/&gt;loi process added, revival and code changes process&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/onBoarding/LoiForm.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/onBoarding/LoiFormData.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/user/StoreTimelinetb.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/loiForm/LoiFormServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/StoreTimelineTatService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/StoreTimelineTatServiceImpl.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/LoiFormController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PartnerOnBoardingPanelController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/loi-form.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/loi-form.vm&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=%2F&amp;isdir=1&amp;rev=37523&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37523&amp;peg=37543</guid></item>
<item><pubDate>Wed, 02 Sep 2026 19:36:55 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37522 – rbm drr dashboard po fragment ui modification</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard po fragment ui modification&lt;/div&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=%2F&amp;isdir=1&amp;rev=37522&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37522&amp;peg=37543</guid></item>
<item><pubDate>Wed, 02 Sep 2026 18:57:41 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37521 – rbm drr dashboard position wise data</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard position wise data&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesDownlineMonthlyTargetModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37521&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37521&amp;peg=37543</guid></item>
<item><pubDate>Wed, 02 Sep 2026 18:56:57 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37520 – rbm drr dashboard position wise data</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard position wise data&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesDownlineAchievedByMovementModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37520&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37520&amp;peg=37543</guid></item>
<item><pubDate>Wed, 02 Sep 2026 18:55:51 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37519 – rbm drr dashboard position wise data</title><description>&lt;div&gt;&lt;strong&gt;ranu – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard position wise data&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesHierarchyAchievedByMovementModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesHierarchyMonthlyTargetModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/RbmDrrDashboardController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37519&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37519&amp;peg=37543</guid></item>
<item><pubDate>Wed, 02 Sep 2026 12:02:19 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37518 – notification scheduler</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification scheduler&lt;/div&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/NotificationDispatchScheduler.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37518&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37518&amp;peg=37543</guid></item>
<item><pubDate>Tue, 01 Sep 2026 19:18:57 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37517 – rbm drr dashboard position wise data</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard position wise data&lt;/div&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=%2F&amp;isdir=1&amp;rev=37517&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37517&amp;peg=37543</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:58:29 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37516 – pending loi download access given to raj singh</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;pending loi download access given to raj singh&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LoiFormController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37516&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37516&amp;peg=37543</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:49:08 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37515 – notification live fix conflict in app config</title><description>&lt;div&gt;&lt;strong&gt;ranu – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live fix conflict in app config&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/CampaignGroup.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/CampaignGroupRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/CampaignGroupRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37515&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37515&amp;peg=37543</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:47:46 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37514 – notification live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/enumuration/ScheduleStatus.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37514&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37514&amp;peg=37543</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:46:42 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37513 – notification live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/NotificationTargetCriteria.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/NotificationSchedule.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationScheduleRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationScheduleRepositoryImpl.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/webapp/resources/js/notification-calendar.js&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/notification-calendar.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37513&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37513&amp;peg=37543</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:41:08 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37512 – notification live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/LinkedEntity.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37512&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37512&amp;peg=37543</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:40:18 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37511 – notification live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/enumuration/NotificationFormat.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37511&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37511&amp;peg=37543</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:39:11 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37510 – sales target and achievement added cron and flags</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;sales target and achievement added cron and flags&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/Application.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37510&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37510&amp;peg=37543</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:38:33 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37509 – rbm drr dashboard , all today po rbm view maped</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard , all today po rbm view maped&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/enumuration/NotificationCategory.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37509&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37509&amp;peg=37543</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:12:41 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37508 – notification live new ....api and modification , ui</title><description>&lt;div&gt;&lt;strong&gt;ranu – 11 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live new ....api and modification , ui&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/Notification.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/SendNotificationModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/NotificationCampaign.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SimpleCampaignParams.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationCampaignRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationCampaignRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/NotificationService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/NotificationServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/NotificationController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/send-notification.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/send-notification.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37508&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37508&amp;peg=37543</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:11:31 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37507 – rbm drr dashboard , all today po rbm view maped</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard , all today po rbm view maped&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesHierarchyMonthlyTargetModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37507&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37507&amp;peg=37543</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:10:56 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37506 – rbm drr dashboard , all today po rbm view maped</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard , all today po rbm view maped&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesHierarchyAchievedByMovementModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37506&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37506&amp;peg=37543</guid></item>
<item><pubDate>Tue, 01 Sep 2026 17:49:23 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37505 – rbm drr dashboard , all today po rbm view maped</title><description>&lt;div&gt;&lt;strong&gt;ranu – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard , all today po rbm view maped&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/RbmDrrDashboardController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37505&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37505&amp;peg=37543</guid></item>
<item><pubDate>Tue, 01 Sep 2026 16:59:34 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37504 – Stop invoice read paths creating directories (AccessDeniedException 500s)  getInvoicePath ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Stop invoice read paths creating directories (AccessDeniedException 500s)&lt;br /&gt;
&lt;br /&gt;
getInvoicePath called Files.createDirectories, and getInvoiceFile called it on every&lt;br /&gt;
download. Invoices are generated by the cron app as root, so /SaholicInvoices/&amp;lt;month&gt;&lt;br /&gt;
is 755 root-owned; a download served by Tomcat cannot create a retailer subdirectory&lt;br /&gt;
and threw AccessDeniedException.&lt;br /&gt;
&lt;br /&gt;
It threw on line 1 of getInvoiceFile, before the Files.exists check, so the&lt;br /&gt;
ProfitMandiBusinessException on the next line was unreachable and the callers&apos;&lt;br /&gt;
deliberate 404 handler (&quot;Invoice not yet generated, please retry shortly&quot;) never ran.&lt;br /&gt;
Downloads for a not-yet-generated invoice 500ed instead of 404ing - the exact log&lt;br /&gt;
noise that handler was added to remove.&lt;br /&gt;
&lt;br /&gt;
Split the path computation out: resolveInvoicePath is side-effect free and used by&lt;br /&gt;
getInvoiceFile; getInvoicePath keeps the mkdir for the two generation callers&lt;br /&gt;
(InvoiceService:558, GstProService:952). The legacy relocation branch creates the&lt;br /&gt;
target directory only when there is actually a file to move.&lt;br /&gt;
&lt;br /&gt;
No ops change needed - generation as root already works.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/invoicing/InvoiceService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37504&amp;peg=37543</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37504&amp;peg=37543</guid></item>
</channel></rss>