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