diff --git a/app/modules/documents/agent_package.py b/app/modules/documents/agent_package.py index 08891be..da8f3ca 100644 --- a/app/modules/documents/agent_package.py +++ b/app/modules/documents/agent_package.py @@ -4,7 +4,7 @@ import io from pathlib import Path import zipfile -ERP_LOCAL_AGENT_VERSION = "1.22.20" +ERP_LOCAL_AGENT_VERSION = "1.22.21" ERP_LOCAL_AGENT_NAME = "ERP Local Agent" RUNTIME_ROOT = Path(__file__).resolve().parent / "local_agent_runtime" _DETERMINISTIC_ZIP_TIMESTAMP = (2026, 1, 1, 0, 0, 0) diff --git a/app/modules/documents/local_agent_runtime/erp_local_agent/__init__.py b/app/modules/documents/local_agent_runtime/erp_local_agent/__init__.py index 19d30a5..a38def6 100644 --- a/app/modules/documents/local_agent_runtime/erp_local_agent/__init__.py +++ b/app/modules/documents/local_agent_runtime/erp_local_agent/__init__.py @@ -1,2 +1,2 @@ -__version__ = "1.22.20" +__version__ = "1.22.21" AGENT_NAME = "ERP Local Agent" diff --git a/app/modules/documents/local_agent_runtime/erp_local_agent/commands.py b/app/modules/documents/local_agent_runtime/erp_local_agent/commands.py index d8cb9b9..72ec1b9 100644 --- a/app/modules/documents/local_agent_runtime/erp_local_agent/commands.py +++ b/app/modules/documents/local_agent_runtime/erp_local_agent/commands.py @@ -178,6 +178,7 @@ class AgentCommandProcessor: "cash_payment_ledger_cache_capability": True, "cash_payment_open_company_selection_capability": True, "cash_payment_opening_balance_master_path_capability": True, + "cash_payment_selected_company_resolver_capability": True, "opening_balance_balance_sheet_only_capability": True, "tally_writeback_capability": True, } @@ -1039,8 +1040,21 @@ class AgentCommandProcessor: # Potentially slow Tally status/preflight is deliberately inside the # worker so it can never delay the ERP command acknowledgement. - company, live_company_name = self._resolve_open_company(payload) - company_name = live_company_name + # Cash Payment must resolve the company the same way as Opening Balance + # Review. The generic GUID/current-company resolver is intentionally not + # used here because Tally CURRENTCOMPANY can refer to the focused company + # while another explicitly selected company is also open. + company, resolved_guid, _guid_refreshed = self._cash_payment_selected_company(payload) + company_name = str(company.name or "").strip() + if resolved_guid and resolved_guid != tally_guid: + tally_guid = resolved_guid + payload["tally_guid"] = resolved_guid + with self.store.connect(client_id) as db: + db.execute( + "UPDATE cash_payment_ledger_jobs SET tally_guid=?, company_name=? WHERE job_id=?", + (tally_guid, company_name, job_id), + ) + db.commit() with self.store.connect(client_id) as db: db.execute( "UPDATE cash_payment_ledger_jobs SET company_name=?,stage=?,percent=? WHERE job_id=?", @@ -1793,7 +1807,13 @@ class AgentCommandProcessor: from collections import defaultdict from datetime import date as _date - company, company_name = self._resolve_open_company(payload) + # Read-only Cash Payment review follows the Opening Balance company resolver. + # Do not reject an explicitly selected loaded company merely because another + # open Tally company currently has UI focus. + company, resolved_guid, _guid_refreshed = self._cash_payment_selected_company(payload) + company_name = str(company.name or "").strip() + if resolved_guid: + payload["tally_guid"] = resolved_guid date_from = str(payload.get("date_from") or "").strip() date_to = str(payload.get("date_to") or "").strip() cash_limit = round(float(payload.get("cash_limit") or 10000.0), 2)