diff --git a/assets/local/localization_en.json b/assets/local/localization_en.json index 6bfd258..776ea22 100644 --- a/assets/local/localization_en.json +++ b/assets/local/localization_en.json @@ -123,6 +123,8 @@ "customer.status":"Status", "customer.fcs.id":"FCS ID", "customer.invitation.request.confirm":"Accept customer", + "customer.disable.btn":"Disable", + "customer.enable.btn":"Enable", "Customer End ================================================================":"", "Invitation Start ================================================================":"", diff --git a/assets/local/localization_mu.json b/assets/local/localization_mu.json index dbe8670..04031af 100644 --- a/assets/local/localization_mu.json +++ b/assets/local/localization_mu.json @@ -85,7 +85,7 @@ "faq.edit.question":"မေးခွန်း", "faq.edit.answer":"အဖြေ", "faq.edit.sn":"S/N", - "faq.edit.delete.confirm":"Delete this FAQ?", + "faq.edit.delete.confirm":"မေးခွန်းကို ဖျက်မလား?", "faq.edit.page":"Additional Page", "faq.edit.page.label":"Page label", "faq.edit.page.label.eng":"Page label in English", @@ -94,7 +94,7 @@ "Home Start ================================================================":"", "home.invitation.request.msg":"ဖိတ်ကြားမှု တောင်းဆိုသည်ကို လုပ်ဆောင်နေပါသည်!", - "home.search":"Tracking number ရိုက်ထဲ့ပါ", + "home.search":"Tracking number ရိုက်ထည့်ပါ", "home.search.btn":"ရှာမည်", "Home End ================================================================":"", @@ -123,6 +123,8 @@ "customer.status":"အခြေအနေ", "customer.fcs.id":"FCS ID", "customer.invitation.request.confirm":"လက်ခံ လိုက်ပါ", + "customer.disable.btn":"ပိတ်ပါ", + "customer.enable.btn":"ဖွင့်ပါ", "Customer End ================================================================":"", "Invitation Start ================================================================":"", @@ -367,8 +369,8 @@ "rate.custom_duty":"အကောက်ခွန်", "rate.cargo.type":"ကုန်ပစ္စည်းအမျိုးအစား", "rate.discount_by_weight":"အထူးလျှော့စျေး", - "rate.discount_by_weight.edit.delete.confirm":"Delete this discount by weight?", - "rate.custom.edit.delete.confirm":"Delete this custom duty?", + "rate.discount_by_weight.edit.delete.confirm":"လျှော့စျေးနှုန်းကို ဖျက်မလား?", + "rate.custom.edit.delete.confirm":"အကောက်ခွန်ကို ဖျက်မလား?", "Rate End ================================================================":"", "Cargo Start ================================================================":"", @@ -377,6 +379,7 @@ "cargo.weight":"အလေးချိန်", "cargo.rate":"စျေးနှုန်း", "cargo.amount":"ပမာဏ", + "cargo.edit.delete.confirm":"ကုန်ပစ္စည်းကို ဖျက်မလား?", "Cargo End ================================================================":"", "Invoices Start ================================================================":"", @@ -432,7 +435,7 @@ "discount.name":"ဝယ်ယူသူအမည်", "discount.amount":"ပမာဏ", "discount.status":"အခြေအနေ", - "discount.edit.delete.confirm":"Delete this discount?", + "discount.edit.delete.confirm":"လျှော့စျေးကို ဖျက်မလား?", "Discount End ================================================================":"", "delivery_addresses Start ================================================================":"", diff --git a/lib/data/provider/auth_fb.dart b/lib/data/provider/auth_fb.dart index 4b5a0d0..1eaa500 100644 --- a/lib/data/provider/auth_fb.dart +++ b/lib/data/provider/auth_fb.dart @@ -8,6 +8,7 @@ import 'package:fcs/domain/entities/setting.dart'; import 'package:fcs/domain/entities/user.dart'; import 'package:fcs/domain/exceiptions/signin_exception.dart'; import 'package:fcs/helpers/api_helper.dart'; +import 'package:fcs/helpers/firebase_helper.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:logging/logging.dart'; @@ -113,12 +114,11 @@ class AuthFb { Future _addUserToStream({bool refreshIdToken = false}) async { FirebaseUser firebaseUser = await _fb.currentUser(); if (firebaseUser == null) return null; - IdTokenResult idToken = - await firebaseUser.getIdToken(refresh: refreshIdToken); + Map claims = await getClaims(refreshIdToken: refreshIdToken); - log.info("Claims:${idToken.claims}"); + log.info("Claims:$claims"); - String cid = idToken.claims["cid"]; + String cid = claims["cid"]; User user; if (cid != null && cid != "") { user = await _getUserFromFirestore(cid); @@ -129,7 +129,7 @@ class AuthFb { } // add privileges - String privileges = idToken.claims["pr"]; + String privileges = claims["pr"]; if (privileges != null && privileges != "") { user.privileges = privileges.split(":").toList(); } else { @@ -194,12 +194,6 @@ class AuthFb { payload: {"preferred_currency": currency}, token: await getToken()); } - Future getToken() async { - FirebaseUser firebaseUser = await _fb.currentUser(); - IdTokenResult token = await firebaseUser.getIdToken(); - return token.token; - } - Stream settings() async* { Stream snapshot = Firestore.instance .collection(config_collection) @@ -215,8 +209,8 @@ class AuthFb { Future _getCurrentUserID() async { FirebaseUser firebaseUser = await _fb.currentUser(); if (firebaseUser == null) return null; - IdTokenResult idToken = await firebaseUser.getIdToken(); - String cid = idToken.claims["cid"]; + Map claims = await getClaims(); + String cid = claims["cid"]; return cid; } @@ -239,14 +233,17 @@ class AuthFb { userListener.cancel(); return; } - // get privilege from claim - IdTokenResult idToken = await firebaseUser.getIdToken(refresh: true); - String privileges = idToken.claims["pr"]; - if (privileges != null && privileges != "") { - user.privileges = privileges.split(":").toList(); + try { + // get privilege from claim + IdTokenResult idToken = await firebaseUser.getIdToken(refresh: true); + String privileges = idToken.claims["pr"]; + if (privileges != null && privileges != "") { + user.privileges = privileges.split(":").toList(); + } + controller.add(user); + } catch (e) { + controller.add(null); } - - controller.add(user); }); } diff --git a/lib/data/provider/user_data_provider.dart b/lib/data/provider/user_data_provider.dart index 4fd934c..99ec833 100644 --- a/lib/data/provider/user_data_provider.dart +++ b/lib/data/provider/user_data_provider.dart @@ -80,4 +80,9 @@ class UserDataProvider { } return users; } + + Future enableUser(String userID, bool enabled) async { + return await requestAPI("/enable_user", "PUT", + payload: {"id": userID, "enabled": enabled}, token: await getToken()); + } } diff --git a/lib/data/services/auth_imp.dart b/lib/data/services/auth_imp.dart index bcf6f06..05b36ec 100644 --- a/lib/data/services/auth_imp.dart +++ b/lib/data/services/auth_imp.dart @@ -51,11 +51,6 @@ class AuthServiceImp implements AuthService { return authFb.joinInvite(userName); } - @override - Future getToken() { - return authFb.getToken(); - } - @override Future hasInvite() { return authFb.hasInvite(); diff --git a/lib/data/services/auth_service.dart b/lib/data/services/auth_service.dart index f97d63e..dad8ce7 100644 --- a/lib/data/services/auth_service.dart +++ b/lib/data/services/auth_service.dart @@ -13,5 +13,4 @@ abstract class AuthService { Future hasInvite(); Stream getUserStream(); Stream getSetting(); - Future getToken(); } diff --git a/lib/data/services/user_imp.dart b/lib/data/services/user_imp.dart index 7d99ac7..d3b7685 100644 --- a/lib/data/services/user_imp.dart +++ b/lib/data/services/user_imp.dart @@ -48,4 +48,9 @@ class UserServiceImp implements UserService { Future uploadMsgToken(String token) { return userDataProvider.uploadMsgToken(token); } + + @override + Future enableUser(String userID, bool enabled) { + return userDataProvider.enableUser(userID, enabled); + } } diff --git a/lib/data/services/user_service.dart b/lib/data/services/user_service.dart index 2b4b953..168193d 100644 --- a/lib/data/services/user_service.dart +++ b/lib/data/services/user_service.dart @@ -8,4 +8,5 @@ abstract class UserService { Future> searchUser(String term); Future uploadMsgToken(String token); Future removeMsgToken(String token); + Future enableUser(String userID, bool enabled); } diff --git a/lib/domain/constants.dart b/lib/domain/constants.dart index 7d6d5ea..cf98d14 100644 --- a/lib/domain/constants.dart +++ b/lib/domain/constants.dart @@ -20,6 +20,8 @@ const rate_doc_id = "rate"; const user_requested_status = "requested"; const user_invited_status = "invited"; +const user_disabled_status = "disabled"; +const user_joined_status = "joined"; const pkg_files_path = "/packages"; diff --git a/lib/domain/entities/user.dart b/lib/domain/entities/user.dart index d3f6eb0..6ada508 100644 --- a/lib/domain/entities/user.dart +++ b/lib/domain/entities/user.dart @@ -1,5 +1,4 @@ import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:fcs/helpers/const.dart'; import 'package:flutter/foundation.dart'; import 'package:intl/intl.dart'; @@ -53,9 +52,11 @@ class User { String get phone => phoneNumber != null && phoneNumber.startsWith("959") ? "0${phoneNumber.substring(2)}" : phoneNumber; - bool get joined => status != null && status == userStatusJoined; - bool get invited => status != null && status == userStatusInvited; - bool get requested => status != null && status == userStatusRequested; + bool get joined => status != null && status == user_joined_status; + bool get invited => status != null && status == user_invited_status; + bool get requested => status != null && status == user_requested_status; + bool get disabled => status != null && status == user_disabled_status; + String get share => "Your phone number:$phoneNumber"; User( {this.id, diff --git a/lib/helpers/const.dart b/lib/helpers/const.dart deleted file mode 100644 index f558a5e..0000000 --- a/lib/helpers/const.dart +++ /dev/null @@ -1,3 +0,0 @@ -const userStatusInvited = "invited"; -const userStatusJoined = "joined"; -const userStatusRequested = "requested"; diff --git a/lib/helpers/firebase_helper.dart b/lib/helpers/firebase_helper.dart index 3a04030..2febc03 100644 --- a/lib/helpers/firebase_helper.dart +++ b/lib/helpers/firebase_helper.dart @@ -15,6 +15,14 @@ Future getToken() async { return token.token; } +Future getClaims({bool refreshIdToken = false}) async { + FirebaseUser firebaseUser = await auth.currentUser(); + if (firebaseUser == null) return null; + IdTokenResult idToken = + await firebaseUser.getIdToken(refresh: refreshIdToken); + return idToken.claims; +} + Future uploadStorage(String path, File file, {String fileName}) async { if (fileName == null) { fileName = Uuid().v4(); diff --git a/lib/pages/buying_instruction/buying_online.dart b/lib/pages/buying_instruction/buying_online.dart index fbbbc00..fc7efce 100644 --- a/lib/pages/buying_instruction/buying_online.dart +++ b/lib/pages/buying_instruction/buying_online.dart @@ -29,7 +29,7 @@ class _BuyingOnlinePagetate extends State final phoneNumberBox = DisplayText( text: mainModel.user.phone, - labelTextKey: getLocalString(context, "contact.phone"), + labelTextKey: "contact.phone", iconData: Icons.location_on, ); final nameBox = Center( @@ -39,12 +39,12 @@ class _BuyingOnlinePagetate extends State )); final fcsIdBox = DisplayText( text: mainModel.user.fcsID, - labelTextKey: getLocalString(context, "customer.fcs.id"), + labelTextKey: "customer.fcs.id", icon: FcsIDIcon(), ); final shippingAddressBox = DisplayText( text: mainModel.setting.usaAddress, - labelTextKey: getLocalString(context, "profile.usa.shipping.address"), + labelTextKey: "profile.usa.shipping.address", iconData: Icons.location_on, ); final instructionBox = Container( diff --git a/lib/pages/contact/model/contact_model.dart b/lib/pages/contact/model/contact_model.dart index 478bd35..25e2c54 100644 --- a/lib/pages/contact/model/contact_model.dart +++ b/lib/pages/contact/model/contact_model.dart @@ -1,7 +1,7 @@ import 'dart:async'; -import 'package:fcs/data/services/services.dart'; import 'package:fcs/domain/vo/contact.dart'; +import 'package:fcs/helpers/firebase_helper.dart'; import 'package:fcs/pages/main/model/base_model.dart'; import 'package:logging/logging.dart'; @@ -10,8 +10,7 @@ class ContactModel extends BaseModel { Future saveContact(Contact contact) async { await request("/contact", "PUT", - payload: contact.toMap(), - token: await Services.instance.authService.getToken()); + payload: contact.toMap(), token: await getToken()); notifyListeners(); } } diff --git a/lib/pages/customer/customer_editor.dart b/lib/pages/customer/customer_editor.dart index 141866c..e3df283 100644 --- a/lib/pages/customer/customer_editor.dart +++ b/lib/pages/customer/customer_editor.dart @@ -1,9 +1,11 @@ +import 'package:fcs/domain/constants.dart'; import 'package:fcs/domain/entities/user.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/pages/customer/model/customer_model.dart'; import 'package:fcs/pages/main/util.dart'; import 'package:fcs/pages/widgets/display_text.dart'; import 'package:fcs/pages/widgets/fcs_id_icon.dart'; +import 'package:fcs/pages/widgets/local_button.dart'; import 'package:fcs/pages/widgets/progress.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -42,6 +44,13 @@ class _CustomerEditorState extends State { ], ); + final enabled = widget.customer.status != user_disabled_status; + final enableBox = LocalButton( + textKey: enabled ? "customer.disable.btn" : "customer.enable.btn", + iconData: enabled ? Icons.lock : Icons.lock_open, + color: enabled ? primaryColor : Colors.grey, + callBack: () => _enable(!enabled), + ); return LocalProgress( inAsyncCall: _isLoading, child: SafeArea( @@ -52,7 +61,7 @@ class _CustomerEditorState extends State { centerTitle: true, leading: new IconButton( icon: new Icon( - CupertinoIcons.back, + CupertinoIcons.back, color: primaryColor, size: 30, ), @@ -90,6 +99,9 @@ class _CustomerEditorState extends State { getLocalString( context, "customer.invitation.request.confirm"), callack: _add) + : Container(), + widget.customer.joined || widget.customer.disabled + ? enableBox : Container() ], ), @@ -118,4 +130,23 @@ class _CustomerEditorState extends State { } }); } + + _enable(bool enabled) async { + setState(() { + _isLoading = true; + }); + if (widget.customer == null) return; + CustomerModel customerModel = + Provider.of(context, listen: false); + try { + await customerModel.enableUser(widget.customer, enabled); + Navigator.pop(context); + } catch (e) { + showMsgDialog(context, "Error", e.toString()); + } finally { + setState(() { + _isLoading = false; + }); + } + } } diff --git a/lib/pages/customer/customer_list.dart b/lib/pages/customer/customer_list.dart index d3dcefa..4e706df 100644 --- a/lib/pages/customer/customer_list.dart +++ b/lib/pages/customer/customer_list.dart @@ -7,12 +7,10 @@ import 'package:fcs/pages/customer/customer_editor.dart'; import 'package:fcs/pages/customer/model/customer_model.dart'; import 'package:fcs/pages/main/model/main_model.dart'; import 'package:fcs/pages/user_search/user_serach.dart'; -import 'package:fcs/pages/widgets/bottom_up_page_route.dart'; import 'package:fcs/pages/widgets/local_text.dart'; import 'package:fcs/pages/widgets/progress.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_icons/flutter_icons.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import 'package:share/share.dart'; @@ -59,7 +57,8 @@ class _CustomerListState extends State { ), floatingActionButton: FloatingActionButton.extended( onPressed: () { - Navigator.of(context).push(CupertinoPageRoute(builder: (context) => InvitationCreate())); + Navigator.of(context).push( + CupertinoPageRoute(builder: (context) => InvitationCreate())); }, icon: Icon(Icons.add), label: LocalText(context, "invitation.new", color: Colors.white), @@ -147,6 +146,26 @@ class _CustomerListState extends State { ), ), ), + customer.status == user_invited_status + ? Padding( + padding: const EdgeInsets.only(right: 8.0), + child: FlatButton( + onPressed: () => _share(customer), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(18.0), + side: BorderSide(color: primaryColor)), + child: Row( + children: [ + Text( + "Share", + style: TextStyle(fontSize: 12), + ), + Icon(Icons.share, color: primaryColor), + ], + ), + ), + ) + : Container(), Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ @@ -159,23 +178,6 @@ class _CustomerListState extends State { child: Text(customer.getLastMessageTime), ), getCount(customer), - customer.status == user_invited_status - ? FlatButton( - onPressed: () => _share(customer), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(18.0), - side: BorderSide(color: primaryColor)), - child: Row( - children: [ - Text( - "Share", - style: TextStyle(fontSize: 12), - ), - Icon(Icons.share, color: primaryColor), - ], - ), - ) - : Container(), ], ), ], @@ -197,14 +199,14 @@ class _CustomerListState extends State { } Widget _status(String status) { - return user_requested_status == status + return user_requested_status == status || user_disabled_status == status ? Text(status, style: TextStyle(color: primaryColor, fontSize: 14)) : Container(); } _select(User customer) { - Navigator.of(context) - .push(CupertinoPageRoute(builder: (context) => CustomerEditor(customer: customer))); + Navigator.of(context).push(CupertinoPageRoute( + builder: (context) => CustomerEditor(customer: customer))); } _gotoMsg(User customer) { @@ -212,11 +214,12 @@ class _CustomerListState extends State { Provider.of(context, listen: false); messageModel.initQuery(customer.id); Navigator.of(context) - .push(CupertinoPageRoute(builder: (context) => MessageDetail( - receiverID: customer.id, - receiverName: customer.name, - messageModel: messageModel, - ))) + .push(CupertinoPageRoute( + builder: (context) => MessageDetail( + receiverID: customer.id, + receiverName: customer.name, + messageModel: messageModel, + ))) .then((value) { if (customer.fcsUnseenCount > 0) { messageModel.seenMessages(customer.id, false); diff --git a/lib/pages/customer/model/customer_model.dart b/lib/pages/customer/model/customer_model.dart index 39ef6fc..dcf2acd 100644 --- a/lib/pages/customer/model/customer_model.dart +++ b/lib/pages/customer/model/customer_model.dart @@ -95,4 +95,8 @@ class CustomerModel extends BaseModel { var snap = await Firestore.instance.collection(path).document(id).get(); return User.fromMap(snap.data, snap.documentID); } + + Future enableUser(User user, bool enabled) { + return Services.instance.userService.enableUser(user.id, enabled); + } } diff --git a/lib/pages/faq/faq_edit_page.dart b/lib/pages/faq/faq_edit_page.dart index b43d7ff..69eb9be 100644 --- a/lib/pages/faq/faq_edit_page.dart +++ b/lib/pages/faq/faq_edit_page.dart @@ -135,7 +135,10 @@ class _FAQEditorState extends State { color: primaryColor, fontSize: 20), actions: [ IconButton( - icon: Icon(Icons.delete), + icon: Icon( + Icons.delete, + color: primaryColor, + ), onPressed: _delete, ) ], @@ -176,80 +179,6 @@ class _FAQEditorState extends State { ), ), ))); - - LocalProgress( - inAsyncCall: _isLoading, - child: Scaffold( - body: CustomScrollView(slivers: [ - SliverAppBar( - leading: IconButton( - icon: Icon( - CupertinoIcons.back, - size: 30, - ), - onPressed: () => Navigator.of(context).pop(), - ), - backgroundColor: primaryColor, - expandedHeight: 150.0, - floating: true, - pinned: true, - flexibleSpace: FlexibleSpaceBar( - centerTitle: true, - titlePadding: EdgeInsets.symmetric(vertical: 10), - title: LocalText( - context, - _isNew ? 'faq.add.title' : 'faq.edit.title', - fontSize: 20, - color: Colors.white, - )), - actions: [ - IconButton( - icon: Icon(Icons.delete), - onPressed: _delete, - ) - ], - ), - SliverList( - delegate: SliverChildListDelegate([ - Form( - key: _formKey, - child: Padding( - padding: EdgeInsets.only(left: 24.0, right: 24.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - snBox, - Center(child: itemTitle(context, "faq.edit.eng")), - subItemTitle(context, "faq.edit.question", - iconData: SimpleLineIcons.question), - questionEngBox, - subItemTitle(context, "faq.edit.answer", - iconData: MaterialCommunityIcons.message_reply_text), - answerEngBox, - Divider(), - Center(child: itemTitle(context, "faq.edit.mm")), - subItemTitle(context, "faq.edit.question", - iconData: SimpleLineIcons.question), - questionMmBox, - subItemTitle(context, "faq.edit.answer", - iconData: MaterialCommunityIcons.message_reply_text), - answerMmBox, - Divider(), - Center(child: itemTitle(context, "faq.edit.page")), - pageLinkBox, - pageLabelEngBox, - pageLabelMmBox, - fcsButton(context, getLocalString(context, "btn.save"), - callack: _save), - SizedBox( - height: 20, - ) - ], - ), - ), - ), - ])) - ]))); } _save() async { diff --git a/lib/pages/faq/model/faq_model.dart b/lib/pages/faq/model/faq_model.dart index 2cd98d8..ece61b7 100644 --- a/lib/pages/faq/model/faq_model.dart +++ b/lib/pages/faq/model/faq_model.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:fcs/data/services/services.dart'; import 'package:fcs/domain/entities/faq.dart'; +import 'package:fcs/helpers/firebase_helper.dart'; import 'package:fcs/pages/main/model/base_model.dart'; import 'package:logging/logging.dart'; @@ -38,19 +38,16 @@ class FAQModel extends BaseModel { Future addFAQ(FAQ faq) async { await request("/faqs", "POST", - payload: faq.toMap(), - token: await Services.instance.authService.getToken()); + payload: faq.toMap(), token: await getToken()); } Future updateFAQ(FAQ faq) async { await request("/faqs", "PUT", - payload: faq.toMap(), - token: await Services.instance.authService.getToken()); + payload: faq.toMap(), token: await getToken()); } Future deleteFAQ(FAQ faq) async { await request("/faqs", "DELETE", - payload: faq.toMap(), - token: await Services.instance.authService.getToken()); + payload: faq.toMap(), token: await getToken()); } } diff --git a/lib/pages/invoice/payment_pdf_screen.dart b/lib/pages/invoice/payment_pdf_screen.dart index bafb0d9..e42bbb2 100644 --- a/lib/pages/invoice/payment_pdf_screen.dart +++ b/lib/pages/invoice/payment_pdf_screen.dart @@ -1,18 +1,15 @@ import 'dart:async'; import 'dart:io'; -import 'package:dio/dio.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/pages/main/model/main_model.dart'; import 'package:fcs/pages/widgets/local_text.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_pdfview/flutter_pdfview.dart'; -import 'package:image_downloader/image_downloader.dart'; -import 'package:path_provider/path_provider.dart'; +import 'package:http/http.dart' as http; import 'package:provider/provider.dart'; import 'package:share/share.dart'; -import 'package:http/http.dart' as http; class PaymentPDFScreen extends StatefulWidget { final String path; diff --git a/lib/pages/main/home_page.dart b/lib/pages/main/home_page.dart index 9993ab4..d2562bc 100644 --- a/lib/pages/main/home_page.dart +++ b/lib/pages/main/home_page.dart @@ -205,6 +205,8 @@ class _HomePageState extends State { Widget build(BuildContext context) { User user = Provider.of(context).user; if (user == null) { + Future.microtask( + () => Navigator.pushNamedAndRemoveUntil(context, "/", (r) => false)); return Container(); } @@ -313,25 +315,27 @@ class _HomePageState extends State { CupertinoPageRoute(builder: (context) => DeliverList()))); List widgets = []; - widgets.add(notiBtn); - widgets.add(packagesBtn); - widgets.add(shipmentBtn); - widgets.add(invoicesBtn); - widgets.add(faqBtn); - List widgetsFcs = []; - if (user.hasPackages()) widgetsFcs.add(packagesBtnFcs); - if (user.hasShipment()) widgetsFcs.add(shipmentBtnFcs); - if (user.hasInvoices()) widgetsFcs.add(invoicesBtnFcs); + widgets.add(notiBtn); + if (user.joined) { + widgets.add(packagesBtn); + widgets.add(shipmentBtn); + widgets.add(invoicesBtn); - if (user.hasFcsShipments()) widgetsFcs.add(fcsShipmentBtn); - if (user.hasReceiving()) widgetsFcs.add(receivingBtn); - if (user.hasProcessing()) widgetsFcs.add(processingBtn); - if (user.hasCarton()) widgetsFcs.add(cartonBtn); - if (user.hasDeliveries()) widgetsFcs.add(deliveryBtn); - if (user.hasCustomers()) widgetsFcs.add(customersBtn); - if (user.hasAdmin()) widgetsFcs.add(discountBtn); - if (user.hasStaffs()) widgetsFcs.add(staffBtn); + if (user.hasPackages()) widgetsFcs.add(packagesBtnFcs); + if (user.hasShipment()) widgetsFcs.add(shipmentBtnFcs); + if (user.hasInvoices()) widgetsFcs.add(invoicesBtnFcs); + + if (user.hasFcsShipments()) widgetsFcs.add(fcsShipmentBtn); + if (user.hasReceiving()) widgetsFcs.add(receivingBtn); + if (user.hasProcessing()) widgetsFcs.add(processingBtn); + if (user.hasCarton()) widgetsFcs.add(cartonBtn); + if (user.hasDeliveries()) widgetsFcs.add(deliveryBtn); + if (user.hasCustomers()) widgetsFcs.add(customersBtn); + if (user.hasAdmin()) widgetsFcs.add(discountBtn); + if (user.hasStaffs()) widgetsFcs.add(staffBtn); + } + widgets.add(faqBtn); final fcsToggle = ToggleButtons( selectedColor: Colors.white, diff --git a/lib/pages/main/welcome_page.dart b/lib/pages/main/welcome_page.dart index 1e3c769..df39162 100644 --- a/lib/pages/main/welcome_page.dart +++ b/lib/pages/main/welcome_page.dart @@ -10,7 +10,6 @@ import 'package:provider/provider.dart'; import '../../helpers/theme.dart'; import '../signin/signin_page.dart'; import '../widgets/banner.dart'; -import '../widgets/bottom_up_page_route.dart'; import '../widgets/offline_redirect.dart'; final msgLog = Logger('backgroundMessageHandler'); diff --git a/lib/pages/payment_methods/payment_method_page.dart b/lib/pages/payment_methods/payment_method_page.dart index 7598793..b03e94a 100644 --- a/lib/pages/payment_methods/payment_method_page.dart +++ b/lib/pages/payment_methods/payment_method_page.dart @@ -135,7 +135,7 @@ class _PaymentMethodPageState extends State { Expanded( child: DisplayText( text: text, - labelTextKey: getLocalString(context, labelKey), + labelTextKey: labelKey, iconData: iconData, ), ), diff --git a/lib/pages/rates/cargo_editor.dart b/lib/pages/rates/cargo_editor.dart index 62733d2..a570b1d 100644 --- a/lib/pages/rates/cargo_editor.dart +++ b/lib/pages/rates/cargo_editor.dart @@ -120,8 +120,7 @@ class _CargoEditorState extends State { } _delete() { - showConfirmDialog( - context, "cargo_type.edit.delete.confirm", _deleteCargoType); + showConfirmDialog(context, "cargo.edit.delete.confirm", _deleteCargoType); } _deleteCargoType() async { diff --git a/lib/pages/rates/custom_editor.dart b/lib/pages/rates/custom_editor.dart index 2b07eb2..747716d 100644 --- a/lib/pages/rates/custom_editor.dart +++ b/lib/pages/rates/custom_editor.dart @@ -126,7 +126,8 @@ class _CustomEditorState extends State { } _delete() { - showConfirmDialog(context, "cargo.edit.delete.confirm", _deleteCustomDuty); + showConfirmDialog( + context, "rate.custom.edit.delete.confirm", _deleteCustomDuty); } _deleteCustomDuty() async { diff --git a/lib/pages/rates/shipment_rates.dart b/lib/pages/rates/shipment_rates.dart index abffd93..460b55a 100644 --- a/lib/pages/rates/shipment_rates.dart +++ b/lib/pages/rates/shipment_rates.dart @@ -77,7 +77,8 @@ class _ShipmentRatesState extends State { child: ListView( // crossAxisAlignment: CrossAxisAlignment.center, children: [ - fcsButton(context, getLocalString(context, "rate.cal.title"), callack: () { + fcsButton(context, getLocalString(context, "rate.cal.title"), + callack: () { Navigator.of(context).push(CupertinoPageRoute( builder: (context) => ShipmentRatesCal())); }), @@ -93,12 +94,14 @@ class _ShipmentRatesState extends State { fontWeight: FontWeight.bold, fontSize: 15), Spacer(), - IconButton( - icon: Icon(Icons.edit, color: primaryColor), - onPressed: () { - Navigator.of(context).push(CupertinoPageRoute( - builder: (context) => CargoTypeList())); - }) + isEditable + ? IconButton( + icon: Icon(Icons.edit, color: primaryColor), + onPressed: () { + Navigator.of(context).push(CupertinoPageRoute( + builder: (context) => CargoTypeList())); + }) + : Container() ], ), ), @@ -117,12 +120,15 @@ class _ShipmentRatesState extends State { fontWeight: FontWeight.bold, fontSize: 15), Spacer(), - IconButton( - icon: Icon(Icons.edit, color: primaryColor), - onPressed: () { - Navigator.of(context).push(CupertinoPageRoute( - builder: (context) => DiscountByWeightList())); - }) + isEditable + ? IconButton( + icon: Icon(Icons.edit, color: primaryColor), + onPressed: () { + Navigator.of(context).push(CupertinoPageRoute( + builder: (context) => + DiscountByWeightList())); + }) + : Container() ], ), ), @@ -151,12 +157,14 @@ class _ShipmentRatesState extends State { fontWeight: FontWeight.bold, fontSize: 15), Spacer(), - IconButton( - icon: Icon(Icons.edit, color: primaryColor), - onPressed: () { - Navigator.of(context).push(CupertinoPageRoute( - builder: (context) => CustomList())); - }) + isEditable + ? IconButton( + icon: Icon(Icons.edit, color: primaryColor), + onPressed: () { + Navigator.of(context).push(CupertinoPageRoute( + builder: (context) => CustomList())); + }) + : Container() ], ), ), diff --git a/lib/pages/term/model/term_model.dart b/lib/pages/term/model/term_model.dart index 9c4877b..0ee4185 100644 --- a/lib/pages/term/model/term_model.dart +++ b/lib/pages/term/model/term_model.dart @@ -1,7 +1,7 @@ import 'dart:async'; -import 'package:fcs/data/services/services.dart'; import 'package:fcs/domain/vo/term.dart'; +import 'package:fcs/helpers/firebase_helper.dart'; import 'package:fcs/pages/main/model/base_model.dart'; import 'package:logging/logging.dart'; @@ -10,7 +10,6 @@ class TermModel extends BaseModel { Future saveTerm(Term term) async { await request("/terms", "PUT", - payload: term.toMap(), - token: await Services.instance.authService.getToken()); + payload: term.toMap(), token: await getToken()); } } diff --git a/lib/pages/widgets/local_button.dart b/lib/pages/widgets/local_button.dart index d37e4ed..e7d4edf 100644 --- a/lib/pages/widgets/local_button.dart +++ b/lib/pages/widgets/local_button.dart @@ -9,8 +9,14 @@ class LocalButton extends StatelessWidget { final CallBack callBack; final IconData iconData; final String textKey; + final Color color; - const LocalButton({Key key, this.callBack, this.iconData, this.textKey}) + const LocalButton( + {Key key, + this.callBack, + this.iconData, + this.textKey, + this.color = primaryColor}) : super(key: key); @override @@ -20,7 +26,7 @@ class LocalButton extends StatelessWidget { child: Container( height: 45.0, decoration: BoxDecoration( - color: primaryColor, + color: color, shape: BoxShape.rectangle, ), child: ButtonTheme(