import 'package:intl/intl.dart'; class PODOCount { Map mapPOCount = {}; Map mapDOCount = {}; PODOCount({ this.mapPOCount, this.mapDOCount, }); //for po count List getPODataCounts(String status) { return getDataCounts(mapPOCount, status); } List getPOTotalCounts() { return getTotalCounts(mapPOCount); } //for do count List getDODataCounts(String status) { return getDataCounts(mapDOCount, status); } List getDOTotalCounts() { return getTotalCounts(mapDOCount); } List getDataCounts(counts, String status) { List result = new List(); if (counts != null) { DateTime today = new DateTime.now(); DateTime thirtyDaysAgo = today.subtract(new Duration(days: 30)); String _formatter = new DateFormat("yyyyMMdd").format(thirtyDaysAgo); int _lastThirtyDays = int.tryParse(_formatter); counts.forEach((k, value) { int mapDay = int.tryParse(k); if (mapDay < _lastThirtyDays) return; CountData data = new CountData(); var parsedDate = DateTime.parse(k); data.date = parsedDate; if (value != null) { value.forEach((key, count) { if (key == status) { data.status = key; data.count = count; } }); } result.add(data); }); result.sort((a, b) { return a.date.compareTo(b.date); }); } return result; } List getTotalCounts(counts) { List result = new List(); if (counts != null) { DateTime today = new DateTime.now(); DateTime thirtyDaysAgo = today.subtract(new Duration(days: 30)); String _formatter = new DateFormat("yyyyMMdd").format(thirtyDaysAgo); int _lastThirtyDays = int.tryParse(_formatter); counts.forEach((k, value) { int mapDay = int.tryParse(k); if (mapDay < _lastThirtyDays) return; var parsedDate = DateTime.parse(k); int sum = 0; List countList = new List(); if (value != null) { value.forEach((key, count) { sum += count; countList .add(CountData(date: parsedDate, status: key, count: count)); }); } result.add(TotalCountData( date: parsedDate, totalCount: sum, detailCountsList: countList)); }); result.sort((a, b) { return a.date.compareTo(b.date); }); } return result; } List getDetailCounts(counts) { List result = new List(); if (counts != null) { counts.forEach((k, value) { var parsedDate = DateTime.parse(k); if (value != null) { value.forEach((key, count) { result.add(CountData(date: parsedDate, status: key, count: count)); }); } }); result.sort((a, b) { return a.date.compareTo(b.date); }); } return result; } factory PODOCount.fromMap(Map map, String docID) { return PODOCount( mapPOCount: map['po_count'], mapDOCount: map['do_count'], ); } @override String toString() { return null; } } class CountData { DateTime date; String status; int count; CountData({this.date, this.count, this.status}); } class TotalCountData { DateTime date; int totalCount; List detailCountsList; TotalCountData({this.date, this.detailCountsList, this.totalCount}); }