| Rev |
Age |
Author |
Path |
Log message |
Diff |
| 37322 |
0 m |
amit |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/ |
Stop treating IRN transport timeouts as terminal; isolate NIC calls from batch transaction
A read timeout to GSTPro/NIC was recorded as a final verdict (irn_generated=false),
so 79 invoices billed on 2026-08-17 were left permanently without an IRN even though
NIC may well have filed them. A timeout means the call never completed, not that the
document was rejected.
- markEInvoiceFailed -> recordIrnFailure(invoiceNumber, Throwable): transport failures
leave irn_generated NULL so the cron retries (DUPIRN recovers anything NIC did file);
only a genuine rejection is terminal. Alert email now fires only when terminal.
- New einvoice_details.irn_attempt_count bounds that retry at 10 attempts, reset on
success, so a prolonged NIC outage still converges instead of looping forever.
Requires the matching ALTER TABLE before deploy.
- New saveInvoiceInNewTransaction(invoiceNumber): REQUIRES_NEW per invoice, reloading
orders inside it. RunOnceTasks has class-level @Transactional wrapping the whole
batch loop, so every NIC call previously ran inside one transaction holding write
locks on all orders in the batch; at 60s per call that window is unacceptable.
updateIrnsToInvoices and regenerateBilledInvoices now carry only invoice numbers,
keeping the batch transaction read-only.
- Route all NIC calls (IRN gen, auth, cancel, EWB) through the 60s regulator profile
via GstProAuthService.nicRestClient(). getGstDetails stays on the 10s default since
it runs on request threads. |
|
| 37321 |
1 m |
amit |
/trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/web/client/ |
Preserve transport-failure cause in RestClient; add 60s regulator timeout profile
RestClient wrapped IOException/ClientProtocolException into RuntimeException(GE_1006)
without a cause, so callers could not tell a read timeout apart from a business
rejection. Pass the original exception as the cause at all four transport catch sites;
message text is unchanged.
Add HttpClientFactory.slowRegulatorRequestConfig() (60s socket) for NIC e-invoice/EWB
calls, which routinely exceed the global 10s default at peak, plus a RestClient
constructor taking an explicit RequestConfig. The global default is unchanged. |
|
| 37320 |
2 d 20 h |
ranu |
/trunk/profitmandi-dao/src/main/resources/ |
one assist ew at 99 up to 20k |
|
| 37319 |
2 d 21 h |
amit |
/trunk/ |
Fix partner-performance tertiary: aggregate order items (qty*mop), not the POS-typed order header
The tertiary panel summed fofo_order.total_amount - a price typed at the partner POS
and never validated against the catalogue - and attributed each whole order to its
first line item's brand via .get(0). One mistyped digit inflated reported sell-out
10x, and mixed-brand orders booked 100% to the first brand, leaving the rest at zero.
Defect dates from r32000/r32034 (May 2023); the panel was the only tertiary consumer
diverging from the qty*mop basis.
- New FofoOrder.selectMonthlyBrandTertiary: sum(quantity*mop) grouped by
(year*100+month) and item brand - the same basis selectPartnerTertiarySales
already uses for the DSR and the partner tier calculation
- PerformanceController: replaces two entity-loading queries (every FofoOrder and
FofoOrderItem for 6 months) with one aggregate; all items now count, each under
its own brand
- Month labels unchanged - toMonthLabel rebuilds the MMM''uu key, template untouched
- Remove V2FofoPerformanceController, the /v2/fofo JSON copy carrying the same defect
Verified against dev DB for fofo_id 175139501: Jul 2026 now 16,94,939 (panel
previously showed 50,92,440); all six months match the qty*mop basis. |
|
| 37318 |
2 d 23 h |
ranu |
/trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/checkout/ |
v2 version some fixes |
|
| 37317 |
2 d 23 h |
vikas |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/ |
Active Scratch Offers |
|
| 37316 |
2 d 23 h |
vikas |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/dtr/ |
Active Scratch Offers |
|
| 37315 |
3 d 0 h |
vikas |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/ |
Active Scratch Offers |
|
| 37314 |
3 d 2 h |
amit |
/trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ |
Fixed max limit to 15 lac for Credit limit |
|
| 37313 |
3 d 3 h |
ranu |
/trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/ |
v2 version some fixes |
|
| 37312 |
3 d 3 h |
ranu |
/trunk/ |
one assist ew at 99 up to 20k |
|
| 37311 |
3 d 15 h |
vikas |
/trunk/ |
Scratch Offers code modify |
|
| 37310 |
3 d 18 h |
vikas |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/scratch/ |
Scratch Offers now selects only active partners |
|
| 37309 |
3 d 20 h |
vikas |
/trunk/ |
Scratch Offers now selects only active partners |
|
| 37308 |
3 d 21 h |
amit |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/ |
DN receipt: reject on condition mismatch instead of silently reclassifying
The receive screen defaulted the Condition dropdown to GOOD and receiveDebitNoteItems
overwrote purchase_return_item.type with whatever was submitted. A DOA return received
without touching the dropdown was rewritten BAD->GOOD, so on reject -> acknowledge the
restoreInventory branch put the unit back into good (sellable) stock instead of bad.
UKHD948/57: IMEI 353243710802439 was declared DOA, rejected as 'wrong entry', restored
as good stock and resold at MOP 3h44m later.
- receiveDebitNoteItems now compares each submitted condition against the stored one and
rejects the WHOLE debit note on any mismatch (PRO + rejectReturn are both per-DN and
there is no model for a partial receipt). PRO is still persisted so the receipt attempt
stays on record, then stamped rejected; no scans, no refund, no IRN work.
- Removed the pri.setReturnType(rt) overwrite. Past the gate the submitted condition always
equals the stored one, and applyReceipt already reads it off the entity. Rejected returns
now keep the declared type, so restoreReturnedItems restores to the right bucket.
- New notifyReturnRejectedConditionMismatch: to partner, cc Logistics L2/L3, RBM L1/L2 and
Sales L1 + first populated level in L2..L4. Sales ladder is sparse (L2 262 partners,
L3 64, L4 1582 of 1524 open stores) so a fixed L2/L3 rule resolves to nobody for most.
- getTeamEmails now filters inactive users and dedupes. csService.getAuthUserByCategoryId
(2-arg) does not filter active unlike its 1-arg sibling; fixed here rather than in
CsServiceImpl because that overload has ~25 other call sites where dropping inactive
users would change report scoping. |
|
| 37307 |
3 d 21 h |
amit |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/scheme/ |
Block activation of item-less schemes (SELLIN/SELLOUT/SPECIAL_SUPPORT): validateSchemeHasItems guards activeSchemeById and activeSchemeByIds, fixes /todayOfferList NPE caused by scheme 7877 |
|
| 37306 |
3 d 21 h |
amit |
/trunk/profitmandi-common/src/main/resources/ |
Block activation of item-less SELLIN/SELLOUT/SPECIAL_SUPPORT schemes: add SCHM_1009 response code |
|
| 37305 |
3 d 22 h |
ranu |
/trunk/ |
carry bag for silver at 1 |
|
| 37304 |
3 d 22 h |
ranu |
/trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/ |
v2 version some fixes |
|
| 37303 |
3 d 23 h |
ranu |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/service/ |
one assist ew at 99 up to 20k |
|