Ejemplo n.º 1
0
 public function __construct(&$db)
 {
     $alb_cli = new albaran_cliente();
     echo "Ejecutando tareas para los " . FS_ALBARANES . " de cliente...\n";
     $alb_cli->cron_job();
     $alb_pro = new albaran_proveedor();
     echo "Ejecutando tareas para los " . FS_ALBARANES . " de proveedor...\n";
     $alb_pro->cron_job();
     $articulo = new articulo();
     echo "Ejecutando tareas para los artículos...";
     $articulo->cron_job();
     $asiento = new asiento();
     echo "\nEjecutando tareas para los asientos...\n";
     $asiento->cron_job();
     if (FS_LIBROS_CONTABLES) {
         $libro = new libro_mayor();
         echo "Generamos el libro mayor para cada subcuenta y el libro diario para cada ejercicio...";
         $libro->cron_job();
         $inventarios_balances = new inventarios_balances();
         echo "\nGeneramos el libro de inventarios y balances para cada ejercicio...";
         $inventarios_balances->cron_job();
     } else {
         $libro = new libro_mayor();
         echo "Comprobamos algunas subcuentas...";
         $libro->cron_job();
     }
 }
 protected function process()
 {
     $this->asiento = FALSE;
     $this->ppage = $this->page->get('contabilidad_asientos');
     $this->divisa = new divisa();
     $this->ejercicio = new ejercicio();
     $this->impuesto = new impuesto();
     $this->subcuenta = new subcuenta();
     if (isset($_GET['id'])) {
         $asiento = new asiento();
         $this->asiento = $asiento->get($_GET['id']);
     }
     if (isset($_POST['fecha']) and isset($_POST['query'])) {
         $this->new_search();
     } else {
         if ($this->asiento) {
             $this->page->title = 'Asiento: ' . $this->asiento->numero;
             if (isset($_GET['bloquear'])) {
                 $this->asiento->editable = FALSE;
                 if ($this->asiento->save()) {
                     $this->new_message('Asiento bloqueado correctamente.');
                 } else {
                     $this->new_error_msg('Imposible bloquear el asiento.');
                 }
             } else {
                 if (isset($_GET['desbloquear'])) {
                     $this->asiento->editable = TRUE;
                     if ($this->asiento->save()) {
                         $this->new_message('Asiento desbloqueado correctamente.');
                     } else {
                         $this->new_error_msg('Imposible desbloquear el asiento.');
                     }
                 }
             }
             if ($this->asiento->editable) {
                 $this->buttons[] = new fs_button('b_bloquear', 'Bloquear', $this->url() . '&bloquear=TRUE');
             } else {
                 $this->buttons[] = new fs_button('b_desbloquear', 'Desbloquear', $this->url() . '&desbloquear=TRUE');
             }
             $this->buttons[] = new fs_button_img('b_eliminar_asiento', 'Eliminar', 'trash.png', '#', TRUE);
             if (isset($_POST['fecha']) and $this->asiento->editable) {
                 $this->modificar();
             }
             $this->asiento->full_test();
         } else {
             $this->new_error_msg("Asiento no encontrado.");
         }
     }
 }
Ejemplo n.º 3
0
 protected function private_core()
 {
     $this->asiento = FALSE;
     $this->ppage = $this->page->get('contabilidad_asientos');
     $this->divisa = new divisa();
     $this->ejercicio = new ejercicio();
     $this->impuesto = new impuesto();
     $this->subcuenta = new subcuenta();
     /// ¿El usuario tiene permiso para eliminar en esta página?
     $this->allow_delete = $this->user->allow_delete_on(__CLASS__);
     if (isset($_GET['id'])) {
         $asiento = new asiento();
         $this->asiento = $asiento->get($_GET['id']);
     }
     if (isset($_POST['fecha']) and isset($_POST['query'])) {
         $this->new_search();
     } else {
         if ($this->asiento) {
             $this->page->title = 'Asiento: ' . $this->asiento->numero;
             if (isset($_GET['bloquear'])) {
                 $this->asiento->editable = FALSE;
                 if ($this->asiento->save()) {
                     $this->new_message('Asiento bloqueado correctamente.');
                 } else {
                     $this->new_error_msg('Imposible bloquear el asiento.');
                 }
             } else {
                 if (isset($_GET['desbloquear'])) {
                     $this->asiento->editable = TRUE;
                     if ($this->asiento->save()) {
                         $this->new_message('Asiento desbloqueado correctamente.');
                     } else {
                         $this->new_error_msg('Imposible desbloquear el asiento.');
                     }
                 }
             }
             if (isset($_POST['fecha']) and $this->asiento->editable) {
                 $this->modificar();
             }
             /// comprobamos el asiento
             $this->asiento->full_test();
             $this->lineas = $this->get_lineas_asiento();
         } else {
             $this->new_error_msg("Asiento no encontrado.");
         }
     }
 }
 public function delete()
 {
     /// eliminamos los asientos correspondientes
     $asi0 = new asiento();
     $asiento = $asi0->get($this->idasiento);
     if ($asiento) {
         $asiento->delete();
     }
     return $this->db->exec("DELETE FROM " . $this->table_name . " WHERE idpagodevol = " . $this->var2str($this->idpagodevol) . ";");
 }
