示例#1
0
 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');
     }
 }