Merge remote-tracking branch 'origin/restructuring' into support_null_safety

merge-requests/2/head
nextwo 3 years ago
commit 7fb78685ac

@ -4,7 +4,6 @@ import 'package:http/http.dart' as http;
import 'package:test_sa/core/enums.dart'; import 'package:test_sa/core/enums.dart';
class ApiClient { class ApiClient {
final String baseUrl, endPoint; final String baseUrl, endPoint;
final RequestMethod requestMethod; final RequestMethod requestMethod;
@ -15,7 +14,6 @@ class ApiClient {
}); });
Future<Map<String, dynamic>> execute({ Future<Map<String, dynamic>> execute({
String? token,
Map<String, String>? headers, Map<String, String>? headers,
Map<String, dynamic>? queryParameters, Map<String, dynamic>? queryParameters,
Object? body, Object? body,

@ -1,40 +1,38 @@
import 'package:test_sa/models/subtitle.dart'; import '../../models/subtitle.dart';
import 'package:meta/meta.dart';
class HttpStatusManger{ class HttpStatusManger {
static String getStatusMessage({ static String getStatusMessage({
@required int status, required int? status,
@required Subtitle subtitle, required Subtitle subtitle,
String messageFor400, String? messageFor400,
String messageFor200, String? messageFor200,
}){ }) {
if(status == null) if (status == null) {
// no status code - code error no need for subtitle
return "careful null status"; return "careful null status";
if(status == -1) }
// client's request in process if (status == -1) {
return subtitle.currentlyServiceNotAvailable; return subtitle.currentlyServiceNotAvailable;
if(status == -2){ }
if (status == -2) {
// client's request in process // client's request in process
return subtitle.waitUntilYourRequestComplete; return subtitle.waitUntilYourRequestComplete;
}else if(status >= 200 && status < 300){ } else if (status >= 200 && status < 300) {
// client's request was successfully received // client's request was successfully received
return messageFor200 ?? subtitle.requestCompleteSuccessfully; return messageFor200 ?? subtitle.requestCompleteSuccessfully;
} else if(status >= 400 && status < 500){ } else if (status >= 400 && status < 500) {
// client's request have error // client's request have error
switch(status){ switch (status) {
case 400: case 400:
return messageFor400 ?? subtitle.failedToCompleteRequest; return messageFor400 ?? subtitle.failedToCompleteRequest;
default: default:
return subtitle.failedToCompleteRequest; return subtitle.failedToCompleteRequest;
} }
} else if(status >= 500){ } else if (status >= 500) {
// server error // server error
return subtitle.currentlyServiceNotAvailable; return subtitle.currentlyServiceNotAvailable;
} else { } else {
// no error match so return default error // no error match so return default error
return subtitle.failedToCompleteRequest; return subtitle.failedToCompleteRequest;
} }
} }
} }

@ -2,29 +2,31 @@ import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:test_sa/models/subtitle.dart';
import '../../models/subtitle.dart';
class AppLocalization { class AppLocalization {
AppLocalization(this.locale); AppLocalization(this.locale);
final Locale locale; final Locale locale;
static AppLocalization of(BuildContext context) {
static AppLocalization? of(BuildContext context) {
return Localizations.of<AppLocalization>(context, AppLocalization); return Localizations.of<AppLocalization>(context, AppLocalization);
} }
Subtitle _subtitle; Subtitle? _subtitle;
Subtitle get subtitle => _subtitle;
Subtitle? get subtitle => _subtitle;
Future<void> load() async { Future<void> load() async {
String jsonStringValues = String jsonStringValues = await rootBundle
await rootBundle.loadString('assets/subtitles/${locale.languageCode}_subtitle.json'); .loadString('assets/subtitles/${locale.languageCode}_subtitle.json');
_subtitle = Subtitle.fromJson(json.decode(jsonStringValues)); _subtitle = Subtitle.fromJson(json.decode(jsonStringValues));
} }
// static member to have simple access to the delegate from Material App // static member to have simple access to the delegate from Material App
static const LocalizationsDelegate<AppLocalization> delegate = static const LocalizationsDelegate<AppLocalization> delegate =
_DemoLocalizationsDelegate(); _DemoLocalizationsDelegate();
} }
class _DemoLocalizationsDelegate class _DemoLocalizationsDelegate
@ -33,16 +35,16 @@ class _DemoLocalizationsDelegate
@override @override
bool isSupported(Locale locale) { bool isSupported(Locale locale) {
return ['en','ar'].contains(locale.languageCode); return ['en', 'ar'].contains(locale.languageCode);
} }
@override @override
Future<AppLocalization> load(Locale locale) async { Future<AppLocalization> load(Locale locale) async {
AppLocalization localization = new AppLocalization(locale); AppLocalization localization = AppLocalization(locale);
await localization.load(); await localization.load();
return localization; return localization;
} }
@override @override
bool shouldReload(LocalizationsDelegate<AppLocalization> old) => false; bool shouldReload(LocalizationsDelegate<AppLocalization> old) => false;
} }

@ -3,16 +3,15 @@ import 'dart:convert';
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 '../../models/app_notification.dart';
import 'notification_manger.dart'; import 'notification_manger.dart';
class FirebaseNotificationManger{ class FirebaseNotificationManger {
static FirebaseMessaging messaging = FirebaseMessaging.instance; static FirebaseMessaging messaging = FirebaseMessaging.instance;
static String token; static String? token;
static Future<String> getToken() async { static Future<String?> getToken() async {
NotificationSettings settings = await messaging.requestPermission( NotificationSettings settings = await messaging.requestPermission(
alert: true, alert: true,
announcement: false, announcement: false,
@ -23,7 +22,7 @@ class FirebaseNotificationManger{
sound: true, sound: true,
); );
if(settings.authorizationStatus == AuthorizationStatus.authorized){ if (settings.authorizationStatus == AuthorizationStatus.authorized) {
token = await messaging.getToken(); token = await messaging.getToken();
} }
return token; return token;
@ -32,7 +31,7 @@ class FirebaseNotificationManger{
static initialized(BuildContext context) async { static initialized(BuildContext context) async {
await Firebase.initializeApp(); await Firebase.initializeApp();
NotificationSettings settings; NotificationSettings settings;
try{ try {
settings = await messaging.requestPermission( settings = await messaging.requestPermission(
alert: true, alert: true,
announcement: false, announcement: false,
@ -42,11 +41,11 @@ class FirebaseNotificationManger{
provisional: false, provisional: false,
sound: true, sound: true,
); );
}catch(error){ } catch (error) {
return; return;
} }
if(settings.authorizationStatus != AuthorizationStatus.authorized){ if (settings.authorizationStatus != AuthorizationStatus.authorized) {
return; return;
} }
@ -56,28 +55,24 @@ class FirebaseNotificationManger{
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) { FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
AppNotification notification = AppNotification.fromJson(message.data); AppNotification notification = AppNotification.fromJson(message.data);
if(notification.path == null
|| notification.path.isEmpty)
return;
Navigator.pushNamed( Navigator.pushNamed(
context, context,
notification.path, notification.path,
arguments: notification.requestId arguments: notification.requestId,
); );
}); });
FirebaseMessaging.onMessage.listen((RemoteMessage message) { FirebaseMessaging.onMessage.listen((RemoteMessage message) {
AppNotification notification = AppNotification.fromJson(message.data); AppNotification notification = AppNotification.fromJson(message.data);
NotificationManger.showNotification( NotificationManger.showNotification(
title: message.notification.title, title: message.notification?.title,
subtext: message.notification.body, subtext: message.notification?.body,
hashcode: int.tryParse(notification.requestId ?? "") ?? 1, hashcode: int.tryParse(notification.requestId) ?? 1,
payload: json.encode(message.data) payload: json.encode(message.data),
); );
return; return;
}); });
} }
} }
Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async { Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {}
}

@ -1,54 +1,54 @@
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{ import '../../views/app_style/colors.dart';
class NotificationManger {
// private constructor to avoid create object // private constructor to avoid create object
NotificationManger._(); NotificationManger._();
static FlutterLocalNotificationsPlugin localNotificationsPlugin = FlutterLocalNotificationsPlugin(); static FlutterLocalNotificationsPlugin localNotificationsPlugin =
FlutterLocalNotificationsPlugin();
/// initialisation setting for all platform /// initialisation setting for all platform
/// onNotificationPressed action when notification pressed to open tap /// onNotificationPressed action when notification pressed to open tap
/// onIOSNotificationPressed action when notification pressed /// onIOSNotificationPressed action when notification pressed
/// to open tap in iOS versions older than 10 /// to open tap in iOS versions older than 10
static initialisation( static initialisation(Function(NotificationResponse) onNotificationPressed,
Function(NotificationResponse) onNotificationPressed, DidReceiveLocalNotificationCallback onIOSNotificationPressed) async {
DidReceiveLocalNotificationCallback onIOSNotificationPressed
) async {
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin(); FlutterLocalNotificationsPlugin();
// initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project // initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project
const AndroidInitializationSettings initializationSettingsAndroid = const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('app_icon',); AndroidInitializationSettings(
'app_icon',
);
final DarwinInitializationSettings initializationSettingsDarwin = final DarwinInitializationSettings initializationSettingsDarwin =
DarwinInitializationSettings( DarwinInitializationSettings(
onDidReceiveLocalNotification: onIOSNotificationPressed); onDidReceiveLocalNotification: onIOSNotificationPressed);
final InitializationSettings initializationSettings = InitializationSettings( final InitializationSettings initializationSettings =
android: initializationSettingsAndroid, InitializationSettings(
iOS: initializationSettingsDarwin, android: initializationSettingsAndroid,
macOS: initializationSettingsDarwin); iOS: initializationSettingsDarwin,
macOS: initializationSettingsDarwin);
await flutterLocalNotificationsPlugin.initialize( await flutterLocalNotificationsPlugin.initialize(initializationSettings,
initializationSettings,
onDidReceiveNotificationResponse: onNotificationPressed); onDidReceiveNotificationResponse: onNotificationPressed);
} }
// push new notification // push new notification
static Future showNotification( static Future showNotification({
{ required String? title,
@required String title, required String? subtext,
@required String subtext, required int hashcode,
@required int hashcode, String? payload,
String payload }) async {
}) async { const AndroidNotificationDetails androidChannel =
AndroidNotificationDetails(
const AndroidNotificationDetails androidChannel = AndroidNotificationDetails(
'com.newtrack.testsa', 'com.newtrack.testsa',
'Test SA', 'Test SA',
channelDescription:'Push notification service for Test SA', channelDescription: 'Push notification service for Test SA',
importance: Importance.max, importance: Importance.max,
priority: Priority.max, priority: Priority.max,
playSound: true, playSound: true,
@ -63,7 +63,7 @@ class NotificationManger{
); );
const DarwinNotificationDetails iosNotificationDetails = const DarwinNotificationDetails iosNotificationDetails =
DarwinNotificationDetails( DarwinNotificationDetails(
categoryIdentifier: "testSA", categoryIdentifier: "testSA",
); );
@ -81,5 +81,4 @@ class NotificationManger{
payload: payload, payload: payload,
); );
} }
}
}

@ -2,13 +2,13 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/department.dart';
class DepartmentsProvider extends ChangeNotifier{ import '../../../models/department.dart';
import '../../api_routes/urls.dart';
class DepartmentsProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
departments = null; departments = null;
stateCode = null; stateCode = null;
} }
@ -16,52 +16,51 @@ class DepartmentsProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int stateCode; int? stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Department> departments; List<Department>? departments;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool isLoading; bool? isLoading;
/// return -2 if request in progress /// return -2 if request in progress
/// return -1 if error happen when sending request /// return -1 if error happen when sending request
/// 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> getDepartment (String host) async { Future<int> getDepartment(String host) async {
if(isLoading == true) if (isLoading == true) {
return -2; return -2;
}
isLoading = true; isLoading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(
Uri.parse(host + URLs.getDepartments), Uri.parse(host + URLs.getDepartments),
headers: { headers: {"Content-Type": "application/json; charset=utf-8"},
"Content-Type":"application/json; charset=utf-8"
}
); );
} catch(error) { } catch (error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); List listJson =
departments = listJson.map((department) => Department.fromJson(department)).toList(); json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
departments = listJson
.map((department) => Department.fromJson(department))
.toList();
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} }
}
}

