new server edits
parent
d256a27a21
commit
75fedf395e
@ -0,0 +1,138 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:http/http.dart';
|
||||||
|
|
||||||
|
class ApiManager {
|
||||||
|
|
||||||
|
ApiManager._();
|
||||||
|
|
||||||
|
final Map<String,String> _headers = {'Content-Type': 'application/json',};
|
||||||
|
|
||||||
|
static ApiManager instance = ApiManager._();
|
||||||
|
|
||||||
|
Future<http.Response> get(
|
||||||
|
String url,
|
||||||
|
{Map<String,String> headers,}
|
||||||
|
) async{
|
||||||
|
|
||||||
|
Uri _url = Uri.parse(url);
|
||||||
|
print(_url);
|
||||||
|
http.Response response = await http.get(_url,headers: headers);
|
||||||
|
if(response.body is! List){
|
||||||
|
final message = jsonDecode(response.body)["message"];
|
||||||
|
if(message != null && message.toString().isNotEmpty){
|
||||||
|
Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<http.Response> post(
|
||||||
|
String url, {
|
||||||
|
Map<String,String> headers,
|
||||||
|
@required Map<String,dynamic> body,
|
||||||
|
}
|
||||||
|
) async{
|
||||||
|
|
||||||
|
headers ??= {};
|
||||||
|
|
||||||
|
headers.addAll(_headers);
|
||||||
|
|
||||||
|
Uri _url = Uri.parse(url);
|
||||||
|
print(_url);
|
||||||
|
print(headers);
|
||||||
|
print(json.encode(body));
|
||||||
|
var request = http.Request('POST', _url);
|
||||||
|
request.body = json.encode(body);
|
||||||
|
request.headers.addAll(headers);
|
||||||
|
|
||||||
|
http.StreamedResponse _streamedResponse = await request.send();
|
||||||
|
http.Response response = await http.Response.fromStream(_streamedResponse);
|
||||||
|
print(response.statusCode);
|
||||||
|
print(response.body);
|
||||||
|
|
||||||
|
if(response.body is! List){
|
||||||
|
final message = jsonDecode(response.body)["message"];
|
||||||
|
if(message != null && message.toString().isNotEmpty){
|
||||||
|
Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<http.Response> put(
|
||||||
|
String url, {
|
||||||
|
Map<String,String> headers,
|
||||||
|
@required Map<String,dynamic> body,
|
||||||
|
}
|
||||||
|
) async{
|
||||||
|
|
||||||
|
headers ??= {};
|
||||||
|
|
||||||
|
headers.addAll(_headers);
|
||||||
|
|
||||||
|
Uri _url = Uri.parse(url);
|
||||||
|
print(_url);
|
||||||
|
print(headers);
|
||||||
|
print(json.encode(body));
|
||||||
|
var request = http.Request('PUT', _url);
|
||||||
|
request.body = json.encode(body);
|
||||||
|
request.headers.addAll(headers);
|
||||||
|
|
||||||
|
http.StreamedResponse streamedResponse = await request.send();
|
||||||
|
http.Response response = await http.Response.fromStream(streamedResponse);
|
||||||
|
print(response.statusCode);
|
||||||
|
print(response.body);
|
||||||
|
if(response.body is! List){
|
||||||
|
final message = jsonDecode(response.body)["message"];
|
||||||
|
if(message != null && message.toString().isNotEmpty){
|
||||||
|
Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<http.Response> multiPart(
|
||||||
|
String url, {
|
||||||
|
Map<String,String> headers,
|
||||||
|
@required Map<String,String> body,
|
||||||
|
@required List<Future<MultipartFile>> files,
|
||||||
|
}) async{
|
||||||
|
Map<String,String> _headers = const {'Content-Type': 'multipart/form-data',};
|
||||||
|
|
||||||
|
headers ??= {};
|
||||||
|
|
||||||
|
headers.addAll(_headers);
|
||||||
|
|
||||||
|
Uri _url = Uri.parse(url);
|
||||||
|
print(_url);
|
||||||
|
print(_headers);
|
||||||
|
print(json.encode(body));
|
||||||
|
var request = http.MultipartRequest('POST', _url);
|
||||||
|
request.fields.addAll(body);
|
||||||
|
request.headers.addAll(_headers);
|
||||||
|
|
||||||
|
for (var element in files) {
|
||||||
|
request.files.add(await element);
|
||||||
|
}
|
||||||
|
|
||||||
|
//request.files.addAll(_files);
|
||||||
|
print(request.files);
|
||||||
|
http.StreamedResponse streamedResponse = await request.send();
|
||||||
|
http.Response response = await http.Response.fromStream(streamedResponse);
|
||||||
|
print(response.statusCode);
|
||||||
|
print(response.body);
|
||||||
|
if(response.body is! List){
|
||||||
|
final message = jsonDecode(response.body)["message"];
|
||||||
|
if(message != null && message.toString().isNotEmpty){
|
||||||
|
Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,68 +1,85 @@
|
|||||||
class URLs{
|
class URLs{
|
||||||
URLs._();
|
URLs._();
|
||||||
static const host2 = "http://194.163.164.213/atoms/api";
|
static const host2 = "http://194.163.164.213/atoms/api";
|
||||||
static const host1 = "http://194.163.164.213/atoms/api";
|
static const host1 = "http://109.123.243.118:9000";
|
||||||
|
|
||||||
|
static String _baseUrl = "$_host/mobile";
|
||||||
|
|
||||||
|
static String _host = host1;
|
||||||
|
|
||||||
|
set host(String value) => _host = value;
|
||||||
|
|
||||||
|
static String getFileUrl(String file) => file == null || file.isEmpty
|
||||||
|
? null : "$_host/attachment/$file";
|
||||||
|
|
||||||
// API Routes
|
// API Routes
|
||||||
static const login = "/handle/user/login"; // post
|
static get login => "$_baseUrl/MobileAuth/Login"; // post
|
||||||
static const register = "/handle/create/user"; // post
|
static get register => "$_baseUrl/handle/create/user"; // post
|
||||||
static const updateProfile = "/update/user/profile"; // post
|
static get updateProfile => "$_baseUrl/update/user/profile"; // post
|
||||||
static const getHospitals = "/handle/return/all/clients"; // get
|
static get getHospitals => "$_baseUrl/Customer/GetCustomers"; // get
|
||||||
static const getDepartments = "/handle/return/all/departments"; // get
|
static get getDepartments => "$_baseUrl/Customer/GetDepartmentLookup"; // get
|
||||||
static const getEquipment = "/handle/return/all/client/equipments"; // get ?client=208051
|
static get getEquipment => "$_baseUrl/Asset/GetAssets"; // get ?client=208051
|
||||||
static const getServiceRequests = "/return/user/calls"; // get
|
static get getModels => "$_baseUrl/ModelDefinition/GetModelDefinitionAsset"; // get ?client=2
|
||||||
|
// 08051
|
||||||
|
static get getServiceRequests => "$_baseUrl/CallRequest/GetCallRequests"; // get
|
||||||
|
static get getServiceRequestThrough => "$_baseUrl/Lookups/GetLookup?lookupEnum=603"; // get
|
||||||
|
static get getServiceRequestTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=604"; // get
|
||||||
|
static get getServiceRequestStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=503";
|
||||||
|
|
||||||
static const getPreventiveMaintenanceVisits = "/return/user/calibrations"; // get
|
static get getPreventiveMaintenanceVisits => "$_baseUrl/return/user/calibrations"; // get
|
||||||
static const updatePreventiveMaintenanceVisits = "/update/user/calibrations"; // get
|
static get updatePreventiveMaintenanceVisits => "$_baseUrl/Visit/UpdateVisits"; // get
|
||||||
|
|
||||||
static const getRegularVisits = "/return/user/ppm"; // get
|
static get getRegularVisits => "$_baseUrl/Visit/GetVisits"; // get
|
||||||
static const updateRegularVisits = "/update/user/ppm"; // get
|
static get updateRegularVisits => "$_baseUrl/Visit/UpdateVisits"; // get
|
||||||
|
|
||||||
static const getSingleServiceRequest = "/return/call/information"; // get
|
static get getSingleServiceRequest => "$_baseUrl/return/call/information"; // get
|
||||||
static const getNotifications = "/return/user/notification"; // get
|
static get getNotifications => "$_baseUrl/return/user/notification"; // get
|
||||||
static const getRecentNotifications = "/return/user/recent/notification"; // get
|
static get getRecentNotifications => "$_baseUrl/return/user/recent/notification"; // get
|
||||||
static const createRequest = "/handle/create/request"; // get
|
static get createRequest => "$_baseUrl/CallRequest/AddCallRequest"; // get
|
||||||
static const createReport = "/handle/create/report/issue"; // get
|
static get createReport => "$_baseUrl/handle/create/report/issue"; // get
|
||||||
static const updateRequestDate = "/handle/update/request"; // get
|
static get updateRequestDate => "$_baseUrl/handle/update/request"; // get
|
||||||
|
|
||||||
// service report
|
// service report
|
||||||
static const createServiceReport = "/handle/create/service/report"; // get
|
static get createServiceReport => "$_baseUrl/handle/create/service/report"; // get
|
||||||
static const updateServiceReport = "/handle/update/service/report"; // get
|
static get updateServiceReport => "$_baseUrl/handle/update/service/report"; // get
|
||||||
static const getServiceReport = "/handle/view/service/report"; // get
|
static get getServiceReport => "$_baseUrl/WorkOrder/GetWorkOrderById"; // get
|
||||||
static const createDuplicatedReport = "/handle/duplicate/request"; // get
|
static get createDuplicatedReport => "$_baseUrl/handle/duplicate/request"; // get
|
||||||
|
|
||||||
static const getServiceReportReasons = "/return/service/report/reasons"; // get
|
static get getServiceReportReasons => "$_baseUrl/Lookups/GetLookup?lookupEnum=522"; // get
|
||||||
static const getServiceReportTypes = "/return/service/report/type"; // get
|
static get getServiceReportTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=34"; // get
|
||||||
static const getServiceReportStatus = "/return/service/report/status"; // get
|
static get getServiceReportStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=521"; // get
|
||||||
static const getServiceReportLastCalls = "/return/call/last/situation"; // get
|
static get getServiceReportLastCalls => "$_baseUrl/Lookups/GetLookup?lookupEnum=520"; // get
|
||||||
static const getServiceTypes = "/return/service/type"; // get
|
static get getServiceTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=604"; // get
|
||||||
static const getPartNumber = "/handle/return/all/parts"; // get
|
static get getPartNumber => "$_baseUrl/PartCatalog/GetPartAutoComplete"; // get
|
||||||
static const getServiceReportPriority = "/return/call/priority/list"; // get
|
static get getServiceReportPriority => "$_baseUrl/Lookups/GetLookup?lookupEnum=602"; // get
|
||||||
static const getServiceReportDefectTypes = "/return/call/defect/type/list"; // get
|
static get getServiceReportDefectTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=601"; // get
|
||||||
|
|
||||||
//gas refill
|
//gas refill
|
||||||
static const getGasTypes = "/return/gas/refill/types"; // get
|
static get getGasTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=606"; // get
|
||||||
static const getGasCylinderSize = "/return/gas/refill/size/cylinder"; // get
|
// todo check edits with backend
|
||||||
static const getGasStatus = "/return/gas/refill/status"; // get
|
static get getGasCylinderSize => "$_baseUrl/Lookups/GetLookup?lookupEnum=608"; // get
|
||||||
static const requestGasRefill = "/create/gas/refill"; // get
|
static get getGasCylinderType => "$_baseUrl/Lookups/GetLookup?lookupEnum=607"; // get
|
||||||
static const updateGasRefill = "/update/gas/refill/"; // get
|
static get getGasStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=609"; // get
|
||||||
static const getGasRefill = "/search/gas/refill"; // get
|
static get requestGasRefill => "$_baseUrl/GazRefill/AddGazRefill"; // get
|
||||||
|
static get updateGasRefill => "$_baseUrl/GazRefill/UpdateGazRefill"; // get
|
||||||
|
static get getGasRefill => "$_baseUrl/GazRefill/GetGazRefills"; // get
|
||||||
|
|
||||||
//device transfer
|
//device transfer
|
||||||
static const requestDeviceTransfer = "/create/transfer/asset"; // get
|
static get requestDeviceTransfer => "$_baseUrl/AssetTransfer/AddAssetTransfer"; // get
|
||||||
static const updateDeviceTransfer = "/update/transfer/asset"; // get
|
static get updateDeviceTransfer => "$_baseUrl/AssetTransfer/UpdateAssetTransfer"; // get
|
||||||
static const getDeviceTransfer = "/search/transfer/asset"; // get
|
static get getDeviceTransfer => "$_baseUrl/AssetTransfer/GetAssetTransfers"; // get
|
||||||
|
|
||||||
// employee
|
// employee
|
||||||
static const getEmployees = "/return/assigned/employee"; // get
|
static get getEmployees => "$_baseUrl/Lookups/GetLookup?lookupEnum=33"; // get
|
||||||
|
static get getEngineers => "$_baseUrl/Account/GetUserByRoleValue?value=R-6"; // get
|
||||||
|
|
||||||
// pentry
|
// pentry
|
||||||
static const getPentry = "/return/pentry/details"; // get
|
static get getPentry => "$_baseUrl/return/pentry/details"; // get
|
||||||
static const updatePentry = "/update/pentry/details"; // get
|
static get updatePentry => "$_baseUrl/Visit/UpdateVisit"; // get
|
||||||
static const getPentryTaskStatus = "/return/pentry/task/status"; // get
|
static get getPentryTaskStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=403"; // get
|
||||||
static const getPentryVisitStatus = "/return/pentry/visit/status/list"; // get
|
static get getPentryVisitStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=402"; // get
|
||||||
static const getPentryStatus = "/return/pentry/status/list"; // get
|
static get getPentryStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=401"; // get
|
||||||
// contacts
|
// contacts
|
||||||
static const getPentryContacts = "/handle/return/all/contacts"; // get
|
static get getPentryContacts => "$_baseUrl/handle/return/all/contacts"; // get
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:test_sa/controllers/api_routes/api_manager.dart';
|
||||||
|
import 'package:test_sa/controllers/api_routes/urls.dart';
|
||||||
|
import 'package:test_sa/models/engineer.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 EngineersProvider extends ChangeNotifier{
|
||||||
|
|
||||||
|
//reset provider data
|
||||||
|
void reset(){
|
||||||
|
_items = null;
|
||||||
|
_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;
|
||||||
|
|
||||||
|
// contain user data
|
||||||
|
// when user not login or register _user = null
|
||||||
|
List<Engineer> _items;
|
||||||
|
List<Engineer> 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 ({String host,User user}) async {
|
||||||
|
if(_loading == true) return -2;
|
||||||
|
_loading = true;
|
||||||
|
notifyListeners();
|
||||||
|
Response response;
|
||||||
|
try{
|
||||||
|
response = await ApiManager.instance.get(
|
||||||
|
URLs.getEngineers,
|
||||||
|
);
|
||||||
|
_stateCode = response.statusCode;
|
||||||
|
if(response.statusCode >= 200 && response.statusCode < 300) {
|
||||||
|
// client's request was successfully received
|
||||||
|
List categoriesListJson = json.decode(response.body);
|
||||||
|
_items = categoriesListJson.map((type) => Engineer.fromJson(type)).toList();
|
||||||
|
}
|
||||||
|
_loading = false;
|
||||||
|
notifyListeners();
|
||||||
|
return response.statusCode;
|
||||||
|
} catch(error) {
|
||||||
|
print(error);
|
||||||
|
_loading = false;
|
||||||
|
_stateCode = -1;
|
||||||
|
notifyListeners();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:test_sa/controllers/api_routes/api_manager.dart';
|
||||||
|
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 GasCylinderTypesProvider extends ChangeNotifier{
|
||||||
|
|
||||||
|
//reset provider data
|
||||||
|
void reset(){
|
||||||
|
_items = null;
|
||||||
|
_loading = null;
|
||||||
|
_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;
|
||||||
|
|
||||||
|
// contain user data
|
||||||
|
// when user not login or register _user = null
|
||||||
|
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){
|
||||||
|
_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 ({String host,User user,}) async {
|
||||||
|
if(_loading == true)
|
||||||
|
return -2;
|
||||||
|
_loading = true;
|
||||||
|
notifyListeners();
|
||||||
|
Response response;
|
||||||
|
try{
|
||||||
|
response = await ApiManager.instance.get(
|
||||||
|
URLs.getGasCylinderType,
|
||||||
|
);
|
||||||
|
_stateCode = response.statusCode;
|
||||||
|
if(response.statusCode >= 200 && response.statusCode < 300) {
|
||||||
|
// client's request was successfully received
|
||||||
|
List categoriesListJson = json.decode(response.body)["data"];
|
||||||
|
_items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList();
|
||||||
|
}
|
||||||
|
_loading = false;
|
||||||
|
notifyListeners();
|
||||||
|
return response.statusCode;
|
||||||
|
} catch(error) {
|
||||||
|
_loading = false;
|
||||||
|
_stateCode = -1;
|
||||||
|
notifyListeners();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:test_sa/controllers/api_routes/api_manager.dart';
|
||||||
|
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 ServiceRequestStatusProvider extends ChangeNotifier{
|
||||||
|
|
||||||
|
//reset provider data
|
||||||
|
void reset(){
|
||||||
|
_statuses = null;
|
||||||
|
_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;
|
||||||
|
|
||||||
|
// contain user data
|
||||||
|
// when user not login or register _user = null
|
||||||
|
List<Lookup> _statuses;
|
||||||
|
List<Lookup> get items => _statuses;
|
||||||
|
|
||||||
|
// 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 ({String host,User user}) async {
|
||||||
|
if(_loading == true)
|
||||||
|
return -2;
|
||||||
|
_loading = true;
|
||||||
|
notifyListeners();
|
||||||
|
Response response;
|
||||||
|
try{
|
||||||
|
response = await ApiManager.instance.get(
|
||||||
|
URLs.getServiceRequestStatus,
|
||||||
|
);
|
||||||
|
_stateCode = response.statusCode;
|
||||||
|
if(response.statusCode >= 200 && response.statusCode < 300) {
|
||||||
|
// client's request was successfully received
|
||||||
|
List categoriesListJson = json.decode(response.body)["data"];
|
||||||
|
_statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList();
|
||||||
|
|
||||||
|
}
|
||||||
|
_loading = false;
|
||||||
|
notifyListeners();
|
||||||
|
return response.statusCode;
|
||||||
|
} catch(error) {
|
||||||
|
_loading = false;
|
||||||
|
_stateCode = -1;
|
||||||
|
notifyListeners();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:test_sa/controllers/api_routes/api_manager.dart';
|
||||||
|
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 ServiceRequestedThroughProvider extends ChangeNotifier{
|
||||||
|
|
||||||
|
//reset provider data
|
||||||
|
void reset(){
|
||||||
|
_statuses = null;
|
||||||
|
_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;
|
||||||
|
|
||||||
|
// contain user data
|
||||||
|
// when user not login or register _user = null
|
||||||
|
List<Lookup> _statuses;
|
||||||
|
List<Lookup> get items => _statuses;
|
||||||
|
|
||||||
|
// 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 ({String host,User user}) async {
|
||||||
|
if(_loading == true)
|
||||||
|
return -2;
|
||||||
|
_loading = true;
|
||||||
|
notifyListeners();
|
||||||
|
Response response;
|
||||||
|
try{
|
||||||
|
response = await ApiManager.instance.get(
|
||||||
|
URLs.getServiceRequestThrough,
|
||||||
|
);
|
||||||
|
_stateCode = response.statusCode;
|
||||||
|
if(response.statusCode >= 200 && response.statusCode < 300) {
|
||||||
|
// client's request was successfully received
|
||||||
|
List categoriesListJson = json.decode(response.body)["data"];
|
||||||
|
_statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList();
|
||||||
|
|
||||||
|
}
|
||||||
|
_loading = false;
|
||||||
|
notifyListeners();
|
||||||
|
return response.statusCode;
|
||||||
|
} catch(error) {
|
||||||
|
_loading = false;
|
||||||
|
_stateCode = -1;
|
||||||
|
notifyListeners();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:test_sa/controllers/api_routes/api_manager.dart';
|
||||||
|
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 ServiceRequestTypeProvider extends ChangeNotifier{
|
||||||
|
|
||||||
|
//reset provider data
|
||||||
|
void reset(){
|
||||||
|
_statuses = null;
|
||||||
|
_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;
|
||||||
|
|
||||||
|
// contain user data
|
||||||
|
// when user not login or register _user = null
|
||||||
|
List<Lookup> _statuses;
|
||||||
|
List<Lookup> get items => _statuses;
|
||||||
|
|
||||||
|
// 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 ({String host,User user}) async {
|
||||||
|
if(_loading == true)
|
||||||
|
return -2;
|
||||||
|
_loading = true;
|
||||||
|
notifyListeners();
|
||||||
|
Response response;
|
||||||
|
try{
|
||||||
|
response = await ApiManager.instance.get(
|
||||||
|
URLs.getServiceRequestTypes,
|
||||||
|
);
|
||||||
|
_stateCode = response.statusCode;
|
||||||
|
if(response.statusCode >= 200 && response.statusCode < 300) {
|
||||||
|
// client's request was successfully received
|
||||||
|
List categoriesListJson = json.decode(response.body)["data"];
|
||||||
|
_statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList();
|
||||||
|
|
||||||
|
}
|
||||||
|
_loading = false;
|
||||||
|
notifyListeners();
|
||||||
|
return response.statusCode;
|
||||||
|
} catch(error) {
|
||||||
|
_loading = false;
|
||||||
|
_stateCode = -1;
|
||||||
|
notifyListeners();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
class Engineer{
|
||||||
|
String id;
|
||||||
|
String name;
|
||||||
|
|
||||||
|
Engineer({
|
||||||
|
this.id,
|
||||||
|
this.name,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory Engineer.fromJson(Map<String,dynamic> parsedJson){
|
||||||
|
return Engineer(
|
||||||
|
id: parsedJson["userId"],
|
||||||
|
name: parsedJson["userName"],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
factory Engineer.fromEngineer(Engineer department){
|
||||||
|
return Engineer(
|
||||||
|
id: department?.id,
|
||||||
|
name: department?.name,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator == (Object other) =>
|
||||||
|
identical(this, other) || other is Engineer &&
|
||||||
|
id == other.id;
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => id.hashCode;
|
||||||
|
}
|
||||||
@ -1,46 +1,66 @@
|
|||||||
class Lookup{
|
class Lookup{
|
||||||
|
|
||||||
final String label;
|
//old name label
|
||||||
final String key;
|
final String name;
|
||||||
|
// old name key
|
||||||
|
final int value;
|
||||||
final int id;
|
final int id;
|
||||||
|
|
||||||
const Lookup({
|
const Lookup({
|
||||||
this.label,
|
this.name,
|
||||||
this.key,
|
this.value,
|
||||||
this.id,
|
this.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator == (Object other) =>
|
bool operator == (Object other) =>
|
||||||
identical(this, other) || other is Lookup &&
|
identical(this, other) || other is Lookup &&
|
||||||
key == other.key &&
|
((value != null && value == other.value)
|
||||||
id == other.id;
|
|| ( id != null && id == other.id )) ;
|
||||||
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode => id.hashCode;
|
int get hashCode => id?.hashCode ?? value?.hashCode;
|
||||||
|
|
||||||
|
toMap(){
|
||||||
|
return {
|
||||||
|
"id": id,
|
||||||
|
"name": name,
|
||||||
|
"value": value
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
factory Lookup.fromStatus(Lookup old){
|
factory Lookup.fromStatus(Lookup old){
|
||||||
|
if(old == null) return null;
|
||||||
return Lookup(
|
return Lookup(
|
||||||
label: old.label,
|
name: old.name,
|
||||||
id: old.id,
|
id: old.id,
|
||||||
key: old.key,
|
value: old.value,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
factory Lookup.fromJson(Map<String,dynamic> parsedJson){
|
factory Lookup.fromJson(Map<String,dynamic> parsedJson){
|
||||||
if(parsedJson["id"] == null && parsedJson["uid"] == null) return null;
|
if(parsedJson == null) return null;
|
||||||
return Lookup(
|
return Lookup(
|
||||||
label: parsedJson["value"],
|
name: parsedJson["name"],
|
||||||
id: parsedJson["id"] is int
|
id: parsedJson["id"],
|
||||||
? parsedJson["id"]
|
value: parsedJson["value"] ?? parsedJson["id"],
|
||||||
: int.tryParse(parsedJson["id"] ?? parsedJson["uid"]),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// factory Lookup.fromJson(Map<String,dynamic> parsedJson){
|
||||||
|
// if(parsedJson["id"] == null && parsedJson["uid"] == null) return null;
|
||||||
|
// return Lookup(
|
||||||
|
// name: parsedJson["value"],
|
||||||
|
// id: parsedJson["id"] is int
|
||||||
|
// ? parsedJson["id"]
|
||||||
|
// : int.tryParse(parsedJson["id"] ?? parsedJson["uid"]),
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
|
||||||
factory Lookup.fromIntIdJson(Map<String,dynamic> parsedJson){
|
factory Lookup.fromIntIdJson(Map<String,dynamic> parsedJson){
|
||||||
return Lookup(
|
return Lookup(
|
||||||
label: parsedJson["value"],
|
name: parsedJson["value"],
|
||||||
id: parsedJson["id"],
|
id: parsedJson["id"],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,26 +1,40 @@
|
|||||||
import 'package:test_sa/models/lookup.dart';
|
import 'package:test_sa/models/lookup.dart';
|
||||||
|
|
||||||
class CalibrationTool{
|
class CalibrationTool{
|
||||||
|
int id;
|
||||||
Lookup assetsNumber;
|
Lookup assetsNumber;
|
||||||
DateTime dataOfTesting;
|
DateTime dataOfTesting;
|
||||||
|
|
||||||
CalibrationTool({
|
CalibrationTool({
|
||||||
|
this.id,
|
||||||
this.assetsNumber,
|
this.assetsNumber,
|
||||||
this.dataOfTesting,
|
this.dataOfTesting,
|
||||||
});
|
});
|
||||||
|
|
||||||
Map<String, String> toMap() {
|
Map<String, dynamic> toMap(int visitId) {
|
||||||
return {
|
return {
|
||||||
if(assetsNumber != null) 'assetsSN': (assetsNumber?.id).toString(),
|
"id":id,
|
||||||
if(dataOfTesting != null) 'dataOfTesting': (dataOfTesting.millisecondsSinceEpoch ~/ 1000).toString(),
|
"visitId": visitId,
|
||||||
|
if(assetsNumber != null) 'assetId': (assetsNumber?.id).toString(),
|
||||||
|
if(dataOfTesting != null) 'calibrationDateOfTesters': dataOfTesting.toIso8601String(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
factory CalibrationTool.fromMap(Map<String, dynamic> map) {
|
factory CalibrationTool.fromMap(Map<String, dynamic> map) {
|
||||||
return CalibrationTool(
|
return CalibrationTool(
|
||||||
assetsNumber: Lookup.fromJson(map['assetsSN']),
|
assetsNumber: Lookup(id: map["assetId"],name: map['assetSerialNo']),
|
||||||
dataOfTesting: map['dataOfTesting'] == null || map['dataOfTesting'] == "" ? null :
|
dataOfTesting: DateTime.tryParse(map['calibrationDateOfTesters'] ?? ""),
|
||||||
DateTime.fromMillisecondsSinceEpoch(int.tryParse(map['dataOfTesting']) * 1000),
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
CalibrationTool copyWith({
|
||||||
|
Lookup assetsNumber,
|
||||||
|
DateTime dataOfTesting,
|
||||||
|
}) {
|
||||||
|
return CalibrationTool(
|
||||||
|
id: id,
|
||||||
|
assetsNumber: assetsNumber ?? this.assetsNumber,
|
||||||
|
dataOfTesting: dataOfTesting ?? this.dataOfTesting,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,33 +1,54 @@
|
|||||||
import 'package:test_sa/models/lookup.dart';
|
import 'package:test_sa/models/lookup.dart';
|
||||||
|
|
||||||
class PPMCheckList{
|
class PPMCheckList{
|
||||||
|
int id;
|
||||||
Lookup status;
|
Lookup status;
|
||||||
String title;
|
String title;
|
||||||
String comment;
|
String comment;
|
||||||
String measuredValue;
|
String measuredValue;
|
||||||
|
|
||||||
PPMCheckList({
|
PPMCheckList({
|
||||||
|
this.id,
|
||||||
this.title,
|
this.title,
|
||||||
this.status,
|
this.status,
|
||||||
this.comment,
|
this.comment,
|
||||||
this.measuredValue,
|
this.measuredValue,
|
||||||
});
|
});
|
||||||
|
|
||||||
Map<String, String> toMap() {
|
Map<String, dynamic> toMap(int visitId) {
|
||||||
return {
|
return {
|
||||||
if(status != null) 'status': status?.id.toString(),
|
'id': id,
|
||||||
if(title != null) 'title': title,
|
"visitId": visitId,
|
||||||
if(comment != null) 'comment': comment,
|
if(status != null) 'taskStatusId': status?.id.toString(),
|
||||||
|
if(title != null) 'task': title,
|
||||||
|
if(comment != null) 'taskComment': comment,
|
||||||
if(measuredValue != null) 'measuredValue': measuredValue,
|
if(measuredValue != null) 'measuredValue': measuredValue,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
factory PPMCheckList.fromMap(Map<String, dynamic> map) {
|
factory PPMCheckList.fromMap(Map<String, dynamic> map) {
|
||||||
return PPMCheckList(
|
return PPMCheckList(
|
||||||
status: Lookup.fromJson(map['status']),
|
id: map['id'] as int,
|
||||||
title: map['title'] as String,
|
status: Lookup(id: map["taskStatusId"],name: map["taskStatusName"]),
|
||||||
comment: map['comment'] as String,
|
title: map['task'] as String,
|
||||||
|
comment: map['taskComment'] as String,
|
||||||
measuredValue: map['measuredValue'] as String,
|
measuredValue: map['measuredValue'] as String,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PPMCheckList copyWith({
|
||||||
|
int id,
|
||||||
|
Lookup status,
|
||||||
|
String title,
|
||||||
|
String comment,
|
||||||
|
String measuredValue,
|
||||||
|
}) {
|
||||||
|
return PPMCheckList(
|
||||||
|
id: id ?? this.id,
|
||||||
|
status: status ?? this.status,
|
||||||
|
title: title ?? this.title,
|
||||||
|
comment: comment ?? this.comment,
|
||||||
|
measuredValue: measuredValue ?? this.measuredValue,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -0,0 +1,92 @@
|
|||||||
|
import 'package:test_sa/controllers/providers/api/devices_provider.dart';
|
||||||
|
import 'package:test_sa/controllers/providers/api/user_provider.dart';
|
||||||
|
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
|
||||||
|
import 'package:test_sa/models/device/device.dart';
|
||||||
|
import 'package:test_sa/models/lookup.dart';
|
||||||
|
import 'package:test_sa/views/app_style/colors.dart';
|
||||||
|
import 'package:test_sa/views/app_style/sizing.dart';
|
||||||
|
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_typeahead/flutter_typeahead.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
class AutoCompleteModelField extends StatefulWidget {
|
||||||
|
final Lookup initialValue;
|
||||||
|
final Function(Lookup) onPick;
|
||||||
|
|
||||||
|
const AutoCompleteModelField({Key key, this.initialValue, this.onPick,}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_AutoCompleteModelFieldState createState() => _AutoCompleteModelFieldState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _AutoCompleteModelFieldState extends State<AutoCompleteModelField> {
|
||||||
|
|
||||||
|
SettingProvider _settingProvider;
|
||||||
|
DevicesProvider _devicesProvider;
|
||||||
|
UserProvider _userProvider;
|
||||||
|
TextEditingController _controller;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
_controller = TextEditingController(text: widget.initialValue?.name);
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_controller.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
_settingProvider = Provider.of<SettingProvider>(context);
|
||||||
|
_userProvider = Provider.of<UserProvider>(context);
|
||||||
|
_devicesProvider = Provider.of<DevicesProvider>(context);
|
||||||
|
//Subtitle _subtitle = AppLocalization.of(context).subtitle;
|
||||||
|
return Container(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 16
|
||||||
|
),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
border: Border.all(color:AColors.black),
|
||||||
|
borderRadius: BorderRadius.circular(
|
||||||
|
AppStyle.borderRadius * AppStyle.getScaleFactor(context)
|
||||||
|
),
|
||||||
|
boxShadow: [
|
||||||
|
AppStyle.boxShadow
|
||||||
|
]
|
||||||
|
),
|
||||||
|
child: TypeAheadField<Lookup>(
|
||||||
|
textFieldConfiguration: TextFieldConfiguration(
|
||||||
|
style: Theme.of(context).textTheme.headline6,
|
||||||
|
controller: _controller,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
|
||||||
|
decoration: const InputDecoration(
|
||||||
|
hintText: "Model",
|
||||||
|
border: InputBorder.none,
|
||||||
|
disabledBorder: InputBorder.none,
|
||||||
|
focusedBorder: InputBorder.none,
|
||||||
|
enabledBorder: InputBorder.none,
|
||||||
|
),
|
||||||
|
textInputAction: TextInputAction.search,
|
||||||
|
),
|
||||||
|
suggestionsCallback: (value) async {
|
||||||
|
return await _devicesProvider.getModels(
|
||||||
|
code: value,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
itemBuilder: (context, lookup) {
|
||||||
|
return ListTile(
|
||||||
|
title: Text(lookup.name),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
onSuggestionSelected: (lookup) {
|
||||||
|
_controller.text = lookup.name;
|
||||||
|
widget.onPick(lookup);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,21 +1,21 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/employee_provider.dart';
|
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart';
|
||||||
import 'package:test_sa/controllers/providers/api/user_provider.dart';
|
import 'package:test_sa/controllers/providers/api/user_provider.dart';
|
||||||
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
|
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
|
||||||
import 'package:test_sa/models/lookup.dart';
|
import 'package:test_sa/models/lookup.dart';
|
||||||
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
|
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
|
||||||
import 'package:test_sa/views/widgets/status/single_status_menu.dart';
|
import 'package:test_sa/views/widgets/status/single_status_menu.dart';
|
||||||
class EmployeeMenu extends StatelessWidget {
|
class AssignedToMenu extends StatelessWidget {
|
||||||
final Function(Lookup) onSelect;
|
final Function(Lookup) onSelect;
|
||||||
final Lookup initialValue;
|
final Lookup initialValue;
|
||||||
|
|
||||||
const EmployeeMenu({Key key, this.onSelect, this.initialValue}) : super(key: key);
|
const AssignedToMenu({Key key, this.onSelect, this.initialValue}) : super(key: key);
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final settingProvider = Provider.of<SettingProvider>(context);
|
final settingProvider = Provider.of<SettingProvider>(context);
|
||||||
final userProvider = Provider.of<UserProvider>(context);
|
final userProvider = Provider.of<UserProvider>(context);
|
||||||
final menuProvider = Provider.of<EmployeesProvider>(context);
|
final menuProvider = Provider.of<AssignedToProvider>(context);
|
||||||
return LoadingManager(
|
return LoadingManager(
|
||||||
isLoading: menuProvider.isLoading,
|
isLoading: menuProvider.isLoading,
|
||||||
isFailedLoading: menuProvider.items == null,
|
isFailedLoading: menuProvider.items == null,
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/engineers_provider.dart';
|
||||||
|
import 'package:test_sa/controllers/providers/api/user_provider.dart';
|
||||||
|
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
|
||||||
|
import 'package:test_sa/models/engineer.dart';
|
||||||
|
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
|
||||||
|
import 'package:test_sa/views/widgets/status/employee/single_type_menu.dart';
|
||||||
|
class EngineersMenu extends StatelessWidget {
|
||||||
|
final Function(Engineer) onSelect;
|
||||||
|
final Engineer initialValue;
|
||||||
|
|
||||||
|
const EngineersMenu({Key key, this.onSelect, this.initialValue}) : super(key: key);
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final settingProvider = Provider.of<SettingProvider>(context);
|
||||||
|
final userProvider = Provider.of<UserProvider>(context);
|
||||||
|
final menuProvider = Provider.of<EngineersProvider>(context);
|
||||||
|
return LoadingManager(
|
||||||
|
isLoading: menuProvider.isLoading,
|
||||||
|
isFailedLoading: menuProvider.items == null,
|
||||||
|
stateCode: menuProvider.stateCode,
|
||||||
|
onRefresh: () async {
|
||||||
|
menuProvider.reset();
|
||||||
|
await menuProvider.getData(
|
||||||
|
user: userProvider.user,
|
||||||
|
host: settingProvider.host
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: SingleEngineerMenu(
|
||||||
|
initialStatus: initialValue,
|
||||||
|
engineers: menuProvider.items,
|
||||||
|
onSelect: onSelect,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,99 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:test_sa/models/engineer.dart';
|
||||||
|
import 'package:test_sa/models/lookup.dart';
|
||||||
|
import 'package:test_sa/views/app_style/colors.dart';
|
||||||
|
import 'package:test_sa/views/app_style/sizing.dart';
|
||||||
|
class SingleEngineerMenu extends StatefulWidget {
|
||||||
|
final List<Engineer> engineers;
|
||||||
|
final Engineer initialStatus;
|
||||||
|
final Function(Engineer) onSelect;
|
||||||
|
|
||||||
|
const SingleEngineerMenu({Key key, this.engineers, this.onSelect, this.initialStatus}) : super(key: key);
|
||||||
|
@override
|
||||||
|
_SingleEngineerMenuState createState() => _SingleEngineerMenuState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _SingleEngineerMenuState extends State<SingleEngineerMenu> {
|
||||||
|
|
||||||
|
Engineer _selectedStatus;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void didUpdateWidget(covariant SingleEngineerMenu oldWidget) {
|
||||||
|
if(widget.initialStatus != null && widget.initialStatus.id != null){
|
||||||
|
_selectedStatus = widget.engineers?.firstWhere(
|
||||||
|
(element) {
|
||||||
|
return element == widget.initialStatus;
|
||||||
|
});
|
||||||
|
widget.onSelect(_selectedStatus);
|
||||||
|
} else {
|
||||||
|
_selectedStatus = null;
|
||||||
|
}
|
||||||
|
super.didUpdateWidget(oldWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
if(widget.initialStatus != null && widget.initialStatus.id != null){
|
||||||
|
_selectedStatus = widget.engineers?.firstWhere(
|
||||||
|
(element) {
|
||||||
|
return element == widget.initialStatus;
|
||||||
|
});
|
||||||
|
widget.onSelect(_selectedStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 16
|
||||||
|
),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
border: Border.all(color:AColors.black),
|
||||||
|
borderRadius: BorderRadius.circular(
|
||||||
|
AppStyle.borderRadius * AppStyle.getScaleFactor(context)
|
||||||
|
),
|
||||||
|
boxShadow: const [
|
||||||
|
AppStyle.boxShadow
|
||||||
|
]
|
||||||
|
),
|
||||||
|
child: DropdownButton<Engineer>(
|
||||||
|
value: _selectedStatus,
|
||||||
|
iconSize: 24,
|
||||||
|
elevation: 16,
|
||||||
|
isExpanded: true,
|
||||||
|
hint: Text(
|
||||||
|
"Select",
|
||||||
|
style: Theme.of(context).textTheme.subtitle1,
|
||||||
|
),
|
||||||
|
style: TextStyle(
|
||||||
|
color: Theme.of(context).primaryColor
|
||||||
|
),
|
||||||
|
underline: SizedBox.shrink(),
|
||||||
|
onChanged: (Engineer newValue) {
|
||||||
|
setState(() {
|
||||||
|
_selectedStatus = newValue;
|
||||||
|
});
|
||||||
|
widget.onSelect(newValue);
|
||||||
|
},
|
||||||
|
items: widget.engineers
|
||||||
|
.map<DropdownMenuItem<Engineer>>((Engineer value) {
|
||||||
|
return DropdownMenuItem<Engineer>(
|
||||||
|
value: value,
|
||||||
|
child: Text(
|
||||||
|
value.name,
|
||||||
|
style: Theme.of(context).textTheme.subtitle1.copyWith(
|
||||||
|
color: Theme.of(context).primaryColor,
|
||||||
|
fontSize: 11,
|
||||||
|
//fontWeight: FontWeight.bold
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.toList(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart';
|
||||||
|
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart';
|
||||||
|
import 'package:test_sa/controllers/providers/api/user_provider.dart';
|
||||||
|
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
|
||||||
|
import 'package:test_sa/models/lookup.dart';
|
||||||
|
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
|
||||||
|
import 'package:test_sa/views/widgets/status/single_status_menu.dart';
|
||||||
|
class GasCylinderTypesMenu extends StatelessWidget {
|
||||||
|
final Function(Lookup) onSelect;
|
||||||
|
final Lookup initialValue;
|
||||||
|
|
||||||
|
const GasCylinderTypesMenu({Key key, this.onSelect, this.initialValue}) : super(key: key);
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final settingProvider = Provider.of<SettingProvider>(context);
|
||||||
|
final userProvider = Provider.of<UserProvider>(context);
|
||||||
|
final menuProvider = Provider.of<GasCylinderTypesProvider>(context);
|
||||||
|
return LoadingManager(
|
||||||
|
isLoading: menuProvider.isLoading,
|
||||||
|
isFailedLoading: menuProvider.items == null,
|
||||||
|
stateCode: menuProvider.stateCode,
|
||||||
|
onRefresh: () async {
|
||||||
|
menuProvider.reset();
|
||||||
|
await menuProvider.getData(
|
||||||
|
user: userProvider.user,
|
||||||
|
host: settingProvider.host
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: SingleStatusMenu(
|
||||||
|
initialStatus: initialValue,
|
||||||
|
statuses: menuProvider.items,
|
||||||
|
onSelect: onSelect,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue