bug fixing

merge-requests/22/head
MaximusAshraf 3 years ago
parent 75fedf395e
commit 910e01324f

@ -1,4 +1,5 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:developer';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
@ -19,9 +20,9 @@ class ApiManager {
) async{ ) async{
Uri _url = Uri.parse(url); Uri _url = Uri.parse(url);
print(_url); // print(_url);
http.Response response = await http.get(_url,headers: headers); http.Response response = await http.get(_url,headers: headers);
if(response.body is! List){ if(jsonDecode(response.body) is Map<String,dynamic>){
final message = jsonDecode(response.body)["message"]; final message = jsonDecode(response.body)["message"];
if(message != null && message.toString().isNotEmpty){ if(message != null && message.toString().isNotEmpty){
Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG);
@ -43,19 +44,19 @@ class ApiManager {
headers.addAll(_headers); headers.addAll(_headers);
Uri _url = Uri.parse(url); Uri _url = Uri.parse(url);
print(_url); // print(_url);
print(headers); // print(headers);
print(json.encode(body)); log(json.encode(body));
var request = http.Request('POST', _url); var request = http.Request('POST', _url);
request.body = json.encode(body); request.body = json.encode(body);
request.headers.addAll(headers); request.headers.addAll(headers);
http.StreamedResponse _streamedResponse = await request.send(); http.StreamedResponse _streamedResponse = await request.send();
http.Response response = await http.Response.fromStream(_streamedResponse); http.Response response = await http.Response.fromStream(_streamedResponse);
print(response.statusCode); // print(response.statusCode);
print(response.body); // log(response.body);
if(response.body is! List){ if(jsonDecode(response.body) is Map<String,dynamic>){
final message = jsonDecode(response.body)["message"]; final message = jsonDecode(response.body)["message"];
if(message != null && message.toString().isNotEmpty){ if(message != null && message.toString().isNotEmpty){
Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG);
@ -77,18 +78,18 @@ class ApiManager {
headers.addAll(_headers); headers.addAll(_headers);
Uri _url = Uri.parse(url); Uri _url = Uri.parse(url);
print(_url); // print(_url);
print(headers); // print(headers);
print(json.encode(body)); // log(json.encode(body));
var request = http.Request('PUT', _url); var request = http.Request('PUT', _url);
request.body = json.encode(body); request.body = json.encode(body);
request.headers.addAll(headers); request.headers.addAll(headers);
http.StreamedResponse streamedResponse = await request.send(); http.StreamedResponse streamedResponse = await request.send();
http.Response response = await http.Response.fromStream(streamedResponse); http.Response response = await http.Response.fromStream(streamedResponse);
print(response.statusCode); // print(response.statusCode);
print(response.body); // log(response.body);
if(response.body is! List){ if(jsonDecode(response.body) is Map<String,dynamic>){
final message = jsonDecode(response.body)["message"]; final message = jsonDecode(response.body)["message"];
if(message != null && message.toString().isNotEmpty){ if(message != null && message.toString().isNotEmpty){
Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG);
@ -110,9 +111,9 @@ class ApiManager {
headers.addAll(_headers); headers.addAll(_headers);
Uri _url = Uri.parse(url); Uri _url = Uri.parse(url);
print(_url); // print(_url);
print(_headers); // print(_headers);
print(json.encode(body)); // print(json.encode(body));
var request = http.MultipartRequest('POST', _url); var request = http.MultipartRequest('POST', _url);
request.fields.addAll(body); request.fields.addAll(body);
request.headers.addAll(_headers); request.headers.addAll(_headers);
@ -122,12 +123,12 @@ class ApiManager {
} }
//request.files.addAll(_files); //request.files.addAll(_files);
print(request.files); // print(request.files);
http.StreamedResponse streamedResponse = await request.send(); http.StreamedResponse streamedResponse = await request.send();
http.Response response = await http.Response.fromStream(streamedResponse); http.Response response = await http.Response.fromStream(streamedResponse);
print(response.statusCode); // print(response.statusCode);
print(response.body); // log(response.body);
if(response.body is! List){ if(jsonDecode(response.body) is Map<String,dynamic>){
final message = jsonDecode(response.body)["message"]; final message = jsonDecode(response.body)["message"];
if(message != null && message.toString().isNotEmpty){ if(message != null && message.toString().isNotEmpty){
Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG);

@ -1,5 +1,5 @@
import 'package:test_sa/models/subtitle.dart';
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
import 'package:test_sa/models/subtitle.dart';
class HttpStatusManger{ class HttpStatusManger{
static String getStatusMessage({ static String getStatusMessage({

@ -40,16 +40,16 @@ class URLs{
static get updateRequestDate => "$_baseUrl/handle/update/request"; // get static get updateRequestDate => "$_baseUrl/handle/update/request"; // get
// service report // service report
static get createServiceReport => "$_baseUrl/handle/create/service/report"; // get static get createServiceReport => "$_baseUrl/WorkOrder/AddWorkOrder"; // get
static get updateServiceReport => "$_baseUrl/handle/update/service/report"; // get static get updateServiceReport => "$_baseUrl/WorkOrder/UpdateWorkOrder"; // get
static get getServiceReport => "$_baseUrl/WorkOrder/GetWorkOrderById"; // get static get getServiceReport => "$_baseUrl/WorkOrder/GetWorkOrderById"; // get
static get createDuplicatedReport => "$_baseUrl/handle/duplicate/request"; // get static get createDuplicatedReport => "$_baseUrl/handle/duplicate/request"; // get
static get getServiceReportReasons => "$_baseUrl/Lookups/GetLookup?lookupEnum=522"; // get static get getServiceReportReasons => "$_baseUrl/Lookups/GetLookup?lookupEnum=522"; // get
static get getServiceReportTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=34"; // get static get getServiceReportTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=501"; // get
static get getServiceReportStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=521"; // get static get getServiceReportStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=521"; // get
static get getServiceReportLastCalls => "$_baseUrl/Lookups/GetLookup?lookupEnum=520"; // get static get getServiceReportLastCalls => "$_baseUrl/Lookups/GetLookup?lookupEnum=520"; // get
static get getServiceTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=604"; // get static get getAssetTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=28"; // get
static get getPartNumber => "$_baseUrl/PartCatalog/GetPartAutoComplete"; // get static get getPartNumber => "$_baseUrl/PartCatalog/GetPartAutoComplete"; // get
static get getServiceReportPriority => "$_baseUrl/Lookups/GetLookup?lookupEnum=602"; // get static get getServiceReportPriority => "$_baseUrl/Lookups/GetLookup?lookupEnum=602"; // get
static get getServiceReportDefectTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=601"; // get static get getServiceReportDefectTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=601"; // get

@ -1,8 +1,8 @@
import 'dart:convert'; import 'dart:convert';
import 'package:test_sa/models/subtitle.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:test_sa/models/subtitle.dart';
class AppLocalization { class AppLocalization {

@ -1,9 +1,9 @@
import 'dart:convert'; import 'dart:convert';
import 'package:test_sa/models/app_notification.dart';
import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/models/app_notification.dart';
import 'notification_manger.dart'; import 'notification_manger.dart';

@ -1,6 +1,6 @@
import 'package:test_sa/views/app_style/colors.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:test_sa/views/app_style/colors.dart';
class NotificationManger{ class NotificationManger{
// private constructor to avoid create object // private constructor to avoid create object

@ -1,10 +1,10 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/department.dart';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
class DepartmentsProvider extends ChangeNotifier{ class DepartmentsProvider extends ChangeNotifier{

@ -1,22 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
import 'package:test_sa/models/department.dart';
import 'package:test_sa/models/device/device_transfer.dart'; import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/device/device_transfer_info.dart'; import 'package:test_sa/models/device/device_transfer_info.dart';
import 'package:test_sa/models/gas_refill/gas_refill_model.dart';
import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/issue.dart';
import 'package:test_sa/models/service_report.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/service_request/service_request_search.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
class DeviceTransferProvider extends ChangeNotifier{ class DeviceTransferProvider extends ChangeNotifier{

@ -116,7 +116,6 @@ class DevicesProvider extends ChangeNotifier{
} }
return page; return page;
} catch(error) { } catch(error) {
print(error);
return []; return [];
} }
@ -144,7 +143,6 @@ class DevicesProvider extends ChangeNotifier{
} }
return page; return page;
} catch(error) { } catch(error) {
print(error);
return []; return [];
} }

@ -1,17 +1,11 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart';
import 'package:test_sa/models/issue.dart';
import 'package:test_sa/models/service_report.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/service_request/service_request_search.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
class GasRefillProvider extends ChangeNotifier{ class GasRefillProvider extends ChangeNotifier{
@ -83,7 +77,6 @@ class GasRefillProvider extends ChangeNotifier{
return response.statusCode; return response.statusCode;
} catch(error) { } catch(error) {
print(error);
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
@ -127,7 +120,6 @@ class GasRefillProvider extends ChangeNotifier{
return response.statusCode; return response.statusCode;
} catch(error) { } catch(error) {
print(error);
return -1; return -1;
} }

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class HospitalsProvider extends ChangeNotifier{ class HospitalsProvider extends ChangeNotifier{

@ -1,10 +1,10 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/app_notification.dart'; import 'package:test_sa/models/app_notification.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
class NotificationsProvider extends ChangeNotifier{ class NotificationsProvider extends ChangeNotifier{

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/part.dart'; import 'package:test_sa/models/part.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class PartsProvider extends ChangeNotifier{ class PartsProvider extends ChangeNotifier{
@ -111,7 +111,6 @@ class PartsProvider extends ChangeNotifier{
} }
return _page; return _page;
} catch(error) { } catch(error) {
print(error);
return []; return [];
} }

@ -1,13 +1,13 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visit.dart';
import 'package:test_sa/models/visits/visits_group.dart'; import 'package:test_sa/models/visits/visits_group.dart';
import 'package:test_sa/models/visits/visits_search.dart'; import 'package:test_sa/models/visits/visits_search.dart';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
class PreventiveMaintenanceVisitsProvider extends ChangeNotifier{ class PreventiveMaintenanceVisitsProvider extends ChangeNotifier{

@ -1,5 +1,8 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
import 'package:logger/logger.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/pantry/pentry.dart'; import 'package:test_sa/models/pantry/pentry.dart';
@ -7,9 +10,6 @@ import 'package:test_sa/models/user.dart';
import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visit.dart';
import 'package:test_sa/models/visits/visits_group.dart'; import 'package:test_sa/models/visits/visits_group.dart';
import 'package:test_sa/models/visits/visits_search.dart'; import 'package:test_sa/models/visits/visits_search.dart';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
import 'package:logger/logger.dart';
class RegularVisitsProvider extends ChangeNotifier{ class RegularVisitsProvider extends ChangeNotifier{
@ -164,6 +164,7 @@ class RegularVisitsProvider extends ChangeNotifier{
Map<String,dynamic> body = pentry.toMap(visit.id); Map<String,dynamic> body = pentry.toMap(visit.id);
body["id"] = visit.id; body["id"] = visit.id;
body["assetId"] = visit.deviceId; body["assetId"] = visit.deviceId;
body["ppmScheduleId"] = visit.ppmScheduleId;
// body["token"] = user.token; // body["token"] = user.token;
// body["vChecklists"]?.addAll({}); // body["vChecklists"]?.addAll({});
// body["vCalibrationTools"]?.addAll({"visitId": visit.id,}); // body["vCalibrationTools"]?.addAll({"visitId": visit.id,});
@ -183,7 +184,6 @@ class RegularVisitsProvider extends ChangeNotifier{
return response.statusCode; return response.statusCode;
} catch(error) { } catch(error) {
print(error);
return -1; return -1;
} }

@ -1,8 +1,10 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/issue.dart'; import 'package:test_sa/models/issue.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/models/service_report.dart';
@ -11,8 +13,6 @@ import 'package:test_sa/models/service_request/service_request_search.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/models/timer_model.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
class ServiceRequestsProvider extends ChangeNotifier{ class ServiceRequestsProvider extends ChangeNotifier{
@ -89,7 +89,6 @@ class ServiceRequestsProvider extends ChangeNotifier{
return response.statusCode; return response.statusCode;
} catch(error) { } catch(error) {
print(error);
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
@ -182,7 +181,6 @@ class ServiceRequestsProvider extends ChangeNotifier{
return response.statusCode; return response.statusCode;
} catch(error) { } catch(error) {
print(error);
return -1; return -1;
} }
@ -255,16 +253,20 @@ class ServiceRequestsProvider extends ChangeNotifier{
@required ServiceRequest request, @required ServiceRequest request,
}) async { }) async {
Response response; Response response;
Map<String,String> body = report.toMap();
body["uid"] = user.id;
body["token"] = user.token;
body["job_id"] = request.id;
try{ try{
response = await post( Map<String,dynamic> body = report.toMap(request);
Uri.parse( // body["uid"] = user.id;
host+URLs.createServiceReport), // body["token"] = user.token;
body: body, response = await ApiManager.instance.post(
URLs.createServiceReport,
body: body
); );
// response = await post(
// Uri.parse(
// host+URLs.createServiceReport),
// body: body,
// );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if(response.statusCode >= 200 && response.statusCode < 300) {
@ -274,7 +276,6 @@ class ServiceRequestsProvider extends ChangeNotifier{
return response.statusCode; return response.statusCode;
} catch(error) { } catch(error) {
return -1; return -1;
} }
@ -322,18 +323,25 @@ class ServiceRequestsProvider extends ChangeNotifier{
@required ServiceRequest request, @required ServiceRequest request,
}) async { }) async {
Response response; Response response;
Map<String,String> body = report.toMap(); //Map<String,dynamic> body = report.toMap(request);
body["uid"] = user.id; // body["uid"] = user.id;
body["token"] = user.token; // body["token"] = user.token;
body["job_id"] = request.id; // body["job_id"] = request.id;
body["report_id"] = request.reportID; // body["report_id"] = request.reportID;
try{ try{
response = await post( Map<String,dynamic> body = report.toMap(request);
Uri.parse( // body["uid"] = user.id;
host+URLs.updateServiceReport), // body["token"] = user.token;
body: body, response = await ApiManager.instance.put(
URLs.updateServiceReport,
body: body
); );
stateCode = response.statusCode; // response = await post(
// 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(); reset();
@ -342,7 +350,6 @@ class ServiceRequestsProvider extends ChangeNotifier{
return response.statusCode; return response.statusCode;
} catch(error) { } catch(error) {
return -1; return -1;
} }
@ -355,7 +362,7 @@ class ServiceRequestsProvider extends ChangeNotifier{
@required ServiceRequest request, @required ServiceRequest request,
}) async { }) async {
Response response; Response response;
Map<String,String> body = {}; Map<String,dynamic> body = {};
body["uid"] = user.id; body["uid"] = user.id;
body["token"] = user.token; body["token"] = user.token;
body["job_id"] = request.id; body["job_id"] = request.id;
@ -385,7 +392,7 @@ class ServiceRequestsProvider extends ChangeNotifier{
} }
Future<ServiceReport> getSingleServiceReport({ Future<ServiceReport> getSingleServiceReport({
@required String reportId, @required int reportId,
@required String host, @required String host,
@required User user, @required User user,
@required Subtitle subtitle, @required Subtitle subtitle,
@ -406,7 +413,7 @@ class ServiceRequestsProvider extends ChangeNotifier{
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. // If the call to the server was successful, parse the JSON.
return ServiceReport.fromJson( return ServiceReport.fromJson(
json.decode(utf8.decode(response.bodyBytes)),reportId); json.decode(response.body)["data"],reportId);
}else{ }else{
throw(HttpStatusManger.getStatusMessage( throw(HttpStatusManger.getStatusMessage(
status: response.statusCode, subtitle: subtitle)); status: response.statusCode, subtitle: subtitle));

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class AssignedToProvider extends ChangeNotifier{ class AssignedToProvider extends ChangeNotifier{
@ -62,7 +62,6 @@ class AssignedToProvider extends ChangeNotifier{
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch(error) {
print(error);
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();

@ -62,7 +62,6 @@ class EngineersProvider extends ChangeNotifier{
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch(error) {
print(error);
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class GasCylinderSizesProvider extends ChangeNotifier{ class GasCylinderSizesProvider extends ChangeNotifier{

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class GasCylinderTypesProvider extends ChangeNotifier{ class GasCylinderTypesProvider extends ChangeNotifier{

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class GasStatusProvider extends ChangeNotifier{ class GasStatusProvider extends ChangeNotifier{

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class GasTypesProvider extends ChangeNotifier{ class GasTypesProvider extends ChangeNotifier{

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class PentryStatusProvider extends ChangeNotifier{ class PentryStatusProvider extends ChangeNotifier{

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class PentryTaskStatusProvider extends ChangeNotifier{ class PentryTaskStatusProvider extends ChangeNotifier{

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class PentryVisitStatusProvider extends ChangeNotifier{ class PentryVisitStatusProvider extends ChangeNotifier{

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class ServiceRequestDefectTypesProvider extends ChangeNotifier{ class ServiceRequestDefectTypesProvider extends ChangeNotifier{

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class ServiceReportLastCallsProvider extends ChangeNotifier{ class ServiceReportLastCallsProvider extends ChangeNotifier{
@ -43,7 +43,7 @@ class ServiceReportLastCallsProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getCalls ({String host,User user,String serviceStatus}) async { Future<int> getCalls ({String host,User user,int serviceStatus}) async {
if(_loading == true) if(_loading == true)
return -2; return -2;
_loading = true; _loading = true;

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class ServiceRequestPriorityProvider extends ChangeNotifier{ class ServiceRequestPriorityProvider extends ChangeNotifier{
@ -63,7 +63,6 @@ class ServiceRequestPriorityProvider extends ChangeNotifier{
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch(error) {
print(error);
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class ServiceReportReasonsProvider extends ChangeNotifier{ class ServiceReportReasonsProvider extends ChangeNotifier{

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class ServiceReportTypesProvider extends ChangeNotifier{ class ServiceReportTypesProvider extends ChangeNotifier{

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class ServiceStatusProvider extends ChangeNotifier{ class ServiceStatusProvider extends ChangeNotifier{
@ -50,7 +50,7 @@ class ServiceStatusProvider extends ChangeNotifier{
Response response; Response response;
try{ try{
response = await ApiManager.instance.get( response = await ApiManager.instance.get(
URLs.getServiceTypes, URLs.getAssetTypes,
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if(response.statusCode >= 200 && response.statusCode < 300) {

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class ServiceRequestStatusProvider extends ChangeNotifier{ class ServiceRequestStatusProvider extends ChangeNotifier{

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class ServiceRequestedThroughProvider extends ChangeNotifier{ class ServiceRequestedThroughProvider extends ChangeNotifier{

@ -1,12 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class ServiceRequestTypeProvider extends ChangeNotifier{ class ServiceRequestTypeProvider extends ChangeNotifier{

@ -1,11 +1,10 @@
import 'dart:convert'; import 'dart:convert';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class UserProvider extends ChangeNotifier{ class UserProvider extends ChangeNotifier{
@ -64,7 +63,6 @@ class UserProvider extends ChangeNotifier{
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch(error) {
print(error);
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return -1; return -1;

@ -1,3 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/departments_provider.dart'; import 'package:test_sa/controllers/providers/api/departments_provider.dart';
import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart';
@ -37,9 +40,7 @@ import 'package:test_sa/views/pages/user/visits/preventive_maintenance_visits_pa
import 'package:test_sa/views/pages/user/visits/regular_visits_page.dart'; import 'package:test_sa/views/pages/user/visits/regular_visits_page.dart';
import 'package:test_sa/views/widgets/departments/single_department_picker.dart'; import 'package:test_sa/views/widgets/departments/single_department_picker.dart';
import 'package:test_sa/views/widgets/equipment/single_device_picker.dart'; import 'package:test_sa/views/widgets/equipment/single_device_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:provider/provider.dart';
import 'controllers/providers/api/parts_provider.dart'; import 'controllers/providers/api/parts_provider.dart';
import 'controllers/providers/api/preventive_maintenance_visits_provider.dart'; import 'controllers/providers/api/preventive_maintenance_visits_provider.dart';
import 'controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart'; import 'controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart';

@ -1,45 +1,44 @@
import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/lookup.dart';
import 'model.dart';
class Device{ class Device{
int id; int id;
String serialNumber; String serialNumber;
String number; String number;
String brand; // String brand;
String model; // String model;
DateTime productionDate; ModelDefinition modelDefinition;
DateTime supplyDate; Hospital hospital;
DateTime installDate;
DateTime receivingDate;
DateTime operationDate;
DateTime warrantyDate;
Device({ Device({
this.id, this.id,
this.serialNumber, this.serialNumber,
this.number, this.number,
this.brand, this.hospital,
this.model, // this.brand,
this.productionDate, // this.model,
this.supplyDate, this.modelDefinition,
this.installDate,
this.receivingDate,
this.operationDate,
this.warrantyDate,
}); });
factory Device.fromJson(Map<String,dynamic> parsedJson){ factory Device.fromJson(Map<String,dynamic> parsedJson){
return Device( return Device(
id: parsedJson["id"], id: parsedJson["id"],
serialNumber: parsedJson["assetSerialNo"], serialNumber: parsedJson["assetSerialNo"],
number: parsedJson["assetNumber"], number: parsedJson["assetNumber"],
brand: parsedJson["modelDefinition"] == null ? "" : modelDefinition:ModelDefinition.fromJson(parsedJson["modelDefinition"]),
parsedJson["modelDefinition"]["manufacturerName"], hospital:Hospital.fromJson(parsedJson["site"]),
model: parsedJson["modelDefinition"] == null ? "" : // parsedJson["modelDefinition"] == null ? "" :
parsedJson["modelDefinition"]["modelName"], // parsedJson["modelDefinition"]["manufacturerName"],
productionDate: getDateFromString(parsedJson["production_date"]), // model: parsedJson["modelDefinition"] == null ? "" :
supplyDate: getDateFromString(parsedJson["supply_date "]), // parsedJson["modelDefinition"]["modelName"],
installDate: getDateFromString(parsedJson["install_date "]),
receivingDate: getDateFromString(parsedJson["receving_date "]),
operationDate: getDateFromString(parsedJson["operation_date "]),
warrantyDate: getDateFromString(parsedJson["warranty_date "]),
); );
} }
@ -48,21 +47,19 @@ class Device{
id: device.id, id: device.id,
serialNumber: device.serialNumber, serialNumber: device.serialNumber,
number: device.number, number: device.number,
brand: device.brand, // brand: device.brand,
model: device.model, // model: device.model,
productionDate: device.productionDate,
supplyDate: device.supplyDate,
installDate: device.installDate,
receivingDate: device.receivingDate,
operationDate: device.operationDate,
warrantyDate: device.warrantyDate,
); );
} }
}
DateTime getDateFromString(String unixDate){ Map<String, dynamic> toMap(Lookup assetType) {
if(unixDate == null) return {
return null; 'id': id,
return DateTime.fromMillisecondsSinceEpoch( 'assetSerialNo': serialNumber,
int.parse(unixDate)); 'assetNumber': number,
'modelDefinition': modelDefinition.toJson(),
'site': hospital.toMap(),
'AssetType':assetType.toMap(),
};
}
} }

@ -1,4 +1,3 @@
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/department.dart';
import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/device/device.dart';
@ -42,9 +41,6 @@ class DeviceTransfer{
} }
factory DeviceTransfer.fromJson(Map<String,dynamic> parsedJson){ factory DeviceTransfer.fromJson(Map<String,dynamic> parsedJson){
print(parsedJson["id"],);
print(URLs.getFileUrl(parsedJson["senderAttachmentName"]),);
print(URLs.getFileUrl(parsedJson["receiverAttachmentName"]),);
return DeviceTransfer( return DeviceTransfer(
id: parsedJson["id"], id: parsedJson["id"],
title: parsedJson["transferCode"], title: parsedJson["transferCode"],

@ -1,6 +1,4 @@
import 'package:http/http.dart';
import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/department.dart';
import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';

@ -0,0 +1,47 @@
class ModelDefinition {
int id;
String assetName;
String modelDefCode;
String modelName;
String manufacturerName;
String supplierName;
String replacementDate;
int lifeSpan;
ModelDefinition(
{this.id,
this.assetName,
this.modelDefCode,
this.modelName,
this.manufacturerName,
this.supplierName,
this.replacementDate,
this.lifeSpan,});
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['assetName'] = assetName;
data['modelDefCode'] = modelDefCode;
data['modelName'] = modelName;
data['manufacturerName'] = manufacturerName;
data['supplierName'] = supplierName;
data['replacementDate'] = replacementDate;
data['lifeSpan'] = lifeSpan;
return data;
}
factory ModelDefinition.fromJson(Map<String, dynamic> map) {
if(map == null) return null;
return ModelDefinition(
id: map['id'] as int,
assetName: map['assetName'] as String,
modelDefCode: map['modelDefCode'] as String,
modelName: map['modelName'] as String,
manufacturerName: map['manufacturerName'] as String,
supplierName: map['supplierName'] as String,
replacementDate: map['replacementDate'] as String,
lifeSpan: map['lifeSpan'] as int,
);
}
}

@ -7,10 +7,12 @@ class Engineer{
this.name, this.name,
}); });
factory Engineer.fromJson(Map<String,dynamic> parsedJson){ factory Engineer.fromJson(Map<String,dynamic> parsedJson){
return Engineer( return Engineer(
id: parsedJson["userId"], id: parsedJson["userId"] ?? parsedJson["id"],
name: parsedJson["userName"], name: parsedJson["userName"] ?? parsedJson["name"],
); );
} }
factory Engineer.fromEngineer(Engineer department){ factory Engineer.fromEngineer(Engineer department){
@ -28,4 +30,12 @@ class Engineer{
@override @override
int get hashCode => id.hashCode; int get hashCode => id.hashCode;
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
};
}
} }

@ -1,16 +1,23 @@
class Hospital{ class Hospital{
int id; int id;
int customerCode;
String name; String name;
List buildings;
Hospital({ Hospital({
this.id, this.id,
this.customerCode,
this.name, this.name,
this.buildings,
}); });
factory Hospital.fromJson(Map<String,dynamic> parsedJson){ factory Hospital.fromJson(Map<String,dynamic> parsedJson){
return Hospital( return Hospital(
id: parsedJson["id"], id: parsedJson["id"],
name: parsedJson["custName"], name: parsedJson["custName"],
customerCode: parsedJson["customerCode"],
buildings: parsedJson["buildings"]
); );
} }
@ -18,6 +25,17 @@ class Hospital{
return Hospital( return Hospital(
id: hospital?.id, id: hospital?.id,
name: hospital?.name, name: hospital?.name,
customerCode: hospital?.customerCode,
buildings:hospital?.buildings
); );
} }
Map<String, dynamic> toMap() {
return {
'id': id,
'customerCode': customerCode,
'custName': name,
"buildings":buildings
};
}
} }

@ -44,7 +44,7 @@ class Lookup{
return Lookup( return Lookup(
name: parsedJson["name"], name: parsedJson["name"],
id: parsedJson["id"], id: parsedJson["id"],
value: parsedJson["value"] ?? parsedJson["id"], value: parsedJson["value"],
); );
} }
@ -58,10 +58,10 @@ class Lookup{
// ); // );
// } // }
factory Lookup.fromIntIdJson(Map<String,dynamic> parsedJson){ // factory Lookup.fromIntIdJson(Map<String,dynamic> parsedJson){
return Lookup( // return Lookup(
name: parsedJson["value"], // name: parsedJson["value"],
id: parsedJson["id"], // id: parsedJson["id"],
); // );
} // }
} }

@ -13,7 +13,7 @@ class CalibrationTool{
Map<String, dynamic> toMap(int visitId) { Map<String, dynamic> toMap(int visitId) {
return { return {
"id":id, "id":id ?? 0,
"visitId": visitId, "visitId": visitId,
if(assetsNumber != null) 'assetId': (assetsNumber?.id).toString(), if(assetsNumber != null) 'assetId': (assetsNumber?.id).toString(),
if(dataOfTesting != null) 'calibrationDateOfTesters': dataOfTesting.toIso8601String(), if(dataOfTesting != null) 'calibrationDateOfTesters': dataOfTesting.toIso8601String(),

@ -2,9 +2,9 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/pantry/calibration_tools.dart'; import 'package:test_sa/models/pantry/calibration_tools.dart';
import 'package:test_sa/models/pantry/contact.dart';
import 'package:test_sa/models/pantry/pm_kit.dart'; import 'package:test_sa/models/pantry/pm_kit.dart';
import 'package:test_sa/models/pantry/ppm_check_list.dart'; import 'package:test_sa/models/pantry/ppm_check_list.dart';
import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/models/timer_model.dart';
@ -22,8 +22,10 @@ class Pentry{
List<PPMCheckList> ppmCheckLists; List<PPMCheckList> ppmCheckLists;
List<CalibrationTool> calibrationTools; List<CalibrationTool> calibrationTools;
List<PMKit> pmKits; List<PMKit> pmKits;
String signature; String signatureNurse;
Uint8List localSignature; String signatureEngineer;
Uint8List localNurseSignature;
Uint8List localEngineerSignature;
Pentry({ Pentry({
this.travelingHours, this.travelingHours,
@ -38,8 +40,10 @@ class Pentry{
this.ppmCheckLists, this.ppmCheckLists,
this.calibrationTools, this.calibrationTools,
this.pmKits, this.pmKits,
this.signature, this.signatureNurse,
this.localSignature this.signatureEngineer,
this.localNurseSignature,
this.localEngineerSignature
}); });
bool validate(){ bool validate(){
@ -57,7 +61,7 @@ class Pentry{
Map<String, dynamic> toMap(int visitId) { Map<String, dynamic> toMap(int visitId) {
Map<String, dynamic> map = {}; Map<String, dynamic> map = {};
map["visitStatusId"] = ppmVisitStatus?.id.toString(); map["visitStatusId"] = ppmVisitStatus?.id.toString();
if(status != null) map["visitStatusId"] = status?.id.toString(); //if(status != null) map["visitStatusId"] = status?.id.toString();
if(travelingHours != null) map["travelingHours"] = travelingHours; if(travelingHours != null) map["travelingHours"] = travelingHours;
//if(imageFile != null) map["file_attachement"] = base64Encode(imageFile.readAsBytesSync()); //if(imageFile != null) map["file_attachement"] = base64Encode(imageFile.readAsBytesSync());
map["actualDate"] = actualVisitDate.toIso8601String(); map["actualDate"] = actualVisitDate.toIso8601String();
@ -85,7 +89,8 @@ class Pentry{
map["vChecklists"] = ppmCheckLists.map((e) => e.toMap(visitId)).toList(); map["vChecklists"] = ppmCheckLists.map((e) => e.toMap(visitId)).toList();
map["vCalibrationTools"] = calibrationTools.map((e) => e.toMap(visitId)).toList(); map["vCalibrationTools"] = calibrationTools.map((e) => e.toMap(visitId)).toList();
map["vKits"] = pmKits.map((e) => e.toMap(visitId)).toList(); map["vKits"] = pmKits.map((e) => e.toMap(visitId)).toList();
map["signature"] = signature; map["nurseSignature"] = signatureNurse;
map["engSignature"] = signatureEngineer;
return map; return map;
} }
@ -132,7 +137,8 @@ class Pentry{
ppmCheckLists: ppmCheckLists, ppmCheckLists: ppmCheckLists,
calibrationTools: calibrationTools, calibrationTools: calibrationTools,
pmKits: pmKits, pmKits: pmKits,
signature: map["signature"], signatureNurse: URLs.getFileUrl(map["nurseSignature"]) ,
signatureEngineer:URLs.getFileUrl(map["engSignature"]),
); );
} }
@ -148,7 +154,8 @@ class Pentry{
List<PPMCheckList> ppmCheckLists, List<PPMCheckList> ppmCheckLists,
List<CalibrationTool> calibrationTools, List<CalibrationTool> calibrationTools,
List<PMKit> pmKits, List<PMKit> pmKits,
String signature String signatureNurse,
String signatureEngineer,
}) { }) {
return Pentry( return Pentry(
ppmVisitStatus: ppmVisitStatus ?? this.ppmVisitStatus, ppmVisitStatus: ppmVisitStatus ?? this.ppmVisitStatus,
@ -162,7 +169,8 @@ class Pentry{
ppmCheckLists: ppmCheckLists ?? this.ppmCheckLists?.map((e) => e.copyWith())?.toList(), ppmCheckLists: ppmCheckLists ?? this.ppmCheckLists?.map((e) => e.copyWith())?.toList(),
calibrationTools: calibrationTools ?? this.calibrationTools?.map((e) => e.copyWith())?.toList(), calibrationTools: calibrationTools ?? this.calibrationTools?.map((e) => e.copyWith())?.toList(),
pmKits: pmKits ?? this.pmKits.map((e) => e.copyWith()).toList(), pmKits: pmKits ?? this.pmKits.map((e) => e.copyWith()).toList(),
signature: signature ?? this.signature signatureNurse: signatureNurse ?? this.signatureNurse,
signatureEngineer: signatureEngineer ?? this.signatureEngineer
); );
} }
} }

@ -23,7 +23,7 @@ class PMKit{
Map<String, dynamic> toMap(int visitId) { Map<String, dynamic> toMap(int visitId) {
return { return {
"id":id, "id":id ?? 0,
"visitId": visitId, "visitId": visitId,
if(itemCode != null) 'partCatalogItemId': (itemCode?.id).toString(), if(itemCode != null) 'partCatalogItemId': (itemCode?.id).toString(),
// if(itemName != null) 'itemName': itemName, // if(itemName != null) 'itemName': itemName,
@ -38,7 +38,7 @@ class PMKit{
factory PMKit.fromMap(Map<String, dynamic> map) { factory PMKit.fromMap(Map<String, dynamic> map) {
return PMKit( return PMKit(
id: map['id'], id: map['id'],
//itemCode: Lookup.fromJson(map['itemCode']), itemCode: Lookup(id:map['partCatalogItemId'],name:map["partNumber"]),
itemName: map['itemName'] as String, itemName: map['itemName'] as String,
preparationTimeFrame: map['preparationTimeFrame'] as String, preparationTimeFrame: map['preparationTimeFrame'] as String,
kitFrequencyDemand: map['kitFrequencyDemand'] as String, kitFrequencyDemand: map['kitFrequencyDemand'] as String,

@ -17,7 +17,7 @@ class PPMCheckList{
Map<String, dynamic> toMap(int visitId) { Map<String, dynamic> toMap(int visitId) {
return { return {
'id': id, 'id': id ?? 0,
"visitId": visitId, "visitId": visitId,
if(status != null) 'taskStatusId': status?.id.toString(), if(status != null) 'taskStatusId': status?.id.toString(),
if(title != null) 'task': title, if(title != null) 'task': title,

@ -1,23 +1,37 @@
class Part{ class Part{
int id; int id;
int reportPartID;
String code; String code;
String name; String name;
int quantity; int quantity;
Part({ Part({
this.id, this.id,
this.reportPartID,
this.code, this.code,
this.name, this.name,
this.quantity = 1, this.quantity = 1,
}); });
factory Part.fromJson(Map<String,dynamic> parsedJson){ Map<String,dynamic> toJson(){
return {
"id": reportPartID ?? 0,
"sparePart":{
"id":id,
"partNo": code,
"partName":name
},
"qty":quantity
};
}
factory Part.fromJson(Map<String,dynamic> parsedJson,{Map<String,dynamic> reportJson}){
return Part( return Part(
id: parsedJson["id"], id: parsedJson["id"],
reportPartID: reportJson != null ? reportJson["id"] : null,
code: parsedJson["partNo"], code: parsedJson["partNo"],
name: parsedJson["partName"], name: parsedJson["partName"],
quantity: parsedJson["partQuantity"] == null quantity: reportJson != null ? (reportJson["qty"] ?? 1).toInt() : 1,
? 1 : int.tryParse(parsedJson["partQuantity"].toString()) ?? 1,
); );
} }
} }

@ -1,21 +1,25 @@
import 'dart:convert'; import 'dart:typed_data';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/part.dart'; import 'package:test_sa/models/engineer.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/part.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/models/timer_model.dart';
class ServiceReport { class ServiceReport {
String id; int id;
String operatingHours; String operatingHours;
DateTime visitDate; DateTime visitDate;
DateTime endDate; DateTime endDate;
Lookup serviceType; Lookup assetType;
Lookup callLastSituation; Lookup callLastSituation;
Engineer engineer;
Lookup status; Lookup status;
Lookup type; Lookup type;
Lookup reason; Lookup reason;
String faultDescription; int faultDescriptionId;
String workPreformed; String workPreformed;
//String workHours; //String workHours;
String travelingHours; String travelingHours;
@ -27,18 +31,23 @@ class ServiceReport {
String quantity; String quantity;
String jobSheetNumber; String jobSheetNumber;
TimerModel timer; TimerModel timer;
String signatureNurse;
String signatureEngineer;
Uint8List localNurseSignature;
Uint8List localEngineerSignature;
ServiceReport({ ServiceReport({
this.id, this.id,
this.visitDate, this.visitDate,
this.endDate, this.endDate,
this.serviceType, this.assetType,
this.status, this.status,
this.type, this.type,
this.faultDescription, this.faultDescriptionId,
//this.workHours, //this.workHours,
this.travelingHours, this.travelingHours,
this.parts, this.parts,
this.engineer,
this.workPreformed, this.workPreformed,
this.reason, this.reason,
this.operatingHours, this.operatingHours,
@ -50,53 +59,73 @@ class ServiceReport {
this.invoiceNumber, this.invoiceNumber,
this.quantity = "1", this.quantity = "1",
this.timer, this.timer,
this.signatureNurse,
this.signatureEngineer,
this.localNurseSignature,
this.localEngineerSignature
}); });
Map<String,dynamic> toMap(){ Map<String,dynamic> toMap(ServiceRequest request){
Map<String,String> _map = {}; Map<String,dynamic> _map = {};
if(id != null) _map["id"] = id; if(id != null) _map["id"] = id;
if(visitDate != null) _map["visit_date"] = (visitDate.millisecondsSinceEpoch ~/ 1000).toString(); if(visitDate != null) _map["visitDate"] = visitDate.toIso8601String();
if(serviceType != null) _map["service_type"] = serviceType.id.toString(); //if(serviceType != null) _map["service_type"] = serviceType.id.toString();
if(status != null) _map["status"] = status.toMap(); if(status != null) _map["status"] = status?.toMap();
if(type != null) _map["service_report_type"] = type.id.toString(); if(type != null) _map["typeOfWO"] = type?.toMap();
if(faultDescription != null && faultDescription.isNotEmpty) _map["fault_description"] = faultDescription; 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(workHours != null && workHours.isNotEmpty) _map["working_hours"] = workHours;
if(timer != null){ if(timer != null){
_map["start_time"] = (timer.startAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0); _map["startofWorkTime"] = timer.startAt.toIso8601String();
_map["end_time"] = ((timer.endAt ?? DateTime.now()).millisecondsSinceEpoch / 1000).toStringAsFixed(0); _map["endofWorkTime"] = (timer.endAt ?? DateTime.now()).toIso8601String();
_map["working_hours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5); _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["work_performed"] = workPreformed; // if(workPreformed != null && workPreformed.isNotEmpty){
// _map["faultDescription"] = {
// //"id":faultDescriptionId ?? 0,
// "workPerformed":workPreformed
// };
// }
if(jobSheetNumber != null && jobSheetNumber.isNotEmpty) _map["job_sheet_no"] = jobSheetNumber; if(jobSheetNumber != null && jobSheetNumber.isNotEmpty) _map["job_sheet_no"] = jobSheetNumber;
if(parts != null && parts.isNotEmpty){ if(parts != null && parts.isNotEmpty){
Map<String,int> _partsMap = {}; _map["sparePartsWorkOrders"] = parts.map((e) => e.toJson()).toList();
// parts.forEach((part) { }
// if(part.id == null) if(device != null && device.id != null){
// _partsMap[part.id] = part.quantity; _map["callRequest"] = {
// }); "id":request.id,
_map["parts"] = json.encode(_partsMap); "asset":device?.toMap(assetType),
};
_map["callRequest"]["asset"]["invoiceNumber"] = invoiceNumber;
} }
//if(device?.id != null && device.id != null) _map["eq_id"] = device.id; _map["AssignedEmployee"] = engineer?.toMap();
if(quantity != null && quantity.isNotEmpty) _map["qty"] = quantity; //if(quantity != null && quantity.isNotEmpty) _map["qty"] = quantity;
if(endDate != null) _map["end_date"] = (endDate.millisecondsSinceEpoch ~/ 1000).toString(); //if(endDate != null) _map["end_date"] = (endDate.millisecondsSinceEpoch ~/ 1000).toString();
if(reason != null) _map["reasons"] = reason.toMap(); if(reason != null) _map["reason"] = reason.toMap();
if(operatingHours != null && operatingHours.isNotEmpty) _map["operation_hours"] = operatingHours; //if(operatingHours != null && operatingHours.isNotEmpty) _map["operation_hours"] = operatingHours;
if(callLastSituation != null) _map["calllastSituation"] = callLastSituation.id.toString(); if(callLastSituation != null) _map["calllastSituation"] = callLastSituation.toMap();
if(image != null) _map["image"] = image; //if(image != null) _map["image"] = image;
if(invoiceCode != null) _map["invoice_no"] = invoiceCode; //if(invoiceCode != null) _map["invoice_no"] = invoiceCode;
if(invoiceNumber != null) _map["invoice_code"] = invoiceNumber; //if(invoiceNumber != null) _map["invoice_code"] = invoiceNumber;
if(image != null){
_map["attachmentsWorkOrder"]=[{
"name":image
}];
}
_map["nurseSignature"] = signatureNurse;
_map["engSignature"] = signatureEngineer;
return _map; return _map;
} }
bool validate(){ bool validate(){
if(visitDate == null) return false; if(visitDate == null) return false;
if(serviceType == null) return false; //if(serviceType == null) return false;
if(status == null) return false; if(status == null) return false;
if(type == null) return false; if(type == null) return false;
if(engineer == null) return false;
if(callLastSituation == null) return false; if(callLastSituation == null) return false;
if(callLastSituation?.id == 12){ if(callLastSituation?.value == 12){
if(invoiceCode != null || invoiceCode?.isEmpty == true) return false; // if(invoiceCode != null || invoiceCode?.isEmpty == true) return false;
if(invoiceNumber != null || invoiceNumber?.isEmpty== true ) return false; if(invoiceNumber != null || invoiceNumber?.isEmpty== true ) return false;
} }
if(parts == null) return false; if(parts == null) return false;
@ -109,42 +138,49 @@ class ServiceReport {
return true; return true;
} }
factory ServiceReport.fromJson(Map<String,dynamic> parsedJson,String id){ factory ServiceReport.fromJson(Map<String,dynamic> parsedJson,int id){
List<Part> _parts = []; List<Part> _parts = [];
if(parsedJson["parts"] != null){ if(parsedJson["sparePartsWorkOrders"] != null){
if(parsedJson["parts"][0]["id"] != null){ if(parsedJson["sparePartsWorkOrders"][0]["id"] != null){
List partsList = parsedJson["parts"]; List partsList = parsedJson["sparePartsWorkOrders"];
_parts = partsList.map((e) => Part.fromJson(e)).toList(); _parts = partsList.map((e) => Part.fromJson(
e["sparePart"],reportJson: e)).toList();
} }
} }
return ServiceReport( return ServiceReport(
id: id, id: id,
serviceType: Lookup.fromJson(parsedJson["service_type"]), assetType: Lookup.fromJson(parsedJson["assetType"]),
callLastSituation: Lookup.fromJson(parsedJson["call_last_situtation"]), callLastSituation: Lookup.fromJson(parsedJson["calllastSituation"]),
reason: Lookup.fromJson(parsedJson["reasons"]), reason: Lookup.fromJson(parsedJson["reason"]),
status: Lookup.fromJson(parsedJson["service_report_status"]), status: Lookup.fromJson(parsedJson["status"]),
type: Lookup.fromJson(parsedJson["service_report_type"]), type: Lookup.fromJson(parsedJson["typeOfWO"]),
faultDescription: parsedJson["fault_description"], //faultDescriptionId: parsedJson["fault_description"],
endDate:getDate(parsedJson["end_date"]), endDate:DateTime.tryParse(parsedJson["endofWorkTime"]),
invoiceCode: parsedJson["invoice_code"], //invoiceCode: parsedJson["invoice_code"],
invoiceNumber: parsedJson["invoice_no"], //invoiceNumber: parsedJson["invoice_no"],
jobSheetNumber: parsedJson["job_sheet_no"], //jobSheetNumber: parsedJson["job_sheet_no"],
operatingHours: parsedJson["operation_hours"], //operatingHours: parsedJson["workingHours"],
engineer: Engineer.fromJson(parsedJson["assignedEmployee"]),
parts: _parts, parts: _parts,
quantity: parsedJson["nid"], //quantity: parsedJson["nid"],
travelingHours: parsedJson["traveling_hours"], //travelingHours: parsedJson["traveling_hours"],
visitDate: getDate(parsedJson["visit_date"]), visitDate: DateTime.tryParse(parsedJson["visitDate"]),
//workHours: parsedJson["working_hours"], //workHours: parsedJson["working_hours"],
timer: TimerModel( timer: TimerModel(
durationInSecond: (int.tryParse(parsedJson["working_hours"] ?? "") ?? 0) * 60 *60), startAt: DateTime.tryParse(parsedJson["startofWorkTime"]),
workPreformed: parsedJson["work_performed"], endAt: DateTime.tryParse(parsedJson["endofWorkTime"]),
device: parsedJson["eq_nid"] == null ? null : Device(id: parsedJson["eq_nid"],serialNumber: parsedJson["eq_serial"]) 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"]),
); );
} }
static getDate(String date){ // static getDate(String date){
return date == null || date.isEmpty // return date == null || date.isEmpty
? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(date) * 1000); // ? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(date) * 1000);
} // }
} }

@ -1,8 +1,7 @@
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import '../timer_model.dart';
class ServiceRequest{ class ServiceRequest{
String id; String id;
String requestCode; String requestCode;
@ -29,12 +28,13 @@ class ServiceRequest{
String visitDate; String visitDate;
DateTime nextVisitDate; DateTime nextVisitDate;
String jobSheetNumber; String jobSheetNumber;
String reportID; int reportID;
String deviceNumber; String deviceNumber;
Lookup priority; Lookup priority;
Lookup defectType; Lookup defectType;
Lookup type; Lookup type;
Lookup requestedThrough; Lookup requestedThrough;
Device device;
ServiceRequest({ ServiceRequest({
this.id, this.id,
@ -68,6 +68,7 @@ class ServiceRequest{
this.deviceNumber, this.deviceNumber,
this.type, this.type,
this.requestedThrough, this.requestedThrough,
this.device,
}); });
factory ServiceRequest.fromJson(Map<String,dynamic> parsedJson){ factory ServiceRequest.fromJson(Map<String,dynamic> parsedJson){
@ -98,7 +99,7 @@ class ServiceRequest{
engineerName: parsedJson["assignedEmployee"] == null ? null : engineerName: parsedJson["assignedEmployee"] == null ? null :
parsedJson["assignedEmployee"]["name"], parsedJson["assignedEmployee"]["name"],
hospitalId: parsedJson["asset"]["site"]["id"], hospitalId: parsedJson["asset"]["site"]["id"],
reportID: parsedJson["workOrder"]["id"].toString(), reportID: parsedJson["workOrder"]["workOrderId"],
viewReport: parsedJson["workOrder"] != null, viewReport: parsedJson["workOrder"] != null,
deviceModel: parsedJson["asset"]["modelDefinition"]["modelName"], deviceModel: parsedJson["asset"]["modelDefinition"]["modelName"],
engineerMobile: parsedJson["assignedEmployee"] == null ? null : engineerMobile: parsedJson["assignedEmployee"] == null ? null :
@ -108,6 +109,7 @@ class ServiceRequest{
visitDate: DateTime.tryParse(parsedJson["visitDate"] ?? "").toString().split(" ").first, visitDate: DateTime.tryParse(parsedJson["visitDate"] ?? "").toString().split(" ").first,
nextVisitDate: DateTime.tryParse(parsedJson["nextVisitDate"] ?? ""), nextVisitDate: DateTime.tryParse(parsedJson["nextVisitDate"] ?? ""),
workPerformed: parsedJson["workOrder"]["workPerformed"], workPerformed: parsedJson["workOrder"]["workPerformed"],
device: Device.fromJson(parsedJson["asset"])
); );
} }
} }

@ -99,7 +99,6 @@ class User{
} else { } else {
type = UsersTypes.engineer; type = UsersTypes.engineer;
} }
print(parsedJson);
return User( return User(
id: parsedJson["userID"], id: parsedJson["userID"],
userName: parsedJson["username"], userName: parsedJson["username"],

@ -1,6 +1,5 @@
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/pantry/pentry.dart'; import 'package:test_sa/models/pantry/pentry.dart';
import 'package:test_sa/models/timer_model.dart';
class Visit{ class Visit{
int id; int id;
@ -10,6 +9,7 @@ class Visit{
int hospitalId; int hospitalId;
String hospitalName; String hospitalName;
int deviceId; int deviceId;
int ppmScheduleId;
String deviceSerialNumber; String deviceSerialNumber;
String deviceArabicName; String deviceArabicName;
String deviceEnglishName; String deviceEnglishName;
@ -24,6 +24,7 @@ class Visit{
Visit({ Visit({
this.id, this.id,
this.ppmScheduleId,
this.serialNumber, this.serialNumber,
this.hospitalId, this.hospitalId,
this.hospitalName, this.hospitalName,
@ -52,6 +53,7 @@ class Visit{
return Visit( return Visit(
id: parsedJson["id"], id: parsedJson["id"],
serialNumber: parsedJson["visitCode"], serialNumber: parsedJson["visitCode"],
ppmScheduleId: parsedJson["ppmScheduleId"],
hospitalId: parsedJson["siteId"], hospitalId: parsedJson["siteId"],
deviceNumber: parsedJson["assetNumber"], deviceNumber: parsedJson["assetNumber"],
hospitalName: parsedJson["siteName"], hospitalName: parsedJson["siteName"],

@ -1,6 +1,5 @@
import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/models/engineer.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visit.dart';
class VisitsGroup{ class VisitsGroup{

@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/models/lookup.dart';
class AColors { class AColors {
AColors._(); AColors._();
static const Color white = Color(0xffffffff); static const Color white = Color(0xffffffff);

@ -4,7 +4,6 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart';

@ -1,24 +1,17 @@
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/notification/notification_manger.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/controllers/validator/validator.dart'; import 'package:test_sa/controllers/validator/validator.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/pages/register.dart';
import 'package:test_sa/views/pages/user/land_page.dart'; import 'package:test_sa/views/pages/user/land_page.dart';
import 'package:test_sa/views/widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/buttons/app_flat_button.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import '../widgets/buttons/app_outlined_button.dart';
class Login extends StatefulWidget { class Login extends StatefulWidget {
static final String id = "/login"; static final String id = "/login";
@override @override

@ -27,7 +27,6 @@ class _SplashScreenState extends State<SplashScreen> {
UserProvider _userProvider; UserProvider _userProvider;
_goToUserScreen(User user){ _goToUserScreen(User user){
print(user.toJson());
if(user.tokenLife != null && user.tokenLife.isAfter(DateTime.now())){ if(user.tokenLife != null && user.tokenLife.isAfter(DateTime.now())){
_userProvider.user = user; _userProvider.user = user;
// Navigator.of(context).pushNamed(Login.id); // Navigator.of(context).pushNamed(Login.id);

@ -13,7 +13,6 @@ import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button.dart';
import 'package:test_sa/views/widgets/gas_refill/gas_refill_create_details_item.dart';
import 'package:test_sa/views/widgets/gas_refill/gas_refill_update_details_item.dart'; import 'package:test_sa/views/widgets/gas_refill/gas_refill_update_details_item.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/requests/info_row.dart'; import 'package:test_sa/views/widgets/requests/info_row.dart';

@ -24,14 +24,12 @@ import 'package:test_sa/views/pages/device_transfer/request_device_transfer.dart
import 'package:test_sa/views/pages/device_transfer/track_device_transfer.dart'; import 'package:test_sa/views/pages/device_transfer/track_device_transfer.dart';
import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart'; import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart';
import 'package:test_sa/views/pages/user/gas_refill/track_gas_refill.dart'; import 'package:test_sa/views/pages/user/gas_refill/track_gas_refill.dart';
import 'package:test_sa/views/pages/user/notifications/notifications_page.dart';
import 'package:test_sa/views/pages/user/requests/create_request.dart'; import 'package:test_sa/views/pages/user/requests/create_request.dart';
import 'package:test_sa/views/pages/user/visits/regular_visits_page.dart'; import 'package:test_sa/views/pages/user/visits/regular_visits_page.dart';
import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button.dart';
import 'package:test_sa/views/widgets/dialogs/dialog.dart'; import 'package:test_sa/views/widgets/dialogs/dialog.dart';
import 'package:test_sa/views/widgets/drawer/drawer_item.dart'; import 'package:test_sa/views/widgets/drawer/drawer_item.dart';
import 'package:url_launcher/url_launcher.dart';
import '../../widgets/land_page/land_page_item.dart'; import '../../widgets/land_page/land_page_item.dart';
import 'profile_page.dart'; import 'profile_page.dart';
@ -263,70 +261,70 @@ class _LandPageState extends State<LandPage> {
), ),
), ),
), ),
Align( // Align(
alignment: Alignment.bottomCenter, // alignment: Alignment.bottomCenter,
child: Container( // child: Container(
padding: EdgeInsets.all(16), // padding: EdgeInsets.all(16),
color: AColors.primaryColor, // color: AColors.primaryColor,
child: Row( // child: Row(
children: [ // children: [
AIconButton( // AIconButton(
iconData: Icons.mail, // iconData: Icons.mail,
onPressed: (){ // onPressed: (){
launch("mailto:customerservice@Test SA.com"); // launch("mailto:customerservice@Test SA.com");
//
}, // },
), // ),
Spacer(), // Spacer(),
// Expanded( // // Expanded(
// child: MaterialButton( // // child: MaterialButton(
// splashColor: AColors.secondaryColor.withOpacity(.5), // // splashColor: AColors.secondaryColor.withOpacity(.5),
// child: Row( // // child: Row(
// mainAxisAlignment: MainAxisAlignment.center, // // mainAxisAlignment: MainAxisAlignment.center,
// children: [ // // children: [
// Container( // // Container(
// padding: EdgeInsets.all(12), // // padding: EdgeInsets.all(12),
// decoration: BoxDecoration( // // decoration: BoxDecoration(
// borderRadius: BorderRadius.circular( // // borderRadius: BorderRadius.circular(
// 8 * AppStyle.getScaleFactor(context) // // 8 * AppStyle.getScaleFactor(context)
// ), // // ),
// color: AColors.onPrimaryColor // // color: AColors.onPrimaryColor
// ), // // ),
// child: Icon( // // child: Icon(
// Icons.phone_in_talk, // // Icons.phone_in_talk,
// color: AColors.primaryColor , // // color: AColors.primaryColor ,
// size: 32, // // size: 32,
// ), // // ),
// ), // // ),
// SizedBox( // // SizedBox(
// width: 12 * AppStyle.getScaleFactor(context), // // width: 12 * AppStyle.getScaleFactor(context),
// ), // // ),
// Text( // // Text(
// "${_subtitle.hotLine}\n ", // // "${_subtitle.hotLine}\n ",
// // //
// style: Theme.of(context).textTheme.headline6.copyWith( // // style: Theme.of(context).textTheme.headline6.copyWith(
// color: AColors.white, // // color: AColors.white,
// letterSpacing: 2.75, // // letterSpacing: 2.75,
// fontWeight: FontWeight.bold // // fontWeight: FontWeight.bold
// ), // // ),
// ), // // ),
// ], // // ],
// ), // // ),
// onPressed: (){ // // onPressed: (){
// //launch("tel:15564"); // // //launch("tel:15564");
// }, // // },
// ), // // ),
// ), // // ),
AIconButton( // AIconButton(
iconData: Icons.notifications, // iconData: Icons.notifications,
onPressed: (){ // onPressed: (){
Navigator.of(context).pushNamed(NotificationsPage.id); // Navigator.of(context).pushNamed(NotificationsPage.id);
}, // },
), // ),
], // ],
), // ),
), // ),
), // ),
], ],
), ),
), ),

@ -8,7 +8,6 @@ import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/controllers/validator/validator.dart'; import 'package:test_sa/controllers/validator/validator.dart';

@ -12,8 +12,6 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/report/servic
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/controllers/validator/validator.dart'; import 'package:test_sa/controllers/validator/validator.dart';
import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/part.dart'; import 'package:test_sa/models/part.dart';
import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/models/service_report.dart';
import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/service_request/service_request.dart';
@ -24,15 +22,17 @@ import 'package:test_sa/views/widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/e_signature/e_signature.dart';
import 'package:test_sa/views/widgets/equipment/auto_complete_devices_field.dart'; import 'package:test_sa/views/widgets/equipment/auto_complete_devices_field.dart';
import 'package:test_sa/views/widgets/images/mini_one_image_picker.dart'; import 'package:test_sa/views/widgets/images/mini_one_image_picker.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/parts/auto_complete_parts_field.dart'; import 'package:test_sa/views/widgets/parts/auto_complete_parts_field.dart';
import 'package:test_sa/views/widgets/parts/part_item.dart'; import 'package:test_sa/views/widgets/parts/part_item.dart';
import 'package:test_sa/views/widgets/speech_to_text/speech_to_text.dart'; import 'package:test_sa/views/widgets/status/employee/engineers_mune.dart';
import 'package:test_sa/views/widgets/status/report/service_report_last_call.dart'; import 'package:test_sa/views/widgets/status/report/service_report_last_call.dart';
import 'package:test_sa/views/widgets/status/report/service_report_reasons.dart'; import 'package:test_sa/views/widgets/status/report/service_report_reasons.dart';
import 'package:test_sa/views/widgets/status/report/service_report_status.dart'; import 'package:test_sa/views/widgets/status/report/service_report_status.dart';
import 'package:test_sa/views/widgets/status/report/service_report_type.dart';
import 'package:test_sa/views/widgets/status/report/service_status.dart'; import 'package:test_sa/views/widgets/status/report/service_status.dart';
import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
@ -67,11 +67,8 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
void initState() { void initState() {
_serviceReport = ServiceReport( _serviceReport = ServiceReport(
visitDate: DateTime.now(), visitDate: DateTime.now(),
type: const Lookup(id: 2), //type: const Lookup(value: 2),
device: Device( device: widget.request.device,
id: widget.request.deviceId,
serialNumber: widget.request.deviceSerialNumber,
),
parts: [] parts: []
); );
super.initState(); super.initState();
@ -158,25 +155,25 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
Row( Row(
children: [ children: [
// Report Status // Report Status
// Expanded( Expanded(
// child: Column( child: Column(
// crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
// children: [ children: [
// ASubTitle(_subtitle.reportType), ASubTitle(_subtitle.reportType),
// _validate && _serviceReport.type == null ? _validate && _serviceReport.type == null ?
// ASubTitle(_subtitle.requiredWord,color: Colors.red,): ASubTitle(_subtitle.requiredWord,color: Colors.red,):
// const SizedBox.shrink(), const SizedBox.shrink(),
// const SizedBox(height: 4,), const SizedBox(height: 4,),
// ServiceReportTypeMenu( ServiceReportTypeMenu(
// initialValue: _serviceReport.type, initialValue: _serviceReport.type,
// onSelect: (status){ onSelect: (status){
// _serviceReport.type = status; _serviceReport.type = status;
// }, },
// ), ),
// ], ],
// ), ),
// ), ),
// const SizedBox(width: 8,), const SizedBox(width: 8,),
// visit date // visit date
Expanded( Expanded(
child: Column( child: Column(
@ -231,14 +228,14 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
), ),
const SizedBox(height: 8,), const SizedBox(height: 8,),
ASubTitle(_subtitle.serviceType), ASubTitle(_subtitle.serviceType),
_validate && _serviceReport.serviceType == null ? _validate && _serviceReport.assetType == null ?
ASubTitle(_subtitle.requiredWord,color: Colors.red,): ASubTitle(_subtitle.requiredWord,color: Colors.red,):
const SizedBox.shrink(), const SizedBox.shrink(),
const SizedBox(height: 4,), const SizedBox(height: 4,),
ServiceStatusMenu( ServiceAssetTypeMenu(
initialValue: _serviceReport.serviceType, initialValue: _serviceReport.assetType,
onSelect: (status){ onSelect: (status){
_serviceReport.serviceType = status; _serviceReport.assetType = status;
}, },
), ),
const SizedBox(height: 8,), const SizedBox(height: 8,),
@ -265,36 +262,53 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
), ),
), ),
const SizedBox(width: 8,), const SizedBox(width: 8,),
Provider.of<ServiceReportLastCallsProvider>(context).isLoading == null // Provider.of<ServiceReportLastCallsProvider>(context).isLoading == null
? const SizedBox.shrink(): // ? const SizedBox.shrink():
// Call's last Situation // Call's last Situation
Expanded( Consumer<ServiceReportLastCallsProvider>(
child: Column( builder: (_, provider, __) {
crossAxisAlignment: CrossAxisAlignment.start, if(provider.isLoading == null) return const SizedBox.shrink();
children: [ return Expanded(
child: Column(
ASubTitle(_subtitle.callLastSituation), crossAxisAlignment: CrossAxisAlignment.start,
_validate && _serviceReport.callLastSituation == null ? children: [
ASubTitle(_subtitle.requiredWord,color: Colors.red,): ASubTitle(_subtitle.callLastSituation),
const SizedBox.shrink(), _validate && _serviceReport.callLastSituation == null ?
const SizedBox(height: 4,), ASubTitle(_subtitle.requiredWord,color: Colors.red,):
ServiceReportLastCallsMenu( const SizedBox.shrink(),
report: _serviceReport, const SizedBox(height: 4,),
onSelect: (status){ ServiceReportLastCallsMenu(
if(status?.id == 12 report: _serviceReport,
|| _serviceReport.callLastSituation?.id == 12){ onSelect: (status){
_serviceReport.callLastSituation = status; if(status?.value == 12
setState(() {}); || _serviceReport.callLastSituation?.value == 12){
} else { _serviceReport.callLastSituation = status;
_serviceReport.callLastSituation = status; setState(() {});
} } else {
}, _serviceReport.callLastSituation = status;
}
},
),
],
), ),
], );
), },
), ),
], ],
), ),
SizedBox(height: 8 * AppStyle.getScaleFactor(context),),
const ASubTitle("Assign Employee"),
const SizedBox(height: 8,),
_validate && _serviceReport.engineer == null ?
ASubTitle(_subtitle.requiredWord,color: Colors.red,):
const SizedBox.shrink(),
const SizedBox(height: 4,),
EngineersMenu(
initialValue: _serviceReport.engineer,
onSelect: (engineer){
_serviceReport.engineer = engineer;
},
),
const SizedBox(height: 8,), const SizedBox(height: 8,),
// invoice number & code // invoice number & code
_serviceReport.callLastSituation?.id != 12 ? const SizedBox.shrink(): _serviceReport.callLastSituation?.id != 12 ? const SizedBox.shrink():
@ -346,65 +360,65 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
], ],
), ),
const SizedBox(height: 8,), // const SizedBox(height: 8,),
Row( // Row(
children: [ // children: [
ASubTitle(_subtitle.faultDescription), // ASubTitle(_subtitle.faultDescription),
Expanded( // Expanded(
child: SizedBox( // child: SizedBox(
height: 32 * AppStyle.getScaleFactor(context), // height: 32 * AppStyle.getScaleFactor(context),
child: SpeechToTextButton( // child: SpeechToTextButton(
controller: _faultController, // controller: _faultController,
mini: true, // mini: true,
), // ),
), // ),
), // ),
], // ],
), // ),
const SizedBox(height: 4,), // const SizedBox(height: 4,),
ATextFormField( // ATextFormField(
initialValue: _serviceReport?.faultDescription, // initialValue: _serviceReport?.faultDescriptionId,
textAlign: TextAlign.center, // textAlign: TextAlign.center,
controller: _faultController, // controller: _faultController,
style: Theme.of(context).textTheme.subtitle1, // style: Theme.of(context).textTheme.subtitle1,
validator: (value) => // validator: (value) =>
Validator.hasValue(value) // Validator.hasValue(value)
? null : _subtitle.requiredWord, // ? null : _subtitle.requiredWord,
textInputType: TextInputType.multiline, // textInputType: TextInputType.multiline,
onSaved: (value){ // onSaved: (value){
_serviceReport.faultDescription = value; // _serviceReport.faultDescriptionId = value;
}, // },
), // ),
const SizedBox(height: 8,), // const SizedBox(height: 8,),
Row( // Row(
children: [ // children: [
ASubTitle(_subtitle.workPreformed), // ASubTitle(_subtitle.workPreformed),
Expanded( // Expanded(
child: SizedBox( // child: SizedBox(
height: 32 * AppStyle.getScaleFactor(context), // height: 32 * AppStyle.getScaleFactor(context),
child: SpeechToTextButton( // child: SpeechToTextButton(
controller: _workPreformedController, // controller: _workPreformedController,
mini: true, // mini: true,
), // ),
), // ),
), // ),
], // ],
), // ),
const SizedBox(height: 4,), // const SizedBox(height: 4,),
ATextFormField( // ATextFormField(
initialValue: _serviceReport?.workPreformed, // initialValue: _serviceReport?.workPreformed,
textAlign: TextAlign.center, // textAlign: TextAlign.center,
controller: _workPreformedController, // controller: _workPreformedController,
style: Theme.of(context).textTheme.subtitle1, // style: Theme.of(context).textTheme.subtitle1,
validator: (value) => // validator: (value) =>
Validator.hasValue(value) // Validator.hasValue(value)
? null : _subtitle.requiredWord, // ? null : _subtitle.requiredWord,
textInputType: TextInputType.multiline, // textInputType: TextInputType.multiline,
onSaved: (value){ // onSaved: (value){
_serviceReport.workPreformed = value; // _serviceReport.workPreformed = value;
}, // },
), // ),
const SizedBox(height: 8,), // const SizedBox(height: 8,),
const SizedBox(height: 8,), const SizedBox(height: 8,),
Row( Row(
@ -436,7 +450,7 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
image: _image, image: _image,
onPick: (image){ onPick: (image){
_image =image; _image =image;
_serviceReport.image = base64Encode(image.readAsBytesSync()); _serviceReport.image = "${image.path.split("/").last}|${base64Encode(image.readAsBytesSync())}";
}, },
), ),
], ],
@ -454,12 +468,18 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
children: [ children: [
ASubTitle(_subtitle.workingHours), ASubTitle(_subtitle.workingHours),
const SizedBox(height: 8,), const SizedBox(height: 8,),
AppTimer( Row(
timer: _serviceReport.timer, children: [
onChange: (timer) async{ Expanded(
_serviceReport.timer = timer; child: AppTimer(
return true; timer: _serviceReport.timer,
}, onChange: (timer) async{
_serviceReport.timer = timer;
return true;
},
),
),
],
), ),
// ATextFormField( // ATextFormField(
// initialValue: _serviceReport?.workHours, // initialValue: _serviceReport?.workHours,
@ -477,79 +497,102 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
], ],
), ),
), ),
const SizedBox(width: 8,), // const SizedBox(width: 8,),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ASubTitle(_subtitle.travelingHours),
const SizedBox(height: 4,),
ATextFormField(
initialValue: _serviceReport?.travelingHours,
textAlign: TextAlign.center,
hintText: "i.e 3, 3.5, 4",
style: Theme.of(context).textTheme.subtitle1,
// validator: (value) =>
// Validator.isNumeric(value)
// ? null : _subtitle.requiredWord,
textInputType: TextInputType.number,
onSaved: (value){
_serviceReport.travelingHours = value;
},
),
],
),
),
],
),
const SizedBox(height: 8,),
// Operating Hours and Job Sheet Number
Row(
children: [
// Expanded( // Expanded(
// child: Column( // child: Column(
// crossAxisAlignment: CrossAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.start,
// children: [ // children: [
// ASubTitle(_subtitle.operatingHours), // ASubTitle(_subtitle.travelingHours),
// const SizedBox(height: 4,), // const SizedBox(height: 4,),
// ATextFormField( // ATextFormField(
// initialValue: _serviceReport?.operatingHours, // initialValue: _serviceReport?.travelingHours,
// textAlign: TextAlign.center, // textAlign: TextAlign.center,
// hintText: "i.e 3, 3.5, 4", // hintText: "i.e 3, 3.5, 4",
// style: Theme.of(context).textTheme.subtitle1, // style: Theme.of(context).textTheme.subtitle1,
// validator: (value) => // // validator: (value) =>
// Validator.isNumeric(value) // // Validator.isNumeric(value)
// ? null : _subtitle.requiredWord, // // ? null : _subtitle.requiredWord,
// textInputType: TextInputType.number, // textInputType: TextInputType.number,
// onSaved: (value){ // onSaved: (value){
// _serviceReport.operatingHours = value; // _serviceReport.travelingHours = value;
// }, // },
// ), // ),
// ], // ],
// ), // ),
// ), // ),
// const SizedBox(width: 8,),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ASubTitle(_subtitle.jobSheetNumber),
const SizedBox(height: 4,),
ATextFormField(
initialValue: _serviceReport?.jobSheetNumber,
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.subtitle1,
textInputType: TextInputType.name,
onSaved: (value){
_serviceReport.jobSheetNumber = value;
},
),
],
),
),
], ],
), ),
const SizedBox(height: 8,), const SizedBox(height: 8,),
// Operating Hours and Job Sheet Number
// Row(
// children: [
// Expanded(
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// ASubTitle(_subtitle.operatingHours),
// const SizedBox(height: 4,),
// ATextFormField(
// initialValue: _serviceReport?.operatingHours,
// textAlign: TextAlign.center,
// hintText: "i.e 3, 3.5, 4",
// style: Theme.of(context).textTheme.subtitle1,
// validator: (value) =>
// Validator.isNumeric(value)
// ? null : _subtitle.requiredWord,
// textInputType: TextInputType.number,
// onSaved: (value){
// _serviceReport.operatingHours = value;
// },
// ),
// ],
// ),
// ),
// const SizedBox(width: 8,),
// Expanded(
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// ASubTitle(_subtitle.jobSheetNumber),
// const SizedBox(height: 4,),
// ATextFormField(
// initialValue: _serviceReport?.jobSheetNumber,
// textAlign: TextAlign.center,
// style: Theme.of(context).textTheme.subtitle1,
// textInputType: TextInputType.name,
// onSaved: (value){
// _serviceReport.jobSheetNumber = value;
// },
// ),
// ],
// ),
// ),
// ],
// ),
//const SizedBox(height: 8,),
const SizedBox(height: 8,),
const ASubTitle("Nurse Signature"),
ESignature(
oldSignature: _serviceReport.signatureNurse,
newSignature: _serviceReport.localNurseSignature,
onChange: (signature){
if(signature == null || signature.isEmpty) {return;}
_serviceReport.localNurseSignature = signature;
_serviceReport.signatureNurse = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
},
),
const SizedBox(height: 8,),
const ASubTitle("Engineer Signature"),
ESignature(
oldSignature: _serviceReport.signatureEngineer,
newSignature: _serviceReport.localNurseSignature,
onChange: (signature){
if(signature == null || signature.isEmpty) {return;}
_serviceReport.localNurseSignature = signature;
_serviceReport.signatureEngineer = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
},
),
const SizedBox(height: 8,),
// Part Number and Quantity // Part Number and Quantity
Row( Row(
children: [ children: [
@ -596,7 +639,6 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
} }
), ),
), ),
const SizedBox(height: 16,), const SizedBox(height: 16,),
], ],

@ -22,12 +22,13 @@ import 'package:test_sa/views/widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/e_signature/e_signature.dart';
import 'package:test_sa/views/widgets/equipment/auto_complete_devices_field.dart'; import 'package:test_sa/views/widgets/equipment/auto_complete_devices_field.dart';
import 'package:test_sa/views/widgets/images/mini_one_image_picker.dart'; import 'package:test_sa/views/widgets/images/mini_one_image_picker.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/parts/auto_complete_parts_field.dart'; import 'package:test_sa/views/widgets/parts/auto_complete_parts_field.dart';
import 'package:test_sa/views/widgets/parts/part_item.dart'; import 'package:test_sa/views/widgets/parts/part_item.dart';
import 'package:test_sa/views/widgets/speech_to_text/speech_to_text.dart'; import 'package:test_sa/views/widgets/status/employee/engineers_mune.dart';
import 'package:test_sa/views/widgets/status/report/service_report_last_call.dart'; import 'package:test_sa/views/widgets/status/report/service_report_last_call.dart';
import 'package:test_sa/views/widgets/status/report/service_report_reasons.dart'; import 'package:test_sa/views/widgets/status/report/service_report_reasons.dart';
import 'package:test_sa/views/widgets/status/report/service_report_status.dart'; import 'package:test_sa/views/widgets/status/report/service_report_status.dart';
@ -223,14 +224,28 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
), ),
const SizedBox(height: 8,), const SizedBox(height: 8,),
ASubTitle(_subtitle.serviceType), ASubTitle(_subtitle.serviceType),
_validate && _serviceReport.serviceType == null ? _validate && _serviceReport.assetType == null ?
ASubTitle(_subtitle.requiredWord,color: Colors.red,): ASubTitle(_subtitle.requiredWord,color: Colors.red,):
const SizedBox.shrink(), const SizedBox.shrink(),
const SizedBox(height: 4,), const SizedBox(height: 4,),
ServiceStatusMenu( ServiceAssetTypeMenu(
initialValue: _serviceReport.serviceType, initialValue: _serviceReport.assetType,
onSelect: (status){ onSelect: (status){
_serviceReport.serviceType = status; _serviceReport.assetType = status;
},
),
const SizedBox(height: 8,),
SizedBox(height: 8 * AppStyle.getScaleFactor(context),),
const ASubTitle("Assign Employee"),
const SizedBox(height: 8,),
_validate && _serviceReport.engineer == null ?
ASubTitle(_subtitle.requiredWord,color: Colors.red,):
const SizedBox.shrink(),
const SizedBox(height: 4,),
EngineersMenu(
initialValue: _serviceReport.engineer,
onSelect: (engineer){
_serviceReport.engineer = engineer;
}, },
), ),
const SizedBox(height: 8,), const SizedBox(height: 8,),
@ -257,33 +272,34 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
), ),
), ),
const SizedBox(width: 8,), const SizedBox(width: 8,),
Provider.of<ServiceReportLastCallsProvider>(context).isLoading == null Consumer<ServiceReportLastCallsProvider>(
? const SizedBox.shrink(): builder: (_, provider, __) {
// Call's last Situation if(provider.isLoading == null) return const SizedBox.shrink();
Expanded( return Expanded(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
ASubTitle(_subtitle.callLastSituation),
ASubTitle(_subtitle.callLastSituation), _validate && _serviceReport.callLastSituation == null ?
_validate && _serviceReport.callLastSituation == null ? ASubTitle(_subtitle.requiredWord,color: Colors.red,):
ASubTitle(_subtitle.requiredWord,color: Colors.red,): const SizedBox.shrink(),
const SizedBox.shrink(), const SizedBox(height: 4,),
const SizedBox(height: 4,), ServiceReportLastCallsMenu(
ServiceReportLastCallsMenu( report: _serviceReport,
report: _serviceReport, onSelect: (status){
onSelect: (status){ if(status?.value == 12
if(status?.value == 12 || _serviceReport.callLastSituation?.value == 12){
|| _serviceReport.callLastSituation?.value == 12){ _serviceReport.callLastSituation = status;
_serviceReport.callLastSituation = status; setState(() {});
setState(() {}); } else {
} else { _serviceReport.callLastSituation = status;
_serviceReport.callLastSituation = status; }
} },
}, ),
],
), ),
], );
), },
), ),
], ],
), ),
@ -338,65 +354,65 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
], ],
), ),
const SizedBox(height: 8,), // const SizedBox(height: 8,),
Row( // Row(
children: [ // children: [
ASubTitle(_subtitle.faultDescription), // ASubTitle(_subtitle.faultDescription),
Expanded( // Expanded(
child: SizedBox( // child: SizedBox(
height: 32 * AppStyle.getScaleFactor(context), // height: 32 * AppStyle.getScaleFactor(context),
child: SpeechToTextButton( // child: SpeechToTextButton(
controller: _faultController, // controller: _faultController,
mini: true, // mini: true,
), // ),
), // ),
), // ),
], // ],
), // ),
const SizedBox(height: 4,), // const SizedBox(height: 4,),
ATextFormField( // ATextFormField(
initialValue: _serviceReport?.faultDescription, // initialValue: _serviceReport?.faultDescriptionId,
textAlign: TextAlign.center, // textAlign: TextAlign.center,
controller: _faultController, // controller: _faultController,
style: Theme.of(context).textTheme.subtitle1, // style: Theme.of(context).textTheme.subtitle1,
validator: (value) => // validator: (value) =>
Validator.hasValue(value) // Validator.hasValue(value)
? null : _subtitle.requiredWord, // ? null : _subtitle.requiredWord,
textInputType: TextInputType.multiline, // textInputType: TextInputType.multiline,
onSaved: (value){ // onSaved: (value){
_serviceReport.faultDescription = value; // _serviceReport.faultDescriptionId = value;
}, // },
), // ),
const SizedBox(height: 8,), // const SizedBox(height: 8,),
Row( // Row(
children: [ // children: [
ASubTitle(_subtitle.workPreformed), // ASubTitle(_subtitle.workPreformed),
Expanded( // Expanded(
child: SizedBox( // child: SizedBox(
height: 32 * AppStyle.getScaleFactor(context), // height: 32 * AppStyle.getScaleFactor(context),
child: SpeechToTextButton( // child: SpeechToTextButton(
controller: _workPreformedController, // controller: _workPreformedController,
mini: true, // mini: true,
), // ),
), // ),
), // ),
], // ],
), // ),
const SizedBox(height: 4,), // const SizedBox(height: 4,),
ATextFormField( // ATextFormField(
initialValue: _serviceReport?.workPreformed, // initialValue: _serviceReport?.workPreformed,
textAlign: TextAlign.center, // textAlign: TextAlign.center,
controller: _workPreformedController, // controller: _workPreformedController,
style: Theme.of(context).textTheme.subtitle1, // style: Theme.of(context).textTheme.subtitle1,
validator: (value) => // validator: (value) =>
Validator.hasValue(value) // Validator.hasValue(value)
? null : _subtitle.requiredWord, // ? null : _subtitle.requiredWord,
textInputType: TextInputType.multiline, // textInputType: TextInputType.multiline,
onSaved: (value){ // onSaved: (value){
_serviceReport.workPreformed = value; // _serviceReport.workPreformed = value;
}, // },
), // ),
const SizedBox(height: 8,), // const SizedBox(height: 8,),
const SizedBox(height: 8,), const SizedBox(height: 8,),
Row( Row(
@ -446,12 +462,18 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
children: [ children: [
ASubTitle(_subtitle.workingHours), ASubTitle(_subtitle.workingHours),
const SizedBox(height: 8,), const SizedBox(height: 8,),
AppTimer( Row(
timer: _serviceReport.timer, children: [
onChange: (timer) async{ Expanded(
_serviceReport.timer = timer; child: AppTimer(
return true; timer: _serviceReport.timer,
}, onChange: (timer) async{
_serviceReport.timer = timer;
return true;
},
),
),
],
), ),
// ATextFormField( // ATextFormField(
// initialValue: _serviceReport?.workHours, // initialValue: _serviceReport?.workHours,
@ -469,77 +491,100 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
], ],
), ),
), ),
const SizedBox(width: 8,), // const SizedBox(width: 8,),
Expanded( // Expanded(
child: Column( // child: Column(
crossAxisAlignment: CrossAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.start,
children: [ // children: [
ASubTitle(_subtitle.travelingHours), // ASubTitle(_subtitle.travelingHours),
const SizedBox(height: 4,), // const SizedBox(height: 4,),
ATextFormField( // ATextFormField(
initialValue: _serviceReport?.travelingHours, // initialValue: _serviceReport?.travelingHours,
textAlign: TextAlign.center, // textAlign: TextAlign.center,
hintText: "i.e 3, 3.5, 4", // hintText: "i.e 3, 3.5, 4",
style: Theme.of(context).textTheme.subtitle1, // style: Theme.of(context).textTheme.subtitle1,
validator: (value) => // validator: (value) =>
Validator.isNumeric(value) // Validator.isNumeric(value)
? null : _subtitle.requiredWord, // ? null : _subtitle.requiredWord,
textInputType: TextInputType.number, // textInputType: TextInputType.number,
onSaved: (value){ // onSaved: (value){
_serviceReport.travelingHours = value; // _serviceReport.travelingHours = value;
}, // },
), // ),
], // ],
), // ),
), // ),
], ],
), ),
const SizedBox(height: 8,), const SizedBox(height: 8,),
// Operating Hours and Job Sheet Number // Operating Hours and Job Sheet Number
Row( // Row(
children: [ // children: [
Expanded( // Expanded(
child: Column( // child: Column(
crossAxisAlignment: CrossAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.start,
children: [ // children: [
ASubTitle(_subtitle.operatingHours), // ASubTitle(_subtitle.operatingHours),
const SizedBox(height: 4,), // const SizedBox(height: 4,),
ATextFormField( // ATextFormField(
initialValue: _serviceReport?.operatingHours, // initialValue: _serviceReport?.operatingHours,
textAlign: TextAlign.center, // textAlign: TextAlign.center,
hintText: "i.e 3, 3.5, 4", // hintText: "i.e 3, 3.5, 4",
style: Theme.of(context).textTheme.subtitle1, // style: Theme.of(context).textTheme.subtitle1,
validator: (value) => // validator: (value) =>
Validator.isNumeric(value) // Validator.isNumeric(value)
? null : _subtitle.requiredWord, // ? null : _subtitle.requiredWord,
textInputType: TextInputType.number, // textInputType: TextInputType.number,
onSaved: (value){ // onSaved: (value){
_serviceReport.operatingHours = value; // _serviceReport.operatingHours = value;
}, // },
), // ),
], // ],
), // ),
), // ),
const SizedBox(width: 8,), // const SizedBox(width: 8,),
Expanded( // Expanded(
child: Column( // child: Column(
crossAxisAlignment: CrossAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.start,
children: [ // children: [
ASubTitle(_subtitle.jobSheetNumber), // ASubTitle(_subtitle.jobSheetNumber),
const SizedBox(height: 4,), // const SizedBox(height: 4,),
ATextFormField( // ATextFormField(
initialValue: _serviceReport?.jobSheetNumber, // initialValue: _serviceReport?.jobSheetNumber,
textAlign: TextAlign.center, // textAlign: TextAlign.center,
style: Theme.of(context).textTheme.subtitle1, // style: Theme.of(context).textTheme.subtitle1,
textInputType: TextInputType.name, // textInputType: TextInputType.name,
onSaved: (value){ // onSaved: (value){
_serviceReport.jobSheetNumber = value; // _serviceReport.jobSheetNumber = value;
}, // },
), // ),
], // ],
), // ),
), // ),
], // ],
// ),
//const SizedBox(height: 8,),
const SizedBox(height: 8,),
const ASubTitle("Nurse Signature"),
ESignature(
oldSignature: _serviceReport.signatureNurse,
newSignature: _serviceReport.localNurseSignature,
onChange: (signature){
if(signature == null || signature.isEmpty) {return;}
_serviceReport.localNurseSignature = signature;
_serviceReport.signatureNurse = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
},
),
const SizedBox(height: 8,),
const ASubTitle("Engineer Signature"),
ESignature(
oldSignature: _serviceReport.signatureEngineer,
newSignature: _serviceReport.localNurseSignature,
onChange: (signature){
if(signature == null || signature.isEmpty) {return;}
_serviceReport.localNurseSignature = signature;
_serviceReport.signatureEngineer = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
},
), ),
const SizedBox(height: 8,), const SizedBox(height: 8,),
// Part Number and Quantity // Part Number and Quantity

@ -2,7 +2,6 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
@ -16,7 +15,6 @@ import 'package:test_sa/views/pages/user/requests/report/create_service_report.d
import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button.dart';
import 'package:test_sa/views/widgets/dialogs/dialog.dart';
import 'package:test_sa/views/widgets/images/images_list.dart'; import 'package:test_sa/views/widgets/images/images_list.dart';
import 'package:test_sa/views/widgets/loaders/image_loader.dart'; import 'package:test_sa/views/widgets/loaders/image_loader.dart';
import 'package:test_sa/views/widgets/requests/info_row.dart'; import 'package:test_sa/views/widgets/requests/info_row.dart';
@ -25,7 +23,6 @@ import 'package:test_sa/views/widgets/requests/service_request_update_dialog.dar
import 'package:test_sa/views/widgets/sound/sound_player.dart'; import 'package:test_sa/views/widgets/sound/sound_player.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../report_issues_page.dart';
import 'report/future_service_report.dart'; import 'report/future_service_report.dart';
class RequestDetailsPage extends StatelessWidget { class RequestDetailsPage extends StatelessWidget {
static final String id = "/call-details"; static final String id = "/call-details";
@ -62,19 +59,20 @@ class RequestDetailsPage extends StatelessWidget {
), ),
), ),
_userProvider.user.type == UsersTypes.normal_user ? _userProvider.user.type == UsersTypes.normal_user ?
AIconButton( // AIconButton(
iconData: Icons.warning_amber_rounded, // iconData: Icons.warning_amber_rounded,
color: AColors.white, // color: AColors.white,
buttonSize: 42, // buttonSize: 42,
backgroundColor: AColors.deepOrange, // backgroundColor: AColors.deepOrange,
onPressed: (){ // onPressed: (){
Navigator.of(context).push( // Navigator.of(context).push(
MaterialPageRoute( // MaterialPageRoute(
builder: (_) => ReportIssuesPage(serviceRequest: serviceRequest,) // builder: (_) => ReportIssuesPage(serviceRequest: serviceRequest,)
) // )
); // );
}, // },
) // )
const SizedBox(width: 48,)
: AIconButton( : AIconButton(
iconData: Icons.edit, iconData: Icons.edit,
color: AColors.white, color: AColors.white,
@ -247,44 +245,45 @@ class RequestDetailsPage extends StatelessWidget {
ASoundPlayer( ASoundPlayer(
audio: serviceRequest.audio, audio: serviceRequest.audio,
), ),
Center( //
child: Padding( // Center(
padding: EdgeInsets.all(32), // child: Padding(
child: AButton( // padding: EdgeInsets.all(32),
text: _subtitle.duplicateRequest, // child: AButton(
onPressed: () async { // text: _subtitle.duplicateRequest,
bool result = await showDialog( // onPressed: () async {
context: context, // bool result = await showDialog(
builder: (_) => AAlertDialog( // context: context,
title: _subtitle.duplicateAlert, // builder: (_) => AAlertDialog(
content: _subtitle.duplicateAlertMessage, // title: _subtitle.duplicateAlert,
) // content: _subtitle.duplicateAlertMessage,
); // )
if(result == true){ // );
showDialog( // if(result == true){
context: context, // showDialog(
builder: (context){ // context: context,
return Center(child: CircularProgressIndicator()); // builder: (context){
} // return Center(child: CircularProgressIndicator());
); // }
int status = await _serviceRequestsProvider.createDuplicatedReport( // );
host: _settingProvider.host, // int status = await _serviceRequestsProvider.createDuplicatedReport(
user: _userProvider.user, // host: _settingProvider.host,
request: serviceRequest // user: _userProvider.user,
); // request: serviceRequest
Navigator.of(context).pop(); // );
ScaffoldMessenger.of(context).showSnackBar( // Navigator.of(context).pop();
SnackBar( // ScaffoldMessenger.of(context).showSnackBar(
content: Text( // SnackBar(
HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle) // content: Text(
) // HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle)
) // )
); // )
} // );
}, // }
), // },
), // ),
) // ),
// )
], ],
), ),
serviceRequest.viewReport ? serviceRequest.viewReport ?
@ -307,7 +306,8 @@ class RequestDetailsPage extends StatelessWidget {
title: _subtitle.jobSheetNumber, title: _subtitle.jobSheetNumber,
info: serviceRequest.jobSheetNumber, info: serviceRequest.jobSheetNumber,
), ),
_userProvider.user.type == UsersTypes.engineer ? _userProvider.user.type == UsersTypes.engineer
&& serviceRequest.reportID != null?
Padding( Padding(
padding: EdgeInsets.all(32), padding: EdgeInsets.all(32),
child: AButton( child: AButton(

@ -1,7 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/regular_visits_provider.dart'; import 'package:test_sa/controllers/providers/api/regular_visits_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
@ -62,7 +61,8 @@ class _EditPentryState extends State<EditPentry> with SingleTickerProviderStateM
Fluttertoast.showToast( Fluttertoast.showToast(
msg: _subtitle.requestCompleteSuccessfully, msg: _subtitle.requestCompleteSuccessfully,
); );
// Navigator.of(context).pop(); Navigator.of(context).pop();
Navigator.of(context).pop();
}else{ }else{
// String errorMessage = HttpStatusManger.getStatusMessage( // String errorMessage = HttpStatusManger.getStatusMessage(
// status: status, subtitle: _subtitle); // status: status, subtitle: _subtitle);

@ -1,20 +1,12 @@
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visit.dart';
import 'package:test_sa/models/visits/visits_group.dart'; import 'package:test_sa/models/visits/visits_group.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/images/one_image_picker.dart';
import 'package:test_sa/views/widgets/search/filter_item.dart';
import 'package:test_sa/views/widgets/status/employee/engineers_mune.dart'; import 'package:test_sa/views/widgets/status/employee/engineers_mune.dart';
import 'package:test_sa/views/widgets/visits/visit_status.dart'; import 'package:test_sa/views/widgets/visits/visit_status.dart';
class UpdateVisitsGroupSheet extends StatefulWidget { class UpdateVisitsGroupSheet extends StatefulWidget {

@ -6,7 +6,6 @@ import 'package:test_sa/models/visits/visit.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/pages/user/visits/pantry/edit_pentry.dart'; import 'package:test_sa/views/pages/user/visits/pantry/edit_pentry.dart';
import 'package:test_sa/views/pages/user/visits/pantry/future_edit_pently.dart';
import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button.dart';
import 'package:test_sa/views/widgets/images/images_list.dart'; import 'package:test_sa/views/widgets/images/images_list.dart';

@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:flutter/material.dart';
class AppNameBar extends StatelessWidget { class AppNameBar extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:flutter/material.dart';
class ATextFormField extends StatefulWidget { class ATextFormField extends StatefulWidget {
final Function(String) onSaved; final Function(String) onSaved;
final Function(String) validator; final Function(String) validator;

@ -1,6 +1,5 @@
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/views/app_style/sizing.dart';
class ADatePicker extends StatelessWidget { class ADatePicker extends StatelessWidget {
final DateTime date; final DateTime date;

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:flutter/material.dart';
import 'date_picker.dart'; import 'date_picker.dart';
class FromToDateBar extends StatefulWidget { class FromToDateBar extends StatefulWidget {

@ -1,11 +1,11 @@
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/department.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/departments/single_department_picker.dart'; import 'package:test_sa/views/widgets/departments/single_department_picker.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
class DepartmentButton extends StatelessWidget { class DepartmentButton extends StatelessWidget {
final Function(Department) onDepartmentPick; final Function(Department) onDepartmentPick;
final Department department; final Department department;

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/department.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:flutter/material.dart';
class DepartmentItem extends StatelessWidget { class DepartmentItem extends StatelessWidget {
final Department department; final Department department;
final Function(Department) onPressed; final Function(Department) onPressed;

@ -1,3 +1,5 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/departments_provider.dart'; import 'package:test_sa/controllers/providers/api/departments_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
@ -6,8 +8,6 @@ import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/widgets/departments/department_item.dart'; import 'package:test_sa/views/widgets/departments/department_item.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../app_text_form_field.dart'; import '../app_text_form_field.dart';
class SingleDepartmentPicker extends StatefulWidget { class SingleDepartmentPicker extends StatefulWidget {

@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/models/device/device_transfer_info.dart'; import 'package:test_sa/models/device/device_transfer_info.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/loaders/image_loader.dart'; import 'package:test_sa/views/widgets/loaders/image_loader.dart';
import 'package:test_sa/views/widgets/requests/info_row.dart'; import 'package:test_sa/views/widgets/requests/info_row.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart';

@ -1,21 +1,14 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/models/device/device_transfer.dart'; import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/gas_refill/gas_refill_model.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/pages/user/requests/report/create_service_report.dart';
import 'package:test_sa/views/pages/user/requests/report/future_service_report.dart';
import 'package:test_sa/views/widgets/loaders/image_loader.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
class DeviceTransferItem extends StatelessWidget { class DeviceTransferItem extends StatelessWidget {
final int index; final int index;
final DeviceTransfer item; final DeviceTransfer item;

@ -1,17 +1,11 @@
import 'package:flutter/material.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/models/device/device_transfer.dart'; import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/gas_refill/gas_refill_model.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart'; import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart';
import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart';
import 'package:test_sa/views/pages/user/requests/request_details.dart';
import 'package:test_sa/views/widgets/device_trancfer/device_transfer_item.dart'; import 'package:test_sa/views/widgets/device_trancfer/device_transfer_item.dart';
import 'package:test_sa/views/widgets/gas_refill/gas_refill_item.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart';
import 'package:test_sa/views/widgets/requests/service_request_item.dart';
import 'package:flutter/material.dart';
class DeviceTransferList extends StatelessWidget { class DeviceTransferList extends StatelessWidget {
final List<DeviceTransfer> items; final List<DeviceTransfer> items;
final bool nextPage; final bool nextPage;

@ -1,5 +1,3 @@
import 'dart:convert';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:signature/signature.dart'; import 'package:signature/signature.dart';
@ -11,7 +9,8 @@ class ESignature extends StatefulWidget {
final String oldSignature; final String oldSignature;
final Uint8List newSignature; final Uint8List newSignature;
final Function(Uint8List) onSaved; final Function(Uint8List) onSaved;
const ESignature({Key key, this.oldSignature, this.onSaved, this.newSignature}) : super(key: key); final Function(Uint8List) onChange;
const ESignature({Key key, this.oldSignature, this.onSaved,this.onChange, this.newSignature}) : super(key: key);
@override @override
State<ESignature> createState() => _ESignatureState(); State<ESignature> createState() => _ESignatureState();
@ -104,6 +103,7 @@ class _ESignatureState extends State<ESignature> {
const Spacer(), const Spacer(),
IconButton(onPressed: () async { IconButton(onPressed: () async {
signature = await _controller.toPngBytes(); signature = await _controller.toPngBytes();
widget.onChange(signature);
setState(() {}); setState(() {});
}, icon: const Icon(Icons.check)), }, icon: const Icon(Icons.check)),
], ],

@ -1,13 +1,12 @@
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/devices_provider.dart'; import 'package:test_sa/controllers/providers/api/devices_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:provider/provider.dart';
class AutoCompleteDeviceField extends StatefulWidget { class AutoCompleteDeviceField extends StatefulWidget {
final Device initialValue; final Device initialValue;
final int hospitalId; final int hospitalId;
@ -81,7 +80,7 @@ class _AutoCompleteDeviceFieldState extends State<AutoCompleteDeviceField> {
itemBuilder: (context, device) { itemBuilder: (context, device) {
return ListTile( return ListTile(
title: Text(device.serialNumber), title: Text(device.serialNumber),
subtitle: Text(device.model+"/"+device.brand), subtitle: Text("${device.modelDefinition.modelName}/${device.modelDefinition.manufacturerName}"),
); );
}, },
onSuggestionSelected: (device) { onSuggestionSelected: (device) {

@ -1,14 +1,12 @@
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/devices_provider.dart'; import 'package:test_sa/controllers/providers/api/devices_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:provider/provider.dart';
class AutoCompleteModelField extends StatefulWidget { class AutoCompleteModelField extends StatefulWidget {
final Lookup initialValue; final Lookup initialValue;
final Function(Lookup) onPick; final Function(Lookup) onPick;

@ -1,11 +1,11 @@
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/equipment/single_device_picker.dart'; import 'package:test_sa/views/widgets/equipment/single_device_picker.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
class DeviceButton extends StatelessWidget { class DeviceButton extends StatelessWidget {
final Function(Device) onDevicePick; final Function(Device) onDevicePick;
final Device device; final Device device;
@ -56,18 +56,18 @@ class DeviceButton extends StatelessWidget {
): ):
Expanded( Expanded(
child: ListTile( child: ListTile(
title: Text("${_subtitle.sn} : " + device.serialNumber, title: Text("${_subtitle.sn} : ${device.serialNumber}",
style: Theme.of(context).textTheme.subtitle1, style: Theme.of(context).textTheme.subtitle1,
), ),
subtitle: Column( subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Divider(color: Theme.of(context).textTheme.subtitle1.color,), Divider(color: Theme.of(context).textTheme.subtitle1.color,),
Text("${_subtitle.brand} : " + device.brand, Text("${_subtitle.brand} : ${device.modelDefinition.manufacturerName}",
style: Theme.of(context).textTheme.subtitle2, style: Theme.of(context).textTheme.subtitle2,
), ),
Divider(color: Theme.of(context).textTheme.subtitle1.color,), Divider(color: Theme.of(context).textTheme.subtitle1.color,),
Text("${_subtitle.model} : " + device.model, Text("${_subtitle.model} : ${device.modelDefinition.modelName}",
style: Theme.of(context).textTheme.subtitle2, style: Theme.of(context).textTheme.subtitle2,
), ),
], ],

@ -1,9 +1,9 @@
import 'package:flutter/material.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:flutter/material.dart';
class DeviceItem extends StatelessWidget { class DeviceItem extends StatelessWidget {
final Device device; final Device device;
final Function(Device) onPressed; final Function(Device) onPressed;
@ -28,7 +28,7 @@ class DeviceItem extends StatelessWidget {
onPressed(device); onPressed(device);
}, },
child: ListTile( child: ListTile(
title: Text("${_subtitle.sn} : " + device.serialNumber, title: Text("${_subtitle.sn} : ${device.serialNumber}",
style: Theme.of(context).textTheme.headline6.copyWith( style: Theme.of(context).textTheme.headline6.copyWith(
color: AColors.white color: AColors.white
), ),
@ -38,13 +38,13 @@ class DeviceItem extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Divider(color: Theme.of(context).scaffoldBackgroundColor,), Divider(color: Theme.of(context).scaffoldBackgroundColor,),
Text("${_subtitle.brand} : " + device.brand, Text("${_subtitle.brand} : ${device.modelDefinition.manufacturerName}",
style: Theme.of(context).textTheme.subtitle1.copyWith( style: Theme.of(context).textTheme.subtitle1.copyWith(
color: AColors.white color: AColors.white
), ),
), ),
Divider(color: Theme.of(context).scaffoldBackgroundColor,), Divider(color: Theme.of(context).scaffoldBackgroundColor,),
Text("${_subtitle.model} : " + device.model, Text("${_subtitle.model} : ${device.modelDefinition.modelName}",
style: Theme.of(context).textTheme.subtitle1.copyWith( style: Theme.of(context).textTheme.subtitle1.copyWith(
color: AColors.white color: AColors.white
), ),

@ -1,3 +1,6 @@
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/devices_provider.dart'; import 'package:test_sa/controllers/providers/api/devices_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
@ -7,10 +10,6 @@ import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/widgets/equipment/device_item.dart'; import 'package:test_sa/views/widgets/equipment/device_item.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart';
import 'package:test_sa/views/widgets/qr/scan_qr.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import '../app_text_form_field.dart'; import '../app_text_form_field.dart';
class SingleDevicePicker extends StatefulWidget { class SingleDevicePicker extends StatefulWidget {

@ -1,20 +1,14 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/pages/user/requests/report/create_service_report.dart';
import 'package:test_sa/views/pages/user/requests/report/future_service_report.dart';
import 'package:test_sa/views/widgets/loaders/image_loader.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
class GasRefillItem extends StatelessWidget { class GasRefillItem extends StatelessWidget {
final int index; final int index;
final GasRefillModel item; final GasRefillModel item;

@ -1,14 +1,11 @@
import 'package:flutter/material.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart'; import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart';
import 'package:test_sa/views/pages/user/requests/request_details.dart';
import 'package:test_sa/views/widgets/gas_refill/gas_refill_item.dart'; import 'package:test_sa/views/widgets/gas_refill/gas_refill_item.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart';
import 'package:test_sa/views/widgets/requests/service_request_item.dart';
import 'package:flutter/material.dart';
class GasRefillList extends StatelessWidget { class GasRefillList extends StatelessWidget {
final List<GasRefillModel> items; final List<GasRefillModel> items;
final bool nextPage; final bool nextPage;

@ -3,7 +3,6 @@ import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/validator/validator.dart'; import 'package:test_sa/controllers/validator/validator.dart';
import 'package:test_sa/models/gas_refill/gas_refill_details.dart'; import 'package:test_sa/models/gas_refill/gas_refill_details.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/requests/info_row.dart'; import 'package:test_sa/views/widgets/requests/info_row.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart';

@ -1,3 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/hospitals_provider.dart'; import 'package:test_sa/controllers/providers/api/hospitals_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
@ -5,10 +8,6 @@ import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/hospitals/hospital_item.dart';
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:provider/provider.dart';
class HospitalAutoCompleteField extends StatefulWidget { class HospitalAutoCompleteField extends StatefulWidget {
final String initialValue; final String initialValue;
final Function(Hospital) onSearch; final Function(Hospital) onSearch;

@ -1,11 +1,11 @@
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/hospitals/single_hospital_picker.dart'; import 'package:test_sa/views/widgets/hospitals/single_hospital_picker.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
class HospitalButton extends StatelessWidget { class HospitalButton extends StatelessWidget {
final Function(Hospital) onHospitalPick; final Function(Hospital) onHospitalPick;
final Hospital hospital; final Hospital hospital;

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:flutter/material.dart';
class HospitalItem extends StatelessWidget { class HospitalItem extends StatelessWidget {
final Hospital hospital; final Hospital hospital;
final Function(Hospital) onPressed; final Function(Hospital) onPressed;

@ -1,3 +1,5 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/hospitals_provider.dart'; import 'package:test_sa/controllers/providers/api/hospitals_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
@ -6,8 +8,6 @@ import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/widgets/hospitals/hospital_item.dart'; import 'package:test_sa/views/widgets/hospitals/hospital_item.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../app_text_form_field.dart'; import '../app_text_form_field.dart';
class SingleHospitalPicker extends StatefulWidget { class SingleHospitalPicker extends StatefulWidget {

@ -48,7 +48,7 @@ class _LoadingManagerState extends State<LoadingManager> {
Subtitle subtitle = AppLocalization.of(context).subtitle; Subtitle subtitle = AppLocalization.of(context).subtitle;
Widget placeHolder; Widget placeHolder;
// to load data if load not start // to load data if load not start
if(widget.isLoading == false && widget.stateCode == null){ if(widget.isLoading != true && widget.stateCode == null){
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
widget.onRefresh(); widget.onRefresh();
}); });

@ -1,8 +1,8 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:test_sa/models/app_notification.dart'; import 'package:test_sa/models/app_notification.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class NotificationItem extends StatelessWidget { class NotificationItem extends StatelessWidget {
final AppNotification notification; final AppNotification notification;
final Function(AppNotification) onPressed; final Function(AppNotification) onPressed;

@ -81,7 +81,7 @@ class _AutoCompleteDeviceNumberFieldState extends State<AutoCompleteDeviceNumber
itemBuilder: (context, device) { itemBuilder: (context, device) {
return ListTile( return ListTile(
title: Text(device.number), title: Text(device.number),
subtitle: Text("${device.model}/${device.brand}"), subtitle: Text("${device.modelDefinition.modelName}/${device.modelDefinition.manufacturerName}"),
); );
}, },
onSuggestionSelected: (device) { onSuggestionSelected: (device) {

@ -11,7 +11,6 @@ import 'package:test_sa/views/widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; import 'package:test_sa/views/widgets/e_signature/e_signature.dart';
import 'package:test_sa/views/widgets/images/mini_one_image_picker.dart'; import 'package:test_sa/views/widgets/images/mini_one_image_picker.dart';
import 'package:test_sa/views/widgets/status/pentry/pentry_status_mune.dart';
import 'package:test_sa/views/widgets/status/pentry/pentry_visit_status_mune.dart'; import 'package:test_sa/views/widgets/status/pentry/pentry_visit_status_mune.dart';
import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
@ -65,16 +64,16 @@ class _PentryInfoFormState extends State<PentryInfoForm> {
}, },
), ),
const SizedBox(height: 8,), const SizedBox(height: 8,),
const ASubTitle("Status"), // const ASubTitle("Status"),
// if(widget.enableValidate && widget.model.status == null) // // if(widget.enableValidate && widget.model.status == null)
// ASubTitle(subtitle.requiredWord,color: Colors.red,), // // ASubTitle(subtitle.requiredWord,color: Colors.red,),
const SizedBox(height: 4,), // const SizedBox(height: 4,),
PentryStatusMenu( // PentryStatusMenu(
initialValue: widget.model.status, // initialValue: widget.model.status,
onSelect: (status){ // onSelect: (status){
widget.model.status = status; // widget.model.status = status;
}, // },
), // ),
const SizedBox(height: 8,), const SizedBox(height: 8,),
const ASubTitle("Actual Visit Date"), const ASubTitle("Actual Visit Date"),
if(widget.enableValidate && widget.model.actualVisitDate == null) if(widget.enableValidate && widget.model.actualVisitDate == null)
@ -125,17 +124,25 @@ class _PentryInfoFormState extends State<PentryInfoForm> {
}, },
), ),
const SizedBox(height: 8,), const SizedBox(height: 8,),
const ASubTitle("Signature"), const ASubTitle("Nurse Signature"),
ESignature(
oldSignature: widget.model.signatureNurse,
newSignature: widget.model.localNurseSignature,
onChange: (signature){
if(signature == null || signature.isEmpty) {return;}
widget.model.localNurseSignature = signature;
widget.model.signatureNurse = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
},
),
const SizedBox(height: 8,),
const ASubTitle("Engineer Signature"),
ESignature( ESignature(
oldSignature: widget.model.signature, oldSignature: widget.model.signatureEngineer,
newSignature: widget.model.localSignature, newSignature: widget.model.localNurseSignature,
onSaved: (signature){ onChange: (signature){
widget.model.localSignature = signature; if(signature == null || signature.isEmpty) {return;}
if(signature == null || signature.isEmpty) { widget.model.localNurseSignature = signature;
widget.model.signature = null; widget.model.signatureEngineer = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
return;
}
widget.model.signature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
}, },
), ),
const SizedBox(height: 8,), const SizedBox(height: 8,),

@ -3,7 +3,6 @@ import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/pantry/pm_kit.dart'; import 'package:test_sa/models/pantry/pm_kit.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart';
import 'package:test_sa/views/widgets/parts/auto_complete_parts_field.dart'; import 'package:test_sa/views/widgets/parts/auto_complete_parts_field.dart';

@ -9,11 +9,9 @@ import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart';
import 'package:test_sa/views/widgets/hospitals/hospital_auto_complete_field.dart'; import 'package:test_sa/views/widgets/hospitals/hospital_auto_complete_field.dart';
import 'package:test_sa/views/widgets/status/service_request/service_request_status_mune.dart'; import 'package:test_sa/views/widgets/status/service_request/service_request_status_mune.dart';
import 'package:test_sa/views/widgets/status/service_request/service_request_types_mune.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../app_text_form_field.dart'; import '../app_text_form_field.dart';
import 'filter_item.dart';
class ServiceRequestsSearchDialog extends StatefulWidget { class ServiceRequestsSearchDialog extends StatefulWidget {
final ServiceRequestSearch initialSearchValue; final ServiceRequestSearch initialSearchValue;
final bool expandedSearch; final bool expandedSearch;

@ -15,7 +15,6 @@ import 'package:test_sa/views/widgets/status/pentry/pentry_visit_status_mune.dar
import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../app_text_form_field.dart'; import '../app_text_form_field.dart';
import 'filter_item.dart';
class VisitsSearchDialog extends StatefulWidget { class VisitsSearchDialog extends StatefulWidget {
final VisitsSearch initialSearchValue; final VisitsSearch initialSearchValue;
final bool expandedSearch; final bool expandedSearch;

@ -1,15 +1,12 @@
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/views/widgets/buttons/app_icon_button.dart';
import 'package:test_sa/views/widgets/buttons/app_icon_button2.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:speech_to_text/speech_recognition_error.dart'; import 'package:speech_to_text/speech_recognition_error.dart';
import 'package:speech_to_text/speech_recognition_result.dart'; import 'package:speech_to_text/speech_recognition_result.dart';
import 'package:speech_to_text/speech_to_text.dart'; import 'package:speech_to_text/speech_to_text.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import '../app_text_form_field.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button2.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
class SpeechToTextButton extends StatefulWidget { class SpeechToTextButton extends StatefulWidget {
final TextEditingController controller; final TextEditingController controller;

@ -1,6 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/models/engineer.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
class SingleEngineerMenu extends StatefulWidget { class SingleEngineerMenu extends StatefulWidget {

@ -1,6 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart';

@ -24,43 +24,46 @@ class _ServiceReportStatusMenuState extends State<ServiceReportStatusMenu> {
bool firstTime = true; bool firstTime = true;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SettingProvider _settingProvider = Provider.of<SettingProvider>(context); SettingProvider settingProvider = Provider.of<SettingProvider>(context);
UserProvider _userProvider = Provider.of<UserProvider>(context); UserProvider userProvider = Provider.of<UserProvider>(context);
ServiceReportStatusProvider _menuProvider = Provider.of<ServiceReportStatusProvider>(context); ServiceReportStatusProvider menuProvider = Provider.of<ServiceReportStatusProvider>(context);
ServiceReportLastCallsProvider _callsLastSituationsProvider = Provider.of<ServiceReportLastCallsProvider>(context,listen: false); ServiceReportLastCallsProvider callsLastSituationsProvider = Provider.of<ServiceReportLastCallsProvider>(context);
if(firstTime){ if(firstTime){
_callsLastSituationsProvider.reset(); callsLastSituationsProvider.reset();
firstTime = false; firstTime = false;
} }
return LoadingManager( return LoadingManager(
isLoading: _menuProvider.isLoading == true, isLoading: menuProvider.isLoading == true || callsLastSituationsProvider.isLoading == true,
isFailedLoading: _menuProvider.statuses == null, isFailedLoading: menuProvider.statuses == null || callsLastSituationsProvider.calls == null,
stateCode: _menuProvider.stateCode, stateCode: menuProvider.stateCode == null || callsLastSituationsProvider.stateCode == null ? null:
max(menuProvider.stateCode ?? 0,callsLastSituationsProvider.stateCode ?? 0),
onRefresh: () async { onRefresh: () async {
if(_menuProvider.stateCode == null){ await callsLastSituationsProvider.getCalls(
_menuProvider.reset(); user: userProvider.user,
await _menuProvider.getTypes( host: settingProvider.host,
user: _userProvider.user, serviceStatus: widget.report.status?.id
host: _settingProvider.host );
if(menuProvider.stateCode == null){
menuProvider.reset();
await menuProvider.getTypes(
user: userProvider.user,
host: settingProvider.host
); );
setState(() {});
} }
_callsLastSituationsProvider.getCalls(
user: _userProvider.user,
host: _settingProvider.host,
serviceStatus: widget.report.status?.id.toString()
);
}, },
child: SingleStatusMenu( child: SingleStatusMenu(
statuses: _menuProvider.statuses, statuses: menuProvider.statuses,
initialStatus: widget.report.status, initialStatus: widget.report.status,
onSelect: (status){ onSelect: (status){
// _callsLastSituationsProvider.getCalls( widget.report.callLastSituation = null;
// user: _userProvider.user, callsLastSituationsProvider.getCalls(
// host: _settingProvider.host, user: userProvider.user,
// serviceStatus: status.id.toString() host: settingProvider.host,
// ); serviceStatus: status.id
//widget.report.callLastSituation = null; );
widget.onSelect(status); widget.onSelect(status);
}, },
) )

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save