mesa_view_model.dart 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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. Future<void> addMesa(Mesa mesa) async {
  56. await RepoService().guardar(mesa);
  57. fetchLocalAll();
  58. }
  59. Future<void> updateMesa(Mesa mesa) async {
  60. setIsLoading(true);
  61. try {
  62. await RepoService().guardar(mesa);
  63. fetchLocalAll();
  64. } catch (e) {
  65. print('Error updating mesa: $e');
  66. }
  67. setIsLoading(false);
  68. }
  69. Future<void> deleteMesa(int id) async {
  70. await RepoService().eliminar<Mesa>(id);
  71. fetchLocalAll();
  72. }
  73. void setIsLoading(bool loading) {
  74. _isLoading = loading;
  75. notifyListeners();
  76. }
  77. void nextPage() {
  78. if (_currentPage < totalPages) {
  79. fetchLocalAll(page: _currentPage + 1);
  80. }
  81. }
  82. void previousPage() {
  83. if (_currentPage > 1) {
  84. fetchLocalAll(page: _currentPage - 1);
  85. }
  86. }
  87. Future<bool> isMesaActive(String clave) async {
  88. var db = await RepoService().db;
  89. var result = await db!.query(
  90. 'Mesa',
  91. where: 'clave = ?',
  92. whereArgs: [clave],
  93. );
  94. if (result.isNotEmpty) {
  95. var mesa = Mesa.fromJson(result.first);
  96. return mesa.activa == true;
  97. }
  98. return false;
  99. }
  100. }