Ejemplo n.º 5
0
 private function check_partidas_erroneas()
 {
     $errores = array();
     $asient0 = new asiento();
     foreach ($this->ejercicio->all() as $eje) {
         $sql = "SELECT * FROM co_partidas WHERE idasiento IN\n            (SELECT idasiento FROM co_asientos WHERE codejercicio = " . $eje->var2str($eje->codejercicio) . ")\n            AND idsubcuenta NOT IN (SELECT idsubcuenta FROM co_subcuentas WHERE codejercicio = " . $eje->var2str($eje->codejercicio) . ");";
         $data = $this->db->select($sql);
         if ($data) {
             foreach ($data as $d) {
                 $asiento = $asient0->get($d['idasiento']);
                 if ($asiento) {
                     $errores[] = array('error' => 'Subcuenta ' . $d['codsubcuenta'] . ' no pertenece al mismo ejercicio que el asiento', 'model' => 'asiento', 'ejercicio' => $eje->codejercicio, 'id' => $asiento->numero, 'url' => $asiento->url(), 'fecha' => $asiento->fecha, 'fix' => FALSE);
                 }
             }
         }
     }
     return $errores;
 }
Ejemplo n.º 6
0
 public function test()
 {
     $status = FALSE;
     $this->codejercicio = trim($this->codejercicio);
     $this->nombre = $this->no_html($this->nombre);
     if (!preg_match("/^[A-Z0-9_]{1,4}\$/i", $this->codejercicio)) {
         $this->new_error_msg("Código de ejercicio no válido.");
     } else {
         if (strlen($this->nombre) < 1 or strlen($this->nombre) > 100) {
             $this->new_error_msg("Nombre del ejercicio no válido.");
         } else {
             if (strtotime($this->fechainicio) > strtotime($this->fechafin)) {
                 $this->new_error_msg("La fecha de inicio (" . $this->fechainicio . ") es " . "posterior a la fecha fin (" . $this->fechafin . ").");
             } else {
                 if (strtotime($this->fechainicio) < 1) {
                     $this->new_error_msg("Fecha no válida.");
                 } else {
                     $status = TRUE;
                 }
             }
         }
     }
     $asiento = new asiento();
     if (!$asiento->get($this->idasientoapertura)) {
         $this->idasientoapertura = NULL;
     }
     if (!$asiento->get($this->idasientocierre)) {
         $this->idasientocierre = NULL;
     }
     if (!$asiento->get($this->idasientopyg)) {
         $this->idasientopyg = NULL;
     }
     return $status;
 }
Ejemplo n.º 7
0
 public function delete()
 {
     /// si hay un asiento asociado lo eliminamos
     if (isset($this->idasiento)) {
         $asiento = new asiento();
         $as0 = $asiento->get($this->idasiento);
         if ($as0) {
             $as0->delete();
         }
     }
     return $this->db->exec("DELETE FROM " . $this->table_name . " WHERE idregiva = " . $this->var2str($this->idregiva) . ";");
 }
 /**
  * @param asiento $asiento
  * @param divisa $divisa
  */
 public static function cargar_partidas(asiento $asiento, divisa $divisa)
 {
     $partidas = $asiento->get_partidas();
     if (is_array($partidas) && !empty($partidas)) {
         foreach ($partidas as $partida) {
             self::add_partida($asiento, $divisa, $partida->codsubcuenta, array('debe' => $partida->debe, 'haber' => $partida->haber, 'comprobante' => $partida->comprobante));
         }
     }
 }
