Exemple #1
0
 protected function process()
 {
     $this->divisa = new divisa();
     /// ¿El usuario tiene permiso para eliminar en esta página?
     $this->allow_delete = $this->user->allow_delete_on(__CLASS__);
     if (isset($_POST['coddivisa'])) {
         $div0 = $this->divisa->get($_POST['coddivisa']);
         if (!$div0) {
             $div0 = new divisa();
             $div0->coddivisa = $_POST['coddivisa'];
         }
         $div0->simbolo = $_POST['simbolo'];
         $div0->descripcion = $_POST['descripcion'];
         $div0->codiso = $_POST['codiso'];
         $div0->tasaconv = floatval($_POST['tasaconv']);
         $div0->tasaconv_compra = floatval($_POST['tasaconv_compra']);
         if ($div0->save()) {
             $this->new_message('Divisa ' . $div0->coddivisa . ' guardada correctamente.');
         } else {
             $this->new_error_msg('Error al guardar la divisa.');
         }
     } else {
         if (isset($_GET['delete'])) {
             $div0 = $this->divisa->get($_GET['delete']);
             if ($div0) {
                 if (!$this->user->admin) {
                     $this->new_error_msg('Sólo un administrador puede eliminar divisas.');
                 } else {
                     if ($div0->delete()) {
                         $this->new_message('Divisa ' . $div0->coddivisa . ' eliminada correctamente.');
                     } else {
                         $this->new_error_msg('Error al eliminar la divisa ' . $div0->coddivisa . '.');
                     }
                 }
             } else {
                 $this->new_error_msg('Divisa no encontrada.');
             }
         }
     }
 }
