Merge branch 'master' of phyothandar/fcs.kl into master

This commit is contained in:
2021-09-14 11:36:29 +00:00
committed by Gogs
8 changed files with 224 additions and 139 deletions

View File

@@ -580,10 +580,14 @@
"pickup.edit.title":"Pickup", "pickup.edit.title":"Pickup",
"pickup.pickup_number":"Pickup Number", "pickup.pickup_number":"Pickup Number",
"pickup.date":"Pickup Date", "pickup.date":"Pickup Date",
"pickup.time":"Pickup Time", "pickup.from_time":"From Time",
"pickup.to_time":"To Time",
"pickup.status":"Status", "pickup.status":"Status",
"pickup.desc":"Description", "pickup.desc":"Description",
"pickup.remark":"Remark", "pickup.remark":"Remark",
"pickup.staff.name":"Staff",
"pickup.edit.complete.btn":"Complete pickup", "pickup.edit.complete.btn":"Complete pickup",
"pickup.continue.btn":"Continue to complete",
"pickup.confirm.complete":"Complete confirm?",
"Pickup End ===================================================================":"" "Pickup End ===================================================================":""
} }

View File

@@ -573,15 +573,19 @@
"Processing End ================================================================":"", "Processing End ================================================================":"",
"Pickup Start ================================================================":"", "Pickup Start ================================================================":"",
"pickup.title":"Pickups", "pickup.title":"ပို့ဆောင်ခြင်းများ",
"pickup.info.title":"Pickup", "pickup.info.title":"ပို့ဆောင်ခြင်း",
"pickup.edit.title":"Pickup", "pickup.edit.title":"ပို့ဆောင်ခြင်း",
"pickup.pickup_number":"Pickup Number", "pickup.pickup_number":"ပို့ဆောင်ခြင်း နံပါတ်",
"pickup.date":"Pickup Date", "pickup.date":"ပို့ဆောင်ခြင်း ရက်စွဲ",
"pickup.time":"Pickup Time", "pickup.from_time":"အချိန်(မှ)",
"pickup.to_time":"အချိန်(တွင်း)",
"pickup.status":"အခြေအနေ", "pickup.status":"အခြေအနေ",
"pickup.desc":"ဖော်ပြချက်", "pickup.desc":"ဖော်ပြချက်",
"pickup.remark":"မှတ်ချက်", "pickup.remark":"မှတ်ချက်",
"pickup.edit.complete.btn":"Complete pickup", "pickup.staff.name":"ဝန်ထမ်း",
"pickup.edit.complete.btn":"ပို့ဆောင်ခြင်း ပြီးဆုံးသည်",
"pickup.continue.btn":"Continue to complete",
"pickup.confirm.complete":"Complete confirm?",
"Pickup End ===================================================================":"" "Pickup End ===================================================================":""
} }

View File

@@ -0,0 +1,90 @@
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:fcs/domain/entities/package.dart';
class Pickup {
String? id;
DateTime? pickupDate;
String? fromTime;
String? toTime;
//for consignee
String? userID;
String? userName;
String? userPhoneNumber;
String? staffId;
String? staffName;
String? staffPhoneNumber;
//for shipper
String? fcsID;
String? shipperName;
String? shipperPhoneNumber;
String? status;
List<Package> packages;
Pickup(
{this.id,
this.userID,
this.userName,
this.userPhoneNumber,
this.staffId,
this.staffName,
this.staffPhoneNumber,
this.pickupDate,
this.fromTime,
this.toTime,
this.fcsID,
this.shipperName,
this.shipperPhoneNumber,
this.status,
this.packages = const []});
@override
bool operator ==(Object other) => other is Pickup && other.id == id;
@override
int get hashCode => id.hashCode;
bool isChangedForEdit(Pickup Pickup) {
return Pickup.userID != this.userID ||
Pickup.fcsID != this.fcsID ||
Pickup.packages != this.packages;
}
factory Pickup.fromMap(Map<String, dynamic> map, String id) {
var _pickupDate = (map['pickup_date'] as Timestamp);
return Pickup(
id: id,
pickupDate: _pickupDate.toDate(),
fromTime: map['from_time'],
toTime: map['to_time'],
staffId: map['staff_id'],
staffName: map['staff_name'],
staffPhoneNumber: map['staff_phone_number'],
userID: map['user_id'],
userName: map['user_name'],
userPhoneNumber: map['user_phone_number'],
status: map['status']);
}
Map<String, dynamic> toMap() {
return {
"id": id,
"pickup_date": pickupDate?.toUtc().toIso8601String(),
'from_time': fromTime,
'to_time': toTime,
'staff_id': staffId,
'staff_name': staffName,
"staff_phone_number": staffPhoneNumber,
'user_id': userID,
'user_name': userName,
'user_phone_number': userPhoneNumber,
'status': status,
};
}
@override
String toString() {
return 'Pickup{id: $id}';
}
}

