<?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>Wed, 26 Aug 2026 11:47:35 +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=37377</link><atom:link href="https://svn.smartdukaan.com/rss.php?path=%2F&amp;peg=37377&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Fri, 21 Aug 2026 14:30:40 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37377 – Queries behind the Sale Returns action-pending queue  The Sale ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Queries behind the Sale Returns action-pending queue&lt;br /&gt;
&lt;br /&gt;
The Sale Returns screen could only ever list purchase return orders received inside the&lt;br /&gt;
chosen date window, which left the returns that actually need someone unreachable: a&lt;br /&gt;
return order is written at receive time, so a debit note the warehouse has not received&lt;br /&gt;
yet has no return order at all and could not appear however the list was sorted.&lt;br /&gt;
&lt;br /&gt;
- selectPendingByWarehouseIds returns every unsettled return order with no date bound -&lt;br /&gt;
  received but unrefunded, or rejected but not yet acknowledged by the retailer. A return&lt;br /&gt;
  nobody acted on only gets older, so bounding it by date is what buried it&lt;br /&gt;
- selectUnreceivedSince finds debit notes with no return order against them, which is the&lt;br /&gt;
  only place a not-yet-received return exists. Cancelled notes are excluded&lt;br /&gt;
- selectEarliestCreateTimestamp exposes when the receive/refund flow went live. Notes&lt;br /&gt;
  raised before the first return order ever recorded were settled through the older&lt;br /&gt;
  item-level flow and are not a queue anyone can work, so the caller uses this to bound&lt;br /&gt;
  the lookup off the data rather than off a date pinned in code&lt;br /&gt;
- both listing queries now take an optional fofoId, so the partner filter is a predicate&lt;br /&gt;
  rather than a post-filter - filtering after the 200 row cap would silently drop a&lt;br /&gt;
  partner&apos;s older rows&lt;br /&gt;
&lt;br /&gt;
Counts on live data: 6 unsettled return orders, 24 unreceived debit notes since the flow&lt;br /&gt;
started, against 5,618 older notes correctly left out.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/DebitNoteRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/DebitNoteRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/PurchaseReturnOrderRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/PurchaseReturnOrderRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37377&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37377&amp;peg=37377</guid></item>
<item><pubDate>Thu, 20 Aug 2026 19:40:42 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37376 – total show on warehouse wise stock value on item detail</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;total show on warehouse wise stock value on item detail&lt;/div&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/warehouse_wise_stock_rows.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37376&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37376&amp;peg=37377</guid></item>
<item><pubDate>Thu, 20 Aug 2026 19:36:16 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37375 – total show on warehouse wise stock value on item detail</title><description>&lt;div&gt;&lt;strong&gt;ranu – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;total show on warehouse wise stock value on item detail&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/inventory/SaholicInventoryCIS.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/inventory/SaholicInventoryCISRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/inventory/SaholicInventoryCISRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37375&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37375&amp;peg=37377</guid></item>
<item><pubDate>Thu, 20 Aug 2026 18:51:17 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37374 – total show on warehouse wise stock value on item detail</title><description>&lt;div&gt;&lt;strong&gt;ranu – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;total show on warehouse wise stock value on item detail&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/AdminUser.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/DashboardController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/admin.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37374&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37374&amp;peg=37377</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=%2F&amp;isdir=1&amp;rev=37373&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37373&amp;peg=37377</guid></item>
<item><pubDate>Thu, 20 Aug 2026 13:21:07 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37372 – Fixed mail sender everywhere</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed mail sender everywhere&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/common/util/ExcelUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37372&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37372&amp;peg=37377</guid></item>
<item><pubDate>Thu, 20 Aug 2026 13:00:10 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37371 – Fixed mail sender everywhere</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed mail sender everywhere&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/gstpro/GstProAuthService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37371&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37371&amp;peg=37377</guid></item>
<item><pubDate>Thu, 20 Aug 2026 12:32:51 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37370 – Fixed mail sender everywhere</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed mail sender everywhere&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/gstpro/GstProAuthService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37370&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37370&amp;peg=37377</guid></item>
<item><pubDate>Thu, 20 Aug 2026 11:21:57 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37369 – Fixed mail sender everywhere</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed mail sender everywhere&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/Application.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37369&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37369&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 20:33:28 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37368 – Cron: raise SMTP timeouts, rotate app password, add offer-circular ingest ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Cron: raise SMTP timeouts, rotate app password, add offer-circular ingest keys&lt;br /&gt;
&lt;br /&gt;
- SMTP 10s -&gt; 30s connect / 120s read-write on both senders; the 10s read timeout was&lt;br /&gt;
  cutting off larger attachment sends. App password rotated to match the current&lt;br /&gt;
  Google account credential.&lt;br /&gt;
