From 41fdc3ef43b289de5b9753195ff8a30739700ded Mon Sep 17 00:00:00 2001 From: tzw Date: Tue, 1 Oct 2024 18:15:53 +0630 Subject: [PATCH] update carton form ,info and filter --- lib/data/provider/carton_data_provider.dart | 2 - lib/domain/entities/cargo_type.dart | 5 +- lib/main-dev.dart | 6 +- lib/pages/carton/carton_info.dart | 111 +++++++++--------- lib/pages/carton/carton_package_editor.dart | 24 ++-- lib/pages/carton/carton_size_widget.dart | 6 +- lib/pages/carton/carton_submit.dart | 2 +- .../carton/mix_carton/mix_carton_editor.dart | 5 +- .../carton/mix_carton/mix_carton_submit.dart | 35 +++--- lib/pages/carton/model/carton_model.dart | 12 +- .../model/consignee_selection_model.dart | 4 +- .../carton/model/sender_selection_model.dart | 4 +- lib/pages/rates/cargo_editor.dart | 16 +-- 13 files changed, 123 insertions(+), 109 deletions(-) diff --git a/lib/data/provider/carton_data_provider.dart b/lib/data/provider/carton_data_provider.dart index c4de1cb..1b515d1 100644 --- a/lib/data/provider/carton_data_provider.dart +++ b/lib/data/provider/carton_data_provider.dart @@ -15,7 +15,6 @@ class CartonDataProvider { Future createCarton(Carton carton) async { var data = await requestAPI("/cartons", "POST", payload: carton.toMap(), token: await getToken()); - print("carton data:${data}"); return Carton.fromMap(data, data['id']); } @@ -32,7 +31,6 @@ class CartonDataProvider { Future createMixCarton(Carton carton) async { var data = await requestAPI("/cartons", "POST", payload: carton.toMapForMix(), token: await getToken()); - print("carton mix data:${data}"); return Carton.fromMap(data, data['id']); } diff --git a/lib/domain/entities/cargo_type.dart b/lib/domain/entities/cargo_type.dart index b435209..3b64cc2 100644 --- a/lib/domain/entities/cargo_type.dart +++ b/lib/domain/entities/cargo_type.dart @@ -44,7 +44,10 @@ class CargoType { factory CargoType.fromMapForCargo(Map map, String id) { return CargoType( - id: id, name: map['name'], weight: map['weight']?.toDouble() ?? 0); + id: id, + name: map['name'], + weight: map['weight']?.toDouble() ?? 0, + displayIndex: map['display_index'] ?? 0); } factory CargoType.fromMapForsurcharge(Map map, String id) { diff --git a/lib/main-dev.dart b/lib/main-dev.dart index 850c75a..def8841 100644 --- a/lib/main-dev.dart +++ b/lib/main-dev.dart @@ -11,15 +11,15 @@ import 'data/provider/messaging_fcm.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( - options: DefaultFirebaseOptions.currentPlatform, -); + options: DefaultFirebaseOptions.currentPlatform, + ); FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler); Config( flavor: Flavor.DEV, color: Colors.blue, - apiURL:"http://192.168.100.150:9090", + apiURL: "http://192.168.100.150:9090", // apiURL: "https://asia-northeast1-fcs-dev1.cloudfunctions.net/API13", reportURL: "http://petrok.mokkon.com:7071", reportProjectID: "fcs-dev", diff --git a/lib/pages/carton/carton_info.dart b/lib/pages/carton/carton_info.dart index be1fec1..873e754 100644 --- a/lib/pages/carton/carton_info.dart +++ b/lib/pages/carton/carton_info.dart @@ -92,6 +92,8 @@ class _CartonInfoState extends State { _mixCartons = await context .read() .getCartonsByIds(_carton.cartonIDs); + _cargoTypes.sort((a, b) => a.name!.compareTo(b.name!)); + _surchareItems.sort((a, b) => a.name!.compareTo(b.name!)); } totalWeight = @@ -156,13 +158,17 @@ class _CartonInfoState extends State { ); final lastMileBox = DisplayText( - text: _carton.lastMile == delivery_caton ? 'Delivery' : 'Pick-up', + text: _carton.lastMile == delivery_caton + ? 'Delivery' + : _carton.lastMile == pickup_carton + ? 'Pick-up' + : '', labelTextKey: "box.delivery_type", ); final cartonSizeBox = DisplayText( subText: Text("${boxDimension ?? 'No defined size'}"), - labelTextKey: "box.carton_size", + labelTextKey: "box.select_carton_size", ); final senderBox = DisplayText( @@ -192,6 +198,7 @@ class _CartonInfoState extends State { final userRowBox = Row( mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( child: Row( @@ -228,7 +235,7 @@ class _CartonInfoState extends State { ); final cargosBox = Padding( - padding: const EdgeInsets.only(top: 15), + padding: const EdgeInsets.only(top: 20), child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -237,10 +244,13 @@ class _CartonInfoState extends State { color: Colors.black54, fontSize: 16, fontWeight: FontWeight.normal), - Padding( - padding: EdgeInsets.only(right: 50), - child: Text("${removeTrailingZeros(totalWeight)} lb", - style: TextStyle(color: Colors.black54, fontSize: 15))) + _cargoTypes.isNotEmpty + ? Padding( + padding: EdgeInsets.only(right: 50), + child: Text("${removeTrailingZeros(totalWeight)} lb", + textAlign: TextAlign.end, + style: TextStyle(color: Colors.black54, fontSize: 15))) + : const SizedBox() ], ), Container( @@ -262,68 +272,52 @@ class _CartonInfoState extends State { TextStyle(color: Colors.black, fontSize: 15), ), Text("${removeTrailingZeros(e.weight)} lb", + textAlign: TextAlign.end, style: TextStyle( color: Colors.black, fontSize: 15)) ], ), ); }).toList()), - const SizedBox(height: 10), ], ), ), ), ]), ); - final surchargeItemBox = Padding( - padding: const EdgeInsets.only(top: 15), - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - LocalText(context, 'box.surcharge.item', - color: Colors.black54, - fontSize: 16, - fontWeight: FontWeight.normal), - Padding( - padding: EdgeInsets.only(right: 50), - child: Text("${removeTrailingZeros(totalSurchargeCount)} pcs", - style: TextStyle(color: Colors.black54, fontSize: 15))) - ], - ), - Container( - child: Padding( - padding: const EdgeInsets.only(right: 60), - child: Column( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: _surchareItems.map((e) { - return Padding( - padding: const EdgeInsets.symmetric(vertical: 3), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - e.name ?? "", + + final surchargeItemBox = + Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + Container( + child: Padding( + padding: const EdgeInsets.only(right: 50), + child: Column( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: _surchareItems.map((e) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 3), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + e.name ?? "", + style: TextStyle(color: Colors.black, fontSize: 15), + ), + Text("${removeTrailingZeros((e.qty).toDouble())} pc", + textAlign: TextAlign.end, style: - TextStyle(color: Colors.black, fontSize: 15), - ), - Text( - "${removeTrailingZeros((e.qty).toDouble())} pc", - style: TextStyle( - color: Colors.black, fontSize: 15)) - ], - ), - ); - }).toList()), - const SizedBox(height: 10), - ], - ), + TextStyle(color: Colors.black, fontSize: 15)) + ], + ), + ); + }).toList()), + ], ), ), - ]), - ); + ), + ]); final img = MultiImageFile( enabled: false, @@ -447,10 +441,13 @@ class _CartonInfoState extends State { ], ), ), - _cargoTypes.isEmpty ? const SizedBox() : cargosBox, - _surchareItems.isEmpty ? const SizedBox() : surchargeItemBox, + cargosBox, + surchargeItemBox, + const SizedBox(height: 10), uploadImageBtn, - const SizedBox(height: 30), + _carton.photoUrls.isNotEmpty + ? const SizedBox(height: 10) + : const SizedBox(), img, _carton.photoUrls.isNotEmpty ? const SizedBox(height: 40) diff --git a/lib/pages/carton/carton_package_editor.dart b/lib/pages/carton/carton_package_editor.dart index 5fe0ca5..baeabee 100644 --- a/lib/pages/carton/carton_package_editor.dart +++ b/lib/pages/carton/carton_package_editor.dart @@ -89,15 +89,6 @@ class _CartonPackageEditorState extends State { _cargoTypes = widget.carton.cargoTypes; _surchareItems = widget.carton.surchareItems; - var s = await context - .read() - .getFcsShipment(widget.carton.fcsShipmentID ?? ""); - _shipment = s; - - _packages = await context - .read() - .getPackagesByIds(widget.carton.packageIDs); - // check carton size type List cartonSizes = context.read().cartonSizes; @@ -120,8 +111,20 @@ class _CartonPackageEditorState extends State { _cartonSizeType = packageCarton; } else { _cartonSizeType = customCarton; + _length = widget.carton.length.toDouble(); + _width = widget.carton.width.toDouble(); + _height = widget.carton.height.toDouble(); } + var s = await context + .read() + .getFcsShipment(widget.carton.fcsShipmentID ?? ""); + _shipment = s; + + _packages = await context + .read() + .getPackagesByIds(widget.carton.packageIDs); + if (mounted) { setState(() {}); } @@ -328,7 +331,10 @@ class _CartonPackageEditorState extends State { } var carton = Carton( + id: widget.carton.id, cartonType: carton_from_packages, + senderID: widget.carton.senderID, + consigneeID: widget.carton.consigneeID, billTo: _billToValue, lastMile: _selectedLastMile, fcsShipmentID: _shipment?.id, diff --git a/lib/pages/carton/carton_size_widget.dart b/lib/pages/carton/carton_size_widget.dart index 9beaa4b..09916a3 100644 --- a/lib/pages/carton/carton_size_widget.dart +++ b/lib/pages/carton/carton_size_widget.dart @@ -61,8 +61,6 @@ class CartonSizeWidget extends StatefulWidget { } class _CartonSizeWidgetState extends State { - // List _deliveryTypes = [delivery_caton, pickup_carton]; - FcsShipment? _shipment; String _cartonSizeType = standardCarton; @@ -85,7 +83,6 @@ class _CartonSizeWidgetState extends State { _selectedLastmile = widget.lastMile; _billToValue = widget.billType; _cartonSizeType = widget.cartonSizeType; - _lengthController.text = widget.length == null ? "0" : removeTrailingZeros(widget.length ?? 0); _widthController.text = @@ -94,8 +91,7 @@ class _CartonSizeWidgetState extends State { widget.height == null ? "0" : removeTrailingZeros(widget.height ?? 0); _getStandardCartonSize(); - _loadShipment(); - + _loadShipment(); if (mounted) { setState(() {}); } diff --git a/lib/pages/carton/carton_submit.dart b/lib/pages/carton/carton_submit.dart index 804dff8..a65db3a 100644 --- a/lib/pages/carton/carton_submit.dart +++ b/lib/pages/carton/carton_submit.dart @@ -191,7 +191,7 @@ class CartonSubmit extends StatelessWidget { final cartonSizeBox = Padding( padding: const EdgeInsets.only(top: 10), child: SubmitTextWidget( - labelKey: 'box.carton_size', + labelKey: 'box.select_carton_size', text: boxDimension ?? 'No defined size', ), ); diff --git a/lib/pages/carton/mix_carton/mix_carton_editor.dart b/lib/pages/carton/mix_carton/mix_carton_editor.dart index 26b6b00..2b9c6ce 100644 --- a/lib/pages/carton/mix_carton/mix_carton_editor.dart +++ b/lib/pages/carton/mix_carton/mix_carton_editor.dart @@ -82,6 +82,9 @@ class _MixCartonEditorState extends State { _cartonSizeType = packageCarton; } else { _cartonSizeType = customCarton; + _length = widget.carton.length.toDouble(); + _width = widget.carton.width.toDouble(); + _height = widget.carton.height.toDouble(); } var s = await context @@ -269,7 +272,7 @@ class _MixCartonEditorState extends State { width: width, height: height, cartons: _cartons); - await context.read().updateCarton(carton); + await context.read().updateMixCarton(carton); Navigator.pop(context, true); } catch (e) { showMsgDialog(context, "Error", e.toString()); diff --git a/lib/pages/carton/mix_carton/mix_carton_submit.dart b/lib/pages/carton/mix_carton/mix_carton_submit.dart index 52e164d..6da9ce5 100644 --- a/lib/pages/carton/mix_carton/mix_carton_submit.dart +++ b/lib/pages/carton/mix_carton/mix_carton_submit.dart @@ -48,8 +48,8 @@ class MixCartonSubmit extends StatefulWidget { class _MixCartonSubmitState extends State { final NumberFormat numberFormatter = NumberFormat("#,###"); - Map _mapCargosByWeight = {}; - Map _mapCargosByCustomDutyFee = {}; + Map _mapCargos = {}; + Map _mapSurchargeItems = {}; double totalWeight = 0; @override @@ -59,30 +59,37 @@ class _MixCartonSubmitState extends State { } _init() { + // get cargos by weight List _cargoTypes = []; for (var c in widget.cartons) { _cargoTypes.addAll(c.cargoTypes); } - // get cargos by weight - Map> _cargosByWeight = - groupCargos(_cargoTypes.where((e) => !e.isCutomDuty).toList()); + _cargoTypes.sort((a, b) => a.name!.compareTo(b.name!)); + Map> _cargosByWeight = groupCargos(_cargoTypes); _cargosByWeight.forEach((key, value) { double total = value.fold(0, (sum, item) => sum + item.weight); - _mapCargosByWeight[key] = total; + _mapCargos[key] = total; }); - totalWeight = - _mapCargosByWeight.entries.fold(0, (sum, value) => sum + value.value); + totalWeight = _mapCargos.entries.fold(0, (sum, value) => sum + value.value); + + // get surcharge items + + List _surchargeItems = []; + for (var c in widget.cartons) { + _surchargeItems.addAll(c.surchareItems); + } + + _surchargeItems.sort((a, b) => a.name!.compareTo(b.name!)); - // get cargos by custom duty fee Map> _cargosByCustomDutyFee = - groupCargos(_cargoTypes.where((e) => e.isCutomDuty).toList()); + groupCargos(_surchargeItems); _cargosByCustomDutyFee.forEach((key, value) { double total = value.fold(0, (sum, item) => sum + item.qty); - _mapCargosByCustomDutyFee[key] = total; + _mapSurchargeItems[key] = total; }); if (mounted) { @@ -116,7 +123,7 @@ class _MixCartonSubmitState extends State { final cartonSizeBox = Padding( padding: const EdgeInsets.only(top: 10), child: SubmitTextWidget( - labelKey: 'box.carton_size', + labelKey: 'box.select_carton_size', text: boxDimension ?? 'No defined size', ), ); @@ -195,7 +202,7 @@ class _MixCartonSubmitState extends State { children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, - children: _mapCargosByWeight.entries.map((e) { + children: _mapCargos.entries.map((e) { return Padding( padding: const EdgeInsets.symmetric(vertical: 3), child: Row( @@ -216,7 +223,7 @@ class _MixCartonSubmitState extends State { const SizedBox(height: 10), Column( crossAxisAlignment: CrossAxisAlignment.start, - children: _mapCargosByCustomDutyFee.entries.map((e) { + children: _mapSurchargeItems.entries.map((e) { return Padding( padding: const EdgeInsets.symmetric(vertical: 3), child: Row( diff --git a/lib/pages/carton/model/carton_model.dart b/lib/pages/carton/model/carton_model.dart index 49148c5..c8fe9f1 100644 --- a/lib/pages/carton/model/carton_model.dart +++ b/lib/pages/carton/model/carton_model.dart @@ -117,13 +117,15 @@ class CartonModel extends BaseModel { Query pageQuery = FirebaseFirestore.instance.collection(path); if (filterByConsingee != null) { - col = col.where("user_id", isEqualTo: filterByConsingee!.id); - pageQuery = pageQuery.where("user_id", isEqualTo: filterByConsingee!.id); + col = col.where("consignee_user_id", isEqualTo: filterByConsingee!.id); + pageQuery = pageQuery.where("consignee_user_id", + isEqualTo: filterByConsingee!.id); } if (filterBySender != null) { - col = col.where("sender_id", isEqualTo: filterBySender!.id); - pageQuery = pageQuery.where("sender_id", isEqualTo: filterBySender!.id); + col = col.where("sender_user_id", isEqualTo: filterBySender!.id); + pageQuery = + pageQuery.where("sender_user_id", isEqualTo: filterBySender!.id); } if (filterByStatus != null) { @@ -208,7 +210,7 @@ class CartonModel extends BaseModel { } Future createMixCarton(Carton carton) { - return Services.instance.cartonService.createCarton(carton); + return Services.instance.cartonService.createMixCarton(carton); } Future updateMixCarton(Carton carton) { diff --git a/lib/pages/carton/model/consignee_selection_model.dart b/lib/pages/carton/model/consignee_selection_model.dart index 0682e5c..7377de4 100644 --- a/lib/pages/carton/model/consignee_selection_model.dart +++ b/lib/pages/carton/model/consignee_selection_model.dart @@ -91,8 +91,8 @@ class ConsigneeSelectionModel extends BaseModel { Query query = FirebaseFirestore.instance .collection(path) .where("is_sys_admin", isEqualTo: false) - .where("is_deleted", isEqualTo: false) - .orderBy("message_time", descending: true); + .where("delete_time", isEqualTo: 0) + .orderBy("update_time", descending: true); if (_lastDocument != null) { query = query.startAfterDocument(_lastDocument!); diff --git a/lib/pages/carton/model/sender_selection_model.dart b/lib/pages/carton/model/sender_selection_model.dart index aced32e..8179099 100644 --- a/lib/pages/carton/model/sender_selection_model.dart +++ b/lib/pages/carton/model/sender_selection_model.dart @@ -93,8 +93,8 @@ class SenderSelectionModel extends BaseModel { Query query = FirebaseFirestore.instance .collection(path) .where("is_sys_admin", isEqualTo: false) - .where("is_deleted", isEqualTo: false) - .orderBy("message_time", descending: true); + .where("delete_time", isEqualTo: 0) + .orderBy("update_time", descending: true); if (_lastDocument != null) { query = query.startAfterDocument(_lastDocument!); diff --git a/lib/pages/rates/cargo_editor.dart b/lib/pages/rates/cargo_editor.dart index 2ffa1a5..6645e4c 100644 --- a/lib/pages/rates/cargo_editor.dart +++ b/lib/pages/rates/cargo_editor.dart @@ -84,12 +84,12 @@ class _CargoEditorState extends State { controller: _displayIndexController, textInputType: TextInputType.number, autovalidateMode: AutovalidateMode.onUserInteraction, - validator: (value) { - if (value == null || value.isEmpty) { - return "Please insert display index"; - } - return null; - }, + // validator: (value) { + // if (value == null || value.isEmpty) { + // return "Please insert display index"; + // } + // return null; + // }, ); final defaultBox = Padding( @@ -189,7 +189,9 @@ class _CargoEditorState extends State { CargoType _cargo = CargoType( name: _descController.text, rate: double.parse(_rateController.text), - displayIndex: int.parse(_displayIndexController.text), + displayIndex: _displayIndexController.text == '' + ? 0 + : int.parse(_displayIndexController.text), isDefault: _isDefault); if (_isNew) { await shipmentRateModel.addCargoType(_cargo);