/**
  * {@inheritDoc}
  */
 public function getSegments()
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'getSegments', array());
     return parent::getSegments();
 }
Example #2
0
 /**
  * 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));
 }