Enhancements

merge-requests/24/head
zaid_daoud 1 year ago
parent a33e4f4b7d
commit e25dc22bd0

@ -11,7 +11,7 @@ import 'package:test_sa/models/visits/visits_search.dart';
class PreventiveMaintenanceVisitsProvider extends ChangeNotifier {
// number of items call in each request
final pageItemNumber = 50;
final pageItemNumber = 10;
//reset provider data
void reset() {

@ -14,13 +14,12 @@ import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/models/timer_model.dart';
import 'package:test_sa/models/user.dart';
class ServiceRequestsProvider extends ChangeNotifier{
class ServiceRequestsProvider extends ChangeNotifier {
// number of items call in each request
final pageItemNumber = 50;
final pageItemNumber = 10;
//reset provider data
void reset(){
void reset() {
serviceRequests = null;
nextPage = true;
stateCode = null;
@ -49,20 +48,19 @@ class ServiceRequestsProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getRequests ({
Future<int> getRequests({
@required String host,
@required User user,
@required int hospitalId,
}) async {
if(isLoading == true)
return -2;
if (isLoading == true) return -2;
isLoading = true;
if(serviceRequests == null) notifyListeners();
if (serviceRequests == null) notifyListeners();
Response response;
try{
Map<String,dynamic> body = {};
try {
Map<String, dynamic> body = {};
body.addAll(search.toMap());
body["pageNumber"] = (serviceRequests?.length ?? 0) ~/pageItemNumber + 1;
body["pageNumber"] = (serviceRequests?.length ?? 0) ~/ pageItemNumber + 1;
body["pageSize"] = pageItemNumber;
response = await ApiManager.instance.post(
@ -71,30 +69,27 @@ class ServiceRequestsProvider extends ChangeNotifier{
);
stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) {
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List requestsListJson = json.decode(response.body)["data"];
List<ServiceRequest> serviceRequestsPage = requestsListJson.map(
(request) => ServiceRequest.fromJson(request)).toList();
List<ServiceRequest> serviceRequestsPage = requestsListJson.map((request) => ServiceRequest.fromJson(request)).toList();
serviceRequests ??= [];
serviceRequests.addAll(serviceRequestsPage);
if(serviceRequestsPage.length == pageItemNumber){
if (serviceRequestsPage.length == pageItemNumber) {
nextPage = true;
}else{
} else {
nextPage = false;
}
}
isLoading = false;
notifyListeners();
return response.statusCode;
} catch(error) {
} catch (error) {
isLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
}
Future<ServiceRequest> getSingleServiceRequest({
@ -104,115 +99,93 @@ class ServiceRequestsProvider extends ChangeNotifier{
@required Subtitle subtitle,
}) async {
String userData = '';
if(user != null){
userData += "&uid="+user.id;
userData += "&token="+user.token;
if (user != null) {
userData += "&uid=" + user.id;
userData += "&token=" + user.token;
}
Response response;
try{
response = await get(
Uri.parse(
host+URLs.getSingleServiceRequest
+'?call_nid=$requestId'
'$userData',)
);
}catch(error){
throw(HttpStatusManger.getStatusMessage(
status: -1, subtitle: subtitle));
try {
response = await get(Uri.parse(
host +
URLs.getSingleServiceRequest +
'?call_nid=$requestId'
'$userData',
));
} catch (error) {
throw (HttpStatusManger.getStatusMessage(status: -1, subtitle: subtitle));
}
// If the call to the server was successful, parse the JSON.
if (response.statusCode >= 200 && response.statusCode < 300){
if (response.statusCode >= 200 && response.statusCode < 300) {
// If the call to the server was successful, parse the JSON.
List jsonList = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
List<ServiceRequest> _requests = jsonList.map((i) => ServiceRequest.fromJson(i)).toList();
return _requests[0];
}else{
throw(HttpStatusManger.getStatusMessage(
status: response.statusCode, subtitle: subtitle));
} else {
throw (HttpStatusManger.getStatusMessage(status: response.statusCode, subtitle: subtitle));
}
}
Future<int> createRequest ({
Future<int> createRequest({
@required String host,
@required User user,
@required ServiceRequest serviceRequest,
}) async {
var body = {
"callCreatedBy": {
"id":user.id,
"name":user.userName
},
"assets":serviceRequest.deviceId == null ? [] : [serviceRequest.deviceId],
"callCreatedBy": {"id": user.id, "name": user.userName},
"assets": serviceRequest.deviceId == null ? [] : [serviceRequest.deviceId],
"requestedDate": DateTime.now().toIso8601String(),
"requestedTime": DateTime.now().toIso8601String(),
"client": user.hospital?.id ?? '',
"callComments": serviceRequest.maintenanceIssue,
"attachmentsCallRequest": serviceRequest.devicePhotos.map((e) => {"name":e}).toList(),
"attachmentsCallRequest": serviceRequest.devicePhotos.map((e) => {"name": e}).toList(),
"priority": serviceRequest.priority.toMap(),
"defectType": serviceRequest.defectType.toMap(),
"typeofRequest":serviceRequest.type.toMap(),
"requestedThrough":serviceRequest.type.toMap(),
"typeofRequest": serviceRequest.type.toMap(),
"requestedThrough": serviceRequest.type.toMap(),
};
if(serviceRequest.audio != null){
if (serviceRequest.audio != null) {
body["voiceNote"] = serviceRequest.audio;
}
Response response;
try{
response = await ApiManager.instance.post(
URLs.createRequest,
body: body
);
try {
response = await ApiManager.instance.post(URLs.createRequest, body: body);
stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) {
if(serviceRequests != null)
serviceRequests.insert(
0,
ServiceRequest.fromJson(
json.decode(utf8.decode(response.bodyBytes))[0]
)
);
if (response.statusCode >= 200 && response.statusCode < 300) {
if (serviceRequests != null) serviceRequests.insert(0, ServiceRequest.fromJson(json.decode(utf8.decode(response.bodyBytes))[0]));
notifyListeners();
}
return response.statusCode;
} catch(error) {
} catch (error) {
return -1;
}
}
Future<int> createIssueReport ({
Future<int> createIssueReport({
@required String host,
@required User user,
@required Issue issue,
}) async {
Response response;
Map<String,String> body = issue.toMap();
Map<String, String> body = issue.toMap();
body["uid"] = user.id;
body["token"] = user.token;
try{
try {
response = await post(
Uri.parse(host+URLs.createReport),
Uri.parse(host + URLs.createReport),
body: body,
);
stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) {
}
if (response.statusCode >= 200 && response.statusCode < 300) {}
return response.statusCode;
} catch(error) {
} catch (error) {
return -1;
}
}
Future<int> updateDate ({
Future<int> updateDate({
@required String host,
@required User user,
@required String newDate,
@ -220,49 +193,43 @@ class ServiceRequestsProvider extends ChangeNotifier{
@required ServiceRequest request,
}) async {
Response response;
Map<String,String> body = {};
Map<String, String> body = {};
body["uid"] = user.id;
body["token"] = user.token;
body["nid"] = request.id;
if(newDate != null) body["date"] = newDate;
if(employee != null) body["ass_emp"] = employee.id.toString();
try{
if (newDate != null) body["date"] = newDate;
if (employee != null) body["ass_emp"] = employee.id.toString();
try {
response = await post(
Uri.parse(
//host+
URLs.updateRequestDate
),
Uri.parse(
//host+
URLs.updateRequestDate),
body: body,
);
stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) {
if (response.statusCode >= 200 && response.statusCode < 300) {
request.engineerName = employee.name;
notifyListeners();
}
return response.statusCode;
} catch(error) {
} catch (error) {
return -1;
}
}
Future<int> createServiceReport ({
Future<int> createServiceReport({
@required String host,
@required User user,
@required ServiceReport report,
@required ServiceRequest request,
}) async {
Response response;
try{
Map<String,dynamic> body = report.toMap(request);
try {
Map<String, dynamic> body = report.toMap(request);
// body["uid"] = user.id;
// body["token"] = user.token;
response = await ApiManager.instance.post(
URLs.createServiceReport,
body: body
);
response = await ApiManager.instance.post(URLs.createServiceReport, body: body);
print(response.body);
// response = await post(
// Uri.parse(
// host+URLs.createServiceReport),
@ -270,54 +237,46 @@ class ServiceRequestsProvider extends ChangeNotifier{
// );
stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) {
if (response.statusCode >= 200 && response.statusCode < 300) {
reset();
notifyListeners();
}
return response.statusCode;
} catch(error) {
} catch (error) {
return -1;
}
}
Future<int> createDuplicatedReport ({
Future<int> createDuplicatedReport({
@required String host,
@required User user,
@required ServiceRequest request,
}) async {
Response response;
String userData = '';
if(user != null){
userData += "&uid="+user.id;
userData += "&token="+user.token;
if (user != null) {
userData += "&uid=" + user.id;
userData += "&token=" + user.token;
}
try{
try {
response = await get(
Uri.parse(
host+URLs.createDuplicatedReport
+"?nid=${request.id}"
+userData),
Uri.parse(host + URLs.createDuplicatedReport + "?nid=${request.id}" + userData),
);
stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) {
if (response.statusCode >= 200 && response.statusCode < 300) {
reset();
notifyListeners();
}
return response.statusCode;
} catch(error) {
} catch (error) {
return -1;
}
}
Future<int> updateServiceReport ({
Future<int> updateServiceReport({
@required String host,
@required User user,
@required ServiceReport report,
@ -329,14 +288,11 @@ class ServiceRequestsProvider extends ChangeNotifier{
// body["token"] = user.token;
// body["job_id"] = request.id;
// body["report_id"] = request.reportID;
try{
Map<String,dynamic> body = report.toMap(request);
try {
Map<String, dynamic> body = report.toMap(request);
// body["uid"] = user.id;
// body["token"] = user.token;
response = await ApiManager.instance.put(
URLs.updateServiceReport,
body: body
);
response = await ApiManager.instance.put(URLs.updateServiceReport, body: body);
// response = await post(
// Uri.parse(
// host+URLs.updateServiceReport),
@ -344,52 +300,46 @@ class ServiceRequestsProvider extends ChangeNotifier{
// );
// stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) {
if (response.statusCode >= 200 && response.statusCode < 300) {
reset();
notifyListeners();
}
return response.statusCode;
} catch(error) {
} catch (error) {
return -1;
}
}
Future<int> updateServiceReportTimer ({
Future<int> updateServiceReportTimer({
@required String host,
@required User user,
@required TimerModel timer,
@required ServiceRequest request,
}) async {
Response response;
Map<String,dynamic> body = {};
Map<String, dynamic> body = {};
body["uid"] = user.id;
body["token"] = user.token;
body["job_id"] = request.id;
body["start_time"] = (timer.startAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0);
body["end_time"] = (timer.endAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0);
body["end_time"] = (timer.endAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0);
body["working_hours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5);
body["report_id"] = request.reportID;
try{
try {
response = await post(
Uri.parse(
host+URLs.updateServiceReport),
Uri.parse(host + URLs.updateServiceReport),
body: body,
);
//stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) {
if (response.statusCode >= 200 && response.statusCode < 300) {
// reset();
// notifyListeners();
}
return response.statusCode;
} catch(error) {
} catch (error) {
return -1;
}
}
Future<ServiceReport> getSingleServiceReport({
@ -398,29 +348,21 @@ class ServiceRequestsProvider extends ChangeNotifier{
@required User user,
@required Subtitle subtitle,
}) async {
Response response;
try{
try {
response = await ApiManager.instance.get(
URLs.getServiceReport + "?workOrderId=$reportId",
);
}catch(error){
throw(HttpStatusManger.getStatusMessage(
status: -1, subtitle: subtitle));
);
} catch (error) {
throw (HttpStatusManger.getStatusMessage(status: -1, subtitle: subtitle));
}
// If the call to the server was successful, parse the JSON.
if (response.statusCode >= 200 && response.statusCode < 300){
if (response.statusCode >= 200 && response.statusCode < 300) {
// If the call to the server was successful, parse the JSON.
return ServiceReport.fromJson(
json.decode(response.body)["data"],reportId);
}else{
throw(HttpStatusManger.getStatusMessage(
status: response.statusCode, subtitle: subtitle));
return ServiceReport.fromJson(json.decode(response.body)["data"], reportId);
} else {
throw (HttpStatusManger.getStatusMessage(status: response.statusCode, subtitle: subtitle));
}
}
}
}

@ -36,99 +36,133 @@ class ServiceReport {
Uint8List localNurseSignature;
Uint8List localEngineerSignature;
ServiceReport({
this.id,
this.visitDate,
this.endDate,
this.assetType,
this.status,
this.type,
this.faultDescriptionId,
//this.workHours,
this.travelingHours,
this.parts,
this.engineer,
this.workPreformed,
this.reason,
this.operatingHours,
this.callLastSituation,
this.jobSheetNumber,
this.image,
this.device,
this.invoiceCode,
this.invoiceNumber,
this.quantity = "1",
this.timer,
this.signatureNurse,
this.signatureEngineer,
this.localNurseSignature,
this.localEngineerSignature
});
ServiceReport(
{this.id,
this.visitDate,
this.endDate,
this.assetType,
this.status,
this.type,
this.faultDescriptionId,
//this.workHours,
this.travelingHours,
this.parts,
this.engineer,
this.workPreformed,
this.reason,
this.operatingHours,
this.callLastSituation,
this.jobSheetNumber,
this.image,
this.device,
this.invoiceCode,
this.invoiceNumber,
this.quantity = "1",
this.timer,
this.signatureNurse,
this.signatureEngineer,
this.localNurseSignature,
this.localEngineerSignature});
Map<String,dynamic> toMap(ServiceRequest request){
Map<String,dynamic> _map = {};
if(id != null) _map["id"] = id;
if(visitDate != null) _map["visitDate"] = visitDate.toIso8601String();
Map<String, dynamic> toMap(ServiceRequest request) {
Map<String, dynamic> _map = {};
if (id != null) _map["id"] = id;
if (visitDate != null) _map["visitDate"] = visitDate.toIso8601String();
//if(serviceType != null) _map["service_type"] = serviceType.id.toString();
if(status != null) _map["status"] = status?.toMap();
if(type != null) _map["typeOfWO"] = type?.toMap();
if(assetType != null) _map["TypeOfWO"] = assetType?.toMap();
if (status != null) _map["status"] = status?.toMap();
if (type != null) _map["typeOfWO"] = type?.toMap();
if (assetType != null) _map["TypeOfWO"] = assetType?.toMap();
//if(faultDescriptionId != null && faultDescriptionId.isNotEmpty) _map["fault_description"] = faultDescriptionId;
//if(workHours != null && workHours.isNotEmpty) _map["working_hours"] = workHours;
if(timer != null){
if (timer != null) {
_map["startofWorkTime"] = timer.startAt.toIso8601String();
_map["endofWorkTime"] = (timer.endAt ?? DateTime.now()).toIso8601String();
_map["endofWorkTime"] = (timer.endAt ?? DateTime.now()).toIso8601String();
_map["workingHours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5);
}
if(travelingHours != null && travelingHours.isNotEmpty) _map["traveling_hours"] = travelingHours;
if (travelingHours != null && travelingHours.isNotEmpty) _map["traveling_hours"] = travelingHours;
// if(workPreformed != null && workPreformed.isNotEmpty){
// _map["faultDescription"] = {
// //"id":faultDescriptionId ?? 0,
// "workPerformed":workPreformed
// };
// }
if(jobSheetNumber != null && jobSheetNumber.isNotEmpty) _map["job_sheet_no"] = jobSheetNumber;
if(parts != null && parts.isNotEmpty){
if (jobSheetNumber != null && jobSheetNumber.isNotEmpty) _map["job_sheet_no"] = jobSheetNumber;
if (parts != null && parts.isNotEmpty) {
_map["sparePartsWorkOrders"] = parts.map((e) => e.toJson()).toList();
}
if(device != null && device.id != null){
if (device != null && device.id != null) {
_map["callRequest"] = {
"id":request.id,
"asset":device?.toMap(assetType),
"id": request.id,
"asset": device?.toMap(assetType),
};
_map["callRequest"]["asset"]["invoiceNumber"] = invoiceNumber;
}
_map["AssignedEmployee"] = engineer?.toMap();
//if(quantity != null && quantity.isNotEmpty) _map["qty"] = quantity;
//if(endDate != null) _map["end_date"] = (endDate.millisecondsSinceEpoch ~/ 1000).toString();
if(reason != null) _map["reason"] = reason.toMap();
if (reason != null) _map["reason"] = reason.toMap();
//if(operatingHours != null && operatingHours.isNotEmpty) _map["operation_hours"] = operatingHours;
if(callLastSituation != null) _map["calllastSituation"] = callLastSituation.toMap();
if (callLastSituation != null) _map["calllastSituation"] = callLastSituation.toMap();
//if(image != null) _map["image"] = image;
//if(invoiceCode != null) _map["invoice_no"] = invoiceCode;
//if(invoiceNumber != null) _map["invoice_code"] = invoiceNumber;
if(image != null){
_map["attachmentsWorkOrder"]=[{
"name":image
}];
if (image != null) {
_map["attachmentsWorkOrder"] = [
{"name": image}
];
}
_map["nurseSignature"] = signatureNurse;
_map["engSignature"] = signatureEngineer;
// ///TODO : zaid
// _map["supplier"] = {
// "id": 0,
// "suppliername": "string",
// "name": "string",
// "website": "string",
// "email": "string",
// "code": "string",
// "suppNo": 0,
// "suppStatusId": 0,
// "cityId": 0,
// "person": "string",
// "comment": "string",
// "zipcode": 0,
// "contact": "string",
// "telephones": [
// {"id": 0, "supplierId": 0, "telephone": "string"}
// ],
// "faxes": [
// {"id": 0, "supplierId": 0, "fax": "string"}
// ],
// "addresses": [
// {"id": 0, "supplierId": 0, "address": "string"}
// ],
// "attachments": [
// {"id": 0, "supplierId": 0, "attachmentName": "string", "attachmentURL": "string"}
// ],
// "suppPersons": [
// {"id": 0, "supplierId": 0, "personName": "string", "personRoleId": 0, "contact": "string", "externalEngCode": "string", "email": "string"}
// ],
// "suppTCodes": [
// {"id": 0, "supplierId": 0, "codeTypeId": 0, "codeValue": "string"}
// ]
// };
return _map;
}
bool validate(){
if(visitDate == null) return false;
bool validate() {
if (visitDate == null) return false;
//if(serviceType == null) return false;
if(status == null) return false;
if(type == null && assetType==null) return false;
if(engineer == null) return false;
if(callLastSituation == null) return false;
if(callLastSituation?.value == 12){
// if(invoiceCode != null || invoiceCode?.isEmpty == true) return false;
if(invoiceNumber != null || invoiceNumber?.isEmpty== true ) return false;
if (status == null) return false;
if (type == null && assetType == null) return false;
if (engineer == null) return false;
if (callLastSituation == null) return false;
if (callLastSituation?.value == 12) {
// if(invoiceCode != null || invoiceCode?.isEmpty == true) return false;
if (invoiceNumber != null || invoiceNumber?.isEmpty == true) return false;
}
if(parts == null) return false;
if (parts == null) return false;
//if(endDate == null) return false;
//if(reason == null) return false;
//todo uncoment this line
@ -138,16 +172,14 @@ class ServiceReport {
return true;
}
factory ServiceReport.fromJson(Map<String,dynamic> parsedJson,int id){
List<Part> _parts = [];
if(parsedJson["sparePartsWorkOrders"] != null){
if(parsedJson["sparePartsWorkOrders"][0]["id"] != null){
List partsList = parsedJson["sparePartsWorkOrders"];
_parts = partsList.map((e) => Part.fromJson(
e["sparePart"],reportJson: e)).toList();
}
factory ServiceReport.fromJson(Map<String, dynamic> parsedJson, int id) {
List<Part> _parts = [];
if (parsedJson["sparePartsWorkOrders"] != null) {
if (parsedJson["sparePartsWorkOrders"][0]["id"] != null) {
List partsList = parsedJson["sparePartsWorkOrders"];
_parts = partsList.map((e) => Part.fromJson(e["sparePart"], reportJson: e)).toList();
}
}
return ServiceReport(
id: id,
assetType: Lookup.fromJson(parsedJson["assetType"]),
@ -156,7 +188,7 @@ class ServiceReport {
status: Lookup.fromJson(parsedJson["status"]),
type: Lookup.fromJson(parsedJson["typeOfWO"]),
//faultDescriptionId: parsedJson["fault_description"],
endDate:DateTime.tryParse(parsedJson["endofWorkTime"]),
endDate: DateTime.tryParse(parsedJson["endofWorkTime"]),
//invoiceCode: parsedJson["invoice_code"],
//invoiceNumber: parsedJson["invoice_no"],
//jobSheetNumber: parsedJson["job_sheet_no"],
@ -168,14 +200,11 @@ class ServiceReport {
visitDate: DateTime.tryParse(parsedJson["visitDate"]),
//workHours: parsedJson["working_hours"],
timer: TimerModel(
startAt: DateTime.tryParse(parsedJson["startofWorkTime"]),
endAt: DateTime.tryParse(parsedJson["endofWorkTime"]),
durationInSecond: ((parsedJson["workingHours"] ?? 0) * 60 *60).toInt()
),
startAt: DateTime.tryParse(parsedJson["startofWorkTime"]), endAt: DateTime.tryParse(parsedJson["endofWorkTime"]), durationInSecond: ((parsedJson["workingHours"] ?? 0) * 60 * 60).toInt()),
//workPreformed: parsedJson["work_performed"],
device: Device.fromJson(parsedJson["callRequest"]["asset"]),
signatureNurse: URLs.getFileUrl(parsedJson["nurseSignature"]) ,
signatureEngineer:URLs.getFileUrl(parsedJson["engSignature"]),
device: Device.fromJson(parsedJson["callRequest"]["asset"]),
signatureNurse: URLs.getFileUrl(parsedJson["nurseSignature"]),
signatureEngineer: URLs.getFileUrl(parsedJson["engSignature"]),
);
}
@ -183,4 +212,4 @@ class ServiceReport {
// return date == null || date.isEmpty
// ? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(date) * 1000);
// }
}
}

Loading…
Cancel
Save