<?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>Tue, 29 Sep 2026 09:42:36 +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=37675</link><atom:link href="https://svn.smartdukaan.com/rss.php?peg=37675&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Thu, 17 Sep 2026 14:52:14 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37675 – Remove the dead Samsung and Amazon Selenium paths  Both ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;Remove the dead Samsung and Amazon Selenium paths&lt;br /&gt;
&lt;br /&gt;
Both were manual one-shots that nothing runs any more, and each started an&lt;br /&gt;
850MB chrome tree that now has to queue on the browser lane, so they are cost&lt;br /&gt;
without a caller.&lt;br /&gt;
&lt;br /&gt;
Evidence they are dead rather than merely idle:&lt;br /&gt;
 - No crontab entry, no cron.d file and no script references --samsung or&lt;br /&gt;
   --amazonPurchase, and neither flag appears even once in cron.log.&lt;br /&gt;
 - fofo.activated_imei has ZERO Samsung rows written by the cron (auth_id 0) in&lt;br /&gt;
   the last 90 days. All 2,331 Samsung rows in that window are auth_id 307, i.e.&lt;br /&gt;
   the human CSV upload, most recently 16-Sep. The scraper is not what keeps&lt;br /&gt;
   Samsung current; people are.&lt;br /&gt;
 - ScheduledSkeleton.fetchImeiActivation() had already been retired in place --&lt;br /&gt;
   its @Scheduled was commented out with &apos;No longer scheduled&apos;.&lt;br /&gt;
 - RunOnceTasks.amazonPurchase() reads /Users/amit/Downloads/amazon.xlsx, a&lt;br /&gt;
   laptop path that cannot exist on the server.&lt;br /&gt;
