Merge branch 'zaid_development_new' into 'main_latest_merged'

Fixing bugs

See merge request haroon6138/cloudsolutions-atoms!22
merge-requests/23/merge
Sikander Saleem 3 years ago
commit 0736abba17

@ -9,7 +9,6 @@ import 'package:test_sa/models/device/device_transfer_info.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class DeviceTransferProvider extends ChangeNotifier { class DeviceTransferProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 50;
@ -45,8 +44,7 @@ class DeviceTransferProvider extends ChangeNotifier{
@required String host, @required String host,
@required User user, @required User user,
}) async { }) async {
if(isLoading == true) if (isLoading == true) return -2;
return -2;
isLoading = true; isLoading = true;
// isLoading = false; // isLoading = false;
@ -78,8 +76,7 @@ class DeviceTransferProvider extends ChangeNotifier{
if (stateCode >= 200 && stateCode < 300) { if (stateCode >= 200 && stateCode < 300) {
// client's request was successfully received // client's request was successfully received
List listJson = json.decode(response.body)["data"]; List listJson = json.decode(response.body)["data"];
List<DeviceTransfer> itemsPage = listJson.map( List<DeviceTransfer> itemsPage = listJson.map((request) => DeviceTransfer.fromJson(request)).toList();
(request) => DeviceTransfer.fromJson(request)).toList();
items ??= []; items ??= [];
items.addAll(itemsPage); items.addAll(itemsPage);
if (itemsPage.length == pageItemNumber) { if (itemsPage.length == pageItemNumber) {
@ -91,14 +88,12 @@ class DeviceTransferProvider extends ChangeNotifier{
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch (error) { } catch (error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
Future<int> createRequest({ Future<int> createRequest({
@ -115,31 +110,20 @@ class DeviceTransferProvider extends ChangeNotifier{
"senderSiteId": model.receiver.client.id ?? "", "senderSiteId": model.receiver.client.id ?? "",
}; };
Response response; Response response;
try { try {
response = await ApiManager.instance.post( response = await ApiManager.instance.post(URLs.requestDeviceTransfer, body: body);
URLs.requestDeviceTransfer,
body: body
);
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
if (items != null) { if (items != null) {
items.insert( items.insert(0, DeviceTransfer.fromJson(json.decode(utf8.decode(response.bodyBytes))[0]));
0,
DeviceTransfer.fromJson(
json.decode(utf8.decode(response.bodyBytes))[0]
)
);
notifyListeners(); notifyListeners();
} }
} }
return response.statusCode; return response.statusCode;
} catch (error) { } catch (error) {
return -1; return -1;
} }
} }
Future<int> updateRequest({ Future<int> updateRequest({
@ -150,7 +134,6 @@ class DeviceTransferProvider extends ChangeNotifier{
@required DeviceTransfer oldModel, @required DeviceTransfer oldModel,
@required DeviceTransferInfo newModel, @required DeviceTransferInfo newModel,
}) async { }) async {
Map<String, dynamic> body = { Map<String, dynamic> body = {
"id": oldModel.id, "id": oldModel.id,
"assetId": oldModel.device.id ?? "", "assetId": oldModel.device.id ?? "",
@ -160,8 +143,7 @@ class DeviceTransferProvider extends ChangeNotifier{
}; };
if (isSender) { if (isSender) {
body.addAll( body.addAll({
{
//"senderSiteId": newModel.client.id, //"senderSiteId": newModel.client.id,
//"senderDepartmentId": newModel.department.id, //"senderDepartmentId": newModel.department.id,
"senderAssignedEmployeeId": newModel.userId, "senderAssignedEmployeeId": newModel.userId,
@ -170,11 +152,9 @@ class DeviceTransferProvider extends ChangeNotifier{
"senderWorkingHours": newModel.workingHours, "senderWorkingHours": newModel.workingHours,
"senderTravelingHours": newModel.travelingHours, "senderTravelingHours": newModel.travelingHours,
"senderAttachmentName": "${DateTime.now().toIso8601String()}.png|${newModel.signature}", "senderAttachmentName": "${DateTime.now().toIso8601String()}.png|${newModel.signature}",
} });
);
} else { } else {
body.addAll( body.addAll({
{
//"destSiteId": newModel.client.id, //"destSiteId": newModel.client.id,
//"destDepartmentId": newModel.department.id, //"destDepartmentId": newModel.department.id,
"receiverAssignedEmployeeId": newModel.userId, "receiverAssignedEmployeeId": newModel.userId,
@ -183,17 +163,13 @@ class DeviceTransferProvider extends ChangeNotifier{
"receiverWorkingHours": newModel.workingHours, "receiverWorkingHours": newModel.workingHours,
"receiverTravelingHours": newModel.travelingHours, "receiverTravelingHours": newModel.travelingHours,
"receiverAttachmentName": "${DateTime.now().toIso8601String()}.png|${newModel.signature}", "receiverAttachmentName": "${DateTime.now().toIso8601String()}.png|${newModel.signature}",
} });
);
} }
body.addAll(newModel.toJson(isSender)); body.addAll(newModel.toJson(isSender));
Response response; Response response;
try { try {
response = await ApiManager.instance.put( response = await ApiManager.instance.put(URLs.updateDeviceTransfer, body: body);
URLs.updateDeviceTransfer,
body: body
);
// response = await post( // response = await post(
// Uri.parse("$host${URLs.updateDeviceTransfer}/$requestId"), // Uri.parse("$host${URLs.updateDeviceTransfer}/$requestId"),
// body: body, // body: body,
@ -210,10 +186,8 @@ class DeviceTransferProvider extends ChangeNotifier{
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) { } catch (error) {
return -1; return -1;
} }
} }
} }

@ -9,7 +9,6 @@ import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class DevicesProvider extends ChangeNotifier { class DevicesProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset() { void reset() {
_devices = null; _devices = null;
@ -47,21 +46,17 @@ class DevicesProvider extends ChangeNotifier{
String serialNumber, String serialNumber,
String number, String number,
}) async { }) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try { try {
response = await ApiManager.instance.post( response = await ApiManager.instance.post(URLs.getEquipment, body: {
URLs.getEquipment,
body: {
"pageSize": 50, "pageSize": 50,
"siteId": hospitalId, "siteId": hospitalId,
if (serialNumber?.isEmpty == false) "assetSerialNumber": serialNumber, if (serialNumber?.isEmpty == false) "assetSerialNumber": serialNumber,
if (number?.isEmpty == false) "assetNo": number, if (number?.isEmpty == false) "assetNo": number,
} });
);
} catch (error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
@ -93,15 +88,12 @@ class DevicesProvider extends ChangeNotifier{
}) async { }) async {
Response response; Response response;
try { try {
response = await ApiManager.instance.post( response = await ApiManager.instance.post(URLs.getEquipment, body: {
URLs.getEquipment,
body: {
"pageSize": 50, "pageSize": 50,
"siteId": hospitalId, "siteId": hospitalId,
if (serialNumber?.isEmpty == false) "assetSerialNumber": serialNumber, if (serialNumber?.isEmpty == false) "assetSerialNumber": serialNumber,
if (number?.isEmpty == false) "assetNo": number, if (number?.isEmpty == false) "assetNo": number,
} });
);
// response = await get( // response = await get(
// Uri.parse("$host${URLs.getEquipment}?siteId=$hospitalId" // Uri.parse("$host${URLs.getEquipment}?siteId=$hospitalId"
// "${serialNumber?.isEmpty == false ? "&assetSerialNumber=$serialNumber" :""}" // "${serialNumber?.isEmpty == false ? "&assetSerialNumber=$serialNumber" :""}"
@ -118,7 +110,6 @@ class DevicesProvider extends ChangeNotifier{
} catch (error) { } catch (error) {
return []; return [];
} }
} }
Future<List<Lookup>> getModels({ Future<List<Lookup>> getModels({
@ -133,38 +124,30 @@ class DevicesProvider extends ChangeNotifier{
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"]; List categoriesListJson = json.decode(response.body)["data"];
page = categoriesListJson.map((json) => page = categoriesListJson
Lookup( .map((json) => Lookup(
name: json["modelDefCode"], name: json["modelDefCode"],
id: json["id"], id: json["id"],
value: json["id"], value: json["id"],
) ))
).toList(); .toList();
} }
return page; return page;
} catch (error) { } catch (error) {
return []; return [];
} }
} }
/// return -2 if request in progress /// return -2 if request in progress
/// return -1 if error happen when sending request /// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<List<Device>> getDevicesListBySN ({ Future<List<Device>> getDevicesListBySN({@required String host, @required User user, @required int hospitalId, @required String sn}) async {
@required String host,
@required User user,
@required int hospitalId,
@required String sn
}) async {
Response response; Response response;
try { try {
response = await get( response = await get(
Uri.parse(host + URLs.getEquipment+"?client=$hospitalId" Uri.parse(URLs.getEquipment + "?client=$hospitalId" + (sn == null || sn.isEmpty ? "" : "&serial_qr=$sn")),
+ ( sn == null || sn.isEmpty ? "" : "&serial_qr=$sn" )),
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
@ -181,6 +164,5 @@ class DevicesProvider extends ChangeNotifier{
notifyListeners(); notifyListeners();
return []; return [];
} }
} }
} }

@ -17,9 +17,8 @@ class User{
bool isActive; bool isActive;
DateTime tokenLife; DateTime tokenLife;
User(
User({ {this.id,
this.id,
this.userName = "", this.userName = "",
this.email = "", this.email = "",
this.password = "", this.password = "",
@ -30,12 +29,10 @@ class User{
this.whatsApp, this.whatsApp,
this.token, this.token,
this.tokenLife, this.tokenLife,
this.isActive = false this.isActive = false});
});
Future<Map<String, dynamic>> toLoginJson() async { Future<Map<String, dynamic>> toLoginJson() async {
if(FirebaseNotificationManger.token == null) if (FirebaseNotificationManger.token == null) await FirebaseNotificationManger.getToken();
await FirebaseNotificationManger.getToken();
return { return {
"username": userName, "username": userName,
"password": password, "password": password,
@ -45,18 +42,14 @@ class User{
Map<String, dynamic> toUpdateProfileJson() { Map<String, dynamic> toUpdateProfileJson() {
Map<String, dynamic> jsonObject = {}; Map<String, dynamic> jsonObject = {};
if(department?.id != null) if (department?.id != null) jsonObject["department"] = department.id;
jsonObject["department"] = department.id; if (whatsApp != null && whatsApp.isNotEmpty) jsonObject["whatsapp"] = whatsApp;
if(whatsApp != null && whatsApp.isNotEmpty) if (phoneNumber != null && phoneNumber.isNotEmpty) jsonObject["phone"] = phoneNumber;
jsonObject["whatsapp"] = whatsApp;
if(phoneNumber != null && phoneNumber.isNotEmpty)
jsonObject["phone"] = phoneNumber;
return jsonObject; return jsonObject;
} }
Future<Map<String, dynamic>> toRegisterJson() async { Future<Map<String, dynamic>> toRegisterJson() async {
if(FirebaseNotificationManger.token == null) if (FirebaseNotificationManger.token == null) await FirebaseNotificationManger.getToken();
await FirebaseNotificationManger.getToken();
return { return {
"username": userName, "username": userName,
"email": email, "email": email,
@ -84,17 +77,14 @@ class User{
//"password":password, //"password":password,
"tokenlife": tokenLife.toIso8601String(), "tokenlife": tokenLife.toIso8601String(),
"active": isActive, "active": isActive,
"userRoles": type == UsersTypes.engineer "userRoles": type == UsersTypes.engineer ? "value: R-6" : "value: R-5",
? "value: R-6" : "value: R-5" ,
// "token":token, pass is token // "token":token, pass is token
}; };
} }
factory User.fromJson(Map<String, dynamic> parsedJson) { factory User.fromJson(Map<String, dynamic> parsedJson) {
UsersTypes type; UsersTypes type;
if(parsedJson["userRoles"].toString().contains("value: R-4") if (parsedJson["userRoles"].toString().contains("value: R-4") || parsedJson["userRoles"].toString().contains("value: R-5") || parsedJson["userRoles"].toString().contains("value: R-7")) {
|| parsedJson["userRoles"].toString().contains("value: R-5")
|| parsedJson["userRoles"].toString().contains("value: R-7")){
type = UsersTypes.normal_user; type = UsersTypes.normal_user;
} else { } else {
type = UsersTypes.engineer; type = UsersTypes.engineer;
@ -103,10 +93,7 @@ class User{
id: parsedJson["userID"], id: parsedJson["userID"],
userName: parsedJson["username"], userName: parsedJson["username"],
email: parsedJson["email"], email: parsedJson["email"],
hospital: Hospital( hospital: Hospital(id: parsedJson["client_id"], name: parsedJson["client_name"]),
id: parsedJson["client_id"],
name: parsedJson["client_name"]
),
department: Department( department: Department(
id: parsedJson["department_id"], id: parsedJson["department_id"],
name: parsedJson["department_name"], name: parsedJson["department_name"],
@ -116,7 +103,6 @@ class User{
token: parsedJson["token"], token: parsedJson["token"],
isActive: parsedJson["isAuthenticated"], isActive: parsedJson["isAuthenticated"],
tokenLife: DateTime.tryParse(parsedJson["tokenlife"] ?? ""), tokenLife: DateTime.tryParse(parsedJson["tokenlife"] ?? ""),
type:type type: type);
);
} }
} }

@ -19,6 +19,7 @@ import 'package:test_sa/views/widgets/status/gas_refill/gas_status.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../../../../controllers/localization/localization.dart'; import '../../../../controllers/localization/localization.dart';
class UpdateDeviceTransfer extends StatefulWidget { class UpdateDeviceTransfer extends StatefulWidget {
final DeviceTransfer model; final DeviceTransfer model;
final bool isSender; final bool isSender;
@ -52,13 +53,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
_isLoading = true; _isLoading = true;
setState(() {}); setState(() {});
int status = await _deviceTransferProvider.updateRequest( int status = await _deviceTransferProvider.updateRequest(
user: _userProvider.user, user: _userProvider.user, host: _settingProvider.host, requestId: widget.model.id, isSender: widget.isSender, newModel: _formModel, oldModel: widget.model);
host: _settingProvider.host,
requestId: widget.model.id,
isSender: widget.isSender,
newModel: _formModel,
oldModel: widget.model
);
_isLoading = false; _isLoading = false;
setState(() {}); setState(() {});
if (status >= 200 && status < 300) { if (status >= 200 && status < 300) {
@ -78,10 +73,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
@override @override
void initState() { void initState() {
_formModel.fromDetails(widget.isSender _formModel.fromDetails(widget.isSender ? widget.model.sender : widget.model.receiver, withSignature: false);
? widget.model.sender : widget.model.receiver,
withSignature: false
);
super.initState(); super.initState();
} }
@ -117,18 +109,18 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Text( child: Text(
"Edit Transfer Device", "Edit Transfer Device",
style: Theme.of(context).textTheme.headline5.copyWith( style: Theme.of(context).textTheme.headline5.copyWith(color: Theme.of(context).primaryColor, fontSize: 28, fontWeight: FontWeight.bold),
color: Theme.of(context).primaryColor,
fontSize: 28,
fontWeight: FontWeight.bold
), ),
), ),
), ),
const SizedBox(
height: 8,
), ),
const SizedBox(height: 8,),
ASubTitle("Comment"), ASubTitle("Comment"),
const SizedBox(height: 4,), const SizedBox(
height: 4,
),
ATextFormField( ATextFormField(
initialValue: _formModel?.comment, initialValue: _formModel?.comment,
textAlign: TextAlign.center, textAlign: TextAlign.center,
@ -138,9 +130,13 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
_formModel.comment = value; _formModel.comment = value;
}, },
), ),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
ASubTitle(_subtitle.travelingHours), ASubTitle(_subtitle.travelingHours),
const SizedBox(height: 4,), const SizedBox(
height: 4,
),
ATextFormField( ATextFormField(
initialValue: _formModel?.travelingHours, initialValue: _formModel?.travelingHours,
textAlign: TextAlign.center, textAlign: TextAlign.center,
@ -150,9 +146,13 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
_formModel.travelingHours = value; _formModel.travelingHours = value;
}, },
), ),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
ASubTitle(_subtitle.workingHours), ASubTitle(_subtitle.workingHours),
const SizedBox(height: 4,), const SizedBox(
height: 4,
),
ATextFormField( ATextFormField(
initialValue: _formModel?.workingHours, initialValue: _formModel?.workingHours,
textAlign: TextAlign.center, textAlign: TextAlign.center,
@ -174,9 +174,13 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
// setState(() {}); // setState(() {});
// }, // },
// ), // ),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
ASubTitle(_subtitle.status), ASubTitle(_subtitle.status),
const SizedBox(height: 4,), const SizedBox(
height: 4,
),
GasStatusMenu( GasStatusMenu(
initialValue: _formModel.status, initialValue: _formModel.status,
onSelect: (status) { onSelect: (status) {
@ -184,21 +188,22 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
setState(() {}); setState(() {});
}, },
), ),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
const ASubTitle("Signature"), const ASubTitle("Signature"),
// if(_validate && _formModel.signature == null) // if(_validate && _formModel.signature == null)
// ASubTitle(_subtitle.requiredWord,color: Colors.red,), // ASubTitle(_subtitle.requiredWord,color: Colors.red,),
const SizedBox(height: 4,), const SizedBox(
height: 4,
),
ESignature( ESignature(
oldSignature: widget.isSender oldSignature: widget.isSender ? widget.model.sender.signature : widget.model.receiver.signature,
? widget.model.sender.signature
: widget.model.receiver.signature,
newSignature: _signature, newSignature: _signature,
onSaved: (signature) { onSaved: (signature) {
_signature = signature; _signature = signature;
if (signature == null || signature.isEmpty) return; if (signature == null || signature.isEmpty) return;
_formModel.signature = base64Encode(signature); _formModel.signature = base64Encode(signature);
}, },
), ),
Padding( Padding(
@ -208,7 +213,9 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
onPressed: _update, onPressed: _update,
), ),
), ),
const SizedBox(height: 100,) const SizedBox(
height: 100,
)
], ],
), ),
), ),
@ -218,4 +225,3 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
); );
} }
} }

@ -1,6 +1,5 @@
import 'dart:io'; import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
@ -26,7 +25,6 @@ import 'package:test_sa/views/pages/device_transfer/request_device_transfer.dart
import 'package:test_sa/views/pages/device_transfer/track_device_transfer.dart'; import 'package:test_sa/views/pages/device_transfer/track_device_transfer.dart';
import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart'; import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart';
import 'package:test_sa/views/pages/user/gas_refill/track_gas_refill.dart'; import 'package:test_sa/views/pages/user/gas_refill/track_gas_refill.dart';
import 'package:test_sa/views/pages/user/notifications/notifications_page.dart';
import 'package:test_sa/views/pages/user/requests/create_request.dart'; import 'package:test_sa/views/pages/user/requests/create_request.dart';
import 'package:test_sa/views/pages/user/visits/regular_visits_page.dart'; import 'package:test_sa/views/pages/user/visits/regular_visits_page.dart';
import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
@ -153,7 +151,7 @@ class _LandPageState extends State<LandPage> {
mainAxisSpacing: 12, mainAxisSpacing: 12,
childAspectRatio: 1, childAspectRatio: 1,
children: [ children: [
if (_userProvider.user.type == UsersTypes.normal_user) if (_userProvider.user != null && _userProvider.user.type == UsersTypes.normal_user)
LandPageItem( LandPageItem(
text: _subtitle.newServiceRequest, text: _subtitle.newServiceRequest,
icon: FontAwesomeIcons.tools, icon: FontAwesomeIcons.tools,
@ -279,7 +277,11 @@ class _LandPageState extends State<LandPage> {
decoration: BoxDecoration(border: Border.all(color: Theme.of(context).primaryColor, width: 2), shape: BoxShape.circle), decoration: BoxDecoration(border: Border.all(color: Theme.of(context).primaryColor, width: 2), shape: BoxShape.circle),
child: ClipOval( child: ClipOval(
child: ClipOval( child: ClipOval(
child: Icon(Icons.person,size: 36,color: Theme.of(context).colorScheme.primary,), child: Icon(
Icons.person,
size: 36,
color: Theme.of(context).colorScheme.primary,
),
), ),
), ),
), ),

@ -51,34 +51,20 @@ class _ESignatureState extends State<ESignature> {
width: MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
padding: const EdgeInsets.only(bottom: 8), padding: const EdgeInsets.only(bottom: 8),
height: 90 * AppStyle.getScaleFactor(context), height: 90 * AppStyle.getScaleFactor(context),
child: signature != null ? child: signature != null ? Image.memory(signature) : ImageLoader(boxFit: BoxFit.contain, url: widget.oldSignature)),
Image.memory(signature): FormField<String>(onSaved: (_) async {
ImageLoader(
boxFit: BoxFit.contain,
url: widget.oldSignature)
),
FormField<String>(
onSaved: (_) async {
widget.onSaved(signature); widget.onSaved(signature);
}, }, builder: (FormFieldState<String> state) {
builder: (FormFieldState<String> state) {
return Column( return Column(
children: [ children: [
Container( Container(
width: MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
padding: const EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(horizontal: 16),
horizontal: 16
),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
border: Border.all(color: AColors.black), border: Border.all(color: AColors.black),
borderRadius: BorderRadius.circular( borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
AppStyle.borderRadius * AppStyle.getScaleFactor(context) boxShadow: const [AppStyle.boxShadow]),
),
boxShadow: const [
AppStyle.boxShadow
]
),
child: AbsorbPointer( child: AbsorbPointer(
absorbing: _unpaint, absorbing: _unpaint,
child: Signature( child: Signature(
@ -90,28 +76,45 @@ class _ESignatureState extends State<ESignature> {
), ),
Row( Row(
children: [ children: [
IconButton(onPressed: (){_controller.clear();}, icon: const Icon(Icons.clear)), IconButton(
IconButton(onPressed: (){_controller.undo();}, icon: const Icon(Icons.undo)), onPressed: () {
IconButton(onPressed: (){_controller.redo();}, icon: const Icon(Icons.redo)), _controller.clear();
},
IconButton(onPressed: (){ icon: const Icon(Icons.clear)),
IconButton(
onPressed: () {
_controller.undo();
},
icon: const Icon(Icons.undo)),
IconButton(
onPressed: () {
_controller.redo();
},
icon: const Icon(Icons.redo)),
IconButton(
onPressed: () {
_unpaint = !_unpaint; _unpaint = !_unpaint;
setState(() {}); setState(() {});
}, icon: Icon( },
icon: Icon(
_unpaint ? Icons.draw : Icons.ac_unit, _unpaint ? Icons.draw : Icons.ac_unit,
color: _unpaint ? AColors.orange : null,)), color: _unpaint ? AColors.orange : null,
)),
const Spacer(), const Spacer(),
IconButton(onPressed: () async { IconButton(
onPressed: () async {
signature = await _controller.toPngBytes(); signature = await _controller.toPngBytes();
widget.onSaved(signature); if (widget.onChange != null) {
widget.onChange(signature);
}
setState(() {}); setState(() {});
}, icon: const Icon(Icons.check)), },
icon: const Icon(Icons.check)),
], ],
) )
], ],
); );
} }),
),
], ],
); );
} }

@ -9,11 +9,14 @@ import 'package:test_sa/views/widgets/buttons/app_small_button.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart'; import 'package:test_sa/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
class PentryCalibrationToolForm extends StatefulWidget { class PentryCalibrationToolForm extends StatefulWidget {
final List<CalibrationTool> models; final List<CalibrationTool> models;
final bool enableValidate; final bool enableValidate;
const PentryCalibrationToolForm({ const PentryCalibrationToolForm({
Key key, this.models, this.enableValidate, Key key,
this.models,
this.enableValidate,
}) : super(key: key); }) : super(key: key);
@override @override
@ -21,19 +24,13 @@ class PentryCalibrationToolForm extends StatefulWidget {
} }
class _PentryCalibrationToolFormState extends State<PentryCalibrationToolForm> { class _PentryCalibrationToolFormState extends State<PentryCalibrationToolForm> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final subtitle = AppLocalization.of(context).subtitle; final subtitle = AppLocalization.of(context).subtitle;
final userProvider = Provider.of<UserProvider>(context); final userProvider = Provider.of<UserProvider>(context);
return ListView.builder( return ListView.builder(
padding: EdgeInsets.only( padding: EdgeInsets.only(
top: 12 * AppStyle.getScaleFactor(context), top: 12 * AppStyle.getScaleFactor(context), left: 12 * AppStyle.getScaleFactor(context), right: 12 * AppStyle.getScaleFactor(context), bottom: 80 * AppStyle.getScaleFactor(context)),
left: 12 * AppStyle.getScaleFactor(context),
right: 12 * AppStyle.getScaleFactor(context),
bottom: 80 * AppStyle.getScaleFactor(context)
),
itemCount: widget.models.length + 1, itemCount: widget.models.length + 1,
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (index == widget.models.length) { if (index == widget.models.length) {
@ -65,9 +62,13 @@ class _PentryCalibrationToolFormState extends State<PentryCalibrationToolForm> {
), ),
], ],
), ),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
const ASubTitle("Asset Number"), const ASubTitle("Asset Number"),
const SizedBox(height: 4,), const SizedBox(
height: 4,
),
AutoCompleteDeviceNumberField( AutoCompleteDeviceNumberField(
initialValue: model.assetsNumber, initialValue: model.assetsNumber,
hospitalId: userProvider.user.hospital?.id, hospitalId: userProvider.user.hospital?.id,
@ -75,9 +76,13 @@ class _PentryCalibrationToolFormState extends State<PentryCalibrationToolForm> {
model.assetsNumber = number; model.assetsNumber = number;
}, },
), ),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
const ASubTitle("Date of Testing"), const ASubTitle("Date of Testing"),
const SizedBox(height: 4,), const SizedBox(
height: 4,
),
ADatePicker( ADatePicker(
date: model.dataOfTesting, date: model.dataOfTesting,
onDatePicker: (date) { onDatePicker: (date) {
@ -85,11 +90,14 @@ class _PentryCalibrationToolFormState extends State<PentryCalibrationToolForm> {
setState(() {}); setState(() {});
}, },
), ),
const SizedBox(height: 8,), const SizedBox(
Divider(color: Theme.of(context).textTheme.titleMedium.color,), height: 8,
),
Divider(
color: Theme.of(context).textTheme.titleMedium.color,
),
], ],
); );
} });
);
} }
} }

