mark as complete confirmation dialog and new timer added for all type of requests

design_3.0_task_module_new
WaseemAbbasi22 5 months ago
parent 4c88dce72c
commit 4d15dc9dab

@ -105,14 +105,14 @@ class BaseStep extends StatelessWidget {
Color _handleTitleColor(BuildContext context, bool isFinished, bool isActive, Color _handleTitleColor(BuildContext context, bool isFinished, bool isActive,
bool isAlreadyReached) { bool isAlreadyReached) {
if (isActive) { if (isActive) {
return activeTextColor ?? Theme.of(context).colorScheme.primary; return activeTextColor;
} else { } else {
if (isFinished) { if (isFinished) {
return Colors.transparent; return Colors.transparent;
} else if (isAlreadyReached) { } else if (isAlreadyReached) {
return Colors.transparent; return Colors.transparent;
} else { } else {
return unreachedTextColor ?? Colors.grey.shade400; return unreachedTextColor;
} }
} }
} }

@ -85,6 +85,7 @@ class DeviceTransfer {
this.receiverVisitTimers, this.receiverVisitTimers,
this.assetTransferEngineerTimers, this.assetTransferEngineerTimers,
this.tbsTimer, this.tbsTimer,
this.deviceTimePicker,
this.timerModelList, this.timerModelList,
this.assistantEmployees, this.assistantEmployees,
this.modelAssistantEmployees, this.modelAssistantEmployees,
@ -309,6 +310,7 @@ class DeviceTransfer {
List<AssetTransferContactPerson>? assetTransferContactPersons; List<AssetTransferContactPerson>? assetTransferContactPersons;
AssetTransferAssistantEmployees? modelAssistantEmployees; AssetTransferAssistantEmployees? modelAssistantEmployees;
TimerModel? tbsTimer = TimerModel(); TimerModel? tbsTimer = TimerModel();
TimerModel? deviceTimePicker;
DeviceTransfer copyWith( DeviceTransfer copyWith(
{num? id, {num? id,
@ -382,7 +384,8 @@ class DeviceTransfer {
String? destDepartmentName, String? destDepartmentName,
List<VisitTimers>? senderVisitTimers, List<VisitTimers>? senderVisitTimers,
List<VisitTimers>? receiverVisitTimers, List<VisitTimers>? receiverVisitTimers,
TimerModel? tbsTimer}) => TimerModel? tbsTimer,
TimerModel? deviceTimePicker}) =>
DeviceTransfer( DeviceTransfer(
id: id ?? this.id, id: id ?? this.id,
transferNo: transferNo ?? this.transferNo, transferNo: transferNo ?? this.transferNo,
@ -454,6 +457,7 @@ class DeviceTransfer {
senderVisitTimers: senderVisitTimers ?? this.senderVisitTimers, senderVisitTimers: senderVisitTimers ?? this.senderVisitTimers,
receiverVisitTimers: receiverVisitTimers ?? this.receiverVisitTimers, receiverVisitTimers: receiverVisitTimers ?? this.receiverVisitTimers,
tbsTimer: tbsTimer ?? this.tbsTimer, tbsTimer: tbsTimer ?? this.tbsTimer,
deviceTimePicker: deviceTimePicker ?? this.deviceTimePicker,
manufacturerName: manufacturerName ?? this.manufacturerName); manufacturerName: manufacturerName ?? this.manufacturerName);
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {

@ -45,6 +45,7 @@ class GasRefillModel {
this.localEngineerSignature, this.localEngineerSignature,
this.localNurseSignature, this.localNurseSignature,
this.timer, this.timer,
this.gasRefillTimePicker,
this.timerModelList, this.timerModelList,
this.gasRefillTimers, this.gasRefillTimers,
this.gasRefillAttachments, this.gasRefillAttachments,
@ -83,6 +84,7 @@ class GasRefillModel {
Uint8List? localNurseSignature; // Now nullable Uint8List? localNurseSignature; // Now nullable
Uint8List? localEngineerSignature; // Now nullable Uint8List? localEngineerSignature; // Now nullable
TimerModel? timer = TimerModel(); TimerModel? timer = TimerModel();
TimerModel? gasRefillTimePicker;
List<TimerModel>? timerModelList = []; List<TimerModel>? timerModelList = [];
List<GasRefillTimer>? gasRefillTimers = []; List<GasRefillTimer>? gasRefillTimers = [];
List<GasRefillAttachments>? gasRefillAttachments; List<GasRefillAttachments>? gasRefillAttachments;

@ -88,46 +88,47 @@ class TaskData {
TimerModel? taskTimerModel = TimerModel(); TimerModel? taskTimerModel = TimerModel();
double? totalWorkingHours = 0.0; double? totalWorkingHours = 0.0;
List<TimerModel>? timerModelList = []; List<TimerModel>? timerModelList = [];
TimerModel? taskTimePicker;
TaskData({
this.id, TaskData(
this.statusValue, {this.id,
this.taskJobNo, this.statusValue,
this.userCreated, this.taskJobNo,
this.taskJobContactPersons, this.userCreated,
this.taskType, this.taskJobContactPersons,
this.taskJobStatus, this.taskType,
this.asset, this.taskJobStatus,
this.site, this.asset,
this.building, this.site,
this.floor, this.building,
this.department, this.floor,
this.room, this.department,
this.callComment, this.room,
this.taskJobAttachments, this.callComment,
this.assignedEngineer, this.taskJobAttachments,
this.taskJobAssistantEmployees, this.assignedEngineer,
this.modelAssistantEmployees, this.taskJobAssistantEmployees,
this.assistantEmployees, this.modelAssistantEmployees,
this.taskJobHistories, this.assistantEmployees,
this.installationBuilding, this.taskJobHistories,
this.installationFloor, this.installationBuilding,
this.installationDepartment, this.installationFloor,
this.serialNo, this.installationDepartment,
this.installationDate, this.serialNo,
this.completedAction, this.installationDate,
this.impactStatus, this.completedAction,
this.isUserAcknowledge, this.impactStatus,
this.typeOfAlert, this.isUserAcknowledge,
this.riskLevel, this.typeOfAlert,
this.resource, this.riskLevel,
this.actionNeeded, this.resource,
this.alertNo, this.actionNeeded,
this.estimationDeliveryDate, this.alertNo,
this.reasonOfFSCA, this.estimationDeliveryDate,
this.correctiveActionDescription, this.reasonOfFSCA,
this.evaluatorUser, this.correctiveActionDescription,
}); this.evaluatorUser,
this.taskTimePicker});
TaskData.fromJson(Map<String, dynamic> json) { TaskData.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];

@ -50,6 +50,7 @@ class PlanPreventiveVisit {
List<PreventiveVisitSuppliers>? preventiveVisitSuppliers; List<PreventiveVisitSuppliers>? preventiveVisitSuppliers;
TimerModel? tbsTimer = TimerModel(); TimerModel? tbsTimer = TimerModel();
List<TimerModel>? timerModelList = []; List<TimerModel>? timerModelList = [];
TimerModel? ppMTimePicker;
PlanPreventiveVisit( PlanPreventiveVisit(
{this.id, {this.id,
@ -91,6 +92,7 @@ class PlanPreventiveVisit {
this.preventiveVisitKits, this.preventiveVisitKits,
this.preventiveVisitTimers, this.preventiveVisitTimers,
this.timerModelList, this.timerModelList,
this.ppMTimePicker,
this.preventiveVisitSuppliers}); this.preventiveVisitSuppliers});
PlanPreventiveVisit.fromJson(Map<String, dynamic> json) { PlanPreventiveVisit.fromJson(Map<String, dynamic> json) {

@ -54,6 +54,7 @@ class RecurrentWoData {
double? totalWorkingHours = 0.0; double? totalWorkingHours = 0.0;
List<TimerModel>? timerModelList = []; List<TimerModel>? timerModelList = [];
String? comment; String? comment;
TimerModel? recurrentWoTimePicker;
RecurrentWoData( RecurrentWoData(
{this.id, {this.id,
@ -71,6 +72,7 @@ class RecurrentWoData {
this.planRecurrentMedicalTaskRooms, this.planRecurrentMedicalTaskRooms,
this.planRecurrentTaskTimers, this.planRecurrentTaskTimers,
this.timerModelList, this.timerModelList,
this.recurrentWoTimePicker,
this.comment, this.comment,
this.totalWorkingHours}); this.totalWorkingHours});

@ -17,6 +17,7 @@ import 'package:test_sa/modules/cm_module/views/components/verify_arrival_view.d
import 'package:test_sa/modules/cm_module/views/forms/asset_retired/verify_asset_detail.dart'; import 'package:test_sa/modules/cm_module/views/forms/asset_retired/verify_asset_detail.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/swipe_module/dialoge/acknowledge_work_dialog.dart';
import 'package:test_sa/providers/service_request_providers/reject_reason_provider.dart'; import 'package:test_sa/providers/service_request_providers/reject_reason_provider.dart';
class FooterActionButton { class FooterActionButton {
@ -205,7 +206,24 @@ class FooterActionButton {
buttonColor: AppColor.green70, buttonColor: AppColor.green70,
onPressed: () { onPressed: () {
bool isValid = ServiceRequestBottomSheet.validateAssetSituation(Provider.of<ServiceRequestDetailProvider>(context, listen: false)); bool isValid = ServiceRequestBottomSheet.validateAssetSituation(Provider.of<ServiceRequestDetailProvider>(context, listen: false));
if (isValid) ServiceRequestBottomSheet.feedBackBottomSheet(context: context); if (isValid) {
showDialog(
context: context,
builder: (BuildContext cxt) => AcknowledgeWorkDialog(
message: "Are you sure you want to mark this Work Order as complete ",
confirmButtonText: 'Complete',
cancelButtonText: 'Cancel',
onSave: () async {
int status = await requestDetailProvider.engineerMarkAsFixed(workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!, feedback: '');
if (status != -1) {
Navigator.of(cxt).pop();
}
},
onDiscard: () {},
),
);
}
// ServiceRequestBottomSheet.feedBackBottomSheet(context: context);
}, },
), ),
] ]

@ -91,6 +91,9 @@ class TimeDurationView extends StatelessWidget {
child: AppTimer( child: AppTimer(
label: context.translation.workingHours, label: context.translation.workingHours,
timer: TimerModel(), timer: TimerModel(),
onPick: (TimerModel ?value){
},
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColor.background(context), color: AppColor.background(context),
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),

@ -50,6 +50,18 @@ class _UpdatePpmState extends State<UpdatePpm> with TickerProviderStateMixin {
} }
ppmProvider.planPreventiveVisit?.preventiveVisitTimers = ppmProvider.planPreventiveVisit?.preventiveVisitTimers ?? []; ppmProvider.planPreventiveVisit?.preventiveVisitTimers = ppmProvider.planPreventiveVisit?.preventiveVisitTimers ?? [];
if (ppmProvider.planPreventiveVisit?.ppMTimePicker != null) {
int durationInSecond = ppmProvider.planPreventiveVisit!.ppMTimePicker!.endAt!.difference(ppmProvider.planPreventiveVisit!.ppMTimePicker!.startAt!).inSeconds;
ppmProvider.planPreventiveVisit?.preventiveVisitTimers?.add(
PreventiveVisitTimers(
id: 0,
startDateTime: ppmProvider.planPreventiveVisit?.ppMTimePicker!.startAt!.toIso8601String(), // Handle potential null
endDateTime: ppmProvider.planPreventiveVisit?.ppMTimePicker!.endAt?.toIso8601String(), // Handle potential null
workingHours: ((durationInSecond) / 60 / 60),
),
);
}
ppmProvider.planPreventiveVisit?.timerModelList?.forEach((timer) { ppmProvider.planPreventiveVisit?.timerModelList?.forEach((timer) {
int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds; int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds;
ppmProvider.planPreventiveVisit?.preventiveVisitTimers?.add( ppmProvider.planPreventiveVisit?.preventiveVisitTimers?.add(
@ -78,11 +90,10 @@ class _UpdatePpmState extends State<UpdatePpm> with TickerProviderStateMixin {
@override @override
void initState() { void initState() {
ppmProvider = Provider.of<PpmProvider>(context, listen: false); ppmProvider = Provider.of<PpmProvider>(context, listen: false);
_planPreventiveVisit = widget.planPreventiveVisit; _planPreventiveVisit = widget.planPreventiveVisit;
// WidgetsBinding.instance.addPostFrameCallback((_) { // WidgetsBinding.instance.addPostFrameCallback((_) {
initTabs(_planPreventiveVisit.typeOfService); initTabs(_planPreventiveVisit.typeOfService);
// }); // });
super.initState(); super.initState();
} }
@ -114,9 +125,11 @@ class _UpdatePpmState extends State<UpdatePpm> with TickerProviderStateMixin {
backgroundColor: AppColor.neutral110, backgroundColor: AppColor.neutral110,
appBar: DefaultAppBar( appBar: DefaultAppBar(
title: context.translation.preventiveMaintenance, title: context.translation.preventiveMaintenance,
onWillPopScope:ppmProvider.isReadOnly?null: () { onWillPopScope: ppmProvider.isReadOnly
_onSubmit(status: 0); ? null
}, : () {
_onSubmit(status: 0);
},
), ),
key: _scaffoldKey, key: _scaffoldKey,
body: SafeArea( body: SafeArea(
@ -234,14 +247,14 @@ class _UpdatePpmState extends State<UpdatePpm> with TickerProviderStateMixin {
visible: tabIndex != 0, visible: tabIndex != 0,
child: AppFilledButton( child: AppFilledButton(
onPressed: () { onPressed: () {
if(ppmProvider.totalTabs == _tabController!.index + 1){ if (ppmProvider.totalTabs == _tabController!.index + 1) {
Navigator.pop(context); Navigator.pop(context);
return; return;
} }
_tabController?.animateTo(_tabController!.index + 1); _tabController?.animateTo(_tabController!.index + 1);
setState(() {}); setState(() {});
}, },
label:ppmProvider.totalTabs == _tabController!.index + 1? context.translation.close: context.translation.next, label: ppmProvider.totalTabs == _tabController!.index + 1 ? context.translation.close : context.translation.next,
).expanded, ).expanded,
), ),
] ]
@ -250,8 +263,11 @@ class _UpdatePpmState extends State<UpdatePpm> with TickerProviderStateMixin {
], ],
), ),
), ),
).handlePopScope(cxt: context, showPopUp:!ppmProvider.isReadOnly ,onSave: () { ).handlePopScope(
_onSubmit(status: 0); cxt: context,
}); showPopUp: !ppmProvider.isReadOnly,
onSave: () {
_onSubmit(status: 0);
});
} }
} }

@ -357,6 +357,11 @@ class _WoInfoFormState extends State<WoInfoForm> {
width: double.infinity, width: double.infinity,
timer: widget.planPreventiveVisit.tbsTimer, timer: widget.planPreventiveVisit.tbsTimer,
// enabled: widget.planPreventiveVisit.tbsTimer?.endAt == null, // enabled: widget.planPreventiveVisit.tbsTimer?.endAt == null,
pickerTimer: widget.planPreventiveVisit.ppMTimePicker,
canPickTime: true,
onPick: (time) {
widget.planPreventiveVisit.ppMTimePicker = time;
},
timerProgress: (isRunning) {}, timerProgress: (isRunning) {},
onChange: (timer) async { onChange: (timer) async {
widget.planPreventiveVisit.tbsTimer = timer; widget.planPreventiveVisit.tbsTimer = timer;

@ -82,6 +82,11 @@ class RecurrentTaskInfoWidget extends StatelessWidget {
color: AppColor.neutral100, color: AppColor.neutral100,
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
), ),
pickerTimer: model?.recurrentWoTimePicker,
canPickTime: true,
onPick: (time) {
model?.recurrentWoTimePicker = time;
},
timerProgress: (isRunning) {}, timerProgress: (isRunning) {},
onChange: (timer) async { onChange: (timer) async {
snapshot.updateRecurrentWoTimer(timer: timer); snapshot.updateRecurrentWoTimer(timer: timer);

@ -115,6 +115,18 @@ void _updateTask({required BuildContext context, required int status}) async {
if (validate(model: allRequestsProvider.recurrentWoData!)) { if (validate(model: allRequestsProvider.recurrentWoData!)) {
allRequestsProvider.recurrentWoData?.planRecurrentTaskTimers = allRequestsProvider.recurrentWoData?.planRecurrentTaskTimers ?? []; allRequestsProvider.recurrentWoData?.planRecurrentTaskTimers = allRequestsProvider.recurrentWoData?.planRecurrentTaskTimers ?? [];
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
if (allRequestsProvider.recurrentWoData?.recurrentWoTimePicker != null) {
int durationInSecond = allRequestsProvider.recurrentWoData!.recurrentWoTimePicker!.endAt!.difference(allRequestsProvider.recurrentWoData!.recurrentWoTimePicker!.startAt!).inSeconds;
allRequestsProvider.recurrentWoData?.planRecurrentTaskTimers?.add(
PlanRecurrentTaskTimers(
id: 0,
startTime: allRequestsProvider.recurrentWoData!.recurrentWoTimePicker!.startAt!.toIso8601String(), // Handle potential null
endTime: allRequestsProvider.recurrentWoData!.recurrentWoTimePicker!.endAt?.toIso8601String(), // Handle potential null
workingHours: ((durationInSecond) / 60 / 60),
),
);
}
allRequestsProvider.recurrentWoData?.timerModelList?.forEach((timer) { allRequestsProvider.recurrentWoData?.timerModelList?.forEach((timer) {
int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds; int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds;
allRequestsProvider.recurrentWoData?.planRecurrentTaskTimers?.add( allRequestsProvider.recurrentWoData?.planRecurrentTaskTimers?.add(

@ -190,6 +190,17 @@ class _UpdateTaskRequestState extends State<UpdateTaskRequest> {
attachment.add(TaskJobAttachment(id: 0, name: ServiceRequestUtils.isLocalUrl(item.path) ? "${item.path.split("/").last}|${base64Encode(item.readAsBytesSync())}" : item.path)); attachment.add(TaskJobAttachment(id: 0, name: ServiceRequestUtils.isLocalUrl(item.path) ? "${item.path.split("/").last}|${base64Encode(item.readAsBytesSync())}" : item.path));
} }
taskModel?.taskJobAttachments = attachment; taskModel?.taskJobAttachments = attachment;
if (taskModel?.taskTimePicker != null) {
int durationInSecond = taskModel!.taskTimePicker!.endAt!.difference(taskModel.taskTimePicker!.startAt!).inSeconds;
taskModel.taskJobActivityEngineerTimers?.add(
TaskJobActivityEngineerTimer(
id: 0,
startDate: taskModel.taskTimePicker!.startAt!.toIso8601String(), // Handle potential null
endDate: taskModel.taskTimePicker!.endAt?.toIso8601String(), // Handle potential null
totalWorkingHour: ((durationInSecond) / 60 / 60),
),
);
}
taskModel?.timerModelList?.forEach((timer) { taskModel?.timerModelList?.forEach((timer) {
int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds; int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds;
taskModel.taskJobActivityEngineerTimers?.add( taskModel.taskJobActivityEngineerTimers?.add(
@ -483,6 +494,11 @@ class _UpdateTaskRequestState extends State<UpdateTaskRequest> {
color: AppColor.neutral90, color: AppColor.neutral90,
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
), ),
pickerTimer: taskProvider.taskRequestModel?.taskTimePicker,
canPickTime: true,
onPick: (time) {
taskProvider.taskRequestModel?.taskTimePicker = time;
},
timerProgress: (isRunning) {}, timerProgress: (isRunning) {},
onChange: (timer) async { onChange: (timer) async {
taskProvider.updateTaskTimer(timer: timer); taskProvider.updateTaskTimer(timer: timer);

@ -9,11 +9,13 @@ class AcknowledgeWorkDialog extends StatelessWidget {
final String? title; final String? title;
final String? message; final String? message;
final String? okTitle; final String? okTitle;
final String? confirmButtonText;
final String? cancelButtonText;
final VoidCallback onSave; final VoidCallback onSave;
final VoidCallback onDiscard; final VoidCallback onDiscard;
const AcknowledgeWorkDialog( const AcknowledgeWorkDialog(
{Key? key, this.title, this.message = "To prevent the risk of losing your changes, Please confirm Save or Discard", this.okTitle, required this.onSave, required this.onDiscard}) {Key? key, this.title, this.message = "To prevent the risk of losing your changes, Please confirm Save or Discard", this.okTitle, required this.onSave, required this.onDiscard,this.confirmButtonText,this.cancelButtonText})
: super(key: key); : super(key: key);
@override @override
@ -37,7 +39,7 @@ class AcknowledgeWorkDialog extends StatelessWidget {
Row( Row(
children: [ children: [
AppFilledButton( AppFilledButton(
label: "Discard", label: cancelButtonText?? "Discard",
buttonColor: Colors.white54, buttonColor: Colors.white54,
textColor: AppColor.red30, textColor: AppColor.red30,
height: 40, height: 40,
@ -49,7 +51,7 @@ class AcknowledgeWorkDialog extends StatelessWidget {
).expanded, ).expanded,
16.width, 16.width,
AppFilledButton( AppFilledButton(
label: "Save", label:confirmButtonText?? "Save",
onPressed: () { onPressed: () {
Navigator.of(context).pop(); Navigator.of(context).pop();
onSave(); onSave();

@ -58,8 +58,21 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
_formModel.statusValue = status; _formModel.statusValue = status;
_formModel.isSender = widget.isSender; _formModel.isSender = widget.isSender;
_formModel.assetTransferAttachments = []; _formModel.assetTransferAttachments = [];
VisitTimers? deviceTimerPicker;
if (_formModel.deviceTimePicker != null) {
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; int workingHours = _formModel.tbsTimer?.endAt!.difference(_formModel.tbsTimer!.startAt!).inSeconds ?? 0;
if (widget.isSender) { if (widget.isSender) {
_formModel.senderVisitTimers?.add(deviceTimerPicker!);
_formModel.senderVisitTimers?.add( _formModel.senderVisitTimers?.add(
VisitTimers( VisitTimers(
id: 0, id: 0,
@ -70,6 +83,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
); );
_formModel.assetTransferEngineerTimers = _formModel.senderVisitTimers; _formModel.assetTransferEngineerTimers = _formModel.senderVisitTimers;
} else { } else {
_formModel.receiverVisitTimers?.add(deviceTimerPicker!);
_formModel.receiverVisitTimers?.add( _formModel.receiverVisitTimers?.add(
VisitTimers( VisitTimers(
id: 0, id: 0,
@ -275,6 +289,11 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
color: AppColor.neutral100, color: AppColor.neutral100,
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
), ),
pickerTimer: _formModel.deviceTimePicker,
canPickTime: true,
onPick: (time) {
_formModel.deviceTimePicker = time;
},
timerProgress: (isRunning) {}, timerProgress: (isRunning) {},
onChange: (timer) async { onChange: (timer) async {
updateTimer(timer: timer); updateTimer(timer: timer);

@ -234,6 +234,11 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
label: context.translation.workingHours, label: context.translation.workingHours,
timer: _formModel.timer, timer: _formModel.timer,
enabled: _formModel.endDate == null, enabled: _formModel.endDate == null,
pickerTimer: _formModel.gasRefillTimePicker,
canPickTime: true,
onPick: (time) {
_formModel.gasRefillTimePicker = time;
},
onChange: (timer) async { onChange: (timer) async {
_formModel.timer = timer; _formModel.timer = timer;
return true; return true;

@ -111,7 +111,18 @@ 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) {
int durationInSecond =
_formModel.gasRefillTimePicker!.endAt!.difference(_formModel.gasRefillTimePicker!.startAt!).inSeconds;
_formModel.gasRefillTimers?.add(
GasRefillTimer(
id: 0,
startDate: _formModel.gasRefillTimePicker!.startAt!.toIso8601String(), // Handle potential null
endDate: _formModel.gasRefillTimePicker!.endAt?.toIso8601String(), // Handle potential null
workingHours: ((durationInSecond) / 60 / 60),
),
);
}
_formModel.timerModelList?.forEach((timer) { _formModel.timerModelList?.forEach((timer) {
int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds; int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds;
_formModel.gasRefillTimers?.add( _formModel.gasRefillTimers?.add(
@ -275,8 +286,11 @@ class _UpdateGasRefillRequestState extends State<UpdateGasRefillRequest> {
AppTimer( AppTimer(
label: context.translation.workingHours, label: context.translation.workingHours,
timer: _formModel.timer, timer: _formModel.timer,
//TODO need to fix this.. pickerTimer: _formModel.gasRefillTimePicker,
// enabled: _formModel.endDate == null, canPickTime: true,
onPick: (time) {
_formModel.gasRefillTimePicker = time;
},
width: double.infinity, width: double.infinity,
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColor.neutral100, color: AppColor.neutral100,

@ -120,7 +120,7 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
} }
_serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere( _serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere(
(element) => element.value == _serviceReport.callRequest?.assetType, (element) => element.value == _serviceReport.callRequest?.assetType,
orElse: null, orElse: null,
); );
return Scaffold( return Scaffold(
@ -176,15 +176,16 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
setState(() { setState(() {
_serviceReport.visitDate = selectedDateTime.toIso8601String(); _serviceReport.visitDate = selectedDateTime.toIso8601String();
}); });
} }
}); });
}, },
), ),
8.height, 8.height,
AppTimer( AppTimer(
label: context.translation.workingHours, label: context.translation.workingHours,
timer: _serviceReport.timer, timer: _serviceReport.timer,
enabled: _serviceReport.endofWorkTime == null, enabled: _serviceReport.endofWorkTime == null,
onPick: (value) {},
onChange: (timer) async { onChange: (timer) async {
_serviceReport.timer = timer; _serviceReport.timer = timer;
if (timer.startAt != null && timer.endAt != null) { if (timer.startAt != null && timer.endAt != null) {
@ -209,7 +210,7 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
await _assetTypeProvider.getTypes(); await _assetTypeProvider.getTypes();
_serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere( _serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere(
(element) => element.value == _serviceReport.callRequest!.assetType, (element) => element.value == _serviceReport.callRequest!.assetType,
orElse: null, orElse: null,
); );
}, },
child: AppTextFormField( child: AppTextFormField(
@ -301,7 +302,7 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
setState(() { setState(() {
loanAvailabilityAsset = asset; loanAvailabilityAsset = asset;
}); });
}, },
), ),
8.height, 8.height,
ServiceReportAssistantEmployeeMenu( ServiceReportAssistantEmployeeMenu(

@ -104,7 +104,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
_settingProvider = Provider.of<SettingProvider>(context); _settingProvider = Provider.of<SettingProvider>(context);
_serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context); _serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
_assetTypeProvider = Provider.of<ServiceStatusProvider>(context); _assetTypeProvider = Provider.of<ServiceStatusProvider>(context);
_serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere((element) => element.value == _callRequestForWorkOrder.assetType, orElse: null); _serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere((element) => element.value == _callRequestForWorkOrder.assetType, orElse: null);
return Scaffold( return Scaffold(
key: _scaffoldKey, key: _scaffoldKey,
appBar: DefaultAppBar(title: context.translation.updateWorkOrder), appBar: DefaultAppBar(title: context.translation.updateWorkOrder),
@ -154,9 +154,9 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
setState(() { setState(() {
_serviceReport.visitDate = selectedDateTime.toIso8601String(); _serviceReport.visitDate = selectedDateTime.toIso8601String();
}); });
} }
}); });
}, },
), ),
8.height, 8.height,
AppTimer( AppTimer(
@ -167,6 +167,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
_serviceReport.timer = timer; _serviceReport.timer = timer;
return true; return true;
}, },
onPick: (value) {},
), ),
8.height, 8.height,
LoadingManager( LoadingManager(
@ -178,7 +179,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
await _assetTypeProvider.getTypes(); await _assetTypeProvider.getTypes();
_serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere( _serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere(
(element) => element.value == _serviceReport.callRequest?.assetType, (element) => element.value == _serviceReport.callRequest?.assetType,
orElse: null, orElse: null,
); );
}, },
child: AppTextFormField( child: AppTextFormField(
@ -270,7 +271,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
setState(() { setState(() {
loanAvailabilityAsset = asset; loanAvailabilityAsset = asset;
}); });
}, },
), ),
if (_serviceReport.assetLoan != null && loanAvailabilityAsset == null) if (_serviceReport.assetLoan != null && loanAvailabilityAsset == null)
Card(child: "${context.translation.assetNumber}: ${_serviceReport.assetLoan?.assetNumber}".bodyText(context).paddingAll(16)), Card(child: "${context.translation.assetNumber}: ${_serviceReport.assetLoan?.assetNumber}".bodyText(context).paddingAll(16)),

Loading…
Cancel
Save