<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SmartDukaan &#x2013; /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/</title><description>WebSVN RSS feed &#x2013; SmartDukaan</description><lastBuildDate>Thu, 08 Oct 2026 04:33:43 +0530</lastBuildDate><generator>WebSVN 2.8.6-DEV</generator><language>en</language><link>https://svn.smartdukaan.com/log.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;max=40&amp;</link><atom:link href="https://svn.smartdukaan.com/rss.php?path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Mon, 28 Sep 2026 13:25:51 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37789 – FormattingUtils.formatDigit: print whole numbers, as intended  digitFormatter set the ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;FormattingUtils.formatDigit: print whole numbers, as intended&lt;br /&gt;
&lt;br /&gt;
digitFormatter set the MINIMUM fraction digits twice and never set the&lt;br /&gt;
maximum, so Java&apos;s default of 3 applied: formatDigit(84745.76f) rendered&lt;br /&gt;
&quot;84,745.758&quot; - float noise at three decimals - where a whole number was&lt;br /&gt;
meant. The second call was clearly a typo for setMaximumFractionDigits(0).&lt;br /&gt;
&lt;br /&gt;
Only one other call site (ItemCriteria &quot;with Selling Price &gt;= ...&quot;), which&lt;br /&gt;
passes whole rupees and is unaffected. Needed by the B2C return refund,&lt;br /&gt;
which prints whole-rupee amounts on screen and in mails.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/FormattingUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37789</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37789</guid></item>
<item><pubDate>Thu, 24 Sep 2026 18:54:04 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37768 – feat(supplier): GstinUtil - read state code / PAN from a ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;feat(supplier): GstinUtil - read state code / PAN from a GSTIN so the GSTIN decides a supplier&apos;s state&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/GstinUtil.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37768</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37768</guid></item>
<item><pubDate>Thu, 17 Sep 2026 13:12:56 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37672 – Add BrowserLane: machine-wide interlock so only one headless Chrome runs ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add BrowserLane: machine-wide interlock so only one headless Chrome runs at a time&lt;br /&gt;
&lt;br /&gt;
Every ChromeDriver tree on the app box costs ~850MB RSS, on a host holding a&lt;br /&gt;
-Xmx8g tomcat and a -Xmx2g cron jar on 16GB that has been kernel-OOM-killed&lt;br /&gt;
twice with tomcat the victim. Peak concurrent drivers is the number that&lt;br /&gt;
matters, not drivers per day.&lt;br /&gt;
&lt;br /&gt;
Measured on the oppo/realme lane: a 25-imei chunk takes 505s (12s driver&lt;br /&gt;
startup, then ~19.7s an imei) against a fixed 20s fixedDelay, i.e. a 96% duty&lt;br /&gt;
cycle. Meanwhile tomcat starts its own driver 8 times a day for the knowlarity&lt;br /&gt;
scrape. On 17-Sep that scrape ran 11:40:00-11:41:07 and the lane&apos;s next driver&lt;br /&gt;
came up at 11:42:21 -- it cleared by 74 seconds, by luck. At a 96% duty cycle&lt;br /&gt;
the collision cannot be dodged by choosing better times, only by serialising.&lt;br /&gt;
&lt;br /&gt;
The two JVMs are separate processes owned by different users, so an in-process&lt;br /&gt;
flag cannot see across the boundary. Uses an OS file lock at&lt;br /&gt;
/var/lock/sd-browser.lock (overridable via -Dsd.browser.lock), created 0666 on&lt;br /&gt;
first use because cron runs as root and tomcat as tomcat and whichever starts&lt;br /&gt;
first creates it. A file lock rather than a marker file so the kernel reclaims&lt;br /&gt;
it when the holder dies: verified by SIGKILLing the holder mid-hold, the next&lt;br /&gt;
JVM acquired in 264ms. A ReentrantLock gates it first, since a second thread in&lt;br /&gt;
the same JVM would otherwise get OverlappingFileLockException rather than block.&lt;br /&gt;
&lt;br /&gt;
Callers wait rather than skip. The knowlarity scrape needs 67s against a lane&lt;br /&gt;
busy 96% of the time, so skip-on-contention would mean it essentially never&lt;br /&gt;
refreshed again. Eight scrapes a day costs the imei lane about nine minutes of&lt;br /&gt;
waiting in total.&lt;br /&gt;
&lt;br /&gt;
Fails open if the lock file is unusable (missing /var/lock, read-only mount, dev&lt;br /&gt;
laptop): serialising within the JVM only, rather than stopping imei activation&lt;br /&gt;
over what is a safety interlock.&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/BrowserLane.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37672</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37672</guid></item>
<item><pubDate>Wed, 16 Sep 2026 20:29:34 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37668 – Validate GSTIN shape, state code and checksum  isValidGstNumber accepted ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Validate GSTIN shape, state code and checksum&lt;br /&gt;
&lt;br /&gt;
isValidGstNumber accepted any 15-character string, so a pincode (110095, rejected only for&lt;br /&gt;
length) and junk (Hdjiekwbdbsjskz) reached fofo_store.gst_number, which billing sends to NIC&lt;br /&gt;
as the recipient - the invoice is then refused and the goods cannot ship.&lt;br /&gt;
&lt;br /&gt;
Now: 2-digit state code + PAN + entity + Z + mod-36 check digit, trimmed and upper-cased.&lt;br /&gt;
Blank still passes (the field is optional); callers needing one present check that themselves.&lt;br /&gt;
Checked against live data: 1,569 of 1,570 well-formed partner GSTINs pass, the one that fails&lt;br /&gt;
(HRSP330) has a genuinely wrong check digit.&lt;br /&gt;
&lt;br /&gt;
Adds RTLR_1020 / RTLR_1021 for the invalid and mismatched cases.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/StringUtils.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/resources/response-codes.properties&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37668</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37668</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=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37489</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37489</guid></item>
<item><pubDate>Mon, 31 Aug 2026 17:38:48 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37477 – mail: one way to send mail, and nothing sends inline ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 8 file(s) modified&lt;/strong&gt;&lt;br/&gt;mail: one way to send mail, and nothing sends inline&lt;br /&gt;
&lt;br /&gt;
There were three overlapping APIs -- Utils.sendMail* (7 static overloads),&lt;br /&gt;
EmailServiceImpl.sendMail* (7 more) and MailOutboxService.queueMail* (20). The&lt;br /&gt;
first two built their own MimeMessage, hardcoded From: &lt;a href=&quot;mailto:noreply@smartdukaan.com&quot;&gt;noreply@smartdukaan.com&lt;/a&gt;&lt;br /&gt;
in eleven places, and pushed straight down whichever JavaMailSender the caller&lt;br /&gt;
passed.&lt;br /&gt;
&lt;br /&gt;
That From is why mail was refused: an authenticated Workspace session may send&lt;br /&gt;
only as the account it logged in as, and noreply@ is a different identity in the&lt;br /&gt;
same domain. Sending inline also meant a failed send was lost outright and took&lt;br /&gt;
the calling job down with it, which is how one expired credential came to mark&lt;br /&gt;
ten report jobs FAILED.&lt;br /&gt;
&lt;br /&gt;
New in profitmandi-common:&lt;br /&gt;
  MailQueue      - the single entry point; queue() returns once the mail is&lt;br /&gt;
                   recorded, not once it is sent&lt;br /&gt;
  MailRequest    - one value object replacing the 34 overloads&lt;br /&gt;
  MailSenderType - GOOGLE (authenticated, From rewritten) or RELAY (IP-authorised)&lt;br /&gt;
