From d894b506bbecf7705330cfb77a8da909dfab811d Mon Sep 17 00:00:00 2001 From: PhyoThandar Date: Thu, 25 Jun 2020 09:06:01 +0630 Subject: [PATCH 1/3] modify --- assets/local/localization_en.json | 7 ++++- assets/local/localization_mu.json | 15 +++++++---- lib/pages/invoice/invoice_editor.dart | 2 +- lib/pages/invoice/invoice_list_row.dart | 32 ++++++++++++++++------- lib/pages/invoice/payment_page.dart | 30 +++++---------------- lib/pages/invoice/payment_pdf_screen.dart | 4 ++- 6 files changed, 48 insertions(+), 42 deletions(-) diff --git a/assets/local/localization_en.json b/assets/local/localization_en.json index dcf1c95..9cc24d5 100644 --- a/assets/local/localization_en.json +++ b/assets/local/localization_en.json @@ -553,6 +553,7 @@ "invoice.form.title":"INVOICE", "invoice.payment":"Payment Receipt", "invoice.add_box":"Add Box", + "invoice.add_package":"Add Package", "term":"TERMS", "term.btn":"Terms of services", @@ -570,5 +571,9 @@ "payment.title": "PAYMENT", "payment.date": "Date", - "payment.amount": "Amount" + "payment.amount": "Amount", + "payment.receipt":"Payment Receipt Amount", + "payment.attachment":"Payment Attachment", + "pdf_view.title":"Payment File", + "remaining_balance":"Remaining Balance : " } \ No newline at end of file diff --git a/assets/local/localization_mu.json b/assets/local/localization_mu.json index 748bea1..9e72887 100644 --- a/assets/local/localization_mu.json +++ b/assets/local/localization_mu.json @@ -571,10 +571,11 @@ "invoices.btn": "ငွေတောင်းခံလွှာများ", "invoices.title": "ငွေတောင်းခံလွှာများ", - "invoices.add":"New Invoice", - "invoice.form.title":"INVOICE", - "invoice.payment":"Payment Receipt", + "invoices.add":"ငွေတောင်းခံလွှာအသစ်", + "invoice.form.title":"ငွေတောင်းခံလွှာ", + "invoice.payment":"လက်ခံဖြတ်ပိုင်း", "invoice.add_package":"Add Package", + "invoice.add_box":"Add Box", "term":"စည်းကမ်းချက်များ", "term.btn":"စည်းကမ်းချက်များ", @@ -590,6 +591,10 @@ "contact.mm.phone": "မြန်မာ ဖုန်းနံပါတ်", "payment.title": "ငွေပေးချေခြင်း", - "payment.date": "Date", - "payment.amount": "Amount" + "payment.date": "ရက်စွဲ", + "payment.amount": "ပမာဏ", + "payment.receipt":"ပေးချေပြီးပမာဏများ", + "payment.attachment":"ပေးချေပြီးဖိုင်များ", + "pdf_view.title":"ပေးဆောင်ခြင်းဖိုင်", + "remaining_balance":"ပေးချေရန်ကျန်ရှိငွေ : " } \ No newline at end of file diff --git a/lib/pages/invoice/invoice_editor.dart b/lib/pages/invoice/invoice_editor.dart index 6747cf5..623cb35 100644 --- a/lib/pages/invoice/invoice_editor.dart +++ b/lib/pages/invoice/invoice_editor.dart @@ -298,7 +298,7 @@ class _InvoiceEditorState extends State { child: FloatingActionButton.extended( icon: Icon(Icons.add), label: Text(AppTranslations.of(context) - .text("invoice.add_box")), + .text("invoice.add_package")), backgroundColor: primaryColor, onPressed: () { Navigator.of(context) diff --git a/lib/pages/invoice/invoice_list_row.dart b/lib/pages/invoice/invoice_list_row.dart index a84a49f..f0972d4 100644 --- a/lib/pages/invoice/invoice_list_row.dart +++ b/lib/pages/invoice/invoice_list_row.dart @@ -41,11 +41,11 @@ class _InvoiceListRowState extends State { _invoice = widget.invoice; } - fromAsset('assets/demo.pdf', 'demo.pdf').then((f) { - setState(() { - pdfPath = f.path; - }); - }); + // fromAsset('assets/demo.pdf', 'demo.pdf').then((f) { + // setState(() { + // pdfPath = f.path; + // }); + // }); } Future fromAsset(String asset, String filename) async { @@ -62,7 +62,7 @@ class _InvoiceListRowState extends State { await file.writeAsBytes(bytes, flush: true); completer.complete(file); } catch (e) { - throw Exception('Error parsing asset file!'+ e.toString()); + throw Exception('Error parsing asset file! ===> ' + e.toString()); } return completer.future; @@ -78,9 +78,10 @@ class _InvoiceListRowState extends State { owner ? Navigator.of(context) .push(BottomUpPageRoute(InvoiceEditor(invoice: _invoice))) - : Navigator.of(context).push(BottomUpPageRoute(PaymentPDFScreen( - path: pdfPath, - ))); + : Navigator.pop(context); + // Navigator.of(context).push(BottomUpPageRoute(PaymentPDFScreen( + // path: pdfPath, + // ))); }, child: Row( children: [ @@ -167,7 +168,18 @@ class _InvoiceListRowState extends State { return CupertinoActionSheet( actions: [ CupertinoActionSheetAction( - child: Text("Download"), + child: Row( + children: [ + Icon(Icons.file_download), + Padding( + padding: const EdgeInsets.only(left: 8.0), + child: Text( + 'Download', + style: TextStyle(fontSize: 16, color: Colors.black), + ), + ), + ], + ), onPressed: () { Navigator.pop(context); }, diff --git a/lib/pages/invoice/payment_page.dart b/lib/pages/invoice/payment_page.dart index a67361a..5aaff11 100644 --- a/lib/pages/invoice/payment_page.dart +++ b/lib/pages/invoice/payment_page.dart @@ -86,10 +86,8 @@ class _PaymentPageState extends State { child: Container( child: Row( children: [ - Text( - 'Remaining Balance : ', - style: TextStyle(fontSize: 16), - ), + LocalText(context, 'remaining_balance', + color: Colors.black, fontSize: 16), Text( '${_invoice.amount}', style: TextStyle( @@ -104,7 +102,8 @@ class _PaymentPageState extends State { child: ListView( children: [ ExpansionTile( - title: Text('Payment Attachment'), + title: LocalText(context, 'payment.attachment', + color: Colors.black, fontSize: 16), children: [ Container( padding: EdgeInsets.only(left: 20), @@ -127,7 +126,8 @@ class _PaymentPageState extends State { ], ), ExpansionTile( - title: Text('Receipt'), + title: LocalText(context, 'payment.receipt', + color: Colors.black, fontSize: 16), children: [ Container( child: SingleChildScrollView( @@ -155,24 +155,6 @@ class _PaymentPageState extends State { ), ), ), - owner - ? Container( - padding: EdgeInsets.only(top: 20), - child: Align( - alignment: Alignment.bottomRight, - child: FloatingActionButton.extended( - icon: Icon(Icons.add), - label: Text(AppTranslations.of(context) - .text("invoice.add_box")), - backgroundColor: primaryColor, - onPressed: () { - // Navigator.of(context) - // .push(BottomUpPageRoute(PackageAddition())); - }, - ), - ), - ) - : Container(), SizedBox(height: 25), ], ), diff --git a/lib/pages/invoice/payment_pdf_screen.dart b/lib/pages/invoice/payment_pdf_screen.dart index f666483..15d5a2d 100644 --- a/lib/pages/invoice/payment_pdf_screen.dart +++ b/lib/pages/invoice/payment_pdf_screen.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:fcs/theme/theme.dart'; +import 'package:fcs/widget/local_text.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_pdfview/flutter_pdfview.dart'; @@ -29,7 +30,8 @@ class _PaymentPDFScreenState extends State return Scaffold( appBar: AppBar( backgroundColor: primaryColor, - title: Text("Document"), + title: LocalText(context, 'pdf_view.title', + color: Colors.white, fontSize: 20), actions: [ IconButton( icon: Icon(Icons.share), From a41edffe026c5fa990335710ac7e5c9208e8179c Mon Sep 17 00:00:00 2001 From: PhyoThandar Date: Thu, 25 Jun 2020 15:34:41 +0630 Subject: [PATCH 2/3] fix ui --- lib/model_fcs/package_model.dart | 26 ++++- lib/pages/barcode_screen_page.dart | 76 ++++---------- lib/pages_fcs/package_editor.dart | 163 +++++++++++++++++++++++------ lib/pages_fcs/package_list.dart | 115 +++++++++++++++++--- 4 files changed, 272 insertions(+), 108 deletions(-) diff --git a/lib/model_fcs/package_model.dart b/lib/model_fcs/package_model.dart index 6568ebd..53e451d 100644 --- a/lib/model_fcs/package_model.dart +++ b/lib/model_fcs/package_model.dart @@ -14,6 +14,7 @@ class PackageModel extends BaseModel { Status(status: "Received", date: DateTime(2020, 6, 1), done: true), Status(status: "Processed", date: DateTime(2020, 6, 1), done: true), Status(status: "Shipped", date: DateTime(2020, 6, 5), done: false), + Status(status: "Arrived", date: DateTime(2020, 6, 7), done: false), Status(status: "Delivered", date: DateTime(2020, 6, 15), done: false) ]; static List packages = [ @@ -88,7 +89,7 @@ class PackageModel extends BaseModel { weight: 55, market: "Macy", trackingID: "234-sdflsdf-213", - status: "Processed", + status: "Shipped", id: "PKG2043", arrivedDate: DateTime(2020, 6, 1), receiverAddress: '2 Shwe Taung Kyar St, Bahan Tsp, Yangon',statusHistory: statusHistory), @@ -101,7 +102,7 @@ class PackageModel extends BaseModel { packageType: "Dangerous", cargoDesc: "Phones and Scooters", weight: 25, - status: "Received", + status: "Arrived", market: "Amazon", trackingID: "sdf-asdf-23489", id: "PKG2044", @@ -131,6 +132,27 @@ class PackageModel extends BaseModel { }); } + List get shipped { + return packages.where((e) => e.status == "Shipped").toList() + ..sort((e1, e2) { + return e2.packageNumber.compareTo(e1.packageNumber); + }); + } + + List get arrived { + return packages.where((e) => e.status == "Arrived").toList() + ..sort((e1, e2) { + return e2.packageNumber.compareTo(e1.packageNumber); + }); + } + + List get delivered { + return packages.where((e) => e.status == "Delivered").toList() + ..sort((e1, e2) { + return e2.packageNumber.compareTo(e1.packageNumber); + }); + } + List get upcoming { return packages.where((e) => e.status == "Received").toList() ..sort((e1, e2) { diff --git a/lib/pages/barcode_screen_page.dart b/lib/pages/barcode_screen_page.dart index 0d6fc69..f1d4e5c 100644 --- a/lib/pages/barcode_screen_page.dart +++ b/lib/pages/barcode_screen_page.dart @@ -1,6 +1,7 @@ import 'package:barcode_scan/barcode_scan.dart'; import 'package:barcode_scan/model/scan_result.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_icons/flutter_icons.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:provider/provider.dart'; import 'package:fcs/model/product_model.dart'; @@ -26,49 +27,6 @@ class _BarcodeScreenPageState extends State { super.initState(); } - Widget showProducts(BuildContext context, ProductModel productModel) { - return Row( - mainAxisSize: MainAxisSize.max, - children: [ - Icon( - FontAwesomeIcons.tag, - color: primaryColor, - size: 20, - ), - SizedBox( - width: 20, - ), - new Flexible( - child: Container( - width: 170.0, - child: DropdownButton( - // value: currentProductID, - isExpanded: true, - hint: Text( - 'Select Product', - style: labelStyle, - ), - onChanged: changedProduct, - items: productModel.products - .map>((Product product) { - return new DropdownMenuItem( - value: product.id, - child: new Text(product.name, style: textStyle), - ); - }).toList(), - ), - ), - ), - ], - ); - } - - void changedProduct(selected) { - setState(() { - // currentProductID = selected; - }); - } - @override Widget build(BuildContext context) { return LocalProgress( @@ -82,9 +40,24 @@ class _BarcodeScreenPageState extends State { mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - RaisedButton( - child: Icon(Icons.scanner), - onPressed: () async { + InkWell( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "Scan : ", + style: TextStyle( + color: primaryColor, + fontWeight: FontWeight.bold, + fontSize: 20), + ), + Icon( + Ionicons.ios_qr_scanner, + size: 50, + ), + ], + ), + onTap: () async { await scan(); }, ) @@ -98,15 +71,4 @@ class _BarcodeScreenPageState extends State { print("ScanResult => $result"); setState(() => scanResult = result); } - - // _save() { - // if (currentProductID == null) return; - // this.buyerProduct.productID = currentProductID; - // var productName = - // Provider.of(context).getProductName(currentProductID); - // this.buyerProduct.productName = productName; - // this.buyerProduct.storageCapacityQty = int.parse(_storage.text); - // this.buyerProduct.dailySaleQty = int.parse(_sales.text); - // Navigator.pop(context, this.buyerProduct); - // } } diff --git a/lib/pages_fcs/package_editor.dart b/lib/pages_fcs/package_editor.dart index 539529d..a12d38c 100644 --- a/lib/pages_fcs/package_editor.dart +++ b/lib/pages_fcs/package_editor.dart @@ -1,7 +1,12 @@ import 'package:fcs/model/main_model.dart'; +import 'package:fcs/model/shipment_model.dart'; +import 'package:fcs/pages/barcode_screen_page.dart'; import 'package:fcs/pages/util.dart'; import 'package:fcs/vo/package.dart'; +import 'package:fcs/vo/shipping_address.dart'; +import 'package:fcs/widget/bottom_up_page_route.dart'; import 'package:fcs/widget/localization/app_translations.dart'; +import 'package:fcs/widget/my_data_table.dart'; import 'package:fcs/widget/progress.dart'; import 'package:flutter/material.dart'; import 'package:flutter_icons/flutter_icons.dart'; @@ -141,6 +146,50 @@ class _PackageEditorState extends State { fontWeight: FontWeight.bold), ), children: [ + Padding( + padding: const EdgeInsets.only( + left: 20.0, right: 20), + child: TextFormField( + initialValue: isNew ? "" : "zdf-sdfl-37sdfks", + decoration: InputDecoration( + fillColor: Colors.white, + labelText: 'Tracking ID', + hintText: 'Tracking ID', + filled: true, + suffixIcon: IconButton( + icon: Icon( + Ionicons.ios_barcode, + color: primaryColor, + ), + onPressed: () { + Navigator.push( + context, + BottomUpPageRoute( + BarcodeScreenPage()), + ); + }), + icon: Icon(Octicons.package, + color: primaryColor), + ), + ), + ), + Padding( + padding: const EdgeInsets.only( + left: 20.0, right: 20), + child: TextFormField( + initialValue: isNew ? "" : "FCS-0203-390-2", + decoration: InputDecoration( + fillColor: Colors.white, + labelText: 'FCS_ID', + hintText: 'FCS_ID', + filled: true, + icon: Icon(Feather.user, + color: primaryColor), + suffixIcon: IconButton( + icon: Icon(Icons.search), + onPressed: () {})), + ), + ), Padding( padding: const EdgeInsets.only( left: 20.0, right: 20), @@ -172,38 +221,6 @@ class _PackageEditorState extends State { ), ), ), - Padding( - padding: const EdgeInsets.only( - left: 20.0, right: 20), - child: TextFormField( - initialValue: isNew ? "" : "zdf-sdfl-37sdfks", - decoration: InputDecoration( - fillColor: Colors.white, - labelText: 'Tracking ID', - hintText: 'Tracking ID', - filled: true, - icon: Icon(Octicons.package, - color: primaryColor), - ), - ), - ), - Padding( - padding: const EdgeInsets.only( - left: 20.0, right: 20), - child: TextFormField( - initialValue: isNew ? "" : "FCS-0203-390-2", - decoration: InputDecoration( - fillColor: Colors.white, - labelText: 'FCS_ID', - hintText: 'FCS_ID', - filled: true, - icon: Icon(Feather.user, - color: primaryColor), - suffixIcon: IconButton( - icon: Icon(Icons.search), - onPressed: () {})), - ), - ), Padding( padding: const EdgeInsets.only( left: 20.0, right: 20), @@ -266,6 +283,15 @@ class _PackageEditorState extends State { color: primaryColor), )), ), + Padding( + padding: const EdgeInsets.only( + left: 20.0, right: 20), + child: fcsInput( + "Remark", + MaterialCommunityIcons.note, + ), + ), + SizedBox(height: 5), ], ) : Container(), @@ -346,7 +372,8 @@ class _PackageEditorState extends State { position: TimelinePosition.Left), ), ], - ) + ), + getShippingAddressList(context), ], ), ), @@ -392,4 +419,74 @@ class _PackageEditorState extends State { ), ); } + + Widget getShippingAddressList(BuildContext context) { + var shipmentModel = Provider.of(context); + return Container( + // padding: EdgeInsets.only(top: 5, left: 10), + child: ExpansionTile( + title: Text( + "Shipping Addresses", + style: TextStyle( + fontWeight: FontWeight.bold, + fontStyle: FontStyle.normal, + color: primaryColor), + ), + children: [ + Container( + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: MyDataTable( + headingRowHeight: 40, + columnSpacing: 50, + columns: [ + MyDataColumn( + label: Text( + "Full Name", + style: TextStyle( + fontSize: 15, + color: Colors.grey[600], + ), + )), + MyDataColumn( + label: Text( + "Phone Number", + style: TextStyle( + fontSize: 15, + color: Colors.grey[600], + ), + )), + ], + rows: getAddressRows(shipmentModel.shippingAddresses), + ), + ), + ), + ], + ), + ); + } + + List getAddressRows(List addresses) { + return addresses.map((s) { + return MyDataRow( + onSelectChanged: (selected) { + + }, + cells: [ + MyDataCell( + new Text( + s.fullName, + style: textStyle, + ), + ), + MyDataCell( + new Text( + s.phoneNumber, + style: textStyle, + ), + ), + ], + ); + }).toList(); + } } diff --git a/lib/pages_fcs/package_list.dart b/lib/pages_fcs/package_list.dart index 885bb03..b0bc1ea 100644 --- a/lib/pages_fcs/package_list.dart +++ b/lib/pages_fcs/package_list.dart @@ -9,12 +9,12 @@ import 'package:fcs/vo/buyer.dart'; import 'package:fcs/widget/bottom_up_page_route.dart'; import 'package:fcs/widget/localization/app_translations.dart'; import 'package:fcs/widget/progress.dart'; +import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:flutter_icons/flutter_icons.dart'; import 'package:provider/provider.dart'; import '../theme/theme.dart'; -import 'pickup_editor.dart'; class PackageList extends StatefulWidget { @override @@ -40,7 +40,7 @@ class _PackageListState extends State { return LocalProgress( inAsyncCall: _isLoading, child: DefaultTabController( - length: 2, + length: 5, child: Scaffold( appBar: AppBar( centerTitle: true, @@ -51,19 +51,19 @@ class _PackageListState extends State { backgroundColor: primaryColor, title: Text(AppTranslations.of(context).text("package.title")), actions: [ - IconButton( - icon: Icon( - FontAwesomeIcons.barcode, - color: Colors.white, - ), - iconSize: 30, - onPressed: () { - Navigator.push( - context, - BottomUpPageRoute(BarcodeScreenPage()), - ); - }, - ), + // IconButton( + // icon: Icon( + // Ionicons.ios_barcode, + // color: Colors.white, + // ), + // iconSize: 30, + // onPressed: () { + // Navigator.push( + // context, + // BottomUpPageRoute(BarcodeScreenPage()), + // ); + // }, + // ), IconButton( icon: Icon( Icons.search, @@ -74,12 +74,20 @@ class _PackageListState extends State { ), ], bottom: TabBar( + dragStartBehavior: DragStartBehavior.start, unselectedLabelColor: Colors.grey, tabs: [ Tab( text: "Received", ), Tab(text: "Processed"), + Tab( + text: "Shipped", + ), + Tab(text: "Arrived"), + Tab( + text: "Delivered", + ), ], ), ), @@ -95,6 +103,9 @@ class _PackageListState extends State { children: [ _upComing(), _completed(), + _shipped(), + _arrived(), + _delivered(), ], )), ), @@ -155,4 +166,76 @@ class _PackageListState extends State { ], ); } + + Widget _shipped() { + var packageModel = Provider.of(context); + return Column( + children: [ + Expanded( + child: new ListView.separated( + separatorBuilder: (context, index) => Divider( + color: Colors.black, + ), + scrollDirection: Axis.vertical, + padding: EdgeInsets.only(top: 15), + shrinkWrap: true, + itemCount: packageModel.shipped.length, + itemBuilder: (BuildContext context, int index) { + return PackageListRow( + package: packageModel.shipped[index], + isReadOnly: false, + ); + }), + ), + ], + ); + } + + Widget _arrived() { + var packageModel = Provider.of(context); + return Column( + children: [ + Expanded( + child: new ListView.separated( + separatorBuilder: (context, index) => Divider( + color: Colors.black, + ), + scrollDirection: Axis.vertical, + padding: EdgeInsets.only(top: 15), + shrinkWrap: true, + itemCount: packageModel.arrived.length, + itemBuilder: (BuildContext context, int index) { + return PackageListRow( + package: packageModel.arrived[index], + isReadOnly: false, + ); + }), + ), + ], + ); + } + + Widget _delivered() { + var packageModel = Provider.of(context); + return Column( + children: [ + Expanded( + child: new ListView.separated( + separatorBuilder: (context, index) => Divider( + color: Colors.black, + ), + scrollDirection: Axis.vertical, + padding: EdgeInsets.only(top: 15), + shrinkWrap: true, + itemCount: packageModel.delivered.length, + itemBuilder: (BuildContext context, int index) { + return PackageListRow( + package: packageModel.delivered[index], + isReadOnly: false, + ); + }), + ), + ], + ); + } } From ca3f8ccb1829759a217bcb806e841cebc2a7d944 Mon Sep 17 00:00:00 2001 From: PhyoThandar Date: Thu, 25 Jun 2020 16:07:36 +0630 Subject: [PATCH 3/3] modify --- lib/pages_fcs/package_editor.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/pages_fcs/package_editor.dart b/lib/pages_fcs/package_editor.dart index a12d38c..02e85ad 100644 --- a/lib/pages_fcs/package_editor.dart +++ b/lib/pages_fcs/package_editor.dart @@ -423,7 +423,6 @@ class _PackageEditorState extends State { Widget getShippingAddressList(BuildContext context) { var shipmentModel = Provider.of(context); return Container( - // padding: EdgeInsets.only(top: 5, left: 10), child: ExpansionTile( title: Text( "Shipping Addresses",