From 5b0e4707f7dee38c3d5f6de769d33ed92627af3e Mon Sep 17 00:00:00 2001 From: Serreau Jovann Date: Thu, 2 Apr 2026 22:29:54 +0200 Subject: [PATCH] feat: ajout des services DevisService, AdvertService et FactureService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit src/Service/DevisService.php (nouveau): - create(): genere un OrderNumber via OrderNumberService::generateAndUse(), cree le Devis, persiste et flush. Retourne le Devis. src/Service/AdvertService.php (nouveau): - create(?Devis): si un devis est passe, reutilise son OrderNumber (meme numero pour devis et advert) et lie l'advert au devis. Si pas de devis, genere un nouveau OrderNumber. - createFromDevis(Devis): raccourci qui appelle create() avec le devis. src/Service/FactureService.php (nouveau): - create(?Advert): si un advert est passe, appelle createFromAdvert(). Si pas d'advert, genere un nouveau OrderNumber (facture seule). - createFromAdvert(Advert): reutilise le OrderNumber de l'advert (meme numero). Gere le splitIndex automatiquement: - 1ere facture sur un advert: splitIndex=0 (pas de suffixe) - 2eme facture: la 1ere passe a splitIndex=1, la nouvelle a splitIndex=2 (ex: 04/2026-00001-1 et 04/2026-00001-2) - 3eme facture: splitIndex=3 (04/2026-00001-3) Exemples d'utilisation: - Facture seule: $factureService->create() - Devis seul: $devisService->create() - Advert seul: $advertService->create() - Devis → Advert: $advertService->createFromDevis($devis) - Advert → Facture: $factureService->createFromAdvert($advert) - Advert → 3 Factures: 3x createFromAdvert() → -1, -2, -3 Co-Authored-By: Claude Opus 4.6 (1M context) --- src/Service/AdvertService.php | 45 +++++++++++++++++++++++++ src/Service/DevisService.php | 29 ++++++++++++++++ src/Service/FactureService.php | 60 ++++++++++++++++++++++++++++++++++ 3 files changed, 134 insertions(+) create mode 100644 src/Service/AdvertService.php create mode 100644 src/Service/DevisService.php create mode 100644 src/Service/FactureService.php diff --git a/src/Service/AdvertService.php b/src/Service/AdvertService.php new file mode 100644 index 0000000..f3224c2 --- /dev/null +++ b/src/Service/AdvertService.php @@ -0,0 +1,45 @@ +getOrderNumber() + : $this->orderNumberService->generateAndUse(); + + $advert = new Advert($orderNumber); + + if (null !== $devis) { + $advert->setDevis($devis); + } + + $this->em->persist($advert); + $this->em->flush(); + + return $advert; + } + + /** + * Cree un advert a partir d'un devis existant (meme numero). + */ + public function createFromDevis(Devis $devis): Advert + { + return $this->create($devis); + } +} diff --git a/src/Service/DevisService.php b/src/Service/DevisService.php new file mode 100644 index 0000000..820ecf4 --- /dev/null +++ b/src/Service/DevisService.php @@ -0,0 +1,29 @@ +orderNumberService->generateAndUse(); + $devis = new Devis($orderNumber); + + $this->em->persist($devis); + $this->em->flush(); + + return $devis; + } +} diff --git a/src/Service/FactureService.php b/src/Service/FactureService.php new file mode 100644 index 0000000..6dba0b9 --- /dev/null +++ b/src/Service/FactureService.php @@ -0,0 +1,60 @@ +createFromAdvert($advert); + } + + $orderNumber = $this->orderNumberService->generateAndUse(); + $facture = new Facture($orderNumber); + + $this->em->persist($facture); + $this->em->flush(); + + return $facture; + } + + /** + * Cree une facture a partir d'un advert (meme numero + splitIndex si plusieurs). + */ + public function createFromAdvert(Advert $advert): Facture + { + $existingCount = $advert->getFactures()->count(); + + $facture = new Facture($advert->getOrderNumber()); + $facture->setAdvert($advert); + + if ($existingCount > 0) { + $facture->setSplitIndex($existingCount + 1); + + // La premiere facture existante doit aussi avoir un splitIndex si elle n'en a pas + $firstFacture = $advert->getFactures()->first(); + if (false !== $firstFacture && 0 === $firstFacture->getSplitIndex()) { + $firstFacture->setSplitIndex(1); + } + } + + $this->em->persist($facture); + $this->em->flush(); + + return $facture; + } +}