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

View File

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

View File

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