timer improvements

design_3.0_task_module_new
Sikander Saleem 4 months ago
parent 407c913002
commit f3f09d1eb2

@ -158,26 +158,26 @@ class PpmProvider extends ChangeNotifier {
Future<PlanPreventiveVisit?> getPlanPreventiveVisitById(int id) async { Future<PlanPreventiveVisit?> getPlanPreventiveVisitById(int id) async {
try { try {
isLoading = true; isLoading = true;
Response response = await ApiManager.instance.get(URLs.getPlanPreventiveVisitById + "?planPreventiveVisitId=$id"); Response response = await ApiManager.instance.get(URLs.getPlanPreventiveVisitById + "?planPreventiveVisitId=$id");
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
ppmPlanAttachments = []; ppmPlanAttachments = [];
planPreventiveVisit = PlanPreventiveVisit.fromJson(json.decode(response.body)["data"]); planPreventiveVisit = PlanPreventiveVisit.fromJson(json.decode(response.body)["data"]);
if(planPreventiveVisit?.visitStatus?.value! == 1 || planPreventiveVisit?.visitStatus?.value == 3){ if (planPreventiveVisit?.visitStatus?.value! == 1 || planPreventiveVisit?.visitStatus?.value == 3) {
isReadOnly =true; isReadOnly = true;
}else{ } else {
isReadOnly =false; isReadOnly = false;
}
isLoading = false;
notifyListeners();
return planPreventiveVisit;
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return planPreventiveVisit; return null;
}
isLoading = false;
notifyListeners();
return null;
} catch (error) { } catch (error) {
isLoading= false; isLoading = false;
notifyListeners(); notifyListeners();
return null; return null;
} }
} }
@ -307,19 +307,36 @@ class PpmProvider extends ChangeNotifier {
return -1; return -1;
} }
} }
bool validate() { bool validate() {
// if (planPreventiveVisit.activityStatus == null) { bool isTimerPickerEnable = ApiManager.instance.assetGroup?.enabledEngineerTimer ?? false;
// Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.activityStatus}");
// return false; if (isTimerPickerEnable) {
// } if (planPreventiveVisit?.tbsTimer?.startAt == null && planPreventiveVisit?.ppMTimePicker == null) {
if (planPreventiveVisit?.tbsTimer?.startAt == null) { Fluttertoast.showToast(msg: "Working Hours Required");
Fluttertoast.showToast(msg: "Working Hours Required"); return false;
return false; }
} if (planPreventiveVisit?.ppMTimePicker == null) {
if (planPreventiveVisit?.tbsTimer?.endAt == null) { if (planPreventiveVisit?.tbsTimer?.startAt == null) {
Fluttertoast.showToast(msg: "Please Stop The Timer"); Fluttertoast.showToast(msg: "Working Hours Required");
return false; 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) { // if (model.startTime == null) {
// Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.startTime}"); // Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.startTime}");
// return false; // return false;

@ -1,119 +1,119 @@
//
import 'package:flutter/material.dart'; // import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; // import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_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/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; // import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/models/timer_model.dart'; // import 'package:test_sa/models/timer_model.dart';
import 'package:test_sa/new_views/app_style/app_color.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/date_picker.dart';
import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; // import 'package:test_sa/views/widgets/date_and_time/time_picker.dart';
import 'package:test_sa/views/widgets/timer/app_timer.dart'; // import 'package:test_sa/views/widgets/timer/app_timer.dart';
//
class TimeDurationView extends StatelessWidget { // class TimeDurationView extends StatelessWidget {
const TimeDurationView({Key ?key}) : super(key: key); // const TimeDurationView({Key ?key}) : super(key: key);
//
@override // @override
Widget build(BuildContext context) { // Widget build(BuildContext context) { todo @delete
//TODO user the same form key everywhere.... // //TODO user the same form key everywhere....
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); // final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
return Consumer<ServiceRequestsProvider>( // return Consumer<ServiceRequestsProvider>(
builder: (context, serviceRequestProvider,child) { // builder: (context, serviceRequestProvider,child) {
serviceRequestProvider.currentSelectedRequest?.visitDate = ''; // serviceRequestProvider.currentSelectedRequest?.visitDate = '';
return Form( // return Form(
key: _formKey, // key: _formKey,
child: SingleChildScrollView( // child: SingleChildScrollView(
child: Column( // child: Column(
children: [ // children: [
ADatePicker( // ADatePicker(
label: context.translation.visitDate, // label: context.translation.visitDate,
hideShadow: true, // hideShadow: true,
withIcon: false, // withIcon: false,
hint: context.translation.select, // hint: context.translation.select,
height: 70.toScreenHeight, // height: 70.toScreenHeight,
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.visitDate ?? ""), // date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.visitDate ?? ""),
formatDateWithTime: true, // formatDateWithTime: true,
onDatePicker: (selectedDate) { // onDatePicker: (selectedDate) {
if (selectedDate != null) { // if (selectedDate != null) {
showTimePicker( // showTimePicker(
context: context, // context: context,
initialTime: TimeOfDay.now(), // initialTime: TimeOfDay.now(),
).then((selectedTime) { // ).then((selectedTime) {
// Handle the selected date and time here. // // Handle the selected date and time here.
if (selectedTime != null) { // if (selectedTime != null) {
DateTime ? selectedDateTime = DateTime( // DateTime ? selectedDateTime = DateTime(
selectedDate.year, // selectedDate.year,
selectedDate.month, // selectedDate.month,
selectedDate.day, // selectedDate.day,
selectedTime.hour, // selectedTime.hour,
selectedTime.minute, // selectedTime.minute,
); // );
serviceRequestProvider.currentSelectedRequest?.visitDate = selectedDateTime?.toIso8601String(); // serviceRequestProvider.currentSelectedRequest?.visitDate = selectedDateTime?.toIso8601String();
} // }
}); // });
} // }
}, // },
), // ),
8.height, // 8.height,
ATimePicker( // ATimePicker(
label: context.translation.startTime, // label: context.translation.startTime,
hint: context.translation.select, // hint: context.translation.select,
withIcon: false, // withIcon: false,
withBorder: false, // withBorder: false,
height: 70.toScreenHeight, // height: 70.toScreenHeight,
time: serviceRequestProvider.selectedTime, // time: serviceRequestProvider.selectedTime,
onTimePicker: (selectedTime) { // onTimePicker: (selectedTime) {
if (selectedTime != null) { // if (selectedTime != null) {
print('time selected $selectedTime'); // print('time selected $selectedTime');
serviceRequestProvider.selectedTime = selectedTime; // serviceRequestProvider.selectedTime = selectedTime;
} // }
}, // },
), // ),
8.height, // 8.height,
ATimePicker( // ATimePicker(
label: context.translation.endTime, // label: context.translation.endTime,
hint: context.translation.select, // hint: context.translation.select,
withIcon: false, // withIcon: false,
withBorder: false, // withBorder: false,
height: 70.toScreenHeight, // height: 70.toScreenHeight,
time: serviceRequestProvider.selectedTime, // time: serviceRequestProvider.selectedTime,
onTimePicker: (selectedTime) { // onTimePicker: (selectedTime) {
if (selectedTime != null) { // if (selectedTime != null) {
print('time selected $selectedTime'); // print('time selected $selectedTime');
serviceRequestProvider.selectedTime = selectedTime; // serviceRequestProvider.selectedTime = selectedTime;
} // }
}, // },
), // ),
8.height, // 8.height,
SizedBox( // SizedBox(
width: double.infinity, // width: double.infinity,
height: 70.toScreenHeight, // height: 70.toScreenHeight,
child: AppTimer( // child: AppTimer(
label: context.translation.workingHours, // label: context.translation.workingHours,
timer: TimerModel(), // timer: TimerModel(),
onPick: (TimerModel ?value){ // onPick: (TimerModel ?value){
//
}, // },
decoration: BoxDecoration( // decoration: BoxDecoration(
color: AppColor.background(context), // color: AppColor.background(context),
borderRadius: BorderRadius.circular(10), // borderRadius: BorderRadius.circular(10),
// boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], // // boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
), // ),
// enabled: serviceRequestProvider.currentSelectedRequest.date == null, // // enabled: serviceRequestProvider.currentSelectedRequest.date == null,
enabled: true, // enabled: true,
onChange: (timer) async { // onChange: (timer) async {
print('timer i got is ${timer.toString()}'); // print('timer i got is ${timer.toString()}');
return true; // return true;
}, // },
), // ),
//
), // ),
16.height, // 16.height,
], // ],
), // ),
), // ),
); // );
} // }
); // );
} // }
} // }

@ -1,180 +1,180 @@
import 'package:flutter/material.dart'; // 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/base_step.dart';
import 'package:test_sa/common_widgets/stapper_widget/components/custom_line.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/common_widgets/stapper_widget/custom_stepper.dart';
import 'package:test_sa/controllers/providers/api/service_requests_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/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; // import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; // import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_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/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/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; // import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
//
import 'components/asset_conditon_view.dart'; // import 'components/asset_conditon_view.dart';
import 'components/attachments_view.dart'; // import 'components/attachments_view.dart';
import 'components/time_duration_view.dart'; // import 'components/time_duration_view.dart';
//
class WorkOrderFormView extends StatefulWidget { // class WorkOrderFormView extends StatefulWidget {
const WorkOrderFormView({Key? key}) : super(key: key); // const WorkOrderFormView({Key? key}) : super(key: key);
//
@override // @override
_WorkOrderFormViewState createState() => _WorkOrderFormViewState(); // _WorkOrderFormViewState createState() => _WorkOrderFormViewState();
} // }
// todo @delete
class _WorkOrderFormViewState extends State<WorkOrderFormView> { // class _WorkOrderFormViewState extends State<WorkOrderFormView> {
int currentStep = 0; // int currentStep = 0;
int activeStep = 0; // int activeStep = 0;
int reachedStep = 0; // int reachedStep = 0;
int upperBound = 2; // int upperBound = 2;
final formKey = GlobalKey<FormState>(); // final formKey = GlobalKey<FormState>();
//
@override // @override
void initState() { // void initState() {
super.initState(); // super.initState();
} // }
//
@override // @override
Widget build(BuildContext context) { // Widget build(BuildContext context) {
return Scaffold( // return Scaffold(
backgroundColor: AppColor.neutral100, // backgroundColor: AppColor.neutral100,
appBar: DefaultAppBar(title: context.translation.createWorkOrder), // appBar: DefaultAppBar(title: context.translation.createWorkOrder),
body: Column( // body: Column(
children: [ // children: [
16.height, // 16.height,
CustomStepper( // CustomStepper(
activeStep: activeStep, // activeStep: activeStep,
lineStyle: LineStyle( // lineStyle: LineStyle(
activeLineColor: AppColor.primary10, // activeLineColor: AppColor.primary10,
finishedLineColor: AppColor.primary10, // finishedLineColor: AppColor.primary10,
defaultLineColor: AppColor.white40, // defaultLineColor: AppColor.white40,
lineThickness: 1, // lineThickness: 1,
lineLength: 93.toScreenWidth, // lineLength: 93.toScreenWidth,
lineType: LineType.normal, // lineType: LineType.normal,
), // ),
internalPadding: 2.toScreenWidth, // internalPadding: 2.toScreenWidth,
steps: [ // steps: [
StepModel(customStep: customStepWidget(index: 0, stepIndex: 1), customTitle: customStepLabel(index: 1, label: context.translation.timeAndDuration)), // 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: 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)), // StepModel(customStep: customStepWidget(index: 2, stepIndex: 3), customTitle: customStepLabel(index: 1, label: context.translation.attachmentsAcknowledge)),
], // ],
onStepReached: (index) => setState(() => activeStep = index), // onStepReached: (index) => setState(() => activeStep = index),
), // ),
Expanded( // Expanded(
child: Padding( // child: Padding(
padding: EdgeInsetsDirectional.symmetric(horizontal: 16.toScreenWidth, vertical: 25.toScreenHeight), // padding: EdgeInsetsDirectional.symmetric(horizontal: 16.toScreenWidth, vertical: 25.toScreenHeight),
child: getStepWidget(), // child: getStepWidget(),
)), // )),
bottomContainerWidget(), // bottomContainerWidget(),
], // ],
), // ),
); // );
} // }
//
Widget bottomContainerWidget() { // Widget bottomContainerWidget() {
return Container( // return Container(
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 16.toScreenHeight), // padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 16.toScreenHeight),
color: AppColor.white10, // color: AppColor.white10,
child: Row( // child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, // mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ // children: [
AppFilledButton( // AppFilledButton(
label: context.translation.cancel, // label: context.translation.cancel,
loading: false, // loading: false,
buttonColor: AppColor.white60, // buttonColor: AppColor.white60,
textColor: AppColor.black10, // textColor: AppColor.black10,
onPressed: () async { // onPressed: () async {
Navigator.pop(context); // Navigator.pop(context);
// await snapshot.updateRequest(user: userProvider.user, request: serviceRequestProvider.serviceRequest); // // await snapshot.updateRequest(user: userProvider.user, request: serviceRequestProvider.serviceRequest);
// Navigator.pop(context, true); // // Navigator.pop(context, true);
}, // },
).expanded, // ).expanded,
12.width, // 12.width,
AppFilledButton( // AppFilledButton(
label: context.translation.next, // label: context.translation.next,
buttonColor: AppColor.primary10, // buttonColor: AppColor.primary10,
loading: false, // loading: false,
onPressed: () { // onPressed: () {
_incrementActiveStep(); // _incrementActiveStep();
//TODO move to next step.. // //TODO move to next step..
}, // },
).expanded, // ).expanded,
], // ],
)); // ));
} // }
//
void _incrementActiveStep() { // void _incrementActiveStep() {
setState(() { // setState(() {
++activeStep; // ++activeStep;
if (reachedStep < activeStep) { // if (reachedStep < activeStep) {
reachedStep = activeStep; // reachedStep = activeStep;
} // }
}); // });
} // }
//
Future<void> _navigateNext(ServiceRequestsProvider serviceRequestsProvider) async { // Future<void> _navigateNext(ServiceRequestsProvider serviceRequestsProvider) async {
if (activeStep < upperBound) { // if (activeStep < upperBound) {
switch (activeStep) { // switch (activeStep) {
case 0: // case 0:
// await _navigateNextStep(listingVm); // // await _navigateNextStep(listingVm);
break; // break;
case 1: // case 1:
break; // break;
case 2: // case 2:
_incrementActiveStep(); // _incrementActiveStep();
break; // break;
} // }
} // }
} // }
//
// Your onPressed code // // Your onPressed code
//
Widget customStepWidget({required int index, required int stepIndex}) { // Widget customStepWidget({required int index, required int stepIndex}) {
return CircleAvatar( // return CircleAvatar(
backgroundColor: activeStep >= index ? AppColor.primary10 : AppColor.background(context), // backgroundColor: activeStep >= index ? AppColor.primary10 : AppColor.background(context),
child: activeStep > index // child: activeStep > index
? Icon( // ? Icon(
Icons.done, // Icons.done,
color: AppColor.white10, // color: AppColor.white10,
size: 26.toScreenHeight, // size: 26.toScreenHeight,
) // )
: activeStep == index // : activeStep == index
? Text( // ? Text(
'0$stepIndex', // '0$stepIndex',
style: const TextStyle(fontWeight: FontWeight.w500, color: AppColor.white10), // style: const TextStyle(fontWeight: FontWeight.w500, color: AppColor.white10),
textAlign: TextAlign.center, // textAlign: TextAlign.center,
) // )
: Text( // : Text(
'0$stepIndex', // '0$stepIndex',
style: const TextStyle(color: AppColor.black20), // style: const TextStyle(color: AppColor.black20),
), // ),
); // );
} // }
//
Widget customStepLabel({required String label, required int index}) { // Widget customStepLabel({required String label, required int index}) {
return Column( // return Column(
children: [ // children: [
Text( // Text(
label, // label,
textAlign: TextAlign.center, // textAlign: TextAlign.center,
style: AppTextStyles.bodyText2.copyWith(color: AppColor.black20), // style: AppTextStyles.bodyText2.copyWith(color: AppColor.black20),
), // ),
], // ],
); // );
} // }
//
/// Returns the previous button. // /// Returns the previous button.
//
Widget getStepWidget() { // Widget getStepWidget() {
switch (activeStep) { // switch (activeStep) {
case 0: // case 0:
return const TimeDurationView(); // return const TimeDurationView();
case 1: // case 1:
return AssetConditionView(); // return AssetConditionView();
case 2: // case 2:
return AttachmentView(); // return AttachmentView();
default: // default:
return const SizedBox(); // return const SizedBox();
} // }
} // }
} // }

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.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/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_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}) { bool validate({required RecurrentWoData model}) {
if (model.recurrentWoTimerModel?.startAt == null) { bool isTimerPickerEnable = ApiManager.instance.assetGroup?.enabledEngineerTimer ?? false;
Fluttertoast.showToast(msg: "Working Hours Required");
return false; if (isTimerPickerEnable) {
} if (model.recurrentWoTimerModel?.startAt == null && model.recurrentWoTimePicker == null) {
if (model.recurrentWoTimerModel?.endAt == null) { Fluttertoast.showToast(msg: "Working Hours Required");
Fluttertoast.showToast(msg: "Please Stop The Timer"); return false;
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; return true;
} }

@ -4,6 +4,7 @@ import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.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/controllers/providers/api/device_transfer_provider.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
@ -60,38 +61,50 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
_formModel.assetTransferAttachments = []; _formModel.assetTransferAttachments = [];
VisitTimers? deviceTimerPicker; VisitTimers? deviceTimerPicker;
if (_formModel.deviceTimePicker != null) { if (_formModel.deviceTimePicker != null) {
int durationInSecond = int durationInSecond = _formModel.deviceTimePicker!.endAt!.difference(_formModel.deviceTimePicker!.startAt!).inSeconds;
_formModel.deviceTimePicker!.endAt!.difference(_formModel.deviceTimePicker!.startAt!).inSeconds; deviceTimerPicker = VisitTimers(
deviceTimerPicker = VisitTimers(
id: 0, id: 0,
startDateTime: _formModel.deviceTimePicker?.startAt?.toIso8601String(), startDateTime: _formModel.deviceTimePicker?.startAt?.toIso8601String(),
endDateTime: _formModel.deviceTimePicker?.endAt?.toIso8601String(), endDateTime: _formModel.deviceTimePicker?.endAt?.toIso8601String(),
workingHours: ((durationInSecond) / 60 / 60), workingHours: ((durationInSecond) / 60 / 60),
); );
} }
int workingHours = _formModel.tbsTimer?.endAt!.difference(_formModel.tbsTimer!.startAt!).inSeconds ?? 0; int workingHours = _formModel.tbsTimer?.endAt!.difference(_formModel.tbsTimer!.startAt!).inSeconds ?? 0;
if (widget.isSender) { if (widget.isSender) {
_formModel.senderVisitTimers?.add(deviceTimerPicker!); if (deviceTimerPicker != null) {
_formModel.senderVisitTimers?.add( _formModel.senderVisitTimers?.add(deviceTimerPicker);
VisitTimers( }
id: 0,
startDateTime: _formModel.tbsTimer?.startAt?.toIso8601String(), _formModel.timerModelList?.forEach((timer) {
endDateTime: _formModel.tbsTimer?.endAt?.toIso8601String(), int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds;
workingHours: ((workingHours) / 60 / 60), _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; _formModel.assetTransferEngineerTimers = _formModel.senderVisitTimers;
} else { } else {
_formModel.receiverVisitTimers?.add(deviceTimerPicker!); if (deviceTimerPicker != null) {
_formModel.receiverVisitTimers?.add( _formModel.receiverVisitTimers?.add(deviceTimerPicker);
VisitTimers( }
id: 0,
startDateTime: _formModel.tbsTimer?.startAt?.toIso8601String(), _formModel.timerModelList?.forEach((timer) {
endDateTime: _formModel.tbsTimer?.endAt?.toIso8601String(), int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds;
workingHours: ((workingHours) / 60 / 60), _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; _formModel.assetTransferEngineerTimers = _formModel.receiverVisitTimers;
} }
try { try {
@ -107,29 +120,51 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
} catch (error) { } catch (error) {
print(error); print(error);
} }
if(status ==1){ if (status == 1) {
ServiceRequestBottomSheet.nurseVerifyAssetTransferBottomSheet(context: context,onAckhnowledgePress: (signature) async { ServiceRequestBottomSheet.nurseVerifyAssetTransferBottomSheet(
//TODO NEED TO CALL API HERE WITH ADDED PARAMETER FOR SIGNATURE FROM BACKEND.. context: context,
if(signature!=null){ onAckhnowledgePress: (signature) async {
_formModel.nurseSignature = signature; //TODO NEED TO CALL API HERE WITH ADDED PARAMETER FOR SIGNATURE FROM BACKEND..
await _deviceTransferProvider.updateRequest(context, model: _formModel); if (signature != null) {
} _formModel.nurseSignature = signature;
}); await _deviceTransferProvider.updateRequest(context, model: _formModel);
}else { }
});
} else {
await _deviceTransferProvider.updateRequest(context, model: _formModel); await _deviceTransferProvider.updateRequest(context, model: _formModel);
} }
} }
} }
bool _validateForm() { bool _validateForm() {
if (_formModel.tbsTimer?.startAt == null) { bool isTimerPickerEnable = ApiManager.instance.assetGroup?.enabledEngineerTimer ?? false;
Fluttertoast.showToast(msg: "Working Hours Required");
return false; if (isTimerPickerEnable) {
} if (_formModel.tbsTimer?.startAt == null && _formModel.deviceTimePicker == null) {
if (_formModel.tbsTimer?.endAt == null || isTimerRunning) { Fluttertoast.showToast(msg: "Working Hours Required");
Fluttertoast.showToast(msg: "Please Stop The Timer"); return false;
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.assistantEmployees != null) {
if (_formModel.modelAssistantEmployees?.startDate == null) { if (_formModel.modelAssistantEmployees?.startDate == null) {
Fluttertoast.showToast(msg: "Please Select Assistant Employee Start Time"); Fluttertoast.showToast(msg: "Please Select Assistant Employee Start Time");
@ -237,12 +272,11 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
12.width, 12.width,
if (!widget.isSender && _formModel.senderMachineStatusValue == 3) ...[ if (!widget.isSender && _formModel.senderMachineStatusValue == 3) ...[
AppFilledButton( AppFilledButton(
label: context.translation.complete, label: context.translation.complete,
buttonColor: AppColor.primary10, buttonColor: AppColor.primary10,
onPressed: (){ onPressed: () {
_update(status: 1); _update(status: 1);
} }).expanded,
).expanded,
] else if (widget.isSender) ...[ ] else if (widget.isSender) ...[
AppFilledButton( AppFilledButton(
label: context.translation.complete, label: context.translation.complete,
@ -268,11 +302,6 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
} }
void updateTimer({TimerModel? timer}) { void updateTimer({TimerModel? timer}) {
_formModel.tbsTimer = timer;
if (timer?.startAt != null && timer?.endAt != null) {
_formModel.timerModelList = _formModel.timerModelList ?? [];
_formModel.timerModelList!.add(timer!);
}
// notifyListeners(); // notifyListeners();
} }
@ -283,7 +312,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
AppTimer( AppTimer(
label: context.translation.workingHours, label: context.translation.workingHours,
timer: _formModel.tbsTimer, timer: _formModel.tbsTimer,
pickerFromDate: DateTime.tryParse(widget.model.createdDate??''), pickerFromDate: DateTime.tryParse(widget.model.createdDate ?? ''),
width: double.infinity, width: double.infinity,
enabled: isTimerEnable, enabled: isTimerEnable,
decoration: BoxDecoration( decoration: BoxDecoration(
@ -296,7 +325,11 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
}, },
timerProgress: (isRunning) {}, timerProgress: (isRunning) {},
onChange: (timer) async { 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; return true;
}, },
), ),

@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.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/api_routes/http_status_manger.dart';
import 'package:test_sa/controllers/providers/api/gas_refill_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/api/user_provider.dart';
@ -91,14 +92,36 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.status}"); await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.status}");
return false; return false;
} }
if (_formModel.timer?.startAt == null) {
await Fluttertoast.showToast(msg: "Working Hours Required"); bool isTimerPickerEnable = ApiManager.instance.assetGroup?.enabledEngineerTimer ?? false;
return false;
} if (isTimerPickerEnable) {
if (_formModel.timer?.endAt == null) { if (_formModel.timer?.startAt == null && _formModel.gasRefillTimePicker == null) {
await Fluttertoast.showToast(msg: "Please Stop The Timer"); Fluttertoast.showToast(msg: "Working Hours Required");
return false; 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 (_formModel.gasRefillDetails?.isNotEmpty ?? false) {
if (!(await _addNewModel(context))) return; if (!(await _addNewModel(context))) return;
} }

@ -2,17 +2,15 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.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/all_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/gas_refill_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/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/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_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/lookup.dart';
import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/models/timer_model.dart';
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart'; import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
@ -94,14 +92,34 @@ class _UpdateGasRefillRequestState extends State<UpdateGasRefillRequest> {
} }
_onSubmit(BuildContext context, int status) async { _onSubmit(BuildContext context, int status) async {
if (_formModel.timer?.startAt == null) { bool isTimerPickerEnable = ApiManager.instance.assetGroup?.enabledEngineerTimer ?? false;
await Fluttertoast.showToast(msg: "Working Hours Required");
return false; if (isTimerPickerEnable) {
} if (_formModel.timer?.startAt == null && _formModel.gasRefillTimePicker == null) {
if (_formModel.timer?.endAt == null) { Fluttertoast.showToast(msg: "Working Hours Required");
await Fluttertoast.showToast(msg: "Please Stop The Timer"); return false;
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) { if (_currentDetails.deliverdQty == null) {
await Fluttertoast.showToast(msg: "Delivered Quantity is Required"); await Fluttertoast.showToast(msg: "Delivered Quantity is Required");
return false; return false;
@ -112,8 +130,7 @@ class _UpdateGasRefillRequestState extends State<UpdateGasRefillRequest> {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
_formModel.gasRefillTimers = _formModel.gasRefillTimers ?? []; _formModel.gasRefillTimers = _formModel.gasRefillTimers ?? [];
if (_formModel.gasRefillTimePicker != null) { if (_formModel.gasRefillTimePicker != null) {
int durationInSecond = int durationInSecond = _formModel.gasRefillTimePicker!.endAt!.difference(_formModel.gasRefillTimePicker!.startAt!).inSeconds;
_formModel.gasRefillTimePicker!.endAt!.difference(_formModel.gasRefillTimePicker!.startAt!).inSeconds;
_formModel.gasRefillTimers?.add( _formModel.gasRefillTimers?.add(
GasRefillTimer( GasRefillTimer(
id: 0, id: 0,
@ -286,7 +303,7 @@ class _UpdateGasRefillRequestState extends State<UpdateGasRefillRequest> {
AppTimer( AppTimer(
label: context.translation.workingHours, label: context.translation.workingHours,
timer: _formModel.timer, timer: _formModel.timer,
pickerFromDate: DateTime.tryParse(widget.gasRefillModel?.createdDate??''), pickerFromDate: DateTime.tryParse(widget.gasRefillModel?.createdDate ?? ''),
pickerTimer: _formModel.gasRefillTimePicker, pickerTimer: _formModel.gasRefillTimePicker,
onPick: (time) { onPick: (time) {
_formModel.gasRefillTimePicker = time; _formModel.gasRefillTimePicker = time;

Loading…
Cancel
Save