Files
fcs/lib/model/chart_model.dart

244 lines
6.7 KiB
Dart
Raw Normal View History

2020-05-29 07:45:27 +06:30
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';
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;
}
}
}