<?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>Thu, 17 Sep 2026 13:03:20 +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=37523</link><atom:link href="https://svn.smartdukaan.com/rss.php?peg=37523&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Thu, 03 Sep 2026 01:08:56 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37523 – loi process added, revival and code changes process</title><description>&lt;div&gt;&lt;strong&gt;ranu – 12 file(s) modified&lt;/strong&gt;&lt;br/&gt;loi process added, revival and code changes process&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/onBoarding/LoiForm.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/onBoarding/LoiFormData.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/user/StoreTimelinetb.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/loiForm/LoiFormServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/StoreTimelineTatService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/StoreTimelineTatServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LoiFormController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PartnerOnBoardingPanelController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/loi-form.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/loi-form.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/rbm-drr-dashboard.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37523&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37523&amp;peg=37523</guid></item>
<item><pubDate>Wed, 02 Sep 2026 19:36:55 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37522 – rbm drr dashboard po fragment ui modification</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard po fragment ui modification&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/rbm-drr-dashboard.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37522&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37522&amp;peg=37523</guid></item>
<item><pubDate>Wed, 02 Sep 2026 18:57:41 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37521 – rbm drr dashboard position wise data</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard position wise data&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesDownlineMonthlyTargetModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37521&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37521&amp;peg=37523</guid></item>
<item><pubDate>Wed, 02 Sep 2026 18:56:57 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37520 – rbm drr dashboard position wise data</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard position wise data&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesDownlineAchievedByMovementModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37520&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37520&amp;peg=37523</guid></item>
<item><pubDate>Wed, 02 Sep 2026 18:55:51 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37519 – rbm drr dashboard position wise data</title><description>&lt;div&gt;&lt;strong&gt;ranu – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard position wise data&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesHierarchyAchievedByMovementModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesHierarchyMonthlyTargetModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/RbmDrrDashboardController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37519&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37519&amp;peg=37523</guid></item>
<item><pubDate>Wed, 02 Sep 2026 12:02:19 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37518 – notification scheduler</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification scheduler&lt;/div&gt;+ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/NotificationDispatchScheduler.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37518&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37518&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 19:18:57 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37517 – rbm drr dashboard position wise data</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard position wise data&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/rbm-drr-dashboard.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37517&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37517&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:58:29 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37516 – pending loi download access given to raj singh</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;pending loi download access given to raj singh&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LoiFormController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37516&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37516&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:49:08 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37515 – notification live fix conflict in app config</title><description>&lt;div&gt;&lt;strong&gt;ranu – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live fix conflict in app config&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/CampaignGroup.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/CampaignGroupRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/CampaignGroupRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37515&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37515&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:47:46 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37514 – notification live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/enumuration/ScheduleStatus.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37514&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37514&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:46:42 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37513 – notification live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/NotificationTargetCriteria.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/NotificationSchedule.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationScheduleRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationScheduleRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/config/AppConfig.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/resources/js/notification-calendar.js&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/notification-calendar.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37513&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37513&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:41:08 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37512 – notification live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/LinkedEntity.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37512&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37512&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:40:18 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37511 – notification live</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/enumuration/NotificationFormat.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37511&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37511&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:39:11 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37510 – sales target and achievement added cron and flags</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;sales target and achievement added cron and flags&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/Application.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37510&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37510&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:38:33 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37509 – rbm drr dashboard , all today po rbm view maped</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard , all today po rbm view maped&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/enumuration/NotificationCategory.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37509&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37509&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:12:41 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37508 – notification live new ....api and modification , ui</title><description>&lt;div&gt;&lt;strong&gt;ranu – 11 file(s) modified&lt;/strong&gt;&lt;br/&gt;notification live new ....api and modification , ui&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/Notification.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/SendNotificationModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/NotificationCampaign.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SimpleCampaignParams.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationCampaignRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/NotificationCampaignRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/NotificationService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/NotificationServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/NotificationController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/send-notification.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/send-notification.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37508&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37508&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:11:31 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37507 – rbm drr dashboard , all today po rbm view maped</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard , all today po rbm view maped&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesHierarchyMonthlyTargetModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37507&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37507&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 18:10:56 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37506 – rbm drr dashboard , all today po rbm view maped</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard , all today po rbm view maped&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/SalesHierarchyAchievedByMovementModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37506&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37506&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 17:49:23 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37505 – rbm drr dashboard , all today po rbm view maped</title><description>&lt;div&gt;&lt;strong&gt;ranu – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard , all today po rbm view maped&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/RbmDrrDashboardController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37505&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37505&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 16:59:34 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37504 – Stop invoice read paths creating directories (AccessDeniedException 500s)  getInvoicePath ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Stop invoice read paths creating directories (AccessDeniedException 500s)&lt;br /&gt;
&lt;br /&gt;
getInvoicePath called Files.createDirectories, and getInvoiceFile called it on every&lt;br /&gt;
download. Invoices are generated by the cron app as root, so /SaholicInvoices/&amp;lt;month&gt;&lt;br /&gt;
is 755 root-owned; a download served by Tomcat cannot create a retailer subdirectory&lt;br /&gt;
and threw AccessDeniedException.&lt;br /&gt;
&lt;br /&gt;
It threw on line 1 of getInvoiceFile, before the Files.exists check, so the&lt;br /&gt;
ProfitMandiBusinessException on the next line was unreachable and the callers&apos;&lt;br /&gt;
deliberate 404 handler (&quot;Invoice not yet generated, please retry shortly&quot;) never ran.&lt;br /&gt;
Downloads for a not-yet-generated invoice 500ed instead of 404ing - the exact log&lt;br /&gt;
noise that handler was added to remove.&lt;br /&gt;
&lt;br /&gt;
Split the path computation out: resolveInvoicePath is side-effect free and used by&lt;br /&gt;
getInvoiceFile; getInvoicePath keeps the mkdir for the two generation callers&lt;br /&gt;
(InvoiceService:558, GstProService:952). The legacy relocation branch creates the&lt;br /&gt;
target directory only when there is actually a file to move.&lt;br /&gt;
&lt;br /&gt;
No ops change needed - generation as root already works.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/invoicing/InvoiceService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37504&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37504&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 16:35:38 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37503 – sales target and achievement added cron and flags</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;sales target and achievement added cron and flags&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/Application.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37503&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37503&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 16:32:50 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37502 – sales target and achievement added cron and flags</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;sales target and achievement added cron and flags&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/icicilombard/model/LastTransactionsResponseModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37502&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37502&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 16:26:05 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37501 – sales target and achievement added cron and flags</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;sales target and achievement added cron and flags&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/icicilombard/model/LastTransactionsRequestModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37501&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37501&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 16:19:27 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37500 – sales target and achievement added cron and flags</title><description>&lt;div&gt;&lt;strong&gt;ranu – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;sales target and achievement added cron and flags&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/inventory/SalesAchievements.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/SalesAchievementsRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/SalesAchievementsRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37500&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37500&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 16:09:28 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37499 – sales target and achievement added cron and flags</title><description>&lt;div&gt;&lt;strong&gt;ranu – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;sales target and achievement added cron and flags&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/Application.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledTasks.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/inventory/SalesTargets.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/SalesTargetsRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/SalesTargetsRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/integrations/icicilombard/IciciLombardService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37499&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37499&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 15:55:04 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37498 – Fix: namespace document-level handlers in remaining vm fragments  Completes ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 35 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix: namespace document-level handlers in remaining vm fragments&lt;br /&gt;
&lt;br /&gt;
Completes the sweep started in r37493/r37494. These fragments are injected&lt;br /&gt;
with .html(), which re-executes their inline &amp;lt;script&gt;, so every load stacked&lt;br /&gt;
another $(document) delegated handler. Mutating handlers then fired N&lt;br /&gt;
identical requests and were rejected as duplicates; read-only ones silently&lt;br /&gt;
fired N GETs (never deduped, so no alert - just N times the load).&lt;br /&gt;
&lt;br /&gt;
35 fragments, 70 bindings. Adopts the create-purchase-return.vm convention:&lt;br /&gt;
one $(document).off(&apos;.ns&apos;) before the first binding, every event namespaced,&lt;br /&gt;
so only the newest binding survives a re-injection.&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
- ticket.vm binds via jQuery(document).on, which the earlier passes did not&lt;br /&gt;
  match, and its clear must sit OUTSIDE ready() - that callback fires async,&lt;br /&gt;
  so an inside-ready clear would wipe the top-level binds registered before it.&lt;br /&gt;
