permiso_view_model.dart 2.6 KB

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