&lt;br /&gt;
The interface lives in common while MailOutboxService implements it in dao,&lt;br /&gt;
because dao depends on common and not the reverse -- Utils and EmailService&lt;br /&gt;
could not otherwise reach the outbox at all.&lt;br /&gt;
&lt;br /&gt;
Utils and EmailService keep their signatures so the ~38 call sites still&lt;br /&gt;
compile, but now delegate and ignore the JavaMailSender argument; choosing a&lt;br /&gt;
transport was never the caller&apos;s business. Both are marked deprecated.&lt;br /&gt;
MailQueueHolder bridges the static helpers to the bean and is documented as a&lt;br /&gt;
compromise, not a pattern.&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/mail&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/mail/MailQueue.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/mail/MailQueueHolder.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/mail/MailRequest.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/mail/MailSenderType.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/EmailService.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/EmailServiceImpl.java&lt;br /&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=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37477</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37477</guid></item>
<item><pubDate>Tue, 25 Aug 2026 20:29:58 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37397 – Consolidate insurance invoice line rendering; drop dead thermal-printing path  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Consolidate insurance invoice line rendering; drop dead thermal-printing path&lt;br /&gt;
&lt;br /&gt;
Remove the unused 58/80mm thermal chain (InvoiceFormatter, PrinterType and the&lt;br /&gt;
PrinterType overload of generateAndWrite) - its only caller was a commented-out&lt;br /&gt;
endpoint, and it bypassed the insurance line folding in DocumentData.items().&lt;br /&gt;
&lt;br /&gt;
Drop generateMarginSchemeInvoice, a no-op alias for generateInvoiceV2 with no&lt;br /&gt;
production callers.&lt;/div&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/InvoiceFormatter.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PrinterType.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37397</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37397</guid></item>
<item><pubDate>Fri, 24 Jul 2026 16:13:00 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37141 – Add FormattingUtils.formatNicDate(LocalDate) -&gt; dd/MM/yyyy for NIC/IRP e-invoice date fields (DocDt, ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add FormattingUtils.formatNicDate(LocalDate) -&gt; dd/MM/yyyy for NIC/IRP e-invoice date fields (DocDt, preceding-invoice InvDt); used by note IRN paths in profitmandi-dao r37140&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/FormattingUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37141</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37141</guid></item>
<item><pubDate>Mon, 13 Jul 2026 18:32:52 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37070 – Add StringUtils.normalizeWhitespace for input whitespace normalization (T9.5 sanitizer dependency)</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add StringUtils.normalizeWhitespace for input whitespace normalization (T9.5 sanitizer dependency)&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/StringUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37070</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37070</guid></item>
<item><pubDate>Fri, 10 Jul 2026 19:55:22 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37066 – Modular invoice/note PDF generation: extract DocumentRenderer + reusable sections + ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 60 file(s) modified&lt;/strong&gt;&lt;br/&gt;Modular invoice/note PDF generation: extract DocumentRenderer + reusable sections + two-axis tax abstraction out of PdfUtils (now thin shims); folded per-tax invoice columns; note Invoice-Ref + type detection; golden-image test harness&lt;/div&gt;~ /trunk/profitmandi-common&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/DocumentData.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/DocumentDataAdapter.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/DocumentRenderer.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/PdfContext.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/section&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/section/FooterSection.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/section/HeaderSection.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/section/ItemsTableSection.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/section/PartiesSection.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/section/Section.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/section/SummarySection.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/Styles.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/support&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/support/Assets.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/support/CancelledStamp.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/support/Formatting.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/support/SectionHelpers.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/tax&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/tax/InterStateTaxColumns.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/tax/IntraStateTaxColumns.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/tax/TaxColumns.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/tax/TaxColumnsFactory.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/document/tax/TaxTotals.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;+ /trunk/profitmandi-common/src/test&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/document&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/document/DocumentDataAdapterTest.java&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/document/golden&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/document/golden/GoldenCreditNoteTest.java&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/document/golden/GoldenDebitNoteTest.java&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/document/golden/GoldenInvoiceV1Test.java&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/document/golden/GoldenInvoiceV2Test.java&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/document/golden/GoldenPdfHarness.java&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/document/golden/PdfFixtures.java&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/document/golden/SampleDocumentGeneratorTest.java&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/document/tax&lt;br /&gt;+ /trunk/profitmandi-common/src/test/java/com/spice/profitmandi/common/document/tax/TaxColumnsTest.java&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/cn-inter-p0.png&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/cn-intra-p0.png&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/dn-inter-p0.png&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/dn-intra-p0.png&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/dn-po-suppressed-p0.png&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/v1-inter-p0.png&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/v1-intra-p0.png&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/v1-margin-p0.png&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/v2-dc-p0.png&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/v2-inter-p0.png&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/v2-intra-p0.png&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/v2-margin-p0.png&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/v2-multiorder-p0.png&lt;br /&gt;+ /trunk/profitmandi-common/src/test/resources/golden/v2-po-orderdate-p0.png&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37066</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37066</guid></item>
<item><pubDate>Fri, 10 Jul 2026 16:51:26 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37062 – Revert PdfUtils to pre-refactor version (r36674) to unbreak trunk; modular ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Revert PdfUtils to pre-refactor version (r36674) to unbreak trunk; modular doc-generation refactor still in progress&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37062</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37062</guid></item>
<item><pubDate>Fri, 10 Jul 2026 12:17:31 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 37052 – Delegate invoice/note PDF rendering to DocumentRenderer; add poNumber/orderDate to InvoicePdfModel; ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Delegate invoice/note PDF rendering to DocumentRenderer; add poNumber/orderDate to InvoicePdfModel; add pdfbox test dep + captureGolden flag for golden-image tests&lt;/div&gt;~ /trunk/profitmandi-common/build.gradle&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/InvoicePdfModel.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37052</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=37052</guid></item>
<item><pubDate>Mon, 25 May 2026 19:30:58 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36674 – Add irnErrorMessage to InvoicePdfModel and show e-invoice error on PDF ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add irnErrorMessage to InvoicePdfModel and show e-invoice error on PDF where IRN would appear&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/InvoicePdfModel.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36674</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36674</guid></item>
<item><pubDate>Thu, 21 May 2026 14:45:24 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36623 – Remove ThriftConfig dependency and Thrift client wrappers  - Removed ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 8 file(s) modified&lt;/strong&gt;&lt;br/&gt;Remove ThriftConfig dependency and Thrift client wrappers&lt;br /&gt;
&lt;br /&gt;
- Removed ThriftConfig from build.gradle dependency&lt;br /&gt;
- Deleted entire thrift/clients/ directory (16 RPC client files)&lt;br /&gt;
- Removed Thrift-dependent methods from Utils.java (getRechargeDisplayStatus, getOrderStatus, getWarehouseClient, etc.)&lt;br /&gt;
- Deleted dead code: HelperServiceUtils.java, OrderObject.java&lt;br /&gt;
- Moved to profitmandi-dao: WalletHistoryModel.java, ExcelUtils.java, CustomOrder.java&lt;/div&gt;~ /trunk/profitmandi-common/build.gradle&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/CustomOrder.java&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/HelperServiceUtils.java&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/services/mandii/OrderObject.java&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/ExcelUtils.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/Utils.java&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/WalletHistoryModel.java&lt;br /&gt;x /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/thrift&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36623</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36623</guid></item>
<item><pubDate>Sat, 16 May 2026 14:40:08 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36572 – fix: add debit note PDF labels, HDFC UTR duplicate lock, ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;fix: add debit note PDF labels, HDFC UTR duplicate lock, AJAX error handlers in common.js&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/hdfc/HdfcPaymentController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/common.js&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36572</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36572</guid></item>
<item><pubDate>Sat, 04 Apr 2026 13:43:42 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36183 – Credit Note PDF fixes: null guard on msAddDataCell, doc-type-aware labels ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Credit Note PDF fixes: null guard on msAddDataCell, doc-type-aware labels (invoice/credit note/challan), conditional Order Id column, HSN code support&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36183</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36183</guid></item>
<item><pubDate>Thu, 02 Apr 2026 20:13:49 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36177 – Fix currency format for negative amounts and use explicit symbol ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix currency format for negative amounts and use explicit symbol removal&lt;br /&gt;
&lt;br /&gt;
Previous regex fix missed negative amounts like -Rs.500.50. Now uses explicit&lt;br /&gt;
replace(&quot;Rs.&quot;, &quot;&quot;) for Java 8 en_IN locale with ₹ fallback for newer JDKs.&lt;br /&gt;
Handles both positive (Rs.17,618.00) and negative (-Rs.500.50) correctly.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36177</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36177</guid></item>
<item><pubDate>Thu, 02 Apr 2026 20:11:23 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36176 – Simplify invoice currency format fix for Java 8 compatibility  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Simplify invoice currency format fix for Java 8 compatibility&lt;br /&gt;
&lt;br /&gt;
Use single regex replaceFirst to strip any non-numeric prefix (Rs., ₹, etc.)&lt;br /&gt;
instead of getCurrency().getSymbol() which may return a different symbol than&lt;br /&gt;
what format() produces on Java 8.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36176</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36176</guid></item>
<item><pubDate>Thu, 02 Apr 2026 20:10:11 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36175 – Fix leading dot in invoice currency formatting  indianCurrencyFormat.format() produces ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix leading dot in invoice currency formatting&lt;br /&gt;
&lt;br /&gt;
indianCurrencyFormat.format() produces &apos;Rs.17,618.00&apos; and the regex [^0-9,.]&lt;br /&gt;
was keeping the dot from &apos;Rs.&apos; resulting in &apos;.17,618.00&apos;. Now strips the&lt;br /&gt;
currency symbol properly using getCurrency().getSymbol() with a fallback&lt;br /&gt;
regex to remove any remaining non-numeric prefix.&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36175</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36175</guid></item>
<item><pubDate>Thu, 02 Apr 2026 11:22:09 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36145 – Credit Note label support: CREDIT NOTE DETAILS / CN No: ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Credit Note label support: CREDIT NOTE DETAILS / CN No: for credit note documents&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36145</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36145</guid></item>
<item><pubDate>Wed, 01 Apr 2026 18:40:46 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36138 – Delivery Challan: show CHALLAN DETAILS and Challan No instead of ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Delivery Challan: show CHALLAN DETAILS and Challan No instead of INVOICE DETAILS and Invoice No&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36138</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36138</guid></item>
<item><pubDate>Wed, 01 Apr 2026 18:37:42 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36137 – Indian currency formatting: lakh/crore amount in words + Indian comma ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Indian currency formatting: lakh/crore amount in words + Indian comma style (1,25,129.00) for all money fields in invoice table and summary&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36137</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36137</guid></item>
<item><pubDate>Tue, 31 Mar 2026 19:48:40 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36120 – Widen Order Id column, compact E-Way Bill format matching invoice ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Widen Order Id column, compact E-Way Bill format matching invoice style&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/EWayBillPDF.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36120</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36120</guid></item>
<item><pubDate>Tue, 31 Mar 2026 18:39:03 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36119 – Invoice PDF fixes: unified Rate column, per-unit gross sale for ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Invoice PDF fixes: unified Rate column, per-unit gross sale for margin qty&gt;1, Tax+Total columns, Tax Rate header, remove whitespace in summary&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36119</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36119</guid></item>
<item><pubDate>Tue, 31 Mar 2026 18:20:49 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36116 – Unified invoice PDF generation (generateInvoiceV2) for both margin and regular ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Unified invoice PDF generation (generateInvoiceV2) for both margin and regular invoices&lt;br /&gt;
&lt;br /&gt;
- New clean layout: Logo+Title+QR header, Supplier/Invoice/Buyer sections, 10-col item table&lt;br /&gt;
- Margin: subtitle, declaration, Gross Sale/Margin columns, GST on Margin summary&lt;br /&gt;
- Regular: Rate/Taxable columns, Total GST summary, no declaration&lt;br /&gt;
- Shared: Tax Rate col, Tax+Total cols, payment, credit terms, IRN/QR, EWB, cancellation&lt;br /&gt;
- Old generateAndWrite() preserved for debit notes and credit notes&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36116</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36116</guid></item>
<item><pubDate>Tue, 31 Mar 2026 15:22:58 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36111 – Update margin scheme invoice PDF to match GST compliant format ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Update margin scheme invoice PDF to match GST compliant format per Rule 32(5)&lt;br /&gt;
&lt;br /&gt;
- Title: TAX INVOICE with margin scheme subtitle&lt;br /&gt;
- No purchase price disclosed on invoice&lt;br /&gt;
- Columns: S.No, Description, HSN, Qty, Gross Sale Value, Taxable Value (Margin), Tax Rate, Tax Amount&lt;br /&gt;
- Declaration box with Section 2(27) and Rule 32(5) reference&lt;br /&gt;
- Summary: Total Selling Price, GST on Margin, Total Invoice Value&lt;br /&gt;
- Labels: Buyer Details / Supplier Details per GST terminology&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36111</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36111</guid></item>
<item><pubDate>Tue, 31 Mar 2026 12:56:57 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36109 – Separate margin scheme invoice PDF generation from regular invoice flow ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Separate margin scheme invoice PDF generation from regular invoice flow&lt;br /&gt;
&lt;br /&gt;
- Add generateMarginSchemeInvoice() with proper margin scheme table format:&lt;br /&gt;
  S.No | Description | HSN | Qty | Purchase Price | Selling Price | Margin | GST on Margin | Invoice Total&lt;br /&gt;
- Title: INVOICE OF SUPPLY (MARGIN SCHEME)&lt;br /&gt;
- Remove margin-specific logic from generateAndWrite() (regular invoice path)&lt;br /&gt;
- IRN, E-Way Bill, and cancellation stamp logic intact in both paths&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36109</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36109</guid></item>
<item><pubDate>Mon, 23 Mar 2026 18:58:23 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36045 – Remove debug sysout, fix auto-generated note to say Delivery Challan ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Remove debug sysout, fix auto-generated note to say Delivery Challan for DCs&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36045</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36045</guid></item>
<item><pubDate>Mon, 23 Mar 2026 18:42:21 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36044 – Debug: add sysout in PdfUtils to trace title rendering</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Debug: add sysout in PdfUtils to trace title rendering&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36044</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36044</guid></item>
<item><pubDate>Mon, 23 Mar 2026 16:38:34 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36037 – Fix Delivery Challan PDF: use dynamic title and DC No ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix Delivery Challan PDF: use dynamic title and DC No label instead of hardcoded TAX INVOICE&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/InvoiceFormatter.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36037</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=36037</guid></item>
<item><pubDate>Sat, 21 Feb 2026 18:22:30 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35827 – Fix SAX parse error: change invalid &lt;/br&gt; to &lt;br/&gt; in ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix SAX parse error: change invalid &amp;lt;/br&gt; to &amp;lt;br/&gt; in offer notification HTML&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/offer/formatting/HtmlModelFormatter.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35827</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35827</guid></item>
<item><pubDate>Thu, 19 Feb 2026 19:48:44 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35799 – Add margin scheme (Rule 32(5) CGST) support in invoice PDFs ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add margin scheme (Rule 32(5) CGST) support in invoice PDFs and text invoices&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/InvoicePdfModel.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/InvoiceFormatter.java&lt;br /&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35799</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35799</guid></item>
<item><pubDate>Fri, 19 Dec 2025 13:43:38 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35436 – Handle non-compliant strings in parseRaw method - First word treated ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Handle non-compliant strings in parseRaw method - First word treated as brand (map key), rest as value - Gracefully handle strings without parentheses - Updated toHtml() to handle empty RAM/storage&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/offer/formatting/HtmlModelFormatter.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35436</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35436</guid></item>
<item><pubDate>Wed, 17 Dec 2025 01:44:56 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35398 – Added html formatter</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Added html formatter&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/offer&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/offer/formatting&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/offer/formatting/HtmlModelFormatter.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35398</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35398</guid></item>
<item><pubDate>Wed, 15 Oct 2025 16:37:50 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35204 – Fixed changes related to downloading file at home page</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fixed changes related to downloading file at home page&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/Utils.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/SaholicInventoryServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35204</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35204</guid></item>
<item><pubDate>Thu, 02 Oct 2025 09:15:38 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35102 – Added csvn report</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Added csvn report&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/Utils.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/model/WarehouseItemAgeingModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/PurSaleServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35102</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35102</guid></item>
<item><pubDate>Tue, 30 Sep 2025 15:14:19 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35100 – Update</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Update&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/FormattingUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35100</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35100</guid></item>
<item><pubDate>Wed, 17 Sep 2025 17:55:24 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35035 – Update</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Update&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35035</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35035</guid></item>
<item><pubDate>Wed, 17 Sep 2025 08:47:19 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35028 – donotcommit</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;donotcommit&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/InvoiceFormatter.java&lt;br /&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PrinterType.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35028</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35028</guid></item>
<item><pubDate>Wed, 17 Sep 2025 07:51:37 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 35027 – donotcommit</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;donotcommit&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/util/PdfUtils.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35027</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-common%2Fsrc%2Fmain%2Fjava%2Fcom%2Fspice%2Fprofitmandi%2Fcommon%2Futil%2F&amp;rev=35027</guid></item>
</channel></rss>