- offer.circular.ingest.enabled / offer.circular.review.url added to dev, staging and&lt;br /&gt;
  prod. Off by default in all three: enabling it makes the job pick up DRAFT circulars&lt;br /&gt;
  uploaded from the FOFO portal, parse them and mail the uploader, which should only be&lt;br /&gt;
  switched on once offer.circular.dir is a real path in that environment. There is no&lt;br /&gt;
  fallback between profiles, so the key has to exist in each one.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/Application.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/resources/META-INF/dev.properties&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/resources/META-INF/prod.properties&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/resources/META-INF/staging.properties&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37368&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37368&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 20:33:21 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37367 – Mail: raise SMTP timeouts and rotate the sdtech app password ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Mail: raise SMTP timeouts and rotate the sdtech app password&lt;br /&gt;
&lt;br /&gt;
The 10s read timeout was cutting off larger attachment sends (policy PDFs, invoice&lt;br /&gt;
attachments) and surfacing as a send failure the outbox then retried. Raised to 30s&lt;br /&gt;
connect / 120s read-write on both senders. App password rotated to match the current&lt;br /&gt;
Google account credential.&lt;br /&gt;
&lt;br /&gt;
Also fills in new.solr.url and store.app.url in staging.properties - staging carries no&lt;br /&gt;
fallback to dev/prod, so a missing key stops the context from starting.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&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=%2F&amp;isdir=1&amp;rev=37367&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37367&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 20:33:13 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37366 – Staging config: fill in the keys fofo needs to start ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Staging config: fill in the keys fofo needs to start on staging&lt;br /&gt;
&lt;br /&gt;
staging.properties is much thinner than dev/prod and there is no fallback between&lt;br /&gt;
profiles - a missing key stops the context from starting. Adds react.app.url (no&lt;br /&gt;
dedicated staging build of the react partner app exists, so it points at the prod&lt;br /&gt;
host), app.token.url (profitmandi-web is co-deployed on the same Tomcat there) and&lt;br /&gt;
media.document.url.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/resources/META-INF/staging.properties&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37366&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37366&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 20:33:08 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37365 – Debit note receive: surface the partner-declared condition and warn before ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Debit note receive: surface the partner-declared condition and warn before rejecting&lt;br /&gt;
&lt;br /&gt;
The receive screen defaulted every row&apos;s condition to GOOD regardless of what the&lt;br /&gt;
partner declared, so a warehouse user could not see what they were disagreeing with -&lt;br /&gt;
and the backend treats any disagreement as a rejection of the whole debit note.&lt;br /&gt;
&lt;br /&gt;
- Show &apos;Declared By Partner&apos; per row and preselect the condition to match it, so&lt;br /&gt;
  submitting unchanged is a genuine agreement rather than an accident of the default.&lt;br /&gt;
- A changed row now switches the submit button to &apos;Reject Return&apos;, shows what rejection&lt;br /&gt;
  means (no refund; partner, Logistics, RBM and Sales notified), makes the remark&lt;br /&gt;
  mandatory and confirms before posting.&lt;br /&gt;
- SMTP timeouts raised to 30s connect / 120s read-write; the 10s read timeout was&lt;br /&gt;
  cutting off larger attachment sends.&lt;br /&gt;
