sucursal_view_model.dart 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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: 'idLocal asc');
  17. _sucursales = query.map((element) => Sucursal.fromJson(element)).toList();
  18. notifyListeners();
  19. }
  20. Future<bool> sincronizarSucursales() async {
  21. try {
  22. // Llamada a la API para obtener las sucursales
  23. final response = ApiResponse(await BaseService().get('/pos/sucursal'));
  24. if (response.isOk && response.resultados != null) {
  25. List<Sucursal> sucursalesApi =
  26. response.resultados!.map((json) => Sucursal.fromApi(json)).toList();
  27. if (sucursalesApi.isNotEmpty) {
  28. await RepoService().sincronizarSucursales(sucursalesApi);
  29. notifyListeners();
  30. return true;
  31. }
  32. }
  33. return false;
  34. } catch (e) {
  35. print('Error al sincronizar sucursales: $e');
  36. return false;
  37. }
  38. }
  39. Future<void> sincronizarSucursalesDesdeApi() async {
  40. setIsLoading(true);
  41. try {
  42. bool sucursalesSincronizadas = await sincronizarSucursales();
  43. if (sucursalesSincronizadas) {
  44. await fetchLocalSucursales();
  45. }
  46. print('Sucursales sincronizadas: $sucursalesSincronizadas');
  47. } catch (e, stackTrace) {
  48. print("Error al sincronizar sucursales: $e\n$stackTrace");
  49. } finally {
  50. setIsLoading(false);
  51. }
  52. }
  53. void setIsLoading(bool loading) {
  54. _isLoading = loading;
  55. notifyListeners();
  56. }
  57. }