permiso_view_model.dart 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import 'package:flutter/material.dart';
  2. import 'package:sqflite/sqflite.dart';
  3. import '../../core/services/services.dart';
  4. import '../../core/models/models.dart';
  5. class PermisoViewModel extends ChangeNotifier {
  6. List<Permiso> _permisos = [];
  7. bool _isLoading = false;
  8. Permiso? _selectedPermiso;
  9. String _busqueda = "";
  10. String get busqueda => _busqueda;
  11. List<Permiso> get permisos => _permisos;
  12. bool get isLoading => _isLoading;
  13. int _currentPage = 1;
  14. int _totalPermisos = 0;
  15. int _limit = 10;
  16. int get currentPage => _currentPage;
  17. int get totalPermisos => _totalPermisos;
  18. int get totalPages => (_totalPermisos / _limit).ceil();
  19. List<String> _userPermisos = [];
  20. List<String> get userPermisos => _userPermisos;
  21. setBusqueda(String value) {
  22. _busqueda = value;
  23. notifyListeners();
  24. }
  25. void selectPermiso(Permiso permiso) {
  26. _selectedPermiso = permiso;
  27. notifyListeners();
  28. }
  29. Future<void> fetchLocalAll({int page = 1}) async {
  30. _currentPage = page;
  31. var db = await DatabaseService().db;
  32. int? count = Sqflite.firstIntValue(
  33. await db!.rawQuery('SELECT COUNT(*) FROM Permiso'));
  34. _totalPermisos = count ?? 0;
  35. int offset = (_limit * (page - 1));
  36. var query = await db.query('Permiso',
  37. orderBy: 'id asc', limit: _limit, offset: offset);
  38. _permisos = query.map((element) => Permiso.fromJson(element)).toList();
  39. notifyListeners();
  40. }
  41. Future<void> sincronizarPermisos() async {
  42. _isLoading = true;
  43. notifyListeners();
  44. try {
  45. final response = ApiResponse(await BaseService().get('/pos/permiso'));
  46. if (response.isOk && response.resultados != null) {
  47. _permisos =
  48. response.resultados!.map((json) => Permiso.fromJson(json)).toList();
  49. await DatabaseService().sincronizarPermisos(_permisos);
  50. }
  51. } catch (e) {
  52. print('Error fetching permisos: $e');
  53. }
  54. _isLoading = false;
  55. notifyListeners();
  56. }
  57. Future<void> fetchUserPermisos() async {
  58. _isLoading = true;
  59. notifyListeners();
  60. try {
  61. int? userId = await SessionStorage().getId();
  62. if (userId != null) {
  63. var db = await DatabaseService().db;
  64. var query = await db!.query(
  65. 'UsuarioPermiso',
  66. where: 'idUsuario = ?',
  67. whereArgs: [userId],
  68. );
  69. _userPermisos =
  70. query.map((row) => row['idPermiso'].toString()).toList();
  71. }
  72. } catch (e) {
  73. print('Error fetching user permisos: $e');
  74. } finally {
  75. _isLoading = false;
  76. notifyListeners();
  77. }
  78. }
  79. }