|
|
@ -23,6 +23,7 @@ import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
|
|
|
|
import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart';
|
|
|
|
import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart';
|
|
|
|
import 'package:test_sa/providers/service_request_providers/loan_availability_provider.dart';
|
|
|
|
import 'package:test_sa/providers/service_request_providers/loan_availability_provider.dart';
|
|
|
|
import 'package:test_sa/providers/work_order/vendor_provider.dart';
|
|
|
|
import 'package:test_sa/providers/work_order/vendor_provider.dart';
|
|
|
|
|
|
|
|
import 'package:test_sa/views/widgets/e_signature/e_signature.dart';
|
|
|
|
import 'package:test_sa/views/widgets/equipment/pick_asset.dart';
|
|
|
|
import 'package:test_sa/views/widgets/equipment/pick_asset.dart';
|
|
|
|
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
|
|
|
|
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
|
|
|
|
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
|
|
|
|
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
|
|
|
@ -216,6 +217,15 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
|
|
|
|
enabled: _subWorkOrders?.timer?.endAt == null,
|
|
|
|
enabled: _subWorkOrders?.timer?.endAt == null,
|
|
|
|
onChange: (timer) async {
|
|
|
|
onChange: (timer) async {
|
|
|
|
_subWorkOrders.timer = timer;
|
|
|
|
_subWorkOrders.timer = timer;
|
|
|
|
|
|
|
|
if (timer?.startAt != null && timer?.endAt != null) {
|
|
|
|
|
|
|
|
if (timer?.durationInSecond != 0) {
|
|
|
|
|
|
|
|
_subWorkOrders.workingHours = num.tryParse((((timer?.durationInSecond ?? 0) / 60) / 60)?.toStringAsFixed(2) ?? "0");
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
timer.durationInSecond = (timer.endAt.difference(timer.startAt))?.inSeconds;
|
|
|
|
|
|
|
|
String workingHours = (((timer.durationInSecond ?? 0) / 60) / 60).toStringAsFixed(2);
|
|
|
|
|
|
|
|
_subWorkOrders.workingHours = num.tryParse(workingHours ?? "0");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
),
|
|
|
|
),
|
|
|
@ -257,7 +267,10 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
|
|
|
|
title: context.translation.equipmentStatus,
|
|
|
|
title: context.translation.equipmentStatus,
|
|
|
|
initialValue: _subWorkOrders.equipmentStatus,
|
|
|
|
initialValue: _subWorkOrders.equipmentStatus,
|
|
|
|
onSelect: (value) {
|
|
|
|
onSelect: (value) {
|
|
|
|
_subWorkOrders.equipmentStatus = value;
|
|
|
|
if(value!=null) {
|
|
|
|
|
|
|
|
_subWorkOrders.equipmentStatus = value;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
),
|
|
|
|
),
|
|
|
|
8.height,
|
|
|
|
8.height,
|
|
|
@ -295,7 +308,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
|
|
|
|
if (_showVendorFields)
|
|
|
|
if (_showVendorFields)
|
|
|
|
SingleItemDropDownMenu<SupplierDetails, VendorProvider>(
|
|
|
|
SingleItemDropDownMenu<SupplierDetails, VendorProvider>(
|
|
|
|
context: context,
|
|
|
|
context: context,
|
|
|
|
title: context.translation.vendorEng,
|
|
|
|
title: context.translation.supplier,
|
|
|
|
initialValue: _subWorkOrders.supplier ?? initialSupplier,
|
|
|
|
initialValue: _subWorkOrders.supplier ?? initialSupplier,
|
|
|
|
onSelect: (supplier) {
|
|
|
|
onSelect: (supplier) {
|
|
|
|
if (supplier != null) {
|
|
|
|
if (supplier != null) {
|
|
|
@ -309,7 +322,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
|
|
|
|
if (_showVendorFields)
|
|
|
|
if (_showVendorFields)
|
|
|
|
SingleItemDropDownMenu<SuppPersons, NullableLoadingProvider>(
|
|
|
|
SingleItemDropDownMenu<SuppPersons, NullableLoadingProvider>(
|
|
|
|
context: context,
|
|
|
|
context: context,
|
|
|
|
title: context.translation.vendorName,
|
|
|
|
title: context.translation.supplierEngineer,
|
|
|
|
enabled: _subWorkOrders?.supplier?.suppPersons?.isNotEmpty ?? false,
|
|
|
|
enabled: _subWorkOrders?.supplier?.suppPersons?.isNotEmpty ?? false,
|
|
|
|
staticData: _subWorkOrders?.supplier?.suppPersons,
|
|
|
|
staticData: _subWorkOrders?.supplier?.suppPersons,
|
|
|
|
onSelect: (suppPerson) {
|
|
|
|
onSelect: (suppPerson) {
|
|
|
@ -328,16 +341,16 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
|
|
|
|
8.height,
|
|
|
|
8.height,
|
|
|
|
ServiceReportFaultDescription(
|
|
|
|
ServiceReportFaultDescription(
|
|
|
|
requestId: widget.workOrder?.callRequest?.id?.toString(),
|
|
|
|
requestId: widget.workOrder?.callRequest?.id?.toString(),
|
|
|
|
initialValue: _serviceReport.faultDescription,
|
|
|
|
initialValue: _subWorkOrders.faultDescription,
|
|
|
|
onSelect: (status) {
|
|
|
|
onSelect: (status) {
|
|
|
|
_serviceReport.faultDescription = status;
|
|
|
|
_subWorkOrders.faultDescription = status;
|
|
|
|
_workPreformedController?.text = _serviceReport.faultDescription?.workPerformed;
|
|
|
|
_workPreformedController?.text = _subWorkOrders.faultDescription?.workPerformed;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
),
|
|
|
|
),
|
|
|
|
8.height,
|
|
|
|
8.height,
|
|
|
|
AppTextFormField(
|
|
|
|
AppTextFormField(
|
|
|
|
labelText: context.translation.solution,
|
|
|
|
labelText: context.translation.solution,
|
|
|
|
initialValue: _serviceReport?.faultDescription?.workPerformed,
|
|
|
|
initialValue: _subWorkOrders?.faultDescription?.workPerformed,
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
enable: false,
|
|
|
|
enable: false,
|
|
|
|
controller: _workPreformedController,
|
|
|
|
controller: _workPreformedController,
|
|
|
@ -405,9 +418,9 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
|
|
|
|
PartNoButton(
|
|
|
|
PartNoButton(
|
|
|
|
controller: _partQtyController,
|
|
|
|
controller: _partQtyController,
|
|
|
|
spareParts: _spareParts,
|
|
|
|
spareParts: _spareParts,
|
|
|
|
initialList: _serviceReport.sparePartsWorkOrders,
|
|
|
|
initialList: _subWorkOrders.sparePartsWorkOrders,
|
|
|
|
onChange: (parts) {
|
|
|
|
onChange: (parts) {
|
|
|
|
_serviceReport.sparePartsWorkOrders = parts;
|
|
|
|
_subWorkOrders.sparePartsWorkOrders = parts;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
),
|
|
|
|
),
|
|
|
|
8.height,
|
|
|
|
8.height,
|
|
|
@ -415,31 +428,72 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
|
|
|
|
8.height,
|
|
|
|
8.height,
|
|
|
|
AppTextFormField(
|
|
|
|
AppTextFormField(
|
|
|
|
labelText: context.translation.travelingExpense,
|
|
|
|
labelText: context.translation.travelingExpense,
|
|
|
|
initialValue: _serviceReport?.travelingExpenses?.toString(),
|
|
|
|
initialValue: _subWorkOrders?.travelingExpenses?.toString(),
|
|
|
|
textInputType: TextInputType.number,
|
|
|
|
textInputType: TextInputType.number,
|
|
|
|
onSaved: (value) {
|
|
|
|
onSaved: (value) {
|
|
|
|
_serviceReport.travelingExpenses = int.tryParse(value) ?? 0;
|
|
|
|
_subWorkOrders.travelingExpenses = int.tryParse(value) ?? 0;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
),
|
|
|
|
),
|
|
|
|
8.height,
|
|
|
|
8.height,
|
|
|
|
AppTextFormField(
|
|
|
|
AppTextFormField(
|
|
|
|
labelText: context.translation.travelingHours,
|
|
|
|
labelText: context.translation.travelingHours,
|
|
|
|
initialValue: _serviceReport?.travelingHours?.toString(),
|
|
|
|
initialValue: _subWorkOrders?.travelingHours?.toString(),
|
|
|
|
textInputType: TextInputType.number,
|
|
|
|
textInputType: TextInputType.number,
|
|
|
|
onSaved: (value) {
|
|
|
|
onSaved: (value) {
|
|
|
|
_serviceReport.travelingHours = int.tryParse(value) ?? 0;
|
|
|
|
_subWorkOrders.travelingHours = int.tryParse(value) ?? 0;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
),
|
|
|
|
),
|
|
|
|
8.height,
|
|
|
|
8.height,
|
|
|
|
AppTextFormField(
|
|
|
|
AppTextFormField(
|
|
|
|
initialValue: _serviceReport?.comment,
|
|
|
|
initialValue: _subWorkOrders?.comment,
|
|
|
|
labelText: context.translation.technicalComment,
|
|
|
|
labelText: context.translation.technicalComment,
|
|
|
|
alignLabelWithHint: true,
|
|
|
|
alignLabelWithHint: true,
|
|
|
|
textInputType: TextInputType.multiline,
|
|
|
|
textInputType: TextInputType.multiline,
|
|
|
|
onSaved: (value) {
|
|
|
|
onSaved: (value) {
|
|
|
|
_serviceReport.comment = value;
|
|
|
|
_subWorkOrders.comment = value;
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
8.height,
|
|
|
|
|
|
|
|
ESignature(
|
|
|
|
|
|
|
|
title: context.translation.engSign,
|
|
|
|
|
|
|
|
oldSignature: _subWorkOrders.engSignature,
|
|
|
|
|
|
|
|
newSignature: _subWorkOrders.localEngSignature,
|
|
|
|
|
|
|
|
// onChange: (signature) {
|
|
|
|
|
|
|
|
// // if (signature == null || signature.isEmpty) {
|
|
|
|
|
|
|
|
// // setState(() {});
|
|
|
|
|
|
|
|
// // return;
|
|
|
|
|
|
|
|
// // }
|
|
|
|
|
|
|
|
// if (signature == null || signature.isEmpty) return;
|
|
|
|
|
|
|
|
// _subWorkOrders.localEngSignature = signature;
|
|
|
|
|
|
|
|
// _subWorkOrders.engSignature = signature != null ? "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}" : null;
|
|
|
|
|
|
|
|
// print("_serviceReport.engSignature:${_serviceReport.engSignature}");
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
onSaved: (signature) {
|
|
|
|
|
|
|
|
if (signature == null || signature.isEmpty) {
|
|
|
|
|
|
|
|
setState(() {});
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (signature == null || signature.isEmpty) return;
|
|
|
|
|
|
|
|
_subWorkOrders.localEngSignature = signature;
|
|
|
|
|
|
|
|
_subWorkOrders.engSignature = signature != null ? "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}" : null;
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
8.height,
|
|
|
|
|
|
|
|
ESignature(
|
|
|
|
|
|
|
|
title: context.translation.nurseSignature,
|
|
|
|
|
|
|
|
oldSignature: _subWorkOrders.nurseSignature,
|
|
|
|
|
|
|
|
newSignature: _subWorkOrders.localNurseSignature,
|
|
|
|
|
|
|
|
onSaved: (signature) {
|
|
|
|
|
|
|
|
// if (signature == null || signature.isEmpty) {
|
|
|
|
|
|
|
|
// setState(() {});
|
|
|
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
if (signature == null || signature.isEmpty) return;
|
|
|
|
|
|
|
|
_subWorkOrders.localNurseSignature = signature;
|
|
|
|
|
|
|
|
_subWorkOrders.nurseSignature = signature != null ? "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}" : null;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
),
|
|
|
|
),
|
|
|
|
|
|
|
|
16.height,
|
|
|
|
],
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
@ -503,10 +557,10 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
|
|
|
|
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.callLastSituation}");
|
|
|
|
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.callLastSituation}");
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
} else if (_showVendorFields && _subWorkOrders.suppEngineerWorkOrders == null) {
|
|
|
|
} else if (_showVendorFields && _subWorkOrders.suppEngineerWorkOrders == null) {
|
|
|
|
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.vendorEng}");
|
|
|
|
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.supplierEngineer}");
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
} else if (_showVendorFields && (_subWorkOrders.supplier.suppliername == null || _subWorkOrders.supplier.suppliername.isEmpty)) {
|
|
|
|
} else if (_showVendorFields && (_subWorkOrders.supplier.suppliername == null || _subWorkOrders.supplier.suppliername.isEmpty)) {
|
|
|
|
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.vendorName}");
|
|
|
|
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.supplier}");
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
} else if (_subWorkOrders.calllastSituation.value == 12 && (_subWorkOrders.sparePartsWorkOrders == null || _subWorkOrders.sparePartsWorkOrders.isEmpty)) {
|
|
|
|
} else if (_subWorkOrders.calllastSituation.value == 12 && (_subWorkOrders.sparePartsWorkOrders == null || _subWorkOrders.sparePartsWorkOrders.isEmpty)) {
|
|
|
|
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.partNo}");
|
|
|
|
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.partNo}");
|
|
|
|