Merge branch 'majd_development' into 'master'

Majd development

See merge request haroon6138/cloudsolutions-atoms!18
merge-requests/20/merge
Sikander Saleem 3 years ago
commit c79ac5e5b3

@ -129,7 +129,7 @@ class ApiClient {
}
Future<Response> postJsonForResponse<T>(String url, T jsonObject,
{String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0, bool isFormData = true}) async {
{String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0, bool isFormData = false}) async {
int currentRetryTime = retryTimes;
String? requestBody;
late Map<String, String> stringObj;
@ -142,6 +142,11 @@ class ApiClient {
}
}
if(!kReleaseMode)
{ print("url:$url");
print("requestBody:$requestBody");
}
if (isFormData) {
headers = {'Content-Type': 'application/x-www-form-urlencoded'};
stringObj = ((jsonObject ?? {}) as Map<String, dynamic>).map((key, value) => MapEntry(key, value?.toString() ?? ""));

@ -0,0 +1,27 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:test_sa/api/api_client.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import '../models/department.dart';
class DepartmentsApiClient{
static final DepartmentsApiClient _instance = DepartmentsApiClient._internal();
DepartmentsApiClient._internal();
factory DepartmentsApiClient() => _instance;
Future getDepartment() async {
Response response;
response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getDepartments,
{},
isFormData: false
);
Map listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
return listJson['data'].map<Department>((department) => Department.fromJson(department)).toList();
}
}

