You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
451 lines
16 KiB
Dart
451 lines
16 KiB
Dart
import 'dart:convert';
|
|
import 'dart:developer';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:fluttertoast/fluttertoast.dart';
|
|
import 'package:http/http.dart';
|
|
import 'package:test_sa/controllers/api_routes/api_manager.dart';
|
|
import 'package:test_sa/controllers/api_routes/urls.dart';
|
|
import 'package:test_sa/extensions/context_extension.dart';
|
|
import 'package:test_sa/extensions/string_extensions.dart';
|
|
import 'package:test_sa/models/helper_data_models/workorder/fix_remotely_model.dart';
|
|
import 'package:test_sa/models/helper_data_models/workorder/need_visit_model.dart';
|
|
import 'package:test_sa/models/helper_data_models/workorder/nurse_action_model.dart';
|
|
import 'package:test_sa/models/new_models/dashboard_detail.dart';
|
|
import 'package:test_sa/models/new_models/workOrderDetail.dart';
|
|
import 'package:test_sa/models/service_request/service_report.dart';
|
|
import 'package:test_sa/models/service_request/service_request.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_engineer_model.dart';
|
|
import '../../../models/service_request/wo_call_request.dart';
|
|
import '../../../models/user.dart';
|
|
import '../../../new_views/common_widgets/app_lazy_loading.dart';
|
|
|
|
class RequestDetailProvider extends ChangeNotifier {
|
|
final pageItemNumber = 10;
|
|
void reset() {
|
|
nextPage = true;
|
|
stateCode = null;
|
|
}
|
|
|
|
|
|
bool _isLoading = false;
|
|
|
|
bool get isLoading => _isLoading;
|
|
|
|
set isLoading(bool value) {
|
|
_isLoading = value;
|
|
notifyListeners();
|
|
}
|
|
|
|
WorkOrderDetail _currentWorkOrder;
|
|
FixRemotely _fixRemotelyModel;
|
|
NeedVisit _needVisitModel;
|
|
NurseActionModel _nurseActionModel;
|
|
|
|
|
|
NurseActionModel get nurseActionModel => _nurseActionModel;
|
|
|
|
set nurseActionModel(NurseActionModel value) {
|
|
_nurseActionModel = value;
|
|
notifyListeners();
|
|
}
|
|
|
|
NeedVisit get needVisitModel => _needVisitModel;
|
|
|
|
set needVisitModel(NeedVisit value) {
|
|
_needVisitModel = value;
|
|
notifyListeners();
|
|
}
|
|
|
|
FixRemotely get fixRemotelyModel => _fixRemotelyModel;
|
|
|
|
set fixRemotelyModel(FixRemotely value) {
|
|
_fixRemotelyModel = value;
|
|
notifyListeners();
|
|
}
|
|
|
|
WorkOrderDetail get currentWorkOrder => _currentWorkOrder;
|
|
|
|
set currentWorkOrder(WorkOrderDetail value) {
|
|
_currentWorkOrder = value;
|
|
notifyListeners();
|
|
}
|
|
|
|
int stateCode;
|
|
// true if there is next page in product list and false if not
|
|
bool nextPage = true;
|
|
TimeOfDay _selectedTime ;
|
|
|
|
TimeOfDay get selectedTime => _selectedTime;
|
|
|
|
set selectedTime(TimeOfDay value) {
|
|
_selectedTime = value;
|
|
notifyListeners();
|
|
} // list of user requests
|
|
|
|
SparePartsWorkOrders _initialSelectedSparePart = SparePartsWorkOrders();
|
|
int _selectedListIndex = 0;
|
|
|
|
int get selectedListIndex => _selectedListIndex;
|
|
|
|
set selectedListIndex(int value) {
|
|
_selectedListIndex = value;
|
|
notifyListeners();
|
|
}
|
|
//getWorkOrderById......
|
|
Future<WorkOrderDetail> getWorkOrderById({@required String id}) async {
|
|
try {
|
|
isLoading = true;
|
|
final response = await ApiManager.instance.get(URLs.getWorkOrderByIdUrl+"?workOrderId=$id");
|
|
stateCode = response.statusCode;
|
|
if (response.statusCode >= 200 && response.statusCode < 300) {
|
|
currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body));
|
|
notifyListeners();
|
|
isLoading = false;
|
|
return currentWorkOrder;
|
|
}
|
|
isLoading= false;
|
|
notifyListeners();
|
|
return null;
|
|
}
|
|
catch (e) {
|
|
log("getSubWorkOrderDetails [error] : $e");
|
|
isLoading = false;
|
|
notifyListeners();
|
|
return null;
|
|
}
|
|
}
|
|
//engineerAcceptWorkOrder......
|
|
Future<CommonResponseModel> engineerAcceptWorkOrder({@required String id}) async {
|
|
try {
|
|
final body = {
|
|
"workOrderId": id,
|
|
};
|
|
isLoading = true;
|
|
final response = await ApiManager.instance.post(URLs.engineerAcceptUrl,body: body);
|
|
stateCode = response.statusCode;
|
|
if (response.statusCode >= 200 && response.statusCode < 300) {
|
|
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
|
|
print('response of Engineer accept workorder ${commonResponseModel.toJson()}');
|
|
notifyListeners();
|
|
isLoading = false;
|
|
return commonResponseModel;
|
|
}
|
|
isLoading= false;
|
|
notifyListeners();
|
|
return CommonResponseModel();
|
|
}
|
|
catch (e) {
|
|
log("engineer accept [error] : $e");
|
|
isLoading = false;
|
|
notifyListeners();
|
|
return CommonResponseModel();
|
|
}
|
|
}
|
|
//engineerRejectWorkOrder......
|
|
Future<CommonResponseModel> engineerRejectWorkOrder({@required String id,String feedBack}) async {
|
|
try {
|
|
final body = {
|
|
"workOrderId": id,
|
|
"feedback": feedBack,
|
|
};
|
|
isLoading = true;
|
|
final response = await ApiManager.instance.post(URLs.engineerRejectUrl,body: body);
|
|
stateCode = response.statusCode;
|
|
if (response.statusCode >= 200 && response.statusCode < 300) {
|
|
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
|
|
print('response of Engineer reject workorder ${commonResponseModel.toJson()}');
|
|
notifyListeners();
|
|
isLoading = false;
|
|
return commonResponseModel;
|
|
}
|
|
isLoading= false;
|
|
notifyListeners();
|
|
return CommonResponseModel();
|
|
}
|
|
catch (e) {
|
|
log("engineer accept [error] : $e");
|
|
isLoading = false;
|
|
notifyListeners();
|
|
return CommonResponseModel();
|
|
}
|
|
}
|
|
//engineerFixRemotelyWorkOrder......
|
|
Future<CommonResponseModel> engineerFixRemotely() async {
|
|
try {
|
|
isLoading = true;
|
|
final response = await ApiManager.instance.post(URLs.engineerFixRemotlyUrl,body: fixRemotelyModel.toJson());
|
|
stateCode = response.statusCode;
|
|
if (response.statusCode >= 200 && response.statusCode < 300) {
|
|
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
|
|
print('response of Engineer fixremotely workorder ${commonResponseModel.toJson()}');
|
|
notifyListeners();
|
|
isLoading = false;
|
|
return commonResponseModel;
|
|
}
|
|
isLoading= false;
|
|
notifyListeners();
|
|
return CommonResponseModel();
|
|
}
|
|
catch (e) {
|
|
log("engineer accept [error] : $e");
|
|
isLoading = false;
|
|
notifyListeners();
|
|
return CommonResponseModel();
|
|
}
|
|
}
|
|
//engineerNeedAVisitWorkOrder......
|
|
Future<CommonResponseModel> engineerNeedVisit() async {
|
|
try {
|
|
isLoading = true;
|
|
final response = await ApiManager.instance.post(URLs.engineerNeedVisitUrl,body: needVisitModel.toJson());
|
|
stateCode = response.statusCode;
|
|
if (response.statusCode >= 200 && response.statusCode < 300) {
|
|
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
|
|
print('response of Engineer fixremotely workorder ${commonResponseModel.toJson()}');
|
|
notifyListeners();
|
|
isLoading = false;
|
|
return commonResponseModel;
|
|
}
|
|
isLoading= false;
|
|
notifyListeners();
|
|
return CommonResponseModel();
|
|
}
|
|
catch (e) {
|
|
log("engineer accept [error] : $e");
|
|
isLoading = false;
|
|
notifyListeners();
|
|
return CommonResponseModel();
|
|
}
|
|
}
|
|
//assignEngineerToWorkOrder......
|
|
Future<CommonResponseModel> assignEngineerWorkOrder({@required String workOrderId,@required String engineerId}) async {
|
|
try {
|
|
final body = {
|
|
"workOrderId": workOrderId,
|
|
"assignedEngineerId": engineerId,
|
|
};
|
|
isLoading = true;
|
|
final response = await ApiManager.instance.post(URLs.assignEngineerToWorkOrderUrl,body: body);
|
|
stateCode = response.statusCode;
|
|
if (response.statusCode >= 200 && response.statusCode < 300) {
|
|
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
|
|
print('response of Engineer assignEngineer workorder ${commonResponseModel.toJson()}');
|
|
notifyListeners();
|
|
isLoading = false;
|
|
return commonResponseModel;
|
|
}
|
|
isLoading= false;
|
|
notifyListeners();
|
|
return CommonResponseModel();
|
|
}
|
|
catch (e) {
|
|
log("engineer accept [error] : $e");
|
|
isLoading = false;
|
|
notifyListeners();
|
|
return CommonResponseModel();
|
|
}
|
|
}
|
|
//Nurse confirm reopen
|
|
Future<CommonResponseModel> nurseReopen() async {
|
|
try {
|
|
isLoading = true;
|
|
final response = await ApiManager.instance.post(URLs.nurseConfirmReopenUrl,body: nurseActionModel.toJson());
|
|
stateCode = response.statusCode;
|
|
if (response.statusCode >= 200 && response.statusCode < 300) {
|
|
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
|
|
print('response of nurse confirmreopen workorder ${commonResponseModel.toJson()}');
|
|
notifyListeners();
|
|
isLoading = false;
|
|
return commonResponseModel;
|
|
}
|
|
isLoading= false;
|
|
notifyListeners();
|
|
return CommonResponseModel();
|
|
}
|
|
catch (e) {
|
|
log("engineer accept [error] : $e");
|
|
isLoading = false;
|
|
notifyListeners();
|
|
return CommonResponseModel();
|
|
}
|
|
}
|
|
//Nurse confirm close
|
|
Future<CommonResponseModel> nurseClose() async {
|
|
try {
|
|
isLoading = true;
|
|
final response = await ApiManager.instance.post(URLs.nurseConfirmCloseUrl,body: nurseActionModel.toJson());
|
|
stateCode = response.statusCode;
|
|
if (response.statusCode >= 200 && response.statusCode < 300) {
|
|
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
|
|
print('response of nurse confirmreopen workorder ${commonResponseModel.toJson()}');
|
|
notifyListeners();
|
|
isLoading = false;
|
|
return commonResponseModel;
|
|
}
|
|
isLoading= false;
|
|
notifyListeners();
|
|
return CommonResponseModel();
|
|
}
|
|
catch (e) {
|
|
log("engineer accept [error] : $e");
|
|
isLoading = false;
|
|
notifyListeners();
|
|
return CommonResponseModel();
|
|
}
|
|
}
|
|
|
|
|
|
Future<int> updateRequest({@required User user, @required ServiceRequest request}) async {
|
|
isLoading = true;
|
|
notifyListeners();
|
|
Map<String, dynamic> serviceRequest = await getWorkOrderById(id: request.id) ?? "";
|
|
final List callSiteContacts = (serviceRequest['callSiteContactPerson'] as List);
|
|
final Map<String, dynamic> callSiteContactPerson = callSiteContacts.isEmpty ? {} : callSiteContacts[0];
|
|
Response response;
|
|
try {
|
|
if ((request.audio ?? "").isNotEmpty) {
|
|
request.audio = request.audio.substring(request.audio.indexOf("=") + 1, request.audio.length);
|
|
}
|
|
} catch (ex) {}
|
|
|
|
var body = {
|
|
"id": request.id,
|
|
"callNo": serviceRequest['callNo'],
|
|
"callCreatedBy": serviceRequest['callCreatedBy'],
|
|
"requestedDate": request.date ?? "",
|
|
"requestedTime": request.date ?? "",
|
|
"priority": request.priority?.toJson(),
|
|
"defectType": request.defectType?.toJson(),
|
|
"typeofRequest": request.type?.toJson(),
|
|
"requestedThrough": request.requestedThrough?.toJson(),
|
|
"voiceNote": request.audio,
|
|
"assets": request.deviceId == null ? [] : [request.deviceId],
|
|
"attachmentsCallRequest": (request.devicePhotos?.isNotEmpty ?? false) ? request.devicePhotos?.map((e) => {"name": e.getFileName})?.toList() : [],
|
|
"assignedEmployee": {
|
|
"id": request.engineerId,
|
|
"name": request.engineerName,
|
|
},
|
|
"callSiteContactPerson": [
|
|
{
|
|
"id": callSiteContactPerson['id'] ?? 0,
|
|
"employeeCode": callSiteContactPerson['employeeCode'],
|
|
"name": callSiteContactPerson['name'] ?? user.userName,
|
|
"telephone": callSiteContactPerson['telephone'] ?? user.phoneNumber,
|
|
"job": callSiteContactPerson['job'],
|
|
"email": callSiteContactPerson['email'] ?? user.email,
|
|
"land": callSiteContactPerson['land'],
|
|
"contactUserId": user.userID,
|
|
},
|
|
],
|
|
"callComments": request.callComments,
|
|
"noofFollowup": 0,
|
|
"status": request.statusId == null
|
|
? null
|
|
: {
|
|
"id": request.statusId,
|
|
"name": request.statusLabel,
|
|
"value": request.statusValue,
|
|
},
|
|
"callLastSituation": null,
|
|
"firstAction": request.firstAction?.toJson(),
|
|
"loanAvailablity": request.loanAvailability?.toJson(),
|
|
"comments": request.comments,
|
|
"firstActionDate": request.visitDate,
|
|
"visitDate": request.visitDate,
|
|
"startDate": request.startDate,
|
|
"endDate": request.endDate,
|
|
"workingHours": request.workingHours,
|
|
"callReview": null,
|
|
"reviewComment": null,
|
|
//"reviewComment": request.reviewComment,
|
|
};
|
|
try {
|
|
response = await ApiManager.instance.put(
|
|
URLs.updateRequestDate,
|
|
body: body,
|
|
);
|
|
stateCode = response.statusCode;
|
|
if (response.statusCode >= 200 && response.statusCode < 300) {
|
|
// request.engineerName = employee.name;
|
|
notifyListeners();
|
|
}
|
|
isLoading = false;
|
|
notifyListeners();
|
|
return response.statusCode;
|
|
} catch (error) {
|
|
isLoading = false;
|
|
notifyListeners();
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
Future<int> createServiceReport(BuildContext context, {@required ServiceReport report, @required User user, @required ServiceRequest request}) async {
|
|
Response response;
|
|
try {
|
|
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
|
|
final body = report.toJson();
|
|
final callRequest = CallRequest(id: num.tryParse(request?.id ?? "")).toJson();
|
|
final contactPerson = [
|
|
{
|
|
"id": 0,
|
|
// "employeeCode": "",
|
|
"name": user.userName,
|
|
"telephone": user.phoneNumber,
|
|
// "job": "",
|
|
"email": user.email,
|
|
// "land": "",
|
|
"contactUserId": user.userID,
|
|
}
|
|
];
|
|
body.update("contactPersonWorkOrders", (value) => contactPerson, ifAbsent: () => contactPerson);
|
|
body.update("callRequest", (value) => callRequest, ifAbsent: () => callRequest);
|
|
response = await ApiManager.instance.post(URLs.createServiceReport, body: body);
|
|
stateCode = response.statusCode;
|
|
if (response.statusCode >= 200 && response.statusCode < 300) {
|
|
reset();
|
|
notifyListeners();
|
|
Fluttertoast.showToast(msg: context.translation.successfulRequestMessage);
|
|
Navigator.of(context).pop();
|
|
} else {
|
|
Fluttertoast.showToast(msg: "${context.translation.failedToCompleteRequest}: ${json.decode(response.body)['message']}");
|
|
}
|
|
Navigator.pop(context);
|
|
return response.statusCode;
|
|
} catch (error) {
|
|
Navigator.pop(context);
|
|
print(error);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
Future<SuppEngineerWorkOrders> addSupplierEngineer(SupplierEngineer supplierEngineer) async {
|
|
isLoading = true;
|
|
notifyListeners();
|
|
Response response;
|
|
SuppEngineerWorkOrders res;
|
|
try {
|
|
response = await ApiManager.instance.post(URLs.addSupplierEngineer, body: supplierEngineer.toJson());
|
|
stateCode = response.statusCode;
|
|
if (response.statusCode >= 200 && response.statusCode < 300) {
|
|
res = SuppEngineerWorkOrders.fromJson(json.decode(response.body)["data"]);
|
|
}
|
|
isLoading = false;
|
|
notifyListeners();
|
|
return res;
|
|
} catch (error) {
|
|
isLoading = false;
|
|
notifyListeners();
|
|
return res;
|
|
}
|
|
}
|
|
|
|
SparePartsWorkOrders get initialSelectedSparePart => _initialSelectedSparePart;
|
|
|
|
set initialSelectedSparePart(SparePartsWorkOrders value) {
|
|
_initialSelectedSparePart = value;
|
|
notifyListeners();
|
|
}
|
|
}
|