/**
  * Hydrate a collection from a given dbal statement.
  * 
  * @param array $assoc
  * @param Doctrine\DBAL\Statement $stmt
  * @param PersistentCollection $coll
  */
 private function loadCollectionFromStatement($assoc, $stmt, $coll)
 {
     if (isset($assoc['indexBy'])) {
         while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
             $entity = $this->_createEntity($result);
             $coll->hydrateSet($this->_class->reflFields[$assoc['indexBy']]->getValue($entity), $entity);
         }
     } else {
         while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
             $coll->hydrateAdd($this->_createEntity($result));
         }
     }
     $stmt->closeCursor();
 }
 /**
  * Define os dados dos documentos substituídos
  *
  * @param \Doctrine\DBAL\Statement $oStatement
  * @param array                    $aParametros
  * @throws Exception
  */
 public function setDadosDocumentosSubstituidos(Doctrine\DBAL\Statement $oStatement, array $aParametros)
 {
     $this->SetFont('Arial', 'B', 8);
     $this->SetFillColor(201, 201, 201);
     $this->Cell(0, 5, utf8_decode('LANÇAMENTOS RETIDOS'), 1, 1, 'C', TRUE);
     $this->Ln(1);
     $aLarguraCelulas = array(6, 13, 10, 50, 25, 9, 12, 20, 20, 27, 85);
     $this->SetFillColor(230, 230, 230);
     $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Dia'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[1], 5, utf8_decode('Número'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[2], 5, utf8_decode('Série'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[3], 5, utf8_decode('Tipo'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[4], 5, utf8_decode('Situação'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[5], 5, utf8_decode('Cod.'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[6], 5, utf8_decode('Aliq.(%)'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[7], 5, utf8_decode('Base(R$)'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[8], 5, utf8_decode('ISS(R$)'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[9], 5, utf8_decode('CNPJ Tomador'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[10], 5, utf8_decode('Razão Tomador'), 1, NULL, NULL, TRUE);
     $this->SetFont('Arial', NULL, 8);
     try {
         // Processa o query
         $oStatement->execute($aParametros);
         if ($oStatement->rowCount() > 0) {
             $fTotalBase = 0;
             $fTotalIss = 0;
             // Varre a lista de documentos
             while ($aNota = $oStatement->fetch()) {
                 // Define o dia da emissão do documento
                 $sDiaEmissaoDocumento = substr($aNota['documento_data'], -2);
                 $this->Ln();
                 $this->Cell($aLarguraCelulas[0], 5, $sDiaEmissaoDocumento, 1, 0, 'C');
                 $this->Cell($aLarguraCelulas[1], 5, $aNota['documento_numero'], 1, 0, 'R');
                 $this->Cell($aLarguraCelulas[2], 5, $aNota['documento_serie'], 1, 0, 'R');
                 // Tipo de documento
                 if ($aNota['documento_classe'] == 'nfse') {
                     $sTipoNota = 'NFSe';
                     if ($aNota['documento_tipo']) {
                         $aTipoNota = Contribuinte_Model_Nota::getDescricaoTipoNota($aNota['documento_tipo']);
                         $sTipoNota = $aTipoNota[$aNota['documento_tipo']];
                     }
                     $this->Cell($aLarguraCelulas[3], 5, $sTipoNota, 1);
                 } else {
                     if ($aNota['documento_classe'] == 'dms' && $aNota['documento_tipo']) {
                         if ($aNota['documento_tipo_descricao']) {
                             $sTipoNota = $aNota['documento_tipo_descricao'];
                         } else {
                             $aTipoNota = Contribuinte_Model_Nota::getDescricaoTipoNota($aNota['documento_tipo']);
                             $sTipoNota = $aTipoNota[$aNota['documento_tipo']];
                         }
                         $this->Cell($aLarguraCelulas[3], 5, $sTipoNota, 1);
                     } else {
                         $this->Cell($aLarguraCelulas[3], 5, '-', 1);
                     }
                 }
                 // Formata dados
                 $sServicoValorAliquota = DBSeller_Helper_Number_Format::toMoney($aNota['servico_valor_aliquota']);
                 $sServicoValorBaseCalculo = DBSeller_Helper_Number_Format::toMoney($aNota['servico_valor_base_calculo']);
                 $sServicoValorIss = DBSeller_Helper_Number_Format::toMoney($aNota['servico_valor_iss']);
                 $sTomadorCnpjCpf = DBSeller_Helper_Number_Format::maskCPF_CNPJ($aNota['tomador_cnpjcpf']);
                 $sTomadorRazaoSocial = utf8_decode($aNota['tomador_razao_social']);
                 $sTomadorRazaoSocial = substr($sTomadorRazaoSocial, 0, 50);
                 // Trata a situação do documento
                 switch (strtoupper($aNota['documento_situacao'])) {
                     case 'T':
                         $sSituacaoDocumento = utf8_decode('Tributado');
                         break;
                     case 'R':
                         $sSituacaoDocumento = utf8_decode('Retido');
                         break;
                     case 'IS':
                         $sSituacaoDocumento = utf8_decode('Isento');
                         break;
                     case 'E':
                         $sSituacaoDocumento = utf8_decode('Extraviado');
                         break;
                     default:
                         $sSituacaoDocumento = '-';
                 }
                 // ALtera a situação do documento quando a natureza for fora do município
                 if ($aNota['documento_natureza_operacao'] == 2) {
                     $sSituacaoDocumento = utf8_decode('Fora do Município');
                 }
                 // Nota cancelada
                 if ($aNota['documento_status_cancelamento'] == 't' || $aNota['documento_situacao'] == 'c') {
                     $sSituacaoDocumento = utf8_decode('Cancelado');
                 }
                 // Nota substituida
                 if (!empty($aNota['documento_id_nota_substituta'])) {
                     $sSituacaoDocumento = utf8_decode('Substituida');
                 }
                 // Verifica se a nota foi substituida ou cancelada não soma os valores totais
                 if ($aNota['documento_status_cancelamento'] != 't' && empty($aNota['documento_id_nota_substituta'])) {
                     $fTotalBase += $aNota['servico_valor_base_calculo'];
                     $fTotalIss += $aNota['servico_valor_iss'];
                 }
                 $this->Cell($aLarguraCelulas[4], 5, $sSituacaoDocumento, 1, 0, 'L', NULL);
                 $this->Cell($aLarguraCelulas[5], 5, $aNota['servico_item_lista_servico'], 1, 0, 'L', NULL);
                 $this->Cell($aLarguraCelulas[6], 5, $sServicoValorAliquota, 1, 0, 'R', NULL);
                 $this->Cell($aLarguraCelulas[7], 5, $sServicoValorBaseCalculo, 1, 0, 'R', NULL);
                 $this->Cell($aLarguraCelulas[8], 5, $sServicoValorIss, 1, 0, 'R', NULL);
                 $this->Cell($aLarguraCelulas[9], 5, $sTomadorCnpjCpf, 1, 0, 'L', NULL);
                 $this->Cell($aLarguraCelulas[10], 5, $sTomadorRazaoSocial, 1, 0, 'L', NULL);
             }
             $this->SetFont('Arial', 'B', 8);
             $this->Ln();
             $this->Cell(113);
             $this->Cell($aLarguraCelulas[6], 5, 'Total:', 1);
             $this->Cell($aLarguraCelulas[7], 5, DBSeller_Helper_Number_Format::toMoney($fTotalBase), 1, 0, 'R');
             $this->Cell($aLarguraCelulas[8], 5, DBSeller_Helper_Number_Format::toMoney($fTotalIss), 1, 0, 'R');
         } else {
             $this->Ln();
             $this->Cell(0, 5, utf8_decode('Sem Lançamentos no Período'), 1, NULL, 'C');
         }
         $oStatement->closeCursor();
     } catch (Exception $oErro) {
         throw new Exception($oErro->getMessage());
     }
 }