sucursal_view_model.dart 2.2 KB

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