From b43835335ab4848fa2c113ce9698a1b53a809516 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Sun, 28 Jun 2026 12:06:05 +0700 Subject: [PATCH] refactor: update enum handling in migrations and seeder, replace array_column with values() method for better performance and consistency --- BEST_PRACTICE.md | 4 +-- app/Enums/StokOpnameStatus.php | 4 +++ ...6_09_112732_create_user_profiles_table.php | 2 +- ...26_06_09_112737_create_employees_table.php | 2 +- ...0_100003_create_product_variants_table.php | 1 + ...6_10_110001_create_raw_materials_table.php | 2 +- ..._120002_create_cash_transactions_table.php | 2 +- ..._160001_create_employee_advances_table.php | 3 +- ...11_100001_create_payroll_periods_table.php | 2 +- ...026_06_11_100002_create_payrolls_table.php | 2 +- ...00003_create_payroll_adjustments_table.php | 2 +- ..._11_120000_create_leave_requests_table.php | 2 +- .../2026_06_12_100001_create_orders_table.php | 10 +++--- ..._06_12_100002_create_order_items_table.php | 2 +- ...026_06_12_110001_create_cuttings_table.php | 4 +-- ..._110002_create_cutting_materials_table.php | 1 - ...12_110003_create_cutting_results_table.php | 6 ++-- ..._20_235900_create_product_prices_table.php | 2 +- ...te_cutting_materials_decimal_precision.php | 24 ------------- ...paid_amount_to_employee_advances_table.php | 22 ------------ ...2_drop_shipping_cost_from_orders_table.php | 22 ------------ ...0_update_cutting_module_schema_changes.php | 36 ------------------- ...tially_paid_to_employee_advances_table.php | 17 --------- ...d_stock_ecer_to_product_variants_table.php | 22 ------------ ...4400_create_stock_ecer_histories_table.php | 3 ++ ..._104300_add_nego_price_to_orders_table.php | 22 ------------ ...06_28_110000_create_stok_opnames_table.php | 21 +++++++---- database/seeders/EmployeeSeeder.php | 2 +- 28 files changed, 48 insertions(+), 196 deletions(-) delete mode 100644 database/migrations/2026_06_21_040000_update_cutting_materials_decimal_precision.php delete mode 100644 database/migrations/2026_06_27_120001_add_paid_amount_to_employee_advances_table.php delete mode 100644 database/migrations/2026_06_27_120002_drop_shipping_cost_from_orders_table.php delete mode 100644 database/migrations/2026_06_27_160000_update_cutting_module_schema_changes.php delete mode 100644 database/migrations/2026_06_28_003803_add_partially_paid_to_employee_advances_table.php delete mode 100644 database/migrations/2026_06_28_093300_add_stock_ecer_to_product_variants_table.php delete mode 100644 database/migrations/2026_06_28_104300_add_nego_price_to_orders_table.php diff --git a/BEST_PRACTICE.md b/BEST_PRACTICE.md index a2d23c3..48b519b 100644 --- a/BEST_PRACTICE.md +++ b/BEST_PRACTICE.md @@ -156,10 +156,10 @@ ### Definisi Kolom & Tipe Data $table->softDeletes(); ``` - **Kolom Enum:** - - Hubungkan dengan PHP Backed Enum menggunakan `array_column(EnumName::cases(), 'value')`. + - Hubungkan dengan PHP Backed Enum menggunakan `EnumName::values()`. - **Contoh:** ```php - $table->enum('status', array_column(StatusEnum::cases(), 'value'))->default(StatusEnum::PENDING->value); + $table->enum('status', StatusEnum::values())->default(StatusEnum::PENDING->value); ``` ### Relasi & Foreign Key diff --git a/app/Enums/StokOpnameStatus.php b/app/Enums/StokOpnameStatus.php index 30a2092..a7317b4 100644 --- a/app/Enums/StokOpnameStatus.php +++ b/app/Enums/StokOpnameStatus.php @@ -2,8 +2,12 @@ namespace App\Enums; +use App\Traits\ProvidesEnumOptions; + enum StokOpnameStatus: string { + use ProvidesEnumOptions; + case DRAFT = 'draft'; case PENDING = 'pending'; case VERIFIED = 'verified'; diff --git a/database/migrations/2026_06_09_112732_create_user_profiles_table.php b/database/migrations/2026_06_09_112732_create_user_profiles_table.php index ca73b79..56b2cae 100644 --- a/database/migrations/2026_06_09_112732_create_user_profiles_table.php +++ b/database/migrations/2026_06_09_112732_create_user_profiles_table.php @@ -19,7 +19,7 @@ public function up(): void $table->string('full_name', 200); $table->string('phone_number', 20)->nullable(); - $table->enum('gender', array_column(Gender::cases(), 'value'))->nullable(); + $table->enum('gender', Gender::values())->nullable(); $table->date('birth_date')->nullable(); $table->text('address')->nullable(); diff --git a/database/migrations/2026_06_09_112737_create_employees_table.php b/database/migrations/2026_06_09_112737_create_employees_table.php index eb91d06..4fbb796 100644 --- a/database/migrations/2026_06_09_112737_create_employees_table.php +++ b/database/migrations/2026_06_09_112737_create_employees_table.php @@ -19,7 +19,7 @@ public function up(): void $table->date('join_date'); $table->date('resign_date')->nullable(); - $table->enum('employment_status', array_column(EmploymentStatus::cases(), 'value'))->default(EmploymentStatus::FULL_TIME->value); + $table->enum('employment_status', EmploymentStatus::values())->default(EmploymentStatus::FULL_TIME->value); $table->unsignedInteger('base_salary'); $table->timestamp('created_at')->useCurrent(); diff --git a/database/migrations/2026_06_10_100003_create_product_variants_table.php b/database/migrations/2026_06_10_100003_create_product_variants_table.php index a618c92..0e93467 100644 --- a/database/migrations/2026_06_10_100003_create_product_variants_table.php +++ b/database/migrations/2026_06_10_100003_create_product_variants_table.php @@ -16,6 +16,7 @@ public function up(): void $table->string('name', 200); $table->unsignedInteger('stock')->default(0); $table->unsignedInteger('reject_stock')->default(0); + $table->unsignedInteger('stock_ecer')->default(0); $table->timestamp('created_at')->useCurrent(); $table->timestamp('updated_at')->useCurrent()->useCurrentOnUpdate(); diff --git a/database/migrations/2026_06_10_110001_create_raw_materials_table.php b/database/migrations/2026_06_10_110001_create_raw_materials_table.php index 2826459..560cbf1 100644 --- a/database/migrations/2026_06_10_110001_create_raw_materials_table.php +++ b/database/migrations/2026_06_10_110001_create_raw_materials_table.php @@ -13,7 +13,7 @@ public function up(): void $table->id(); $table->string('name', 200); - $table->enum('unit', array_column(RawMaterialUnit::cases(), 'value')); + $table->enum('unit', RawMaterialUnit::values()); $table->boolean('is_active')->default(true); $table->timestamp('created_at')->useCurrent(); diff --git a/database/migrations/2026_06_10_120002_create_cash_transactions_table.php b/database/migrations/2026_06_10_120002_create_cash_transactions_table.php index 24cbb24..ad32588 100644 --- a/database/migrations/2026_06_10_120002_create_cash_transactions_table.php +++ b/database/migrations/2026_06_10_120002_create_cash_transactions_table.php @@ -18,7 +18,7 @@ public function up(): void $table->unsignedBigInteger('amount'); $table->unsignedBigInteger('balance_after'); - $table->enum('type', array_column(CashTransactionType::cases(), 'value'))->default(CashTransactionType::DEPOSIT->value); + $table->enum('type', CashTransactionType::values())->default(CashTransactionType::DEPOSIT->value); $table->string('description', 100); $table->timestamp('created_at')->useCurrent(); diff --git a/database/migrations/2026_06_10_160001_create_employee_advances_table.php b/database/migrations/2026_06_10_160001_create_employee_advances_table.php index 12fbcc9..773627c 100644 --- a/database/migrations/2026_06_10_160001_create_employee_advances_table.php +++ b/database/migrations/2026_06_10_160001_create_employee_advances_table.php @@ -19,9 +19,10 @@ public function up(): void $table->foreignId('cash_transaction_id')->nullable()->unique()->constrained()->restrictOnDelete(); $table->unsignedBigInteger('amount'); + $table->unsignedBigInteger('paid_amount')->default(0); $table->string('description', 100); $table->date('due_date'); - $table->enum('status', array_column(EmployeeAdvanceStatus::cases(), 'value')) + $table->enum('status', EmployeeAdvanceStatus::values()) ->default(EmployeeAdvanceStatus::PENDING->value); $table->timestamp('verified_at')->nullable(); $table->timestamp('paid_at')->nullable(); diff --git a/database/migrations/2026_06_11_100001_create_payroll_periods_table.php b/database/migrations/2026_06_11_100001_create_payroll_periods_table.php index 50a4288..e202062 100644 --- a/database/migrations/2026_06_11_100001_create_payroll_periods_table.php +++ b/database/migrations/2026_06_11_100001_create_payroll_periods_table.php @@ -16,7 +16,7 @@ public function up(): void $table->unsignedSmallInteger('year'); $table->unsignedTinyInteger('month'); - $table->enum('status', array_column(PayrollPeriodStatus::cases(), 'value'))->default(PayrollPeriodStatus::OPEN->value); + $table->enum('status', PayrollPeriodStatus::values())->default(PayrollPeriodStatus::OPEN->value); $table->timestamp('closed_at')->nullable(); $table->timestamp('created_at')->useCurrent(); diff --git a/database/migrations/2026_06_11_100002_create_payrolls_table.php b/database/migrations/2026_06_11_100002_create_payrolls_table.php index 6f35ff1..aaf2e21 100644 --- a/database/migrations/2026_06_11_100002_create_payrolls_table.php +++ b/database/migrations/2026_06_11_100002_create_payrolls_table.php @@ -21,7 +21,7 @@ public function up(): void $table->unsignedBigInteger('bonus_amount')->default(0); $table->unsignedBigInteger('deduction_amount')->default(0); $table->unsignedBigInteger('total_amount'); - $table->enum('status', array_column(PayrollStatus::cases(), 'value'))->default(PayrollStatus::UNPAID->value); + $table->enum('status', PayrollStatus::values())->default(PayrollStatus::UNPAID->value); $table->timestamp('paid_at')->nullable(); $table->timestamp('created_at')->useCurrent(); diff --git a/database/migrations/2026_06_11_100003_create_payroll_adjustments_table.php b/database/migrations/2026_06_11_100003_create_payroll_adjustments_table.php index f427669..749fbac 100644 --- a/database/migrations/2026_06_11_100003_create_payroll_adjustments_table.php +++ b/database/migrations/2026_06_11_100003_create_payroll_adjustments_table.php @@ -16,7 +16,7 @@ public function up(): void $table->foreignId('attendance_id')->nullable()->constrained()->nullOnDelete(); $table->foreignId('created_by_id')->constrained('users')->restrictOnDelete(); - $table->enum('type', array_column(PayrollAdjustmentType::cases(), 'value')); + $table->enum('type', PayrollAdjustmentType::values()); $table->unsignedBigInteger('amount'); $table->string('description', 100); diff --git a/database/migrations/2026_06_11_120000_create_leave_requests_table.php b/database/migrations/2026_06_11_120000_create_leave_requests_table.php index 61ac4d2..8dae4b4 100644 --- a/database/migrations/2026_06_11_120000_create_leave_requests_table.php +++ b/database/migrations/2026_06_11_120000_create_leave_requests_table.php @@ -18,7 +18,7 @@ public function up(): void $table->date('start_date'); $table->date('end_date'); $table->unsignedInteger('total_days'); - $table->enum('status', array_column(LeaveRequestStatus::cases(), 'value'))->default(LeaveRequestStatus::PENDING->value); + $table->enum('status', LeaveRequestStatus::values())->default(LeaveRequestStatus::PENDING->value); $table->timestamp('verified_at')->nullable(); $table->timestamp('created_at')->useCurrent(); diff --git a/database/migrations/2026_06_12_100001_create_orders_table.php b/database/migrations/2026_06_12_100001_create_orders_table.php index 37e0a5f..293f0c4 100644 --- a/database/migrations/2026_06_12_100001_create_orders_table.php +++ b/database/migrations/2026_06_12_100001_create_orders_table.php @@ -21,16 +21,16 @@ public function up(): void $table->foreignId('created_by_id')->constrained('users')->restrictOnDelete(); $table->string('order_number', 30)->unique(); - $table->enum('channel', array_column(OrderChannel::cases(), 'value')); - $table->enum('price_type', array_column(PriceType::cases(), 'value')); - $table->enum('status', array_column(OrderStatus::cases(), 'value'))->default(OrderStatus::PENDING->value); - $table->enum('payment_type', array_column(PaymentType::cases(), 'value'))->default(PaymentType::CASH->value); + $table->enum('channel', OrderChannel::values()); + $table->enum('price_type', PriceType::values()); + $table->enum('status', OrderStatus::values())->default(OrderStatus::PENDING->value); + $table->enum('payment_type', PaymentType::values())->default(PaymentType::CASH->value); $table->boolean('is_affiliate')->default(false); $table->string('tiktok_order_id', 100)->nullable(); $table->string('shopee_order_id', 100)->nullable(); $table->unsignedBigInteger('subtotal'); $table->unsignedBigInteger('discount')->default(0); - $table->unsignedBigInteger('shipping_cost')->default(0); + $table->unsignedBigInteger('nego_price')->nullable(); $table->json('marketplace_settings_snapshot')->nullable(); $table->unsignedBigInteger('total_amount'); $table->text('notes')->nullable(); diff --git a/database/migrations/2026_06_12_100002_create_order_items_table.php b/database/migrations/2026_06_12_100002_create_order_items_table.php index 5641dfb..7c4ba0e 100644 --- a/database/migrations/2026_06_12_100002_create_order_items_table.php +++ b/database/migrations/2026_06_12_100002_create_order_items_table.php @@ -16,7 +16,7 @@ public function up(): void $table->foreignId('user_id')->nullable()->constrained()->cascadeOnDelete(); $table->foreignId('product_variant_id')->constrained()->restrictOnDelete(); - $table->enum('stock_quality', array_column(ProductStockQuality::cases(), 'value'))->default(ProductStockQuality::GOOD->value); + $table->enum('stock_quality', ProductStockQuality::values())->default(ProductStockQuality::GOOD->value); $table->unsignedInteger('quantity'); $table->unsignedBigInteger('unit_price'); $table->unsignedBigInteger('subtotal'); diff --git a/database/migrations/2026_06_12_110001_create_cuttings_table.php b/database/migrations/2026_06_12_110001_create_cuttings_table.php index 3fd7c51..d219e14 100644 --- a/database/migrations/2026_06_12_110001_create_cuttings_table.php +++ b/database/migrations/2026_06_12_110001_create_cuttings_table.php @@ -16,7 +16,7 @@ public function up(): void $table->foreignId('created_by_id')->constrained('users')->restrictOnDelete(); $table->foreignId('submitted_by_id')->nullable()->constrained('users')->nullOnDelete(); - $table->enum('status', array_column(CuttingStatus::cases(), 'value'))->default(CuttingStatus::IN_PROGRESS->value); + $table->enum('status', CuttingStatus::values())->default(CuttingStatus::IN_PROGRESS->value); $table->string('description', 100)->nullable(); $table->unsignedBigInteger('total_material_cost')->nullable(); @@ -36,7 +36,7 @@ public function up(): void $table->foreignId('cutting_id')->constrained()->cascadeOnDelete(); $table->foreignId('product_variant_id')->constrained()->restrictOnDelete(); - $table->enum('price_type', array_column(PriceType::cases(), 'value')); + $table->enum('price_type', PriceType::values()); $table->unsignedBigInteger('price'); $table->unsignedBigInteger('cost_per_unit'); diff --git a/database/migrations/2026_06_12_110002_create_cutting_materials_table.php b/database/migrations/2026_06_12_110002_create_cutting_materials_table.php index f89332e..eaac486 100644 --- a/database/migrations/2026_06_12_110002_create_cutting_materials_table.php +++ b/database/migrations/2026_06_12_110002_create_cutting_materials_table.php @@ -16,7 +16,6 @@ public function up(): void $table->foreignId('raw_material_price_id')->constrained()->restrictOnDelete(); $table->decimal('material_usage', 18, 2); - $table->decimal('remaining_material', 18, 2); $table->timestamp('created_at')->useCurrent(); $table->timestamp('updated_at')->useCurrent()->useCurrentOnUpdate(); diff --git a/database/migrations/2026_06_12_110003_create_cutting_results_table.php b/database/migrations/2026_06_12_110003_create_cutting_results_table.php index 39dc8ce..971a0b4 100644 --- a/database/migrations/2026_06_12_110003_create_cutting_results_table.php +++ b/database/migrations/2026_06_12_110003_create_cutting_results_table.php @@ -16,12 +16,12 @@ public function up(): void $table->foreignId('product_variant_id')->constrained()->restrictOnDelete(); $table->unsignedInteger('cutting_result'); - $table->unsignedInteger('warehouse_stock'); - $table->unsignedInteger('cutting_reject')->default(0); + $table->unsignedInteger('sampel'); + $table->unsignedInteger('hasil_cutting_diluar_sampel')->default(0); + $table->timestamp('created_at')->useCurrent(); $table->timestamp('updated_at')->useCurrent()->useCurrentOnUpdate(); $table->softDeletes(); - }); } diff --git a/database/migrations/2026_06_20_235900_create_product_prices_table.php b/database/migrations/2026_06_20_235900_create_product_prices_table.php index 632db6b..4634192 100644 --- a/database/migrations/2026_06_20_235900_create_product_prices_table.php +++ b/database/migrations/2026_06_20_235900_create_product_prices_table.php @@ -14,7 +14,7 @@ public function up(): void $table->foreignId('variant_id')->constrained('product_variants')->cascadeOnDelete(); - $table->enum('type', array_column(PriceType::cases(), 'value')); + $table->enum('type', PriceType::values()); $table->unsignedInteger('price'); $table->timestamp('created_at')->useCurrent(); diff --git a/database/migrations/2026_06_21_040000_update_cutting_materials_decimal_precision.php b/database/migrations/2026_06_21_040000_update_cutting_materials_decimal_precision.php deleted file mode 100644 index 59caed8..0000000 --- a/database/migrations/2026_06_21_040000_update_cutting_materials_decimal_precision.php +++ /dev/null @@ -1,24 +0,0 @@ -decimal('material_usage', 18, 2)->change(); - $table->decimal('remaining_material', 18, 2)->change(); - }); - } - - public function down(): void - { - Schema::table('cutting_materials', function (Blueprint $table): void { - $table->decimal('material_usage', 18, 2)->change(); - $table->decimal('remaining_material', 18, 2)->change(); - }); - } -}; diff --git a/database/migrations/2026_06_27_120001_add_paid_amount_to_employee_advances_table.php b/database/migrations/2026_06_27_120001_add_paid_amount_to_employee_advances_table.php deleted file mode 100644 index 9de644d..0000000 --- a/database/migrations/2026_06_27_120001_add_paid_amount_to_employee_advances_table.php +++ /dev/null @@ -1,22 +0,0 @@ -unsignedBigInteger('paid_amount')->default(0)->after('amount'); - }); - } - - public function down(): void - { - Schema::table('employee_advances', function (Blueprint $table) { - $table->dropColumn('paid_amount'); - }); - } -}; diff --git a/database/migrations/2026_06_27_120002_drop_shipping_cost_from_orders_table.php b/database/migrations/2026_06_27_120002_drop_shipping_cost_from_orders_table.php deleted file mode 100644 index af2ade9..0000000 --- a/database/migrations/2026_06_27_120002_drop_shipping_cost_from_orders_table.php +++ /dev/null @@ -1,22 +0,0 @@ -dropColumn('shipping_cost'); - }); - } - - public function down(): void - { - Schema::table('orders', function (Blueprint $table) { - $table->unsignedBigInteger('shipping_cost')->default(0)->after('discount'); - }); - } -}; diff --git a/database/migrations/2026_06_27_160000_update_cutting_module_schema_changes.php b/database/migrations/2026_06_27_160000_update_cutting_module_schema_changes.php deleted file mode 100644 index 16a5b8d..0000000 --- a/database/migrations/2026_06_27_160000_update_cutting_module_schema_changes.php +++ /dev/null @@ -1,36 +0,0 @@ -dropColumn('remaining_material'); - }); - - // 2. Rename warehouse_stock -> sampel, cutting_reject -> hasil_cutting_diluar_sampel in cutting_results - Schema::table('cutting_results', function (Blueprint $table): void { - $table->renameColumn('warehouse_stock', 'sampel'); - $table->renameColumn('cutting_reject', 'hasil_cutting_diluar_sampel'); - }); - } - - public function down(): void - { - // 1. Add back remaining_material to cutting_materials - Schema::table('cutting_materials', function (Blueprint $table): void { - $table->decimal('remaining_material', 18, 2)->after('material_usage'); - }); - - // 2. Rename back to original names - Schema::table('cutting_results', function (Blueprint $table): void { - $table->renameColumn('sampel', 'warehouse_stock'); - $table->renameColumn('hasil_cutting_diluar_sampel', 'cutting_reject'); - }); - } -}; diff --git a/database/migrations/2026_06_28_003803_add_partially_paid_to_employee_advances_table.php b/database/migrations/2026_06_28_003803_add_partially_paid_to_employee_advances_table.php deleted file mode 100644 index b5102a2..0000000 --- a/database/migrations/2026_06_28_003803_add_partially_paid_to_employee_advances_table.php +++ /dev/null @@ -1,17 +0,0 @@ -unsignedInteger('stock_ecer')->default(0)->after('reject_stock'); - }); - } - - public function down(): void - { - Schema::table('product_variants', function (Blueprint $table) { - $table->dropColumn('stock_ecer'); - }); - } -}; diff --git a/database/migrations/2026_06_28_094400_create_stock_ecer_histories_table.php b/database/migrations/2026_06_28_094400_create_stock_ecer_histories_table.php index f4c58b7..7c7f859 100644 --- a/database/migrations/2026_06_28_094400_create_stock_ecer_histories_table.php +++ b/database/migrations/2026_06_28_094400_create_stock_ecer_histories_table.php @@ -10,14 +10,17 @@ public function up(): void { Schema::create('stock_ecer_histories', function (Blueprint $table) { $table->id(); + $table->foreignId('product_variant_id')->constrained('product_variants')->cascadeOnDelete(); $table->foreignId('user_id')->constrained('users')->cascadeOnDelete(); + $table->unsignedInteger('quantity'); $table->unsignedInteger('stock_before'); $table->unsignedInteger('stock_ecer_before'); $table->unsignedInteger('stock_after'); $table->unsignedInteger('stock_ecer_after'); $table->string('notes')->nullable(); + $table->timestamp('created_at')->useCurrent(); }); } diff --git a/database/migrations/2026_06_28_104300_add_nego_price_to_orders_table.php b/database/migrations/2026_06_28_104300_add_nego_price_to_orders_table.php deleted file mode 100644 index 1b720be..0000000 --- a/database/migrations/2026_06_28_104300_add_nego_price_to_orders_table.php +++ /dev/null @@ -1,22 +0,0 @@ -unsignedBigInteger('nego_price')->nullable()->after('discount'); - }); - } - - public function down(): void - { - Schema::table('orders', function (Blueprint $table): void { - $table->dropColumn('nego_price'); - }); - } -}; diff --git a/database/migrations/2026_06_28_110000_create_stok_opnames_table.php b/database/migrations/2026_06_28_110000_create_stok_opnames_table.php index d83a80e..870e120 100644 --- a/database/migrations/2026_06_28_110000_create_stok_opnames_table.php +++ b/database/migrations/2026_06_28_110000_create_stok_opnames_table.php @@ -1,5 +1,6 @@ id(); - $table->date('opname_date'); - $table->enum('status', ['draft', 'pending', 'verified', 'rejected'])->default('draft'); - $table->text('notes')->nullable(); - $table->text('verification_notes')->nullable(); + $table->foreignId('created_by_id')->constrained('users')->cascadeOnDelete(); $table->foreignId('verified_by_id')->nullable()->constrained('users')->nullOnDelete(); - $table->timestamps(); + + $table->date('opname_date'); + $table->enum('status', StokOpnameStatus::values())->default(StokOpnameStatus::DRAFT->value); + $table->text('notes')->nullable(); + $table->text('verification_notes')->nullable(); + + $table->timestamp('created_at')->useCurrent(); + $table->timestamp('updated_at')->useCurrent()->useCurrentOnUpdate(); $table->softDeletes(); }); Schema::create('stok_opname_items', function (Blueprint $table): void { $table->id(); + $table->foreignId('stok_opname_id')->constrained('stok_opnames')->cascadeOnDelete(); $table->foreignId('product_variant_id')->constrained('product_variants')->cascadeOnDelete(); + $table->unsignedInteger('system_stock')->default(0); $table->unsignedInteger('physical_stock')->default(0); $table->integer('difference')->default(0); $table->text('notes')->nullable(); - $table->timestamps(); + + $table->timestamp('created_at')->useCurrent(); + $table->timestamp('updated_at')->useCurrent()->useCurrentOnUpdate(); $table->unique(['stok_opname_id', 'product_variant_id']); }); diff --git a/database/seeders/EmployeeSeeder.php b/database/seeders/EmployeeSeeder.php index 30b8a34..5bd8de4 100644 --- a/database/seeders/EmployeeSeeder.php +++ b/database/seeders/EmployeeSeeder.php @@ -70,7 +70,7 @@ public function run(): void [ 'full_name' => $data['full_name'], 'phone_number' => '08'.fake()->numerify('##########'), - 'gender' => fake()->randomElement(array_column(Gender::cases(), 'value')), + 'gender' => fake()->randomElement(Gender::values()), 'birth_date' => '1995-01-01', 'address' => 'Jl. Jenderal Sudirman No. 123', ]