- agreement-esign-panel, full-stock-payment-panel and create-purchase-return&lt;br /&gt;
  were left alone; they already clear their handlers (selector-targeted&lt;br /&gt;
  .off(&apos;click&apos;, sel) and .off(&apos;.createpr&apos;) respectively).&lt;br /&gt;
&lt;br /&gt;
Behaviour-preserving: every diff line is either a namespace suffix on an&lt;br /&gt;
event string or a new off() call. Selectors, handlers and ordering untouched.&lt;br /&gt;
Verified no unprotected document-level bindings remain in any fragment.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/activation-tabular.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/add-wallet-rejected.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/add-wallet-req.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/add-wallet-request.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/auth_user_partner_detail.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/beat-plan-deferred.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/beat-report-data.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/beat-report-user-detail.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/bulk-order.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/bulletin-list.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/catalog.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/dashboard-modal.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/design-completed.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/finance-services.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/lead-geo-review.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/lead.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/loi-form.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/managerTicket.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/my-partner-tickets.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/onboarding_timeline.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/order-index.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/partner-onboarding-design-index.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/partner-onboarding-index.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/partner-onboarding-open.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/partner-onboarding-reject.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/partner-readonly-info.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/post-bulletin.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/price-drop-tabular.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/returnables.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/ticket.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/update_PartnerCriteria.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/upgrade-offer-tabular.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/visit-approvals.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/wallet-details.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/warehouse-grn-correction-detail.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37498&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37498&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 15:51:22 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37497 – rbm drr dashboard , all today po rbm view maped</title><description>&lt;div&gt;&lt;strong&gt;ranu – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard , all today po rbm view maped&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/RbmDrrDashboardController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/rbm-drr-dashboard.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37497&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37497&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 15:42:57 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37496 – Handle empty IN collections instead of failing the query  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Handle empty IN collections instead of failing the query&lt;br /&gt;
&lt;br /&gt;
An empty IN list rendered as &quot;in ()&quot; (invalid SQL) or threw, in three inconsistent ways:&lt;br /&gt;
SQLGrammarException from prepareInPredicate, RuntimeException from prepareEqualPredicate,&lt;br /&gt;
and ProfitMandiBusinessException from selectAllByInOrderByDesc. A partner with no activity&lt;br /&gt;
for a brand legitimately produces an empty set, so these were 500ing on valid input&lt;br /&gt;
(~436 errors/week, mostly V2FofoSchemeController.getBrandWiseIncome).&lt;br /&gt;
&lt;br /&gt;
An empty IN matches nothing: route every IN site through inPredicateOrNone, which returns&lt;br /&gt;
an empty disjunction. Empty NOT IN excludes nothing, so it matches everything (conjunction).&lt;br /&gt;
selectAllByInOrderByDesc returns an empty list without a DB round-trip.&lt;br /&gt;
&lt;br /&gt;
Also covers three sites that had no guard at all: selectAllByInEqualOrderBysDesc,&lt;br /&gt;
selectCountByIn and mapToPredicate. Public API unchanged.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/GenericRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37496&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37496&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 15:42:49 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37495 – Fix Pine Labs affordability prod config: drop placeholder pinelabs.api.* overrides ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix Pine Labs affordability prod config: drop placeholder pinelabs.api.* overrides&lt;br /&gt;
&lt;br /&gt;
r36839 re-added pinelabs.api.base.url/client.id/client.secret to the web module with&lt;br /&gt;
REPLACE_WITH_* values, reintroducing the duplication removed in r35832. AppConfig loads&lt;br /&gt;
shared-prod first and the module file second, so these shadowed the real credentials and&lt;br /&gt;
every affordability call failed with UnknownHostException on plural.v2.pinepg.in&lt;br /&gt;
(NXDOMAIN) - 1,254 errors in one week. Removing them restores the working values from&lt;br /&gt;
shared-prod.properties (api.pluralpay.in).&lt;br /&gt;
&lt;br /&gt;
pinelabs.account.* deliberately left in place: the web module pins merchant 11467 while&lt;br /&gt;
shared-prod has 356460, so removing those would switch the live payment merchant.&lt;/div&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=%2F&amp;isdir=1&amp;rev=37495&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37495&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 15:35:52 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37494 – Fix: namespace document-level handlers in re-injected vm fragments  Same ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix: namespace document-level handlers in re-injected vm fragments&lt;br /&gt;
&lt;br /&gt;
Same defect class as r37493. These fragments are injected with .html(),&lt;br /&gt;
which re-executes their inline &amp;lt;script&gt;, so every load stacked another&lt;br /&gt;
$(document) delegated handler. One click then fired N identical requests;&lt;br /&gt;
PostInterceptor claimed the first and rejected the rest as duplicates.&lt;br /&gt;
&lt;br /&gt;
Confirmed in prod today: beat-plan-day-view #avSubmit produced bursts of&lt;br /&gt;
3-4 rejections on POST /beatPlan/assignVisit/submit. The other four are the&lt;br /&gt;
same shape - chart-filter-lms, franchisee-account-creation and beat-plan-bulk&lt;br /&gt;
re-inject themselves directly, placement-plan-details does so indirectly by&lt;br /&gt;
clicking .search-partner-stock after createPo.&lt;br /&gt;
&lt;br /&gt;
Adopt the create-purchase-return.vm convention: one $(document).off(&apos;.ns&apos;)&lt;br /&gt;
before the first binding, every event namespaced. Only the newest binding&lt;br /&gt;
survives, which also fixes handlers holding a stale Velocity closure from a&lt;br /&gt;
previously rendered record.&lt;br /&gt;
&lt;br /&gt;
Behaviour-preserving: the only changes are the namespace suffix on 22 event&lt;br /&gt;
strings plus the five off() calls. Selectors, handlers and ordering untouched.&lt;br /&gt;
&lt;br /&gt;
Read-only self-injecting fragments (activation-tabular, catalog,&lt;br /&gt;
partner-onboarding-*, etc) still stack handlers but only fire GETs, which are&lt;br /&gt;
never deduped - left for a separate pass.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/beat-plan-bulk.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/beat-plan-day-view.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/chart-filter-lms.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/franchisee-account-creation.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/placement-plan-details.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37494&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37494&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 12:56:08 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37493 – Fix: scheme item inline date edit fired N duplicate PUTs ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix: scheme item inline date edit fired N duplicate PUTs per click&lt;br /&gt;
&lt;br /&gt;
scheme-details.vm is injected with .html(), which re-executes its inline&lt;br /&gt;
&amp;lt;script&gt;, and a successful save re-injects it - so each load stacked another&lt;br /&gt;
$(document) handler for .edit/.cancel/.save-item-dates. One Save click then&lt;br /&gt;
fired N identical PUT /scheme/item/window, and PostInterceptor rejected all&lt;br /&gt;
but the first with &apos;Duplicate request.&apos; (27 per click in prod today).&lt;br /&gt;
The stacked copies also carried a stale $scheme closure, so a save could&lt;br /&gt;
repaint the container with a previously viewed scheme.&lt;br /&gt;
&lt;br /&gt;
Move the handlers to scheme.js (loaded once via include-scripts.vm) and read&lt;br /&gt;
the scheme id/window from data- attributes on the fragment root, keeping them&lt;br /&gt;
stateless. Fragment is now markup only.&lt;br /&gt;
&lt;br /&gt;
Reuse cleanup while in here:&lt;br /&gt;
- configureMultiselect() replaces 3 near-identical multiselect configs&lt;br /&gt;
- loadBrandsByCategory/loadCatalogDescriptionByBrands take an optional&lt;br /&gt;
  afterRender so the add-item modal reuses them instead of duplicating both&lt;br /&gt;
