diff --git a/app/Http/Requests/V1/Purchase/StorePurchaseRequest.php b/app/Http/Requests/V1/Purchase/StorePurchaseRequest.php index e8e17f9..d051e81 100644 --- a/app/Http/Requests/V1/Purchase/StorePurchaseRequest.php +++ b/app/Http/Requests/V1/Purchase/StorePurchaseRequest.php @@ -19,6 +19,7 @@ public function rules(): array 'supply_amount' => ['required', 'numeric', 'min:0'], 'tax_amount' => ['required', 'numeric', 'min:0'], 'total_amount' => ['required', 'numeric', 'min:0'], + 'purchase_type' => ['nullable', 'string', 'max:50'], 'description' => ['nullable', 'string', 'max:1000'], 'withdrawal_id' => ['nullable', 'integer', 'exists:withdrawals,id'], ]; diff --git a/app/Http/Requests/V1/Purchase/UpdatePurchaseRequest.php b/app/Http/Requests/V1/Purchase/UpdatePurchaseRequest.php index a729e77..377796a 100644 --- a/app/Http/Requests/V1/Purchase/UpdatePurchaseRequest.php +++ b/app/Http/Requests/V1/Purchase/UpdatePurchaseRequest.php @@ -19,6 +19,7 @@ public function rules(): array 'supply_amount' => ['sometimes', 'numeric', 'min:0'], 'tax_amount' => ['sometimes', 'numeric', 'min:0'], 'total_amount' => ['sometimes', 'numeric', 'min:0'], + 'purchase_type' => ['nullable', 'string', 'max:50'], 'description' => ['nullable', 'string', 'max:1000'], 'withdrawal_id' => ['nullable', 'integer', 'exists:withdrawals,id'], 'tax_invoice_received' => ['sometimes', 'boolean'], diff --git a/app/Models/Tenants/Purchase.php b/app/Models/Tenants/Purchase.php index 147d3d7..d72f68b 100644 --- a/app/Models/Tenants/Purchase.php +++ b/app/Models/Tenants/Purchase.php @@ -21,6 +21,7 @@ class Purchase extends Model 'total_amount', 'description', 'status', + 'purchase_type', 'withdrawal_id', 'tax_invoice_received', 'created_by', @@ -28,6 +29,28 @@ class Purchase extends Model 'deleted_by', ]; + /** + * 매입 유형 목록 + */ + public const PURCHASE_TYPES = [ + 'unset' => '미설정', + 'raw_material' => '원재료매입', + 'subsidiary_material' => '부재료매입', + 'product' => '상품매입', + 'outsourcing' => '외주가공비', + 'consumables' => '소모품비', + 'repair' => '수선비', + 'transportation' => '운반비', + 'office_supplies' => '사무용품비', + 'rent' => '임차료', + 'utilities' => '수도광열비', + 'communication' => '통신비', + 'vehicle' => '차량유지비', + 'entertainment' => '접대비', + 'insurance' => '보험료', + 'other_service' => '기타용역비', + ]; + protected $casts = [ 'purchase_date' => 'date', 'supply_amount' => 'decimal:2', diff --git a/app/Services/PurchaseService.php b/app/Services/PurchaseService.php index a05cded..57b9869 100644 --- a/app/Services/PurchaseService.php +++ b/app/Services/PurchaseService.php @@ -93,6 +93,7 @@ public function store(array $data): Purchase $purchase->supply_amount = $data['supply_amount']; $purchase->tax_amount = $data['tax_amount']; $purchase->total_amount = $data['total_amount']; + $purchase->purchase_type = $data['purchase_type'] ?? null; $purchase->description = $data['description'] ?? null; $purchase->status = 'draft'; $purchase->withdrawal_id = $data['withdrawal_id'] ?? null; @@ -147,6 +148,9 @@ public function update(int $id, array $data): Purchase if (array_key_exists('withdrawal_id', $data)) { $purchase->withdrawal_id = $data['withdrawal_id']; } + if (array_key_exists('purchase_type', $data)) { + $purchase->purchase_type = $data['purchase_type']; + } if (array_key_exists('tax_invoice_received', $data)) { $purchase->tax_invoice_received = $data['tax_invoice_received']; } diff --git a/database/migrations/2025_12_27_164149_add_purchase_type_to_purchases_table.php b/database/migrations/2025_12_27_164149_add_purchase_type_to_purchases_table.php new file mode 100644 index 0000000..d4d04fe --- /dev/null +++ b/database/migrations/2025_12_27_164149_add_purchase_type_to_purchases_table.php @@ -0,0 +1,28 @@ +string('purchase_type', 50)->nullable()->after('status')->comment('매입유형'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('purchases', function (Blueprint $table) { + $table->dropColumn('purchase_type'); + }); + } +};