import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:sis_flutter/services/usuarios_service.dart'; import '../models/models.dart'; import '../services/base_service.dart'; class UsuariosViewModel extends ChangeNotifier { String _busqueda = ""; String get busqueda => _busqueda; List _registros = []; List get registros => _registros; Usuario? _selectedModelo; Usuario? get selectedModelo => _selectedModelo; bool _isLoading = false; bool get isLoading => _isLoading; int pagina = 1; int totalPaginas = 1; int limite = 10; Map _selectedPermisos = {}; Map get selectedPermisos => _selectedPermisos; Future fetchRegistros({ bool segmentar = false, }) async { Map parametros = { "ordenar": "id-desc", "expand": "empresas", "pagina": "$pagina", "limite": "$limite" }; if (_busqueda.isNotEmpty) { parametros = { "ordenar": "id-desc", "limite": "-1", "q": _busqueda, "expand": "empresas" }; } var r = await BaseService().get("admin/usuario", queryParameters: parametros); Map resJson = jsonDecode(r.body); try { List aux = []; if (r.statusCode == 200) { for (var x in resJson['resultado']) { Usuario modelo = Usuario.fromJson(x); aux.add(modelo); } } _registros = aux; notifyListeners(); } catch (e) { print(e); } } Future cargarPermisosUsuario(int usuarioId) async { setIsLoading(true); try { var response = await BaseService().get("admin/usuario", queryParameters: {'expand': 'permisos', 'id': '$usuarioId'}); Map resJson = jsonDecode(response.body); List permisosUsuario = resJson['resultado'][0]['permisos']; Map permisosActualizados = {}; for (var permiso in permisosUsuario) { String permisoId = permiso.toString(); permisosActualizados[permisoId] = true; } _selectedPermisos = permisosActualizados; // print(_selectedPermisos); notifyListeners(); // Avisar a los widgets que escuchan sobre el cambio } catch (e) { print("Error al cargar los permisos del usuario: $e"); } finally { setIsLoading(false); } } void setSelectedPermisos(Map permisos) { _selectedPermisos = permisos; notifyListeners(); } Future guardarModelo({ required Usuario modelo, required String name, required String email, required String telefono, }) async { //?TEMPORAL modelo.name = name; modelo.email = email; modelo.telefono = telefono; modelo.creado = DateTime.now(); notifyListeners(); } Future guardarUsuario({ required Usuario modelo, required String name, required String email, required List permisosSeleccionados, }) async { setIsLoading(true); try { var requestBody = { 'name': name, 'email': email, 'permisos': permisosSeleccionados, }; if (modelo.id != null) { requestBody['id'] = modelo.id; } var r = await BaseService().post("admin/usuario/guardar", body: requestBody); if (r.statusCode == 200) { print('Usuario guardado exitosamente'); } else { throw Exception('Error al guardar el usuario: ${r.statusCode}'); } } catch (e) { print('Error al guardar el usuario: $e'); } finally { setIsLoading(false); } } //? get Usuarios para el dropdownsearch Future> fetchUsuarios( String idUsuario, int limit, int page) async { final usuariosList = await UsuariosService().getUsuarios(10, 1, idUsuario); return usuariosList; } bool validarUsuario({ required String nombre, required String correo, }) { if (nombre.isEmpty || correo.isEmpty) { return false; } return true; } setIsLoading(bool loading) { _isLoading = loading; notifyListeners(); } selectUsuario(Usuario? usuario) { _selectedModelo = usuario; notifyListeners(); } setBusqueda(String value) { _busqueda = value; notifyListeners(); } Future usuarioEmpresa(int idUsuario, String idEmpresa) async { var r = await BaseService().post("admin/usuario/usuario-empresa", body: {"idUsuario": idUsuario, "idEmpresa": idEmpresa}); if (r.statusCode == 200) {} } cambiarPagina(int nuevaPagina, {bool segmentar = false}) { pagina = nuevaPagina; fetchRegistros(segmentar: segmentar); } }