protected function private_core() { /// ¿El usuario tiene permiso para eliminar en esta página? $this->allow_delete = $this->user->allow_delete_on(__CLASS__); $eje = new ejercicio(); $this->ejercicios = $eje->all(); $this->serie = new serie(); $fsvar = new fs_var(); if (isset($_GET['num_personalizada'])) { $this->num_personalizada = TRUE; $fsvar->simple_save('numeracion_personalizada', $this->num_personalizada); } else { $this->num_personalizada = $fsvar->simple_get('numeracion_personalizada'); } if (isset($_POST['codserie'])) { $serie = $this->serie->get($_POST['codserie']); if (!$serie) { $serie = new serie(); $serie->codserie = $_POST['codserie']; } $serie->descripcion = $_POST['descripcion']; $serie->siniva = isset($_POST['siniva']); $serie->irpf = floatval($_POST['irpf']); if ($this->num_personalizada) { $serie->codejercicio = NULL; $serie->numfactura = 1; if ($_POST['codejercicio'] != '') { $serie->codejercicio = $_POST['codejercicio']; $serie->numfactura = intval($_POST['numfactura']); } } if ($serie->save()) { $this->new_message("Serie " . $serie->codserie . " guardada correctamente"); } else { $this->new_error_msg("¡Imposible guardar la serie!"); } } else { if (isset($_GET['delete'])) { if (!$this->user->admin) { $this->new_error_msg('Sólo un administrador puede eliminar series.'); } else { $serie = $this->serie->get($_GET['delete']); if ($serie) { if ($serie->delete()) { $this->new_message('Serie eliminada correctamente.'); } else { $this->new_error_msg("¡Imposible eliminar la serie!"); } } else { $this->new_error_msg("Serie no encontrada."); } } } } }
protected function private_core() { /// ¿El usuario tiene permiso para eliminar en esta página? $this->allow_delete = $this->user->allow_delete_on(__CLASS__); $eje = new ejercicio(); $this->ejercicios = $eje->all(); $this->serie = new serie(); $fsvar = new fs_var(); if (isset($_GET['num_personalizada'])) { if ($_GET['num_personalizada'] == 'TRUE') { $this->num_personalizada = TRUE; $fsvar->simple_save('numeracion_personalizada', $this->num_personalizada); } else { $this->num_personalizada = FALSE; $fsvar->simple_delete('numeracion_personalizada'); } } else { $this->num_personalizada = $fsvar->simple_get('numeracion_personalizada'); } if (isset($_POST['codserie'])) { $this->modificar_serie(); } else { if (isset($_GET['delete'])) { if (!$this->user->admin) { $this->new_error_msg('Sólo un administrador puede eliminar ' . FS_SERIES . '.'); } else { $serie = $this->serie->get($_GET['delete']); if ($serie) { if ($serie->delete()) { $this->new_message('Datos eliminados correctamente: ' . FS_SERIE . ' ' . $_GET['delete'], TRUE); } else { $this->new_error_msg("¡Imposible eliminar " . FS_SERIE . ' ' . $_GET['delete'] . "!"); } } else { $this->new_error_msg('Datos no encontrados: ' . FS_SERIE . ' ' . $_GET['delete']); } } } } }
private function nuevo_asiento_pago($importe, $coddivisa, $tasaconv) { $asiento = new asiento(); $asiento->concepto = 'Pago facturas de ' . $this->proveedor->nombre; $asiento->editable = FALSE; $asiento->importe = $importe; $eje0 = new ejercicio(); $ejercicio = $eje0->get_by_fecha($this->today()); if ($ejercicio) { $asiento->codejercicio = $ejercicio->codejercicio; } $subcuenta_pro = $this->proveedor->get_subcuenta($ejercicio->codejercicio); $subc0 = new subcuenta(); $subcaja = $subc0->get_cuentaesp('CAJA', $ejercicio->codejercicio); if (!$ejercicio) { $this->new_error_msg('Ningún ejercico encontrado.'); } else { if (!$ejercicio->abierto()) { $this->new_error_msg('El ejercicio ' . $ejercicio->codejercicio . ' está cerrado.'); } else { if (!$subcuenta_pro) { $this->new_message("No se ha podido generar una subcuenta para el proveedor " . "<a href='" . $ejercicio->url() . "'>¿Has importado los datos del ejercicio?</a>"); } else { if (!$subcaja) { $this->new_message("No se ha encontrado la subcuenta de caja " . "<a href='" . $ejercicio->url() . "'>¿Has importado los datos del ejercicio?</a>"); } else { if ($asiento->save()) { $partida1 = new partida(); $partida1->idasiento = $asiento->idasiento; $partida1->concepto = $asiento->concepto; $partida1->idsubcuenta = $subcuenta_pro->idsubcuenta; $partida1->codsubcuenta = $subcuenta_pro->codsubcuenta; $partida1->debe = $importe; $partida1->coddivisa = $coddivisa; $partida1->tasaconv = $tasaconv; $partida1->codserie = $this->codserie; $partida1->save(); $partida2 = new partida(); $partida2->idasiento = $asiento->idasiento; $partida2->concepto = $asiento->concepto; $partida2->idsubcuenta = $subcaja->idsubcuenta; $partida2->codsubcuenta = $subcaja->codsubcuenta; $partida2->haber = $importe; $partida2->coddivisa = $coddivisa; $partida2->tasaconv = $tasaconv; $partida2->codserie = $this->codserie; $partida2->save(); $this->new_message('<a href="' . $asiento->url() . '">Asiento de pago</a> generado.'); } else { $this->new_error_msg('Error al guardar el asiento.'); } } } } } return $asiento; }
public function cron_job() { /* * Marcamos como ptefactura = FALSE todos los albaranes de ejercicios * ya cerrados. Así no se podrán modificar ni facturar. */ $ejercicio = new ejercicio(); foreach ($ejercicio->all() as $eje) { if (!$eje->abierto()) { $this->db->exec("UPDATE " . $this->table_name . " SET ptefactura = FALSE\n WHERE codejercicio = " . $this->var2str($eje->codejercicio) . ";"); } } }
public function new_subcuenta($suma_codigo) { $ejercicio = new ejercicio(); $eje0 = $ejercicio->get($this->codejercicio); if ($eje0) { $codsubcuenta = floatval(sprintf('%-0' . $eje0->longsubcuenta . 's', $this->codcuenta)) + $suma_codigo; $subcuenta = new subcuenta(); $subc0 = $subcuenta->get_by_codigo($codsubcuenta, $this->codejercicio); if ($subc0) { return $subc0; } else { $subc0 = new subcuenta(); $subc0->codcuenta = $this->codcuenta; $subc0->idcuenta = $this->idcuenta; $subc0->codejercicio = $this->codejercicio; $subc0->codsubcuenta = $codsubcuenta; return $subc0; } } else { return FALSE; } }
public function renumerar() { $ejercicio = new ejercicio(); foreach ($ejercicio->all_abiertos() as $eje) { $posicion = 0; $numero = 1; $sql = ''; $continuar = TRUE; $consulta = "SELECT idasiento,numero,fecha FROM " . $this->table_name . " WHERE codejercicio = '" . $eje->codejercicio . "'\n ORDER BY codejercicio ASC, fecha ASC, idasiento ASC"; $asientos = $this->db->select_limit($consulta, 1000, $posicion); while ($asientos and $continuar) { foreach ($asientos as $col) { if ($col['numero'] != $numero) { $sql .= "UPDATE " . $this->table_name . " SET numero = '" . $numero . "' WHERE idasiento = '" . $col['idasiento'] . "'; "; } $numero++; } $posicion += 1000; if ($sql != '') { if (!$this->db->exec($sql)) { $this->new_error_msg("Se ha producido un error mientras se\n renumeraban los asientos del ejercicio " . $eje->codejercicio); $continuar = FALSE; } $sql = ''; } $asientos = $this->db->select_limit($consulta, 1000, $posicion); } } return $continuar; }
private function nuevo_albaran_cliente($p) { // print_r($p); $continuar = TRUE; $respuesta = ""; $cliente = $this->cliente->get($p['cliente']); if (!$cliente) { $respuesta .= 'Cliente no encontrado.'; $continuar = FALSE; } $almacen = $this->almacen->get($p['almacen']); if ($almacen) { } else { $respuesta .= 'Almacén no encontrado.'; $continuar = FALSE; } $eje0 = new ejercicio(); $ejercicio = $eje0->get_by_fecha($p['fecha'], FALSE); if (!$ejercicio) { $respuesta .= 'Ejercicio no encontrado.'; $continuar = FALSE; } $serie = $this->serie->get($p['serie']); if (!$serie) { $respuesta .= 'Serie no encontrada.'; $continuar = FALSE; } $forma_pago = $this->forma_pago->get($p['forma_pago']); if ($forma_pago) { } else { $respuesta .= 'Forma de pago no encontrada.'; $continuar = FALSE; } $divisa = $this->divisa->get($p['divisa']); if (!$divisa) { $respuesta .= 'Divisa no encontrada.'; $continuar = FALSE; } $albaran = new albaran_cliente(); if ($continuar) { $albaran->fecha = $p['fecha']; $albaran->hora = $p['hora']; $albaran->codalmacen = $almacen->codalmacen; $albaran->codejercicio = $ejercicio->codejercicio; $albaran->codserie = $serie->codserie; $albaran->codpago = $forma_pago->codpago; $albaran->coddivisa = $divisa->coddivisa; $albaran->tasaconv = $divisa->tasaconv; $albaran->codagente = $this->agente->codagente; $albaran->numero2 = $p['numero2']; $albaran->observaciones = $p['observaciones']; $albaran->porcomision = $this->agente->porcomision; $albaran->codcliente = $cliente->codcliente; $albaran->cifnif = $cliente->cifnif; $albaran->nombrecliente = $cliente->nombre; $direccion = array(); foreach ($cliente->get_direcciones() as $dir) { if ($dir->domfacturacion) { $direccion = $dir; break; } } $albaran->ciudad = $direccion->ciudad; $albaran->codpais = $direccion->codpais; $albaran->codpostal = $direccion->codpostal; $albaran->direccion = $direccion->direccion; $albaran->provincia = $direccion->provincia; if ($albaran->save()) { $art0 = new articulo(); $n = floatval($p['numlineas']); for ($i = 0; $i <= $n; $i++) { if (isset($p['referencia_' . $i])) { $linea = new linea_albaran_cliente(); $linea->idalbaran = $albaran->idalbaran; $linea->descripcion = $p['desc_' . $i]; if (!$serie->siniva and $cliente->regimeniva != 'Exento') { $imp0 = $this->impuesto->get_by_iva($p['iva_' . $i]); if ($imp0) { $linea->codimpuesto = $imp0->codimpuesto; $linea->iva = floatval($p['iva_' . $i]); $linea->recargo = floatval($p['recargo_' . $i]); } else { $linea->iva = floatval($p['iva_' . $i]); $linea->recargo = floatval($p['recargo_' . $i]); } } $linea->irpf = floatval($p['irpf_' . $i]); $linea->pvpunitario = floatval($p['pvp_' . $i]); $linea->cantidad = floatval($p['cantidad_' . $i]); $linea->dtopor = floatval($p['dto_' . $i]); $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad; $linea->pvptotal = floatval($p['neto_' . $i]); $articulo = $art0->get($p['referencia_' . $i]); if ($articulo) { $linea->referencia = $articulo->referencia; } if ($linea->save()) { if ($articulo and isset($p['stock'])) { /// descontamos del stock $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; if ($linea->irpf > $albaran->irpf) { $albaran->irpf = $linea->irpf; } } else { $respuesta .= "¡Imposible guardar la linea con referencia: " . $linea->referencia; $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()) { $respuesta .= "Albarán correcto"; } else { $respuesta .= "¡Imposible actualizar el <a href='" . $albaran->url() . "'>" . FS_ALBARAN . "</a>!"; } } else { if ($albaran->delete()) { $respuesta .= FS_ALBARAN . " eliminado correctamente."; } else { $respuesta .= "¡Imposible eliminar el <a href='" . $albaran->url() . "'>" . FS_ALBARAN . "</a>!"; } } } else { $respuesta .= "¡Imposible guardar el " . FS_ALBARAN . "!"; } } return $respuesta; }
public function get_ejercicio() { $eje = new \ejercicio(); return $eje->get($this->codejercicio); }
/** * Genera el balance de situación. * @param type $codeje */ public function generar_sit($codeje) { $ejercicio = new ejercicio(); $eje0 = $ejercicio->get($codeje); if ($eje0) { $pdf_doc = new fs_pdf(); $pdf_doc->pdf->addInfo('Title', 'Balance de pérdidas y ganancias de ' . $this->empresa->nombre); $pdf_doc->pdf->addInfo('Subject', 'Balance de pérdidas y ganancias de ' . $this->empresa->nombre); $pdf_doc->pdf->addInfo('Author', $this->empresa->nombre); $pdf_doc->pdf->ezStartPageNumbers(580, 10, 10, 'left', '{PAGENUM} de {TOTALPAGENUM}'); $this->situacion($pdf_doc, $eje0, FALSE); $pdf_doc->show(); } }
private function buscar_subcuenta() { /// desactivamos la plantilla HTML $this->template = FALSE; $subcuenta = new subcuenta(); $eje0 = new ejercicio(); $ejercicio = $eje0->get($_REQUEST['codejercicio']); $json = array(); foreach ($subcuenta->search_by_ejercicio($ejercicio->codejercicio, $_REQUEST['buscar_subcuenta']) as $subc) { $json[] = array('value' => $subc->codsubcuenta, 'data' => $subc->descripcion, 'saldo' => $subc->saldo, 'link' => $subc->url()); } header('Content-Type: application/json'); echo json_encode(array('query' => $_REQUEST['buscar_subcuenta'], 'suggestions' => $json)); }
private function importar_sat() { $this->registro_sat = new registro_sat(); $this->detalle_sat = new detalle_sat(); $this->cliente = new cliente(); $importados = 0; $importados_det = 0; $data = $this->db->select("SELECT * FROM registros_sat;"); if ($data) { foreach ($data as $d) { $this->servicio = $this->registro_sat->get($d['nsat']); if ($this->servicio) { $this->servicio = new servicio_cliente(); $this->servicio->numero2 = "SAT_" . $d['nsat']; $this->servicio->fecha = $d['fentrada']; if (isset($d['fcomienzo'])) { $this->servicio->fechainicio = Date('d-m-Y H:i', strtotime($d['fcomienzo'])); } if (isset($d['ffin'])) { $this->servicio->fechafin = Date('d-m-Y H:i', strtotime($d['ffin'])); } //obtenemos ejercicio $eje0 = new ejercicio(); $ejercicio = $eje0->get_by_fecha($d['fentrada']); $this->servicio->codejercicio = $ejercicio->codejercicio; $this->servicio->material = $d['modelo']; $this->servicio->descripcion = $d['averia']; $this->servicio->accesorios = $d['accesorios']; $this->servicio->codcliente = $d['codcliente']; $this->servicio->observaciones = $d['observaciones']; $this->servicio->codagente = $d['codagente']; $this->servicio->idestado = '1'; $this->servicio->prioridad = $d['prioridad']; //obtenemos cliente $cliente0 = new cliente(); $cliente = $cliente0->get($d['codcliente']); $this->servicio->nombrecliente = $cliente->nombre; $this->servicio->codserie = $this->empresa->codserie; $this->servicio->codpago = $this->empresa->codpago; if ($this->servicio->save()) { $importados++; } //Importamos Detalles: $data2 = $this->db->select("SELECT * FROM detalles_sat WHERE nsat=" . $d['nsat'] . ";"); if ($data2) { foreach ($data2 as $d2) { $detalle = $this->detalle_sat->get($d2['id']); if ($detalle) { $detalle = new detalle_servicio(); $detalle->idservicio = $this->servicio->idservicio; $detalle->descripcion = $d2['descripcion']; $detalle->fecha = $d2['fecha']; if ($detalle->save()) { $importados_det++; } } } } } } } $this->new_message($importados . ' registros SAT importados.'); $this->new_message($importados_det . ' detalles SAT importados.'); $this->avisosat = '2'; }
/** * * @param recibo_cliente $recibo * @param pago_recibo_cliente $pago * @param ejercicio $ejercicio * @param subcuenta $subcli * @return type */ private function nuevo_asiento_pago(&$recibo, &$pago, &$ejercicio, &$subcli) { $asiento = new asiento(); $asiento->fecha = $pago->fecha; $asiento->codejercicio = $ejercicio->codejercicio; $asiento->editable = FALSE; $asiento->importe = $recibo->importe; if ($pago->tipo == 'Pago') { $asiento->concepto = 'Cobro recibo ' . $recibo->codigo . ' - ' . $recibo->nombrecliente; } else { $asiento->concepto = $pago->tipo . ' recibo ' . $recibo->codigo . ' - ' . $recibo->nombrecliente; } if (!$ejercicio->abierto()) { $this->new_error_msg('El ejercicio ' . $ejercicio->codejercicio . ' está cerrado.'); } else { if ($asiento->save()) { $partida1 = new partida(); $partida1->idasiento = $asiento->idasiento; $partida1->concepto = $asiento->concepto; $partida1->idsubcuenta = $subcli->idsubcuenta; $partida1->codsubcuenta = $subcli->codsubcuenta; $partida1->haber = $recibo->importe; $partida1->coddivisa = $recibo->coddivisa; $partida1->tasaconv = $recibo->tasaconv; $partida1->codserie = $recibo->codserie; $partida1->save(); $partida2 = new partida(); $partida2->idasiento = $asiento->idasiento; $partida2->concepto = $asiento->concepto; $partida2->idsubcuenta = $pago->idsubcuenta; $partida2->codsubcuenta = $pago->codsubcuenta; $partida2->debe = $recibo->importe; $partida2->coddivisa = $recibo->coddivisa; $partida2->tasaconv = $recibo->tasaconv; $partida2->codserie = $recibo->codserie; $partida2->save(); } else { $this->new_error_msg('Error al guardar el asiento.'); } } return $asiento->idasiento; }
private function generar_recibos_pagos() { /** * añadimos el idfactura a todos los pagos generados durante la etapa de albarán */ $idalbaran = NULL; foreach ($this->factura->get_lineas() as $lin) { if ($lin->idalbaran != $idalbaran) { $idalbaran = $lin->idalbaran; $this->db->exec("UPDATE pagos SET idfactura = " . $this->factura->var2str($this->factura->idfactura) . " WHERE idalbaran = " . $this->factura->var2str($idalbaran) . ";"); } } $cli = new cliente(); $cliente = $cli->get($this->factura->codcliente); if ($cliente) { $eje0 = new ejercicio(); $ejercicio = $eje0->get_by_fecha(date('d-m-Y')); $subcuenta = FALSE; $subcuenta_caja = FALSE; foreach ($cliente->get_subcuentas() as $sc) { $subcuenta = $sc; $subcuenta_caja = $sc->get_cuentaesp('CAJA', $ejercicio->codejercicio); break; } $pago0 = new pago(); foreach ($pago0->all_from_factura($this->factura->idfactura) as $pago) { if (is_null($pago->idrecibo)) { $this->generar_recibo_pago($pago, $ejercicio, $subcuenta, $subcuenta_caja); } } } }
private function nueva_factura_proveedor() { $continuar = TRUE; $proveedor = $this->proveedor->get($_POST['proveedor']); if ($proveedor) { $this->save_codproveedor($proveedor->codproveedor); } else { $this->new_error_msg('Proveedor no encontrado.'); $continuar = FALSE; } if (isset($_POST['almacen'])) { $almacen = $this->almacen->get($_POST['almacen']); if ($almacen) { $this->save_codalmacen($almacen->codalmacen); } else { $this->new_error_msg('Almacén no encontrado.'); $continuar = FALSE; } } $factura = new factura_proveedor(); $eje0 = new ejercicio(); $ejercicio = $eje0->get_by_fecha($_POST['fecha']); if ($ejercicio) { $this->save_codejercicio($ejercicio->codejercicio); } else { $this->autorizar_factura = 1; // $this->new_error_msg('Ejercicio no encontrado.1'); header('Location: ' . $factura->url_list() . '&nueva=2'); $continuar = FALSE; } $serie = $this->serie->get($_POST['serie']); if (!$serie) { $this->new_error_msg('Serie no encontrada.'); $continuar = FALSE; } $forma_pago = $this->forma_pago->get($_POST['forma_pago']); if ($forma_pago) { $this->save_codpago($forma_pago->codpago); } else { $this->new_error_msg('Forma de pago no encontrada.'); $continuar = FALSE; } $divisa = $this->divisa->get($_POST['divisa']); if ($divisa) { $this->save_coddivisa($divisa->coddivisa); } else { $this->new_error_msg('Divisa no encontrada.'); $continuar = FALSE; } if ($this->duplicated_petition($_POST['petition_id'])) { $this->new_error_msg('Petición duplicada. Has hecho doble clic sobre el botón guardar y se han enviado dos peticiones. Mira en <a href="' . $factura->url() . '">Facturas</a> para ver si la factura se ha guardado correctamente.'); $continuar = FALSE; } $a = strlen(substr($_POST['fecha'], 6)); if ($a != 4) { $continuar = FALSE; } if ($continuar) { $factura->fecha = $_POST['fecha']; $fecha_factura = $_POST['fecha']; $factura->hora = $_POST['hora']; $factura->codproveedor = $proveedor->codproveedor; $factura->nombre = $proveedor->razonsocial; $factura->idpagodevol = 0; $factura->cifnif = $proveedor->cifnif; $factura->codalmacen = $almacen->codalmacen; $factura->codejercicio = $ejercicio->codejercicio; $factura->codserie = $serie->codserie; $factura->codpago = $forma_pago->codpago; $factura->coddivisa = $divisa->coddivisa; $factura->tasaconv = $divisa->tasaconv_compra; $factura->tipo = $_POST['tipo']; $factura->cai = $_POST['cai']; $factura->caivence = $_POST['caivence']; if ($_POST['tasaconv'] != '') { $factura->tasaconv = floatval($_POST['tasaconv']); } $factura->codagente = $this->agente->codagente; $factura->numproveedor = $_POST['tipo'] . '/' . $_POST['numproveedor']; $factura->observaciones = $_POST['observaciones']; $factura->irpf = $serie->irpf; if ($forma_pago->genrecibos == 'Pagados') { // $factura->pagada = TRUE; } if ($factura->save()) { $art0 = new articulo(); $inventario = new inventario(); $n = floatval($_POST['numlineas']); for ($i = 0; $i < $n; $i++) { if (isset($_POST['referencia_' . $i])) { $linea = new linea_factura_proveedor(); $linea->idfactura = $factura->idfactura; $this->id_factura = $factura->idfactura; $linea->descripcion = $_POST['desc_' . $i]; $linea->irpf = floatval($_POST['irpf_' . $i]); $linea->pvpunitario = floatval($_POST['pvp_' . $i]); $linea->cantidad = floatval($_POST['cantidad_' . $i]); $linea->dtopor = floatval($_POST['dto_' . $i]); $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad; $linea->pvptotal = floatval($_POST['neto_' . $i]); $postot = strlen($_POST['subcuenta_' . $i]); $poscad = strpos($_POST['subcuenta_' . $i], '/'); $posid = strpos($_POST['subcuenta_' . $i], '%'); $subcuencod = substr($_POST['subcuenta_' . $i], 0, $poscad); $subcuendes = substr($_POST['subcuenta_' . $i], $poscad + 1, $posid - $postot); $idsubcuen = substr($_POST['subcuenta_' . $i], $posid + 1); $linea->codsubcuenta = $subcuencod; $linea->subcuentadesc = $subcuendes; $linea->idsubcuenta = $idsubcuen; $articulo = $art0->get($_POST['referencia_' . $i]); //////////////////////////////////////////////////////////////////////// //// GUARDA subcuenta en articulo cuando se carga la factura //////////////////////////////////////////////////// $artval = $this->artsubcuentas->get_ref($_POST['referencia_' . $i]); if ($artval != $subcuencod || $subcuencod == NULL) { if ($_POST['tipo'] == 'B' || $_POST['tipo'] == 'F' || $_POST['tipo'] == 'T' || $_POST['tipo'] == 'Q' || $_POST['tipo'] == 'C' || $_POST['tipo'] == 'D') { $this->artsubcuentas->guarda_subcuenta_comp($_POST['referencia_' . $i], $subcuencod, $subcuendes); } else { $this->artsubcuentas->guarda_subcuenta_dev($_POST['referencia_' . $i], $subcuencod, $subcuendes); } } ////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// if ($articulo) { $linea->referencia = $articulo->referencia; } if ($linea->save()) { if ($articulo) { if (isset($_POST['costemedio'])) { if ($articulo->costemedio == 0) { $articulo->costemedio = $linea->pvptotal / $linea->cantidad; } else { $articulo->costemedio = $articulo->get_costemedio(); if ($articulo->costemedio == 0) { $articulo->costemedio = $linea->pvptotal / $linea->cantidad; } } $this->actualizar_precio_proveedor($factura->codproveedor, $linea); } if (isset($_POST['stock'])) { $articulo->sum_stock($factura->codalmacen, $linea->cantidad); if ($articulo) { $inventario->inventario_agregar($factura->codalmacen, $linea->referencia, $linea->cantidad, $linea->pvpunitario); } } else { if (isset($_POST['costemedio'])) { $articulo->save(); } } } $factura->neto += $linea->pvptotal; $factura->totaliva += $linea->pvptotal * $linea->iva / 100; $factura->totalirpf += $linea->pvptotal * $linea->irpf / 100; $factura->totalrecargo += $linea->pvptotal * $linea->recargo / 100; } else { $this->new_error_msg("¡Imposible guardar la linea con referencia: " . $linea->referencia); $continuar = FALSE; } } } if ($continuar) { $factura->fecha = $fecha_factura; /// redondeamos $factura->neto = round($factura->neto, FS_NF0); $factura->totaliva = round($factura->totaliva, FS_NF0); $factura->totalirpf = round($factura->totalirpf, FS_NF0); $factura->totalrecargo = round($factura->totalrecargo, FS_NF0); $factura->total = $factura->neto + $factura->totaliva - $factura->totalirpf + $factura->totalrecargo; if (abs(floatval($_POST['atotal']) - $factura->total) >= 0.02) { $this->new_error_msg("El total difiere entre el controlador y la vista (" . $factura->total . " frente a " . $_POST['atotal'] . "). Debes informar del error."); $factura->delete(); } else { if ($factura->save()) { ///////// GENERA ASIENTO // $this->generar_asiento($factura); // $this->new_message("<a href='".$factura->url()."'>Factura</a> guardada correctamente."); // $this->new_change('Factura Proveedor '.$factura->codigo, $factura->url(), TRUE); $this->autorizar_factura = 1; $this->new_error_msg('Factura Guardada'); if ($_POST['redir'] == 'TRUE') { header('Location: ' . $factura->url_list() . '&nueva=1'); } } else { $this->new_error_msg("¡Imposible actualizar la <a href='" . $factura->url() . "'>factura</a>!"); } } } else { $this->new_message("Factura eliminada correctamente."); } } else { $this->new_error_msg("¡Imposible guardar la factura!"); } } }
private function nueva_factura_cliente() { $continuar = TRUE; $cliente = $this->cliente->get($_POST['cliente']); if ($cliente) { $this->save_codcliente($cliente->codcliente); } else { $this->new_error_msg('Cliente no encontrado.'); $continuar = FALSE; } $almacen = $this->almacen->get($_POST['almacen']); if ($almacen) { $this->save_codalmacen($almacen->codalmacen); } else { $this->new_error_msg('Almacén no encontrado.'); $continuar = FALSE; } $eje0 = new ejercicio(); $ejercicio = $eje0->get_by_fecha($_POST['fecha']); if ($ejercicio) { $this->save_codejercicio($ejercicio->codejercicio); } else { $this->new_error_msg('Ejercicio no encontrado.'); $continuar = FALSE; } $serie = $this->serie->get($_POST['serie']); if (!$serie) { $this->new_error_msg('Serie no encontrada.'); $continuar = FALSE; } $forma_pago = $this->forma_pago->get($_POST['forma_pago']); if ($forma_pago) { $this->save_codpago($forma_pago->codpago); } else { $this->new_error_msg('Forma de pago no encontrada.'); $continuar = FALSE; } $divisa = $this->divisa->get($_POST['divisa']); if ($divisa) { $this->save_coddivisa($divisa->coddivisa); } else { $this->new_error_msg('Divisa no encontrada.'); $continuar = FALSE; } $factura = new factura_cliente(); if ($this->duplicated_petition($_POST['petition_id'])) { $this->new_error_msg('Petición duplicada. Has hecho doble clic sobre el botón guardar y se han enviado dos peticiones. Mira en <a href="' . $factura->url() . '">Facturas</a> para ver si la factura se ha guardado correctamente.'); $continuar = FALSE; } if ($continuar) { $factura->fecha = $_POST['fecha']; $factura->hora = $_POST['hora']; $factura->codalmacen = $almacen->codalmacen; $factura->codejercicio = $ejercicio->codejercicio; $factura->codserie = $serie->codserie; $factura->codpago = $forma_pago->codpago; $factura->coddivisa = $divisa->coddivisa; $factura->tasaconv = $divisa->tasaconv; $factura->codagente = $this->agente->codagente; $factura->observaciones = $_POST['observaciones']; $factura->numero2 = $_POST['numero2']; $factura->irpf = $serie->irpf; $factura->porcomision = $this->agente->porcomision; if ($forma_pago->genrecibos == 'Pagados') { $factura->pagada = TRUE; } foreach ($cliente->get_direcciones() as $d) { if ($d->domfacturacion) { $factura->codcliente = $cliente->codcliente; $factura->cifnif = $cliente->cifnif; $factura->nombrecliente = $cliente->nombrecomercial; $factura->apartado = $d->apartado; $factura->ciudad = $d->ciudad; $factura->coddir = $d->id; $factura->codpais = $d->codpais; $factura->codpostal = $d->codpostal; $factura->direccion = $d->direccion; $factura->provincia = $d->provincia; break; } } if (is_null($factura->codcliente)) { $this->new_error_msg("No hay ninguna dirección asociada al cliente."); } else { if ($factura->save()) { $art0 = new articulo(); $n = floatval($_POST['numlineas']); for ($i = 0; $i <= $n; $i++) { if (isset($_POST['referencia_' . $i])) { $articulo = $art0->get($_POST['referencia_' . $i]); if ($articulo) { $linea = new linea_factura_cliente(); $linea->idfactura = $factura->idfactura; $linea->referencia = $articulo->referencia; $linea->descripcion = $_POST['desc_' . $i]; $linea->irpf = $factura->irpf; if (!$serie->siniva and $cliente->regimeniva != 'Exento') { $imp0 = $this->impuesto->get_by_iva($_POST['iva_' . $i]); if ($imp0) { $linea->codimpuesto = $imp0->codimpuesto; $linea->iva = floatval($_POST['iva_' . $i]); $linea->recargo = floatval($_POST['recargo_' . $i]); } else { $linea->iva = floatval($_POST['iva_' . $i]); $linea->recargo = floatval($_POST['recargo_' . $i]); } } $linea->pvpunitario = floatval($_POST['pvp_' . $i]); $linea->cantidad = floatval($_POST['cantidad_' . $i]); $linea->dtopor = floatval($_POST['dto_' . $i]); $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad; $linea->pvptotal = floatval($_POST['neto_' . $i]); if ($linea->save()) { /// descontamos del stock $articulo->sum_stock($factura->codalmacen, 0 - $linea->cantidad); $factura->neto += $linea->pvptotal; $factura->totaliva += $linea->pvptotal * $linea->iva / 100; $factura->totalirpf += $linea->pvptotal * $linea->irpf / 100; $factura->totalrecargo += $linea->pvptotal * $linea->recargo / 100; } else { $this->new_error_msg("¡Imposible guardar la linea con referencia: " . $linea->referencia); $continuar = FALSE; } } else { $this->new_error_msg("Artículo no encontrado: " . $_POST['referencia_' . $i]); $continuar = FALSE; } } } if ($continuar) { /// redondeamos $factura->neto = round($factura->neto, FS_NF0); $factura->totaliva = round($factura->totaliva, FS_NF0); $factura->totalirpf = round($factura->totalirpf, FS_NF0); $factura->totalrecargo = round($factura->totalrecargo, FS_NF0); $factura->total = $factura->neto + $factura->totaliva - $factura->totalirpf + $factura->totalrecargo; if (abs(floatval($_POST['atotal']) - $factura->total) > 0.01) { $this->new_error_msg("El total difiere entre la vista y el controlador (" . $_POST['atotal'] . " frente a " . $factura->total . "). Debes informar del error."); $factura->delete(); } else { if ($factura->save()) { $this->generar_asiento($factura); $this->new_message("<a href='" . $factura->url() . "'>Factura</a> guardada correctamente."); $this->new_change('Factura Cliente ' . $factura->codigo, $factura->url(), TRUE); } else { $this->new_error_msg("¡Imposible actualizar la <a href='" . $factura->url() . "'>Factura</a>!"); } } } else { if ($factura->delete()) { $this->new_message("Factura eliminada correctamente."); } else { $this->new_error_msg("¡Imposible eliminar la <a href='" . $factura->url() . "'>Factura</a>!"); } } } else { $this->new_error_msg("¡Imposible guardar la Factura!"); } } } }
public function huecos() { $error = TRUE; $huecolist = $this->cache->get_array2('factura_cliente_huecos', $error); if ($error) { $ejercicio = new ejercicio(); foreach ($ejercicio->all_abiertos() as $eje) { $codserie = ''; $num = intval(FS_NFACTURA_CLI); /// definido en el config2 $numeros = $this->db->select("SELECT codserie," . $this->db->sql_to_int('numero') . " as numero,fecha,hora\n FROM " . $this->table_name . " WHERE codejercicio = " . $this->var2str($eje->codejercicio) . " ORDER BY codserie ASC, numero ASC;"); if ($numeros) { foreach ($numeros as $n) { if ($n['codserie'] != $codserie) { $codserie = $n['codserie']; $num = intval(FS_NFACTURA_CLI); /// definido en el config2 } if (intval($n['numero']) != $num) { while ($num < intval($n['numero'])) { $huecolist[] = array('codigo' => $eje->codejercicio . sprintf('%02s', $codserie) . sprintf('%06s', $num), 'fecha' => Date('d-m-Y', strtotime($n['fecha'])), 'hora' => $n['hora']); $num++; } } $num++; } } } $this->cache->set('factura_cliente_huecos', $huecolist, 3600); } return $huecolist; }
/** * Devuelve un array con los huecos en la numeración. * @return type */ public function huecos() { $error = TRUE; $huecolist = $this->cache->get_array2('factura_cliente_huecos', $error); if ($error) { $ejercicio = new ejercicio(); $serie = new serie(); foreach ($ejercicio->all_abiertos() as $eje) { $codserie = ''; $num = 1; $data = $this->db->select("SELECT codserie," . $this->db->sql_to_int('numero') . " as numero,fecha,hora\n FROM " . $this->table_name . " WHERE codejercicio = " . $this->var2str($eje->codejercicio) . " ORDER BY codserie ASC, numero ASC;"); if ($data) { foreach ($data as $d) { if ($d['codserie'] != $codserie) { $codserie = $d['codserie']; $num = 1; $se = $serie->get($codserie); if ($se) { /// ¿Se ha definido un nº inicial de factura para esta serie y ejercicio? if ($eje->codejercicio == $se->codejercicio) { $num = $se->numfactura; } } } if (intval($d['numero']) < $num) { /** * El número de la factura es menor que el inicial. * El usuario ha cambiado el número inicial después de hacer * facturas. */ } else { if (intval($d['numero']) == $num) { /// el número es correcto, avanzamos $num++; } else { /** * Hemos encontrado un hueco y debemos usar el número y la fecha. * La variable pasos permite dejar de añadir huecos al llegar a 100, * así evitamos agotar la memoria en caso de error grave. */ $pasos = 0; while ($num < intval($d['numero']) and $pasos < 100) { $huecolist[] = array('codigo' => $eje->codejercicio . sprintf('%02s', $codserie) . sprintf('%06s', $num), 'fecha' => Date('d-m-Y', strtotime($d['fecha'])), 'hora' => $d['hora']); $num++; $pasos++; } /// avanzamos uno más $num++; } } } } } $this->cache->set('factura_cliente_huecos', $huecolist, 3600); } return $huecolist; }
public function huecos() { $error = TRUE; $huecolist = $this->cache->get_array2('factura_cliente_huecos', $error, TRUE); if ($error) { $ejercicio = new ejercicio(); $serie = new serie(); foreach ($ejercicio->all_abiertos() as $eje) { $codserie = ''; $num = 1; $data = $this->db->select("SELECT codserie," . $this->db->sql_to_int('numero') . " as numero,fecha,hora\n FROM " . $this->table_name . " WHERE codejercicio = " . $this->var2str($eje->codejercicio) . " ORDER BY codserie ASC, numero ASC;"); if ($data) { foreach ($data as $d) { if ($d['codserie'] != $codserie) { $codserie = $d['codserie']; $num = 1; if (defined('FS_NFACTURA_CLI')) { /// mantenemos compatibilidad con versiones anteriores $num = intval(FS_NFACTURA_CLI); } $se = $serie->get($codserie); if ($se) { /// ¿Se ha definido un nº inicial de factura para esta serie y ejercicio? if ($eje->codejercicio == $se->codejercicio) { $num = $se->numfactura; } } } if (intval($d['numero']) < $num) { /** * El número de la factura es menor que el inicial. * El usuario ha cambiado el número inicial después de hacer * facturas. */ } else { if (intval($d['numero']) == $num) { /// el número es correcto, avanzamos $num++; } else { /// Hemos encontrado un hueco y debemos usar el número y la fecha. while ($num < intval($d['numero'])) { $huecolist[] = array('codigo' => $eje->codejercicio . sprintf('%02s', $codserie) . sprintf('%06s', $num), 'fecha' => Date('d-m-Y', strtotime($d['fecha'])), 'hora' => $d['hora']); $num++; } /// avanzamos uno más $num++; } } } } } $this->cache->set('factura_cliente_huecos', $huecolist, 3600, TRUE); } return $huecolist; }
protected function private_core() { /// cargamos las putas secuencias para que se actualicen. /// Abanq/Eneboo, yo te maldigooooo!!!!!!!!!!!!!!!!!!!!!! $sec0 = new secuencia_ejercicio(); $sec1 = new secuencia_contabilidad(); $sec2 = new secuencia(); /// ¿El usuario tiene permiso para eliminar en esta página? $this->allow_delete = $this->user->allow_delete_on(__CLASS__); $this->ejercicio = FALSE; if (isset($_POST['codejercicio'])) { $eje0 = new ejercicio(); $this->ejercicio = $eje0->get($_POST['codejercicio']); if ($this->ejercicio) { $this->ejercicio->nombre = $_POST['nombre']; $this->ejercicio->fechainicio = $_POST['fechainicio']; $this->ejercicio->fechafin = $_POST['fechafin']; $this->ejercicio->longsubcuenta = intval($_POST['longsubcuenta']); $this->ejercicio->estado = $_POST['estado']; if ($this->ejercicio->save()) { $this->new_message('Datos guardados correctamente.'); } else { $this->new_error_msg('Imposible guardar los datos.'); } } } else { if (isset($_GET['cod'])) { $eje0 = new ejercicio(); $this->ejercicio = $eje0->get($_GET['cod']); } } if ($this->ejercicio) { if (isset($_GET['export'])) { $this->exportar_xml(); } else { $this->page->title = $this->ejercicio->codejercicio . ' (' . $this->ejercicio->nombre . ')'; if (isset($_GET['cerrar']) and isset($_GET['petid'])) { if ($this->duplicated_petition($_GET['petid'])) { $this->new_error_msg('Petición duplicada. Evita hacer doble clic sobre los botones.'); } else { $this->cerrar_ejercicio(); } } else { $this->ejercicio->full_test(); } $asiento = new asiento(); $this->asiento_apertura_url = FALSE; if ($this->ejercicio->idasientoapertura) { $asiento_a = $asiento->get($this->ejercicio->idasientoapertura); if ($asiento_a) { $this->asiento_apertura_url = $asiento_a->url(); } } $this->asiento_cierre_url = FALSE; if ($this->ejercicio->idasientocierre) { $asiento_c = $asiento->get($this->ejercicio->idasientocierre); if ($asiento_c) { $this->asiento_cierre_url = $asiento_c->url(); } } $this->asiento_pyg_url = FALSE; if ($this->ejercicio->idasientopyg) { $asiento_pyg = $asiento->get($this->ejercicio->idasientopyg); if ($asiento_pyg) { $this->asiento_pyg_url = $asiento_pyg->url(); } } /// comprobamos el proceso de importación $this->importar_xml(); $this->offset = 0; if (isset($_GET['offset'])) { $this->offset = intval($_GET['offset']); } if (!isset($_GET['listar'])) { $this->listar = 'cuentas'; } else { if ($_GET['listar'] == 'grupos') { $this->listar = 'grupos'; } else { if ($_GET['listar'] == 'epigrafes') { $this->listar = 'epigrafes'; } else { if ($_GET['listar'] == 'subcuentas') { $this->listar = 'subcuentas'; } else { $this->listar = 'cuentas'; } } } } switch ($this->listar) { default: $cuenta = new cuenta(); $this->listado = $cuenta->full_from_ejercicio($this->ejercicio->codejercicio); break; case 'grupos': $ge = new grupo_epigrafes(); $this->listado = $ge->all_from_ejercicio($this->ejercicio->codejercicio); break; case 'epigrafes': $epigrafe = new epigrafe(); $this->listado = $epigrafe->all_from_ejercicio($this->ejercicio->codejercicio); break; case 'subcuentas': $subcuenta = new subcuenta(); $this->listado = $subcuenta->all_from_ejercicio($this->ejercicio->codejercicio); break; } } } else { $this->new_error_msg('Ejercicio no encontrado.'); } }
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 minicron() { $this->template = FALSE; $contrato = new contrato_servicio(); $eje0 = new ejercicio(); $estado = new estado_servicio(); $idestado = NULL; foreach ($estado->all() as $est) { $idestado = $est->id; break; } $offset = 0; $contratos = $contrato->all($offset, 'fsiguiente_servicio ASC'); while ($contratos) { foreach ($contratos as $con) { if ($con->fsiguiente_servicio) { if (strtotime($con->fsiguiente_servicio) > strtotime($con->fecha_renovacion)) { /// caducado } else { if (strtotime($con->fsiguiente_servicio) < strtotime('+1month')) { $cliente = $this->cliente->get($con->codcliente); if ($cliente) { $ejercicio = $eje0->get_by_fecha($con->fsiguiente_servicio); if ($ejercicio) { $servicio = new servicio_cliente(); $servicio->codcliente = $cliente->codcliente; $servicio->cifnif = $cliente->cifnif; $servicio->nombrecliente = $cliente->razonsocial; $servicio->codagente = $con->codagente; $servicio->coddivisa = $this->empresa->coddivisa; $servicio->codejercicio = $ejercicio->codejercicio; $servicio->codpago = $con->codpago; $servicio->codserie = $cliente->codserie; $servicio->fecha = $con->fsiguiente_servicio; $servicio->fechainicio = $con->fsiguiente_servicio . ' ' . $this->nuevocli_setup['cal_inicio']; $servicio->idestado = $idestado; foreach ($cliente->get_direcciones() as $dir) { if ($dir->domfacturacion) { $servicio->direccion = $dir->direccion; $servicio->codpostal = $dir->codpostal; $servicio->ciudad = $dir->ciudad; $servicio->provincia = $dir->provincia; $servicio->codpais = $dir->codpais; break; } } if ($servicio->save()) { $con->fsiguiente_servicio = NULL; if ($con->periodo) { $con->fsiguiente_servicio = date('d-m-Y', strtotime($servicio->fechainicio . ' ' . $con->periodo)); } $con->save(); } else { echo "Error al crear el servicio.\n"; foreach ($this->get_errors() as $err) { echo $err . "\n"; } } } } } else { echo "Cliente no encontrado.\n"; } } } $offset++; } $contratos = $contrato->all($offset, 'fsiguiente_servicio ASC'); } }
private function guardar_regiva() { $asiento = new asiento(); $ejercicio = new ejercicio(); $subcuenta = new subcuenta(); $eje0 = $ejercicio->get_by_fecha($_POST['desde'], TRUE); if ($eje0) { $continuar = TRUE; $saldo = 0; /// guardamos el asiento $asiento->codejercicio = $eje0->codejercicio; $asiento->concepto = 'REGULARIZACIÓN IVA ' . $_POST['periodo']; $asiento->fecha = $_POST['hasta']; $asiento->editable = FALSE; if (!$asiento->save()) { $this->new_error_msg('Imposible guardar el asiento.'); $continuar = FALSE; } /// obtenemos el IVA soportado $scta_ivasop = $subcuenta->get_cuentaesp('IVASOP', $eje0->codejercicio); if ($scta_ivasop) { $par0 = new partida(); $par0->idasiento = $asiento->idasiento; $par0->concepto = $asiento->concepto; $par0->coddivisa = $scta_ivasop->coddivisa; $par0->tasaconv = $scta_ivasop->tasaconv(); $par0->codsubcuenta = $scta_ivasop->codsubcuenta; $par0->idsubcuenta = $scta_ivasop->idsubcuenta; $tot_sop = $par0->totales_from_subcuenta_fechas($scta_ivasop->idsubcuenta, $_POST['desde'], $_POST['hasta']); /// invertimos el debe y el haber $par0->debe = $tot_sop['haber']; $par0->haber = $tot_sop['debe']; $saldo += $tot_sop['haber'] - $tot_sop['debe']; if (!$par0->save()) { $this->new_error_msg('Error al guardar la partida de la subcuenta de IVA soportado.'); $continuar = FALSE; } } else { $this->new_error_msg('Subcuenta de IVA soportado no encontrada.'); $continuar = FALSE; } /// obtenemos el IVA repercutido $scta_ivarep = $subcuenta->get_cuentaesp('IVAREP', $eje0->codejercicio); if ($scta_ivarep) { $par1 = new partida(); $par1->idasiento = $asiento->idasiento; $par1->concepto = $asiento->concepto; $par1->coddivisa = $scta_ivarep->coddivisa; $par1->tasaconv = $scta_ivarep->tasaconv(); $par1->codsubcuenta = $scta_ivarep->codsubcuenta; $par1->idsubcuenta = $scta_ivarep->idsubcuenta; $tot_rep = $par1->totales_from_subcuenta_fechas($scta_ivarep->idsubcuenta, $_POST['desde'], $_POST['hasta']); /// invertimos el debe y el haber $par1->debe = $tot_rep['haber']; $par1->haber = $tot_rep['debe']; $saldo += $tot_rep['haber'] - $tot_rep['debe']; if (!$par1->save()) { $this->new_error_msg('Error al guardar la partida de la subcuenta de IVA repercutido.'); $continuar = FALSE; } } else { $this->new_error_msg('Subcuenta de IVA repercutido no encontrada.'); $continuar = FALSE; } if ($continuar) { if ($saldo > 0) { $scta_ivaacr = $subcuenta->get_cuentaesp('IVAACR', $eje0->codejercicio); if ($scta_ivaacr) { $par2 = new partida(); $par2->idasiento = $asiento->idasiento; $par2->concepto = $asiento->concepto; $par2->coddivisa = $scta_ivaacr->coddivisa; $par2->tasaconv = $scta_ivaacr->tasaconv(); $par2->codsubcuenta = $scta_ivaacr->codsubcuenta; $par2->idsubcuenta = $scta_ivaacr->idsubcuenta; $par2->debe = 0; $par2->haber = $saldo; if (!$par2->save()) { $this->new_error_msg('Error al guardar la partida de la subcuenta de acreedor por IVA.'); $continuar = FALSE; } } else { $this->new_error_msg('No se encuentra la subcuenta acreedora por IVA.'); } } else { if ($saldo < 0) { $scta_ivadeu = $subcuenta->get_cuentaesp('IVADEU', $eje0->codejercicio); if ($scta_ivadeu) { $par2 = new partida(); $par2->idasiento = $asiento->idasiento; $par2->concepto = $asiento->concepto; $par2->coddivisa = $scta_ivadeu->coddivisa; $par2->tasaconv = $scta_ivadeu->tasaconv(); $par2->codsubcuenta = $scta_ivadeu->codsubcuenta; $par2->idsubcuenta = $scta_ivadeu->idsubcuenta; $par2->debe = abs($saldo); $par2->haber = 0; if (!$par2->save()) { $this->new_error_msg('Error al guardar la partida de la subcuenta deudora por IVA.'); $continuar = FALSE; } } else { $this->new_error_msg('No se encuentra la subcuenta deudora por IVA.'); } } } } else { $this->new_error_msg('Error al leer las subcuentas.'); } if ($continuar) { $this->regiva = new regularizacion_iva(); $this->regiva->codejercicio = $eje0->codejercicio; $this->regiva->fechaasiento = $asiento->fecha; $this->regiva->fechafin = $_POST['hasta']; $this->regiva->fechainicio = $_POST['desde']; $this->regiva->idasiento = $asiento->idasiento; $this->regiva->periodo = $_POST['periodo']; if ($this->regiva->save()) { $this->new_message('<a href="#" onclick="full_regiva(\'' . $this->regiva->idregiva . '\')">Regularización</a> guardada correctamente.'); } else { if ($asiento->delete()) { $this->new_error_msg('Error al guardar la regularización. Se ha eliminado el asiento.'); } else { $this->new_error_msg('Error al guardar la regularización. No se ha podido eliminar el asiento.'); } } } } else { $this->new_error_msg('El ejercicio está cerrado.'); } }
public function full_test($duplicados = TRUE) { $status = TRUE; /// comprobamos la fecha de la factura $ejercicio = new ejercicio(); $eje0 = $ejercicio->get($this->codejercicio); if ($eje0) { if (strtotime($this->fecha) < strtotime($eje0->fechainicio) or strtotime($this->fecha) > strtotime($eje0->fechafin)) { $status = FALSE; $this->new_error_msg("La fecha de esta factura está fuera del rango del <a target='_blank' href='" . $eje0->url() . "'>ejercicio</a>."); } } /// comprobamos las líneas $neto = 0; $iva = 0; $irpf = 0; $recargo = 0; foreach ($this->get_lineas() as $l) { if (!$l->test()) { $status = FALSE; } $neto += $l->pvptotal; $iva += $l->pvptotal * $l->iva / 100; $irpf += $l->pvptotal * $l->irpf / 100; $recargo += $l->pvptotal * $l->recargo / 100; } $neto = round($neto, FS_NF0); $iva = round($iva, FS_NF0); $irpf = round($irpf, FS_NF0); $recargo = round($recargo, FS_NF0); $total = $neto + $iva - $irpf + $recargo; if (!$this->floatcmp($this->neto, $neto, FS_NF0, TRUE)) { $this->new_error_msg("Valor neto de la factura incorrecto. Valor correcto: " . $neto); $status = FALSE; } else { if (!$this->floatcmp($this->totaliva, $iva, FS_NF0, TRUE)) { $this->new_error_msg("Valor totaliva de la factura incorrecto. Valor correcto: " . $iva); $status = FALSE; } else { if (!$this->floatcmp($this->totalirpf, $irpf, FS_NF0, TRUE)) { $this->new_error_msg("Valor totalirpf de la factura incorrecto. Valor correcto: " . $irpf); $status = FALSE; } else { if (!$this->floatcmp($this->totalrecargo, $recargo, FS_NF0, TRUE)) { $this->new_error_msg("Valor totalrecargo de la factura incorrecto. Valor correcto: " . $recargo); $status = FALSE; } else { if (!$this->floatcmp($this->total, $total, FS_NF0, TRUE)) { $this->new_error_msg("Valor total de la factura incorrecto. Valor correcto: " . $total); $status = FALSE; } else { if (!$this->floatcmp($this->totaleuros, $this->total * $this->tasaconv, FS_NF0, TRUE)) { $this->new_error_msg("Valor totaleuros de la factura incorrecto.\n Valor correcto: " . round($this->total * $this->tasaconv, FS_NF0)); $status = FALSE; } } } } } } /// comprobamos las líneas de IVA $this->get_lineas_iva(); $linea_iva = new linea_iva_factura_proveedor(); if (!$linea_iva->factura_test($this->idfactura, $neto, $iva, $recargo)) { $status = FALSE; } /// comprobamos el asiento if (isset($this->idasiento)) { $asiento = $this->get_asiento(); if ($asiento) { if ($asiento->tipodocumento != 'Factura de proveedor' or $asiento->documento != $this->codigo) { $this->new_error_msg("Esta factura apunta a un <a href='" . $this->asiento_url() . "'>asiento incorrecto</a>."); $status = FALSE; } } else { $this->new_error_msg("Asiento no encontrado."); $status = FALSE; } } if ($status and $duplicados) { /// comprobamos si es un duplicado $facturas = $this->db->select("SELECT * FROM " . $this->table_name . " WHERE fecha = " . $this->var2str($this->fecha) . "\n AND codproveedor = " . $this->var2str($this->codproveedor) . " AND total = " . $this->var2str($this->total) . "\n AND observaciones = " . $this->var2str($this->observaciones) . " AND idfactura != " . $this->var2str($this->idfactura) . ";"); if ($facturas) { foreach ($facturas as $fac) { /// comprobamos las líneas $aux = $this->db->select("SELECT referencia FROM lineasfacturasprov WHERE\n idfactura = " . $this->var2str($this->idfactura) . "\n AND referencia NOT IN (SELECT referencia FROM lineasfacturasprov\n WHERE idfactura = " . $this->var2str($fac['idfactura']) . ");"); if (!$aux) { $this->new_error_msg("Esta factura es un posible duplicado de\n <a href='index.php?page=compras_factura&id=" . $fac['idfactura'] . "'>esta otra</a>.\n Si no lo es, para evitar este mensaje, simplemente modifica las observaciones."); $status = FALSE; } } } } return $status; }
private function nueva_factura_proveedor() { $continuar = TRUE; $proveedor = $this->proveedor->get($_POST['proveedor']); if (!$proveedor) { $this->new_error_msg('Proveedor no encontrado.'); $continuar = FALSE; } $almacen = $this->almacen->get($_POST['almacen']); if ($almacen) { $this->save_codalmacen($_POST['almacen']); } else { $this->new_error_msg('Almacén no encontrado.'); $continuar = FALSE; } $eje0 = new ejercicio(); $ejercicio = $eje0->get_by_fecha($_POST['fecha']); if (!$ejercicio) { $this->new_error_msg('Ejercicio no encontrado o está cerrado.'); $continuar = FALSE; } $serie = $this->serie->get($_POST['serie']); if (!$serie) { $this->new_error_msg('Serie no encontrada.'); $continuar = FALSE; } $forma_pago = $this->forma_pago->get($_POST['forma_pago']); if ($forma_pago) { $this->save_codpago($_POST['forma_pago']); } else { $this->new_error_msg('Forma de pago no encontrada.'); $continuar = FALSE; } $divisa = $this->divisa->get($_POST['divisa']); if (!$divisa) { $this->new_error_msg('Divisa no encontrada.'); $continuar = FALSE; } $factura = new factura_proveedor(); if ($this->duplicated_petition($_POST['petition_id'])) { $this->new_error_msg('Petición duplicada. Has hecho doble clic sobre el botón guardar y se han enviado dos peticiones. Mira en <a href="' . $factura->url() . '">Facturas</a> para ver si la factura se ha guardado correctamente.'); $continuar = FALSE; } if ($continuar) { $factura->codejercicio = $ejercicio->codejercicio; $factura->codserie = $serie->codserie; $factura->set_fecha_hora($_POST['fecha'], $_POST['hora']); $factura->codproveedor = $proveedor->codproveedor; $factura->nombre = $_POST['nombre']; $factura->cifnif = $_POST['cifnif']; $factura->codalmacen = $almacen->codalmacen; $factura->codpago = $forma_pago->codpago; $factura->coddivisa = $divisa->coddivisa; $factura->tasaconv = $divisa->tasaconv_compra; if ($_POST['tasaconv'] != '') { $factura->tasaconv = floatval($_POST['tasaconv']); } $factura->codagente = $this->agente->codagente; $factura->numproveedor = $_POST['numproveedor']; $factura->observaciones = $_POST['observaciones']; if ($forma_pago->genrecibos == 'Pagados') { $factura->pagada = TRUE; } $regularizacion = new regularizacion_iva(); if ($regularizacion->get_fecha_inside($factura->fecha)) { $this->new_error_msg("El " . FS_IVA . " de ese periodo ya ha sido regularizado. No se pueden añadir más facturas en esa fecha."); } else { if ($factura->save()) { $art0 = new articulo(); $n = floatval($_POST['numlineas']); for ($i = 0; $i < $n; $i++) { if (isset($_POST['referencia_' . $i])) { $linea = new linea_factura_proveedor(); $linea->idfactura = $factura->idfactura; $linea->descripcion = $_POST['desc_' . $i]; if (!$serie->siniva and $proveedor->regimeniva != 'Exento') { $imp0 = $this->impuesto->get_by_iva($_POST['iva_' . $i]); if ($imp0) { $linea->codimpuesto = $imp0->codimpuesto; $linea->iva = floatval($_POST['iva_' . $i]); $linea->recargo = floatval($_POST['recargo_' . $i]); } else { $linea->iva = floatval($_POST['iva_' . $i]); $linea->recargo = floatval($_POST['recargo_' . $i]); } } $linea->irpf = floatval($_POST['irpf_' . $i]); $linea->pvpunitario = floatval($_POST['pvp_' . $i]); $linea->cantidad = floatval($_POST['cantidad_' . $i]); $linea->dtopor = floatval($_POST['dto_' . $i]); $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad; $linea->pvptotal = floatval($_POST['neto_' . $i]); $articulo = $art0->get($_POST['referencia_' . $i]); if ($articulo) { $linea->referencia = $articulo->referencia; } if ($linea->save()) { if ($articulo) { if (isset($_POST['costemedio'])) { if ($articulo->costemedio == 0) { $articulo->costemedio = $linea->pvptotal / $linea->cantidad; } else { $articulo->costemedio = $articulo->get_costemedio(); if ($articulo->costemedio == 0) { $articulo->costemedio = $linea->pvptotal / $linea->cantidad; } } $this->actualizar_precio_proveedor($factura->codproveedor, $linea); } if (isset($_POST['stock'])) { $articulo->sum_stock($factura->codalmacen, $linea->cantidad); } else { if (isset($_POST['costemedio'])) { $articulo->save(); } } } $factura->neto += $linea->pvptotal; $factura->totaliva += $linea->pvptotal * $linea->iva / 100; $factura->totalirpf += $linea->pvptotal * $linea->irpf / 100; $factura->totalrecargo += $linea->pvptotal * $linea->recargo / 100; if ($linea->irpf > $factura->irpf) { $factura->irpf = $linea->irpf; } } else { $this->new_error_msg("¡Imposible guardar la linea con referencia: " . $linea->referencia); $continuar = FALSE; } } } if ($continuar) { /// redondeamos $factura->neto = round($factura->neto, FS_NF0); $factura->totaliva = round($factura->totaliva, FS_NF0); $factura->totalirpf = round($factura->totalirpf, FS_NF0); $factura->totalrecargo = round($factura->totalrecargo, FS_NF0); $factura->total = $factura->neto + $factura->totaliva - $factura->totalirpf + $factura->totalrecargo; if (abs(floatval($_POST['atotal']) - $factura->total) >= 0.02) { $this->new_error_msg("El total difiere entre el controlador y la vista (" . $factura->total . " frente a " . $_POST['atotal'] . "). Debes informar del error."); $factura->delete(); } else { if ($factura->save()) { $this->generar_asiento($factura); $this->new_message("<a href='" . $factura->url() . "'>Factura</a> guardada correctamente."); $this->new_change('Factura Proveedor ' . $factura->codigo, $factura->url(), TRUE); if ($_POST['redir'] == 'TRUE') { header('Location: ' . $factura->url()); } } else { $this->new_error_msg("¡Imposible actualizar la <a href='" . $factura->url() . "'>factura</a>!"); } } } else { if ($factura->delete()) { $this->new_message("Factura eliminada correctamente."); } else { $this->new_error_msg("¡Imposible eliminar la <a href='" . $factura->url() . "'>factura</a>!"); } } } else { $this->new_error_msg("¡Imposible guardar la factura!"); } } } }
protected function private_core() { $this->tipo = FALSE; $this->subcuenta = FALSE; $this->cuenta = new cuenta(); /// seleccionamos el ejercicio $ejercicio = new ejercicio(); $eje0 = $ejercicio->get_by_fecha(date('d-m-Y')); if (isset($_POST['codejercicio'])) { $this->codejercicio = $_POST['codejercicio']; } else { if ($eje0) { $this->codejercicio = $eje0->codejercicio; } else { $this->codejercicio = $this->default_items->codejercicio(); } } if (isset($_POST['ejercicio']) and isset($_POST['query'])) { $this->new_search(); } else { if (isset($_REQUEST['cli'])) { $this->tipo = 'cli'; $cliente = new cliente(); $this->cliente = $cliente->get($_REQUEST['cli']); if ($this->cliente) { $subcuenta_cliente = new subcuenta_cliente(); if (isset($_GET['delete_sca'])) { $aux_sca = $subcuenta_cliente->get2($_GET['delete_sca']); if ($aux_sca) { if ($aux_sca->delete()) { $this->new_message('El cliente ya no está asocuado a esa subcuenta.'); } else { $this->new_error_msg('Imposible quitar la subcuenta.'); } } else { $this->new_error_msg('Relación con la subcuenta no encontrada.'); } } else { if (isset($_GET['idsc'])) { $this->subcuenta_a = $subcuenta_cliente->get($_GET['cli'], $_GET['idsc']); if ($this->subcuenta_a) { $this->subcuenta = $this->subcuenta_a->get_subcuenta(); $this->codejercicio = $this->subcuenta_a->codejercicio; } } else { if (isset($_POST['idsc'])) { $this->subcuenta_a = $subcuenta_cliente->get($_POST['cli'], $_POST['idsc']); if ($this->subcuenta_a) { $subc = new subcuenta(); $subc0 = $subc->get($_POST['idsc2']); if ($subc0) { $this->subcuenta_a->idsubcuenta = $subc0->idsubcuenta; $this->subcuenta_a->codsubcuenta = $subc0->codsubcuenta; $this->subcuenta_a->codejercicio = $subc0->codejercicio; if ($this->subcuenta_a->save()) { $this->new_message('Datos guardados correctamente.'); } else { $this->new_error_msg('Imposible asignar la subcuenta al cliente.'); } $this->subcuenta = $subc0; } else { $this->new_error_msg('Subcuenta no encontrada.'); $this->subcuenta = $this->subcuenta_a->get_subcuenta(); } } } else { if (isset($_POST['idsc2'])) { $subc = new subcuenta(); $subc0 = $subc->get($_POST['idsc2']); if ($subc0) { $subcuenta_cliente->codcliente = $this->cliente->codcliente; $subcuenta_cliente->idsubcuenta = $subc0->idsubcuenta; $subcuenta_cliente->codsubcuenta = $subc0->codsubcuenta; $subcuenta_cliente->codejercicio = $subc0->codejercicio; if ($subcuenta_cliente->save()) { $this->new_message('Datos guardados correctamente.'); } else { $this->new_error_msg('Imposible asignar la subcuenta al cliente.'); } $this->subcuenta = $subc0; } else { $this->new_error_msg('Subcuenta no encontrada.'); } } else { if (isset($_POST['cuenta'])) { $cuenta0 = $this->cuenta->get($_POST['cuenta']); if ($cuenta0) { $subc0 = new subcuenta(); $subc0->codcuenta = $cuenta0->codcuenta; $subc0->coddivisa = $this->default_items->coddivisa(); $subc0->codejercicio = $cuenta0->codejercicio; $subc0->codsubcuenta = $_POST['codsubcuenta']; $subc0->descripcion = $this->cliente->nombre; $subc0->idcuenta = $cuenta0->idcuenta; if ($subc0->save()) { $subcuenta_cliente->codcliente = $this->cliente->codcliente; $subcuenta_cliente->idsubcuenta = $subc0->idsubcuenta; $subcuenta_cliente->codsubcuenta = $subc0->codsubcuenta; $subcuenta_cliente->codejercicio = $subc0->codejercicio; if ($subcuenta_cliente->save()) { $this->new_message('Datos guardados correctamente.'); } else { $this->new_error_msg('Imposible asignar la subcuenta al cliente.'); } $this->subcuenta = $subc0; } else { $this->new_error_msg('Imposible crear la sucuenta.'); } } else { $this->new_error_msg('Cuenta no encontrada.'); } } else { foreach ($subcuenta_cliente->all_from_cliente($_REQUEST['cli']) as $sca) { if ($sca->codejercicio == $this->codejercicio) { $this->subcuenta_a = $sca; $this->subcuenta = $sca->get_subcuenta(); break; } } } } } } } } } else { if (isset($_REQUEST['pro'])) { $this->tipo = 'pro'; $proveedor = new proveedor(); $this->proveedor = $proveedor->get($_REQUEST['pro']); if ($this->proveedor) { $subcuenta_proveedor = new subcuenta_proveedor(); if (isset($_GET['delete_sca'])) { $aux_sca = $subcuenta_proveedor->get2($_GET['delete_sca']); if ($aux_sca) { if ($aux_sca->delete()) { $this->new_message('El proveedor ya no está asocuado a esa subcuenta.'); } else { $this->new_error_msg('Imposible quitar la subcuenta.'); } } else { $this->new_error_msg('Relación con la subcuenta no encontrada.'); } } else { if (isset($_GET['idsc'])) { $this->subcuenta_a = $subcuenta_proveedor->get($_GET['pro'], $_GET['idsc']); if ($this->subcuenta_a) { $this->subcuenta = $this->subcuenta_a->get_subcuenta(); $this->codejercicio = $this->subcuenta_a->codejercicio; } } else { if (isset($_POST['idsc'])) { $this->subcuenta_a = $subcuenta_proveedor->get($_POST['pro'], $_POST['idsc']); if ($this->subcuenta_a) { $subc = new subcuenta(); $subc0 = $subc->get($_POST['idsc2']); if ($subc0) { $this->subcuenta_a->idsubcuenta = $subc0->idsubcuenta; $this->subcuenta_a->codsubcuenta = $subc0->codsubcuenta; $this->subcuenta_a->codejercicio = $subc0->codejercicio; if ($this->subcuenta_a->save()) { $this->new_message('Datos guardados correctamente.'); } else { $this->new_error_msg('Imposible asignar la subcuenta al proveedor.'); } $this->subcuenta = $subc0; } else { $this->new_error_msg('Subcuenta no encontrada.'); $this->subcuenta = $this->subcuenta_a->get_subcuenta(); } } } else { if (isset($_POST['idsc2'])) { $subc = new subcuenta(); $subc0 = $subc->get($_POST['idsc2']); if ($subc0) { $subcuenta_proveedor->codproveedor = $this->proveedor->codproveedor; $subcuenta_proveedor->idsubcuenta = $subc0->idsubcuenta; $subcuenta_proveedor->codsubcuenta = $subc0->codsubcuenta; $subcuenta_proveedor->codejercicio = $subc0->codejercicio; if ($subcuenta_proveedor->save()) { $this->new_message('Datos guardados correctamente.'); } else { $this->new_error_msg('Imposible asignar la subcuenta al cliente.'); } $this->subcuenta = $subc0; } else { $this->new_error_msg('Subcuenta no encontrada.'); } } else { if (isset($_POST['cuenta'])) { $cuenta0 = $this->cuenta->get($_POST['cuenta']); if ($cuenta0) { $subc0 = new subcuenta(); $subc0->codcuenta = $cuenta0->codcuenta; $subc0->coddivisa = $this->default_items->coddivisa(); $subc0->codejercicio = $cuenta0->codejercicio; $subc0->codsubcuenta = $_POST['codsubcuenta']; $subc0->descripcion = $this->proveedor->nombre; $subc0->idcuenta = $cuenta0->idcuenta; if ($subc0->save()) { $subcuenta_proveedor->codproveedor = $this->proveedor->codproveedor; $subcuenta_proveedor->idsubcuenta = $subc0->idsubcuenta; $subcuenta_proveedor->codsubcuenta = $subc0->codsubcuenta; $subcuenta_proveedor->codejercicio = $subc0->codejercicio; if ($subcuenta_proveedor->save()) { $this->new_message('Datos guardados correctamente.'); } else { $this->new_error_msg('Imposible asignar la subcuenta al proveedor.'); } $this->subcuenta = $subc0; } else { $this->new_error_msg('Imposible crear la sucuenta.'); } } else { $this->new_error_msg('Cuenta no encontrada.'); } } else { foreach ($subcuenta_proveedor->all_from_proveedor($_REQUEST['pro']) as $sca) { if ($sca->codejercicio == $this->codejercicio) { $this->subcuenta_a = $sca; $this->subcuenta = $sca->get_subcuenta(); break; } } } } } } } } } } } }
/** * Devuelve el ejercicio para la fecha indicada. * Si no existe, lo crea. */ public function get_by_fecha($fecha, $solo_abierto = TRUE, $crear = TRUE) { $sql = "SELECT * FROM " . $this->table_name . " WHERE fechainicio <= " . $this->var2str($fecha) . " AND fechafin >= " . $this->var2str($fecha) . ";"; $data = $this->db->select($sql); if ($data) { $eje = new ejercicio($data[0]); if ($eje->abierto() or !$solo_abierto) { return $eje; } else { return FALSE; } } else { if ($crear) { $eje = new ejercicio(); $eje->codejercicio = $eje->get_new_codigo(Date('Y', strtotime($fecha))); $eje->nombre = Date('Y', strtotime($fecha)); $eje->fechainicio = Date('1-1-Y', strtotime($fecha)); $eje->fechafin = Date('31-12-Y', strtotime($fecha)); if (strtotime($fecha) < 1) { $this->new_error_msg("Fecha no válida: " . $fecha); } else { if ($eje->save()) { return $eje; } else { return FALSE; } } } else { return FALSE; } } }
private function generar_factura($albaranes) { $continuar = TRUE; $factura = new factura_cliente(); $factura->automatica = TRUE; $factura->codalmacen = $albaranes[0]->codalmacen; $factura->coddivisa = $albaranes[0]->coddivisa; $factura->tasaconv = $albaranes[0]->tasaconv; $factura->codejercicio = $albaranes[0]->codejercicio; $factura->codpago = $albaranes[0]->codpago; $factura->codserie = $albaranes[0]->codserie; $factura->editable = FALSE; $factura->irpf = $albaranes[0]->irpf; $factura->numero2 = $albaranes[0]->numero2; $factura->observaciones = $albaranes[0]->observaciones; $factura->recfinanciero = $albaranes[0]->recfinanciero; /// comprobamos la forma de pago para saber si hay que marcar la factura como pagada $formapago = $this->forma_pago->get($factura->codpago); if ($formapago) { if ($formapago->genrecibos == 'Pagados') { $factura->pagada = TRUE; } } /// obtenemos los datos actuales del cliente, por si ha habido cambios $cliente = $this->cliente->get($albaranes[0]->codcliente); if ($cliente) { foreach ($cliente->get_direcciones() as $dir) { if ($dir->domfacturacion) { $factura->apartado = $dir->apartado; $factura->cifnif = $cliente->cifnif; $factura->ciudad = $dir->ciudad; $factura->codcliente = $cliente->codcliente; $factura->coddir = $dir->id; $factura->codpais = $dir->codpais; $factura->codpostal = $dir->codpostal; $factura->direccion = $dir->direccion; $factura->nombrecliente = $cliente->nombrecomercial; $factura->provincia = $dir->provincia; break; } } } /// calculamos neto e iva foreach ($albaranes as $alb) { foreach ($alb->get_lineas() as $l) { $factura->neto += $l->pvptotal; $factura->totaliva += $l->pvptotal * $l->iva / 100; $factura->totalirpf += $l->pvptotal * $l->irpf / 100; $factura->totalrecargo += $l->pvptotal * $l->recargo / 100; } } /// redondeamos $factura->neto = round($factura->neto, FS_NF0); $factura->totaliva = round($factura->totaliva, FS_NF0); $factura->totalirpf = round($factura->totalirpf, FS_NF0); $factura->totalrecargo = round($factura->totalrecargo, FS_NF0); $factura->total = $factura->neto + $factura->totaliva - $factura->totalirpf + $factura->totalrecargo; /// asignamos la mejor fecha posible, pero dentro del ejercicio $ejercicio = new ejercicio(); $eje0 = $ejercicio->get($factura->codejercicio); $factura->fecha = $eje0->get_best_fecha($factura->fecha); $regularizacion = new regularizacion_iva(); if (!$eje0->abierto()) { $this->new_error_msg('El ejercicio ' . $eje0->codejercicio . ' está cerrado.'); } else { if ($regularizacion->get_fecha_inside($factura->fecha)) { /* * comprobamos que la fecha de la factura no esté dentro de un periodo de * IVA regularizado. */ $this->new_error_msg('El IVA de ese periodo ya ha sido regularizado. No se pueden añadir más facturas en esa fecha.'); } else { if ($factura->save()) { foreach ($albaranes as $alb) { foreach ($alb->get_lineas() as $l) { $n = new linea_factura_cliente(); $n->idalbaran = $alb->idalbaran; $n->idfactura = $factura->idfactura; $n->cantidad = $l->cantidad; $n->codimpuesto = $l->codimpuesto; $n->descripcion = $l->descripcion; $n->dtolineal = $l->dtolineal; $n->dtopor = $l->dtopor; $n->irpf = $l->irpf; $n->iva = $l->iva; $n->pvpsindto = $l->pvpsindto; $n->pvptotal = $l->pvptotal; $n->pvpunitario = $l->pvpunitario; $n->recargo = $l->recargo; $n->referencia = $l->referencia; if (!$n->save()) { $continuar = FALSE; $this->new_error_msg("¡Imposible guardar la línea el artículo " . $n->referencia . "! "); break; } } } if ($continuar) { foreach ($albaranes as $alb) { $alb->idfactura = $factura->idfactura; $alb->ptefactura = FALSE; if (!$alb->save()) { $this->new_error_msg("¡Imposible vincular el " . FS_ALBARAN . " con la nueva factura!"); $continuar = FALSE; break; } } if ($continuar) { $this->generar_asiento($factura); } else { if ($factura->delete()) { $this->new_error_msg("La factura se ha borrado."); } else { $this->new_error_msg("¡Imposible borrar la factura!"); } } } else { if ($factura->delete()) { $this->new_error_msg("La factura se ha borrado."); } else { $this->new_error_msg("¡Imposible borrar la factura!"); } } } else { $this->new_error_msg("¡Imposible guardar la factura!"); } } } }
public function check() { $eje = new ejercicio(); $serie = new serie(); foreach ($eje->all() as $e) { $secs = $this->all_from_ejercicio($e->codejercicio); foreach ($serie->all() as $serie) { $encontrada = FALSE; foreach ($secs as $s) { if ($s->codserie == $serie->codserie) { $encontrada = TRUE; } } if (!$encontrada) { $aux = new secuencia_ejercicio(); $aux->codejercicio = $e->codejercicio; $aux->codserie = $serie->codserie; if (!$aux->save()) { $this->new_error_msg("¡Imposible crear la secuencia para el ejercicio " . $aux->codejercicio . " y la serie " . $aux->codserie . "!"); } } } } }
private function nuevo_pedido_cliente() { $continuar = TRUE; $cliente = $this->cliente->get($_POST['cliente']); if (!$cliente) { $this->new_error_msg('Cliente no encontrado.'); $continuar = FALSE; } $almacen = $this->almacen->get($_POST['almacen']); if ($almacen) { $this->save_codalmacen($_POST['almacen']); } else { $this->new_error_msg('Almacén no encontrado.'); $continuar = FALSE; } $eje0 = new ejercicio(); $ejercicio = $eje0->get_by_fecha($_POST['fecha']); if (!$ejercicio) { $this->new_error_msg('Ejercicio no encontrado.'); $continuar = FALSE; } $serie = $this->serie->get($_POST['serie']); if (!$serie) { $this->new_error_msg('Serie no encontrada.'); $continuar = FALSE; } $forma_pago = $this->forma_pago->get($_POST['forma_pago']); if ($forma_pago) { $this->save_codpago($_POST['forma_pago']); } else { $this->new_error_msg('Forma de pago no encontrada.'); $continuar = FALSE; } $divisa = $this->divisa->get($_POST['divisa']); if (!$divisa) { $this->new_error_msg('Divisa no encontrada.'); $continuar = FALSE; } $pedido = new pedido_cliente(); if ($this->duplicated_petition($_POST['petition_id'])) { $this->new_error_msg('Petición duplicada. Has hecho doble clic sobre el botón guardar y se han enviado dos peticiones. Mira en <a href="' . $pedido->url() . '">Pedidos</a> para ver si el pedido se ha guardado correctamente.'); $continuar = FALSE; } if ($continuar) { $pedido->fecha = $_POST['fecha']; $pedido->codalmacen = $almacen->codalmacen; $pedido->codejercicio = $ejercicio->codejercicio; $pedido->codserie = $serie->codserie; $pedido->codpago = $forma_pago->codpago; $pedido->coddivisa = $divisa->coddivisa; $pedido->tasaconv = $divisa->tasaconv; if ($_POST['tasaconv'] != '') { $pedido->tasaconv = floatval($_POST['tasaconv']); } $pedido->codagente = $this->agente->codagente; $pedido->observaciones = $_POST['observaciones']; $pedido->numero2 = $_POST['numero2']; $pedido->irpf = $serie->irpf; $pedido->porcomision = $this->agente->porcomision; $pedido->codcliente = $cliente->codcliente; $pedido->cifnif = $cliente->cifnif; $pedido->nombrecliente = $cliente->razonsocial; $pedido->ciudad = $_POST['ciudad']; $pedido->codpais = $_POST['codpais']; $pedido->codpostal = $_POST['codpostal']; $pedido->direccion = $_POST['direccion']; $pedido->provincia = $_POST['provincia']; if ($pedido->save()) { $art0 = new articulo(); $n = floatval($_POST['numlineas']); for ($i = 0; $i <= $n; $i++) { if (isset($_POST['referencia_' . $i])) { $linea = new linea_pedido_cliente(); $linea->idpedido = $pedido->idpedido; $linea->descripcion = $_POST['desc_' . $i]; if (!$serie->siniva and $cliente->regimeniva != 'Exento') { $imp0 = $this->impuesto->get_by_iva($_POST['iva_' . $i]); if ($imp0) { $linea->codimpuesto = $imp0->codimpuesto; $linea->iva = floatval($_POST['iva_' . $i]); $linea->recargo = floatval($_POST['recargo_' . $i]); } else { $linea->iva = floatval($_POST['iva_' . $i]); $linea->recargo = floatval($_POST['recargo_' . $i]); } } $linea->irpf = floatval($_POST['irpf_' . $i]); $linea->pvpunitario = floatval($_POST['pvp_' . $i]); $linea->cantidad = floatval($_POST['cantidad_' . $i]); $linea->dtopor = floatval($_POST['dto_' . $i]); $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad; $linea->pvptotal = floatval($_POST['neto_' . $i]); $articulo = $art0->get($_POST['referencia_' . $i]); if ($articulo) { $linea->referencia = $articulo->referencia; } if ($linea->save()) { $pedido->neto += $linea->pvptotal; $pedido->totaliva += $linea->pvptotal * $linea->iva / 100; $pedido->totalirpf += $linea->pvptotal * $linea->irpf / 100; $pedido->totalrecargo += $linea->pvptotal * $linea->recargo / 100; } else { $this->new_error_msg("¡Imposible guardar la linea con referencia: " . $linea->referencia); $continuar = FALSE; } } } if ($continuar) { /// redondeamos $pedido->neto = round($pedido->neto, FS_NF0); $pedido->totaliva = round($pedido->totaliva, FS_NF0); $pedido->totalirpf = round($pedido->totalirpf, FS_NF0); $pedido->totalrecargo = round($pedido->totalrecargo, FS_NF0); $pedido->total = $pedido->neto + $pedido->totaliva - $pedido->totalirpf + $pedido->totalrecargo; if (abs(floatval($_POST['atotal']) - $pedido->total) >= 0.02) { $this->new_error_msg("El total difiere entre el controlador y la vista (" . $pedido->total . " frente a " . $_POST['atotal'] . "). Debes informar del error."); $pedido->delete(); } else { if ($pedido->save()) { $this->new_message("<a href='" . $pedido->url() . "'>" . ucfirst(FS_PEDIDO) . "</a> guardado correctamente."); $this->new_change(ucfirst(FS_PEDIDO) . " a Cliente " . $pedido->codigo, $pedido->url(), TRUE); if ($_POST['redir'] == 'TRUE') { header('Location: ' . $pedido->url()); } } else { $this->new_error_msg("¡Imposible actualizar el <a href='" . $pedido->url() . "'>" . FS_PEDIDO . "</a>!"); } } } else { if ($pedido->delete()) { $this->new_message(ucfirst(FS_PEDIDO) . " eliminado correctamente."); } else { $this->new_error_msg("¡Imposible eliminar el <a href='" . $pedido->url() . "'>" . FS_PEDIDO . "</a>!"); } } } else { $this->new_error_msg("¡Imposible guardar el " . FS_PEDIDO . "!"); } } }
private function nuevo_pedido_cliente() { $continuar = TRUE; $cliente = $this->cliente->get($_POST['cliente']); if ($cliente) { $this->save_codcliente($cliente->codcliente); } else { $this->new_error_msg('Cliente no encontrado.'); $continuar = FALSE; } $almacen = $this->almacen->get($_POST['almacen']); if ($almacen) { $this->save_codalmacen($almacen->codalmacen); } else { $this->new_error_msg('Almacén no encontrado.'); $continuar = FALSE; } $eje0 = new ejercicio(); $ejercicio = $eje0->get_by_fecha($_POST['fecha']); if ($ejercicio) { $this->save_codejercicio($ejercicio->codejercicio); } else { $this->new_error_msg('Ejercicio no encontrado.'); $continuar = FALSE; } $serie = $this->serie->get($_POST['serie']); if (!$serie) { $this->new_error_msg('Serie no encontrada.'); $continuar = FALSE; } $forma_pago = $this->forma_pago->get($_POST['forma_pago']); if ($forma_pago) { $this->save_codpago($forma_pago->codpago); } else { $this->new_error_msg('Forma de pago no encontrada.'); $continuar = FALSE; } $divisa = $this->divisa->get($_POST['divisa']); if ($divisa) { $this->save_coddivisa($divisa->coddivisa); } else { $this->new_error_msg('Divisa no encontrada.'); $continuar = FALSE; } $pedido = new pedido_cliente(); if ($this->duplicated_petition($_POST['petition_id'])) { $this->new_error_msg('Petición duplicada. Has hecho doble clic sobre el botón guardar y se han enviado dos peticiones. Mira en <a href="' . $pedido->url() . '">Pedidos</a> para ver si el pedido se ha guardado correctamente.'); $continuar = FALSE; } if ($continuar) { $pedido->fecha = $_POST['fecha']; $pedido->codalmacen = $almacen->codalmacen; $pedido->codejercicio = $ejercicio->codejercicio; $pedido->codserie = $serie->codserie; $pedido->codpago = $forma_pago->codpago; $pedido->coddivisa = $divisa->coddivisa; $pedido->tasaconv = $divisa->tasaconv; $pedido->codagente = $this->agente->codagente; $pedido->observaciones = $_POST['observaciones']; $pedido->numero2 = $_POST['numero2']; $pedido->irpf = $serie->irpf; $pedido->porcomision = $this->agente->porcomision; foreach ($cliente->get_direcciones() as $d) { if ($d->domfacturacion) { $pedido->codcliente = $cliente->codcliente; $pedido->cifnif = $cliente->cifnif; $pedido->nombrecliente = $cliente->nombrecomercial; $pedido->apartado = $d->apartado; $pedido->ciudad = $d->ciudad; $pedido->coddir = $d->id; $pedido->codpais = $d->codpais; $pedido->codpostal = $d->codpostal; $pedido->direccion = $d->direccion; $pedido->provincia = $d->provincia; break; } } if (is_null($pedido->codcliente)) { $this->new_error_msg("No hay ninguna dirección asociada al cliente."); } else { if ($pedido->save()) { $art0 = new articulo(); $n = floatval($_POST['numlineas']); for ($i = 0; $i <= $n; $i++) { if (isset($_POST['referencia_' . $i])) { $articulo = $art0->get($_POST['referencia_' . $i]); if ($articulo) { $linea = new linea_pedido_cliente(); $linea->idpedido = $pedido->idpedido; $linea->referencia = $articulo->referencia; $linea->descripcion = $_POST['desc_' . $i]; if (!$serie->siniva and $cliente->regimeniva != 'Exento') { $imp0 = $this->impuesto->get_by_iva($_POST['iva_' . $i]); if ($imp0) { $linea->codimpuesto = $imp0->codimpuesto; $linea->iva = floatval($_POST['iva_' . $i]); $linea->recargo = floatval($_POST['recargo_' . $i]); } else { $linea->iva = floatval($_POST['iva_' . $i]); $linea->recargo = floatval($_POST['recargo_' . $i]); } } if ($linea->iva > 0) { $linea->irpf = $pedido->irpf; } //corregido de lo pasado en ventas $linea->pvpunitario = floatval($_POST['pvp_' . $i]); $linea->cantidad = floatval($_POST['cantidad_' . $i]); //$linea->dtopor = floatval($_POST['dto_'.$i]); $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad; $linea->pvptotal = floatval($_POST['neto_' . $i]); if ($linea->save()) { $pedido->neto += $linea->pvptotal; $pedido->totaliva += $linea->pvptotal * $linea->iva / 100; $pedido->totalirpf += $linea->pvptotal * $linea->irpf / 100; $pedido->totalrecargo += $linea->pvptotal * $linea->recargo / 100; } else { $this->new_error_msg("¡Imposible guardar la linea con referencia: " . $linea->referencia); $continuar = FALSE; } } else { $this->new_error_msg("Artículo no encontrado: " . $_POST['referencia_' . $i]); $continuar = FALSE; } } } if ($continuar) { /// redondeamos $pedido->neto = round($pedido->neto, FS_NF0); $pedido->totaliva = round($pedido->totaliva, FS_NF0); $pedido->totalirpf = round($pedido->totalirpf, FS_NF0); $pedido->totalrecargo = round($pedido->totalrecargo, FS_NF0); $pedido->total = $pedido->neto + $pedido->totaliva - $pedido->totalirpf + $pedido->totalrecargo; if ($pedido->save()) { $this->new_message("<a href='" . $pedido->url() . "'>" . ucfirst(FS_PEDIDO) . "</a> guardado correctamente. <a href='index.php?page=imprimir_presu_pedi&pedido=TRUE&id=" . $pedido->idpedido . "'>Imprimir</a>"); $this->new_change(ucfirst(FS_PEDIDO) . " a Cliente " . $pedido->codigo, $pedido->url(), TRUE); } else { $this->new_error_msg("¡Imposible actualizar el <a href='" . $pedido->url() . "'>" . FS_PEDIDO . "</a>!"); } } else { if ($pedido->delete()) { $this->new_message(ucfirst(FS_PEDIDO) . " eliminado correctamente."); } else { $this->new_error_msg("¡Imposible eliminar el <a href='" . $pedido->url() . "'>" . FS_PEDIDO . "</a>!"); } } } else { $this->new_error_msg("¡Imposible guardar el " . FS_PEDIDO . "!"); } } } }