usuarios_view_model.dart 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import 'dart:convert';
  2. import 'package:flutter/material.dart';
  3. import '../models/models.dart';
  4. import '../services/base_service.dart';
  5. class UsuariosViewModel extends ChangeNotifier {
  6. String _busqueda = "";
  7. String get busqueda => _busqueda;
  8. List<Usuario> _registros = [];
  9. List<Usuario> get registros => _registros;
  10. Usuario? _selectedModelo;
  11. Usuario? get selectedModelo => _selectedModelo;
  12. bool _isLoading = false;
  13. bool get isLoading => _isLoading;
  14. int pagina = 1;
  15. int totalPaginas = 1;
  16. int limite = 10;
  17. Map<String, bool> _selectedPermisos = {};
  18. Map<String, bool> get selectedPermisos => _selectedPermisos;
  19. Future<void> fetchRegistros({
  20. bool segmentar = false,
  21. }) async {
  22. Map<String, String> parametros = {
  23. "ordenar": "id-desc",
  24. "expand": "empresas",
  25. "pagina": "$pagina",
  26. "limite": "$limite"
  27. };
  28. if (_busqueda.isNotEmpty) {
  29. parametros = {
  30. "ordenar": "id-desc",
  31. "limite": "-1",
  32. "q": _busqueda,
  33. "expand": "empresas"
  34. };
  35. }
  36. var r =
  37. await BaseService().get("admin/usuario", queryParameters: parametros);
  38. Map<String, dynamic> resJson = jsonDecode(r.body);
  39. try {
  40. List<Usuario> aux = [];
  41. if (r.statusCode == 200) {
  42. for (var x in resJson['resultado']) {
  43. Usuario modelo = Usuario.fromJson(x);
  44. aux.add(modelo);
  45. }
  46. }
  47. _registros = aux;
  48. notifyListeners();
  49. } catch (e) {
  50. print(e);
  51. }
  52. }
  53. Future<void> cargarPermisosUsuario(int usuarioId) async {
  54. setIsLoading(true);
  55. try {
  56. var response = await BaseService().get("admin/usuario",
  57. queryParameters: {'expand': 'permisos', 'id': '$usuarioId'});
  58. Map<String, dynamic> resJson = jsonDecode(response.body);
  59. List<dynamic> permisosUsuario = resJson['resultado'][0]['permisos'];
  60. Map<String, bool> permisosActualizados = {};
  61. for (var permiso in permisosUsuario) {
  62. String permisoId = permiso.toString();
  63. permisosActualizados[permisoId] = true;
  64. }
  65. _selectedPermisos = permisosActualizados;
  66. // print(_selectedPermisos);
  67. notifyListeners(); // Avisar a los widgets que escuchan sobre el cambio
  68. } catch (e) {
  69. print("Error al cargar los permisos del usuario: $e");
  70. } finally {
  71. setIsLoading(false);
  72. }
  73. }
  74. void setSelectedPermisos(Map<String, bool> permisos) {
  75. _selectedPermisos = permisos;
  76. notifyListeners();
  77. }
  78. Future<void> guardarModelo({
  79. required Usuario modelo,
  80. required String nombre,
  81. required String correo,
  82. required String telefono,
  83. }) async {
  84. //?TEMPORAL
  85. modelo.nombre = nombre;
  86. modelo.correo = correo;
  87. modelo.telefono = telefono;
  88. modelo.creado = DateTime.now();
  89. notifyListeners();
  90. }
  91. Future<void> guardarUsuario({
  92. required Usuario modelo,
  93. required String nombre,
  94. required String correo,
  95. required List<String> permisosSeleccionados,
  96. }) async {
  97. setIsLoading(true);
  98. try {
  99. var requestBody = {
  100. 'nombre': nombre,
  101. 'correo': correo,
  102. 'permisos': permisosSeleccionados,
  103. };
  104. if (modelo.id != null) {
  105. requestBody['id'] = modelo.id;
  106. }
  107. var r =
  108. await BaseService().post("admin/usuario/guardar", body: requestBody);
  109. if (r.statusCode == 200) {
  110. print('Usuario guardado exitosamente');
  111. } else {
  112. throw Exception('Error al guardar el usuario: ${r.statusCode}');
  113. }
  114. } catch (e) {
  115. print('Error al guardar el usuario: $e');
  116. } finally {
  117. setIsLoading(false);
  118. }
  119. }
  120. bool validarUsuario({
  121. required String nombre,
  122. required String correo,
  123. }) {
  124. if (nombre.isEmpty || correo.isEmpty) {
  125. return false;
  126. }
  127. return true;
  128. }
  129. setIsLoading(bool loading) {
  130. _isLoading = loading;
  131. notifyListeners();
  132. }
  133. selectUsuario(Usuario? usuario) {
  134. _selectedModelo = usuario;
  135. notifyListeners();
  136. }
  137. setBusqueda(String value) {
  138. _busqueda = value;
  139. notifyListeners();
  140. }
  141. Future usuarioEmpresa(int idUsuario, String idEmpresa) async {
  142. var r = await BaseService().post("admin/usuario/usuario-empresa",
  143. body: {"idUsuario": idUsuario, "idEmpresa": idEmpresa});
  144. if (r.statusCode == 200) {}
  145. }
  146. cambiarPagina(int nuevaPagina, {bool segmentar = false}) {
  147. pagina = nuevaPagina;
  148. fetchRegistros(segmentar: segmentar);
  149. }
  150. }