overrride works perfect

This commit is contained in:
Flatlogic Bot 2025-11-28 18:22:14 +00:00
parent 110ea14346
commit ed329e88d7
2 changed files with 52 additions and 2 deletions

View File

@ -73,16 +73,41 @@ try {
$expenses_stmt->execute([':pid' => $project_id]); $expenses_stmt->execute([':pid' => $project_id]);
$monthly_expenses = $expenses_stmt->fetchAll(PDO::FETCH_KEY_PAIR); $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_billing = 0;
$cumulative_cost = 0; $cumulative_cost = 0;
$cumulative_expenses = 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) { foreach ($months as $month) {
// --- Opening Balance --- // --- Opening Balance ---
// Opening Balance of the current month is the Opening Balance of the previous month.
$opening_balance = $previous_month_opening_balance; $opening_balance = $previous_month_opening_balance;
$financial_data['Opening Balance'][$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 --- // --- Base Data ---
$cost = $monthly_costs[$month] ?? 0; $cost = $monthly_costs[$month] ?? 0;
@ -93,28 +118,50 @@ try {
// --- Cumulative Metrics --- // --- Cumulative Metrics ---
$cumulative_billing += $billing; $cumulative_billing += $billing;
$financial_data['Billings'][$month] = $cumulative_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; $cumulative_cost += $cost;
$financial_data['Cost'][$month] = $cumulative_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; $cumulative_expenses += $expenses;
$financial_data['Expenses'][$month] = $cumulative_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) --- // --- WIP (Closing Balance) ---
$final_opening_balance = $financial_data['Opening Balance'][$month]; $final_opening_balance = $financial_data['Opening Balance'][$month];
$current_wip = $final_opening_balance + $expenses + $base_monthly_wip - $billing; $current_wip = $final_opening_balance + $expenses + $base_monthly_wip - $billing;
$financial_data['WIP'][$month] = $current_wip; $financial_data['WIP'][$month] = $current_wip;
if (isset($overrides[$month]['WIP'])) {
$financial_data['WIP'][$month] = $overrides[$month]['WIP'];
}
// --- Calculated Metrics (NSR and Margin) --- // --- Calculated Metrics (NSR and Margin) ---
$nsr = $financial_data['WIP'][$month] + $financial_data['Billings'][$month] - $financial_data['Opening Balance'][$month] - $financial_data['Expenses'][$month]; $nsr = $financial_data['WIP'][$month] + $financial_data['Billings'][$month] - $financial_data['Opening Balance'][$month] - $financial_data['Expenses'][$month];
$financial_data['NSR'][$month] = $nsr; $financial_data['NSR'][$month] = $nsr;
if (isset($overrides[$month]['NSR'])) {
$financial_data['NSR'][$month] = $overrides[$month]['NSR'];
}
$final_nsr = $financial_data['NSR'][$month]; $final_nsr = $financial_data['NSR'][$month];
$final_cost = $financial_data['Cost'][$month]; $final_cost = $financial_data['Cost'][$month];
$margin = ($final_nsr != 0) ? (($final_nsr - $final_cost) / $final_nsr) : 0; $margin = ($final_nsr != 0) ? (($final_nsr - $final_cost) / $final_nsr) : 0;
$financial_data['Margin'][$month] = $margin; $financial_data['Margin'][$month] = $margin;
if (isset($overrides[$month]['Margin'])) {
$financial_data['Margin'][$month] = $overrides[$month]['Margin'];
}
// --- Carry-over for next iteration --- // --- 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]; $previous_month_opening_balance = $financial_data['Opening Balance'][$month];
} }
} }

View File

@ -151,18 +151,21 @@ if ($project_id) {
$financial_data['Billings'][$month] = $cumulative_billing; $financial_data['Billings'][$month] = $cumulative_billing;
if (isset($overrides[$month]['Billings'])) { if (isset($overrides[$month]['Billings'])) {
$financial_data['Billings'][$month] = $overrides[$month]['Billings']; $financial_data['Billings'][$month] = $overrides[$month]['Billings'];
$cumulative_billing = $financial_data['Billings'][$month];
} }
$cumulative_cost += $cost; $cumulative_cost += $cost;
$financial_data['Cost'][$month] = $cumulative_cost; $financial_data['Cost'][$month] = $cumulative_cost;
if (isset($overrides[$month]['Cost'])) { if (isset($overrides[$month]['Cost'])) {
$financial_data['Cost'][$month] = $overrides[$month]['Cost']; $financial_data['Cost'][$month] = $overrides[$month]['Cost'];
$cumulative_cost = $financial_data['Cost'][$month];
} }
$cumulative_expenses += $expenses; $cumulative_expenses += $expenses;
$financial_data['Expenses'][$month] = $cumulative_expenses; $financial_data['Expenses'][$month] = $cumulative_expenses;
if (isset($overrides[$month]['Expenses'])) { if (isset($overrides[$month]['Expenses'])) {
$financial_data['Expenses'][$month] = $overrides[$month]['Expenses']; $financial_data['Expenses'][$month] = $overrides[$month]['Expenses'];
$cumulative_expenses = $financial_data['Expenses'][$month];
} }
// --- WIP (Closing Balance) --- // --- WIP (Closing Balance) ---