protected function pItensDANFE($x, $y, &$nInicio, $hmax, $pag = 0, $totpag = 0, $hCabecItens = 7)
{
$oldX = $x;
$oldY = $y;
$totItens = $this->det->length;
//#####################################################################
//DADOS DOS PRODUTOS / SERVIÇOS
$texto = "DADOS DOS PRODUTOS / SERVIÇOS ";
if ($this->orientacao == 'P') {
$w = $this->wPrint;
} else {
if ($nInicio < 2) {
// primeira página
$w = $this->wPrint - $this->wCanhoto;
} else {
// páginas seguintes
$w = $this->wPrint;
}
}
$h = 4;
$aFont = array('font' => $this->fontePadrao, 'size' => 7, 'style' => 'B');
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'T', 'L', 0, '');
$y += 3;
//desenha a caixa dos dados dos itens da NF
$hmax += 1;
$texto = '';
$this->pTextBox($x, $y, $w, $hmax);
//##################################################################################
// cabecalho LOOP COM OS DADOS DOS PRODUTOS
//CÓDIGO PRODUTO
$texto = "CÓDIGO PRODUTO";
$w1 = round($w * 0.09, 0);
$h = 4;
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w1, $h, $texto, $aFont, 'C', 'C', 0, '', false);
$this->pdf->Line($x + $w1, $y, $x + $w1, $y + $hmax);
//DESCRIÇÃO DO PRODUTO / SERVIÇO
$x += $w1;
$w2 = round($w * 0.28, 0);
$texto = 'DESCRIÇÃO DO PRODUTO / SERVIÇO';
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w2, $h, $texto, $aFont, 'C', 'C', 0, '', false);
$this->pdf->Line($x + $w2, $y, $x + $w2, $y + $hmax);
//NCM/SH
$x += $w2;
$w3 = round($w * 0.06, 0);
$texto = 'NCM/SH';
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w3, $h, $texto, $aFont, 'C', 'C', 0, '', false);
$this->pdf->Line($x + $w3, $y, $x + $w3, $y + $hmax);
//O/CST
$x += $w3;
$w4 = round($w * 0.05, 0);
if ($this->pSimpleGetValue($this->emit, 'CRT') == '3') {
$texto = 'O/CST';
// SE REGIME NORMAL EXIBE CST
} else {
$texto = 'O/CSOSN';
// SE REGIME SIMPLES EXIBE CSOSN
}
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w4, $h, $texto, $aFont, 'C', 'C', 0, '', false);
$this->pdf->Line($x + $w4, $y, $x + $w4, $y + $hmax);
//CFOP
$x += $w4;
$w5 = round($w * 0.04, 0);
$texto = 'CFOP';
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w5, $h, $texto, $aFont, 'C', 'C', 0, '', false);
$this->pdf->Line($x + $w5, $y, $x + $w5, $y + $hmax);
//UN
$x += $w5;
$w6 = round($w * 0.03, 0);
$texto = 'UN';
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w6, $h, $texto, $aFont, 'C', 'C', 0, '', false);
$this->pdf->Line($x + $w6, $y, $x + $w6, $y + $hmax);
//QUANT
$x += $w6;
$w7 = round($w * 0.07000000000000001, 0);
$texto = 'QUANT';
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w7, $h, $texto, $aFont, 'C', 'C', 0, '', false);
$this->pdf->Line($x + $w7, $y, $x + $w7, $y + $hmax);
//VALOR UNIT
$x += $w7;
$w8 = round($w * 0.06, 0);
$texto = 'VALOR UNIT';
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w8, $h, $texto, $aFont, 'C', 'C', 0, '', false);
$this->pdf->Line($x + $w8, $y, $x + $w8, $y + $hmax);
//VALOR TOTAL
$x += $w8;
$w9 = round($w * 0.06, 0);
$texto = 'VALOR TOTAL';
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w9, $h, $texto, $aFont, 'C', 'C', 0, '', false);
$this->pdf->Line($x + $w9, $y, $x + $w9, $y + $hmax);
//B.CÁLC ICMS
$x += $w9;
$w10 = round($w * 0.06, 0);
$texto = 'B.CÁLC ICMS';
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w10, $h, $texto, $aFont, 'C', 'C', 0, '', false);
$this->pdf->Line($x + $w10, $y, $x + $w10, $y + $hmax);
//VALOR ICMS
$x += $w10;
$w11 = round($w * 0.06, 0);
$texto = 'VALOR ICMS';
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w11, $h, $texto, $aFont, 'C', 'C', 0, '', false);
$this->pdf->Line($x + $w11, $y, $x + $w11, $y + $hmax);
//VALOR IPI
$x += $w11;
$w12 = round($w * 0.05, 0);
$texto = 'VALOR IPI';
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w12, $h, $texto, $aFont, 'C', 'C', 0, '', false);
$this->pdf->Line($x + $w12, $y, $x + $w12, $y + $hmax);
//ALÍQ. ICMS
$x += $w12;
$w13 = round($w * 0.035, 0);
$texto = 'ALÍQ. ICMS';
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w13, $h, $texto, $aFont, 'C', 'C', 0, '', false);
$this->pdf->Line($x + $w13, $y, $x + $w13, $y + $hmax);
//ALÍQ. IPI
$x += $w13;
$w14 = $w - ($w1 + $w2 + $w3 + $w4 + $w5 + $w6 + $w7 + $w8 + $w9 + $w10 + $w11 + $w12 + $w13);
$texto = 'ALÍQ. IPI';
$this->pTextBox($x, $y, $w14, $h, $texto, $aFont, 'C', 'C', 0, '', false);
$this->pdf->Line($oldX, $y + $h + 1, $oldX + $w, $y + $h + 1);
$y += 5;
//##################################################################################
// LOOP COM OS DADOS DOS PRODUTOS
$i = 0;
$hUsado = $hCabecItens;
$aFont = array('font' => $this->fontePadrao, 'size' => 7, 'style' => '');
foreach ($this->det as $d) {
if ($i >= $nInicio) {
$thisItem = $this->det->item($i);
//carrega as tags do item
$prod = $thisItem->getElementsByTagName("prod")->item(0);
$imposto = $this->det->item($i)->getElementsByTagName("imposto")->item(0);
$ICMS = $imposto->getElementsByTagName("ICMS")->item(0);
$IPI = $imposto->getElementsByTagName("IPI")->item(0);
$textoProduto = $this->pDescricaoProduto($thisItem);
$linhaDescr = $this->pGetNumLines($textoProduto, $w2, $aFont);
$h = round($linhaDescr * $this->pdf->FontSize + $linhaDescr * 0.5, 2);
$hUsado += $h;
if ($pag != $totpag) {
if ($hUsado >= $hmax && $i < $totItens) {
//ultrapassa a capacidade para uma única página
//o restante dos dados serão usados nas proximas paginas
$nInicio = $i;
break;
}
}
$y_linha = $y + $h;
// linha entre itens
$this->pdf->DashedHLine($oldX, $y_linha, $w, 0.1, 120);
//corrige o x
$x = $oldX;
//codigo do produto
$texto = $prod->getElementsByTagName("cProd")->item(0)->nodeValue;
$this->pTextBox($x, $y, $w1, $h, $texto, $aFont, 'T', 'C', 0, '');
$x += $w1;
//DESCRIÇÃO
if ($this->orientacao == 'P') {
$this->pTextBox($x, $y, $w2, $h, $textoProduto, $aFont, 'T', 'L', 0, '', false);
} else {
$this->pTextBox($x, $y, $w2, $h, $textoProduto, $aFont, 'T', 'L', 0, '', false);
}
$x += $w2;
//NCM
$texto = !empty($prod->getElementsByTagName("NCM")->item(0)->nodeValue) ? $prod->getElementsByTagName("NCM")->item(0)->nodeValue : '';
$this->pTextBox($x, $y, $w3, $h, $texto, $aFont, 'T', 'C', 0, '');
$x += $w3;
//CST
if (isset($ICMS)) {
$origem = $this->pSimpleGetValue($ICMS, "orig");
$cst = $this->pSimpleGetValue($ICMS, "CST");
$csosn = $this->pSimpleGetValue($ICMS, "CSOSN");
$texto = $origem . $cst . $csosn;
$this->pTextBox($x, $y, $w4, $h, $texto, $aFont, 'T', 'C', 0, '');
}
//CFOP
$x += $w4;
$texto = $prod->getElementsByTagName("CFOP")->item(0)->nodeValue;
$this->pTextBox($x, $y, $w5, $h, $texto, $aFont, 'T', 'C', 0, '');
//Unidade
$x += $w5;
$texto = $prod->getElementsByTagName("uCom")->item(0)->nodeValue;
$this->pTextBox($x, $y, $w6, $h, $texto, $aFont, 'T', 'C', 0, '');
$x += $w6;
if ($this->orientacao == 'P') {
$alinhamento = 'R';
} else {
$alinhamento = 'R';
}
// QTDADE
$texto = number_format($prod->getElementsByTagName("qCom")->item(0)->nodeValue, 4, ",", ".");
$this->pTextBox($x, $y, $w7, $h, $texto, $aFont, 'T', $alinhamento, 0, '');
$x += $w7;
// Valor Unitário
$texto = number_format($prod->getElementsByTagName("vUnCom")->item(0)->nodeValue, 4, ",", ".");
$this->pTextBox($x, $y, $w8, $h, $texto, $aFont, 'T', $alinhamento, 0, '');
$x += $w8;
// Valor do Produto
$texto = "";
if (is_numeric($prod->getElementsByTagName("vProd")->item(0)->nodeValue)) {
$texto = number_format($prod->getElementsByTagName("vProd")->item(0)->nodeValue, 2, ",", ".");
}
$this->pTextBox($x, $y, $w9, $h, $texto, $aFont, 'T', $alinhamento, 0, '');
//Valor da Base de calculo
$x += $w9;
if (isset($ICMS)) {
$texto = !empty($ICMS->getElementsByTagName("vBC")->item(0)->nodeValue) ? number_format($ICMS->getElementsByTagName("vBC")->item(0)->nodeValue, 2, ",", ".") : '0, 00';
$this->pTextBox($x, $y, $w10, $h, $texto, $aFont, 'T', $alinhamento, 0, '');
}
//Valor do ICMS
$x += $w10;
if (isset($ICMS)) {
$texto = !empty($ICMS->getElementsByTagName("vICMS")->item(0)->nodeValue) ? number_format($ICMS->getElementsByTagName("vICMS")->item(0)->nodeValue, 2, ",", ".") : '0, 00';
$this->pTextBox($x, $y, $w11, $h, $texto, $aFont, 'T', $alinhamento, 0, '');
}
//Valor do IPI
$x += $w11;
if (isset($IPI)) {
$texto = !empty($IPI->getElementsByTagName("vIPI")->item(0)->nodeValue) ? number_format($IPI->getElementsByTagName("vIPI")->item(0)->nodeValue, 2, ",", ".") : '';
} else {
$texto = '';
}
$this->pTextBox($x, $y, $w12, $h, $texto, $aFont, 'T', $alinhamento, 0, '');
// %ICMS
$x += $w12;
if (isset($ICMS)) {
$texto = !empty($ICMS->getElementsByTagName("pICMS")->item(0)->nodeValue) ? number_format($ICMS->getElementsByTagName("pICMS")->item(0)->nodeValue, 2, ",", ".") : '0, 00';
$this->pTextBox($x, $y, $w13, $h, $texto, $aFont, 'T', 'C', 0, '');
}
//%IPI
$x += $w13;
if (isset($IPI)) {
$texto = !empty($IPI->getElementsByTagName("pIPI")->item(0)->nodeValue) ? number_format($IPI->getElementsByTagName("pIPI")->item(0)->nodeValue, 2, ",", ".") : '';
} else {
$texto = '';
}
$this->pTextBox($x, $y, $w14, $h, $texto, $aFont, 'T', 'C', 0, '');
$y += $h;
$i++;
//incrementa o controle dos itens processados.
$this->qtdeItensProc++;
} else {
$i++;
}
}
return $oldY + $hmax;
}