- jsVersion 405 -&gt; 406 for the return.js change.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/business/return.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/receive-debit-note.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37365&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37365&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 20:32:59 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37364 – Offer circular ingest: report discarded rows instead of counting attempts ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Offer circular ingest: report discarded rows instead of counting attempts&lt;br /&gt;
&lt;br /&gt;
Pairs with the repository change that makes insertBenefit/insertTenure/insertBank return&lt;br /&gt;
their affected row count. The summary now bumps only when a row actually landed, and&lt;br /&gt;
records a drop naming the likely unseeded master (offers.txn_mode / emi_scheme / bank)&lt;br /&gt;
when it did not. Without this an ingest over empty masters reported a full, healthy&lt;br /&gt;
parse while writing nothing.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/CircularIngestService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37364&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37364&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 20:32:53 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37363 – Offer circular ingest: return affected rows so INSERT IGNORE cannot ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Offer circular ingest: return affected rows so INSERT IGNORE cannot hide an FK failure&lt;br /&gt;
&lt;br /&gt;
insertBenefit/insertTenure/insertBank use INSERT IGNORE for idempotency, which also&lt;br /&gt;
makes MySQL downgrade a foreign key violation to a warning. Production was bootstrapped&lt;br /&gt;
without the bank / txn_mode / emi_scheme masters, so all 872 benefit and tenure inserts&lt;br /&gt;
were silently discarded: the ingest reported PUBLISHED with 239 offers carrying no&lt;br /&gt;
amounts, no tenures and no bank eligibility, and nothing anywhere said so.&lt;br /&gt;
&lt;br /&gt;
The three methods now return the affected row count (1 written, 0 discarded) so the&lt;br /&gt;
caller can count what landed rather than what it attempted.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/CircularIngestRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/CircularIngestRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37363&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37363&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 20:32:47 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37362 – External feed: keep placeholder &apos;Any Colour&apos; SKUs out of the ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;External feed: keep placeholder &apos;Any Colour&apos; SKUs out of the partner feed&lt;br /&gt;
&lt;br /&gt;
catalog.item rows whose color is a placeholder (&quot;Any Colour&quot;, &quot;f_Any Color&quot;, ...) are&lt;br /&gt;
not real sellable variants and must never reach partners. Excluded from every feed and&lt;br /&gt;
count query via a single NO_PLACEHOLDER_SKU predicate so the SKU list and its count&lt;br /&gt;
cannot drift apart. The boundary check leaves real colors like &quot;Rainbow&quot; untouched.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/external/ExternalFeedRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37362&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37362&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 20:32:41 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37361 – Mail outbox: one transaction per mail, retry once more, stable ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Mail outbox: one transaction per mail, retry once more, stable Message-ID&lt;br /&gt;
&lt;br /&gt;
processPendingMails ran the whole batch in a single REQUIRES_NEW transaction, so a&lt;br /&gt;
crash mid-batch rolled back the status of every mail already delivered in that cycle&lt;br /&gt;
and the next run re-sent them.&lt;br /&gt;
&lt;br /&gt;
- Split into selectPendingIds (read-only) plus sendOne per mail, each REQUIRES_NEW via&lt;br /&gt;
  a @Lazy self-reference so the proxy actually applies. Outcome is committed as soon&lt;br /&gt;
  as it is known; a crash now loses at most the mail in flight.&lt;br /&gt;
- MailOutbox.selectPending retries FAILED rows once more (retryCount &amp;lt; 2).&lt;br /&gt;
- Stable per-row Message-ID so a retry arrives as the same message and the receiving&lt;br /&gt;
  server can collapse it instead of showing a duplicate.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/mail/MailOutbox.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37361&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37361&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 20:30:29 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37360 – ICICI policy issuance: stop losing policies to a proposal read ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;ICICI policy issuance: stop losing policies to a proposal read timeout&lt;br /&gt;
&lt;br /&gt;
hitAfinityProposal called ICICI&apos;s gadget proposal endpoint on the default 10s socket&lt;br /&gt;
timeout. That POST issues the policy, so a read timeout abandons a request ICICI is&lt;br /&gt;
still completing. The exception then unwound through generateIciciLombardPolicy into&lt;br /&gt;
the controller&apos;s @Transactional(rollbackFor = Throwable.class), rolling back the whole&lt;br /&gt;
request - including the wallet debit - before the tracker row was ever touched. Result:&lt;br /&gt;
policy possibly live at ICICI, no trace on our side, and the &apos;policy already exists&apos;&lt;br /&gt;
retry path dead-ends because its Redis cache is only written on a parsed success.&lt;br /&gt;
&lt;br /&gt;
- Proposal and policy-certificate calls move to a dedicated RestClient built on&lt;br /&gt;
  HttpClientFactory.insuranceIssuanceRequestConfig() (socket 45s). JWT and quote stay&lt;br /&gt;
  on the default client - fast, and no remote write.&lt;br /&gt;
