transfer device + track transfer device

merge-requests/32/head
nextwo 3 years ago
parent 08484b4904
commit 8c0ef0acf0

@ -201,5 +201,11 @@
"repairLocation" : "موقع الإصلاح", "repairLocation" : "موقع الإصلاح",
"travelingExpense" : "مصاريف التنقل", "travelingExpense" : "مصاريف التنقل",
"startDate" : "وقت البدء", "startDate" : "وقت البدء",
"endDate" : "وقت الانتهاء" "endDate" : "وقت الانتهاء",
"destinationSite": "موقع الوجهه",
"building": "بناء",
"floor": "طابق",
"department": "قسم",
"room": "غرفه",
"actions": "اجراءات"
} }

@ -201,5 +201,13 @@
"repairLocation" : "Repair Location", "repairLocation" : "Repair Location",
"travelingExpense": "Traveling Expense", "travelingExpense": "Traveling Expense",
"startDate" : "Start Date", "startDate" : "Start Date",
"endDate" : "End Date" "endDate" : "End Date",
"destinationSite": "Destination Site",
"building": "Building",
"floor": "Floor",
"department": "Department",
"room": "Room",
"actions": "Actions"
} }

@ -8,6 +8,8 @@ import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/device/device_transfer_info.dart'; import 'package:test_sa/models/device/device_transfer_info.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import '../../../models/hospital.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 = 12; final pageItemNumber = 12;
@ -17,6 +19,11 @@ class DeviceTransferProvider extends ChangeNotifier {
items = null; items = null;
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
hospital = null;
building = null;
floor = null;
department = null;
room="";
} }
// state code of current request to defied error message // state code of current request to defied error message
@ -35,6 +42,13 @@ class DeviceTransferProvider extends ChangeNotifier {
// failed _loading = false // failed _loading = false
bool isLoading; bool isLoading;
Hospital hospital;
Buildings building;
Floors floor;
Departments department;
String room;
/// 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
@ -46,21 +60,6 @@ class DeviceTransferProvider extends ChangeNotifier {
}) async { }) async {
if (isLoading == true) return -2; if (isLoading == true) return -2;
isLoading = true; isLoading = true;
// isLoading = false;
// stateCode = 200;
// items = [];
// items.addAll(List.generate(20, (index) => DeviceTransfer(
// title: "ddddd",
// id: "5",
// device: Device(id: "1",brand: "brand",model: "model"),
// destinationClient: Hospital(name: "hospital name",id: "1"),
// destinationDepartment: Department(id: "5",name: "destination Department"),
// senderDepartment: Department(id: "5",name: "sender Department"),
// userId: "5"
// )));
// notifyListeners();
// return 200;
Response response; Response response;
try { try {
Map<String, dynamic> body = {}; Map<String, dynamic> body = {};
@ -103,12 +102,36 @@ class DeviceTransferProvider extends ChangeNotifier {
@required DeviceTransfer model, @required DeviceTransfer model,
}) async { }) async {
Map<String, dynamic> body = { Map<String, dynamic> body = {
// "uid": user.id.toString(), "id": 0,
// "token": user.token ?? "",
"assetId": model.device.id ?? "", "assetId": model.device.id ?? "",
"destSiteId": model.receiver.client.id ?? "", "destSiteId": model.receiver.client.id ?? "",
"destDepartmentId": model.receiver.department.id ?? "", "destDepartmentId": model.receiver.department.id ?? "",
"senderSiteId": model.receiver.client.id ?? "", "senderSiteId": model.receiver.client.id ?? "",
// "transferNo": 0,
// "transferCode": "string",
"destBuildingId": building?.id,
"destFloorId": floor.id,
"destRoom": room,
// "senderBuildingId": 0,
// "senderFloorId": 0,
// "senderDepartmentId": 0,
// "senderRoom": "string",
// "senderAssignedEmployeeId": "string",
// "senderMachineStatusId": 0,
// "senderComment": "string",
// "senderStartDate": "2023-06-11T09:21:56.453Z",
// "senderEndDate": "2023-06-11T09:21:56.453Z",
// "senderWorkingHours": "string",
// "senderTravelingHours": "string",
// "senderAttachmentName": "string",
// "receiverAssignedEmployeeId": "string",
// "receiverMachineStatusId": 0,
// "receiverComment": "string",
// "receiverStartDate": "2023-06-11T09:21:56.453Z",
// "receiverEndDate": "2023-06-11T09:21:56.453Z",
// "receiverWorkingHours": "string",
// "receiverTravelingHours": "string",
// "receiverAttachmentName": "string"
}; };
Response response; Response response;
@ -118,6 +141,7 @@ class DeviceTransferProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
if (items != null) { if (items != null) {
items.insert(0, DeviceTransfer.fromJson(json.decode(utf8.decode(response.bodyBytes))[0])); items.insert(0, DeviceTransfer.fromJson(json.decode(utf8.decode(response.bodyBytes))[0]));
reset();
notifyListeners(); notifyListeners();
} }
} }