Ejemplo n.º 9
0
 /**
  * @return asiento
  */
 public function getAsiento()
 {
     if (!$this->asiento && $this->idasiento) {
         $obj = new asiento();
         $this->asiento = $obj->get($this->getIdAsiento());
     }
     return $this->asiento;
 }
 private function cerrar_ejercicio()
 {
     $this->new_message('Cerrando ejercicio...');
     $asiento = new asiento();
     $continuar = TRUE;
     if (isset($this->ejercicio->idasientopyg)) {
         $aspyg = $asiento->get($this->ejercicio->idasientopyg);
         if ($aspyg) {
             if (!$aspyg->delete()) {
                 $this->new_error_msg('Imposible eliminar el asiento de pérdidas y ganancias.');
                 $continuar = FALSE;
             }
         } else {
             $this->ejercicio->save();
         }
         /// al guardar ya comprueba los asientos especiales
     }
     if (isset($this->ejercicio->idasientocierre)) {
         $asc = $asiento->get($this->ejercicio->idasientocierre);
         if ($asc) {
             if (!$asc->delete()) {
                 $this->new_error_msg('Imposible eliminar el asiento de cierre.');
                 $continuar = FALSE;
             }
         } else {
             $this->ejercicio->save();
         }
         /// al guardar ya comprueba los asientos especiales
     }
     $siguiente_ejercicio = $this->ejercicio->get_by_fecha(Date('d-m-Y', strtotime($this->ejercicio->fechafin) + 24 * 3600));
     if (isset($siguiente_ejercicio->idasientoapertura)) {
         $asap = $asiento->get($siguiente_ejercicio->idasientoapertura);
         if ($asap) {
             if (!$asap->delete()) {
                 $this->new_error_msg('Imposible eliminar el asiento de apertura.');
                 $continuar = FALSE;
             }
         } else {
             $this->ejercicio->save();
         }
         /// al guardar ya comprueba los asientos especiales
     }
     if ($continuar) {
         $asiento_pyg = new asiento();
         $asiento_pyg->codejercicio = $this->ejercicio->codejercicio;
         $asiento_pyg->concepto = 'Regularización ejercicio ' . $this->ejercicio->nombre;
         $asiento_pyg->editable = FALSE;
         $asiento_pyg->fecha = $this->ejercicio->fechafin;
         if (!$asiento_pyg->save()) {
             $continuar = FALSE;
         }
     }
     if ($continuar) {
         $asiento_cierre = new asiento();
         $asiento_cierre->codejercicio = $this->ejercicio->codejercicio;
         $asiento_cierre->concepto = 'Asiento de cierre del ejercicio ' . $this->ejercicio->nombre;
         $asiento_cierre->editable = FALSE;
         $asiento_cierre->fecha = $this->ejercicio->fechafin;
         if (!$asiento_cierre->save()) {
             $continuar = FALSE;
         }
     }
     if ($continuar) {
         $asiento_apertura = new asiento();
         $asiento_apertura->codejercicio = $siguiente_ejercicio->codejercicio;
         $asiento_apertura->concepto = 'Asiento de apertura del ejercicio ' . $siguiente_ejercicio->nombre;
         $asiento_apertura->editable = FALSE;
         $asiento_apertura->fecha = $siguiente_ejercicio->fechainicio;
         if (!$asiento_apertura->save()) {
             $continuar = FALSE;
         }
     }
     if ($continuar) {
         /// actualizamos los saldos de las subcuentas:
         $subcuenta = new subcuenta();
         foreach ($subcuenta->all_from_ejercicio($this->ejercicio->codejercicio) as $sc) {
             $sc->save();
         }
         /*
          * Abonamos y cargamos los saldos de las cuentas de los grupos 6 y 7,
          * la diferencia la enviamos a la cuenta 129.
          */
         $diferencia = 0;
         foreach ($subcuenta->all_from_ejercicio($this->ejercicio->codejercicio) as $sc) {
             if (in_array(substr($sc->codcuenta, 0, 1), array('6', '7')) and $sc->tiene_saldo()) {
                 $ppyg = new partida();
                 $ppyg->idasiento = $asiento_pyg->idasiento;
                 $ppyg->concepto = $asiento_pyg->concepto;
                 $ppyg->idsubcuenta = $sc->idsubcuenta;
                 $ppyg->codsubcuenta = $sc->codsubcuenta;
                 if ($sc->saldo < 0) {
                     $ppyg->debe = abs($sc->saldo);
                 } else {
                     $ppyg->haber = $sc->saldo;
                 }
                 $diferencia += $ppyg->debe - $ppyg->haber;
                 $ppyg->coddivisa = $sc->coddivisa;
                 if (!$ppyg->save()) {
                     $continuar = FALSE;
                 }
             }
         }
         $cuenta = new cuenta();
         $cuenta_pyg = $cuenta->get_by_codigo('129', $this->ejercicio->codejercicio);
         if ($cuenta_pyg) {
             $subcuenta_pyg = FALSE;
             foreach ($cuenta_pyg->get_subcuentas() as $sc) {
                 $subcuenta_pyg = $sc;
                 break;
             }
             if ($subcuenta_pyg) {
                 $ppyg = new partida();
                 $ppyg->idasiento = $asiento_pyg->idasiento;
                 $ppyg->concepto = $asiento_pyg->concepto;
                 $ppyg->idsubcuenta = $subcuenta_pyg->idsubcuenta;
                 $ppyg->codsubcuenta = $subcuenta_pyg->codsubcuenta;
                 $ppyg->haber = $diferencia;
                 $ppyg->coddivisa = $sc->coddivisa;
                 if (!$ppyg->save()) {
                     $continuar = FALSE;
                 }
             } else {
                 $this->new_error_msg('No se encuentra una subcuenta para la cuenta 129.');
                 $continuar = FALSE;
             }
         } else {
             $this->new_error_msg('No se encuentra la cuenta 129.');
             $continuar = FALSE;
         }
         /*
          * Generamos los asientos de cierre y apertura
          */
         foreach ($subcuenta->all_from_ejercicio($this->ejercicio->codejercicio) as $sc) {
             if ($sc->tiene_saldo()) {
                 $pac = new partida();
                 $pac->idasiento = $asiento_cierre->idasiento;
                 $pac->concepto = $asiento_cierre->concepto;
                 $pac->idsubcuenta = $sc->idsubcuenta;
                 $pac->codsubcuenta = $sc->codsubcuenta;
                 if ($sc->saldo < 0) {
                     $pac->debe = abs($sc->saldo);
                 } else {
                     $pac->haber = $sc->saldo;
                 }
                 $pac->coddivisa = $sc->coddivisa;
                 if (!$pac->save()) {
                     $continuar = FALSE;
                 }
                 if ($sc->codcuenta == '129') {
                     $nsc = $subcuenta->get_by_codigo('1200000000', $siguiente_ejercicio->codejercicio, TRUE);
                 } else {
                     $nsc = $subcuenta->get_by_codigo($sc->codsubcuenta, $siguiente_ejercicio->codejercicio, TRUE);
                 }
                 if ($nsc) {
                     $paa = new partida();
                     $paa->idasiento = $asiento_apertura->idasiento;
                     $paa->concepto = $asiento_apertura->concepto;
                     $paa->idsubcuenta = $nsc->idsubcuenta;
                     $paa->codsubcuenta = $nsc->codsubcuenta;
                     if ($sc->saldo > 0) {
                         $paa->debe = round($sc->saldo, FS_NF0);
                     } else {
                         $paa->haber = round(abs($sc->saldo), FS_NF0);
                     }
                     $paa->coddivisa = $nsc->coddivisa;
                     if (!$paa->save()) {
                         $continuar = FALSE;
                     }
                 } else {
                     $continuar = FALSE;
                 }
             }
         }
         /// comprobamos los nuevos asientos
         $total = 0;
         foreach ($asiento_pyg->get_partidas() as $part) {
             $total += $part->debe - $part->haber;
         }
         if (abs($total) >= 0.01) {
             $continuar = FALSE;
             $this->new_error_msg('Asiento de pérdidas y ganancias descuadrado.');
         }
         $total = 0;
         foreach ($asiento_cierre->get_partidas() as $part) {
             $total += $part->debe - $part->haber;
         }
         if (abs($total) >= 0.01) {
             $continuar = FALSE;
             $this->new_error_msg('Asiento de cierre descuadrado.');
         }
         $total = 0;
         foreach ($asiento_apertura->get_partidas() as $part) {
             $total += $part->debe - $part->haber;
         }
         if (abs($total) >= 0.01) {
             $subcuenta_redondeo = $subcuenta->get_by_codigo('6780000000', $asiento_apertura->codejercicio);
             if ($subcuenta) {
                 $npaa = new partida();
                 $npaa->idasiento = $asiento_apertura->idasiento;
                 $npaa->concepto = $asiento_apertura->concepto;
                 $npaa->idsubcuenta = $subcuenta_redondeo->idsubcuenta;
                 $npaa->codsubcuenta = $subcuenta_redondeo->codsubcuenta;
                 $npaa->coddivisa = $subcuenta_redondeo->coddivisa;
                 if ($total > 0) {
                     $npaa->haber = $total;
                 } else {
                     $npaa->debe = $total;
                 }
                 $npaa->save();
             } else {
                 $continuar = FALSE;
                 $this->new_error_msg('Asiento de apertura descuadrado.');
             }
         }
         /// cerramos el ejercicio
         if ($continuar) {
             $this->ejercicio->estado = 'CERRADO';
             $this->ejercicio->idasientopyg = $asiento_pyg->idasiento;
             $this->ejercicio->idasientocierre = $asiento_cierre->idasiento;
             if ($this->ejercicio->save()) {
                 $this->new_message('Ejercicio cerrado correctamente.');
             } else {
                 $this->new_error_msg('Error al cerrar el ejercicio.');
             }
             $siguiente_ejercicio->idasientoapertura = $asiento_apertura->idasiento;
             if (!$siguiente_ejercicio->save()) {
                 $this->new_error_msg('Error al modificar el siguiente ejercicio.');
             }
         } else {
             $this->new_error_msg('Error al generar los asientos.');
             if ($asiento_pyg->delete()) {
                 $this->new_message('Asiento de pérdidas y ganancias eliminado.');
             } else {
                 $this->new_error_msg('Imposible eliminar el asiento de pérdidas y ganancias.');
             }
             if ($asiento_cierre->delete()) {
                 $this->new_message('Asiento de cierre eliminado.');
             } else {
                 $this->new_error_msg('Imposible eliminar el asiento de cierre.');
             }
             if ($asiento_apertura->delete()) {
                 $this->new_message('Asiento de apertura eliminado.');
             } else {
                 $this->new_error_msg('Imposible eliminar el asiento de apertura.');
             }
         }
     }
 }
 public function delete()
 {
     if ($this->db->exec("DELETE FROM " . $this->table_name . " WHERE idfactura = " . $this->var2str($this->idfactura) . ";")) {
         if ($this->idasiento) {
             /**
              * Delegamos la eliminación del asiento en la clase correspondiente.
              */
             $asiento = new asiento();
             $asi0 = $asiento->get($this->idasiento);
             if ($asi0) {
                 $asi0->delete();
             }
             $asi1 = $asiento->get($this->idasientop);
             if ($asi1) {
                 $asi1->delete();
             }
         }
         /// desvinculamos el/los albaranes asociados
         $this->db->exec("UPDATE albaranesprov SET idfactura = NULL, ptefactura = TRUE WHERE idfactura = " . $this->var2str($this->idfactura) . ";");
         return TRUE;
     } else {
         return FALSE;
     }
 }
 public function generar_asiento_faltante(&$faltante, $ejercicio)
 {
     $ok = FALSE;
     $this->asiento = FALSE;
     $tipo = $faltante->estado;
     $conductor0 = new distribucion_conductores();
     $subcuenta_conductor = FALSE;
     $concepto = $tipo == 'pendiente' ? "Faltante " : "Pago Faltante ";
     $conductor = $conductor0->get($faltante->idempresa, $faltante->conductor);
     if ($conductor) {
         $subcuenta_conductor = $this->get_subcuenta($ejercicio);
     }
     if (!$subcuenta_conductor) {
         $eje0 = $this->ejercicio->get($ejercicio);
         return "No se ha podido generar una subcuenta para el conductor <a href='" . $eje0->url() . "'>¿Has importado los datos del ejercicio?</a>";
         if (!$this->soloasiento) {
             return "Aun así el <a href='" . $faltante->url() . "'>faltante</a> se ha generado correctamente, pero sin asiento contable.";
         }
     } else {
         $asiento = new asiento();
         $asiento->codejercicio = $ejercicio;
         $asiento->concepto = $concepto . $faltante->idrecibo . " - " . $faltante->nombreconductor;
         $asiento->documento = $faltante->idrecibo;
         $asiento->editable = FALSE;
         $asiento->fecha = $faltante->fecha;
         $asiento->importe = $faltante->importe;
         $asiento->tipodocumento = $concepto . ' Liquidacion';
         if ($asiento->save()) {
             $asiento_correcto = TRUE;
             $subcuenta = new subcuenta();
             $partida0 = new partida();
             $partida0->idasiento = $asiento->idasiento;
             $partida0->concepto = $asiento->concepto;
             $partida0->idsubcuenta = $subcuenta_conductor->idsubcuenta;
             $partida0->codsubcuenta = $subcuenta_conductor->codsubcuenta;
             if ($tipo == 'pendiente') {
                 $partida0->debe = $faltante->importe;
             } elseif ($tipo == 'pagado') {
                 $partida0->haber = $faltante->importe;
             }
             $partida0->coddivisa = $faltante->coddivisa;
             $partida0->tasaconv = 1;
             $partida0->codserie = NULL;
             if (!$partida0->save()) {
                 $asiento_correcto = FALSE;
             }
             if ($asiento_correcto) {
                 $faltante->idasiento = $asiento->idasiento;
                 $faltante->idsubcuenta = $partida0->idsubcuenta;
                 $faltante->codcuenta = $partida0->codsubcuenta;
                 if ($faltante->save()) {
                     $ok = TRUE;
                     $this->asiento = $asiento;
                 } else {
                     return "¡Imposible añadir el asiento al faltante!";
                 }
             } else {
                 if ($asiento->delete()) {
                     return "El asiento se ha borrado.";
                 } else {
                     return "¡Imposible borrar el asiento!";
                 }
             }
         } else {
             return "¡Imposible guardar el asiento!";
         }
     }
     return $ok;
 }