View File

@@ -0,0 +1,54 @@
import 'dart:async';
import 'dart:io';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:fcs/domain/entities/package.dart';
import 'package:fcs/domain/entities/processing.dart';
import 'package:fcs/pages/main/model/base_model.dart';
import 'package:fcs/pagination/paginator_listener.dart';
import 'package:logging/logging.dart';
class PickupModel extends BaseModel {
// List<Processing> pickups = [];
final log = Logger('PickupModel');
StreamSubscription<QuerySnapshot>? listener;
PaginatorListener<Package>? pickups;
int _menuSelectedIndex = 1;
set menuSelectedIndex(int index) {
_menuSelectedIndex = index;
// _loadPackages(_menuSelectedIndex == 2);
// _loadCustomerPackages(_menuSelectedIndex == 2);
notifyListeners();
}
int get menuSelectedIndex => _menuSelectedIndex;
void initUser(user) {
super.initUser(user);
}
void privilegeChanged() {
if (user != null) {
_initData();
}
}
Future<void> _initData() async {}
@override
logout() async {
if (listener != null) await listener!.cancel();
if (pickups != null) pickups!.close();
// pickups = [];
}
Future<void> createProcessing(Processing processing) async {}
Future<void> updateProcessing(Processing processing) async {}
}

View File

@@ -1,30 +0,0 @@
import 'dart:async';
import 'dart:io';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:fcs/domain/entities/package.dart';
import 'package:fcs/domain/entities/processing.dart';
import 'package:fcs/pages/main/model/base_model.dart';
import 'package:logging/logging.dart';
class ProcessingModel extends BaseModel {
List<Processing> processings = [];
final log = Logger('ProcessingModel');
StreamSubscription<QuerySnapshot>? listener;
void initUser(user) {
super.initUser(user);
}
@override
logout() async {
if (listener != null) await listener!.cancel();
processings = [];
}
Future<void> createProcessing(Processing processing) async {}
Future<void> updateProcessing(Processing processing) async {}
}

View File

