<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SmartDukaan &#x2013; /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/</title><description>WebSVN RSS feed &#x2013; SmartDukaan</description><lastBuildDate>Wed, 30 Sep 2026 00:56:26 +0530</lastBuildDate><generator>WebSVN 2.8.6-DEV</generator><language>en</language><link>https://svn.smartdukaan.com/log.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;max=40&amp;</link><atom:link href="https://svn.smartdukaan.com/rss.php?isdir=1&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Mon, 28 Sep 2026 15:37:47 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37793 – feat(cart): carry bag pricing via CarryBagQuote in V2 cart and ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(cart): carry bag pricing via CarryBagQuote in V2 cart and order create&lt;br /&gt;
&lt;br /&gt;
V2CartController prices and rebalances the carry bag through&lt;br /&gt;
CartService.getCarryBagQuote: one bag at Rs 1 per smartphone over Rs 12,000,&lt;br /&gt;
extras at listing, Bronze at listing for all. The old resolveCarryBagPrice /&lt;br /&gt;
CARRY_BAG_PREMIUM_PRICE path and its partnerTypeChangeService dependency are&lt;br /&gt;
removed. OrderController splits the blended carry bag line into its two&lt;br /&gt;
priced orders when partitioning the cart, so the same SKU appears twice on&lt;br /&gt;
one invoice at its two prices.&lt;br /&gt;
&lt;br /&gt;
Needs profitmandi-dao r37792; deploy together with the partner apps.&lt;/div&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/v2/controller/V2CartController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37793</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37793</guid></item>
<item><pubDate>Fri, 25 Sep 2026 13:17:18 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37781 – feat(partner-access): demo partners in app switcher + impersonate  - ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(partner-access): demo partners in app switcher + impersonate&lt;br /&gt;
&lt;br /&gt;
- /getPartners, /getPartnersList: position partners + active demo partners&lt;br /&gt;
  (copies the cached getAuthUserPartnerEmailMapping set, never mutates it)&lt;br /&gt;
- /impersonate: an active demo grant also passes the access check&lt;br /&gt;
&lt;br /&gt;
Needs dao r37779 and migration_demo_partner_access.sql applied.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/LeadController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/UserController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoAuthUserController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37781</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37781</guid></item>
<item><pubDate>Thu, 24 Sep 2026 18:54:36 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37772 – fix(supplier): V2 supplier save derives state from GSTIN</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;fix(supplier): V2 supplier save derives state from GSTIN&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoSupplierController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37772</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37772</guid></item>
<item><pubDate>Thu, 24 Sep 2026 17:22:07 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37766 – feat(store-closure): V2 closeStore goes through StoreClosureService; access checks read StoreAccess ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(store-closure): V2 closeStore goes through StoreClosureService; access checks read StoreAccess&lt;br /&gt;
&lt;br /&gt;
Same rules as the fofo portal (dao r37764): reason, remark and approval mail required; mohit.gulati&lt;br /&gt;
removed from extend billing.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoRetailerController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37766</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37766</guid></item>
<item><pubDate>Wed, 23 Sep 2026 19:32:08 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37759 – LMS Call for App</title><description>&lt;div&gt;&lt;strong&gt;vikas – 10 file(s) modified&lt;/strong&gt;&lt;br/&gt;LMS Call for App&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/lms&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/lms/LeadDispositionRequest.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/service/lms/LmsCallService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/lms/LmsDispositionService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/lms/LmsOutcome.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/LmsDashboardService.java&lt;br /&gt;+ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/LmsAppCallController.java&lt;br /&gt;+ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2LmsAppCallController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37759</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37759</guid></item>
<item><pubDate>Mon, 21 Sep 2026 12:33:44 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37733 – Remove dead third-party integrations: web  - PayU: /payu-pay and ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 33 file(s) modified&lt;/strong&gt;&lt;br/&gt;Remove dead third-party integrations: web&lt;br /&gt;
&lt;br /&gt;
- PayU: /payu-pay and the payu-pay-response/cancelled handlers (bodies were&lt;br /&gt;
  already commented out), PayuHandler, payment/ helpers, PayU POJOs, and the&lt;br /&gt;
  PAYU PAY option served by checkout/payment-options.&lt;br /&gt;
  PayuPayController stays: it holds the live CCAvenue, Razorpay and Pine Labs&lt;br /&gt;
  callbacks.&lt;br /&gt;
- SmartPing: GET /click2call/{toMobile} (v1 + v2) and the caller-ID hook&lt;br /&gt;
  /smartping/receipt + /v2/hookCallerID, which only logged&lt;br /&gt;
- HyperTrack: device location, partner location and geofence endpoints plus&lt;br /&gt;
  HyperTrackService. The attendance endpoints (/getPunchHistory,&lt;br /&gt;
  /employee/attendance) never called HyperTrack and are kept, moved to&lt;br /&gt;
  EmployeeAttendanceController / V2EmployeeAttendanceController.&lt;br /&gt;
- Affiliate click-outs and live pricing (Amazon/Flipkart/Snapdeal via OMG):&lt;br /&gt;
  ClicksController, LivePricingController and v2 wrappers. Live pricing was&lt;br /&gt;
  already returning an empty list.&lt;br /&gt;
