private function modificar()
 {
     /// obtenemos el ejercicio para poder acotar la fecha
     $eje0 = $this->ejercicio->get($this->asiento->codejercicio);
     if ($eje0) {
         $this->asiento->fecha = $eje0->get_best_fecha($_POST['fecha']);
     } else {
         $this->new_error_msg('No se encuentra el ejercicio asociado al asiento.');
     }
     $this->asiento->concepto = $_POST['concepto'];
     $this->asiento->tipodocumento = $_POST['concepto'];
     $this->asiento->cambio_concepto();
     $this->asiento->importe = floatval($_POST['importe']);
     /// obtenemos la divisa de las partidas
     $div0 = $this->divisa->get($_POST['divisa']);
     if ($div0) {
         $this->save_coddivisa($div0->coddivisa);
     }
     if (!$eje0 or !$div0) {
         $this->new_error_msg('Imposible modificar el asiento.');
     } else {
         if ($this->asiento->save()) {
             $continuar = TRUE;
             $numlineas = intval($_POST['numlineas']);
             //  $this->asiento->tipodocumento = $this->asiento->concepto;
             /// eliminamos las partidas que faltan
             foreach ($this->asiento->get_partidas() as $pa) {
                 $encontrada = FALSE;
                 for ($i = 1; $i <= $numlineas; $i++) {
                     if (isset($_POST['idpartida_' . $i])) {
                         if (intval($_POST['idpartida_' . $i]) == $pa->idpartida) {
                             $encontrada = TRUE;
                             break;
                         }
                     }
                 }
                 if (!$encontrada) {
                     if (!$pa->delete()) {
                         $this->new_error_msg('Imposible eliminar la línea debe=' . $pa->debe . ' haber=' . $pa->haber);
                         $continuar = FALSE;
                         break;
                     }
                 }
             }
             /// añadimos y modificamos
             $npartida = new partida();
             for ($i = 1; $i <= $numlineas; $i++) {
                 if (isset($_POST['idpartida_' . $i])) {
                     if ($_POST['idpartida_' . $i] == '-1') {
                         /// las nuevas líneas llevan idpartida = -1
                         $partida = new partida();
                     } else {
                         $partida = $npartida->get($_POST['idpartida_' . $i]);
                         if (!$partida) {
                             $this->new_error_msg('Partida de ' . $_POST['codsubcuenta_' . $i] . ' no encontrada.');
                             $continuar = FALSE;
                         }
                     }
                     // borra la partida para poner nuevos valores
                     $partida->delete();
                     if ($continuar) {
                         /// añadimos
                         $sub0 = $this->subcuenta->get_by_codigo($_POST['codsubcuenta_' . $i], $eje0->codejercicio);
                         if ($sub0) {
                             $partida->idasiento = $this->asiento->idasiento;
                             $partida->coddivisa = $div0->coddivisa;
                             $partida->tasaconv = $div0->tasaconv;
                             $partida->idsubcuenta = $_POST['idsubcuenta_' . $i];
                             $partida->codsubcuenta = $_POST['codsubcuenta_' . $i];
                             $partida->debe = floatval($_POST['debe_' . $i]);
                             $partida->haber = floatval($_POST['haber_' . $i]);
                             $partida->idconcepto = $this->asiento->idconcepto;
                             $partida->concepto = $this->asiento->concepto;
                             $partida->documento = $this->asiento->documento;
                             $partida->tipodocumento = $this->asiento->tipodocumento;
                             $partida->comprobante = $_POST['comp_' . $i];
                             $partida->referencia = $_POST['ref_' . $i];
                             if (isset($_POST['codcontrapartida_' . $i])) {
                                 if ($_POST['codcontrapartida_' . $i] != '') {
                                     $subc1 = $this->subcuenta->get_by_codigo($_POST['codcontrapartida_' . $i], $eje0->codejercicio);
                                     if ($subc1) {
                                         $partida->idcontrapartida = $subc1->idsubcuenta;
                                         $partida->codcontrapartida = $subc1->codsubcuenta;
                                         $partida->cifnif = $_POST['cifnif_' . $i];
                                         $partida->iva = floatval($_POST['iva_' . $i]);
                                         $partida->baseimponible = floatval($_POST['baseimp_' . $i]);
                                     } else {
                                         $this->new_error_msg('Subcuenta ' . $_POST['codcontrapartida_' . $i] . ' no encontrada.');
                                         $continuar = FALSE;
                                     }
                                 }
                             }
                             if (!$partida->save()) {
                                 $this->new_error_msg('Imposible guardar la partida de la subcuenta ' . $_POST['codsubcuenta_' . $i] . '.');
                                 $continuar = FALSE;
                             }
                         } else {
                             $this->new_error_msg('Subcuenta ' . $_POST['codsubcuenta_' . $i] . ' de la línea ' . $i . ' no encontrada.');
                             $continuar = FALSE;
                         }
                     } else {
                         break;
                     }
                 }
             }
             // Después de que se hicieron todas las actualizaciones cargo las partidas existentes y actualizo
             // al array contabilidad_asiento::$partidas para que se actualicen con las generadas por las cajas
             contabilidad_asiento::cargar_partidas($this->asiento, $div0);
             if (isset($_POST['importar_caja']) && filter_var($_POST['importar_caja'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) === true) {
                 if ($continuar) {
                     $continuar = contabilidad_asiento::importar_caja($this->asiento, $div0, $this);
                 } else {
                     $this->new_error_msg("Hay algún error relacionado a este asiento, imposible importar cajas");
                 }
             }
             if ($continuar) {
                 $this->new_message('Asiento modificado correctamente.');
                 $this->new_change('Asiento ' . $this->asiento->numero, $this->asiento->url());
             }
         } else {
             $this->new_error_msg('Imposible modificar el asiento.');
         }
     }
 }
 private function nuevo_asiento_modelo130()
 {
     $continuar = TRUE;
     $eje0 = $this->ejercicio->get_by_fecha($_POST['fecha']);
     if (!$eje0) {
         $this->new_error_msg('Ejercicio no encontrado.');
         $continuar = FALSE;
     }
     $div0 = $this->divisa->get($_POST['divisa']);
     if (!$div0) {
         $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="' . $this->ppage->url() . '">asientos</a>
            para ver si el asiento se ha guardado correctamente.');
         $continuar = FALSE;
     }
     if ($continuar) {
         $meses = array('', 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre');
         $codcaja = '5700000000';
         if (isset($_POST['banco130'])) {
             if ($_POST['banco130'] != '') {
                 $codcaja = $_POST['banco130'];
             }
         }
         /// asiento de cuota
         $asiento = new asiento();
         $asiento->codejercicio = $eje0->codejercicio;
         $asiento->concepto = 'Pago modelo 130 ' . $meses[intval(date('m', strtotime($_POST['fecha'])))];
         $asiento->fecha = $_POST['fecha'];
         $asiento->importe = floatval($_POST['modelo130']);
         if ($asiento->save()) {
             $subc = $this->subcuenta->get_by_codigo('4730000000', $eje0->codejercicio);
             if ($subc) {
                 $partida = new partida();
                 $partida->idasiento = $asiento->idasiento;
                 $partida->concepto = $asiento->concepto;
                 $partida->idsubcuenta = $subc->idsubcuenta;
                 $partida->codsubcuenta = $subc->codsubcuenta;
                 $partida->debe = $asiento->importe;
                 $partida->save();
             } else {
                 $this->new_error_msg('Subcuenta 4730000000 no encontrada.');
                 $continuar = FALSE;
             }
             $subc = $this->subcuenta->get_by_codigo($codcaja, $eje0->codejercicio);
             if ($subc) {
                 $partida = new partida();
                 $partida->idasiento = $asiento->idasiento;
                 $partida->concepto = $asiento->concepto;
                 $partida->idsubcuenta = $subc->idsubcuenta;
                 $partida->codsubcuenta = $subc->codsubcuenta;
                 $partida->haber = $asiento->importe;
                 $partida->save();
             } else {
                 $this->new_error_msg('Subcuenta ' . $codcaja . ' no encontrada.');
                 $continuar = FALSE;
             }
             if ($continuar) {
                 $this->new_message("<a href='" . $asiento->url() . "'>Asiento de pago</a> guardado correctamente!");
             } else {
                 if ($asiento->delete()) {
                     $this->new_error_msg("¡Error en alguna de las partidas! Se ha borrado el asiento.");
                 } else {
                     $this->new_error_msg("¡Error en alguna de las partidas! Además ha sido imposible borrar el asiento.");
                 }
             }
         } else {
             $this->new_error_msg("¡Imposible guardar el asiento!");
         }
     }
 }
Ejemplo n.º 3
0
 public function asiento_url(asiento $asiento)
 {
     return $asiento->url();
 }
Ejemplo n.º 4
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;
 }