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 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 _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 _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> loadSummary() async { List _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> loadUsers() async { List _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> loadPOBalancesForBuyer_() async { List _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> loadPOBalancesForBuyer() async { List _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> loadPOBalProductsForBuyer() async { List _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; } } }