History is limited to the signed-in customer. Update and delete only apply while the request is still pending.
Co-authored-by: Cursor <cursoragent@cursor.com>
Customer accounts are not sub-accounts of moin 12101. Send Job/Put with JobNumber moin plus customer id.
Co-authored-by: Cursor <cursoragent@cursor.com>
Hesabgar fails when it must invent the account number. Send the subsidiary code plus the customer id as AccountNumber.
Co-authored-by: Cursor <cursoragent@cursor.com>
The message goes out after the result is saved, and a send failure does not undo the approval or rejection.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wire outbound Invoice/Document sync after confirmed ops, store sync status with timeout lock, and keep SQL credentials out of frontend responses.
Co-authored-by: Cursor <cursoragent@cursor.com>
Admin charge can now wipe the exact remaining balance when a count product has a leftover decimal amount.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add admin decision to write app wallet onto Tahesab even when zero, always await colleague callback regardless of the wait switch, and SMS admins on colleague reject.
Co-authored-by: Cursor <cursoragent@cursor.com>
The list stream must tell clients whether each product is open so the device clock cannot reopen a closed shop.
Co-authored-by: Cursor <cursoragent@cursor.com>
Run one-time overflow cleanup on migrate and keep mande/document success
rows capped at 2000 with an AFTER INSERT trigger, without cron or manual SQL.
Co-authored-by: Cursor <cursoragent@cursor.com>
Clear tahesab_id on locally successful rows so they re-enter the send queue without touching panel customer codes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Split frontends like my.goldarvin.ir were waiting on 404 retries for the API hostname, which made get_settings take ~16s.
Co-authored-by: Cursor <cursoragent@cursor.com>
Keep the newest 2000 success rows per inbound type so dumps stop growing from Pargar webhooks, and store compact document payloads instead of full JSON.
Co-authored-by: Cursor <cursoragent@cursor.com>
After pending docs finish, the same pump writes customers without a code into Tahesab. Inbound import is server-side; the admin only polls status.
Co-authored-by: Cursor <cursoragent@cursor.com>
File cache cannot use Cache::lock, so docs for customers without a code always failed. Register first, put the customer name on the sanad, and surface the real error.
Co-authored-by: Cursor <cursoragent@cursor.com>
Pending list was empty because a missing tahesab table hid unsynced orders and charges. Create the table when needed and keep customer on each row.
Co-authored-by: Cursor <cursoragent@cursor.com>