import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import 'package:fcs/model/buyer_model.dart'; import 'package:fcs/model/main_model.dart'; import 'package:fcs/pages/quota_page.dart'; import 'package:fcs/fcs/common/pages/util.dart'; import 'package:fcs/util.dart'; import 'package:fcs/vo/buyer.dart'; import 'package:fcs/widget/label_widgets.dart'; import 'package:fcs/widget/localization/app_translations.dart'; import 'package:fcs/widget/progress.dart'; import '../fcs/common/helpers/theme.dart'; import 'document_log_page.dart'; class BuyerInfo extends StatefulWidget { final Buyer buyer; const BuyerInfo({this.buyer}); @override _BuyerInfoState createState() => _BuyerInfoState(); } class _BuyerInfoState extends State { var dateFormatter = new DateFormat('dd MMM yyyy - hh:mm a'); TextEditingController _companyName = new TextEditingController(); TextEditingController _comAddress = new TextEditingController(); TextEditingController _numOfShops = new TextEditingController(); TextEditingController _bizType = new TextEditingController(); TextEditingController _accountName = new TextEditingController(); TextEditingController _accountNumber = new TextEditingController(); bool _isLoading = false; Buyer buyer; @override void initState() { super.initState(); if (widget.buyer != null) { buyer = widget.buyer; Provider.of(context, listen: false) .loadBuyerProducts(buyer) .then((b) { if (mounted) { setState(() { buyer = b; }); } }); } } @override Widget build(BuildContext context) { var mainModel = Provider.of(context); _companyName.text = buyer.bizName; _comAddress.text = buyer.bizAddress; _numOfShops.text = buyer.numOfShops.toString(); _bizType.text = buyer.bizType; _accountName.text = buyer.userName; _accountNumber.text = buyer.userID; final dateBox = labeledText(context, dateFormatter.format(buyer.regDate), "reg.date"); final accountBox = labeledText(context, buyer.userName, "buyer.account_name"); final phoneBox = labeledText(context, buyer.phone, "buyer.phone_number"); final statusBox = labeledText(context, buyer.status, "reg.status"); final bizNameBox = labeledText(context, _companyName.text, "reg.biz_name"); final bizAddressBox = labeledText(context, _comAddress.text, "reg.biz_address"); final shopNumberBox = labeledText(context, _numOfShops.text, "reg.biz_shops"); final typeBox = labeledText(context, _bizType.text, "buyer.type_biz"); final dailyQuotaBox = labeledText( context, formatNumber(buyer.dailyQuota), "reg.quota", number: true); final dailyQuotaUsedBox = labeledText( context, formatNumber(buyer.dailyQuotaUsed), "reg.quota.used", number: true); final maxQuotaBox = labeledText( context, formatNumber(buyer.maxQuota), "reg.max_quota", number: true); final maxQuotaUsedBox = labeledText( context, formatNumber(buyer.maxQuotaUsed), "reg.max_quota.used", number: true); final nricFrontBox = labeledImg(context, buyer.nricFrontUrl, "reg_info.nric_front"); final nricBackBox = labeledImg(context, buyer.nricBackUrl, "reg_info.nric_back"); return LocalProgress( inAsyncCall: _isLoading, child: Scaffold( appBar: AppBar( backgroundColor: primaryColor, title: Text(AppTranslations.of(context).text("buyer.title")), actions: [ mainModel.showHistoryBtn() ? IconButton( icon: Icon(Icons.history), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => DocumentLogPage(docID: buyer.id)), ); }, ) : Container(), PopupMenuButton( onSelected: (s) { if (s == 1) { showConfirmDialog(context, "buyer.delete.confirm", () { _delete(); }); } else if (s == 2) { showConfirmDialog(context, "buyer.approve.confirm", () { _approve(); }); } else if (s == 3) { showCommentDialog(context, (comment) { _reject(comment); }); } else if (s == 4) { Navigator.push( context, MaterialPageRoute( builder: (context) => QuotaPage( buyer: this.buyer, isApproved: true, )), ); } }, itemBuilder: (context) => [ PopupMenuItem( value: 1, child: Text("Delete"), ), PopupMenuItem( enabled: buyer.isPending(), value: 2, child: Text("Approve"), ), PopupMenuItem( enabled: buyer.isPending(), value: 3, child: Text("Reject"), ), PopupMenuItem( enabled: buyer.isApproved(), value: 4, child: Text("Allocate Quota"), ), ], ), ], ), body: Container( padding: EdgeInsets.only(left: 10, right: 10, top: 10, bottom: 10), child: ListView( children: [ dateBox, Divider(), accountBox, Divider(), Row( children: [ Padding( padding: const EdgeInsets.only(right: 8.0), child: phoneBox, ), InkWell( onTap: () => call(context, buyer.phone), child: Icon( Icons.open_in_new, color: Colors.grey, size: 15, ), ), ], ), Divider(), statusBox, Divider(), bizNameBox, Divider(), bizAddressBox, Divider(), typeBox, Divider(), dailyQuotaBox, Divider(), dailyQuotaUsedBox, Divider(), maxQuotaBox, Divider(), maxQuotaUsedBox, Divider(), nricFrontBox, Divider(), nricBackBox ], ), ), ), ); } _delete() async { setState(() { _isLoading = true; }); try { await Provider.of(context).delete(buyer); Navigator.pop(context, true); } catch (e) { showMsgDialog(context, "Error", e.toString()); } finally { setState(() { _isLoading = false; }); } } _approve() async { var _buyer = await Navigator.push( context, MaterialPageRoute( builder: (context) => QuotaPage( buyer: this.buyer, isApproved: false, )), ); if (_buyer == null) return; setState(() { _isLoading = true; }); try { this.buyer.dailyQuota = _buyer.dailyQuota; this.buyer.maxQuota = _buyer.maxQuota; await Provider.of(context).approve(this.buyer); Navigator.pop(context, true); } catch (e) { showMsgDialog(context, "Error", e.toString()); } finally { setState(() { _isLoading = false; }); } } _reject(comment) async { if (comment == null || comment == "") { showMsgDialog(context, "Error", "Please enter comment!"); return; } buyer.comment = comment; setState(() { _isLoading = true; }); try { await Provider.of(context).reject(buyer); Navigator.pop(context, true); } catch (e) { showMsgDialog(context, "Error", e.toString()); } finally { setState(() { _isLoading = false; }); } } }