From ed329e88d795c0f0081021fb898b0ba4e4d16daa Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Fri, 28 Nov 2025 18:22:14 +0000 Subject: [PATCH] overrride works perfect --- export_project_finance.php | 51 ++++++++++++++++++++++++++++++++++++-- project_details.php | 3 +++ 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/export_project_finance.php b/export_project_finance.php index 734a1ff..6ddfe51 100644 --- a/export_project_finance.php +++ b/export_project_finance.php @@ -73,16 +73,41 @@ try { $expenses_stmt->execute([':pid' => $project_id]); $monthly_expenses = $expenses_stmt->fetchAll(PDO::FETCH_KEY_PAIR); - // 2. Calculate cumulative values month by month + // 2. Calculate and process values month by month, including overrides $cumulative_billing = 0; $cumulative_cost = 0; $cumulative_expenses = 0; - $previous_month_opening_balance = 0; + $previous_month_opening_balance = 0; // Initialize Opening Balance for the first month. + + // Fetch all overridden data at once to avoid querying in a loop + $override_stmt = $pdo->prepare("SELECT month, metricName, value FROM projectFinanceMonthly WHERE projectId = :pid AND is_overridden = 1"); + $override_stmt->execute([':pid' => $project_id]); + $overridden_rows = $override_stmt->fetchAll(PDO::FETCH_ASSOC); + $overrides = []; + $metric_name_map = [ + 'wip' => 'WIP', + 'opening_balance' => 'Opening Balance', + 'billing' => 'Billings', + 'expenses' => 'Expenses', + 'cost' => 'Cost', + 'nsr' => 'NSR', + 'margin' => 'Margin' + ]; + foreach ($overridden_rows as $row) { + if (isset($metric_name_map[$row['metricName']])) { + $metric_display_name = $metric_name_map[$row['metricName']]; + $overrides[$row['month']][$metric_display_name] = $row['value']; + } + } foreach ($months as $month) { // --- Opening Balance --- + // Opening Balance of the current month is the Opening Balance of the previous month. $opening_balance = $previous_month_opening_balance; $financial_data['Opening Balance'][$month] = $opening_balance; + if (isset($overrides[$month]['Opening Balance'])) { + $financial_data['Opening Balance'][$month] = $overrides[$month]['Opening Balance']; + } // --- Base Data --- $cost = $monthly_costs[$month] ?? 0; @@ -93,28 +118,50 @@ try { // --- Cumulative Metrics --- $cumulative_billing += $billing; $financial_data['Billings'][$month] = $cumulative_billing; + if (isset($overrides[$month]['Billings'])) { + $financial_data['Billings'][$month] = $overrides[$month]['Billings']; + $cumulative_billing = $financial_data['Billings'][$month]; + } $cumulative_cost += $cost; $financial_data['Cost'][$month] = $cumulative_cost; + if (isset($overrides[$month]['Cost'])) { + $financial_data['Cost'][$month] = $overrides[$month]['Cost']; + $cumulative_cost = $financial_data['Cost'][$month]; + } $cumulative_expenses += $expenses; $financial_data['Expenses'][$month] = $cumulative_expenses; + if (isset($overrides[$month]['Expenses'])) { + $financial_data['Expenses'][$month] = $overrides[$month]['Expenses']; + $cumulative_expenses = $financial_data['Expenses'][$month]; + } // --- WIP (Closing Balance) --- $final_opening_balance = $financial_data['Opening Balance'][$month]; $current_wip = $final_opening_balance + $expenses + $base_monthly_wip - $billing; $financial_data['WIP'][$month] = $current_wip; + if (isset($overrides[$month]['WIP'])) { + $financial_data['WIP'][$month] = $overrides[$month]['WIP']; + } // --- Calculated Metrics (NSR and Margin) --- $nsr = $financial_data['WIP'][$month] + $financial_data['Billings'][$month] - $financial_data['Opening Balance'][$month] - $financial_data['Expenses'][$month]; $financial_data['NSR'][$month] = $nsr; + if (isset($overrides[$month]['NSR'])) { + $financial_data['NSR'][$month] = $overrides[$month]['NSR']; + } $final_nsr = $financial_data['NSR'][$month]; $final_cost = $financial_data['Cost'][$month]; $margin = ($final_nsr != 0) ? (($final_nsr - $final_cost) / $final_nsr) : 0; $financial_data['Margin'][$month] = $margin; + if (isset($overrides[$month]['Margin'])) { + $financial_data['Margin'][$month] = $overrides[$month]['Margin']; + } // --- Carry-over for next iteration --- + // The next month's opening balance is this month's final opening balance (including override). $previous_month_opening_balance = $financial_data['Opening Balance'][$month]; } } diff --git a/project_details.php b/project_details.php index 299b8b6..540c3b8 100644 --- a/project_details.php +++ b/project_details.php @@ -151,18 +151,21 @@ if ($project_id) { $financial_data['Billings'][$month] = $cumulative_billing; if (isset($overrides[$month]['Billings'])) { $financial_data['Billings'][$month] = $overrides[$month]['Billings']; + $cumulative_billing = $financial_data['Billings'][$month]; } $cumulative_cost += $cost; $financial_data['Cost'][$month] = $cumulative_cost; if (isset($overrides[$month]['Cost'])) { $financial_data['Cost'][$month] = $overrides[$month]['Cost']; + $cumulative_cost = $financial_data['Cost'][$month]; } $cumulative_expenses += $expenses; $financial_data['Expenses'][$month] = $cumulative_expenses; if (isset($overrides[$month]['Expenses'])) { $financial_data['Expenses'][$month] = $overrides[$month]['Expenses']; + $cumulative_expenses = $financial_data['Expenses'][$month]; } // --- WIP (Closing Balance) ---