Files
fcs/lib/pages/buyer_info.dart

282 lines
8.5 KiB
Dart
Raw Normal View History

2020-05-29 07:45:27 +06:30
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/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 '../theme/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<BuyerInfo> {
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<BuyerModel>(context, listen: false)
.loadBuyerProducts(buyer)
.then((b) {
if (mounted) {
setState(() {
buyer = b;
});
}
});
}
}
@override
Widget build(BuildContext context) {
var mainModel = Provider.of<MainModel>(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: <Widget>[
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: <Widget>[
dateBox,
Divider(),
accountBox,
Divider(),
Row(
children: <Widget>[
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<BuyerModel>(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<BuyerModel>(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<BuyerModel>(context).reject(buyer);
Navigator.pop(context, true);
} catch (e) {
showMsgDialog(context, "Error", e.toString());
} finally {
setState(() {
_isLoading = false;
});
}
}
}