private function generar_pdf_servicio($archivo = FALSE) { if (!$archivo) { /// desactivamos la plantilla HTML $this->template = FALSE; } $pdf_doc = new fs_pdf(); $pdf_doc->pdf->addInfo('Title', ucfirst(FS_SERVICIO) . ' ' . $this->servicio->codigo); $pdf_doc->pdf->addInfo('Subject', ucfirst(FS_SERVICIO) . ' de cliente ' . $this->servicio->codigo); $pdf_doc->pdf->addInfo('Author', $this->empresa->nombre); $lineas = $this->servicio->get_lineas(); $lineas_iva = $this->get_lineas_iva($lineas); if ($lineas) { $linea_actual = 0; $pagina = 1; /// imprimimos las páginas necesarias while ($linea_actual < count($lineas)) { $lppag = 20; /// salto de página if ($linea_actual > 0) { $pdf_doc->pdf->ezNewPage(); } $pdf_doc->generar_pdf_cabecera($this->empresa, $lppag); $this->generar_pdf_datos_cliente($pdf_doc, $lppag); /* * Creamos la tabla con las lineas del servicio: * * Descripción PVP DTO Cantidad Importe */ $pdf_doc->new_table(); if ($this->impresion['print_dto']) { $pdf_doc->add_table_header(array('descripcion' => '<b>Descripción</b>', 'cantidad' => '<b>Cantidad</b>', 'pvp' => '<b>PVP</b>', 'dto' => '<b>DTO</b>', 'importe' => '<b>Importe</b>')); } else { $pdf_doc->add_table_header(array('descripcion' => '<b>Descripción</b>', 'cantidad' => '<b>Cantidad</b>', 'pvp' => '<b>PVP</b>', 'importe' => '<b>Importe</b>')); } for ($i = $linea_actual; $linea_actual < $lppag + $i and $linea_actual < count($lineas);) { $descripcion = $pdf_doc->fix_html($lineas[$linea_actual]->descripcion); if ($this->impresion['print_ref'] and !is_null($lineas[$linea_actual]->referencia)) { $descripcion = '<b>' . $lineas[$linea_actual]->referencia . '</b> ' . $descripcion; } $fila = array('descripcion' => $descripcion, 'cantidad' => $lineas[$linea_actual]->cantidad, 'pvp' => $this->show_precio($lineas[$linea_actual]->pvpunitario, $this->servicio->coddivisa), 'dto' => $this->show_numero($lineas[$linea_actual]->dtopor, 0) . " %", 'importe' => $this->show_precio($lineas[$linea_actual]->pvptotal, $this->servicio->coddivisa)); $pdf_doc->add_table_row($fila); $linea_actual++; } $pdf_doc->save_table(array('fontSize' => 8, 'cols' => array('cantidad' => array('justification' => 'right'), 'pvp' => array('justification' => 'right'), 'dto' => array('justification' => 'right'), 'importe' => array('justification' => 'right')), 'width' => 520, 'shaded' => 0)); if ($linea_actual == count($lineas)) { if ($this->servicio->observaciones != '') { $pdf_doc->pdf->ezText("\n" . $this->servicio->observaciones, 9); } $pdf_doc->pdf->ezText("\n" . $this->setup['servicios_condiciones'], 9); } $pdf_doc->set_y(80); /* * Rellenamos la última tabla de la página: * * Página Neto IVA Total */ $pdf_doc->new_table(); $titulo = array('pagina' => '<b>Página</b>', 'neto' => '<b>Neto</b>'); $fila = array('pagina' => $pagina . '/' . ceil(count($lineas) / $lppag), 'neto' => $this->show_precio($this->servicio->neto, $this->servicio->coddivisa)); $opciones = array('cols' => array('neto' => array('justification' => 'right')), 'showLines' => 4, 'width' => 520); foreach ($lineas_iva as $li) { $imp = $this->impuesto->get($li['codimpuesto']); if ($imp) { $titulo['iva' . $li['iva']] = '<b>' . $imp->descripcion . '</b>'; } else { $titulo['iva' . $li['iva']] = '<b>' . FS_IVA . ' ' . $li['iva'] . '%</b>'; } $fila['iva' . $li['iva']] = $this->show_precio($li['totaliva'], $this->servicio->coddivisa); if ($li['totalrecargo'] != 0) { $fila['iva' . $li['iva']] .= ' (RE: ' . $this->show_precio($li['totalrecargo'], $this->servicio->coddivisa) . ')'; } $opciones['cols']['iva' . $li['iva']] = array('justification' => 'right'); } if ($this->servicio->totalirpf != 0) { $titulo['irpf'] = '<b>' . FS_IRPF . ' ' . $this->servicio->irpf . '%</b>'; $fila['irpf'] = $this->show_precio(0 - $this->servicio->totalirpf); $opciones['cols']['irpf'] = array('justification' => 'right'); } $titulo['liquido'] = '<b>Total</b>'; $fila['liquido'] = $this->show_precio($this->servicio->total, $this->servicio->coddivisa); $opciones['cols']['liquido'] = array('justification' => 'right'); $pdf_doc->add_table_header($titulo); $pdf_doc->add_table_row($fila); $pdf_doc->save_table($opciones); $pagina++; } } else { $lppag = 20; $pdf_doc->generar_pdf_cabecera($this->empresa, $lppag); $this->generar_pdf_datos_cliente($pdf_doc, $lppag); if ($this->servicio->observaciones != '') { $pdf_doc->pdf->ezText("\n" . $this->servicio->observaciones, 9); } $pdf_doc->pdf->ezText("\n" . $this->setup['servicios_condiciones'], 9); } if ($archivo) { if (!file_exists('tmp/' . FS_TMP_NAME . 'enviar')) { mkdir('tmp/' . FS_TMP_NAME . 'enviar'); } $pdf_doc->save('tmp/' . FS_TMP_NAME . 'enviar/' . $archivo); } else { $pdf_doc->show(FS_SERVICIO . '_' . $this->servicio->codigo . '.pdf'); } }