ldc-arcadia-api/database/seeders/ArcadiaReplicateSeeder.php

276 lines
13 KiB
PHP

<?php
declare(strict_types=1);
namespace Database\Seeders;
use Database\ArcadiaReplicate\Factories\Metap\MetaUtilFactory;
use Database\ArcadiaReplicate\Factories\Refp\AdditifFactory;
use Database\ArcadiaReplicate\Factories\Refp\FamVenteFactory;
use Database\ArcadiaReplicate\Factories\Refp\IncoAllegationsFactory;
use Database\ArcadiaReplicate\Factories\Refp\IncoAllergeneFactory;
use Database\ArcadiaReplicate\Factories\Refp\IncoCompoFactory;
use Database\ArcadiaReplicate\Factories\Refp\IncoFactory;
use Database\ArcadiaReplicate\Factories\Refp\MarqueFactory;
use Database\ArcadiaReplicate\Factories\Refp\RuPersonneSirhFactory;
use Database\ArcadiaReplicate\Factories\Refp\ServiceConsoIncoFactory;
use Database\ArcadiaReplicate\Tables\Metap\MetaUtilTable;
use Database\ArcadiaReplicate\Tables\Refp\AdditifTable;
use Database\ArcadiaReplicate\Tables\Refp\FamVenteTable;
use Database\ArcadiaReplicate\Tables\Refp\IncoAllegationsTable;
use Database\ArcadiaReplicate\Tables\Refp\IncoAllergeneTable;
use Database\ArcadiaReplicate\Tables\Refp\IncoCompoTable;
use Database\ArcadiaReplicate\Tables\Refp\IncoTable;
use Database\ArcadiaReplicate\Tables\Refp\MarqueTable;
use Database\ArcadiaReplicate\Tables\Refp\RuPersonneSirhTable;
use Database\ArcadiaReplicate\Tables\Refp\ServiceConsoIncoTable;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;
final class ArcadiaReplicateSeeder extends Seeder
{
/**
* Seed the replicated Arcadia Oracle meta-model database.
*/
public function run(): void
{
$connection = Config::string('database.arcadia_meta_model');
$this->seedMetaUtil($connection);
$this->seedSirh($connection);
$this->seedMarques($connection);
$this->seedFamVente($connection);
$this->seedAdditifs($connection);
$this->seedAllergenesAndAllegations($connection);
$this->seedServicesConso($connection);
$this->seedIncoAndCompo($connection);
}
private function seedMetaUtil(string $connection): void
{
$users = [
['COD_UTIL' => 'RA0706430', 'LIB_UTIL' => 'Responsable Qualité', 'EMAIL' => 'qualite@ldc.fr', 'GROUPE' => 65],
['COD_UTIL' => 'BM6501226', 'LIB_UTIL' => 'Chef de Produit Marketing', 'EMAIL' => 'marketing@ldc.fr', 'GROUPE' => 2],
['COD_UTIL' => 'SB6501847', 'LIB_UTIL' => 'Responsable Commercial', 'EMAIL' => 'commercial@ldc.fr', 'GROUPE' => 1],
['COD_UTIL' => 'ME0101979', 'LIB_UTIL' => 'Administrateur SI', 'EMAIL' => 'admin.si@ldc.fr', 'GROUPE' => 0],
['COD_UTIL' => 'SG6501248', 'LIB_UTIL' => 'Chargé R&D Nutrition', 'EMAIL' => 'rd.nutrition@ldc.fr', 'GROUPE' => 1],
];
foreach ($users as $user) {
if (! DB::connection($connection)->table(MetaUtilTable::name())->where('COD_UTIL', $user['COD_UTIL'])->exists()) {
MetaUtilFactory::new($connection)->create($user);
}
}
}
private function seedSirh(string $connection): void
{
$employees = [
['MATRICULE_FIC' => '4300710', 'SITE_FIC' => 'AVIGNO', 'ETAB_FIC' => 'ET29A', 'STATUT_FIC' => 'OUV', 'SERVICE_FIC' => '25'],
['5000920', 'SNVSER', 'ET11G', 'OUV', '13'],
['3900757', 'EPC', 'ET15', 'AMT', '16'],
['109873', 'LDCVOL', 'ET50', 'CAD', '25'],
['4911791', 'SNVVOL', 'ET11E', 'OUV', '11'],
];
foreach ($employees as $emp) {
$mat = is_array($emp) && isset($emp['MATRICULE_FIC']) ? $emp['MATRICULE_FIC'] : $emp[0];
if (! DB::connection($connection)->table(RuPersonneSirhTable::name())->where('MATRICULE_FIC', $mat)->exists()) {
if (isset($emp['MATRICULE_FIC'])) {
RuPersonneSirhFactory::new($connection)->create($emp);
} else {
RuPersonneSirhFactory::new($connection)->create([
'MATRICULE_FIC' => $emp[0],
'COD_PERSONNE' => $emp[0],
'SITE_FIC' => $emp[1],
'ETAB_FIC' => $emp[2],
'ETABLISSEMENT' => $emp[2],
'STATUT_FIC' => $emp[3],
'SERVICE_FIC' => $emp[4],
]);
}
}
}
}
private function seedMarques(string $connection): void
{
$marques = [
['COD_MARQ' => 246, 'LIB_MARQ' => 'LE GAULOIS', 'COMMENTAIRE' => 'Marque Le Gaulois (Volailles & Panés)'],
['COD_MARQ' => 466, 'LIB_MARQ' => 'LOUE', 'COMMENTAIRE' => 'Fermiers de Loué Label Rouge'],
['COD_MARQ' => 565, 'LIB_MARQ' => 'MARIE', 'COMMENTAIRE' => 'Plats cuisinés & surgelés Marie'],
['COD_MARQ' => 71, 'LIB_MARQ' => 'ID HALAL', 'COMMENTAIRE' => 'Gamme certifiée Halal'],
['COD_MARQ' => 793, 'LIB_MARQ' => 'POPROSTU', 'COMMENTAIRE' => 'Marque MDD pour la Pologne'],
['COD_MARQ' => 631, 'LIB_MARQ' => 'LA MAISON DE MAURICE', 'COMMENTAIRE' => 'Marque distributeur Export'],
['COD_MARQ' => 179, 'LIB_MARQ' => 'BX FOOD', 'COMMENTAIRE' => 'Marque BX Food'],
['COD_MARQ' => 725, 'LIB_MARQ' => 'ALPEKER', 'COMMENTAIRE' => 'Marque Export Italie'],
['COD_MARQ' => 740, 'LIB_MARQ' => 'AQUILA', 'COMMENTAIRE' => 'Marque Export Hongrie'],
];
foreach ($marques as $marque) {
if (! DB::connection($connection)->table(MarqueTable::name())->where('COD_MARQ', $marque['COD_MARQ'])->exists()) {
MarqueFactory::new($connection)->create($marque);
}
}
}
private function seedFamVente(string $connection): void
{
$familles = [
['COD_FAMVTE' => 406, 'LIB_FAMVTE' => 'FOURNITURES EXPEDITION'],
['COD_FAMVTE' => 31, 'LIB_FAMVTE' => 'PRODUITS CUITS (TVA 20%)'],
['COD_FAMVTE' => 94, 'LIB_FAMVTE' => 'DCPE POULET NOIR'],
['COD_FAMVTE' => 306, 'LIB_FAMVTE' => 'OIE LOUE'],
['COD_FAMVTE' => 319, 'LIB_FAMVTE' => 'DCPE CANARD GRAS ELABORE'],
];
foreach ($familles as $fam) {
if (! DB::connection($connection)->table(FamVenteTable::name())->where('COD_FAMVTE', $fam['COD_FAMVTE'])->exists()) {
FamVenteFactory::new($connection)->create($fam);
}
}
}
private function seedAdditifs(string $connection): void
{
$additifs = [
['COD_EUROPEEN' => 'E250', 'MOLECULE' => 'Nitrite de sodium', 'FONCTION' => 'Conservateur', 'RISQUE' => 2],
['COD_EUROPEEN' => 'E316', 'MOLECULE' => 'Érythorbate de sodium', 'FONCTION' => 'Antioxydant', 'RISQUE' => 1],
['COD_EUROPEEN' => 'E392', 'MOLECULE' => 'Extrait de romarin', 'FONCTION' => 'Antioxydant', 'RISQUE' => 0],
['COD_EUROPEEN' => 'E469', 'MOLECULE' => 'Carboxyméthylcellulose enzymatique', 'FONCTION' => 'Épaississant', 'RISQUE' => 1],
['COD_EUROPEEN' => 'E470a', 'MOLECULE' => 'Sels d\'acides gras', 'FONCTION' => 'Émulsifiant', 'RISQUE' => 1],
['COD_EUROPEEN' => 'E471', 'MOLECULE' => 'Mono et diglycérides d\'acides gras', 'FONCTION' => 'Émulsifiant', 'RISQUE' => 1],
['COD_EUROPEEN' => 'E472a', 'MOLECULE' => 'Esters acétiques de mono/diglycérides', 'FONCTION' => 'Émulsifiant', 'RISQUE' => 1],
['COD_EUROPEEN' => 'E472b', 'MOLECULE' => 'Esters lactiques de mono/diglycérides', 'FONCTION' => 'Émulsifiant', 'RISQUE' => 1],
];
foreach ($additifs as $additif) {
if (! DB::connection($connection)->table(AdditifTable::name())->where('COD_EUROPEEN', $additif['COD_EUROPEEN'])->exists()) {
AdditifFactory::new($connection)->create($additif);
}
}
}
private function seedAllergenesAndAllegations(string $connection): void
{
$allergenes = [
['ID' => 1, 'LIB' => 'Gluten'],
['ID' => 2, 'LIB' => 'Crustacés'],
['ID' => 3, 'LIB' => 'Œufs'],
['ID' => 4, 'LIB' => 'Poissons'],
['ID' => 5, 'LIB' => 'Arachides'],
['ID' => 6, 'LIB' => 'Soja'],
['ID' => 7, 'LIB' => 'Lait'],
['ID' => 8, 'LIB' => 'Fruits à coque'],
['ID' => 9, 'LIB' => 'Céleri'],
['ID' => 10, 'LIB' => 'Moutarde'],
['ID' => 11, 'LIB' => 'Graines de sésame'],
];
foreach ($allergenes as $allergene) {
if (! DB::connection($connection)->table(IncoAllergeneTable::name())->where('ID', $allergene['ID'])->exists()) {
IncoAllergeneFactory::new($connection)->create($allergene);
}
}
$allegations = [
['CODE' => 1, 'LIBELLE' => 'Sans conservateur'],
['CODE' => 2, 'LIBELLE' => 'Sans huile de palme'],
['CODE' => 3, 'LIBELLE' => 'Volaille 100% française'],
['CODE' => 4, 'LIBELLE' => 'Élevé en liberté 84 jours'],
['CODE' => 5, 'LIBELLE' => 'Sans arôme artificiel'],
];
foreach ($allegations as $allegation) {
if (! DB::connection($connection)->table(IncoAllegationsTable::name())->where('CODE', $allegation['CODE'])->exists()) {
IncoAllegationsFactory::new($connection)->create($allegation);
}
}
}
private function seedServicesConso(string $connection): void
{
$services = [
[
'ID' => 24,
'NOM' => 'Service clients - Groupe Auchan',
'ADRESSE1' => 'BP 682',
'CP' => '59650',
'VILLE' => 'Villeneuve d\'Ascq',
'TELEPHONE' => '03.59.30.59.30',
'MAIL' => 'service.conso@auchan.fr',
'MARQUE' => 210,
'LIB' => 'Service conso Pouce Auchan',
'SITE_INT' => 'www.auchan.fr',
],
[
'ID' => 28,
'NOM' => 'Service consommateurs Carrefour',
'ADRESSE1' => 'CMI - TSA 91431',
'CP' => '91300',
'VILLE' => 'Massy',
'TELEPHONE' => '06.69.39.70.00',
'MAIL' => 'service.conso@carrefour.fr',
'MARQUE' => 448,
'LIB' => 'Service conso Carrefour',
'SITE_INT' => 'www.carrefour.fr',
],
[
'ID' => 30,
'NOM' => 'Service clients Intermarché',
'ADRESSE1' => '24 rue Auguste Chabrières',
'CP' => '75000',
'VILLE' => 'Paris',
'TELEPHONE' => '08.00.00.81.80',
'MAIL' => 'service.conso@intermarche.com',
'MARQUE' => 419,
'LIB' => 'Service conso Intermarché',
'SITE_INT' => 'www.intermarche.com',
],
[
'ID' => 54,
'NOM' => 'Service Consommateurs LDC',
'ADRESSE1' => 'ZI Saint Laurent - BP 88',
'CP' => '72302',
'VILLE' => 'Sablé-sur-Sarthe',
'TELEPHONE' => '02.43.62.70.00',
'MAIL' => 'service.conso@ldc.fr',
'MARQUE' => 246,
'LIB' => 'Service conso Groupe LDC',
'SITE_INT' => 'www.ldc.fr',
],
];
foreach ($services as $service) {
if (! DB::connection($connection)->table(ServiceConsoIncoTable::name())->where('ID', $service['ID'])->exists()) {
ServiceConsoIncoFactory::new($connection)->create($service);
}
}
}
private function seedIncoAndCompo(string $connection): void
{
// 1. Compositions nutritionnelles
if (! DB::connection($connection)->table(IncoCompoTable::name())->where('ID', 96504)->exists()) {
IncoCompoFactory::new($connection)->steaksDinde()->create();
}
if (! DB::connection($connection)->table(IncoCompoTable::name())->where('ID', 124503)->exists()) {
IncoCompoFactory::new($connection)->pouletFermierNoir()->create();
}
// 2. Fiches INCO liées
if (! DB::connection($connection)->table(IncoTable::name())->where('NO_ART', 47789)->exists()) {
IncoFactory::new($connection)->nuggetsPoulet()->withCompo(96504)->create();
}
if (! DB::connection($connection)->table(IncoTable::name())->where('NO_ART', 47996)->exists()) {
IncoFactory::new($connection)->gesiersEtFoies()->withCompo(124503)->create();
}
if (! DB::connection($connection)->table(IncoTable::name())->where('NO_ART', 4)->exists()) {
IncoFactory::new($connection)->pouletFermierLoue()->create();
}
}
}