@ -6,6 +6,7 @@ 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 ServiceRequestPriorityMenu extends StatelessWidget { class ServiceRequestPriorityMenu extends StatelessWidget {
final Function(Lookup) onSelect; final Function(Lookup) onSelect;
final Lookup initialValue; final Lookup initialValue;
@ -16,22 +17,19 @@ class ServiceRequestPriorityMenu extends StatelessWidget {
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<ServiceRequestPriorityProvider>(context); final menuProvider = Provider.of<ServiceRequestPriorityProvider>(context);
return LoadingManager( return LoadingManager(
isLoading: menuProvider.isLoading, isLoading: menuProvider.isLoading,
isFailedLoading: menuProvider.items == null, isFailedLoading: menuProvider.items == null,
stateCode: menuProvider.stateCode, stateCode: menuProvider.stateCode,
onRefresh: () async { onRefresh: () async {
menuProvider.reset(); menuProvider.reset();
await menuProvider.getData( await menuProvider.getData(user: userProvider.user, host: settingProvider.host);
user: userProvider.user,
host: settingProvider.host
);
}, },
child: SingleStatusMenu( child: SingleStatusMenu(
initialStatus: initialValue, initialStatus: initialValue,
statuses: menuProvider.items, statuses: menuProvider.items,
onSelect: onSelect, onSelect: onSelect,
) ));
);
} }
} }

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
class SingleStatusMenu extends StatefulWidget { class SingleStatusMenu extends StatefulWidget {
final List<Lookup> statuses; final List<Lookup> statuses;
final Lookup initialStatus; final Lookup initialStatus;
@ -14,7 +15,6 @@ class SingleStatusMenu extends StatefulWidget {
} }
class _SingleStatusMenuState extends State<SingleStatusMenu> { class _SingleStatusMenuState extends State<SingleStatusMenu> {
Lookup _selectedStatus; Lookup _selectedStatus;
@override @override
@ -25,8 +25,7 @@ class _SingleStatusMenuState extends State<SingleStatusMenu> {
@override @override
void didUpdateWidget(covariant SingleStatusMenu oldWidget) { void didUpdateWidget(covariant SingleStatusMenu oldWidget) {
if (widget.initialStatus != null) { if (widget.initialStatus != null) {
final result = widget.statuses?.where( final result = widget.statuses?.where((element) {
(element) {
return element == widget.initialStatus; return element == widget.initialStatus;
}); });
if (result.isNotEmpty) { if (result.isNotEmpty) {
@ -34,7 +33,7 @@ class _SingleStatusMenuState extends State<SingleStatusMenu> {
} else { } else {
_selectedStatus = null; _selectedStatus = null;
} }
if(widget.initialStatus.id != _selectedStatus?.id) { if (widget.initialStatus?.id != _selectedStatus?.id) {
widget.onSelect(_selectedStatus); widget.onSelect(_selectedStatus);
} }
} else { } else {
@ -46,8 +45,7 @@ class _SingleStatusMenuState extends State<SingleStatusMenu> {
@override @override
void initState() { void initState() {
if (widget.initialStatus != null) { if (widget.initialStatus != null) {
final result = widget.statuses?.where( final result = widget.statuses?.where((element) {
(element) {
return element == widget.initialStatus; return element == widget.initialStatus;
}); });
if (result.isNotEmpty) _selectedStatus = result.first; if (result.isNotEmpty) _selectedStatus = result.first;
@ -76,7 +74,7 @@ class _SingleStatusMenuState extends State<SingleStatusMenu> {
child: DropdownButton<Lookup>( child: DropdownButton<Lookup>(
value: _selectedStatus, value: _selectedStatus,
iconSize: 24, iconSize: 24,
icon: Icon(Icons.keyboard_arrow_down_rounded), icon: const Icon(Icons.keyboard_arrow_down_rounded),
elevation: 0, elevation: 0,
isExpanded: true, isExpanded: true,
hint: Text( hint: Text(
@ -91,8 +89,7 @@ class _SingleStatusMenuState extends State<SingleStatusMenu> {
}); });
widget.onSelect(newValue); widget.onSelect(newValue);
}, },
items: widget.statuses items: widget.statuses.map<DropdownMenuItem<Lookup>>((Lookup value) {
.map<DropdownMenuItem<Lookup>>((Lookup value) {
return DropdownMenuItem<Lookup>( return DropdownMenuItem<Lookup>(
value: value, value: value,
child: Text( child: Text(

Loading…
Cancel
Save