add shipment in processing, update package, processing and receiving
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
// ignore_for_file: use_build_context_synchronously
|
||||
|
||||
import 'package:fcs/domain/entities/package.dart';
|
||||
import 'package:fcs/domain/entities/processing.dart';
|
||||
import 'package:fcs/domain/entities/user.dart';
|
||||
@@ -6,7 +8,6 @@ import 'package:fcs/pages/main/util.dart';
|
||||
import 'package:fcs/pages/package/package_info.dart';
|
||||
import 'package:fcs/pages/user_search/user_search.dart';
|
||||
import 'package:fcs/pages/widgets/display_text.dart';
|
||||
import 'package:fcs/pages/widgets/fcs_id_icon.dart';
|
||||
import 'package:fcs/pages/widgets/local_app_bar.dart';
|
||||
import 'package:fcs/pages/widgets/progress.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
@@ -14,12 +15,14 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_vector_icons/flutter_vector_icons.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '../../domain/entities/fcs_shipment.dart';
|
||||
import '../fcs_shipment/model/fcs_shipment_model.dart';
|
||||
import '../widgets/local_dropdown.dart';
|
||||
import 'model/processing_model.dart';
|
||||
import 'package_editor.dart';
|
||||
|
||||
class ProcesingEditor extends StatefulWidget {
|
||||
final Processing? processing;
|
||||
const ProcesingEditor({this.processing});
|
||||
const ProcesingEditor({super.key});
|
||||
@override
|
||||
_ProcesingEditorState createState() => _ProcesingEditorState();
|
||||
}
|
||||
@@ -27,147 +30,105 @@ class ProcesingEditor extends StatefulWidget {
|
||||
class _ProcesingEditorState extends State<ProcesingEditor> {
|
||||
Processing processing = Processing();
|
||||
bool _isLoading = false;
|
||||
late bool _isNew;
|
||||
User? consignee;
|
||||
User? sender;
|
||||
User? _consignee;
|
||||
User? _sender;
|
||||
List<Package> packages = [];
|
||||
List<FcsShipment> _shipments = [];
|
||||
FcsShipment? _shipment;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_loadShipment();
|
||||
super.initState();
|
||||
_isNew = widget.processing == null;
|
||||
if (!_isNew) {
|
||||
processing = widget.processing!;
|
||||
consignee = User(
|
||||
fcsID: processing.userID,
|
||||
name: processing.userName,
|
||||
phoneNumber: processing.userPhoneNumber);
|
||||
sender = User(
|
||||
fcsID: processing.fcsID,
|
||||
name: processing.shipperName,
|
||||
phoneNumber: processing.shipperPhoneNumber);
|
||||
packages = processing.packages;
|
||||
}
|
||||
|
||||
_loadShipment() async {
|
||||
var fcsShipments =
|
||||
await context.read<FcsShipmentModel>().getActiveFcsShipments();
|
||||
_shipments = fcsShipments;
|
||||
|
||||
if (mounted) {
|
||||
setState(() {});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var fcsIDBox = Row(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: DisplayText(
|
||||
text: consignee != null ? consignee!.fcsID : "",
|
||||
labelTextKey: "processing.fcs.id",
|
||||
icon: FcsIDIcon(),
|
||||
)),
|
||||
final consigneeBox = userSearchBox(context,
|
||||
lableKey: 'box.consignee.title',
|
||||
icon: MaterialCommunityIcons.account_arrow_left,
|
||||
user: _consignee,
|
||||
onSearch: () => searchUser(context, onUserSelect: (u) {
|
||||
setState(() {
|
||||
_consignee = u;
|
||||
});
|
||||
}, popPage: true));
|
||||
|
||||
final senderBox = userSearchBox(context,
|
||||
lableKey: 'box.sender.title',
|
||||
icon: MaterialCommunityIcons.account_arrow_right,
|
||||
user: _sender,
|
||||
onSearch: () => searchUser(context, onUserSelect: (u) {
|
||||
setState(() {
|
||||
_sender = u;
|
||||
});
|
||||
}, popPage: true));
|
||||
|
||||
final fcsShipmentsBox = Container(
|
||||
padding: EdgeInsets.symmetric(vertical: 15),
|
||||
child: LocalDropdown<FcsShipment>(
|
||||
callback: (v) {
|
||||
setState(() {
|
||||
_shipment = v;
|
||||
});
|
||||
},
|
||||
labelKey: "box.shipment",
|
||||
iconData: Ionicons.ios_airplane,
|
||||
display: (u) => u.shipmentNumber,
|
||||
selectedValue: _shipment,
|
||||
values: _shipments,
|
||||
));
|
||||
|
||||
final packageTitleBox = Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Text("Packages (${packages.length})"),
|
||||
IconButton(
|
||||
icon: Icon(Icons.search, color: primaryColor),
|
||||
onPressed: () => searchUser(context, onUserSelect: (u) {
|
||||
setState(() {
|
||||
this.consignee = u;
|
||||
});
|
||||
}, popPage: true)),
|
||||
icon: Icon(
|
||||
Icons.add_circle,
|
||||
color: primaryColor,
|
||||
),
|
||||
onPressed: () async {
|
||||
if (_consignee == null) {
|
||||
showMsgDialog(context, "Error", "Please select consignee");
|
||||
return;
|
||||
}
|
||||
|
||||
if (_sender == null) {
|
||||
showMsgDialog(context, "Error", "Please select sender");
|
||||
return;
|
||||
}
|
||||
|
||||
if (_shipment == null) {
|
||||
showMsgDialog(context, "Error", "Please select shipment");
|
||||
return;
|
||||
}
|
||||
|
||||
Package? package = await Navigator.push<Package>(
|
||||
context,
|
||||
CupertinoPageRoute(
|
||||
builder: (context) => PackageEditor(
|
||||
sender: _sender!,
|
||||
consignee: _consignee!,
|
||||
shipment: _shipment!)),
|
||||
);
|
||||
|
||||
_addPackage(package);
|
||||
// _savePackage(_package);
|
||||
}),
|
||||
],
|
||||
);
|
||||
|
||||
final phoneNumberBox = DisplayText(
|
||||
text: consignee != null ? consignee!.phoneNumber : "",
|
||||
labelTextKey: "processing.phone",
|
||||
maxLines: 2,
|
||||
iconData: Icons.phone,
|
||||
);
|
||||
|
||||
final namebox = DisplayText(
|
||||
text: consignee != null ? consignee!.name : "",
|
||||
labelTextKey: "processing.consignee.name",
|
||||
maxLines: 2,
|
||||
iconData: Icons.person,
|
||||
);
|
||||
|
||||
final consigneeBox = Container(
|
||||
child: Column(
|
||||
children: [
|
||||
fcsIDBox,
|
||||
phoneNumberBox,
|
||||
namebox,
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
var shipperIDBox = Row(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: DisplayText(
|
||||
text: sender != null ? sender!.fcsID : "",
|
||||
labelTextKey: "processing.fcs.id",
|
||||
icon: FcsIDIcon(),
|
||||
)),
|
||||
IconButton(
|
||||
icon: Icon(Icons.search, color: primaryColor),
|
||||
onPressed: () => searchUser(context, onUserSelect: (u) {
|
||||
setState(() {
|
||||
this.sender = u;
|
||||
});
|
||||
}, popPage: true)),
|
||||
],
|
||||
);
|
||||
|
||||
final shipperPhoneNumberBox = DisplayText(
|
||||
text: sender != null ? sender!.phoneNumber : "",
|
||||
labelTextKey: "processing.phone",
|
||||
maxLines: 2,
|
||||
iconData: Icons.phone,
|
||||
);
|
||||
|
||||
final shipperNamebox = DisplayText(
|
||||
text: sender != null ? sender!.name : "",
|
||||
labelTextKey: "processing.shipper.name",
|
||||
maxLines: 2,
|
||||
iconData: Icons.person,
|
||||
);
|
||||
|
||||
final shipperBox = Container(
|
||||
child: Column(
|
||||
children: [
|
||||
shipperIDBox,
|
||||
shipperPhoneNumberBox,
|
||||
shipperNamebox,
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
final packageTitleBox = Container(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Text("Packages (${packages.length})"),
|
||||
IconButton(
|
||||
icon: Icon(
|
||||
Icons.add_circle,
|
||||
color: primaryColor,
|
||||
),
|
||||
onPressed: () async {
|
||||
if (this.consignee == null) {
|
||||
showMsgDialog(
|
||||
context, "Warning", "Please select 'Consignee'");
|
||||
return;
|
||||
}
|
||||
Package? _package = await Navigator.push<Package>(
|
||||
context,
|
||||
CupertinoPageRoute(
|
||||
builder: (context) => PackageEditor(
|
||||
sender: this.sender,
|
||||
consignee: this.consignee,
|
||||
)),
|
||||
);
|
||||
|
||||
_addPackage(_package);
|
||||
// _savePackage(_package);
|
||||
}),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
final createButton = fcsButton(
|
||||
context,
|
||||
getLocalString(context, 'processing.edit.complete.btn'),
|
||||
@@ -178,7 +139,7 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
|
||||
inAsyncCall: _isLoading,
|
||||
child: Scaffold(
|
||||
appBar: LocalAppBar(
|
||||
labelKey: _isNew ? "processing.create" : "processing.update",
|
||||
labelKey: "processing.create",
|
||||
backgroundColor: Colors.white,
|
||||
labelColor: primaryColor,
|
||||
arrowColor: primaryColor,
|
||||
@@ -193,10 +154,11 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
|
||||
Row(
|
||||
children: [
|
||||
Flexible(child: consigneeBox),
|
||||
Flexible(child: shipperBox)
|
||||
Flexible(child: senderBox)
|
||||
],
|
||||
),
|
||||
Divider(),
|
||||
const SizedBox(height: 10),
|
||||
fcsShipmentsBox,
|
||||
packageTitleBox,
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
@@ -206,9 +168,7 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
|
||||
height: 20,
|
||||
),
|
||||
createButton,
|
||||
SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
SizedBox(height: 10),
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -236,7 +196,7 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
|
||||
_addPackage(Package? package) {
|
||||
if (package == null) return;
|
||||
|
||||
this.packages.add(package);
|
||||
packages.add(package);
|
||||
setState(() {});
|
||||
}
|
||||
|
||||
@@ -253,12 +213,7 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
|
||||
ProcessingModel processingModel =
|
||||
Provider.of<ProcessingModel>(context, listen: false);
|
||||
try {
|
||||
if (_isNew) {
|
||||
await processingModel.createProcessing(processing);
|
||||
} else {
|
||||
processing.id = widget.processing!.id;
|
||||
await processingModel.updateProcessing(processing);
|
||||
}
|
||||
await processingModel.createProcessing(processing);
|
||||
Navigator.pop(context);
|
||||
} catch (e) {
|
||||
showMsgDialog(context, "Error", e.toString());
|
||||
|
||||
Reference in New Issue
Block a user