maintenance request flow in progress
parent
b04cd1e042
commit
0095facdf5
@ -0,0 +1,93 @@
|
||||
import 'package:test_sa/models/lookup.dart';
|
||||
import 'package:test_sa/models/new_models/assigned_employee.dart';
|
||||
|
||||
class ActivityMaintenanceHelperModel {
|
||||
int? workOrderId;
|
||||
int? lastSituationId;
|
||||
Lookup? activityStatus;
|
||||
DateTime? startTime;
|
||||
DateTime? endTime;
|
||||
int? workingHour;
|
||||
int? travelHours;
|
||||
Lookup? repairLocation;
|
||||
String? assignedEmployeeId;
|
||||
String? technicalComment;
|
||||
int? supplierId;
|
||||
int? supplierEngineerId;
|
||||
DateTime? supplierStartTime;
|
||||
DateTime? supplierEndTime;
|
||||
int? supplierWorkingHour;
|
||||
AssignedEmployee? assignedEmployee;
|
||||
List<AssistantEmployees>? assistantEmployees;
|
||||
|
||||
ActivityMaintenanceHelperModel(
|
||||
{this.workOrderId,
|
||||
this.lastSituationId,
|
||||
this.startTime,
|
||||
this.endTime,
|
||||
this.workingHour,
|
||||
this.travelHours,
|
||||
this.repairLocation,
|
||||
this.assignedEmployeeId,
|
||||
this.technicalComment,
|
||||
this.supplierId,
|
||||
this.supplierEngineerId,
|
||||
this.supplierStartTime,
|
||||
this.supplierEndTime,
|
||||
this.supplierWorkingHour,
|
||||
this.assignedEmployee,
|
||||
this.assistantEmployees});
|
||||
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['workOrderId'] = workOrderId;
|
||||
data['lastSituationId'] = lastSituationId;
|
||||
data['activityStatusId'] = activityStatus?.id;
|
||||
data['startTime'] = startTime?.toIso8601String();
|
||||
data['endTime'] = endTime?.toIso8601String();
|
||||
data['workingHour'] = workingHour;
|
||||
data['travelHours'] = travelHours;
|
||||
data['repairLocationId'] = repairLocation?.id;
|
||||
data['assignedEmployeeId'] = assignedEmployeeId;
|
||||
data['technicalComment'] = technicalComment;
|
||||
data['supplierId'] = supplierId;
|
||||
data['supplierEngineerId'] = supplierEngineerId;
|
||||
data['supplierStartTime'] = supplierStartTime?.toIso8601String();
|
||||
data['supplierEndTime'] = supplierEndTime?.toIso8601String();
|
||||
data['supplierWorkingHour'] = supplierWorkingHour;
|
||||
if (assistantEmployees != null) {
|
||||
data['assistantEmployees'] =
|
||||
assistantEmployees!.map((v) => v.toJson()).toList();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class AssistantEmployees {
|
||||
int? id;
|
||||
String? userId;
|
||||
DateTime? startDate;
|
||||
DateTime? endDate;
|
||||
int? workingHours;
|
||||
String? technicalComment;
|
||||
|
||||
AssistantEmployees(
|
||||
{this.id,
|
||||
this.userId,
|
||||
this.startDate,
|
||||
this.endDate,
|
||||
this.workingHours,
|
||||
this.technicalComment});
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
data['userId'] = userId;
|
||||
data['startDate'] = startDate?.toIso8601String();
|
||||
data['endDate'] = endDate?.toIso8601String();
|
||||
data['workingHours'] = workingHours;
|
||||
data['technicalComment'] = technicalComment;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,212 @@
|
||||
|
||||
import 'package:expansion_tile_card/expansion_tile_card.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:test_sa/controllers/providers/api/asset_transfer_provider.dart';
|
||||
import 'package:test_sa/dashboard_latest/widgets/app_bar_widget.dart';
|
||||
import 'package:test_sa/extensions/context_extension.dart';
|
||||
import 'package:test_sa/extensions/int_extensions.dart';
|
||||
import 'package:test_sa/extensions/string_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_text_form_field.dart';
|
||||
import 'package:test_sa/service_request_latest/request_detail_provider.dart';
|
||||
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
|
||||
import 'package:test_sa/views/widgets/status/report/service_report_assistant_employee_menu.dart';
|
||||
|
||||
class AssistantEmployeeCard extends StatefulWidget {
|
||||
|
||||
const AssistantEmployeeCard({super.key});
|
||||
|
||||
@override
|
||||
State<AssistantEmployeeCard> createState() => _AssistantEmployeeCardState();
|
||||
}
|
||||
|
||||
class _AssistantEmployeeCardState extends State<AssistantEmployeeCard> {
|
||||
final GlobalKey<ExpansionTileCardState> cardA = GlobalKey();
|
||||
bool status = false;
|
||||
final TextEditingController _workingHoursController = TextEditingController();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
// TODO: implement initState
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
getInitialData();
|
||||
});
|
||||
super.initState();
|
||||
}
|
||||
|
||||
Future<void> getInitialData() async {
|
||||
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
// TODO: implement dispose
|
||||
_workingHoursController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Consumer<RequestDetailProvider>(builder: (context, requestDetailProvider, child) {
|
||||
return ExpansionTileCard(
|
||||
key: cardA,
|
||||
initialElevation: 0,
|
||||
borderRadius: BorderRadius.zero,
|
||||
expandedTextColor: AppColor.black20,
|
||||
shadowColor: AppColor.white10,
|
||||
baseColor: AppColor.white10,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
expandedColor: AppColor.white10,
|
||||
duration: Duration.zero,
|
||||
elevation: 0,
|
||||
title:context.translation.assistantEmployee.bodyText(context).custom(color: AppColor.black20),
|
||||
children: <Widget>[
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
// ServiceReportAssistantEmployeeMenu(
|
||||
// title: context.translation.assignAssistant,
|
||||
// assetId: widget.workOrder!.callRequest!.asset!.id!.toInt(),
|
||||
//
|
||||
// initialValue: (_subWorkOrders.assistantEmployees?.isNotEmpty ?? false) ? _subWorkOrders.assistantEmployees?.first : null,
|
||||
// // initialValue: !isCurrentAssigned
|
||||
// // ? (widget.workOrder.assistantEmployees?.first)
|
||||
// // : (_subWorkOrders.assistantEmployees?.isNotEmpty ?? false)
|
||||
// // ? _subWorkOrders.assistantEmployees?.first
|
||||
// // : null,
|
||||
// enable: !isCurrentUserIsAssistantEmp,
|
||||
// onSelect: (employee) {
|
||||
// if (employee == null) {
|
||||
// _subWorkOrders.assistantEmployees = [];
|
||||
// } else {
|
||||
// _subWorkOrders.assistantEmployees = [employee.copyWith(id: 0)];
|
||||
// }
|
||||
// },
|
||||
// ),
|
||||
Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
ADatePicker(
|
||||
label: context.translation.startTime,
|
||||
hideShadow: true,
|
||||
backgroundColor: AppColor.neutral100,
|
||||
date: requestDetailProvider.activityMaintenanceHelperModel?.startTime,
|
||||
formatDateWithTime: true,
|
||||
onDatePicker: (selectedDate) {
|
||||
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,
|
||||
);
|
||||
requestDetailProvider.activityMaintenanceHelperModel?.startTime = selectedDateTime;
|
||||
requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel);
|
||||
assignWorkingHours(requestDetailProvider: requestDetailProvider);
|
||||
}
|
||||
});
|
||||
},
|
||||
).expanded,
|
||||
8.width,
|
||||
ADatePicker(
|
||||
label: context.translation.endTime,
|
||||
hideShadow: true,
|
||||
backgroundColor: AppColor.neutral100,
|
||||
date: requestDetailProvider.activityMaintenanceHelperModel?.endTime,
|
||||
formatDateWithTime: true,
|
||||
onDatePicker: (selectedDate) {
|
||||
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,
|
||||
);
|
||||
if (requestDetailProvider.activityMaintenanceHelperModel!.startTime!=null&&selectedDateTime.isBefore(requestDetailProvider.activityMaintenanceHelperModel!.startTime!)) {
|
||||
"End Date time must be greater then start date".showToast;
|
||||
return;
|
||||
}
|
||||
requestDetailProvider.activityMaintenanceHelperModel?.endTime = selectedDateTime;
|
||||
requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel);
|
||||
assignWorkingHours(requestDetailProvider: requestDetailProvider);
|
||||
|
||||
}
|
||||
});
|
||||
},
|
||||
).expanded,
|
||||
],
|
||||
),
|
||||
8.height,
|
||||
AppTextFormField(
|
||||
labelText: context.translation.workingHours,
|
||||
backgroundColor: AppColor.neutral80,
|
||||
controller: _workingHoursController,
|
||||
suffixIcon: "clock".toSvgAsset(width: 20, color: context.isDark ? AppColor.neutral10 : null).paddingOnly(end: 16),
|
||||
initialValue: requestDetailProvider.activityMaintenanceHelperModel?.workingHour.toString(),
|
||||
textAlign: TextAlign.center,
|
||||
labelStyle: AppTextStyles.textFieldLabelStyle,
|
||||
enable: false,
|
||||
showShadow: false,
|
||||
style: Theme.of(context).textTheme.titleMedium,
|
||||
),
|
||||
8.height,
|
||||
AppTextFormField(
|
||||
initialValue: requestDetailProvider.activityMaintenanceHelperModel?.technicalComment,
|
||||
labelText: context.translation.technicalComment,
|
||||
backgroundColor: AppColor.neutral100,
|
||||
showShadow: false,
|
||||
labelStyle: AppTextStyles.textFieldLabelStyle,
|
||||
alignLabelWithHint: true,
|
||||
textInputType: TextInputType.multiline,
|
||||
onChange: (value){
|
||||
requestDetailProvider.activityMaintenanceHelperModel?.technicalComment = value;
|
||||
},
|
||||
onSaved: (value) {
|
||||
requestDetailProvider.activityMaintenanceHelperModel?.technicalComment = value;
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
});
|
||||
}
|
||||
int calculateWorkingHours(DateTime? startTime, DateTime? endTime) {
|
||||
if(startTime!=null&&endTime!=null){
|
||||
Duration difference = endTime.difference(startTime);
|
||||
int hours = difference.inHours;
|
||||
int minutes = difference.inMinutes % 60;
|
||||
return hours;
|
||||
}else{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
assignWorkingHours({required RequestDetailProvider requestDetailProvider}){
|
||||
int hours = calculateWorkingHours(requestDetailProvider.activityMaintenanceHelperModel!.startTime,requestDetailProvider.activityMaintenanceHelperModel!.endTime);
|
||||
if(hours!=-1){
|
||||
_workingHoursController.text = hours.toString();
|
||||
requestDetailProvider.activityMaintenanceHelperModel!.workingHour=hours;
|
||||
}
|
||||
}
|
||||
|
||||
final ButtonStyle flatButtonStyle = TextButton.styleFrom(
|
||||
shape: const RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.all(Radius.circular(4.0)),
|
||||
),
|
||||
);
|
||||
}
|
||||
Loading…
Reference in New Issue