Add seeders for categories, customers, products, raw materials, and suppliers. Update DatabaseSeeder to include new seeders for comprehensive data initialization.
This commit is contained in:
parent
b05c17de57
commit
ce460ed4fd
22
database/seeders/CategorySeeder.php
Normal file
22
database/seeders/CategorySeeder.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\Category;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class CategorySeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
foreach (['Daster', 'Setelan Celana', 'Atasan', 'Bawahan', 'Busui'] as $category) {
|
||||
Category::create([
|
||||
'name' => $category,
|
||||
'slug' => str()->slug($category),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
23
database/seeders/CustomerSeeder.php
Normal file
23
database/seeders/CustomerSeeder.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\Customer;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class CustomerSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
foreach (['Udin', 'Budi', 'Cici', 'Asep', 'Jon', 'Ucup', 'Adit', 'Denis', 'Eko', 'Fajar', 'Gita', 'Hari', 'Iwan', 'Joko', 'Kiki', 'Lala', 'Mama', 'Nana', 'Oki', 'Papa', 'Qiqi', 'Rara', 'Sari', 'Tata', 'Uci', 'Viki', 'Wawan', 'Xiao', 'Yuda', 'Zara'] as $name) {
|
||||
Customer::create([
|
||||
'name' => $name,
|
||||
'phone_number' => fake()->phoneNumber(),
|
||||
'address' => fake()->address(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -17,6 +17,11 @@ public function run(): void
|
||||
$this->call([
|
||||
RolePermissionSeeder::class,
|
||||
UserSeeder::class,
|
||||
CategorySeeder::class,
|
||||
ProductSeeder::class,
|
||||
RawMaterialSeeder::class,
|
||||
SupplierSeeder::class,
|
||||
CustomerSeeder::class,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
122
database/seeders/ProductSeeder.php
Normal file
122
database/seeders/ProductSeeder.php
Normal file
@ -0,0 +1,122 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Enums\PriceType;
|
||||
use App\Models\Category;
|
||||
use App\Models\Product;
|
||||
use App\Models\ProductPrice;
|
||||
use App\Models\ProductVariant;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ProductSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$categories = Category::query()->pluck('id', 'slug');
|
||||
|
||||
$products = [
|
||||
[
|
||||
'name' => 'Daster Batik Parang',
|
||||
'description' => 'Daster batik motif parang dengan bahan katun nyaman untuk pemakaian sehari-hari.',
|
||||
'category_slugs' => ['daster'],
|
||||
'variants' => [
|
||||
['name' => 'S', 'stock' => 25, 'base_price' => 65000],
|
||||
['name' => 'M', 'stock' => 40, 'base_price' => 65000],
|
||||
['name' => 'L', 'stock' => 35, 'base_price' => 65000],
|
||||
['name' => 'XL', 'stock' => 20, 'base_price' => 70000],
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'Setelan Celana Batik Modern',
|
||||
'description' => 'Setelan atasan dan celana batik dengan potongan modern untuk acara formal maupun kasual.',
|
||||
'category_slugs' => ['setelan-celana'],
|
||||
'variants' => [
|
||||
['name' => 'S', 'stock' => 15, 'base_price' => 185000],
|
||||
['name' => 'M', 'stock' => 20, 'base_price' => 185000],
|
||||
['name' => 'L', 'stock' => 18, 'base_price' => 185000],
|
||||
['name' => 'XL', 'stock' => 12, 'base_price' => 195000],
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'Blouse Batik Lengan Panjang',
|
||||
'description' => 'Blouse batik lengan panjang dengan detail kerah mandarin.',
|
||||
'category_slugs' => ['atasan'],
|
||||
'variants' => [
|
||||
['name' => 'S', 'stock' => 30, 'base_price' => 95000],
|
||||
['name' => 'M', 'stock' => 35, 'base_price' => 95000],
|
||||
['name' => 'L', 'stock' => 28, 'base_price' => 95000],
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'Rok Lilit Batik',
|
||||
'description' => 'Rok lilit batik dengan motif klasik, mudah disesuaikan dengan berbagai ukuran.',
|
||||
'category_slugs' => ['bawahan'],
|
||||
'variants' => [
|
||||
['name' => 'All Size', 'stock' => 50, 'base_price' => 85000],
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'Daster Busui Nursing',
|
||||
'description' => 'Daster busui dengan akses bukaan menyusui praktis dan bahan adem.',
|
||||
'category_slugs' => ['busui', 'daster'],
|
||||
'variants' => [
|
||||
['name' => 'M', 'stock' => 22, 'base_price' => 78000],
|
||||
['name' => 'L', 'stock' => 26, 'base_price' => 78000],
|
||||
['name' => 'XL', 'stock' => 18, 'base_price' => 82000],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
DB::transaction(function () use ($products, $categories): void {
|
||||
foreach ($products as $productData) {
|
||||
$product = Product::create([
|
||||
'name' => $productData['name'],
|
||||
'slug' => str()->slug($productData['name']),
|
||||
'description' => $productData['description'],
|
||||
'is_active' => true,
|
||||
]);
|
||||
|
||||
$product->categories()->sync(
|
||||
collect($productData['category_slugs'])
|
||||
->map(fn (string $slug) => $categories[$slug])
|
||||
->all()
|
||||
);
|
||||
|
||||
foreach ($productData['variants'] as $variantData) {
|
||||
$variant = $product->variants()->create([
|
||||
'name' => $variantData['name'],
|
||||
'stock' => $variantData['stock'],
|
||||
]);
|
||||
|
||||
$this->seedVariantPrices($variant, $variantData['base_price']);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private function seedVariantPrices(ProductVariant $variant, int $basePrice): void
|
||||
{
|
||||
$multipliers = [
|
||||
PriceType::DISTRIBUTOR->value => 1.00,
|
||||
PriceType::AGENT->value => 1.05,
|
||||
PriceType::SUB_AGENT->value => 1.10,
|
||||
PriceType::GROSIR->value => 1.15,
|
||||
PriceType::ECER->value => 1.35,
|
||||
PriceType::TIKTOK->value => 1.40,
|
||||
PriceType::SHOPEE->value => 1.40,
|
||||
];
|
||||
|
||||
foreach ($multipliers as $type => $multiplier) {
|
||||
ProductPrice::create([
|
||||
'variant_id' => $variant->id,
|
||||
'type' => $type,
|
||||
'price' => (int) round($basePrice * $multiplier),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
67
database/seeders/RawMaterialSeeder.php
Normal file
67
database/seeders/RawMaterialSeeder.php
Normal file
@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Enums\RawMaterialUnit;
|
||||
use App\Models\RawMaterial;
|
||||
use App\Models\RawMaterialPrice;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RawMaterialSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$rawMaterials = [
|
||||
[
|
||||
'name' => 'Kain Katun Premium',
|
||||
'unit' => RawMaterialUnit::METER,
|
||||
'prices' => [
|
||||
['variant' => 'Putih', 'price' => 35000, 'stock' => 120.5],
|
||||
['variant' => 'Merah Maroon', 'price' => 38000, 'stock' => 85.25],
|
||||
['variant' => 'Navy', 'price' => 38000, 'stock' => 64.0],
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'Kain Rayon Motif',
|
||||
'unit' => RawMaterialUnit::YARD,
|
||||
'prices' => [
|
||||
['variant' => 'Batik Parang', 'price' => 42000, 'stock' => 200.0],
|
||||
['variant' => 'Batik Kawung', 'price' => 45000, 'stock' => 175.5],
|
||||
['variant' => 'Polos Hitam', 'price' => 32000, 'stock' => 90.0],
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'Kain Knit',
|
||||
'unit' => RawMaterialUnit::METER,
|
||||
'prices' => [
|
||||
['variant' => 'Putih', 'price' => 85000, 'stock' => 12.5],
|
||||
['variant' => 'Merah', 'price' => 85000, 'stock' => 10.0],
|
||||
['variant' => 'Navy', 'price' => 90000, 'stock' => 8.25],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
DB::transaction(function () use ($rawMaterials): void {
|
||||
foreach ($rawMaterials as $rawMaterialData) {
|
||||
$rawMaterial = RawMaterial::create([
|
||||
'name' => $rawMaterialData['name'],
|
||||
'unit' => $rawMaterialData['unit'],
|
||||
'is_active' => true,
|
||||
]);
|
||||
|
||||
foreach ($rawMaterialData['prices'] as $priceData) {
|
||||
RawMaterialPrice::create([
|
||||
'raw_material_id' => $rawMaterial->id,
|
||||
'variant' => $priceData['variant'],
|
||||
'price' => $priceData['price'],
|
||||
'stock' => $priceData['stock'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
23
database/seeders/SupplierSeeder.php
Normal file
23
database/seeders/SupplierSeeder.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\Supplier;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class SupplierSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
foreach (['PT. ABC', 'PT. XYZ', 'PT. LMN'] as $name) {
|
||||
Supplier::create([
|
||||
'name' => $name,
|
||||
'phone_number' => fake()->phoneNumber(),
|
||||
'address' => fake()->address(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user