mesa_view_model.dart 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. import 'package:flutter/material.dart';
  2. import 'package:sqflite/sqflite.dart';
  3. import '../../core/services/reposit_factory.dart';
  4. import '../../core/services/services.dart';
  5. import '../../core/models/models.dart';
  6. class MesaViewModel extends ChangeNotifier {
  7. final Repository<Mesa> mesaRepository;
  8. MesaViewModel({required this.mesaRepository});
  9. String _busqueda = "";
  10. String get busqueda => _busqueda;
  11. List<Mesa> _mesas = [];
  12. bool _isLoading = false;
  13. Mesa? _selectedMesa;
  14. List<Mesa> get mesas => _mesas;
  15. bool get isLoading => _isLoading;
  16. Mesa? get selectedMesa => _selectedMesa;
  17. int _currentPage = 1;
  18. int _totalMesas = 0;
  19. int _limit = 10;
  20. int get currentPage => _currentPage;
  21. int get totalMesas => _totalMesas;
  22. int get totalPages => (_totalMesas / _limit).ceil();
  23. setBusqueda(String value) {
  24. _busqueda = value;
  25. notifyListeners();
  26. }
  27. void selectMesa(Mesa mesa) {
  28. _selectedMesa = mesa;
  29. notifyListeners();
  30. }
  31. Future<void> fetchLocal() async {
  32. _isLoading = true;
  33. notifyListeners();
  34. final resultado =
  35. await mesaRepository.consultarConOrden(orderBy: 'nombre ASC');
  36. _mesas = resultado;
  37. _isLoading = false;
  38. notifyListeners();
  39. }
  40. Future<void> fetchLocalByName({required String nombre}) async {
  41. var db = await DatabaseService().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,
  57. orElse: () => Mesa(id: 0, nombre: 'Mesa desconocida'));
  58. return mesa;
  59. }
  60. Future<void> addMesa(Mesa mesa) async {
  61. mesa.creado = DateTime.now().toUtc();
  62. await DatabaseService().guardar(mesa);
  63. await fetchLocal();
  64. }
  65. Future<void> updateMesa(Mesa mesa) async {
  66. setIsLoading(true);
  67. try {
  68. mesa.modificado = DateTime.now().toUtc();
  69. await DatabaseService().guardar(mesa);
  70. await fetchLocal();
  71. } catch (e) {
  72. debugPrint('Error updating mesa: $e');
  73. }
  74. setIsLoading(false);
  75. }
  76. Future<void> deleteMesa(int id) async {
  77. await DatabaseService().eliminar<Mesa>(id);
  78. fetchLocal();
  79. }
  80. void setIsLoading(bool loading) {
  81. _isLoading = loading;
  82. notifyListeners();
  83. }
  84. // void nextPage() {
  85. // if (_currentPage < totalPages) {
  86. // fetchLocal(page: _currentPage + 1);
  87. // }
  88. // }
  89. // void previousPage() {
  90. // if (_currentPage > 1) {
  91. // fetchLocal(page: _currentPage - 1);
  92. // }
  93. // }
  94. Future<bool> isMesaActive(String clave) async {
  95. var db = await DatabaseService().db;
  96. var result = await db!.query(
  97. 'Mesa',
  98. where: 'clave = ?',
  99. whereArgs: [clave],
  100. );
  101. if (result.isNotEmpty) {
  102. var mesa = Mesa.fromJson(result.first);
  103. return mesa.activa == true;
  104. }
  105. return false;
  106. }
  107. // TODO: Implementar CambiarEstadoMesa, actualizar modelo
  108. // void CambiarEstadoPedidoMesa(Mesa mesa) async {
  109. // var db = await DatabaseService().db;
  110. // await db!.update(
  111. // 'Mesa',
  112. // {'estado': mesa.estado.toString()},
  113. // where: 'id = ?',
  114. // whereArgs: [mesa.id],
  115. // );
  116. // fetchLocal();
  117. // }
  118. //todo: Cambio de estado de mesa provisional
  119. void cambiarEstadoPedidoMesa(EstadoPedido nuevoestado) {
  120. if (_selectedMesa != null) {
  121. _selectedMesa!.estado = nuevoestado;
  122. notifyListeners();
  123. }
  124. }
  125. Future<bool> sincronizarMesas() async {
  126. String? claveSucursal =
  127. await DatabaseService().obtenerClaveSucursalSeleccionada();
  128. try {
  129. Map<String, String> parametros = {
  130. "claveSucursal": claveSucursal!,
  131. "limite": "-1"
  132. };
  133. //? peticion de Mesa
  134. final response = ApiResponse(await BaseService()
  135. .get('/pos/mesa', queryParameters: parametros, withAuth: true));
  136. if (response.isOk && response.resultados != null) {
  137. List<Mesa> mesasApi =
  138. response.resultados!.map((json) => Mesa.fromApi(json)).toList();
  139. if (mesasApi.isNotEmpty) {
  140. debugPrint("Mesas API obtenidas: ${mesasApi.length}");
  141. await DatabaseService().sincronizarMesas(mesasApi);
  142. return true;
  143. } else {
  144. debugPrint("No se encontraron mesas en la API.");
  145. }
  146. } else {
  147. debugPrint("Error en la respuesta de la API o resultados nulos MESAS.");
  148. }
  149. return false;
  150. } catch (e) {
  151. debugPrint('Error al sincronizar mesas: $e');
  152. return false;
  153. }
  154. }
  155. }