diff --git a/lib/modules/asset_delivery_module/pages/technical_inpection/asset_delivery_utils.dart b/lib/modules/asset_delivery_module/pages/asset_delivery_utils.dart similarity index 100% rename from lib/modules/asset_delivery_module/pages/technical_inpection/asset_delivery_utils.dart rename to lib/modules/asset_delivery_module/pages/asset_delivery_utils.dart diff --git a/lib/modules/asset_delivery_module/pages/delivery_inspection/delivery_inspection_form_view.dart b/lib/modules/asset_delivery_module/pages/delivery_inspection/delivery_inspection_form_view.dart index cdb4d5e9..9d589023 100644 --- a/lib/modules/asset_delivery_module/pages/delivery_inspection/delivery_inspection_form_view.dart +++ b/lib/modules/asset_delivery_module/pages/delivery_inspection/delivery_inspection_form_view.dart @@ -113,9 +113,16 @@ class _DeliveryInspectionFormViewState extends State ), 8.height, Text( - model.totalTime != null ? '${model.totalTime.toString()} hours' : '-', - style: AppTextStyles.bodyText2.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral120), + formatInspectionDuration(model.totalTime), + style: AppTextStyles.bodyText2.copyWith( + color: context.isDark ? AppColor.neutral30 : AppColor.neutral120, + ), ), + + // Text( + // model.totalTime != null ? '${model.totalTime.toString()} hours' : '-', + // style: AppTextStyles.bodyText2.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral120), + // ), 8.height, const Divider().defaultStyle(context), Text( @@ -409,21 +416,21 @@ class _DeliveryInspectionFormViewState extends State if (from == null && to == null) return true; if (from != null) { if (from.isAfter(DateTime.now())) { - "Start time cannot be in the future".showToast; + "Time From cannot be in the future".showToast; return false; } if (to != null && from.isAfter(to)) { - "Start time cannot be after end time".showToast; + "Time To cannot be after Time From".showToast; return false; } } if (to != null) { if (to.isAfter(DateTime.now())) { - "End time cannot be in the future".showToast; + "Time To cannot be in the future".showToast; return false; } if (from != null && to.isBefore(from)) { - "End time cannot be before start time".showToast; + "Timer To cannot be before from time".showToast; return false; } } @@ -443,6 +450,17 @@ class _DeliveryInspectionFormViewState extends State return true; } + String formatInspectionDuration(num? hours) { + if (hours == null) return '-'; + + if (hours < 1) { + final minutes = (hours * 60).round(); + return '$minutes minutes'; + } + + return '${hours.toStringAsFixed(2)} hours'; + } + Widget _timePickerThemeBuilder(BuildContext context, Widget? child) { final ThemeData currentTheme = Theme.of(context); diff --git a/lib/modules/asset_delivery_module/pages/delivery_inspection/inpection_bottomsheet.dart b/lib/modules/asset_delivery_module/pages/delivery_inspection/inpection_bottomsheet.dart index 106b3a97..434f3382 100644 --- a/lib/modules/asset_delivery_module/pages/delivery_inspection/inpection_bottomsheet.dart +++ b/lib/modules/asset_delivery_module/pages/delivery_inspection/inpection_bottomsheet.dart @@ -76,6 +76,7 @@ class _InspectionPersonBottomSheetState extends State { AssetDeliveryProvider? assetDeliveryProvider; - late TextEditingController _controller; + + // late TextEditingController _controller; @override void initState() { - _controller = TextEditingController(text: widget.initialValue); + // _controller = TextEditingController(text: widget.initialValue); super.initState(); } @override void didUpdateWidget(covariant OracleUserAutoCompleteField oldWidget) { - if (widget.initialValue != oldWidget.initialValue) { - _controller = TextEditingController(text: widget.initialValue); - } + // if (widget.initialValue != oldWidget.initialValue) { + // _controller = TextEditingController(text: widget.initialValue); + // } super.didUpdateWidget(oldWidget); } @override void dispose() { - _controller.dispose(); + // _controller.dispose(); super.dispose(); } @@ -59,16 +60,18 @@ class _AutoCompletePartsFieldState extends State { // boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], ), child: Autocomplete( + key: ValueKey(widget.initialValue), optionsBuilder: (TextEditingValue textEditingValue) async { if (textEditingValue.text.isEmpty) { return const Iterable.empty(); } return await assetDeliveryProvider!.getOracleUserAutoCompleteDetails(query: textEditingValue.text); }, + initialValue: TextEditingValue(text: widget.initialValue), displayStringForOption: (OracleUserModel option) => option.fullName ?? "", fieldViewBuilder: (BuildContext context, TextEditingController fieldTextEditingController, FocusNode fieldFocusNode, VoidCallback onFieldSubmitted) { return TextField( - controller: _controller, + controller: fieldTextEditingController, focusNode: fieldFocusNode, style: AppTextStyles.bodyText.copyWith(color: AppColor.black10), textAlign: TextAlign.start, @@ -101,11 +104,11 @@ class _AutoCompletePartsFieldState extends State { ); }, onSelected: (OracleUserModel selection) { - if (widget.clearAfterPick) { - _controller.clear(); - } else { - _controller.text = selection.fullName ?? ''; - } + // if (widget.clearAfterPick) { + // fieldTextEditingController.clear(); + // } else { + // _controller.text = selection.fullName ?? ''; + // } widget.onPick(selection); }, ), diff --git a/lib/modules/asset_delivery_module/pages/end_user_acceptance/update_end_user_asset_details_view.dart b/lib/modules/asset_delivery_module/pages/end_user_acceptance/update_end_user_asset_details_view.dart index 2918d5b2..ecccc451 100644 --- a/lib/modules/asset_delivery_module/pages/end_user_acceptance/update_end_user_asset_details_view.dart +++ b/lib/modules/asset_delivery_module/pages/end_user_acceptance/update_end_user_asset_details_view.dart @@ -431,12 +431,12 @@ class _UpdateEndUserAssetDetailsViewState extends State { backgroundColor: AppColor.fieldBgColor(context), controller: serialNoCtrl, initialValue: model.serialNo ?? '', + validator: (value) { + if ((value ?? "").isEmpty) return "Mandatory"; + return null; + }, textAlign: TextAlign.center, labelStyle: AppTextStyles.textFieldLabelStyle, textInputType: TextInputType.number, @@ -379,7 +383,13 @@ class _UpdateChildAssetViewState extends State { ///Need to check which details show here... void _saveTap() async { + if(!_formKey.currentState!.validate()) return; + if(assetDeliveryProvider.childFormModel.installationDate==null){ + "Installation Date is Required".showToast; + return; + } _formKey.currentState!.save(); + //Need to check if not auto update. // assetDeliveryProvider.parentFormModel.childAssetList?[widget.index]= assetDeliveryProvider.childFormModel; Navigator.pop(context); diff --git a/lib/modules/asset_delivery_module/pages/technical_inpection/update_parent_asset_view.dart b/lib/modules/asset_delivery_module/pages/technical_inpection/update_parent_asset_view.dart index 024dfe5f..14944824 100644 --- a/lib/modules/asset_delivery_module/pages/technical_inpection/update_parent_asset_view.dart +++ b/lib/modules/asset_delivery_module/pages/technical_inpection/update_parent_asset_view.dart @@ -10,7 +10,7 @@ import 'package:test_sa/models/new_models/building.dart'; import 'package:test_sa/models/new_models/floor.dart'; import 'package:test_sa/models/new_models/site.dart'; import 'package:test_sa/modules/asset_delivery_module/models/technical_inspection_asset_model.dart'; -import 'package:test_sa/modules/asset_delivery_module/pages/technical_inpection/asset_delivery_utils.dart'; +import 'package:test_sa/modules/asset_delivery_module/pages/asset_delivery_utils.dart'; import 'package:test_sa/modules/asset_delivery_module/pages/technical_inpection/search_asset_view.dart'; import 'package:test_sa/modules/asset_delivery_module/pages/technical_inpection/status_checklist_view.dart'; import 'package:test_sa/modules/asset_delivery_module/pages/technical_inpection/technical_inpection_asset_card_view.dart'; @@ -270,6 +270,10 @@ class _UpdateParentAssetViewState extends State { backgroundColor: AppColor.fieldBgColor(context), controller: serialNoCtrl, initialValue: model.serialNo ?? '', + validator: (value) { + if ((value ?? "").isEmpty) return "Mandatory"; + return null; + }, textAlign: TextAlign.center, labelStyle: AppTextStyles.textFieldLabelStyle, textInputType: TextInputType.number, @@ -424,6 +428,11 @@ class _UpdateParentAssetViewState extends State { ///Need to check which details show here... void _saveTap() async { + if (!_formKey.currentState!.validate()) return; + if (assetDeliveryProvider.parentFormModel.installationDate == null) { + "Installation Date is Required".showToast; + return; + } _formKey.currentState!.save(); assetDeliveryProvider.parentFormModel.lineId = widget.lineId; diff --git a/lib/modules/asset_delivery_module/pages/technical_inpection/update_technical_inspection_lines_view.dart b/lib/modules/asset_delivery_module/pages/technical_inpection/update_technical_inspection_lines_view.dart index f64f1461..035fffe3 100644 --- a/lib/modules/asset_delivery_module/pages/technical_inpection/update_technical_inspection_lines_view.dart +++ b/lib/modules/asset_delivery_module/pages/technical_inpection/update_technical_inspection_lines_view.dart @@ -179,6 +179,10 @@ class _UpdateTechnicalInspectionLinesViewState extends State(context, listen: false).user?.type) == UsersTypes.engineer; bool isUserFMS = Provider.of(context, listen: false).isUserFMS; + bool commissioningEng = context.userProvider.isCommissioningEngineer; List navItems = [ NavItemModel(0, "overview", context.translation.overview), NavItemModel(1, "request_icon", context.translation.workOrder), - //TODO unCommit this to disable task - // if (!isEngineer||isUserFMS) - NavItemModel(2, "add_icon", context.translation.calendar, showLabel: false), + if (!commissioningEng) NavItemModel(2, "add_icon", context.translation.calendar, showLabel: false), NavItemModel(3, "assets", context.translation.assets), NavItemModel(4, "contact", context.translation.contact), ];