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
];
}
}