verify asset detail form changes

design_3.0_latest
WaseemAbbasi22 5 days ago
parent da664e957b
commit 4be1bd2e8a

@ -23,7 +23,7 @@ class RequestCategoryFragment extends StatelessWidget {
getTabs(
requestsProvider: dashboardProvider,
context: context,
userType: Provider.of<UserProvider>(context, listen: false).user!.type!,
userType: Provider.of<UserProvider>(context, listen: false).user?.type!,
),
dashboardProvider.isDetailLoading || dashboardProvider.requestDetailList == null
? Column(
@ -41,8 +41,8 @@ class RequestCategoryFragment extends StatelessWidget {
});
}
Widget getTabs({required BuildContext context, required DashBoardProvider requestsProvider, required UsersTypes userType}) {
List<CategoryTabs> tabs = CategoryTabs.getTabs(userType: userType, context: context);
Widget getTabs({required BuildContext context, required DashBoardProvider requestsProvider, required UsersTypes? userType}) {
List<CategoryTabs> tabs = CategoryTabs.getTabs(userType: userType??UsersTypes.normal_user, context: context);
return SizedBox(
height: 44 + 16,
child: ListView.separated(
@ -58,7 +58,7 @@ class RequestCategoryFragment extends StatelessWidget {
onPressed: () async {
requestsProvider.currentListIndex = index;
requestsProvider.resetRequestDataList();
requestsProvider.getRequestDetail(usersType: userType, showLoader: true, status: tabs[index].tag);
requestsProvider.getRequestDetail(usersType: userType??UsersTypes.normal_user, showLoader: true, status: tabs[index].tag);
},
);
},

@ -494,5 +494,6 @@
"lastPmDate" : "موعد الزيارة الوقائية الأخيرة",
"assetScan" : "مسح الجهاز",
"pickManually" : "اختر يدويا",
"searchAsset" : "ابحث عن جهاز"
"searchAsset" : "ابحث عن جهاز",
"callResponse": "استجابة الاتصال"
}

@ -351,6 +351,7 @@
"priority" : "Request Priority",
"equipmentStatus" : "Equipment Status",
"requestSparePart": "Request Spare Part",
"callResponse": "Call Response",
"selectAction": "Select Action",
"requestSparePartForYourAsset": "Request spare part for your asset",
"addNewActivity": "Add New Activity",

@ -73,8 +73,9 @@ class ActivityMaintenanceHelperModel {
data['supplierStartTime'] = supplierStartTime?.toIso8601String();
data['supplierEndTime'] = supplierEndTime?.toIso8601String();
data['supplierWorkingHour'] = supplierWorkingHour;
if(lastSituation!=null){
data['lastSituationId'] = lastSituation?.id;
//TODO remove this when backend fix this on their side..
if(activityStatus!=null){
data['lastSituationId'] = activityStatus?.id;
}
if (assistantEmployees != null&&assistantEmployees!.isNotEmpty) {
data['assistantEmployees'] = [modelAssistantEmployees?.toJson()];

@ -89,13 +89,11 @@ class EngineerUpdateWorkOrderHelperModel {
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['workOrderId'] = workOrderId;
data['equipmentStatusId'] = equipmentStatus?.id;
data['returnToService'] = returnToService;
//TODO Bhaa need to confirm about this for testing use internal id 65
data['serviceTypeId'] = serviceType?.id;
data['serviceTypeId'] = 65;
data['loanAvailabilityId'] = loanAvailability?.id;
data['loanAssetId'] = loanAssetId;
data['failureReasonId'] = failureReason?.id;

@ -102,7 +102,7 @@ class WorkOrderData {
int? room;
Lookup? assetType;
WorkOrderAssignedEmployee? assignedEmployee;
String? lastActivityStatus;
Lookup? lastActivityStatus;
Lookup? status;
Lookup? nextStep;
int? assetVerificationType;
@ -112,7 +112,7 @@ class WorkOrderData {
Lookup? requestedThrough;
Lookup? typeofRequest;
Lookup? loanAvailablity;
Lookup? assetLoan;
AssetLoan? assetLoan;
Lookup? safety;
Lookup? problemDescription;
String? comments;
@ -147,7 +147,7 @@ class WorkOrderData {
room: json["room"],
assetType: json["assetType"] == null ? null : Lookup.fromJson(json["assetType"]),
assignedEmployee: json["assignedEmployee"] == null ? null : WorkOrderAssignedEmployee.fromJson(json["assignedEmployee"]),
lastActivityStatus: json["lastActivityStatus"],
lastActivityStatus: json["lastActivityStatus"]!=null?Lookup.fromJson(json["lastActivityStatus"]):null,
status: json["status"] == null ? null : Lookup.fromJson(json["status"]),
nextStep: json["nextStep"] == null ? null : Lookup.fromJson(json["nextStep"]),
assetVerificationType: json["assetVerificationType"],
@ -157,7 +157,7 @@ class WorkOrderData {
requestedThrough: json["requestedThrough"] == null ? null : Lookup.fromJson(json["requestedThrough"]),
typeofRequest: json["typeofRequest"] == null ? null : Lookup.fromJson(json["typeofRequest"]),
loanAvailablity: json["loanAvailablity"] == null ? null : Lookup.fromJson(json["loanAvailablity"]),
assetLoan: json["assetLoan"] == null ? null : Lookup.fromJson(json["assetLoan"]),
assetLoan: json["assetLoan"] == null ? null : AssetLoan.fromJson(json["assetLoan"]),
safety: json["safety"] == null ? null : Lookup.fromJson(json["safety"]),
problemDescription: json["problemDescription"] == null ? null : Lookup.fromJson(json["problemDescription"]),
comments: json["comments"],
@ -219,44 +219,6 @@ class WorkOrderData {
"activities": activities.map((x) => x.toJson()).toList(),
"activityAssetToBeRetireds": activityAssetToBeRetireds.map((x) => x).toList(),
};
Map<String, dynamic> toFixRemotelyJson() {
return {
'workOrderId': workOrderNo,
'startDate': workOrderHistory.isNotEmpty ? workOrderHistory[0].fixRemotlyStartTime : '',
'endDate': workOrderHistory.isNotEmpty ? workOrderHistory[0].fixRemotlyEndTime : '',
'workingHour': '',
'comment': comments
};
}
//TODO feedback not defined...
Map<String, dynamic> toMarkAsFixedJson() {
return {'workOrderId': workOrderNo, 'feedback': comments};
}
Map<String, dynamic> toNeedVisitJson() {
return {'workOrderId': workOrderNo, 'visitDate': workOrderHistory.isNotEmpty ? workOrderHistory[0].needAVisitDateTime : '', 'comment': comments};
}
//TODO signatureNurse not defined...
Map<String, dynamic> toNurseActionJson() {
return {'workOrderId': workOrderNo, 'feedback': '', 'signatureNurse': 'signatureNurse'};
}
Map<String, dynamic> toWorkOrderJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['workOrderId'] = requestId;
data['equipmentStatusId'] = equipmentStatus?.id;
data['returnToService'] = returnToService;
data['serviceTypeId'] = serviceType?.id;
data['loanAvailabilityId'] = loanAvailablity?.id;
data['loanAssetId'] = assetLoan?.id;
data['failureReasonId'] = failureReasone?.id;
data['faultDescriptionId'] = problemDescription?.id;
data['solution'] = solution;
return data;
}
}
class WorkOrderAsset {
@ -333,6 +295,46 @@ class WorkOrderAssignedEmployee {
};
}
class AssetLoan {
int? id;
String? assetSerialNo;
String? assetNumber;
dynamic tagCode;
dynamic systemId;
dynamic assetName;
AssetLoan({
this.id,
this.assetSerialNo,
this.assetNumber,
this.tagCode,
this.systemId,
this.assetName,
});
factory AssetLoan.fromJson(Map<String, dynamic> json) {
return AssetLoan(
id: json['id'],
assetSerialNo: json['assetSerialNo'],
assetNumber: json['assetNumber'],
tagCode: json['tagCode'],
systemId: json['systemId'],
assetName: json['assetName'],
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'assetSerialNo': assetSerialNo,
'assetNumber': assetNumber,
'tagCode': tagCode,
'systemId': systemId,
'assetName': assetName,
};
}
}
class Activities {
int? id;
int? orderNo;
@ -440,7 +442,7 @@ class PartCatalogItem {
String? partNumber;
String? oracleCode;
PartCatalogItem({this.id, this.partName, this.partNumber,this.oracleCode});
PartCatalogItem({this.id, this.partName, this.partNumber, this.oracleCode});
PartCatalogItem.fromJson(Map<String, dynamic> json) {
id = json['id'];
@ -632,6 +634,7 @@ class ActivityMaintenance {
repairLocation = json['repairLocation'] != null ? Lookup.fromJson(json['repairLocation']) : null;
assignedEmployee = json['assignedEmployee'] != null ? AssignedEmployee.fromJson(json['assignedEmployee']) : null;
technicalComment = json['technicalComment'];
//json["supplier"] == null ? null : Lookup.fromJson(json["supplier"]),
supplier = json["supplier"] == null ? null : Lookup.fromJson(json["supplier"]);
supplierEngineer = json["supplierEngineer"] == null ? null : Lookup.fromJson(json["supplierEngineer"]);

@ -138,7 +138,7 @@ class FooterActionButton {
// maxWidth: true,
buttonColor: AppColor.primary10,
onPressed: () async {
Navigator.push(context, MaterialPageRoute(builder: (context) => const VerifyAssetDetails()));
Navigator.push(context, MaterialPageRoute(builder: (context) => VerifyAssetDetails(isEdit: false,)));
},
));
case WorkOrderNextStepEnum.activity:

@ -253,6 +253,7 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
//TODO will be here when fixed from backend..
StatusLabel(
label: activity.activityStatus?.name,
textColor: AppColor.getHistoryLogStatusTextColorByName(activity.activityStatus!.name!),
@ -290,41 +291,33 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
),
3.height,
Text(
'${context.translation.callLastSituation}: ${activity.activityMaintenance?.lastSituation?.name}',
'${context.translation.workingHours}: ${activity.activityMaintenance?.workingHours??'-'}',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
),
2.height,
Text(
'${context.translation.partNo}: ${activity.activitySparePart?.partCatalogItem?.partNumber}',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
),
if(activity.activityMaintenance?.assignedEmployee!=null&&activity.activityMaintenance!.assistantEmployees!.isNotEmpty)...[
Text(
'${context.translation.assistantEmployee}: ${activity.activityMaintenance?.assistantEmployees?.first.user?.userName}',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
),
]else...[
Text(
'${context.translation.assignedEmployee}: ${activity.activityMaintenance?.assignedEmployee?.userName}',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
),
],
2.height,
//TODO description text not in api.
// Text(
// '${context.translation.date}: ${activity.currentSituation?.date}',
// style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
// ),
if (activity.activitySparePart?.comment?.isNotEmpty ?? false) ...[
if (activity.activityMaintenance?.technicalComment?.isNotEmpty ?? false) ...[
const Divider().defaultStyle(context),
2.height,
Text(
activity.activitySparePart?.comment ?? "",
activity.activityMaintenance?.technicalComment ?? "",
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
),
],
if (activity.activitySparePart?.acitiySparePartAttachments?.isNotEmpty ?? false) ...[
2.height,
const Divider().defaultStyle(context),
FilesList(images: activity.activitySparePart!.acitiySparePartAttachments!.map((toElement) => URLs.getFileUrl(toElement.name!)!).toList()),
],
],
).toShadowContainer(context, padding: 12, showShadow: false).onPress(() {
//TODO write onview detail method..
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: activity, serviceRequest: ServiceRequest())),
// );
});
).toShadowContainer(context, padding: 12, showShadow: false);
}
void onEditMaintenanceRequestPress({required BuildContext context, required RequestDetailProvider requestDetailProvider, required Activities activity}) async {
@ -347,11 +340,11 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId,
startTime: activity.activityMaintenance?.startTime != null ? DateTime.parse(activity.activityMaintenance!.startTime!) : null,
endTime: activity.activityMaintenance?.endTime != null ? DateTime.parse(activity.activityMaintenance!.endTime!) : null,
activityStatus: activity.activityStatus,
activityStatus: activity.activityMaintenance?.lastSituation,
workingHour: activity.activityMaintenance?.workingHours ?? 0,
travelHours: activity.activityMaintenance?.travelHours ?? 0,
repairLocation: activity.activityMaintenance?.repairLocation,
lastSituation: activity.activityMaintenance?.lastSituation,
// lastSituation: activity.activityMaintenance?.lastSituation,
assignedEmployee: activity.activityMaintenance?.assignedEmployee != null ? WorkOrderAssignedEmployee.fromJson(activity.activityMaintenance!.assignedEmployee!.toJson()) : null,
technicalComment: activity.activityMaintenance?.technicalComment,
assistantEmployees:

@ -37,27 +37,41 @@ class AssetDetailCard extends StatelessWidget {
backgroundColor: AppColor.getEquipmentStatusColor(context, requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.id ?? 0),
),
"edit_icon".toSvgAsset(height: 21, width: 21).onPress(() {
Navigator.push(context, MaterialPageRoute(builder: (context) => const VerifyAssetDetails()));
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => VerifyAssetDetails(
isEdit: true,
)));
}),
]),
6.height,
context.translation.assetSituation.heading6(context).custom(color: AppColor.black20),
6.height,
Text(
'${context.translation.returnToService}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService?.toAssetDetailsFormat}',
'${context.translation.returnToService}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService?.toAssetDetailsFormat ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
6.height,
Text(
'${context.translation.loanAvailability}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability?.name}',
'${context.translation.loanAvailability}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability?.name ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
6.height,
Text(
'${context.translation.failureReason}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.failureReason?.name}',
'${context.translation.failureReason}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.failureReason?.name ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
6.height,
Text(
'${context.translation.faultDescription}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription?.name ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
6.height,
Text(
'${context.translation.solutions}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
],
),
);

@ -176,10 +176,10 @@ class WorkOrderDetailView extends StatelessWidget {
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
8.height,
Text(
'${context.translation.requestType}: ${workOrder.typeofRequest?.name}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
// Text(
// '${context.translation.requestType}: ${workOrder.typeofRequest?.name}',
// style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
// ),
Text(
'${context.translation.requestNo}: ${workOrder.workOrderNo}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
@ -197,6 +197,32 @@ class WorkOrderDetailView extends StatelessWidget {
'${context.translation.cmNumber}: ${workOrder.workOrderNo}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral120),
),
const Divider().defaultStyle(context),
//... call response details starts here....
Text(
context.translation.callResponse,
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
8.height,
Text(
'${context.translation.serviceType}: ${workOrder.serviceType?.name ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.assignedEmployee}: ${workOrder.assignedEmployee?.userName ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.assetStatus}: ${workOrder.equipmentStatus?.name ?? "-"}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
//TODO need to confirm from backend..
Text(
'${context.translation.activityStatus}: ${workOrder.lastActivityStatus?.name ?? "-"}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
8.height,
if ((workOrder.comments ?? "").isNotEmpty) ...[
@ -326,22 +352,20 @@ class WorkOrderDetailView extends StatelessWidget {
Widget assetDetailCard({required RequestDetailProvider requestDetailProvider, required UserProvider userProvider}) {
//TODO add proper check to hide and show that widget
if (userProvider.user?.type == UsersTypes.engineer &&
requestDetailProvider.currentWorkOrder?.data?.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.activity) {
WorkOrderData currentWorkOrderData = requestDetailProvider.currentWorkOrder!.data!;
requestDetailProvider.engineerUpdateWorkOrderHelperModel = EngineerUpdateWorkOrderHelperModel(
workOrderId: currentWorkOrderData.requestId,
equipmentStatus: currentWorkOrderData.equipmentStatus,
loanAvailability: currentWorkOrderData.loanAvailablity,
failureReason: currentWorkOrderData.failureReasone,
// faultDescription: currentWorkOrderData.fa,
solution: currentWorkOrderData.solution?.name,
returnToService: currentWorkOrderData.returnToService,
serviceType: currentWorkOrderData.serviceType,
);
return const AssetDetailCard();
}
else {
if (userProvider.user?.type == UsersTypes.engineer && requestDetailProvider.currentWorkOrder?.data?.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.activity) {
WorkOrderData currentWorkOrderData = requestDetailProvider.currentWorkOrder!.data!;
requestDetailProvider.engineerUpdateWorkOrderHelperModel = EngineerUpdateWorkOrderHelperModel(
workOrderId: currentWorkOrderData.requestId,
equipmentStatus: currentWorkOrderData.equipmentStatus,
loanAvailability: currentWorkOrderData.loanAvailablity,
failureReason: currentWorkOrderData.failureReasone,
// faultDescription: currentWorkOrderData.fa,
solution: currentWorkOrderData.solution?.name,
returnToService: currentWorkOrderData.returnToService,
serviceType: currentWorkOrderData.serviceType,
);
return const AssetDetailCard();
} else {
return const SizedBox();
}
}

@ -1,6 +1,7 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_fault_description_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
@ -31,8 +32,9 @@ import '../../../../../../new_views/common_widgets/default_app_bar.dart';
//TODO Have some details need to confirm from backend fault description,
class VerifyAssetDetails extends StatefulWidget {
static const String id = "/verify-asset-detail";
bool isEdit = false;
const VerifyAssetDetails({Key? key}) : super(key: key);
VerifyAssetDetails({Key? key, required this.isEdit}) : super(key: key);
@override
_VerifyAssetDetailsState createState() => _VerifyAssetDetailsState();
@ -41,13 +43,10 @@ class VerifyAssetDetails extends StatefulWidget {
class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProviderStateMixin {
RequestDetailProvider? _requestDetailProvider;
LoanAvailabilityProvider? _loanAvailabilityProvider;
ServiceRequestFaultDescriptionProvider? _faultDescriptionProvider;
EquipmentStatusProvider? _equipmentStatusProvider;
ReasonProvider? _reasonProvider;
bool _isLoading = false;
Asset? loanAvailabilityAsset;
List<FaultDescription> _faults = [];
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@override
@ -73,11 +72,22 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
equipmentStatus: currentWorkOrderData.equipmentStatus,
loanAvailability: currentWorkOrderData.loanAvailablity,
failureReason: currentWorkOrderData.failureReasone,
// faultDescription: currentWorkOrderData.fa,
faultDescription: FaultDescription(),
loanAssetId: currentWorkOrderData.assetLoan?.id,
solution: currentWorkOrderData.solution?.name,
returnToService: currentWorkOrderData.returnToService,
serviceType: currentWorkOrderData.serviceType,
);
if (currentWorkOrderData.assetLoan != null) {
loanAvailabilityAsset = Asset(
id: currentWorkOrderData.assetLoan?.id,
assetNumber: currentWorkOrderData.assetLoan?.assetNumber,
assetSerialNo: currentWorkOrderData.assetLoan?.assetSerialNo,
systemID: currentWorkOrderData.assetLoan?.systemId,
tagCode: currentWorkOrderData.assetLoan?.tagCode,
);
setState(() {});
}
getFaultDescription(assetId: requestDetailProvider.currentWorkOrder?.data?.asset?.id);
}
@ -89,7 +99,6 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
_reasonProvider!.reset();
_loanAvailabilityProvider = Provider.of<LoanAvailabilityProvider>(context, listen: false);
_loanAvailabilityProvider!.reset();
_faultDescriptionProvider = Provider.of<ServiceRequestFaultDescriptionProvider>(context, listen: false);
_equipmentStatusProvider = Provider.of<EquipmentStatusProvider>(context, listen: false);
_equipmentStatusProvider!.reset();
WidgetsBinding.instance.addPostFrameCallback((_) {
@ -102,122 +111,121 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
key: _scaffoldKey,
appBar: DefaultAppBar(title: context.translation.verify_asset_details),
body: Consumer<RequestDetailProvider>(builder: (context, RequestDetailProvider requestDetailProvider, child) {
print('description model i got is ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription?.toJson()}');
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
equipmentStatusWidget(context: context, workOrderData: requestDetailProvider.engineerUpdateWorkOrderHelperModel!),
12.height,
ADatePicker(
label: context.translation.returnToService,
hideShadow: true,
backgroundColor: AppColor.neutral100,
date: DateTime.tryParse(requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService ?? ""),
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.engineerUpdateWorkOrderHelperModel?.returnToService != null &&
selectedDateTime.isBefore(DateTime.parse(requestDetailProvider.engineerUpdateWorkOrderHelperModel!.returnToService!))) {
"Visit Date time must be greater then previous date".showToast;
return;
if (widget.isEdit) ...[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
assetStatusWidget(context: context, workOrderData: requestDetailProvider.engineerUpdateWorkOrderHelperModel!),
12.height,
ADatePicker(
label: context.translation.returnToService,
hideShadow: true,
backgroundColor: AppColor.neutral100,
date: DateTime.tryParse(requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService ?? ""),
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.engineerUpdateWorkOrderHelperModel?.returnToService != null &&
// selectedDateTime.isBefore(DateTime.parse(requestDetailProvider.engineerUpdateWorkOrderHelperModel!.returnToService!))) {
// "Return To Service Date time must be greater then previous date".showToast;
// return;
// }
setState(() {
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService = selectedDateTime.toIso8601String();
});
}
});
},
),
12.height,
SingleItemDropDownMenu<Lookup, LoanAvailabilityProvider>(
context: context,
title: context.translation.loanAvailability,
backgroundColor: AppColor.neutral100,
height: 56.toScreenHeight,
showShadow: false,
initialValue: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability,
onSelect: (status) {
if (status != null) {
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability = status;
if (status.value != 1) {
loanAvailabilityAsset = null;
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAssetId = null;
}
setState(() {});
}
},
),
if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability?.value == 1) 8.height,
if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability?.value == 1)
PickAsset(
device: loanAvailabilityAsset, // ?? _serviceReport.device,
cardColor: AppColor.neutral100,
onPickAsset: (asset) {
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAssetId = asset.id;
setState(() {
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService = selectedDateTime.toIso8601String();
loanAvailabilityAsset = asset;
});
},
),
12.height,
SingleItemDropDownMenu<Lookup, ReasonProvider>(
context: context,
title: context.translation.failureReason,
backgroundColor: AppColor.neutral100,
height: 56.toScreenHeight,
showShadow: false,
initialValue: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.failureReason,
onSelect: (value) {
if (value != null) {
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.failureReason = value;
}
});
},
),
12.height,
SingleItemDropDownMenu<Lookup, LoanAvailabilityProvider>(
context: context,
title: context.translation.loanAvailability,
backgroundColor: AppColor.neutral100,
height: 56.toScreenHeight,
showShadow: false,
initialValue: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability,
onSelect: (status) {
if (status != null) {
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability = status;
if (status.value != 1) {
loanAvailabilityAsset = null;
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAssetId = null;
}
}
// setState(() {});
},
),
if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability?.value == 1) 8.height,
if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability?.value == 1)
PickAsset(
device: loanAvailabilityAsset, // ?? _serviceReport.device,
cardColor: AppColor.neutral100,
onPickAsset: (asset) {
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAssetId = asset.id;
//setState(() {
loanAvailabilityAsset = asset;
// });
},
),
12.height,
SingleItemDropDownMenu<Lookup, ReasonProvider>(
context: context,
title: context.translation.failureReason,
backgroundColor: AppColor.neutral100,
height: 56.toScreenHeight,
showShadow: false,
initialValue: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.failureReason,
onSelect: (value) {
if (value != null) {
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.failureReason = value;
}
},
),
12.height,
SingleItemDropDownMenu<FaultDescription, NullableLoadingProvider>(
context: context,
title: context.translation.faultDescription,
backgroundColor: AppColor.neutral100,
staticData: _faults,
showShadow: false,
initialValue: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription,
onSelect: (fault) {
if (fault != null) {
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription = fault;
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution = fault.workPerformed;
if (mounted) {
print('model updated...');
requestDetailProvider.updateEngineerUpdateWorkOrderHelperModel(requestDetailProvider.engineerUpdateWorkOrderHelperModel);
12.height,
SingleItemDropDownMenu<FaultDescription, NullableLoadingProvider>(
context: context,
title: context.translation.faultDescription,
backgroundColor: AppColor.neutral100,
staticData: _faults,
showShadow: false,
initialValue: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription,
onSelect: (fault) {
if (fault != null) {
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription = fault;
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution = fault.workPerformed;
setState(() {});
}
print('description i got is ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription?.toJson()}');
}
},
),
12.height,
context.translation.solutions.heading6(context).custom(color: AppColor.neutral50),
8.height,
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution != null
? requestDetailProvider.engineerUpdateWorkOrderHelperModel!.solution!.bodyText2(context).custom(color: AppColor.neutral120)
: const SizedBox(),
],
).toShadowContainer(context).paddingAll(16),
},
),
12.height,
context.translation.solutions.heading6(context).custom(color: AppColor.neutral50),
8.height,
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution != null
? requestDetailProvider.engineerUpdateWorkOrderHelperModel!.solution!.bodyText2(context).custom(color: AppColor.neutral120)
: const SizedBox(),
],
).toShadowContainer(context).paddingAll(16),
] else ...[
assetStatusWidget(context: context, workOrderData: requestDetailProvider.engineerUpdateWorkOrderHelperModel!).toShadowContainer(context).paddingAll(16),
],
Container(
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 16.toScreenHeight),
color: AppColor.white10,
@ -225,12 +233,12 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
label: context.translation.verify_asset_details,
buttonColor: AppColor.primary10,
onPressed: () async {
print('description model i got is ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription?.toJson()}');
print('update model i got is ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.toJson()}');
// showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
// await requestDetailProvider.engineerUpdateWorkOrder();
// Navigator.pop(context);
// Navigator.pop(context);
if (validateForm(requestDetailProvider: requestDetailProvider)) {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
await requestDetailProvider.engineerUpdateWorkOrder();
Navigator.pop(context);
Navigator.pop(context);
}
},
),
),
@ -240,13 +248,29 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
);
}
Widget equipmentStatusWidget({required BuildContext context, required EngineerUpdateWorkOrderHelperModel workOrderData}) {
bool validateForm({required RequestDetailProvider requestDetailProvider}) {
bool isValid = true;
if (!widget.isEdit) {
return true;
}
if (requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus != null) {
if (requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.value == 1 || requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.value == 2) {
if (requestDetailProvider.engineerUpdateWorkOrderHelperModel!.returnToService == null) {
Fluttertoast.showToast(msg: "Return to service is required ", toastLength: Toast.LENGTH_LONG);
return false;
}
}
}
return isValid;
}
Widget assetStatusWidget({required BuildContext context, required EngineerUpdateWorkOrderHelperModel workOrderData}) {
return Consumer<EquipmentStatusProvider>(builder: (cxt, snapshot, _) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
context.translation.equipmentStatus.bodyText(context).custom(color: AppColor.black20),
context.translation.assetStatus.bodyText(context).custom(color: AppColor.black20),
8.height,
Wrap(
runSpacing: 8,

@ -88,30 +88,30 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
SingleItemDropDownMenu<Lookup, ActivityStatusProvider>(
context: context,
height: 56.toScreenHeight,
title: context.translation.activityStatus,
showShadow: false,
backgroundColor: AppColor.neutral100,
initialValue: requestDetailProvider.activityMaintenanceHelperModel?.activityStatus,
onSelect: (status) {
print('status i got is ${status?.toJson()}');
requestDetailProvider.activityMaintenanceHelperModel?.activityStatus = status;
},
),
8.height,
// SingleItemDropDownMenu<Lookup, ActivityStatusProvider>(
// context: context,
// height: 56.toScreenHeight,
// title: context.translation.activityStatus,
// showShadow: false,
// backgroundColor: AppColor.neutral100,
// initialValue: requestDetailProvider.activityMaintenanceHelperModel?.activityStatus,
// onSelect: (status) {
// print('status i got is ${status?.toJson()}');
// requestDetailProvider.activityMaintenanceHelperModel?.activityStatus = status;
// },
// ),
// 8.height,
SingleItemDropDownMenu<Lookup, LastSituationProvider>(
context: context,
height: 56.toScreenHeight,
title: context.translation.lastSituationStatus,
title: context.translation.activityStatus,
showShadow: false,
backgroundColor: AppColor.neutral100,
showAsBottomSheet: true,
initialValue: requestDetailProvider.activityMaintenanceHelperModel?.lastSituation,
initialValue: requestDetailProvider.activityMaintenanceHelperModel?.activityStatus,
onSelect: (status) {
if (status != null) {
requestDetailProvider.activityMaintenanceHelperModel?.lastSituation = status;
requestDetailProvider.activityMaintenanceHelperModel?.activityStatus = status;
setState(() {});
}
},

@ -103,18 +103,16 @@ class _MaintenanceRequestFormState extends State<MaintenanceRequestForm> with Si
print('model is ${requestDetailProvider.activityMaintenanceHelperModel?.toJson()}');
if (validate(model: requestDetailProvider.activityMaintenanceHelperModel!)) {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
int status = -1;
if (requestDetailProvider.activityMaintenanceHelperModel?.id == 0) {
status = await requestDetailProvider.createActivityMaintenanceRequest();
print('status i got is $status');
} else {
print('going to update..');
status = await requestDetailProvider.updateActivityMaintenance();
}
if (status == 200) {
requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!);
print('workorder activities list i got is ${requestDetailProvider.currentWorkOrder?.data?.activities.length}');
Navigator.pop(context);
Navigator.pop(context);
} else {

@ -123,18 +123,18 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
context.translation.sparePartDetails.heading5(context),
12.height,
SingleItemDropDownMenu<Lookup, ActivityStatusProvider>(
context: context,
height: 56.toScreenHeight,
title: context.translation.activityStatus,
showShadow: false,
backgroundColor: AppColor.neutral100,
initialValue: requestDetailProvider.sparePartHelperModel?.activityStatus,
onSelect: (status) {
requestDetailProvider.sparePartHelperModel?.activityStatus = status;
},
),
// 12.height,
// SingleItemDropDownMenu<Lookup, ActivityStatusProvider>(
// context: context,
// height: 56.toScreenHeight,
// title: context.translation.activityStatus,
// showShadow: false,
// backgroundColor: AppColor.neutral100,
// initialValue: requestDetailProvider.sparePartHelperModel?.activityStatus,
// onSelect: (status) {
// requestDetailProvider.sparePartHelperModel?.activityStatus = status;
// },
// ),
12.height,
SingleItemDropDownMenu<SparePart, NullableLoadingProvider>(
context: context,

Loading…
Cancel
Save