Exemple #2
0
 protected function private_core()
 {
     $this->share_extensions();
     if (isset($_GET['opcion'])) {
         if ($_GET['opcion'] == 'moneda') {
             $div0 = new divisa();
             $divisa = $div0->get('PEN');
             if (!$divisa) {
                 $div0->coddivisa = 'PEN';
                 $div0->codiso = '604';
                 $div0->descripcion = 'NUEVOS SOLES';
                 $div0->simbolo = 'S/.';
                 $div0->tasaconv = 3.4272;
                 $div0->save();
             }
             $this->empresa->coddivisa = 'PEN';
             if ($this->empresa->save()) {
                 $this->new_message('Datos guardados correctamente.');
             }
         } else {
             if ($_GET['opcion'] == 'pais') {
                 $pais0 = new pais();
                 $pais = $pais0->get('PER');
                 if (!$pais) {
                     $pais0->codpais = 'PER';
                     $pais0->codiso = 'PE';
                     $pais0->nombre = 'Perú';
                     $pais0->save();
                 }
                 $this->empresa->codpais = 'PER';
                 if ($this->empresa->save()) {
                     $this->new_message('Datos guardados correctamente.');
                 }
             }
         }
     }
 }
 protected function process()
 {
     $this->divisa = new divisa();
     if (isset($_POST['coddivisa'])) {
         $div0 = $this->divisa->get($_POST['coddivisa']);
         if (!$div0) {
             $div0 = new divisa();
             $div0->coddivisa = $_POST['coddivisa'];
         }
         $div0->simbolo = $_POST['simbolo'];
         $div0->descripcion = $_POST['descripcion'];
         $div0->codiso = $_POST['codiso'];
         $div0->tasaconv = floatval($_POST['tasaconv']);
         if ($div0->save()) {
             $this->new_message('Divisa ' . $div0->coddivisa . ' guardada correctamente.');
         } else {
             $this->new_error_msg('Error al guardar la divisa.');
         }
     } else {
         if (isset($_GET['delete'])) {
             $div0 = $this->divisa->get($_GET['delete']);
             if ($div0) {
                 if (FS_DEMO) {
                     $this->new_error_msg('En el modo demo no puedes eliminar divisas. Otro usuario podría necesitarlas.');
                 } else {
                     if ($div0->delete()) {
                         $this->new_message('Divisa ' . $div0->coddivisa . ' eliminada correctamente.');
                     } else {
                         $this->new_error_msg('Error al eliminar la divisa ' . $div0->coddivisa . '.');
                     }
                 }
             } else {
                 $this->new_error_msg('Divisa no encontrada.');
             }
         }
     }
 }
 public function tasaconv()
 {
     if (isset($this->coddivisa)) {
         $divisa = new \divisa();
         $div0 = $divisa->get($this->coddivisa);
         if ($div0) {
             return $div0->tasaconv;
         } else {
             return 1;
         }
     } else {
         return 1;
     }
 }
 private function test_tablas()
 {
     $recargar = FALSE;
     if ($this->informe['offset'] == 0) {
         /// comprobamos la tabla familias
         if ($this->db->table_exists('familias')) {
             $data = $this->db->select("SELECT * FROM familias WHERE madre IS NOT NULL AND madre NOT IN (SELECT codfamilia FROM familias);");
             if ($data) {
                 foreach ($data as $d) {
                     $familia = new familia($d);
                     $familia->madre = NULL;
                     $familia->save();
                 }
             }
         }
         /// comprobamos la tabla de articulos de proveedor
         if ($this->db->table_exists('articulosprov')) {
             $this->db->exec("DELETE FROM articulosprov WHERE codproveedor NOT IN (SELECT codproveedor FROM proveedores);");
         }
         $recargar = TRUE;
         $this->informe['offset'] += 1;
     } else {
         if ($this->informe['offset'] == 1) {
             /// comprobamos la tabla de articulos de proveedor
             if ($this->db->table_exists('articulosprov')) {
                 $this->db->exec("UPDATE articulosprov SET refproveedor = referencia WHERE refproveedor IS NULL;");
             }
             $recargar = TRUE;
             $this->informe['offset'] += 1;
         } else {
             if ($this->informe['offset'] == 2) {
                 /// comprobamos la tabla de stock
                 if ($this->db->table_exists('stocks')) {
                     /**
                      * Esta consulta produce un error si no hay datos erroneos, pero da igual
                      */
                     $this->db->exec("DELETE FROM stocks s WHERE NOT EXISTS " . "(SELECT referencia FROM articulos a WHERE a.referencia = s.referencia);");
                 }
                 $recargar = TRUE;
                 $this->informe['offset'] += 1;
             } else {
                 if ($this->informe['offset'] == 3) {
                     /// comprobamos la tabla de regulaciones de stock
                     if ($this->db->table_exists('lineasregstocks')) {
                         $this->db->exec("DELETE FROM lineasregstocks WHERE idstock NOT IN (SELECT idstock FROM stocks);");
                     }
                     $recargar = TRUE;
                     $this->informe['offset'] += 1;
                 } else {
                     if ($this->informe['offset'] == 4) {
                         /// eliminamos los elementos de contabilidad que apuntan a ejercicios que no existen
                         $tablas = array('co_gruposepigrafes', 'co_epigrafes', 'co_cuentas', 'co_subcuentas');
                         foreach ($tablas as $tabla) {
                             $this->db->exec("DELETE FROM " . $tabla . " WHERE codejercicio NOT IN (SELECT codejercicio FROM ejercicios);");
                         }
                         /// comprobamos la tabla de subcuentas de proveedores
                         if ($this->db->table_exists('co_subcuentasprov')) {
                             $this->db->exec("DELETE FROM co_subcuentasprov WHERE codproveedor NOT IN (SELECT codproveedor FROM proveedores);");
                         }
                         /// comprobamos la tabla de direcciones de proveedores
                         if ($this->db->table_exists('dirproveedores')) {
                             $this->db->exec("DELETE FROM dirproveedores WHERE codproveedor NOT IN (SELECT codproveedor FROM proveedores);");
                         }
                         /// comprobamos la tabla de subcuentas de clientes
                         if ($this->db->table_exists('co_subcuentascli')) {
                             $this->db->exec("DELETE FROM co_subcuentascli WHERE codcliente NOT IN (SELECT codcliente FROM clientes);");
                         }
                         /// comprobamos la tabla de direcciones de clientes
                         if ($this->db->table_exists('dirclientes')) {
                             $this->db->exec("DELETE FROM dirclientes WHERE codcliente NOT IN (SELECT codcliente FROM clientes);");
                         }
                         $recargar = TRUE;
                         $this->informe['offset'] += 1;
                     } else {
                         if ($this->informe['offset'] == 5) {
                             /// comprobamos la tabla de epigrafes
                             if ($this->db->table_exists('co_epigrafes')) {
                                 $this->db->exec("UPDATE co_epigrafes SET idgrupo = NULL WHERE idgrupo NOT IN (SELECT idgrupo FROM co_gruposepigrafes);");
                             }
                             $recargar = TRUE;
                             $this->informe['offset'] += 1;
                         } else {
                             if ($this->informe['offset'] == 6) {
                                 $almacen = new almacen();
                                 if (!$almacen->all()) {
                                     $this->db->exec($almacen->install());
                                 }
                                 $divisa = new divisa();
                                 if (!$divisa->all()) {
                                     $this->db->exec($divisa->install());
                                 }
                                 $formap = new forma_pago();
                                 if (!$formap->all()) {
                                     $this->db->exec($formap->install());
                                 }
                                 $pais = new pais();
                                 if (!$pais->all()) {
                                     $this->db->exec($pais->install());
                                 }
                                 $serie = new serie();
                                 if (!$serie->all()) {
                                     $this->db->exec($serie->install());
                                 }
                                 $recargar = TRUE;
                                 $this->informe['offset'] += 1;
                             } else {
                                 /// comprobamos la tabla de articulos de proveedor
                                 if ($this->db->table_exists('articulosprov')) {
                                     /// buscamos duplicados
                                     $data = $this->db->select("SELECT codproveedor,refproveedor,COUNT(*) as count FROM articulosprov GROUP BY codproveedor,refproveedor HAVING COUNT(*) > 1;");
                                     if ($data) {
                                         foreach ($data as $d) {
                                             $sql = "SELECT * FROM articulosprov WHERE codproveedor = " . $this->empresa->var2str($d['codproveedor']) . " AND refproveedor = " . $this->empresa->var2str($d['refproveedor']) . ";";
                                             $data2 = $this->db->select($sql);
                                             if ($data2) {
                                                 $this->db->exec("DELETE FROM articulosprov WHERE id = " . $this->empresa->var2str($data2[1]['id']) . ";");
                                             }
                                         }
                                         $recargar = TRUE;
                                         $this->informe['offset'] += 1;
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     if (!$recargar) {
         if ($this->informe['all']) {
             $this->informe['model'] = 'asiento';
         } else {
             $this->informe['model'] = 'fin';
         }
         $this->informe['offset'] = 0;
     }
 }
Exemple #6
0
 private function test_tablas()
 {
     $recargar = FALSE;
     if ($this->informe['offset'] == 0) {
         /// comprobamos la tabla familias
         if ($this->db->table_exists('familias')) {
             $data = $this->db->select("SELECT * FROM familias WHERE madre IS NOT NULL AND madre NOT IN (SELECT codfamilia FROM familias);");
             if ($data) {
                 foreach ($data as $d) {
                     $familia = new familia($d);
                     $familia->madre = NULL;
                     $familia->save();
                 }
             }
         }
         /// comprobamos la tabla de articulos de proveedor
         if ($this->db->table_exists('articulosprov')) {
             $this->db->exec("DELETE FROM articulosprov WHERE codproveedor NOT IN (SELECT codproveedor FROM proveedores);");
         }
         $recargar = TRUE;
         $this->informe['offset'] += 1;
     } else {
         if ($this->informe['offset'] == 1) {
             /// comprobamos la tabla de articulos de proveedor
             if ($this->db->table_exists('articulosprov')) {
                 $this->db->exec("UPDATE articulosprov SET refproveedor = referencia WHERE refproveedor IS NULL;");
             }
             $recargar = TRUE;
             $this->informe['offset'] += 1;
         } else {
             if ($this->informe['offset'] == 2) {
                 /// comprobamos la tabla de stock
                 if ($this->db->table_exists('stocks')) {
                     $this->db->exec("DELETE FROM stocks s WHERE NOT EXISTS (SELECT referencia FROM articulos a WHERE a.referencia = s.referencia);");
                 }
                 $recargar = TRUE;
                 $this->informe['offset'] += 1;
             } else {
                 if ($this->informe['offset'] == 3) {
                     /// comprobamos la tabla de regulaciones de stock
                     if ($this->db->table_exists('lineasregstocks')) {
                         $this->db->exec("DELETE FROM lineasregstocks WHERE idstock NOT IN (SELECT idstock FROM stocks);");
                     }
                     $recargar = TRUE;
                     $this->informe['offset'] += 1;
                 } else {
                     if ($this->informe['offset'] == 4) {
                         /// comprobamos la tabla de subcuentas de proveedores
                         if ($this->db->table_exists('co_subcuentasprov')) {
                             $this->db->exec("DELETE FROM co_subcuentasprov WHERE codproveedor NOT IN (SELECT codproveedor FROM proveedores);");
                         }
                         /// comprobamos la tabla de direcciones de proveedores
                         if ($this->db->table_exists('dirproveedores')) {
                             $this->db->exec("DELETE FROM dirproveedores WHERE codproveedor NOT IN (SELECT codproveedor FROM proveedores);");
                         }
                         /// comprobamos la tabla de subcuentas de clientes
                         if ($this->db->table_exists('co_subcuentascli')) {
                             $this->db->exec("DELETE FROM co_subcuentascli WHERE codcliente NOT IN (SELECT codcliente FROM clientes);");
                         }
                         /// comprobamos la tabla de direcciones de clientes
                         if ($this->db->table_exists('dirclientes')) {
                             $this->db->exec("DELETE FROM dirclientes WHERE codcliente NOT IN (SELECT codcliente FROM clientes);");
                         }
                         $recargar = TRUE;
                         $this->informe['offset'] += 1;
                     } else {
                         if ($this->informe['offset'] == 5) {
                             $almacen = new almacen();
                             if (!$almacen->all()) {
                                 $this->db->exec($almacen->install());
                             }
                             $divisa = new divisa();
                             if (!$divisa->all()) {
                                 $this->db->exec($divisa->install());
                             }
                             $formap = new forma_pago();
                             if (!$formap->all()) {
                                 $this->db->exec($formap->install());
                             }
                             $pais = new pais();
                             if (!$pais->all()) {
                                 $this->db->exec($pais->install());
                             }
                             $serie = new serie();
                             if (!$serie->all()) {
                                 $this->db->exec($serie->install());
                             }
                             $recargar = TRUE;
                             $this->informe['offset'] += 1;
                         } else {
                             /// comprobamos la tabla de articulos de proveedor
                             if ($this->db->table_exists('articulosprov')) {
                                 /// buscamos duplicados
                                 $data = $this->db->select("SELECT codproveedor,refproveedor,COUNT(*) as count FROM articulosprov GROUP BY codproveedor,refproveedor HAVING COUNT(*) > 1;");
                                 if ($data) {
                                     foreach ($data as $d) {
                                         $data2 = $this->db->select("SELECT * FROM articulosprov WHERE codproveedor = '" . $d['codproveedor'] . "' AND refproveedor = '" . $d['refproveedor'] . "';");
                                         if ($data2) {
                                             $this->db->exec("DELETE FROM articulosprov WHERE id = " . $this->empresa->var2str($data2[1]['id']) . ";");
                                         }
                                     }
                                     $recargar = TRUE;
                                     $this->informe['offset'] += 1;
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     if (!$recargar) {
         if ($this->informe['all']) {
             $this->informe['model'] = 'asiento';
         } else {
             $this->informe['model'] = 'fin';
         }
         $this->informe['offset'] = 0;
     }
 }
Exemple #7
0
 /**
  * Devuelve el símbolo de divisa predeterminado
  * o bien el símbolo de la divisa seleccionada.
  * @param type $coddivisa
  * @return string
  */
 public function simbolo_divisa($coddivisa = FALSE)
 {
     if (!$coddivisa) {
         $coddivisa = $this->empresa->coddivisa;
     }
     if (isset($this->simbolo_divisas[$coddivisa])) {
         return $this->simbolo_divisas[$coddivisa];
     } else {
         $divisa = new divisa();
         $divi0 = $divisa->get($coddivisa);
         if ($divi0) {
             $this->simbolo_divisas[$coddivisa] = $divi0->simbolo;
             return $divi0->simbolo;
         } else {
             return '?';
         }
     }
 }
 public function moneda()
 {
     $tratamiento = false;
     //Validamos si existe la moneda DOP
     $div0 = new divisa();
     $divisa = $div0->get('DOP');
     if (!$divisa) {
         $div0->coddivisa = 'DOP';
         $div0->codiso = '214';
         $div0->descripcion = 'PESOS DOMINICANOS';
         $div0->simbolo = 'RD$';
         $div0->tasaconv = 45.15;
         $div0->tasaconv_compra = 45.9;
         $div0->save();
         $tratamiento = true;
     }
     //Validamos si existe la moneda USD
     //por temas de operaciones en dolares
     $divisa = $div0->get('USD');
     if (!$divisa) {
         $div0->coddivisa = 'USD';
         $div0->codiso = '840';
         $div0->descripcion = 'DÓLARES EE.UU.';
         $div0->simbolo = '$';
         $div0->tasaconv = 1;
         $div0->tasaconv_compra = 1;
         $div0->save();
         $tratamiento = true;
     }
     if ($tratamiento) {
         $this->new_message('Datos de moneda DOP y USD actualizados correctamente.');
     }
     if ($this->empresa->coddivisa != 'DOP') {
         //Elegimos la divisa para la empresa como DOP si no esta generada
         $this->empresa->coddivisa = 'DOP';
         if ($this->empresa->save()) {
             $this->new_message('Datos de moneda para la empresa guardados correctamente.');
         }
     }
 }
 private function sync()
 {
     $continuar = TRUE;
     $art0 = new articulo();
     $ej0 = new ejercicio();
     $serie0 = new serie();
     $div0 = new divisa();
     foreach (array_reverse($this->pedidos) as $ped) {
         $data = $this->db->select("SELECT * FROM albaranescli WHERE numero2 = " . $art0->var2str($this->order_numero2($ped->order_number)) . ";");
         if (!$data and $continuar and $ped->status == 'completed') {
             $albaran = new albaran_cliente();
             $albaran->numero2 = $this->order_numero2($ped->order_number);
             $albaran->fecha = Date('d-m-Y', strtotime($ped->created_at));
             $albaran->hora = Date('H:i:s', strtotime($ped->created_at));
             $albaran->observaciones = 'Este pedido ha sido importado con la demo de woocommerce, por eso no se ha asignado el cliente.';
             $albaran->cifnif = '';
             $albaran->direccion = '';
             $ejercicio = $ej0->get_by_fecha($albaran->fecha);
             if ($ejercicio) {
                 $albaran->codejercicio = $ejercicio->codejercicio;
                 $serie = $serie0->get($this->setup['wooc_serie']);
                 if ($serie) {
                     $albaran->codserie = $serie->codserie;
                     $albaran->irpf = $serie->irpf;
                     $albaran->codalmacen = $this->setup['wooc_alm'];
                     $divisa = $div0->get($this->empresa->coddivisa);
                     if ($divisa) {
                         $albaran->coddivisa = $divisa->coddivisa;
                         $albaran->tasaconv = $divisa->tasaconv;
                     }
                     $albaran->codpago = $this->empresa->codpago;
                     if ($albaran->save()) {
                         foreach ($ped->line_items as $l) {
                             $linea = new linea_albaran_cliente();
                             $linea->idalbaran = $albaran->idalbaran;
                             $linea->referencia = $l->sku;
                             $linea->descripcion = $l->name;
                             $linea->cantidad = $l->quantity;
                             $linea->irpf = $albaran->irpf;
                             $articulo = $art0->get($l->sku);
                             if ($articulo and !$serie->siniva and $cliente->regimeniva != 'Exento') {
                                 $linea->codimpuesto = $articulo->codimpuesto;
                                 $linea->iva = $articulo->get_iva();
                             }
                             $linea->pvpunitario = 100 * $l->total / $l->quantity / (100 + $linea->iva);
                             $linea->pvptotal = $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad;
                             if ($linea->save()) {
                                 /// descontamos del stock
                                 if ($articulo) {
                                     $articulo->sum_stock($albaran->codalmacen, 0 - $linea->cantidad);
                                 }
                                 $albaran->neto += $linea->pvptotal;
                                 $albaran->totaliva += $linea->pvptotal * $linea->iva / 100;
                                 $albaran->totalirpf += $linea->pvptotal * $linea->irpf / 100;
                                 $albaran->totalrecargo += $linea->pvptotal * $linea->recargo / 100;
                             } else {
                                 $this->new_error_msg("¡Imposible guardar la linea con referencia: " . $linea->referencia);
                                 $continuar = FALSE;
                             }
                         }
                         /// cupones
                         foreach ($ped->coupon_lines as $l) {
                             $linea = new linea_albaran_cliente();
                             $linea->idalbaran = $albaran->idalbaran;
                             $linea->descripcion = 'Cupón: ' . $l->code;
                             $linea->cantidad = -1;
                             $linea->irpf = $albaran->irpf;
                             if (!$serie->siniva and $cliente->regimeniva != 'Exento') {
                                 $impuesto = $this->impuesto->get($this->setup['wooc_imp']);
                                 if ($impuesto) {
                                     $linea->codimpuesto = $impuesto->codimpuesto;
                                     $linea->iva = $impuesto->iva;
                                 }
                             }
                             $linea->pvpunitario = 100 * floatval($l->amount) / (100 + $linea->iva);
                             $linea->pvptotal = $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad;
                             if ($linea->save()) {
                                 $albaran->neto += $linea->pvptotal;
                                 $albaran->totaliva += $linea->pvptotal * $linea->iva / 100;
                                 $albaran->totalirpf += $linea->pvptotal * $linea->irpf / 100;
                                 $albaran->totalrecargo += $linea->pvptotal * $linea->recargo / 100;
                             } else {
                                 $this->new_error_msg("¡Imposible guardar la linea del cupón: " . $l->code);
                                 $continuar = FALSE;
                             }
                         }
                         if ($continuar) {
                             /// redondeamos
                             $albaran->neto = round($albaran->neto, FS_NF0);
                             $albaran->totaliva = round($albaran->totaliva, FS_NF0);
                             $albaran->totalirpf = round($albaran->totalirpf, FS_NF0);
                             $albaran->totalrecargo = round($albaran->totalrecargo, FS_NF0);
                             $albaran->total = $albaran->neto + $albaran->totaliva - $albaran->totalirpf + $albaran->totalrecargo;
                             if ($albaran->save()) {
                                 $this->new_message("<a href='" . $albaran->url() . "'>" . ucfirst(FS_ALBARAN) . "</a> guardado correctamente.");
                                 $this->new_change(ucfirst(FS_ALBARAN) . ' Cliente ' . $albaran->codigo, $albaran->url(), TRUE);
                             } else {
                                 $this->new_error_msg("¡Imposible actualizar el <a href='" . $albaran->url() . "'>" . FS_ALBARAN . "</a>!");
                                 $continuar = FALSE;
                             }
                         } else {
                             if ($albaran->delete()) {
                                 $this->new_message(ucfirst(FS_ALBARAN) . " eliminado correctamente.");
                             } else {
                                 $this->new_error_msg("¡Imposible eliminar el <a href='" . $albaran->url() . "'>" . FS_ALBARAN . "</a>!");
                                 $continuar = FALSE;
                             }
                         }
                     } else {
                         $this->new_error_msg('Error al guardar los datos del ' . FS_ALBARAN . ' ' . $ped->order_number);
                         $continuar = FALSE;
                     }
                 } else {
                     $this->new_error_msg('Imposible encontrar una serie para el ' . FS_ALBARAN . ' ' . $ped->order_number);
                     $continuar = FALSE;
                 }
             } else {
                 $this->new_error_msg('Imposible encontrar un ejercicio para el ' . FS_ALBARAN . ' ' . $ped->order_number);
                 $continuar = FALSE;
             }
             break;
         }
     }
     $this->new_advice('Esto es una demo. La versión completa importa todos los pedidos completados, incluyendo clientes y artículos. &nbsp; ' . '<a href="https://www.facturascripts.com/store/producto/plugin-woocommerce/" target="_blank">' . '<span class="glyphicon glyphicon-shopping-cart"></span> comprar la versión completa</a>');
 }
 private function generar_pdf_factura($tipo = 'simple', $archivo = FALSE)
 {
     $divi = new divisa();
     if (!$archivo) {
         /// desactivamos la plantilla HTML
         $this->template = FALSE;
     }
     /// Creamos el PDF y escribimos sus metadatos
     $pdf_doc = new fs_pdf();
     $pdf_doc->pdf->addInfo('Title', ucfirst(FS_FACTURA) . ' ' . $this->factura->codigo);
     $pdf_doc->pdf->addInfo('Subject', ucfirst(FS_FACTURA) . ' ' . $this->factura->codigo);
     $pdf_doc->pdf->addInfo('Author', $this->empresa->nombre);
     $lineas = $this->factura->get_lineas();
     $lineas_iva = $this->factura->get_lineas_iva();
     if ($lineas) {
         $lineasfact = count($lineas);
         $linea_actual = 0;
         $pagina = 1;
         ///////////////////////////////////////////////////////////////////////////////////
         ////////////////////   PARA FACTURA PREIMPRESA
         ////////////////////////////////////////////////////////////////////////////////////
         if ($tipo == 'firma') {
             $numFactura = $this->factura->numero2;
             $fecha = $this->factura->fecha;
             $nomCliente = $this->factura->nombrecliente;
             $dirCliente = $this->direccioncli->direccion;
             $cpCliente = $this->factura->codpostal;
             $locCliente = $this->direccioncli->ciudad;
             $provincia = $this->direccioncli->provincia;
             $telCliente1 = $this->cliente->telefono1;
             $telCliente2 = $this->cliente->telefono2;
             $catIVA = $this->cliente->regimeniva;
             $numCuit = '88-88888888-888 ';
             $ingBrutos = '1234-567890-1234-5678-90';
             $this->simbdivisa = $divi->get($this->factura->coddivisa);
             $uMoneda = $this->simbdivisa->simbolo;
             //Unidad de Moneda
             $cheqNum = '8888-8888-8888-8888 ';
             $cheqBanco = 'Banco Internacional y Nacional';
             $cheqImporte = '7789.99';
             $anticipo = '3854.88';
             $anticipoDetalle = 'Detalle por si hay algo anotar del anticipo';
             $efectivo = '38888.88';
             $efectivoDetalle = 'Detalle por si hay algo anotar del efectivo';
             $tarjDebito = '48888.88';
             $debitoDetalle = 'Visa Nº 8888-8888-8888-8888-8888';
             $tarjCredito = '48888.88';
             $creditoDetalle = 'Master Card Nº 9888-8888-8888-8888-8888';
             $linea_arranque = -10;
             $linea_fin = 0;
             $cant_pag = intval($lineasfact / 10);
             if ($lineasfact / 10 - intval($lineasfact / 10) > 0) {
                 $cant_pag = $cant_pag + 1;
             }
             for ($j = 0; $j < $cant_pag; $j++) {
                 if ($lineasfact - $linea_fin < 10) {
                     $linea_menor = ($lineasfact / 10 - intval($lineasfact / 10)) * 10;
                     $linea_fin = $linea_fin + $linea_menor;
                 } else {
                     $linea_fin = $linea_fin + 10;
                 }
                 $linea_arranque = $linea_arranque + 10;
                 if ($j != 0) {
                     $pdf_doc->pdf->ezNewPage();
                 }
                 $pdf_doc->pdf->addTextWrap(430, 773, 400, 16, $numFactura, 'left');
                 ////// Nº  FACTURA
                 $pdf_doc->pdf->addTextWrap(390, 698, 200, 14, $fecha);
                 $pdf_doc->pdf->addTextWrap(111, 648, 470, 14, $nomCliente);
                 $pdf_doc->pdf->addTextWrap(111, 633, 470, 10, $dirCliente . ' CP: ' . $cpCliente);
                 $pdf_doc->pdf->addTextWrap(111, 619, 280, 10, $locCliente . ' - ' . $provincia);
                 $pdf_doc->pdf->addTextWrap(444, 619, 200, 9, $telCliente1 . " / " . $telCliente2);
                 $pdf_doc->pdf->addTextWrap(132, 589, 200, 9, $catIVA);
                 //			$pdf_doc->pdf->addTextWrap		CUIT
                 //			$pdf_doc->pdf->addTextWrap		ING BRUTOS
                 //////////////////////////////////////////////////////////////////////////////////////
                 //////////////   CONTENIDO  DESCRIPCIÓN
                 //////////////////////////////////////////////////////////////////////////////////////
                 //Variable X p encolumnar importe
                 $varImporte = '465';
                 $Sub_Total = 0;
                 for ($i = $linea_arranque; $i < $linea_fin; $i++) {
                     //				$pdf_doc->pdf->addTextWrap(55,518-(22*($i-$linea_arranque)), 25, 12,number_format($lineas[$i]->cantidad, 0, ',', ' '),'right');
                     $pdf_doc->pdf->addTextWrap(85, 518 - 22 * ($i - $linea_arranque), 300, 12, $this->fix_html($lineas[$i]->descripcion), 'left');
                     //				$pdf_doc->pdf->addTextWrap(390,518-(22*($i-$linea_arranque)), 410, 12,$uMoneda.'  '.number_format($lineas[$i]->pvpunitario, 2, ',', 'right'));
                     //				$pdf_doc->pdf->addTextWrap(370,518-(22*($i-$linea_arranque)), 90, 12,$uMoneda.'  '.number_format($lineas[$i]->pvpunitario, 2, ',', ' '),'right');
                     //				$pdf_doc->pdf->addTextWrap(390,518-(22*($i-$linea_arranque)), 410, 12,$uMoneda.'  '.number_format($lineas[$i]->pvpunitario, 2, ',', 'right'));
                     $pdf_doc->pdf->addTextWrap($varImporte, 518 - 22 * ($i - $linea_arranque), 90, 12, number_format($lineas[$i]->pvptotal, 2, ',', ' '), 'right');
                     $Sub_Total = $Sub_Total + $lineas[$i]->pvptotal;
                 }
                 $pdf_doc->pdf->addTextWrap($varImporte - 10, 270, 90, 12, number_format($Sub_Total, 2, ',', ' '), 'right');
                 ////////////////////////////////////////////////////////////////////////////
                 ////////////    Pie
                 //
                 /*			$pdf_doc->new_table();
                             $pdf_doc->add_table_row(
                                array(
                                    'campo1' => "Cheque",
                                    'dato1' => $cheqNum,
                                    'campo2' => "Importe",
                                    'dato2' => $cheqImporte
                                )
                             );
                             $pdf_doc->add_table_row(
                                array(
                                    'campo1' => "Anticipo",
                                    'dato1' => $anticipoDetalle,
                                    'campo2' => "Efectivo",
                                    'dato2' => $efectivo
                                )
                             );
                 */
                 $pdf_doc->save_table(array('cols' => array('campo1' => array('justification' => 'right'), 'dato1' => array('justification' => 'left'), 'campo2' => array('justification' => 'right'), 'dato2' => array('justification' => 'left')), 'showLines' => 0, 'width' => 520, 'shaded' => 0));
                 $pdf_doc->pdf->ezText("\n", 10);
                 $valores = $cheqImporte + $anticipo + $efectivo + $tarjDebito + $tarjCredito;
                 /*		
                 			$pdf_doc->pdf->addTextWrap(111,195, 150, 12,$cheqNum);
                 			$pdf_doc->pdf->addTextWrap(283,195, 200, 12,$cheqBanco);
                 			$pdf_doc->pdf->addTextWrap($varImporte,190, 90, 12,$cheqImporte,'right');
                 			$pdf_doc->pdf->addTextWrap(111,166, 370, 12,$anticipoDetalle);
                 			$pdf_doc->pdf->addTextWrap($varImporte,161, 90, 12,$anticipo,'right');
                 			$pdf_doc->pdf->addTextWrap($varImporte,132, 90, 12,$efectivo,'right');
                 			$pdf_doc->pdf->addTextWrap(111,137, 370, 12,$efectivoDetalle);       
                 			$pdf_doc->pdf->addTextWrap($varImporte,104, 90, 12,$tarjDebito,'right');
                 			$pdf_doc->pdf->addTextWrap(140,109, 350, 12,$debitoDetalle);       
                 			$pdf_doc->pdf->addTextWrap($varImporte,76, 90, 12,$tarjCredito,'right');
                 			$pdf_doc->pdf->addTextWrap(140,81,350, 12,$creditoDetalle);
                 			$pdf_doc->pdf->addTextWrap($varImporte,48, 35, 12,$valores,'right');
                 */
                 $linea_actual++;
             }
         } else {
             // Imprimimos las páginas necesarias
             while ($linea_actual < $lineasfact) {
                 $lppag = 35;
                 /// líneas por página
                 /// salto de página
                 if ($linea_actual > 0) {
                     $pdf_doc->pdf->ezNewPage();
                 }
                 /*
                  * Creamos la cabecera de la página, en este caso para el modelo carta
                  */
                 if ($tipo == 'carta') {
                     $direccion = $this->factura->nombrecliente . "\n" . $this->factura->direccion;
                     if ($this->factura->codpostal and $this->factura->ciudad) {
                         $direccion .= "\n CP: " . $this->factura->codpostal . ' ' . $this->factura->ciudad;
                     } else {
                         if ($this->factura->ciudad) {
                             $direccion .= "\n" . $this->factura->ciudad;
                         }
                     }
                     if ($this->factura->provincia) {
                         $direccion .= "\n(" . $this->factura->provincia . ")";
                     }
                     $pdf_doc->pdf->ezText("\n\n", 10);
                     $pdf_doc->new_table();
                     $pdf_doc->add_table_row(array('campos' => "<b>" . ucfirst(FS_FACTURA) . ":</b>\n<b>Fecha:</b>\n<b>" . FS_CIFNIF . ":</b>", 'factura' => $this->factura->codigo . "\n" . $this->factura->fecha . "\n" . $this->factura->cifnif, 'cliente' => $this->fix_html($direccion)));
                     $pdf_doc->save_table(array('cols' => array('campos' => array('justification' => 'right', 'width' => 100), 'factura' => array('justification' => 'left'), 'cliente' => array('justification' => 'right')), 'showLines' => 0, 'width' => 520));
                     $pdf_doc->pdf->ezText("\n\n\n", 14);
                 } else {
                     /// ¿Añadimos el logo?
                     if (file_exists('tmp/' . FS_TMP_NAME . 'logo.png')) {
                         if (function_exists('imagecreatefromstring')) {
                             $pdf_doc->pdf->ezImage('tmp/' . FS_TMP_NAME . 'logo.png', 0, 200, 'none');
                             $lppag -= 2;
                             /// si metemos el logo, caben menos líneas
                         } else {
                             die('ERROR: no se encuentra la función imagecreatefromstring(). ' . 'Y por tanto no se puede usar el logotipo en los documentos.');
                         }
                     } else {
                         $pdf_doc->pdf->ezText("<b>" . $this->empresa->nombre . "</b>", 16, array('justification' => 'center'));
                         $pdf_doc->pdf->ezText(FS_CIFNIF . ": " . $this->empresa->cifnif, 8, array('justification' => 'center'));
                         $direccion = $this->empresa->direccion;
                         if ($this->empresa->codpostal) {
                             $direccion .= ' - ' . $this->empresa->codpostal;
                         }
                         if ($this->empresa->ciudad) {
                             $direccion .= ' - ' . $this->empresa->ciudad;
                         }
                         if ($this->empresa->provincia) {
                             $direccion .= ' (' . $this->empresa->provincia . ')';
                         }
                         if ($this->empresa->telefono) {
                             $direccion .= ' - Teléfono: ' . $this->empresa->telefono;
                         }
                         $pdf_doc->pdf->ezText($this->fix_html($direccion), 9, array('justification' => 'center'));
                     }
                     ////////////////////
                     //// CLIENTES  /////
                     /*
                      * Esta es la tabla con los datos del cliente:
                      * Factura:             Fecha:
                      * Cliente:             CIF/NIF:
                      * Dirección:           Teléfonos:
                      */
                     $pdf_doc->new_table();
                     $pdf_doc->add_table_row(array('campo1' => "<b>" . ucfirst(FS_FACTURA) . ":</b>", 'dato1' => $this->factura->codigo, 'campo2' => "<b>Fecha:</b>", 'dato2' => $this->factura->fecha));
                     $pdf_doc->add_table_row(array('campo1' => "<b>Cliente:</b>", 'dato1' => $this->fix_html($this->factura->nombrecliente), 'campo2' => "<b>" . FS_CIFNIF . ":</b>", 'dato2' => $this->factura->cifnif));
                     $pdf_doc->add_table_row(array('campo1' => "<b>Dirección:</b>", 'dato1' => $this->factura->direccion . ' CP: ' . $this->factura->codpostal . ' - ' . $this->factura->ciudad . ' (' . $this->factura->provincia . ')', 'campo2' => "<b>Teléfonos:</b>", 'dato2' => $this->cliente->telefono1 . '  ' . $this->cliente->telefono2));
                     $pdf_doc->save_table(array('cols' => array('campo1' => array('justification' => 'right'), 'dato1' => array('justification' => 'left'), 'campo2' => array('justification' => 'right'), 'dato2' => array('justification' => 'left')), 'showLines' => 0, 'width' => 520, 'shaded' => 0));
                     $pdf_doc->pdf->ezText("\n", 10);
                     /// en el tipo 'firma' caben menos líneas
                     if ($tipo == 'firma') {
                         $lppag -= 3;
                     }
                 }
                 /*
                  * Creamos la tabla con las lineas de la factura:
                  * 
                  * Descripción    Cantidad  PVP   DTO    Importe
                  */
                 $columnas = array('alb' => '<b>' . ucfirst(FS_ALBARAN) . '</b>', 'descripcion' => '<b>Descripción</b>', 'cantidad' => '<b>Cantidad</b>', 'pvp' => '<b>PVP</b>', 'dto' => '<b>DTO</b>', 'importe' => '<b>Importe</b>');
                 if (!$this->impresion['print_alb']) {
                     unset($columnas['alb']);
                 }
                 if (!$this->impresion['print_dto']) {
                     unset($columnas['dto']);
                 }
                 $pdf_doc->new_table();
                 $pdf_doc->add_table_header($columnas);
                 for ($i = $linea_actual; $linea_actual < $lppag + $i and $linea_actual < $lineasfact;) {
                     $descripcion = $this->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;
                     }
                     //////////////////
                     //////// CONTENIDO
                     //////////////////
                     $fila = array('alb' => $lineas[$linea_actual]->albaran_numero(), 'descripcion' => $descripcion, 'cantidad' => $lineas[$linea_actual]->cantidad, 'pvp' => $this->show_precio($lineas[$linea_actual]->pvpunitario, $this->factura->coddivisa), 'dto' => $this->show_numero($lineas[$linea_actual]->dtopor, 0) . " %", 'importe' => $this->show_precio($lineas[$linea_actual]->pvptotal, $this->factura->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)) {
                     ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                     ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                     /*
                      * Añadimos la parte de la firma y las observaciones,
                      * para el tipo 'firma'
                      */
                     if ($tipo == 'firma') {
                         $pdf_doc->pdf->ezText("\n", 9);
                         $pdf_doc->new_table();
                         $pdf_doc->add_table_header(array('campo1' => "<b>Observaciones</b>", 'campo2' => "<b>Firma</b>"));
                         $pdf_doc->add_table_row(array('campo1' => $this->fix_html($this->factura->observaciones), 'campo2' => ""));
                         $pdf_doc->save_table(array('cols' => array('campo1' => array('justification' => 'left'), 'campo2' => array('justification' => 'right', 'width' => 100)), 'showLines' => 4, 'width' => 530, 'shaded' => 0));
                     } else {
                         if ($this->factura->observaciones != '') {
                             $pdf_doc->pdf->ezText("\n" . $this->fix_html($this->factura->observaciones), 9);
                         }
                     }
                     if (!$this->factura->pagada) {
                         $fp0 = new forma_pago();
                         $forma_pago = $fp0->get($this->factura->codpago);
                         if ($forma_pago) {
                             if (is_null($forma_pago->codcuenta)) {
                                 $pdf_doc->pdf->ezText("\n<b>Forma de pago</b>: " . $forma_pago->descripcion . "\n<b>Vencimiento</b>: " . $this->factura->vencimiento, 9);
                             } else {
                                 $texto_pago = "\n<b>Forma de pago</b>: " . $forma_pago->descripcion;
                                 if ($forma_pago->domiciliado) {
                                     $cbc0 = new cuenta_banco_cliente();
                                     $encontrada = FALSE;
                                     foreach ($cbc0->all_from_cliente($this->factura->codcliente) as $cbc) {
                                         if ($cbc->iban) {
                                             $texto_pago .= "\n<b>Domiciliado en</b>: " . $cbc->iban;
                                         } else {
                                             $texto_pago .= "\n<b>Domiciliado en</b>: " . $cbc->swift;
                                         }
                                         $encontrada = TRUE;
                                         break;
                                     }
                                     if (!$encontrada) {
                                         $texto_pago .= "\n<b>El cliente no tiene cuenta bancaria asignada.</b>";
                                     }
                                 } else {
                                     $cb0 = new cuenta_banco();
                                     $cuenta_banco = $cb0->get($forma_pago->codcuenta);
                                     if ($cuenta_banco) {
                                         if ($cuenta_banco->iban) {
                                             $texto_pago .= "\n<b>IBAN</b>: " . $cuenta_banco->iban;
                                         } else {
                                             $texto_pago .= "\n<b>SWIFT o BIC</b>: " . $cuenta_banco->swift;
                                         }
                                     }
                                 }
                                 $texto_pago .= "\n<b>Vencimiento</b>: " . $this->factura->vencimiento;
                                 $pdf_doc->pdf->ezText($texto_pago, 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->factura->neto, $this->factura->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->factura->coddivisa);
                     if ($li->totalrecargo != 0) {
                         $fila['iva' . $li->iva] .= ' (RE: ' . $this->show_precio($li->totalrecargo, $this->factura->coddivisa) . ')';
                     }
                     $opciones['cols']['iva' . $li->iva] = array('justification' => 'right');
                 }
                 if ($this->factura->totalirpf != 0) {
                     $titulo['irpf'] = '<b>' . FS_IRPF . ' ' . $this->factura->irpf . '%</b>';
                     $fila['irpf'] = $this->show_precio(0 - $this->factura->totalirpf);
                     $opciones['cols']['irpf'] = array('justification' => 'right');
                 }
                 $titulo['liquido'] = '<b>Total</b>';
                 $fila['liquido'] = $this->show_precio($this->factura->total, $this->factura->coddivisa);
                 $opciones['cols']['liquido'] = array('justification' => 'right');
                 $pdf_doc->add_table_header($titulo);
                 $pdf_doc->add_table_row($fila);
                 $pdf_doc->save_table($opciones);
                 /// pié de página para la factura
                 $pdf_doc->pdf->addText(10, 10, 8, $pdf_doc->center_text($this->fix_html($this->empresa->pie_factura), 153), 0, 1.5);
                 $pagina++;
                 ///////////////////////////////////////////////////
             }
             ////////// FIN DE IF DE FIRMA
         }
     } else {
         $pdf_doc->pdf->ezText('¡' . ucfirst(FS_FACTURA) . ' sin líneas!', 20);
     }
     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_FACTURA . '_' . $this->factura->codigo . '.pdf');
     }
 }
 public function generar_pdf($archivo = FALSE)
 {
     ///// INICIO - Factura Detallada
     /// Creamos el PDF y escribimos sus metadatos
     ob_end_clean();
     $pdf_doc = new PDF_MC_Table('P', 'mm', 'A4');
     define('EEURO', chr(128));
     $lineas = $this->factura->get_lineas();
     if ($this->impresion['print_dto']) {
         $this->impresion['print_dto'] = FALSE;
         /// leemos las líneas para ver si de verdad mostramos los descuentos
         foreach ($lineas as $lin) {
             if ($lin->dtopor != 0) {
                 $this->impresion['print_dto'] = TRUE;
                 break;
             }
         }
     }
     $pdf_doc->SetTitle('Factura: ' . $this->factura->codigo . " " . $this->factura->numero2);
     $pdf_doc->SetSubject('Factura del cliente: ' . $this->factura->nombrecliente);
     $pdf_doc->SetAuthor($this->empresa->nombre);
     $pdf_doc->SetCreator('FacturaSctipts V_' . $this->version());
     $pdf_doc->Open();
     $pdf_doc->AliasNbPages();
     $pdf_doc->SetAutoPageBreak(true, 40);
     // Definimos el color de relleno (gris, rojo, verde, azul)
     $pdf_doc->SetColorRelleno('azul');
     /// Definimos todos los datos de la cabecera de la factura
     /// Datos de la empresa
     $pdf_doc->fde_nombre = $this->empresa->nombre;
     $pdf_doc->fde_FS_CIFNIF = FS_CIFNIF;
     $pdf_doc->fde_cifnif = $this->empresa->cifnif;
     $pdf_doc->fde_direccion = $this->empresa->direccion;
     $pdf_doc->fde_codpostal = $this->empresa->codpostal;
     $pdf_doc->fde_ciudad = $this->empresa->ciudad;
     $pdf_doc->fde_provincia = $this->empresa->provincia;
     $pdf_doc->fde_telefono = 'Teléfono: ' . $this->empresa->telefono;
     $pdf_doc->fde_fax = 'Fax: ' . $this->empresa->fax;
     $pdf_doc->fde_email = $this->empresa->email;
     $pdf_doc->fde_web = $this->empresa->web;
     $pdf_doc->fde_piefactura = $this->empresa->pie_factura;
     /// Insertamos el Logo y Marca de Agua
     if (file_exists('tmp/' . FS_TMP_NAME . 'logo.png') or file_exists('tmp/' . FS_TMP_NAME . 'logo.jpg')) {
         $pdf_doc->fdf_verlogotipo = '1';
         // 1/0 --> Mostrar Logotipo
         $pdf_doc->fdf_Xlogotipo = '15';
         // Valor X para Logotipo
         $pdf_doc->fdf_Ylogotipo = '35';
         // Valor Y para Logotipo
         $pdf_doc->fdf_vermarcaagua = '1';
         // 1/0 --> Mostrar Marca de Agua
         $pdf_doc->fdf_Xmarcaagua = '25';
         // Valor X para Marca de Agua
         $pdf_doc->fdf_Ymarcaagua = '110';
         // Valor Y para Marca de Agua
     } else {
         $pdf_doc->fdf_verlogotipo = '0';
         $pdf_doc->fdf_Xlogotipo = '0';
         $pdf_doc->fdf_Ylogotipo = '0';
         $pdf_doc->fdf_vermarcaagua = '0';
         $pdf_doc->fdf_Xmarcaagua = '0';
         $pdf_doc->fdf_Ymarcaagua = '0';
     }
     // Tipo de Documento
     $pdf_doc->fdf_tipodocumento = 'FACTURA';
     // (FACTURA, FACTURA PROFORMA, ¿ALBARAN, PRESUPUESTO?...)
     $pdf_doc->fdf_codigo = $this->factura->codigo . " " . $this->factura->numero2;
     // Fecha, Codigo Cliente y observaciones de la factura
     $pdf_doc->fdf_fecha = $this->factura->fecha;
     $pdf_doc->fdf_codcliente = $this->factura->codcliente;
     $pdf_doc->fdf_observaciones = iconv("UTF-8", "CP1252", $this->fix_html($this->factura->observaciones));
     // Datos del Cliente
     $pdf_doc->fdf_nombrecliente = $this->fix_html($this->factura->nombrecliente);
     $pdf_doc->fdf_FS_CIFNIF = FS_CIFNIF;
     $pdf_doc->fdf_cifnif = $this->factura->cifnif;
     $pdf_doc->fdf_direccion = $this->fix_html($this->factura->direccion);
     $pdf_doc->fdf_codpostal = $this->factura->codpostal;
     $pdf_doc->fdf_ciudad = $this->factura->ciudad;
     $pdf_doc->fdf_provincia = $this->factura->provincia;
     $pdf_doc->fdc_telefono1 = $this->cliente->telefono1;
     $pdf_doc->fdc_telefono2 = $this->cliente->telefono2;
     $pdf_doc->fdc_fax = $this->cliente->fax;
     $pdf_doc->fdc_email = $this->cliente->email;
     $pdf_doc->fdf_epago = $pdf_doc->fdf_divisa = $pdf_doc->fdf_pais = '';
     // Forma de Pago de la Factura
     $pago = new forma_pago();
     $epago = $pago->get($this->factura->codpago);
     if ($epago) {
         $pdf_doc->fdf_epago = $epago->descripcion;
     }
     // Divisa de la Factura
     $divisa = new divisa();
     $edivisa = $divisa->get($this->factura->coddivisa);
     if ($edivisa) {
         $pdf_doc->fdf_divisa = $edivisa->descripcion;
     }
     // Pais de la Factura
     $pais = new pais();
     $epais = $pais->get($this->factura->codpais);
     if ($epais) {
         $pdf_doc->fdf_pais = $epais->nombre;
     }
     // Cabecera Titulos Columnas
     if ($this->impresion['print_dto']) {
         $pdf_doc->Setdatoscab(array('ALB', 'DESCRIPCION', 'CANT', 'PRECIO', 'DTO', FS_IVA, 'IMPORTE'));
         $pdf_doc->SetWidths(array(16, 102, 10, 20, 10, 10, 22));
         $pdf_doc->SetAligns(array('C', 'L', 'R', 'R', 'R', 'R', 'R'));
         $pdf_doc->SetColors(array('6|47|109', '6|47|109', '6|47|109', '6|47|109', '6|47|109', '6|47|109', '6|47|109'));
     } else {
         $pdf_doc->Setdatoscab(array('ALB', 'DESCRIPCION', 'CANT', 'PRECIO', FS_IVA, 'IMPORTE'));
         $pdf_doc->SetWidths(array(16, 107, 10, 20, 15, 22));
         $pdf_doc->SetAligns(array('C', 'L', 'R', 'R', 'R', 'R'));
         $pdf_doc->SetColors(array('6|47|109', '6|47|109', '6|47|109', '6|47|109', '6|47|109', '6|47|109'));
     }
     /// Definimos todos los datos del PIE de la factura
     /// Lineas de IVA
     $lineas_iva = $this->factura->get_lineas_iva();
     if (count($lineas_iva) > 3) {
         $pdf_doc->fdf_lineasiva = $lineas_iva;
     } else {
         $filaiva = array();
         $i = 0;
         foreach ($lineas_iva as $li) {
             $i++;
             $filaiva[$i][0] = $li->iva ? FS_IVA . $li->iva : '';
             $filaiva[$i][1] = $li->neto ? $this->ckeckEuro($li->neto) : '';
             $filaiva[$i][2] = $li->iva ? $li->iva . "%" : '';
             $filaiva[$i][3] = $li->totaliva ? $this->ckeckEuro($li->totaliva) : '';
             $filaiva[$i][4] = $li->recargo ? $li->recargo . "%" : '';
             $filaiva[$i][5] = $li->totalrecargo ? $this->ckeckEuro($li->totalrecargo) : '';
             $filaiva[$i][6] = '';
             //// POR CREARRRRRR
             $filaiva[$i][7] = '';
             //// POR CREARRRRRR
             $filaiva[$i][8] = $li->totallinea ? $this->ckeckEuro($li->totallinea) : '';
         }
         if ($filaiva) {
             $filaiva[1][6] = $this->factura->irpf . ' %';
             $filaiva[1][7] = $this->ckeckEuro(0 - $this->factura->totalirpf);
         }
         $pdf_doc->fdf_lineasiva = $filaiva;
     }
     // Total factura numerico
     $pdf_doc->fdf_numtotal = $this->ckeckEuro($this->factura->total);
     // Total factura numeros a texto
     $pdf_doc->fdf_textotal = $this->factura->total;
     /// Agregamos la pagina inicial de la factura
     $pdf_doc->AddPage();
     // Lineas de la Factura
     //$lineas = $this->factura->get_lineas();
     if ($lineas) {
         $neto = 0;
         for ($i = 0; $i < count($lineas); $i++) {
             $neto += $lineas[$i]->pvptotal;
             $pdf_doc->neto = $this->ckeckEuro($neto);
             $articulo = new articulo();
             $art = $articulo->get($lineas[$i]->referencia);
             if ($art) {
                 $observa = "\n" . utf8_decode($this->fix_html($art->observaciones));
             } else {
                 // $observa = null; // No mostrar mensaje de error
                 $observa = "\n";
             }
             if ($this->impresion['print_dto']) {
                 $lafila = array('0' => utf8_decode($lineas[$i]->albaran_numero()), '1' => utf8_decode(strtoupper($lineas[$i]->descripcion)) . $observa, '2' => utf8_decode($lineas[$i]->cantidad), '3' => $this->ckeckEuro($lineas[$i]->pvpunitario), '4' => utf8_decode($this->show_numero($lineas[$i]->dtopor, 0) . " %"), '5' => utf8_decode($this->show_numero($lineas[$i]->iva, 0) . " %"), '6' => $this->ckeckEuro($lineas[$i]->total_iva()));
             } else {
                 $lafila = array('0' => utf8_decode($lineas[$i]->albaran_numero()), '1' => utf8_decode(strtoupper($lineas[$i]->descripcion)) . $observa, '2' => utf8_decode($lineas[$i]->cantidad), '3' => $this->ckeckEuro($lineas[$i]->pvpunitario), '4' => utf8_decode($this->show_numero($lineas[$i]->iva, 0) . " %"), '5' => $this->ckeckEuro($lineas[$i]->total_iva()));
             }
             $pdf_doc->Row($lafila, '1');
             // Row(array, Descripcion del Articulo -- ultimo valor a imprimir)
         }
         $pdf_doc->piepagina = true;
     }
     // Damos salida al archivo PDF
     if ($archivo) {
         if (!file_exists('tmp/' . FS_TMP_NAME . 'enviar')) {
             mkdir('tmp/' . FS_TMP_NAME . 'enviar');
         }
         $pdf_doc->Output('tmp/' . FS_TMP_NAME . 'enviar/' . $archivo, 'F');
     } else {
         $pdf_doc->Output();
     }
 }
 /**
  * Genera el asiento contable para una factura de venta.
  * Devuelve TRUE si el asiento se ha generado correctamente, False en caso contrario.
  * Si genera el asiento, este es accesible desde $this->asiento.
  * @param type $factura
  */
 public function generar_asiento_venta(&$factura)
 {
     $ok = FALSE;
     $this->asiento = FALSE;
     $cliente0 = new cliente();
     $subcuenta_cli = FALSE;
     /// obtenemos las tasas de conversión, para las ocasiones en que la factura está en otra divisa
     $tasaconv = 1;
     $tasaconv2 = $factura->tasaconv;
     if ($factura->coddivisa != $this->empresa->coddivisa) {
         $div0 = new divisa();
         $divisa = $div0->get($this->empresa->coddivisa);
         if ($divisa) {
             $tasaconv = $divisa->tasaconv / $factura->tasaconv;
             $tasaconv2 = $divisa->tasaconv_compra;
         }
     }
     /// obtenemos el clientes y su subcuenta
     $cliente = $cliente0->get($factura->codcliente);
     if ($cliente) {
         $subcuenta_cli = $cliente->get_subcuenta($factura->codejercicio);
     }
     if (!$subcuenta_cli) {
         $eje0 = $this->ejercicio->get($factura->codejercicio);
         $this->new_message("No se ha podido generar una subcuenta para el cliente\n            <a href='" . $eje0->url() . "'>¿Has importado los datos del ejercicio?</a>");
         if (!$this->soloasiento) {
             $this->new_message("Aun así la <a href='" . $factura->url() . "'>factura</a> se ha generado correctamente,\n            pero sin asiento contable.");
         }
     } else {
         $asiento = new asiento();
         $asiento->codejercicio = $factura->codejercicio;
         if ($factura->idfacturarect) {
             $asiento->concepto = ucfirst(FS_FACTURA_RECTIFICATIVA) . " de " . $factura->codigo . " (ventas) - " . $factura->nombrecliente;
         } else {
             $asiento->concepto = "Factura de venta " . $factura->codigo . " - " . $factura->nombrecliente;
         }
         $asiento->documento = $factura->codigo;
         $asiento->editable = FALSE;
         $asiento->fecha = $factura->fecha;
         $asiento->importe = abs($factura->total * $tasaconv);
         $asiento->tipodocumento = 'Factura de cliente';
         if ($asiento->save()) {
             $asiento_correcto = TRUE;
             $subcuenta = new subcuenta();
             $partida0 = new partida();
             $partida0->idasiento = $asiento->idasiento;
             $partida0->concepto = $asiento->concepto;
             $partida0->idsubcuenta = $subcuenta_cli->idsubcuenta;
             $partida0->codsubcuenta = $subcuenta_cli->codsubcuenta;
             $partida0->debe = $factura->total * $tasaconv;
             $partida0->coddivisa = $this->empresa->coddivisa;
             $partida0->tasaconv = $tasaconv2;
             $partida0->codserie = $factura->codserie;
             if (!$partida0->save()) {
                 $asiento_correcto = FALSE;
                 $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida0->codsubcuenta . "!");
             }
             /// generamos una partida por cada impuesto
             foreach ($factura->get_lineas_iva() as $li) {
                 $subcuenta_iva = FALSE;
                 /// ¿El impuesto tiene una subcuenta específica?
                 if (isset($this->impuestos[$li->codimpuesto])) {
                     if ($this->impuestos[$li->codimpuesto]->codsubcuentarep) {
                         $subcuenta_iva = $subcuenta->get_by_codigo($this->impuestos[$li->codimpuesto]->codsubcuentarep, $asiento->codejercicio);
                     }
                 }
                 if (!$subcuenta_iva) {
                     $subcuenta_iva = $subcuenta->get_cuentaesp('IVAREP', $asiento->codejercicio);
                 }
                 if ($subcuenta_iva and $asiento_correcto) {
                     $partida1 = new partida();
                     $partida1->idasiento = $asiento->idasiento;
                     $partida1->concepto = $asiento->concepto;
                     $partida1->idsubcuenta = $subcuenta_iva->idsubcuenta;
                     $partida1->codsubcuenta = $subcuenta_iva->codsubcuenta;
                     $partida1->haber = $li->totaliva * $tasaconv;
                     $partida1->idcontrapartida = $subcuenta_cli->idsubcuenta;
                     $partida1->codcontrapartida = $subcuenta_cli->codsubcuenta;
                     $partida1->cifnif = $cliente->cifnif;
                     $partida1->documento = $asiento->documento;
                     $partida1->tipodocumento = $asiento->tipodocumento;
                     $partida1->codserie = $factura->codserie;
                     $partida1->factura = $factura->numero;
                     $partida1->baseimponible = $li->neto * $tasaconv;
                     $partida1->iva = $li->iva;
                     $partida1->coddivisa = $this->empresa->coddivisa;
                     $partida1->tasaconv = $tasaconv2;
                     if (!$partida1->save()) {
                         $asiento_correcto = FALSE;
                         $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida1->codsubcuenta . "!");
                     }
                     if ($li->recargo != 0) {
                         $partida11 = new partida();
                         $partida11->idasiento = $asiento->idasiento;
                         $partida11->concepto = $asiento->concepto;
                         $partida11->idsubcuenta = $subcuenta_iva->idsubcuenta;
                         $partida11->codsubcuenta = $subcuenta_iva->codsubcuenta;
                         $partida11->haber = $li->totalrecargo * $tasaconv;
                         $partida11->idcontrapartida = $subcuenta_cli->idsubcuenta;
                         $partida11->codcontrapartida = $subcuenta_cli->codsubcuenta;
                         $partida11->cifnif = $cliente->cifnif;
                         $partida11->documento = $asiento->documento;
                         $partida11->tipodocumento = $asiento->tipodocumento;
                         $partida11->codserie = $factura->codserie;
                         $partida11->factura = $factura->numero;
                         $partida11->baseimponible = $li->neto * $tasaconv;
                         $partida11->recargo = $li->recargo;
                         $partida11->coddivisa = $this->empresa->coddivisa;
                         $partida11->tasaconv = $tasaconv2;
                         if (!$partida11->save()) {
                             $asiento_correcto = FALSE;
                             $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida11->codsubcuenta . "!");
                         }
                     }
                 } else {
                     if (!$subcuenta_iva) {
                         $asiento_correcto = FALSE;
                         $this->new_error_msg('No se encuentra la subcuenta de ' . FS_IVA);
                     }
                 }
             }
             $subcuenta_ventas = $subcuenta->get_cuentaesp('VENTAS', $asiento->codejercicio);
             if ($subcuenta_ventas and $asiento_correcto) {
                 $partida2 = new partida();
                 $partida2->idasiento = $asiento->idasiento;
                 $partida2->concepto = $asiento->concepto;
                 $partida2->idsubcuenta = $subcuenta_ventas->idsubcuenta;
                 $partida2->codsubcuenta = $subcuenta_ventas->codsubcuenta;
                 $partida2->haber = $factura->neto * $tasaconv;
                 $partida2->coddivisa = $this->empresa->coddivisa;
                 $partida2->tasaconv = $tasaconv2;
                 $partida2->codserie = $factura->codserie;
                 if (!$partida2->save()) {
                     $asiento_correcto = FALSE;
                     $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida2->codsubcuenta . "!");
                 }
             } else {
                 if (!$subcuenta_ventas) {
                     $asiento_correcto = FALSE;
                     $this->new_error_msg('No se encuentra la subcuenta de ventas');
                 }
             }
             /// ¿IRPF?
             if ($factura->totalirpf != 0 and $asiento_correcto) {
                 $subcuenta_irpf = $subcuenta->get_cuentaesp('IRPF', $asiento->codejercicio);
                 if (!$subcuenta_irpf) {
                     $subcuenta_irpf = $subcuenta->get_by_codigo('4730000000', $asiento->codejercicio);
                 }
                 if ($subcuenta_irpf) {
                     $partida3 = new partida();
                     $partida3->idasiento = $asiento->idasiento;
                     $partida3->concepto = $asiento->concepto;
                     $partida3->idsubcuenta = $subcuenta_irpf->idsubcuenta;
                     $partida3->codsubcuenta = $subcuenta_irpf->codsubcuenta;
                     $partida3->debe = $factura->totalirpf * $tasaconv;
                     $partida3->coddivisa = $this->empresa->coddivisa;
                     $partida3->tasaconv = $tasaconv2;
                     $partida3->codserie = $factura->codserie;
                     if (!$partida3->save()) {
                         $asiento_correcto = FALSE;
                         $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida3->codsubcuenta . "!");
                     }
                 } else {
                     if (!$subcuenta_irpf) {
                         $asiento_correcto = FALSE;
                         $this->new_error_msg('No se encuentra la subcuenta de ' . FS_IRPF);
                     }
                 }
             }
             /// comprobamos si algún artículo tiene una subcuenta asociada
             if ($asiento_correcto) {
                 $partidaA = new partida();
                 $partidaA->idasiento = $asiento->idasiento;
                 $partidaA->concepto = $asiento->concepto;
                 $partidaA->coddivisa = $this->empresa->coddivisa;
                 $partidaA->tasaconv = $tasaconv2;
                 /// importe a restar a la partida2
                 $restar = 0;
                 /**
                  * Para cada artículo de la factura, buscamos su subcuenta de compra o compra con irpf
                  */
                 $ap = new articulo_propiedad();
                 foreach ($factura->get_lineas() as $lin) {
                     $subcart = FALSE;
                     $aprops = $ap->array_get($lin->referencia);
                     if (isset($aprops['codsubcuentaventa'])) {
                         $subcart = $subcuenta->get_by_codigo($aprops['codsubcuentaventa'], $factura->codejercicio);
                     }
                     if (!$subcart) {
                         /// no hay / no se encuentra ninguna subcuenta asignada al artículo
                     } else {
                         if ($subcart->idsubcuenta != $subcuenta_ventas->idsubcuenta) {
                             if (is_null($partidaA->idsubcuenta)) {
                                 $partidaA->idsubcuenta = $subcart->idsubcuenta;
                                 $partidaA->codsubcuenta = $subcart->codsubcuenta;
                                 $partidaA->haber = $lin->pvptotal * $tasaconv;
                             } else {
                                 if ($partidaA->idsubcuenta == $subcart->idsubcuenta) {
                                     $partidaA->haber += $lin->pvptotal * $tasaconv;
                                 } else {
                                     $partidaA->haber = round($partidaA->haber, FS_NF0);
                                     $restar += $partidaA->haber;
                                     if (!$partidaA->save()) {
                                         $asiento_correcto = FALSE;
                                         $this->new_error_msg("¡Imposible generar la partida para la subcuenta del artículo " . $lin->referencia . "!");
                                     }
                                     $partidaA = new partida();
                                     $partidaA->idasiento = $asiento->idasiento;
                                     $partidaA->concepto = $asiento->concepto;
                                     $partidaA->idsubcuenta = $subcart->idsubcuenta;
                                     $partidaA->codsubcuenta = $subcart->codsubcuenta;
                                     $partidaA->haber = $lin->pvptotal * $tasaconv;
                                     $partidaA->coddivisa = $this->empresa->coddivisa;
                                     $partidaA->tasaconv = $tasaconv2;
                                 }
                             }
                         }
                     }
                 }
                 if ($partidaA->idsubcuenta and $partidaA->codsubcuenta) {
                     $partidaA->haber = round($partidaA->haber, FS_NF0);
                     $restar += $partidaA->haber;
                     if ($partidaA->save()) {
                         $partida2->haber -= $restar;
                         $partida2->save();
                     } else {
                         $asiento_correcto = FALSE;
                         $this->new_error_msg("¡Imposible generar la partida para la subcuenta del artículo " . $lin->referencia . "!");
                     }
                 }
             }
             if ($asiento_correcto) {
                 /// si es una factura rectificativa, invertimos los importes
                 if ($factura->idfacturarect) {
                     $this->invertir_asiento($asiento);
                 }
                 $factura->idasiento = $asiento->idasiento;
                 if ($factura->save()) {
                     $ok = $this->check_asiento($asiento);
                     if (!$ok) {
                         $this->new_error_msg('El asiento está descuadrado.');
                     }
                     $this->asiento = $asiento;
                 } else {
                     $this->new_error_msg("¡Imposible añadir el asiento a la factura!");
                 }
             } else {
                 if ($asiento->delete()) {
                     $this->new_message("El asiento se ha borrado.");
                 } else {
                     $this->new_error_msg("¡Imposible borrar el asiento!");
                 }
             }
         } else {
             $this->new_error_msg("¡Imposible guardar el asiento!");
         }
     }
     return $ok;
 }
 public function descripcion_divisa($cod)
 {
     $div0 = new divisa();
     $divisa = $div0->get($cod);
     if ($divisa) {
         return $divisa->descripcion;
     }
 }
 public function generar_pdf($pdf_doc)
 {
     if (!empty($pdf_doc)) {
         ///// INICIO - Factura Detallada
         /// Creamos el PDF y escribimos sus metadatos
         $pdf_doc->StartPageGroup();
         $pdf_doc->AliasNbPages();
         $pdf_doc->SetAutoPageBreak(true, 40);
         $pdf_doc->lineaactual = 0;
         $pdf_doc->fdf_observaciones = "";
         // Definimos el color de relleno (gris, rojo, verde, azul)
         $pdf_doc->SetColorRelleno('gris');
         /// Definimos todos los datos de la cabecera de la factura
         /// Datos de la empresa
         $pdf_doc->fde_nombre = $this->empresa->nombre;
         $pdf_doc->fde_FS_CIFNIF = FS_CIFNIF;
         $pdf_doc->fde_cifnif = $this->empresa->cifnif;
         $pdf_doc->fde_direccion = $this->empresa->direccion;
         $pdf_doc->fde_codpostal = $this->empresa->codpostal;
         $pdf_doc->fde_ciudad = $this->empresa->ciudad;
         $pdf_doc->fde_provincia = $this->empresa->provincia;
         $pdf_doc->fde_telefono = 'Teléfono: ' . $this->empresa->telefono;
         $pdf_doc->fde_fax = 'Fax: ' . $this->empresa->fax;
         $pdf_doc->fde_email = $this->empresa->email;
         $pdf_doc->fde_web = $this->empresa->web;
         $pdf_doc->fde_piefactura = $this->empresa->pie_factura;
         /// Insertamos el Logo y Marca de Agua
         if (file_exists(FS_MYDOCS . 'images/logo.png')) {
             $pdf_doc->fdf_verlogotipo = '1';
             // 1/0 --> Mostrar Logotipo
             $pdf_doc->fdf_Xlogotipo = '15';
             // Valor X para Logotipo
             $pdf_doc->fdf_Ylogotipo = '35';
             // Valor Y para Logotipo
             $pdf_doc->fdf_vermarcaagua = '1';
             // 1/0 --> Mostrar Marca de Agua
             $pdf_doc->fdf_Xmarcaagua = '25';
             // Valor X para Marca de Agua
             $pdf_doc->fdf_Ymarcaagua = '110';
             // Valor Y para Marca de Agua
         } elseif (file_exists(FS_MYDOCS . 'images/logo.jpg')) {
             $pdf_doc->fdf_verlogotipo = '1';
             // 1/0 --> Mostrar Logotipo
             $pdf_doc->fdf_Xlogotipo = '15';
             // Valor X para Logotipo
             $pdf_doc->fdf_Ylogotipo = '35';
             // Valor Y para Logotipo
             $pdf_doc->fdf_vermarcaagua = '1';
             // 1/0 --> Mostrar Marca de Agua
             $pdf_doc->fdf_Xmarcaagua = '25';
             // Valor X para Marca de Agua
             $pdf_doc->fdf_Ymarcaagua = '110';
             // Valor Y para Marca de Agua
         } else {
             $pdf_doc->fdf_verlogotipo = '0';
             $pdf_doc->fdf_Xlogotipo = '0';
             $pdf_doc->fdf_Ylogotipo = '0';
             $pdf_doc->fdf_vermarcaagua = '0';
             $pdf_doc->fdf_Xmarcaagua = '0';
             $pdf_doc->fdf_Ymarcaagua = '0';
         }
         // Tipo de Documento
         $pdf_doc->fdf_tipodocumento = $this->factura->tipo_comprobante;
         // (FACTURA, FACTURA PROFORMA, ¿ALBARAN, PRESUPUESTO?...)
         $pdf_doc->fdf_codigo = $this->factura->ncf;
         $pdf_doc->fdf_codigorect = $this->factura->ncf_afecta;
         $pdf_doc->fdf_estado = $this->factura->estado ? "" : "DOCUMENTO ANULADO";
         // Fecha, Codigo Cliente y observaciones de la factura
         $pdf_doc->fdf_fecha = $this->factura->fecha;
         $pdf_doc->fdf_codcliente = $this->factura->codcliente;
         $pdf_doc->fdf_observaciones = utf8_decode($this->fix_html($this->factura->observaciones));
         // Datos del Cliente
         $pdf_doc->fdf_nombrecliente = $this->fix_html($this->factura->nombrecliente);
         $pdf_doc->fdf_FS_CIFNIF = FS_CIFNIF;
         $pdf_doc->fdf_cifnif = $this->factura->cifnif;
         $pdf_doc->fdf_direccion = $this->fix_html($this->factura->direccion);
         $pdf_doc->fdf_codpostal = $this->factura->codpostal;
         $pdf_doc->fdf_ciudad = $this->factura->ciudad;
         $pdf_doc->fdf_provincia = $this->factura->provincia;
         $pdf_doc->fdc_telefono1 = $this->cliente->telefono1;
         $pdf_doc->fdc_telefono2 = $this->cliente->telefono2;
         $pdf_doc->fdc_fax = $this->cliente->fax;
         $pdf_doc->fdc_email = $this->cliente->email;
         $pdf_doc->fdf_epago = $pdf_doc->fdf_divisa = $pdf_doc->fdf_pais = '';
         // Conduce asociado
         $pdf_doc->fdf_transporte = $this->idtransporte;
         // Forma de Pago de la Factura
         $pago = new forma_pago();
         $epago = $pago->get($this->factura->codpago);
         if ($epago) {
             $pdf_doc->fdf_epago = $epago->descripcion;
         }
         // Divisa de la Factura
         $divisa = new divisa();
         $edivisa = $divisa->get($this->factura->coddivisa);
         if ($edivisa) {
             $pdf_doc->fdf_divisa = $edivisa->descripcion;
         }
         // Pais de la Factura
         $pais = new pais();
         $epais = $pais->get($this->factura->codpais);
         if ($epais) {
             $pdf_doc->fdf_pais = $epais->nombre;
         }
         // Cabecera Titulos Columnas
         $pdf_doc->Setdatoscab(array('ALB', 'DESCRIPCION', 'CANT', 'PRECIO', 'DTO', FS_IVA, 'IMPORTE'));
         $pdf_doc->SetWidths(array(16, 102, 10, 20, 10, 10, 22));
         $pdf_doc->SetAligns(array('C', 'L', 'R', 'R', 'R', 'R', 'R'));
         $pdf_doc->SetColors(array('6|47|109', '6|47|109', '6|47|109', '6|47|109', '6|47|109', '6|47|109', '6|47|109'));
         /// Agregamos la pagina inicial de la factura
         $pdf_doc->AddPage();
         /// Definimos todos los datos del PIE de la factura
         /// Lineas de IVA
         $lineas_iva = $this->factura->get_lineas_iva();
         $negativo = !empty($this->factura->idfacturarect) ? -1 : 1;
         if (count($lineas_iva) > 3) {
             $pdf_doc->fdf_lineasiva = $lineas_iva;
         } else {
             $filaiva = array();
             $i = 0;
             foreach ($lineas_iva as $li) {
                 $i++;
                 $filaiva[$i][0] = $li->iva ? FS_IVA . $li->iva * $negativo : '';
                 $filaiva[$i][1] = $li->neto ? $this->ckeckEuro($li->neto * $negativo) : '';
                 $filaiva[$i][2] = $li->iva ? $li->iva * $negativo . "%" : '';
                 $filaiva[$i][3] = $li->totaliva ? $this->ckeckEuro($li->totaliva * $negativo) : '';
                 $filaiva[$i][4] = $li->recargo ? $li->recargo . "%" : '';
                 $filaiva[$i][5] = $li->totalrecargo ? $this->ckeckEuro($li->totalrecargo * $negativo) : '';
                 $filaiva[$i][6] = '';
                 //// POR CREARRRRRR
                 $filaiva[$i][7] = '';
                 //// POR CREARRRRRR
                 $filaiva[$i][8] = $li->totallinea ? $this->ckeckEuro($li->totallinea * $negativo) : '';
             }
             if ($filaiva) {
                 $filaiva[1][6] = $this->factura->irpf . ' %';
                 $filaiva[1][7] = $this->ckeckEuro(0 - $this->factura->totalirpf * $negativo);
             }
             $pdf_doc->fdf_lineasiva = $filaiva;
         }
         // Total factura numerico
         $pdf_doc->fdf_numtotal = $this->ckeckEuro($this->factura->total * $negativo);
         // Total factura numeros a texto
         $pdf_doc->fdf_textotal = $this->factura->total * $negativo;
         // Lineas de la Factura
         $lineas = $this->factura->get_lineas();
         if ($lineas) {
             $neto = 0;
             for ($i = 0; $i < count($lineas); $i++) {
                 $neto += $lineas[$i]->pvptotal * $negativo;
                 $pdf_doc->neto = $this->ckeckEuro($neto);
                 $articulo = new articulo();
                 $art = $articulo->get($lineas[$i]->referencia);
                 if ($art) {
                     $observa = "\n" . utf8_decode($this->fix_html($art->observaciones));
                 } else {
                     //$observa = null; // No mostrar mensaje de error
                     $observa = "\n";
                 }
                 $lafila = array('0' => utf8_decode($lineas[$i]->albaran_numero()), '1' => utf8_decode(strtoupper($lineas[$i]->descripcion)) . $observa, '2' => utf8_decode($lineas[$i]->cantidad * $negativo), '3' => $this->ckeckEuro($lineas[$i]->pvpunitario), '4' => utf8_decode($this->show_numero($lineas[$i]->dtopor, 0) . " %"), '5' => utf8_decode($this->show_numero($lineas[$i]->iva, 0) . " %"), '6' => $this->ckeckEuro($lineas[$i]->total_iva() * $negativo));
                 $pdf_doc->Row($lafila, '1');
                 // Row(array, Descripcion del Articulo -- ultimo valor a imprimir)
             }
             $pdf_doc->piepagina = true;
         }
     }
 }
 /**
  * Convierte un precio de la divisa_desde a la divisa especificada
  * @param type $precio
  * @param type $coddivisa_desde
  * @param type $coddivisa
  * @return type
  */
 public function divisa_convert($precio, $coddivisa_desde, $coddivisa)
 {
     if ($coddivisa_desde != $coddivisa) {
         $div0 = new divisa();
         $divisa_desde = $div0->get($coddivisa_desde);
         if ($divisa_desde) {
             $divisa = $div0->get($coddivisa);
             if ($divisa) {
                 $precio = $precio / $divisa_desde->tasaconv * $divisa->tasaconv;
             }
         }
     }
     return $precio;
 }