Rev 16769 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpdeclare(strict_types=1);namespace LeadersLinked\Controller;use Laminas\Db\Adapter\AdapterInterface;use Laminas\Mvc\Controller\AbstractActionController;use Laminas\Log\LoggerInterface;use Laminas\View\Model\ViewModel;use Laminas\View\Model\JsonModel;use LeadersLinked\Library\Functions;use Laminas\Mvc\I18n\Translator;use LeadersLinked\Mapper\DiscoveryContactInteractionMapper;use LeadersLinked\Mapper\DiscoveryContactInteractionTypeMapper;use LeadersLinked\Model\DiscoveryContactLog;use LeadersLinked\Mapper\DiscoveryContactMapper;use LeadersLinked\Mapper\QueryMapper;use LeadersLinked\Mapper\UserMapper;use Laminas\Paginator\Adapter\DbSelect;use Laminas\Paginator\Paginator;use LeadersLinked\Form\DiscoveryContact\InteractionForm;use LeadersLinked\Model\DiscoveryContactInteraction;use LeadersLinked\Mapper\DiscoveryContactLogMapper;class DiscoveryContactInteractionController extends AbstractActionController{/**** @var \Laminas\Db\Adapter\AdapterInterface*/private $adapter;/**** @var \LeadersLinked\Cache\CacheInterface*/private $cache;/**** @var \Laminas\Log\LoggerInterface*/private $logger;/**** @var array*/private $config;/**** @var \Laminas\Mvc\I18n\Translator*/private $translator;/**** @param \Laminas\Db\Adapter\AdapterInterface $adapter* @param \LeadersLinked\Cache\CacheInterface $cache* @param \Laminas\Log\LoggerInterface LoggerInterface $logger* @param array $config* @param \Laminas\Mvc\I18n\Translator $translator*/public function __construct($adapter, $cache, $logger, $config, $translator){$this->adapter = $adapter;$this->cache = $cache;$this->logger = $logger;$this->config = $config;$this->translator = $translator;}public function indexAction(){$request = $this->getRequest();if($request->isGet()) {$request = $this->getRequest();$uuid = $this->params()->fromRoute('id');if(!$uuid) {$data = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($data);}$discoveryContactMapper = DiscoveryContactMapper::getInstance($this->adapter);$discoveryContact = $discoveryContactMapper->fetchOneByUuid($uuid);if(!$discoveryContact) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}$search = $this->params()->fromQuery('search');$search = empty($search['value']) ? '' : Functions::sanitizeFilterString($search['value']);$page = intval($this->params()->fromQuery('start', 1), 10);$records_x_page = intval($this->params()->fromQuery('length', 10), 10);$queryMapper = QueryMapper::getInstance($this->adapter);$select = $queryMapper->getSql()->select();$select->from([ 'tb1' => DiscoveryContactInteractionMapper::_TABLE ]);$select->columns(['uuid', 'notes', 'added_on']);$select->join(['tb2' => DiscoveryContactInteractionTypeMapper::_TABLE], 'tb2.id = tb1.interaction_type_id', ['name']);$select->join(['tb3' => UserMapper::_TABLE], 'tb1.user_id = tb3.id', ['first_name' , 'last_name', 'email']);$select->where->equalTo('tb1.company_id', $discoveryContact->company_id);$select->where->equalTo('tb1.contact_id', $discoveryContact->id);if($search) {$select->where->nest()->like('first_name', '%' . $search . '%')->or->like('last_name', '%' . $search . '%')->or->like('email', '%' . $search . '%')->or->like('name', '%' . $search . '%')->unnest();}$select->order('added_on DESC');$page = intval($this->params()->fromQuery('start', 1), 10);$adapter = new DbSelect($select, $queryMapper->getSql());$paginator = new Paginator($adapter);$paginator->setItemCountPerPage($records_x_page);$paginator->setCurrentPageNumber($page);$items = [];$records = $paginator->getCurrentItems();foreach($records as $record){$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on'] );$item = ['first_name' => $record['first_name'],'last_name' => $record['last_name'],'email' => $record['email'],'name' => $record['name'],'notes' => $record['notes'],'added_on' => $dt->format('d/m/Y H:i a'),'link_delete' => $this->url()->fromRoute('discovery-contacts/interactions/delete', ['id' => $discoveryContact->uuid, 'interaction' => $record['uuid'] ]),];array_push($items, $item);}$total_items = $paginator->getTotalItemCount();if($total_items <= 10) {$total_pages = 1;} else {$total_pages = ( $total_items / 10);if(($total_pages * 10) < $total_items) {$total_pages++;}}return new JsonModel(['success' => true,'data' => ['current' => ['items' => $items,'page' => $paginator->getCurrentPageNumber()],'total' => ['items' => $total_items,'pages' => $total_pages],]]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);;}}public function addAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$uuid = $this->params()->fromRoute('id');if(!$uuid) {$data = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($data);}$discoveryContactMapper = DiscoveryContactMapper::getInstance($this->adapter);$discoveryContact = $discoveryContactMapper->fetchOneByUuid($uuid);if(!$discoveryContact) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}if($discoveryContact->company_id != $currentCompany->id) {return new JsonModel(['success' => false,'data' => 'ERROR_UNAUTHORIZED']);}$request = $this->getRequest();if($request->isPost()) {$form = new InteractionForm($this->adapter, $currentCompany->id);$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if($form->isValid()) {$dataPost = (array) $form->getData();$notes = $dataPost['notes'];$interaction_type_id = $dataPost['interaction_type_id'];$discoveryContactInteractionTypeMapper = DiscoveryContactInteractionTypeMapper::getInstance($this->adapter);$discoveryContactInteractionType = $discoveryContactInteractionTypeMapper->fetchOneByUuid($interaction_type_id);$discoveryContactInteraction = new DiscoveryContactInteraction();$discoveryContactInteraction->user_id = $currentUser->id;$discoveryContactInteraction->company_id = $discoveryContact->company_id;$discoveryContactInteraction->contact_id = $discoveryContact->id;$discoveryContactInteraction->interaction_type_id = $discoveryContactInteractionType->id;$discoveryContactInteraction->notes = $notes;$discoveryContactInteractionMapper = DiscoveryContactInteractionMapper::getInstance($this->adapter);$result = $discoveryContactInteractionMapper->insert($discoveryContactInteraction);if($result) {$this->logger->info('Se agrego la interacción del relevamiento de contacto : ' . $discoveryContact->first_name . ' ' . $discoveryContact->last_name . '(' . $discoveryContact->corporate_email . ')', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$discoveryContactLog = new DiscoveryContactLog();$discoveryContactLog->company_id = $discoveryContact->company_id;$discoveryContactLog->contact_id = $discoveryContact->id;$discoveryContactLog->user_id = $currentUser->id;$discoveryContactLog->activity = 'LABEL_RECORD_INTERACTION_ADDED';$discoveryContactLog->details = 'LABEL_TYPE : ' . $discoveryContactInteractionType->name . PHP_EOL .'LABEL_NOTES : ' . $notes . PHP_EOL;$discoveryContactLogMapper = DiscoveryContactLogMapper::getInstance($this->adapter);$discoveryContactLogMapper->insert($discoveryContactLog);$data = ['success' => true,'data' => 'LABEL_RECORD_ADDED'];} else {$data = ['success' => false,'data' => $discoveryContactInteractionMapper->getError()];}return new JsonModel($data);} else {$messages = [];$form_messages = (array) $form->getMessages();foreach($form_messages as $fieldname => $field_messages){$messages[$fieldname] = array_values($field_messages);}return new JsonModel(['success' => false,'data' => $messages]);}} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}public function deleteAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$uuid = $this->params()->fromRoute('id');if(!$uuid) {$data = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($data);}$discoveryContactMapper = DiscoveryContactMapper::getInstance($this->adapter);$discoveryContact = $discoveryContactMapper->fetchOneByUuid($uuid);if(!$discoveryContact) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}if($discoveryContact->company_id != $currentCompany->id) {return new JsonModel(['success' => false,'data' => 'ERROR_UNAUTHORIZED']);}$uuid = $this->params()->fromRoute('interaction');$discoveryContactInteractionMapper = DiscoveryContactInteractionMapper::getInstance($this->adapter);$discoveryContactInteraction = $discoveryContactInteractionMapper->fetchOneByUuid($uuid);if(!$discoveryContactInteraction) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}if($discoveryContact->id != $discoveryContactInteraction->contact_id) {return new JsonModel(['success' => false,'data' => 'ERROR_UNAUTHORIZED']);}if($request->isPost()) {$discoveryContactInteractionTypeMapper = DiscoveryContactInteractionTypeMapper::getInstance($this->adapter);$discoveryContactInteractionType = $discoveryContactInteractionTypeMapper->fetchOne($discoveryContactInteraction->interaction_type_id);$result = $discoveryContactInteractionMapper->delete($discoveryContactInteraction);if($result) {$this->logger->info('Se borro la interacción del relevamiento de contacto ' . $discoveryContact->first_name . ' ' . $discoveryContact->last_name . '(' . $discoveryContact->corporate_email . ')', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$discoveryContactLog = new DiscoveryContactLog();$discoveryContactLog->company_id = $discoveryContact->company_id;$discoveryContactLog->contact_id = $discoveryContact->id;$discoveryContactLog->user_id = $currentUser->id;$discoveryContactLog->activity = 'LABEL_RECORD_INTERACTION_DELETED';$discoveryContactLog->details = 'LABEL_TYPE : ' . $discoveryContactInteractionType->name . PHP_EOL .'LABEL_NOTES : ' . $discoveryContactInteraction->notes . PHP_EOL;$discoveryContactLogMapper = DiscoveryContactLogMapper::getInstance($this->adapter);$discoveryContactLogMapper->insert($discoveryContactLog);$data = ['success' => true,'data' => 'LABEL_RECORD_DELETED'];} else {$data = ['success' => false,'data' => $discoveryContactInteractionMapper->getError()];return new JsonModel($data);}} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}}