public function formulairedevisAction() { /******************************* Initialisation de variables *******************************/ // Récupération de l'EntityManager $em = $this->getEntityManager(); // Récupération du Service Manager $sm = $this->getServiceLocator(); // Récupération de la requete $request = $this->getRequest(); // Récupération du traducteur $translator = $this->getServiceLocator()->get('Translator'); // Récupération de la session de l'utilisateur $utilisateur = new Container('utilisateur'); $session = new Container('affaire'); /****************************** Initialisation du fournisseur ******************************/ $affaire = $devis = null; $id = (int) $this->params()->fromRoute('id'); if (!empty($id)) { // Récupération de l'devis $devis = $em->getRepository('Devis\\Entity\\Devis')->find($id); if ($devis == null) { throw new \Exception($translator->translate('Ce devis n\'existe pas')); } $affaire = $devis->getRefAffaire(); //Assignation de variables au layout $this->layout()->setVariables(array('headTitle' => $translator->translate('Modifier un devis'), 'breadcrumbActive' => $devis->getCodeDevis(), 'action' => 'formulairedevis', 'module' => 'devis', 'plugins' => array('jquery-ui', 'datapicker'))); } else { if (!is_null($session->offsetGet('id', null))) { $affaire = $em->getRepository('Affaire\\Entity\\Affaire')->find((int) $session->offsetGet('id')); } // On crée une nouvelle devis $id = null; $devis = new Devis($affaire); //Assignation de variables au layout $this->layout()->setVariables(array('headTitle' => $translator->translate('Nouveau devis'), 'breadcrumbActive' => $translator->translate('Nouveau devis'), 'action' => 'formulairedevis', 'module' => 'devis', 'plugins' => array('jquery-ui', 'datapicker'))); } // Creation du formulaire du devis $form = new DevisForm($translator, $sm, $em, $request, $devis); if ($request->isPost()) { $form->setData($request->getPost()); if ($form->isValid()) { /* Hydratation de l'objet devis avec les données du formulaire */ $devis->exchangeArray($form->getData(), $sm, $em); $totalDevis = 0; try { // On supprime d'abord les lignes de devis existantes $lignes = $devis->getLignesDevis($sm); foreach ($lignes as $ligne) { $devis->removeLigneDevis($sm, $ligne['id']); } // On ajoute les lignes de devis en fonction des lignes de l'affaire sélectionnées if (isset($_POST['ligne-affaire'])) { foreach ($_POST['ligne-affaire'] as $key => $idLigneAffaire) { // On récupère puis enregistre la ligne de devis $ligneDevis = new LigneDevis(); $ligneDevis->exchangeProperties($em->getRepository('Affaire\\Entity\\LigneAffaire')->find($idLigneAffaire)); $ligneDevis->setRefDevis($devis); $em->persist($ligneDevis); // On ajoute le montant de la ligne devis créée au montant total du devis $totalDevis += $ligneDevis->getTotalPrixVente(); } } // On enregistre les totaux $totalDevis -= $devis->getRemise(); $devis->setTotalHorsPort($totalDevis); $totalDevis += $devis->getFraisPort(); $devis->setTotalAvecPort($totalDevis); if ($devis->getDateSignature()) { $affaire->setRefDevisSigne($devis); $em->persist($affaire); } $em->persist($devis); $em->flush(); } catch (\Exception $e) { $erreurMessage = $translator->translate('Une erreur est survenue durant la sauvegarde du devis. Vérifiez que tous les champs sont valides.') . $e->getMessage(); $messagesFlash = $this->flashArray; $messagesFlash['errors'][] = $erreurMessage; $utilisateur->offsetSet('messagesFlash', $messagesFlash); return new ViewModel(array('devis' => $devis, 'form' => $form, 'id' => $id)); } return $this->redirect()->toRoute('devis/consulter_devis', array('id' => $devis->getId())); } } return new ViewModel(array('lignesAffaire' => $em->getRepository('Affaire\\Entity\\LigneAffaire')->findBy(array('refAffaire' => $affaire)), 'refLignesAffaire' => $devis->getRefLignesAffaire($sm), 'devis' => $devis, 'form' => $form, 'id' => $id)); }
/** * {@inheritDoc} */ public function removeLigneDevis($sm, $idLigne = NULL) { $this->__initializer__ && $this->__initializer__->__invoke($this, 'removeLigneDevis', array($sm, $idLigne)); return parent::removeLigneDevis($sm, $idLigne); }