import 'dart:convert'; import 'package:flutter/material.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; Map _selectedPermisos = {}; Map get selectedPermisos => _selectedPermisos; Future fetchRegistros() async { Map parametros = { "ordenar": "id-desc", "expand": "empresas" }; 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 nombre, required String correo, required String telefono, }) async { //?TEMPORAL modelo.nombre = nombre; modelo.correo = correo; modelo.telefono = telefono; modelo.creado = DateTime.now(); notifyListeners(); } Future guardarUsuario({ required Usuario modelo, required String nombre, required String correo, required List permisosSeleccionados, }) async { setIsLoading(true); try { var requestBody = { 'nombre': nombre, 'correo': correo, '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); } } 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) {} } }