Fix 3 loi nghiem trong: eval() -> safe parser, Contract::saved() infinite loop, DB Transaction for schedule generation

This commit is contained in:
2026-04-28 08:04:30 +00:00
parent 49aa20a634
commit e229da5e8c
7 changed files with 361 additions and 78 deletions

View File

@@ -13,6 +13,8 @@ class Contract extends Model
protected $guarded = [];
private static bool $calculating = false;
protected $casts = [
'metadata' => 'array',
'discount_details' => 'array',
@@ -125,16 +127,26 @@ class Contract extends Model
});
static::saved(function ($contract) {
// Guard: tránh infinite loop khi lưu calculation_log
if (self::$calculating) return;
// Tự động tính toán và lưu snapshot sau khi lưu
if ($contract->land_value || $contract->foundation_value) {
$result = \App\Services\Calculation\PriceCalculationService::calculateForContract($contract);
$contract->calculation_log = [
'steps' => $result->getSteps(),
'final_values' => $result->getValues(),
'price_sheet' => $result->toPriceSheet(),
'calculated_at' => now()->toDateTimeString(),
];
$contract->saveQuietly();
self::$calculating = true;
try {
$result = \App\Services\Calculation\PriceCalculationService::calculateForContract($contract);
$contract->updateQuietly([
'calculation_log' => [
'steps' => $result->getSteps(),
'final_values' => $result->getValues(),
'price_sheet' => $result->toPriceSheet(),
'calculated_at' => now()->toDateTimeString(),
],
]);
} finally {
self::$calculating = false;
}
}
});
}