@ -15,16 +15,19 @@ class DeviceTransferApiClient {
factory DeviceTransferApiClient() => _instance;
Future<List<DeviceTransfer>> getRequests({required List items, required int pageItemNumber}) async {
final response = await ApiClient().getJsonForResponse("${URLs.host1}${URLs.getDeviceTransfer}", queryParameters: {
"uid": "${UserApiClient().user?.id}",
"token": "${UserApiClient().user?.token}",
"page": "${(items.length) ~/ pageItemNumber}",
}, headers: {
"Content-Type": "application/json; charset=utf-8"
});
Map<String, dynamic> body= {
"pageSize": "${(items.length) ~/ pageItemNumber}",
};
final response = await ApiClient().postJsonForResponse(
"${URLs.host1}${URLs.getDeviceTransfer}",
body,
isFormData: false
);
List listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
return listJson.map((request) => DeviceTransfer.fromJson(request)).toList();
Map listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
print(listJson);
return listJson['data'].map<DeviceTransfer>((request) => DeviceTransfer.fromJson(request)).toList();
}
Future<DeviceTransfer> createRequest({

@ -16,22 +16,31 @@ class DevicesApiClient {
/// Fetch devices by [hospitalId] and insert the result into [devices] list
Future getEquipment(String hospitalId) async {
final response = await ApiClient().getJsonForResponse(URLs.host1 + URLs.getEquipment, queryParameters: {'client': hospitalId});
List equipmentListJson = json.decode(utf8.decode(response.bodyBytes));
final response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getEquipment,
{'client': hospitalId},
isFormData: false
);
Map equipmentListJson = json.decode(utf8.decode(response.bodyBytes));
print(equipmentListJson);
devices.clear();
devices.addAll(equipmentListJson.map((device) => Device.fromJson(device)).toList());
devices.addAll(equipmentListJson['data'] != null ? equipmentListJson['data'].map<Device>((device) => Device.fromJson(device)).toList(): []);
debugPrint("devices : ${devices.length}");
}
/// Returns a list of devices by [hospitalId] and [serialNumber] (or | and) [number]
Future<List<Device>> getDevicesList({required String hospitalId, String? serialNumber, String? number}) async {
final response = await ApiClient().getJsonForResponse(
final response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getEquipment,
queryParameters: {
{
'client': hospitalId,
if (serialNumber?.isEmpty == false) 'name': serialNumber,
if (number?.isEmpty == false) 'number': number,
},
isFormData: false
);
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
return categoriesListJson.map((device) => Device.fromJson(device)).toList();
@ -39,12 +48,13 @@ class DevicesApiClient {
/// Returns a list of devices by [hospitalId] (and optionally) [serialNumber]
Future<List<Device>> getDevicesListBySN({required String hospitalId, required String serialNumber}) async {
final response = await ApiClient().getJsonForResponse(
final response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getEquipment,
queryParameters: {
{
'client': hospitalId,
if (serialNumber.isNotEmpty) 'serial_qr': serialNumber,
},
isFormData: false
);
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
return categoriesListJson.map((device) => Device.fromJson(device)).toList();

@ -1,5 +1,6 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:test_sa/api/user_api_client.dart';
import '../controllers/api_routes/urls.dart';
@ -16,42 +17,73 @@ class GasRefillApiClient {
// todo @majd there is a method postJsonForObject, use this, rather then postJsonForResponse
Future<List<GasRefillModel>> getRequestPages({required List items, required int pageItemNumber}) async {
final response = await ApiClient().getJsonForResponse("${URLs.host1}${URLs.getGasRefill}", //body
headers: {
"Content-Type": "application/json; charset=utf-8"
},
queryParameters: {
"uid": "${UserApiClient().user?.id}",
"token": "${UserApiClient().user?.token}",
"page": "${(items.length) ~/ pageItemNumber}",
});
Map<String, dynamic> body = {
"uid": "${UserApiClient().user?.id}",
"token": "${UserApiClient().user?.token}",
"pageSize": "${(items.length) ~/ pageItemNumber}",
};
final response = await ApiClient().postJsonForResponse(
"${URLs.host1}${URLs.getGasRefill}",
body,
isFormData: false,
);
// client's request was successfully received
List requestsListJson = json.decode(utf8.decode(response.bodyBytes));
return requestsListJson.map((request) => GasRefillModel.fromJson(request)).toList();
var requestsListJson = json.decode(utf8.decode(response.bodyBytes));
print(requestsListJson);
return requestsListJson['data'].map<GasRefillModel>((request) => GasRefillModel.fromJson(request)).toList();
}
Future<GasRefillModel> createModel({
required GasRefillModel model,
}) async {
Map<String, dynamic> body = {
"uid": UserApiClient().user?.id.toString(),
"token": UserApiClient().user?.token ?? "",
"title": model.title ?? "",
"status": "0", //model.status.value.toString(),
"gazRefillNo": await generateGazRefillNo(),
"assignedEmployee": {
"id": UserApiClient().user?.id.toString(),
"name": UserApiClient().user?.username.toString()
},
"status": {
"id": 0,
"name": "",
"value": 0
},
};
body["details"] = jsonEncode(model.details
body["gazRefillDetails"] = model.details
?.map((model) => {
"type": model.type?.id.toString(),
"size": model.cylinderSize?.id.toString(),
"requsted_qty": model.requestedQuantity.toString(),
"gasType": {
"id": model.type?.id,
"name": model.type?.label.toString(),
"value": model.type?.id
},
"cylinderType": {
"id": 0,
"name": "",
"value": 0
},
"cylinderSize": {
"id": model.cylinderSize?.id,
"name": model.cylinderSize?.label.toString(),
"value": model.cylinderSize?.id,
},
"requestedQty": model.requestedQuantity,
"deliverdQty": 0
})
.toList());
.toList();
print(body);
final response = await ApiClient().postJsonForResponse(
"${URLs.host1}${URLs.requestGasRefill}",
body,
isFormData: false
);
return GasRefillModel.fromJson(json.decode(utf8.decode(response.bodyBytes))[0]);
@ -61,24 +93,57 @@ class GasRefillApiClient {
required GasRefillModel? oldModel,
required GasRefillModel newModel,
}) async {
Map<String, dynamic> body = {
"uid": UserApiClient().user?.id.toString(),
"token": UserApiClient().user?.token,
"title": newModel.title,
"status": newModel.status?.id.toString(),
"id": oldModel?.id,
"gazRefillNo": await generateGazRefillNo(),
"assignedEmployee": {
"id": UserApiClient().user?.id.toString(),
"name": UserApiClient().user?.username.toString()
},
"status": {
"id": 0,
"name": "",
"value": 0
},
};
body["details"] = jsonEncode(newModel.details
body["gazRefillDetails"] = 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());
final reponse = await ApiClient().postJsonForResponse("${URLs.host1}${URLs.updateGasRefill}/${newModel.id}", body);
"gasType": {
"id": model.type?.id,
"name": model.type?.label.toString(),
"value": model.type?.id
},
"cylinderType": {
"id": 0,
"name": "",
"value": 0
},
"cylinderSize": {
"id": model.cylinderSize?.id,
"name": model.cylinderSize?.label.toString(),
"value": model.cylinderSize?.id,
},
"requestedQty": model.requestedQuantity,
"deliverdQty": 0
})
.toList();
final reponse = await ApiClient().putJsonForResponse("${URLs.host1}${URLs.updateGasRefill}/${newModel.id}", body);
oldModel?.fromGasRefillModel(newModel);
}
Future<String> generateGazRefillNo() async {
final reponse = await ApiClient().getJsonForResponse("${URLs.host1}${URLs.generateGazRefillNo}");
var data = json.decode(reponse.body);
return data['data'];
}
}

@ -0,0 +1,25 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:test_sa/api/api_client.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import '../models/lookup.dart';
class GasTypesApiClient{
static final GasTypesApiClient _instance = GasTypesApiClient._internal();
GasTypesApiClient._internal();
factory GasTypesApiClient() => _instance;
Future <List<Lookup>> getData() async {
Response response;
response = await ApiClient().getJsonForResponse("${URLs.host1}${URLs.getGasTypes}");
Map categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
return categoriesListJson["data"].map<Lookup>((item) => Lookup.fromJson(item)).toList();
}
}

@ -0,0 +1,53 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import '../models/hospital.dart';
import 'api_client.dart';
class HospitalsApiClient{
static final HospitalsApiClient _instance = HospitalsApiClient._internal();
HospitalsApiClient._internal();
factory HospitalsApiClient() => _instance;
Future getHospitals({
required String title,
required int pageSize
}) async {
Response response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getHospitals,
{
"pageSize": pageSize.toString(),
"name": title,
},
isFormData: false
);
Map categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
print(categoriesListJson);
return categoriesListJson['data'].map<Hospital>((category) => Hospital.fromJson(category)).toList();
}
Future<List<Hospital>> getHospitalsList({
required String title,
}) async {
Response response;
response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getHospitals,
{"name" : title},
isFormData: false
);
List<Hospital> page = [];
Map categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
page = categoriesListJson['data'].map<Hospital>((category) => Hospital.fromJson(category)).toList();
return page;
}
}

@ -92,7 +92,7 @@ class ServiceRequestApiClient {
body["date"] = newDate ?? '';
body["ass_emp"] = employee?.id?.toString() ?? '';
await ApiClient().postJsonForResponse('${URLs.host1}${URLs.updateRequestDate}', body);
request?.engineerName = employee?.label;
request?.engineerName = employee?.label.toString();
}
Future createServiceReport({required ServiceReport? report, required ServiceRequest? request}) async {

@ -1,15 +1,16 @@
class URLs {
class URLs{
URLs._();
static const host2 = "http://194.163.164.213/atoms/api";
static const host1 = "https://atomsuat.hmg.com";
// static const host1 = "https://atoms.hmg.com/api"; // production url
static const host1 = "https://atomsuat.hmg.com"; // uat url
// API Routes
static const login = "/mobile/MobileAuth/Login"; // post
static const register = "/handle/create/user"; // post
static const updateProfile = "/update/user/profile"; // post
static const getHospitals = "/handle/return/all/clients"; // get
static const getDepartments = "/handle/return/all/departments"; // get
static const getEquipment = "/handle/return/all/client/equipments"; // get ?client=208051
static const getHospitals = "/mobile/Customer/GetCustomers"; // get
static const getDepartments = "/mobile/Department/search"; // get
static const getEquipment = "/mobile/Asset/GetAssets"; // get ?client=208051
static const getServiceRequests = "/return/user/calls"; // get
static const getPreventiveMaintenanceVisits = "/return/user/calibrations"; // get
@ -41,17 +42,18 @@ class URLs {
static const getServiceReportDefectTypes = "/return/call/defect/type/list"; // get
//gas refill
static const getGasTypes = "/return/gas/refill/types"; // get
static const getGasCylinderSize = "/return/gas/refill/size/cylinder"; // get
static const getGasStatus = "/return/gas/refill/status"; // get
static const requestGasRefill = "/create/gas/refill"; // get
static const updateGasRefill = "/update/gas/refill/"; // get
static const getGasRefill = "/search/gas/refill"; // get
static const getGasTypes = "/mobile/Lookups/GetLookup?lookupEnum=606"; // get
static const getGasCylinderSize = "/mobile/Lookups/GetLookup?lookupEnum=608"; // get
static const getGasStatus = "/mobile/Lookups/GetLookup?lookupEnum=609"; // get
static const requestGasRefill = "/mobile/GazRefill/AddGazRefill"; // get
static const updateGasRefill = "/mobile/GazRefill/UpdateGazRefill"; // get
static const getGasRefill = "/mobile/GazRefill/GetGazRefills"; // get
static const generateGazRefillNo= "/mobile/GazRefill/GenerateGazRefillNumber";
//device transfer
static const requestDeviceTransfer = "/create/transfer/asset"; // get
static const updateDeviceTransfer = "/update/transfer/asset"; // get
static const getDeviceTransfer = "/search/transfer/asset"; // get
static const requestDeviceTransfer = "/mobile/AssetTransfer/AddAssetTransfer"; // get
static const updateDeviceTransfer = "/mobile/AssetTransfer/UpdateAssetTransfer"; // get
static const getDeviceTransfer = "/mobile/AssetTransfer/GetAssetTransfers"; // get
// employee
static const getEmployees = "/return/assigned/employee"; // get
@ -63,4 +65,5 @@ class URLs {
static const getPentryStatus = "/return/pentry/status/list"; // get
// contacts
static const getPentryContacts = "/handle/return/all/contacts"; // get
}
}

@ -2,14 +2,16 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
import 'package:test_sa/api/departments_api_client.dart';
import '../../../models/department.dart';
import '../../api_routes/urls.dart';
import '../loading_notifier.dart';
class DepartmentsProvider extends ChangeNotifier {
class DepartmentsProvider extends LoadingNotifier {
//reset provider data
void reset() {
departments = null;
departments.clear();
stateCode = null;
}
@ -20,44 +22,17 @@ class DepartmentsProvider extends ChangeNotifier {
// 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;
Future getDepartment() async {
/// 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) {
return -2;
}
isLoading = true;
notifyListeners();
Response response;
try {
response = await get(
Uri.parse(host + URLs.getDepartments),
headers: {"Content-Type": "application/json; charset=utf-8"},
);
} catch (error) {
isLoading = false;
stateCode = -1;
waitApiRequest(() async {
departments.addAll(await DepartmentsApiClient().getDepartment());
notifyListeners();
return -1;
}
stateCode = response.statusCode;
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();
},
onSuccess: (){
stateCode=200;
}
isLoading = false;
notifyListeners();
return response.statusCode;
);
}
}

@ -35,6 +35,7 @@ class DeviceTransferProvider extends LoadingNotifier {
waitApiRequest(() async {
items.clear();
items.addAll(await DeviceTransferApiClient().getRequests(items: items, pageItemNumber: pageItemNumber));
print(items);
notifyListeners();
if (items.length == pageItemNumber) {
nextPage = true;

@ -3,126 +3,59 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/api/hospitals_api_client.dart';
import 'package:test_sa/controllers/providers/loading_notifier.dart';
import '../../../models/hospital.dart';
import '../../../models/user.dart';
import '../../api_routes/urls.dart';
class HospitalsProvider extends ChangeNotifier {
class HospitalsProvider extends LoadingNotifier {
// number of items call in each request
final pageItemNumber = 50;
//reset provider data
void reset() {
_hospitals = null;
_hospitals.clear();
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
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=[];
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool? _loading;
List<Hospital> get hospitals => _hospitals;
bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading;
notifyListeners();
}
/// 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> getHospitals({
required String host,
required User user,
Future getHospitals({
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"},
);
_stateCode = response.statusCode;
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 = [];
_hospitals?.addAll(page);
if (page.length >= pageItemNumber) {
_nextPage = true;
} else {
_nextPage = false;
}
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
waitApiRequest(() async {
_hospitals = [];
_hospitals.addAll(await HospitalsApiClient().getHospitals(title: title ?? "", pageSize: _hospitals.length ~/ pageItemNumber));
notifyListeners();
},
onSuccess: (){
_stateCode = 200;
}
);
}
Future<List<Hospital>> getHospitalsList({
required String host,
required User user,
required String title,
}) async {
Response response;
try {
response = await get(
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) {
// client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList();
}
return page;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return [];
waitApiRequest((){
return HospitalsApiClient().getHospitalsList(title: title);
},
onSuccess: (){
_stateCode=200;
}
);
return [];
}
}

@ -57,14 +57,16 @@ class GasCylinderSizesProvider extends ChangeNotifier {
notifyListeners();
Response response;
try {
response = await get(
Uri.parse((host ?? '') + URLs.getGasCylinderSize),
);
_stateCode = response.statusCode;
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();
var categoriesListJson = json.decode(response.body);
_items = categoriesListJson['data'].map<Lookup>((item) => Lookup.fromJson(item)).toList();
}
_loading = false;
notifyListeners();

@ -4,16 +4,18 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import '../../../../../api/gas_types_api_client.dart';
import '../../../../../models/lookup.dart';
import '../../../../../models/user.dart';
import '../../../../api_routes/urls.dart';
import '../../../loading_notifier.dart';
class GasTypesProvider extends ChangeNotifier {
class GasTypesProvider extends LoadingNotifier {
//reset provider data
void reset() {
_items = null;
_loading = null;
_items?.clear();
_stateCode = null;
stopLoading();
}
// state code of current request to defied error message
@ -29,44 +31,14 @@ class GasTypesProvider extends ChangeNotifier {
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) {
_loading = isLoading;
notifyListeners();
}
/// 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> 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));
_stateCode = response.statusCode;
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();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
Future getData() async {
waitApiRequest(() async {
_items = await GasTypesApiClient().getData();
notifyListeners();
return -1;
}
},
onSuccess: () {
_stateCode = 200;
notifyListeners();
});
}
}

@ -1,5 +1,5 @@
class Department {
String? id;
int? id;
String? name;
Department({

@ -27,7 +27,7 @@ class Device {
factory Device.fromJson(Map<String, dynamic> parsedJson) {
return Device(
id: parsedJson["nid"] ?? parsedJson["id"],
id: parsedJson["nid"] ?? parsedJson["id"].toString(),
serialNumber: parsedJson["sn"] ?? parsedJson["value"],
number: parsedJson["asset_no"],
brand: parsedJson["brand"] as String?,

@ -2,7 +2,7 @@ import 'device.dart';
import 'device_transfer_info.dart';
class DeviceTransfer {
String? id;
int? id;
String? userId;
String? title;
Device? device;
@ -46,8 +46,8 @@ class DeviceTransfer {
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"),
);
}
}

@ -3,7 +3,7 @@ import '../hospital.dart';
import '../lookup.dart';
class DeviceTransferInfo {
String? userId;
int? userId;
String? comment;
Hospital? client;
Department? department;
@ -27,18 +27,18 @@ class DeviceTransferInfo {
Map<String, String> toJson(bool isSender) {
Map<String, String> body = {};
final baseKey = isSender ? "sender_" : "receiver_";
final baseKey = isSender ? "sender" : "receiver";
if (comment?.isNotEmpty ?? false) body["${baseKey}comment"] = comment!;
if (comment?.isNotEmpty ?? false) body["${baseKey}Comment"] = comment!;
if (workingHours?.isNotEmpty ?? false) {
body["${baseKey}working_hours"] = workingHours!;
body["${baseKey}WorkingHours"] = workingHours!;
}
if (travelingHours?.isNotEmpty ?? false) {
body["${baseKey}travel_hours"] = comment!;
body["${baseKey}TravelingHours"] = travelingHours!;
}
final status = this.status;
if (status != null) body["${baseKey}status"] = status.id.toString();
if (signature?.isNotEmpty ?? false) body["${baseKey}image"] = signature!;
if (status != null) body["${baseKey}MachineStatusId"] = status.id.toString();
if (signature?.isNotEmpty ?? false) body["${baseKey}AttachmentUrl"] = signature!;
return body;
}
@ -62,15 +62,15 @@ class DeviceTransferInfo {
factory DeviceTransferInfo.fromJson(Map<String, dynamic> parsedJson, String key) {
return DeviceTransferInfo(
workingHours: parsedJson["${key}working_hours"],
travelingHours: parsedJson["${key}travel_hours"],
name: parsedJson["${key}name"],
signature: parsedJson["${key}image"],
userId: parsedJson["${key}id"],
comment: parsedJson["${key}comment"],
client: Hospital.fromJson(parsedJson["${key}client"]),
department: Department.fromJson(parsedJson["${key}department"]),
status: Lookup.fromJson(parsedJson["${key}status"]),
workingHours: parsedJson["${key}WorkingHours"],
travelingHours: parsedJson["${key}TravelingHours"],
name: parsedJson["${key}SiteName"],
signature: parsedJson["${key}AttachmentUrl"],
userId: parsedJson["${key}SiteId"],
comment: parsedJson["${key}Comment"],
client: Hospital(id: parsedJson["${key}senderAssignedEmployeeId"], name: parsedJson["${key}senderAssignedEmployeeName"]),
department: Department(id: parsedJson["${key}DepartmentId"], name: parsedJson["${key}DepartmentName"]),
status: Lookup(id: parsedJson["${key}senderMachineStatusId"], label: parsedJson["${key}senderMachineStatusName"]),
);
}
}

@ -23,10 +23,10 @@ class GasRefillDetails {
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,
deliveredQuantity: parsedJson["deliverd_qty"] == null ? 0 : int.tryParse(parsedJson["deliverd_qty"].toString()) ?? 0,
type: Lookup.fromJson(parsedJson["gasType"]),
cylinderSize: Lookup.fromJson(parsedJson["cylinderSize"]),
requestedQuantity: parsedJson["requestedQty"] == null ? 0 : int.tryParse(parsedJson["requestedQty"].toString()) ?? 0,
deliveredQuantity: parsedJson["deliverdQty"] == null ? 0 : int.tryParse(parsedJson["deliverdQty"].toString()) ?? 0,
model: null,
);
}

@ -2,7 +2,7 @@ import '../lookup.dart';
import 'gas_refill_details.dart';
class GasRefillModel {
String? id;
int? id;
String? userId;
String? clientName;
String? title;
@ -36,15 +36,15 @@ class GasRefillModel {
factory GasRefillModel.fromJson(Map<String, dynamic> parsedJson) {
List<GasRefillDetails> details = [];
if (parsedJson["details"] != null) {
List list = parsedJson["details"];
if (parsedJson["gazRefillDetails"] != null) {
List list = parsedJson["gazRefillDetails"];
details = list.map((e) => GasRefillDetails.fromJson(e)).toList();
}
return GasRefillModel(
id: parsedJson["id"],
userId: parsedJson["uid"],
title: parsedJson["title"],
clientName: parsedJson["client"],
clientName: parsedJson["site"]['custName'],
status: Lookup.fromJson(parsedJson["status"]),
details: details,
);

@ -1,5 +1,5 @@
class Hospital {
String? id;
int? id;
String? name;
Hospital({

@ -25,14 +25,14 @@ class Lookup {
factory Lookup.fromJson(Map<String, dynamic> parsedJson) {
return Lookup(
label: parsedJson["value"],
label: parsedJson["name"],
id: parsedJson["id"] is int? ? parsedJson["id"] : int.tryParse(parsedJson["id"] ?? parsedJson["uid"]),
);
}
factory Lookup.fromIntIdJson(Map<String, dynamic> parsedJson) {
return Lookup(
label: parsedJson["value"],
label: parsedJson["name"],
id: parsedJson["id"],
);
}

@ -56,7 +56,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
_isLoading = true;
setState(() {});
int? status = await _deviceTransferProvider?.updateRequest(
user: UserApiClient().user ?? User(), host: _settingProvider?.host ?? "", requestId: widget.model?.id ?? "", isSender: widget.isSender ?? false, newModel: _formModel, oldModel: widget.model);
user: UserApiClient().user ?? User(), host: _settingProvider?.host ?? "", requestId: widget.model?.id.toString() ?? "", isSender: widget.isSender ?? false, newModel: _formModel, oldModel: widget.model);
_isLoading = false;
setState(() {});
if (status != null && status >= 200 && status < 300) {

@ -167,7 +167,7 @@ class _GasRefillDetailsState extends State<GasRefillDetails> {
textScaleFactor: AppStyle.getScaleFactor(context),
),
),
StatusLabel(label: _model.status?.label ?? "", color: AColors.getGasStatusColor(_model.status?.id ?? 0)),
StatusLabel(label: _model.status?.label.toString() ?? "", color: AColors.getGasStatusColor(_model.status?.id ?? 0)),
],
),
const SizedBox(

@ -18,6 +18,7 @@ import '../../../widgets/app_text_form_field.dart';
import '../../../widgets/buttons/app_button.dart';
import '../../../widgets/gas_refill/gas_refill_create_details_item.dart';
import '../../../widgets/loaders/loading_manager.dart';
import '../../../widgets/status/gas_refill/gas_cylinder_size.dart';
import '../../../widgets/status/gas_refill/gas_type.dart';
import '../../../widgets/titles/app_sub_title.dart';
@ -147,17 +148,17 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
},
),
// const SizedBox(height: 8,),
// const ASubTitle("Cylinder Size"),
// if(_validate && _currentDetails.cylinderSize == null)
// ASubTitle(_subtitle.requiredWord,color: Colors.red,),
// const SizedBox(height: 4,),
// GasCylinderSizeMenu(
// initialValue: _currentDetails.cylinderSize,
// onSelect: (status){
// _currentDetails.cylinderSize = status;
// },
// ),
const SizedBox(height: 8,),
const ASubTitle("Cylinder Size"),
if(_validate && _currentDetails.cylinderSize == null)
ASubTitle(_subtitle?.requiredWord??"",color: Colors.red,),
const SizedBox(height: 4,),
GasCylinderSizeMenu(
initialValue: _currentDetails.cylinderSize,
onSelect: (status){
_currentDetails.cylinderSize = status;
},
),
const SizedBox(
height: 8,
),

@ -35,14 +35,12 @@ class _SingleDepartmentPickerState extends State<SingleDepartmentPicker> {
return Scaffold(
resizeToAvoidBottomInset: false,
body: LoadingManager(
isLoading: _departmentsProvider?.isLoading,
isLoading: _departmentsProvider?.loading,
stateCode: _departmentsProvider?.stateCode,
isFailedLoading: _departmentsProvider?.departments == null,
onRefresh: () async {
_departmentsProvider?.reset();
await _departmentsProvider?.getDepartment(
_settingProvider?.host ?? "",
);
await _departmentsProvider?.getDepartment();
},
child: Column(
children: [

@ -48,7 +48,7 @@ class GasRefillUpdateDetailsItem extends StatelessWidget {
initialValue: (details.deliveredQuantity ?? "").toString(),
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.subtitle1,
validator: (value) => Validator.isNumeric(value!) ? "" : "allow numbers only",
validator: (value) => Validator.isNumeric(value) ? null : "allow numbers only",
textInputType: TextInputType.number,
onSaved: (value) {
details.deliveredQuantity = int.tryParse(value!);

@ -73,7 +73,7 @@ class _HospitalAutoCompleteFieldState extends State<HospitalAutoCompleteField> {
widget.onSearch!(_controller.text);
}),
suggestionsCallback: (vale) async {
return await HospitalsProvider().getHospitalsList(host: _settingProvider?.host ?? "", title: vale, user: User());
return await HospitalsProvider().getHospitalsList(title: vale);
},
itemBuilder: (context, hospital) {
return HospitalItem(

@ -36,12 +36,12 @@ class _SingleHospitalPickerState extends State<SingleHospitalPicker> {
return Scaffold(
resizeToAvoidBottomInset: false,
body: LoadingManager(
isLoading: _hospitalsProvider?.isLoading,
isLoading: _hospitalsProvider?.loading,
stateCode: _hospitalsProvider?.stateCode,
isFailedLoading: _hospitalsProvider?.hospitals == null,
onRefresh: () async {
_hospitalsProvider?.reset();
await _hospitalsProvider?.getHospitals(host: _settingProvider?.host ?? "", user: User(), title: '');
await _hospitalsProvider?.getHospitals(title: '');
},
child: Column(
children: [

@ -3,6 +3,7 @@ import 'package:provider/provider.dart';
import '../../../../api/user_api_client.dart';
import '../../../../controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart';
import '../../../../controllers/providers/loading_notifier.dart';
import '../../../../controllers/providers/settings/setting_provider.dart';
import '../../../../controllers/providers/user_provider.dart';
import '../../../../models/lookup.dart';
@ -21,16 +22,14 @@ class GasTypeMenu extends StatelessWidget {
@override
Widget build(BuildContext context) {
final settingProvider = Provider.of<SettingProvider>(context);
final userProvider = Provider.of<UserProvider>(context);
final menuProvider = Provider.of<GasTypesProvider>(context);
return LoadingManager(
isLoading: menuProvider.isLoading,
isLoading: GasTypesProvider().loading,
isFailedLoading: menuProvider.items == null,
stateCode: menuProvider.stateCode,
onRefresh: () async {
menuProvider.reset();
await menuProvider.getData(user: UserApiClient().user, host: settingProvider.host);
await menuProvider.getData();
},
child: SingleStatusMenu(
initialStatus: initialValue,

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save