142 lines
3.5 KiB
Dart
142 lines
3.5 KiB
Dart
import 'package:intl/intl.dart';
|
|
|
|
class PODOCount {
|
|
Map<dynamic, dynamic> mapPOCount = {};
|
|
Map<dynamic, dynamic> mapDOCount = {};
|
|
|
|
PODOCount({
|
|
this.mapPOCount,
|
|
this.mapDOCount,
|
|
});
|
|
|
|
//for po count
|
|
List<CountData> getPODataCounts(String status) {
|
|
return getDataCounts(mapPOCount, status);
|
|
}
|
|
|
|
List<TotalCountData> getPOTotalCounts() {
|
|
return getTotalCounts(mapPOCount);
|
|
}
|
|
|
|
//for do count
|
|
List<CountData> getDODataCounts(String status) {
|
|
return getDataCounts(mapDOCount, status);
|
|
}
|
|
|
|
List<TotalCountData> getDOTotalCounts() {
|
|
return getTotalCounts(mapDOCount);
|
|
}
|
|
|
|
List<CountData> getDataCounts(counts, String status) {
|
|
List<CountData> 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<TotalCountData> getTotalCounts(counts) {
|
|
List<TotalCountData> 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<CountData> 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<CountData> getDetailCounts(counts) {
|
|
List<CountData> 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<String, dynamic> 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<CountData> detailCountsList;
|
|
TotalCountData({this.date, this.detailCountsList, this.totalCount});
|
|
}
|