- Thriwe controller (fully commented out), SpiceMoney and FundFina v2 controllers&lt;br /&gt;
- Aramex branch of /track; tofee.* keys in dev/prod properties&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/config/WebMVCConfig.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/checkout/OrderController.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/checkout/PayuHandler.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/checkout/PayuPayController.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/checkout/PayuPayResponseController.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/checkout/SmartPingReceiptModel.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/ClicksController.java&lt;br /&gt;+ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/EmployeeAttendanceController.java &lt;i&gt;(copied from /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/HyperTrackController.java@37732)&lt;/i&gt;&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/HyperTrackController.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/HyperTrackService.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/LivePricingController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/LogisticsTrackingController.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/ThriweController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/TicketChatActivityController.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/payment&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/req/PayuPayResponsePojo.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/res/AddClickReponse.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/res/LivePricingResponse.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/res/order/PayuPayPojo.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/res/order/PayuResponseParams.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoFundFinaController.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoSpiceMoneyController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoWebHookController.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2ClicksController.java&lt;br /&gt;+ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2EmployeeAttendanceController.java &lt;i&gt;(copied from /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2HyperTrackController.java@37732)&lt;/i&gt;&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2HyperTrackController.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2LivePricingController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2PayuPayController.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2PayuPayResponseController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2TicketChatActivityController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/resources/META-INF/dev.properties&lt;br /&gt;~ /trunk/profitmandi-web/src/main/resources/META-INF/payment-options.json&lt;br /&gt;~ /trunk/profitmandi-web/src/main/resources/META-INF/prod.properties&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37733</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37733</guid></item>
<item><pubDate>Mon, 21 Sep 2026 12:31:43 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37729 – lead: one workable lead per mobile, with a 6-month supersede ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 13 file(s) modified&lt;/strong&gt;&lt;br/&gt;lead: one workable lead per mobile, with a 6-month supersede and an L2+ override&lt;br /&gt;
&lt;br /&gt;
There was no choke point for lead creation. Ten sites did `new Lead()` across four&lt;br /&gt;
modules -- three in web&apos;s LeadController, two in V2FofoLeadController, three in fofo&apos;s&lt;br /&gt;
LeadController, one in TrialServiceImpl and one in the cron LeadSyncRunner -- and only&lt;br /&gt;
ONE of them (fofo /createLead) checked for an existing lead at all. Result on live data:&lt;br /&gt;
5,137 mobiles carrying duplicate leads over 12,156 rows, worst case 29 on one number,&lt;br /&gt;
and two agents unknowingly working the same shop.&lt;br /&gt;
&lt;br /&gt;
THE RULE, in new LeadCreationService, which all ten now route through:&lt;br /&gt;
&lt;br /&gt;
  no active lead on the number      -&gt; create&lt;br /&gt;
  active, last activity &gt;= 6 months -&gt; retire the old one, create the new one, SILENTLY&lt;br /&gt;
  active, last activity &amp;lt;  6 months -&gt; BLOCK; only an L2+ user may override&lt;br /&gt;
