administracion_view_model.dart 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. import 'dart:convert';
  2. import 'package:flutter/material.dart';
  3. import '/data/api_response.dart';
  4. import '../data/session/session_storage.dart';
  5. import '../models/models.dart';
  6. import '../services/base_service.dart';
  7. class AdministracionViewModel extends ChangeNotifier {
  8. bool _isLoading = false;
  9. bool get isLoading => _isLoading;
  10. String _busqueda = "";
  11. String get busqueda => _busqueda;
  12. List<Modulo> _modulos = [];
  13. List<Modulo> get modulos => _modulos;
  14. List<ModuloPermiso> _permisos = [];
  15. List<ModuloPermiso> get permisos => _permisos;
  16. List<String> _lospermisos = [];
  17. List<String> get lospermisos => _lospermisos;
  18. List<PermisoPerfil> _permisoPerfil = [];
  19. List<PermisoPerfil> get permisoPerfil => _permisoPerfil;
  20. Modulo? _selectedModelo;
  21. Modulo? get selectedModelo => _selectedModelo;
  22. ModuloPermiso? _selectedModeloPermiso;
  23. ModuloPermiso? get selectedModeloPermiso => _selectedModeloPermiso;
  24. PermisoPerfil? _selectedPermisoPerfil;
  25. PermisoPerfil? get selectedPermisoPerfil => _selectedPermisoPerfil;
  26. Map<String, bool> _selectedPermisos = {};
  27. Map<String, bool> get selectedPermisos => _selectedPermisos;
  28. Map<String, bool> selectedPerfilesPermisos = {};
  29. int pagina = 1;
  30. int totalPaginas = 1;
  31. int limite = 10;
  32. Future<void> fetchModulos() async {
  33. Map<String, String> parametros = {"ordenar": "nombre-asc"};
  34. if (_busqueda.isNotEmpty) {
  35. parametros = {"ordenar": "nombre-asc", "q": _busqueda};
  36. }
  37. var r =
  38. await BaseService().get("admin/modulo", queryParameters: parametros);
  39. Map<String, dynamic> resJson = jsonDecode(r.body);
  40. List<Modulo> aux = [];
  41. if (r.statusCode == 200) {
  42. for (var x in resJson['resultado']) {
  43. Modulo modelo = Modulo.fromJson(x);
  44. aux.add(modelo);
  45. }
  46. }
  47. _modulos = aux;
  48. notifyListeners();
  49. }
  50. Future fetchPermisos({int limitee = 10}) async {
  51. Map<String, String> parametros = {
  52. "ordenar": "nombre-asc",
  53. "pagina": "$pagina",
  54. "limite": "$limite"
  55. };
  56. if (limitee == -1) {
  57. parametros['limite'] = limitee.toString();
  58. }
  59. if (_busqueda.isNotEmpty) {
  60. parametros = {"ordenar": "nombre-asc", "buscar": _busqueda};
  61. }
  62. var r = ApiResponse(await BaseService()
  63. .get("admin/modulo-permiso", queryParameters: parametros));
  64. pagina = r.paginacion!.pagina;
  65. var total = r.paginacion!.total / r.paginacion!.limite;
  66. totalPaginas = total > 0 ? total.ceil() : 1;
  67. List<ModuloPermiso> aux = [];
  68. if (r.isOk) {
  69. for (var x in r.resultados!) {
  70. ModuloPermiso modelo = ModuloPermiso.fromJson(x);
  71. aux.add(modelo);
  72. }
  73. }
  74. _permisos = aux;
  75. notifyListeners();
  76. }
  77. Future<void> fetchPermisosPerfil() async {
  78. Map<String, String> parametros = {"ordenar": "nombre-asc"};
  79. if (_busqueda.isNotEmpty) {
  80. parametros = {"ordenar": "nombre-asc", "q": _busqueda};
  81. }
  82. var r = await BaseService()
  83. .get("admin/permiso-perfil", queryParameters: parametros);
  84. Map<String, dynamic> resJson = jsonDecode(r.body);
  85. List<PermisoPerfil> aux = [];
  86. if (r.statusCode == 200) {
  87. for (var x in resJson['resultado']) {
  88. PermisoPerfil modelo = PermisoPerfil.fromJson(x);
  89. aux.add(modelo);
  90. }
  91. }
  92. _permisoPerfil = aux;
  93. notifyListeners();
  94. }
  95. Future<void> fetchOrdenesTaller(
  96. {String? idEmpresa,
  97. String? fechai,
  98. String? fechaf,
  99. String? estatus,
  100. String? tipo,
  101. String? limite}) async {
  102. Map<String, String> parametros = {'ordenar': 'creado-desc'};
  103. if (limite != null) {
  104. parametros['limite'] = limite;
  105. }
  106. if (idEmpresa != null && idEmpresa != '') {
  107. parametros['idEmpresa'] = idEmpresa;
  108. }
  109. if (fechai != null) {
  110. parametros["fechaInicio"] = fechai;
  111. }
  112. if (fechaf != null) {
  113. parametros["fechaFin"] = fechaf;
  114. }
  115. if (estatus != null && estatus != '') {
  116. parametros['estatus'] = estatus;
  117. }
  118. if (tipo != null && tipo != '') {
  119. parametros['tipoUnidad'] = tipo;
  120. }
  121. notifyListeners();
  122. }
  123. setIsLoading(bool loading) {
  124. if (_isLoading != loading) {
  125. _isLoading = loading;
  126. notifyListeners();
  127. }
  128. }
  129. selectModelo(Modulo? modelo) {
  130. _selectedModelo = modelo;
  131. notifyListeners();
  132. }
  133. selectPermiso(ModuloPermiso? modelo) {
  134. _selectedModeloPermiso = modelo;
  135. notifyListeners();
  136. }
  137. void selectPermisoPerfil(PermisoPerfil? modelo) {
  138. _selectedPermisoPerfil = modelo;
  139. if (modelo != null && modelo.id != null) {
  140. // Cargar permisos del perfil
  141. cargarPermisosDelPerfil(modelo.id!);
  142. }
  143. notifyListeners();
  144. }
  145. Future<void> cargarPermisosDelPerfil(String perfilId) async {
  146. setIsLoading(true);
  147. try {
  148. var r = await BaseService().get("admin/permiso-perfil",
  149. queryParameters: {'expand': 'permisos', 'id': perfilId});
  150. Map<String, dynamic> resJson = jsonDecode(r.body);
  151. List<dynamic> permisos = resJson['resultado'][0][
  152. 'permisos']; // Acceder a la lista de permisos dentro del primer elemento de 'resultado'
  153. List<String> permisosIds =
  154. []; // Lista para almacenar los identificadores de permisos
  155. for (var permiso in permisos) {
  156. String permisoId =
  157. permiso['id']; // Obtener el valor de 'id' como String
  158. permisosIds.add(permisoId); // Agregar el identificador a la lista
  159. }
  160. // Asignar la lista de identificadores al mapa _selectedPermisos
  161. _selectedPermisos =
  162. Map.fromIterable(permisosIds, key: (id) => id, value: (_) => true);
  163. notifyListeners();
  164. } catch (e) {
  165. print("Error al cargar los permisos: $e");
  166. } finally {
  167. setIsLoading(false);
  168. }
  169. }
  170. Future<void> eliminar(Modulo m) async {
  171. var r = await BaseService()
  172. .delete("admin/modulo", body: {"id": m.id.toString()});
  173. Map<String, dynamic> resJson = jsonDecode(r.body);
  174. if (r.statusCode == 200) {}
  175. }
  176. setBusqueda(String value) {
  177. _busqueda = value;
  178. notifyListeners();
  179. }
  180. Future<void> guardarModelo(
  181. {required Modulo modelo,
  182. required String? nombre,
  183. required String? clave}) async {
  184. modelo.nombre = nombre;
  185. modelo.id = clave;
  186. modelo.creado = DateTime.now();
  187. var r = await BaseService().post("admin/modulo", body: modelo.toJson());
  188. if (r.statusCode == 200) {}
  189. notifyListeners();
  190. }
  191. Future<void> guardarModeloPermiso({
  192. required ModuloPermiso modelo,
  193. required String? nombre,
  194. required String? clave,
  195. required String? descripcion,
  196. required String? idModulo,
  197. }) async {
  198. modelo.nombre = nombre;
  199. modelo.id = clave;
  200. modelo.idModulo = idModulo;
  201. modelo.descripcion = descripcion;
  202. modelo.creado = DateTime.now();
  203. var r =
  204. await BaseService().post("admin/modulo-permiso", body: modelo.toJson());
  205. if (r.statusCode == 200) {}
  206. notifyListeners();
  207. }
  208. Future<void> guardarPermisoPerfil({
  209. required PermisoPerfil modelo,
  210. required String? nombre,
  211. required String? clave,
  212. required String? descripcion,
  213. required List<String> permisosSeleccionados,
  214. }) async {
  215. setIsLoading(true);
  216. try {
  217. var requestBody = {
  218. 'nombre': nombre,
  219. 'clave': clave,
  220. 'descripcion': descripcion,
  221. 'permisos': permisosSeleccionados,
  222. };
  223. // Si el modelo tiene un ID asignado, agregarlo al cuerpo de la solicitud
  224. if (modelo.id != null) {
  225. requestBody['id'] = modelo.id;
  226. }
  227. var r = await BaseService()
  228. .post("admin/permiso-perfil/guardar", body: requestBody);
  229. if (r.statusCode == 200) {
  230. print('Perfil guardado exitosamente');
  231. } else {
  232. throw Exception('Error al guardar el perfil: ${r.statusCode}');
  233. }
  234. } catch (e) {
  235. print('Error al guardar el perfil: $e');
  236. } finally {
  237. setIsLoading(false);
  238. }
  239. }
  240. Map<String, dynamic> validarModelo(
  241. {required String nombre, required String clave}) {
  242. if (nombre.isEmpty) {
  243. return {"data": false, "mensaje": ""};
  244. }
  245. return {"data": true, "mensaje": ""};
  246. }
  247. Map<String, dynamic> validarModeloPermiso(
  248. {required String nombre, required String clave}) {
  249. if (clave.isEmpty) {
  250. return {"data": false, "mensaje": "Capturar Clave de Permiso"};
  251. }
  252. return {"data": true, "mensaje": ""};
  253. }
  254. Map<String, dynamic> validarPermisoPerfil(
  255. {required String nombre, required String clave}) {
  256. if (clave.isEmpty) {
  257. return {"data": false, "mensaje": "Capturar Clave de Permiso Perfil"};
  258. }
  259. return {"data": true, "mensaje": ""};
  260. }
  261. Future<void> eliminarModuloPermiso(ModuloPermiso m) async {
  262. var r = await BaseService()
  263. .delete("admin/modulo-permiso", body: {"id": m.id.toString()});
  264. Map<String, dynamic> resJson = jsonDecode(r.body);
  265. if (r.statusCode == 200) {}
  266. }
  267. Future<void> eliminarPermisoPerfil(PermisoPerfil m) async {
  268. var r = await BaseService()
  269. .delete("admin/permiso-perfil/eliminar", body: {"id": m.id.toString()});
  270. Map<String, dynamic> resJson = jsonDecode(r.body);
  271. if (r.statusCode == 200) {}
  272. }
  273. Future obtenerPerfil() async {
  274. String id = (await SessionStorage().getId()).toString();
  275. Map<String, String> parametros = {"expand": "permisos", "id": id};
  276. var r = ApiResponse(
  277. await BaseService().get("admin/usuario", queryParameters: parametros));
  278. List<String> aux = [];
  279. if (r.statusCode == 200 &&
  280. r.resultados!.first["permisos"] != null &&
  281. (r.resultados!.first["permisos"] as List).isNotEmpty) {
  282. for (var x in (r.resultados!.first["permisos"] as List)) {
  283. aux.add(x);
  284. }
  285. }
  286. _lospermisos = aux;
  287. notifyListeners();
  288. }
  289. cambiarPagina(int nuevaPagina, {bool segmentar = false}) {
  290. pagina = nuevaPagina;
  291. fetchPermisos();
  292. }
  293. obtenerTablero(
  294. {int? mlimite = 0,
  295. String? fechai,
  296. String? fechaf,
  297. bool segmentar = false,
  298. String? tipo}) async {
  299. Map<String, String> parametros = {
  300. /* "ordenar": "id-desc",
  301. "expand": "planta,media,empresa,chofer,salida,ayudante,unidad", */
  302. };
  303. if (fechai != null) {
  304. parametros["fechaInicio"] = fechai;
  305. }
  306. if (fechaf != null) {
  307. parametros["fechaFin"] = fechaf;
  308. }
  309. notifyListeners();
  310. }
  311. }