/**
  * @Route("/" ,name="default_index")
  * @Template()
  */
 public function addAction()
 {
     $entity = new CustomerCase();
     $entity->setType("CONSULTA_CLIENTE");
     $entity->setStatus("New");
     $form = $this->createCreateForm($entity);
     return array('entity' => $entity, 'form' => $form->createView());
 }
 private function updateDataBase(InputInterface $input, OutputInterface $output, $serializer)
 {
     $output->writeln("DESCARGANDO CASOS EN CRM");
     //Buscar los casos:
     $get_entry_list_parameters = array('session' => $this->sessionId, 'module_name' => 'Cases', 'query' => "cases.type = 'CONSULTA_CLIENTE'", 'order_by' => "date_entered ASC", 'offset' => '0', 'link_name_to_fields_array' => array(array('name' => 'contacts', 'value' => array('id', 'first_name', 'last_name', 'email1'))), 'max_results' => '999', 'deleted' => '0', 'Favorites' => false);
     $result = $this->client->call('get_entry_list', $get_entry_list_parameters);
     if (isset($result['faultstring'])) {
         throw new \Exception($result['detail']);
     }
     $itemsKeys = array();
     $customerCases = array();
     foreach ($result['entry_list'] as $index => $items) {
         //Un nuevo objeto por cada item
         $customerCase = new CustomerCase();
         foreach ($items as $key => $data) {
             $customerCase->setTicket($this->searchInResult(-1, $items, 'case_number'));
             $customerCase->setName($this->searchInResult(-1, $items, 'name'));
             $customerCase->setCreatedAt(strtotime($this->searchInResult(-1, $items, 'date_entered')));
             $customerCase->setStatus($this->searchInResult(-1, $items, 'status'));
             $customerCase->setDescription($this->searchInResult(-1, $items, 'description'));
             $customerCase->setResolution($this->searchInResult(-1, $items, 'resolution'));
         }
         $customerCases[$index] = $customerCase;
     }
     //Con esto me aseguro que solo "bajen" los casos que tienen creados los contactos.
     foreach ($result['relationship_list'] as $index => $items) {
         foreach ($items['link_list'] as $data) {
             foreach ($data['records'] as $info) {
                 $email = $this->searchInLinkedResult(-1, $info, 'email1');
                 $customerCase = $customerCases[$index];
                 $customerCase->setEmail($email);
                 //Ahora guardo el objeto en Json.
                 $output->writeln("GUARDANDO CASO #" . $customerCase->getTicket() . " EN LOCAL");
                 $file = $this->getContainer()->get('kernel')->getRootDir() . '/Resources/data/server/case-' . $customerCase->getTicket() . '-data.json';
                 file_put_contents($file, $serializer->serialize($customerCase, 'json'));
             }
         }
     }
 }
 private function uploadToDataBase(CustomerCase $customerCase, InputInterface $input, OutputInterface $output)
 {
     $output->writeln("CREANDO CASO EN CRM");
     $set_entry_parameters = array("session" => $this->sessionId, "module_name" => "Cases", "name_value_list" => array(array("name" => "name", "value" => "CASO DE ATENCIÓN CLIENTE " . date('d-m-Y h:j', $customerCase->getCreatedAt())), array("name" => "description", "value" => $customerCase->getDescription()), array("name" => "status", "value" => $customerCase->getStatus()), array("name" => "type", "value" => $customerCase->getType()), array("name" => "date_entered", "value" => date('Y-m-d h:j:s', $customerCase->getCreatedAt())), array("name" => "priority", "value" => 'P1')));
     $resultCase = $this->client->call('set_entry', $set_entry_parameters);
     $output->writeln(" >>> CASO CREADO ID " . $resultCase['id']);
     //Buscar el cliente:
     $get_entry_list_parameters = array('session' => $this->sessionId, 'module_name' => 'Accounts', 'query' => "accounts.name LIKE '" . $customerCase->getCompany() . "%'", 'order_by' => "date_entered ASC", 'offset' => '0', 'link_name_to_fields_array' => array(), 'max_results' => '1', 'deleted' => '0', 'Favorites' => false);
     $result = $this->client->call('get_entry_list', $get_entry_list_parameters);
     if (isset($result['faultstring'])) {
         throw new \Exception($result['detail']);
     }
     $itemsKeys = array();
     foreach ($result['entry_list'] as $items) {
         foreach ($items as $key => $data) {
             $itemsKeys[$items['id']] = $items['id'];
         }
     }
     if (count($itemsKeys) == 0) {
         //Creo la empresa como cuenta cliente
         //y cargo el id como relationship al caso
         $set_entry_parameters = array("session" => $this->sessionId, "module_name" => "Accounts", "name_value_list" => array(array("name" => "name", "value" => $customerCase->getCompany()), array("name" => "date_entered", "value" => date('Y-m-d h:j:s', $customerCase->getCreatedAt()))));
         $resultAccount = $this->client->call('set_entry', $set_entry_parameters);
         $output->writeln(" >>> CLIENTE CREADO ID " . $resultAccount['id']);
         $itemsKeys[$resultAccount['id']] = $resultAccount['id'];
     }
     foreach ($itemsKeys as $accountId) {
         $set_relationship_parameters = array('session' => $this->sessionId, 'module_name' => 'Accounts', 'module_id' => $accountId, 'link_field_name' => 'cases', 'related_ids' => array($resultCase['id']), 'deleted' => 0);
         $resultRelationship = $this->client->call('set_relationship', $set_relationship_parameters);
         $output->writeln(" >>> CASO RELACIONADO A CLIENTE OK " . $accountId);
     }
     //El contacto del Caso, lo creo siempre.
     $set_entry_parameters = array("session" => $this->sessionId, "module_name" => "Contacts", "name_value_list" => array(array("name" => "last_name", "value" => $customerCase->getName()), array("name" => "phone_work", "value" => $customerCase->getCustomerPhone()), array("name" => "email1", "value" => $customerCase->getEmail()), array("name" => "title", "value" => $customerCase->getCompanyRole()), array("name" => "department", "value" => $customerCase->getCompanyArea()), array("name" => "description", "value" => "Contacto creado a través del formulario web de atención clientes"), array("name" => "date_entered", "value" => date('Y-m-d h:j:s', $customerCase->getCreatedAt()))));
     $resultContact = $this->client->call('set_entry', $set_entry_parameters);
     $output->writeln(" >>> CONTACTO DEL CASO CREADO ID " . $resultContact['id']);
     $contactId = $resultContact['id'];
     $set_relationship_parameters = array('session' => $this->sessionId, 'module_name' => 'Contacts', 'module_id' => $contactId, 'link_field_name' => 'cases', 'related_ids' => array($resultCase['id']), 'deleted' => 0);
     $resultRelationship = $this->client->call('set_relationship', $set_relationship_parameters);
     $output->writeln(" >>> CASO RELACIONADO A CONTACTO OK " . $contactId);
     //Ahora pongo el documento:
     if (strlen($customerCase->getUploadedFile()) > 0) {
         $set_entry_parameters = array("session" => $this->sessionId, "module_name" => "Notes", "name_value_list" => array(array("name" => "name", "value" => "Adjunto vía Form Web Atención clientes"), array("name" => "date_entered", "value" => date('Y-m-d h:j:s', $customerCase->getCreatedAt()))));
         $resultNote = $this->client->call('set_entry', $set_entry_parameters);
         $output->writeln(" >>> NOTA DEL CASO CREADO ID " . $resultNote['id']);
         $noteId = $resultNote['id'];
         $set_relationship_parameters = array('session' => $this->sessionId, 'module_name' => 'Cases', 'module_id' => $resultCase['id'], 'link_field_name' => 'notes', 'related_ids' => array($noteId), 'deleted' => 0);
         $resultRelationship = $this->client->call('set_relationship', $set_relationship_parameters);
         $output->writeln(" >>> NOTA RELACIONADO A CASO OK " . $noteId);
         //El adjunto:
         $set_note_attachment_parameters = array("session" => $this->sessionId, "note" => array('id' => $noteId, 'filename' => $customerCase->getUploadedFile(), 'file' => base64_encode(file_get_contents($customerCase->getFullPathUploadedFile()))));
         $resultAttachments = $this->client->call('set_note_attachment', $set_note_attachment_parameters);
         $output->writeln(" >>> NOTA RELACIONADO A CASO OK " . $noteId);
     }
     $body = $this->getContainer()->get('templating')->render('BcTicAtencionCrmCamBundle:Case:notificacion.html.twig', array('description' => $customerCase->getDescription(), 'contact' => $customerCase->getName(), 'account' => $customerCase->getCompany(), 'link' => 'http://crm.cam-la.com/index.php?module=Cases&action=DetailView&record=' . $resultCase['id']));
     $output->writeln("ENVIANDO EMAIL DE AVISO.");
     $message = \Swift_Message::newInstance()->setSubject("NUEVO CASO DE ATENCIÓN CLIENTE")->setFrom(array('*****@*****.**' => 'CRM CAM-LA Chile'))->setTo(array('*****@*****.**'))->setCc(array('*****@*****.**'))->setBody($body);
     $this->getContainer()->get('mailer')->send($message);
     //El mensaje para el cliente:
     //Debo obtener el ticket desde el SOAP API
     //Buscar el caso:
     $get_entry_list_parameters = array('session' => $this->sessionId, 'module_name' => 'Cases', 'query' => "cases.id = '" . $resultCase['id'] . "'", 'order_by' => "date_entered ASC", 'offset' => '0', 'link_name_to_fields_array' => array(), 'max_results' => '1', 'deleted' => '0', 'Favorites' => false);
     $result = $this->client->call('get_entry_list', $get_entry_list_parameters);
     if (isset($result['faultstring'])) {
         throw new \Exception($result['detail']);
     }
     $itemsKeys = array();
     foreach ($result['entry_list'] as $items) {
         $customerCase->setTicket($this->searchInResult(-1, $items, 'case_number'));
     }
     //Ahora notifico al cliente:
     $body = $this->getContainer()->get('templating')->render('BcTicAtencionCrmCamBundle:Case:notificacion_cliente.html.twig', array('description' => $customerCase->getDescription(), 'contact' => $customerCase->getName(), 'account' => $customerCase->getCompany(), 'ticket' => $customerCase->getTicket(), 'link' => 'http://atencioncrm.cam-la.com/casos'));
     $output->writeln("ENVIANDO EMAIL DE AVISO A CLIENTE.");
     $message = \Swift_Message::newInstance()->setSubject("NUEVO CASO DE ATENCIÓN CLIENTE")->setFrom(array('*****@*****.**' => 'CRM CAM-LA Chile'))->setTo($customerCase->getEmail())->setBody($body);
     $this->getContainer()->get('mailer')->send($message);
 }