✏️ 正在编辑: Chamado.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/application/models/Chamado.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Model_NotificacaoChamadoMensagemFactory as MensagemNoficacaoFactory; class Model_Chamado { private $_id; private $_corretorId; private $_assunto; private $_descricao; private $_status; private $_anexo; private $_numeroCertificado; private $_solicitacaoPacId; private $_codigoRastreamento; private $_usuarioNormal; private $_usuarioDigital; public function __construct($options = null) { if( is_array($options) ){ $this->setOptions($options); } } public function getId() { return $this->_id; } public function getCorretorId() { return $this->_corretorId; } public function getAssunto() { return $this->_assunto; } public function getDescricao() { return $this->_descricao; } public function getStatus() { return $this->_status; } public function setId($id) { $this->_id = $id; } public function setCorretorId($corretorId) { $this->_corretorId = $corretorId; } public function setAssunto($assunto) { $this->_assunto = $assunto; } public function setDescricao($descricao) { $this->_descricao = $descricao; } public function setStatus($status) { $this->_status = $status; } public function getAnexo() { return $this->_anexo; } public function setAnexo($anexo) { $this->_anexo = $anexo; } public function getNumeroCertificado() { return $this->_numeroCertificado; } public function setNumeroCertificado($numeroCertificado) { $this->_numeroCertificado = $numeroCertificado; } public function getSolicitacaoPacId() { return $this->_solicitacaoPacId; } public function setSolicitacaoPacId($solicitacaoPacId) { $this->_solicitacaoPacId = $solicitacaoPacId; } public function getCodigoRastreamento() { return $this->_codigoRastreamento; } public function setCodigoRastreamento($codigoRastreamento) { $this->_codigoRastreamento = $codigoRastreamento; } public function getUsuarioNormal() { return (int)$this->_usuarioNormal; } public function getUsuarioDigital() { return (int)$this->_usuarioDigital; } public function setUsuarioNormal($usuarioNormal) { $this->_usuarioNormal = (int)$usuarioNormal; } public function setUsuarioDigital($usuarioDigital) { $this->_usuarioDigital = (int)$usuarioDigital; } public function setOptions(array $options) { $methods = get_class_methods($this); foreach ( $options as $key => $value ) { $explode = explode("_", $key); $methodName = ''; foreach ( $explode as $v ) { $methodName .= ucfirst($v); } $key = $methodName != '' ? $methodName : $key; $method = 'set' . ucfirst($key); if( in_array($method, $methods) ){ $this->$method($value); } } return $this; } public function _toArray() { $dbtable = new Model_DbTable_Chamado(); $info = $dbtable->info(); $methods = get_class_methods($this); $data = array(); foreach ( $info['cols'] as $key ) { $col = $key; $explode = explode("_", $key); $methodName = ''; foreach ( $explode as $v ) { $methodName .= ucfirst($v); } $key = $methodName != '' ? $methodName : $key; $method = 'get' . ucfirst($key); if( in_array($method, $methods) ){ $data[$col] = $this->$method(); } } return $data; } /** * Insere ou altera o corretor passado por parâmetro * @param Model_Chamado $chamado */ public function salvar(Model_Chamado $chamado) { $dbtable = new Model_DbTable_Chamado(); if( $chamado->getId() > 0 ){ $dbtable->update($chamado->_toArray(), "id = " . $chamado->getId()); return $chamado->getId(); } else { return $dbtable->insert($chamado->_toArray()); } } /** * Retorna uma lista de corretores * @param string $where * @param string $order * @param int $count * @param int $offset * @return array */ public function listar($fields = null, $order = "data_cadastro DESC") { $dbtable = new Model_DbTable_Chamado(); $selectInteracoes = $dbtable->getAdapter()->select()->from(array( 'interacoes' => 'tb_chamados_interacoes' ), array( 'ultima_interacao_id' => 'id', 'usuario_ultima_interacao_id' => 'usuario_id', 'chamado_id', 'comentario_interacao' => 'comentario', 'data_cadastro_interacao' => 'data_cadastro' )) ->order("id DESC"); $selectInteracoesInteras = $dbtable->getAdapter()->select()->from(['tb_chamados_interacoes'], ['*']); $select = $dbtable->getAdapter()->select()->from(array( 'chamados' => 'tb_chamados' ), ['chamados.*']) ->joinInner(['corretores' => 'tb_corretores'], 'chamados.corretor_id = corretores.id', ['corretor_id' => 'id' ,'corretor' => 'nome']) ->joinInner(['rotas' => 'tb_rotas'], 'rotas.id = corretores.rota_id', []) ->joinInner(['supervisores' => 'tb_gerente_rota'], 'supervisores.id = rotas.gerente_id', ['atuar_chamado']) ->joinLeft(['solicitacoes' => 'tb_chamados_solicitacoes'], 'chamados.id = solicitacoes.chamado_id', []) ->joinLeft(['bancos' => 'tb_bancos'], 'solicitacoes.banco_id = bancos.id', ['banco' => 'bancos.nome']) ->joinLeft(['assuntos' => 'tb_tipos'], 'chamados.assunto = assuntos.codigo AND assuntos.tipo = "ASSUNTO_CHAMADOS" AND assuntos.excluido = 0 ', array( 'assunto_descricao' => 'descricao' )) ->joinLeft(['ultimas_interacoes' => $selectInteracoes], 'chamados.id = ultimas_interacoes.chamado_id', array( 'ultimas_interacoes.*' )) ->joinLeft(['interacoes_internas' => $selectInteracoesInteras], 'chamados.id = interacoes_internas.chamado_id AND interacoes_internas.usuario_id > 0', ['usuario_interacao_interna' => 'interacoes_internas.usuario_id']) ->joinLeft(['usuarios_ultimas_interacoes' => 'tb_usuarios'], 'ultimas_interacoes.usuario_ultima_interacao_id = usuarios_ultimas_interacoes.id', array( 'usuario_ultima_interacao' => 'login' )); $select->where("chamados.excluido<>1") ->group(array( 'chamados.id' )); if( Yuppie_Auth::getIdentity()->grupo == 'Corretor' ){ $select->where('corretores.id = ' . Yuppie_Auth::getIdentity()->id); }elseif( !empty(Yuppie_Auth::getIdentity()->corretor_id) ){ $select->where('corretores.id = ' . Yuppie_Auth::getIdentity()->corretor_id); } if( Yuppie_Auth::getIdentity()->grupo == "Supervisor" ){ $rota = new Model_Rota(); $rotas = $rota->getRotasIdBySupervisor(Yuppie_Auth::getIdentity()->id); if( !empty($rotas) ){ $select->where("corretores.rota_id in (" . implode(", ", $rotas) . ")"); } } if( !empty($fields['numero']) ){ $filter = new Zend_Filter_Digits(); $fields['numero'] = (int)$filter->filter($fields['numero']); $select->where("chamados.id = {$fields['numero']}"); } if( !empty($fields['status_chamado']) ){ if( $fields['status_chamado'] == 1 ){ $select->where("usuarios_ultimas_interacoes.login <> '' AND usuarios_ultimas_interacoes.login IS NOT NULL"); } else { $select->where("(usuarios_ultimas_interacoes.login = '' OR usuarios_ultimas_interacoes.login IS NULL)"); } } if (!empty($fields['situacao']) && count($fields['situacao']) > 0) { if ($fields['situacao'] == [0,2]) { $select->where("finalizado <> 1 AND (chamados.status IS NULL OR chamados.status<>2)"); $select->having("ultima_interacao_id IS NULL OR (ultima_interacao_id IS NOT NULL AND usuario_interacao_interna > 0)"); } elseif (in_array(2, $fields['situacao'])) { //Andamento $select->where("finalizado <> 1 AND (chamados.status IS NULL OR chamados.status <> 2)"); $select->where("interacoes_internas.id IS NOT NULL AND interacoes_internas.usuario_id > 0"); } elseif (in_array(0, $fields['situacao'])) { //Aberto $select->where("finalizado <> 1 AND (chamados.status IS NULL OR chamados.status = 0)"); $select->where("interacoes_internas.usuario_id IS NULL"); } //Finalizado if (in_array(3, $fields['situacao'])) { $select->where("finalizado = 1"); } //Pendente if (in_array(1, $fields['situacao'])) { $select->where("finalizado <> 1"); $select->where("status = 2"); } } if( !empty($fields['finalizado_de']) ){ $select->where("chamados.data_finalizacao >= STR_TO_DATE('" . $fields['finalizado_de'] . "', '%d/%m/%Y')"); } if( !empty($fields['finalizado_a']) ){ $dateF = new Zend_Date($fields['finalizado_a']); $select->where("chamados.data_finalizacao <= STR_TO_DATE('" . $dateF->addDay(1) . "', '%d/%m/%Y')"); } if( !empty($fields['data_chamado_de']) ){ $select->where("chamados.data_cadastro >= STR_TO_DATE('" . $fields['data_chamado_de'] . "', '%d/%m/%Y')"); } if( !empty($fields['data_chamado_a']) ){ $dateC = new Zend_Date($fields['data_chamado_a']); $select->where("chamados.data_cadastro <= STR_TO_DATE('" . $dateC->addDay(1) . "', '%d/%m/%Y')"); } if( !empty($fields['banco_id']) ){ $select->joinLeft(array( 'chamados_solicitacoes' => 'tb_chamados_solicitacoes' ), 'chamados_solicitacoes.chamado_id = chamados.id', array( '' )) ->where("chamados_solicitacoes.excluido <> 1 AND chamados_solicitacoes.banco_id = {$fields['banco_id']}"); } if( !empty($fields['assunto']) ){ $select->where("chamados.assunto = {$fields['assunto']}"); } if( !empty($fields['corretor_id']) ){ $select->where("chamados.corretor_id = {$fields['corretor_id']}"); } if (!empty($fields['usuario_finalizacao'])) { $select->where("chamados.usuario_finalizacao = '{$fields['usuario_finalizacao']}'"); } if (!empty($fields['supervisor_id'])) { $select->where("supervisores.id = {$fields['supervisor_id']}"); } if( isset($fields['assunto']) && $fields['assunto'] == 2 && isset($fields['banco_id']) && $fields['banco_id'] ){ if( !array_key_exists('chamados_solicitacoes', $select->getPart(Zend_Db_Select::FROM)) ){ $select->joinLeft(array( 'chamados_solicitacoes' => 'tb_chamados_solicitacoes' ), 'chamados_solicitacoes.chamado_id = chamados.id', array( '' )) ->where("chamados_solicitacoes.excluido <> 1 AND chamados_solicitacoes.banco_id = {$fields['banco_id']}"); } $select->where("(chamados_solicitacoes.validado = 0 or chamados_solicitacoes.validado IS NULL)"); } if( isset($fields['assunto']) && $fields['assunto'] == 3){ if( !array_key_exists('chamados_solicitacoes', $select->getPart(Zend_Db_Select::FROM)) ){ $select->joinLeft(array( 'chamados_solicitacoes' => 'tb_chamados_solicitacoes' ), 'chamados_solicitacoes.chamado_id = chamados.id', array( '' )); } $select->where("(chamados_solicitacoes.validado = 0 or chamados_solicitacoes.validado IS NULL)"); } if( $order != null ){ $select->order($order); } return $dbtable->getAdapter()->fetchAll($select); } /** * Exclui o registro passado por parâmetro * @param int $id * @return int The number of rows deleted */ public function excluir($id) { if( $id > 0 ){ $dbtable = new Model_DbTable_Chamado(); return $dbtable->delete("id = " . $id); } return null; } /** * Retorna um fetchRow do item passado por parâmetro * @param int $id * @return Zend_Db_Table_Row_Abstract | null */ public function exibir($id) { $dbtable = new Model_DbTable_Chamado(); return $dbtable->fetchRow("id = " . $id); } public function getDetalhamento($id) { if( !$id ){ return null; } $dbtable = new Model_DbTable_Chamado(); $select = $dbtable->getAdapter()->select()->from(['chamados' => 'tb_chamados']) ->joinInner(['corretores' => 'tb_corretores'], 'corretores.id = chamados.corretor_id', ['corretor_id' => 'id', 'corretor' => 'corretores.nome']) ->joinInner(['rotas' => 'tb_rotas'], 'corretores.rota_id = rotas.id', []) ->joinInner(['supervisores' => 'tb_gerente_rota'], 'rotas.gerente_id = supervisores.id', ['atuar_chamado']) ->joinLeft(['usuario_finalizacoes' => 'tb_usuarios'], 'usuario_finalizacoes.id = chamados.usuario_finalizacao', ['usuario_finalizacao' => 'usuario_finalizacoes.login']) ->joinLeft(['assuntos' => 'tb_tipos'], 'assuntos.codigo = chamados.assunto AND assuntos.tipo = "ASSUNTO_CHAMADOS"', ['assunto_tipo' => 'assuntos.descricao']); $select->where("chamados.id = {$id}"); return $dbtable->getAdapter()->fetchRow($select, '', Zend_Db::FETCH_OBJ); } public function finalizarChamado($chamadoId) { $dbtable = new Model_DbTable_Chamado(); return $dbtable->update(array( 'finalizado' => 1, 'data_finalizacao' => Zend_Date::now()->get('yyyy-MM-dd HH:mm:ss'), 'usuario_finalizacao' => Yuppie_Auth::getIdentity()->login, ), "id = " . $chamadoId); } public function notificar($chamadoId, $tipoNotificacao = 0) { if( $chamadoId <= 0 ){ throw new Exception('Chamado não identificado.'); } $modelChamado = new Model_Chamado(); $dadosChamado = $modelChamado->exibir($chamadoId); $dadosCorretor = $dadosChamado->findParentRow("Model_DbTable_Corretor"); $emailsAdicionais = array(); if( !$dadosCorretor->email ){ throw new Exception("Corretor não possui e-mail em seu cadastro."); } switch ( $dadosChamado->assunto ) { case 4://Visita Comercial $modelSupervisor = new Model_GerenteRota(); $dadosSupervisor = $modelSupervisor->getSupervisorPorCorretorId($dadosChamado->corretor_id); if($dadosSupervisor && $dadosSupervisor->nome && $dadosSupervisor->email) { $emailsAdicionais[] = array('nome' => $dadosSupervisor->nome, 'email' => $dadosSupervisor->email); } break; case 1://Solitacao de Materiais $emailConfiguracao = new Model_DbTable_EmailConfiguracao(); $dadosEmail = $emailConfiguracao->fetchAll(); $emailsAdicionais = $dadosEmail; break; } $dadosEnvio = array( 'dados_chamado' => $dadosChamado, 'ultima_interacao' => $this->getUltimaInteracao($chamadoId), 'dados_corretor' => $dadosCorretor, 'tipo_notificacao' => $tipoNotificacao, 'mail_from' => array( $dadosCorretor->email, $dadosCorretor->nome ), 'subject' => $this->getTipoNotificacao($tipoNotificacao) . ' #' . String_Refatorar::resetNumero($dadosChamado['id']), 'email_adicional' => $emailsAdicionais, 'campos_por_assunto' => MensagemNoficacaoFactory::montarMensagem($dadosChamado->assunto, $dadosChamado) ); return $dadosEnvio; } protected function getTipoNotificacao($codigo) { switch ( $codigo ) { case 1: return 'Nova interação no chamado'; break; case 2: return 'Chamado finalizado'; break; default: return 'Abertura de chamado'; break; } } public function getUltimaInteracao($chamadoId) { if( $chamadoId <= 0 ){ throw new Exception('Chamado não identificado.'); } $interacao = new Model_DbTable_ChamadoInteracao(); return $interacao->fetchRow('chamado_id = ' . $chamadoId, 'id DESC'); } }
💾 保存文件
← 返回文件管理器