pricing_service.dart 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import '../database/daos/articoli_dao.dart';
  2. import '../database/daos/listini_dao.dart';
  3. import '../database/daos/sconti_dao.dart';
  4. class PriceResult {
  5. final double? prezzo;
  6. final double sconto1;
  7. final double sconto2;
  8. final double sconto3;
  9. final double sconto4;
  10. final double sconto5;
  11. final String? listinoCode;
  12. PriceResult({
  13. this.prezzo,
  14. this.sconto1 = 0,
  15. this.sconto2 = 0,
  16. this.sconto3 = 0,
  17. this.sconto4 = 0,
  18. this.sconto5 = 0,
  19. this.listinoCode,
  20. });
  21. double get netto {
  22. double n = prezzo ?? 0;
  23. n *= (100 - sconto1) / 100;
  24. n *= (100 - sconto2) / 100;
  25. n *= (100 - sconto3) / 100;
  26. n *= (100 - sconto4) / 100;
  27. n *= (100 - sconto5) / 100;
  28. return n;
  29. }
  30. }
  31. class PricingService {
  32. final ArticoliDao _articoliDao;
  33. final ListiniDao _listiniDao;
  34. final ScontiDao _scontiDao;
  35. PricingService(this._articoliDao, this._listiniDao, this._scontiDao);
  36. Future<PriceResult> getPriceAndDiscountForCustomer(
  37. int idCliente, int idArticolo, String date
  38. ) async {
  39. // First try: customer-specific list
  40. final clienteList = await _articoliDao.getCustomerListPrice(idCliente, idArticolo, date);
  41. if (clienteList != null && clienteList.prezzo != null && clienteList.prezzo! > 0) {
  42. double? s1, s2, s3, s4, s5;
  43. if (clienteList.idSconto != null) {
  44. final sconto = await _scontiDao.findById(clienteList.idSconto!);
  45. if (sconto != null) {
  46. s1 = sconto.sconto1;
  47. s2 = sconto.sconto2;
  48. s3 = sconto.sconto3;
  49. s4 = sconto.sconto4;
  50. s5 = sconto.sconto5;
  51. }
  52. }
  53. return PriceResult(
  54. prezzo: clienteList.prezzo,
  55. sconto1: s1 ?? 0,
  56. sconto2: s2 ?? 0,
  57. sconto3: s3 ?? 0,
  58. sconto4: s4 ?? 0,
  59. sconto5: s5 ?? 0,
  60. );
  61. }
  62. // Second try: general list price
  63. final listini = await _articoliDao.getPriceCodes(idArticolo);
  64. for (final l in listini) {
  65. final lp = await _articoliDao.getListPrice(l.idListino, idArticolo, date);
  66. if (lp != null && lp.prezzo != null && lp.prezzo! > 0) {
  67. double? s1, s2, s3, s4, s5;
  68. if (lp.idSconto != null) {
  69. final tabella = await _scontiDao.findById(lp.idSconto!);
  70. if (tabella != null) {
  71. s1 = tabella.sconto1;
  72. s2 = tabella.sconto2;
  73. s3 = tabella.sconto3;
  74. s4 = tabella.sconto4;
  75. s5 = tabella.sconto5;
  76. }
  77. }
  78. return PriceResult(
  79. prezzo: lp.prezzo,
  80. sconto1: s1 ?? 0,
  81. sconto2: s2 ?? 0,
  82. sconto3: s3 ?? 0,
  83. sconto4: s4 ?? 0,
  84. sconto5: s5 ?? 0,
  85. listinoCode: l.codListino,
  86. );
  87. }
  88. }
  89. return PriceResult();
  90. }
  91. }