/**
  * Metodo que está disponivel para ser consumido como soap.
  * Responsavel por cadastrar um comprovante de pagamento
  * 
  * @param string $fornecedorCpfCnpj
  * @param integer $itemId
  * @param string $tipo
  * @param integer $numero
  * @param string $dataEmissao
  * @param string $arquivoNome
  * @param string $arquivoConteudo
  * @param string $comprovanteTipo
  * @param string $comprovanteData
  * @param string $comprovanteJustificativa
  * @param double $comprovanteValor
  * @param string $serie
  * @param string $comprovanteJustificativa
  * @throws Exception
  * @return string Description
  */
 public function cadastrar($fornecedorCpfCnpj, $itemId, $tipo, $numero, $dataEmissao, $arquivoNome, $arquivoConteudo, $comprovanteTipo, $comprovanteData, $comprovanteValor, $comprovanteNumero, $serie = null, $comprovanteJustificativa = null)
 {
     try {
         /**
          *  @todo mover este trecho de buscar fornecedor para um model
          */
         $cnpjcpf = preg_replace('/\\.|-|\\//', '', $fornecedorCpfCnpj);
         $agentesDao = new Agentes();
         $fornecedores = $agentesDao->buscarFornecedor(array(' A.CNPJCPF = ? ' => $cnpjcpf));
         if (!$fornecedores->count()) {
             throw new Exception('Fornecedor não encontrado');
         }
         $fornecedor = $fornecedores->current();
         /**
          * @todo mover o trecho de arquivo para uma classe de model
          */
         $arquivo = base64_decode($arquivoConteudo);
         $filePath = tempnam("/tmp", "ComprovantePagamentoService_");
         file_put_contents($filePath, $arquivo);
         $_FILES['arquivo']['name'] = $arquivoNome;
         // nome
         $_FILES['arquivo']['tmp_name'] = $filePath;
         // nome temporário
         $_FILES['arquivo']['type'] = mime_content_type($filePath);
         // tipo
         $_FILES['arquivo']['size'] = filesize($filePath);
         // tamanho
         $arquivoModel = new ArquivoModel();
         $arquivoModel->cadastrar('arquivo');
         $comprovantePagamentoModel = new ComprovantePagamento(null, $fornecedor->idAgente, $itemId, constant("self::{$tipo}"), $numero, $serie, new DateTime($dataEmissao), $arquivoModel->getId(), constant("self::{$comprovanteTipo}"), new DateTime($comprovanteData), $comprovanteValor, $comprovanteNumero, $comprovanteJustificativa);
         $comprovantePagamentoModel->cadastrar();
     } catch (Exception $exception) {
         $mensagem = $exception->getMessage();
         if (false !== strpos($mensagem, 'DateTime::__construct()')) {
             $matches = array();
             preg_match('#string \\((.+)\\) at#', $mensagem, $matches);
             $mensagem = "A data \"{$matches[1]}\" está fora do formato aceito: \"yyyy-mm-dd\".";
         }
         new Exception($mensagem, null, $exception);
     }
 }
 /**
  * 
  */
 public function buscarfornecedorAction()
 {
     $this->_helper->layout->disableLayout();
     $post = Zend_Registry::get('post');
     $agentesDao = new Agentes();
     $cnpjcpf = preg_replace('/\\.|-|\\//', '', $post->cnpjcpf);
     $fornecedor = $agentesDao->buscarFornecedor(array(' A.CNPJCPF = ? ' => $cnpjcpf))->current();
     if ($fornecedor) {
         $this->view->fornecedor = array('retorno' => true, 'idAgente' => $fornecedor->idAgente, 'descricao' => utf8_encode($fornecedor->nome));
     } else {
         $this->view->fornecedor = array('retorno' => false, 'CNPJCPF' => $cnpjcpf);
     }
 }