statistics_service.dart 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import '../database/daos/statistiche_dao.dart';
  2. import '../database/daos/articoli_dao.dart';
  3. import '../database/daos/clienti_dao.dart';
  4. import '../database/daos/agenti_dao.dart';
  5. import '../database/database.dart';
  6. class StatisticsService {
  7. final StatisticheDao _statisticheDao;
  8. final ArticoliDao _articoliDao;
  9. final ClientiDao _clientiDao;
  10. final AgentiDao _agentiDao;
  11. StatisticsService(this._statisticheDao, this._articoliDao, this._clientiDao, this._agentiDao);
  12. Future<List<StatisticheVenditaData>> getStatsForAgent(int idAgente, {String? da, String? a}) async {
  13. final from = da ?? DateTime.now().subtract(const Duration(days: 365)).toIso8601String();
  14. final to = a ?? DateTime.now().toIso8601String();
  15. return _statisticheDao.getPerAgente(idAgente, from, to);
  16. }
  17. Future<double> getTotalForAgent(int idAgente, {String? da, String? a}) async {
  18. final stats = await getStatsForAgent(idAgente, da: da, a: a);
  19. return stats.fold<double>(0.0, (sum, s) => sum + (s.importo ?? 0.0));
  20. }
  21. Future<Map<String, double>> getTotalsByClient(int idAgente, {String? da, String? a}) async {
  22. final stats = await getStatsForAgent(idAgente, da: da, a: a);
  23. final result = <String, double>{};
  24. for (final s in stats) {
  25. final key = s.idCliente.toString();
  26. result[key] = (result[key] ?? 0) + (s.importo ?? 0);
  27. }
  28. return result;
  29. }
  30. Future<Map<String, double>> getTotalsByArticle(int idAgente, {String? da, String? a}) async {
  31. final stats = await getStatsForAgent(idAgente, da: da, a: a);
  32. final result = <String, double>{};
  33. for (final s in stats) {
  34. final key = s.idArticolo.toString();
  35. result[key] = (result[key] ?? 0) + (s.importo ?? 0);
  36. }
  37. return result;
  38. }
  39. Future<Map<String, double>> getMonthlyTotals(int idAgente, {int months = 12}) async {
  40. final to = DateTime.now();
  41. final from = DateTime(to.year, to.month - months, to.day);
  42. final stats = await _statisticheDao.getPerAgente(
  43. idAgente,
  44. from.toIso8601String(),
  45. to.toIso8601String(),
  46. );
  47. final result = <String, double>{};
  48. for (final s in stats) {
  49. if (s.dataFattura == null || s.dataFattura!.length < 7) continue;
  50. final monthKey = s.dataFattura!.substring(0, 7);
  51. result[monthKey] = (result[monthKey] ?? 0) + (s.importo ?? 0);
  52. }
  53. return result;
  54. }
  55. }