&lt;br /&gt;
Active = status in (pending, followUp) AND the assignee is still an active auth_user.&lt;br /&gt;
Last activity = GREATEST(lead.updated/created, MAX(lead_activity.created)).&lt;br /&gt;
&lt;br /&gt;
The stale branch is deliberately quiet. A shop enquiring again after six months is a&lt;br /&gt;
handover, not a clash, and mailing on it would train the desk to ignore the alert -- so&lt;br /&gt;
only a genuine collision notifies. Live split: 195 stale against 1,241 fresh, and roughly&lt;br /&gt;
three blocks a month.&lt;br /&gt;
&lt;br /&gt;
WHY &quot;ACTIVE&quot; ALSO MEANS A LIVE OWNER&lt;br /&gt;
&lt;br /&gt;
331 open leads are assigned to 11 DEACTIVATED accounts (157 to &lt;a href=&quot;mailto:sm@smartdukaan.com&quot;&gt;sm@smartdukaan.com&lt;/a&gt; alone,&lt;br /&gt;
whose newest lead is from 2022). Counting them as active would block fresh enquiries&lt;br /&gt;
behind an account nobody can log in to and therefore nobody can close. Requiring a live&lt;br /&gt;
owner defuses all 331 without retiring a single row. Retirement here is only ever&lt;br /&gt;
REACTIVE -- triggered by a new entry on the same number. Nothing runs on a schedule.&lt;br /&gt;
&lt;br /&gt;
ASSUMPTION worth flagging: a superseded lead becomes status=notInterested (stage DROPPED)&lt;br /&gt;
with closure_timestamp and reason &apos;Superseded after 6 months inactivity&apos;, rather than a&lt;br /&gt;
new `expired` status. &quot;Closed&quot; is an explicit allow-list in the UI --&lt;br /&gt;
Arrays.asList(notInterested, finalized) at V2FofoLeadController:150 and fofo&lt;br /&gt;
LeadController:313 -- and there are ~107 references to specific LeadStatus values, so a&lt;br /&gt;
new enum value would make these leads vanish from BOTH the open and closed screens.&lt;br /&gt;
Stage DROPPED keeps the nuance (the shop never said no) and still maps to notInterested&lt;br /&gt;
via LeadStage.toLegacyStatus().&lt;br /&gt;
&lt;br /&gt;
OVERRIDE is L2+ in ANY team, not Call Center only: Sales L1 owns 1,063 of the 1,776 open&lt;br /&gt;
leads, so a Call-Center-only gate would funnel every team&apos;s collisions through three&lt;br /&gt;
people. The MAIL still goes to Call Center L2+, resolved from cs.position at send time&lt;br /&gt;
rather than hardcoded. An override is a TAKEOVER -- it closes the existing lead -- because&lt;br /&gt;
a second live lead is the exact thing the rule exists to prevent.&lt;br /&gt;
&lt;br /&gt;
UNATTENDED CALLERS (cron sync, CSV upload, trial registration, AI intake) have nobody to&lt;br /&gt;
offer an override to, so they use createUnattended: skip the colliding row and mail the&lt;br /&gt;
desk rather than throwing. CSV reports imported/duplicateSkipped/duplicateMobiles back to&lt;br /&gt;
the operator instead of failing the whole file over one number.&lt;br /&gt;
&lt;br /&gt;
ALSO FIXES selectByMobileNumber, which called getSingleResult and therefore threw&lt;br /&gt;
NonUniqueResultException on any mobile with more than one lead -- GlitchTip #99 and #1359,&lt;br /&gt;
both still firing. It now prefers the open lead, then the most recently touched.&lt;br /&gt;
&lt;br /&gt;
NOT INCLUDED, deliberately: no DB unique constraint. 10 mobiles already carry more than&lt;br /&gt;
one open lead and would have to be resolved by hand first, which conflicts with the&lt;br /&gt;
no-auto-retirement rule. The service enforces the invariant going forward.&lt;br /&gt;
&lt;br /&gt;
NEEDS A DBA STEP: user.lead.mobile is unindexed on 37,580 rows, so this check is a full&lt;br /&gt;
scan on every create. Index DDL is in the accompanying note; it has NOT been applied.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/leadsync/LeadSyncRunner.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/CreateRefferalRequest.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/service/lead&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/lead/LeadCreationService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/lead/LeadCreationServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/lead/LeadDuplicateDecision.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/lead/LeadDuplicateNotifier.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/TrialServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LeadController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/LeadController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoLeadController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37729</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37729</guid></item>
<item><pubDate>Mon, 21 Sep 2026 12:18:41 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37728 – logging: stop three non-defects reporting to the error board as ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 10 file(s) modified&lt;/strong&gt;&lt;br/&gt;logging: stop three non-defects reporting to the error board as ERROR&lt;br /&gt;
&lt;br /&gt;
log4j2.xml ships ERROR and above to GlitchTip, so the log level IS the filter.&lt;br /&gt;
Three sources of ordinary, expected behaviour were logging at ERROR and between&lt;br /&gt;
them accounted for 51,244 events -- 43% of the whole board -- none of them a bug.&lt;br /&gt;
GlobalExceptionHandler already logs ProfitMandiBusinessException at WARN and is&lt;br /&gt;
unchanged; every leak below bypassed it.&lt;br /&gt;
&lt;br /&gt;
1. Session state (27,302 events, 23% of the board). CookiesProcessor and the two&lt;br /&gt;
   interceptors logged a missing or expired cookie at ERROR. A logged-out or&lt;br /&gt;
   anonymous visitor is the normal case -- the code already handles it by&lt;br /&gt;
   redirecting to /login or returning 403 -- and each of these sits in a class&lt;br /&gt;
   whose surrounding lines already log at DEBUG. These never reach the handler,&lt;br /&gt;
   which is why its WARN-level treatment never applied. Now DEBUG.&lt;br /&gt;
&lt;br /&gt;
2. Client disconnect (19,349 events). There was no handler for it, so a client&lt;br /&gt;
   hanging up mid-response fell through to @ExceptionHandler(Exception.class) and&lt;br /&gt;
   was recorded as an unhandled server bug. Adds an IOException handler to both&lt;br /&gt;
   GlobalExceptionHandlers that logs a disconnect at DEBUG and everything else at&lt;br /&gt;
   ERROR with its 500 intact.&lt;br /&gt;
&lt;br /&gt;
   ⚠ ClientAbortException CANNOT be imported here: catalina is provided by the&lt;br /&gt;
   container and is not on either module&apos;s compileClasspath (verified against&lt;br /&gt;
   the configuration, not assumed). The match is therefore on the simple class&lt;br /&gt;
   name plus the &quot;broken pipe&quot;/&quot;connection reset&quot; messages, walked down the cause&lt;br /&gt;
   chain. A genuine IOException matches none of those and keeps its ERROR.&lt;br /&gt;
&lt;br /&gt;
   The handler returns null for a disconnect rather than a body: the connection&lt;br /&gt;
   that would carry it is already closed, and writing to it is what raised the&lt;br /&gt;
   exception. Null is the supported way to say &quot;handled, no body&quot; --&lt;br /&gt;
   HttpEntityMethodProcessor marks the request handled before reading the value.&lt;br /&gt;