&lt;br /&gt;
Removed: SamsungIMEIActivationService, the whole scheduled/amazon package&lt;br /&gt;
(AmazonPurchaseService, OrderSummary, OrderRow, AmazonUser), their RunOnceTasks&lt;br /&gt;
callers and helpers (fetchImeiActivation, amazonPurchase, getOrderSummary,&lt;br /&gt;
parseRow), the two Application CLI blocks and the retired ScheduledSkeleton&lt;br /&gt;
wrapper. The amazon package had no importers outside RunOnceTasks.&lt;br /&gt;
&lt;br /&gt;
Both also leaked a chrome profile dir on every run -- AmazonPurchaseService&lt;br /&gt;
never called quit() at all, and SamsungIMEIActivationService called it outside&lt;br /&gt;
any finally -- so this removes two leak sources rather than fixing them.&lt;br /&gt;
&lt;br /&gt;
Untouched: RunOnceTasks.mailDashboardScreenshots() is a third dead Selenium&lt;br /&gt;
one-shot (also zero invocations) but it mails a report, so it is left for a&lt;br /&gt;
separate decision.&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;x /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/amazon&lt;br /&gt;x /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/SamsungIMEIActivationService.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37675&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37675&amp;peg=37675</guid></item>
<item><pubDate>Thu, 17 Sep 2026 13:13:15 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37674 – Hold the browser lane around the knowlarity scrapes  These ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hold the browser lane around the knowlarity scrapes&lt;br /&gt;
&lt;br /&gt;
These run Chrome inside the tomcat JVM, on the same box as the cron jar&apos;s&lt;br /&gt;
oppo/realme imei lane, with nothing coordinating the two. isScraping only guards&lt;br /&gt;
this JVM and cannot see the cron&apos;s driver, so the interlock has to be the&lt;br /&gt;
OS-level one -- BrowserLane, common r37672.&lt;br /&gt;
&lt;br /&gt;
Fifteen minutes rather than the cron side&apos;s five: the insights scrape runs only&lt;br /&gt;
8 times a day against a lane that is busy ~96% of the time, so a short timeout&lt;br /&gt;
here would mean the insights never refreshed. On contention it serves cache.&lt;br /&gt;
&lt;br /&gt;
The break-log scraper takes the lane around its freshDriver, which has a clean&lt;br /&gt;
try/finally bracket. setupDriver()&apos;s long-lived field driver is deliberately left&lt;br /&gt;
alone -- its lifetime spans init to @PreDestroy and holding an OS lock that long&lt;br /&gt;
would starve the imei lane.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/service/KnowlarityInsightsService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/service/KnowlarityScraperService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37674&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37674&amp;peg=37675</guid></item>
<item><pubDate>Thu, 17 Sep 2026 13:13:07 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37673 – Hold the browser lane around the oppo/realme/motorola drivers  Takes ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hold the browser lane around the oppo/realme/motorola drivers&lt;br /&gt;
&lt;br /&gt;
Takes BrowserLane (common r37672) before new ChromeDriver and releases it after&lt;br /&gt;
quit() returns -- the 850MB is resident for the whole chunk, not just at&lt;br /&gt;
startup, so bracketing only the constructor would protect nothing.&lt;br /&gt;
&lt;br /&gt;
Five minutes of waiting, then give up and return what we have: the only things&lt;br /&gt;
that can hold the lane that long are the other brand mid-chunk or the knowlarity&lt;br /&gt;
scrape in the fofo tomcat, and giving up costs nothing because an unstamped imei&lt;br /&gt;
stays pending and the lane&apos;s next turn picks it up.&lt;br /&gt;
&lt;br /&gt;
CheckMotorolaWarrantyTask carries a comment saying &apos;do not let this job overlap&lt;br /&gt;
the oppo/realme window&apos; that nothing ever enforced. It is wired here too so it is&lt;br /&gt;
already safe whenever it gets a trigger -- it still has none today.&lt;br /&gt;
&lt;br /&gt;
Note on sizing, since the obvious knob is the wrong one: shrinking CHUNK from 25&lt;br /&gt;
was evaluated and rejected. The idle window is a fixed 20s bolted onto a variable&lt;br /&gt;
work period, so 25-&gt;10 moves the duty cycle only 96% -&gt; 91% while costing 8.4%&lt;br /&gt;
of daily throughput and 2.5x the driver launches. The lever for duty cycle is the&lt;br /&gt;
fixedDelay gap, not the chunk size.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckMotorolaWarrantyTask.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckOppoWarrantyTask.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CheckRealmeWarrantyTask.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37673&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37673&amp;peg=37675</guid></item>
<item><pubDate>Thu, 17 Sep 2026 13:12:56 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37672 – Add BrowserLane: machine-wide interlock so only one headless Chrome runs ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add BrowserLane: machine-wide interlock so only one headless Chrome runs at a time&lt;br /&gt;
&lt;br /&gt;
Every ChromeDriver tree on the app box costs ~850MB RSS, on a host holding a&lt;br /&gt;
-Xmx8g tomcat and a -Xmx2g cron jar on 16GB that has been kernel-OOM-killed&lt;br /&gt;
twice with tomcat the victim. Peak concurrent drivers is the number that&lt;br /&gt;
matters, not drivers per day.&lt;br /&gt;
&lt;br /&gt;
Measured on the oppo/realme lane: a 25-imei chunk takes 505s (12s driver&lt;br /&gt;
startup, then ~19.7s an imei) against a fixed 20s fixedDelay, i.e. a 96% duty&lt;br /&gt;
cycle. Meanwhile tomcat starts its own driver 8 times a day for the knowlarity&lt;br /&gt;
scrape. On 17-Sep that scrape ran 11:40:00-11:41:07 and the lane&apos;s next driver&lt;br /&gt;
came up at 11:42:21 -- it cleared by 74 seconds, by luck. At a 96% duty cycle&lt;br /&gt;
the collision cannot be dodged by choosing better times, only by serialising.&lt;br /&gt;
&lt;br /&gt;
The two JVMs are separate processes owned by different users, so an in-process&lt;br /&gt;
flag cannot see across the boundary. Uses an OS file lock at&lt;br /&gt;
/var/lock/sd-browser.lock (overridable via -Dsd.browser.lock), created 0666 on&lt;br /&gt;
first use because cron runs as root and tomcat as tomcat and whichever starts&lt;br /&gt;
first creates it. A file lock rather than a marker file so the kernel reclaims&lt;br /&gt;
it when the holder dies: verified by SIGKILLing the holder mid-hold, the next&lt;br /&gt;
JVM acquired in 264ms. A ReentrantLock gates it first, since a second thread in&lt;br /&gt;
the same JVM would otherwise get OverlappingFileLockException rather than block.&lt;br /&gt;
&lt;br /&gt;
Callers wait rather than skip. The knowlarity scrape needs 67s against a lane&lt;br /&gt;
busy 96% of the time, so skip-on-contention would mean it essentially never&lt;br /&gt;
refreshed again. Eight scrapes a day costs the imei lane about nine minutes of&lt;br /&gt;
waiting in total.&lt;br /&gt;
&lt;br /&gt;
Fails open if the lock file is unusable (missing /var/lock, read-only mount, dev&lt;br /&gt;
laptop): serialising within the JVM only, rather than stopping imei activation&lt;br /&gt;
over what is a safety interlock.&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/BrowserLane.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37672&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37672&amp;peg=37675</guid></item>
<item><pubDate>Thu, 17 Sep 2026 11:33:22 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37671 – loi revival process modify</title><description>&lt;div&gt;&lt;strong&gt;ranu – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;loi revival process modify&lt;/div&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/controller/LoiFormController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37671&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37671&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 20:29:46 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37670 – Check GSTIN shape on the onboarding screen before submit (jsVersion ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Check GSTIN shape on the onboarding screen before submit (jsVersion 425)&lt;br /&gt;
&lt;br /&gt;
Both GST boxes are validated client-side and must match, so ops see the problem on the screen&lt;br /&gt;
instead of discovering it when NIC refuses the first invoice. Server-side guard in dao r37669&lt;br /&gt;
is what actually enforces it.&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/update-retailer-details.js&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37670&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37670&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 20:29:41 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37669 – Reject an invalid or mismatched partner GSTIN before it is ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Reject an invalid or mismatched partner GSTIN before it is saved&lt;br /&gt;
&lt;br /&gt;
The onboarding screen carries the GSTIN in two boxes both labelled GST NUMBER - the retailer&lt;br /&gt;
one (dtr.retailer.number) and the store one (fofo_store.gst_number, which billing reads).&lt;br /&gt;
Neither was validated, so DLSH1660 was saved with the LOI&apos;s pincode in the store box while the&lt;br /&gt;
retailer box held the real GSTIN, and its first invoice would have been refused by NIC.&lt;br /&gt;
&lt;br /&gt;
validateGstNumbers runs before any write (covers the fofo portal, the V2 API and the partner&lt;br /&gt;
app, which all funnel through updateRetailerDetails): both values are normalised, both must be&lt;br /&gt;
valid GSTINs, and when both are present they must agree - across 1,800 partners on record they&lt;br /&gt;
already do, bar the one that caused this. Needs common r37668.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/RetailerServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37669&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37669&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 20:29:34 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37668 – Validate GSTIN shape, state code and checksum  isValidGstNumber accepted ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Validate GSTIN shape, state code and checksum&lt;br /&gt;
&lt;br /&gt;
isValidGstNumber accepted any 15-character string, so a pincode (110095, rejected only for&lt;br /&gt;
length) and junk (Hdjiekwbdbsjskz) reached fofo_store.gst_number, which billing sends to NIC&lt;br /&gt;
as the recipient - the invoice is then refused and the goods cannot ship.&lt;br /&gt;
&lt;br /&gt;
Now: 2-digit state code + PAN + entity + Z + mod-36 check digit, trimmed and upper-cased.&lt;br /&gt;
Blank still passes (the field is optional); callers needing one present check that themselves.&lt;br /&gt;
Checked against live data: 1,569 of 1,570 well-formed partner GSTINs pass, the one that fails&lt;br /&gt;
(HRSP330) has a genuinely wrong check digit.&lt;br /&gt;
&lt;br /&gt;
Adds RTLR_1020 / RTLR_1021 for the invalid and mismatched cases.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/StringUtils.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/resources/response-codes.properties&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37668&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37668&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 19:22:00 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37667 – chore(sql): drop vendor catalog pricing for supplier 1 Hotspot, flagged ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;chore(sql): drop vendor catalog pricing for supplier 1 Hotspot, flagged internal 2026-09-16 (as run on prod; backups _bak_vcp/_vcpl_internal_hotspot_20260916)&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/drop_internal_vendor_catalog_pricing_hotspot_20260916.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37667&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37667&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 18:56:36 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37666 – Hot Deal brand: /fofo/hotDeals/brands accepts categoryId, so the brand chips ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hot Deal brand: /fofo/hotDeals/brands accepts categoryId, so the brand chips match the active tab&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/DealsController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37666&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37666&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 18:56:29 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37665 – Hot Deal brand: optional categoryId on the brand facet, so ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hot Deal brand: optional categoryId on the brand facet, so the chips can be scoped to one tab&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/solr/SolrService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37665&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37665&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 18:48:33 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37664 – loi new revival process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;loi new revival process&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/LoiFormRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37664&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37664&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 18:20:03 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37663 – Added exception to method sign</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Added exception to method sign&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=37663&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37663&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 18:12:41 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37662 – LMS click to call</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;LMS click to call&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/lms/RecordingArchiveFailureRecorder.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37662&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37662&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 18:10:20 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37661 – Fix trunk: RestClient was left behind by r37655  r37655 ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix trunk: RestClient was left behind by r37655&lt;br /&gt;
&lt;br /&gt;
r37655 deleted MandiiResponse but omitted RestClient from the commit, so&lt;br /&gt;
trunk did not compile - RestClient still imported the deleted class.&lt;br /&gt;
&lt;br /&gt;
RestClient now uses RawHttpResponse: executeMandii is renamed executeRaw and&lt;br /&gt;
postWithResponse returns the new type. The dead getMandii helper is removed;&lt;br /&gt;
its only caller was MandiiService.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/web/client/RestClient.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37661&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37661&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 17:50:44 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37660 – ticket download option given and some enhancement on notification panel</title><description>&lt;div&gt;&lt;strong&gt;ranu – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;ticket download option given and some enhancement on notification panel&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/AgreementEsignRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/AgreementEsignRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/StoreTimelinetbRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/StoreTimelinetbRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/loiForm/LoiFormServiceImpl.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;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37660&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37660&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 17:22:08 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37659 – Remove the Mandii callback from fofo (r37655)  Drops the ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Remove the Mandii callback from fofo (r37655)&lt;br /&gt;
&lt;br /&gt;
Drops the /mandii payment-notification stub from HdfcPaymentController - it&lt;br /&gt;
only logged the body - and its three entries in the WebConfig auth whitelist.&lt;br /&gt;
PartnerOnBoardingPanelController imports follow services.mandii -&gt;&lt;br /&gt;
services.kyc for Gender/MaritalStatus/AddressProofType.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/WebConfig.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/hdfc/HdfcPaymentController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PartnerOnBoardingPanelController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37659&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37659&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 17:15:12 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37658 – Remove Mandii onboarding tasks from cron (r37655)  RunOnceTasks loses ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Remove Mandii onboarding tasks from cron (r37655)&lt;br /&gt;
&lt;br /&gt;
RunOnceTasks loses mandiiUser/mandiiUsers, their setCreditAccount helper and&lt;br /&gt;
the now-unused encodeFileToBase64Binary, plus the MandiiService autowire -&lt;br /&gt;
133 lines that pushed partner KYC into Mandii and wrote back MANDII credit&lt;br /&gt;
accounts. The matching --mandiiUser / --mandiiUsers CLI options are dropped&lt;br /&gt;
from Application. ScheduledTasks had an unused MandiiService field.&lt;br /&gt;
OnBoardingRelatedSchelduleTask imports follow services.mandii -&gt; services.kyc.&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/OnBoardingRelatedSchelduleTask.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledTasks.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37658&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37658&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 17:15:01 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37657 – Remove Mandii checkout, status and callback paths (r37655)  OrderController: ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;Remove Mandii checkout, status and callback paths (r37655)&lt;br /&gt;
&lt;br /&gt;
OrderController: the paymentOption MANDII branch and createMandiiOrder are&lt;br /&gt;
gone. GatewayController: the MANDII branch of payment/gateway/status is gone;&lt;br /&gt;
the SDDIRECT branch it sat in front of is untouched and still returns&lt;br /&gt;
AccountStatusResponseOut.&lt;br /&gt;
&lt;br /&gt;
API endpoints removed, all of them Mandii-only:&lt;br /&gt;
- /cart/payment (CartController + its V2CartController delegate) existed&lt;br /&gt;
  solely to poll Mandii for an order status and credit the wallet. It called&lt;br /&gt;
  mandiiService unconditionally, so it already failed for any other gateway.&lt;br /&gt;
- /mandii, the payment-notification callback, a no-op logging stub in both&lt;br /&gt;
  HdfcPaymentController and V2FofoHdfcPaymentController, and dropped from the&lt;br /&gt;
  WebConfig auth whitelist in the fofo commit.&lt;br /&gt;
&lt;br /&gt;
V2 twins touched only where they would otherwise keep a dead route alive or&lt;br /&gt;
fail to compile.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/CartController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/checkout/OrderController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/GatewayController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/SmartCartController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoHdfcPaymentController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoPartnerOnBoardingPanelController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2CartController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37657&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37657&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 17:14:51 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37656 – Point dao at the relocated KYC and SD Credit types ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 6 file(s) modified&lt;/strong&gt;&lt;br/&gt;Point dao at the relocated KYC and SD Credit types (r37655)&lt;br /&gt;
&lt;br /&gt;
Imports follow services.mandii -&gt; services.kyc / services.sdcredit, and&lt;br /&gt;
RecordingService takes RawHttpResponse in place of MandiiResponse.&lt;br /&gt;
&lt;br /&gt;
Gateway.MANDII is kept, with a comment saying why: it is persisted as a&lt;br /&gt;
string on FofoPayment.gateway and CreditAccount.gateway, and 740 historical&lt;br /&gt;
fofo.payment rows still carry it - removing the constant would make&lt;br /&gt;
Hibernate throw when reading them.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/fofo/FofoKyc.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/warehouse/Supplier.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/enumuration/fofo/Gateway.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SDCreditResponseOut.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/kommuno/RecordingService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/SDCreditServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37656&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37656&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 17:14:44 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37655 – Remove the dead Mandii BNPL integration (common)  Mandii has ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 21 file(s) modified&lt;/strong&gt;&lt;br/&gt;Remove the dead Mandii BNPL integration (common)&lt;br /&gt;
&lt;br /&gt;
Mandii has taken no payment since 2022-08-23 and holds no credit account, so&lt;br /&gt;
MandiiService and the 29 classes only it used are deleted.&lt;br /&gt;
&lt;br /&gt;
The package had become a home for live types, which are moved out rather than&lt;br /&gt;
lost: Gender/MaritalStatus/AddressProofType -&gt; services.kyc (they back&lt;br /&gt;
@Enumerated columns on user.fofo_kyc, 317 rows), and the SD Credit account&lt;br /&gt;
status model - AccountStatusResponseOut and its 10 dependencies -&gt; &lt;br /&gt;
services.sdcredit, still served by GatewayController for SDDIRECT.&lt;br /&gt;
&lt;br /&gt;
MandiiResponse was a generic body+status holder named after the integration;&lt;br /&gt;
renamed RawHttpResponse, still used by RestClient for Kommuno recordings.&lt;br /&gt;
Its dead getMandii() helper is gone. AccountStatusResponseOut no longer&lt;br /&gt;
carries the hardcoded merchant.mandii.com URL it shipped to the app.&lt;br /&gt;
&lt;br /&gt;
FundfinaService was logging under MandiiService.class - fixed.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/FofoKycModel.java&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/MandiiResponse.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/RawHttpResponse.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/fundfina/FundfinaService.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/kyc&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/kyc/AddressProofType.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/AddressProofType.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/kyc/Gender.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/Gender.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/kyc/MaritalStatus.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/MaritalStatus.java@37654)&lt;/i&gt;&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/AccountStatusResponseOut.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/AccountStatusResponseOut.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/CurrentStageEnum.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/CurrentStageEnum.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/Details.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/Details.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/Documents.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/Documents.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/DocumentStatusEnum.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/DocumentStatusEnum.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/DocumentTypesEnum.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/DocumentTypesEnum.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/EligibilityStatusEnum.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/EligibilityStatusEnum.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/RepaymentDetails.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/RepaymentDetails.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/VirtualAccountDetails.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/VirtualAccountDetails.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/VirtualBankAccount.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/VirtualBankAccount.java@37654)&lt;/i&gt;&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/sdcredit/VirtualUPI.java &lt;i&gt;(copied from /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/VirtualUPI.java@37654)&lt;/i&gt;&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37655&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37655&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 16:29:59 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37654 – Sync internal store addresses at the mapping write  /createNewWarehouse ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Sync internal store addresses at the mapping write&lt;br /&gt;
&lt;br /&gt;
/createNewWarehouse now calls syncInternalStoreAddresses right after&lt;br /&gt;
persisting the WarehouseAddressMapping, inside the same transaction, so the&lt;br /&gt;
rule lives at the mutation site rather than in an endpoint someone has to&lt;br /&gt;
remember to call. A brand new warehouse has no internal store yet so it is a&lt;br /&gt;
no-op today, but any later path that sets a mapping now cannot leave an&lt;br /&gt;
internal store billing to the previous address.&lt;br /&gt;
&lt;br /&gt;
/syncWarehouseInternalAddress stays for remediating mappings repointed&lt;br /&gt;
directly in the database. Follows r37652/r37653.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/SellerController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37654&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37654&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 15:32:40 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37653 – Add POST /syncWarehouseInternalAddress  Realigns the INTERNAL stores of a ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add POST /syncWarehouseInternalAddress&lt;br /&gt;
&lt;br /&gt;
Realigns the INTERNAL stores of a warehouse with its currently mapped&lt;br /&gt;
address. The warehouse address mapping has no edit screen - it is repointed&lt;br /&gt;
directly in the database - so a branch move never reached the internal&lt;br /&gt;
store&apos;s user.address and orders kept billing to the old premises. Run this&lt;br /&gt;
after changing a warehouse address mapping. Pairs with r37652.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/SellerController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37653&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37653&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 15:32:35 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37652 – Internal store buyer address: always read user.address  An INTERNAL ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Internal store buyer address: always read user.address&lt;br /&gt;
&lt;br /&gt;
An INTERNAL store is the buying identity of a warehouse, so order creation&lt;br /&gt;
resolved its address from transaction.warehouseaddressmaster while every&lt;br /&gt;
screen read transaction.addId -&gt; user.address. The Delhi warehouses moved to&lt;br /&gt;
warehouseaddressmaster 26 in Sept 2024 and nothing carried that across, so&lt;br /&gt;
user.address still held the 2021 L-222 premises: same buyer, two addresses.&lt;br /&gt;
&lt;br /&gt;
user.address for active internal stores is now aligned with the mapped&lt;br /&gt;
warehouse address (sql/20260916_sync_internal_store_addresses.sql), split&lt;br /&gt;
exactly as getCustomAddress() does so the next invoice is unchanged. With&lt;br /&gt;
that true, createTransactionForWarehouse no longer special-cases internal.&lt;br /&gt;
&lt;br /&gt;
SellerService.syncInternalStoreAddresses carries a warehouse address remap&lt;br /&gt;
through to its internal stores - the mapping has no edit screen and is&lt;br /&gt;
repointed directly in the database, which is why nothing propagated before.&lt;/div&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/transaction/TransactionServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/20260916_sync_internal_store_addresses.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37652&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37652&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 15:13:38 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37651 – LMS click to call</title><description>&lt;div&gt;&lt;strong&gt;vikas – 63 file(s) modified&lt;/strong&gt;&lt;br/&gt;LMS click to call&lt;/div&gt;~ /trunk/profitmandi-dao/build.gradle&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/config/AsyncConfig.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/auth/VonageAgent.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/user/LeadActivity.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/user/LeadCall.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/user/LeadDnd.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/user/LeadRecordingAccess.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/user/MetaLead.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/user/MetaLeadImport.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/enumuration/dtr/LeadCallProvider.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/enumuration/dtr/LeadCallStatus.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/enumuration/dtr/MetaLeadDistribution.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/enumuration/dtr/MetaLeadOutcome.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/auth/VonageAgentRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/auth/VonageAgentRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/LeadCallRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/LeadCallRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/LeadDndRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/LeadDndRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/LeadRecordingAccessRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/LeadRecordingAccessRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/LeadRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/LeadRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/MetaLeadRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/MetaLeadRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/vonage&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/vonage/vbc&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/vonage/vbc/VbcDialerProvider.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/vonage/vbc/VbcTelephonyService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/vonage/vbc/VbcTokenService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/vonage/VonageDialerProvider.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/vonage/VonageJwtService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/vonage/VonageVoiceService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/lms&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/lms/LmsDialerProvider.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/lms/meta&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/lms/meta/MetaLeadFileParser.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/lms/meta/MetaLeadImportService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/lms/meta/MetaLeadRow.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/lms/RecordingAccessService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/lms/RecordingArchiveService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/lms/RecordingArchiveWorker.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/LmsDashboardService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/storage&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/storage/ObjectStoreService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/resources/shared-prod.properties&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/resources/shared-staging.properties&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/WebConfig.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LmsDashboardController.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LmsDialerController.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LmsLeadController.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LmsRecordingController.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/MetaLeadImportController.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/service/RecordingArchiveScheduler.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/util/CatalogMonitorTypeCsvValidator.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/resources/META-INF/env.property&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/lead.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/edit-lead.vm&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/lead-record.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/lms-dashboard-standalone.vm&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/meta-lead-import.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/web/util/CatalogMonitorTypeCsvValidatorTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37651&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37651&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 09:28:33 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37650 – SQL to retire user.counter / user.privatedealuser / address mapping after ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;SQL to retire user.counter / user.privatedealuser / address mapping after r37648-49 deploy (rename, reversible)&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/retire_counter_privatedealuser_20260916.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37650&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37650&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 09:28:13 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37649 – Retire user.counter / user.privatedealuser write path (web)  createRetailer no ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Retire user.counter / user.privatedealuser write path (web)&lt;br /&gt;
&lt;br /&gt;
createRetailer no longer creates a Counter, PrivateDealUser or address mapping; the&lt;br /&gt;
non-found branch keeps only the saholic-user address write it also did. Pairs with&lt;br /&gt;
dao r37648.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/RetailerController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37649&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37649&amp;peg=37675</guid></item>
<item><pubDate>Wed, 16 Sep 2026 09:28:09 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37648 – Retire user.counter / user.privatedealuser write path  Partner GST moved ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 11 file(s) modified&lt;/strong&gt;&lt;br/&gt;Retire user.counter / user.privatedealuser write path&lt;br /&gt;
&lt;br /&gt;
Partner GST moved to fofo.fofo_store.gst_number in the Feb-2026 migration; counter.gstin&lt;br /&gt;
has had no reader since (Counter.getGstin() had no callers) and privatedealuser is only&lt;br /&gt;
read to decide its own insert-vs-update. Both were write-only bookkeeping.&lt;br /&gt;
&lt;br /&gt;
- RetailerServiceImpl: drop createPrivateDealUser/createCounter and their two call sites&lt;br /&gt;
- MigrationUtil.migrateUserToRetailer: drop the same legacy block&lt;br /&gt;
- Delete Counter / PrivateDealUser / PrivateDealUserAddressMapping entities + repositories&lt;br /&gt;
&lt;br /&gt;
No reader is affected: the 240 Reportico reports on static0 reference neither table&lt;br /&gt;
(the &apos;counter&apos; hits are fofo_store.counter_size). Tables stay in place until this is&lt;br /&gt;
deployed, then get renamed out of the way.&lt;/div&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/user/Counter.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/user/PrivateDealUser.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/user/PrivateDealUserAddressMapping.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/CounterRepository.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/CounterRepositoryImpl.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/PrivateDealUserAddressMappingRepository.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/PrivateDealUserAddressMappingRepositoryImpl.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/PrivateDealUserRepository.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/PrivateDealUserRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/util/MigrationUtil.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/RetailerServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37648&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37648&amp;peg=37675</guid></item>
<item><pubDate>Tue, 15 Sep 2026 21:38:25 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37647 – Invoice/DN return: file credit note at NIC only when the ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Invoice/DN return: file credit note at NIC only when the invoice IRN was filed&lt;br /&gt;
&lt;br /&gt;
- GstProService.hasFiledIrn: invoice has a real IRN with ack date (DCs excluded)&lt;br /&gt;
- applyInvoiceReturnViaCreditNote: filed IRN -&gt; CN + NIC CRN as before;&lt;br /&gt;
  not filed + INTERNAL buyer -&gt; CN issued locally, NIC skipped;&lt;br /&gt;
  not filed + other buyer -&gt; refund without CN, CN sequence untouched&lt;br /&gt;
