/** * {@inheritDoc} */ public function exchangeArray($data = array(), $em = NULL) { $this->__initializer__ && $this->__initializer__->__invoke($this, 'exchangeArray', array($data, $em)); return parent::exchangeArray($data, $em); }
/** * Permet la creation ou la modificaton d'un client */ public function formulaireclientAction() { /* Initialisation de variables */ $sm = $this->getServiceLocator(); // Récupération du traducteur $translator = $sm->get('Translator'); // Récupération de l'EntityManager $em = $this->getEntityManager(); // Récupération de la requete $request = $this->getRequest(); // Récupération de la session du client $session = new Container('societeSession'); $utilisateur = new Container('utilisateur'); /* Initialisation du client */ $client = null; $id = (int) $this->params()->fromRoute('id'); if (!empty($id)) { // Récupération du client $client = $em->getRepository('Client\\Entity\\Client')->find($id); if ($client == null) { throw new \Exception($translator->translate('Ce client n\'existe pas')); } //Assignation de variables au layout $this->layout()->setVariables(array('headTitle' => $translator->translate('Modifier un client'), 'breadcrumbActive' => $client->getRaisonSociale(), 'route' => array('Clients', 'Modification'), 'action' => 'formulaireclient', 'module' => 'client', 'plugins' => array('jquery-ui', 'mask', 'chosen'))); } else { // On crée un nouveau client $id = null; $client = new Client(); //Assignation de variables au layout $this->layout()->setVariables(array('headTitle' => $translator->translate('Nouveau client'), 'breadcrumbActive' => $translator->translate('Nouveau client'), 'route' => array('Clients'), 'action' => 'formulaireclient', 'module' => 'client', 'plugins' => array('jquery-ui', 'mask', 'chosen'))); } // Creation du formulaire du client $form = new ClientForm($translator, $sm, $em, $request, $client); //$form->get('segments')->setData($client->getSegmentsId()); if ($request->isPost()) { $form->setData($request->getPost()); if ($form->isValid()) { /* Hydratation de l'objet Client avec les données du formulaire */ // var_dump($form->getData());die(); $client->exchangeArray($form->getData(), $em); //$em->refresh($client); // Ceci permet de mettre à jour le client avec les données de la base de données (pour réccupérer l'ID par exemple) /* Remplacement des adresses du client par celles en Session */ $segments = $form->getData()['segments']; $produits = $form->getData()['produits_finis']; // var_dump($segments); // var_dump($produits); // die(); if (is_array($segments) && count($segments) > 0) { $client->getSegments()->clear(); foreach ($segments as $segment) { if ($segment != "") { $client->addSegment($em->getRepository('Client\\Entity\\Segment')->findOneBy(array('id' => $segment))); } } } if (is_array($produits) && count($produits) > 0) { $client->getProduitsFinis()->clear(); foreach ($produits as $produit) { if ($produit != "") { $client->addProduitFini($em->getRepository('Client\\Entity\\ProduitFini')->findOneById($produit)); } } } $adresses = $session->offsetGet('adresses', array()); foreach ($client->getAdresses() as $a1) { $client->removeAdresse($a1); } // $client->getAdresses()->clear(); // Ceci ne supprime ^pas la référence de l'adresse vers le client, donc pas sûr que la persistence soit respectée des deux cotés foreach ($adresses as $a2) { $nouvelleAdresse = new Adresse(); $nouvelleAdresse->exchangeArray($a2, $em); $client->addAdresse($nouvelleAdresse); } /* Remplacement des interlocuteurs du client par ceux en Session */ $interlocuteurs = $session->offsetGet('interlocuteurs', array()); foreach ($client->getInterlocuteurs() as $i1) { $client->removeInterlocuteur($i1); } // $client->getInterlocuteurs()->clear(); foreach ($interlocuteurs as $i2) { $nouvelInterlocuteur = new InterlocuteurClient(); $nouvelInterlocuteur->exchangeArray($i2, $em); $client->addInterlocuteur($nouvelInterlocuteur); } try { $em->persist($client); // Persiste les adresses et les interlocuteurs en cascade avec le client $em->flush(); } catch (\Exception $e) { $erreurMessage = $translator->translate('Une erreur est survenue durant la sauvegarde du client. Vérifiez que tous les champs sont valides (Informations générales, interlocuteurs, adresses..).') . $e->getMessage(); $messagesFlash = $this->flashArray; $messagesFlash['errors'][] = $erreurMessage; $utilisateur->offsetSet('messagesFlash', $messagesFlash); return new ViewModel(array('client' => $client, 'form' => $form, 'id' => $id)); } return $this->redirect()->toRoute('client/consulter_client', array('id' => $client->getId())); } } // Mise en session des interlocuteurs et adresses du client $array1 = $array2 = array(); $adresses = $client->getAdresses(); $interlocuteurs = $client->getInterlocuteurs(); foreach ($adresses as $a) { $uniqid = uniqid('', true); $array1[$uniqid] = $a->getArrayCopy(); } foreach ($interlocuteurs as $i) { $uniqid = uniqid('', true); $array2[$uniqid] = $i->getArrayCopy(); } $session->offsetSet('adresses', $array1); $session->offsetSet('interlocuteurs', $array2); return new ViewModel(array('client' => $client, 'form' => $form, 'id' => $id)); }