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
| 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[] = null;
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();
}
/* 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[] = null;
foreach ($produits as $produit) {
array_push($listeProduits2, $produit->getId());
}
if (count($listeProduits1) == count($listeProduits2)) {
throw new \Exception("lp1 = lp2", 1);
//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