bug fixes for workorder detail view

design_3.0_demo_module
WaseemAbbasi22 1 year ago
parent e4dd92c4a9
commit 4954549594

@ -89,7 +89,7 @@ class WorkOrderData {
this.closedDate, this.closedDate,
this.since, this.since,
this.cmFrame, this.cmFrame,
this.lastComment, this.rejectComment,
this.callResponse, this.callResponse,
required this.workOrderHistory, required this.workOrderHistory,
required this.activities, required this.activities,
@ -143,7 +143,7 @@ class WorkOrderData {
String? iHaveArrivedDate; String? iHaveArrivedDate;
String? closedDate; String? closedDate;
Lookup? rejectReason; Lookup? rejectReason;
String? lastComment; // need to replace with reject comments. String? rejectComment; // need to replace with reject comments.
String? callResponse; // need to replace with reject comments. String? callResponse; // need to replace with reject comments.
int? since; int? since;
List<WorkOrderHistory> workOrderHistory; List<WorkOrderHistory> workOrderHistory;
@ -166,7 +166,7 @@ class WorkOrderData {
floor: json["floor"] == null ? null : Lookup.fromJson(json["floor"]), floor: json["floor"] == null ? null : Lookup.fromJson(json["floor"]),
department: json["department"] == null ? null : AssetGroup.fromJson(json["department"]), department: json["department"] == null ? null : AssetGroup.fromJson(json["department"]),
room: json["room"], room: json["room"],
lastComment: json["lastComment"], rejectComment: json["rejectComment"],
callResponse: json["callResponse"], callResponse: json["callResponse"],
iHaveArrivedDate: json["iHaveArrivedDate"], iHaveArrivedDate: json["iHaveArrivedDate"],
closedDate: json["closedDate"], closedDate: json["closedDate"],
@ -527,9 +527,9 @@ class WorkOrderContactPerson {
String? name; String? name;
String? employeeId; String? employeeId;
String? position; String? position;
String extension; String? extension;
String? email; String? email;
String mobilePhone; String ?mobilePhone;
WorkOrderAssignedEmployee? contactUser; WorkOrderAssignedEmployee? contactUser;
factory WorkOrderContactPerson.fromJson(Map<String, dynamic> json) { factory WorkOrderContactPerson.fromJson(Map<String, dynamic> json) {
@ -642,6 +642,7 @@ class ActivityMaintenance {
String? supplierStartTime; String? supplierStartTime;
String? supplierEndTime; String? supplierEndTime;
double? supplierWorkingHours; double? supplierWorkingHours;
String? activityType;
List<ActivityMaintenanceAssistantEmployees>? assistantEmployees; List<ActivityMaintenanceAssistantEmployees>? assistantEmployees;
List<ActivityMaintenanceTimers>? activityMaintenanceTimers; List<ActivityMaintenanceTimers>? activityMaintenanceTimers;
@ -661,6 +662,7 @@ class ActivityMaintenance {
this.supplierEngineer, this.supplierEngineer,
this.supplierStartTime, this.supplierStartTime,
this.supplierEndTime, this.supplierEndTime,
this.activityType,
this.supplierWorkingHours, this.supplierWorkingHours,
this.assistantEmployees}); this.assistantEmployees});
@ -670,6 +672,7 @@ class ActivityMaintenance {
startTime = json['startTime']; startTime = json['startTime'];
endTime = json['endTime']; endTime = json['endTime'];
workingHours = json['workingHours']; workingHours = json['workingHours'];
activityType = json['activityType'];
travelHours = json['travelHours']; travelHours = json['travelHours'];
lastSituation = json['lastSituation'] != null ? Lookup.fromJson(json['lastSituation']) : null; lastSituation = json['lastSituation'] != null ? Lookup.fromJson(json['lastSituation']) : null;
repairLocation = json['repairLocation'] != null ? Lookup.fromJson(json['repairLocation']) : null; repairLocation = json['repairLocation'] != null ? Lookup.fromJson(json['repairLocation']) : null;

@ -47,6 +47,7 @@ class AppColor {
static const Color white60 = Color(0xffEFEFEF); static const Color white60 = Color(0xffEFEFEF);
static const Color white70 = Color(0xffF1F1F1); static const Color white70 = Color(0xffF1F1F1);
static const Color white80 = Color(0xffF2F4FA); static const Color white80 = Color(0xffF2F4FA);
static const Color white90 = Color(0xffBFD1E4);
static const Color white936 = Color(0xff212936); static const Color white936 = Color(0xff212936);
//black //black
@ -137,6 +138,27 @@ class AppColor {
return Colors.white; return Colors.white;
} }
} }
static Color getActivityTypeBgColor(String type) {
switch (type) {
case "Internal":
return neutral50;
case "External":
return white90;
default:
return primary10;
}
}
static Color getActivityTypeTextColor(String type) {
switch (type) {
case "Internal":
return white10;
case "External":
return black10;
default:
return Colors.white;
}
}
static Color getHistoryLogStatusColorByName(String status) { static Color getHistoryLogStatusColorByName(String status) {
switch ((status).toLowerCase()) { switch ((status).toLowerCase()) {

@ -225,7 +225,8 @@ class ServiceRequestDetailProvider extends ChangeNotifier {
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body));
if (currentWorkOrder?.data?.status?.id == 3498) { //need to check on value as id changed on different env.
if (currentWorkOrder?.data?.status?.value == 3 || currentWorkOrder?.data?.status?.value == 5 || currentWorkOrder?.data?.status?.value == 6) {
isReadOnlyRequest = true; isReadOnlyRequest = true;
} else { } else {
isReadOnlyRequest = false; isReadOnlyRequest = false;

@ -60,7 +60,6 @@ class FooterActionButton {
case WorkOrderNextStepEnum.nTakeAction: case WorkOrderNextStepEnum.nTakeAction:
// const SizedBox().flushBar(context: context, title: context.translation.youMarkedThisIssueAsFixedWaitingForTheRequesterToConfirm, message: ''); // const SizedBox().flushBar(context: context, title: context.translation.youMarkedThisIssueAsFixedWaitingForTheRequesterToConfirm, message: '');
//Need to add enum for these values in future instead of static values.. //Need to add enum for these values in future instead of static values..
if (requestDetailProvider.isReadOnlyRequest) { if (requestDetailProvider.isReadOnlyRequest) {
return footerContainer( return footerContainer(
child: AppFilledButton( child: AppFilledButton(

@ -275,6 +275,8 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
//TODO will be here when fixed from backend.. //TODO will be here when fixed from backend..
Row(
children: [
StatusLabel( StatusLabel(
label: activity.activityStatus?.name, label: activity.activityStatus?.name,
textColor: AppColor.white10, textColor: AppColor.white10,
@ -282,6 +284,17 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
// backgroundColor: AppColor.getHistoryLogStatusColorByName(activity.activityStatus!.name!), // backgroundColor: AppColor.getHistoryLogStatusColorByName(activity.activityStatus!.name!),
backgroundColor: AppColor.primary10, backgroundColor: AppColor.primary10,
), ),
5.width,
StatusLabel(
label: activity.activityMaintenance?.activityType,
// textColor: AppColor.white10,
textColor: AppColor.getActivityTypeTextColor(activity.activityMaintenance?.activityType??''),
backgroundColor: AppColor.getActivityTypeBgColor(activity.activityMaintenance?.activityType??''),
// backgroundColor: AppColor.primary10,
),
],
),
// "drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160), // "drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160),
if (userProvider.user!.type == UsersTypes.engineer && requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 && requestDetailProvider.currentWorkOrder?.data?.status?.value != 3) if (userProvider.user!.type == UsersTypes.engineer && requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 && requestDetailProvider.currentWorkOrder?.data?.status?.value != 3)
Row( Row(

@ -27,6 +27,8 @@ class AssetDetailCard extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
Row(
children: [
StatusLabel( StatusLabel(
label: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.equipmentStatus?.name, label: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.equipmentStatus?.name,
id: requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.id ?? 0, id: requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.id ?? 0,
@ -34,9 +36,19 @@ class AssetDetailCard extends StatelessWidget {
textColor: AppColor.white10, textColor: AppColor.white10,
backgroundColor: AppColor.getEquipmentStatusColor(context, requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.id ?? 0), backgroundColor: AppColor.getEquipmentStatusColor(context, requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.id ?? 0),
), ),
//hide if status is closed. 5.width,
if(!requestDetailProvider.isReadOnlyRequest) StatusLabel(
"edit_icon".toSvgAsset(height: 21, width: 21).onPress(() async{ label: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.serviceType?.name,
id: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.serviceType?.id ?? 0,
radius: 4,
textColor: AppColor.getActivityTypeTextColor(requestDetailProvider.engineerUpdateWorkOrderHelperModel!.serviceType?.name ?? ''),
backgroundColor: AppColor.getActivityTypeBgColor(requestDetailProvider.engineerUpdateWorkOrderHelperModel!.serviceType?.name ?? ''),
),
],
),
//hide if status is closed or complete .
if (!requestDetailProvider.isReadOnlyRequest)
"edit_icon".toSvgAsset(height: 21, width: 21).onPress(() async {
requestDetailProvider.refreshTimer = false; requestDetailProvider.refreshTimer = false;
await Navigator.push( await Navigator.push(
context, context,

@ -34,12 +34,13 @@ class ServiceRequestDetailView extends StatefulWidget {
} }
class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> { class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
List<AttachmentModel> _workOrderAttachments = []; List<File> _workOrderAttachments = [];
@override @override
void initState() { void initState() {
ServiceRequestDetailProvider requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false); ServiceRequestDetailProvider requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false);
_workOrderAttachments = requestDetailProvider.currentWorkOrder?.data?.workOrderAttachments.map((e) => AttachmentModel(e.id??0, File(e.name ?? ''))).toList() ?? []; _workOrderAttachments = requestDetailProvider.currentWorkOrder?.data?.workOrderAttachments.map((e) => File(e.name ?? '')).toList() ?? [];
// _workOrderAttachments = requestDetailProvider.currentWorkOrder?.data?.workOrderAttachments.map((e) => AttachmentModel(e.id??0, File(e.name ?? ''))).toList() ?? [];
super.initState(); super.initState();
} }
@ -79,9 +80,10 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
context: context), context: context),
], ],
), ),
if (requestProvider.timer != null && requestProvider.timer!.isActive) ...[ //no need to show timer as discussed with backend
const TimerWidget(), // if (requestProvider.timer != null && requestProvider.timer!.isActive) ...[
] // const TimerWidget(),
// ]
], ],
); );
}); });
@ -255,10 +257,10 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
'${context.translation.callResponse}: ${workOrder.callResponse ?? "-"}', '${context.translation.callResponse}: ${workOrder.callResponse ?? "-"}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
), ),
Text( // Text(
'${context.translation.since}: ${workOrder.since != null ? '${workOrder.since} days' : '-'}', // '${context.translation.since}: ${workOrder.since != null ? '${workOrder.since} days' : '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), // style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
), // ),
8.height, 8.height,
if (workOrder.rejectReason != null) ...[ if (workOrder.rejectReason != null) ...[
@ -275,7 +277,7 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
), ),
8.height, 8.height,
Text( Text(
'${context.translation.comment}: ${workOrder.lastComment ?? '-'}', '${context.translation.comment}: ${workOrder.rejectComment ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
), ),
], ],
@ -296,17 +298,17 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
8.height, 8.height,
const Divider().defaultStyle(context), const Divider().defaultStyle(context),
AttachmentPicker( MultiFilesPicker(
label: context.translation.attachments, label: context.translation.attachments,
// files: _workOrderAttachments, files: _workOrderAttachments,
attachment: _workOrderAttachments, // attachment: _workOrderAttachments,
buttonColor: AppColor.primary10, buttonColor: AppColor.primary10,
onlyImages: false, onlyImages: false,
buttonIcon: 'quotation_icon'.toSvgAsset(color: AppColor.primary10), buttonIcon: 'quotation_icon'.toSvgAsset(color: AppColor.primary10),
onChange: (attachment) { onChange: (attachment) {
print('i am called.'); print('i am called.');
// print('attachment value is ${attachment.last.file?.path}'); // print('attachment value is ${attachment.last.file?.path}');
// requestProvider.addWorkOrderAttachment(woId: workOrder.requestId!, attachments: _workOrderAttachments); requestProvider.addWorkOrderAttachment(woId: workOrder.requestId!, attachments: _workOrderAttachments);
}, },
), ),
@ -401,27 +403,27 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
'${workOrder.workOrderContactPerson[index].name}', '${workOrder.workOrderContactPerson[index].name??'-'}',
style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
), ),
Text( Text(
'${context.translation.employeeId}: ${workOrder.workOrderContactPerson[index].employeeId}', '${context.translation.employeeId}: ${workOrder.workOrderContactPerson[index].employeeId??'-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
), ),
Text( Text(
'${context.translation.telephone}: ${workOrder.workOrderContactPerson[index].mobilePhone}', '${context.translation.telephone}: ${workOrder.workOrderContactPerson[index].mobilePhone??'-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
), ),
Text( Text(
'Job: ${workOrder.workOrderContactPerson[index].position}', 'Job: ${workOrder.workOrderContactPerson[index].position??'-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
), ),
Text( Text(
'${context.translation.email}: ${workOrder.workOrderContactPerson[index].email}', '${context.translation.email}: ${workOrder.workOrderContactPerson[index].email??'-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
), ),
Text( Text(
'Extension: ${workOrder.workOrderContactPerson[index].extension}', 'Extension: ${workOrder.workOrderContactPerson[index].extension??'-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
), ),
], ],

