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