/** * @param \PhpSigep\Model\VerificaDisponibilidadeServico $params * @return Result<\PhpSigep\Model\VerificaDisponibilidadeServicoResposta> */ public function execute(\PhpSigep\Model\VerificaDisponibilidadeServico $params) { $servicosDePostagem = $params->getServicos(); $codigoDosServicos = array_map(array($this, 'arrayMapCallback'), $servicosDePostagem); $soapArgs = array('codAdministrativo' => $params->getAccessData()->getCodAdministrativo(), 'numeroServico' => implode(',', $codigoDosServicos), 'cepOrigem' => $params->getCepOrigem(), 'cepDestino' => $params->getCepDestino(), 'usuario' => $params->getAccessData()->getUsuario(), 'senha' => $params->getAccessData()->getSenha()); $cacheKey = md5(serialize($soapArgs)); $cache = Bootstrap::getConfig()->getCacheInstance(); if ($cachedResult = $cache->getItem($cacheKey)) { return unserialize($cachedResult); } $r = SoapClientFactory::getSoapClient()->verificaDisponibilidadeServico($soapArgs); $errorCode = null; $errorMsg = null; $result = new Result(); if (!$r) { $errorCode = 0; } else { if ($r instanceof \SoapFault) { $errorCode = $r->getCode(); $errorMsg = SoapClientFactory::convertEncoding($r->getMessage()); $result->setSoapFault($r); } else { if ($r instanceof \stdClass && property_exists($r, 'return')) { $result->setResult(new VerificaDisponibilidadeServicoResposta(array('disponivel' => (bool) $r->return))); $cache->setItem($cacheKey, serialize($result)); } else { $errorCode = 0; $errorMsg = "A resposta do Correios não está no formato esperado."; } } } $result->setErrorCode($errorCode); $result->setErrorMsg($errorMsg); return $result; }
public static function getSoapCalcPrecoPrazo() { if (!self::$_soapCalcPrecoPrazo) { $wsdl = Bootstrap::getConfig()->getWsdlCalcPrecoPrazo(); self::$_soapCalcPrecoPrazo = new \SoapClient($wsdl, array("trace" => Bootstrap::getConfig()->getEnv() != Config::ENV_PRODUCTION, "exceptions" => Bootstrap::getConfig()->getEnv() != Config::ENV_PRODUCTION, 'encoding' => self::WEB_SERVICE_CHARSET, 'connection_timeout' => 60)); } return self::$_soapCalcPrecoPrazo; }
/** * Atalho para criar uma {@link AccessData} com os dados do ambiente de homologação. */ public function __construct() { parent::__construct(array('usuario' => 'sigep', 'senha' => 'n5f9t8', 'codAdministrativo' => '08082650', 'numeroContrato' => '9912208555', 'cartaoPostagem' => '0057018901', 'cnpjEmpresa' => '34028316000103', 'anoContrato' => null, 'diretoria' => new Diretoria(Diretoria::DIRETORIA_DR_BRASILIA))); try { \PhpSigep\Bootstrap::getConfig()->setEnv(\PhpSigep\Config::ENV_DEVELOPMENT); } catch (\Exception $e) { } }
public static function getSoapCalcPrecoPrazo() { if (!self::$_soapCalcPrecoPrazo) { $wsdl = Bootstrap::getConfig()->getWsdlCalcPrecoPrazo(); self::$_soapCalcPrecoPrazo = new \SoapClient($wsdl, array("trace" => Bootstrap::getConfig()->getEnv() != Config::ENV_PRODUCTION, "exceptions" => Bootstrap::getConfig()->getEnv() != Config::ENV_PRODUCTION, 'encoding' => self::WEB_SERVICE_CHARSET, 'connection_timeout' => 60, 'stream_context' => stream_context_create(array('ssl' => array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true))))); } return self::$_soapCalcPrecoPrazo; }
public static function getRastreioObjetos() { if (!self::$_soapRastrearObjetos) { $wsdl = Bootstrap::getConfig()->getWsdlRastrearObjetos(); $opts = array('ssl' => array('ciphers' => 'RC4-SHA', 'verify_peer' => false, 'verify_peer_name' => false)); // SOAP 1.1 client $params = array('encoding' => self::WEB_SERVICE_CHARSET, 'verifypeer' => false, 'verifyhost' => false, 'soap_version' => SOAP_1_1, 'trace' => Bootstrap::getConfig()->getEnv() != Config::ENV_PRODUCTION, 'exceptions' => Bootstrap::getConfig()->getEnv() != Config::ENV_PRODUCTION, "connection_timeout" => 180, 'stream_context' => stream_context_create($opts)); self::$_soapRastrearObjetos = new \SoapClient($wsdl, $params); } return self::$_soapRastrearObjetos; }
/** * @param \PhpSigep\Model\CalcPrecoPrazo $params * * @throws Exception * @throws \Exception * @return Result<\PhpSigep\Model\CalcPrecoPrazoRespostaIterator[]> */ public function execute(\PhpSigep\Model\CalcPrecoPrazo $params) { $larguraMinima = 0; $alturaMinima = 0; $comprimentoMinimo = 16; $diametroMinimo = 0; $tipoEmbalagem = $params->getDimensao()->getTipo(); $ehEnvelope = false; if ($tipoEmbalagem == Dimensao::TIPO_ENVELOPE) { $ehEnvelope = true; $formatoEncomenda = 3; $larguraMinima = 11; } else { if ($tipoEmbalagem == Dimensao::TIPO_PACOTE_CAIXA) { $formatoEncomenda = 1; $alturaMinima = 2; $larguraMinima = 11; } else { if ($tipoEmbalagem == Dimensao::TIPO_ROLO_CILINDRO) { $formatoEncomenda = 2; $comprimentoMinimo = 18; $diametroMinimo = 5; } else { throw new Exception('Tipo de embalagem "' . $tipoEmbalagem . '" não reconhecido.'); } } } $maoPropria = false; $valorDeclarado = 0; $avisoRecebimento = false; $servicosAdicionais = $params->getServicosAdicionais(); $servicosAdicionais = $servicosAdicionais ? $servicosAdicionais : array(); foreach ($servicosAdicionais as $servicoAdicional) { if ($servicoAdicional->is(ServicoAdicional::SERVICE_MAO_PROPRIA)) { $maoPropria = true; } else { if ($servicoAdicional->is(ServicoAdicional::SERVICE_VALOR_DECLARADO)) { if (!$servicoAdicional->getValorDeclarado()) { throw new Exception('Para usar o serviço "valor declarado" é necessário declarar o valor da mercadoria.'); } $valorDeclarado = $servicoAdicional->getValorDeclarado(); } else { if ($servicoAdicional->is(ServicoAdicional::SERVICE_AVISO_DE_RECEBIMENTO)) { $avisoRecebimento = true; } } } } $servivosDePostagem = array(); /** @var $servivoDePostagem ServicoDePostagem */ foreach ($params->getServicosPostagem() as $servivoDePostagem) { $servivosDePostagem[] = $servivoDePostagem->getCodigo(); } $ajustarDimensaoMinima = $params->getAjustarDimensaoMinima(); $comprimento = (int) $params->getDimensao()->getComprimento(); $comprimento = $comprimento < $comprimentoMinimo && $ajustarDimensaoMinima ? $comprimentoMinimo : $comprimento; $altura = $ehEnvelope ? 0 : (int) $params->getDimensao()->getAltura(); $altura = $altura < $alturaMinima && $ajustarDimensaoMinima ? $alturaMinima : $altura; $largura = (int) $params->getDimensao()->getLargura(); $largura = $largura < $larguraMinima && $ajustarDimensaoMinima ? $larguraMinima : $largura; $diametro = (int) $params->getDimensao()->getDiametro(); $diametro = $diametro < $diametroMinimo && $ajustarDimensaoMinima ? $diametroMinimo : $largura; $soapArgs = array('nCdEmpresa' => $params->getAccessData()->getCodAdministrativo(), 'sDsSenha' => $params->getAccessData()->getSenha(), 'nCdServico' => implode(',', $servivosDePostagem), 'sCepOrigem' => str_replace('-', '', $params->getCepOrigem()), 'sCepDestino' => str_replace('-', '', $params->getCepDestino()), 'nVlPeso' => $params->getPeso(), 'nCdFormato' => $formatoEncomenda, 'nVlComprimento' => $comprimento, 'nVlAltura' => $altura, 'nVlLargura' => $largura, 'nVlDiametro' => $diametro, 'sCdMaoPropria' => $maoPropria ? 'S' : 'N', 'nVlValorDeclarado' => $valorDeclarado, 'sCdAvisoRecebimento' => $avisoRecebimento ? 'S' : 'N'); $cacheKey = md5(serialize($soapArgs)); $cache = Bootstrap::getConfig()->getCacheInstance(); if ($cachedResult = $cache->getItem($cacheKey)) { return unserialize($cachedResult); } $result = new Result(); try { $r = SoapClientFactory::getSoapCalcPrecoPrazo()->calcPrecoPrazo($soapArgs); } catch (\Exception $e) { $message = $e->getMessage(); if ($message == 'Service Unavailable') { if (!self::$calcPrecosPrazosServiceUnavailable) { //Tenta mais uma vez self::$calcPrecosPrazosServiceUnavailable = true; sleep(1); return $this->calcPrecoPrazo($params); } } if ($e instanceof \SoapFault) { $result->setIsSoapFault(true); $result->setErrorCode($e->getCode()); $result->setErrorMsg(SoapClientFactory::convertEncoding($e->getMessage())); } else { $result->setErrorCode($e->getCode()); $result->setErrorMsg($e->getMessage()); } } // if (class_exists('\StaLib_Logger')) { // \StaLib_Logger::log('Retorno SIGEP: ' . print_r($r, true)); // } $retorno = array(); if (is_object($r) && $r->CalcPrecoPrazoResult && is_object($r->CalcPrecoPrazoResult) && $r->CalcPrecoPrazoResult->Servicos && is_object($r->CalcPrecoPrazoResult->Servicos)) { if ($r->CalcPrecoPrazoResult->Servicos->cServico) { $servicos = $r->CalcPrecoPrazoResult->Servicos->cServico; $servicos = is_array($servicos) ? $servicos : array($servicos); foreach ($servicos as $servico) { $valor = (double) str_replace(',', '.', str_replace('.', '', $servico->Valor)); $valorMaoPropria = str_replace('.', '', $servico->ValorMaoPropria); $valorMaoPropria = (double) str_replace(',', '.', $valorMaoPropria); $valorAvisoRecebimento = str_replace('.', '', $servico->ValorAvisoRecebimento); $valorAvisoRecebimento = (double) str_replace(',', '.', $valorAvisoRecebimento); $valorValorDeclarado = str_replace('.', '', $servico->ValorValorDeclarado); $valorValorDeclarado = (double) str_replace(',', '.', $valorValorDeclarado); $item = new \PhpSigep\Model\CalcPrecoPrazoResposta(array('servico' => new \PhpSigep\Model\ServicoDePostagem($servico->Codigo), 'valor' => $valor, 'prazoEntrega' => (int) $servico->PrazoEntrega, 'valorMaoPropria' => $valorMaoPropria, 'valorAvisoRecebimento' => $valorAvisoRecebimento, 'valorValorDeclarado' => $valorValorDeclarado, 'entregaDomiciliar' => $servico->EntregaDomiciliar == 'S', 'entregaSabado' => $servico->EntregaSabado == 'S')); $item->setErroCodigo($servico->Erro); if ($item->getErroCodigo() && ($item->getErroCodigo() != 10 || !$item->getValor())) { // Se entrar aqui significa que tem Erro e que esse Erro é diferente de 10 ou o Erro é 10 mas não // não foi retornando o Valor. // O erro "10" é mais um aviso do que um erro. Se for erro 10 e tiver valor, não considera um erro. $msgErro = $servico->MsgErro; $msgErro = SoapClientFactory::convertEncoding($msgErro); $item->setErroMsg($msgErro); } else { $item->setErroCodigo(null); } $retorno[] = $item; } } else { $result->setErrorCode(0); $result->setErrorMsg('A resposta do Correios não está no formato esperado. Detalhes do problema: "Faltando a entrada \'cServico\'."'); } } else { $result->setErrorCode(0); if (is_object($r)) { $result->setErrorMsg('A resposta do Correios não está no formato esperado. Detalhes do problema: "A resposta recebida é um objeto, mas este objeto não possui todos as entradas necessárias."'); } else { $result->setErrorMsg('A resposta do Correios não está no formato esperado. Resposta recebida: "' . $r . '"'); } } $retornoIterator = new \PhpSigep\Model\CalcPrecoPrazoRespostaIterator($retorno); $result->setResult($retorno); if (!$result->hasError()) { if ($retornoIterator->todosTemErro()) { $erros = array(); /** @var $retItem \PhpSigep\Model\CalcPrecoPrazoResposta */ foreach ($retornoIterator as $retItem) { $erros[$retItem->getErroCodigo()] = $retItem; } /** @var $exception \PhpSigep\Model\CalcPrecoPrazoResposta */ $exception = null; $errosPrioritarios = array('999', '-3', '-2', '-4', '-33', '7'); foreach ($errosPrioritarios as $erroPrioritario) { if (isset($erros[$erroPrioritario])) { $exception = $erros[$erroPrioritario]; break; } } if (!$exception) { $exception = reset($erros); } $result->setErrorCode($exception->getErroCodigo()); $result->setErrorMsg($exception->getErroMsg()); } else { $cache->setItem($cacheKey, serialize($result)); } } return $result; }
<?php // Altera as configurações do PHP para mostrar todos os erros, já que este é apenas um script de exemplo. // No seu ambiente de produção, você não vai precisar alterar estas configurações. ini_set('display_errors', 1); ini_set('display_startup_errors', 1); ini_set('error_reporting', 'E_ALL|E_STRICT'); error_reporting(E_ALL); header('Content-Type: text/html; charset=utf-8'); $autoload = __DIR__ . '/../vendor/autoload.php'; if (file_exists($autoload)) { require_once $autoload; } if (!class_exists('PhpSigepFPDF')) { throw new RuntimeException('Não encontrei a classe PhpSigepFPDF. Execute "php composer.phar install" ou baixe o projeto ' . 'https://github.com/stavarengo/php-sigep-fpdf manualmente e adicione a classe no seu path.'); } // Configura o php-sigep // Se você não usou o composer é necessário carregar o script Boostrap.php manualmente. // Caso você tenha usado o composer o Bootstrap PHP será carregado automáticamente pelo autoload (quando necessário). require_once __DIR__ . '/../src/PhpSigep/Bootstrap.php'; $accessDataParaAmbienteDeHomologacao = new \PhpSigep\Model\AccessDataHomologacao(); $config = new \PhpSigep\Config(); $config->setAccessData($accessDataParaAmbienteDeHomologacao); $config->setEnv(\PhpSigep\Config::ENV_PRODUCTION); $config->setCacheOptions(array('storageOptions' => array('enabled' => false, 'ttl' => 10, 'cacheDir' => sys_get_temp_dir()))); \PhpSigep\Bootstrap::start($config);
private function _render($dest = '', $filename = '') { $un = 72 / 25.4; $wFourAreas = $this->pdf->w; $hFourAreas = $this->pdf->h; //-Menos 1.5CM porque algumas impressoras não conseguem imprimir nos ultimos 1cm da página $tMarginFourAreas = 0; $rMarginFourAreas = 0; $bMarginFourAreas = 0; $lMarginFourAreas = 0; $wInnerFourAreas = $wFourAreas - $lMarginFourAreas - $rMarginFourAreas; $hInnerFourAreas = 0; $margins = array(array('l' => $lMarginFourAreas, 'r' => $wFourAreas - $rMarginFourAreas, 't' => $tMarginFourAreas, 'b' => $hFourAreas - $bMarginFourAreas), array('l' => $wFourAreas + $lMarginFourAreas, 'r' => $wFourAreas * 2 - $rMarginFourAreas, 't' => $tMarginFourAreas, 'b' => $hFourAreas - $bMarginFourAreas), array('l' => $lMarginFourAreas, 'r' => $wFourAreas - $rMarginFourAreas, 't' => $hFourAreas + $tMarginFourAreas, 'b' => $hFourAreas * 2 - $bMarginFourAreas), array('l' => $wFourAreas + $lMarginFourAreas, 'r' => $wFourAreas * 2 - $rMarginFourAreas, 't' => $hFourAreas + $tMarginFourAreas, 'b' => $hFourAreas * 2 - $bMarginFourAreas)); $objetosPostais = $this->plp->getEncomendas(); $total = count($objetosPostais); while (count($objetosPostais)) { $this->pdf->AddPage(); if (Bootstrap::getConfig()->getSimular()) { $this->pdf->SetFont('Arial', 'B', 50); $this->pdf->SetTextColor(240, 240, 240); $this->pdf->SetXY($lMarginFourAreas, $hFourAreas - $this->pdf->getLineHeigth()); $this->pdf->MultiCellXp($this->pdf->w - $this->pdf->lMargin - $this->pdf->rMargin, "Simulação Documento sem valor", null, 0, 'C'); $this->pdf->SetXY($lMarginFourAreas, $margins[2]['t'] + $hFourAreas - $this->pdf->getLineHeigth()); $this->pdf->MultiCellXp($this->pdf->w - $this->pdf->lMargin - $this->pdf->rMargin, "Simulação Documento sem valor", null, 0, 'C'); $this->pdf->SetTextColor(0, 0, 0); } // $crossMargin = 50; // $this->pdf->SetDrawColor(200, 200, 200); // for ($lineY = $crossMargin; $lineY < $this->pdf->h - $crossMargin; $lineY += 10) { // $this->pdf->Line($wFourAreas, $lineY, $wFourAreas, $lineY + 3); // } // for ($lineX = $crossMargin; $lineX < $this->pdf->w - $crossMargin; $lineX += 10) { // $this->pdf->Line($lineX, $hFourAreas, $lineX + 3, $hFourAreas); // } $this->pdf->SetDrawColor(0, 0, 0); for ($area = 0; $area < 1; $area++) { if (!count($objetosPostais)) { break; } /** @var $objetoPostal \PhpSigep\Model\ObjetoPostal */ $objetoPostal = array_shift($objetosPostais); $lPosFourAreas = $margins[$area]['l']; $rPosFourAreas = $margins[$area]['r']; $tPosFourAreas = $margins[$area]['t']; $bPosFourAreas = $margins[$area]['b']; // Logo $this->pdf->SetXY($lPosFourAreas, $tPosFourAreas); $this->setFillColor(222, 222, 222); $headerColWidth = $wInnerFourAreas / 3; $headerHeigth = 106; if ($this->logoFile) { $this->pdf->Image($this->logoFile, 3, 0, 25); } // Chancela $this->pdf->SetXY(66, $this->pdf->GetY() + 3); $this->setFillColor(150, 150, 200); $wChancela = 101.5; $hChancela = 72.5; $lPosChancela = 66; $tPosChancela = $this->pdf->GetY(); $servicoDePostagem = $objetoPostal->getServicoDePostagem(); $nomeRemetente = $this->plp->getRemetente()->getNome(); $accessData = $this->plp->getAccessData(); switch ($servicoDePostagem->getCodigo()) { case ServicoDePostagem::SERVICE_PAC_41068: case ServicoDePostagem::SERVICE_PAC_41106: case ServicoDePostagem::SERVICE_PAC_GRANDES_FORMATOS: if ($this->layoutPac === CartaoDePostagem::TYPE_CHANCELA_PAC) { $chancela = new Pac($lPosChancela, $tPosChancela, $nomeRemetente, $accessData); } else { $chancela = new Pac2016($lPosChancela, $tPosChancela, $nomeRemetente, $accessData); } break; case ServicoDePostagem::SERVICE_E_SEDEX_STANDARD: if ($this->layoutSedex === CartaoDePostagem::TYPE_CHANCELA_SEDEX) { $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_E_SEDEX, $accessData); } else { $chancela = new Sedex2016($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_E_SEDEX, $accessData); } break; case ServicoDePostagem::SERVICE_SEDEX_40096: case ServicoDePostagem::SERVICE_SEDEX_40436: case ServicoDePostagem::SERVICE_SEDEX_40444: case ServicoDePostagem::SERVICE_SEDEX_A_VISTA: case ServicoDePostagem::SERVICE_SEDEX_VAREJO_A_COBRAR: case ServicoDePostagem::SERVICE_SEDEX_PAGAMENTO_NA_ENTREGA: case ServicoDePostagem::SERVICE_SEDEX_AGRUPADO: if ($this->layoutSedex === CartaoDePostagem::TYPE_CHANCELA_SEDEX) { $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX, $accessData); } else { $chancela = new Sedex2016($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX, $accessData); } break; case ServicoDePostagem::SERVICE_SEDEX_12: if ($this->layoutSedex === CartaoDePostagem::TYPE_CHANCELA_SEDEX) { $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_12, $accessData); } else { $chancela = new Sedex2016($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_12, $accessData); } break; case ServicoDePostagem::SERVICE_SEDEX_10: case ServicoDePostagem::SERVICE_SEDEX_10_PACOTE: if ($this->layoutSedex === CartaoDePostagem::TYPE_CHANCELA_SEDEX) { $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_10, $accessData); } else { $chancela = new Sedex2016($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_10, $accessData); } break; case ServicoDePostagem::SERVICE_SEDEX_HOJE_40290: case ServicoDePostagem::SERVICE_SEDEX_HOJE_40878: if ($this->layoutSedex === CartaoDePostagem::TYPE_CHANCELA_SEDEX) { $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_HOJE, $accessData); } else { $chancela = new Sedex2016($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_HOJE, $accessData); } break; case ServicoDePostagem::SERVICE_CARTA_COMERCIAL_A_FATURAR: case ServicoDePostagem::SERVICE_CARTA_REGISTRADA: if ($this->layoutCarta === CartaoDePostagem::TYPE_CHANCELA_CARTA) { $chancela = new Carta($lPosChancela, $tPosChancela, $nomeRemetente, $accessData); } else { $chancela = new Carta2016($lPosChancela, $tPosChancela, $nomeRemetente, $accessData); } break; case ServicoDePostagem::SERVICE_SEDEX_REVERSO: default: $chancela = null; break; } if ($chancela) { $chancela->draw($this->pdf); } // Título da etiqueta if ($this->idPlpCorreios > 0) { $lPosHeaderCol2 = $headerColWidth + $lPosFourAreas; // $this->pdf->SetXY($lPosHeaderCol2, $tPosFourAreas); // $this->setFillColor(200, 200, 200); // $this->pdf->SetFontSize(12); // $this->pdf->SetFont('', 'B'); // $this->t($headerColWidth, 'Cartão de Postagem', 2, 'C'); // Número da plp $this->pdf->SetXY($lPosHeaderCol2, $tPosFourAreas + 32); $this->setFillColor(150, 200, 200); $this->pdf->SetFont('', ''); $this->pdf->SetFontSize(9); $this->t($headerColWidth * 3, 'PLP: ' . $this->idPlpCorreios, 0, 'C'); } // Volume $this->setFillColor(100, 150, 200); $this->pdf->SetXY(0, 30); $nf = (double) $objetoPostal->getDestino()->getNumeroNotaFiscal(); if ($nf > 0) { $nf = ' NF: ' . $nf; } $numeroPedido = trim($objetoPostal->getDestino()->getNumeroPedido()); if (!empty($numeroPedido)) { $numeroPedido = ' Pedido: ' . $numeroPedido; } $this->pdf->SetFontSize(7); $this->t($this->pdf->w, 'Volume: 1/1 ' . 'Peso(kg): ' . (double) $objetoPostal->getPeso() . $nf . $numeroPedido, 1, 'C', null); // Número da etiqueta $this->setFillColor(100, 100, 200); $this->pdf->SetXY(0, $this->pdf->GetY() + 1); $this->pdf->SetFontSize(9); $this->pdf->SetFont('', 'B'); $etiquetaComDv = $objetoPostal->getEtiqueta()->getEtiquetaComDv(); $this->t($wInnerFourAreas, $etiquetaComDv, 1, 'C'); // Código de barras da etiqueta $this->setFillColor(0, 0, 0); $tPosEtiquetaBarCode = $this->pdf->GetY(); $hEtiquetaBarCode = 22; $wEtiquetaBarCode = 78; $code128 = new \PhpSigep\Pdf\Script\BarCode128(); $code128->draw($this->pdf, ($this->pdf->w - $wEtiquetaBarCode) / 2, $tPosEtiquetaBarCode, $etiquetaComDv, $wEtiquetaBarCode, $hEtiquetaBarCode); // Nome legivel, doc e rubrica // $this->pdf->SetFontSize(7); $this->pdf->SetXY(1, $this->pdf->GetY() + 23); $this->t(0, 'Nome Legível:___________________________________________', 1, 'L', null); $this->pdf->SetXY(1, $this->pdf->GetY() + 1); $this->t(0, 'Documento:_______________________Rubrica:_____________________', 1, 'L', null); // Destinatário $wAddressLeftCol = $this->pdf->w - 5; $tPosAfterNameBlock = 71; $t = $this->writeDestinatario($lPosFourAreas, $tPosAfterNameBlock, $wAddressLeftCol, $objetoPostal); $destino = $objetoPostal->getDestino(); if ($destino instanceof \PhpSigep\Model\DestinoNacional) { // Número do CEP $cep = $destino->getCep(); $cep = preg_replace('/[^\\d]/', '', $cep); $tPosCepBarCode = $t + 1; // Etiqueta do CEP $hCepBarCode = 22; $wCepBarCode = 47; $this->setFillColor(0, 0, 0); $code128->draw($this->pdf, 6, $tPosCepBarCode, $cep, $wCepBarCode, $hCepBarCode); $valorDeclarado = null; $sSer = ""; foreach ($objetoPostal->getServicosAdicionais() as $servicoAdicional) { if ($servicoAdicional->is(ServicoAdicional::SERVICE_AVISO_DE_RECEBIMENTO)) { $temAr = true; $sSer = $sSer . "01"; } else { if ($servicoAdicional->is(ServicoAdicional::SERVICE_MAO_PROPRIA)) { $temMp = true; $sSer = $sSer . "02"; } else { if ($servicoAdicional->is(ServicoAdicional::SERVICE_VALOR_DECLARADO)) { $temVd = true; $sSer = $sSer . "19"; $valorDeclarado = $servicoAdicional->getValorDeclarado(); } else { if ($servicoAdicional->is(ServicoAdicional::SERVICE_REGISTRO)) { $temRe = true; $sSer = $sSer . "25"; } } } } } while (strlen($sSer) < 12) { $sSer = $sSer . "00"; } $sM2Dtext = $this->getM2Dstr($cep, $objetoPostal->getDestinatario()->getNumero(), $this->plp->getRemetente()->getCep(), $this->plp->getRemetente()->getNumero(), $etiquetaComDv, $sSer, $this->plp->getAccessData()->getCartaoPostagem(), $objetoPostal->getServicoDePostagem()->getCodigo(), $valorDeclarado, $objetoPostal->getDestinatario()->getTelefone()); require_once 'Semacode.php'; $semacode = new \Semacode(); $semaCodeGD = $semacode->asGDImage($sM2Dtext); $this->setFillColor(222, 222, 222); $this->pdf->gdImage($semaCodeGD, 35, 3, 25); imagedestroy($semaCodeGD); } $this->writeRemetente(0, $this->pdf->GetY() + $hCepBarCode + 5, $wAddressLeftCol, $this->plp->getRemetente()); } } if ($dest == 'S') { return $this->pdf->Output($filename, $dest); } else { $this->pdf->Output($filename, $dest); } }
private function addPage() { $pdf = $this->pdf; $pdf->AddPage(); if (Bootstrap::getConfig()->getSimular()) { $this->pdf->SetFont('Arial', 'B', 50); $this->pdf->SetTextColor(200, 200, 200); $hInner = $pdf->h - $pdf->tMargin - $pdf->bMargin; $lineHeigth = $pdf->getLineHeigth(); $pdf->SetY($hInner / 2 - $lineHeigth / 2); $this->pdf->MultiCellXp($this->pdf->w - $this->pdf->lMargin - $this->pdf->rMargin, "Simulação Documento sem valor", null, 0, 'C'); $this->pdf->SetTextColor(0, 0, 0); } $pdf->x = $pdf->lMargin; $pdf->y = $pdf->tMargin; }
private function _render() { $un = 72 / 25.4; $wFourAreas = $this->pdf->w / 2; $hFourAreas = ($this->pdf->h - $un * 15) / 2; //-Menos 1.5CM porque algumas impressoras não conseguem imprimir nos ultimos 1cm da página $tMarginFourAreas = $un * 5; $rMarginFourAreas = $un * 5; $bMarginFourAreas = $un * 5; $lMarginFourAreas = $un * 5; $wInnerFourAreas = $wFourAreas - $lMarginFourAreas - $rMarginFourAreas; $hInnerFourAreas = $hFourAreas - $tMarginFourAreas - $bMarginFourAreas; $margins = array(array('l' => $lMarginFourAreas, 'r' => $wFourAreas - $rMarginFourAreas, 't' => $tMarginFourAreas, 'b' => $hFourAreas - $bMarginFourAreas), array('l' => $wFourAreas + $lMarginFourAreas, 'r' => $wFourAreas * 2 - $rMarginFourAreas, 't' => $tMarginFourAreas, 'b' => $hFourAreas - $bMarginFourAreas), array('l' => $lMarginFourAreas, 'r' => $wFourAreas - $rMarginFourAreas, 't' => $hFourAreas + $tMarginFourAreas, 'b' => $hFourAreas * 2 - $bMarginFourAreas), array('l' => $wFourAreas + $lMarginFourAreas, 'r' => $wFourAreas * 2 - $rMarginFourAreas, 't' => $hFourAreas + $tMarginFourAreas, 'b' => $hFourAreas * 2 - $bMarginFourAreas)); $objetosPostais = $this->plp->getEncomendas(); $total = count($objetosPostais); while (count($objetosPostais)) { $this->pdf->AddPage(); if (Bootstrap::getConfig()->getSimular()) { $this->pdf->SetFont('Arial', 'B', 50); $this->pdf->SetTextColor(240, 240, 240); $this->pdf->SetXY($lMarginFourAreas, $hFourAreas / 2 - $this->pdf->getLineHeigth() / 2); $this->pdf->MultiCellXp($this->pdf->w - $this->pdf->lMargin - $this->pdf->rMargin, "Simulação Documento sem valor", null, 0, 'C'); $this->pdf->SetXY($lMarginFourAreas, $margins[2]['t'] + $hFourAreas / 2 - $this->pdf->getLineHeigth() / 2); $this->pdf->MultiCellXp($this->pdf->w - $this->pdf->lMargin - $this->pdf->rMargin, "Simulação Documento sem valor", null, 0, 'C'); $this->pdf->SetTextColor(0, 0, 0); } $crossMargin = 50; $this->pdf->SetDrawColor(200, 200, 200); for ($lineY = $crossMargin; $lineY < $this->pdf->h - $crossMargin; $lineY += 10) { $this->pdf->Line($wFourAreas, $lineY, $wFourAreas, $lineY + 3); } for ($lineX = $crossMargin; $lineX < $this->pdf->w - $crossMargin; $lineX += 10) { $this->pdf->Line($lineX, $hFourAreas, $lineX + 3, $hFourAreas); } $this->pdf->SetDrawColor(0, 0, 0); for ($area = 0; $area < 4; $area++) { if (!count($objetosPostais)) { break; } /** @var $objetoPostal \PhpSigep\Model\ObjetoPostal */ $objetoPostal = array_shift($objetosPostais); $lPosFourAreas = $margins[$area]['l']; $rPosFourAreas = $margins[$area]['r']; $tPosFourAreas = $margins[$area]['t']; $bPosFourAreas = $margins[$area]['b']; // Logo $this->pdf->SetXY($lPosFourAreas, $tPosFourAreas); $this->setFillColor(222, 222, 222); $headerColWidth = $wInnerFourAreas / 3; $headerHeigth = 106; if ($this->logoFile) { $this->pdf->Image($this->logoFile); } $this->pdf->Line($lPosFourAreas, $tPosFourAreas, $lPosFourAreas, $bPosFourAreas); $this->pdf->Line($lPosFourAreas, $tPosFourAreas, $rPosFourAreas, $tPosFourAreas); $this->pdf->Line($rPosFourAreas, $tPosFourAreas, $rPosFourAreas, $bPosFourAreas); $this->pdf->Line($lPosFourAreas, $bPosFourAreas, $rPosFourAreas, $bPosFourAreas); // $this->t($headerColWidth, 'Logo', 0, 'C', $headerHeigth); $this->pdf->Line($headerColWidth + $lPosFourAreas, $tPosFourAreas, $headerColWidth + $lPosFourAreas, $tPosFourAreas + $headerHeigth); $this->pdf->Line($lPosFourAreas, $tPosFourAreas + $headerHeigth, $lPosFourAreas + $headerColWidth, $tPosFourAreas + $headerHeigth); // Título da etiqueta $lPosHeaderCol2 = $headerColWidth + $lPosFourAreas; $this->pdf->SetXY($lPosHeaderCol2, $tPosFourAreas); $this->setFillColor(200, 200, 200); $this->pdf->SetFontSize(15); $this->pdf->SetFont('', 'B'); $this->t($headerColWidth * 2, 'Cartão de Postagem', 2, 'C'); // Número da plp $this->setFillColor(150, 200, 200); $this->pdf->SetFont('', ''); $this->pdf->SetFontSize(10); $this->t($headerColWidth * 2, $this->idPlpCorreios, 0, 'C'); // Chancela $this->setFillColor(150, 150, 200); $wChancela = 101.5; $hChancela = 72.5; $lPosChancela = $rPosFourAreas - $wChancela; $bPosHeader = $tPosFourAreas + $headerHeigth; $tPosChancela = $bPosHeader - $hChancela; $this->pdf->SetXY($lPosChancela, $tPosChancela); //$this->t($wChancela, 'Chancela', 0, 'C', $hChancela); $servicoDePostagem = $objetoPostal->getServicoDePostagem(); $nomeRemetente = $this->plp->getRemetente()->getNome(); $accessData = $this->plp->getAccessData(); switch ($servicoDePostagem->getCodigo()) { case ServicoDePostagem::SERVICE_PAC_41068: case ServicoDePostagem::SERVICE_PAC_41106: case ServicoDePostagem::SERVICE_PAC_GRANDES_FORMATOS: $chancela = new Pac($lPosChancela, $tPosChancela, $nomeRemetente, $accessData); break; case ServicoDePostagem::SERVICE_E_SEDEX_STANDARD: $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_E_SEDEX, $accessData); break; case ServicoDePostagem::SERVICE_SEDEX_40096: case ServicoDePostagem::SERVICE_SEDEX_40436: case ServicoDePostagem::SERVICE_SEDEX_40444: case ServicoDePostagem::SERVICE_SEDEX_A_VISTA: case ServicoDePostagem::SERVICE_SEDEX_VAREJO_A_COBRAR: case ServicoDePostagem::SERVICE_SEDEX_PAGAMENTO_NA_ENTREGA: case ServicoDePostagem::SERVICE_SEDEX_AGRUPADO: $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX, $accessData); break; case ServicoDePostagem::SERVICE_SEDEX_12: $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_12, $accessData); break; case ServicoDePostagem::SERVICE_SEDEX_10: case ServicoDePostagem::SERVICE_SEDEX_10_PACOTE: $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_10, $accessData); break; case ServicoDePostagem::SERVICE_SEDEX_HOJE_40290: case ServicoDePostagem::SERVICE_SEDEX_HOJE_40878: $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_HOJE, $accessData); break; case ServicoDePostagem::SERVICE_CARTA_COMERCIAL_A_FATURAR: case ServicoDePostagem::SERVICE_CARTA_REGISTRADA: $chancela = new Carta($lPosChancela, $tPosChancela, $nomeRemetente, $accessData); break; case ServicoDePostagem::SERVICE_SEDEX_REVERSO: default: $chancela = null; break; } if ($chancela) { $chancela->draw($this->pdf); } // Peso $this->setFillColor(100, 150, 200); $this->pdf->SetFontSize(9); $lineHeigth = $this->pdf->getLineHeigth(100 / $this->pdf->k); $this->pdf->SetXY($lPosHeaderCol2, $bPosHeader - $lineHeigth * 2); $this->t($lPosChancela - $lPosHeaderCol2, 'Peso: ' . (double) $objetoPostal->getPeso() . 'g', 2, 'C', $lineHeigth); // Volume $this->setFillColor(100, 150, 200); // $this->t($lPosChancela - $lPosHeaderCol2, 'Volume: ' . ($total - count($objetosPostais)) . '/' . $total, 0, 'C', $lineHeigth); $this->t($lPosChancela - $lPosHeaderCol2, 'Volume: 1/1', 0, 'C', $lineHeigth); // Número da etiqueta $this->setFillColor(100, 100, 200); $this->pdf->SetXY($lPosFourAreas, $bPosHeader + 5); $this->pdf->SetFontSize(10); $this->pdf->SetFont('', 'B'); $etiquetaComDv = $objetoPostal->getEtiqueta()->getEtiquetaComDv(); $this->t($wInnerFourAreas, $etiquetaComDv, 1, 'C'); // Código de barras da etiqueta $this->setFillColor(0, 0, 0); $hEtiquetaBarCode = 40; $tPosEtiquetaBarCode = $this->pdf->GetY(); $wEtiquetaBarCode = $un * 65.44; $code128 = new \PhpSigep\Pdf\Script\BarCode128(); $code128->draw($this->pdf, $lPosFourAreas + $wInnerFourAreas / 2 - $wEtiquetaBarCode / 2, $tPosEtiquetaBarCode, $etiquetaComDv, $wEtiquetaBarCode, $hEtiquetaBarCode); // Destinatário $wAddressLeftCol = $wInnerFourAreas / 4 * 2.2; $wAddressRightCol = $wInnerFourAreas - $wAddressLeftCol; $lAddressRigthCol = $wAddressLeftCol + $lPosFourAreas; $tPosAfterBarCode = $tPosEtiquetaBarCode + $hEtiquetaBarCode + 5; $t = $this->writeDestinatario($lPosFourAreas, $tPosAfterBarCode, $wAddressLeftCol, $objetoPostal); $t += $this->pdf->getLineHeigth() / 2; $this->writeRemetente($lPosFourAreas, $t, $wAddressLeftCol, $this->plp->getRemetente()); $destino = $objetoPostal->getDestino(); $hCepBarCode = 0; if ($destino instanceof \PhpSigep\Model\DestinoNacional) { // Número do CEP $cep = $destino->getCep(); $cep = preg_replace('/[^\\d]/', '', $cep); $this->setFillColor(215, 115, 15); $this->pdf->SetXY($lAddressRigthCol, $tPosAfterBarCode + 15); $this->t($wAddressRightCol, $cep, 2, 'C'); $tPosCepBarCode = $this->pdf->GetY(); // Etiqueta do CEP $hCepBarCode = 25; $wCepBarCode = $un * 38.44; $this->setFillColor(0, 0, 0); $code128->draw($this->pdf, $lAddressRigthCol + $wAddressRightCol / 2 - $wCepBarCode / 2, $tPosCepBarCode, $cep, $wCepBarCode, $hCepBarCode); } } } $this->pdf->Output(); }
/** * @return \PhpSigep\Model\AccessData */ public function getAccessData() { return $this->accessData ? $this->accessData : Bootstrap::getConfig(); }