36293-vm/save_override.php
2025-11-27 11:18:43 +00:00

87 lines
2.9 KiB
PHP

<?php
require_once __DIR__ . '/db/config.php';
header('Content-Type: application/json');
$response = ['success' => false, 'error' => 'Invalid request'];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$project_id = $_POST['projectId'] ?? null;
$month = $_POST['month'] ?? null;
$metrics = [
'wip' => $_POST['wip'] ?? null,
'opening_balance' => $_POST['openingBalance'] ?? null,
'billings' => $_POST['billings'] ?? null,
'expenses' => $_POST['expenses'] ?? null,
'cost' => $_POST['cost'] ?? null,
];
if ($project_id && $month && !in_array(null, $metrics, true)) {
try {
$pdo = db();
$sql = "INSERT INTO projectFinanceMonthly (projectId, month, metricName, value, is_overridden)
VALUES (:pid, :m, :metric, :value, 1)
ON DUPLICATE KEY UPDATE value = :value, is_overridden = 1";
$stmt = $pdo->prepare($sql);
$metric_map = [
'wip' => 'wip',
'opening_balance' => 'opening_balance',
'billings' => 'billing',
'expenses' => 'expenses',
'cost' => 'cost'
];
foreach ($metrics as $metricKey => $value) {
if (isset($metric_map[$metricKey])) {
$metricName = $metric_map[$metricKey];
$stmt->execute([
':pid' => $project_id,
':m' => $month,
':metric' => $metricName,
':value' => $value
]);
}
}
// Use the newly submitted values from POST as the source of truth for calculation
$wip = (float)($metrics['wip'] ?? 0);
$billings = (float)($metrics['billings'] ?? 0);
$opening_balance = (float)($metrics['opening_balance'] ?? 0);
$expenses = (float)($metrics['expenses'] ?? 0);
$cost = (float)($metrics['cost'] ?? 0);
// Calculate NSR
$nsr = $wip + $billings - $opening_balance - $expenses;
// Calculate Margin
$margin = ($nsr != 0) ? (($nsr - $cost) / $nsr) : 0;
// Save NSR and Margin
$stmt->execute([
':pid' => $project_id,
':m' => $month,
':metric' => 'nsr',
':value' => $nsr
]);
$stmt->execute([
':pid' => $project_id,
':m' => $month,
':metric' => 'margin',
':value' => $margin
]);
$response = ['success' => true, 'nsr' => $nsr, 'margin' => $margin];
} catch (PDOException $e) {
$response['error'] = 'Database error: ' . $e->getMessage();
error_log($e->getMessage());
}
} else {
$response['error'] = 'Missing required fields.';
}
}
echo json_encode($response);