Bonjour les amis, je souhaite faire une mise a jour sur les elements d'une collection. Je travail sur une application de gestion de stock, y a l'entite Entree lié à une collection de LigneEntrees.
Ce que je veux est que à la modification d'une entrée, si une quantité de Produit se trouvant sur une ligneEntree a lieux, que la quantité stock du produit se fasse automatiquement en fonction de la nouvelle quantité. mais malheureusement cela semble difficile. J'ai essayé da'bord grace au preupdate placé dans la LigneEntree en recuperant l'objet PreUpdateEvents grace auquel j'ai prix l'entitymanager pour persister mais cela ne semble pas marcher. ensuite j'ai essayé dans le controlleur en mettant l'ancienne collection dans la session , cela ne marche pas non plus. Aidezmoi s'il vous plait ....

"
public function edit(Request $request, Entree $entree): Response
{
$siteActif = $this->getUser()->getSiteActif();
//initialisation des variables de session et creation de l'ancienne valeurs
$session = $request->getSession();
if ($session->has('oldLigneEntrees')) {
$oldLigneEntrees = $session->get('oldLigneEntrees');
} else {
$oldLigneEntrees = new ArrayCollection();
foreach ($entree->getLigneEntrees() as $ligne) {
$oldLigneEntrees->add($ligne);
}
$session->set('oldLigneEntrees', $oldLigneEntrees);
}
// fin initialisation et creation ancienne valeur
$form = $this->createForm(EntreeType::class, $entree, []);
$form->handleRequest($request);
$entityManager = $this->getDoctrine()->getManager();
if ($form->isSubmitted() && $form->isValid()) {
//travail commence
foreach ($ligneEntrees as $ligne1) {
$nouvelleQuantite = $ligne1->getQuantite();
$tableau[] = $ligne1->getProduit()->getId();
foreach ($oldLigneEntrees as $elt) {
if ($elt->getProduit() == $ligne1->getProduit()) {
$ancienneQuantite = $elt->getQuantite();
$produit = $elt->getProduit();
$produitSite = $elt->getProduitSite();
$produitSite->setQuantite($produitSite->getQuantite() - $ancienneQuantite + $nouvelleQuantite);
$produit->setQuantite($produit->getQuantite() - $ancienneQuantite + $nouvelleQuantite);
$ligne1->setProduit($produit);
$ligne1->setProduitSite($produitSite);
}
}
$entree->addLigneEntree($ligne1);
$entityManager->persist($ligne1);
}
$entityManager->persist($entree);
$entityManager->flush();
$this->addFlash('success', 'Opération réussie. ');
return $this->redirectToRoute('entree_index');
}
return $this->render('entree/edit.html.twig', [
'entree' => $entree,
'form' => $form->createView(),
]);
}

"

Aucune réponse