| Rev |
Age |
Author |
Path |
Log message |
Diff |
| 37845 |
3 d 4 h |
amit |
/trunk/profitmandi-dao/src/ |
feat(warehouse): ACTIVE/SUSPENDED/INACTIVE status + label on sellerwarehouse replace WAREHOUSE_MAP - BillingWarehouseService (active for dashboards, active+suspended for warehouse screens, names in every state, 5 min cache); setup service: guarded status change (no suspend while franchise stores or brand mapping route there, no close while stock/unshipped orders), rename, all-warehouse overview with usage; partner store assignable only to an active warehouse; daily stock alert for suspended/inactive warehouses to logistics/accounts top 2 staffed levels + leadership; dashboard warehouse list = active (replaces r37834 stock-holding loop); migration sellerwarehouse_status_display_name_20261005.sql (applied on hadb1) |
|
| 37822 |
7 d 2 h |
amit |
/trunk/profitmandi-dao/src/ |
feat(warehouse): physical warehouse setup service, supplier mapping PO guard, address active flag
- WarehouseSetupService + WarehouseSetupValidator: create seller (state from GSTIN,
unique label/GSTIN), address master (city stored last, 6-digit pin, contact),
physical warehouse (OURS/BAD vendor 40 + Dummy/G + sellerwarehouse + mapping in
one transaction), activate/deactivate (sellerwarehouse.is_active), remap address
with internal store sync. Limits follow column sizes (sql_mode is empty).
- WarehouseAddressMaster.active: only active addresses are offered for assignment.
Migration sql/20261001_warehouseaddressmaster_active.sql (applied on hadb1).
- PO guard: createPurchaseOrder refuses a supplier with no OURS/GOOD vendor
warehouse at the destination (GRN could never receive it).
InventoryWarehouseRepository.hasGoodSupplierWarehouse / selectSupplierIdsWithGoodWarehouse
use existence checks; 67 pairs carry duplicate OURS/GOOD rows.
- SellerService.syncInternalStoreAddress(store); RetailerServiceImpl syncs an
INTERNAL store's address when it moves warehouse or becomes internal.
- Record of 2026-10-01 HR Gurugram setup SQL (seller 21, warehouses 13368/13370/13372).
- Tests: WarehouseSetupValidatorTest (10), WarehouseSetupServiceImplTest (7). |
|
| 37802 |
10 d 1 h |
ranu |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/ |
remove tarun sir email from some storetimline tat email |
|
| 37764 |
14 d 6 h |
amit |
/trunk/profitmandi-dao/src/main/ |
feat(store-closure): require reason, remark and approval mail to close a store; mail closure report
- fofo.store_closure audit table (reason, remark, approval document, closed_by); migration applied on hadb1
- StoreClosureService: validates and closes, queues closure report with approval attached to the
partner's Sales L2, top 3 Sales levels, top Accounts level and the closer
- StoreAccess: single home for store close/deactivate/activate/extend-billing access lists;
neeraj.gupta can close, mohit.gulati removed from extend billing |
|
| 37671 |
21 d 12 h |
ranu |
/trunk/ |
loi revival process modify |
|
| 37669 |
22 d 3 h |
amit |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/ |
Reject an invalid or mismatched partner GSTIN before it is saved
The onboarding screen carries the GSTIN in two boxes both labelled GST NUMBER - the retailer
one (dtr.retailer.number) and the store one (fofo_store.gst_number, which billing reads).
Neither was validated, so DLSH1660 was saved with the LOI's pincode in the store box while the
retailer box held the real GSTIN, and its first invoice would have been refused by NIC.
validateGstNumbers runs before any write (covers the fofo portal, the V2 API and the partner
app, which all funnel through updateRetailerDetails): both values are normalised, both must be
valid GSTINs, and when both are present they must agree - across 1,800 partners on record they
already do, bar the one that caused this. Needs common r37668. |
|
| 37648 |
22 d 14 h |
amit |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/ |
Retire user.counter / user.privatedealuser write path
Partner GST moved to fofo.fofo_store.gst_number in the Feb-2026 migration; counter.gstin
has had no reader since (Counter.getGstin() had no callers) and privatedealuser is only
read to decide its own insert-vs-update. Both were write-only bookkeeping.
- RetailerServiceImpl: drop createPrivateDealUser/createCounter and their two call sites
- MigrationUtil.migrateUserToRetailer: drop the same legacy block
- Delete Counter / PrivateDealUser / PrivateDealUserAddressMapping entities + repositories
No reader is affected: the 240 Reportico reports on static0 reference neither table
(the 'counter' hits are fofo_store.counter_size). Tables stay in place until this is
deployed, then get renamed out of the way. |
|
| 37628 |
23 d 10 h |
amit |
/trunk/profitmandi-dao/src/ |
feat(mail): filter inactive auth users from outgoing mail
InactiveAuthUserRecipientFilter drops @smartdukaan.com recipients whose auth.auth_user is inactive (cached, 5 min refresh, fail-open). Remove inactive hardcoded recipients (sm@, praveen.sharma, tejus.lohani). |
|
| 37523 |
35 d 22 h |
ranu |
/trunk/ |
loi process added, revival and code changes process |
|
| 37264 |
60 d 6 h |
ranu |
/trunk/ |
rbm assignement event and new edm mail committed |
|
| 37202 |
65 d 11 h |
amit |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/ |
Fix partner password reset: partners live in user.user (id=fofoId), use userUserRepository not dtr.users (was causing 400) |
|
| 37168 |
70 d 11 h |
amit |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/ |
Simplify onboarding GST guard: same-GST siblings allowed (parallel outlets are normal); block only when a non-internal sibling is in limbo (activation_type REVIVAL, or active=0 with closed=0); drop allowAdditionalOutlet override |
|
| 37156 |
71 d 7 h |
amit |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/ |
Partner identity integrity: fork guard + closed-store takeover in updateRetailerDetails (new code only after old store closed, reuse real email/login), idempotent user_accounts upsert replacing blind inserts, selectAllOpenByGstNumber lookup, @Transactional on updateRetailerDetails |
|
| 37151 |
73 d 6 h |
aman |
/trunk/ |
Fix 'Mobile already exist' on retailer save + store code not linking to onboarding panel. (1) RetailerServiceImpl: extract linkStoreCodeToOnboardingPanel and call it for EXISTING stores too, so re-saving Retailer Details heals a panel missing its code (never overwrites, requires verification YES, best-effort). (2) retailer-details form now identifies the partner by the server-rendered loadedUserEmail hidden field instead of the editable email input, so editing email/mobile updates the loaded account instead of tripping the duplicate-mobile check. Bump js version to 384. Case: onboarding 1929 / UKDH1623. |
|
| 37126 |
80 d 3 h |
amit |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/ |
Password override persistence + bulk download/upload (dev/staging): PasswordOverride repo, resetPasswordById returns stored value, ExcelUtils password-override read/write |
|
| 37110 |
84 d 6 h |
aman |
/trunk/ |
Business-agreement e-sign gate between Full Stock Payment and PO creation
New AGREEMENT_ESIGN onboarding stage, verified by Legal (Gaurav Sharma):
- Hard-blocks first PO creation until the e-sign is verified (BulkOrderService),
mirroring the existing Full Stock Payment block.
- Agreement E-Sign panel (Partner Acquisition menu) listing FSP-done partners who
have not yet created their first PO: upload signed agreement + Gaurav-only verify.
- New agreement_esign table/entity + repository for the signed doc and audit trail.
- Timeline grid column + stepper stage for the new event.
Prod DB (separate, with sign-off): CREATE TABLE user.agreement_esign;
INSERT auth.menu + auth.menu_category rows for the panel. |
|
| 37104 |
84 d 7 h |
amit |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/ |
Add UserService.resetPasswordById for non-prod password reset by id |
|
| 37102 |
84 d 8 h |
amit |
/trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/ |
Remove dead Counter/PrivateDealUser code: drop unused isFofo, bulkShipmentAmountLimit, verifiedOn, documentVerified fields and accessors; remove dead selectByIds repo methods; drop redundant Counter/PrivateDealUser repository injections in OrderServiceImpl and InvoiceService |
|
| 36936 |
104 d 10 h |
vikas |
/trunk/ |
Update Email Ids |
|
| 36875 |
111 d 8 h |
aman |
/trunk/ |
Fix STORE_CODE_CREATED timeline: commit event before best-effort notifications; use containsKey in onboarding-timeline-detail.vm so Done badge shows even when timestamp is null |
|