1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
public function edit(Request $request, Reparation $reparation, \Swift_Mailer $mailer): Response
{
$this->denyAccessUnlessGranted('EDIT', $reparation);
$user = $this->getUser();
$form = $this->createForm(ReparationType::class, $reparation);
$form->handleRequest($request);
// va servire pour la comparaison des produits et dont si le stockNotifier se déclanche
$produits = $reparation->getProduits();
$listeProduits1 = [];
foreach ($produits as $produit) {
array_push($listeProduits1, $produit->getId());
}
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$etatReparation = $form->get('statu')->getData();
$produits = $reparation->getProduits();
foreach ($produits as $produit) {
$reparation->addProduit($produit);
$produit->addReparation($reparation);
$this->getDoctrine()->getManager()->persist($produit);
}
$this->getDoctrine()->getManager()->persist($reparation);
$this->getDoctrine()->getManager()->flush();
$entityManager->refresh($reparation);
//envoi du mail au client comme quoi la réparation est ok
if ($etatReparation == 'Fait') {
$nom = $reparation->getVehicule()->getClient()->getNom();
$prenom = $reparation->getVehicule()->getClient()->getPrenom();
$titreReparation = $reparation->getTitre();
$message = (new \Swift_Message('Votre réparation est terminée'))
->setFrom('contact@followcarservice.fr')
->setTo($reparation->getVehicule()->getClient()->getEmail())
->setBody("Bonjour $prenom $nom<br>
<p>Votre mécanicien à fixé le status de votre réparation $titreReparation comme étant fini.<br>
Nous encouragons à vous rapprocher de votre mécancien pour voir si votre véhicule est récupérable.<br>
Nous vous souhaitons une agréable journée !</p>",
'text/html'
);
$mailer->send($message);
}
/* une fois que toutes les données sont persist et flush
* je vais faire en sorte de déterminer les action sur les $produits
* et si les quantité sont dans les alertes envoyer un email au garagiste
*/
$produits = $reparation->getProduits();
$listeProduits2 = [];
foreach ($produits as $produit) {
array_push($listeProduits2, $produit->getId());
}
if (count($listeProduits1) == count($listeProduits2)) {
return $this->render('reparation/show.html.twig', [
'reparation'=>$reparation,
'liste1'=>$listeProduits1,
'liste2'=>$listeProduits2,
'user'=>$this->getUser(),
]);
//faire le array_diff dans n'importe quel sens.
}
elseif (count($listeProduits1) > count($listeProduits2)) {
throw new \Exception("lp1 > lp2", 1);
// cas où il y a trop de produit dans l'édition de la réparation. Il les enlever et les remettre dans le stock
$listeProduitdefinitive = array_diff($listeProduits1, $listeProduits2); // différence entre les deux listes
foreach ($listeProduitdefinitive as $produit) {
$quantite = $produit->getQuantite();
$produit->setQuantite($quantite+1);
$entityManager->persist($produit);
}
}elseif (count($listeProduits1) < count($listeProduits2)) {
throw new \Exception("lp1 < lp2", 1);
// cas où la réparation ne compte pas assez de produits par rapport a la meme réparation passer durant l'édition
// il faut déduire des stock la nouvelle quantité pour chaque produits
$listeProduitdefinitive = array_diff($listeProduits2, $listeProduits1);
foreach ($listeProduitdefinitive as $produit) {
$quantite = $produit->getQuantite();
if ($quantite <=0 ) {
$quantite = 0;
}else {
$quantite = $quantite - 1;
}
$produit->setQuantite($quantite);
$entityManager->persist($produit);
}
}else {
throw new \Exception("Aucun des cas ne correspondent", 1);
}
return $this->redirectToRoute('reparation_index');
}
return $this->render('reparation/edit.html.twig', [
'reparation' => $reparation,
'form' => $form->createView(),
'user' => $user,
]);
} |
Partager