Merge remote-tracking branch 'origin/design_3.0_sdk_upgrade' into design_3.0_sdk_upgrade

# Conflicts:
#	lib/service_request_latest/views/components/action_button/footer_action_button.dart
#	lib/service_request_latest/views/forms/asset_retired/verify_asset_detail.dart
design_3.0_latest
muhammad.abbasi 1 year ago
commit 0d2e8d63b7

@ -44,6 +44,7 @@ class URLs {
static get engineerNeedVisitUrl=> '$_baseUrl/ServiceRequest/EngineerNeedVisit'; static get engineerNeedVisitUrl=> '$_baseUrl/ServiceRequest/EngineerNeedVisit';
static get engineerUpdateNeedVisitUrl=> '$_baseUrl/ServiceRequest/EngineerUpdateNeedVisit'; static get engineerUpdateNeedVisitUrl=> '$_baseUrl/ServiceRequest/EngineerUpdateNeedVisit';
static get engineerMarkAsFixUrl=> '$_baseUrl/ServiceRequest/EngineerMarkAsFix'; static get engineerMarkAsFixUrl=> '$_baseUrl/ServiceRequest/EngineerMarkAsFix';
static get reOrderActivity=> '$_baseUrl/ServiceRequest/ReOrderActivity';
static get engineerConfirmArriveUrl=> '$_baseUrl/ServiceRequest/EngineerConfirmArrive'; static get engineerConfirmArriveUrl=> '$_baseUrl/ServiceRequest/EngineerConfirmArrive';
static get engineerUpdateWorkOrderUrl=> '$_baseUrl/ServiceRequest/EngineerUpdateWorkOrder'; static get engineerUpdateWorkOrderUrl=> '$_baseUrl/ServiceRequest/EngineerUpdateWorkOrder';
static get getWorkOrderByIdUrl=> '$_baseUrl/ServiceRequest/GetWorkOrderById'; static get getWorkOrderByIdUrl=> '$_baseUrl/ServiceRequest/GetWorkOrderById';

@ -141,6 +141,8 @@ class AppColor {
return green70.withOpacity(.5); return green70.withOpacity(.5);
case "fixed": case "fixed":
return green70.withOpacity(.5); return green70.withOpacity(.5);
case "reject":
return red30;
default: default:
return Colors.white; return Colors.white;
} }
@ -209,7 +211,7 @@ class AppColor {
switch (id) { switch (id) {
//low priority //low priority
case 81: case 81:
return Colors.white; return green15;
case 370: case 370:
return green15; return green15;
case 82: case 82:

@ -11,8 +11,7 @@ class LoanAvailabilityProvider extends LoadingListNotifier<Lookup> {
@override @override
Future getDate() async { Future getDate() async {
if (loading == true) return -2; if (loading == true) return -2;
loading = true;
notifyListeners();
loading = true; loading = true;
notifyListeners(); notifyListeners();
try { try {

@ -16,8 +16,6 @@ class ReasonProvider extends LoadingListNotifier<Lookup> {
if (loading == true) return -2; if (loading == true) return -2;
loading = true; loading = true;
notifyListeners(); notifyListeners();
loading = true;
notifyListeners();
try { try {
Response response = await ApiManager.instance.get(URLs.getServiceReportReasonsNew+"&serviceRequestId=$serviceRequestId"); Response response = await ApiManager.instance.get(URLs.getServiceReportReasonsNew+"&serviceRequestId=$serviceRequestId");
stateCode = response.statusCode; stateCode = response.statusCode;

@ -147,6 +147,7 @@ class RequestDetailProvider extends ChangeNotifier {
//create workOrder nurse ..... //create workOrder nurse .....
Future<int> createWorkOrder() async { Future<int> createWorkOrder() async {
isLoading = true; isLoading = true;
notifyListeners();
try { try {
final response = await ApiManager.instance.post( final response = await ApiManager.instance.post(
URLs.createWorkOrderUrl, URLs.createWorkOrderUrl,
@ -156,7 +157,6 @@ class RequestDetailProvider extends ChangeNotifier {
print('response of create request is ${response.body}'); print('response of create request is ${response.body}');
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// request.engineerName = employee.name; // request.engineerName = employee.name;
notifyListeners();
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
@ -192,18 +192,13 @@ class RequestDetailProvider extends ChangeNotifier {
Future<int> engineerAcceptWorkOrder({required String id}) async { Future<int> engineerAcceptWorkOrder({required String id}) async {
Response response; Response response;
try { try {
final body = { final body = {"workOrderId": id};
"workOrderId": id,
};
isLoading = true; isLoading = true;
notifyListeners();
response = await ApiManager.instance.post(URLs.engineerAcceptUrl, body: body); response = await ApiManager.instance.post(URLs.engineerAcceptUrl, body: body);
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));
updateCurrentWorkOrder(currentWorkOrder);
notifyListeners();
isLoading = false;
return response.statusCode;
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
@ -221,15 +216,11 @@ class RequestDetailProvider extends ChangeNotifier {
Response response; Response response;
try { try {
isLoading = true; isLoading = true;
notifyListeners();
response = await ApiManager.instance.post(URLs.engineerRejectUrl, body: engineerRejectHelperModel!.toJson()); response = await ApiManager.instance.post(URLs.engineerRejectUrl, body: engineerRejectHelperModel!.toJson());
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
print('engineer reject workOrder response is ${response.body}');
currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body));
updateCurrentWorkOrder(currentWorkOrder);
notifyListeners();
isLoading = false;
return response.statusCode;
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
@ -247,13 +238,11 @@ class RequestDetailProvider extends ChangeNotifier {
Response response; Response response;
try { try {
isLoading = true; isLoading = true;
notifyListeners();
response = await ApiManager.instance.post(URLs.engineerFixRemotlyUrl, body: fixRemotelyHelperModel!.toJson()); response = await ApiManager.instance.post(URLs.engineerFixRemotlyUrl, body: fixRemotelyHelperModel!.toJson());
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
updateCurrentWorkOrder(WorkOrderDetail.fromJson(json.decode(response.body))); currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body));
notifyListeners();
isLoading = false;
return response.statusCode;
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
@ -271,14 +260,11 @@ class RequestDetailProvider extends ChangeNotifier {
Response response; Response response;
try { try {
isLoading = true; isLoading = true;
notifyListeners();
response = await ApiManager.instance.post(URLs.engineerNeedVisitUrl, body: needVisitHelperModel!.toJson()); response = await ApiManager.instance.post(URLs.engineerNeedVisitUrl, body: needVisitHelperModel!.toJson());
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));
updateCurrentWorkOrder(currentWorkOrder);
notifyListeners();
isLoading = false;
return response.statusCode;
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
@ -296,16 +282,13 @@ class RequestDetailProvider extends ChangeNotifier {
Response response; Response response;
try { try {
isLoading = true; isLoading = true;
notifyListeners();
response = await ApiManager.instance.post(URLs.engineerUpdateNeedVisitUrl, body: needVisitHelperModel!.toJson()); response = await ApiManager.instance.post(URLs.engineerUpdateNeedVisitUrl, body: needVisitHelperModel!.toJson());
stateCode = response.statusCode; stateCode = response.statusCode;
print('body i got is ${needVisitHelperModel?.toJson()}'); print('body i got is ${needVisitHelperModel?.toJson()}');
print('response i got is ${response.body}'); print('response i got is ${response.body}');
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));
updateCurrentWorkOrder(currentWorkOrder);
notifyListeners();
isLoading = false;
return response.statusCode;
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
@ -322,16 +305,37 @@ class RequestDetailProvider extends ChangeNotifier {
Future<int> engineerMarkAsFixed({required int workOrderId, required String feedback}) async { Future<int> engineerMarkAsFixed({required int workOrderId, required String feedback}) async {
Response response; Response response;
try { try {
Map<String, dynamic> body = {'workOrderId': workOrderId, 'feedback': feedback};
isLoading = true; isLoading = true;
notifyListeners();
Map<String, dynamic> body = {'workOrderId': workOrderId, 'feedback': feedback};
response = await ApiManager.instance.post(URLs.engineerMarkAsFixUrl, body: body); response = await ApiManager.instance.post(URLs.engineerMarkAsFixUrl, body: body);
stateCode = response.statusCode; stateCode = response.statusCode;
print('engineer mark as fixed response is ${response.body}'); print('engineer mark as fixed response is ${response.body}');
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));
notifyListeners(); }
isLoading = false; isLoading = false;
return response.statusCode; notifyListeners();
return response.statusCode;
} catch (e) {
log("engineer mark as fixed [error] : $e");
isLoading = false;
notifyListeners();
return -1;
}
}
Future<int> reOrderActivities({required int workOrderId, required List<Map<String, dynamic>> reOrderActivityDTOs}) async {
Response response;
try {
isLoading = true;
notifyListeners();
Map<String, dynamic> body = {'workOrderId': workOrderId, 'reOrderActivityDTOs': reOrderActivityDTOs};
response = await ApiManager.instance.post(URLs.reOrderActivity, body: body);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body));
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
@ -345,18 +349,16 @@ class RequestDetailProvider extends ChangeNotifier {
} }
//engineer Confirm Arrive...... //engineer Confirm Arrive......
Future<int> engineerConfirmArrival({required int workOrderId, required int verificationTypeId, required String photoInfo, required String otp, String ?assetNo}) async { Future<int> engineerConfirmArrival({required int workOrderId, required int verificationTypeId, required String photoInfo, required String otp, String? assetNo}) async {
Response response; Response response;
try { try {
Map<String, dynamic> body = {"workOrderId": workOrderId, "verificationTypeId": verificationTypeId, "photoInfo": photoInfo, "otp": otp, "assetNumber": assetNo}; Map<String, dynamic> body = {"workOrderId": workOrderId, "verificationTypeId": verificationTypeId, "photoInfo": photoInfo, "otp": otp, "assetNumber": assetNo};
isLoading = true; isLoading = true;
notifyListeners();
response = await ApiManager.instance.post(URLs.engineerConfirmArriveUrl, body: body); response = await ApiManager.instance.post(URLs.engineerConfirmArriveUrl, body: body);
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
print('response of Engineer confirm arrival ${response.body}'); // print('response of Engineer confirm arrival ${response.body}');
notifyListeners();
isLoading = false;
return response.statusCode;
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
@ -372,22 +374,18 @@ class RequestDetailProvider extends ChangeNotifier {
//assignEngineerToWorkOrder...... //assignEngineerToWorkOrder......
Future<CommonResponseModel> assignEngineerWorkOrder({required String workOrderId, required String engineerId}) async { Future<CommonResponseModel> assignEngineerWorkOrder({required String workOrderId, required String engineerId}) async {
try { try {
final body = { final body = {"workOrderId": workOrderId, "assignedEngineerId": engineerId};
"workOrderId": workOrderId,
"assignedEngineerId": engineerId,
};
isLoading = true; isLoading = true;
notifyListeners();
final response = await ApiManager.instance.post(URLs.assignEngineerToWorkOrderUrl, body: body); final response = await ApiManager.instance.post(URLs.assignEngineerToWorkOrderUrl, body: body);
stateCode = response.statusCode; stateCode = response.statusCode;
CommonResponseModel commonResponseModel = CommonResponseModel();
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
notifyListeners();
isLoading = false;
return commonResponseModel;
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return CommonResponseModel(); return commonResponseModel;
} catch (e) { } catch (e) {
log("engineer accept [error] : $e"); log("engineer accept [error] : $e");
isLoading = false; isLoading = false;
@ -398,41 +396,37 @@ class RequestDetailProvider extends ChangeNotifier {
//engineerUpdateWorkOrder...... //engineerUpdateWorkOrder......
Future<void> engineerUpdateWorkOrder() async { Future<void> engineerUpdateWorkOrder() async {
// try { try {
isLoading = true; isLoading = true;
final response = await ApiManager.instance.post(URLs.engineerUpdateWorkOrderUrl, body: engineerUpdateWorkOrderHelperModel!.toJson());
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body));
updateCurrentWorkOrder(currentWorkOrder);
notifyListeners(); notifyListeners();
final response = await ApiManager.instance.post(URLs.engineerUpdateWorkOrderUrl, body: engineerUpdateWorkOrderHelperModel!.toJson());
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body));
}
isLoading = false; isLoading = false;
notifyListeners();
} catch (e) {
log("engineer update workorder [error] : $e");
isLoading = false;
notifyListeners();
} }
isLoading = false;
notifyListeners();
// }
// catch (e) {
// log("engineer update workorder [error] : $e");
// isLoading = false;
// notifyListeners();
// }
} }
//Nurse confirm reopen //Nurse confirm reopen
Future<CommonResponseModel> nurseReject() async { Future<CommonResponseModel> nurseReject() async {
try { try {
isLoading = true; isLoading = true;
notifyListeners();
final response = await ApiManager.instance.post(URLs.nurseRejectUrl, body: nurseActionHelperModel!.toJson()); final response = await ApiManager.instance.post(URLs.nurseRejectUrl, body: nurseActionHelperModel!.toJson());
stateCode = response.statusCode; stateCode = response.statusCode;
CommonResponseModel commonResponseModel = CommonResponseModel();
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
notifyListeners();
isLoading = false;
return commonResponseModel;
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return CommonResponseModel(); return commonResponseModel;
} catch (e) { } catch (e) {
log("engineer accept [error] : $e"); log("engineer accept [error] : $e");
isLoading = false; isLoading = false;
@ -445,19 +439,17 @@ class RequestDetailProvider extends ChangeNotifier {
Future<CommonResponseModel> nurseConfirm() async { Future<CommonResponseModel> nurseConfirm() async {
try { try {
isLoading = true; isLoading = true;
notifyListeners();
final response = await ApiManager.instance.post(URLs.nurseConfirmUrl, body: nurseActionHelperModel!.toJson()); final response = await ApiManager.instance.post(URLs.nurseConfirmUrl, body: nurseActionHelperModel!.toJson());
print('response i got is ${response.body}');
stateCode = response.statusCode; stateCode = response.statusCode;
CommonResponseModel commonResponseModel = CommonResponseModel();
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
notifyListeners();
isLoading = false;
return commonResponseModel;
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return CommonResponseModel(); return commonResponseModel;
} catch (e) { } catch (e) {
log("engineer accept [error] : $e"); log("engineer accept [error] : $e");
isLoading = false; isLoading = false;
@ -468,16 +460,13 @@ class RequestDetailProvider extends ChangeNotifier {
Future<int> updateActivitySparePart() async { Future<int> updateActivitySparePart() async {
isLoading = true; isLoading = true;
notifyListeners();
try { try {
final response = await ApiManager.instance.post( final response = await ApiManager.instance.post(URLs.updateActivitySparePartUrl, body: sparePartHelperModel!.toJson());
URLs.updateActivitySparePartUrl,
body: sparePartHelperModel!.toJson(),
);
stateCode = response.statusCode; stateCode = response.statusCode;
print('update response i got is ${response.body}'); print('update response i got is ${response.body}');
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// request.engineerName = employee.name; // request.engineerName = employee.name;
notifyListeners();
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
@ -491,16 +480,13 @@ class RequestDetailProvider extends ChangeNotifier {
Future<int> updateActivityMaintenance() async { Future<int> updateActivityMaintenance() async {
isLoading = true; isLoading = true;
notifyListeners();
try { try {
final response = await ApiManager.instance.put( final response = await ApiManager.instance.put(URLs.updateActivityMaintenanceUrl, body: activityMaintenanceHelperModel!.toJson());
URLs.updateActivityMaintenanceUrl,
body: activityMaintenanceHelperModel!.toJson(),
);
stateCode = response.statusCode; stateCode = response.statusCode;
print('update response i got is ${response.statusCode}');
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// request.engineerName = employee.name; // request.engineerName = employee.name;
notifyListeners();
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
@ -533,21 +519,16 @@ class RequestDetailProvider extends ChangeNotifier {
Future<int> deleteActivitySparePart({required int id, required int workOrderId}) async { Future<int> deleteActivitySparePart({required int id, required int workOrderId}) async {
isLoading = true; isLoading = true;
var body = { notifyListeners();
'id': id, var body = {'id': id, 'workOrderId': workOrderId};
'workOrderId': workOrderId,
};
try { try {
final response = await ApiManager.instance.post( final response = await ApiManager.instance.post(URLs.deleteActivitySparePartUrl, body: body);
URLs.deleteActivitySparePartUrl,
body: body,
);
stateCode = response.statusCode; stateCode = response.statusCode;
print('response of delete activity spare part is ${response.statusCode}'); print('response of delete activity spare part is ${response.statusCode}');
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
//map to the model... //map to the model...
notifyListeners(); // notifyListeners();
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
@ -561,22 +542,17 @@ class RequestDetailProvider extends ChangeNotifier {
Future<int> deleteActivityMaintenance({required int id, required int workOrderId}) async { Future<int> deleteActivityMaintenance({required int id, required int workOrderId}) async {
isLoading = true; isLoading = true;
var body = { notifyListeners();
'id': id, var body = {'id': id, 'workOrderId': workOrderId};
'workOrderId': workOrderId,
};
try { try {
//TODO replace with delete model...
final response = await ApiManager.instance.delete( final response = await ApiManager.instance.delete(
URLs.deleteActivityMaintenanceUrl, URLs.deleteActivityMaintenanceUrl,
body: body, body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
print('response of delete activity spare part is ${response.body}');
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
//map to the model... //map to the model...
notifyListeners();
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
@ -590,6 +566,7 @@ class RequestDetailProvider extends ChangeNotifier {
Future<int> createActivitySparePart() async { Future<int> createActivitySparePart() async {
isLoading = true; isLoading = true;
notifyListeners();
try { try {
final response = await ApiManager.instance.post( final response = await ApiManager.instance.post(
URLs.createActivitySparePartUrl, URLs.createActivitySparePartUrl,
@ -599,8 +576,8 @@ class RequestDetailProvider extends ChangeNotifier {
print('add sparepart activity response i got is ${response.body}'); print('add sparepart activity response i got is ${response.body}');
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));
// updateCurrentWorkOrder(currentWorkOrder); // // updateCurrentWorkOrder(currentWorkOrder);
notifyListeners(); // notifyListeners();
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
@ -614,43 +591,40 @@ class RequestDetailProvider extends ChangeNotifier {
Future<int> createActivityMaintenanceRequest() async { Future<int> createActivityMaintenanceRequest() async {
isLoading = true; isLoading = true;
// try { notifyListeners();
final response = await ApiManager.instance.post( try {
URLs.createActivityMaintenanceUrl, final response = await ApiManager.instance.post(
body: activityMaintenanceHelperModel!.toJson(), URLs.createActivityMaintenanceUrl,
); body: activityMaintenanceHelperModel!.toJson(),
stateCode = response.statusCode; );
print('add maintenance activity response i got is ${response.body}'); stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { print('add maintenance activity response i got is ${response.body}');
// currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); if (response.statusCode >= 200 && response.statusCode < 300) {
// updateCurrentWorkOrder(currentWorkOrder); // currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body));
// updateCurrentWorkOrder(currentWorkOrder);
}
isLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch (error) {
isLoading = false;
notifyListeners();
return -1;
} }
isLoading = false;
notifyListeners();
return response.statusCode;
// } catch (error) {
// isLoading = false;
// notifyListeners();
// return -1;
// }
} }
//create asset retired request.. //create asset retired request..
Future<int> createActivityAssetToBeRetired() async { Future<int> createActivityAssetToBeRetired() async {
isLoading = true; isLoading = true;
notifyListeners();
try { try {
final response = await ApiManager.instance.post( final response = await ApiManager.instance.post(
URLs.createActivityAssetToBeRetiredUrl, URLs.createActivityAssetToBeRetiredUrl,
body: assetRetiredHelperModel!.toJson(), body: assetRetiredHelperModel!.toJson(),
); );
stateCode = response.statusCode; stateCode = response.statusCode;
print('response of asset retired is ${response.body}');
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));
updateCurrentWorkOrder(currentWorkOrder);
notifyListeners();
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
@ -687,6 +661,7 @@ class RequestDetailProvider extends ChangeNotifier {
//send otp.. //send otp..
Future<int?> sendOtp({required int workOrderId}) async { Future<int?> sendOtp({required int workOrderId}) async {
isLoading = true; isLoading = true;
notifyListeners();
try { try {
final response = await ApiManager.instance.postWithOutBody( final response = await ApiManager.instance.postWithOutBody(
URLs.sendOtpUrl + "$workOrderId", URLs.sendOtpUrl + "$workOrderId",
@ -695,9 +670,7 @@ class RequestDetailProvider extends ChangeNotifier {
stateCode = response.statusCode; stateCode = response.statusCode;
print('response i got is ${response.body}'); print('response i got is ${response.body}');
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {}
notifyListeners();
}
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
@ -711,15 +684,12 @@ class RequestDetailProvider extends ChangeNotifier {
//verify otp.. //verify otp..
Future<int> verifyOtp({required int workOrderId, required String otpCode}) async { Future<int> verifyOtp({required int workOrderId, required String otpCode}) async {
isLoading = true; isLoading = true;
notifyListeners();
try { try {
final response = await ApiManager.instance.postWithOutBody( final response = await ApiManager.instance.postWithOutBody(URLs.verifyOtpUrl + '$workOrderId&$otpCode');
URLs.verifyOtpUrl + '$workOrderId&$otpCode',
);
print('response i got is ${response.body}');
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {}
notifyListeners();
}
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;

@ -8,6 +8,7 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/enums/work_order_next_step.dart'; import 'package:test_sa/models/enums/work_order_next_step.dart';
import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart'; import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart';
import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.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';
@ -29,9 +30,12 @@ class FooterActionButton {
); );
} }
static Widget requestDetailsFooterWidget({required WorkOrderNextStepEnum workOrderNextStepStatus, required BuildContext context, required UserProvider userProvider}) { static Widget requestDetailsFooterWidget(
{required WorkOrderNextStepEnum workOrderNextStepStatus, List<Activities> activities = const [], required BuildContext context, required UserProvider userProvider}) {
RequestDetailProvider requestDetailProvider = Provider.of<RequestDetailProvider>(context, listen: false); RequestDetailProvider requestDetailProvider = Provider.of<RequestDetailProvider>(context, listen: false);
bool showMarkAsFixedButton = activities.isEmpty ? true : activities.every((object) => object.activityStatus!.name!.toLowerCase() == "completed");
if (userProvider.user?.type == UsersTypes.engineer) { if (userProvider.user?.type == UsersTypes.engineer) {
switch (workOrderNextStepStatus) { switch (workOrderNextStepStatus) {
case WorkOrderNextStepEnum.onlyView: case WorkOrderNextStepEnum.onlyView:
@ -67,7 +71,7 @@ class FooterActionButton {
if (context.mounted) { if (context.mounted) {
RejectReasonProvider rejectionReasonProvider = Provider.of<RejectReasonProvider>(context, listen: false); RejectReasonProvider rejectionReasonProvider = Provider.of<RejectReasonProvider>(context, listen: false);
rejectionReasonProvider.reset(); rejectionReasonProvider.reset();
rejectionReasonProvider.getDate(); //rejectionReasonProvider.getDate();
} }
ServiceRequestBottomSheet.rejectRequestBottomSheet(context: context); ServiceRequestBottomSheet.rejectRequestBottomSheet(context: context);
}, },
@ -148,16 +152,17 @@ class FooterActionButton {
Navigator.push(context, MaterialPageRoute(builder: (context) => const ActivitiesListView())); Navigator.push(context, MaterialPageRoute(builder: (context) => const ActivitiesListView()));
}, },
), ),
8.height, if (showMarkAsFixedButton) ...[
AppFilledButton( 8.height,
label: context.translation.markAsFixed, AppFilledButton(
// maxWidth: true, label: context.translation.markAsFixed,
buttonColor: AppColor.green70, // maxWidth: true,
onPressed: () async { buttonColor: AppColor.green70,
onPressed: () async {
ServiceRequestBottomSheet.feedBackBottomSheet(context: context); ServiceRequestBottomSheet.feedBackBottomSheet(context: context);
}, },
), ),
]
], ],
)); ));
case WorkOrderNextStepEnum.endWorkFlow: case WorkOrderNextStepEnum.endWorkFlow:

@ -54,15 +54,15 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
List<Activities> reOrderActivities = []; List<Activities> reOrderActivities = [];
List<Activities> activities = [];
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
//TODO add the check for type of activity after completing maintenance activity flow.
List<Activities> activities = [];
UserProvider userProvider = Provider.of<UserProvider>(context); UserProvider userProvider = Provider.of<UserProvider>(context);
return Scaffold( return Scaffold(
appBar: DefaultAppBar( appBar: DefaultAppBar(
title: context.translation.activities, title: context.translation.activities,
actions: [if (!showReorderView) IconButton(onPressed: () => setState(() => showReorderView = true), icon: const Icon(Icons.reorder_rounded))], actions: [if (!showReorderView) IconButton(onPressed: () => activities.isEmpty ? null : setState(() => showReorderView = true), icon: const Icon(Icons.reorder_rounded))],
), ),
//backgroundColor: const Color(0xfff8f9fb), //backgroundColor: const Color(0xfff8f9fb),
body: Consumer<RequestDetailProvider>(builder: (context, RequestDetailProvider requestDetailProvider, child) { body: Consumer<RequestDetailProvider>(builder: (context, RequestDetailProvider requestDetailProvider, child) {
@ -126,8 +126,12 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
if (showReorderView) { if (showReorderView) {
requestDetailProvider.currentWorkOrder!.data!.activities = reOrderActivities; requestDetailProvider.currentWorkOrder!.data!.activities = reOrderActivities;
reOrderActivities = []; reOrderActivities = [];
List<Map<String, dynamic>> data = [];
for (int i = 0; i < reOrderActivities.length; i++) {
data.add({"id": reOrderActivities[i].id, "orderNo": i});
}
requestDetailProvider.reOrderActivities(workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!, reOrderActivityDTOs: data);
showReorderView = false; showReorderView = false;
setState(() {});
return; return;
} }
ServiceRequestBottomSheet.activityTypeBottomSheet(context: context); ServiceRequestBottomSheet.activityTypeBottomSheet(context: context);

@ -1,10 +1,9 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/app_strings/app_asset.dart'; import 'package:test_sa/app_strings/app_asset.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart';
@ -15,17 +14,14 @@ import 'package:test_sa/models/helper_data_models/maintenance_request/activity_m
import 'package:test_sa/models/helper_data_models/spare_part/activity_spare_part_model.dart'; import 'package:test_sa/models/helper_data_models/spare_part/activity_spare_part_model.dart';
import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart'; import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/service_request_providers/first_action_provider.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';
import 'package:test_sa/providers/work_order/reason_provider.dart';
import 'package:test_sa/service_request_latest/request_detail_provider.dart'; import 'package:test_sa/service_request_latest/request_detail_provider.dart';
import 'package:test_sa/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart'; import 'package:test_sa/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart';
import 'package:test_sa/service_request_latest/views/forms/spare_part/spare_part_request.dart'; import 'package:test_sa/service_request_latest/views/forms/spare_part/spare_part_request.dart';
import 'package:test_sa/service_request_latest/views/components/verify_arrival_view.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; import 'package:test_sa/views/widgets/e_signature/e_signature.dart';
import '../../../../controllers/providers/api/service_requests_provider.dart'; import '../../../../controllers/providers/api/service_requests_provider.dart';
import '../../../../new_views/app_style/app_color.dart'; import '../../../../new_views/app_style/app_color.dart';
import '../../../../new_views/common_widgets/app_filled_button.dart'; import '../../../../new_views/common_widgets/app_filled_button.dart';
@ -205,11 +201,10 @@ class ServiceRequestBottomSheet {
loading: false, loading: false,
onPressed: () async { onPressed: () async {
requestDetailProvider.fixRemotelyHelperModel?.workOrderId = requestDetailProvider.currentWorkOrder?.data?.requestId; requestDetailProvider.fixRemotelyHelperModel?.workOrderId = requestDetailProvider.currentWorkOrder?.data?.requestId;
requestDetailProvider.engineerFixRemotely(); requestDetailProvider.engineerFixRemotely();
//TODO context issue to show message.. //TODO context issue to show message..
Navigator.pop(context); Navigator.pop(context);
// const SizedBox().flushBar(context: context, title: '', message: context.translation.youMarkedThisIssueAsFixedWaitingForTheRequesterToConfirm); // const SizedBox().flushBar(context: context, title: '', message: context.translation.youMarkedThisIssueAsFixedWaitingForTheRequesterToConfirm);
}, },
), ),
), ),
@ -298,7 +293,7 @@ class ServiceRequestBottomSheet {
requestDetailProvider.engineerUpdateNeedVisit(); requestDetailProvider.engineerUpdateNeedVisit();
} else { } else {
requestDetailProvider.needVisitHelperModel?.workOrderId = requestDetailProvider.currentWorkOrder!.data!.requestId; requestDetailProvider.needVisitHelperModel?.workOrderId = requestDetailProvider.currentWorkOrder!.data!.requestId;
requestDetailProvider.engineerNeedVisit(); requestDetailProvider.engineerNeedVisit();
requestDetailProvider.needVisitHelperModel = NeedVisitHelperModel(); requestDetailProvider.needVisitHelperModel = NeedVisitHelperModel();
} }
Navigator.pop(context); Navigator.pop(context);
@ -326,6 +321,7 @@ class ServiceRequestBottomSheet {
context: context, context: context,
title: context.translation.reason, title: context.translation.reason,
backgroundColor: AppColor.neutral100, backgroundColor: AppColor.neutral100,
showShadow: false,
initialValue: requestDetailProvider.engineerRejectHelperModel?.rejectionReason, initialValue: requestDetailProvider.engineerRejectHelperModel?.rejectionReason,
onSelect: (value) { onSelect: (value) {
if (value != null) { if (value != null) {
@ -340,6 +336,7 @@ class ServiceRequestBottomSheet {
labelText: context.translation.comments, labelText: context.translation.comments,
textInputType: TextInputType.multiline, textInputType: TextInputType.multiline,
alignLabelWithHint: true, alignLabelWithHint: true,
showShadow: false,
labelStyle: AppTextStyles.textFieldLabelStyle, labelStyle: AppTextStyles.textFieldLabelStyle,
onChange: (text) { onChange: (text) {
requestDetailProvider.engineerRejectHelperModel?.feedback = text; requestDetailProvider.engineerRejectHelperModel?.feedback = text;
@ -524,8 +521,9 @@ class ServiceRequestBottomSheet {
static Future addAnotherSpareRequestBottomSheet({required BuildContext context}) { static Future addAnotherSpareRequestBottomSheet({required BuildContext context}) {
return buildBottomSheetParent( return buildBottomSheetParent(
context: context, context: context,
childWidget: Consumer<ServiceRequestsProvider>(builder: (context, serviceRequestProvider, child) { childWidget: Consumer<ServiceRequestsProvider>(
builder: (context, serviceRequestProvider, child) {
return Column( return Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
@ -533,7 +531,7 @@ class ServiceRequestBottomSheet {
8.height, 8.height,
Align( Align(
alignment: AlignmentDirectional.centerStart, alignment: AlignmentDirectional.centerStart,
child: context.translation.doYouWantToCreateAnotherSparePartRequest.heading6(context), child: context.translation.doYouWantToCreateAnotherSparePartRequest.bottomSheetHeadingTextStyle(context),
), ),
41.height, 41.height,
Row( Row(
@ -562,10 +560,13 @@ class ServiceRequestBottomSheet {
}, },
).expanded, ).expanded,
], ],
) ),
16.height,
], ],
); );
})); },
),
);
} }
static Future feedBackBottomSheet({required BuildContext context}) { static Future feedBackBottomSheet({required BuildContext context}) {

@ -16,18 +16,6 @@ class HistoryLogView extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
List<HistoryLogModel> dummyList = [
HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null),
HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null),
HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: 'Status update to In Progress'),
HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null),
HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: 'Status updated to Closed'),
HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null),
HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null),
HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null),
HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null),
];
return Consumer<RequestDetailProvider>(builder: (context, requestProvider, _) { return Consumer<RequestDetailProvider>(builder: (context, requestProvider, _) {
String status = ""; String status = "";
return requestProvider.isLoading return requestProvider.isLoading
@ -119,6 +107,8 @@ class HistoryLogView extends StatelessWidget {
return "Status update to Completed".addTranslation; return "Status update to Completed".addTranslation;
} else if (status == "fixed") { } else if (status == "fixed") {
return "Status update to Fixed".addTranslation; return "Status update to Fixed".addTranslation;
} else if (status == "reject") {
return "Status update to Rejected".addTranslation;
} else } else
return status; return status;
} }

@ -50,7 +50,7 @@ class WorkOrderDetailView extends StatelessWidget {
), ),
).expanded, ).expanded,
FooterActionButton.requestDetailsFooterWidget( FooterActionButton.requestDetailsFooterWidget(
workOrderNextStepStatus: requestProvider.currentWorkOrder!.data!.nextStep!.workOrderNextStepEnum!, userProvider: _userProvider, context: context), workOrderNextStepStatus: requestProvider.currentWorkOrder!.data!.nextStep!.workOrderNextStepEnum!,activities:requestProvider.currentWorkOrder!.data?.activities??[], userProvider: _userProvider, context: context),
], ],
), ),
// const TimerWidget(), // const TimerWidget(),
@ -209,62 +209,62 @@ class WorkOrderDetailView extends StatelessWidget {
], ],
], ],
).paddingOnly(start: 16, end: 16, top: 16, bottom: 8), ).paddingOnly(start: 16, end: 16, top: 16, bottom: 8),
(userProvider.user!.type == UsersTypes.normal_user // (userProvider.user!.type == UsersTypes.normal_user
? Container( // ? Container(
height: 50, // height: 50,
padding: const EdgeInsets.only(left: 16, right: 16), // padding: const EdgeInsets.only(left: 16, right: 16),
alignment: Alignment.center, // alignment: Alignment.center,
width: double.infinity, // width: double.infinity,
decoration: ShapeDecoration( // decoration: ShapeDecoration(
color: context.isDark ? AppColor.neutral50 : AppColor.neutral30, // color: context.isDark ? AppColor.neutral50 : AppColor.neutral30,
shape: const RoundedRectangleBorder( // shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.only( // borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(20), // bottomLeft: Radius.circular(20),
bottomRight: Radius.circular(20), // bottomRight: Radius.circular(20),
), // ),
), // ),
), // ),
child: Row( // child: Row(
children: [ // children: [
Text( // Text(
'${context.translation.commentHere}...', // '${context.translation.commentHere}...',
style: AppTextStyles.heading6.copyWith( // style: AppTextStyles.heading6.copyWith(
color: (context.isDark ? AppColor.neutral30 : AppColor.neutral50).withOpacity(.6), // color: (context.isDark ? AppColor.neutral30 : AppColor.neutral50).withOpacity(.6),
), // ),
).expanded, // ).expanded,
"comment_send".toSvgAsset(width: 24, color: context.isDark ? AppColor.primary50 : AppColor.primary70), // "comment_send".toSvgAsset(width: 24, color: context.isDark ? AppColor.primary50 : AppColor.primary70),
], // ],
), // ),
) // )
: Column( // : Column(
mainAxisSize: MainAxisSize.min, // mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.start,
children: [ // children: [
const Divider().defaultStyle(context), // const Divider().defaultStyle(context),
16.height, // 16.height,
Row( // Row(
mainAxisSize: MainAxisSize.min, // mainAxisSize: MainAxisSize.min,
children: [ // children: [
Text( // Text(
context.translation.viewComments, // context.translation.viewComments,
style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context)), // style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context)),
), // ),
4.width, // 4.width,
Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14) // Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14)
], // ],
), // ),
], // ],
).paddingOnly(bottom: 16, start: 16, end: 16)) // ).paddingOnly(bottom: 16, start: 16, end: 16))
.onPress(() { // .onPress(() {
// showModalBottomSheet( // // showModalBottomSheet(
// context: context, // // context: context,
// useSafeArea: true, // // useSafeArea: true,
// isScrollControlled: true, // // isScrollControlled: true,
// useRootNavigator: true, // // useRootNavigator: true,
// backgroundColor: Colors.transparent, // // backgroundColor: Colors.transparent,
// builder: (context) => CommentsBottomSheet(requestId: serviceRequest.id!), // // builder: (context) => CommentsBottomSheet(requestId: serviceRequest.id!),
// ); // // );
}), // }),
//set condition for show asset detail button... //set condition for show asset detail button...
if (workOrder.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.verifyAssetDetail || if (workOrder.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.verifyAssetDetail ||
workOrder.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.activity && userProvider.user?.type == UsersTypes.engineer) ...[ workOrder.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.activity && userProvider.user?.type == UsersTypes.engineer) ...[

@ -14,7 +14,6 @@ import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_mo
import 'package:test_sa/models/new_models/work_order_detail_model.dart'; import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart'; import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart';
@ -24,7 +23,6 @@ import 'package:test_sa/providers/work_order/reason_provider.dart';
import 'package:test_sa/service_request_latest/request_detail_provider.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/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/equipment/pick_asset.dart'; import 'package:test_sa/views/widgets/equipment/pick_asset.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import '../../../../../../models/lookup.dart'; import '../../../../../../models/lookup.dart';
import '../../../../../../new_views/common_widgets/default_app_bar.dart'; import '../../../../../../new_views/common_widgets/default_app_bar.dart';
@ -54,188 +52,172 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
@override @override
void initState() { void initState() {
super.initState(); super.initState();
scheduleMicrotask(() async {
await getInitialData();
});
// WidgetsBinding.instance.addPostFrameCallback((_) {
// });
} }
Future<void> getInitialData() async { Future<void> getFaultDescription() async {
//TODO ask skinder how to called getdata methods automatically... Provider.of<FaultDescriptionProvider>(context, listen: false).getFaultDescriptionList(assetId: _requestDetailProvider?.currentWorkOrder?.data?.asset?.id).then((List<FaultDescription>? data) {
_isLoading = true; if (data?.isNotEmpty ?? false) {
_requestDetailProvider = Provider.of<RequestDetailProvider>(context, listen: false); _faults = data!;
_reasonProvider = Provider.of<ReasonProvider>(context, listen: false); setState(() {});
_faultDescriptionProvider = Provider.of<ServiceRequestFaultDescriptionProvider>(context, listen: false); }
_loanAvailabilityProvider = Provider.of<LoanAvailabilityProvider>(context, listen: false); });
_equipmentStatusProvider = Provider.of<EquipmentStatusProvider>(context, listen: false);
_reasonProvider?.serviceRequestId = _requestDetailProvider?.currentWorkOrder!.data!.requestId.toString();
_faults = await Provider.of<FaultDescriptionProvider>(context, listen: false).getFaultDescriptionList(assetId: _requestDetailProvider?.currentWorkOrder?.data?.asset?.id);
_reasonProvider?.getDate();
_equipmentStatusProvider?.getDate();
_loanAvailabilityProvider?.getDate();
//TODO no need to create seprate models just write a method in workorder model...
WorkOrderData currentWorkOrderData = _requestDetailProvider!.currentWorkOrder!.data!;
_requestDetailProvider?.engineerUpdateWorkOrderHelperModel = EngineerUpdateWorkOrderHelperModel(
workOrderId: currentWorkOrderData.requestId,
equipmentStatus: currentWorkOrderData.equipmentStatus,
loanAvailability: currentWorkOrderData.loanAvailablity,
failureReason: currentWorkOrderData.failureReasone,
// faultDescription: currentWorkOrderData.problemDescription,
solution: currentWorkOrderData.solution?.name,
returnToService: currentWorkOrderData.returnToService,
serviceType: currentWorkOrderData.serviceType,
);
_requestDetailProvider?.updateEngineerUpdateWorkOrderHelperModel(_requestDetailProvider?.engineerUpdateWorkOrderHelperModel);
_isLoading = false;
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (_requestDetailProvider == null) {
_requestDetailProvider = Provider.of<RequestDetailProvider>(context, listen: false);
_reasonProvider = Provider.of<ReasonProvider>(context, listen: false);
_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();
_equipmentStatusProvider!.getDate();
_reasonProvider?.serviceRequestId = _requestDetailProvider?.currentWorkOrder!.data!.requestId.toString();
WorkOrderData currentWorkOrderData = _requestDetailProvider!.currentWorkOrder!.data!;
_requestDetailProvider?.engineerUpdateWorkOrderHelperModel = EngineerUpdateWorkOrderHelperModel(
workOrderId: currentWorkOrderData.requestId,
equipmentStatus: currentWorkOrderData.equipmentStatus,
loanAvailability: currentWorkOrderData.loanAvailablity,
failureReason: currentWorkOrderData.failureReasone,
// faultDescription: currentWorkOrderData.problemDescription,
solution: currentWorkOrderData.solution?.name,
returnToService: currentWorkOrderData.returnToService,
serviceType: currentWorkOrderData.serviceType,
);
_requestDetailProvider?.updateEngineerUpdateWorkOrderHelperModel(_requestDetailProvider?.engineerUpdateWorkOrderHelperModel);
getFaultDescription();
}
return Scaffold( return Scaffold(
key: _scaffoldKey, key: _scaffoldKey,
appBar: DefaultAppBar(title: context.translation.verify_asset_details), appBar: DefaultAppBar(title: context.translation.verify_asset_details),
body: Consumer<RequestDetailProvider>(builder: (context, RequestDetailProvider requestDetailProvider, child) { body: Consumer<RequestDetailProvider>(builder: (context, RequestDetailProvider requestDetailProvider, child) {
return SafeArea( return Column(
child: LoadingManager( mainAxisAlignment: MainAxisAlignment.spaceBetween,
isLoading: _isLoading, children: [
isFailedLoading: false, Column(
stateCode: 200, crossAxisAlignment: CrossAxisAlignment.start,
onRefresh: () async {}, mainAxisSize: MainAxisSize.min,
child: Form( children: [
key: _formKey, equipmentStatusWidget(context: context, workOrderData: requestDetailProvider.engineerUpdateWorkOrderHelperModel!),
child: Column( 12.height,
children: [ ADatePicker(
SingleChildScrollView( label: context.translation.returnToService,
child: Card( hideShadow: true,
child: Column( backgroundColor: AppColor.neutral100,
crossAxisAlignment: CrossAxisAlignment.stretch, date: DateTime.tryParse(requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService ?? ""),
children: [ formatDateWithTime: true,
equipmentStatusWidget(context: context, workOrderData: requestDetailProvider.engineerUpdateWorkOrderHelperModel!), onDatePicker: (selectedDate) {
24.height, showTimePicker(
ADatePicker( context: context,
label: context.translation.returnToService, initialTime: TimeOfDay.now(),
hideShadow: true, ).then((selectedTime) {
backgroundColor: AppColor.neutral100, // Handle the selected date and time here.
date: DateTime.tryParse(requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService ?? ""), if (selectedTime != null) {
formatDateWithTime: true, DateTime? selectedDateTime = DateTime(
onDatePicker: (selectedDate) { selectedDate.year,
showTimePicker( selectedDate.month,
context: context, selectedDate.day,
initialTime: TimeOfDay.now(), selectedTime.hour,
).then((selectedTime) { selectedTime.minute,
// Handle the selected date and time here. );
if (selectedTime != null) { if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService != null &&
DateTime? selectedDateTime = DateTime( selectedDateTime.isBefore(DateTime.parse(requestDetailProvider.engineerUpdateWorkOrderHelperModel!.returnToService!))) {
selectedDate.year, "Visit Date time must be greater then previous date".showToast;
selectedDate.month, return;
selectedDate.day, }
selectedTime.hour, setState(() {
selectedTime.minute, requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService = selectedDateTime.toIso8601String();
); });
if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService != null && }
selectedDateTime.isBefore(DateTime.parse(requestDetailProvider.engineerUpdateWorkOrderHelperModel!.returnToService!))) { });
"Visit Date time must be greater then previous date".showToast; },
return; ),
} 12.height,
setState(() { SingleItemDropDownMenu<Lookup, LoanAvailabilityProvider>(
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService = selectedDateTime.toIso8601String(); context: context,
}); title: context.translation.loanAvailability,
} backgroundColor: AppColor.neutral100,
}); height: 56.toScreenHeight,
}, showShadow: false,
), initialValue: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability,
12.height, onSelect: (status) {
SingleItemDropDownMenu<Lookup, LoanAvailabilityProvider>( if (status != null) {
context: context, requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability = status;
title: context.translation.loanAvailability, if (status.value != 1) {
backgroundColor: AppColor.neutral100, loanAvailabilityAsset = null;
height: 56.toScreenHeight, requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAssetId = null;
showShadow: false, }
initialValue: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability, }
onSelect: (status) { // setState(() {});
if (status != null) { },
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability = status; ),
if (status.value != 1) { if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability?.value == 1) 8.height,
loanAvailabilityAsset = null; if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability?.value == 1)
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAssetId = null; PickAsset(
} device: loanAvailabilityAsset, // ?? _serviceReport.device,
} cardColor: AppColor.neutral100,
setState(() {}); onPickAsset: (asset) {
}, requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAssetId = asset.id;
), //setState(() {
if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability?.value == 1) 8.height, loanAvailabilityAsset = asset;
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) {
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription = fault;
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution = fault?.workPerformed;
if (mounted) {
requestDetailProvider.updateEngineerUpdateWorkOrderHelperModel(requestDetailProvider.engineerUpdateWorkOrderHelperModel);
}
},
),
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(),
],
).paddingOnly(start: 13, end: 13, top: 16, bottom: 16),
).paddingOnly(top: 17, start: 14, end: 14),
).expanded,
Container(
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 16.toScreenHeight),
color: AppColor.white10,
child: AppFilledButton(
label: context.translation.verify_asset_details,
buttonColor: AppColor.primary10,
onPressed: () async {
//TODO add loader
// showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
requestDetailProvider.engineerUpdateWorkOrder();
// Navigator.pop(context);
Navigator.pop(context);
},
),
), ),
], 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) {
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription = fault;
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution = fault?.workPerformed;
if (mounted) {
requestDetailProvider.updateEngineerUpdateWorkOrderHelperModel(requestDetailProvider.engineerUpdateWorkOrderHelperModel);
}
},
),
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),
Container(
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 16.toScreenHeight),
color: AppColor.white10,
child: AppFilledButton(
label: context.translation.verify_asset_details,
buttonColor: AppColor.primary10,
onPressed: () async {
await requestDetailProvider.engineerUpdateWorkOrder();
Navigator.pop(context);
},
), ),
), ),
), ],
); );
}), }),
); );

Loading…
Cancel
Save