- Transport failures are classified via HttpTransportFailures and reported as &apos;outcome&lt;br /&gt;
  unknown&apos;, not as an ICICI rejection.&lt;br /&gt;
- IciciPolicyTrackerBookkeeping writes the tracker in REQUIRES_NEW, so both the UNKNOWN&lt;br /&gt;
  outcome and the issued policy number survive the request rollback. Recovery from an&lt;br /&gt;
  UNKNOWN row is the existing recoverPolicyNumberByProposalNumber path.&lt;br /&gt;
&lt;br /&gt;
Code only, no DDL: status is varchar(20) and remarks is text on prod already.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/icicilombard/IciciLombardService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/icicilombard/IciciPolicyTrackerBookkeeping.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37360&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37360&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 20:30:18 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37359 – ICICI proposal read timeout: add insurance-issuance HTTP config + shared ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;ICICI proposal read timeout: add insurance-issuance HTTP config + shared transport-failure classifier&lt;br /&gt;
&lt;br /&gt;
The default RestClient carries a 10s socket timeout, sized for quick lookups. ICICI&apos;s&lt;br /&gt;
gadget proposal endpoint underwrites and issues the policy synchronously and needs&lt;br /&gt;
longer; abandoning the read discards the only response carrying the policy and&lt;br /&gt;
proposal numbers for a policy that is already live at the insurer.&lt;br /&gt;
&lt;br /&gt;
- HttpClientFactory.insuranceIssuanceRequestConfig(): connect 5s, socket 45s. Not&lt;br /&gt;
  slowRegulatorRequestConfig() - its contract forbids request-thread use with an open&lt;br /&gt;
  transaction, which is exactly the ICICI call site.&lt;br /&gt;
- HttpTransportFailures: cause-chain check separating &apos;the call never completed&apos; from&lt;br /&gt;
  &apos;the remote said no&apos;. Needed because RestClient rewraps transport errors as&lt;br /&gt;
  RuntimeException(GE_1006), so the top-level exception type is uninformative.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/web/client/HttpClientFactory.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/web/client/HttpTransportFailures.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37359&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37359&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 18:04:00 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37358 – total show on warehouse wise stock value on item detail</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;total show on warehouse wise stock value on item detail&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/warehouse_item_details.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37358&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37358&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 18:01:36 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37357 – Add CsService.getAuthUsersByPartnerIdAndCategory for partner+category+escalation lookup  sendMailForActionOnDispatch mailed every L1 ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add CsService.getAuthUsersByPartnerIdAndCategory for partner+category+escalation lookup&lt;br /&gt;
