From 045d27945b60d937f1b57abdb3cc4bfa4179d664 Mon Sep 17 00:00:00 2001 From: sainw Date: Tue, 5 Jan 2021 18:03:51 +0630 Subject: [PATCH] b+8 --- assets/local/localization_en.json | 2 +- lib/config.dart | 6 +- lib/domain/entities/package.dart | 1 + lib/helpers/firebase_helper.dart | 5 +- lib/main-dev.dart | 1 + lib/main-local.dart | 5 +- lib/main-prod.dart | 1 + lib/pages/package/package_info.dart | 33 +++--- lib/pages/processing/package_editor.dart | 27 +++-- lib/pages/processing/processing_editor.dart | 110 +++++++------------- pubspec.yaml | 2 +- 11 files changed, 90 insertions(+), 103 deletions(-) diff --git a/assets/local/localization_en.json b/assets/local/localization_en.json index 624a6cc..94d7a24 100644 --- a/assets/local/localization_en.json +++ b/assets/local/localization_en.json @@ -560,7 +560,7 @@ "processing.create":"New Processing", "processing.update":"Update Processing", "processing.consignee.name":"Consignee name", - "processing.shipper.name":"Shipper name", + "processing.shipper.name":"Sender name", "processing.package.select.btn":"Select", "processing.package.create":"New Package", "processing.package.update":"Update Package", diff --git a/lib/config.dart b/lib/config.dart index ca00137..41fa63f 100644 --- a/lib/config.dart +++ b/lib/config.dart @@ -14,16 +14,18 @@ class Config { final String reportURL; final Level level; final String reportProjectID; + final String bucketName; factory Config( {@required Flavor flavor, @required String apiURL, @required String reportURL, @required String reportProjectID, + @required String bucketName, Color color: Colors.blue, Level level: Level.SEVERE}) { _instance ??= Config._internal(flavor, FlavorNames[flavor.index], color, - apiURL, reportURL, level, reportProjectID); + apiURL, reportURL, level, reportProjectID, bucketName); Logger.root.level = level; Logger.root.onRecord.listen((record) { @@ -35,7 +37,7 @@ class Config { } Config._internal(this.flavor, this.name, this.color, this.apiURL, - this.reportURL, this.level, this.reportProjectID); + this.reportURL, this.level, this.reportProjectID, this.bucketName); static Config get instance { return _instance; diff --git a/lib/domain/entities/package.dart b/lib/domain/entities/package.dart index 65ae83a..5365350 100644 --- a/lib/domain/entities/package.dart +++ b/lib/domain/entities/package.dart @@ -115,6 +115,7 @@ class Package { 'tracking_id': trackingID, 'market': market, 'fcs_id': fcsID, + 'sender_fcs_id': senderFCSID, "desc": desc, "remark": remark, "photo_urls": photoUrls diff --git a/lib/helpers/firebase_helper.dart b/lib/helpers/firebase_helper.dart index f6d95c5..9716458 100644 --- a/lib/helpers/firebase_helper.dart +++ b/lib/helpers/firebase_helper.dart @@ -1,5 +1,6 @@ import 'dart:io'; +import 'package:fcs/config.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_storage/firebase_storage.dart'; import 'package:logging/logging.dart'; @@ -39,7 +40,9 @@ Future uploadStorage(String path, File file, {String fileName}) async { fileName = Uuid().v4(); } StorageReference storageReference = - FirebaseStorage.instance.ref().child('$path/$fileName'); + FirebaseStorage(storageBucket: Config.instance.bucketName) + .ref() + .child('$path/$fileName'); StorageUploadTask uploadTask = storageReference.putFile(file); await uploadTask.onComplete; String downloadUrl = await storageReference.getDownloadURL(); diff --git a/lib/main-dev.dart b/lib/main-dev.dart index fc234be..7ad6513 100644 --- a/lib/main-dev.dart +++ b/lib/main-dev.dart @@ -12,6 +12,7 @@ void main() { apiURL: "https://asia-northeast1-fcs-dev1.cloudfunctions.net/API", reportURL: "http://petrok.mokkon.com:8091", reportProjectID: "fcs-dev", + bucketName: "gs://fcs-dev1-us", level: Level.ALL); runApp(App()); } diff --git a/lib/main-local.dart b/lib/main-local.dart index 6f30bf4..a46ddde 100644 --- a/lib/main-local.dart +++ b/lib/main-local.dart @@ -9,9 +9,10 @@ void main() { Config( flavor: Flavor.DEV, color: Colors.blue, - reportURL: "http://192.168.100.11:8080", + reportURL: "http://petrok.mokkon.com:8091", reportProjectID: "fcs-dev", - apiURL: "http://192.168.100.11:7777", + apiURL: "http://192.168.1.155:7777", + bucketName: "gs://fcs-dev1-us", level: Level.ALL); runApp(App()); } diff --git a/lib/main-prod.dart b/lib/main-prod.dart index c0c431a..86c3693 100644 --- a/lib/main-prod.dart +++ b/lib/main-prod.dart @@ -12,6 +12,7 @@ void main() { apiURL: "https://asia-northeast1-fcs-prod1.cloudfunctions.net/API", reportURL: "http://petrok.mokkon.com:8092", reportProjectID: "fcs-prod", + bucketName: "gs://fcs-prod1", level: Level.ALL); runApp(App()); } diff --git a/lib/pages/package/package_info.dart b/lib/pages/package/package_info.dart index 7380cd8..5d18dda 100644 --- a/lib/pages/package/package_info.dart +++ b/lib/pages/package/package_info.dart @@ -48,7 +48,10 @@ class _PackageInfoState extends State { initPackage(widget.package); } - initPackage(Package package) { + initPackage(Package pkg) async { + PackageModel packageModel = + Provider.of(context, listen: false); + Package package = await packageModel.getPackageByTrackingID(pkg.trackingID); setState(() { _package = package; multiImgController.setImageUrls = package.photoUrls; @@ -63,38 +66,38 @@ class _PackageInfoState extends State { @override Widget build(BuildContext context) { String id = Provider.of(context).user.id; - bool owner = _package.userID == id; + bool owner = _package?.userID == id; bool canChangeDeliveryAddress = - _package.status == package_received_status || - _package.status == package_processed_status; + _package?.status == package_received_status || + _package?.status == package_processed_status; final trackingIdBox = DisplayText( - text: _package.trackingID, + text: _package?.trackingID??"", labelTextKey: "package.tracking.id", iconData: MaterialCommunityIcons.barcode_scan, ); var fcsIDBox = DisplayText( - text: _package.fcsID, + text: _package?.fcsID??"", labelTextKey: "processing.fcs.id", icon: FcsIDIcon(), ); final customerNameBox = DisplayText( - text: _package.userName, + text: _package?.userName??"", labelTextKey: "package.create.name", iconData: Icons.perm_identity, ); final marketBox = DisplayText( - text: _package.market ?? "-", + text: _package?.market ?? "-", labelTextKey: "package.create.market", iconData: Icons.store, ); final descBox = DisplayText( - text: _package.desc ?? "-", + text: _package?.desc ?? "-", labelTextKey: "package.edit.desc", iconData: MaterialCommunityIcons.message_text_outline, ); final remarkBox = DisplayText( - text: _package.remark ?? "-", + text: _package?.remark ?? "-", labelTextKey: "package.edit.remark", iconData: Entypo.new_message, ); @@ -109,7 +112,7 @@ class _PackageInfoState extends State { callBack: _return, ); final deliveryAddressBox = DefaultDeliveryAddress( - deliveryAddress: _package.deliveryAddress, + deliveryAddress: _package?.deliveryAddress, labelKey: "package.delivery.address", onTap: owner && canChangeDeliveryAddress ? () async { @@ -155,10 +158,10 @@ class _PackageInfoState extends State { widget.isSearchResult ? Container() : fcsIDBox, widget.isSearchResult ? Container() : customerNameBox, widget.isSearchResult ? Container() : marketBox, - _package.photoUrls.length == 0 ? Container() : img, + _package==null || _package.photoUrls.length == 0 ? Container() : img, widget.isSearchResult ? Container() : descBox, remarkBox, - _package.status == package_received_status && + _package?.status == package_received_status && widget.isCustomer ? returnButton : Container(), @@ -166,8 +169,8 @@ class _PackageInfoState extends State { widget.isSearchResult ? Container() : StatusTree( - shipmentHistory: _package.shipmentHistory, - currentStatus: _package.status), + shipmentHistory: _package?.shipmentHistory, + currentStatus: _package?.status), SizedBox( height: 20, ) diff --git a/lib/pages/processing/package_editor.dart b/lib/pages/processing/package_editor.dart index e997eca..4c3d49a 100644 --- a/lib/pages/processing/package_editor.dart +++ b/lib/pages/processing/package_editor.dart @@ -1,8 +1,10 @@ import 'package:fcs/domain/entities/market.dart'; import 'package:fcs/domain/entities/package.dart'; +import 'package:fcs/domain/entities/user.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/pages/market/market_editor.dart'; import 'package:fcs/pages/market/model/market_model.dart'; +import 'package:fcs/pages/package/model/package_model.dart'; import 'package:fcs/pages/package/tracking_id_page.dart'; import 'package:fcs/pages/main/util.dart'; import 'package:fcs/pages/widgets/barcode_scanner.dart'; @@ -19,7 +21,9 @@ import 'package:provider/provider.dart'; class PackageEditor extends StatefulWidget { final Package package; - PackageEditor({this.package}); + final User consignee; + final User sender; + PackageEditor({this.package, this.consignee, this.sender}); @override _PackageEditorState createState() => _PackageEditorState(); @@ -260,17 +264,24 @@ class _PackageEditorState extends State { setState(() { _isLoading = true; }); - + PackageModel packageModel = + Provider.of(context, listen: false); try { - this._package.trackingID = _trackingIDCtl.text; - this._package.market = selectedMarket; - this._package.desc = _descCtl.text; - this._package.remark = _remarkCtl.text; - this._package.photoFiles = _isNew + Package package=await packageModel.getPackageByTrackingID(_trackingIDCtl.text); + package.trackingID = _trackingIDCtl.text; + package.market = selectedMarket; + package.desc = _descCtl.text; + package.remark = _remarkCtl.text; + package.photoFiles = _isNew ? multiImgController.getAddedFile : multiImgController.getUpdatedFile; + package.fcsID=widget.consignee.fcsID; + package.senderFCSID=widget.sender?.fcsID; - Navigator.pop(context, this._package); + await packageModel.updateProcessing(package, + multiImgController.getAddedFile, multiImgController.getDeletedUrl); + + Navigator.pop(context, package); } catch (e) { showMsgDialog(context, "Error", e.toString()); } finally { diff --git a/lib/pages/processing/processing_editor.dart b/lib/pages/processing/processing_editor.dart index 84fd726..dab0ad2 100644 --- a/lib/pages/processing/processing_editor.dart +++ b/lib/pages/processing/processing_editor.dart @@ -3,6 +3,7 @@ import 'package:fcs/domain/entities/processing.dart'; import 'package:fcs/domain/entities/user.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/pages/main/util.dart'; +import 'package:fcs/pages/package/package_info.dart'; import 'package:fcs/pages/user_search/user_serach.dart'; import 'package:fcs/pages/widgets/display_text.dart'; import 'package:fcs/pages/widgets/fcs_id_icon.dart'; @@ -27,8 +28,8 @@ class _ProcesingEditorState extends State { Processing processing = Processing(); bool _isLoading = false; bool _isNew; - User user; - User shipper; + User consignee; + User sender; List packages = []; @override @@ -37,11 +38,11 @@ class _ProcesingEditorState extends State { _isNew = widget.processing == null; if (!_isNew) { processing = widget.processing; - user = User( + consignee = User( fcsID: processing.userID, name: processing.userName, phoneNumber: processing.userPhoneNumber); - shipper = User( + sender = User( fcsID: processing.fcsID, name: processing.shipperName, phoneNumber: processing.shipperPhoneNumber); @@ -55,7 +56,7 @@ class _ProcesingEditorState extends State { children: [ Expanded( child: DisplayText( - text: user != null ? user.fcsID : "", + text: consignee != null ? consignee.fcsID : "", labelTextKey: "processing.fcs.id", icon: FcsIDIcon(), )), @@ -63,21 +64,21 @@ class _ProcesingEditorState extends State { icon: Icon(Icons.search, color: primaryColor), onPressed: () => searchUser(context, callbackUserSelect: (u) { setState(() { - this.user = u; + this.consignee = u; }); })), ], ); final phoneNumberBox = DisplayText( - text: user != null ? user.phoneNumber : "", + text: consignee != null ? consignee.phoneNumber : "", labelTextKey: "processing.phone", maxLines: 2, iconData: Icons.phone, ); final namebox = DisplayText( - text: user != null ? user.name : "", + text: consignee != null ? consignee.name : "", labelTextKey: "processing.consignee.name", maxLines: 2, iconData: Icons.person, @@ -97,7 +98,7 @@ class _ProcesingEditorState extends State { children: [ Expanded( child: DisplayText( - text: shipper != null ? shipper.fcsID : "", + text: sender != null ? sender.fcsID : "", labelTextKey: "processing.fcs.id", icon: FcsIDIcon(), )), @@ -105,21 +106,21 @@ class _ProcesingEditorState extends State { icon: Icon(Icons.search, color: primaryColor), onPressed: () => searchUser(context, callbackUserSelect: (u) { setState(() { - this.shipper = u; + this.sender = u; }); })), ], ); final shipperPhoneNumberBox = DisplayText( - text: shipper != null ? shipper.phoneNumber : "", + text: sender != null ? sender.phoneNumber : "", labelTextKey: "processing.phone", maxLines: 2, iconData: Icons.phone, ); final shipperNamebox = DisplayText( - text: shipper != null ? shipper.name : "", + text: sender != null ? sender.name : "", labelTextKey: "processing.shipper.name", maxLines: 2, iconData: Icons.person, @@ -146,9 +147,17 @@ class _ProcesingEditorState extends State { color: primaryColor, ), onPressed: () async { + if (this.consignee == null) { + showMsgDialog(context, "Warning", "Please select 'Consignee'"); + return; + } Package _package = await Navigator.push( context, - CupertinoPageRoute(builder: (context) => PackageEditor()), + CupertinoPageRoute( + builder: (context) => PackageEditor( + sender: this.sender, + consignee: this.consignee, + )), ); _addPackage(_package); // _savePackage(_package); @@ -224,64 +233,17 @@ class _ProcesingEditorState extends State { List _getPackages(BuildContext context, List packages) { return packages.map((p) { - return Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(color: Colors.grey[300]), - ), - ), - child: InkWell( - onTap: () async { - Package _package = await Navigator.of(context).push( - CupertinoPageRoute( - builder: (context) => PackageEditor(package: p))); - // setState(() { - // _savePackage(_package); - // }); - _savePackage(_package); - }, - child: Row( - children: [ - Expanded( - child: new Padding( - padding: const EdgeInsets.symmetric(vertical: 5.0), - child: new Row( - children: [ - new Padding( - padding: new EdgeInsets.symmetric( - horizontal: 30.0 - 15.0 / 2), - child: Stack( - alignment: AlignmentDirectional.bottomEnd, - children: [ - Icon( - Octicons.package, - color: primaryColor, - size: 30, - ), - ], - ), - ), - new Expanded( - child: new Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - new Text( - p.trackingID, - style: new TextStyle(fontSize: 15.0), - ), - ], - ), - ), - IconButton( - icon: Icon(Icons.remove, color: primaryColor), - onPressed: () => _removePackage(p), - ) - ], - ), - ), - ), - ], - ), + return InkWell( + onTap: () async { + Package _package = await Navigator.of(context).push( + CupertinoPageRoute( + builder: (context) => PackageInfo(package: p))); + _savePackage(_package); + }, + child: DisplayText( + labelTextKey: "processing.tracking.id", + iconData: MaterialCommunityIcons.barcode_scan, + text: p.trackingID, ), ); }).toList(); @@ -331,10 +293,12 @@ class _ProcesingEditorState extends State { isDataChanged() { if (_isNew) { - return this.packages.isNotEmpty || user != null || shipper != null; + return this.packages.isNotEmpty || consignee != null || sender != null; } else { Processing _processing = Processing( - userID: user.fcsID, fcsID: shipper.fcsID, packages: this.packages); + userID: consignee.fcsID, + fcsID: sender.fcsID, + packages: this.packages); return widget.processing.isChangedForEdit(_processing); } } diff --git a/pubspec.yaml b/pubspec.yaml index 3fc9f56..088449f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: fcs description: FCS Logistics publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 1.0.5+7 +version: 1.0.6+8 environment: sdk: ">=2.7.0 <3.0.0"