refactor: standardize material usage and remaining material precision to two decimal places across CuttingService and related components for improved consistency

This commit is contained in:
Yoga Pangestu 2026-06-21 12:23:51 +07:00
parent 0ad8c919ad
commit 13f2c6d745
3 changed files with 18 additions and 18 deletions

View File

@ -284,12 +284,12 @@ public function syncDraftMaterial(array $validated, User $user): array
->findOrFail($validated['raw_material_price_id']);
$unit = $price->rawMaterial?->unit;
$usageInput = round((float) $validated['material_usage'], 4);
$remainingInput = round((float) $validated['remaining_material'], 4);
$usageInput = round((float) $validated['material_usage'], 2);
$remainingInput = round((float) $validated['remaining_material'], 2);
if ($unit !== null && $unit->usesLengthUnit()) {
$materialUsage = round($unit->fromCm($usageInput), 4);
$remainingMaterial = round($unit->fromCm($remainingInput), 4);
$materialUsage = round($unit->fromCm($usageInput), 2);
$remainingMaterial = round($unit->fromCm($remainingInput), 2);
} else {
$materialUsage = $usageInput;
$remainingMaterial = $remainingInput;
@ -655,12 +655,12 @@ private function buildMaterials(array $materials): array
}
$unit = $price->rawMaterial?->unit;
$usageInput = round((float) $itemData['material_usage'], 4);
$remainingInput = round((float) $itemData['remaining_material'], 4);
$usageInput = round((float) $itemData['material_usage'], 2);
$remainingInput = round((float) $itemData['remaining_material'], 2);
if ($unit !== null && $unit->usesLengthUnit()) {
$materialUsage = round($unit->fromCm($usageInput), 4);
$remainingMaterial = round($unit->fromCm($remainingInput), 4);
$materialUsage = round($unit->fromCm($usageInput), 2);
$remainingMaterial = round($unit->fromCm($remainingInput), 2);
} else {
$materialUsage = $usageInput;
$remainingMaterial = $remainingInput;
@ -898,10 +898,10 @@ private function presentDraftMaterial(CuttingMaterial $item): array
// Convert stored native unit back to cm for display
if ($usesLengthUnit && $unit !== null) {
$materialUsageCm = round($unit->toCm((float) $item->material_usage), 4);
$remainingMaterialCm = round($unit->toCm((float) $item->remaining_material), 4);
$materialUsageDisplay = rtrim(rtrim(number_format($materialUsageCm, 4, '.', ''), '0'), '.');
$remainingMaterialDisplay = rtrim(rtrim(number_format($remainingMaterialCm, 4, '.', ''), '0'), '.');
$materialUsageCm = round($unit->toCm((float) $item->material_usage), 2);
$remainingMaterialCm = round($unit->toCm((float) $item->remaining_material), 2);
$materialUsageDisplay = rtrim(rtrim(number_format($materialUsageCm, 2, '.', ''), '0'), '.');
$remainingMaterialDisplay = rtrim(rtrim(number_format($remainingMaterialCm, 2, '.', ''), '0'), '.');
} else {
$materialUsageDisplay = $this->formatQuantityInput((float) $item->material_usage);
$remainingMaterialDisplay = $this->formatQuantityInput((float) $item->remaining_material);
@ -942,7 +942,7 @@ private function presentDraftResult(CuttingResult $item): array
private function formatQuantityInput(float $value): string
{
return rtrim(rtrim(number_format($value, 4, '.', ''), '0'), '.');
return rtrim(rtrim(number_format($value, 2, '.', ''), '0'), '.');
}
private function appendCostPreview(Cutting $cutting): void

View File

@ -9,8 +9,8 @@
public function up(): void
{
Schema::table('cutting_materials', function (Blueprint $table): void {
$table->decimal('material_usage', 18, 4)->change();
$table->decimal('remaining_material', 18, 4)->change();
$table->decimal('material_usage', 18, 2)->change();
$table->decimal('remaining_material', 18, 2)->change();
});
}

View File

@ -313,7 +313,7 @@ async function decreaseMaterialQty(priceId: number) {
return;
}
const decrement = item.uses_length_unit ? 100 : 1;
const decrement = 1;
const nextQty = (Number(item.material_usage) || 0) - decrement;
if (nextQty <= 0) {
@ -354,8 +354,8 @@ async function addMaterial(
(item) => item.raw_material_price_id === price.id,
);
const defaultUsage = usesLengthUnit(rawMaterial.unit) ? '100' : '1';
const increment = usesLengthUnit(rawMaterial.unit) ? 100 : 1;
const defaultUsage = '100';
const increment = 1;
const nextUsage = existing
? String((Number(existing.material_usage) || 0) + increment)
: defaultUsage;