&lt;br /&gt;
sendMailForActionOnDispatch mailed every L1 position on the partner, which on live data&lt;br /&gt;
means the DESIGN (17), SALES (4) and WAREHOUSE (11) owners as well as the RBM (18). It&lt;br /&gt;
also hand-rolled the partner_position -&gt; position -&gt; auth_user walk against repositories.&lt;br /&gt;
&lt;br /&gt;
Add a single reusable resolver on CsService: active auth users holding one position&lt;br /&gt;
category against a partner, optionally narrowed to escalation levels. It follows the&lt;br /&gt;
house resolver shape - the partner&apos;s own regions plus ALL_PARTNERS_REGION, partner_id in&lt;br /&gt;
(0, fofoId) - so region-wide mappings are honoured, and it short-circuits on empty id&lt;br /&gt;
lists because selectByIds builds an IN () predicate that breaks on an empty list.&lt;br /&gt;
&lt;br /&gt;
The call site in TransactionServiceImpl went in with r37356; without this commit trunk&lt;br /&gt;
does not compile.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/cs/CsService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/cs/CsServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37357&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37357&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 17:59:24 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37356 – Fixed max limit to 15 lac for Credit limit</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed max limit to 15 lac for Credit limit&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/TransactionServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37356&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37356&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 13:23:38 +0530</pubDate><dc:creator>aman</dc:creator><title>Rev 37355 – AI lead intake (fofo, live): assign new leads to a ...</title><description>&lt;div&gt;&lt;strong&gt;aman – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;AI lead intake (fofo, live): assign new leads to a random active BGC L1 instead of the hardcoded Khushbu/Archana round-robin&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LeadController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37355&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37355&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 13:22:05 +0530</pubDate><dc:creator>aman</dc:creator><title>Rev 37354 – AI lead intake: pool is BGC L1 (category 20), not ...</title><description>&lt;div&gt;&lt;strong&gt;aman – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;AI lead intake: pool is BGC L1 (category 20), not Sales L1 - BGC is the desk that works AI leads&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/LeadController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37354&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37354&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 13:16:59 +0530</pubDate><dc:creator>aman</dc:creator><title>Rev 37353 – AI lead intake: assign new leads to a random active ...</title><description>&lt;div&gt;&lt;strong&gt;aman – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;AI lead intake: assign new leads to a random active Sales L1 instead of fixed auth id 53&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/LeadController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37353&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37353&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 12:30:38 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37352 – Fixed max limit to 15 lac for Credit limit</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed max limit to 15 lac for Credit limit&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/PartnerLimitHelper.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37352&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37352&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 11:04:35 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37351 – code committed for sales l3 added in bi and other ...</title><description>&lt;div&gt;&lt;strong&gt;ranu – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;code committed for sales l3 added in bi and other model&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledTasks.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledTasksTest.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/BIRetailerModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/FofoReportingModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/cs/CsServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37351&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37351&amp;peg=37377</guid></item>
<item><pubDate>Wed, 19 Aug 2026 09:52:34 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37350 – Fix SD Credit daily statement showing zero interest on overdue ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix SD Credit daily statement showing zero interest on overdue loans&lt;br /&gt;
&lt;br /&gt;
sdDirectService classified each day&apos;s interest by exact-matching the&lt;br /&gt;
loan_statement description (&apos;Interest On Loan Per Day&apos; /&lt;br /&gt;
&apos;Penalty On Loan Per Day&apos;). Once a loan crossed its due date the cron&lt;br /&gt;
switches the label to &apos;Overdue Interest On Loan Per Day&apos;, which matched&lt;br /&gt;
neither filter, so the daily statement reported 0.00 interest for every&lt;br /&gt;
overdue day even though the charge was booked correctly in&lt;br /&gt;
loan_statement and loan.interest_accured.&lt;br /&gt;
&lt;br /&gt;
Classify by tenure window against loan.getPenaltyDate() instead - the&lt;br /&gt;
same test addInterest() uses to pick the rate - and net the day&apos;s full&lt;br /&gt;
interest out of the opening balance so penalty days are consistent too.&lt;br /&gt;
&lt;br /&gt;
Seen on loan 120277 (invoice NSLCK35860): Rs.73-83/day accruing from&lt;br /&gt;
08-Aug, displayed as 0.00.&lt;/div&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=37350&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37350&amp;peg=37377</guid></item>
<item><pubDate>Tue, 18 Aug 2026 18:31:10 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37349 – super retailer club 5 live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;super retailer club 5 live&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/OrderRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37349&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37349&amp;peg=37377</guid></item>
<item><pubDate>Tue, 18 Aug 2026 18:26:37 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37348 – super retailer club 5 live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;super retailer club 5 live&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/OrderRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/OrderRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/DashboardController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37348&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37348&amp;peg=37377</guid></item>
<item><pubDate>Tue, 18 Aug 2026 16:58:26 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37347 – Give the ingest runner a transaction; it had none on ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Give the ingest runner a transaction; it had none on its background thread&lt;br /&gt;
&lt;br /&gt;
Parsing failed instantly on production with&lt;br /&gt;
&lt;br /&gt;
  org.hibernate.HibernateException: Could not obtain transaction-synchronized&lt;br /&gt;
  Session for current thread&lt;br /&gt;
    at CircularIngestRepositoryImpl.claimForProcessing&lt;br /&gt;
    at CircularIngestRunner.processOne&lt;br /&gt;
