import '../database/daos/statistiche_dao.dart'; import '../database/daos/articoli_dao.dart'; import '../database/daos/clienti_dao.dart'; import '../database/daos/agenti_dao.dart'; import '../database/database.dart'; class StatisticsService { final StatisticheDao _statisticheDao; final ArticoliDao _articoliDao; final ClientiDao _clientiDao; final AgentiDao _agentiDao; StatisticsService(this._statisticheDao, this._articoliDao, this._clientiDao, this._agentiDao); Future> getStatsForAgent(int idAgente, {String? da, String? a}) async { final from = da ?? DateTime.now().subtract(const Duration(days: 365)).toIso8601String(); final to = a ?? DateTime.now().toIso8601String(); return _statisticheDao.getPerAgente(idAgente, from, to); } Future getTotalForAgent(int idAgente, {String? da, String? a}) async { final stats = await getStatsForAgent(idAgente, da: da, a: a); return stats.fold(0.0, (sum, s) => sum + (s.importo ?? 0.0)); } Future> getTotalsByClient(int idAgente, {String? da, String? a}) async { final stats = await getStatsForAgent(idAgente, da: da, a: a); final result = {}; for (final s in stats) { final key = s.idCliente.toString(); result[key] = (result[key] ?? 0) + (s.importo ?? 0); } return result; } Future> getTotalsByArticle(int idAgente, {String? da, String? a}) async { final stats = await getStatsForAgent(idAgente, da: da, a: a); final result = {}; for (final s in stats) { final key = s.idArticolo.toString(); result[key] = (result[key] ?? 0) + (s.importo ?? 0); } return result; } Future> getMonthlyTotals(int idAgente, {int months = 12}) async { final to = DateTime.now(); final from = DateTime(to.year, to.month - months, to.day); final stats = await _statisticheDao.getPerAgente( idAgente, from.toIso8601String(), to.toIso8601String(), ); final result = {}; for (final s in stats) { if (s.dataFattura == null || s.dataFattura!.length < 7) continue; final monthKey = s.dataFattura!.substring(0, 7); result[monthKey] = (result[monthKey] ?? 0) + (s.importo ?? 0); } return result; } }