/**
  * Envia um email com os dados para Recuperacao/alteração da senha do usuário
  * @param Administrativo_Model_Usuario $oUsuario instancia do usuario
  */
 public static function enviarEmailSenha(Administrativo_Model_Usuario $oUsuario)
 {
     $sHash = $oUsuario->criarHash();
     $oView = new Zend_View();
     $oView->setScriptPath(APPLICATION_PATH . '/modules/auth/views/scripts/login/');
     $oView->sUrlRecuperarSenha = $oView->serverUrl("/auth/login/recuperar-senha/hash/{$sHash}");
     $oView->nome = $oUsuario->getEntity()->getNome();
     $sTextoEmail = $oView->render('email-recuperacao-senha.phtml');
     $oTranslate = Zend_Registry::get('Zend_Translate');
     DBSeller_Helper_Mail_Mail::send($oUsuario->getEmail(), $oTranslate->_('ECidadeOnline2 - Recuperação de Senha'), $sTextoEmail);
 }
 /**
  * Método responsável pelo envio de email no cancelamento ou na solicitação do mesmo
  *
  * @param $oNota
  * @param $oSolicitacao
  * @param $sJustificativaFiscal
  * @return null|string
  */
 public function enviarEmailRejeicao($oNota, $oSolicitacao, $sJustificativaFiscal)
 {
     //Retorna os usuarios do tipo fiscal
     $aUsuariosFiscal = Administrativo_Model_Usuario::getByAttribute('tipo', Administrativo_Model_Usuario::USUARIO_TIPO_FISCAL);
     //Remove o usuário admin do array
     if ($aUsuariosFiscal[0]->getAdministrativo()) {
         unset($aUsuariosFiscal[0]);
     }
     $aEmailBCC = array();
     //Pega os emails cadastrados dos usuarios fiscais
     foreach ($aUsuariosFiscal as $oUsuarioFiscal) {
         $sEmail = $oUsuarioFiscal->getEmail();
         if (!is_null($sEmail) && $sEmail != '') {
             $aEmailBCC[] = $sEmail;
         }
     }
     $oValidadorEmail = new Zend_Validate_EmailAddress();
     $emailTO = $oNota->getT_email();
     $sMensagemRetorno = NULL;
     $sEmailTomador = $oSolicitacao->getEmailTomador();
     if ($oValidadorEmail->isValid($emailTO) || !empty($sEmailTomador) && $oValidadorEmail->isValid($sEmailTomador) || count($aEmailBCC) > 0) {
         $iInscricaoMunicipal = $oNota->getP_im();
         $oContribuinte = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($iInscricaoMunicipal);
         $this->view->nota = $oNota;
         $this->view->justificativa_fiscal = $sJustificativaFiscal;
         $this->view->tomadorNome = $oNota->getT_razao_social();
         $this->view->prestadorNome = $oContribuinte->getNome();
         $this->view->prestadorCnpj = DBSeller_Helper_Number_Format::maskCPF_CNPJ($oContribuinte->getCgcCpf());
         $this->view->nfseNumero = $oNota->getNota();
         $this->view->nfseUrl = $oNota->getUrlVerificacaoNota();
         $this->mensagem = $this->view->render('nota/email-rejeicao-cancelamento.phtml');
         // Verifica se foi mudado o e-mail do Tomador para enviar uma cópia oculta do cancelamento
         if (!empty($sEmailTomador) && $sEmailTomador != $oNota->getT_email() && $oValidadorEmail->isValid($sEmailTomador)) {
             $emailTO = $sEmailTomador;
             if ($oValidadorEmail->isValid($oNota->getT_email())) {
                 $aEmailBCC[] = $oNota->getT_email();
             }
             $sMensagemRetorno = "Cancelamento rejeitado com sucesso.<br>Email foi enviado para {$emailTO}";
         }
         // Caso não haja email cadastrado na nota e nem email informado no cancelamento,
         // ou se for uma solicitação de cancelamento, o primeiro email de fiscal é colocado
         // como destinatário principal para que seja possível o envio
         if (is_null($emailTO) || empty($emailTO)) {
             $emailTO = $aEmailBCC[0];
             unset($aEmailBCC[0]);
             $sMensagemRetorno = "Cancelamento efetuado com sucesso.<br>Email foi enviado para {$emailTO}";
         }
         // Envia Email
         DBSeller_Helper_Mail_Mail::send($emailTO, "Nota Fiscal Eletrônica nº {$oNota->getNota()}", $this->mensagem, 'utf-8', $aEmailBCC);
     }
     return $sMensagemRetorno;
 }
 /**
  * Realiza a recusa do cadastro da pessoa
  * 
  * @throws Exception
  * @return void
  */
 public function recusarCadastroSalvarAction()
 {
     parent::noLayout();
     $aDados = $this->getRequest()->getParams();
     $aRetornoJson = NULL;
     $oForm = new Fiscal_Form_CadastroPessoaRecusa();
     $oForm->populate($aDados);
     // Valida o formulario e gera a requisicao
     if ($oForm->isValid($aDados)) {
         try {
             $this->oDoctrine->getConnection()->beginTransaction();
             $oCadastroPessoa = new Contribuinte_Model_CadastroPessoa($aDados['id']);
             $this->validarLiberacaoUsuario($oCadastroPessoa);
             if ($oCadastroPessoa->bloquearCadastro($aDados['justificativa'])) {
                 $this->view->setScriptPath(APPLICATION_PATH . '/modules/default/views/scripts/cadastro-eventual/');
                 $this->view->sTextoRecusa = $aDados['justificativa'];
                 $sTextoEmail = $this->view->render('email-aviso-recusa-cadastro.phtml');
                 $lEmail = DBSeller_Helper_Mail_Mail::send($oCadastroPessoa->getEmail(), $this->translate->_('ECidadeOnline2 - Retorno de Solicitação de Cadastro'), $sTextoEmail);
                 if (!$lEmail) {
                     throw new Exception($this->translate->_('Email não enviado. Favor Contate Suporte Prefeitura.'));
                 }
                 $aRetornoJson['status'] = TRUE;
                 $aRetornoJson['reload'] = TRUE;
                 $aRetornoJson['success'] = $this->translate->_('A Recusa do cadastro foi efetuada. Um email com a justificativa foi enviado ao contribuinte.');
             }
             $this->oDoctrine->getConnection()->commit();
         } catch (Exception $eErro) {
             $this->oDoctrine->getConnection()->rollback();
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'][] = $eErro->getMessage();
         }
     } else {
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['fields'] = array_keys($oForm->getMessages());
         $aRetornoJson['error'][] = 'Preencha os dados corretamente.';
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
 /**
  * Método para persistir os dados do cadastro eventual [Json]
  *
  * @return void
  */
 public function salvarAction()
 {
     $aDados = $this->getAllParams();
     $oForm = new Administrativo_Form_CadastroPessoa();
     // Carrega a lista de cidade e seta os selecionados
     if (!empty($aDados['estado']) && !empty($aDados['cidade'])) {
         $oForm->carregarCidades($aDados['estado'], $aDados['cidade']);
     }
     // Se informado o bairro pelo combo, retira a validação do campo texto
     if (isset($aDados['cod_bairro']) && !empty($aDados['cod_bairro'])) {
         $oForm->getElement('bairro')->setRequired(FALSE);
         $oForm->carregarBairros($aDados['cidade']);
     }
     // Se informado o bairro pelo campo texto, retira a validação do combo
     if (isset($aDados['bairro']) && !empty($aDados['bairro'])) {
         $oForm->getElement('cod_bairro')->setRequired(FALSE);
     }
     // Se informado o bairro pelo combo, retira a validação do campo texto
     if (isset($aDados['cod_endereco']) && !empty($aDados['cod_endereco'])) {
         $oForm->getElement('endereco')->setRequired(FALSE);
         $oForm->carregarEnderecos($aDados['cod_endereco']);
     }
     // Se informado o bairro pelo campo texto, retira a validação do combo
     if (isset($aDados['endereco']) && !empty($aDados['endereco'])) {
         $oForm->getElement('cod_endereco')->setRequired(FALSE);
     }
     if ($aDados['id_perfil'] == 6) {
         $oForm->getElement('cnpjcpf')->removeDecorator('DBSeller_Validator_CpfCnpj');
         $oForm->getElement('cnpjcpf')->addValidator(new DBSeller_Validator_Cnpj());
     } else {
         $oForm->getElement('cnpjcpf')->addValidator(new DBSeller_Validator_CpfCnpj());
     }
     // Popula o formulario
     $oForm->populate($aDados);
     // Valida o formulario
     if ($oForm->isValid($aDados)) {
         // Recupera os parametros, limpando as máscaras com filters do form
         $aDados = $oForm->getValues();
         // Recupera as configurações do doctrine e inicia a transação
         $oDoctrine = Zend_Registry::get('em');
         $oDoctrine->getConnection()->beginTransaction();
         try {
             $aUsuarioEmail = Administrativo_Model_Usuario::getByAttribute('email', $aDados['email']);
             if (count($aUsuarioEmail) > 0) {
                 $sUrl = '<a href="' . $this->view->serverUrl('/auth/login/esqueci-minha-senha/') . '">Clique Aqui</a>';
                 $sMensagemErro = 'Já encontramos um cadastro com este email.<br>';
                 $sMensagemErro .= "Caso tenha esquecido sua senha. {$sUrl}";
                 throw new Exception($this->translate->_($sMensagemErro));
             }
             $aUsuarioSistema = Administrativo_Model_Usuario::getByAttribute('login', $aDados['cnpjcpf']);
             if (count($aUsuarioSistema) > 0) {
                 $sMensagemErro = 'Já encontramos um cadastro com essas informações.<br>';
                 $sMensagemErro .= 'Entre em contato com a prefeitura para maiores informações.';
                 throw new Exception($this->translate->_($sMensagemErro));
             }
             $sHash = NULL;
             $oParametosPrefeitura = Administrativo_Model_Prefeitura::getDadosPrefeituraBase();
             if (!$oParametosPrefeitura->getVerificaAutocadastro()) {
                 $sHash = hash('whirlpool', $aDados['cnpjcpf'] . time() . $aDados['email']);
                 $aDados['tipo_liberacao'] = Contribuinte_Model_CadastroPessoa::TIPO_LIBERACAO_USUARIO_CGM;
             }
             $aDados['hash'] = $sHash;
             $oCadastro = new Contribuinte_Model_CadastroPessoa();
             $oCadastro->setDadosEventual($aDados);
             $oCadastro->persist();
             if ($oParametosPrefeitura->getVerificaAutocadastro()) {
                 $sTextoEmail = $this->view->render('cadastro-eventual/email-aviso-fiscal.phtml');
                 $aUsuariosFiscais = Administrativo_Model_Usuario::getByAttribute('perfil', 5);
                 // Cria um array, mesmo quando for somente um objeto
                 if (is_object($aUsuariosFiscais)) {
                     $aUsuariosFiscais = array($aUsuariosFiscais);
                 }
                 if (is_array($aUsuariosFiscais)) {
                     foreach ($aUsuariosFiscais as $oUsuarioFiscal) {
                         // Envia email apenas para os fiscais habilitados
                         if ($oUsuarioFiscal->getHabilitado()) {
                             DBSeller_Helper_Mail_Mail::send($oUsuarioFiscal->getEmail(), $this->translate->_('ECidadeOnline2 - Solicitação de Contribuinte Eventual'), $sTextoEmail);
                         }
                     }
                 }
                 // Envio do email para o contribuinte, avisando da  espera do envio do email
                 $sTextoEmail = $this->view->render('cadastro-eventual/email-aviso-espera-liberacao-contribuinte.phtml');
                 DBSeller_Helper_Mail_Mail::send($aDados['email'], $this->translate->_('ECidadeOnline2 - Solicitação de Cadastro'), $sTextoEmail);
             } else {
                 //link base do sistema + caminho para geração de senha
                 $this->view->sLinkSenha = $this->view->serverUrl("/default/cadastro-eventual/verificacao/hash/{$sHash}");
                 $sTextoEmail = $this->view->render('cadastro-eventual/email-aviso-contribuinte.phtml');
                 $lEmail = DBSeller_Helper_Mail_Mail::send($aDados['email'], $this->translate->_('ECidadeOnline2 - Confirmação de Cadastro'), $sTextoEmail);
                 if (!$lEmail) {
                     throw new Exception($this->translate->_('Email não enviado. Favor contate o suporte da prefeitura.'));
                 }
             }
             $sMensagemErro = 'Cadastro efetuado com sucesso.<br>';
             $sMensagemErro .= 'Siga as instruções enviadas para o seu email para continuar o cadastro.';
             $aRetornoJson['status'] = TRUE;
             $aRetornoJson['url'] = $this->view->serverUrl();
             $aRetornoJson['success'] = $this->translate->_($sMensagemErro);
             $oDoctrine->getConnection()->commit();
         } catch (Exception $oErro) {
             $oDoctrine->getConnection()->rollback();
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'][] = $oErro->getMessage();
         }
     } else {
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['fields'] = array_keys($oForm->getMessages());
         $aRetornoJson['error'][] = $this->translate->_('Preencha os dados corretamente.');
     }
     // Retorna um json com mensagens de erro ou sucesso
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
 /**
  * Método responsável pelo envio de email no cancelamento ou na solicitação do mesmo
  * @param  Contribuinte_Model_Nota $oNota
  * @param  array                   $aDados
  * @param  array                   $aEmailBCC
  * @param  boolean                 $lSolicitacao
  * @param  string                  $sJustificativa
  * @return string|null
  * @throws Exception
  */
 private function enviarEmailCancelamento($oNota, $aDados, $aEmailBCC, $lSolicitacao = FALSE, $sJustificativa = null)
 {
     try {
         $oValidadorEmail = new Zend_Validate_EmailAddress();
         $emailTO = $oNota->getT_email();
         $sMensagemRetorno = NULL;
         if ($oValidadorEmail->isValid($emailTO) || !empty($aDados['email']) && $oValidadorEmail->isValid($aDados['email']) || count($aEmailBCC) > 0) {
             $iInscricaoMunicipal = $oNota->getP_im();
             $oContribuinte = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($iInscricaoMunicipal);
             $this->view->justificativa = $sJustificativa;
             $this->view->solicitacao = $lSolicitacao;
             $this->view->nota = $oNota;
             $this->view->tomadorNome = $oNota->getT_razao_social();
             $this->view->prestadorNome = $oContribuinte->getNome();
             $this->view->prestadorCnpj = DBSeller_Helper_Number_Format::maskCPF_CNPJ($oContribuinte->getCgcCpf());
             $this->view->nfseNumero = $oNota->getNota();
             $this->view->nfseUrl = $oNota->getUrlVerificacaoNota();
             $this->mensagem = $this->view->render('nota/email-emissao.phtml');
             $aArquivoPdfNfse = $this->getNotaImpressao($oNota->getCod_verificacao(), TRUE, TRUE);
             // Verifica se foi mudado o e-mail do Tomador para enviar uma cópia oculta do cancelamento
             if (!empty($aDados['email']) && $aDados['email'] != $oNota->getT_email() && $oValidadorEmail->isValid($aDados['email'])) {
                 $emailTO = $aDados['email'];
                 if ($oValidadorEmail->isValid($oNota->getT_email())) {
                     $aEmailBCC[] = $oNota->getT_email();
                 }
                 $sMensagemRetorno = "Cancelamento efetuado com sucesso.<br>Email foi enviado para {$emailTO}";
             }
             /*Caso não haja email cadastrado na nota e nem email informado no cancelamento,
               ou se for uma solicitação de cancelamento, o primeiro email de fiscal é colocado
               como destinatário principal para que seja possível o envio*/
             if (is_null($emailTO) || empty($emailTO) || $lSolicitacao) {
                 $emailTO = $aEmailBCC[0];
                 unset($aEmailBCC[0]);
                 if ($lSolicitacao) {
                     $sMensagemRetorno = "Cancelamento solicitado com sucesso.<br>Email foi enviado para {$emailTO}";
                 }
             }
             // Envia Email
             DBSeller_Helper_Mail_Mail::sendAttachment($emailTO, "Nota Fiscal Eletrônica nº {$oNota->getNota()}", $this->mensagem, $aArquivoPdfNfse, $aEmailBCC);
             // Apaga o arquivo temporario gerado para envio do email
             unlink($aArquivoPdfNfse['location']);
             return $sMensagemRetorno;
         }
     } catch (Exception $oError) {
         throw $oError;
     }
 }
 /**
  * Executa o envio do protocolo por email via ajax
  */
 public function enviarEmailAction()
 {
     $aParametros = $this->getRequest()->getParams();
     $oForm = new Administrativo_Form_ProtocoloEnvioEmail();
     $oForm->populate($aParametros);
     /**
      * Parametros de retorno do AJAX
      */
     $aRetornoJson = array('success' => FALSE, 'message' => NULL);
     if (!$oForm->isValid($aParametros)) {
         $aRetornoJson['fields'] = array_keys($oForm->getMessages());
         $aRetornoJson['error'][] = 'Preencha os dados corretamente.';
     } else {
         try {
             // Consulta os dados do protocolo
             $oProtocolo = Administrativo_Model_Protocolo::getByAttribute('id', $aParametros['id']);
             $aDadosProtocolo = $oProtocolo->toArray();
             // Gera o PDF com as informações do protocolo
             $aArquivoPDF = $this->gerarPDF($aDadosProtocolo);
             // Passa o objeto Protocolo para a view protocolo/email-emissao.phtml
             $this->view->oDadosProtocolo = $oProtocolo;
             // Renderiza a visão do corpo do email
             $sMensagemEmail = $this->view->render('protocolo/email-emissao.phtml');
             // Envia o protocolo por email
             $lEmail = DBSeller_Helper_Mail_Mail::sendAttachment($aParametros['email'], "Protocolo nº {$oProtocolo->getProtocolo()}", $sMensagemEmail, $aArquivoPDF);
             /**
              * Verifica se o e-mail foi enviado com sucesso
              */
             if ($lEmail) {
                 $aRetornoJson['success'] = TRUE;
                 $aRetornoJson['message'] = 'Email enviado com sucesso';
             } else {
                 throw new Exception('Erro ao enviar o email');
             }
         } catch (Exception $oErro) {
             $aRetornoJson['error'][] = $oErro->getMessage();
         }
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }