mesa_view_model.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import 'package:conalep_pos/models/mesa_model.dart';
  2. import 'package:flutter/material.dart';
  3. import '../services/services.dart';
  4. import 'package:sqflite/sqflite.dart';
  5. class MesaViewModel extends ChangeNotifier {
  6. String _busqueda = "";
  7. String get busqueda => _busqueda;
  8. List<Mesa> _mesas = [];
  9. bool _isLoading = false;
  10. Mesa? _selectedMesa;
  11. List<Mesa> get mesas => _mesas;
  12. bool get isLoading => _isLoading;
  13. Mesa? get selectedMesa => _selectedMesa;
  14. int _currentPage = 1;
  15. int _totalMesas = 0;
  16. int _limit = 10;
  17. int get currentPage => _currentPage;
  18. int get totalMesas => _totalMesas;
  19. int get totalPages => (_totalMesas / _limit).ceil();
  20. setBusqueda(String value) {
  21. _busqueda = value;
  22. notifyListeners();
  23. }
  24. void selectMesa(Mesa mesa) {
  25. _selectedMesa = mesa;
  26. notifyListeners();
  27. }
  28. Future<void> fetchLocalAll({int page = 1}) async {
  29. _currentPage = page;
  30. var db = await RepoService().db;
  31. int? count =
  32. Sqflite.firstIntValue(await db!.rawQuery('SELECT COUNT(*) FROM Mesa'));
  33. _totalMesas = count ?? 0;
  34. int offset = (_limit * (page - 1));
  35. var query = await db.query('Mesa',
  36. orderBy: 'id asc', limit: _limit, offset: offset);
  37. _mesas = query.map((element) => Mesa.fromJson(element)).toList();
  38. notifyListeners();
  39. }
  40. Future<void> fetchLocalByName({required String nombre}) async {
  41. var db = await RepoService().db;
  42. var query = await db!.query(
  43. 'Mesa',
  44. where: 'nombre LIKE "%$nombre%"',
  45. orderBy: 'id asc',
  46. );
  47. List<Mesa> aux = [];
  48. for (var element in query) {
  49. Mesa mesa = Mesa.fromJson(element);
  50. aux.add(mesa);
  51. }
  52. _mesas = aux;
  53. notifyListeners();
  54. }
  55. Mesa fetchLocalById({required int? idMesa}) {
  56. final mesa = mesas.firstWhere((mesa) => mesa.id == idMesa, orElse: () => Mesa(id: 0, nombre: 'Mesa desconocida'));
  57. return mesa;
  58. }
  59. Future<void> addMesa(Mesa mesa) async {
  60. await RepoService().guardar(mesa);
  61. fetchLocalAll();
  62. }
  63. Future<void> updateMesa(Mesa mesa) async {
  64. setIsLoading(true);
  65. try {
  66. await RepoService().guardar(mesa);
  67. fetchLocalAll();
  68. } catch (e) {
  69. print('Error updating mesa: $e');
  70. }
  71. setIsLoading(false);
  72. }
  73. Future<void> deleteMesa(int id) async {
  74. await RepoService().eliminar<Mesa>(id);
  75. fetchLocalAll();
  76. }
  77. void setIsLoading(bool loading) {
  78. _isLoading = loading;
  79. notifyListeners();
  80. }
  81. void nextPage() {
  82. if (_currentPage < totalPages) {
  83. fetchLocalAll(page: _currentPage + 1);
  84. }
  85. }
  86. void previousPage() {
  87. if (_currentPage > 1) {
  88. fetchLocalAll(page: _currentPage - 1);
  89. }
  90. }
  91. Future<bool> isMesaActive(String clave) async {
  92. var db = await RepoService().db;
  93. var result = await db!.query(
  94. 'Mesa',
  95. where: 'clave = ?',
  96. whereArgs: [clave],
  97. );
  98. if (result.isNotEmpty) {
  99. var mesa = Mesa.fromJson(result.first);
  100. return mesa.activa == true;
  101. }
  102. return false;
  103. }
  104. }