/** * @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); }