@ -2,18 +2,18 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/device/device_transfer_info.dart';
import 'package:test_sa/models/user.dart';
class DeviceTransferProvider extends ChangeNotifier{ import '../../../models/device/device_transfer.dart';
import '../../../models/device/device_transfer_info.dart';
import '../../../models/user.dart';
import '../../api_routes/urls.dart';
class DeviceTransferProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 50;
//reset provider data //reset provider data
void reset(){ void reset() {
items = null; items = null;
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
@ -22,30 +22,31 @@ class DeviceTransferProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int stateCode; int? stateCode;
// true if there is next page in product list and false if not // true if there is next page in product list and false if not
bool nextPage = true; bool? nextPage = true;
// list of user requests // list of user requests
List<DeviceTransfer> items; List<DeviceTransfer>? items;
// when requests in-process _loading = true // when requests in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool isLoading; bool? isLoading;
/// return -2 if request in progress /// return -2 if request in progress
/// return -1 if error happen when sending request /// return -1 if error happen when sending request
/// 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> getRequests ({ Future<int> getRequests({
@required String host, required String host,
@required User user, required User user,
}) async { }) async {
if(isLoading == true) if (isLoading == true) {
return -2; return -2;
}
isLoading = true; isLoading = true;
// isLoading = false; // isLoading = false;
@ -63,108 +64,97 @@ class DeviceTransferProvider extends ChangeNotifier{
// notifyListeners(); // notifyListeners();
// return 200; // return 200;
Response response; Response response;
try{ try {
response = await get( response = await get(
Uri.parse( Uri.parse("$host${URLs.getDeviceTransfer}?uid=${user.id}"
"$host${URLs.getDeviceTransfer}?uid=${user.id}" "&token=${user.token}&page=${(items?.length ?? 0) ~/ pageItemNumber}"),
"&token=${user.token}&page=${(items?.length ?? 0) ~/pageItemNumber}" headers: {"Content-Type": "application/json; charset=utf-8"});
),
headers: {
"Content-Type":"application/json; charset=utf-8"
}
);
stateCode = response.statusCode; stateCode = response.statusCode;
if(stateCode >= 200 && stateCode < 300) { if (stateCode != null && stateCode! >= 200 && stateCode! < 300) {
// client's request was successfully received // client's request was successfully received
List listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); List listJson =
List<DeviceTransfer> itemsPage = listJson.map( json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
(request) => DeviceTransfer.fromJson(request)).toList(); List<DeviceTransfer> itemsPage = listJson
.map((request) => DeviceTransfer.fromJson(request))
.toList();
items ??= []; items ??= [];
items.addAll(itemsPage); items?.addAll(itemsPage);
if(itemsPage.length == pageItemNumber){ if (itemsPage.length == pageItemNumber) {
nextPage = true; nextPage = true;
}else{ } else {
nextPage = false; nextPage = false;
} }
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
Future<int> createRequest ({ Future<int> createRequest({
@required String host, required String host,
@required User user, required User user,
@required DeviceTransfer model, required DeviceTransfer model,
}) async { }) async {
Map<String,dynamic> body = { Map<String, dynamic> body = {
"uid": user.id.toString(), "uid": user.id.toString(),
"token": user.token ?? "", "token": user.token ?? "",
"serial_id": model.device.id ?? "", "serial_id": model.device?.id ?? "",
"destination_client": model.receiver.client.id ?? "", "destination_client": model.receiver?.client?.id ?? "",
"destination_department": model.receiver.department.id ?? "", "destination_department": model.receiver?.department?.id ?? "",
}; };
Response response; Response response;
try{ try {
response = await post( response = await post(
Uri.parse( Uri.parse(host + URLs.requestDeviceTransfer),
host+URLs.requestDeviceTransfer), body: body,
body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
if(items != null) { final items = this.items;
if (items != null) {
items.insert( items.insert(
0, 0,
DeviceTransfer.fromJson( DeviceTransfer.fromJson(
json.decode(utf8.decode(response.bodyBytes))[0] json.decode(utf8.decode(response.bodyBytes))[0]));
)
);
notifyListeners(); notifyListeners();
} }
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<int> updateRequest ({ Future<int> updateRequest({
@required String host, required String host,
@required User user, required User user,
@required bool isSender, required bool isSender,
@required String requestId, required String requestId,
@required DeviceTransfer oldModel, required DeviceTransfer oldModel,
@required DeviceTransferInfo newModel, required DeviceTransferInfo newModel,
}) async { }) async {
Map<String, dynamic> body = {
Map<String,dynamic> body = {
"uid": user.id.toString(), "uid": user.id.toString(),
"token": user.token ?? "", "token": user.token ?? "",
"current_user": user.id ?? "", "current_user": user.id ?? "",
}; };
body.addAll(newModel.toJson(isSender)); body.addAll(newModel.toJson(isSender));
Response response; Response response;
try{ try {
response = await post( response = await post(
Uri.parse("$host${URLs.updateDeviceTransfer}/$requestId"), Uri.parse("$host${URLs.updateDeviceTransfer}/$requestId"),
body: body, body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
reset(); reset();
// oldModel.fromDeviceTransfer( // oldModel.fromDeviceTransfer(
// DeviceTransfer.fromJson( // DeviceTransfer.fromJson(
@ -174,10 +164,8 @@ class DeviceTransferProvider extends ChangeNotifier{
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
} }

@ -2,14 +2,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/user.dart';
class DevicesProvider extends ChangeNotifier{ import '../../../models/device/device.dart';
import '../../../models/user.dart';
import '../../api_routes/urls.dart';
class DevicesProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_devices = null; _devices = null;
_stateCode = null; _stateCode = null;
} }
@ -17,18 +17,22 @@ class DevicesProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
List<Device> _devices; int? get stateCode => _stateCode;
List<Device> get devices => _devices;
List<Device>? _devices;
List<Device>? get devices => _devices;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -38,34 +42,33 @@ class DevicesProvider 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> getEquipment ({ Future<int> getEquipment(
@required String host, {required String host,
@required User user, required User user,
@required String hospitalId required String hospitalId}) async {
}) async { if (_loading == true) {
if(_loading == true)
return -2; return -2;
}
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(
Uri.parse(host + URLs.getEquipment+"?client=$hospitalId"), Uri.parse("${host + URLs.getEquipment}?client=$hospitalId"),
headers: { headers: {"Content-Type": "application/json; charset=utf-8"},
"Content-Type":"application/json; charset=utf-8"
}
); );
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List equipmentListJson = json.decode(utf8.decode(response.bodyBytes)); List equipmentListJson = json.decode(utf8.decode(response.bodyBytes));
_devices = equipmentListJson.map((device) => Device.fromJson(device)).toList(); _devices =
equipmentListJson.map((device) => Device.fromJson(device)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
@ -77,32 +80,32 @@ class DevicesProvider 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<List<Device>> getDevicesList ({ Future<List<Device>> getDevicesList({
@required String host, required String host,
@required User user, required User user,
@required String hospitalId, required String hospitalId,
String serialNumber, String? serialNumber,
String number, String? number,
}) async { }) async {
Response response; Response response;
try{ try {
response = await get( response = await get(
Uri.parse("$host${URLs.getEquipment}?client=$hospitalId" Uri.parse("$host${URLs.getEquipment}?client=$hospitalId"
"${serialNumber?.isEmpty == false ? "&name=$serialNumber" :""}" "${serialNumber?.isEmpty == false ? "&name=$serialNumber" : ""}"
"${number?.isEmpty == false ? "&number=$number" : ""}" "${number?.isEmpty == false ? "&number=$number" : ""}"),
),
); );
List<Device> page = []; List<Device> page = [];
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
page = categoriesListJson.map((device) => Device.fromJson(device)).toList(); page = categoriesListJson
.map((device) => Device.fromJson(device))
.toList();
} }
return page; return page;
} catch(error) { } catch (error) {
return []; return [];
} }
} }
/// return -2 if request in progress /// return -2 if request in progress
@ -110,33 +113,34 @@ class DevicesProvider 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<List<Device>> getDevicesListBySN ({ Future<List<Device>> getDevicesListBySN({
@required String host, required String host,
@required User user, required User user,
@required String hospitalId, required String hospitalId,
@required String sn required String sn,
}) async { }) async {
Response response; Response response;
try{ try {
response = await get( response = await get(
Uri.parse(host + URLs.getEquipment+"?client=$hospitalId" Uri.parse(
+ ( sn == null || sn.isEmpty ? "" : "&serial_qr=$sn" )), "$host${URLs.getEquipment}?client=$hospitalId${sn.isEmpty ? "" : "&serial_qr=$sn"}"),
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
List<Device> _page = []; List<Device> page = [];
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
_page = categoriesListJson.map((device) => Device.fromJson(device)).toList(); page = categoriesListJson
.map((device) => Device.fromJson(device))
.toList();
} }
return _page; return page;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return []; return [];
} }
} }
} }

@ -2,17 +2,17 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/gas_refill/gas_refill_model.dart';
import 'package:test_sa/models/user.dart';
class GasRefillProvider extends ChangeNotifier{ import '../../../models/gas_refill/gas_refill_model.dart';
import '../../../models/user.dart';
import '../../api_routes/urls.dart';
class GasRefillProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 50;
//reset provider data //reset provider data
void reset(){ void reset() {
items = null; items = null;
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
@ -21,152 +21,145 @@ class GasRefillProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int stateCode; int? stateCode;
// true if there is next page in product list and false if not // true if there is next page in product list and false if not
bool nextPage = true; bool nextPage = true;
// list of user requests // list of user requests
List<GasRefillModel> items; List<GasRefillModel>? items;
// when requests in-process _loading = true // when requests in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool isLoading; bool? isLoading;
/// return -2 if request in progress /// return -2 if request in progress
/// return -1 if error happen when sending request /// return -1 if error happen when sending request
/// 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> getRequests ({ Future<int> getRequests({
@required String host, required String host,
@required User user, required User user,
}) async { }) async {
if(isLoading == true) if (isLoading == true) {
return -2; return -2;
}
isLoading = true; isLoading = true;
Response response; Response response;
try{ try {
response = await get( response = await get(
Uri.parse( Uri.parse("$host${URLs.getGasRefill}?uid=${user.id}"
"$host${URLs.getGasRefill}?uid=${user.id}" "&token=${user.token}&page=${(items?.length ?? 0) ~/ pageItemNumber}"),
"&token=${user.token}&page=${(items?.length ?? 0) ~/pageItemNumber}" headers: {"Content-Type": "application/json; charset=utf-8"});
),
headers: {
"Content-Type":"application/json; charset=utf-8"
}
);
stateCode = response.statusCode; stateCode = response.statusCode;
if(stateCode >= 200 && stateCode < 300) { if (stateCode != null && stateCode! >= 200 && stateCode! < 300) {
// client's request was successfully received // client's request was successfully received
List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); List requestsListJson = json.decode(utf8.decode(response.bodyBytes));
List<GasRefillModel> itemsPage = requestsListJson.map( List<GasRefillModel> itemsPage = requestsListJson
(request) => GasRefillModel.fromJson(request)).toList(); .map((request) => GasRefillModel.fromJson(request))
.toList();
items ??= []; items ??= [];
items.addAll(itemsPage); items?.addAll(itemsPage);
if(itemsPage.length == pageItemNumber){ if (itemsPage.length == pageItemNumber) {
nextPage = true; nextPage = true;
}else{ } else {
nextPage = false; nextPage = false;
} }
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
Future<int> createModel ({ Future<int> createModel({
@required String host, required String host,
@required User user, required User user,
@required GasRefillModel model, required GasRefillModel model,
}) async { }) async {
Map<String,dynamic> body = { Map<String, dynamic> body = {
"uid": user.id.toString(), "uid": user.id.toString(),
"token": user.token ?? "", "token": user.token ?? "",
"title": model.title ?? "", "title": model.title ?? "",
"status": "0",//model.status.value.toString(), "status": "0", //model.status.value.toString(),
}; };
body["details"] = jsonEncode(model.details.map((model) => { body["details"] = jsonEncode(model.details
"type": model.type.id?.toString(), ?.map((model) => {
"size": model.cylinderSize?.id.toString(), "type": model.type?.id.toString(),
"requsted_qty": model.requestedQuantity.toString(), "size": model.cylinderSize?.id.toString(),
}).toList()); "requsted_qty": model.requestedQuantity.toString(),
})
.toList());
Response response; Response response;
try{ try {
response = await post( response = await post(
Uri.parse( Uri.parse(host + URLs.requestGasRefill),
host+URLs.requestGasRefill), body: body,
body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
if(items != null) { final items = this.items;
if (items != null) {
items.insert( items.insert(
0, 0,
GasRefillModel.fromJson( GasRefillModel.fromJson(
json.decode(utf8.decode(response.bodyBytes))[0] json.decode(utf8.decode(response.bodyBytes))[0]));
)
);
notifyListeners(); notifyListeners();
} }
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<int> updateModel ({ Future<int> updateModel({
@required String host, required String host,
@required User user, required User user,
@required GasRefillModel oldModel, required GasRefillModel oldModel,
@required GasRefillModel newModel, required GasRefillModel newModel,
}) async { }) async {
Map<String,dynamic> body = { Map<String, dynamic> body = {
"uid": user.id.toString(), "uid": user.id.toString(),
"token": user.token ?? "", "token": user.token,
"title": newModel.title ?? "", "title": newModel.title ?? "",
"status": newModel.status.id.toString(), "status": newModel.status?.id.toString(),
}; };
body["details"] = jsonEncode(newModel.details.map((model) => { body["details"] = jsonEncode(newModel.details
"type": model.type.id.toString(), ?.map((model) => {
"size": model.cylinderSize.id.toString(), "type": model.type?.id.toString(),
"requsted_qty": model.requestedQuantity.toString(), "size": model.cylinderSize?.id.toString(),
"deliverd_qty": model.deliveredQuantity.toString(), "requsted_qty": model.requestedQuantity.toString(),
}).toList()); "deliverd_qty": model.deliveredQuantity.toString(),
})
.toList());
Response response; Response response;
try{ try {
response = await post( response = await post(
Uri.parse("$host${URLs.updateGasRefill}/${newModel.id}"), Uri.parse("$host${URLs.updateGasRefill}/${newModel.id}"),
body: body, body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
oldModel.fromGasRefillModel(newModel); oldModel.fromGasRefillModel(newModel);
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
} }

@ -3,17 +3,17 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/user.dart';
class HospitalsProvider extends ChangeNotifier{ import '../../../models/hospital.dart';
import '../../../models/user.dart';
import '../../api_routes/urls.dart';
class HospitalsProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 50;
//reset provider data //reset provider data
void reset(){ void reset() {
_hospitals = null; _hospitals = null;
_stateCode = null; _stateCode = null;
} }
@ -21,24 +21,29 @@ class HospitalsProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// true if there is next page in product list and false if not // true if there is next page in product list and false if not
bool _nextPage = true; bool _nextPage = true;
bool get nextPage => _nextPage; bool get nextPage => _nextPage;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Hospital> _hospitals; List<Hospital>? _hospitals;
List<Hospital> get hospitals => _hospitals;
List<Hospital>? get hospitals => _hospitals;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -48,77 +53,80 @@ class HospitalsProvider 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> getHospitals ({String host,User user,String title}) async { Future<int> getHospitals({
if(_loading == true) required String host,
required User user,
required String? title,
}) async {
if (_loading == true) {
return -2; return -2;
}
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(
Uri.parse( Uri.parse(
host + URLs.getHospitals "${host + URLs.getHospitals}?page=${(_hospitals?.length ?? 0) ~/ pageItemNumber}${title == null || title.isEmpty ? "" : "&name=$title"}",
+ "?page=${(_hospitals?.length ?? 0) ~/pageItemNumber}" ),
+ ( title == null || title.isEmpty ? "" : "&name=$title" ) headers: {"Content-Type": "application/json; charset=utf-8"},
),
headers: {
"Content-Type":"application/json; charset=utf-8"
}
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
List<Hospital> _page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); List<Hospital> page = categoriesListJson
if(hospitals == null) .map((category) => Hospital.fromJson(category))
_hospitals = []; .toList();
if (hospitals == null) _hospitals = [];
_hospitals.addAll(_page); _hospitals?.addAll(page);
if(_page.length >= pageItemNumber){ if (page.length >= pageItemNumber) {
_nextPage = true; _nextPage = true;
}else{ } else {
_nextPage = false; _nextPage = false;
} }
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
Future<List<Hospital>> getHospitalsList ({String host,User user,String title}) async { Future<List<Hospital>> getHospitalsList({
required String host,
required User user,
required String title,
}) async {
Response response; Response response;
try{ try {
response = await get( response = await get(
Uri.parse(host + URLs.getHospitals Uri.parse(
+ ( title == null || title.isEmpty ? "" : "?name=$title" )), host + URLs.getHospitals + (title.isEmpty ? "" : "?name=$title"),
headers: { ),
"Content-Type":"application/json; charset=utf-8" headers: {"Content-Type": "application/json; charset=utf-8"},
}
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
List<Hospital> _page = []; List<Hospital> page = [];
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
_page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); page = categoriesListJson
.map((category) => Hospital.fromJson(category))
.toList();
} }
return _page; return page;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return []; return [];
} }
} }
}
}

@ -2,17 +2,17 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/app_notification.dart';
import 'package:test_sa/models/user.dart';
class NotificationsProvider extends ChangeNotifier{ import '../../../models/app_notification.dart';
import '../../../models/user.dart';
import '../../api_routes/urls.dart';
class NotificationsProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 20; final pageItemNumber = 20;
//reset provider data //reset provider data
void reset(){ void reset() {
notifications = null; notifications = null;
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
@ -21,71 +21,66 @@ class NotificationsProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int stateCode; int? stateCode;
// true if there is next page in product list and false if not // true if there is next page in product list and false if not
bool nextPage = true; bool? nextPage = true;
// list of user requests // list of user requests
List<AppNotification> notifications; List<AppNotification>? notifications;
// when requests in-process _loading = true // when requests in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool isLoading; bool? isLoading;
/// return -2 if request in progress /// return -2 if request in progress
/// return -1 if error happen when sending request /// return -1 if error happen when sending request
/// 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> getNotifications ({ Future<int> getNotifications({
@required String host, required String host,
@required User user, required User user,
@required String hospitalId, required String hospitalId,
}) async { }) async {
if(isLoading == true) if (isLoading == true) {
return -2; return -2;
}
isLoading = true; isLoading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
// userId = 397.toString(); // testing id to view data // userId = 397.toString(); // testing id to view data
try{ try {
response = await get( response = await get(
Uri.parse(host+URLs.getNotifications Uri.parse(
+"?uid=${user.id}" "${host + URLs.getNotifications}?uid=${user.id}&token=${user.token}&page=${(notifications?.length ?? 0) ~/ pageItemNumber}",
"&token=${user.token}" ),
"&page=${(notifications?.length ?? 0) ~/pageItemNumber}"), headers: {"Content-Type": "application/json; charset=utf-8"});
headers: {
"Content-Type":"application/json; charset=utf-8"
}
);
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); List requestsListJson = json.decode(utf8.decode(response.bodyBytes));
List<AppNotification> _serviceRequestsPage = requestsListJson.map( List<AppNotification> serviceRequestsPage = requestsListJson
(request) => AppNotification.fromJson(request)).toList(); .map((request) => AppNotification.fromJson(request))
if(notifications == null) .toList();
notifications = []; notifications ??= [];
notifications.addAll(_serviceRequestsPage); notifications?.addAll(serviceRequestsPage);
if(_serviceRequestsPage.length == pageItemNumber){ if (serviceRequestsPage.length == pageItemNumber) {
nextPage = true; nextPage = true;
}else{ } else {
nextPage = false; nextPage = false;
} }
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
/// return -2 if request in progress /// return -2 if request in progress
@ -93,35 +88,31 @@ class NotificationsProvider 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<List<AppNotification>> getRecentNotifications ({ Future<List<AppNotification>?> getRecentNotifications({
@required String host, required String host,
@required User user, required User user,
}) async { }) async {
Response response; Response response;
//userId = 397.toString(); // testing id to view data //userId = 397.toString(); // testing id to view data
try{ try {
response = await get( response = await get(
Uri.parse(host+URLs.getNotifications Uri.parse(
+"?uid=${user.id}&token=${user.token}"), "$host${URLs.getNotifications}?uid=${user.id}&token=${user.token}"),
headers: { headers: {"Content-Type": "application/json; charset=utf-8"});
"Content-Type":"application/json; charset=utf-8"
}
);
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); List requestsListJson = json.decode(utf8.decode(response.bodyBytes));
List<AppNotification> _recentNotifications = requestsListJson.map( List<AppNotification> recentNotifications = requestsListJson
(request) => AppNotification.fromJson(request)).toList(); .map((request) => AppNotification.fromJson(request))
return _recentNotifications; .toList();
return recentNotifications;
} }
return null; return null;
} catch (error) {
} catch(error) {
return null; return null;
} }
} }
} }

@ -1,19 +1,19 @@
import 'dart:convert'; import 'dart:convert';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/part.dart';
import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
class PartsProvider extends ChangeNotifier{ import '../../../models/part.dart';
import '../../../models/user.dart';
import '../../api_routes/urls.dart';
class PartsProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 50;
//reset provider data //reset provider data
void reset(){ void reset() {
_parts = null; _parts = null;
_stateCode = null; _stateCode = null;
} }
@ -21,24 +21,29 @@ class PartsProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// true if there is next page in product list and false if not // true if there is next page in product list and false if not
bool _nextPage = true; bool _nextPage = true;
bool get nextPage => _nextPage; bool get nextPage => _nextPage;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Part> _parts; List<Part>? _parts;
List<Part> get parts => _parts;
List<Part>? get parts => _parts;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -48,48 +53,46 @@ class PartsProvider 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> getParts ({String host,User user,String title}) async { Future<int> getParts({
if(_loading == true) required String host,
return -2; required User user,
required String? title,
}) async {
if (_loading == true) return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(
Uri.parse( Uri.parse(
host + URLs.getPartNumber "$host${URLs.getPartNumber}?page=${(_parts?.length ?? 0) ~/ pageItemNumber}${title == null || title.isEmpty ? "" : "&name=$title"}",
+ "?page=${(_parts?.length ?? 0) ~/pageItemNumber}" ),
+ ( title == null || title.isEmpty ? "" : "&name=$title" ) headers: {"Content-Type": "application/json; charset=utf-8"},
),
headers: {
"Content-Type":"application/json; charset=utf-8"
}
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
List<Part> _page = categoriesListJson.map((part) => Part.fromJson(part)).toList(); List<Part> page =
if(parts == null) categoriesListJson.map((part) => Part.fromJson(part)).toList();
_parts = []; if (parts == null) _parts = [];
_parts.addAll(_page); _parts?.addAll(page);
if(_page.length >= pageItemNumber){ if (page.length >= pageItemNumber) {
_nextPage = true; _nextPage = true;
}else{ } else {
_nextPage = false; _nextPage = false;
} }
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
/// return -2 if request in progress /// return -2 if request in progress
@ -97,30 +100,27 @@ class PartsProvider 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<List<Part>> getPartsList ({String host,User user,String title}) async { Future<List<Part>> getPartsList({
required String host,
required User user,
required String? title,
}) async {
Response response; Response response;
try{ try {
response = await get( response = await get(
Uri.parse( Uri.parse(host +
host + URLs.getPartNumber URLs.getPartNumber +
+ ( title == null || title.isEmpty ? "" : "?name=$title" ) (title == null || title.isEmpty ? "" : "?name=$title")),
), headers: {"Content-Type": "application/json; charset=utf-8"});
headers: { List<Part> page = [];
"Content-Type":"application/json; charset=utf-8" if (response.statusCode >= 200 && response.statusCode < 300) {
}
);
List<Part> _page = [];
if(response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
_page = categoriesListJson.map((part) => Part.fromJson(part)).toList(); page = categoriesListJson.map((part) => Part.fromJson(part)).toList();
} }
return _page; return page;
} catch(error) { } catch (error) {
return []; return [];
} }
} }
}
}

@ -1,20 +1,20 @@
import 'dart:convert'; import 'dart:convert';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/user.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_search.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
class PreventiveMaintenanceVisitsProvider extends ChangeNotifier{ import '../../../models/user.dart';
import '../../../models/visits/visit.dart';
import '../../../models/visits/visits_group.dart';
import '../../../models/visits/visits_search.dart';
import '../../api_routes/urls.dart';
class PreventiveMaintenanceVisitsProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 50;
//reset provider data //reset provider data
void reset(){ void reset() {
visits = null; visits = null;
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
@ -23,67 +23,58 @@ class PreventiveMaintenanceVisitsProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int stateCode; int? stateCode;
// true if there is next page in product list and false if not // true if there is next page in product list and false if not
bool nextPage = true; bool? nextPage = true;
// list of user requests // list of user requests
List<Visit> visits; List<Visit>? visits;
// when requests in-process _loading = true // when requests in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool isLoading; bool? isLoading;
VisitsSearch visitsSearch = VisitsSearch(); VisitsSearch? visitsSearch = VisitsSearch();
/// return -2 if request in progress /// return -2 if request in progress
/// return -1 if error happen when sending request /// return -1 if error happen when sending request
/// 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> getVisits ({ Future<int> getVisits({
@required String host, required String host,
@required User user, required User user,
// VisitsSearch visitsSearch, // VisitsSearch visitsSearch,
}) async { }) async {
if(isLoading == true) if (isLoading == true) return -2;
return -2;
isLoading = true; isLoading = true;
Response response; Response response;
//userId = 397.toString(); // testing id to view data //userId = 397.toString(); // testing id to view data
try{ try {
response = await get( response = await get(
Uri.parse( Uri.parse(
host + URLs.getPreventiveMaintenanceVisits "${host + URLs.getPreventiveMaintenanceVisits}?uid=${user.id}&token=${user.token}&page=${(visits?.length ?? 0) ~/ pageItemNumber}${visitsSearch?.toSearchString()}",
+"?uid=${user.id}" ),
"&token=${user.token}" headers: {"Content-Type": "application/json; charset=utf-8"},
"&page=${(visits?.length ?? 0) ~/pageItemNumber}"
+visitsSearch?.toSearchString() ?? ""
),
headers: {
"Content-Type":"application/json; charset=utf-8"
}
); );
} catch(error) { } catch (error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); List requestsListJson = json.decode(utf8.decode(response.bodyBytes));
List<Visit> _visits = requestsListJson.map( List<Visit> visits =
(request) => Visit.fromJson(request)).toList(); requestsListJson.map((request) => Visit.fromJson(request)).toList();
if(visits == null) visits.addAll(visits);
visits = []; if (visits.length == pageItemNumber) {
visits.addAll(_visits);
if(_visits.length == pageItemNumber){
nextPage = true; nextPage = true;
}else{ } else {
nextPage = false; nextPage = false;
} }
} }
@ -97,41 +88,39 @@ class PreventiveMaintenanceVisitsProvider 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> updateGroupOfVisits ({ Future<int> updateGroupOfVisits({
@required String host, required String host,
@required User user, required User user,
VisitsGroup group, required VisitsGroup group,
}) async { }) async {
Response response; Response response;
Map<String,String> body = group.toJson(); Map<String, String> body = group.toJson();
body["token"] = user.token ?? ""; body["token"] = user.token;
body["uid"] = user.id; body["uid"] = user.id;
//userId = 397.toString(); // testing id to view data //userId = 397.toString(); // testing id to view data
try{ try {
response = await post( response = await post(
Uri.parse( Uri.parse(host + URLs.updatePreventiveMaintenanceVisits),
host+URLs.updatePreventiveMaintenanceVisits
),
body: body, body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
group.visits.forEach((visit) { for (var visit in group.visits) {
visit.status = group.status; visit.status = group.status;
visit.actualDate = group.date.toString().split(" ").first; visit.actualDate = group.date.toString().split(" ").first;
}); }
group.visits.clear(); group.visits.clear();
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
} }

@ -1,21 +1,21 @@
import 'dart:convert'; import 'dart:convert';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/pantry/pentry.dart';
import 'package:test_sa/models/user.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_search.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
class RegularVisitsProvider extends ChangeNotifier{ import '../../../models/pantry/pentry.dart';
import '../../../models/user.dart';
import '../../../models/visits/visit.dart';
import '../../../models/visits/visits_group.dart';
import '../../../models/visits/visits_search.dart';
import '../../api_routes/urls.dart';
class RegularVisitsProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 50;
//reset provider data //reset provider data
void reset(){ void reset() {
visits = null; visits = null;
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
@ -24,78 +24,70 @@ class RegularVisitsProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int stateCode; int? stateCode;
// true if there is next page in product list and false if not // true if there is next page in product list and false if not
bool nextPage = true; bool nextPage = true;
// list of user requests // list of user requests
List<Visit> visits; List<Visit>? visits;
// when requests in-process _loading = true // when requests in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool isLoading; bool? isLoading;
VisitsSearch visitsSearch = VisitsSearch(); VisitsSearch? visitsSearch = VisitsSearch();
/// return -2 if request in progress /// return -2 if request in progress
/// return -1 if error happen when sending request /// return -1 if error happen when sending request
/// 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> getVisits ({ Future<int> getVisits({
@required String host, required String host,
@required User user, required User user,
// VisitsSearch visitsSearch, // VisitsSearch visitsSearch,
}) async { }) async {
if(isLoading == true) if (isLoading == true) {
return -2; return -2;
}
isLoading = true; isLoading = true;
Response response; Response response;
//userId = 397.toString(); // testing id to view data //userId = 397.toString(); // testing id to view data
try{ try {
response = await get( response = await get(
Uri.parse( Uri.parse(
host+URLs.getRegularVisits "$host${URLs.getRegularVisits}?uid=${user.id}&token=${user.token}&page=${(visits?.length ?? 0) ~/ pageItemNumber}${visitsSearch?.toSearchString()}",
+"?uid=${user.id}" ),
"&token=${user.token}" headers: {"Content-Type": "application/json; charset=utf-8"},
"&page=${(visits?.length ?? 0) ~/pageItemNumber}"
+visitsSearch?.toSearchString() ?? ""
),
headers: {
"Content-Type":"application/json; charset=utf-8"
}
); );
} catch(error) { } catch (error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
try{ try {
List requestsListJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); List requestsListJson =
List<Visit> _visits = requestsListJson.map( json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
(request) => Visit.fromJson(request) List<Visit> visits =
).toList(); requestsListJson.map((request) => Visit.fromJson(request)).toList();
if(visits == null) visits.addAll(visits);
visits = []; if (visits.length == pageItemNumber) {
visits.addAll(_visits);
if(_visits.length == pageItemNumber){
nextPage = true; nextPage = true;
}else{ } else {
nextPage = false; nextPage = false;
} }
}catch(error){ } catch (error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
@ -107,30 +99,30 @@ class RegularVisitsProvider 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> updateGroupOfVisits ({ Future<int> updateGroupOfVisits({
@required String host, required String host,
@required User user, required User user,
VisitsGroup group, required VisitsGroup group,
}) async { }) async {
Response response; Response response;
Map<String,String> body = group.toJson(); Map<String, String> body = group.toJson();
body["token"] = user.token ?? ""; body["token"] = user.token ?? "";
body["uid"] = user.id; body["uid"] = user.id;
//userId = 397.toString(); // testing id to view data //userId = 397.toString(); // testing id to view data
try{ try {
response = await post( response = await post(
Uri.parse(host+URLs.updateRegularVisits), Uri.parse(host + URLs.updateRegularVisits),
body: body, body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
reset(); reset();
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
@ -138,46 +130,46 @@ class RegularVisitsProvider extends ChangeNotifier{
} }
} }
Future<Pentry> getPently({String host,User user,String id}) async { Future<Pentry?> getPently({
required String host,
required User user,
required String id,
}) async {
Response response; Response response;
response = await get( response = await get(
Uri.parse("$host${URLs.getPentry}/$id"), Uri.parse("$host${URLs.getPentry}/$id"),
headers: { headers: {"Content-Type": "application/json; charset=utf-8"},
"Content-Type":"application/json; charset=utf-8"
}
); );
Pentry pantry; Pentry? pantry;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
pantry = Pentry.fromMap(json.decode(utf8.decode(response.bodyBytes))); pantry = Pentry.fromMap(json.decode(utf8.decode(response.bodyBytes)));
} }
return pantry; return pantry;
} }
Future<int> updatePentry ({ Future<int> updatePentry({
@required String host, required String host,
@required User user, required User user,
@required Pentry pentry, required Pentry pentry,
@required Visit visit, required Visit visit,
}) async { }) async {
try{ try {
Response response; Response response;
Map<String,String> body = pentry.toMap(); Map<String, String> body = pentry.toMap();
body["uid"] = user.id; body["uid"] = user.id;
body["token"] = user.token; body["token"] = user.token;
response = await post( response = await post(
Uri.parse(host+URLs.updatePentry + "/${visit.id}"), Uri.parse("$host${URLs.updatePentry}/${visit.id}"),
body: body, body: body,
); );
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
visit.status = pentry.ppmVisitStatus; visit.status = pentry.ppmVisitStatus;
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
} }

@ -2,24 +2,24 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart';
import 'package:test_sa/models/issue.dart';
import 'package:test_sa/models/lookup.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/timer_model.dart';
import 'package:test_sa/models/user.dart';
class ServiceRequestsProvider extends ChangeNotifier{
import '../../../models/issue.dart';
import '../../../models/lookup.dart';
import '../../../models/service_report.dart';
import '../../../models/service_request/service_request.dart';
import '../../../models/service_request/service_request_search.dart';
import '../../../models/subtitle.dart';
import '../../../models/timer_model.dart';
import '../../../models/user.dart';
import '../../api_routes/urls.dart';
import '../../http_status_manger/http_status_manger.dart';
class ServiceRequestsProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 50;
//reset provider data //reset provider data
void reset(){ void reset() {
serviceRequests = null; serviceRequests = null;
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
@ -28,121 +28,108 @@ class ServiceRequestsProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int stateCode; int? stateCode;
// true if there is next page in product list and false if not // true if there is next page in product list and false if not
bool nextPage = true; bool? nextPage = true;
// list of user requests // list of user requests
List<ServiceRequest> serviceRequests; List<ServiceRequest>? serviceRequests;
// when requests in-process _loading = true // when requests in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool isLoading; bool? isLoading;
ServiceRequestSearch search = ServiceRequestSearch(); ServiceRequestSearch? search = ServiceRequestSearch();
/// return -2 if request in progress /// return -2 if request in progress
/// return -1 if error happen when sending request /// return -1 if error happen when sending request
/// 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> getRequests ({ Future<int> getRequests({
@required String host, required String host,
@required User user, required User user,
@required String hospitalId, required String? hospitalId,
}) async { }) async {
if(isLoading == true) if (isLoading == true) {
return -2; return -2;
}
isLoading = true; isLoading = true;
Response response; Response response;
try{ try {
response = await get( response = await get(
Uri.parse( Uri.parse(
host+URLs.getServiceRequests "$host${URLs.getServiceRequests}?uid=${user.id}${hospitalId == null ? "" : "&client_nid=$hospitalId"}&token=${user.token}&page=${(serviceRequests?.length ?? 0) ~/ pageItemNumber}${search?.toSearchString()}",
+"?uid=${user.id}" ),
+(hospitalId == null? "" :"&client_nid=$hospitalId") headers: {"Content-Type": "application/json; charset=utf-8"},
+"&token=${user.token}"
"&page=${(serviceRequests?.length ?? 0) ~/pageItemNumber}"
+search?.toSearchString() ?? ""
),
headers: {
"Content-Type":"application/json; charset=utf-8"
}
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List requestsListJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); List requestsListJson =
List<ServiceRequest> _serviceRequestsPage = requestsListJson.map( json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
(request) => ServiceRequest.fromJson(request)).toList(); List<ServiceRequest> _serviceRequestsPage = requestsListJson
if(serviceRequests == null) .map((request) => ServiceRequest.fromJson(request))
serviceRequests = []; .toList();
serviceRequests.addAll(_serviceRequestsPage); serviceRequests ??= [];
if(_serviceRequestsPage.length == pageItemNumber){ serviceRequests?.addAll(_serviceRequestsPage);
if (_serviceRequestsPage.length == pageItemNumber) {
nextPage = true; nextPage = true;
}else{ } else {
nextPage = false; nextPage = false;
} }
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
Future<ServiceRequest> getSingleServiceRequest({ Future<ServiceRequest> getSingleServiceRequest({
@required String requestId, required String requestId,
@required String host, required String host,
@required User user, required User user,
@required Subtitle subtitle, required Subtitle subtitle,
}) async { }) async {
String userData = ''; String userData = '';
if(user != null){ userData += "&uid=${user.id}";
userData += "&uid="+user.id; userData += "&token=${user.token}";
userData += "&token="+user.token;
}
Response response; Response response;
try{ try {
response = await get( response = await get(Uri.parse(
Uri.parse( '$host${URLs.getSingleServiceRequest}?call_nid=$requestId$userData',
host+URLs.getSingleServiceRequest ));
+'?call_nid=$requestId' } catch (error) {
'$userData',) throw (HttpStatusManger.getStatusMessage(status: -1, subtitle: subtitle));
);
}catch(error){
throw(HttpStatusManger.getStatusMessage(
status: -1, subtitle: subtitle));
} }
// If the call to the server was successful, parse the JSON. // If the call to the server was successful, parse the JSON.
if (response.statusCode >= 200 && response.statusCode < 300){ if (response.statusCode >= 200 && response.statusCode < 300) {
// If the call to the server was successful, parse the JSON. // If the call to the server was successful, parse the JSON.
List jsonList = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); List jsonList =
List<ServiceRequest> _requests = jsonList.map((i) => ServiceRequest.fromJson(i)).toList(); json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
return _requests[0]; List<ServiceRequest> requests =
}else{ jsonList.map((i) => ServiceRequest.fromJson(i)).toList();
throw(HttpStatusManger.getStatusMessage( return requests[0];
} else {
throw (HttpStatusManger.getStatusMessage(
status: response.statusCode, subtitle: subtitle)); status: response.statusCode, subtitle: subtitle));
} }
} }
Future<int> createRequest ({ Future<int> createRequest({
@required String host, required String host,
@required User user, required User user,
@required ServiceRequest serviceRequest, required ServiceRequest serviceRequest,
}) async { }) async {
var body = { var body = {
"uid": user.id, "uid": user.id,
"token": user.token ?? "", "token": user.token ?? "",
@ -154,269 +141,233 @@ class ServiceRequestsProvider extends ChangeNotifier{
"priority": (serviceRequest.priority?.id).toString(), "priority": (serviceRequest.priority?.id).toString(),
"defect_types": (serviceRequest.defectType?.id).toString(), "defect_types": (serviceRequest.defectType?.id).toString(),
}; };
if(serviceRequest.audio != null){ body["audio"] = serviceRequest.audio;
body["audio"] = serviceRequest.audio;
}
Response response; Response response;
try{ try {
response = await post( response = await post(
Uri.parse( Uri.parse(host + URLs.createRequest),
host+URLs.createRequest), body: body,
body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
if(serviceRequests != null) final serviceRequests = this.serviceRequests;
if (serviceRequests != null) {
serviceRequests.insert( serviceRequests.insert(
0, 0,
ServiceRequest.fromJson( ServiceRequest.fromJson(
json.decode(utf8.decode(response.bodyBytes))[0] json.decode(utf8.decode(response.bodyBytes))[0],
) ),
); );
}
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<int> createIssueReport ({ Future<int> createIssueReport({
@required String host, required String host,
@required User user, required User user,
@required Issue issue, required Issue issue,
}) async { }) async {
Response response; Response response;
Map<String,String> body = issue.toMap(); Map<String, String> body = issue.toMap();
body["uid"] = user.id; body["uid"] = user.id;
body["token"] = user.token; body["token"] = user.token;
try{ try {
response = await post( response = await post(
Uri.parse(host+URLs.createReport), Uri.parse(host + URLs.createReport),
body: body, body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {}
}
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<int> updateDate ({ Future<int> updateDate({
@required String host, required String host,
@required User user, required User user,
@required String newDate, required String newDate,
@required Lookup employee, required Lookup employee,
@required ServiceRequest request, required ServiceRequest request,
}) async { }) async {
Response response; Response response;
Map<String,String> body = {}; Map<String, String> body = {};
body["uid"] = user.id; body["uid"] = user.id;
body["token"] = user.token; body["token"] = user.token;
body["nid"] = request.id; body["nid"] = request.id ?? '';
if(newDate != null) body["date"] = newDate; body["date"] = newDate;
if(employee != null) body["ass_emp"] = employee.id.toString(); body["ass_emp"] = employee.id.toString();
try{ try {
response = await post( response = await post(
Uri.parse( Uri.parse(host + URLs.updateRequestDate),
host+URLs.updateRequestDate),
body: body, body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
request.engineerName = employee.label; request.engineerName = employee.label;
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<int> createServiceReport ({ Future<int> createServiceReport({
@required String host, required String host,
@required User user, required User user,
@required ServiceReport report, required ServiceReport report,
@required ServiceRequest request, required ServiceRequest request,
}) async { }) async {
Response response; Response response;
Map<String,String> body = report.toMap(); Map<String, String> body = report.toMap();
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 ?? '';
try{ try {
response = await post( response = await post(
Uri.parse( Uri.parse(host + URLs.createServiceReport),
host+URLs.createServiceReport),
body: body, body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
reset(); reset();
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<int> createDuplicatedReport ({ Future<int> createDuplicatedReport({
@required String host, required String host,
@required User user, required User user,
@required ServiceRequest request, required ServiceRequest request,
}) async { }) async {
Response response; Response response;
String userData = ''; String userData = '';
if(user != null){ userData += "&uid=${user.id}";
userData += "&uid="+user.id; userData += "&token=${user.token}";
userData += "&token="+user.token;
}
try{ try {
response = await get( response = await get(
Uri.parse( Uri.parse(
host+URLs.createDuplicatedReport "$host${URLs.createDuplicatedReport}?nid=${request.id}$userData",
+"?nid=${request.id}" ),
+userData),
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
reset(); reset();
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<int> updateServiceReport ({ Future<int> updateServiceReport({
@required String host, required String host,
@required User user, required User user,
@required ServiceReport report, required ServiceReport report,
@required ServiceRequest request, required ServiceRequest request,
}) async { }) async {
Response response; Response response;
Map<String,String> body = report.toMap(); Map<String, String> body = report.toMap();
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( response = await post(
Uri.parse( Uri.parse(host + URLs.updateServiceReport),
host+URLs.updateServiceReport),
body: body, body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
reset(); reset();
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<int> updateServiceReportTimer ({ Future<int> updateServiceReportTimer({
@required String host, required String host,
@required User user, required User user,
@required TimerModel timer, required TimerModel timer,
@required ServiceRequest request, required ServiceRequest request,
}) async { }) async {
Response response; Response response;
Map<String,String> body = {}; Map<String, String> 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 ?? '';
body["start_time"] = (timer.startAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0); body["start_time"] =
body["end_time"] = (timer.endAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0); (timer.startAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0);
body["working_hours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5); body["end_time"] =
body["report_id"] = request.reportID; (timer.endAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0);
try{ body["working_hours"] =
(timer.durationInSecond / 60 / 60).toStringAsFixed(5);
body["report_id"] = request.reportID ?? '';
try {
response = await post( response = await post(
Uri.parse( Uri.parse(host + URLs.updateServiceReport),
host+URLs.updateServiceReport),
body: body, body: body,
); );
//stateCode = response.statusCode; //stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// reset(); // reset();
// notifyListeners(); // notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<ServiceReport> getSingleServiceReport({ Future<ServiceReport> getSingleServiceReport({
@required String reportId, required String reportId,
@required String host, required String host,
@required User user, required User user,
@required Subtitle subtitle, required Subtitle subtitle,
}) async { }) async {
String userData = ''; String userData = '';
if(user != null){ userData += "&uid=${user.id}";
userData += "&uid="+user.id; userData += "&token=${user.token}";
userData += "&token="+user.token;
}
Response response; Response response;
try{ try {
response = await get(Uri.parse(
response = await get( '$host${URLs.getServiceReport}?report_id=$reportId$userData',
Uri.parse( ));
host+URLs.getServiceReport } catch (error) {
+'?report_id=$reportId' throw (HttpStatusManger.getStatusMessage(status: -1, subtitle: subtitle));
'$userData',)
);
}catch(error){
throw(HttpStatusManger.getStatusMessage(
status: -1, subtitle: subtitle));
} }
// If the call to the server was successful, parse the JSON. // If the call to the server was successful, parse the JSON.
if (response.statusCode >= 200 && response.statusCode < 300){ if (response.statusCode >= 200 && response.statusCode < 300) {
// If the call to the server was successful, parse the JSON. // 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(utf8.decode(response.bodyBytes)), reportId);
}else{ } else {
throw(HttpStatusManger.getStatusMessage( throw (HttpStatusManger.getStatusMessage(
status: response.statusCode, subtitle: subtitle)); status: response.statusCode, subtitle: subtitle));
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class EmployeesProvider extends ChangeNotifier{ import '../../../../../models/lookup.dart';
import '../../../../../models/user.dart';
import '../../../../api_routes/urls.dart';
class EmployeesProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_stateCode = null; _stateCode = null;
} }
@ -18,20 +18,24 @@ class EmployeesProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Lookup> _items; List<Lookup>? _items;
List<Lookup> get items => _items;
List<Lookup>? get items => _items;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,34 +45,30 @@ class EmployeesProvider 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> getData ({String host,User user}) async { Future<int> getData({required String host, required User user}) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(
Uri.parse( Uri.parse(host + URLs.getEmployees),
host + URLs.getEmployees),
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
_items = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); _items =
categoriesListJson.map((type) => Lookup.fromJson(type)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class GasCylinderSizesProvider extends ChangeNotifier{ import '../../../../../models/lookup.dart';
import '../../../../../models/user.dart';
import '../../../../api_routes/urls.dart';
class GasCylinderSizesProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_loading = null; _loading = null;
_stateCode = null; _stateCode = null;
@ -19,20 +19,24 @@ class GasCylinderSizesProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Lookup> _items; List<Lookup>? _items;
List<Lookup> get items => _items;
List<Lookup>? get items => _items;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -42,32 +46,35 @@ class GasCylinderSizesProvider 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> getData ({String host,User user,}) async { Future<int> getData({
if(_loading == true) required String host,
required User user,
}) async {
if (_loading == true) {
return -2; return -2;
}
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(
Uri.parse(host + URLs.getGasCylinderSize), Uri.parse(host + URLs.getGasCylinderSize),
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
_items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); _items =
categoriesListJson.map((item) => Lookup.fromJson(item)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -1,16 +1,16 @@
import 'dart:convert'; import 'dart:convert';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
class GasStatusProvider extends ChangeNotifier{ import '../../../../../models/lookup.dart';
import '../../../../../models/user.dart';
import '../../../../api_routes/urls.dart';
class GasStatusProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_loading = null; _loading = null;
_stateCode = null; _stateCode = null;
@ -19,20 +19,24 @@ class GasStatusProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Lookup> _items; List<Lookup>? _items;
List<Lookup> get items => _items;
List<Lookup>? get items => _items;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -42,31 +46,28 @@ class GasStatusProvider 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> getData ({String host,User user,}) async { Future<int> getData({required String host, required User user}) async {
if(_loading == true) return -2; if (_loading == true) return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(Uri.parse(host + URLs.getGasStatus));
Uri.parse(host + URLs.getGasStatus),
);
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
_items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); _items =
categoriesListJson.map((item) => Lookup.fromJson(item)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -1,16 +1,16 @@
import 'dart:convert'; import 'dart:convert';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
class GasTypesProvider extends ChangeNotifier{ import '../../../../../models/lookup.dart';
import '../../../../../models/user.dart';
import '../../../../api_routes/urls.dart';
class GasTypesProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_loading = null; _loading = null;
_stateCode = null; _stateCode = null;
@ -19,20 +19,24 @@ class GasTypesProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Lookup> _items; List<Lookup>? _items;
List<Lookup> get items => _items;
List<Lookup>? get items => _items;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -42,31 +46,28 @@ class GasTypesProvider 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> getData ({String host,User user,}) async { Future<int> getData({required String host, required User user}) async {
if(_loading == true) return -2; if (_loading == true) return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(Uri.parse(host + URLs.getGasTypes));
Uri.parse(host + URLs.getGasTypes),
);
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
_items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); _items =
categoriesListJson.map((item) => Lookup.fromJson(item)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class PentryStatusProvider extends ChangeNotifier{ import '../../../../../models/lookup.dart';
import '../../../../../models/user.dart';
import '../../../../api_routes/urls.dart';
class PentryStatusProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_stateCode = null; _stateCode = null;
} }
@ -18,20 +18,24 @@ class PentryStatusProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Lookup> _items; List<Lookup>? _items;
List<Lookup> get items => _items;
List<Lookup>? get items => _items;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,20 +45,18 @@ class PentryStatusProvider 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> getData ({String host,User user}) async { Future<int> getData({required String host, required User user}) async {
if(_loading == true) if (_loading == true) {
return -2; return -2;
}
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(Uri.parse(host + URLs.getPentryStatus));
Uri.parse(
host + URLs.getPentryStatus),
);
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List listJson = json.decode(utf8.decode(response.bodyBytes)); List listJson = json.decode(utf8.decode(response.bodyBytes));
_items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList();
@ -62,14 +64,11 @@ class PentryStatusProvider extends ChangeNotifier{
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class PentryTaskStatusProvider extends ChangeNotifier{ import '../../../../../models/lookup.dart';
import '../../../../../models/user.dart';
import '../../../../api_routes/urls.dart';
class PentryTaskStatusProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_stateCode = null; _stateCode = null;
} }
@ -18,20 +18,24 @@ class PentryTaskStatusProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Lookup> _items; List<Lookup>? _items;
List<Lookup> get items => _items;
List<Lookup>? get items => _items;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,35 +45,32 @@ class PentryTaskStatusProvider 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> getData ({String host,User user}) async { Future<int> getData({required String host, required User user}) async {
if(_loading == true) if (_loading == true) {
return -2; return -2;
}
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(Uri.parse(host + URLs.getPentryTaskStatus));
Uri.parse(
host + URLs.getPentryTaskStatus),
);
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
_items = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _items = categoriesListJson
.map((type) => Lookup.fromIntIdJson(type))
.toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class PentryVisitStatusProvider extends ChangeNotifier{ import '../../../../../models/lookup.dart';
import '../../../../../models/user.dart';
import '../../../../api_routes/urls.dart';
class PentryVisitStatusProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_stateCode = null; _stateCode = null;
} }
@ -18,20 +18,24 @@ class PentryVisitStatusProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Lookup> _items; List<Lookup>? _items;
List<Lookup> get items => _items;
List<Lookup>? get items => _items;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,20 +45,18 @@ class PentryVisitStatusProvider 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> getData ({String host,User user}) async { Future<int> getData({required String host, required User user}) async {
if(_loading == true) if (_loading == true) {
return -2; return -2;
}
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(Uri.parse(host + URLs.getPentryVisitStatus));
Uri.parse(
host + URLs.getPentryVisitStatus),
);
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List listJson = json.decode(utf8.decode(response.bodyBytes)); List listJson = json.decode(utf8.decode(response.bodyBytes));
_items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList();
@ -62,13 +64,11 @@ class PentryVisitStatusProvider extends ChangeNotifier{
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class ServiceRequestDefectTypesProvider extends ChangeNotifier{ import '../../../../../models/lookup.dart';
import '../../../../../models/user.dart';
import '../../../../api_routes/urls.dart';
class ServiceRequestDefectTypesProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_stateCode = null; _stateCode = null;
} }
@ -18,20 +18,24 @@ class ServiceRequestDefectTypesProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Lookup> _items; List<Lookup>? _items;
List<Lookup> get items => _items;
List<Lookup>? get items => _items;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,20 +45,18 @@ class ServiceRequestDefectTypesProvider 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> getData ({String host,User user}) async { Future<int> getData({required String host, required User user}) async {
if(_loading == true) if (_loading == true) {
return -2; return -2;
}
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(Uri.parse(host + URLs.getServiceReportDefectTypes));
Uri.parse(
host + URLs.getServiceReportDefectTypes),
);
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List listJson = json.decode(utf8.decode(response.bodyBytes)); List listJson = json.decode(utf8.decode(response.bodyBytes));
_items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList();
@ -62,14 +64,11 @@ class ServiceRequestDefectTypesProvider extends ChangeNotifier{
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class ServiceReportLastCallsProvider extends ChangeNotifier{ import '../../../../../models/lookup.dart';
import '../../../../../models/user.dart';
import '../../../../api_routes/urls.dart';
class ServiceReportLastCallsProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_calls = null; _calls = null;
_loading = null; _loading = null;
_stateCode = null; _stateCode = null;
@ -19,20 +19,24 @@ class ServiceReportLastCallsProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Lookup> _calls; List<Lookup>? _calls;
List<Lookup> get calls => _calls;
List<Lookup>? get calls => _calls;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -42,35 +46,39 @@ 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({
if(_loading == true) required String host,
return -2; required User user,
String? serviceStatus,
}) async {
if (_loading == true) return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(
Uri.parse( Uri.parse(
host + URLs.getServiceReportLastCalls host +
+(serviceStatus == null ? "" : "?service_status=$serviceStatus") URLs.getServiceReportLastCalls +
), (serviceStatus == null ? "" : "?service_status=$serviceStatus"),
),
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
_calls = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _calls = categoriesListJson
.map((type) => Lookup.fromIntIdJson(type))
.toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class ServiceRequestPriorityProvider extends ChangeNotifier{ import '../../../../../models/lookup.dart';
import '../../../../../models/user.dart';
import '../../../../api_routes/urls.dart';
class ServiceRequestPriorityProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_stateCode = null; _stateCode = null;
} }
@ -18,20 +18,24 @@ class ServiceRequestPriorityProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Lookup> _items; List<Lookup>? _items;
List<Lookup> get items => _items;
List<Lookup>? get items => _items;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,20 +45,18 @@ class ServiceRequestPriorityProvider 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> getData ({String host,User user}) async { Future<int> getData({required String host, required User user}) async {
if(_loading == true) if (_loading == true) {
return -2; return -2;
}
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(Uri.parse(host + URLs.getServiceReportPriority));
Uri.parse(
host + URLs.getServiceReportPriority),
);
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List listJson = json.decode(utf8.decode(response.bodyBytes)); List listJson = json.decode(utf8.decode(response.bodyBytes));
_items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList();
@ -62,13 +64,11 @@ class ServiceRequestPriorityProvider extends ChangeNotifier{
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class ServiceReportReasonsProvider extends ChangeNotifier{ import '../../../../../models/lookup.dart';
import '../../../../../models/user.dart';
import '../../../../api_routes/urls.dart';
class ServiceReportReasonsProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_reasons = null; _reasons = null;
_stateCode = null; _stateCode = null;
} }
@ -18,20 +18,24 @@ class ServiceReportReasonsProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Lookup> _reasons; List<Lookup>? _reasons;
List<Lookup> get reasons => _reasons;
List<Lookup>? get reasons => _reasons;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,33 +45,31 @@ class ServiceReportReasonsProvider 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> getTypes ({String host,User user}) async { Future<int> getTypes({required String host, required User user}) async {
if(_loading == true) if (_loading == true) {
return -2; return -2;
}
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(Uri.parse(host + URLs.getServiceReportReasons));
Uri.parse(
host + URLs.getServiceReportReasons),
);
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
_reasons = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _reasons = categoriesListJson
.map((type) => Lookup.fromIntIdJson(type))
.toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class ServiceReportStatusProvider extends ChangeNotifier{ import '../../../../../models/lookup.dart';
import '../../../../../models/user.dart';
import '../../../../api_routes/urls.dart';
class ServiceReportStatusProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_status = null; _status = null;
_stateCode = null; _stateCode = null;
} }
@ -18,20 +18,24 @@ class ServiceReportStatusProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Lookup> _status; List<Lookup>? _status;
List<Lookup> get statuses => _status;
List<Lookup>? get statuses => _status;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,34 +45,31 @@ class ServiceReportStatusProvider 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> getTypes ({String host,User user}) async { Future<int> getTypes({required String host, required User user}) async {
if(_loading == true) if (_loading == true) {
return -2; return -2;
}
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await get(Uri.parse(host + URLs.getServiceReportStatus));
Uri.parse(
host + URLs.getServiceReportStatus),
);
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
_status = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _status = categoriesListJson
.map((type) => Lookup.fromIntIdJson(type))
.toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class ServiceReportTypesProvider extends ChangeNotifier{ import '../../../../../models/lookup.dart';
import '../../../../../models/user.dart';
import '../../../../api_routes/urls.dart';
class ServiceReportTypesProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_types = null; _types = null;
_stateCode = null; _stateCode = null;
} }
@ -18,20 +18,24 @@ class ServiceReportTypesProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Lookup> _types; List<Lookup>? _types;
List<Lookup> get types => _types;
List<Lookup>? get types => _types;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,34 +45,31 @@ class ServiceReportTypesProvider 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> getTypes ({String host,User user}) async { Future<int> getTypes({required String host, required User user}) async {
if(_loading == true) if (_loading == true) {
return -2; return -2;
}
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get(Uri.parse(host + URLs.getServiceReportTypes));
response = await get(
Uri.parse(
host + URLs.getServiceReportTypes),
);
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
_types = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _types = categoriesListJson
.map((type) => Lookup.fromIntIdJson(type))
.toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class ServiceStatusProvider extends ChangeNotifier{ import '../../../../../models/lookup.dart';
import '../../../../../models/user.dart';
import '../../../../api_routes/urls.dart';
class ServiceStatusProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_statuses = null; _statuses = null;
_stateCode = null; _stateCode = null;
} }
@ -18,20 +18,24 @@ class ServiceStatusProvider extends ChangeNotifier{
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int? _stateCode;
int get stateCode => _stateCode;
int? get stateCode => _stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Lookup> _statuses; List<Lookup>? _statuses;
List<Lookup> get statuses => _statuses;
List<Lookup>? get statuses => _statuses;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool? _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){ bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,35 +45,30 @@ class ServiceStatusProvider 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> getTypes ({String host,User user}) async { Future<int> getTypes({required String host, required User user}) async {
if(_loading == true) if (_loading == true) {
return -2; return -2;
}
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get(Uri.parse(host + URLs.getServiceTypes));
response = await get(
Uri.parse(
host + URLs.getServiceTypes),
);
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
_statuses = categoriesListJson.map((e) => Lookup.fromIntIdJson(e)).toList(); _statuses =
categoriesListJson.map((e) => Lookup.fromIntIdJson(e)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -1,32 +1,35 @@
import 'dart:convert'; import 'dart:convert';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/user.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
class UserProvider extends ChangeNotifier{ import '../../../models/user.dart';
import '../../api_routes/urls.dart';
class UserProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_user = null; _user = null;
_loading = false; _loading = false;
} }
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
User _user; User? _user;
User get user => _user;
set user(User user) { User? get user => _user;
set user(User? user) {
_user = user; _user = user;
notifyListeners(); notifyListeners();
} }
// when login or register in-process _login = true // when login or register in-process _login = true
// when login or register is done or not start = false // when login or register is done or not start = false
bool _loading = false; bool _loading = false;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading) { set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
@ -38,32 +41,31 @@ class UserProvider 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> login ({ Future<int> login({
@required String host, required String host,
@required User user, required User user,
}) async { }) async {
if(_loading == true) if (_loading == true) {
return -2; return -2;
}
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await post( response = await post(
Uri.parse( Uri.parse(host + URLs.login),
host+URLs.login),
body: await user.toLoginJson(), body: await user.toLoginJson(),
); );
_loading = false; _loading = false;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
_user = User.fromJson(jsonDecode(utf8.decode(response.bodyBytes))[0]); _user = User.fromJson(jsonDecode(utf8.decode(response.bodyBytes))[0]);
return response.statusCode; return response.statusCode;
} }
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return -1; return -1;
@ -76,32 +78,30 @@ class UserProvider 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 about state codes check http state manager /// for more details about state codes check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> register ({ Future<int> register({
@required String host, required String host,
@required User user, required User user,
}) async { }) async {
if(_loading == true) if (_loading == true) {
return -2; return -2;
}
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await post( response = await post(Uri.parse(host + URLs.register),
Uri.parse( body: await user.toRegisterJson());
host+URLs.register), } catch (error) {
body: await user.toRegisterJson()
);
} catch(error) {
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
_user = User.fromJson(jsonDecode(utf8.decode(response.bodyBytes))[0]); _user = User.fromJson(jsonDecode(utf8.decode(response.bodyBytes))[0]);
_user.hospital = user.hospital; _user?.hospital = user.hospital;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} }
@ -114,32 +114,33 @@ class UserProvider 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 about state codes check http state manager /// for more details about state codes check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> updateProfile ({ Future<int> updateProfile({
@required String host, required String host,
@required User user, required User user,
}) async { }) async {
if(_loading == true) if (_loading == true) {
return -2; return -2;
}
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
Map<String,dynamic> jsonObject ={}; Map<String, dynamic> jsonObject = {};
jsonObject["uid"] = user.id; jsonObject["uid"] = user.id;
jsonObject["token"] = user.token; jsonObject["token"] = user.token;
if(user.department.id != _user.department.id) if (user.department.id != _user?.department.id) {
jsonObject["department"] = user.department.id; jsonObject["department"] = user.department.id;
if(user.whatsApp != _user.whatsApp) }
if (user.whatsApp != _user?.whatsApp) {
jsonObject["whatsapp"] = user.whatsApp; jsonObject["whatsapp"] = user.whatsApp;
if(user.phoneNumber != _user.phoneNumber) }
if (user.phoneNumber != _user?.phoneNumber) {
jsonObject["phone"] = user.phoneNumber; jsonObject["phone"] = user.phoneNumber;
try{ }
response = await post( try {
Uri.parse( response =
host+URLs.updateProfile), await post(Uri.parse(host + URLs.updateProfile), body: jsonObject);
body: jsonObject } catch (error) {
);
} catch(error) {
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return -1; return -1;
@ -148,15 +149,14 @@ class UserProvider extends ChangeNotifier{
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
_user = User.fromJson(jsonDecode(utf8.decode(response.bodyBytes))[0]); _user = User.fromJson(jsonDecode(utf8.decode(response.bodyBytes))[0]);
_user.hospital = user.hospital; _user?.hospital = user.hospital;
_user.department = user.department; _user?.department = user.department;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} }
return response.statusCode; return response.statusCode;
} }
}
}

@ -1,15 +1,14 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/user.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'app_settings.dart';
class SettingProvider extends ChangeNotifier{ import '../../../models/user.dart';
import '../../api_routes/urls.dart';
import 'app_settings.dart';
class SettingProvider extends ChangeNotifier {
resetSettings() async { resetSettings() async {
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
user = null; user = null;
@ -21,7 +20,7 @@ class SettingProvider extends ChangeNotifier{
bool isLoaded = false; bool isLoaded = false;
// contain saved user data // contain saved user data
User user; User? user;
Future<void> setUser(User user) async { Future<void> setUser(User user) async {
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
@ -30,8 +29,10 @@ class SettingProvider extends ChangeNotifier{
notifyListeners(); notifyListeners();
} }
String _host; String? _host;
String get host => _host;
String? get host => _host;
Future<void> setHost(String host) async { Future<void> setHost(String host) async {
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString(ASettings.host, host); prefs.setString(ASettings.host, host);
@ -39,8 +40,10 @@ class SettingProvider extends ChangeNotifier{
notifyListeners(); notifyListeners();
} }
String _language; String? _language;
String get language => _language;
String? get language => _language;
Future<void> setLanguage(String currentLanguage) async { Future<void> setLanguage(String currentLanguage) async {
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString(ASettings.language, currentLanguage); prefs.setString(ASettings.language, currentLanguage);
@ -48,8 +51,10 @@ class SettingProvider extends ChangeNotifier{
notifyListeners(); notifyListeners();
} }
String _speechToText; String? _speechToText;
String get speechToText => _speechToText;
String? get speechToText => _speechToText;
Future<void> setSpeechToText(String currentLanguage) async { Future<void> setSpeechToText(String currentLanguage) async {
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString(ASettings.speechToText, currentLanguage); prefs.setString(ASettings.speechToText, currentLanguage);
@ -58,40 +63,38 @@ class SettingProvider extends ChangeNotifier{
} }
// call loadSharedPreferences when provider initialise // call loadSharedPreferences when provider initialise
SettingProvider(){ SettingProvider() {
loadSharedPreferences(); loadSharedPreferences();
} }
// get app setting // get app setting
Future<void> loadSharedPreferences() async { Future<void> loadSharedPreferences() async {
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
if(prefs.containsKey(ASettings.language)){ if (prefs.containsKey(ASettings.language)) {
_language = prefs.getString(ASettings.language); _language = prefs.getString(ASettings.language);
}else{ } else {
_language = 'en'; _language = 'en';
} }
if(prefs.containsKey(ASettings.speechToText)){ if (prefs.containsKey(ASettings.speechToText)) {
_speechToText = prefs.getString(ASettings.speechToText); _speechToText = prefs.getString(ASettings.speechToText);
}else{ } else {
_speechToText = 'ar'; _speechToText = 'ar';
} }
if(prefs.containsKey(ASettings.user)){ if (prefs.containsKey(ASettings.user)) {
String userJson = prefs.getString(ASettings.user); String? userJson = prefs.getString(ASettings.user);
user = User.fromJson(json.decode(userJson)); user = User.fromJson(json.decode(userJson ?? ''));
} }
if(prefs.containsKey(ASettings.host)){ if (prefs.containsKey(ASettings.host)) {
_host = prefs.getString(ASettings.host); _host = prefs.getString(ASettings.host);
} else{ } else {
_host = URLs.host1; _host = URLs.host1;
} }
isLoaded = true; isLoaded = true;
notifyListeners(); notifyListeners();
} }
}
}

@ -1,13 +1,14 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/views/app_style/colors.dart';
import '../views/app_style/colors.dart';
extension IntExtensions on int { extension IntExtensions on int {
Widget get height => SizedBox(height: toDouble()); Widget get height => SizedBox(height: toDouble());
Widget get width => SizedBox(width: toDouble()); Widget get width => SizedBox(width: toDouble());
Widget get divider => Divider(height: toDouble(), thickness: toDouble(), color: AColors.greyEF); Widget get divider =>
Divider(height: toDouble(), thickness: toDouble(), color: AColors.greyEF);
Widget get makeItSquare => SizedBox(width: toDouble(), height: toDouble()); Widget get makeItSquare => SizedBox(width: toDouble(), height: toDouble());
} }

@ -1,15 +1,15 @@
class Device{ class Device {
String id; String? id;
String serialNumber; String? serialNumber;
String number; String? number;
String brand; String? brand;
String model; String? model;
DateTime productionDate; DateTime? productionDate;
DateTime supplyDate; DateTime? supplyDate;
DateTime installDate; DateTime? installDate;
DateTime receivingDate; DateTime? receivingDate;
DateTime operationDate; DateTime? operationDate;
DateTime warrantyDate; DateTime? warrantyDate;
Device({ Device({
this.id, this.id,
@ -25,7 +25,7 @@ class Device{
this.warrantyDate, this.warrantyDate,
}); });
factory Device.fromJson(Map<String,dynamic> parsedJson){ factory Device.fromJson(Map<String, dynamic> parsedJson) {
return Device( return Device(
id: parsedJson["nid"] ?? parsedJson["id"], id: parsedJson["nid"] ?? parsedJson["id"],
serialNumber: parsedJson["sn"] ?? parsedJson["value"], serialNumber: parsedJson["sn"] ?? parsedJson["value"],
@ -41,7 +41,7 @@ class Device{
); );
} }
factory Device.fromDevice(Device device){ factory Device.fromDevice(Device device) {
return Device( return Device(
id: device.id, id: device.id,
serialNumber: device.serialNumber, serialNumber: device.serialNumber,
@ -58,9 +58,9 @@ class Device{
} }
} }
DateTime getDateFromString(String unixDate){ DateTime? getDateFromString(String? unixDate) {
if(unixDate == null) if (unixDate == null) {
return null; return null;
return DateTime.fromMillisecondsSinceEpoch( }
int.parse(unixDate)); return DateTime.fromMillisecondsSinceEpoch(int.parse(unixDate));
} }

@ -1,13 +1,13 @@
import 'package:test_sa/models/device/device.dart'; import 'device.dart';
import 'package:test_sa/models/device/device_transfer_info.dart'; import 'device_transfer_info.dart';
class DeviceTransfer{ class DeviceTransfer {
String id; String? id;
String userId; String? userId;
String title; String? title;
Device device; Device? device;
DeviceTransferInfo sender; DeviceTransferInfo? sender;
DeviceTransferInfo receiver; DeviceTransferInfo? receiver;
DeviceTransfer({ DeviceTransfer({
this.id, this.id,
@ -18,33 +18,36 @@ class DeviceTransfer{
this.receiver, this.receiver,
}); });
bool validate(){ bool validate() {
if(device == null) return false; if (device == null) return false;
return receiver.validate(); return receiver?.validate() ?? false;
} }
fromDeviceTransfer(DeviceTransfer old){ fromDeviceTransfer(DeviceTransfer old) {
id = old.id; id = old.id;
title = old.title; title = old.title;
userId = old.userId; userId = old.userId;
device = Device.fromDevice(old.device); device = old.device != null ? Device.fromDevice(old.device!) : null;
final sender = DeviceTransferInfo(); final sender = DeviceTransferInfo();
sender.fromDetails(old.sender); if (old.sender != null) {
sender.fromDetails(old.sender!);
}
this.sender = sender; this.sender = sender;
final receiver = DeviceTransferInfo(); final receiver = DeviceTransferInfo();
receiver.fromDetails(old.receiver); if (old.receiver != null) {
receiver.fromDetails(old.receiver!);
}
this.receiver = receiver; this.receiver = receiver;
} }
factory DeviceTransfer.fromJson(Map<String,dynamic> parsedJson){ factory DeviceTransfer.fromJson(Map<String, dynamic> parsedJson) {
return DeviceTransfer( return DeviceTransfer(
id: parsedJson["id"], id: parsedJson["id"],
title: parsedJson["title"], title: parsedJson["title"],
userId: parsedJson["uid"], userId: parsedJson["uid"],
device: Device.fromJson(parsedJson["eq_sn"]), device: Device.fromJson(parsedJson["eq_sn"]),
sender: DeviceTransferInfo.fromJson(parsedJson,"sender_"), sender: DeviceTransferInfo.fromJson(parsedJson, "sender_"),
receiver: DeviceTransferInfo.fromJson(parsedJson,"receiver_"), receiver: DeviceTransferInfo.fromJson(parsedJson, "receiver_"),
); );
} }
} }

@ -1,17 +1,17 @@
import 'package:test_sa/models/department.dart'; import '../department.dart';
import 'package:test_sa/models/hospital.dart'; import '../hospital.dart';
import 'package:test_sa/models/lookup.dart'; import '../lookup.dart';
class DeviceTransferInfo{ class DeviceTransferInfo {
String userId; String? userId;
String comment; String? comment;
Hospital client; Hospital? client;
Department department; Department? department;
String workingHours; String? workingHours;
String travelingHours; String? travelingHours;
String name; String? name;
String signature; String? signature;
Lookup status; Lookup? status;
DeviceTransferInfo({ DeviceTransferInfo({
this.userId, this.userId,
@ -25,37 +25,44 @@ class DeviceTransferInfo{
this.status, this.status,
}); });
Map<String,String>toJson(bool isSender){ Map<String, String> toJson(bool isSender) {
Map<String,String> body = {}; Map<String, String> body = {};
final baseKey = isSender ? "sender_" : "receiver_"; final baseKey = isSender ? "sender_" : "receiver_";
if(comment != null && comment.isNotEmpty) body["${baseKey}comment"] = comment; if (comment?.isNotEmpty ?? false) body["${baseKey}comment"] = comment!;
if(workingHours != null && workingHours.isNotEmpty) body["${baseKey}working_hours"] = workingHours; if (workingHours?.isNotEmpty ?? false) {
if(travelingHours != null && travelingHours.isNotEmpty) body["${baseKey}travel_hours"] = comment; body["${baseKey}working_hours"] = workingHours!;
if(status != null) body["${baseKey}status"] = status.id.toString(); }
if(signature != null && signature.isNotEmpty) body["${baseKey}image"] = signature; if (travelingHours?.isNotEmpty ?? false) {
body["${baseKey}travel_hours"] = comment!;
}
final status = this.status;
if (status != null) body["${baseKey}status"] = status.id.toString();
if (signature?.isNotEmpty ?? false) body["${baseKey}image"] = signature!;
return body; return body;
} }
bool validate(){ bool validate() {
if(client == null) return false; if (client == null) return false;
if(department == null) return false; if (department == null) return false;
return true; return true;
} }
fromDetails(DeviceTransferInfo old,{bool withSignature = true}){ fromDetails(DeviceTransferInfo old, {bool withSignature = true}) {
userId = old.userId; userId = old.userId;
name = old.name; name = old.name;
client = Hospital.fromHospital(old.client); client = old.client != null ? Hospital.fromHospital(old.client!) : null;
department = Department.fromDepartment(old.department); department =
department != null ? Department.fromDepartment(old.department!) : null;
workingHours = old.workingHours; workingHours = old.workingHours;
travelingHours = old.travelingHours; travelingHours = old.travelingHours;
comment = old.comment; comment = old.comment;
if(withSignature) signature = old.signature; if (withSignature) signature = old.signature;
status = old.status; status = old.status;
} }
factory DeviceTransferInfo.fromJson(Map<String,dynamic> parsedJson,String key){ factory DeviceTransferInfo.fromJson(
Map<String, dynamic> parsedJson, String key) {
return DeviceTransferInfo( return DeviceTransferInfo(
workingHours: parsedJson["${key}working_hours"], workingHours: parsedJson["${key}working_hours"],
travelingHours: parsedJson["${key}travel_hours"], travelingHours: parsedJson["${key}travel_hours"],
@ -69,4 +76,3 @@ class DeviceTransferInfo{
); );
} }
} }

@ -1,10 +1,10 @@
import 'package:test_sa/models/lookup.dart'; import '../lookup.dart';
class GasRefillDetails{ class GasRefillDetails {
Lookup type; Lookup? type;
Lookup cylinderSize; Lookup? cylinderSize;
int requestedQuantity; int? requestedQuantity;
int deliveredQuantity; int? deliveredQuantity;
GasRefillDetails({ GasRefillDetails({
this.type, this.type,
@ -13,31 +13,34 @@ class GasRefillDetails{
this.deliveredQuantity, this.deliveredQuantity,
}); });
bool validate(){ bool validate() {
//if(cylinderSize == null) return false; //if(cylinderSize == null) return false;
if(type == null) return false; if (type == null) return false;
if(requestedQuantity == null) return false; if (requestedQuantity == null) return false;
return true; return true;
} }
factory GasRefillDetails.fromJson(Map<String,dynamic> parsedJson){
factory GasRefillDetails.fromJson(Map<String, dynamic> parsedJson) {
return GasRefillDetails( return GasRefillDetails(
type: Lookup.fromJson(parsedJson["type"]), type: Lookup.fromJson(parsedJson["type"]),
cylinderSize: Lookup.fromJson(parsedJson["size"]), cylinderSize: Lookup.fromJson(parsedJson["size"]),
requestedQuantity: parsedJson["requsted_qty"] == null requestedQuantity: parsedJson["requsted_qty"] == null
? 0 : int.tryParse(parsedJson["requsted_qty"].toString()) ?? 0, ? 0
: int.tryParse(parsedJson["requsted_qty"].toString()) ?? 0,
deliveredQuantity: parsedJson["deliverd_qty"] == null deliveredQuantity: parsedJson["deliverd_qty"] == null
? 0 : int.tryParse(parsedJson["deliverd_qty"].toString()) ?? 0, ? 0
: int.tryParse(parsedJson["deliverd_qty"].toString()) ?? 0,
); );
} }
factory GasRefillDetails.fromDetails(GasRefillDetails details){ factory GasRefillDetails.fromDetails(GasRefillDetails details) {
return GasRefillDetails( return GasRefillDetails(
type: Lookup.fromStatus(details.type), type: details.type != null ? Lookup.fromStatus(details.type!) : null,
cylinderSize:Lookup.fromStatus(details.cylinderSize), cylinderSize: details.cylinderSize != null
? Lookup.fromStatus(details.cylinderSize!)
: null,
requestedQuantity: details.requestedQuantity, requestedQuantity: details.requestedQuantity,
deliveredQuantity: details.deliveredQuantity, deliveredQuantity: details.deliveredQuantity,
); );
} }
} }

@ -1,13 +1,13 @@
import 'package:test_sa/models/gas_refill/gas_refill_details.dart'; import '../lookup.dart';
import 'package:test_sa/models/lookup.dart'; import 'gas_refill_details.dart';
class GasRefillModel{ class GasRefillModel {
String id; String? id;
String userId; String? userId;
String clientName; String? clientName;
String title; String? title;
Lookup status; Lookup? status;
List<GasRefillDetails> details; List<GasRefillDetails>? details;
GasRefillModel({ GasRefillModel({
this.id, this.id,
@ -18,25 +18,27 @@ class GasRefillModel{
this.details, this.details,
}); });
bool validate(){ bool validate() {
if(title == null) return false; if (title == null) return false;
if(status == null) return false; if (status == null) return false;
if(details == null && details.isEmpty) return false; if (details == null && (details?.isEmpty ?? true)) return false;
return true; return true;
} }
fromGasRefillModel(GasRefillModel model){ fromGasRefillModel(GasRefillModel model) {
id = model.id; id = model.id;
userId = model.userId; userId = model.userId;
clientName = model.clientName; clientName = model.clientName;
title = model.title; title = model.title;
status = Lookup.fromStatus(model.status); status = model.status != null ? Lookup.fromStatus(model.status!) : null;
details = model.details.map((e) => GasRefillDetails.fromDetails(e)).toList(); details = model.details
?.map<GasRefillDetails>((e) => GasRefillDetails.fromDetails(e))
.toList();
} }
factory GasRefillModel.fromJson(Map<String,dynamic> parsedJson){ factory GasRefillModel.fromJson(Map<String, dynamic> parsedJson) {
List<GasRefillDetails> details = []; List<GasRefillDetails> details = [];
if(parsedJson["details"] != null){ if (parsedJson["details"] != null) {
List list = parsedJson["details"]; List list = parsedJson["details"];
details = list.map((e) => GasRefillDetails.fromJson(e)).toList(); details = list.map((e) => GasRefillDetails.fromJson(e)).toList();
} }
@ -50,4 +52,3 @@ class GasRefillModel{
); );
} }
} }

@ -1,8 +1,8 @@
import 'package:test_sa/models/lookup.dart'; import '../lookup.dart';
class CalibrationTool{ class CalibrationTool {
Lookup assetsNumber; Lookup? assetsNumber;
DateTime dataOfTesting; DateTime? dataOfTesting;
CalibrationTool({ CalibrationTool({
this.assetsNumber, this.assetsNumber,
@ -11,16 +11,21 @@ class CalibrationTool{
Map<String, String> toMap() { Map<String, String> toMap() {
return { return {
if(assetsNumber != null) 'assetsSN': (assetsNumber?.id).toString(), if (assetsNumber != null) 'assetsSN': (assetsNumber?.id).toString(),
if(dataOfTesting != null) 'dataOfTesting': (dataOfTesting.millisecondsSinceEpoch ~/ 1000).toString(), if (dataOfTesting != null)
'dataOfTesting':
((dataOfTesting?.millisecondsSinceEpoch ?? 0) ~/ 1000).toString(),
}; };
} }
factory CalibrationTool.fromMap(Map<String, dynamic> map) { factory CalibrationTool.fromMap(Map<String, dynamic> map) {
return CalibrationTool( return CalibrationTool(
assetsNumber: Lookup.fromJson(map['assetsSN']), assetsNumber: Lookup.fromJson(map['assetsSN']),
dataOfTesting: map['dataOfTesting'] == null || map['dataOfTesting'] == "" ? null : dataOfTesting: map['dataOfTesting'] == null || map['dataOfTesting'] == ""
DateTime.fromMillisecondsSinceEpoch(int.tryParse(map['dataOfTesting']) * 1000), ? null
: DateTime.fromMillisecondsSinceEpoch(
(int.tryParse(map['dataOfTesting']) ?? 0) * 1000,
),
); );
} }
} }

@ -1,30 +1,29 @@
import 'package:test_sa/models/lookup.dart'; import '../lookup.dart';
class Contact{ class Contact {
Lookup title; Lookup? title;
Lookup contactPerson; Lookup? contactPerson;
String job; String? job;
String email; String? email;
String telephone; String? telephone;
String landLine; String? landLine;
Contact({ Contact(
this.title, {this.title,
this.contactPerson, this.contactPerson,
this.job, this.job,
this.email, this.email,
this.telephone, this.telephone,
this.landLine this.landLine});
});
Map<String, String> toMap() { Map<String, String> toMap() {
return { return {
if (title != null) 'title': title.id.toString(), if (title != null) 'title': title!.id.toString(),
if (contactPerson != null) 'contactPerson': contactPerson.id.toString(), if (contactPerson != null) 'contactPerson': contactPerson!.id.toString(),
if (job != null) 'job': job, if (job != null) 'job': job!,
if (email != null) 'email': email, if (email != null) 'email': email!,
if (telephone != null) 'telephone': telephone, if (telephone != null) 'telephone': telephone!,
if (landLine != null) 'landLine': landLine, if (landLine != null) 'landLine': landLine!,
}; };
} }
@ -38,4 +37,4 @@ class Contact{
landLine: map['landLine'] as String, landLine: map['landLine'] as String,
); );
} }
} }

@ -1,9 +1,10 @@
import 'package:test_sa/models/lookup.dart';
import '../../lookup.dart';
class ContactTitle extends Lookup { class ContactTitle extends Lookup {
ContactTitle({ ContactTitle({
int id, required int id,
String label required String label
}):super(id: id,label: label); }):super(id: id,label: label);
factory ContactTitle.fromMap(Map<String,dynamic> parsedJson){ factory ContactTitle.fromMap(Map<String,dynamic> parsedJson){

@ -1,15 +1,13 @@
import 'package:test_sa/models/lookup.dart'; import '../../lookup.dart';
class ContactTitle extends Lookup { class ContactTitle extends Lookup {
ContactTitle({ ContactTitle({required int id, required String label})
int id, : super(id: id, label: label);
String label
}):super(id: id,label: label);
factory ContactTitle.fromMap(Map<String,dynamic> parsedJson){ factory ContactTitle.fromMap(Map<String, dynamic> parsedJson) {
return ContactTitle( return ContactTitle(
label: parsedJson["value"], label: parsedJson["value"],
id: parsedJson["id"], id: parsedJson["id"],
); );
} }
} }

@ -1,24 +1,23 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:test_sa/models/lookup.dart'; import '../lookup.dart';
import 'package:test_sa/models/pantry/calibration_tools.dart'; import '../timer_model.dart';
import 'package:test_sa/models/pantry/pm_kit.dart'; import 'calibration_tools.dart';
import 'package:test_sa/models/pantry/ppm_check_list.dart'; import 'pm_kit.dart';
import 'package:test_sa/models/timer_model.dart'; import 'ppm_check_list.dart';
class Pentry{ class Pentry {
Lookup ppmVisitStatus; Lookup? ppmVisitStatus;
Lookup status; Lookup? status;
TimerModel timer; TimerModel? timer;
DateTime actualVisitDate; DateTime? actualVisitDate;
String travelingHours; String? travelingHours;
String image; String? image;
File imageFile; File? imageFile;
// List<Contact> contacts; List<PPMCheckList>? ppmCheckLists;
List<PPMCheckList> ppmCheckLists; List<CalibrationTool>? calibrationTools;
List<CalibrationTool> calibrationTools; List<PMKit>? pmKits;
List<PMKit> pmKits;
Pentry({ Pentry({
this.travelingHours, this.travelingHours,
@ -34,10 +33,10 @@ class Pentry{
this.pmKits, this.pmKits,
}); });
bool validate(){ bool validate() {
if(actualVisitDate == null) return false; if (actualVisitDate == null) return false;
if(timer == null && timer.endAt != null) return false; if (timer == null && timer?.endAt != null) return false;
if(ppmVisitStatus == null) return false; if (ppmVisitStatus == null) return false;
//if(status == null) return false; //if(status == null) return false;
return true; return true;
@ -45,15 +44,21 @@ class Pentry{
Map<String, String> toMap() { Map<String, String> toMap() {
Map<String, String> map = {}; Map<String, String> map = {};
map["visit_status"] = ppmVisitStatus?.id.toString(); if (ppmVisitStatus != null)
if(status != null) map["pentry_status"] = status?.id.toString(); map["visit_status"] = ppmVisitStatus!.id.toString();
if(travelingHours != null) map["traveling_hours"] = travelingHours; if (status != null) map["pentry_status"] = status!.id.toString();
if(imageFile != null) map["file_attachement"] = base64Encode(imageFile.readAsBytesSync()); if (travelingHours != null) map["traveling_hours"] = travelingHours!;
map["actual_date"] = (actualVisitDate.millisecondsSinceEpoch / 1000).toStringAsFixed(0); if (imageFile != null)
if(timer != null){ map["file_attachement"] = base64Encode(imageFile!.readAsBytesSync());
map["start_date"] = (timer.startAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0); map["actual_date"] = ((actualVisitDate?.millisecondsSinceEpoch ?? 0) / 1000)
map["end_date"] = ((timer.endAt ?? DateTime.now()).millisecondsSinceEpoch / 1000).toStringAsFixed(0); .toStringAsFixed(0);
map["working_hours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5); if (timer != null) {
map["start_date"] =
(timer!.startAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0);
map["end_date"] =
((timer!.endAt).millisecondsSinceEpoch / 1000).toStringAsFixed(0);
map["working_hours"] =
(timer!.durationInSecond / 60 / 60).toStringAsFixed(5);
} }
// if(contacts?.isNotEmpty == true) { // if(contacts?.isNotEmpty == true) {
// for(int i = 0;i<contacts.length;i++){ // for(int i = 0;i<contacts.length;i++){
@ -62,9 +67,11 @@ class Pentry{
// }); // });
// } // }
// } // }
map["ppmCheckLists"] = jsonEncode(ppmCheckLists.map((e) => e.toMap()).toList()); map["ppmCheckLists"] =
map["calibrationTools"] = jsonEncode(calibrationTools.map((e) => e.toMap()).toList()); jsonEncode(ppmCheckLists?.map((e) => e.toMap()).toList());
map["pmKits"] = jsonEncode(pmKits.map((e) => e.toMap()).toList()); map["calibrationTools"] =
jsonEncode(calibrationTools?.map((e) => e.toMap()).toList());
map["pmKits"] = jsonEncode(pmKits?.map((e) => e.toMap()).toList());
return map; return map;
} }
@ -77,22 +84,22 @@ class Pentry{
// } // }
List<PMKit> pmKits = []; List<PMKit> pmKits = [];
if(map['pmKits'] != null){ if (map['pmKits'] != null) {
pmKits =(map['pmKits'] as List<dynamic>) pmKits = (map['pmKits'] as List<dynamic>)
.map((e) => PMKit.fromMap(e as Map<String, dynamic>)) .map((e) => PMKit.fromMap(e as Map<String, dynamic>))
.toList(); .toList();
} }
List<PPMCheckList> ppmCheckLists = []; List<PPMCheckList> ppmCheckLists = [];
if(map['ppmCheckLists'] != null){ if (map['ppmCheckLists'] != null) {
ppmCheckLists =(map['ppmCheckLists'] as List<dynamic>) ppmCheckLists = (map['ppmCheckLists'] as List<dynamic>)
.map((e) => PPMCheckList.fromMap(e as Map<String, dynamic>)) .map((e) => PPMCheckList.fromMap(e as Map<String, dynamic>))
.toList(); .toList();
} }
List<CalibrationTool> calibrationTools = []; List<CalibrationTool> calibrationTools = [];
if(map['calibrationTools'] != null){ if (map['calibrationTools'] != null) {
calibrationTools =(map['calibrationTools'] as List<dynamic>) calibrationTools = (map['calibrationTools'] as List<dynamic>)
.map((e) => CalibrationTool.fromMap(e as Map<String, dynamic>)) .map((e) => CalibrationTool.fromMap(e as Map<String, dynamic>))
.toList(); .toList();
} }
@ -102,10 +109,10 @@ class Pentry{
actualVisitDate: getDate(map["actual_date"]), actualVisitDate: getDate(map["actual_date"]),
travelingHours: map["traveling_hours"], travelingHours: map["traveling_hours"],
timer: TimerModel( timer: TimerModel(
startAt: getDate(map["start_date"]), startAt: getDate(map["start_date"]),
endAt: getDate(map["end_date"]), endAt: getDate(map["end_date"]),
durationInSecond: (int.tryParse(map["working_hours"] ?? "") ?? 0) * 60 *60 durationInSecond:
), (int.tryParse(map["working_hours"] ?? "") ?? 0) * 60 * 60),
// contacts: contacts, // contacts: contacts,
ppmCheckLists: ppmCheckLists, ppmCheckLists: ppmCheckLists,
calibrationTools: calibrationTools, calibrationTools: calibrationTools,
@ -113,8 +120,9 @@ class Pentry{
); );
} }
static getDate(String date){ static getDate(String date) {
return date == null || date.isEmpty return date.isEmpty
? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(date) * 1000); ? null
: DateTime.fromMillisecondsSinceEpoch((int.tryParse(date) ?? 0) * 1000);
} }
} }

@ -1,13 +1,14 @@
import 'package:test_sa/models/lookup.dart';
import '../lookup.dart';
class PMKit{ class PMKit{
Lookup itemCode; Lookup? itemCode;
String itemName; String? itemName;
String preparationTimeFrame; String? preparationTimeFrame;
String kitFrequencyDemand; String? kitFrequencyDemand;
String availability; String? availability;
String quantityNeeded; String? quantityNeeded;
String quantityReserved; String? quantityReserved;
PMKit({ PMKit({
this.itemCode, this.itemCode,
@ -22,12 +23,12 @@ class PMKit{
Map<String, String> toMap() { Map<String, String> toMap() {
return { return {
if(itemCode != null) 'itemCode': (itemCode?.id).toString(), if(itemCode != null) 'itemCode': (itemCode?.id).toString(),
if(itemName != null) 'itemName': itemName, if(itemName != null) 'itemName': itemName!,
if(preparationTimeFrame != null) 'preparationTimeFrame': preparationTimeFrame, if(preparationTimeFrame != null) 'preparationTimeFrame': preparationTimeFrame!,
if(kitFrequencyDemand != null) 'kitFrequencyDemand': kitFrequencyDemand, if(kitFrequencyDemand != null) 'kitFrequencyDemand': kitFrequencyDemand!,
if(availability != null) 'availability': availability, if(availability != null) 'availability': availability!,
if(quantityNeeded != null) 'quantityNeeded': quantityNeeded, if(quantityNeeded != null) 'quantityNeeded': quantityNeeded!,
if(quantityReserved != null) 'quantityReserved': quantityReserved, if(quantityReserved != null) 'quantityReserved': quantityReserved!,
}; };
} }

@ -1,10 +1,11 @@
import 'package:test_sa/models/lookup.dart';
import '../lookup.dart';
class PPMCheckList{ class PPMCheckList{
Lookup status; Lookup? status;
String title; String? title;
String comment; String? comment;
String measuredValue; String? measuredValue;
PPMCheckList({ PPMCheckList({
this.title, this.title,
@ -15,10 +16,10 @@ class PPMCheckList{
Map<String, String> toMap() { Map<String, String> toMap() {
return { return {
if(status != null) 'status': status?.id.toString(), if(status != null) 'status': status!.id.toString(),
if(title != null) 'title': title, if(title != null) 'title': title!,
if(comment != null) 'comment': comment, if(comment != null) 'comment': comment!,
if(measuredValue != null) 'measuredValue': measuredValue, if(measuredValue != null) 'measuredValue': measuredValue!,
}; };
} }

@ -1,35 +1,35 @@
import 'package:test_sa/models/lookup.dart'; import '../lookup.dart';
class ServiceRequest{ class ServiceRequest {
String id; String? id;
String requestCode; String? requestCode;
String deviceSerialNumber; String? deviceSerialNumber;
String deviceId; String? deviceId;
String deviceArName; String? deviceArName;
String deviceEnName; String? deviceEnName;
List<String> devicePhotos; List<String>? devicePhotos;
String maintenanceIssue; String? maintenanceIssue;
String hospitalName; String? hospitalName;
String hospitalId; String? hospitalId;
String departmentName; String? departmentName;
String engineerName; String? engineerName;
String date; String? date;
String audio; String? audio;
int statusValue; int? statusValue;
String statusLabel; String? statusLabel;
bool viewReport; bool? viewReport;
String engineerMobile; String? engineerMobile;
String deviceModel; String? deviceModel;
String faultDescription; String? faultDescription;
String workPerformed; String? workPerformed;
String visitDate; String? visitDate;
DateTime nextVisitDate; DateTime? nextVisitDate;
String jobSheetNumber; String? jobSheetNumber;
String reportID; String? reportID;
String deviceNumber; String? deviceNumber;
Lookup priority; Lookup? priority;
Lookup defectType; Lookup? defectType;
ServiceRequest({ ServiceRequest({
this.id, this.id,
@ -48,7 +48,6 @@ class ServiceRequest{
this.deviceId, this.deviceId,
this.audio, this.audio,
this.engineerName, this.engineerName,
this.viewReport = false, this.viewReport = false,
this.deviceModel, this.deviceModel,
this.engineerMobile, this.engineerMobile,
@ -61,42 +60,46 @@ class ServiceRequest{
this.defectType, this.defectType,
this.priority, this.priority,
this.deviceNumber, this.deviceNumber,
}); });
factory ServiceRequest.fromJson(Map<String,dynamic> parsedJson){ factory ServiceRequest.fromJson(Map<String, dynamic> parsedJson) {
return ServiceRequest( return ServiceRequest(
id: parsedJson["nid"], id: parsedJson["nid"],
requestCode: parsedJson["call_id"] ?? parsedJson["jobcode"] , requestCode: parsedJson["call_id"] ?? parsedJson["jobcode"],
hospitalName: parsedJson["call_client"], hospitalName: parsedJson["call_client"],
deviceNumber: parsedJson["device_no"], deviceNumber: parsedJson["device_no"],
deviceId: parsedJson["deviceid"], deviceId: parsedJson["deviceid"],
audio: parsedJson["audio"] ?? "", audio: parsedJson["audio"] ?? "",
deviceArName: parsedJson["equipment_arabic_name"] == false deviceArName: parsedJson["equipment_arabic_name"] == false
? "No Name found" : parsedJson["equipment_arabic_name"], ? "No Name found"
: parsedJson["equipment_arabic_name"],
deviceEnName: parsedJson["equipment_english_name"] == false deviceEnName: parsedJson["equipment_english_name"] == false
? "No Name found" : parsedJson["equipment_english_name"], ? "No Name found"
: parsedJson["equipment_english_name"],
devicePhotos: List<String>.from(parsedJson["image"]), devicePhotos: List<String>.from(parsedJson["image"]),
deviceSerialNumber: parsedJson["call_sn"], deviceSerialNumber: parsedJson["call_sn"],
date: parsedJson["call_data"], date: parsedJson["call_data"],
maintenanceIssue: parsedJson["call_complaint"] ?? parsedJson["complaint"], maintenanceIssue: parsedJson["call_complaint"] ?? parsedJson["complaint"],
statusLabel: parsedJson["status_value"], statusLabel: parsedJson["status_value"],
statusValue: int.tryParse(parsedJson["status"]??"-1"), statusValue: int.tryParse(parsedJson["status"] ?? "-1"),
departmentName: parsedJson["department_name"], departmentName: parsedJson["department_name"],
engineerName: parsedJson["employee_name"], engineerName: parsedJson["employee_name"],
hospitalId: parsedJson["client"], hospitalId: parsedJson["client"],
reportID: parsedJson["service_report_nid"] is String reportID: parsedJson["service_report_nid"] is String
? parsedJson["service_report_nid"] ? parsedJson["service_report_nid"]
: null , : null,
viewReport: parsedJson["service_report_nid"] is bool ? false : true, viewReport: parsedJson["service_report_nid"] is bool ? false : true,
deviceModel: parsedJson["device_model"], deviceModel: parsedJson["device_model"],
engineerMobile: parsedJson["engineer_mobile"], engineerMobile: parsedJson["engineer_mobile"],
faultDescription: parsedJson["fault_desc"], faultDescription: parsedJson["fault_desc"],
jobSheetNumber: parsedJson["job_sheet_number"], jobSheetNumber: parsedJson["job_sheet_number"],
visitDate: parsedJson["visit_date"], visitDate: parsedJson["visit_date"],
nextVisitDate:parsedJson["next_visit_date"] == null nextVisitDate: parsedJson["next_visit_date"] == null
? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(parsedJson["next_visit_date"]) * 1000), ? null
: DateTime.fromMillisecondsSinceEpoch(
(int.tryParse(parsedJson["next_visit_date"]) ?? 0) * 1000,
),
workPerformed: parsedJson["work_performed"], workPerformed: parsedJson["work_performed"],
); );
} }
} }

@ -1,10 +1,9 @@
class ServiceRequestSearch{ class ServiceRequestSearch {
String deviceSerialNumber; String? deviceSerialNumber;
String deviceName; String? deviceName;
String hospital; String? hospital;
String model; String? model;
int statusValue; int? statusValue;
ServiceRequestSearch({ ServiceRequestSearch({
this.deviceSerialNumber, this.deviceSerialNumber,
@ -14,33 +13,34 @@ class ServiceRequestSearch{
this.hospital, this.hospital,
}); });
fromSearch(ServiceRequestSearch newSearch){ fromSearch(ServiceRequestSearch newSearch) {
deviceSerialNumber = newSearch.deviceSerialNumber; deviceSerialNumber = newSearch.deviceSerialNumber;
statusValue = newSearch.statusValue; statusValue = newSearch.statusValue;
hospital = newSearch.hospital; hospital = newSearch.hospital;
model = newSearch.model; model = newSearch.model;
} }
String toSearchString(){ String toSearchString() {
String _search = ""; String search = "";
if(deviceSerialNumber != null && deviceSerialNumber.isNotEmpty){ if (deviceSerialNumber != null &&
_search += "&sn_id=$deviceSerialNumber"; (deviceSerialNumber?.isNotEmpty ?? false)) {
search += "&sn_id=$deviceSerialNumber";
} }
if(statusValue != null){ if (statusValue != null) {
_search += "&status=$statusValue"; search += "&status=$statusValue";
} }
if(deviceName != null && deviceName.isNotEmpty){ if (deviceName != null && (deviceName?.isNotEmpty ?? false)) {
_search += "&equipment_en_name=$deviceName"; search += "&equipment_en_name=$deviceName";
} }
if(hospital != null && hospital.isNotEmpty){ if (hospital != null && (hospital?.isNotEmpty ?? false)) {
_search += "&client=$hospital"; search += "&client=$hospital";
} }
if(model != null && model.isNotEmpty){ if (model != null && (model?.isNotEmpty ?? false)) {
_search += "&model=$model"; search += "&model=$model";
} }
return _search; return search;
} }
} }

Loading…
Cancel
Save