245 lines
6.8 KiB
Dart
245 lines
6.8 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
import 'package:logging/logging.dart';
|
|
import 'package:fcs/config.dart';
|
|
import 'package:fcs/model/firebase_helper.dart';
|
|
import 'package:fcs/vo/po.dart';
|
|
import 'package:fcs/vo/po_do_count.dart';
|
|
import 'package:fcs/vo/revenue.dart';
|
|
|
|
import 'base_model.dart';
|
|
import 'constants.dart';
|
|
import 'firebase_helper.dart';
|
|
|
|
class ChartModel extends BaseModel {
|
|
final log = Logger('ChartModel');
|
|
|
|
List<POChartData> chartSummary = [];
|
|
|
|
Revenue revenue = new Revenue();
|
|
PODOCount podoCount = new PODOCount();
|
|
void initUser(user) async {
|
|
super.initUser(user);
|
|
revenue = new Revenue();
|
|
podoCount = new PODOCount();
|
|
|
|
_loadRev();
|
|
_loadPODOCount();
|
|
if (user.hasPO() || user.isOwnerAndAbove()) {
|
|
_getSummary();
|
|
}
|
|
}
|
|
|
|
Future<void> _loadRev() async {
|
|
try {
|
|
String path = "/$biz_collection/${setting.okEnergyId}/$report_collection";
|
|
String reportID = "revenue";
|
|
|
|
if (user.isBuyer()) {
|
|
path =
|
|
"/$biz_collection/${setting.okEnergyId}/$buyer_collection/${user.docID}/$report_collection";
|
|
reportID = "spending";
|
|
}
|
|
|
|
getDocSnapshot(path, reportID).listen((DocumentSnapshot snapshot) async {
|
|
if (snapshot.data == null) {
|
|
return;
|
|
}
|
|
revenue = Revenue.fromMap(snapshot.data, snapshot.documentID);
|
|
notifyListeners();
|
|
}).onError((e) {
|
|
log.warning("Error! $e");
|
|
});
|
|
} catch (e) {
|
|
log.warning("Error!! $e");
|
|
}
|
|
}
|
|
|
|
Future<void> _loadPODOCount() async {
|
|
try {
|
|
String path = "/$biz_collection/${setting.okEnergyId}/$report_collection";
|
|
String reportID = "po_do_count";
|
|
|
|
if (user.isBuyer()) {
|
|
path =
|
|
"/$biz_collection/${setting.okEnergyId}/$buyer_collection/${user.docID}/$report_collection";
|
|
}
|
|
|
|
getDocSnapshot(path, reportID).listen((DocumentSnapshot snapshot) async {
|
|
if (snapshot.data == null) {
|
|
return;
|
|
}
|
|
podoCount = PODOCount.fromMap(snapshot.data, snapshot.documentID);
|
|
notifyListeners();
|
|
}).onError((e) {
|
|
log.warning("Error! $e");
|
|
});
|
|
} catch (e) {
|
|
log.warning("Error!! $e");
|
|
}
|
|
}
|
|
|
|
@override
|
|
logout() async {
|
|
chartSummary = [];
|
|
revenue = new Revenue();
|
|
podoCount = new PODOCount();
|
|
}
|
|
|
|
_getSummary() async {
|
|
chartSummary.clear();
|
|
try {
|
|
var data = {
|
|
"fields": 'quantity,product_id,product_name,color',
|
|
"aggfuns": "sum,,,",
|
|
"groupbys": 'product_id',
|
|
};
|
|
var result = await request("/api/data/po_product_view", "POST",
|
|
token: await getToken(),
|
|
url: Config.instance.reportURL,
|
|
payload: jsonEncode(data));
|
|
if (result == null) return;
|
|
chartSummary.clear();
|
|
result.forEach((chart) {
|
|
var _list = POChartData.fromJson(chart, "quantity_sum");
|
|
chartSummary.add(_list);
|
|
});
|
|
} catch (e) {
|
|
log.warning("Error get Summary>>>>${e.toString()}");
|
|
}
|
|
}
|
|
|
|
Future<List<POChartData>> loadSummary() async {
|
|
List<POChartData> _list = List();
|
|
try {
|
|
var data = {
|
|
"fields": 'quantity,product_id,product_name,color',
|
|
"aggfuns": "sum,,,",
|
|
"groupbys": 'product_id',
|
|
};
|
|
var result = await request("/api/data/po_product_view", "POST",
|
|
token: await getToken(),
|
|
url: Config.instance.reportURL,
|
|
payload: jsonEncode(data));
|
|
if (result != null) {
|
|
result.forEach((chart) {
|
|
var _data = POChartData.fromJson(chart, "quantity_sum");
|
|
_list.add(_data);
|
|
});
|
|
}
|
|
return _list;
|
|
} catch (e) {
|
|
log.warning("Error>>>>${e.toString()}");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
Future<List<POChartData>> loadUsers() async {
|
|
List<POChartData> _list = List();
|
|
var data = {
|
|
"fields": 'quantity,user_name,product_name',
|
|
"aggfuns": "sum,,",
|
|
"groupbys": 'product_id,user_id',
|
|
};
|
|
try {
|
|
var result = await request("/api/data/po_product_view", "POST",
|
|
token: await getToken(),
|
|
url: Config.instance.reportURL,
|
|
payload: jsonEncode(data));
|
|
|
|
result.forEach((chart) {
|
|
var _buyer = POChartData.fromJson(chart, "quantity_sum");
|
|
_list.add(_buyer);
|
|
});
|
|
return _list;
|
|
} catch (e) {
|
|
log.warning("Error load>>>>${e.toString()}");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
Future<List<POBuyerData>> loadPOBalancesForBuyer_() async {
|
|
List<POBuyerData> _list = List();
|
|
try {
|
|
var data = {
|
|
"fields": 'amount,status',
|
|
"aggfuns": "sum,",
|
|
"groupbys": 'status',
|
|
"filters": [
|
|
{"field": "user_id", "compare": "==", "value": user.docID}
|
|
]
|
|
};
|
|
var result = await request("/api/data/po_buyer_view", "POST",
|
|
token: await getToken(),
|
|
url: Config.instance.reportURL,
|
|
payload: jsonEncode(data));
|
|
|
|
if (result != null) {
|
|
result.forEach((chart) {
|
|
var _data = POBuyerData.fromJson(chart, "amount_sum");
|
|
_list.add(_data);
|
|
});
|
|
}
|
|
return _list;
|
|
} catch (e) {
|
|
log.warning("Error>>>>${e.toString()}");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
Future<List<POChartData>> loadPOBalancesForBuyer() async {
|
|
List<POChartData> _list = List();
|
|
try {
|
|
var data = {
|
|
"fields": 'quantity,product_id,product_name,user_id,color',
|
|
"aggfuns": "sum,,,,",
|
|
"groupbys": 'product_id,user_id',
|
|
"filters": [
|
|
{"field": "user_id", "compare": "==", "value": user.docID}
|
|
]
|
|
};
|
|
var result = await request("/api/data/po_product_view", "POST",
|
|
token: await getToken(),
|
|
url: Config.instance.reportURL,
|
|
payload: jsonEncode(data));
|
|
if (result != null) {
|
|
result.forEach((chart) {
|
|
var _data = POChartData.fromJson(chart, "quantity_sum");
|
|
_list.add(_data);
|
|
});
|
|
}
|
|
return _list;
|
|
} catch (e) {
|
|
log.warning("Error>>>>${e.toString()}");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
Future<List<POChartData>> loadPOBalProductsForBuyer() async {
|
|
List<POChartData> _list = List();
|
|
var data = {
|
|
"fields": 'quantity,user_name,user_id,product_name',
|
|
"aggfuns": "sum,,,",
|
|
"groupbys": 'product_id,user_id',
|
|
"filters": [
|
|
{"field": "user_id", "compare": "==", "value": user.docID}
|
|
]
|
|
};
|
|
try {
|
|
var result = await request("/api/data/po_product_view", "POST",
|
|
token: await getToken(),
|
|
url: Config.instance.reportURL,
|
|
payload: jsonEncode(data));
|
|
result.forEach((chart) {
|
|
var _buyer = POChartData.fromJson(chart, "quantity_sum");
|
|
_list.add(_buyer);
|
|
});
|
|
return _list;
|
|
} catch (e) {
|
|
log.warning("Error load>>>>${e.toString()}");
|
|
return null;
|
|
}
|
|
}
|
|
}
|