diff --git a/app/include_topbar.php b/app/include_topbar.php index 9999cd6..a031eac 100644 --- a/app/include_topbar.php +++ b/app/include_topbar.php @@ -420,7 +420,9 @@ function do_switch_branch(company_id) { autoPrepare: true, checkRequired: 0, action: 'update', - company_id: company_id, + // Sent under its own key: prepare_form_data() always fills company_id with + // the CURRENT company, and only options.data reaches the payload. + data: { target_company_id: company_id }, onSuccess: function(res) { window.location.reload(); } diff --git a/app/setting/api/engine/switch_branch.php b/app/setting/api/engine/switch_branch.php index 4f84cb9..47a3eb7 100644 --- a/app/setting/api/engine/switch_branch.php +++ b/app/setting/api/engine/switch_branch.php @@ -3,7 +3,11 @@ * switch_branch.php — Switch the active company for the current session. * * action: 'read' → return list of companies the user belongs to - * action: 'update' → switch to the requested company_id + * action: 'update' → switch to target_company_id + * + * The target is read from target_company_id, not company_id: every request + * carries company_id = the CURRENT company (prepare_form_data in custom.js), + * so reading it made a switch silently re-select the company already active. */ session_start(); require_once '../../../assets/utils/db_auth.php'; @@ -20,7 +24,7 @@ if ($action === 'read') { } if ($action === 'update') { - $target_company_id = (int)($data['company_id'] ?? 0); + $target_company_id = (int)($data['target_company_id'] ?? 0); if (!$target_company_id) { $answer['message'] = 'Invalid company.';