add fcs shipment apis
This commit is contained in:
@@ -5,18 +5,17 @@ import 'package:fcs/pages/fcs_shipment/model/fcs_shipment_model.dart';
|
||||
import 'package:fcs/pages/main/model/language_model.dart';
|
||||
import 'package:fcs/pages/main/model/main_model.dart';
|
||||
import 'package:fcs/pages/widgets/display_text.dart';
|
||||
import 'package:fcs/pages/widgets/input_date.dart';
|
||||
import 'package:fcs/pages/widgets/input_text.dart';
|
||||
import 'package:fcs/pages/widgets/label_widgets.dart';
|
||||
import 'package:fcs/pages/widgets/local_text.dart';
|
||||
import 'package:fcs/pages/widgets/popupmenu.dart';
|
||||
import 'package:fcs/pages/widgets/progress.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../main/util.dart';
|
||||
|
||||
class FcsShipmentEditor extends StatefulWidget {
|
||||
@@ -37,22 +36,28 @@ class _FcsShipmentEditorState extends State<FcsShipmentEditor> {
|
||||
TextEditingController _portController = new TextEditingController();
|
||||
TextEditingController _destinationController = new TextEditingController();
|
||||
TextEditingController _statusController = new TextEditingController();
|
||||
TextEditingController _remarkController = new TextEditingController();
|
||||
|
||||
FcsShipment _shipment = new FcsShipment();
|
||||
bool _isLoading = false;
|
||||
String _currentShipment;
|
||||
String _currentShipmentType;
|
||||
bool _isNew = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_isNew = widget.shipment == null;
|
||||
if (widget.shipment != null) {
|
||||
_shipment = widget.shipment;
|
||||
_shipmentNumberController.text = _shipment.shipmentNumber;
|
||||
_cutoffDateController.text = dateFormatter.format(_shipment.cutoffDate);
|
||||
_arrivalDateController.text = dateFormatter.format(_shipment.arrivalDate);
|
||||
_departureDateControler.text =
|
||||
dateFormatter.format(_shipment.departureDate);
|
||||
_statusController.text = _shipment.status;
|
||||
_currentShipmentType = _shipment.shipType;
|
||||
_consigneeController.text = _shipment.consignee;
|
||||
_portController.text = _shipment.port;
|
||||
_destinationController.text = _shipment.destination;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,76 +66,21 @@ class _FcsShipmentEditorState extends State<FcsShipmentEditor> {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Widget showShipmentNumber(BuildContext context) {
|
||||
return Container(
|
||||
padding: EdgeInsets.only(top: 10),
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
Icon(Icons.text_rotation_none),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(right: 8.0),
|
||||
child: labeledText(
|
||||
context, _shipmentNumberController.text, "shipment.number"),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget showShipmentTypes(
|
||||
BuildContext context, FcsShipmentModel shipmentModel) {
|
||||
return Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: <Widget>[
|
||||
Icon(MaterialCommunityIcons.box_shadow),
|
||||
SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
new Flexible(
|
||||
child: Container(
|
||||
width: 200.0,
|
||||
child: DropdownButton<String>(
|
||||
value: _currentShipment,
|
||||
isExpanded: true,
|
||||
hint: Text(
|
||||
'Select shipment type',
|
||||
),
|
||||
onChanged: changedDropDown,
|
||||
items: shipmentModel.shipmentType
|
||||
.map<DropdownMenuItem<String>>((String shipment) {
|
||||
return new DropdownMenuItem<String>(
|
||||
value: shipment,
|
||||
child: new Text(shipment,
|
||||
style:
|
||||
new TextStyle(color: Colors.black87, fontSize: 17)),
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
void changedDropDown(selected) {
|
||||
setState(() {
|
||||
_currentShipment = selected;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var shipmentModel = Provider.of<FcsShipmentModel>(context);
|
||||
var languageModel = Provider.of<LanguageModel>(context);
|
||||
var mainModel = Provider.of<MainModel>(context);
|
||||
|
||||
final createBtn = fcsButton(
|
||||
context,
|
||||
getLocalString(context, "FCSshipment.create"),
|
||||
callack: _create,
|
||||
);
|
||||
|
||||
final updateBtn = fcsButton(
|
||||
context,
|
||||
getLocalString(context, "FCSshipment.update"),
|
||||
callack: _update,
|
||||
);
|
||||
|
||||
return LocalProgress(
|
||||
@@ -150,111 +100,74 @@ class _FcsShipmentEditorState extends State<FcsShipmentEditor> {
|
||||
color: primaryColor,
|
||||
fontSize: 18,
|
||||
),
|
||||
actions: [menuPopWidget(context)],
|
||||
actions: _isNew ? [] : [menuPopWidget(context)],
|
||||
),
|
||||
body: Card(
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(10.0),
|
||||
child: ListView(children: <Widget>[
|
||||
// _showCustomerData(mainModel.customer),
|
||||
widget.shipment == null
|
||||
? InputText(
|
||||
labelTextKey: "FCSshipment.number",
|
||||
iconData: Ionicons.ios_airplane,
|
||||
controller: _shipmentNumberController,
|
||||
)
|
||||
: DisplayText(
|
||||
iconData: Ionicons.ios_airplane,
|
||||
labelText: "FCSshipment.number",
|
||||
text: _shipmentNumberController.text),
|
||||
|
||||
widget.shipment == null
|
||||
? InputText(
|
||||
labelTextKey: "FCSshipment.cutoff_date",
|
||||
iconData: Icons.date_range,
|
||||
controller: _cutoffDateController,
|
||||
)
|
||||
: Container(),
|
||||
|
||||
InputText(
|
||||
labelTextKey: "FCSshipment.ETA",
|
||||
iconData: Icons.date_range,
|
||||
controller: _arrivalDateController,
|
||||
),
|
||||
|
||||
InputText(
|
||||
labelTextKey: "FCSshipment.departure_date",
|
||||
iconData: Icons.date_range,
|
||||
controller: _departureDateControler,
|
||||
),
|
||||
widget.shipment == null
|
||||
? DropdownButtonFormField(
|
||||
decoration: InputDecoration(
|
||||
enabledBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(color: primaryColor)),
|
||||
fillColor: Colors.white,
|
||||
labelStyle: languageModel.isEng
|
||||
? labelStyle
|
||||
: labelStyleMM,
|
||||
labelText: AppTranslations.of(context)
|
||||
.text('FCSshipment.shipment_type'),
|
||||
icon: Icon(Ionicons.ios_airplane,
|
||||
color: primaryColor)),
|
||||
items: shipmentModel.shipmentType
|
||||
.map((e) =>
|
||||
DropdownMenuItem(child: Text(e), value: e))
|
||||
.toList(),
|
||||
onChanged: (selected) => {
|
||||
setState(() {
|
||||
_currentShipment = selected;
|
||||
})
|
||||
},
|
||||
)
|
||||
: Container(),
|
||||
|
||||
widget.shipment == null
|
||||
? InputText(
|
||||
labelTextKey: 'FCSshipment.consignee',
|
||||
iconData: Icons.work,
|
||||
controller: _consigneeController)
|
||||
: Container(),
|
||||
widget.shipment == null
|
||||
? InputText(
|
||||
labelTextKey: 'FCSshipment.port_of_loading',
|
||||
iconData: FontAwesomeIcons.ship,
|
||||
controller: _portController)
|
||||
: Container(),
|
||||
widget.shipment == null
|
||||
? InputText(
|
||||
labelTextKey: 'FCSshipment.final_destination',
|
||||
iconData: MaterialCommunityIcons.location_enter,
|
||||
controller: _destinationController)
|
||||
: Container(),
|
||||
widget.shipment == null
|
||||
? Container()
|
||||
: Container(
|
||||
padding: EdgeInsets.only(top: 5),
|
||||
child: DisplayText(
|
||||
text: _statusController.text,
|
||||
iconData: Icons.av_timer,
|
||||
labelText: 'FCSshipment.status',
|
||||
)),
|
||||
|
||||
widget.shipment == null
|
||||
? Container()
|
||||
: InputText(
|
||||
labelTextKey: 'FCSshipment.remark',
|
||||
iconData: MaterialCommunityIcons.note,
|
||||
controller: _remarkController),
|
||||
]),
|
||||
)),
|
||||
widget.shipment == null ? createBtn : updateBtn,
|
||||
SizedBox(height: 15)
|
||||
],
|
||||
),
|
||||
body: Padding(
|
||||
padding: const EdgeInsets.all(10.0),
|
||||
child: ListView(children: <Widget>[
|
||||
InputText(
|
||||
labelTextKey: "FCSshipment.number",
|
||||
iconData: Ionicons.ios_airplane,
|
||||
controller: _shipmentNumberController,
|
||||
),
|
||||
InputDate(
|
||||
labelTextKey: "FCSshipment.cutoff_date",
|
||||
iconData: Icons.date_range,
|
||||
controller: _cutoffDateController,
|
||||
),
|
||||
InputDate(
|
||||
labelTextKey: "FCSshipment.ETA",
|
||||
iconData: Icons.date_range,
|
||||
controller: _arrivalDateController,
|
||||
),
|
||||
InputDate(
|
||||
labelTextKey: "FCSshipment.departure_date",
|
||||
iconData: Icons.date_range,
|
||||
controller: _departureDateControler,
|
||||
),
|
||||
DropdownButtonFormField(
|
||||
value: _currentShipmentType == "" ? null : _currentShipmentType,
|
||||
decoration: InputDecoration(
|
||||
enabledBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(color: primaryColor)),
|
||||
fillColor: Colors.white,
|
||||
labelStyle: languageModel.isEng ? labelStyle : labelStyleMM,
|
||||
labelText: AppTranslations.of(context)
|
||||
.text('FCSshipment.shipment_type'),
|
||||
icon: Icon(Ionicons.ios_airplane, color: primaryColor)),
|
||||
items: mainModel.setting.shipmentTypes
|
||||
.map((e) => DropdownMenuItem(child: Text(e), value: e))
|
||||
.toList(),
|
||||
onChanged: (selected) => {
|
||||
setState(() {
|
||||
_currentShipmentType = selected;
|
||||
})
|
||||
},
|
||||
),
|
||||
InputText(
|
||||
labelTextKey: 'FCSshipment.consignee',
|
||||
iconData: Icons.work,
|
||||
controller: _consigneeController),
|
||||
InputText(
|
||||
labelTextKey: 'FCSshipment.port_of_loading',
|
||||
iconData: FontAwesomeIcons.ship,
|
||||
controller: _portController),
|
||||
InputText(
|
||||
labelTextKey: 'FCSshipment.final_destination',
|
||||
iconData: MaterialCommunityIcons.location_enter,
|
||||
controller: _destinationController),
|
||||
_isNew
|
||||
? Container()
|
||||
: Container(
|
||||
padding: EdgeInsets.only(top: 5),
|
||||
child: DisplayText(
|
||||
text: _statusController.text,
|
||||
iconData: Icons.av_timer,
|
||||
labelTextKey: 'FCSshipment.status',
|
||||
)),
|
||||
_isNew ? createBtn : updateBtn,
|
||||
SizedBox(height: 15)
|
||||
]),
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -312,4 +225,96 @@ class _FcsShipmentEditorState extends State<FcsShipmentEditor> {
|
||||
}).toList();
|
||||
});
|
||||
}
|
||||
|
||||
FcsShipment _getPayload() {
|
||||
FcsShipment fcsShipment = FcsShipment();
|
||||
fcsShipment.id = _shipment.id;
|
||||
fcsShipment.shipmentNumber = _shipmentNumberController.text;
|
||||
fcsShipment.shipType = _currentShipmentType;
|
||||
fcsShipment.consignee = _consigneeController.text;
|
||||
fcsShipment.port = _portController.text;
|
||||
fcsShipment.destination = _destinationController.text;
|
||||
try {
|
||||
var cutoffDate = _cutoffDateController.text;
|
||||
var arrivalDate = _arrivalDateController.text;
|
||||
var depDate = _departureDateControler.text;
|
||||
fcsShipment.cutoffDate =
|
||||
cutoffDate == "" ? null : dateFormatter.parse(cutoffDate);
|
||||
fcsShipment.arrivalDate =
|
||||
arrivalDate == "" ? null : dateFormatter.parse(arrivalDate);
|
||||
fcsShipment.departureDate =
|
||||
depDate == "" ? null : dateFormatter.parse(depDate);
|
||||
} catch (e) {
|
||||
showMsgDialog(context, "Error", e.toString()); // shold never happen
|
||||
}
|
||||
return fcsShipment;
|
||||
}
|
||||
|
||||
Future<bool> _validate(FcsShipment fcsShipment) async {
|
||||
if (fcsShipment.shipmentNumber == "") {
|
||||
await showMsgDialog(context, "Error", "Invalid shipment number!");
|
||||
return false;
|
||||
}
|
||||
if (fcsShipment.shipType == null) {
|
||||
await showMsgDialog(context, "Error", "Invalid shipment type!");
|
||||
return false;
|
||||
}
|
||||
if (fcsShipment.cutoffDate == null) {
|
||||
await showMsgDialog(context, "Error", "Invalid cutoff date!");
|
||||
return false;
|
||||
}
|
||||
if (fcsShipment.arrivalDate == null) {
|
||||
await showMsgDialog(context, "Error", "Invalid ETA date!");
|
||||
return false;
|
||||
}
|
||||
if (fcsShipment.departureDate == null) {
|
||||
await showMsgDialog(context, "Error", "Invalid departure date!");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Future<void> _create() async {
|
||||
FcsShipment fcsShipment = _getPayload();
|
||||
bool valid = await _validate(fcsShipment);
|
||||
if (!valid) {
|
||||
return;
|
||||
}
|
||||
setState(() {
|
||||
_isLoading = true;
|
||||
});
|
||||
var shipmentModel = Provider.of<FcsShipmentModel>(context, listen: false);
|
||||
try {
|
||||
await shipmentModel.create(fcsShipment);
|
||||
Navigator.pop(context);
|
||||
} catch (e) {
|
||||
showMsgDialog(context, "Error", e.toString());
|
||||
} finally {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _update() async {
|
||||
FcsShipment fcsShipment = _getPayload();
|
||||
bool valid = await _validate(fcsShipment);
|
||||
if (!valid) {
|
||||
return;
|
||||
}
|
||||
setState(() {
|
||||
_isLoading = true;
|
||||
});
|
||||
var shipmentModel = Provider.of<FcsShipmentModel>(context, listen: false);
|
||||
try {
|
||||
await shipmentModel.update(fcsShipment);
|
||||
Navigator.pop(context);
|
||||
} catch (e) {
|
||||
showMsgDialog(context, "Error", e.toString());
|
||||
} finally {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user