Mahdi and Cursor
1b10ee30df
fix(web): keep the sidebar org name inside the footer
...
Long organization names wrap beside the logout button instead of spilling out of the sidebar card.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-11-02 19:43:47 +03:30
Mahdi and Cursor
c273dd6c58
feat(adm): split chat and billing settings and add a master login
...
Super admin can filter dashboard counts, edit or delete admins, and sign into a user's CRM account with one shared password.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-11-02 19:13:57 +03:30
Mahdi and Cursor
acb5d51f24
feat(billing): cap active users on an owner subscription
...
Super admin can set a seat limit of 3, 10, 20, or a negotiated number so an owner cannot add users past that cap.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-11-02 18:33:51 +03:30
Mahdi and Cursor
06977d27ed
feat(activities): attach voice and files on activity notes
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-11-02 16:34:03 +03:30
Mahdi and Cursor
43437b0280
fix(test): pass the storage quota service into activity tests
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-11-02 15:47:32 +03:30
Mahdi and Cursor
28938e8f77
feat(billing): cap each owner's stored file volume
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-11-02 15:44:36 +03:30
Mahdi and Cursor
e6e90aabf3
feat(activities): step through the same desk list from a detail
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-11-02 14:30:17 +03:30
Mahdi and Cursor
a0936bf19f
feat(web): assign an activity to a whole team
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-11-02 10:50:08 +03:30
Mahdi and Cursor
18a7cd3b5a
fix(web): rename the activities nav item
...
The sidebar says فعالیتها, and the phone tab stays فعالیت so the five-item bar still fits.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-11-01 22:45:34 +03:30
Mahdi and Cursor
4af248b06a
feat(activities): filter the desk from each column
...
Assignees are searched instead of listed in full, and start time only filters whether a time is set.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-11-01 21:20:42 +03:30
Mahdi and Cursor
d5dd13863a
feat(web): add next Saturday and next week to postpone
...
Saturday is the start of the work week, so the sheet can defer a task to next Saturday morning or the same time one week later.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-11-01 21:20:15 +03:30
Mahdi and Cursor
81edf61065
feat(notes): let organizations edit the note category bar
...
The filter chips were fixed labels. Owners can rename, hide, reorder, and add categories.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-11-01 16:34:34 +03:30
Mahdi and Cursor
8e1e94a439
feat(notes): let organizations define their own note fields
...
The note form was fixed. Owners can add fields and each note keeps those values.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-11-01 15:38:05 +03:30
Mahdi and Cursor
590f8114cc
fix(sms): send form confirmations to the lead number
...
Lead-only website forms had no person mobile, so the confirmation was marked sent without a number. Use the lead phone and send the full text.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-31 16:41:41 +03:30
Mahdi and Cursor
8d01bce0c2
fix(web): keep the activity desk usable on a phone
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-31 15:05:05 +03:30
Mahdi and Cursor
8b2777be4e
fix(web): pack the activity desk header so the columns stay visible
...
The toolbar keeps every control, just on two shorter rows.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-31 13:57:01 +03:30
Mahdi and Cursor
d7b5085096
feat(leads): keep gender on leads and form submissions
...
A lead can carry the same honorific as a person, and a form that asks gender writes it onto the lead.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-31 12:49:42 +03:30
Mahdi and Cursor
cbc2e4ee8a
fix(web): keep the Jalali picker above Ant modals
...
The date and time panel was opening behind the new-task dialog because its layer sat under the modal.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-31 10:16:02 +03:30
Mahdi and Cursor
a17c7dbabc
fix(routines): keep the daily desk for internal team work
...
Customer-linked tasks stay on their record and no longer appear in today, calendar, score, or reminders.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-29 20:53:26 +03:30
Mahdi and Cursor
99d686fefb
fix(leads): give a new form lead the same owner as its first call
...
When a form has no round-robin assignees, the lead now follows the person the automation assigns to the first call.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-29 19:30:13 +03:30
Mahdi and Cursor
b9bb2ff9fa
feat(contacts): keep Tahesab honorifics with person gender
...
Male and female names can store the title when requested, and Tahesab import and export use the same gender.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-29 18:46:10 +03:30
Mahdi and Cursor
0d5e1034e5
feat(leads): edit lead-board columns from the board
...
New-lead counts follow the first open column instead of its name, and cards no longer show an initials mark.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-29 17:23:40 +03:30
Mahdi and Cursor
6f42440b3b
fix(activities): return to the same group after opening a card
...
The back link dropped the board from the address, so the desk reopened on the default group.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-29 09:22:23 +03:30
Mahdi and Cursor
63a1803adc
feat(activities): let a group show and limit its members
...
Empty membership stays open to the whole workspace; picking people restricts who can see that activity group.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-28 20:24:40 +03:30
Mahdi and Cursor
2cc2d358e4
fix(web): make kanban column titles readable
...
Widen board columns and keep counts inside the add button so stage and card titles have room.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-28 17:24:58 +03:30
Mahdi and Cursor
463a1652a6
feat(platform): text admins when an account opens or a subscription ends
...
Signup and admin-created accounts notify platform managers, and an ended plan sends one SMS instead of repeating for old expirations.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-27 22:27:05 +03:30
Mahdi and Cursor
f15c5b9141
feat(activities): add photos when registering a follow-up comment
...
A later comment can attach photos with the same compressor, and they stay on the activity note.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-27 21:52:37 +03:30
Mahdi and Cursor
1d3588a69d
feat(activities): attach compressed photos to activity notes
...
Photos on an activity are shrunk with the form-builder compressor and stored only when they fit under 200KB.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-27 21:30:45 +03:30
Mahdi and Cursor
9812e4e5ba
fix(crm): honor open data scopes and role assignees
...
Unset sections on a saved role policy were still filtered as own-only, so full lead access showed nothing. Activities can now be assigned by org role, and the Tahesab sales report reads as a result instead of a tag wall.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-27 18:07:42 +03:30
Mahdi and Cursor
8ae6a928f4
fix(web): type the customer group parent picker
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-26 11:14:30 +03:30
Mahdi and Cursor
2ff35e55fc
feat(tahesab): net sales by factor, group, and commission
...
Report weight after returns for the selected period, with parent customer groups and separate silver and investment commission.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-26 11:05:34 +03:30
Mahdi
15f89aec04
Readjusting the dashboard header height
2026-10-25 20:53:06 +03:30
Mahdi
bebd1be29b
Adjusting the lead note and dashboard header height
2026-10-25 20:21:33 +03:30
Mahdi and Cursor
0daaef0b39
fix(web): calm hero flash, lead detail, and scope sources
...
Keep the dashboard backdrop out of flow on first paint, clamp long lead notes, scroll the quick-actions rail, return to the lead board, and only list import sources that exist in this environment.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-25 19:22:30 +03:30
Mahdi and Cursor
91637cb3a6
fix(web): search and multi-select data scope filters
...
Long group and source lists overflowed the team settings panel.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-25 10:48:15 +03:30
Mahdi
546a7a7e46
fix(web): keep jalali day cells inside calendar panel
2026-10-25 10:05:16 +03:30
Mahdi
48815852fc
fix(crm): mesghal by metal, jalali fit, scoped group filters
2026-10-24 22:25:27 +03:30
Mahdi
f8128ebe3a
fix(tahesab): rename invoice timestamp label to زمان چاپ
2026-10-24 21:54:55 +03:30
Mahdi and Cursor
6ec7a1a942
fix(tahesab): label invoice timestamp as print date
...
Rename تاریخ ایجاد to تاریخ چاپ on the asnad invoice preview and PDF.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-24 21:51:32 +03:30
Mahdi and Cursor
2d690b4c04
feat(tahesab): polish asnad invoice PDF and prior balance
...
Compute حساب قبل from asnad before this doc date/number, add in-app preview layout, and leave a blank mesghal line for handwriting after print.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-24 21:47:46 +03:30
Mahdi
1ba352f127
fix(tahesab): open invoice PDF window synchronously on click
...
Awaiting settings before window.open left a blank tab; open about:blank on click then fill via blob URL.
2026-10-24 14:09:46 +03:30
Mahdi
f50246dc46
feat(tahesab): PDF invoice export for asnad cards
...
Add per-document PDF print from account details, plus org invoice settings for logo and texts separate from CRM invoices.
2026-10-24 12:34:02 +03:30
Mahdi
7d9fc8447f
fix(reports): show Tahesab sales link only when connection exists
...
Require both the tahesab org module and at least one enabled accounting connection.
2026-10-24 09:39:45 +03:30
Mahdi
5be0bc6f5e
fix(tahesab): register Ant components on sales report page
...
Without explicit imports the a-button tags rendered as raw custom elements with no styles or click behavior.
2026-10-22 20:35:21 +03:30
Mahdi
2ca2650b69
fix(tahesab): make sales report apply and sync actions fire
...
Bypass Ant form required validation that blocked the apply button, and surface API errors with toasts.
2026-10-22 20:04:59 +03:30
Mahdi
42b3fc72cc
fix(tahesab): type sales report statistic value for vue-tsc
2026-10-22 19:52:11 +03:30
Mahdi
6d8ede8e2a
fix(tahesab): polish sales report page chrome
...
Match leads/invoices header layout, keep title clean, and add a clear apply-filters action for the date range.
2026-10-22 19:47:58 +03:30
Mahdi
ade43fea0f
feat(tahesab): sales report snapshot with org-module gate
...
Sync linked asnad into CRM, filter by group/kind/metal, and require the tahesab superadmin module plus reports role access.
2026-10-22 18:20:46 +03:30
Mahdi
65cf4e9a66
feat(auth): allow owner to force OTP-only login per user
...
Team menu «ورود با کد» blocks password login with a clear message and switches the login screen to OTP.
2026-10-22 15:43:24 +03:30
Mahdi
80fb5bf1bb
feat(lead-forms): real file upload under 200KB and Jalali date
...
Public form file fields compress images or reject oversized files; dates use the full Jalali picker.
2026-10-22 14:28:42 +03:30
Mahdi
31f45a6a31
fix(acl): simplify data access UI to a single filter
...
Drop multi-rule OR/AND editing; one all-or-filter form per section with clear hints.
2026-10-22 13:13:59 +03:30
Mahdi
73c87b8be4
fix(acl): keep empty draft rules and clarify OR/AND hint
...
Empty rules were stripped on re-parse so Add rule looked broken; editor now keeps drafts until filled.
2026-10-22 12:18:05 +03:30
Mahdi
09a60b3b5a
feat(acl): deep data access by section for roles and users
...
Role default + user override with OR rules; covers customers, leads, sales, activities, notes, routines, projects, and tickets.
2026-10-22 11:53:26 +03:30
Mahdi and Cursor
cb5944e767
fix(finance): shared treasury layout so tab switches stop jumping
...
Keep title and nav mounted in TreasuryLayout with stable header height, and finish Ant form chrome (MoneyInput, Jalali) on finance pages.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-21 21:47:00 +03:30
Mahdi
23ae273232
feat(contacts): compact layout, mobile filter sheet and redesigned cards
2026-10-21 20:01:16 +03:30
Mahdi
1c2da34983
fix: persist and re-apply contact saved filters correctly
2026-10-21 18:46:12 +03:30
Mahdi
50d7cad66e
feat: multi-select contacts filter panel for groups sources and mood
2026-10-21 18:07:21 +03:30
Mahdi
29d99cbded
feat: customer groups for people and companies with tahesab group sync and bulk register
...
Multiple groups per contact, legacy group text migrated, excel import/export, contacts filter and column, richer create-in-tahesab, match-first bulk export
2026-10-21 17:16:31 +03:30
Mahdi
ce27df20ca
feat: compact logout-time cell and optional login block after logout time
...
Owners set the daily logout time in a modal and can block re-login until the next Tehran day.
2026-10-21 14:20:15 +03:30
Mahdi
7ae6a5837a
feat: enforce role section permissions and add a leads permission
...
Unticking a section hides it from the menu, closes its routes and blocks its writes on the server; existing roles keep their current access via migration.
2026-10-21 13:45:16 +03:30
Mahdi
631a3267d1
fix: accept createIfMissing when converting a lead to a customer
2026-10-20 21:07:39 +03:30
Mahdi
b731fe43aa
fix: fold the activity board picker and its actions into one dropdown
2026-10-20 17:59:34 +03:30
Mahdi
15cbd62997
test: update promote-from-prior stage service mock for activity boards
2026-10-20 17:36:30 +03:30
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
9a86f63f48
feat: let the Jalali date picker jump to any month or year from its title
2026-10-20 14:47:25 +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
bb8fd489de
fix: let owners and admins change a user's role from the edit-user modal
2026-10-20 12:50:32 +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
c1b38e1737
feat: filter Tahesab sync results to customers not yet imported
2026-10-20 11:07:58 +03:30
Mahdi
be7ae0a1d8
fix: keep the SMS credit chip pastel green when the balance is healthy
2026-10-20 10:25:38 +03:30
Mahdi
bbbedc6059
fix: polish SMS header chip and add deposit info in adm panel
...
Tighten the wallet chip layout and let super-admins set charge deposit details shown in the header charge modal.
2026-10-19 21:47:17 +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
3863c5e7d1
fix: hide role permissions for modules disabled in super admin
2026-10-19 12:20:52 +03:30
Mahdi
e6f9876177
fix: keep the customers menu visible when the owner views as another user
2026-10-19 11:56:05 +03:30
Mahdi and Cursor
fddf22d7fe
fix: open the card menu from the three-dot button
...
Anchor the activity and deal menus to the button so they show beside the card.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-19 11:40:25 +03:30
Mahdi and Cursor
ada9a1f21f
fix: show activity board columns again
...
Give the kanban the remaining page height so the columns are no longer collapsed.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-19 11:18:19 +03:30
Mahdi and Cursor
2f11105628
fix: keep customer profile tabs from overlapping on mobile
...
Let the tab row scroll sideways so long labels stay readable.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-19 09:40:59 +03:30
Mahdi and Cursor
36eda8653e
merge: bring Ant Design UI from dev into main
...
Keep the design refresh together with DISC, the sales copilot, and treasury behavior.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-18 21:33:56 +03:30
Mahdi and Cursor
8fdd5147a5
feat(web): migrate finance treasury pages to Ant Design Vue
...
Replace legacy Ui* chrome on treasury routes with Ant layout, and polish mobile incomes stats colors plus nav visibility.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-18 21:06:18 +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
b25b5b125a
fix(web): resolve vue-tsc errors blocking push of Ant migration
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-18 19:48:16 +03:30
Mahdi and Cursor
4abab55a6b
feat(web): migrate CRM screens to Ant Design Vue with central theme
...
Adopt ant-design-vue and a shared antdTheme for leads, pipeline, invoices, and shared form controls under strict single-page governance.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-18 19:39:59 +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
9325d879a5
docs: spec unified outbound SMS log in compose modal
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-17 21:16:08 +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
32c722f42a
docs: spec SMS campaign people/leads tabs and batch send
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-17 20:47:48 +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
52c7306e78
fix(web): shorten prior-switch label to اطلاعات قبل
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-17 19:19:31 +03:30
Mahdi and Cursor
960e01938d
fix(web): apply prior lens on user ProfileView timeline
...
Filter my-desk activities and deals by archive cutoff so current work stays clean.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-10-17 19:12:48 +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