&lt;br /&gt;
3. Business exceptions re-logged at ERROR (11 sites). Each catches a&lt;br /&gt;
   ProfitMandiBusinessException, logs it, and CONTINUES with a fallback -- a&lt;br /&gt;
   missing wallet history defaults to an empty list, a user not found by primary&lt;br /&gt;
   email is retried against the secondary. That is an expected outcome being&lt;br /&gt;
   reported as a failure, and logging it at ERROR pre-empted the handler that&lt;br /&gt;
   would have logged it at WARN. Now WARN.&lt;br /&gt;
&lt;br /&gt;
Selenium/WebDriver (58,776 events) is deliberately untouched: that is a genuinely&lt;br /&gt;
broken ChromeDriver, and muting it would hide Oppo/Realme IMEI activation failing.&lt;br /&gt;
It looks like noise only because one broken thing repeated 52,000 times.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/GlobalExceptionHandler.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LoginController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/WalletController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/interceptor/AuthenticationInterceptor.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/interceptor/RoleInterceptor.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/util/CookiesProcessor.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/AddressController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/BrandController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/GlobalExceptionHandler.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoWalletController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37728</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37728</guid></item>
<item><pubDate>Fri, 18 Sep 2026 05:07:16 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37715 – SD credit: stop read paths writing utilized_limit - the SD ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;SD credit: stop read paths writing utilized_limit - the SD Credit admin page and V2 getLoans mutated managed SDCreditRequirement entities to show recomputed utilization, so Hibernate dirty-checking flushed an UPDATE per partner at commit; fofo now feeds the view from display maps and getLoans detaches before the display write, leaving output identical&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/SDCreditRequirementRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/SDCreditRequirementRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/SDCreditController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/sd-credit-requirement-row.vm&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoSDCreditController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37715</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37715</guid></item>
<item><pubDate>Fri, 18 Sep 2026 04:20:00 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37706 – cart: take the cart row before any line, to break ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;cart: take the cart row before any line, to break a lock-ordering deadlock&lt;br /&gt;
&lt;br /&gt;
InnoDB was rolling back cart edits with &quot;Deadlock found when trying to get lock&quot;&lt;br /&gt;
(GlitchTip #53, 27 deadlocks) and losing others to OptimisticLockException&lt;br /&gt;
&quot;actual row count: 0; expected: 1&quot; (11 issues, 42 events). Both are the same cause.&lt;br /&gt;
&lt;br /&gt;
Two request paths took the same two rows in OPPOSITE orders. Adding a line INSERTs&lt;br /&gt;
into user.line, and line_cart_id_fk shared-locks the parent cart FIRST, line second.&lt;br /&gt;
Validation/hydration mutated the line rows FIRST and wrote cart.total_price second.&lt;br /&gt;
Run those concurrently on one cart and it is a cycle. Caught in the act on prod:&lt;br /&gt;
&lt;br /&gt;
  T1: INSERT user.line (cart_id=175180781)  -&gt; holds S on cart, waits S on line&lt;br /&gt;
  T2: UPDATE user.cart SET total_price=269340.0, version=175 WHERE version=174&lt;br /&gt;
                                            -&gt; holds X on line, waits X on cart&lt;br /&gt;
  *** WE ROLL BACK TRANSACTION (1)&lt;br /&gt;
&lt;br /&gt;
Fix is to give every mutating path one order: cart, then lines. CartRepository gains&lt;br /&gt;
selectByIdForUpdate, and it is called as the first statement of each path that writes&lt;br /&gt;
a cart line. Re-taking it inside one request is a no-op.&lt;br /&gt;
&lt;br /&gt;
A lock-ordering fix is all-or-nothing -- one path in the wrong order is enough to&lt;br /&gt;
re-form the cycle -- so this covers ALL TEN cart-line writers, not just the two that&lt;br /&gt;
happened to show up in the stack traces: createCartItem, clearCart, getCartValidation,&lt;br /&gt;
addItemsToCart (x2), addShoppingBag, validateForOpen (x2) and V2BillingController&apos;s&lt;br /&gt;
bind/unbindInsurance. The audit is worth re-running before adding another writer.&lt;br /&gt;
&lt;br /&gt;
Note validateForOpen and getCartValidation WRITE despite their names (they correct&lt;br /&gt;
cart_line quantity/price and roll up cart.total_price), which is why a &quot;validate&quot; call&lt;br /&gt;
was ever holding write locks. The lock is placed accordingly; making those genuinely&lt;br /&gt;
read-only is a separate, larger change.&lt;br /&gt;
&lt;br /&gt;
This also serialises concurrent edits to the SAME cart, which is what the @Version&lt;br /&gt;
column on Cart was already trying and failing to express. Different carts are&lt;br /&gt;
different rows, so there is no cost across partners.&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/cart/v2/CartValidationServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/CartRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/CartRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2BillingController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37706</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37706</guid></item>
<item><pubDate>Thu, 17 Sep 2026 22:46:05 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37698 – V2 getPricing: carry internal movement availability alongside the price  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;V2 getPricing: carry internal movement availability alongside the price&lt;br /&gt;
&lt;br /&gt;
Mirrors the fofo change so the two /getPricing endpoints answer alike. V2 is dormant but&lt;br /&gt;
component-scanned, so it has to keep compiling against the service signature.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoVendorController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37698</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37698</guid></item>
<item><pubDate>Thu, 17 Sep 2026 16:29:18 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37681 – feat(warehouse): resolve the logged-in user on V2 PO creation and ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(warehouse): resolve the logged-in user on V2 PO creation and GRN mismatch resolution&lt;br /&gt;
&lt;br /&gt;
V2 mirror of r37680, keeping the dormant V2 controllers in step with the fofo MVC ones.&lt;br /&gt;
&lt;br /&gt;
- createPurchaseOrder resolves the logged-in user via getEmailId + authRepository and sets createdBy&lt;br /&gt;
- resolvedMismatchRequest passes the resolver through&lt;br /&gt;
&lt;br /&gt;
Pairs with r37679.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoGrnController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoPurchaseOrderController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37681</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37681</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=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37657</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37657</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=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37641</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37641</guid></item>
<item><pubDate>Tue, 15 Sep 2026 17:23:03 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37635 – feat(pricing): V2 log tag_listing price changes; reference TP instead of ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(pricing): V2 log tag_listing price changes; reference TP instead of vendoritempricing in price drop and tag listing&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoOrderManagementController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoPriceDropController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoTagListingController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37635</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37635</guid></item>
<item><pubDate>Tue, 15 Sep 2026 17:14:31 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37633 – preffered app version revert  on server side it will ...</title><description>&lt;div&gt;&lt;strong&gt;ranu – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;preffered app version revert  on server side it will be client side&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/User.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2UserController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37633</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37633</guid></item>
<item><pubDate>Tue, 15 Sep 2026 14:15:39 +0530</pubDate><dc:creator>aman</dc:creator><title>Rev 37632 – fix(loi): don&apos;t leave an LOI half signed when the signed ...</title><description>&lt;div&gt;&lt;strong&gt;aman – 8 file(s) modified&lt;/strong&gt;&lt;br/&gt;fix(loi): don&apos;t leave an LOI half signed when the signed PDF fails to save&lt;br /&gt;
&lt;br /&gt;
Confirm Sign stores the partner OTP (/validateLoiOtp) before the browser builds and uploads the&lt;br /&gt;
signed PDF (/saveLoiDoc). When that second step failed - html2pdf not loaded from cdnjs, upload&lt;br /&gt;
rejected, tab closed, server error - nothing was shown, no LOI mail went out, no onboarding was&lt;br /&gt;
created, and because loiOtpPresent hid Generate LOI the filler could never re-sign (LOI 734).&lt;br /&gt;
&lt;br /&gt;
- pendingFormList: loiOtpPresent only when OTP AND loiDoc are both saved; new loiSignIncomplete&lt;br /&gt;
  flag shows a red &quot;signed LOI not saved&quot; note on the Pending LOI list (web + V2 app).&lt;br /&gt;
- loi-form.js Confirm Sign: every failure after the OTP says the LOI was NOT saved and how to&lt;br /&gt;
  retry; checks html2pdf is loaded; success alert only after /saveLoiDoc confirms; no double submit.&lt;br /&gt;
- /saveLoiDoc (fofo + V2): refuses a document without a verified OTP; a repeat call for an&lt;br /&gt;
  already saved LOI is a no-op (no second mail / completion).&lt;br /&gt;
- /validateLoiOtp (fofo + V2): clear message when no OTP was sent in 24h; reports the real&lt;br /&gt;
  rejection reason (e.g. OTP already used) instead of always &quot;wrong&quot;.&lt;br /&gt;
- sendSignedLoiPdfToPartner: filler without a manager no longer throws and rolls back the save.&lt;br /&gt;
- OtpProcessor.generateOtp: never hands back an already verified OTP under the 2-minute throttle.&lt;br /&gt;
- AppConfig version 423 for loi-form.js.&lt;br /&gt;
&lt;br /&gt;
Co-Authored-By: Claude Opus 5 (1M context) &amp;lt;&lt;a href=&quot;mailto:noreply@anthropic.com&quot;&gt;noreply@anthropic.com&lt;/a&gt;&gt;&lt;br /&gt;
Claude-Session: &lt;a href=&quot;https://claude.ai/code/session_01RhJD2sc6pf3Zd7f4hyGxhH&quot; target=&quot;_blank&quot;&gt;https://claude.ai/code/session_01RhJD2sc6pf3Zd7f4hyGxhH&lt;/a&gt;&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/LoiFormModel.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/dao/service/OtpProcessor.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/webapp/resources/js/loi-form.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/pendingForm.vm&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoLoiFormController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37632</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37632</guid></item>
<item><pubDate>Tue, 15 Sep 2026 13:16:01 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37629 – feat(mail): wire inactive-recipient filter and clean hardcoded addresses  Wire ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 16 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(mail): wire inactive-recipient filter and clean hardcoded addresses&lt;br /&gt;
&lt;br /&gt;
Wire MailRecipientFilter into googleMailSender and gmailRelaySender. Remove inactive/unknown addresses from recipient and access lists, fix typo addresses, bulk uploader gate to akhil.kumar, V2 brand fee gate to kamini.sharma.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&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/ContactUsController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/LeadController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/StoreController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/UserController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoDashboardController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoLeadController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoLoiFormController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoMonitorController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoRefferalController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoRetailerController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoServiceConfigController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoWalletController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoWebListingController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37629</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37629</guid></item>
<item><pubDate>Mon, 14 Sep 2026 17:10:47 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37624 – feat(price-drop): auto-approve V2 price drop DP/MOP into external vendor catalog ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(price-drop): auto-approve V2 price drop DP/MOP into external vendor catalog pricing&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoPriceDropController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37624</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37624</guid></item>
<item><pubDate>Mon, 14 Sep 2026 17:09:03 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37621 – V2 /entity honours activeOnly, defaulting to false  Same defect ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;V2 /entity honours activeOnly, defaulting to false&lt;br /&gt;
&lt;br /&gt;
Same defect as the fofo endpoint fixed in profitmandi-fofo r37620: the flag was&lt;br /&gt;
accepted and ignored. Defaulting to false keeps callers that omit it unchanged.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoContentController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37621</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37621</guid></item>
<item><pubDate>Sat, 12 Sep 2026 17:01:11 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37605 – Use the derived movement price in the v2 vendor controller ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Use the derived movement price in the v2 vendor controller too&lt;br /&gt;
&lt;br /&gt;
Same change as the fofo controller: /getPricing returns the movement price for internal&lt;br /&gt;
suppliers, and addVendorPricingIfMissing is gone. This copy is component-scanned, so&lt;br /&gt;
leaving it behind would have kept writing the pricing rows the fofo side stopped writing.&lt;br /&gt;
&lt;br /&gt;
Requires profitmandi-dao r37603.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoVendorController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37605</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37605</guid></item>
<item><pubDate>Fri, 11 Sep 2026 17:30:13 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37591 – Route V2 admin wallet adjustment through WalletServiceImpl  Byte-identical duplicate ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Route V2 admin wallet adjustment through WalletServiceImpl&lt;br /&gt;
&lt;br /&gt;
Byte-identical duplicate of the fofo /walletUpdate handler, with the same missing&lt;br /&gt;
row lock. Points at the shared walletService.applyManualAdjustment so both&lt;br /&gt;
modules share one code path.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoWalletController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37591</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37591</guid></item>
<item><pubDate>Wed, 09 Sep 2026 12:01:03 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37548 – v2 version some fixes</title><description>&lt;div&gt;&lt;strong&gt;ranu – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;v2 version some fixes&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/User.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2UserController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37548</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37548</guid></item>
<item><pubDate>Wed, 26 Aug 2026 13:16:24 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37412 – Whatsapp Apis</title><description>&lt;div&gt;&lt;strong&gt;vikas – 6 file(s) modified&lt;/strong&gt;&lt;br/&gt;Whatsapp Apis&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/config/WebMVCConfig.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/BotPenguinTestController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoLiquidationController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoUpSaleController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/resources/META-INF/prod.properties&lt;br /&gt;~ /trunk/profitmandi-web/src/main/resources/META-INF/staging.properties&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37412</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37412</guid></item>
<item><pubDate>Wed, 26 Aug 2026 13:13:33 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37411 – v2 version some fixes</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;v2 version some fixes&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2InsuranceController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37411</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37411</guid></item>
<item><pubDate>Mon, 24 Aug 2026 18:37:54 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37392 – Whatsapp Apis</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Whatsapp Apis&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2WalletController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37392</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37392</guid></item>
<item><pubDate>Mon, 24 Aug 2026 15:36:31 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37387 – Disable UPI data</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Disable UPI data&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2WalletController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37387</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37387</guid></item>
<item><pubDate>Mon, 24 Aug 2026 11:06:54 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37383 – Disable UPI data</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Disable UPI data&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2WalletController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37383</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37383</guid></item>
<item><pubDate>Fri, 21 Aug 2026 18:52:07 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37382 – Unbreak profitmandi-web: pass the optional fofoId r37377 added  r37377 ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Unbreak profitmandi-web: pass the optional fofoId r37377 added&lt;br /&gt;
&lt;br /&gt;
r37377 widened PurchaseReturnOrderRepository.selectByWarehouseIdsAndDateRange&lt;br /&gt;
with an optional fofoId so the FOFO Sale Returns partner filter could be a&lt;br /&gt;
predicate rather than a post-filter. r37378 updated the FOFO caller; this web&lt;br /&gt;
caller was missed, so it still passed 4 arguments to a 5-argument method and&lt;br /&gt;
profitmandi-web has not compiled since - the web war could not be built at all.&lt;br /&gt;
&lt;br /&gt;
/return/invoice has no partner picker (its only params are fromDate/toDate; the&lt;br /&gt;
fofoId param elsewhere in this controller belongs to searchDebitNotes), so null&lt;br /&gt;
is the right value: the impl only adds the fofoId predicate when non-null, which&lt;br /&gt;
is exactly this endpoint&apos;s pre-r37377 behaviour. No listing change.&lt;br /&gt;
&lt;br /&gt;
The other three methods r37377 added - selectPendingByWarehouseIds,&lt;br /&gt;
selectUnreceivedSince, selectEarliestCreateTimestamp - have no web callers; the&lt;br /&gt;
pending-queue screen is FOFO-only, so nothing else was left half-migrated.&lt;br /&gt;
&lt;br /&gt;
Verified all five modules compile.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoPurchaseReturnController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37382</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37382</guid></item>
<item><pubDate>Fri, 21 Aug 2026 18:44:23 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37381 – Guard empty item IN () and null billing address on ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Guard empty item IN () and null billing address on the app sale-details paths&lt;br /&gt;
&lt;br /&gt;
Mirrors fofo r37380 on the profitmandi-web side, where the same two defects exist.&lt;br /&gt;
&lt;br /&gt;
V2FofoOrderController (live mobile-app API, not the dormant fofo V2):&lt;br /&gt;
- sale details built itemIds from fofoOrderItems and passed them straight to&lt;br /&gt;
  itemRepository.selectByIds. An insurance-only sale has no fofo_order_item row,&lt;br /&gt;
  so the list is empty and selectAllByInOrderByDesc throws &quot;List should not be&lt;br /&gt;
  empty&quot;. The sibling sale-search method in this same file was already guarded;&lt;br /&gt;
  the detail method was not.&lt;br /&gt;
- customerBillingAddressObj was put into the response unconditionally, so an&lt;br /&gt;
  order with customerAddressId 0 (no address is required for a plain POS sale)&lt;br /&gt;
  returned null and the app had no name or phone to show. Fall back to the&lt;br /&gt;
  customer&apos;s own name and mobile, matching the invoice PDF. Applied at both sites.&lt;br /&gt;
&lt;br /&gt;
CustomerController: same empty-IN exposure in the customer order-history batch&lt;br /&gt;
fetch, where a customer whose only order is an insurance sale yields no order&lt;br /&gt;
items. Adds the java.util.HashMap import this file needed (it imports java.util&lt;br /&gt;
members individually).&lt;br /&gt;
&lt;br /&gt;
Verified profitmandi-web compiles clean with these changes. Note trunk currently&lt;br /&gt;
does NOT build: V2FofoPurchaseReturnController:635 still calls the 4-arg&lt;br /&gt;
selectByWarehouseIdsAndDateRange that r37377 widened to 5 args (r37378 updated&lt;br /&gt;
the fofo caller but not this one). That break is untouched here and needs its&lt;br /&gt;
own fix before a web war can be built.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/CustomerController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoOrderController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37381</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37381</guid></item>
<item><pubDate>Thu, 20 Aug 2026 15:49:15 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37373 – Active Scratch Offers</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Active Scratch Offers&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2WalletController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37373</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37373</guid></item>
<item><pubDate>Tue, 18 Aug 2026 14:52:54 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37341 – fix(rbm-dashboard): return full partner book and exclude inactive stores  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;fix(rbm-dashboard): return full partner book and exclude inactive stores&lt;br /&gt;
&lt;br /&gt;
/v2/fofo/rbm-dashboard capped partners/alerts at 50 by default. The RBM home&lt;br /&gt;
searches and filters client-side, so any partner outside that slice was&lt;br /&gt;
unfindable while summary.totalPartners reported the real (much larger) count.&lt;br /&gt;
&lt;br /&gt;
- limit now defaults to 0 = uncapped; an explicit ?limit=n is still honoured&lt;br /&gt;
  up to RBM_DASHBOARD_MAX_LIMIT (200)&lt;br /&gt;
- deactivated stores are skipped for the whole computation, not just alerts:&lt;br /&gt;
  they have no target, scored 0% and sorted to the top of the action list&lt;br /&gt;
- summary.limit reports 0 when uncapped instead of Integer.MAX_VALUE&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoMonitorController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37341</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37341</guid></item>
<item><pubDate>Fri, 14 Aug 2026 18:17:18 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37319 – Fix partner-performance tertiary: aggregate order items (qty*mop), not the POS-typed ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 6 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix partner-performance tertiary: aggregate order items (qty*mop), not the POS-typed order header&lt;br /&gt;
&lt;br /&gt;
The tertiary panel summed fofo_order.total_amount - a price typed at the partner POS&lt;br /&gt;
and never validated against the catalogue - and attributed each whole order to its&lt;br /&gt;
first line item&apos;s brand via .get(0). One mistyped digit inflated reported sell-out&lt;br /&gt;
10x, and mixed-brand orders booked 100% to the first brand, leaving the rest at zero.&lt;br /&gt;
Defect dates from r32000/r32034 (May 2023); the panel was the only tertiary consumer&lt;br /&gt;
diverging from the qty*mop basis.&lt;br /&gt;
&lt;br /&gt;
- New FofoOrder.selectMonthlyBrandTertiary: sum(quantity*mop) grouped by&lt;br /&gt;
  (year*100+month) and item brand - the same basis selectPartnerTertiarySales&lt;br /&gt;
  already uses for the DSR and the partner tier calculation&lt;br /&gt;
- PerformanceController: replaces two entity-loading queries (every FofoOrder and&lt;br /&gt;
  FofoOrderItem for 6 months) with one aggregate; all items now count, each under&lt;br /&gt;
  its own brand&lt;br /&gt;
- Month labels unchanged - toMonthLabel rebuilds the MMM&apos;&apos;uu key, template untouched&lt;br /&gt;
- Remove V2FofoPerformanceController, the /v2/fofo JSON copy carrying the same defect&lt;br /&gt;
&lt;br /&gt;
Verified against dev DB for fofo_id 175139501: Jul 2026 now 16,94,939 (panel&lt;br /&gt;
previously showed 50,92,440); all six months match the qty*mop basis.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/fofo/FofoOrder.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/MonthlyBrandTertiaryModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/FofoOrderRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/FofoOrderRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PerformanceController.java&lt;br /&gt;x /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoPerformanceController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37319</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37319</guid></item>
<item><pubDate>Fri, 14 Aug 2026 12:09:49 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37313 – v2 version some fixes</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;v2 version some fixes&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoOrderController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37313</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37313</guid></item>
<item><pubDate>Thu, 13 Aug 2026 17:44:34 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37305 – carry bag for silver at 1</title><description>&lt;div&gt;&lt;strong&gt;ranu – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;carry bag for silver at 1&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/CartServiceImpl.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=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37305</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37305</guid></item>
<item><pubDate>Thu, 13 Aug 2026 17:39:13 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37304 – v2 version some fixes</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;v2 version some fixes&lt;/div&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=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37304</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37304</guid></item>
<item><pubDate>Wed, 12 Aug 2026 22:10:01 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37298 – Default subCategoryId to 0 on endpoints that declare it required=false ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Default subCategoryId to 0 on endpoints that declare it required=false&lt;br /&gt;
&lt;br /&gt;
subCategoryId is a primitive int, so a required=false declaration with no&lt;br /&gt;
defaultValue makes Spring throw when the param is omitted:&lt;br /&gt;
&lt;br /&gt;
  Optional int parameter &apos;subCategoryId&apos; is present but cannot be translated&lt;br /&gt;
  into a null value due to being declared as a primitive type.&lt;br /&gt;
&lt;br /&gt;
v1 DealsController and GuestController already default it to 0; their v2&lt;br /&gt;
wrappers dropped that, and StoreController never had it on either version. Any&lt;br /&gt;
caller omitting the param got a 500 with a message that does not name the&lt;br /&gt;
parameter at fault.&lt;br /&gt;
&lt;br /&gt;
Adding the default only removes that failure path — every currently working&lt;br /&gt;
caller already sends a value, so no existing behaviour changes.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/StoreController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2DealsController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2GuestController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2StoreController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37298</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37298</guid></item>
<item><pubDate>Wed, 12 Aug 2026 11:58:47 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37293 – Fix region-ALL (fofoId=0 sentinel) handling on RBM home  active-offers: ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix region-ALL (fofoId=0 sentinel) handling on RBM home&lt;br /&gt;
&lt;br /&gt;
active-offers: regionId resolved via rows.get(0).getFofoId(), which is 0 for&lt;br /&gt;
region ALL, so selectByRetailerId(0) threw FOFOSTR_1000 &apos;Fofo store not found&apos;&lt;br /&gt;
(400) for every region-ALL user. Now filters fofoId&gt;0, picks an active store,&lt;br /&gt;
and falls back to the caller&apos;s fofoId when a region resolves to nothing.&lt;br /&gt;
&lt;br /&gt;
rbm-regions: dropdown now lists only regions holding an active retailer (with&lt;br /&gt;
activePartners count), which drops the ALL pseudo-region; users carrying the&lt;br /&gt;
sentinel get every live region as assignedRegionIds instead of an empty set.&lt;br /&gt;
&lt;br /&gt;
rbm-dashboard: expand the sentinel like CsServiceImpl does (row region -&gt;&lt;br /&gt;
its partners; region ALL -&gt; all active stores) so the partners tile stops&lt;br /&gt;
reporting 0/1. Scope-wide batches limited to stores/targets/purchases/&lt;br /&gt;
last-billed; name, wallet and loan lookups now run only over the returned&lt;br /&gt;
slice. partners and alerts capped via ?limit (default 50, max 200) with&lt;br /&gt;
partnersReturned/totalAlerts/alertsReturned/limit added to summary. Partners&lt;br /&gt;
with no target this month rank after those actually missing a target, so the&lt;br /&gt;
capped slice is not filled by unset-target stores.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoMonitorController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoOfferController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37293</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37293</guid></item>
<item><pubDate>Mon, 10 Aug 2026 11:12:34 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37273 – Apply same idempotent super-catalog mapping save to V2 controller  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Apply same idempotent super-catalog mapping save to V2 controller&lt;br /&gt;
&lt;br /&gt;
Keeps V2FofoSuperCatalogController in step with the fofo SuperCatalogController&lt;br /&gt;
fix (r37272) so the dormant endpoint cannot violate the new&lt;br /&gt;
UNIQUE(catalog_id, super_catalog_id) constraint if it is ever enabled.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoSuperCatalogController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37273</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37273</guid></item>
<item><pubDate>Thu, 06 Aug 2026 15:04:20 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37249 – Null check for email</title><description>&lt;div&gt;&lt;strong&gt;vikas – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Null check for email&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/BeatTrackingController.java&lt;br /&gt;+ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/services/RemarkScoreService.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2BeatTrackingController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37249</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-web%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fweb%2Fv2%2Fcontroller%2F&amp;isdir=1&amp;rev=37249</guid></item>
</channel></rss>