- DN refund path: not filed + INTERNAL buyer -&gt; local CN, NIC skipped&lt;br /&gt;
Fixes approval failing with &apos;Recipient GSTIN state code does not match&apos; on&lt;br /&gt;
internal invoices whose IRN was never generated (NSPRJ41943, NSPRJ41950).&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=37647&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37647&amp;peg=37675</guid></item>
<item><pubDate>Tue, 15 Sep 2026 18:40:23 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37646 – Hot Deal brand: dedupe model_hot_deal to one row per catalog ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hot Deal brand: dedupe model_hot_deal to one row per catalog before the unique key (prod had one Realme duplicate from the old windowed model)&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/resources/sql/hot_deal_brand_migration.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37646&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37646&amp;peg=37675</guid></item>
<item><pubDate>Tue, 15 Sep 2026 17:55:33 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37645 – ticket download option given and some enhancement on notification panel</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;ticket download option given and some enhancement on notification panel&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/ScratchService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37645&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37645&amp;peg=37675</guid></item>
<item><pubDate>Tue, 15 Sep 2026 17:52:54 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37644 – Cron batch infra: count real SUCCESS rows instead of deriving ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 8 file(s) modified&lt;/strong&gt;&lt;br/&gt;Cron batch infra: count real SUCCESS rows instead of deriving them, add INCOMPLETE status for runs that died mid-loop, stale-batch reaper, admin force-finalize; markItemSuccess joins the work transaction&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/BatchScheduledTasks.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/enumuration/transaction/CronBatchStatus.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CronBatchItemRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CronBatchItemRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CronBatchRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CronBatchRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/cron/CronBatchService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/CronBatchAdminController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37644&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37644&amp;peg=37675</guid></item>
<item><pubDate>Tue, 15 Sep 2026 17:40:25 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37643 – Hot Deal brand: admin edits attributes + optional OEM catalog ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hot Deal brand: admin edits attributes + optional OEM catalog mapping; brand/date/cap controls removed; jsVersion 424&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/HotDealController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/hot-deals.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/hot-deals-table.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/hot-deals.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37643&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37643&amp;peg=37675</guid></item>
<item><pubDate>Tue, 15 Sep 2026 17:39:34 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37642 – Hot Deal brand: remove the 00:20 window-sync job and its ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hot Deal brand: remove the 00:20 window-sync job and its CLI flag - no date windows any more&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37642&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37642&amp;peg=37675</guid></item>
<item><pubDate>Tue, 15 Sep 2026 17:39:28 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37641 – Hot Deal brand: badge from brand, /fofo/hotDeals/brands facet, real availability ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hot Deal brand: badge from brand, /fofo/hotDeals/brands facet, real availability on every listing, drop legacy hot-deals pause endpoints&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/DealsController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/services/HotDealEnrichmentService.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoIndentController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37641&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37641&amp;peg=37675</guid></item>
<item><pubDate>Tue, 15 Sep 2026 17:39:20 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37640 – Hot Deal brand: brand-driven membership, model_hot_deal reduced to attributes + ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 14 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hot Deal brand: brand-driven membership, model_hot_deal reduced to attributes + oem_brand + oem_catalog_id, migration SQL&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/CartServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/catalog/ModelHotDeal.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/catalog/TagListing.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/CatalogRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/CatalogRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/ModelHotDealRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/ModelHotDealRepositoryImpl.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/catalog/ModelHotDealService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/catalog/ModelHotDealServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/pricing/PricingServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/hot_deal_brand_migration.sql&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/hot_deal_brand_schema.sql&lt;br /&gt;~ /trunk/profitmandi-dao/src/test/java/com/spice/profitmandi/service/catalog/ModelHotDealServiceImplTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37640&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37640&amp;peg=37675</guid></item>
<item><pubDate>Tue, 15 Sep 2026 17:38:59 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37639 – chore(sql): second internal vendor catalog pricing cleanup, as run on ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;chore(sql): second internal vendor catalog pricing cleanup, as run on prod 2026-09-15&lt;br /&gt;
&lt;br /&gt;
- 100 internal rows recreated 2026-09-14 18:07 for 325/326/371/382/406 (guard r37634 not yet deployed) and supplier 452, switched to internal 2026-09-15&lt;br /&gt;
- Backups _bak_vcp_internal_20260915 (251) / _bak_vcpl_internal_20260915 (367)&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/drop_internal_vendor_catalog_pricing_20260915.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37639&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37639&amp;peg=37675</guid></item>
<item><pubDate>Tue, 15 Sep 2026 17:38:50 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37638 – Hot Deal brand: HOT_DEAL_BRAND constant, oem_brand_s facet and hot-deal brand ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Hot Deal brand: HOT_DEAL_BRAND constant, oem_brand_s facet and hot-deal brand filter routing&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/ProfitMandiConstants.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/solr/SolrService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37638&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37638&amp;peg=37675</guid></item>
<item><pubDate>Tue, 15 Sep 2026 17:23:17 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37637 – feat(pricing): log tag_listing price changes; reference TP instead of vendoritempricing ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(pricing): log tag_listing price changes; reference TP instead of vendoritempricing in price drop and tag listing&lt;br /&gt;
&lt;br /&gt;
- Add Pricing and price drop set DP/MOP/MRP via TagListingPriceService (logged with user; price drop logs carry price_drop_id)&lt;br /&gt;
- Price drop no longer writes vendoritempricing or vendor catalog pricing; old TP and prefill TP from reference TP&lt;br /&gt;
- Tag listing download TP from reference TP; drop unused VendorItemPricingRepository&lt;br /&gt;
- TagListingPricingTest: local-DB tests for the price log, reference TP and internal supplier guard&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PriceDropController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/TagListingController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/warehouse/OrderManagementController.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/service/tag&lt;br /&gt;+ /trunk/profitmandi-fofo/src/test/java/com/spice/profitmandi/service/tag/TagListingPricingTest.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37637&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37637&amp;peg=37675</guid></item>
<item><pubDate>Tue, 15 Sep 2026 17:23:04 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37636 – refactor(cron): remove vendoritempricing one-offs; log catalog migration listing prices  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;refactor(cron): remove vendoritempricing one-offs; log catalog migration listing prices&lt;br /&gt;
&lt;br /&gt;
- Remove migrateVendorItemPricing (2023 one-off) and its flag; fixOrders no longer reads vendoritempricing&lt;br /&gt;
- CatalogMigration sets listing prices via TagListingPriceService&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/runnables/CatalogMigration.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledTasks.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37636&amp;peg=37675</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37636&amp;peg=37675</guid></item>
</channel></rss>