sucursal_view_model.dart 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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 SucursalViewModel<T> extends ChangeNotifier {
  6. List<Sucursal> _sucursales = [];
  7. bool _isLoading = false;
  8. List<Sucursal> get sucursales => _sucursales;
  9. bool get isLoading => _isLoading;
  10. Future<void> fetchLocalSucursales() async {
  11. var db = await DatabaseService().db;
  12. var query = await db!
  13. .query('Sucursal', where: 'eliminado IS NULL', orderBy: 'id asc');
  14. _sucursales = query.map((element) => Sucursal.fromJson(element)).toList();
  15. notifyListeners();
  16. }
  17. Future<void> setSelectedSucursal(Sucursal sucursal) async {
  18. var db = await DatabaseService().db;
  19. await db!.update(
  20. 'Sucursal',
  21. {'seleccionado': 0},
  22. );
  23. sucursal.seleccionado = 1;
  24. await DatabaseService().guardar(sucursal);
  25. await fetchLocalSucursales();
  26. }
  27. Future<bool> sincronizarSucursales() async {
  28. try {
  29. final response = ApiResponse(await BaseService().get('/pos/sucursal'));
  30. if (response.isOk && response.resultados != null) {
  31. List<Sucursal> sucursalesApi =
  32. response.resultados!.map((json) => Sucursal.fromApi(json)).toList();
  33. if (sucursalesApi.isNotEmpty) {
  34. await DatabaseService().sincronizarSucursales(sucursalesApi);
  35. await fetchLocalSucursales();
  36. notifyListeners();
  37. return true;
  38. }
  39. }
  40. return false;
  41. } catch (e) {
  42. print('Error al sincronizar sucursales: $e');
  43. return false;
  44. }
  45. }
  46. Future<void> sincronizarSucursalesDesdeApi() async {
  47. setIsLoading(true);
  48. try {
  49. bool sucursalesSincronizadas = await sincronizarSucursales();
  50. if (sucursalesSincronizadas) {
  51. await fetchLocalSucursales();
  52. }
  53. print('Sucursales sincronizadas: $sucursalesSincronizadas');
  54. } catch (e, stackTrace) {
  55. print("Error al sincronizar sucursales: $e\n$stackTrace");
  56. } finally {
  57. setIsLoading(false);
  58. }
  59. }
  60. void setIsLoading(bool loading) {
  61. _isLoading = loading;
  62. notifyListeners();
  63. }
  64. }