- toggleItemDateEdit()/initSingleDatePicker() collapse mirrored blocks&lt;br /&gt;
- SCHEME_DETAILS_CONTAINER single-sources the container id&lt;br /&gt;
- drop the template&apos;s duplicate toIsoDateTime (scheme.js already had it)&lt;br /&gt;
- updateSchemeItemWindow() now prefixes context like every other call&lt;br /&gt;
&lt;br /&gt;
Bump jsVersion 409 -&gt; 410.&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/scheme.js&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/scheme-details.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37493&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37493&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 12:37:42 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37492 – errors: wire the GlitchTip appender into cron and fofo logging ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;errors: wire the GlitchTip appender into cron and fofo logging&lt;br /&gt;
&lt;br /&gt;
Completes r37491, which committed only web&apos;s log4j2.xml. cron&apos;s and fofo&apos;s were&lt;br /&gt;
held back because they carried local development log paths -- a user.home&lt;br /&gt;
expansion in cron and an absolute /Users path in fofo. Neither can ship: /Users&lt;br /&gt;
does not exist on the server, so fofo logging would fail to open its file and&lt;br /&gt;
the Alloy stream tailing /var/log/tomcat7/fofo/fofo.log would go dead.&lt;br /&gt;
&lt;br /&gt;
Both files are restored to their production paths and carry the Sentry appender.&lt;br /&gt;
Whoever needs the local override should re-apply it locally rather than&lt;br /&gt;
committing it.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/resources/log4j2.xml&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/resources/log4j2.xml&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37492&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37492&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 12:23:38 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37491 – errors: ship ERROR events to GlitchTip via the log4j2 Sentry ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;errors: ship ERROR events to GlitchTip via the log4j2 Sentry appender&lt;br /&gt;
&lt;br /&gt;
io.sentry:sentry-log4j2:7.22.6 in all three deployables. Pinned to 7.x because&lt;br /&gt;
8.x drops Java 8; verified class major version 52.&lt;br /&gt;
&lt;br /&gt;
minimumEventLevel=ERROR is load-bearing. It only became safe after r37490 moved&lt;br /&gt;
business validations to WARN -- 32% of the ERROR stream was HTTP 400s where the&lt;br /&gt;
user is simply told what to fix, and sending those would have made &quot;insufficient&lt;br /&gt;
balance&quot; the top issue and buried real bugs. Breadcrumbs come from INFO so an&lt;br /&gt;
issue arrives with the log lines that preceded it.&lt;br /&gt;
&lt;br /&gt;
Attached to the application loggers only; framework noise is not our bug.&lt;br /&gt;
&lt;br /&gt;
web&apos;s log4j2.xml is committed here. cron&apos;s and fofo&apos;s are held back: both carry&lt;br /&gt;
uncommitted local development paths (a user.home expansion, and an absolute&lt;br /&gt;
/Users path) that would break production logging and the Alloy log tailing.&lt;br /&gt;
Their Sentry blocks are staged locally and should land with whoever owns those&lt;br /&gt;
path edits.&lt;/div&gt;~ /trunk/profitmandi-cron/build.gradle&lt;br /&gt;~ /trunk/profitmandi-fofo/build.gradle&lt;br /&gt;~ /trunk/profitmandi-web/build.gradle&lt;br /&gt;~ /trunk/profitmandi-web/src/main/resources/log4j2.xml&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37491&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37491&amp;peg=37523</guid></item>
<item><pubDate>Tue, 01 Sep 2026 12:20:10 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37490 – errors: separate business, integration and bug -- three failures logged ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;errors: separate business, integration and bug -- three failures logged three ways&lt;br /&gt;
&lt;br /&gt;
Everything was logged identically: ERROR, titled &apos;Internal Server Error&apos;, and in&lt;br /&gt;
web stack-traced twice (log4j2 plus printStackTrace, the second copy landing in&lt;br /&gt;
catalina.out). A partner mistyping an IMEI produced the same output as a&lt;br /&gt;
NullPointerException.&lt;br /&gt;
&lt;br /&gt;
That makes the error stream unalertable. Measured over six hours across web and&lt;br /&gt;
fofo: 909 ERROR lines, of which 294 (32%) were ProfitMandiBusinessException --&lt;br /&gt;
HTTP 400s where the user is simply told what to fix. Any rule on ERROR rate&lt;br /&gt;
fires constantly, and an error tracker would rank &apos;insufficient balance&apos; as the&lt;br /&gt;
top issue.&lt;br /&gt;
&lt;br /&gt;
  business    WARN,  no stack trace, 4xx  -- expected, user-correctable&lt;br /&gt;
  integration ERROR + dependency name     -- ours is fine, theirs is not&lt;br /&gt;
  anything else ERROR + stack trace, 500  -- a bug&lt;br /&gt;