@ -51,7 +51,9 @@ class _MaintenanceRequestFormState extends State<MaintenanceRequestForm> with Si
backgroundColor: AppColor.neutral110, backgroundColor: AppColor.neutral110,
appBar: DefaultAppBar( appBar: DefaultAppBar(
title: "CM Activity", title: "CM Activity",
onWillPopScope: () { onWillPopScope: requestDetailProvider.isReadOnlyRequest
? null
: () {
save(requestDetailProvider); save(requestDetailProvider);
}, },
), ),
@ -97,6 +99,7 @@ class _MaintenanceRequestFormState extends State<MaintenanceRequestForm> with Si
], ],
), ),
), ),
if (!requestDetailProvider.isReadOnlyRequest)
FooterActionButton.footerContainer( FooterActionButton.footerContainer(
child: AppFilledButton( child: AppFilledButton(
label: requestDetailProvider.activityMaintenanceHelperModel?.id != 0 ? context.translation.update : context.translation.addActivity, // Use the dynamic label label: requestDetailProvider.activityMaintenanceHelperModel?.id != 0 ? context.translation.update : context.translation.addActivity, // Use the dynamic label
@ -109,7 +112,7 @@ class _MaintenanceRequestFormState extends State<MaintenanceRequestForm> with Si
], ],
), ),
).handlePopScope(context, () { ).handlePopScope(context, () {
save(requestDetailProvider); requestDetailProvider.isReadOnlyRequest ? null : save(requestDetailProvider);
}); });
}); });
} }

Loading…
Cancel
Save