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."); } } }
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(); } }
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(); //// regreso de asiento a la solapa correspondiente if (isset($_GET['solapa'])) { if ($_GET['solapa'] == 'may') { $this->solapa = '&mayorizados=TRUE'; } if ($_GET['solapa'] == 'des') { $this->solapa = '&descuadrados=TRUE'; } if ($_GET['solapa'] == 'all') { $this->solapa = ''; } } /////////////////////////////////////// /// ¿El usuario tiene permiso para eliminar en esta página? $this->allow_delete = $this->user->allow_delete_on(__CLASS__); $asiento = new asiento(); if (isset($_GET['id'])) { $this->asiento = $asiento->get($_GET['id']); } /* print '<script language="JavaScript">'; print 'alert(" id partida : '.$this->asiento->codejercicio.' id asiento '.$this->asiento->idasiento.' ");'; print '</script>'; */ if (isset($this->asiento->tipodocumento)) { if ($this->asiento->tipodocumento == 'Ingreso proveedor') { $this->factura_prov = new factura_proveedor(); $this->factura_prov->codejercicio = $this->asiento->codejercicio; $this->factura_prov->idasiento = $this->asiento->idasiento; $this->resultados1 = $this->factura_prov->facturas_proveedor(); } else { if ($this->asiento->tipodocumento == 'Ingreso') { $this->factura_cli = new factura_cliente(); $this->factura_cli->codejercicio = $this->asiento->codejercicio; $this->factura_cli->idasiento = $this->asiento->idasiento; $this->resultados1 = $this->factura_cli->facturas_cliente(); } } } if (isset($_GET['genlibro'])) { if ($_GET['genlibro'] == 1) { $idasiento = $_GET['idasiento']; $this->asiento->mayorizado = 1; $this->asiento->editable = 0; $may_corr = 0; $may_inco = 1; if ($this->asiento->save()) { $libro_mayor = new libro_mayor(); $partida = new partida(); $asiento_all = new asiento(); $asientos_ejer = $asiento_all->all_por_ejercicio($this->asiento->codejercicio); foreach ($asientos_ejer as $ext) { // suma por sub cuenta // SELECT codsubcuenta,sum(`debe`),sum(`haber`) FROM `co_partidas` WHERE `libromayor`=1 group by codsubcuenta // partida $libro_mes = substr($ext->fecha, 3, 2); if ($partida->marca_libro_idasiento($ext->idasiento, $libro_mes, $this->asiento->codejercicio)) { $may_corr = 1; } else { $may_inco = 0; } } } if ($may_corr * $may_inco == 1) { $this->new_message('Mayorizado correcto.'); } else { $this->new_message('Imposible Mayorizar.'); } } } //////// if (isset($_GET['anu_may'])) { $idasiento = $_GET['anu_may']; $may_corr = 0; $may_inco = 1; $libro_mayor = new libro_mayor(); $partida = new partida(); $asiento_all = new asiento(); $asientos_ejer = $asiento_all->all_por_ejercicio($this->asiento->codejercicio); foreach ($asientos_ejer as $ext) { $libro_mes = substr($ext->fecha, 3, 2); if ($partida->marca_libro_idasiento($idasiento, '0', '0')) { $may_corr = 1; } else { $may_inco = 0; } } if ($may_corr * $may_inco == 1) { $this->asiento->mayorizado = 0; $this->asiento->editable = 1; if ($this->asiento->save()) { $this->new_message('Mayorizado Anulado.'); } } else { $this->asiento->mayorizado = 1; $this->asiento->editable = 0; $this->asiento->save(); $this->new_message('Imposible Anular Mayorizado.'); } } /////////// 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->bloquear_on_off()) { $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->bloquear_on_off()) { $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(); $partida = new partida(); $valores = $partida->totales_from_asiento($this->asiento->idasiento); $this->suma_debe = $valores['debe']; $this->suma_haber = $valores['haber']; $this->saldo = $valores['saldo']; // $this->comprobante = $valores['comprobante']; // $this->referencia = $valores['referencia']; } else { $this->new_error_msg("Asiento no encontrado."); } } }
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; } }
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.'); } } } } }
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.'); } } } }
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() { /// 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) . ";"); }
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) . ";"); }
/** * @return asiento */ public function getAsiento() { if (!$this->asiento && $this->idasiento) { $obj = new asiento(); $this->asiento = $obj->get($this->getIdAsiento()); } return $this->asiento; }