/** * *Genera una nueva cuenta contable en el sistema * * @param abonos_aumentan bool si abonos aumentan es igual a 1 significa que en los movimientos los abonos aumentantaran * @param cargos_aumentan bool Si es igual 1 significa que en los movimientos cuando se cargue a esta cuenta los cargos aumentaran * @param clasificacion enum `Activo Circulante`,`Activo Fijo`,`Activo Diferido`,`Pasivo Circulante`,`Pasivo Largo Plazo`,`Capital Contable`,`Ingresos`,`Egresos` * @param es_cuenta_mayor bool Indica si la cuenta es de mayor * @param es_cuenta_orden bool si la cuenta no se contemplara en los estados financieros * @param naturaleza enum `Acreedora`,`Deudora` * @param nombre_cuenta string El nombre de la cuenta * @param tipo_cuenta enum `Balance`,`Estado de Resultados` * @param id_cuenta_padre int id de la cuenta de la que depende **/ public static function NuevaCuenta($abonos_aumentan, $cargos_aumentan, $clasificacion, $es_cuenta_mayor, $es_cuenta_orden, $id_catalogo_cuentas, $naturaleza, $nombre_cuenta, $tipo_cuenta, $id_cuenta_padre = "") { if ($es_cuenta_orden == 1 && $es_cuenta_mayor == 1) { throw new BusinessLogicException("Una cuenta de Mayor no puede ser de Orden"); } if ($tipo_cuenta == "Balance" && $naturaleza == "Deudora" && ($clasificacion != "Activo Circulante" && $clasificacion != "Activo Fijo" && $clasificacion != "Activo Diferido")) { throw new BusinessLogicException("Clasificacion incorrecta para la cuenta de tipo Balance y Naturaleza Deudora"); } if ($tipo_cuenta == "Balance" && $naturaleza == "Acreedora" && ($clasificacion != "Pasivo Circulante" && $clasificacion != "Pasivo Largo Plazo" && $clasificacion != "Capital Contable")) { throw new BusinessLogicException("Clasificacion incorrecta para la cuenta de tipo Balance y Naturaleza Acreedora"); } if ($tipo_cuenta == "Estado de Resultados" && $naturaleza == "Acreedora" && $clasificacion != "Ingresos") { throw new BusinessLogicException("Clasificacion incorrecta para la cuenta de tipo Estado de Resultados y Naturaleza Acreedora"); } if ($tipo_cuenta == "Estado de Resultados" && $naturaleza == "Deudora" && $clasificacion != "Egresos") { throw new BusinessLogicException("Clasificacion incorrecta para la cuenta de tipo Estado de Resultados y Naturaleza Deudora"); } $cuenta_buscar = new CuentaContable(); $cuenta_buscar->setNombreCuenta($nombre_cuenta); $cuenta_buscar->setIdCatalogoCuentas($id_catalogo_cuentas); $cc2 = CuentaContableDAO::search($cuenta_buscar); if (count($cc2) > 0) { Logger::log("!!!!!!Ya existe una cuenta con el nombre " . $nombre_cuenta); throw new BusinessLogicException(" Ya existe una cuenta con el nombre " . $nombre_cuenta); } $clave = self::NuevaClaveCuentaContable($id_catalogo_cuentas, $id_cuenta_padre, $clasificacion); $nivel = 1; $consecutivo = 1; if ($id_cuenta_padre != "") { $detalle_c = CuentaContableDAO::getByPK($id_cuenta_padre); if (is_null($detalle_c)) { throw new BusinessLogicException("La cuenta con id " . $id_cuenta_padre . " no existe"); } $nivel = $detalle_c->getNivel() + 1; $subcuentas = self::BuscarCuenta($id_catalogo_cuentas, "", "", "", "", "", "", "", $id_cuenta_padre, "", "", "", ""); if (count($subcuentas["resultados"]) > 0) { $consecutivo = $subcuentas["resultados"][count($subcuentas["resultados"]) - 1]->getConsecutivoEnNivel() + 1; } } else { $cuentas_clasifi = self::BuscarCuenta($id_catalogo_cuentas, "", $clasificacion, "", "", "", "", "", "", "", $nivel = 1, "", ""); if (count($cuentas_clasifi["resultados"]) > 0) { $consecutivo = $cuentas_clasifi["resultados"][count($cuentas_clasifi["resultados"]) - 1]->getConsecutivoEnNivel() + 1; } } if ($nivel == 1 && $id_cuenta_padre != "") { throw new BusinessLogicException("Las cuentas de Nivel 1 no deben tener cuentas padre"); } $nueva_cuenta = new CuentaContable(); $nueva_cuenta->setClave($clave); $nueva_cuenta->setNivel($nivel); $nueva_cuenta->setConsecutivoEnNivel($consecutivo); $nueva_cuenta->setNombreCuenta($nombre_cuenta); $nueva_cuenta->setTipoCuenta($tipo_cuenta); $nueva_cuenta->setNaturaleza($naturaleza); $nueva_cuenta->setClasificacion($clasificacion); $nueva_cuenta->setAfectable(1); $nueva_cuenta->setActiva(1); $nueva_cuenta->setAbonosAumentan($abonos_aumentan); $nueva_cuenta->setCargosAumentan($cargos_aumentan); if ($tipo_cuenta == "Estado de Resultados" && $naturaleza == "Acreedora") { $nueva_cuenta->setAbonosAumentan(1); $nueva_cuenta->setCargosAumentan(0); } if ($tipo_cuenta == "Estado de Resultados" && $naturaleza == "Deudora") { $nueva_cuenta->setAbonosAumentan(0); $nueva_cuenta->setCargosAumentan(1); } if ($tipo_cuenta == "Balance" && $naturaleza == "Acreedora") { $nueva_cuenta->setAbonosAumentan(1); $nueva_cuenta->setCargosAumentan(0); } if ($tipo_cuenta == "Balance" && $naturaleza == "Deudora") { $nueva_cuenta->setAbonosAumentan(0); $nueva_cuenta->setCargosAumentan(1); } $nueva_cuenta->setEsCuentaOrden($es_cuenta_orden); $nueva_cuenta->setEsCuentaMayor($es_cuenta_mayor); if ($id_cuenta_padre != "") { $nueva_cuenta->setIdCuentaPadre($id_cuenta_padre); } $nueva_cuenta->setIdCatalogoCuentas($id_catalogo_cuentas); DAO::transBegin(); try { CuentaContableDAO::save($nueva_cuenta); if ($id_cuenta_padre != "") { $cuenta_padre_afec = CuentaContableDAO::getByPK($id_cuenta_padre); if ($cuenta_padre_afec->getAfectable() == true) { $cuenta_padre_afec->setAfectable(false); CuentaContableDAO::save($cuenta_padre_afec); } } } catch (Exception $e) { DAO::transRollback(); Logger::error("Desde Controller) No se ha podido guardar la nueva cuenta: " . $e); if ($e->getCode() == 901) { throw new Exception("No se ha podido guardar la nueva cuenta|: " . $e->getMessage(), 901); } throw new Exception("No se ha podido guardar la nueva cuenta", 901); } DAO::transEnd(); return array("status" => "ok", "id_cuenta_contable" => $nueva_cuenta->getIdCuentaContable()); }