From 71128002d7aa829e2ea45d2df3512fd61427876c Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Thu, 6 Aug 2026 10:41:41 +0700 Subject: [PATCH] refactor: streamline material validation and stock management in create and update methods of CuttingService --- app/Services/Admin/Manage/CuttingService.php | 80 ++++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/app/Services/Admin/Manage/CuttingService.php b/app/Services/Admin/Manage/CuttingService.php index 36efe5c..db1ba90 100644 --- a/app/Services/Admin/Manage/CuttingService.php +++ b/app/Services/Admin/Manage/CuttingService.php @@ -145,23 +145,23 @@ public function getForEdit(Cutting $cutting): array public function create(array $data): Cutting { - foreach ($data['materials'] as $materialData) { - $usage = (int) ($materialData['material_usage'] ?? 0); - if ($usage <= 0) { - continue; - } - $price = RawMaterialPrice::find($materialData['raw_material_price_id']); - if (! $price) { - continue; - } - if ($usage > $price->stock) { - throw ValidationException::withMessages([ - 'materials' => "Stok {$price->variant} tidak mencukupi. Tersedia: {$price->stock}, dibutuhkan: {$usage}.", - ]); - } - } - return DB::transaction(function () use ($data) { + foreach ($data['materials'] as $materialData) { + $usage = (int) ($materialData['material_usage'] ?? 0); + if ($usage <= 0) { + continue; + } + $price = RawMaterialPrice::find($materialData['raw_material_price_id']); + if (! $price) { + continue; + } + if ($usage > $price->stock) { + throw ValidationException::withMessages([ + 'materials' => "Stok {$price->variant} tidak mencukupi. Tersedia: {$price->stock}, dibutuhkan: {$usage}.", + ]); + } + } + $cutting = Cutting::create([ 'created_by_id' => auth()->id(), 'status' => 'in_progress', @@ -247,31 +247,31 @@ public function create(array $data): Cutting public function update(Cutting $cutting, array $data): Cutting { - $cutting->load(['cuttingMaterials.rawMaterialPrice']); - - foreach ($cutting->cuttingMaterials as $oldMaterial) { - if ($oldMaterial->material_usage > 0 && $oldMaterial->rawMaterialPrice) { - $oldMaterial->rawMaterialPrice->increment('stock', (int) $oldMaterial->material_usage); - } - } - - foreach ($data['materials'] as $materialData) { - $usage = (int) ($materialData['material_usage'] ?? 0); - if ($usage <= 0) { - continue; - } - $price = RawMaterialPrice::find($materialData['raw_material_price_id']); - if (! $price) { - continue; - } - if ($usage > $price->stock) { - throw ValidationException::withMessages([ - 'materials' => "Stok {$price->variant} tidak mencukupi. Tersedia: {$price->stock}, dibutuhkan: {$usage}.", - ]); - } - } - return DB::transaction(function () use ($cutting, $data) { + $cutting->load(['cuttingMaterials.rawMaterialPrice']); + + foreach ($cutting->cuttingMaterials as $oldMaterial) { + if ($oldMaterial->material_usage > 0 && $oldMaterial->rawMaterialPrice) { + $oldMaterial->rawMaterialPrice->increment('stock', (int) $oldMaterial->material_usage); + } + } + + foreach ($data['materials'] as $materialData) { + $usage = (int) ($materialData['material_usage'] ?? 0); + if ($usage <= 0) { + continue; + } + $price = RawMaterialPrice::find($materialData['raw_material_price_id']); + if (! $price) { + continue; + } + if ($usage > $price->stock) { + throw ValidationException::withMessages([ + 'materials' => "Stok {$price->variant} tidak mencukupi. Tersedia: {$price->stock}, dibutuhkan: {$usage}.", + ]); + } + } + $cutting->load(['cuttingMaterials', 'cuttingMaterialCombinations', 'cuttingResults']); $cutting->cuttingResults()->delete();