&lt;br /&gt;
New IntegrationException carries getDependency(), so two hundred failures of one&lt;br /&gt;
gateway group as one problem rather than two hundred unrelated traces. That&lt;br /&gt;
category did not exist: such failures were previously either a bare Exception&lt;br /&gt;
(indistinguishable from our own bug) or a business exception (which wrongly&lt;br /&gt;
blames the user).&lt;br /&gt;
&lt;br /&gt;
printStackTrace removed from the web handler -- it was writing a second copy of&lt;br /&gt;
every trace to catalina.out.&lt;br /&gt;
&lt;br /&gt;
Prerequisite for wiring the GlitchTip appender, which must not be attached until&lt;br /&gt;
ERROR means something.&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/exception/IntegrationException.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/GlobalExceptionHandler.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/GlobalExceptionHandler.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37490&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37490&amp;peg=37523</guid></item>
<item><pubDate>Mon, 31 Aug 2026 19:34:41 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37489 – Restore Utils.html and Utils.htmlJson removed by r37477  r37477 reorganised ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Restore Utils.html and Utils.htmlJson removed by r37477&lt;br /&gt;
&lt;br /&gt;
r37477 reorganised Utils while consolidating the mail APIs and dropped its only two&lt;br /&gt;
instance methods. They have no Java callers -- they exist solely for Velocity, where&lt;br /&gt;
AppConfig binds new Utils() as $vmUtils -- so the compiler, IDE find-usages and any&lt;br /&gt;
grep over *.java all reported them dead.&lt;br /&gt;
&lt;br /&gt;
With htmlJson gone, data-paramslist=&quot;$vmUtils.htmlJson(...)&quot; stopped rendering usable&lt;br /&gt;
JSON on every report link (admin.vm:840, admin.vm:910, reports.vm:51). reports.js:7&lt;br /&gt;
then read $(this).data(&quot;paramslist&quot;) as undefined and returned true, letting the&lt;br /&gt;
browser follow the plain &amp;lt;a href&gt; natively -- a GET against the @PostMapping&lt;br /&gt;
/reports/{projectName}/{fileName} (ReportsController:126), answered with GE_1007&lt;br /&gt;
&quot;Request method &apos;GET&apos; not supported&quot;. The modal POST path was the only way that&lt;br /&gt;
endpoint was ever reachable, so every partner report broke at once.&lt;br /&gt;
&lt;br /&gt;
Confirmed against prod: zero occurrences in fofo.log for Aug 13/20/26/28/30, and 87&lt;br /&gt;
today starting 18:37:23, right after today&apos;s ROOT.war deploy. 13 distinct reports hit.&lt;br /&gt;
&lt;br /&gt;
$vmUtils.html had two further callers that also come back:&lt;br /&gt;
offer_margin_detail_partner.vm:12 and :241 (offer description and notes).&lt;br /&gt;
&lt;br /&gt;
Restored verbatim from r37476, and commented as template-only so the next refactor&lt;br /&gt;
does not read them as dead code again.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/Utils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37489&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37489&amp;peg=37523</guid></item>
<item><pubDate>Mon, 31 Aug 2026 18:50:22 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37488 – rbm drr dashboard , all today po rbm view maped</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard , all today po rbm view maped&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/WarehouseBuyingByMovementModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37488&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37488&amp;peg=37523</guid></item>
<item><pubDate>Mon, 31 Aug 2026 18:49:06 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 37487 – rbm drr dashboard , all today po rbm view maped</title><description>&lt;div&gt;&lt;strong&gt;ranu – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm drr dashboard , all today po rbm view maped&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/RbmDrrDashboardController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/rbm-drr-dashboard.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37487&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37487&amp;peg=37523</guid></item>
<item><pubDate>Mon, 31 Aug 2026 18:32:25 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37486 – mail: fix prod outage -- MailOutboxService must not implement MailQueue ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;mail: fix prod outage -- MailOutboxService must not implement MailQueue&lt;br /&gt;
&lt;br /&gt;
r37478 added &apos;implements MailQueue&apos; to MailOutboxService. That took down both&lt;br /&gt;
ROOT.war and profitmandi-web.war on the 18:19 deploy today; every route 404&apos;d&lt;br /&gt;
because neither Spring context would start.&lt;br /&gt;
&lt;br /&gt;
MailOutboxService has @Transactional methods, so Spring has to proxy it, and&lt;br /&gt;
@EnableTransactionManagement in both WebDBContextConfigure classes runs with the&lt;br /&gt;
default proxyTargetClass=false. While the class implemented no interface Spring&lt;br /&gt;
proxied it with a CGLIB subclass, which is still a MailOutboxService. Adding an&lt;br /&gt;
interface switched it to a JDK proxy implementing only MailQueue, so all 39&lt;br /&gt;
sites that inject the concrete MailOutboxService failed:&lt;br /&gt;
&lt;br /&gt;
  BeanNotOfRequiredTypeException: Bean named &apos;mailOutboxService&apos; is expected to&lt;br /&gt;
  be of type MailOutboxService but was actually of type com.sun.proxy.$Proxy1519&lt;br /&gt;
