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