sucursal_view_model.dart 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. notifyListeners();
  39. return true;
  40. }
  41. }
  42. return false;
  43. } catch (e) {
  44. print('Error al sincronizar sucursales: $e');
  45. return false;
  46. }
  47. }
  48. Future<void> sincronizarSucursalesDesdeApi() async {
  49. setIsLoading(true);
  50. try {
  51. bool sucursalesSincronizadas = await sincronizarSucursales();
  52. if (sucursalesSincronizadas) {
  53. await fetchLocalSucursales();
  54. }
  55. print('Sucursales sincronizadas: $sucursalesSincronizadas');
  56. } catch (e, stackTrace) {
  57. print("Error al sincronizar sucursales: $e\n$stackTrace");
  58. } finally {
  59. setIsLoading(false);
  60. }
  61. }
  62. void setIsLoading(bool loading) {
  63. _isLoading = loading;
  64. notifyListeners();
  65. }
  66. }