From f1fe0b33392973b46e986532b7b142ed56afaabb Mon Sep 17 00:00:00 2001 From: "muhammad.abbasi" Date: Sat, 5 Oct 2024 01:49:27 +0300 Subject: [PATCH] edit maintenance request completed --- lib/controllers/api_routes/api_manager.dart | 33 ++ lib/l10n/app_ar.arb | 2 + lib/l10n/app_en.arb | 2 + .../activity_maintenance_model.dart | 44 +-- lib/models/new_models/assistant_employee.dart | 9 - .../new_models/work_order_detail_model.dart | 51 +-- .../service_request/supplier_details.dart | 2 +- .../single_item_drop_down_menu.dart | 11 +- .../request_detail_provider.dart | 138 ++++--- .../components/activities_list_view.dart | 87 ++++- .../service_request_bottomsheet.dart | 53 +++ .../views/components/verify_arrival_view.dart | 153 +++++++- .../views/components/verify_otp_view.dart | 13 +- .../components/assistant_employee_card.dart | 12 +- .../components/external_request.dart | 358 +++++++++--------- .../components/internal_request.dart | 18 +- .../maintenance_request_main.dart | 169 ++++----- .../forms/spare_part/spare_part_request.dart | 3 + 18 files changed, 706 insertions(+), 452 deletions(-) diff --git a/lib/controllers/api_routes/api_manager.dart b/lib/controllers/api_routes/api_manager.dart index e78fb4ac..3dd80f7c 100644 --- a/lib/controllers/api_routes/api_manager.dart +++ b/lib/controllers/api_routes/api_manager.dart @@ -83,6 +83,39 @@ class ApiManager { return response; } + Future delete(String url, {Map? headers, required Map body}) async { + headers ??= {}; + + headers.addAll(_headers); + + Uri url0 = Uri.parse(url); + if (!kReleaseMode) { + print("URL:$url0"); + print("Headers:$headers"); + print("Body:$body"); + } + + var request = http.Request('DELETE', url0); + request.body = json.encode(body); + request.headers.addAll(headers); + + http.StreamedResponse streamedResponse = await request.send(); + http.Response response = await http.Response.fromStream(streamedResponse); + try { + if (response.statusCode == 401) { + showLoginDialog(); + } else { + if (jsonDecode(response.body) is Map) { + final message = jsonDecode(response.body)["message"]; + if (message != null && message.toString().isNotEmpty) { + Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG); + } + } + } + } catch (ex) {} + + return response; + } Future postWithOutBody(String url, {Map? headers}) async { headers ??= {}; diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb index 3c628376..d7591a23 100644 --- a/lib/l10n/app_ar.arb +++ b/lib/l10n/app_ar.arb @@ -6,6 +6,8 @@ "requestLockMessage": "انتظر حتى إكمال الطلب", "cancel": "إلغاء", "addActivity": "إضافة نشاط", + "doYouWantToCreateAnotherSparePartRequest": "هل تريد إنشاء طلب قطعة غيار آخر؟", + "sparePartActivitySuccess": "تم إنشاء نشاط طلب قطعة الغيار بنجاح", "confirm": "تاكيد", "done": "تم", "exit": "إغلاق", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 59d70aad..c37403ec 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -106,6 +106,8 @@ "deviceName": "Asset Name", "deviceImages": "Asset Images", "deviceModel": "Asset Model", + "doYouWantToCreateAnotherSparePartRequest": "Do you want to create another spare part request?", + "sparePartActivitySuccess": "Spare Part Request activity has been created successfully", "deviceRequired": "Asset Required", "deviceSN": "Asset Serial Number", "engineerName": "Engineer Name", diff --git a/lib/models/helper_data_models/maintenance_request/activity_maintenance_model.dart b/lib/models/helper_data_models/maintenance_request/activity_maintenance_model.dart index ab3dd456..fe444875 100644 --- a/lib/models/helper_data_models/maintenance_request/activity_maintenance_model.dart +++ b/lib/models/helper_data_models/maintenance_request/activity_maintenance_model.dart @@ -12,8 +12,8 @@ class ActivityMaintenanceHelperModel { Lookup? activityStatus; DateTime? startTime; DateTime? endTime; - int? workingHour; - int? travelHours; + num? workingHour; + num? travelHours; Lookup? repairLocation; SupplierDetails? supplier; String? assignedEmployeeId; @@ -22,17 +22,18 @@ class ActivityMaintenanceHelperModel { int? supplierEngineerId; DateTime? supplierStartTime; DateTime? supplierEndTime; - int? supplierWorkingHour; + num? supplierWorkingHour; // AssignedEmployee? assignedEmployee; WorkOrderAssignedEmployee? assignedEmployee; SuppEngineerWorkOrders? supEngineer; - MaintenanceActivityAssistantEmployees? modelAssistantEmployees; + ActivityMaintenanceAssistantEmployees? modelAssistantEmployees; List? assistantEmployees; ActivityMaintenanceHelperModel( {this.id, this.workOrderId, this.lastSituationId, + this.activityStatus, this.startTime, this.supplier, this.endTime, @@ -70,38 +71,13 @@ class ActivityMaintenanceHelperModel { data['supplierStartTime'] = supplierStartTime?.toIso8601String(); data['supplierEndTime'] = supplierEndTime?.toIso8601String(); data['supplierWorkingHour'] = supplierWorkingHour; - if (modelAssistantEmployees != null) { - data['assistantEmployees'] =[modelAssistantEmployees?.toJson()]; - // modelAssistantEmployees!.map((v) => v.toJson()).toList(); + if (assignedEmployee != null&&assignedEmployee?.userId!=null) { + data['assistantEmployees'] = [modelAssistantEmployees?.toJson()]; + } + else{ + data['assistantEmployees']=[]; } return data; } } -class MaintenanceActivityAssistantEmployees { - int? id; - String? userId; - DateTime? startDate; - DateTime? endDate; - int? workingHours; - String? technicalComment; - - MaintenanceActivityAssistantEmployees( - {this.id, - this.userId, - this.startDate, - this.endDate, - this.workingHours, - this.technicalComment}); - - Map toJson() { - final Map data = {}; - data['id'] = id??0; - data['userId'] = userId; - data['startDate'] = startDate?.toIso8601String(); - data['endDate'] = endDate?.toIso8601String(); - data['workingHours'] = workingHours; - data['technicalComment'] = technicalComment; - return data; - } -} diff --git a/lib/models/new_models/assistant_employee.dart b/lib/models/new_models/assistant_employee.dart index 570f9d66..29947d70 100644 --- a/lib/models/new_models/assistant_employee.dart +++ b/lib/models/new_models/assistant_employee.dart @@ -10,17 +10,9 @@ import 'package:test_sa/models/new_models/assigned_employee.dart'; class AssistantEmployees extends Base { String? userId; - DateTime? startDate; - DateTime? endDate; - int? workingHours; - String? technicalComment; AssistantEmployees({ this.id, this.user, - this.startDate, - this.technicalComment, - this.workingHours, - this.endDate, this.userId, }) : super(name: user?.name, identifier: user?.id); @@ -29,7 +21,6 @@ class AssistantEmployees extends Base { user = json['user'] != null ? AssignedEmployee.fromJson(json['user']) : null; name = user?.name; userId = user?.id; - identifier = user?.id; } diff --git a/lib/models/new_models/work_order_detail_model.dart b/lib/models/new_models/work_order_detail_model.dart index 5653322c..246c279a 100644 --- a/lib/models/new_models/work_order_detail_model.dart +++ b/lib/models/new_models/work_order_detail_model.dart @@ -328,7 +328,7 @@ class WorkOrderAssignedEmployee { class Activities { int? id; int? orderNo; - ActivityStatus? activityStatus; + Lookup? activityStatus; ActivityMaintenance? activityMaintenance; ActivitySparePart? activitySparePart; String ?activityType; @@ -345,7 +345,7 @@ class Activities { id = json['id']; orderNo = json['orderNo']; activityStatus = json['activityStatus'] != null - ? ActivityStatus.fromJson(json['activityStatus']) + ? Lookup.fromJson(json['activityStatus']) : null; activityMaintenance = json['activityMaintenance'] != null ? ActivityMaintenance.fromJson(json['activityMaintenance']) @@ -393,10 +393,10 @@ class ActivityStatus { } Map toJson() { - final Map data = Map(); - data['id'] = this.id; - data['name'] = this.name; - data['value'] = this.value; + final Map data = {}; + data['id'] = id; + data['name'] = name; + data['value'] = value; return data; } } @@ -599,16 +599,16 @@ class WorkOrderHistory { } class ActivityMaintenance { int? id; - int? activityStatus; + ActivityStatus? activityStatus; String? startTime; String? endTime; double? workingHours; double? travelHours; - RepairLocation? repairLocation; + Lookup? repairLocation; AssignedEmployee? assignedEmployee; String? technicalComment; - int? supplier; - int? supplierEngineer; + Lookup? supplier; + Lookup? supplierEngineer; String? supplierStartTime; String? supplierEndTime; double? supplierWorkingHours; @@ -632,21 +632,26 @@ class ActivityMaintenance { this.assistantEmployees}); ActivityMaintenance.fromJson(Map json) { + print('activity status i got is ${json['activityStatus']}'); id = json['id']; - activityStatus = json['activityStatus']; + activityStatus = json['activityStatus'] != null + ? ActivityStatus.fromJson(json['activityStatus']) + : null; startTime = json['startTime']; endTime = json['endTime']; workingHours = json['workingHours']; travelHours = json['travelHours']; repairLocation = json['repairLocation'] != null - ? RepairLocation.fromJson(json['repairLocation']) + ? Lookup.fromJson(json['repairLocation']) : null; assignedEmployee = json['assignedEmployee'] != null ? AssignedEmployee.fromJson(json['assignedEmployee']) : null; technicalComment = json['technicalComment']; - supplier = json['supplier']; - supplierEngineer = json['supplierEngineer']; + //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"]); + // supplierEngineer = json['supplierEngineer']; supplierStartTime = json['supplierStartTime']; supplierEndTime = json['supplierEndTime']; supplierWorkingHours = json['supplierWorkingHours']; @@ -686,6 +691,7 @@ class ActivityMaintenance { } } + class RepairLocation { int? id; String? name; @@ -734,12 +740,13 @@ class AssignedEmployee { } class ActivityMaintenanceAssistantEmployees { - String? startDate; - String? endDate; + DateTime? startDate; + DateTime? endDate; double? workingHours; String? technicalComment; AssignedEmployee? user; + ActivityMaintenanceAssistantEmployees( {this.startDate, this.endDate, @@ -748,23 +755,23 @@ class ActivityMaintenanceAssistantEmployees { this.user}); ActivityMaintenanceAssistantEmployees.fromJson(Map json) { - startDate = json['startDate']; - endDate = json['endDate']; + startDate = json['startDate']!=null?DateTime.parse(json['startDate']):null; + endDate = json['endDate']!=null?DateTime.parse(json['endDate']):null; workingHours = json['workingHours']; technicalComment = json['technicalComment']; user = json['user'] != null - ? new AssignedEmployee.fromJson(json['user']) + ? AssignedEmployee.fromJson(json['user']) : null; } Map toJson() { final Map data = {}; - data['startDate'] = startDate; - data['endDate'] = endDate; + data['startDate'] = startDate?.toIso8601String(); + data['endDate'] = endDate?.toIso8601String(); data['workingHours'] = workingHours; data['technicalComment'] = technicalComment; if (user != null) { - data['user'] = user!.toJson(); + data['userId'] = user?.userId; } return data; } diff --git a/lib/models/service_request/supplier_details.dart b/lib/models/service_request/supplier_details.dart index dfdcbf85..884206ad 100644 --- a/lib/models/service_request/supplier_details.dart +++ b/lib/models/service_request/supplier_details.dart @@ -232,7 +232,7 @@ class SuppPersons extends Base { }) : super(name: personName, identifier: id?.toString()); SuppPersons.fromJson(dynamic json) { - id = json['id']; + id = json['id']??0; identifier = id?.toString(); supplierId = json['supplierId'] ?? json["supplierContactId"]; personName = json['personName']; diff --git a/lib/new_views/common_widgets/single_item_drop_down_menu.dart b/lib/new_views/common_widgets/single_item_drop_down_menu.dart index 2793df0b..8672818a 100644 --- a/lib/new_views/common_widgets/single_item_drop_down_menu.dart +++ b/lib/new_views/common_widgets/single_item_drop_down_menu.dart @@ -53,9 +53,18 @@ class _SingleItemDropDownMenuState(widget.context); } + print('initial value i got is ${widget.initialValue?.identifier}'); + print('condition value ${X == NullableLoadingProvider}'); + if(widget.staticData!=null){ + + + for(int i = 0;i element.identifier == widget.initialValue?.identifier); - if (result?.isNotEmpty ?? false) _selectedItem = result!.first as T?; if (widget.onSelect != null && (widget.initialValue?.identifier ?? "") != (_selectedItem?.identifier ?? "")) { widget.onSelect!(_selectedItem); // Non-null assertion after null check diff --git a/lib/service_request_latest/request_detail_provider.dart b/lib/service_request_latest/request_detail_provider.dart index d27b249b..1385c5bf 100644 --- a/lib/service_request_latest/request_detail_provider.dart +++ b/lib/service_request_latest/request_detail_provider.dart @@ -13,12 +13,11 @@ import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_mo import 'package:test_sa/models/new_models/arrival_verification_type_model.dart'; import 'package:test_sa/models/new_models/dashboard_detail.dart'; import 'package:test_sa/models/new_models/work_order_detail_model.dart'; - +import 'package:test_sa/models/service_request/supplier_details.dart'; class RequestDetailProvider extends ChangeNotifier { final pageItemNumber = 10; - void reset() { nextPage = true; stateCode = null; @@ -61,23 +60,23 @@ class RequestDetailProvider extends ChangeNotifier { notifyListeners(); } - //UI models WorkOrderDetail? currentWorkOrder; - AssetRetiredHelperModel? assetRetiredHelperModel=AssetRetiredHelperModel(); - ActivityMaintenanceHelperModel? activityMaintenanceHelperModel=ActivityMaintenanceHelperModel(); + AssetRetiredHelperModel? assetRetiredHelperModel = AssetRetiredHelperModel(); + ActivityMaintenanceHelperModel? activityMaintenanceHelperModel = ActivityMaintenanceHelperModel(); SparePartHelperModel? sparePartHelperModel; - FixRemotelyHelperModel? fixRemotelyHelperModel=FixRemotelyHelperModel(); - NeedVisitHelperModel? needVisitHelperModel=NeedVisitHelperModel(); + FixRemotelyHelperModel? fixRemotelyHelperModel = FixRemotelyHelperModel(); + NeedVisitHelperModel? needVisitHelperModel = NeedVisitHelperModel(); NurseActionHelperModel? nurseActionHelperModel; - EngineerRejectHelperModel? engineerRejectHelperModel=EngineerRejectHelperModel(); - EngineerUpdateWorkOrderHelperModel? engineerUpdateWorkOrderHelperModel=EngineerUpdateWorkOrderHelperModel(); + EngineerRejectHelperModel? engineerRejectHelperModel = EngineerRejectHelperModel(); + EngineerUpdateWorkOrderHelperModel? engineerUpdateWorkOrderHelperModel = EngineerUpdateWorkOrderHelperModel(); WorkOrderHelperModel? workOrderHelperModel; void updateAssetRetiredHelperModel(AssetRetiredHelperModel? value) { assetRetiredHelperModel = value; notifyListeners(); } + void updateActivityMaintenanceHelperModel(ActivityMaintenanceHelperModel? value) { activityMaintenanceHelperModel = value; notifyListeners(); @@ -112,6 +111,7 @@ class RequestDetailProvider extends ChangeNotifier { engineerUpdateWorkOrderHelperModel = value; notifyListeners(); } + void updateWorkOrderHelperModel(WorkOrderHelperModel? value) { workOrderHelperModel = value; notifyListeners(); @@ -122,7 +122,6 @@ class RequestDetailProvider extends ChangeNotifier { notifyListeners(); } - int? stateCode; // true if there is next page in product list and false if not @@ -219,7 +218,7 @@ class RequestDetailProvider extends ChangeNotifier { //engineerRejectWorkOrder...... Future engineerRejectWorkOrder() async { - Response response ; + Response response; try { isLoading = true; response = await ApiManager.instance.post(URLs.engineerRejectUrl, body: engineerRejectHelperModel!.toJson()); @@ -248,7 +247,7 @@ class RequestDetailProvider extends ChangeNotifier { Response response; try { isLoading = true; - response = await ApiManager.instance.post(URLs.engineerFixRemotlyUrl, body: fixRemotelyHelperModel!.toJson()); + response = await ApiManager.instance.post(URLs.engineerFixRemotlyUrl, body: fixRemotelyHelperModel!.toJson()); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { updateCurrentWorkOrder(WorkOrderDetail.fromJson(json.decode(response.body))); @@ -291,6 +290,7 @@ class RequestDetailProvider extends ChangeNotifier { return -1; } } + //engineerUpdateNeedAVisitWorkOrder...... Future engineerUpdateNeedVisit() async { Response response; @@ -319,10 +319,10 @@ class RequestDetailProvider extends ChangeNotifier { } //engineerMarkAsFixed...... - Future engineerMarkAsFixed({required int workOrderId,required String feedback}) async { - Response response ; + Future engineerMarkAsFixed({required int workOrderId, required String feedback}) async { + Response response; try { - Map body = {'workOrderId': workOrderId, 'feedback': feedback}; + Map body = {'workOrderId': workOrderId, 'feedback': feedback}; isLoading = true; response = await ApiManager.instance.post(URLs.engineerMarkAsFixUrl, body: body); stateCode = response.statusCode; @@ -345,27 +345,27 @@ class RequestDetailProvider extends ChangeNotifier { } //engineer Confirm Arrive...... - Future engineerConfirmArrival({required int workOrderId, required int verificationTypeId, required String photoInfo, required String otp}) async { + Future engineerConfirmArrival({required int workOrderId, required int verificationTypeId, required String photoInfo, required String otp, required String assetNo}) async { + Response response; try { - Map body = {"workOrderId": workOrderId, "verificationTypeId": verificationTypeId, "photoInfo": photoInfo, "otp": otp}; + Map body = {"workOrderId": workOrderId, "verificationTypeId": verificationTypeId, "photoInfo": photoInfo, "otp": otp, "assetNumber": assetNo}; isLoading = true; - final response = await ApiManager.instance.post(URLs.engineerConfirmArriveUrl, body: body); + response = await ApiManager.instance.post(URLs.engineerConfirmArriveUrl, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { - CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); - print('response of Engineer mark as fixed ${commonResponseModel.toJson()}'); + print('response of Engineer confirm arrival ${response.body}'); notifyListeners(); isLoading = false; - return commonResponseModel; + return response.statusCode; } isLoading = false; notifyListeners(); - return CommonResponseModel(); + return response.statusCode; } catch (e) { log("engineer accept [error] : $e"); isLoading = false; notifyListeners(); - return CommonResponseModel(); + return -1; } } @@ -399,17 +399,17 @@ class RequestDetailProvider extends ChangeNotifier { //engineerUpdateWorkOrder...... Future engineerUpdateWorkOrder() async { // try { - 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(); - isLoading = false; - } - isLoading = false; + 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(); + isLoading = false; + } + isLoading = false; + notifyListeners(); // } // catch (e) { // log("engineer update workorder [error] : $e"); @@ -488,15 +488,16 @@ class RequestDetailProvider extends ChangeNotifier { return -1; } } + Future updateActivityMaintenance() async { isLoading = true; try { - final response = await ApiManager.instance.post( + final response = await ApiManager.instance.put( URLs.updateActivityMaintenanceUrl, body: activityMaintenanceHelperModel!.toJson(), ); stateCode = response.statusCode; - print('update response i got is ${response.body}'); + print('update response i got is ${response.statusCode}'); if (response.statusCode >= 200 && response.statusCode < 300) { // request.engineerName = employee.name; notifyListeners(); @@ -511,6 +512,25 @@ class RequestDetailProvider extends ChangeNotifier { } } + Future> getSupplierEngineerData({required String supplierName}) async { + try { + Response response = await ApiManager.instance.get("${URLs.getSuppliersAutoComplete}?searchText=$supplierName"); + stateCode = response.statusCode; + print('response i got is ${json.decode(response.body)["data"]}'); + List persons = []; + if (response.statusCode >= 200 && response.statusCode < 300) { + List categoriesListJson = json.decode(response.body)["data"][0]['suppPersons']; + persons = categoriesListJson.map((item) => SuppPersons.fromJson(item)).toList(); + } + notifyListeners(); + return persons; + } catch (error) { + stateCode = -1; + notifyListeners(); + return []; + } + } + Future deleteActivitySparePart({required int id, required int workOrderId}) async { isLoading = true; var body = { @@ -538,6 +558,7 @@ class RequestDetailProvider extends ChangeNotifier { return -1; } } + Future deleteActivityMaintenance({required int id, required int workOrderId}) async { isLoading = true; var body = { @@ -546,12 +567,12 @@ class RequestDetailProvider extends ChangeNotifier { }; try { //TODO replace with delete model... - final response = await ApiManager.instance.post( + final response = await ApiManager.instance.delete( URLs.deleteActivityMaintenanceUrl, body: body, ); stateCode = response.statusCode; - print('response of delete activity spare part is ${response.statusCode}'); + print('response of delete activity spare part is ${response.body}'); if (response.statusCode >= 200 && response.statusCode < 300) { //map to the model... @@ -590,32 +611,32 @@ class RequestDetailProvider extends ChangeNotifier { return -1; } } + Future createActivityMaintenanceRequest() async { isLoading = true; // try { - final response = await ApiManager.instance.post( - URLs.createActivityMaintenanceUrl, - body: activityMaintenanceHelperModel!.toJson(), - ); - stateCode = response.statusCode; - print('add maintenance activity response i got is ${response.body}'); - print('status code i got is ${response.statusCode}'); - if (response.statusCode >= 200 && response.statusCode < 300) { - // currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); - // updateCurrentWorkOrder(currentWorkOrder); - notifyListeners(); - print('status code in provider is ${response.statusCode}'); - return response.statusCode; - } - isLoading = false; + final response = await ApiManager.instance.post( + URLs.createActivityMaintenanceUrl, + body: activityMaintenanceHelperModel!.toJson(), + ); + stateCode = response.statusCode; + print('add maintenance activity response i got is ${response.body}'); + if (response.statusCode >= 200 && response.statusCode < 300) { + // currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); + // updateCurrentWorkOrder(currentWorkOrder); notifyListeners(); return response.statusCode; + } + isLoading = false; + notifyListeners(); + return response.statusCode; // } catch (error) { // isLoading = false; // notifyListeners(); // return -1; // } } + //create asset retired request.. Future createActivityAssetToBeRetired() async { isLoading = true; @@ -643,14 +664,14 @@ class RequestDetailProvider extends ChangeNotifier { //get Arrival type...... Future getArrivalVerificationType() async { - ArrivalVerificationTypeModel arrivalVerificationTypeModel= ArrivalVerificationTypeModel(); + ArrivalVerificationTypeModel arrivalVerificationTypeModel = ArrivalVerificationTypeModel(); try { isLoading = true; notifyListeners(); final response = await ApiManager.instance.get(URLs.getArrivalVerificationTypeUrl); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { - arrivalVerificationTypeModel = ArrivalVerificationTypeModel.fromJson(json.decode(response.body)); + arrivalVerificationTypeModel = ArrivalVerificationTypeModel.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); @@ -668,9 +689,9 @@ class RequestDetailProvider extends ChangeNotifier { isLoading = true; try { final response = await ApiManager.instance.postWithOutBody( - URLs.sendOtpUrl+ "$workOrderId", + URLs.sendOtpUrl + "$workOrderId", ); - print('url for send otp is ${URLs.sendOtpUrl+ "$workOrderId"}'); + print('url for send otp is ${URLs.sendOtpUrl + "$workOrderId"}'); stateCode = response.statusCode; print('response i got is ${response.body}'); @@ -686,12 +707,13 @@ class RequestDetailProvider extends ChangeNotifier { return -1; } } + //verify otp.. - Future verifyOtp({required int workOrderId,required String otpCode}) async { + Future verifyOtp({required int workOrderId, required String otpCode}) async { isLoading = true; try { final response = await ApiManager.instance.postWithOutBody( - URLs.verifyOtpUrl+'$workOrderId&$otpCode', + URLs.verifyOtpUrl + '$workOrderId&$otpCode', ); print('response i got is ${response.body}'); stateCode = response.statusCode; diff --git a/lib/service_request_latest/views/components/activities_list_view.dart b/lib/service_request_latest/views/components/activities_list_view.dart index 967a5554..53d64787 100644 --- a/lib/service_request_latest/views/components/activities_list_view.dart +++ b/lib/service_request_latest/views/components/activities_list_view.dart @@ -7,9 +7,13 @@ import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/enums/user_types.dart'; +import 'package:test_sa/models/helper_data_models/maintenance_request/activity_maintenance_model.dart'; import 'package:test_sa/models/helper_data_models/spare_part/activity_spare_part_model.dart'; +import 'package:test_sa/models/new_models/assistant_employee.dart'; import 'package:test_sa/models/new_models/work_order_detail_model.dart'; import 'package:test_sa/models/service_request/spare_parts.dart'; +import 'package:test_sa/models/service_request/supp_engineer_work_orders.dart'; +import 'package:test_sa/models/service_request/supplier_details.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_lazy_loading.dart'; @@ -191,31 +195,12 @@ class ActivitiesListView extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() { - requestDetailProvider.sparePartHelperModel = SparePartHelperModel( - id: activity.id, - workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId, - comment: activity.activitySparePart?.comment, - sparePartAttachments: activity.activitySparePart?.acitiySparePartAttachments ?? [], - sparePart: SparePart( - id: activity.activitySparePart?.partCatalogItem?.id, - partName: activity.activitySparePart?.partCatalogItem?.partName, - partNo: activity.activitySparePart?.partCatalogItem?.partNumber), - quantity: activity.activitySparePart?.quantity, - activityStatusId: activity.activityStatus?.id, -//TODO commets are missing in api response.. -// comment: activity.activitySparePart?.description, - ); - - requestDetailProvider.updateSparePartHelperModel(requestDetailProvider.sparePartHelperModel); - - Navigator.of(context).push(MaterialPageRoute( - builder: (_) => const MaintenanceRequestForm(), - )); + onEditPress(context: context, requestDetailProvider: requestDetailProvider, activity: activity); }), 24.width, "delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async { showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); - int status = await requestDetailProvider.deleteActivitySparePart(id: activity.id!, workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!); + int status = await requestDetailProvider.deleteActivityMaintenance(id: activity.id!, workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!); if (status == 200) { await requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); Navigator.pop(context); @@ -271,4 +256,64 @@ class ActivitiesListView extends StatelessWidget { // ); }); } + + void onEditPress({required BuildContext context, required RequestDetailProvider requestDetailProvider, required Activities activity}) async { + Map assistEmpData = {}; + try { + if (activity.activityMaintenance?.assistantEmployees != null && activity.activityMaintenance!.assistantEmployees!.isNotEmpty) { + assistEmpData = { + // 'id': activity.activityMaintenance?.assistantEmployees?[0].user?.userId != null ? num.tryParse(activity.activityMaintenance!.assistantEmployees![0].user!.userId!) : null, + 'id': null, + 'user': { + 'id': activity.activityMaintenance?.assistantEmployees?[0].user?.userId, + // 'id': activity.activityMaintenance?.assistantEmployees?[0].user?.userId != null ? num.tryParse(activity.activityMaintenance!.assistantEmployees![0].user!.userId!) : null, + 'name': activity.activityMaintenance?.assistantEmployees?[0].user?.userName, + }, + }; + } + + requestDetailProvider.activityMaintenanceHelperModel = ActivityMaintenanceHelperModel( + id: activity.id, + 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, + workingHour: activity.activityMaintenance?.workingHours ?? 0, + travelHours: activity.activityMaintenance?.travelHours ?? 0, + repairLocation: activity.activityMaintenance?.repairLocation, + assignedEmployee: activity.activityMaintenance?.assignedEmployee != null ? WorkOrderAssignedEmployee.fromJson(activity.activityMaintenance!.assignedEmployee!.toJson()) : null, + technicalComment: activity.activityMaintenance?.technicalComment, + assistantEmployees: + activity.activityMaintenance?.assistantEmployees != null && activity.activityMaintenance!.assistantEmployees!.isNotEmpty ? [AssistantEmployees.fromJson(assistEmpData)] : [], + modelAssistantEmployees: + activity.activityMaintenance?.assistantEmployees != null && activity.activityMaintenance!.assistantEmployees!.isNotEmpty ? activity.activityMaintenance!.assistantEmployees![0] : null, + supplierStartTime: activity.activityMaintenance?.supplierStartTime != null ? DateTime.parse(activity.activityMaintenance!.supplierStartTime!) : null, + supplierEndTime: activity.activityMaintenance?.supplierEndTime != null ? DateTime.parse(activity.activityMaintenance!.supplierEndTime!) : null, + supplierWorkingHour: activity.activityMaintenance?.supplierWorkingHours, + supplier: activity.activityMaintenance?.supplier != null + ? SupplierDetails( + id: activity.activityMaintenance?.supplier?.id, + suppliername: activity.activityMaintenance?.supplier?.name, + ) + : null, + supEngineer: activity.activityMaintenance?.supplier != null + ? SuppEngineerWorkOrders( + id: activity.activityMaintenance?.supplierEngineer?.id, + personName: activity.activityMaintenance?.supplierEngineer?.name, + ) + : null, + ); + if (activity.activityMaintenance?.supplier != null) { + requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppPersons = await requestDetailProvider.getSupplierEngineerData(supplierName: activity.activityMaintenance!.supplier!.name!); + } + requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel); + // return; + } catch (e) { + print("Edit error $e"); + } + + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => const MaintenanceRequestForm(), + )); + } } diff --git a/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart b/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart index 2c746eaf..04513ab2 100644 --- a/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart +++ b/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart @@ -11,6 +11,7 @@ import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/enums/work_order_next_step.dart'; +import 'package:test_sa/models/helper_data_models/maintenance_request/activity_maintenance_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/lookup.dart'; @@ -550,6 +551,12 @@ class ServiceRequestBottomSheet { ); break; case 1: + RequestDetailProvider requestDetailProvider= Provider.of(context,listen: false); + requestDetailProvider.activityMaintenanceHelperModel = ActivityMaintenanceHelperModel( + workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId, + id: 0, + assignedEmployee: requestDetailProvider.currentWorkOrder?.data?.assignedEmployee, + ); Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => const MaintenanceRequestForm()), @@ -677,6 +684,52 @@ class ServiceRequestBottomSheet { ).bottomSheetContainer(context); })); } +static Future addAnotherSpareRequestBottomSheet({required BuildContext context}) { + return buildBottomSheetParent( + context: context, + childWidget: Consumer(builder: (context, serviceRequestProvider, child) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + const SizedBox().indicatorWidget(), + 8.height, + Align( + alignment: AlignmentDirectional.centerStart, + child: context.translation.doYouWantToCreateAnotherSparePartRequest.heading6(context), + ), + 41.height, + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + AppFilledButton( + label: context.translation.no, + loading: false, + buttonColor: AppColor.white60, + textColor: AppColor.black10, + onPressed: () async { + Navigator.pop(context); + }, + ).expanded, + 12.width, + AppFilledButton( + label: context.translation.yes, + buttonColor: AppColor.primary10, + loading: false, + onPressed: (){ + Provider.of(context,listen: false).sparePartHelperModel = SparePartHelperModel(); + Navigator.pushReplacement( + context, + MaterialPageRoute(builder: (context) => const SparePartRequest()), + ); + }, + ).expanded, + ], + ) + ], + ); + })); + + } static Future feedBackBottomSheet({required BuildContext context}) { String feedback = ''; diff --git a/lib/service_request_latest/views/components/verify_arrival_view.dart b/lib/service_request_latest/views/components/verify_arrival_view.dart index 50a0c2d2..db898fa7 100644 --- a/lib/service_request_latest/views/components/verify_arrival_view.dart +++ b/lib/service_request_latest/views/components/verify_arrival_view.dart @@ -1,5 +1,10 @@ +import 'dart:convert'; +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:image_picker/image_picker.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/app_strings/app_asset.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; @@ -15,6 +20,7 @@ import 'package:test_sa/service_request_latest/request_detail_provider.dart'; import 'package:test_sa/service_request_latest/views/components/verify_otp_view.dart'; import 'package:test_sa/service_request_latest/views/forms/asset_retired/asset_retired.dart'; import 'package:test_sa/service_request_latest/views/forms/asset_retired/verify_asset_detail.dart'; +import 'package:test_sa/service_request_latest/views/request_detail_main_view.dart'; import 'package:test_sa/views/widgets/qr/scan_qr.dart'; import 'activities_list_view.dart'; @@ -27,26 +33,32 @@ class VerifyArrivalView extends StatefulWidget { } class _VerifyArrivalViewState extends State { - - ArrivalVerificationTypeModel ? arrivalVerificationTypeModel; + ArrivalVerificationTypeModel? arrivalVerificationTypeModel; @override void initState() { //TODO call this when all data is confirmed // getInitialData(); + WidgetsBinding.instance.addPostFrameCallback((_) { + getInitialData(); + }); super.initState(); } - Future getInitialData() async{ - RequestDetailProvider requestDetailProvider = Provider.of(context,listen: false); - arrivalVerificationTypeModel = await requestDetailProvider.getArrivalVerificationType(); + + Future getInitialData() async { + RequestDetailProvider requestDetailProvider = Provider.of(context, listen: false); + arrivalVerificationTypeModel = await requestDetailProvider.getArrivalVerificationType(); + print('data i got is${arrivalVerificationTypeModel?.data?.first?.verificationTypeId}'); } + + @override Widget build(BuildContext context) { //TODO replace the list with Api... - final List> items = [ - {'heading': context.translation.scanQr, 'subHeading': context.translation.scanQrDetail, 'icon': AppAsset.scanQrIcon}, - {'heading': context.translation.askRequester, 'subHeading': context.translation.askRequesterDetail, 'icon': AppAsset.askRequesterIcon}, - {'heading': context.translation.askOtp, 'subHeading': context.translation.askOtpDetail, 'icon': AppAsset.askOtpIcon}, - {'heading': context.translation.takeDevicePhoto, 'subHeading': context.translation.takeDevicePhotoDetail, 'icon': AppAsset.takeDevicePhotoIcon}, + final List> items = [ + {'heading': context.translation.scanQr, 'subHeading': context.translation.scanQrDetail, 'icon': AppAsset.scanQrIcon, 'id': 1}, + {'heading': context.translation.askRequester, 'subHeading': context.translation.askRequesterDetail, 'icon': AppAsset.askRequesterIcon, 'id': 2}, + {'heading': context.translation.askOtp, 'subHeading': context.translation.askOtpDetail, 'icon': AppAsset.askOtpIcon, 'id': 3}, + {'heading': context.translation.takeDevicePhoto, 'subHeading': context.translation.takeDevicePhotoDetail, 'icon': AppAsset.takeDevicePhotoIcon, 'id': 4}, ]; return Scaffold( appBar: DefaultAppBar(title: context.translation.verifyArrival), @@ -121,29 +133,69 @@ class _VerifyArrivalViewState extends State { ); } - void onItemTap({required int index, required RequestDetailProvider requestDetailProvider, required BuildContext context}) { + void onItemTap({required int index, required RequestDetailProvider requestDetailProvider, required BuildContext context}) async { switch (index) { case 0: - // Navigator.push( - // context, - // MaterialPageRoute(builder: (context) => const ActivitiesListView()), - // ); + int? status; + String? result = await Navigator.of(context).push( + MaterialPageRoute(builder: (_) => const ScanQr()), + ) as String?; + if (result != null) { + try { + status = await requestDetailProvider.engineerConfirmArrival( + workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!, + verificationTypeId: 1, + photoInfo: '', + otp: '', + assetNo: requestDetailProvider.currentWorkOrder!.data!.asset!.assetNumber!); + print('status i got is $status'); + if (status == 200) { + requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); + Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => RequestDetailMain(requestId: requestDetailProvider.currentWorkOrder!.data!.requestId!))); + } + else { + //show some message. + } + } catch (e) { + print('error i got is $e'); + } + } break; case 1: - // Navigator.push( - // context, - // MaterialPageRoute(builder: (context) => const AssetRetired()), - // ); + Fluttertoast.showToast(msg: 'Under process...' ?? "", toastLength: Toast.LENGTH_LONG); break; case 2: - //TODO api has error need to fixed by ahmed... - requestDetailProvider.sendOtp(workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!); + requestDetailProvider.sendOtp(workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!); Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => const VerifyOtpView()), ); break; case 3: + File ?pickedFile = await onFilePicker(); + if(pickedFile!=null){ + var fileObj = ("${pickedFile.path.split("/").last}|${base64Encode(File(pickedFile.path).readAsBytesSync())}"); + int? status; + try{ + status = await requestDetailProvider.engineerConfirmArrival( + workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!, + verificationTypeId: 1, + photoInfo: fileObj, + otp: '', + assetNo: ''); + print('status i got is $status'); + if (status == 200) { + requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); + Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => RequestDetailMain(requestId: requestDetailProvider.currentWorkOrder!.data!.requestId!))); + } + else{ + //show some message. + } + }catch(e){ + print('error i got is $e'); + } + } + // Navigator.push( // context, // MaterialPageRoute(builder: (context) => const VerifyAssetDetails()), @@ -157,4 +209,63 @@ class _VerifyArrivalViewState extends State { } // ScanQr } + Future onFilePicker() async { + + ImageSource? source = await showModalBottomSheet( + context: context, + builder: (BuildContext context) { + Widget listCard({required String icon, required String label, required VoidCallback onTap}) { + return GestureDetector( + onTap: onTap, + child: Container( + constraints: BoxConstraints(minWidth: 111.toScreenWidth, minHeight: 111.toScreenHeight), + padding: EdgeInsets.symmetric(horizontal: 12.toScreenWidth, vertical: 12.toScreenHeight), + decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), border: Border.all(width: 1, color: AppColor.white70)), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + icon.toSvgAsset(), + 24.height, + label.bodyText2(context).custom(color: AppColor.black20), + ], + ), + ), + ); + } + + return Container( + padding: const EdgeInsets.all(16.0), + child: Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + listCard( + icon: 'camera_icon', + label: '${context.translation.open}\n${context.translation.camera}', + onTap: () { + Navigator.of(context).pop(ImageSource.camera); + }, + ), + 20.width, + listCard( + icon: 'gallery_icon', + label: '${context.translation.open}\n${context.translation.gallery}', + onTap: () { + Navigator.of(context).pop(ImageSource.gallery); + }, + ), + ], + ), + ); + }, + ); + if (source == null) return null; + File ?fileImage; + final pickedFile = await ImagePicker().pickImage(source: source, imageQuality: 70, maxWidth: 800, maxHeight: 800); + + if (pickedFile != null) { + fileImage = File(pickedFile.path); + } +return fileImage; + } } diff --git a/lib/service_request_latest/views/components/verify_otp_view.dart b/lib/service_request_latest/views/components/verify_otp_view.dart index 70a81feb..6393e78e 100644 --- a/lib/service_request_latest/views/components/verify_otp_view.dart +++ b/lib/service_request_latest/views/components/verify_otp_view.dart @@ -54,12 +54,13 @@ class VerifyOtpView extends StatelessWidget { RequestDetailProvider requestDetailProvider = Provider.of(context, listen: false); int? status; status = await requestDetailProvider.verifyOtp(workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!, otpCode: pin); - print('status i got is $status'); - if (status == 200) { - await requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); - await requestDetailProvider.engineerConfirmArrival(workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!,verificationTypeId: 3,photoInfo: '',otp: pin); - Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => RequestDetailMain(requestId: requestDetailProvider.currentWorkOrder!.data!.requestId!))); - } + print('status i got is $status'); + if (status == 200) { + await requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); + await requestDetailProvider.engineerConfirmArrival( + workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!, verificationTypeId: 3, photoInfo: '', otp: pin, assetNo: ''); + Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => RequestDetailMain(requestId: requestDetailProvider.currentWorkOrder!.data!.requestId!))); + } }, ), ).paddingOnly(top: 24, bottom: 24), diff --git a/lib/service_request_latest/views/forms/maintenance_request/components/assistant_employee_card.dart b/lib/service_request_latest/views/forms/maintenance_request/components/assistant_employee_card.dart index c225bc47..d85d839c 100644 --- a/lib/service_request_latest/views/forms/maintenance_request/components/assistant_employee_card.dart +++ b/lib/service_request_latest/views/forms/maintenance_request/components/assistant_employee_card.dart @@ -7,6 +7,7 @@ import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/helper_data_models/maintenance_request/activity_maintenance_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/common_widgets/app_text_form_field.dart'; import 'package:test_sa/service_request_latest/request_detail_provider.dart'; @@ -84,11 +85,12 @@ class _AssistantEmployeeCardState extends State { //TODO add check... // enable: !isCurrentUserIsAssistantEmp, onSelect: (employee) { + print('on select called...${employee?.toJson()}'); if (employee == null) { requestDetailProvider.activityMaintenanceHelperModel?.assistantEmployees = []; } else { requestDetailProvider.activityMaintenanceHelperModel?.assistantEmployees = [employee.copyWith(id: 0)]; - requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.userId = employee.user?.id; + requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.user?.userId=employee.user?.id; } }, @@ -200,19 +202,19 @@ class _AssistantEmployeeCardState extends State { } //TODO move this to some common place....@waseem - int calculateWorkingHours(DateTime? startTime, DateTime? endTime) { + double calculateWorkingHours(DateTime? startTime, DateTime? endTime) { if (startTime != null && endTime != null) { Duration difference = endTime.difference(startTime); - int hours = difference.inHours; + int hours = difference.inHours ; int minutes = difference.inMinutes % 60; - return hours; + return hours.toDouble(); } else { return -1; } } assignWorkingHours({required RequestDetailProvider requestDetailProvider}) { - int hours = calculateWorkingHours( + double hours = calculateWorkingHours( requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.startDate, requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.endDate); if (hours != -1) { _workingHoursController.text = hours.toString(); diff --git a/lib/service_request_latest/views/forms/maintenance_request/components/external_request.dart b/lib/service_request_latest/views/forms/maintenance_request/components/external_request.dart index 5cb86b04..cd00b962 100644 --- a/lib/service_request_latest/views/forms/maintenance_request/components/external_request.dart +++ b/lib/service_request_latest/views/forms/maintenance_request/components/external_request.dart @@ -1,4 +1,3 @@ - import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/parts_provider.dart'; @@ -42,208 +41,213 @@ class ExternalMaintenanceRequest extends StatefulWidget { } class _ExternalMaintenanceRequestState extends State with TickerProviderStateMixin { - - ServiceReport ?_serviceReport; + ServiceReport? _serviceReport; final TextEditingController _workingHoursController = TextEditingController(); final GlobalKey _formKey = GlobalKey(); + @override void initState() { + getInitialData(); super.initState(); } + void getInitialData() { + RequestDetailProvider requestDetailProvider = Provider.of(context, listen: false); + _workingHoursController.text = + requestDetailProvider.activityMaintenanceHelperModel?.supplierWorkingHour != null ? requestDetailProvider.activityMaintenanceHelperModel!.supplierWorkingHour.toString() : ''; + + } @override Widget build(BuildContext context) { - - return Consumer( - builder: (context, RequestDetailProvider requestDetailProvider,child) { - return Column( - children: [ - Form( - key: _formKey, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - SingleItemDropDownMenu( - context: context, - title: context.translation.supplier, - backgroundColor: AppColor.neutral100, - initialValue: requestDetailProvider.activityMaintenanceHelperModel?.supplier, - showAsBottomSheet: true, - onSelect: (supplier) { - if (supplier != null) { - requestDetailProvider.activityMaintenanceHelperModel?.supplier=supplier; - print('engineer is ${supplier.suppPersons?.length}'); - // _subWorkOrders.supplier = supplier; - // log(_subWorkOrders.supplier?.suppPersons?.map((e) => e.personName)?.toString()); - setState(() {}); - } - }, - ), - 8.height, - Row( - children: [ - SingleItemDropDownMenu( - context: context, - backgroundColor: requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppliername == null ? AppColor.neutral40 : AppColor.neutral100, - title: context.translation.supplierEngineer, - enabled: requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppPersons?.isNotEmpty ?? false, - staticData:requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppPersons, - showAsBottomSheet: true, - initialValue: requestDetailProvider.activityMaintenanceHelperModel?.supEngineer == null ? null : SuppPersons.fromJson(requestDetailProvider.activityMaintenanceHelperModel?.supEngineer?.toJson()), - onSelect: (suppPerson) { - print(suppPerson?.toJson()); - if (suppPerson != null) { - requestDetailProvider.activityMaintenanceHelperModel?.supEngineer = SuppEngineerWorkOrders.fromJson(suppPerson.toJson()); - requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel); - // engineer = SuppEngineerWorkOrders( - // id: suppPerson?.supplierId, - // supplierContactId: suppPerson?.id, - // personName: suppPerson?.personName, - // contact: suppPerson?.contact, - // externalEngCode: suppPerson?.externalEngCode, - // email: suppPerson?.email, - // ); + return Consumer(builder: (context, RequestDetailProvider requestDetailProvider, child) { + return Column( + children: [ + Form( + key: _formKey, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SingleItemDropDownMenu( + context: context, + title: context.translation.supplier, + backgroundColor: AppColor.neutral100, + initialValue: requestDetailProvider.activityMaintenanceHelperModel?.supplier, + showAsBottomSheet: true, + onSelect: (supplier) { + if (supplier != null) { + requestDetailProvider.activityMaintenanceHelperModel?.supplier = supplier; + // _subWorkOrders.supplier = supplier; + // log(_subWorkOrders.supplier?.suppPersons?.map((e) => e.personName)?.toString()); + setState(() {}); + } + }, + ), + 8.height, + Row( + children: [ + SingleItemDropDownMenu( + context: context, + backgroundColor: requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppliername == null ? AppColor.neutral40 : AppColor.neutral100, + title: context.translation.supplierEngineer, + enabled: requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppPersons?.isNotEmpty ?? false, + staticData: requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppPersons, + showAsBottomSheet: true, + initialValue: requestDetailProvider.activityMaintenanceHelperModel?.supEngineer == null + ? null + : SuppPersons.fromJson(requestDetailProvider.activityMaintenanceHelperModel?.supEngineer?.toJson()), + onSelect: (suppPerson) { + print(suppPerson?.toJson()); + if (suppPerson != null) { + requestDetailProvider.activityMaintenanceHelperModel?.supEngineer = SuppEngineerWorkOrders.fromJson(suppPerson.toJson()); + requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel); + // engineer = SuppEngineerWorkOrders( + // id: suppPerson?.supplierId, + // supplierContactId: suppPerson?.id, + // personName: suppPerson?.personName, + // contact: suppPerson?.contact, + // externalEngCode: suppPerson?.externalEngCode, + // email: suppPerson?.email, + // ); + setState(() {}); + } + }, + ).expanded, + 8.width, + Container( + height: 56.toScreenHeight, + width: 60.toScreenWidth, + decoration: BoxDecoration( + color: requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppliername == null ? AppColor.neutral40 : AppColor.neutral100, + borderRadius: BorderRadius.circular(10), + boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], + ), + child: Icon( + Icons.add, + color: context.isDark ? null : AppColor.neutral60, + ), + ).onPress(requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppliername == null + ? null + : () async { + SuppEngineerWorkOrders suppEngineer = (await showModalBottomSheet( + context: context, + useSafeArea: true, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (context) => AddSupplierEngineerBottomSheet(requestDetailProvider.activityMaintenanceHelperModel!.supplier!.id!.toInt()), + )) as SuppEngineerWorkOrders; + requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppPersons ??= []; + requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppPersons?.add(SuppPersons.fromJson(suppEngineer.toJson())); + requestDetailProvider.activityMaintenanceHelperModel?.supEngineer = suppEngineer; setState(() {}); + }), + ], + ), + 8.height, + Row( + mainAxisSize: MainAxisSize.min, + children: [ + ADatePicker( + label: context.translation.startTime, + hideShadow: true, + backgroundColor: AppColor.neutral100, + date: requestDetailProvider.activityMaintenanceHelperModel?.supplierStartTime, + formatDateWithTime: true, + onDatePicker: (selectedDate) { + showTimePicker( + context: context, + initialTime: TimeOfDay.now(), + ).then((selectedTime) { + // Handle the selected date and time here. + if (selectedTime != null) { + DateTime selectedDateTime = DateTime( + selectedDate.year, + selectedDate.month, + selectedDate.day, + selectedTime.hour, + selectedTime.minute, + ); + requestDetailProvider.activityMaintenanceHelperModel?.supplierStartTime = selectedDateTime; + requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel); + assignWorkingHours(requestDetailProvider: requestDetailProvider); } - }, - ).expanded, - 8.width, - Container( - height: 56.toScreenHeight, - width: 60.toScreenWidth, - decoration: BoxDecoration( - color: requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppliername == null ? AppColor.neutral40 : AppColor.neutral100, - borderRadius: BorderRadius.circular(10), - boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], - ), - child: Icon( - Icons.add, - color: context.isDark ? null : AppColor.neutral60, - ), - ).onPress(requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppliername == null - ? null - : () async { - SuppEngineerWorkOrders suppEngineer = (await showModalBottomSheet( + }); + }, + ).expanded, + 8.width, + ADatePicker( + label: context.translation.endTime, + hideShadow: true, + backgroundColor: AppColor.neutral100, + date: requestDetailProvider.activityMaintenanceHelperModel?.supplierEndTime, + formatDateWithTime: true, + onDatePicker: (selectedDate) { + showTimePicker( context: context, - useSafeArea: true, - isScrollControlled: true, - backgroundColor: Colors.transparent, - builder: (context) => AddSupplierEngineerBottomSheet(requestDetailProvider.activityMaintenanceHelperModel!.supplier!.id!.toInt()), - )) as SuppEngineerWorkOrders; - requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppPersons ??= []; - requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppPersons?.add(SuppPersons.fromJson(suppEngineer.toJson())); - requestDetailProvider.activityMaintenanceHelperModel?.supEngineer = suppEngineer; - setState(() {}); - }), - ], - ), - 8.height, - Row( - mainAxisSize: MainAxisSize.min, - children: [ - ADatePicker( - label: context.translation.startTime, - hideShadow: true, - backgroundColor: AppColor.neutral100, - date: requestDetailProvider.activityMaintenanceHelperModel?.supplierStartTime, - formatDateWithTime: true, - onDatePicker: (selectedDate) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - // Handle the selected date and time here. - if (selectedTime != null) { - DateTime selectedDateTime = DateTime( - selectedDate.year, - selectedDate.month, - selectedDate.day, - selectedTime.hour, - selectedTime.minute, - ); - requestDetailProvider.activityMaintenanceHelperModel?.supplierStartTime = selectedDateTime; - requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel); - assignWorkingHours(requestDetailProvider: requestDetailProvider); - } - }); - }, - ).expanded, - 8.width, - ADatePicker( - label: context.translation.endTime, - hideShadow: true, - backgroundColor: AppColor.neutral100, - date: requestDetailProvider.activityMaintenanceHelperModel?.supplierEndTime, - formatDateWithTime: true, - onDatePicker: (selectedDate) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - // Handle the selected date and time here. - if (selectedTime != null) { - DateTime selectedDateTime = DateTime( - selectedDate.year, - selectedDate.month, - selectedDate.day, - selectedTime.hour, - selectedTime.minute, - ); - if (requestDetailProvider.activityMaintenanceHelperModel!.supplierStartTime!=null&&selectedDateTime.isBefore(requestDetailProvider.activityMaintenanceHelperModel!.supplierStartTime!)) { - "End Date time must be greater then start date".showToast; - return; - } - requestDetailProvider.activityMaintenanceHelperModel?.supplierEndTime = selectedDateTime; - requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel); - assignWorkingHours(requestDetailProvider: requestDetailProvider); - + initialTime: TimeOfDay.now(), + ).then((selectedTime) { + // Handle the selected date and time here. + if (selectedTime != null) { + DateTime selectedDateTime = DateTime( + selectedDate.year, + selectedDate.month, + selectedDate.day, + selectedTime.hour, + selectedTime.minute, + ); + if (requestDetailProvider.activityMaintenanceHelperModel!.supplierStartTime != null && + selectedDateTime.isBefore(requestDetailProvider.activityMaintenanceHelperModel!.supplierStartTime!)) { + "End Date time must be greater then start date".showToast; + return; } - }); - }, - ).expanded, - ], - ), - 8.height, - AppTextFormField( - labelText: context.translation.workingHours, - backgroundColor: AppColor.neutral80, - controller: _workingHoursController, - suffixIcon: "clock".toSvgAsset(width: 20, color: context.isDark ? AppColor.neutral10 : null).paddingOnly(end: 16), - initialValue:requestDetailProvider.activityMaintenanceHelperModel?.supplierWorkingHour!=null? requestDetailProvider.activityMaintenanceHelperModel?.supplierWorkingHour.toString():'', - textAlign: TextAlign.center, - labelStyle: AppTextStyles.textFieldLabelStyle, - enable: false, - showShadow: false, - style: Theme.of(context).textTheme.titleMedium, - ), - 8.height, - - ], - ), - ).toShadowContainer(context).paddingOnly(start: 16, end: 16, top: 12), - ], - ); - } - ); + requestDetailProvider.activityMaintenanceHelperModel?.supplierEndTime = selectedDateTime; + requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel); + assignWorkingHours(requestDetailProvider: requestDetailProvider); + } + }); + }, + ).expanded, + ], + ), + 8.height, + AppTextFormField( + labelText: context.translation.workingHours, + backgroundColor: AppColor.neutral80, + controller: _workingHoursController, + suffixIcon: "clock".toSvgAsset(width: 20, color: context.isDark ? AppColor.neutral10 : null).paddingOnly(end: 16), + initialValue: + requestDetailProvider.activityMaintenanceHelperModel?.supplierWorkingHour != null ? requestDetailProvider.activityMaintenanceHelperModel?.supplierWorkingHour.toString() : '', + textAlign: TextAlign.center, + labelStyle: AppTextStyles.textFieldLabelStyle, + enable: false, + showShadow: false, + style: Theme.of(context).textTheme.titleMedium, + ), + 8.height, + ], + ), + ).toShadowContainer(context).paddingOnly(start: 16, end: 16, top: 12), + ], + ); + }); } int calculateWorkingHours(DateTime? startTime, DateTime? endTime) { - if(startTime!=null&&endTime!=null){ + if (startTime != null && endTime != null) { Duration difference = endTime.difference(startTime); int hours = difference.inHours; int minutes = difference.inMinutes % 60; return hours; - }else{ + } else { return -1; } } - assignWorkingHours({required RequestDetailProvider requestDetailProvider}){ - int hours = calculateWorkingHours(requestDetailProvider.activityMaintenanceHelperModel!.supplierStartTime,requestDetailProvider.activityMaintenanceHelperModel!.supplierEndTime); - if(hours!=-1){ + assignWorkingHours({required RequestDetailProvider requestDetailProvider}) { + int hours = calculateWorkingHours(requestDetailProvider.activityMaintenanceHelperModel!.supplierStartTime, requestDetailProvider.activityMaintenanceHelperModel!.supplierEndTime); + if (hours != -1) { _workingHoursController.text = hours.toString(); - requestDetailProvider.activityMaintenanceHelperModel!.workingHour=hours; + requestDetailProvider.activityMaintenanceHelperModel!.workingHour = hours; } } } diff --git a/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart b/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart index 80083577..389f9404 100644 --- a/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart +++ b/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart @@ -46,19 +46,19 @@ class _InternalMaintenanceRequestState extends State final GlobalKey _formKey = GlobalKey(); final TextEditingController _workingHoursController = TextEditingController(); - final TextEditingController _partQtyController = TextEditingController(); + final TextEditingController _travellingHoursController = TextEditingController(); @override void initState() { - _activityStatusProvider = Provider.of(context, listen: false); _requestDetailProvider = Provider.of(context, listen: false); - _requestDetailProvider?.activityMaintenanceHelperModel?.assignedEmployee = _requestDetailProvider?.currentWorkOrder?.data?.assignedEmployee; - _requestDetailProvider?.activityMaintenanceHelperModel?.workOrderId = _requestDetailProvider?.currentWorkOrder?.data?.requestId; _requestDetailProvider?.activityMaintenanceHelperModel?.lastSituationId = _requestDetailProvider?.currentWorkOrder?.data?.status?.id; super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { + + _travellingHoursController.text = + _requestDetailProvider?.activityMaintenanceHelperModel?.travelHours != null ? _requestDetailProvider!.activityMaintenanceHelperModel!.travelHours.toString() : ''; }); // _isLoading = true; } @@ -66,12 +66,10 @@ class _InternalMaintenanceRequestState extends State @override void dispose() { _workingHoursController.dispose(); - _partQtyController.dispose(); + _travellingHoursController.dispose(); super.dispose(); } - - void getRequestForWorkOrder() async { _isLoading = true; setState(() {}); @@ -87,6 +85,7 @@ class _InternalMaintenanceRequestState extends State @override Widget build(BuildContext context) { return Consumer(builder: (context, requestDetailProvider, child) { + print('data in consumer is ${requestDetailProvider.activityMaintenanceHelperModel?.activityStatus?.toJson()}'); return SingleChildScrollView( child: Column( children: [ @@ -182,6 +181,7 @@ class _InternalMaintenanceRequestState extends State 8.height, AppTextFormField( labelText: context.translation.travelingHours, + controller: _travellingHoursController, backgroundColor: AppColor.neutral100, showShadow: false, labelStyle: AppTextStyles.textFieldLabelStyle, @@ -228,7 +228,7 @@ class _InternalMaintenanceRequestState extends State ], ), ).toShadowContainer(context).paddingOnly(start: 13, end: 14, top: 12), - const AssistantEmployeeCard().toShadowContainer(context,paddingObject: const EdgeInsets.symmetric(horizontal: 16)).paddingOnly(start: 13, end: 14, top: 12), + const AssistantEmployeeCard().toShadowContainer(context, paddingObject: const EdgeInsets.symmetric(horizontal: 16)).paddingOnly(start: 13, end: 14, top: 12), 100.height, ], ), @@ -304,6 +304,4 @@ class _InternalMaintenanceRequestState extends State requestDetailProvider.activityMaintenanceHelperModel!.workingHour = hours; } } - - } diff --git a/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart b/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart index b40a01b2..e0946a97 100644 --- a/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart +++ b/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart @@ -8,6 +8,7 @@ import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/helper_data_models/maintenance_request/activity_maintenance_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/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart'; @@ -34,110 +35,104 @@ class _MaintenanceRequestFormState extends State with Si }); super.initState(); } + Future getInitialData() async { Provider.of(context, listen: false).getTypes(); - RequestDetailProvider requestDetailProvider = Provider.of(context,listen: false); - - // requestDetailProvider.activityMaintenanceHelperModel = ActivityMaintenanceHelperModel( - // - // ); - requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees = MaintenanceActivityAssistantEmployees(); + RequestDetailProvider requestDetailProvider = Provider.of(context, listen: false); + requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees = + requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees ?? ActivityMaintenanceAssistantEmployees(); } @override Widget build(BuildContext context) { - return Consumer( - - builder: (context,RequestDetailProvider requestDetailProvider, child) { - return Scaffold( - backgroundColor: AppColor.neutral110, - appBar: DefaultAppBar(title: context.translation.maintenanceRequest), - body: Stack( - children: [ - DefaultTabController( - length: 2, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - margin: EdgeInsets.only(left: 16.toScreenWidth, right: 16.toScreenWidth, top: 12.toScreenHeight), - decoration: BoxDecoration( - color: context.isDark ? AppColor.neutral50 : AppColor.white10, - borderRadius: BorderRadius.circular(10), - ), - child: TabBar( - padding: EdgeInsets.symmetric(vertical: 4.toScreenHeight, horizontal: 4.toScreenWidth), - labelColor: context.isDark ? AppColor.neutral30 : AppColor.black20, - unselectedLabelColor: context.isDark ? AppColor.neutral30 : AppColor.black20, - unselectedLabelStyle: AppTextStyles.bodyText, - labelStyle: AppTextStyles.bodyText, - indicatorPadding: EdgeInsets.zero, - indicatorSize: TabBarIndicatorSize.tab, - dividerColor: Colors.transparent, - indicator: BoxDecoration( - color: context.isDark ? AppColor.neutral60 : AppColor.neutral110, - borderRadius: BorderRadius.circular(7), - ), - tabs: [ - Tab(text: context.translation.internal, height: 57.toScreenHeight), - Tab(text: context.translation.external, height: 57.toScreenHeight), - ], - ), + return Consumer(builder: (context, RequestDetailProvider requestDetailProvider, child) { + return Scaffold( + backgroundColor: AppColor.neutral110, + appBar: DefaultAppBar(title: context.translation.maintenanceRequest), + body: Stack( + children: [ + DefaultTabController( + length: 2, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + margin: EdgeInsets.only(left: 16.toScreenWidth, right: 16.toScreenWidth, top: 12.toScreenHeight), + decoration: BoxDecoration( + color: context.isDark ? AppColor.neutral50 : AppColor.white10, + borderRadius: BorderRadius.circular(10), ), - // 12.height, - const TabBarView( - children: [ - InternalMaintenanceRequest(), - ExternalMaintenanceRequest(), + child: TabBar( + padding: EdgeInsets.symmetric(vertical: 4.toScreenHeight, horizontal: 4.toScreenWidth), + labelColor: context.isDark ? AppColor.neutral30 : AppColor.black20, + unselectedLabelColor: context.isDark ? AppColor.neutral30 : AppColor.black20, + unselectedLabelStyle: AppTextStyles.bodyText, + labelStyle: AppTextStyles.bodyText, + indicatorPadding: EdgeInsets.zero, + indicatorSize: TabBarIndicatorSize.tab, + dividerColor: Colors.transparent, + indicator: BoxDecoration( + color: context.isDark ? AppColor.neutral60 : AppColor.neutral110, + borderRadius: BorderRadius.circular(7), + ), + tabs: [ + Tab(text: context.translation.internal, height: 57.toScreenHeight), + Tab(text: context.translation.external, height: 57.toScreenHeight), ], - ).expanded, - - ], - ), + ), + ), + // 12.height, + const TabBarView( + children: [ + InternalMaintenanceRequest(), + ExternalMaintenanceRequest(), + ], + ).expanded, + ], ), - FooterActionButton.footerContainer( - child: AppFilledButton( - label: context.translation.addActivity, // Use the dynamic label - buttonColor: AppColor.primary10, - onPressed: () async { - //TODO add this as dropdown not added in design yet Bhaa need to confirm with hussain then. - requestDetailProvider.activityMaintenanceHelperModel?.lastSituationId=282; + ), + FooterActionButton.footerContainer( + child: AppFilledButton( + label: requestDetailProvider.activityMaintenanceHelperModel?.id != 0 ? context.translation.update : context.translation.addActivity, // Use the dynamic label + buttonColor: AppColor.primary10, + onPressed: () async { + //TODO add this as dropdown not added in design yet Bhaa need to confirm with hussain then. + requestDetailProvider.activityMaintenanceHelperModel?.lastSituationId = 282; + + print('model is ${requestDetailProvider.activityMaintenanceHelperModel?.toJson()}'); - print('model to add 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) { + 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 { - // //TODO update logic... - // status = await requestDetailProvider.updateActivityMaintenance(); - // } - if (status == 200) { - //this is for hide the dialoge... - requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); - Navigator.pop(context); - Navigator.pop(context); - } else { - Navigator.pop(context); - } + } 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 { + Navigator.pop(context); + } + } - - - // Handle button press - }, - ), + // Handle button press + }, ), - ], - ), - ); - } - ); + ), + ], + ), + ); + }); } - bool validate({required ActivityMaintenanceHelperModel model}) { + + bool validate({required ActivityMaintenanceHelperModel model}) { print('employee id is ${model.assignedEmployeeId}'); if (model.activityStatus == null) { diff --git a/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart b/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart index 22f7acb5..788b0b52 100644 --- a/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart +++ b/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart @@ -16,6 +16,7 @@ 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/service_request_latest/request_detail_provider.dart'; import 'package:test_sa/service_request_latest/views/components/action_button/footer_action_button.dart'; +import 'package:test_sa/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart'; import 'package:test_sa/views/widgets/images/new_multi_image_picker.dart'; import '../../../../../../models/service_request/spare_parts.dart'; @@ -224,6 +225,8 @@ class _SparePartRequestState extends State with TickerProvider //this is for hide the dialoge... Navigator.pop(context); Navigator.pop(context); + ServiceRequestBottomSheet.addAnotherSpareRequestBottomSheet(context: context); + SizedBox().flushBar(context: context, title: context.translation.sparePartActivitySuccess, message: ''); } else { Navigator.pop(context); }