&lt;br /&gt;
The interface moves to a new MailQueueAdapter, which delegates to&lt;br /&gt;
MailOutboxService and carries no transactional annotations. MailQueueHolder and&lt;br /&gt;
EmailServiceImpl inject it by the MailQueue interface, so Utils.sendMail* and&lt;br /&gt;
EmailService still reach the outbox unchanged. MailOutboxService goes back to&lt;br /&gt;
implementing nothing, and its ~112 existing call sites are untouched.&lt;br /&gt;
&lt;br /&gt;
Chose this over proxyTargetClass=true, which would have flipped proxying for&lt;br /&gt;
every interface-implementing service in the app -- too broad for a hot fix.&lt;br /&gt;
&lt;br /&gt;
Verified with javap inside both built WARs: MailOutboxService declares no&lt;br /&gt;
interfaces, MailQueueAdapter implements MailQueue.&lt;br /&gt;
&lt;br /&gt;
Note for cron: it shares the dao jar, so a rebuild picks this up. Do not restart&lt;br /&gt;
cron on trunk without rebuilding it first.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailOutboxService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/mail/MailQueueAdapter.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37486&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37486&amp;peg=37523</guid></item>
<item><pubDate>Mon, 31 Aug 2026 18:17:30 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37485 – carlcare: enable tecno alongside itel  Itel went first because ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;carlcare: enable tecno alongside itel&lt;br /&gt;
&lt;br /&gt;
Itel went first because it is the brand we can CHECK -- the DCR pull independently&lt;br /&gt;
produces itel dates to reconcile against, where tecno has no second source at all.&lt;br /&gt;
That check has passed:&lt;br /&gt;
&lt;br /&gt;
  - a 50-imei read-only trial answered 50/50, no errors, no sign rejections, and&lt;br /&gt;
    agreed with our catalog brand on all 50&lt;br /&gt;
  - 18 of the 50 carried a date, and every one of those 18 fell AFTER our own&lt;br /&gt;
    billing date (3 to 1,111 days, median ~220)&lt;br /&gt;
  - the first live tick after deploy returned the same rate: 16 dates, 32 not-yet-&lt;br /&gt;
    activated, 1 malformed response absorbed by the has(&quot;status&quot;) guard&lt;br /&gt;
