Utiliser méthodes d'une classe dans fixtures impossible ?

Par Jean Sérien, il y a 2 ans


Dans la fixture ci-dessous les variables

$totalFacture = $ecriture->getTotalTTCEcriture();
$totalAcomptes = $ecriture->getTotalAcomptesEcriture();

ramènent une valeur de 0 alors qu'elles seraient sensées ramener le total actuel de la facture + le total des acomptes en création de façon à ne pas dépasser le montant global de la facture dans la comparaison...
(Les méthodes fonctionnent bien ailleurs dans le code...)
Les variables restant à zéro, les acomptes ne sont pas injectés dans la base... normal ...

Ne peut on pas faire appel aux méthodes d'une entité pendant sa création ? Dois-je faire une autre fixture pour les acomptes ?

Merci pour vos réponse éclairées

<?php namespace App\DataFixtures; use App\Entity\Acomptes; use App\Entity\Avoirs; use App\Entity\DetailsEcritures; use App\Entity\Ecritures; use App\Repository\AcomptesRepository; use App\Repository\ArticlesRepository; use App\Repository\AvoirsRepository; use App\Repository\ContactsRepository; use App\Repository\EcrituresRepository; use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Common\DataFixtures\DependentFixtureInterface; use Doctrine\Persistence\ObjectManager; use Faker; class EcrituresFixtures extends Fixture implements DependentFixtureInterface { private ArticlesRepository $articlesRepo; private AcomptesRepository $acomptesRepo; private AvoirsRepository $avoirsRepo; private EcrituresRepository $ecrituresRepo; private ContactsRepository $contactsRepo; public function __construct( ContactsRepository $contactsRepo, ArticlesRepository $articlesRepo, AcomptesRepository $acomptesRepo, EcrituresRepository $ecrituresRepo, AvoirsRepository $avoirsRepo ) { $this->articlesRepo = $articlesRepo; $this->acomptesRepo = $acomptesRepo; $this->avoirsRepo = $avoirsRepo; $this->ecrituresRepo = $ecrituresRepo; $this->contactsRepo = $contactsRepo; } public function load(ObjectManager $manager): void { $faker = Faker\Factory::create('fr_FR'); for ($i = 0; $i < 25; $i++) { $ecriture = (new Ecritures()); $typeDocument = $faker->randomElement(['Facture', 'Devis']); if ($typeDocument === 'Facture') { $numDocument = $this->ecrituresRepo->getNouveauNumeroFacture(); } else { $numDocument = $this->ecrituresRepo->getNouveauNumeroDevis(); } $contact = $this->getReference('contact_num_' . random_int(0, 99)); //Création d'un numéro de client si inexistant if ($contact->getNumClient() === null) { $contact->setNumClient($this->contactsRepo->createNumClient()); $client = $contact->getNumclient(); } else { $client = $contact->getNumClient(); } $ecriture ->setEtatDocument($faker->randomElement(['En création', 'En paiement', 'Payé', 'Annulé', 'Transformé'])) ->setNumDocument($numDocument) ->setDateDocument($faker->dateTimeThisDecade()) ->setTypeDocument($typeDocument) ->setLibelle('Essai libellé') ->setLiaison('Aucune') ->setDateEcheance(new \datetime()) ->setVendeur($this->getReference('intervenant_num_' . random_int(0, 9))) ->setContact($contact) ->setModePaiement($this->getReference('mode_paiement_num_' . random_int(0, 9))) ->setClient($client) ->setRemiseGlobale(random_int(0, 100)) ->setTauxRemiseGlobale(random_int(0, 10.25)); $manager->persist($ecriture); $this->addReference('ecriture_num_' . $i, $ecriture); $manager->flush(); //Création de lignes pour l'écriture en cours for ($j = 0; $j < random_int(1, 6); $j++) { $ligne = new DetailsEcritures(); $article = $this->getReference('article_num_' . random_int(0, 99)); $categorieArticle = $this->articlesRepo->find($article->getId()); $categorieArticle = $categorieArticle->getCategorieArticle(); $ligne ->setNumDocument($this->getReference('ecriture_num_' . $i)) ->setArticle($article) ->setCategorieArticle($categorieArticle) ->setTauxTva($this->getReference('taux_tva_' . random_int(1, 5))) ->setQuantite(random_int(1, 10)) ->setPrixHt($faker->randomFloat(2, 10, 200)) ->setReference($faker->regexify('[AZ]{3}[0-9]{6}')) ->setDescription("Description de l'écriture " . $numDocument) ->setUnite($this->getReference('unite_num_' . random_int(0, 3))) ->setDuree('60') ->setRemise(random_int(0, 25)) ->setDetails("Détails de l'écriture " . $numDocument) ->setTauxRemise($faker->randomFloat(2, 0, 10)) ->setTotalRemise($faker->randomFloat(2, 0, 100)) ->setTauxHoraire(random_int(0, 10)) ->setAttestationFiscale($faker->boolean()) ->setDateRealisation($faker->dateTimeThisDecade()) ->setDetailsLigne("Détails de la ligne d'écriture " . $numDocument) ->setTypeRemise($faker->randomElement(['Remise fidélité', 'Remise exceptionnelle', "Code d'achat"])); $manager->persist($ligne); $manager->flush(); } //Création d'acomptes si le document est une facture if ($typeDocument === "Facture") { $totalFacture = $ecriture->getTotalTTCEcriture(); $totalAcomptes = $ecriture->getTotalAcomptesEcriture(); for ($k = 0; $k <= random_int(1, 5); $k++) { $montantRandom = $faker->randomFloat(2, 10, 90, 200); if (($totalAcomptes + $montantRandom) < $totalFacture) { $nouveauNumAcompte = $this->acomptesRepo->createNumAcompte(); $acompte = new Acomptes(); $acompte->setDateAcompte($faker->dateTimeThisDecade()) ->setNumAcompte($nouveauNumAcompte) // ->setNumClient($contact->getNumclient()) ->setTotalAcompte($montantRandom) ->setDescription('Acompte n° ' . $k . ' sur facture ' . $numDocument) ->setModePaiement($this->getReference('mode_paiement_num_' . random_int(0, 9))) ->setIntervenant($this->getReference('intervenant_num_' . random_int(0, 9))) ->setPosteRecettes($this->getReference('poste_recettes_num_' . random_int(0, 4))) ->setTypeDocument('Acompte') ->setEtatDocument('Généré') ->setLiaison($this->getReference('ecriture_num_' . $i)) ->setNumDocument($numDocument) ->setPosteTresorerie('n.c.') ->setLibelle('Acompte sur ' . $typeDocument . ' ' . $numDocument) ->setNumPiece($faker->regexify('[0-9]{15}')) ->setCreatedAt(new \DateTimeImmutable()); $manager->persist($acompte); } $manager->flush(); } //Création d'avoirs si il s'agît d'une facture for ($l = 0; $l <= random_int(0, 1); $l++) { $avoir = new Avoirs(); $avoir ->setDateAvoir($faker->dateTimeThisDecade()) ->setNumAvoir($this->avoirsRepo->getNouveauNumeroAvoir()) ->setModePaiement($this->getReference('mode_paiement_num_' . random_int(0, 9))) ->setMontant($faker->randomElement(['10', '15', '20', '25', '30'])) ->setDescription("Avoir sur facture " . $numDocument) ->setNumPiece($faker->regexify('[0-9]{15}')) ->setNumClient($client) ->setCreatedAt(new \DateTimeImmutable()) ->setLibelle("Aucun") ->setNumFacture($numDocument) ->setEtatDocument("Généré") ->setTypeDocument("Avoir") ->setFacture($ecriture) ->setClient($contact); $manager->persist($avoir); $manager->flush(); } } } } public function getDependencies() { return [ ContactsFixtures::class, ModesPaiementFixtures::class, UnitesFixtures::class, TauxTVAFixtures::class, IntervenantsFixtures::class, PostesRecettesFixtures::class ]; } }

Aucune réponse