diff --git a/lib/controllers/providers/api/ppm_provider.dart b/lib/controllers/providers/api/ppm_provider.dart index ea5dc266..62ec2d75 100644 --- a/lib/controllers/providers/api/ppm_provider.dart +++ b/lib/controllers/providers/api/ppm_provider.dart @@ -158,26 +158,26 @@ class PpmProvider extends ChangeNotifier { Future getPlanPreventiveVisitById(int id) async { try { - isLoading = true; - Response response = await ApiManager.instance.get(URLs.getPlanPreventiveVisitById + "?planPreventiveVisitId=$id"); - if (response.statusCode >= 200 && response.statusCode < 300) { - ppmPlanAttachments = []; - planPreventiveVisit = PlanPreventiveVisit.fromJson(json.decode(response.body)["data"]); - if(planPreventiveVisit?.visitStatus?.value! == 1 || planPreventiveVisit?.visitStatus?.value == 3){ - isReadOnly =true; - }else{ - isReadOnly =false; + isLoading = true; + Response response = await ApiManager.instance.get(URLs.getPlanPreventiveVisitById + "?planPreventiveVisitId=$id"); + if (response.statusCode >= 200 && response.statusCode < 300) { + ppmPlanAttachments = []; + planPreventiveVisit = PlanPreventiveVisit.fromJson(json.decode(response.body)["data"]); + if (planPreventiveVisit?.visitStatus?.value! == 1 || planPreventiveVisit?.visitStatus?.value == 3) { + isReadOnly = true; + } else { + isReadOnly = false; + } + isLoading = false; + notifyListeners(); + return planPreventiveVisit; } isLoading = false; notifyListeners(); - return planPreventiveVisit; - } - isLoading = false; - notifyListeners(); - return null; + return null; } catch (error) { - isLoading= false; - notifyListeners(); + isLoading = false; + notifyListeners(); return null; } } @@ -307,19 +307,36 @@ class PpmProvider extends ChangeNotifier { return -1; } } + bool validate() { - // if (planPreventiveVisit.activityStatus == null) { - // Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.activityStatus}"); - // return false; - // } - if (planPreventiveVisit?.tbsTimer?.startAt == null) { - Fluttertoast.showToast(msg: "Working Hours Required"); - return false; - } - if (planPreventiveVisit?.tbsTimer?.endAt == null) { - Fluttertoast.showToast(msg: "Please Stop The Timer"); - return false; + bool isTimerPickerEnable = ApiManager.instance.assetGroup?.enabledEngineerTimer ?? false; + + if (isTimerPickerEnable) { + if (planPreventiveVisit?.tbsTimer?.startAt == null && planPreventiveVisit?.ppMTimePicker == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (planPreventiveVisit?.ppMTimePicker == null) { + if (planPreventiveVisit?.tbsTimer?.startAt == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (planPreventiveVisit?.tbsTimer?.endAt == null) { + Fluttertoast.showToast(msg: "Please Stop The Timer"); + return false; + } + } + } else { + if (planPreventiveVisit?.tbsTimer?.startAt == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (planPreventiveVisit?.tbsTimer?.endAt == null) { + Fluttertoast.showToast(msg: "Please Stop The Timer"); + return false; + } } + // if (model.startTime == null) { // Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.startTime}"); // return false; diff --git a/lib/modules/cm_module/views/forms/work_order/components/time_duration_view.dart b/lib/modules/cm_module/views/forms/work_order/components/time_duration_view.dart index 58c0e01b..f89c5856 100644 --- a/lib/modules/cm_module/views/forms/work_order/components/time_duration_view.dart +++ b/lib/modules/cm_module/views/forms/work_order/components/time_duration_view.dart @@ -1,119 +1,119 @@ - -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; -import 'package:test_sa/extensions/context_extension.dart'; -import 'package:test_sa/extensions/int_extensions.dart'; -import 'package:test_sa/models/timer_model.dart'; -import 'package:test_sa/new_views/app_style/app_color.dart'; -import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; -import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; -import 'package:test_sa/views/widgets/timer/app_timer.dart'; - -class TimeDurationView extends StatelessWidget { - const TimeDurationView({Key ?key}) : super(key: key); - - @override - Widget build(BuildContext context) { - //TODO user the same form key everywhere.... - final GlobalKey _formKey = GlobalKey(); - return Consumer( - builder: (context, serviceRequestProvider,child) { - serviceRequestProvider.currentSelectedRequest?.visitDate = ''; - return Form( - key: _formKey, - child: SingleChildScrollView( - child: Column( - children: [ - ADatePicker( - label: context.translation.visitDate, - hideShadow: true, - withIcon: false, - hint: context.translation.select, - height: 70.toScreenHeight, - date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.visitDate ?? ""), - formatDateWithTime: true, - onDatePicker: (selectedDate) { - if (selectedDate != null) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - // Handle the selected date and time here. - if (selectedTime != null) { - DateTime ? selectedDateTime = DateTime( - selectedDate.year, - selectedDate.month, - selectedDate.day, - selectedTime.hour, - selectedTime.minute, - ); - serviceRequestProvider.currentSelectedRequest?.visitDate = selectedDateTime?.toIso8601String(); - } - }); - } - }, - ), - 8.height, - ATimePicker( - label: context.translation.startTime, - hint: context.translation.select, - withIcon: false, - withBorder: false, - height: 70.toScreenHeight, - time: serviceRequestProvider.selectedTime, - onTimePicker: (selectedTime) { - if (selectedTime != null) { - print('time selected $selectedTime'); - serviceRequestProvider.selectedTime = selectedTime; - } - }, - ), - 8.height, - ATimePicker( - label: context.translation.endTime, - hint: context.translation.select, - withIcon: false, - withBorder: false, - height: 70.toScreenHeight, - time: serviceRequestProvider.selectedTime, - onTimePicker: (selectedTime) { - if (selectedTime != null) { - print('time selected $selectedTime'); - serviceRequestProvider.selectedTime = selectedTime; - } - }, - ), - 8.height, - SizedBox( - width: double.infinity, - height: 70.toScreenHeight, - child: AppTimer( - label: context.translation.workingHours, - timer: TimerModel(), - onPick: (TimerModel ?value){ - - }, - decoration: BoxDecoration( - color: AppColor.background(context), - borderRadius: BorderRadius.circular(10), - // boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], - ), - // enabled: serviceRequestProvider.currentSelectedRequest.date == null, - enabled: true, - onChange: (timer) async { - print('timer i got is ${timer.toString()}'); - return true; - }, - ), - - ), - 16.height, - ], - ), - ), - ); - } - ); - } -} +// +// import 'package:flutter/material.dart'; +// import 'package:provider/provider.dart'; +// import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; +// import 'package:test_sa/extensions/context_extension.dart'; +// import 'package:test_sa/extensions/int_extensions.dart'; +// import 'package:test_sa/models/timer_model.dart'; +// import 'package:test_sa/new_views/app_style/app_color.dart'; +// import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; +// import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; +// import 'package:test_sa/views/widgets/timer/app_timer.dart'; +// +// class TimeDurationView extends StatelessWidget { +// const TimeDurationView({Key ?key}) : super(key: key); +// +// @override +// Widget build(BuildContext context) { todo @delete +// //TODO user the same form key everywhere.... +// final GlobalKey _formKey = GlobalKey(); +// return Consumer( +// builder: (context, serviceRequestProvider,child) { +// serviceRequestProvider.currentSelectedRequest?.visitDate = ''; +// return Form( +// key: _formKey, +// child: SingleChildScrollView( +// child: Column( +// children: [ +// ADatePicker( +// label: context.translation.visitDate, +// hideShadow: true, +// withIcon: false, +// hint: context.translation.select, +// height: 70.toScreenHeight, +// date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.visitDate ?? ""), +// formatDateWithTime: true, +// onDatePicker: (selectedDate) { +// if (selectedDate != null) { +// showTimePicker( +// context: context, +// initialTime: TimeOfDay.now(), +// ).then((selectedTime) { +// // Handle the selected date and time here. +// if (selectedTime != null) { +// DateTime ? selectedDateTime = DateTime( +// selectedDate.year, +// selectedDate.month, +// selectedDate.day, +// selectedTime.hour, +// selectedTime.minute, +// ); +// serviceRequestProvider.currentSelectedRequest?.visitDate = selectedDateTime?.toIso8601String(); +// } +// }); +// } +// }, +// ), +// 8.height, +// ATimePicker( +// label: context.translation.startTime, +// hint: context.translation.select, +// withIcon: false, +// withBorder: false, +// height: 70.toScreenHeight, +// time: serviceRequestProvider.selectedTime, +// onTimePicker: (selectedTime) { +// if (selectedTime != null) { +// print('time selected $selectedTime'); +// serviceRequestProvider.selectedTime = selectedTime; +// } +// }, +// ), +// 8.height, +// ATimePicker( +// label: context.translation.endTime, +// hint: context.translation.select, +// withIcon: false, +// withBorder: false, +// height: 70.toScreenHeight, +// time: serviceRequestProvider.selectedTime, +// onTimePicker: (selectedTime) { +// if (selectedTime != null) { +// print('time selected $selectedTime'); +// serviceRequestProvider.selectedTime = selectedTime; +// } +// }, +// ), +// 8.height, +// SizedBox( +// width: double.infinity, +// height: 70.toScreenHeight, +// child: AppTimer( +// label: context.translation.workingHours, +// timer: TimerModel(), +// onPick: (TimerModel ?value){ +// +// }, +// decoration: BoxDecoration( +// color: AppColor.background(context), +// borderRadius: BorderRadius.circular(10), +// // boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], +// ), +// // enabled: serviceRequestProvider.currentSelectedRequest.date == null, +// enabled: true, +// onChange: (timer) async { +// print('timer i got is ${timer.toString()}'); +// return true; +// }, +// ), +// +// ), +// 16.height, +// ], +// ), +// ), +// ); +// } +// ); +// } +// } diff --git a/lib/modules/cm_module/views/forms/work_order/work_order_form_view.dart b/lib/modules/cm_module/views/forms/work_order/work_order_form_view.dart index e66501d2..293f461f 100644 --- a/lib/modules/cm_module/views/forms/work_order/work_order_form_view.dart +++ b/lib/modules/cm_module/views/forms/work_order/work_order_form_view.dart @@ -1,180 +1,180 @@ -import 'package:flutter/material.dart'; -import 'package:test_sa/common_widgets/stapper_widget/components/base_step.dart'; -import 'package:test_sa/common_widgets/stapper_widget/components/custom_line.dart'; -import 'package:test_sa/common_widgets/stapper_widget/custom_stepper.dart'; -import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; -import 'package:test_sa/extensions/context_extension.dart'; -import 'package:test_sa/extensions/int_extensions.dart'; -import 'package:test_sa/extensions/text_extensions.dart'; -import 'package:test_sa/extensions/widget_extensions.dart'; -import 'package:test_sa/new_views/app_style/app_color.dart'; -import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; -import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; - -import 'components/asset_conditon_view.dart'; -import 'components/attachments_view.dart'; -import 'components/time_duration_view.dart'; - -class WorkOrderFormView extends StatefulWidget { - const WorkOrderFormView({Key? key}) : super(key: key); - - @override - _WorkOrderFormViewState createState() => _WorkOrderFormViewState(); -} - -class _WorkOrderFormViewState extends State { - int currentStep = 0; - int activeStep = 0; - int reachedStep = 0; - int upperBound = 2; - final formKey = GlobalKey(); - - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - backgroundColor: AppColor.neutral100, - appBar: DefaultAppBar(title: context.translation.createWorkOrder), - body: Column( - children: [ - 16.height, - CustomStepper( - activeStep: activeStep, - lineStyle: LineStyle( - activeLineColor: AppColor.primary10, - finishedLineColor: AppColor.primary10, - defaultLineColor: AppColor.white40, - lineThickness: 1, - lineLength: 93.toScreenWidth, - lineType: LineType.normal, - ), - internalPadding: 2.toScreenWidth, - steps: [ - StepModel(customStep: customStepWidget(index: 0, stepIndex: 1), customTitle: customStepLabel(index: 1, label: context.translation.timeAndDuration)), - StepModel(customStep: customStepWidget(index: 1, stepIndex: 2), customTitle: customStepLabel(index: 1, label: context.translation.assetsCondition)), - StepModel(customStep: customStepWidget(index: 2, stepIndex: 3), customTitle: customStepLabel(index: 1, label: context.translation.attachmentsAcknowledge)), - ], - onStepReached: (index) => setState(() => activeStep = index), - ), - Expanded( - child: Padding( - padding: EdgeInsetsDirectional.symmetric(horizontal: 16.toScreenWidth, vertical: 25.toScreenHeight), - child: getStepWidget(), - )), - bottomContainerWidget(), - ], - ), - ); - } - - Widget bottomContainerWidget() { - return Container( - padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 16.toScreenHeight), - color: AppColor.white10, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - AppFilledButton( - label: context.translation.cancel, - loading: false, - buttonColor: AppColor.white60, - textColor: AppColor.black10, - onPressed: () async { - Navigator.pop(context); - // await snapshot.updateRequest(user: userProvider.user, request: serviceRequestProvider.serviceRequest); - // Navigator.pop(context, true); - }, - ).expanded, - 12.width, - AppFilledButton( - label: context.translation.next, - buttonColor: AppColor.primary10, - loading: false, - onPressed: () { - _incrementActiveStep(); - //TODO move to next step.. - }, - ).expanded, - ], - )); - } - - void _incrementActiveStep() { - setState(() { - ++activeStep; - if (reachedStep < activeStep) { - reachedStep = activeStep; - } - }); - } - - Future _navigateNext(ServiceRequestsProvider serviceRequestsProvider) async { - if (activeStep < upperBound) { - switch (activeStep) { - case 0: - // await _navigateNextStep(listingVm); - break; - case 1: - break; - case 2: - _incrementActiveStep(); - break; - } - } - } - -// Your onPressed code - - Widget customStepWidget({required int index, required int stepIndex}) { - return CircleAvatar( - backgroundColor: activeStep >= index ? AppColor.primary10 : AppColor.background(context), - child: activeStep > index - ? Icon( - Icons.done, - color: AppColor.white10, - size: 26.toScreenHeight, - ) - : activeStep == index - ? Text( - '0$stepIndex', - style: const TextStyle(fontWeight: FontWeight.w500, color: AppColor.white10), - textAlign: TextAlign.center, - ) - : Text( - '0$stepIndex', - style: const TextStyle(color: AppColor.black20), - ), - ); - } - - Widget customStepLabel({required String label, required int index}) { - return Column( - children: [ - Text( - label, - textAlign: TextAlign.center, - style: AppTextStyles.bodyText2.copyWith(color: AppColor.black20), - ), - ], - ); - } - - /// Returns the previous button. - - Widget getStepWidget() { - switch (activeStep) { - case 0: - return const TimeDurationView(); - case 1: - return AssetConditionView(); - case 2: - return AttachmentView(); - default: - return const SizedBox(); - } - } -} +// import 'package:flutter/material.dart'; +// import 'package:test_sa/common_widgets/stapper_widget/components/base_step.dart'; +// import 'package:test_sa/common_widgets/stapper_widget/components/custom_line.dart'; +// import 'package:test_sa/common_widgets/stapper_widget/custom_stepper.dart'; +// import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; +// import 'package:test_sa/extensions/context_extension.dart'; +// import 'package:test_sa/extensions/int_extensions.dart'; +// import 'package:test_sa/extensions/text_extensions.dart'; +// import 'package:test_sa/extensions/widget_extensions.dart'; +// import 'package:test_sa/new_views/app_style/app_color.dart'; +// import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; +// import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; +// +// import 'components/asset_conditon_view.dart'; +// import 'components/attachments_view.dart'; +// import 'components/time_duration_view.dart'; +// +// class WorkOrderFormView extends StatefulWidget { +// const WorkOrderFormView({Key? key}) : super(key: key); +// +// @override +// _WorkOrderFormViewState createState() => _WorkOrderFormViewState(); +// } +// todo @delete +// class _WorkOrderFormViewState extends State { +// int currentStep = 0; +// int activeStep = 0; +// int reachedStep = 0; +// int upperBound = 2; +// final formKey = GlobalKey(); +// +// @override +// void initState() { +// super.initState(); +// } +// +// @override +// Widget build(BuildContext context) { +// return Scaffold( +// backgroundColor: AppColor.neutral100, +// appBar: DefaultAppBar(title: context.translation.createWorkOrder), +// body: Column( +// children: [ +// 16.height, +// CustomStepper( +// activeStep: activeStep, +// lineStyle: LineStyle( +// activeLineColor: AppColor.primary10, +// finishedLineColor: AppColor.primary10, +// defaultLineColor: AppColor.white40, +// lineThickness: 1, +// lineLength: 93.toScreenWidth, +// lineType: LineType.normal, +// ), +// internalPadding: 2.toScreenWidth, +// steps: [ +// StepModel(customStep: customStepWidget(index: 0, stepIndex: 1), customTitle: customStepLabel(index: 1, label: context.translation.timeAndDuration)), +// StepModel(customStep: customStepWidget(index: 1, stepIndex: 2), customTitle: customStepLabel(index: 1, label: context.translation.assetsCondition)), +// StepModel(customStep: customStepWidget(index: 2, stepIndex: 3), customTitle: customStepLabel(index: 1, label: context.translation.attachmentsAcknowledge)), +// ], +// onStepReached: (index) => setState(() => activeStep = index), +// ), +// Expanded( +// child: Padding( +// padding: EdgeInsetsDirectional.symmetric(horizontal: 16.toScreenWidth, vertical: 25.toScreenHeight), +// child: getStepWidget(), +// )), +// bottomContainerWidget(), +// ], +// ), +// ); +// } +// +// Widget bottomContainerWidget() { +// return Container( +// padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 16.toScreenHeight), +// color: AppColor.white10, +// child: Row( +// mainAxisAlignment: MainAxisAlignment.spaceBetween, +// children: [ +// AppFilledButton( +// label: context.translation.cancel, +// loading: false, +// buttonColor: AppColor.white60, +// textColor: AppColor.black10, +// onPressed: () async { +// Navigator.pop(context); +// // await snapshot.updateRequest(user: userProvider.user, request: serviceRequestProvider.serviceRequest); +// // Navigator.pop(context, true); +// }, +// ).expanded, +// 12.width, +// AppFilledButton( +// label: context.translation.next, +// buttonColor: AppColor.primary10, +// loading: false, +// onPressed: () { +// _incrementActiveStep(); +// //TODO move to next step.. +// }, +// ).expanded, +// ], +// )); +// } +// +// void _incrementActiveStep() { +// setState(() { +// ++activeStep; +// if (reachedStep < activeStep) { +// reachedStep = activeStep; +// } +// }); +// } +// +// Future _navigateNext(ServiceRequestsProvider serviceRequestsProvider) async { +// if (activeStep < upperBound) { +// switch (activeStep) { +// case 0: +// // await _navigateNextStep(listingVm); +// break; +// case 1: +// break; +// case 2: +// _incrementActiveStep(); +// break; +// } +// } +// } +// +// // Your onPressed code +// +// Widget customStepWidget({required int index, required int stepIndex}) { +// return CircleAvatar( +// backgroundColor: activeStep >= index ? AppColor.primary10 : AppColor.background(context), +// child: activeStep > index +// ? Icon( +// Icons.done, +// color: AppColor.white10, +// size: 26.toScreenHeight, +// ) +// : activeStep == index +// ? Text( +// '0$stepIndex', +// style: const TextStyle(fontWeight: FontWeight.w500, color: AppColor.white10), +// textAlign: TextAlign.center, +// ) +// : Text( +// '0$stepIndex', +// style: const TextStyle(color: AppColor.black20), +// ), +// ); +// } +// +// Widget customStepLabel({required String label, required int index}) { +// return Column( +// children: [ +// Text( +// label, +// textAlign: TextAlign.center, +// style: AppTextStyles.bodyText2.copyWith(color: AppColor.black20), +// ), +// ], +// ); +// } +// +// /// Returns the previous button. +// +// Widget getStepWidget() { +// switch (activeStep) { +// case 0: +// return const TimeDurationView(); +// case 1: +// return AssetConditionView(); +// case 2: +// return AttachmentView(); +// default: +// return const SizedBox(); +// } +// } +// } diff --git a/lib/modules/pm_module/recurrent_wo/recurrent_work_order_view.dart b/lib/modules/pm_module/recurrent_wo/recurrent_work_order_view.dart index 44ae1ec6..fc9531f4 100644 --- a/lib/modules/pm_module/recurrent_wo/recurrent_work_order_view.dart +++ b/lib/modules/pm_module/recurrent_wo/recurrent_work_order_view.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; @@ -157,13 +158,33 @@ void _updateTask({required BuildContext context, required int status}) async { } bool validate({required RecurrentWoData model}) { - if (model.recurrentWoTimerModel?.startAt == null) { - Fluttertoast.showToast(msg: "Working Hours Required"); - return false; - } - if (model.recurrentWoTimerModel?.endAt == null) { - Fluttertoast.showToast(msg: "Please Stop The Timer"); - return false; + bool isTimerPickerEnable = ApiManager.instance.assetGroup?.enabledEngineerTimer ?? false; + + if (isTimerPickerEnable) { + if (model.recurrentWoTimerModel?.startAt == null && model.recurrentWoTimePicker == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (model.recurrentWoTimePicker == null) { + if (model.recurrentWoTimerModel?.startAt == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (model.recurrentWoTimerModel?.endAt == null) { + Fluttertoast.showToast(msg: "Please Stop The Timer"); + return false; + } + } + } else { + if (model.recurrentWoTimerModel?.startAt == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (model.recurrentWoTimerModel?.endAt == null) { + Fluttertoast.showToast(msg: "Please Stop The Timer"); + return false; + } } + return true; } diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index 9efbb529..70d85626 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -4,6 +4,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; @@ -60,38 +61,50 @@ class _UpdateDeviceTransferState extends State { _formModel.assetTransferAttachments = []; VisitTimers? deviceTimerPicker; if (_formModel.deviceTimePicker != null) { - int durationInSecond = - _formModel.deviceTimePicker!.endAt!.difference(_formModel.deviceTimePicker!.startAt!).inSeconds; - deviceTimerPicker = VisitTimers( + int durationInSecond = _formModel.deviceTimePicker!.endAt!.difference(_formModel.deviceTimePicker!.startAt!).inSeconds; + deviceTimerPicker = VisitTimers( id: 0, startDateTime: _formModel.deviceTimePicker?.startAt?.toIso8601String(), endDateTime: _formModel.deviceTimePicker?.endAt?.toIso8601String(), workingHours: ((durationInSecond) / 60 / 60), ); - } int workingHours = _formModel.tbsTimer?.endAt!.difference(_formModel.tbsTimer!.startAt!).inSeconds ?? 0; if (widget.isSender) { - _formModel.senderVisitTimers?.add(deviceTimerPicker!); - _formModel.senderVisitTimers?.add( - VisitTimers( - id: 0, - startDateTime: _formModel.tbsTimer?.startAt?.toIso8601String(), - endDateTime: _formModel.tbsTimer?.endAt?.toIso8601String(), - workingHours: ((workingHours) / 60 / 60), - ), - ); + if (deviceTimerPicker != null) { + _formModel.senderVisitTimers?.add(deviceTimerPicker); + } + + _formModel.timerModelList?.forEach((timer) { + int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds; + _formModel.senderVisitTimers?.add( + VisitTimers( + id: 0, + startDateTime: timer.startAt!.toIso8601String(), // Handle potential null + endDateTime: timer.endAt?.toIso8601String(), // Handle potential null + workingHours: ((durationInSecond) / 60 / 60), + ), + ); + }); + _formModel.assetTransferEngineerTimers = _formModel.senderVisitTimers; } else { - _formModel.receiverVisitTimers?.add(deviceTimerPicker!); - _formModel.receiverVisitTimers?.add( - VisitTimers( - id: 0, - startDateTime: _formModel.tbsTimer?.startAt?.toIso8601String(), - endDateTime: _formModel.tbsTimer?.endAt?.toIso8601String(), - workingHours: ((workingHours) / 60 / 60), - ), - ); + if (deviceTimerPicker != null) { + _formModel.receiverVisitTimers?.add(deviceTimerPicker); + } + + _formModel.timerModelList?.forEach((timer) { + int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds; + _formModel.receiverVisitTimers?.add( + VisitTimers( + id: 0, + startDateTime: timer.startAt!.toIso8601String(), // Handle potential null + endDateTime: timer.endAt?.toIso8601String(), // Handle potential null + workingHours: ((durationInSecond) / 60 / 60), + ), + ); + }); + _formModel.assetTransferEngineerTimers = _formModel.receiverVisitTimers; } try { @@ -107,29 +120,51 @@ class _UpdateDeviceTransferState extends State { } catch (error) { print(error); } - if(status ==1){ - ServiceRequestBottomSheet.nurseVerifyAssetTransferBottomSheet(context: context,onAckhnowledgePress: (signature) async { - //TODO NEED TO CALL API HERE WITH ADDED PARAMETER FOR SIGNATURE FROM BACKEND.. - if(signature!=null){ - _formModel.nurseSignature = signature; - await _deviceTransferProvider.updateRequest(context, model: _formModel); - } - }); - }else { + if (status == 1) { + ServiceRequestBottomSheet.nurseVerifyAssetTransferBottomSheet( + context: context, + onAckhnowledgePress: (signature) async { + //TODO NEED TO CALL API HERE WITH ADDED PARAMETER FOR SIGNATURE FROM BACKEND.. + if (signature != null) { + _formModel.nurseSignature = signature; + await _deviceTransferProvider.updateRequest(context, model: _formModel); + } + }); + } else { await _deviceTransferProvider.updateRequest(context, model: _formModel); } } } bool _validateForm() { - if (_formModel.tbsTimer?.startAt == null) { - Fluttertoast.showToast(msg: "Working Hours Required"); - return false; - } - if (_formModel.tbsTimer?.endAt == null || isTimerRunning) { - Fluttertoast.showToast(msg: "Please Stop The Timer"); - return false; + bool isTimerPickerEnable = ApiManager.instance.assetGroup?.enabledEngineerTimer ?? false; + + if (isTimerPickerEnable) { + if (_formModel.tbsTimer?.startAt == null && _formModel.deviceTimePicker == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (_formModel.deviceTimePicker == null) { + if (_formModel.tbsTimer?.startAt == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (_formModel.tbsTimer?.endAt == null) { + Fluttertoast.showToast(msg: "Please Stop The Timer"); + return false; + } + } + } else { + if (_formModel.tbsTimer?.startAt == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (_formModel.tbsTimer?.endAt == null) { + Fluttertoast.showToast(msg: "Please Stop The Timer"); + return false; + } } + if (_formModel.assistantEmployees != null) { if (_formModel.modelAssistantEmployees?.startDate == null) { Fluttertoast.showToast(msg: "Please Select Assistant Employee Start Time"); @@ -237,12 +272,11 @@ class _UpdateDeviceTransferState extends State { 12.width, if (!widget.isSender && _formModel.senderMachineStatusValue == 3) ...[ AppFilledButton( - label: context.translation.complete, - buttonColor: AppColor.primary10, - onPressed: (){ - _update(status: 1); - } - ).expanded, + label: context.translation.complete, + buttonColor: AppColor.primary10, + onPressed: () { + _update(status: 1); + }).expanded, ] else if (widget.isSender) ...[ AppFilledButton( label: context.translation.complete, @@ -268,11 +302,6 @@ class _UpdateDeviceTransferState extends State { } void updateTimer({TimerModel? timer}) { - _formModel.tbsTimer = timer; - if (timer?.startAt != null && timer?.endAt != null) { - _formModel.timerModelList = _formModel.timerModelList ?? []; - _formModel.timerModelList!.add(timer!); - } // notifyListeners(); } @@ -283,7 +312,7 @@ class _UpdateDeviceTransferState extends State { AppTimer( label: context.translation.workingHours, timer: _formModel.tbsTimer, - pickerFromDate: DateTime.tryParse(widget.model.createdDate??''), + pickerFromDate: DateTime.tryParse(widget.model.createdDate ?? ''), width: double.infinity, enabled: isTimerEnable, decoration: BoxDecoration( @@ -296,7 +325,11 @@ class _UpdateDeviceTransferState extends State { }, timerProgress: (isRunning) {}, onChange: (timer) async { - updateTimer(timer: timer); + _formModel.tbsTimer = timer; + if (timer.startAt != null && timer.endAt != null) { + _formModel.timerModelList = _formModel.timerModelList ?? []; + _formModel.timerModelList!.add(timer); + } return true; }, ), diff --git a/lib/views/pages/user/gas_refill/request_gas_refill.dart b/lib/views/pages/user/gas_refill/request_gas_refill.dart index 4e9f9c17..9798cfb2 100644 --- a/lib/views/pages/user/gas_refill/request_gas_refill.dart +++ b/lib/views/pages/user/gas_refill/request_gas_refill.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/providers/api/gas_refill_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -91,14 +92,36 @@ class _RequestGasRefillState extends State { await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.status}"); return false; } - if (_formModel.timer?.startAt == null) { - await Fluttertoast.showToast(msg: "Working Hours Required"); - return false; - } - if (_formModel.timer?.endAt == null) { - await Fluttertoast.showToast(msg: "Please Stop The Timer"); - return false; + + bool isTimerPickerEnable = ApiManager.instance.assetGroup?.enabledEngineerTimer ?? false; + + if (isTimerPickerEnable) { + if (_formModel.timer?.startAt == null && _formModel.gasRefillTimePicker == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (_formModel.gasRefillTimePicker == null) { + if (_formModel.timer?.startAt == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (_formModel.timer?.endAt == null) { + Fluttertoast.showToast(msg: "Please Stop The Timer"); + return false; + } + } + } else { + if (_formModel.timer?.startAt == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (_formModel.timer?.endAt == null) { + Fluttertoast.showToast(msg: "Please Stop The Timer"); + return false; + } } + + if (_formModel.gasRefillDetails?.isNotEmpty ?? false) { if (!(await _addNewModel(context))) return; } diff --git a/lib/views/pages/user/gas_refill/update_gas_refill_request.dart b/lib/views/pages/user/gas_refill/update_gas_refill_request.dart index c63b8851..b92133b6 100644 --- a/lib/views/pages/user/gas_refill/update_gas_refill_request.dart +++ b/lib/views/pages/user/gas_refill/update_gas_refill_request.dart @@ -2,17 +2,15 @@ import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/gas_refill_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; -import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; -import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart'; @@ -94,14 +92,34 @@ class _UpdateGasRefillRequestState extends State { } _onSubmit(BuildContext context, int status) async { - if (_formModel.timer?.startAt == null) { - await Fluttertoast.showToast(msg: "Working Hours Required"); - return false; - } - if (_formModel.timer?.endAt == null) { - await Fluttertoast.showToast(msg: "Please Stop The Timer"); - return false; + bool isTimerPickerEnable = ApiManager.instance.assetGroup?.enabledEngineerTimer ?? false; + + if (isTimerPickerEnable) { + if (_formModel.timer?.startAt == null && _formModel.gasRefillTimePicker == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (_formModel.gasRefillTimePicker == null) { + if (_formModel.timer?.startAt == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (_formModel.timer?.endAt == null) { + Fluttertoast.showToast(msg: "Please Stop The Timer"); + return false; + } + } + } else { + if (_formModel.timer?.startAt == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (_formModel.timer?.endAt == null) { + Fluttertoast.showToast(msg: "Please Stop The Timer"); + return false; + } } + if (_currentDetails.deliverdQty == null) { await Fluttertoast.showToast(msg: "Delivered Quantity is Required"); return false; @@ -112,8 +130,7 @@ class _UpdateGasRefillRequestState extends State { showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); _formModel.gasRefillTimers = _formModel.gasRefillTimers ?? []; if (_formModel.gasRefillTimePicker != null) { - int durationInSecond = - _formModel.gasRefillTimePicker!.endAt!.difference(_formModel.gasRefillTimePicker!.startAt!).inSeconds; + int durationInSecond = _formModel.gasRefillTimePicker!.endAt!.difference(_formModel.gasRefillTimePicker!.startAt!).inSeconds; _formModel.gasRefillTimers?.add( GasRefillTimer( id: 0, @@ -286,7 +303,7 @@ class _UpdateGasRefillRequestState extends State { AppTimer( label: context.translation.workingHours, timer: _formModel.timer, - pickerFromDate: DateTime.tryParse(widget.gasRefillModel?.createdDate??''), + pickerFromDate: DateTime.tryParse(widget.gasRefillModel?.createdDate ?? ''), pickerTimer: _formModel.gasRefillTimePicker, onPick: (time) { _formModel.gasRefillTimePicker = time;