Mahdi
e6aa4c64f0
feat: group activities into boards with their own stages, like sales pipelines
...
Existing stages and activities move into a default board per environment; new activities pick a board in the form.
2026-10-20 17:23:27 +03:30
Mahdi
9127fa334b
fix: stop birth dates from saving one day early in Tehran time
2026-10-20 15:20:47 +03:30
Mahdi
29398a445b
fix: validate activity, deal and lead assignees by active membership in the current environment
2026-10-20 14:47:08 +03:30
Mahdi
86e9ee6c2c
fix: treat Tahesab no-records as an empty customer list instead of a 502
...
Listing all customers no longer fails on the final empty code range, and importing a missing code no longer creates a placeholder person.
2026-10-20 12:26:20 +03:30
Mahdi
adb63447ca
fix: stop Tahesab imports from stealing links between shared-mobile customers
...
List all Tahesab customers in one paginated table with a page-size picker instead of 2000-code pages.
2026-10-20 12:00:11 +03:30
Mahdi
f5d68d83fc
feat: add per-org SMS wallet with adm panel and header credit
...
Bill all platform SMS (including OTP), allow negative balance with manual/auto cutoffs, and support own-panel bypass without wallet debit.
2026-10-19 15:55:48 +03:30
Mahdi
f15ebb72ea
fix: let only the owner set logout time and move the attendance tab
2026-10-19 13:54:09 +03:30
Mahdi
8590579605
feat: log staff sign-in and sign-out and force logout at a set time
2026-10-19 13:34:55 +03:30
Mahdi and Cursor
002f697dfe
feat: add DISC profiles and a sales copilot as an org module
...
Help reps capture a customer's likely behavior style and get negotiation guidance, with the feature gated from super admin.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-18 21:04:26 +03:30
Mahdi and Cursor
96befd3867
feat: add treasury audit, attachment download, and installment SMS
...
Let cheque clearance pick a cash account and export income, expense, and installment lists to Excel.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-18 19:59:24 +03:30
Mahdi and Cursor
8981a552fc
feat: gate treasury as an org module and group money inputs
...
Link optional invoice and cheque settlements to cash accounts, and let superadmin enable the finance module per organization.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-18 19:33:09 +03:30
Mahdi and Cursor
ab538b8304
feat: add internal finance ledger for accounts, claims, and payroll
...
Keep booked income and expense separate from cash balances, with installments, recurring items, and reports.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-18 18:49:49 +03:30
Mahdi and Cursor
61d17c5cea
fix: persist the prior-archive cutoff date when the owner changes it
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-18 16:31:19 +03:30
Mahdi and Cursor
23f8da2c65
feat: log outbound SMS and show history in compose modal
...
Persist manual, campaign, and automation SMS; expose history APIs for people and leads.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-17 21:23:07 +03:30
Mahdi and Cursor
d62e004e90
feat: SMS campaigns for people or leads with filters and batching
...
Add audience tabs, province/city filters, select-all ids, dynamic SMS tokens, and 50-sized create/send chunks.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-17 20:54:32 +03:30
Mahdi and Cursor
f7b07f6b7a
feat: owner read-only view-as from team users table
...
Allow org owners to inspect any member's data scope via dual JWT; server blocks mutations and team page stays reachable for return.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-17 19:57:26 +03:30
Mahdi and Cursor
3fb5f32ac3
fix: align activity badge and person profile with prior lens
...
Count nav badge for desk=mine, always apply activity prior filter on person records, and stop loading prior=all deals on profiles.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-17 18:56:44 +03:30
Mahdi and Cursor
0ce2533066
fix(api): load multer types for avatar upload typecheck
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-17 18:08:31 +03:30
Mahdi and Cursor
bc68582fe2
Fix prior archive filter collisions
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-17 17:49:51 +03:30
Mahdi and Cursor
008733d338
Add prior promotion endpoints
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-17 17:13:01 +03:30
Mahdi and Cursor
65d66bb331
Implement prior archive cutoff API
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-17 17:01:52 +03:30
Mahdi and Cursor
79ba146118
Wire prior archive cutoff through API
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-17 16:52:20 +03:30
Mahdi and Cursor
02841a5b8c
refactor(api): cutoff-based prior-archive where helpers
...
Replace didar/live-deal filters with createdAt cutoff and promotedFromPriorAt; add unit tests.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-17 16:33:32 +03:30
Mahdi and Cursor
9611803567
feat: serve the same CRM on crm.montact.ir as an alias
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-15 23:24:50 +03:30
Mahdi and Cursor
582733e2ea
fix: hide unlinked old activities from current work
...
Imported follow-ups with no person, company, or deal stayed on the board because only linked prior records were archived.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-15 13:02:01 +03:30
Mahdi and Cursor
6bff9d2888
fix: keep imported follow-ups out of current work
...
They stayed on the board when a non-prior deal was attached, even though the person was prior.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-15 12:34:40 +03:30
Mahdi and Cursor
6bc5e1bec7
feat: separate prior records behind an owner switch and count last-period questions
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-15 10:48:30 +03:30
Mahdi and Cursor
831c682eb3
feat: show the full work history and load every lead stage on the board
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-14 19:47:32 +03:30
Mahdi and Cursor
2cc81bb596
feat: keep deletions restorable and confirm a pipeline's deals before it is removed
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-13 22:23:09 +03:30
Mahdi and Cursor
42f0573a5f
feat: send one SMS from a person or lead and keep the dashboard inside the phone frame
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-13 21:05:17 +03:30
Mahdi and Cursor
13ee70764b
feat: show this month's birthdays and send a greeting SMS
...
Each owner sees their customers born this Jalali month and can text a custom greeting.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-13 19:55:11 +03:30
Mahdi and Cursor
cf326d1ed9
fix: keep birthdays and show Shamsi dates
...
Imported customers keep their birthday, and assistant text plus remaining calendars use the Jalali date.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-13 18:04:53 +03:30
Mahdi and Cursor
5f4cc47c41
fix: share the dashboard assistant and count leads from data
...
The hero ask box now uses the same confirm-before-create path as the assistant, count questions use real filters, and lead mobile, Jalali follow-ups, and rial labels stay consistent.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-13 14:45:29 +03:30
Mahdi and Cursor
0e420a443f
fix: keep deal edits and right-align club leaderboard
...
Empty product lists were wiping the manual amount on update, and follow-ups were only created for new deals. Leaderboard rows were laid out left-to-right on an RTL page.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-13 11:38:59 +03:30
Mahdi and Cursor
9bed6cac03
fix(api): guard unmoved deals before pipeline merge delete
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-12 21:32:21 +03:30
Mahdi and Cursor
d00f362376
feat(api): pipeline merge preview and merge endpoints
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-12 20:23:56 +03:30
Mahdi and Cursor
fd8966e13f
feat(pipelines): merge stage-map util and shared DTOs
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-12 20:15:11 +03:30
Mahdi
b43ed68e82
feat(automations): multi-option form-field conditions (all / any / none / exact)
2026-10-11 17:26:17 +03:30
Mahdi
17638786a8
feat(automations): parallel branch canvas, simple/advanced level per org, rules list UX
2026-10-11 14:48:12 +03:30
Mahdi
b3b92abae9
feat(automations): form-driven branching rules, round-robin assignment, lead-linked activities
2026-10-11 14:12:36 +03:30
Mahdi and Cursor
60d797f184
feat: باشگاه امتیازات کارکنان (موتور امتیاز، جدول رتبه، فروشگاه پاداش، نشانها، پنل مدیریت و گزارش ROI)
...
- موتور رویدادمحور با شرط، محدودیت، تأیید مدیر و idempotency
- اتصال به لید، مشتری، معامله، فعالیت، روتین، پیشفاکتور، فاکتور و تیکت
- صفحه /club و /club/admin، اعلان زنده امتیاز، آیتم منو
- انتقال فرمساز سرنخ به ابزارها
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-10 21:28:49 +03:30
Mahdi
b87ebb22e0
Montify: robust pagination (beyond 50), endpoint diagnose button
2026-10-10 18:01:55 +03:30
Mahdi
792b3d29fa
Montify: allow restarting stuck sync from UI; log sync progress
2026-10-10 17:11:51 +03:30
Mahdi
0802c2f436
Montify sync: save progress every 5 customers; skip endpoints returning 404, summarize instead of per-customer errors
2026-10-10 16:56:58 +03:30
Mahdi
f27b4c264a
Montify: mark sync running before responding; no 400 when already running
2026-10-10 16:18:25 +03:30
Mahdi
e82bd2b2df
Montify stores integration: multi-store connections, customer/order/transaction sync, webhooks
2026-10-10 15:59:12 +03:30
Mahdi and Cursor
e6755d0c2e
Tahesab: show raw data from Tahesab, invoice-style document view with metal labels
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-08 13:49:54 +03:30
Mahdi and Cursor
2f3646d085
feat(ui): modals close only via Esc/X/cancel; standard 3:1 form cover processing
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-07 15:23:14 +03:30
Mahdi and Cursor
d683932d1b
feat(forms): merge notes tab into main info for activity and deal forms; show activity hashtags
...
- Activity form: notes/tags card inline, live hashtag preview, focus notes when required
- Hashtags shown in activity detail (clickable search) and list rows; search accepts #tag
- Deal form: remove mobile tabs
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-07 13:17:29 +03:30
Mahdi and Cursor
13668c4ba4
feat(activities): split customer column, wider search, custom activity types with type-specific fields
...
- Table: separate assignee and customer columns; search by assignee and activity type
- ActivityTypeDef model with per-type field definitions (text, select, checklist, participants, ...)
- Default types incl. meeting subject/participants and task checklist; admins manage types
- Participants see activities in their lists and get notified
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-07 12:29:23 +03:30