&lt;br /&gt;
The runner works on a background thread. Nothing binds a Hibernate session to it, so&lt;br /&gt;
the very first repository call - the claim - threw. Worse, the failure handler called&lt;br /&gt;
markFailed, which threw for the same reason, so nothing was recorded: the document sat&lt;br /&gt;
in DRAFT with no error, no processed_at and no outward sign that anything had gone&lt;br /&gt;
wrong. CircularIngestService.ingest was never reached.&lt;br /&gt;
&lt;br /&gt;
This was latent in the cron version too. It never surfaced because that scheduler was&lt;br /&gt;
never actually deployed anywhere.&lt;br /&gt;
&lt;br /&gt;
- New CircularIngestBookkeeping: claim / document / published / failed /&lt;br /&gt;
  reclaimStalled, each REQUIRES_NEW. Independent transactions matter most for failed(),&lt;br /&gt;
  which runs after the ingest transaction has already rolled back and must not be&lt;br /&gt;
  dragged into it.&lt;br /&gt;
- It is a SEPARATE bean on purpose. @Transactional on the runner&apos;s own methods would be&lt;br /&gt;
  invoked from inside its own Runnable - a self-invocation never passes through the&lt;br /&gt;
  Spring proxy, so the annotation would be silently ignored and the bug would come back&lt;br /&gt;
  wearing a disguise.&lt;br /&gt;
- The runner no longer touches CircularIngestRepository at all.&lt;br /&gt;
&lt;br /&gt;
Not caught locally because the RunIngest harness uses JdbcIngestRepo, a plain-JDBC&lt;br /&gt;
implementation that bypasses Hibernate entirely - so it can reproduce the parsing but&lt;br /&gt;
never a session or transaction problem.&lt;/div&gt;+ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/CircularIngestBookkeeping.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/offercircular/CircularIngestRunner.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37347&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37347&amp;peg=37377</guid></item>
<item><pubDate>Tue, 18 Aug 2026 16:45:26 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37346 – Sort sale returns so the ones still needing an action ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Sort sale returns so the ones still needing an action come first&lt;br /&gt;
&lt;br /&gt;
The Recently Received Debit Notes table was ordered purely by receive time, so a&lt;br /&gt;
return waiting on a refund or on the partner&apos;s acknowledgment sank below rows that&lt;br /&gt;
were already refunded and needed nothing. On a busy warehouse the actionable rows&lt;br /&gt;
were off the first screen.&lt;br /&gt;
&lt;br /&gt;
- recentOrders is now ranked pending-first (Received - Pending Refund, Rejected -&lt;br /&gt;
  Pending Acknowledgment) ahead of settled ones (Refunded, Cancelled), with the&lt;br /&gt;
  existing receiveTimestamp DESC kept as the tie-breaker inside each group&lt;br /&gt;
- getPendingActionRank follows the same precedence invoice-return.vm uses to pick&lt;br /&gt;
  the status badge - reject checked before refund - so the ordering can never&lt;br /&gt;
  disagree with the label the user sees&lt;br /&gt;
- ranked on the return&apos;s own state, not on the viewer&apos;s canReceive/canRefund&lt;br /&gt;
  permissions, so a pending return stays at the top for everyone looking at it&lt;br /&gt;