Ejemplo n.º 13
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;
 }
Ejemplo n.º 14
0
 public function asiento_url(asiento $asiento)
 {
     return $asiento->url();
 }
 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.º 16
0
 public function actualiza_importe($idasiento)
 {
     $asiento = new asiento();
     $asiento->actualiza_importe($idasiento);
 }
Ejemplo n.º 17
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;
 }
Ejemplo n.º 18
0
 $fs_default_items->set_codalmacen($empresa->codalmacen);
 $fs_default_items->set_coddivisa($empresa->coddivisa);
 $fs_default_items->set_codejercicio($empresa->codejercicio);
 $fs_default_items->set_codpago($empresa->codpago);
 $fs_default_items->set_codpais($empresa->codpais);
 $fs_default_items->set_codserie($empresa->codserie);
 $alb_cli = new albaran_cliente();
 echo "Ejecutando tareas para los " . FS_ALBARANES . " de cliente...\n";
 $alb_cli->cron_job();
 $alb_pro = new albaran_proveedor();
 echo "Ejecutando tareas para los " . FS_ALBARANES . " de proveedor...\n";
 $alb_pro->cron_job();
 $articulo = new articulo();
 echo "Ejecutando tareas para los artículos...";
 $articulo->cron_job();
 $asiento = new asiento();
 echo "\nEjecutando tareas para los asientos...\n";
 $asiento->cron_job();
 $libro = new libro_mayor();
 echo "Generamos el libro mayor para cada subcuenta y el libro diario para cada ejercicio...";
 $libro->cron_job();
 $inventarios_balances = new inventarios_balances();
 echo "\nGeneramos el libro de inventarios y balances para cada ejercicio...";
 $inventarios_balances->cron_job();
 /*
  * Ahora ejecutamos el cron de cada plugin que tenga cron y esté activado
  */
 if (file_exists('tmp/enabled_plugins')) {
     foreach (scandir(getcwd() . '/tmp/enabled_plugins') as $f) {
         if (is_string($f) and strlen($f) > 0 and !is_dir($f)) {
             if (file_exists('plugins/' . $f)) {
 private function pagar($pagada = TRUE)
 {
     /// ¿Hay asiento?
     if (is_null($this->factura->idasiento)) {
         $this->factura->pagada = $pagada;
         $this->factura->save();
     } else {
         if (!$pagada and $this->factura->pagada) {
             /// marcar como impagada
             $this->factura->pagada = FALSE;
             /// ¿Eliminamos el asiento de pago?
             $as1 = new asiento();
             $asiento = $as1->get($this->factura->idasientop);
             if ($asiento) {
                 $asiento->delete();
                 $this->new_message('Asiento de pago eliminado.');
             }
             $this->factura->idasientop = NULL;
             if ($this->factura->save()) {
                 $this->new_message('Factura marcada como impagada.');
             } else {
                 $this->new_error_msg('Error al modificar la factura.');
             }
         } else {
             if ($pagada and !$this->factura->pagada) {
                 /// marcar como pagada
                 $asiento = $this->factura->get_asiento();
                 if ($asiento) {
                     /// nos aseguramos que el cliente tenga subcuenta en el ejercicio actual
                     $subcli = FALSE;
                     $eje = $this->ejercicio->get_by_fecha($this->today());
                     if ($eje) {
                         $subcli = $this->cliente->get_subcuenta($eje->codejercicio);
                     }
                     $asiento_factura = new asiento_factura();
                     $this->factura->idasientop = $asiento_factura->generar_asiento_pago($asiento, $this->factura->codpago, $this->today(), $subcli);
                     if ($this->factura->idasientop) {
                         $this->factura->pagada = TRUE;
                         if ($this->factura->save()) {
                             $this->new_message('<a href="' . $this->factura->asiento_pago_url() . '">Asiento de pago</a> generado.');
                         } else {
                             $this->new_error_msg('Error al marcar la factura como pagada.');
                         }
                     }
                     foreach ($asiento_factura->errors as $err) {
                         $this->new_error_msg($err);
                     }
                 } else {
                     $this->new_error_msg('No se ha encontrado el asiento de la factura.');
                 }
             }
         }
     }
 }
Ejemplo n.º 20
0
 /**
  * Comprueba la validez de un asiento contable
  * @param asiento $asiento
  * @return boolean
  */
 private function check_asiento($asiento)
 {
     $ok = FALSE;
     $debe = 0;
     $haber = 0;
     foreach ($asiento->get_partidas() as $lin) {
         $debe += $lin->debe;
         $haber += $lin->haber;
     }
     if (abs($debe - $haber) < 0.01) {
         $ok = TRUE;
     }
     return $ok;
 }
 /**
  * Genera el asiento contable para una factura de venta.
  * Devuelve TRUE si el asiento se ha generado correctamente, False en caso contrario.
  * Si genera el asiento, este es accesible desde $this->asiento.
  * @param type $factura
  */
 public function generar_asiento_venta(&$factura)
 {
     $ok = FALSE;
     $this->asiento = FALSE;
     $cliente0 = new cliente();
     $subcuenta_cli = FALSE;
     $cliente = $cliente0->get($factura->codcliente);
     if ($cliente) {
         $subcuenta_cli = $cliente->get_subcuenta($factura->codejercicio);
     }
     if ($factura->totalirpf != 0 or $factura->totalrecargo != 0) {
         $this->new_error_msg('Todavía no se pueden generar asientos de facturas con IRPF o recargo.');
     } else {
         if (!$subcuenta_cli) {
             $eje0 = $this->ejercicio->get($factura->codejercicio);
             $this->new_message("No se ha podido generar una subcuenta para el cliente\n            <a href='" . $eje0->url() . "'>¿Has importado los datos del ejercicio?</a>\n            Aun así la <a href='" . $factura->url() . "'>factura</a> se ha generado correctamente,\n            pero sin asiento contable.");
         } else {
             $asiento = new asiento();
             $asiento->codejercicio = $factura->codejercicio;
             $asiento->concepto = "Factura de venta " . $factura->codigo . " - " . $factura->nombrecliente;
             $asiento->documento = $factura->codigo;
             $asiento->editable = FALSE;
             $asiento->fecha = $factura->fecha;
             $asiento->importe = $factura->total;
             $asiento->tipodocumento = 'Factura de cliente';
             if ($asiento->save()) {
                 $asiento_correcto = TRUE;
                 $subcuenta = new subcuenta();
                 $partida0 = new partida();
                 $partida0->idasiento = $asiento->idasiento;
                 $partida0->concepto = $asiento->concepto;
                 $partida0->idsubcuenta = $subcuenta_cli->idsubcuenta;
                 $partida0->codsubcuenta = $subcuenta_cli->codsubcuenta;
                 $partida0->debe = $factura->total;
                 $partida0->coddivisa = $factura->coddivisa;
                 $partida0->tasaconv = $factura->tasaconv;
                 if (!$partida0->save()) {
                     $asiento_correcto = FALSE;
                     $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida0->codsubcuenta . "!");
                 }
                 /// generamos una partida por cada impuesto
                 $subcuenta_iva = $subcuenta->get_cuentaesp('IVAREP', $asiento->codejercicio);
                 foreach ($factura->get_lineas_iva() as $li) {
                     if ($subcuenta_iva and $asiento_correcto) {
                         $partida1 = new partida();
                         $partida1->idasiento = $asiento->idasiento;
                         $partida1->concepto = $asiento->concepto;
                         $partida1->idsubcuenta = $subcuenta_iva->idsubcuenta;
                         $partida1->codsubcuenta = $subcuenta_iva->codsubcuenta;
                         $partida1->haber = $li->totaliva;
                         $partida1->idcontrapartida = $subcuenta_cli->idsubcuenta;
                         $partida1->codcontrapartida = $subcuenta_cli->codsubcuenta;
                         $partida1->cifnif = $cliente->cifnif;
                         $partida1->documento = $asiento->documento;
                         $partida1->tipodocumento = $asiento->tipodocumento;
                         $partida1->codserie = $factura->codserie;
                         $partida1->factura = $factura->numero;
                         $partida1->baseimponible = $li->neto;
                         $partida1->iva = $li->iva;
                         $partida1->coddivisa = $factura->coddivisa;
                         $partida1->tasaconv = $factura->tasaconv;
                         if (!$partida1->save()) {
                             $asiento_correcto = FALSE;
                             $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida1->codsubcuenta . "!");
                         }
                     }
                 }
                 $subcuenta_ventas = $subcuenta->get_cuentaesp('VENTAS', $asiento->codejercicio);
                 if ($subcuenta_ventas and $asiento_correcto) {
                     $partida2 = new partida();
                     $partida2->idasiento = $asiento->idasiento;
                     $partida2->concepto = $asiento->concepto;
                     $partida2->idsubcuenta = $subcuenta_ventas->idsubcuenta;
                     $partida2->codsubcuenta = $subcuenta_ventas->codsubcuenta;
                     $partida2->haber = $factura->neto;
                     $partida2->coddivisa = $factura->coddivisa;
                     $partida2->tasaconv = $factura->tasaconv;
                     if (!$partida2->save()) {
                         $asiento_correcto = FALSE;
                         $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida2->codsubcuenta . "!");
                     }
                 }
                 if ($asiento_correcto) {
                     $factura->idasiento = $asiento->idasiento;
                     if ($factura->save()) {
                         $ok = TRUE;
                         $this->asiento = $asiento;
                     } else {
                         $this->new_error_msg("¡Imposible añadir el asiento a la factura!");
                     }
                 } else {
                     if ($asiento->delete()) {
                         $this->new_message("El asiento se ha borrado.");
                     } else {
                         $this->new_error_msg("¡Imposible borrar el asiento!");
                     }
                 }
             } else {
                 $this->new_error_msg("¡Imposible guardar el asiento!");
             }
         }
     }
     return $ok;
 }
Ejemplo n.º 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.');
     }
 }
