pedido_view_model.dart 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import 'package:flutter/material.dart';
  2. import 'package:intl/intl.dart';
  3. import 'package:yoshi_papas_app/services/repo_service.dart';
  4. import '../data/api_response.dart';
  5. import '../services/base_service.dart';
  6. import '../models/models.dart';
  7. class PedidoViewModel extends ChangeNotifier {
  8. String _busqueda = "";
  9. String get busqueda => _busqueda;
  10. List<Pedido> _pedidos = [];
  11. Pedido? _selectedPedido;
  12. bool _isLoading = false;
  13. List<Pedido> get pedidos => _pedidos;
  14. Pedido? get selectedPedido => _selectedPedido;
  15. bool get isLoading => _isLoading;
  16. void setIsLoading(bool loading) {
  17. _isLoading = loading;
  18. notifyListeners();
  19. }
  20. Future<bool> guardarPedidoLocal({required Pedido pedido}) async {
  21. RepoService<Pedido> repoPedido = RepoService<Pedido>();
  22. int nextFolio = await repoPedido.obtenerProximoFolio();
  23. pedido.folio = nextFolio;
  24. int idPedido = await repoPedido.guardar(pedido);
  25. if (idPedido > 0) {
  26. pedido.id = idPedido;
  27. RepoService<PedidoProducto> repoPedidoProducto =
  28. RepoService<PedidoProducto>();
  29. for (var producto in pedido.productos) {
  30. PedidoProducto pedidoProducto = PedidoProducto(
  31. idPedido: idPedido,
  32. idProducto: producto.idProducto,
  33. cantidad: producto.cantidad,
  34. costoUnitario: producto.costoUnitario,
  35. comentario: producto.comentario,
  36. );
  37. await repoPedidoProducto.guardar(pedidoProducto);
  38. }
  39. notifyListeners();
  40. return true;
  41. } else {
  42. return false;
  43. }
  44. }
  45. Future<void> fetchLocalPedidos() async {
  46. setIsLoading(true);
  47. RepoService<Pedido> repoPedido = RepoService<Pedido>();
  48. List<Pedido> localPedidos = await repoPedido.obtenerTodos();
  49. _pedidos = localPedidos;
  50. setIsLoading(false);
  51. notifyListeners();
  52. }
  53. Future<Pedido?> fetchPedidoConProductos(int idPedido) async {
  54. RepoService<Pedido> repoPedido = RepoService<Pedido>();
  55. Pedido? pedido = await repoPedido.obtenerPorId(idPedido);
  56. if (pedido != null) {
  57. RepoService<PedidoProducto> repoProducto = RepoService<PedidoProducto>();
  58. RepoService<Producto> repoProductoInfo = RepoService<Producto>();
  59. List<PedidoProducto> productos =
  60. await repoProducto.obtenerPorIdPedido(idPedido);
  61. for (var producto in productos) {
  62. Producto? prodInfo =
  63. await repoProductoInfo.obtenerProductoPorId(producto.idProducto!);
  64. if (prodInfo != null) {
  65. producto.producto =
  66. prodInfo; // Asegúrate de que tu clase PedidoProducto pueda sostener este objeto
  67. }
  68. }
  69. pedido.productos = productos;
  70. }
  71. return pedido;
  72. }
  73. }