| Rev |
Age |
Author |
Path |
Log message |
Diff |
| 37728 |
12 h 26 m |
amit |
/trunk/ |
logging: stop three non-defects reporting to the error board as ERROR
log4j2.xml ships ERROR and above to GlitchTip, so the log level IS the filter.
Three sources of ordinary, expected behaviour were logging at ERROR and between
them accounted for 51,244 events -- 43% of the whole board -- none of them a bug.
GlobalExceptionHandler already logs ProfitMandiBusinessException at WARN and is
unchanged; every leak below bypassed it.
1. Session state (27,302 events, 23% of the board). CookiesProcessor and the two
interceptors logged a missing or expired cookie at ERROR. A logged-out or
anonymous visitor is the normal case -- the code already handles it by
redirecting to /login or returning 403 -- and each of these sits in a class
whose surrounding lines already log at DEBUG. These never reach the handler,
which is why its WARN-level treatment never applied. Now DEBUG.
2. Client disconnect (19,349 events). There was no handler for it, so a client
hanging up mid-response fell through to @ExceptionHandler(Exception.class) and
was recorded as an unhandled server bug. Adds an IOException handler to both
GlobalExceptionHandlers that logs a disconnect at DEBUG and everything else at
ERROR with its 500 intact.
⚠ ClientAbortException CANNOT be imported here: catalina is provided by the
container and is not on either module's compileClasspath (verified against
the configuration, not assumed). The match is therefore on the simple class
name plus the "broken pipe"/"connection reset" messages, walked down the cause
chain. A genuine IOException matches none of those and keeps its ERROR.
The handler returns null for a disconnect rather than a body: the connection
that would carry it is already closed, and writing to it is what raised the
exception. Null is the supported way to say "handled, no body" --
HttpEntityMethodProcessor marks the request handled before reading the value.
3. Business exceptions re-logged at ERROR (11 sites). Each catches a
ProfitMandiBusinessException, logs it, and CONTINUES with a fallback -- a
missing wallet history defaults to an empty list, a user not found by primary
email is retried against the secondary. That is an expected outcome being
reported as a failure, and logging it at ERROR pre-empted the handler that
would have logged it at WARN. Now WARN.
Selenium/WebDriver (58,776 events) is deliberately untouched: that is a genuinely
broken ChromeDriver, and muting it would hide Oppo/Realme IMEI activation failing.
It looks like noise only because one broken thing repeated 52,000 times. |
|
| 37630 |
6 d 11 h |
amit |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/ |
feat(mail): wire inactive-recipient filter and clean hardcoded addresses
Wire MailRecipientFilter into googleMailSender and gmailRelaySender. Remove inactive/unknown addresses from recipient and access lists, bulk uploader gate to akhil.kumar. |
|
| 37590 |
10 d 7 h |
amit |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/ |
Route admin wallet adjustment through WalletServiceImpl
/walletUpdate hand-rolled the balance update and history row, bypassing the
service entirely, and read the wallet with selectByRetailerId instead of
selectByRetailerIdForUpdate - so unlike every other wallet path it took no row
lock, and a concurrent adjustment and purchase could lose an update.
Now calls walletService.applyManualAdjustment, which reuses getManualReference
for the reference allocation and routes the movement through
addAmountToWallet/consumeAmountFromWallet(forced). Behaviour is preserved: admin
debits stay forced, so they can still push a wallet negative as before. Removes
~45 duplicated lines. |
|
| 37539 |
14 d 12 h |
amit |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/ |
Fixed mail sender everywhere |
|
| 37171 |
53 d 12 h |
amit |
/trunk/profitmandi-fofo/src/main/ |
Wallet page: show sanctioned credit limit tile alongside utilization/total due; format amounts via currency class + formatCurrency on load; jsVersion 388 |
|
| 37124 |
65 d 5 h |
amit |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/ |
ok |
|
| 37065 |
73 d 6 h |
amit |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/ |
Block scheme/CN-backed reference types from the wallet bulk-upload sheet
Manual scheme/incentive clawbacks posted from /wallet/upload as ADDITIONAL_SCHEME
(or any CN_WALLET_REFERENCES type) leave the offer_payout un-rejected, so the
month-end MARGINS credit note is over-issued and the account-statement
scheme-adjustment line breaks. Pre-validate the whole sheet and reject up-front;
manual scheme recoveries must be posted as OTHERS. |
|
| 37031 |
76 d 10 h |
amit |
/trunk/profitmandi-fofo/src/main/ |
Credit block/unblock UI + Kred cleanup (fofo): rename activateKred/deactivateKred -> blockCredit(reason)/unblockCredit(logs)/switchCreditGateway, add block/unblock modals + credit-block-logs fragment, bump jsVersion 372->373 |
|
| 37018 |
77 d 6 h |
ranu |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/ |
revival and focus bill be active on next billing |
|
| 36965 |
83 d 7 h |
amit |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/ |
hdfc add-money: set credited flag on manual approval too
WalletController.addAmountToWallet now marks the matching hdfc_payment row
(by UTR) credited=true after a manual top-up credits the wallet. Makes the
credited flag mean 'credited by any path' (auto OR manual), so a later
duplicate approval or re-pushed HDFC credit for the same UTR cannot
double-credit. Complements the auto-path flag-set in HdfcPaymentController. |
|
| 36944 |
87 d 8 h |
amit |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/ |
hdfc add-money: guard manual approval on credited flag + fix checkManualPayments
WalletController.addAmountToWallet now blocks a manual add-money approval only
when the UTR was actually auto-credited (hdfcPayment.isCredited()), not on mere
hdfc_payment row existence — so post-r36927 captured-but-uncredited rows
(VA missing/unmatched) are approvable again.
HdfcPaymentController: set credited=true on the captured row after a successful
wallet credit; fix checkManualPayments to filter on getStatus() (was comparing
transaction_reference String to an enum, always false) so an already-approved
manual payment correctly short-circuits the auto-credit (closes the reverse
double-credit path). |
|
| 36928 |
88 d 10 h |
amit |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/ |
Fix wallet-edit transaction search showing raw Velocity vars for credit summary
getWalletHistory (/getWalletHistory, the Search-by-transaction-id flow) rendered
wallet-history.vm without populating totalDue/creditlimit/availableLimit, so the
template printed the references literally. Populate them from
sdCreditService.getCreditSummary (same helper the dashboard uses). |
|
| 36904 |
90 d 7 h |
aman |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/ |
Fix FSP wallet approval blocked by cross-store reference collision
Scope the duplicate-reference guard in /addAmountToWallet to the same retailer.
Reference numbers (e.g. cheque no '000310') are not globally unique, so an
already-approved request from a different store falsely tripped 'Entry already
Approved Please reject' and blocked a legitimate Full Stock Payment approval. |
|
| 36831 |
102 d 9 h |
amit |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/ |
Account statement: reconcile month-end scheme line to wallet net; exclude loan from statement
- Add a "Scheme adjustment (per wallet)" line at each month-end = wallet scheme net minus
margin CN total, so the running balance follows the actual wallet (source of truth)
instead of the CN gross. Surfaces scheme reversals (e.g. demo-convert) that margin CNs
miss, instead of burying them in the FLOAT DIFF / rounding line.
- Statement excludes loan/interest entirely (closing = wallet + pending indent): keep
CREDIT_LIMIT/CREDIT_UTILIZED/LOAN/LOAN_REPAYMENT legs in the body so it reconciles to the
loan-free closing; drop the INTEREST ACCRUED line and interestAccruedCost plumbing. |
|
| 36801 |
105 d 7 h |
amit |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/ |
Fixed Stock Purchase sAle ageing days, added fields to mail |
|
| 36780 |
109 d 10 h |
amit |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/ |
Rename reco CSV column header In Transit -> Unbilled PO (label only; calculation unchanged) |
|
| 36776 |
109 d 11 h |
amit |
/trunk/profitmandi-fofo/src/main/ |
Remove redundant /account/closing-statements; repoint wallet-details closing button to /account/reco (now on the wallet+PI-loan model) |
|
| 36775 |
109 d 12 h |
amit |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/ |
Align /account/reco closing with individual account statement: closing = wallet + pending indent - loan outstanding; add Loan Outstanding column |
|
| 36772 |
110 d 4 h |
amit |
/trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/ |
Account statement: per-CN scheme/margin lines + non-month-end raw-scheme fallback.
- Month-end: one 'Margin / Scheme Payout' line PER credit note (MARGINS net >=0 -> Credit Note (CN); CN_CANCELLATION or negative net -> Debit Note (DN), reducing the balance), referenced by CN number.
- Non-month-end statements: the trailing month's MARGINS CN isn't issued yet, so consolidate that month's raw scheme wallet entries into a single 'Margin / Scheme Payout' line placed at the end, just before the FLOAT DIFF. Keeps partial-period statements reconciling (verified AYAAN 01-15/04 float -1.97 vs 36,462 in the diff without it). |
|
| 36769 |
110 d 6 h |
amit |
/trunk/ |
Account statement: select the month-end scheme/margin credit notes by margin_month instead of cn_date.
Added CreditNoteRepository.selectByMarginMonth(fofoId, YearMonth) - fofo-scoped, keyed on margin_month passed as a YearMonth so the generic repo matches it as a whole-month range (robust to the stored day). populateData now uses it for the month-end CN block. margin_month is the explicit margin-period field (always populated for MARGINS and CN_CANCELLATION; RETURNS have none and are naturally excluded, consistent with returns being sourced from returnorderinfo). |
|