call(InventoryStammdatenSeeder::class); $countryDe = Country::query()->firstOrCreate( ['code' => 'DE'], [ 'phone' => '49', 'en' => 'Germany', 'de' => 'Deutschland', 'es' => 'Alemania', 'fr' => 'Allemagne', 'it' => 'Germania', 'ru' => 'Германия', 'active' => true, ] ); $locationExtra = Location::query()->firstOrCreate( ['name' => 'Demo Test-Zentrallager'], ['active' => true] ); $catRohstoffe = SupplierCategory::query()->firstOrCreate( ['name' => 'Demo Rohstoffe'], ['pos' => 1] ); $catVerpackung = SupplierCategory::query()->firstOrCreate( ['name' => 'Demo Verpackung & Zubehör'], ['pos' => 2] ); $catDienst = SupplierCategory::query()->firstOrCreate( ['name' => 'Demo Dienstleistung'], ['pos' => 3] ); $supplierOele = Supplier::query()->firstOrCreate( ['name' => 'Demo-Lieferant Naturöle GmbH'], [ 'url' => 'https://demo-naturoele.example.test', 'contact_person' => 'Erika Beispiel', 'email' => 'einkauf@demo-naturoele.example.test', 'phone' => '+49 221 5550100', 'country_id' => $countryDe->id, 'notes' => 'Seeder-Testdaten – Rohstoffe (Öle, Butter).', 'active' => true, ] ); $supplierOele->supplierCategories()->sync([ $catRohstoffe->id, $catVerpackung->id, ]); $supplierGlas = Supplier::query()->firstOrCreate( ['name' => 'Demo Verpackung Glas & Co.'], [ 'url' => 'https://demo-glas.example.test', 'contact_person' => 'Tom Test', 'email' => 'vertrieb@demo-glas.example.test', 'phone' => '+49 211 5550200', 'country_id' => $countryDe->id, 'notes' => 'Seeder-Testdaten – Flaschen und Gläser.', 'active' => true, ] ); $supplierGlas->supplierCategories()->sync([ $catVerpackung->id, ]); $supplierLogistik = Supplier::query()->firstOrCreate( ['name' => 'Demo Logistik Partner'], [ 'url' => null, 'contact_person' => 'Lisa Versand', 'email' => 'buero@demo-logistik.example.test', 'phone' => '+49 40 5550300', 'country_id' => $countryDe->id, 'notes' => 'Seeder-Testdaten – Kartons, Versandmaterial.', 'active' => true, ] ); $supplierLogistik->supplierCategories()->sync([ $catVerpackung->id, $catDienst->id, ]); $materialGlas = PackagingMaterial::query()->where('name', 'Glas')->first(); $materialKunststoff = PackagingMaterial::query()->where('name', 'Kunststoff')->first(); $materialPappe = PackagingMaterial::query()->where('name', 'Pappe/Papier')->first(); if ($materialGlas) { PackagingItem::query()->firstOrCreate( ['name' => 'Demo Braunglasflasche 30 ml'], [ 'packaging_material_id' => $materialGlas->id, 'supplier_id' => $supplierGlas->id, 'category' => 'packaging', 'weight_grams' => 45.5, 'min_stock_alert' => 200, 'product_id' => null, 'active' => true, ] ); PackagingItem::query()->firstOrCreate( ['name' => 'Demo Tropferflasche Klarglas 10 ml'], [ 'packaging_material_id' => $materialGlas->id, 'supplier_id' => $supplierGlas->id, 'category' => 'packaging', 'weight_grams' => 22, 'min_stock_alert' => 500, 'product_id' => null, 'active' => true, ] ); } if ($materialKunststoff) { PackagingItem::query()->firstOrCreate( ['name' => 'Demo Pumpspender 150 ml (PET)'], [ 'packaging_material_id' => $materialKunststoff->id, 'supplier_id' => $supplierGlas->id, 'category' => 'packaging', 'weight_grams' => 28.75, 'min_stock_alert' => 150, 'product_id' => null, 'active' => true, ] ); } if ($materialPappe) { PackagingItem::query()->firstOrCreate( ['name' => 'Demo Faltschachtel S (bedruckt)'], [ 'packaging_material_id' => $materialPappe->id, 'supplier_id' => $supplierLogistik->id, 'category' => 'packaging', 'weight_grams' => 12, 'min_stock_alert' => 1000, 'product_id' => null, 'active' => true, ] ); PackagingItem::query()->firstOrCreate( ['name' => 'Demo Versandkarton S'], [ 'packaging_material_id' => $materialPappe->id, 'supplier_id' => $supplierLogistik->id, 'category' => 'shipping', 'weight_grams' => 95, 'min_stock_alert' => 300, 'product_id' => null, 'active' => true, ] ); PackagingItem::query()->firstOrCreate( ['name' => 'Demo Etikett Front 50×80 mm'], [ 'packaging_material_id' => $materialPappe->id, 'supplier_id' => $supplierOele->id, 'category' => 'shipping', 'weight_grams' => 1.2, 'min_stock_alert' => 5000, 'product_id' => null, 'active' => true, ] ); } $locationKoln = Location::query()->where('name', 'Köln')->first() ?? $locationExtra; $orderUser = User::query()->firstOrCreate( ['email' => 'demo-wareneingang@example.test'], [ 'password' => bcrypt('password'), 'admin' => 7, 'confirmed' => true, 'active' => true, 'wizard' => 100, 'blocked' => false, ] ); $ingShea = Ingredient::query()->firstOrCreate( ['name' => 'Demo Wareneingang Shea Butter'], [ 'trans_name' => '', 'inci' => 'Butyrospermum Parkii Butter', 'trans_inci' => '', 'effect' => '', 'trans_effect' => '', 'active' => true, 'pos' => 0, ] ); $ingMandel = Ingredient::query()->firstOrCreate( ['name' => 'Demo Wareneingang Mandelöl'], [ 'trans_name' => '', 'inci' => 'Prunus Amygdalus Dulcis Oil', 'trans_inci' => '', 'effect' => '', 'trans_effect' => '', 'active' => true, 'pos' => 0, ] ); StockEntry::factory()->create([ 'ingredient_id' => $ingShea->id, 'supplier_id' => $supplierOele->id, 'location_id' => $locationKoln->id, 'ordered_by' => $orderUser->id, 'ordered_at' => now()->subDays(5)->format('Y-m-d'), 'ordered_quantity' => 10000, 'price_per_kg' => 8.5, 'entry_type' => 'ingredient', 'unit' => 'gram', 'packaging_item_id' => null, 'status' => 'pending', ]); StockEntry::factory()->create([ 'ingredient_id' => $ingMandel->id, 'supplier_id' => $supplierOele->id, 'location_id' => $locationKoln->id, 'ordered_by' => $orderUser->id, 'ordered_at' => now()->subDays(12)->format('Y-m-d'), 'ordered_quantity' => 5000, 'price_per_kg' => 9.95, 'entry_type' => 'ingredient', 'unit' => 'gram', 'packaging_item_id' => null, 'status' => 'pending', ]); $demoPackagingItem = PackagingItem::query() ->where('name', 'like', 'Demo %') ->where('category', 'packaging') ->first(); if ($demoPackagingItem !== null) { StockEntry::query()->create([ 'entry_type' => 'packaging', 'ingredient_id' => null, 'packaging_item_id' => $demoPackagingItem->id, 'supplier_id' => $supplierGlas->id, 'location_id' => $locationKoln->id, 'unit' => 'piece', 'ordered_by' => $orderUser->id, 'ordered_at' => now()->subDays(2)->format('Y-m-d'), 'ordered_quantity' => 480, 'price_per_kg' => null, 'price_total' => 612.0, 'received_by' => null, 'received_at' => null, 'received_quantity' => null, 'batch_number' => null, 'best_before' => null, 'quality_id' => null, 'status' => 'pending', ]); } StockEntry::factory()->received()->create([ 'ingredient_id' => $ingMandel->id, 'supplier_id' => $supplierOele->id, 'location_id' => $locationKoln->id, 'ordered_by' => $orderUser->id, 'ordered_at' => now()->subMonths(2)->format('Y-m-d'), 'ordered_quantity' => 3000, 'price_per_kg' => 9.5, 'entry_type' => 'ingredient', 'unit' => 'gram', 'packaging_item_id' => null, ]); $this->command?->info(sprintf( 'Inventory-Stammdaten-Test: DE (countries.id=%d), Lagerort „%s“ (id=%d), Lieferanten-IDs %d / %d / %d; Verpackungsartikel mit Präfix „Demo …“; Demo-Wareneingänge (stock_entries) mit User %s.', $countryDe->id, $locationExtra->name, $locationExtra->id, $supplierOele->id, $supplierGlas->id, $supplierLogistik->id, $orderUser->email )); } }