transfer device + track transfer device

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

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

@ -201,5 +201,13 @@
"repairLocation" : "Repair Location",
"travelingExpense": "Traveling Expense",
"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/user.dart';
import '../../../models/hospital.dart';
class DeviceTransferProvider extends ChangeNotifier {
// number of items call in each request
final pageItemNumber = 12;
@ -17,6 +19,11 @@ class DeviceTransferProvider extends ChangeNotifier {
items = null;
nextPage = true;
stateCode = null;
hospital = null;
building = null;
floor = null;
department = null;
room="";
}
// state code of current request to defied error message
@ -35,6 +42,13 @@ class DeviceTransferProvider extends ChangeNotifier {
// failed _loading = false
bool isLoading;
Hospital hospital;
Buildings building;
Floors floor;
Departments department;
String room;
/// 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
@ -46,21 +60,6 @@ class DeviceTransferProvider extends ChangeNotifier {
}) async {
if (isLoading == true) return -2;
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;
try {
Map<String, dynamic> body = {};
@ -103,12 +102,36 @@ class DeviceTransferProvider extends ChangeNotifier {
@required DeviceTransfer model,
}) async {
Map<String, dynamic> body = {
// "uid": user.id.toString(),
// "token": user.token ?? "",
"id": 0,
"assetId": model.device.id ?? "",
"destSiteId": model.receiver.client.id ?? "",
"destDepartmentId": model.receiver.department.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;
@ -118,6 +141,7 @@ class DeviceTransferProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) {
if (items != null) {
items.insert(0, DeviceTransfer.fromJson(json.decode(utf8.decode(response.bodyBytes))[0]));
reset();
notifyListeners();
}
}

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

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

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

@ -229,6 +229,13 @@ class Subtitle {
String travelingExpense;
String startDate;
String endDate;
String destinationSite;
String building;
String floor;
String department;
String room;
String actions;
void setIssues(List<String> issues) {
issues.clear();
@ -432,7 +439,13 @@ class Subtitle {
@required this.travelingExpense,
@required this.startDate,
@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) {
@ -630,6 +643,12 @@ class Subtitle {
travelingExpense: parsedJson["travelingExpense"],
startDate: parsedJson["startDate"],
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,
),
RequestInfoRow(
title: "Destination Site",
info: widget.model.device.serialNumber,
title: _subtitle.destinationSite,
info: widget.model.device.destSiteName,
),
RequestInfoRow(
title: "Building",
info: widget.model.device.serialNumber,
title: _subtitle.building,
info: widget.model.device.destBuildingName,
),
RequestInfoRow(
title: "Floor",
info: widget.model.device.serialNumber,
title: _subtitle.floor,
info: widget.model.device.destFloor,
),
RequestInfoRow(
title: "Department",
info: widget.model.device.serialNumber,
title: _subtitle.department,
info: widget.model.device.destDepartmentName,
),
RequestInfoRow(
title: "Room",
info: widget.model.device.serialNumber,
title: _subtitle.room,
info: widget.model.device.destRoom,
),
RequestInfoRow(
title: "Actions",
info: widget.model.device.serialNumber,
title: _subtitle.actions,
info: "",
),
const SizedBox(height: 8),
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/settings/setting_provider.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_info.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 '../../../../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 {
static const String id = "/request-device-transfer";
@ -84,6 +91,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
@override
void dispose() {
_requestedQuantityController.dispose();
_deviceTransferProvider.reset();
super.dispose();
}
@ -158,36 +166,104 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
// setState(() {});
// },
// ),
12.height,
const ASubTitle("Destination Client"),
if (_validate && _formModel.receiver.client == null)
ASubTitle(
_subtitle.requiredWord,
color: Colors.red,
),
6.height,
HospitalButton(
hospital: _formModel.receiver.client,
onHospitalPick: (hospital) {
_formModel.receiver.client = hospital;
// 12.height,
// const ASubTitle("Destination Client"),
// if (_validate && _formModel.receiver.client == null)
// ASubTitle(
// _subtitle.requiredWord,
// 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,
),
Divider(
color: Theme.of(context).colorScheme.primary,
),
const SizedBox(
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(() {});
},
),
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;
const SizedBox(
height: 8,
),
BuildingTypeMenu(
initialValue: _deviceTransferProvider?.building,
building: _deviceTransferProvider?.hospital?.buildings,
onSelect: (status) {
_deviceTransferProvider.building = status;
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,
AButton(
text: _subtitle.submit,

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

Loading…
Cancel
Save