import '../database/daos/articoli_dao.dart'; import '../database/daos/listini_dao.dart'; import '../database/daos/sconti_dao.dart'; class PriceResult { final double? prezzo; final double sconto1; final double sconto2; final double sconto3; final double sconto4; final double sconto5; final String? listinoCode; PriceResult({ this.prezzo, this.sconto1 = 0, this.sconto2 = 0, this.sconto3 = 0, this.sconto4 = 0, this.sconto5 = 0, this.listinoCode, }); double get netto { double n = prezzo ?? 0; n *= (100 - sconto1) / 100; n *= (100 - sconto2) / 100; n *= (100 - sconto3) / 100; n *= (100 - sconto4) / 100; n *= (100 - sconto5) / 100; return n; } } class PricingService { final ArticoliDao _articoliDao; final ListiniDao _listiniDao; final ScontiDao _scontiDao; PricingService(this._articoliDao, this._listiniDao, this._scontiDao); Future getPriceAndDiscountForCustomer( int idCliente, int idArticolo, String date ) async { // First try: customer-specific list final clienteList = await _articoliDao.getCustomerListPrice(idCliente, idArticolo, date); if (clienteList != null && clienteList.prezzo != null && clienteList.prezzo! > 0) { double? s1, s2, s3, s4, s5; if (clienteList.idSconto != null) { final sconto = await _scontiDao.findById(clienteList.idSconto!); if (sconto != null) { s1 = sconto.sconto1; s2 = sconto.sconto2; s3 = sconto.sconto3; s4 = sconto.sconto4; s5 = sconto.sconto5; } } return PriceResult( prezzo: clienteList.prezzo, sconto1: s1 ?? 0, sconto2: s2 ?? 0, sconto3: s3 ?? 0, sconto4: s4 ?? 0, sconto5: s5 ?? 0, ); } // Second try: general list price final listini = await _articoliDao.getPriceCodes(idArticolo); for (final l in listini) { final lp = await _articoliDao.getListPrice(l.idListino, idArticolo, date); if (lp != null && lp.prezzo != null && lp.prezzo! > 0) { double? s1, s2, s3, s4, s5; if (lp.idSconto != null) { final tabella = await _scontiDao.findById(lp.idSconto!); if (tabella != null) { s1 = tabella.sconto1; s2 = tabella.sconto2; s3 = tabella.sconto3; s4 = tabella.sconto4; s5 = tabella.sconto5; } } return PriceResult( prezzo: lp.prezzo, sconto1: s1 ?? 0, sconto2: s2 ?? 0, sconto3: s3 ?? 0, sconto4: s4 ?? 0, sconto5: s5 ?? 0, listinoCode: l.codListino, ); } } return PriceResult(); } }