Ejemplo n.º 23
0
 protected function private_core()
 {
     $this->desde = Date('01-m-Y');
     if (isset($_POST['desde'])) {
         $this->desde = $_POST['desde'];
     }
     $this->hasta = Date('d-m-Y');
     if (isset($_POST['hasta'])) {
         $this->hasta = $_POST['hasta'];
     }
     $this->cliente = FALSE;
     $this->codcliente = FALSE;
     if (!isset($_POST['todos']) and isset($_POST['codcliente'])) {
         $this->codcliente = $_POST['codcliente'];
         $cli0 = new cliente();
         $this->cliente = $cli0->get($this->codcliente);
     }
     $this->serie = new serie();
     $this->codserie = FALSE;
     if (isset($_POST['codserie'])) {
         $this->codserie = $_POST['codserie'];
     }
     if (isset($_REQUEST['buscar_cliente'])) {
         $this->buscar_cliente();
     } else {
         if (in_array('tesoreria', $GLOBALS['plugins'])) {
             $this->new_error_msg('Si usas el <b>plugin Tesorería</b> no puedes usar este' . ' asistente para pagar todas las facturas.');
         } else {
             if (isset($_POST['idfactura'])) {
                 /// ¿Marcamos ya las facturas?
                 $num = 0;
                 $asi0 = new asiento();
                 $asifac = new asiento_factura();
                 $fact0 = new factura_cliente();
                 foreach ($_POST['idfactura'] as $id) {
                     $factura = $fact0->get($id);
                     if ($factura) {
                         $asiento = $asi0->get($factura->idasiento);
                         if ($asiento) {
                             $factura->idasientop = $asifac->generar_asiento_pago($asiento, $factura->codpago);
                             if ($factura->idasientop) {
                                 $factura->pagada = TRUE;
                                 if ($factura->save()) {
                                     $num++;
                                 }
                             }
                         } else {
                             $factura->pagada = TRUE;
                             if ($factura->save()) {
                                 $num++;
                             }
                         }
                     }
                 }
                 foreach ($asifac->errors as $err) {
                     $this->new_error_msg($err);
                 }
                 $this->new_message($num . ' facturas marcadas como pagadas, estas son las siguientes.');
             } else {
                 $this->share_extensions();
             }
         }
     }
     $this->resultados = FALSE;
     if (isset($_POST['desde'])) {
         $this->resultados = $this->buscar_facturas();
     }
 }
