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.'); } } } }
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; } }
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; } }
/** * 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. ' . '<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; }