Пример #1
0
 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']);
                 }
             }
         }
     }
 }
Пример #3
0
 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;
 }
Пример #4
0
 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) . ";");
         }
     }
 }
Пример #5
0
 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;
     }
 }
Пример #6
0
 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;
 }
Пример #7
0
 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;
 }
Пример #8
0
 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));
 }
Пример #11
0
 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';
 }
Пример #12
0
 /**
  * 
  * @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;
 }
Пример #13
0
 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;
 }
Пример #17
0
 /**
  * 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;
 }
Пример #18
0
 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.');
     }
 }
Пример #20
0
 private function sync()
 {
     $continuar = TRUE;
     $art0 = new articulo();
     $ej0 = new ejercicio();
     $serie0 = new serie();
     $div0 = new divisa();
     foreach (array_reverse($this->pedidos) as $ped) {
         $data = $this->db->select("SELECT * FROM albaranescli WHERE numero2 = " . $art0->var2str($this->order_numero2($ped->order_number)) . ";");
         if (!$data and $continuar and $ped->status == 'completed') {
             $albaran = new albaran_cliente();
             $albaran->numero2 = $this->order_numero2($ped->order_number);
             $albaran->fecha = Date('d-m-Y', strtotime($ped->created_at));
             $albaran->hora = Date('H:i:s', strtotime($ped->created_at));
             $albaran->observaciones = 'Este pedido ha sido importado con la demo de woocommerce, por eso no se ha asignado el cliente.';
             $albaran->cifnif = '';
             $albaran->direccion = '';
             $ejercicio = $ej0->get_by_fecha($albaran->fecha);
             if ($ejercicio) {
                 $albaran->codejercicio = $ejercicio->codejercicio;
                 $serie = $serie0->get($this->setup['wooc_serie']);
                 if ($serie) {
                     $albaran->codserie = $serie->codserie;
                     $albaran->irpf = $serie->irpf;
                     $albaran->codalmacen = $this->setup['wooc_alm'];
                     $divisa = $div0->get($this->empresa->coddivisa);
                     if ($divisa) {
                         $albaran->coddivisa = $divisa->coddivisa;
                         $albaran->tasaconv = $divisa->tasaconv;
                     }
                     $albaran->codpago = $this->empresa->codpago;
                     if ($albaran->save()) {
                         foreach ($ped->line_items as $l) {
                             $linea = new linea_albaran_cliente();
                             $linea->idalbaran = $albaran->idalbaran;
                             $linea->referencia = $l->sku;
                             $linea->descripcion = $l->name;
                             $linea->cantidad = $l->quantity;
                             $linea->irpf = $albaran->irpf;
                             $articulo = $art0->get($l->sku);
                             if ($articulo and !$serie->siniva and $cliente->regimeniva != 'Exento') {
                                 $linea->codimpuesto = $articulo->codimpuesto;
                                 $linea->iva = $articulo->get_iva();
                             }
                             $linea->pvpunitario = 100 * $l->total / $l->quantity / (100 + $linea->iva);
                             $linea->pvptotal = $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad;
                             if ($linea->save()) {
                                 /// descontamos del stock
                                 if ($articulo) {
                                     $articulo->sum_stock($albaran->codalmacen, 0 - $linea->cantidad);
                                 }
                                 $albaran->neto += $linea->pvptotal;
                                 $albaran->totaliva += $linea->pvptotal * $linea->iva / 100;
                                 $albaran->totalirpf += $linea->pvptotal * $linea->irpf / 100;
                                 $albaran->totalrecargo += $linea->pvptotal * $linea->recargo / 100;
                             } else {
                                 $this->new_error_msg("¡Imposible guardar la linea con referencia: " . $linea->referencia);
                                 $continuar = FALSE;
                             }
                         }
                         /// cupones
                         foreach ($ped->coupon_lines as $l) {
                             $linea = new linea_albaran_cliente();
                             $linea->idalbaran = $albaran->idalbaran;
                             $linea->descripcion = 'Cupón: ' . $l->code;
                             $linea->cantidad = -1;
                             $linea->irpf = $albaran->irpf;
                             if (!$serie->siniva and $cliente->regimeniva != 'Exento') {
                                 $impuesto = $this->impuesto->get($this->setup['wooc_imp']);
                                 if ($impuesto) {
                                     $linea->codimpuesto = $impuesto->codimpuesto;
                                     $linea->iva = $impuesto->iva;
                                 }
                             }
                             $linea->pvpunitario = 100 * floatval($l->amount) / (100 + $linea->iva);
                             $linea->pvptotal = $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad;
                             if ($linea->save()) {
                                 $albaran->neto += $linea->pvptotal;
                                 $albaran->totaliva += $linea->pvptotal * $linea->iva / 100;
                                 $albaran->totalirpf += $linea->pvptotal * $linea->irpf / 100;
                                 $albaran->totalrecargo += $linea->pvptotal * $linea->recargo / 100;
                             } else {
                                 $this->new_error_msg("¡Imposible guardar la linea del cupón: " . $l->code);
                                 $continuar = FALSE;
                             }
                         }
                         if ($continuar) {
                             /// redondeamos
                             $albaran->neto = round($albaran->neto, FS_NF0);
                             $albaran->totaliva = round($albaran->totaliva, FS_NF0);
                             $albaran->totalirpf = round($albaran->totalirpf, FS_NF0);
                             $albaran->totalrecargo = round($albaran->totalrecargo, FS_NF0);
                             $albaran->total = $albaran->neto + $albaran->totaliva - $albaran->totalirpf + $albaran->totalrecargo;
                             if ($albaran->save()) {
                                 $this->new_message("<a href='" . $albaran->url() . "'>" . ucfirst(FS_ALBARAN) . "</a> guardado correctamente.");
                                 $this->new_change(ucfirst(FS_ALBARAN) . ' Cliente ' . $albaran->codigo, $albaran->url(), TRUE);
                             } else {
                                 $this->new_error_msg("¡Imposible actualizar el <a href='" . $albaran->url() . "'>" . FS_ALBARAN . "</a>!");
                                 $continuar = FALSE;
                             }
                         } else {
                             if ($albaran->delete()) {
                                 $this->new_message(ucfirst(FS_ALBARAN) . " eliminado correctamente.");
                             } else {
                                 $this->new_error_msg("¡Imposible eliminar el <a href='" . $albaran->url() . "'>" . FS_ALBARAN . "</a>!");
                                 $continuar = FALSE;
                             }
                         }
                     } else {
                         $this->new_error_msg('Error al guardar los datos del ' . FS_ALBARAN . ' ' . $ped->order_number);
                         $continuar = FALSE;
                     }
                 } else {
                     $this->new_error_msg('Imposible encontrar una serie para el ' . FS_ALBARAN . ' ' . $ped->order_number);
                     $continuar = FALSE;
                 }
             } else {
                 $this->new_error_msg('Imposible encontrar un ejercicio para el ' . FS_ALBARAN . ' ' . $ped->order_number);
                 $continuar = FALSE;
             }
             break;
         }
     }
     $this->new_advice('Esto es una demo. La versión completa importa todos los pedidos completados, incluyendo clientes y artículos. &nbsp; ' . '<a href="https://www.facturascripts.com/store/producto/plugin-woocommerce/" target="_blank">' . '<span class="glyphicon glyphicon-shopping-cart"></span> comprar la versión completa</a>');
 }
Пример #21
0
 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');
     }
 }
Пример #22
0
 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;
 }
Пример #24
0
 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;
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
Пример #26
0
 /**
  * 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!");
             }
         }
     }
 }
Пример #28
0
 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 . "!");
                 }
             }
         }
     }
 }
Пример #29
0
 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 . "!");
         }
     }
 }
Пример #30
0
 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 . "!");
             }
         }
     }
 }