Ejemplo n.º 24
0
 private function nuevo_asiento_pago(&$pago, $ejercicio)
 {
     $asiento = new asiento();
     $asiento->fecha = $pago->fecha;
     $asiento->codejercicio = $ejercicio->codejercicio;
     $asiento->concepto = $pago->tipo . ' recibo compra ' . $this->recibo->codigo . ' - ' . $this->recibo->nombreproveedor;
     $asiento->editable = FALSE;
     $asiento->importe = $this->recibo->importe;
     if ($this->factura) {
         $asiento->tipodocumento = "Factura de proveedor";
         $asiento->documento = $this->factura->codigo;
     }
     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 = $this->subcuenta_pro->idsubcuenta;
             $partida1->codsubcuenta = $this->subcuenta_pro->codsubcuenta;
             $partida1->debe = $this->recibo->importe;
             $partida1->coddivisa = $this->recibo->coddivisa;
             $partida1->tasaconv = $this->recibo->tasaconv;
             $partida1->codserie = $this->recibo->codserie;
             $partida1->save();
             $partida2 = new partida();
             $partida2->idasiento = $asiento->idasiento;
             $partida2->concepto = $asiento->concepto;
             $partida2->idsubcuenta = $pago->idsubcuenta;
             $partida2->codsubcuenta = $pago->codsubcuenta;
             $partida2->haber = $this->recibo->importe;
             $partida2->coddivisa = $this->recibo->coddivisa;
             $partida2->tasaconv = $this->recibo->tasaconv;
             $partida2->codserie = $this->recibo->codserie;
             $partida2->save();
         } else {
             $this->new_error_msg('Error al guardar el asiento.');
         }
     }
     return $asiento->idasiento;
 }