@ -7,6 +7,11 @@ class Device {
int id; int id;
String serialNumber; String serialNumber;
String number; String number;
String destBuildingName;
String destDepartmentName;
String destRoom;
String destFloor;
String destSiteName;
// String brand; // String brand;
// String model; // String model;
ModelDefinition modelDefinition; ModelDefinition modelDefinition;
@ -17,6 +22,11 @@ class Device {
this.serialNumber, this.serialNumber,
this.number, this.number,
this.hospital, this.hospital,
this.destBuildingName,
this.destDepartmentName,
this.destRoom,
this.destFloor,
this.destSiteName,
// this.brand, // this.brand,
// this.model, // this.model,
this.modelDefinition, this.modelDefinition,
@ -29,6 +39,11 @@ class Device {
number: parsedJson["assetNumber"], number: parsedJson["assetNumber"],
modelDefinition: ModelDefinition.fromJson(parsedJson["modelDefinition"]), modelDefinition: ModelDefinition.fromJson(parsedJson["modelDefinition"]),
hospital: Hospital.fromJson(parsedJson["site"]), hospital: Hospital.fromJson(parsedJson["site"]),
destBuildingName: parsedJson["destBuildingName"],
destDepartmentName: parsedJson["destDepartmentName"],
destRoom: parsedJson["destRoom"],
destFloor: parsedJson["destFloor"],
destSiteName:parsedJson['destSiteName']
// parsedJson["modelDefinition"] == null ? "" : // parsedJson["modelDefinition"] == null ? "" :
// parsedJson["modelDefinition"]["manufacturerName"], // parsedJson["modelDefinition"]["manufacturerName"],
// model: parsedJson["modelDefinition"] == null ? "" : // model: parsedJson["modelDefinition"] == null ? "" :

@ -49,6 +49,11 @@ class DeviceTransfer {
id: parsedJson["assetId"], id: parsedJson["assetId"],
number: parsedJson["assetNumber"], number: parsedJson["assetNumber"],
serialNumber: parsedJson["assetSerialNo"], serialNumber: parsedJson["assetSerialNo"],
destBuildingName: parsedJson["destBuildingName"],
destDepartmentName: parsedJson["destDepartmentName"],
destFloor: parsedJson["destFloor"],
destRoom: parsedJson["destRoom"],
destSiteName: parsedJson["destSiteName"]
), ),
sender: DeviceTransferInfo( sender: DeviceTransferInfo(
travelingHours: parsedJson["senderTravelingHours"], travelingHours: parsedJson["senderTravelingHours"],
@ -56,6 +61,7 @@ class DeviceTransfer {
workingHours: parsedJson["senderWorkingHours"], workingHours: parsedJson["senderWorkingHours"],
userId: parsedJson["senderAssignedEmployeeId"], userId: parsedJson["senderAssignedEmployeeId"],
userName: parsedJson["senderAssignedEmployeeName"], userName: parsedJson["senderAssignedEmployeeName"],
assignedEmployeeName: parsedJson["senderAssignedEmployeeName"],
client: Hospital(id: parsedJson["senderSiteId"], name: parsedJson["senderSiteName"]), client: Hospital(id: parsedJson["senderSiteId"], name: parsedJson["senderSiteName"]),
department: Department( department: Department(
id: parsedJson["senderDepartmentId"], id: parsedJson["senderDepartmentId"],
@ -74,6 +80,7 @@ class DeviceTransfer {
workingHours: parsedJson["receiverWorkingHours"], workingHours: parsedJson["receiverWorkingHours"],
userId: parsedJson["receiverAssignedEmployeeId"], userId: parsedJson["receiverAssignedEmployeeId"],
userName: parsedJson["receiverAssignedEmployeeName"], userName: parsedJson["receiverAssignedEmployeeName"],
assignedEmployeeName: parsedJson["receiverAssignedEmployeeName"],
client: Hospital(id: parsedJson["destSiteId"], name: parsedJson["destSiteName"]), client: Hospital(id: parsedJson["destSiteId"], name: parsedJson["destSiteName"]),
department: Department( department: Department(
id: parsedJson["destDepartmentId"], id: parsedJson["destDepartmentId"],

@ -11,6 +11,7 @@ class DeviceTransferInfo {
String travelingHours; String travelingHours;
String userName; String userName;
String signature; String signature;
String assignedEmployeeName;
Lookup status; Lookup status;
DeviceTransferInfo({ DeviceTransferInfo({
@ -23,6 +24,7 @@ class DeviceTransferInfo {
this.workingHours, this.workingHours,
this.signature, this.signature,
this.status, this.status,
this.assignedEmployeeName
}); });
Map<String, String> toJson(bool isSender) { Map<String, String> toJson(bool isSender) {
@ -63,6 +65,7 @@ class DeviceTransferInfo {
signature: parsedJson["${key}image"], signature: parsedJson["${key}image"],
userId: parsedJson["${key}id"], userId: parsedJson["${key}id"],
comment: parsedJson["${key}comment"], comment: parsedJson["${key}comment"],
assignedEmployeeName:parsedJson["${key}AssignedEmployeeName"],
client: Hospital(id: parsedJson["${key}SiteId"], name: parsedJson["${key}SiteName"]), client: Hospital(id: parsedJson["${key}SiteId"], name: parsedJson["${key}SiteName"]),
department: Department( department: Department(
id: parsedJson["${key}DepartmentId"], id: parsedJson["${key}DepartmentId"],

@ -229,6 +229,13 @@ class Subtitle {
String travelingExpense; String travelingExpense;
String startDate; String startDate;
String endDate; String endDate;
String destinationSite;
String building;
String floor;
String department;
String room;
String actions;
void setIssues(List<String> issues) { void setIssues(List<String> issues) {
issues.clear(); issues.clear();
@ -432,7 +439,13 @@ class Subtitle {
@required this.travelingExpense, @required this.travelingExpense,
@required this.startDate, @required this.startDate,
@required this.endDate, @required this.endDate,
@required this.assetNumber @required this.assetNumber,
@required this.destinationSite,
@required this.building,
@required this.floor,
@required this.department,
@required this.room,
@required this.actions,
}); });
factory Subtitle.fromJson(Map<String, dynamic> parsedJson) { factory Subtitle.fromJson(Map<String, dynamic> parsedJson) {
@ -630,6 +643,12 @@ class Subtitle {
travelingExpense: parsedJson["travelingExpense"], travelingExpense: parsedJson["travelingExpense"],
startDate: parsedJson["startDate"], startDate: parsedJson["startDate"],
endDate: parsedJson["endDate"], endDate: parsedJson["endDate"],
destinationSite: parsedJson["destinationSite"],
building: parsedJson["building"],
floor: parsedJson["floor"],
department: parsedJson["department"],
room: parsedJson["room"],
actions: parsedJson["actions"],
); );
} }
} }

@ -98,28 +98,28 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
info: widget.model.device.number, info: widget.model.device.number,
), ),
RequestInfoRow( RequestInfoRow(
title: "Destination Site", title: _subtitle.destinationSite,
info: widget.model.device.serialNumber, info: widget.model.device.destSiteName,
), ),
RequestInfoRow( RequestInfoRow(
title: "Building", title: _subtitle.building,
info: widget.model.device.serialNumber, info: widget.model.device.destBuildingName,
), ),
RequestInfoRow( RequestInfoRow(
title: "Floor", title: _subtitle.floor,
info: widget.model.device.serialNumber, info: widget.model.device.destFloor,
), ),
RequestInfoRow( RequestInfoRow(
title: "Department", title: _subtitle.department,
info: widget.model.device.serialNumber, info: widget.model.device.destDepartmentName,
), ),
RequestInfoRow( RequestInfoRow(
title: "Room", title: _subtitle.room,
info: widget.model.device.serialNumber, info: widget.model.device.destRoom,
), ),
RequestInfoRow( RequestInfoRow(
title: "Actions", title: _subtitle.actions,
info: widget.model.device.serialNumber, info: "",
), ),
const SizedBox(height: 8), const SizedBox(height: 8),
Row( Row(

@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/api/device_transfer_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/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/models/department.dart';
import 'package:test_sa/models/device/device_transfer.dart'; import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/device/device_transfer_info.dart'; import 'package:test_sa/models/device/device_transfer_info.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
@ -18,6 +19,12 @@ import 'package:test_sa/views/widgets/loaders/loading_manager.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';
import '../../../controllers/validator/validator.dart';
import '../../widgets/app_text_form_field.dart';
import '../../widgets/gas_refill/building_type_menu.dart';
import '../../widgets/gas_refill/department_type_menu.dart';
import '../../widgets/gas_refill/floor_type_menu.dart';
import '../../widgets/hospitals/hospital_auto_complete_field_new.dart';
class RequestDeviceTransfer extends StatefulWidget { class RequestDeviceTransfer extends StatefulWidget {
static const String id = "/request-device-transfer"; static const String id = "/request-device-transfer";
@ -84,6 +91,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
@override @override
void dispose() { void dispose() {
_requestedQuantityController.dispose(); _requestedQuantityController.dispose();
_deviceTransferProvider.reset();
super.dispose(); super.dispose();
} }
@ -158,36 +166,104 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
// setState(() {}); // setState(() {});
// }, // },
// ), // ),
12.height, // 12.height,
const ASubTitle("Destination Client"), // const ASubTitle("Destination Client"),
if (_validate && _formModel.receiver.client == null) // if (_validate && _formModel.receiver.client == null)
ASubTitle( // ASubTitle(
_subtitle.requiredWord, // _subtitle.requiredWord,
color: Colors.red, // color: Colors.red,
// ),
// 6.height,
// HospitalButton(
// hospital: _formModel.receiver.client,
// onHospitalPick: (hospital) {
// _formModel.receiver.client = hospital;
// setState(() {});
// },
// ),
// 12.height,
// const ASubTitle("Destination Department"),
// if (_validate && _formModel.receiver.department == null)
// ASubTitle(
// _subtitle.requiredWord,
// color: Colors.red,
// ),
// 6.height,
// DepartmentButton(
// department: _formModel.receiver.department,
// onDepartmentPick: (department) {
// _formModel.receiver.department = department;
// setState(() {});
// },
// ),
const SizedBox(
height: 4,
), ),
6.height, Divider(
HospitalButton( color: Theme.of(context).colorScheme.primary,
hospital: _formModel.receiver.client, ),
onHospitalPick: (hospital) { const SizedBox(
_formModel.receiver.client = hospital; height: 4,
),
HospitalAutoCompleteField(
initialValue: _deviceTransferProvider.hospital?.name,
// onSave: (value){
// _search.hospital = value;
// },
onSearch: (value) {
_deviceTransferProvider.hospital = value;
_deviceTransferProvider.building = null;
_deviceTransferProvider.floor = null;
_deviceTransferProvider.department = null;
_formModel.receiver.client = value;
setState(() {}); setState(() {});
}, },
), ),
12.height, const SizedBox(
const ASubTitle("Destination Department"), height: 8,
if (_validate && _formModel.receiver.department == null)
ASubTitle(
_subtitle.requiredWord,
color: Colors.red,
), ),
6.height, BuildingTypeMenu(
DepartmentButton( initialValue: _deviceTransferProvider?.building,
department: _formModel.receiver.department, building: _deviceTransferProvider?.hospital?.buildings,
onDepartmentPick: (department) { onSelect: (status) {
_formModel.receiver.department = department; _deviceTransferProvider.building = status;
setState(() {}); setState(() {});
}, },
), ),
const SizedBox(height: 8),
FloorTypeMenu(
initialValue: _deviceTransferProvider?.floor,
floors: _deviceTransferProvider?.building?.floors,
onSelect: (status) {
_deviceTransferProvider.floor = status;
setState(() {});
},
),
const SizedBox(height: 8),
DepartmentTypeMenu(
initialValue: _deviceTransferProvider?.department,
departments: _deviceTransferProvider?.floor?.departments,
onSelect: (status) {
_deviceTransferProvider.department = status;
_formModel.receiver.department = Department(id: status.id, name: status.name) ;
setState(() {});
},
),
const SizedBox(height: 8),
ASubTitle("Room"),
SizedBox(
height: 4,
),
ATextFormField(
textAlign: TextAlign.center,
controller: _requestedQuantityController,
style: Theme.of(context).textTheme.subtitle1,
validator: (value) => Validator.isNumeric(value) ? null : "allow numbers only",
textInputType: TextInputType.number,
onSaved: (value) {
_deviceTransferProvider.room=value;
},
),
12.height, 12.height,
AButton( AButton(
text: _subtitle.submit, text: _subtitle.submit,

@ -40,6 +40,10 @@ class DeviceTransferInfoSection extends StatelessWidget {
title: "Comment", title: "Comment",
info: info.comment, info: info.comment,
), ),
RequestInfoRow(
title: "Assigned FE",
info: info.assignedEmployeeName,
),
RequestInfoRow( RequestInfoRow(
title: "Signature", title: "Signature",
info: info.signature?.isEmpty != false ? subtitle.noDateFound : null, info: info.signature?.isEmpty != false ? subtitle.noDateFound : null,

Loading…
Cancel
Save