Fix 3 loi nghiem trong: eval() -> safe parser, Contract::saved() infinite loop, DB Transaction for schedule generation
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user