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';
class ApiClient {
final String baseUrl, endPoint;
final RequestMethod requestMethod;
@ -15,7 +14,6 @@ class ApiClient {
});
Future<Map<String, dynamic>> execute({
String? token,
Map<String, String>? headers,
Map<String, dynamic>? queryParameters,
Object? body,

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

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

@ -3,16 +3,15 @@ import 'dart:convert';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:test_sa/models/app_notification.dart';
import '../../models/app_notification.dart';
import 'notification_manger.dart';
class FirebaseNotificationManger{
class FirebaseNotificationManger {
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(
alert: true,
announcement: false,
@ -23,7 +22,7 @@ class FirebaseNotificationManger{
sound: true,
);
if(settings.authorizationStatus == AuthorizationStatus.authorized){
if (settings.authorizationStatus == AuthorizationStatus.authorized) {
token = await messaging.getToken();
}
return token;
@ -32,7 +31,7 @@ class FirebaseNotificationManger{
static initialized(BuildContext context) async {
await Firebase.initializeApp();
NotificationSettings settings;
try{
try {
settings = await messaging.requestPermission(
alert: true,
announcement: false,
@ -42,11 +41,11 @@ class FirebaseNotificationManger{
provisional: false,
sound: true,
);
}catch(error){
} catch (error) {
return;
}
if(settings.authorizationStatus != AuthorizationStatus.authorized){
if (settings.authorizationStatus != AuthorizationStatus.authorized) {
return;
}
@ -56,28 +55,24 @@ class FirebaseNotificationManger{
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
AppNotification notification = AppNotification.fromJson(message.data);
if(notification.path == null
|| notification.path.isEmpty)
return;
Navigator.pushNamed(
context,
notification.path,
arguments: notification.requestId
context,
notification.path,
arguments: notification.requestId,
);
});
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
AppNotification notification = AppNotification.fromJson(message.data);
NotificationManger.showNotification(
title: message.notification.title,
subtext: message.notification.body,
hashcode: int.tryParse(notification.requestId ?? "") ?? 1,
payload: json.encode(message.data)
title: message.notification?.title,
subtext: message.notification?.body,
hashcode: int.tryParse(notification.requestId) ?? 1,
payload: json.encode(message.data),
);
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:test_sa/views/app_style/colors.dart';
class NotificationManger{
import '../../views/app_style/colors.dart';
class NotificationManger {
// private constructor to avoid create object
NotificationManger._();
static FlutterLocalNotificationsPlugin localNotificationsPlugin = FlutterLocalNotificationsPlugin();
static FlutterLocalNotificationsPlugin localNotificationsPlugin =
FlutterLocalNotificationsPlugin();
/// initialisation setting for all platform
/// onNotificationPressed action when notification pressed to open tap
/// onIOSNotificationPressed action when notification pressed
/// to open tap in iOS versions older than 10
static initialisation(
Function(NotificationResponse) onNotificationPressed,
DidReceiveLocalNotificationCallback onIOSNotificationPressed
) async {
static initialisation(Function(NotificationResponse) onNotificationPressed,
DidReceiveLocalNotificationCallback onIOSNotificationPressed) async {
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
FlutterLocalNotificationsPlugin();
// initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('app_icon',);
AndroidInitializationSettings(
'app_icon',
);
final DarwinInitializationSettings initializationSettingsDarwin =
DarwinInitializationSettings(
onDidReceiveLocalNotification: onIOSNotificationPressed);
DarwinInitializationSettings(
onDidReceiveLocalNotification: onIOSNotificationPressed);
final InitializationSettings initializationSettings = InitializationSettings(
android: initializationSettingsAndroid,
iOS: initializationSettingsDarwin,
macOS: initializationSettingsDarwin);
final InitializationSettings initializationSettings =
InitializationSettings(
android: initializationSettingsAndroid,
iOS: initializationSettingsDarwin,
macOS: initializationSettingsDarwin);
await flutterLocalNotificationsPlugin.initialize(
initializationSettings,
await flutterLocalNotificationsPlugin.initialize(initializationSettings,
onDidReceiveNotificationResponse: onNotificationPressed);
}
// push new notification
static Future showNotification(
{
@required String title,
@required String subtext,
@required int hashcode,
String payload
}) async {
const AndroidNotificationDetails androidChannel = AndroidNotificationDetails(
static Future showNotification({
required String? title,
required String? subtext,
required int hashcode,
String? payload,
}) async {
const AndroidNotificationDetails androidChannel =
AndroidNotificationDetails(
'com.newtrack.testsa',
'Test SA',
channelDescription:'Push notification service for Test SA',
channelDescription: 'Push notification service for Test SA',
importance: Importance.max,
priority: Priority.max,
playSound: true,
@ -63,7 +63,7 @@ class NotificationManger{
);
const DarwinNotificationDetails iosNotificationDetails =
DarwinNotificationDetails(
DarwinNotificationDetails(
categoryIdentifier: "testSA",
);
@ -81,5 +81,4 @@ class NotificationManger{
payload: payload,
);
}
}

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

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

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

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

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

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

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

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

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

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

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

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

@ -1,16 +1,16 @@
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/material.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
void reset(){
void reset() {
_items = null;
_loading = null;
_stateCode = null;
@ -19,20 +19,24 @@ class GasStatusProvider extends ChangeNotifier{
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
int? _stateCode;
int? get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<Lookup> _items;
List<Lookup> get items => _items;
List<Lookup>? _items;
List<Lookup>? get items => _items;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){
bool? _loading;
bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading;
notifyListeners();
}
@ -42,31 +46,28 @@ class GasStatusProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData ({String host,User user,}) async {
if(_loading == true) return -2;
Future<int> getData({required String host, required User user}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try{
response = await get(
Uri.parse(host + URLs.getGasStatus),
);
try {
response = await get(Uri.parse(host + URLs.getGasStatus));
_stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) {
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
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;
notifyListeners();
return response.statusCode;
} catch(error) {
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -1,16 +1,16 @@
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/material.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
void reset(){
void reset() {
_items = null;
_loading = null;
_stateCode = null;
@ -19,20 +19,24 @@ class GasTypesProvider extends ChangeNotifier{
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
int? _stateCode;
int? get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<Lookup> _items;
List<Lookup> get items => _items;
List<Lookup>? _items;
List<Lookup>? get items => _items;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading){
bool? _loading;
bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading;
notifyListeners();
}
@ -42,31 +46,28 @@ class GasTypesProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData ({String host,User user,}) async {
if(_loading == true) return -2;
Future<int> getData({required String host, required User user}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try{
response = await get(
Uri.parse(host + URLs.getGasTypes),
);
try {
response = await get(Uri.parse(host + URLs.getGasTypes));
_stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) {
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
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;
notifyListeners();
return response.statusCode;
} catch(error) {
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

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

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

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

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

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

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

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

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

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

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

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

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

@ -1,13 +1,14 @@
import 'package:flutter/cupertino.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 {
Widget get height => SizedBox(height: 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());
}

@ -1,15 +1,15 @@
class Device{
String id;
String serialNumber;
String number;
String brand;
String model;
DateTime productionDate;
DateTime supplyDate;
DateTime installDate;
DateTime receivingDate;
DateTime operationDate;
DateTime warrantyDate;
class Device {
String? id;
String? serialNumber;
String? number;
String? brand;
String? model;
DateTime? productionDate;
DateTime? supplyDate;
DateTime? installDate;
DateTime? receivingDate;
DateTime? operationDate;
DateTime? warrantyDate;
Device({
this.id,
@ -25,7 +25,7 @@ class Device{
this.warrantyDate,
});
factory Device.fromJson(Map<String,dynamic> parsedJson){
factory Device.fromJson(Map<String, dynamic> parsedJson) {
return Device(
id: parsedJson["nid"] ?? parsedJson["id"],
serialNumber: parsedJson["sn"] ?? parsedJson["value"],
@ -41,7 +41,7 @@ class Device{
);
}
factory Device.fromDevice(Device device){
factory Device.fromDevice(Device device) {
return Device(
id: device.id,
serialNumber: device.serialNumber,
@ -58,9 +58,9 @@ class Device{
}
}
DateTime getDateFromString(String unixDate){
if(unixDate == null)
DateTime? getDateFromString(String? unixDate) {
if (unixDate == 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 'package:test_sa/models/device/device_transfer_info.dart';
import 'device.dart';
import 'device_transfer_info.dart';
class DeviceTransfer{
String id;
String userId;
String title;
Device device;
DeviceTransferInfo sender;
DeviceTransferInfo receiver;
class DeviceTransfer {
String? id;
String? userId;
String? title;
Device? device;
DeviceTransferInfo? sender;
DeviceTransferInfo? receiver;
DeviceTransfer({
this.id,
@ -18,33 +18,36 @@ class DeviceTransfer{
this.receiver,
});
bool validate(){
if(device == null) return false;
return receiver.validate();
bool validate() {
if (device == null) return false;
return receiver?.validate() ?? false;
}
fromDeviceTransfer(DeviceTransfer old){
fromDeviceTransfer(DeviceTransfer old) {
id = old.id;
title = old.title;
userId = old.userId;
device = Device.fromDevice(old.device);
device = old.device != null ? Device.fromDevice(old.device!) : null;
final sender = DeviceTransferInfo();
sender.fromDetails(old.sender);
if (old.sender != null) {
sender.fromDetails(old.sender!);
}
this.sender = sender;
final receiver = DeviceTransferInfo();
receiver.fromDetails(old.receiver);
if (old.receiver != null) {
receiver.fromDetails(old.receiver!);
}
this.receiver = receiver;
}
factory DeviceTransfer.fromJson(Map<String,dynamic> parsedJson){
factory DeviceTransfer.fromJson(Map<String, dynamic> parsedJson) {
return DeviceTransfer(
id: parsedJson["id"],
title: parsedJson["title"],
userId: parsedJson["uid"],
device: Device.fromJson(parsedJson["eq_sn"]),
sender: DeviceTransferInfo.fromJson(parsedJson,"sender_"),
receiver: DeviceTransferInfo.fromJson(parsedJson,"receiver_"),
sender: DeviceTransferInfo.fromJson(parsedJson, "sender_"),
receiver: DeviceTransferInfo.fromJson(parsedJson, "receiver_"),
);
}
}

@ -1,17 +1,17 @@
import 'package:test_sa/models/department.dart';
import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/lookup.dart';
import '../department.dart';
import '../hospital.dart';
import '../lookup.dart';
class DeviceTransferInfo{
String userId;
String comment;
Hospital client;
Department department;
String workingHours;
String travelingHours;
String name;
String signature;
Lookup status;
class DeviceTransferInfo {
String? userId;
String? comment;
Hospital? client;
Department? department;
String? workingHours;
String? travelingHours;
String? name;
String? signature;
Lookup? status;
DeviceTransferInfo({
this.userId,
@ -25,37 +25,44 @@ class DeviceTransferInfo{
this.status,
});
Map<String,String>toJson(bool isSender){
Map<String,String> body = {};
Map<String, String> toJson(bool isSender) {
Map<String, String> body = {};
final baseKey = isSender ? "sender_" : "receiver_";
if(comment != null && comment.isNotEmpty) body["${baseKey}comment"] = comment;
if(workingHours != null && workingHours.isNotEmpty) body["${baseKey}working_hours"] = workingHours;
if(travelingHours != null && travelingHours.isNotEmpty) body["${baseKey}travel_hours"] = comment;
if(status != null) body["${baseKey}status"] = status.id.toString();
if(signature != null && signature.isNotEmpty) body["${baseKey}image"] = signature;
if (comment?.isNotEmpty ?? false) body["${baseKey}comment"] = comment!;
if (workingHours?.isNotEmpty ?? false) {
body["${baseKey}working_hours"] = workingHours!;
}
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;
}
bool validate(){
if(client == null) return false;
if(department == null) return false;
bool validate() {
if (client == null) return false;
if (department == null) return false;
return true;
}
fromDetails(DeviceTransferInfo old,{bool withSignature = true}){
fromDetails(DeviceTransferInfo old, {bool withSignature = true}) {
userId = old.userId;
name = old.name;
client = Hospital.fromHospital(old.client);
department = Department.fromDepartment(old.department);
client = old.client != null ? Hospital.fromHospital(old.client!) : null;
department =
department != null ? Department.fromDepartment(old.department!) : null;
workingHours = old.workingHours;
travelingHours = old.travelingHours;
comment = old.comment;
if(withSignature) signature = old.signature;
if (withSignature) signature = old.signature;
status = old.status;
}
factory DeviceTransferInfo.fromJson(Map<String,dynamic> parsedJson,String key){
factory DeviceTransferInfo.fromJson(
Map<String, dynamic> parsedJson, String key) {
return DeviceTransferInfo(
workingHours: parsedJson["${key}working_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{
Lookup type;
Lookup cylinderSize;
int requestedQuantity;
int deliveredQuantity;
class GasRefillDetails {
Lookup? type;
Lookup? cylinderSize;
int? requestedQuantity;
int? deliveredQuantity;
GasRefillDetails({
this.type,
@ -13,31 +13,34 @@ class GasRefillDetails{
this.deliveredQuantity,
});
bool validate(){
bool validate() {
//if(cylinderSize == null) return false;
if(type == null) return false;
if(requestedQuantity == null) return false;
if (type == null) return false;
if (requestedQuantity == null) return false;
return true;
}
factory GasRefillDetails.fromJson(Map<String,dynamic> parsedJson){
factory GasRefillDetails.fromJson(Map<String, dynamic> parsedJson) {
return GasRefillDetails(
type: Lookup.fromJson(parsedJson["type"]),
cylinderSize: Lookup.fromJson(parsedJson["size"]),
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
? 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(
type: Lookup.fromStatus(details.type),
cylinderSize:Lookup.fromStatus(details.cylinderSize),
type: details.type != null ? Lookup.fromStatus(details.type!) : null,
cylinderSize: details.cylinderSize != null
? Lookup.fromStatus(details.cylinderSize!)
: null,
requestedQuantity: details.requestedQuantity,
deliveredQuantity: details.deliveredQuantity,
);
}
}

@ -1,13 +1,13 @@
import 'package:test_sa/models/gas_refill/gas_refill_details.dart';
import 'package:test_sa/models/lookup.dart';
import '../lookup.dart';
import 'gas_refill_details.dart';
class GasRefillModel{
String id;
String userId;
String clientName;
String title;
Lookup status;
List<GasRefillDetails> details;
class GasRefillModel {
String? id;
String? userId;
String? clientName;
String? title;
Lookup? status;
List<GasRefillDetails>? details;
GasRefillModel({
this.id,
@ -18,25 +18,27 @@ class GasRefillModel{
this.details,
});
bool validate(){
if(title == null) return false;
if(status == null) return false;
if(details == null && details.isEmpty) return false;
bool validate() {
if (title == null) return false;
if (status == null) return false;
if (details == null && (details?.isEmpty ?? true)) return false;
return true;
}
fromGasRefillModel(GasRefillModel model){
fromGasRefillModel(GasRefillModel model) {
id = model.id;
userId = model.userId;
clientName = model.clientName;
title = model.title;
status = Lookup.fromStatus(model.status);
details = model.details.map((e) => GasRefillDetails.fromDetails(e)).toList();
status = model.status != null ? Lookup.fromStatus(model.status!) : null;
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 = [];
if(parsedJson["details"] != null){
if (parsedJson["details"] != null) {
List list = parsedJson["details"];
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{
Lookup assetsNumber;
DateTime dataOfTesting;
class CalibrationTool {
Lookup? assetsNumber;
DateTime? dataOfTesting;
CalibrationTool({
this.assetsNumber,
@ -11,16 +11,21 @@ class CalibrationTool{
Map<String, String> toMap() {
return {
if(assetsNumber != null) 'assetsSN': (assetsNumber?.id).toString(),
if(dataOfTesting != null) 'dataOfTesting': (dataOfTesting.millisecondsSinceEpoch ~/ 1000).toString(),
if (assetsNumber != null) 'assetsSN': (assetsNumber?.id).toString(),
if (dataOfTesting != null)
'dataOfTesting':
((dataOfTesting?.millisecondsSinceEpoch ?? 0) ~/ 1000).toString(),
};
}
factory CalibrationTool.fromMap(Map<String, dynamic> map) {
return CalibrationTool(
assetsNumber: Lookup.fromJson(map['assetsSN']),
dataOfTesting: map['dataOfTesting'] == null || map['dataOfTesting'] == "" ? null :
DateTime.fromMillisecondsSinceEpoch(int.tryParse(map['dataOfTesting']) * 1000),
dataOfTesting: map['dataOfTesting'] == null || map['dataOfTesting'] == ""
? 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{
Lookup title;
Lookup contactPerson;
String job;
String email;
String telephone;
String landLine;
class Contact {
Lookup? title;
Lookup? contactPerson;
String? job;
String? email;
String? telephone;
String? landLine;
Contact({
this.title,
this.contactPerson,
this.job,
this.email,
this.telephone,
this.landLine
});
Contact(
{this.title,
this.contactPerson,
this.job,
this.email,
this.telephone,
this.landLine});
Map<String, String> toMap() {
return {
if (title != null) 'title': title.id.toString(),
if (contactPerson != null) 'contactPerson': contactPerson.id.toString(),
if (job != null) 'job': job,
if (email != null) 'email': email,
if (telephone != null) 'telephone': telephone,
if (landLine != null) 'landLine': landLine,
if (title != null) 'title': title!.id.toString(),
if (contactPerson != null) 'contactPerson': contactPerson!.id.toString(),
if (job != null) 'job': job!,
if (email != null) 'email': email!,
if (telephone != null) 'telephone': telephone!,
if (landLine != null) 'landLine': landLine!,
};
}

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

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

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

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

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

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

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