&lt;br /&gt;
Tecno is also the reason this class exists. Itel was already served by the DCR pull;&lt;br /&gt;
tecno has been served by nothing since 2024-11-20 and has been manual CSV ever since.&lt;br /&gt;
&lt;br /&gt;
Capacity: ~10,400 itel + ~1,890 tecno pending against 14,400 lookups a day. The&lt;br /&gt;
round-robin splits a tick four ways only while all four queues have work; tecno is&lt;br /&gt;
much the smaller pool, so it is exhausted a few hours in, its queues then come back&lt;br /&gt;
empty and itel gets the full 50 again for the rest of the day. Itel still clears&lt;br /&gt;
daily -- roughly 1,875 + 10,650 = 12,525 itel lookups against a 10,401 pool.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/CarlcareImeiActivationService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37485&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37485&amp;peg=37523</guid></item>
<item><pubDate>Mon, 31 Aug 2026 18:17:00 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37484 – cron metrics: register the status gauge as -1, not 0 ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;cron metrics: register the status gauge as -1, not 0&lt;br /&gt;
&lt;br /&gt;
The gauge was created when a job STARTS, and 0 means failure, so any job still&lt;br /&gt;
running its first execution after a restart reported FAILED. Selenium-driven and&lt;br /&gt;
report jobs take minutes, so this is not a narrow window -- it put ten jobs on&lt;br /&gt;
the dashboard as failed after the 2026-08-31 restart when none had failed.&lt;br /&gt;
&lt;br /&gt;
-1 means &apos;has not finished a run yet&apos;. CronJobFailing matches == 0, so those&lt;br /&gt;
jobs are simply absent from the alert until they genuinely complete once.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/monitored/CronJobMonitorAspect.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37484&amp;peg=37523</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=37484&amp;peg=37523</guid></item>
</channel></rss>