@@ -64,18 +64,17 @@ class _PickupEditorState extends State<PickupEditor> {
Container( Container(
width: 150, width: 150,
child: DisplayText( child: DisplayText(
text: '', text: '9:00 AM',
labelTextKey: "pickup.time", labelTextKey: "pickup.from_time",
iconData: Icons.timer, iconData: MaterialCommunityIcons.clock_start,
), ),
), ),
Container( Container(
width: 150, width: 150,
child: DisplayText( child: DisplayText(
text: '', text: '12:00 AM',
labelTextKey: "pickup.time", labelTextKey: "pickup.to_time",
iconData: Icons.timer, iconData: MaterialCommunityIcons.clock_end),
),
) )
], ],
); );
@@ -94,18 +93,25 @@ class _PickupEditorState extends State<PickupEditor> {
final completeProcessingBtn = fcsButton( final completeProcessingBtn = fcsButton(
context, context,
getLocalString(context, 'pickup.edit.complete.btn'), getLocalString(context, 'pickup.edit.complete.btn'),
callack: _completeProcessing, callack: _confirmComplete,
); );
final descBox = DisplayText(
text: _package!.desc ?? "", final staffNameBox = DisplayText(
labelTextKey: 'processing.desc', text: _package != null ? _package!.userName : "",
iconData: MaterialCommunityIcons.message_text_outline, labelTextKey: "pickup.staff.name",
iconData: Icons.perm_identity,
); );
final remarkBox = InputText( final remarkBox = InputText(
labelTextKey: 'pickup.remark', labelTextKey: 'pickup.remark',
iconData: Entypo.new_message, iconData: Entypo.new_message,
controller: _remarkCtl); controller: _remarkCtl);
final statusBox = DisplayText(
text: _package != null ? _package!.status : "",
labelTextKey: "pickup.status",
iconData: Icons.av_timer,
);
final img = MultiImageFile( final img = MultiImageFile(
enabled: true, enabled: true,
controller: multiImgController, controller: multiImgController,
@@ -144,7 +150,8 @@ class _PickupEditorState extends State<PickupEditor> {
pickupNumberBox, pickupNumberBox,
pickupDateBox, pickupDateBox,
timeBox, timeBox,
descBox, staffNameBox,
statusBox,
remarkBox, remarkBox,
img, img,
_package!.status == 'packed' _package!.status == 'packed'
@@ -236,7 +243,7 @@ class _PickupEditorState extends State<PickupEditor> {
); );
} }
_completeProcessing() async { _completePickup() async {
if (_user!.fcsID == null || _user!.fcsID == "") { if (_user!.fcsID == null || _user!.fcsID == "") {
showMsgDialog(context, "Error", "Expected FCS-ID"); showMsgDialog(context, "Error", "Expected FCS-ID");
return; return;
@@ -247,12 +254,12 @@ class _PickupEditorState extends State<PickupEditor> {
PackageModel packageModel = PackageModel packageModel =
Provider.of<PackageModel>(context, listen: false); Provider.of<PackageModel>(context, listen: false);
try { try {
_package!.fcsID = _user!.fcsID; // _package!.fcsID = _user!.fcsID;
_package!.desc = _descCtl.text; // _package!.desc = _descCtl.text;
_package!.remark = _remarkCtl.text; // _package!.remark = _remarkCtl.text;
_package!.market = selectedMarket!; // _package!.market = selectedMarket!;
await packageModel.updateProcessing(_package!, // await packageModel.updateProcessing(_package!,
multiImgController.getAddedFile, multiImgController.getDeletedUrl); // multiImgController.getAddedFile, multiImgController.getDeletedUrl);
Navigator.pop(context); Navigator.pop(context);
} catch (e) { } catch (e) {
showMsgDialog(context, "Error", e.toString()); showMsgDialog(context, "Error", e.toString());
@@ -263,6 +270,12 @@ class _PickupEditorState extends State<PickupEditor> {
} }
} }
_confirmComplete() {
showConfirmDialog(context, "pickup.confirm.complete", () {
_completePickup();
});
}
isDataChanged() { isDataChanged() {
if (isNew) { if (isNew) {
return _user!.fcsID != "" || return _user!.fcsID != "" ||

View File

@@ -54,55 +54,29 @@ class _PickupInfoState extends State<PickupInfo> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final pickupNumberBox = DisplayText( final pickupNumberBox = DisplayText(
text: _package != null ? _package!.trackingID : '', text: _package != null ? '210502-ASDFRE' : '210502-ASDFRE',
labelTextKey: "pickup.pickup_number", labelTextKey: "pickup.pickup_number",
iconData: SimpleLineIcons.direction, iconData: SimpleLineIcons.direction,
); );
var fcsIDBox = DisplayText(
text: _package != null ? _package!.fcsID : "", final staffNameBox = DisplayText(
labelTextKey: "pickup.fcs.id",
icon: FcsIDIcon(),
);
final phoneNumberBox = DisplayText(
text: _package != null ? _package!.phoneNumber : "",
labelTextKey: "pickup.phone",
iconData: Icons.phone,
);
final customerNameBox = DisplayText(
text: _package != null ? _package!.userName : "", text: _package != null ? _package!.userName : "",
labelTextKey: "pickup.consignee.name", labelTextKey: "pickup.staff.name",
iconData: Icons.perm_identity, iconData: Icons.perm_identity,
); );
var senderFcsIDBox = DisplayText(
text: _package != null ? _package!.senderFCSID : "",
labelTextKey: "pickup.fcs.id",
icon: FcsIDIcon(),
);
final senderPhoneNumberBox = DisplayText(
text: _package != null ? _package!.senderPhoneNumber : "",
labelTextKey: "pickup.phone",
iconData: Icons.phone,
);
final senderNameBox = DisplayText(
text: _package != null ? _package!.senderName : "",
labelTextKey: "pickup.shipper.name",
iconData: Icons.perm_identity,
);
final marketBox = DisplayText(
text: _package != null ? _package!.market : "-",
labelTextKey: "pickup.market",
iconData: Icons.store,
);
final descBox = DisplayText(
text: _package != null ? _package!.desc : "-",
labelTextKey: "pickup.desc",
iconData: MaterialCommunityIcons.message_text_outline,
);
final remarkBox = DisplayText( final remarkBox = DisplayText(
text: _package != null ? _package!.remark : "-", text: _package != null ? _package!.remark : "-",
labelTextKey: "pickup.remark", labelTextKey: "pickup.remark",
iconData: Entypo.new_message, iconData: Entypo.new_message,
); );
final statusBox = DisplayText(
text: _package != null ? _package!.status : "",
labelTextKey: "pickup.status",
iconData: Icons.av_timer,
);
final img = MultiImageFile( final img = MultiImageFile(
enabled: false, enabled: false,
controller: multiImgController, controller: multiImgController,
@@ -115,39 +89,26 @@ class _PickupInfoState extends State<PickupInfo> {
Container( Container(
width: 150, width: 150,
child: DisplayText( child: DisplayText(
text: '', text: '9:00 AM',
labelTextKey: "pickup.time", labelTextKey: "pickup.from_time",
iconData: Icons.timer, iconData: MaterialCommunityIcons.clock_start,
), ),
), ),
Container( Container(
width: 150, width: 150,
child: DisplayText( child: DisplayText(
text: '', text: '12:00 AM',
labelTextKey: "pickup.time", labelTextKey: "pickup.to_time",
iconData: Icons.timer, iconData: MaterialCommunityIcons.clock_end,
), ),
) )
], ],
); );
final consigneeBox = Container( final continueBtn = fcsButton(
child: Column( context,
children: [ getLocalString(context, 'pickup.continue.btn'),
fcsIDBox, callack: _gotoEditor,
phoneNumberBox,
customerNameBox,
],
),
);
final shipperBox = Container(
child: Column(
children: [
senderFcsIDBox,
senderPhoneNumberBox,
senderNameBox,
],
),
); );
final pickupDateBox = DisplayText( final pickupDateBox = DisplayText(
@@ -173,16 +134,6 @@ class _PickupInfoState extends State<PickupInfo> {
fontSize: 20, fontSize: 20,
color: primaryColor, color: primaryColor,
), ),
actions: <Widget>[
IconButton(
icon: Icon(Icons.delete, color: primaryColor),
onPressed: _delete,
),
IconButton(
icon: Icon(Icons.edit, color: primaryColor),
onPressed: _gotoEditor,
),
],
), ),
body: Card( body: Card(
child: Column( child: Column(
@@ -194,12 +145,11 @@ class _PickupInfoState extends State<PickupInfo> {
pickupNumberBox, pickupNumberBox,
pickupDateBox, pickupDateBox,
timeBox, timeBox,
descBox, staffNameBox,
remarkBox, remarkBox,
statusBox,
_package!.photoUrls.length == 0 ? Container() : img, _package!.photoUrls.length == 0 ? Container() : img,
StatusTree( _package!.status == "packed" ? continueBtn : Container(),
shipmentHistory: _package!.shipmentHistory,
currentStatus: _package!.status ?? ""),
SizedBox( SizedBox(
height: 20, height: 20,
) )

View File

@@ -147,12 +147,12 @@ class _MultiImageFileState extends State<MultiImageFile> {
errorWidget: (context, url, error) => errorWidget: (context, url, error) =>
Icon(Icons.error), Icon(Icons.error),
) )
: FittedBox( : Image.file(
fit: BoxFit.cover, fileContainers[index].file!,
child: Image.file( width: 50,
fileContainers[index].file!, height: 50,
), fit: BoxFit.cover,
), ),
), ),
), ),
widget.enabled widget.enabled