usuarios_view_model.dart 4.6 KB

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