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."); } } }
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) . ";"); }
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; }
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; }
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)); } } }
/** * @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; }
/** * * @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; }
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!"); } } }
public function actualiza_importe($idasiento) { $asiento = new asiento(); $asiento->actualiza_importe($idasiento); }
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; }
$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.'); } } } } }
/** * 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; }
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.'); } }
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(); } }
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; }