&lt;br /&gt;
Presentation only; no query, entity or lifecycle change. Note that returns never&lt;br /&gt;
received at all cannot surface here regardless, since the query filters on&lt;br /&gt;
receiveTimestamp BETWEEN the selected dates.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PurchaseReturnController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37346&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37346&amp;peg=37377</guid></item>
<item><pubDate>Tue, 18 Aug 2026 16:12:06 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37345 – Beat Journey (today): LOI-based &apos;Onboarded&apos; + last-billing recency board columns, ...</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Beat Journey (today): LOI-based &apos;Onboarded&apos; + last-billing recency board columns, level-filtered orders list (grouped by partner), and flag tuning — remove #1/#3, use per-visit total_distance for #4.&lt;br /&gt;
&lt;br /&gt;
Co-Authored-By: Claude Opus 4.8 (1M context) &amp;lt;&lt;a href=&quot;mailto:noreply@anthropic.com&quot;&gt;noreply@anthropic.com&lt;/a&gt;&gt;&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/BeatJourneyController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37345&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37345&amp;peg=37377</guid></item>
<item><pubDate>Tue, 18 Aug 2026 16:05:12 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37344 – Beat Journey: LoiFormRepository.selectMaxApprovedAcquiredDateByBdm() — max approved-LOI acquiredDate per BDM, powering ...</title><description>&lt;div&gt;&lt;strong&gt;vikas – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Beat Journey: LoiFormRepository.selectMaxApprovedAcquiredDateByBdm() — max approved-LOI acquiredDate per BDM, powering the board &apos;Onboarded&apos; column (store.active_timestamp is null for all stores).&lt;br /&gt;
&lt;br /&gt;
Co-Authored-By: Claude Opus 4.8 (1M context) &amp;lt;&lt;a href=&quot;mailto:noreply@anthropic.com&quot;&gt;noreply@anthropic.com&lt;/a&gt;&gt;&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/LoiFormRepository.java&lt;br /&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=37344&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37344&amp;peg=37377</guid></item>
<item><pubDate>Tue, 18 Aug 2026 15:18:27 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 37343 – Update PJP, Visit quality flags</title><description>&lt;div&gt;&lt;strong&gt;vikas – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Update PJP, Visit quality flags&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/BeatJourneyController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/beat-journey.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37343&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37343&amp;peg=37377</guid></item>
<item><pubDate>Tue, 18 Aug 2026 14:59:37 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37342 – Allow re-ingest to start a circular already sitting in DRAFT ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Allow re-ingest to start a circular already sitting in DRAFT&lt;br /&gt;
&lt;br /&gt;
Moving the parse into the portal turned DRAFT into a dead end. Under the cron&lt;br /&gt;
scheduler DRAFT meant &quot;something will pick me up&quot;, so re-ingest only ever had to push&lt;br /&gt;
a document back into it, and PUBLISHED/FAILED were the only sensible sources. Nothing&lt;br /&gt;
polls DRAFT any more - the runner is triggered by the upload that created the&lt;br /&gt;
document - so a circular whose trigger never fired had no way to be started at all.&lt;br /&gt;
&lt;br /&gt;
That is not hypothetical: the Aug&apos;26 circular uploaded to production before the runner&lt;br /&gt;
was deployed sits in DRAFT, and pressing re-ingest matched zero rows and reported&lt;br /&gt;
&quot;not started&quot;.&lt;br /&gt;
&lt;br /&gt;
DRAFT now joins PUBLISHED and FAILED as a valid source state. PROCESSING stays&lt;br /&gt;
excluded - that one is genuinely in flight - and claimForProcessing remains the single&lt;br /&gt;
arbiter of who actually parses, so allowing DRAFT cannot cause a double parse.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/OfferCurationRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/offers/OfferCurationRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37342&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37342&amp;peg=37377</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=%2F&amp;isdir=1&amp;rev=37341&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37341&amp;peg=37377</guid></item>
<item><pubDate>Tue, 18 Aug 2026 14:46:23 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37340 – Fixed max limit to 15 lac for Credit limit</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed max limit to 15 lac for Credit limit&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/scheduled/ScheduledTasks.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37340&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37340&amp;peg=37377</guid></item>
<item><pubDate>Tue, 18 Aug 2026 13:48:38 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37339 – Fixed max limit to 15 lac for Credit limit</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed max limit to 15 lac for Credit limit&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/PartnerLimitHelper.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37339&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37339&amp;peg=37377</guid></item>
<item><pubDate>Tue, 18 Aug 2026 13:38:14 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37338 – Remove offer-circular ingest from cron - it now runs in ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Remove offer-circular ingest from cron - it now runs in the portal&lt;br /&gt;
&lt;br /&gt;
Counterpart to the fofo commit that moved the parse into profitmandi-fofo. Nothing is&lt;br /&gt;
lost: all 13 parser classes and the test moved verbatim, and CircularIngestScheduler&lt;br /&gt;
was replaced by an executor-driven runner in the portal.&lt;br /&gt;
&lt;br /&gt;
- com.smartdukaan.cron.offercircular deleted, main and test&lt;br /&gt;
- tabula dependency removed; PDFBox no longer enters this artifact at all&lt;br /&gt;
- dumpCircularClasspath moved to fofo, where the parser and its classpath now live&lt;br /&gt;
&lt;br /&gt;
This module no longer knows anything about offer circulars, so a cron rebuild is no&lt;br /&gt;
longer a prerequisite for the feature to work - which was the entire problem.&lt;/div&gt;~ /trunk/profitmandi-cron/build.gradle&lt;br /&gt;x /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/offercircular&lt;br /&gt;x /trunk/profitmandi-cron/src/test/java/com/smartdukaan/cron/offercircular&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37338&amp;peg=37377</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37338&amp;peg=37377</guid></item>
</channel></rss>