|
|
|
@ -2,6 +2,7 @@ import 'package:flutter/src/widgets/framework.dart';
|
|
|
|
|
import 'package:fluttertoast/fluttertoast.dart';
|
|
|
|
|
import 'package:test_sa/extensions/context_extension.dart';
|
|
|
|
|
import 'package:test_sa/models/device/asset.dart';
|
|
|
|
|
import 'package:test_sa/models/timer_model.dart';
|
|
|
|
|
|
|
|
|
|
import 'asset_transfer_attachment.dart';
|
|
|
|
|
|
|
|
|
@ -64,7 +65,8 @@ class AssetTransfer {
|
|
|
|
|
this.senderMachineStatusName,
|
|
|
|
|
this.senderSiteName,
|
|
|
|
|
this.supplierId,
|
|
|
|
|
this.supplierName
|
|
|
|
|
this.supplierName,
|
|
|
|
|
this.timer,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
AssetTransfer.fromJson(dynamic json) {
|
|
|
|
@ -104,38 +106,47 @@ class AssetTransfer {
|
|
|
|
|
receiverWorkingHours = json['receiverWorkingHours'];
|
|
|
|
|
receiverTravelingHours = json['receiverTravelingHours'];
|
|
|
|
|
receiverEngSignature = json['receiverEngSignature'];
|
|
|
|
|
try {
|
|
|
|
|
timer = TimerModel(startAt: DateTime.tryParse(receiverStartDate ?? ""), endAt: DateTime.tryParse(receiverEndDate));
|
|
|
|
|
if (timer.endAt != null && timer.startAt != null) {
|
|
|
|
|
timer.durationInSecond = (timer.endAt.difference(timer.startAt))?.inSeconds;
|
|
|
|
|
receiverWorkingHours = (((timer.durationInSecond ?? 0) / 60) / 60)?.toStringAsFixed(2);
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
print(e);
|
|
|
|
|
}
|
|
|
|
|
if (json['receiverAttachments'] != null) {
|
|
|
|
|
receiverAttachments = [];
|
|
|
|
|
json['receiverAttachments'].forEach((v) {
|
|
|
|
|
receiverAttachments.add(AssetTransferAttachment.fromJson(v));
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
assetNumber= json['assetNumber'];
|
|
|
|
|
assetName= json['assetName'];
|
|
|
|
|
manufacturerName= json['manufacturerName'];
|
|
|
|
|
modelName= json['modelName'];
|
|
|
|
|
assetSerialNo= json['assetSerialNo'];
|
|
|
|
|
destDepartmentName= json['destDepartmentName'];
|
|
|
|
|
destBuildingName= json['destBuildingName'];
|
|
|
|
|
applied= json['applied'];
|
|
|
|
|
createdOn= json['createdOn'];
|
|
|
|
|
destFloorName= json['destFloorName'];
|
|
|
|
|
destSiteName= json['destSiteName'];
|
|
|
|
|
manufacturerId= json['manufacturerId'];
|
|
|
|
|
modelId= json['modelId'];
|
|
|
|
|
modifiedOn= json['modifiedOn'];
|
|
|
|
|
receiverAssignedEmployeeName= json['receiverAssignedEmployeeName'];
|
|
|
|
|
receiverEngSignatureUrl= json['receiverEngSignatureUrl'];
|
|
|
|
|
receiverMachineStatusName= json['receiverMachineStatusName'];
|
|
|
|
|
senderAssignedEmployeeName= json['senderAssignedEmployeeName'];
|
|
|
|
|
senderBuildingName= json['senderBuildingName'];
|
|
|
|
|
senderDepartmentName= json['senderDepartmentName'];
|
|
|
|
|
senderEngSignatureUrl= json['senderEngSignatureUrl'];
|
|
|
|
|
senderFloorName= json['senderFloorName'];
|
|
|
|
|
senderMachineStatusName= json['senderMachineStatusName'];
|
|
|
|
|
senderSiteName= json['senderSiteName'];
|
|
|
|
|
supplierId= json['supplierId'];
|
|
|
|
|
supplierName= json['supplierName'];
|
|
|
|
|
assetNumber = json['assetNumber'];
|
|
|
|
|
assetName = json['assetName'];
|
|
|
|
|
manufacturerName = json['manufacturerName'];
|
|
|
|
|
modelName = json['modelName'];
|
|
|
|
|
assetSerialNo = json['assetSerialNo'];
|
|
|
|
|
destDepartmentName = json['destDepartmentName'];
|
|
|
|
|
destBuildingName = json['destBuildingName'];
|
|
|
|
|
applied = json['applied'];
|
|
|
|
|
createdOn = json['createdOn'];
|
|
|
|
|
destFloorName = json['destFloorName'];
|
|
|
|
|
destSiteName = json['destSiteName'];
|
|
|
|
|
manufacturerId = json['manufacturerId'];
|
|
|
|
|
modelId = json['modelId'];
|
|
|
|
|
modifiedOn = json['modifiedOn'];
|
|
|
|
|
receiverAssignedEmployeeName = json['receiverAssignedEmployeeName'];
|
|
|
|
|
receiverEngSignatureUrl = json['receiverEngSignatureUrl'];
|
|
|
|
|
receiverMachineStatusName = json['receiverMachineStatusName'];
|
|
|
|
|
senderAssignedEmployeeName = json['senderAssignedEmployeeName'];
|
|
|
|
|
senderBuildingName = json['senderBuildingName'];
|
|
|
|
|
senderDepartmentName = json['senderDepartmentName'];
|
|
|
|
|
senderEngSignatureUrl = json['senderEngSignatureUrl'];
|
|
|
|
|
senderFloorName = json['senderFloorName'];
|
|
|
|
|
senderMachineStatusName = json['senderMachineStatusName'];
|
|
|
|
|
senderSiteName = json['senderSiteName'];
|
|
|
|
|
supplierId = json['supplierId'];
|
|
|
|
|
supplierName = json['supplierName'];
|
|
|
|
|
}
|
|
|
|
|
num id;
|
|
|
|
|
num transferNo;
|
|
|
|
@ -195,6 +206,7 @@ class AssetTransfer {
|
|
|
|
|
bool applied;
|
|
|
|
|
String createdOn;
|
|
|
|
|
String modifiedOn;
|
|
|
|
|
TimerModel timer = TimerModel();
|
|
|
|
|
|
|
|
|
|
AssetTransfer copyWith({
|
|
|
|
|
num id,
|
|
|
|
@ -255,7 +267,8 @@ class AssetTransfer {
|
|
|
|
|
String modelName,
|
|
|
|
|
int manufacturerId,
|
|
|
|
|
String manufacturerName,
|
|
|
|
|
String destDepartmentName
|
|
|
|
|
String destDepartmentName,
|
|
|
|
|
TimerModel timer,
|
|
|
|
|
}) =>
|
|
|
|
|
AssetTransfer(
|
|
|
|
|
id: id ?? this.id,
|
|
|
|
@ -290,33 +303,33 @@ class AssetTransfer {
|
|
|
|
|
receiverTravelingHours: receiverTravelingHours ?? this.receiverTravelingHours,
|
|
|
|
|
receiverEngSignature: receiverEngSignature ?? this.receiverEngSignature,
|
|
|
|
|
receiverAttachments: receiverAttachments ?? this.receiverAttachments,
|
|
|
|
|
supplierId : supplierId?? this.supplierId,
|
|
|
|
|
supplierName: supplierName??this.supplierName,
|
|
|
|
|
destSiteName: destSiteName??this.destSiteName,
|
|
|
|
|
destBuildingName: destBuildingName?? this.destBuildingName,
|
|
|
|
|
destFloorName: destFloorName??this.destFloorName,
|
|
|
|
|
destDepartmentName: destDepartmentName?? this.destDepartmentName,
|
|
|
|
|
senderSiteName: senderSiteName??this.senderSiteName,
|
|
|
|
|
senderBuildingName: senderBuildingName??this.senderBuildingName,
|
|
|
|
|
senderFloorName: senderFloorName??this.senderFloorName,
|
|
|
|
|
senderDepartmentName: senderDepartmentName??this.senderDepartmentName,
|
|
|
|
|
senderAssignedEmployeeName: senderAssignedEmployeeName??this.senderAssignedEmployeeName,
|
|
|
|
|
senderMachineStatusName: senderMachineStatusName??this.senderMachineStatusName,
|
|
|
|
|
senderEngSignatureUrl: senderEngSignatureUrl??this.senderEngSignatureUrl,
|
|
|
|
|
receiverAssignedEmployeeName: receiverAssignedEmployeeName?? this.receiverAssignedEmployeeName,
|
|
|
|
|
receiverMachineStatusName: receiverMachineStatusName??this.receiverMachineStatusName,
|
|
|
|
|
receiverEngSignatureUrl: receiverEngSignatureUrl??this.receiverEngSignatureUrl,
|
|
|
|
|
applied: applied??this.applied,
|
|
|
|
|
createdOn: createdOn?? this.createdOn,
|
|
|
|
|
modifiedOn: modifiedOn??this.modifiedOn,
|
|
|
|
|
assetSerialNo:assetSerialNo??this.assetSerialNo,
|
|
|
|
|
assetNumber:assetNumber??this.assetNumber,
|
|
|
|
|
assetName:assetName??this.assetName,
|
|
|
|
|
modelId:modelId??this.modelId,
|
|
|
|
|
modelName:modelName??this.modelName,
|
|
|
|
|
manufacturerId:manufacturerId??this.manufacturerId,
|
|
|
|
|
manufacturerName:manufacturerName??this.manufacturerName
|
|
|
|
|
);
|
|
|
|
|
supplierId: supplierId ?? this.supplierId,
|
|
|
|
|
supplierName: supplierName ?? this.supplierName,
|
|
|
|
|
destSiteName: destSiteName ?? this.destSiteName,
|
|
|
|
|
destBuildingName: destBuildingName ?? this.destBuildingName,
|
|
|
|
|
destFloorName: destFloorName ?? this.destFloorName,
|
|
|
|
|
destDepartmentName: destDepartmentName ?? this.destDepartmentName,
|
|
|
|
|
senderSiteName: senderSiteName ?? this.senderSiteName,
|
|
|
|
|
senderBuildingName: senderBuildingName ?? this.senderBuildingName,
|
|
|
|
|
senderFloorName: senderFloorName ?? this.senderFloorName,
|
|
|
|
|
senderDepartmentName: senderDepartmentName ?? this.senderDepartmentName,
|
|
|
|
|
senderAssignedEmployeeName: senderAssignedEmployeeName ?? this.senderAssignedEmployeeName,
|
|
|
|
|
senderMachineStatusName: senderMachineStatusName ?? this.senderMachineStatusName,
|
|
|
|
|
senderEngSignatureUrl: senderEngSignatureUrl ?? this.senderEngSignatureUrl,
|
|
|
|
|
receiverAssignedEmployeeName: receiverAssignedEmployeeName ?? this.receiverAssignedEmployeeName,
|
|
|
|
|
receiverMachineStatusName: receiverMachineStatusName ?? this.receiverMachineStatusName,
|
|
|
|
|
receiverEngSignatureUrl: receiverEngSignatureUrl ?? this.receiverEngSignatureUrl,
|
|
|
|
|
applied: applied ?? this.applied,
|
|
|
|
|
createdOn: createdOn ?? this.createdOn,
|
|
|
|
|
modifiedOn: modifiedOn ?? this.modifiedOn,
|
|
|
|
|
assetSerialNo: assetSerialNo ?? this.assetSerialNo,
|
|
|
|
|
assetNumber: assetNumber ?? this.assetNumber,
|
|
|
|
|
assetName: assetName ?? this.assetName,
|
|
|
|
|
modelId: modelId ?? this.modelId,
|
|
|
|
|
modelName: modelName ?? this.modelName,
|
|
|
|
|
manufacturerId: manufacturerId ?? this.manufacturerId,
|
|
|
|
|
timer: timer ?? this.timer,
|
|
|
|
|
manufacturerName: manufacturerName ?? this.manufacturerName);
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
|
final map = <String, dynamic>{};
|
|
|
|
|
map['id'] = id;
|
|
|
|
@ -356,12 +369,12 @@ class AssetTransfer {
|
|
|
|
|
map['receiverAttachments'] = receiverAttachments.map((v) => v.toJson()).toList();
|
|
|
|
|
}
|
|
|
|
|
map["supplierId"] = supplierId;
|
|
|
|
|
map["supplierName"] =supplierName;
|
|
|
|
|
map["destSiteName"] =destSiteName;
|
|
|
|
|
map["destBuildingName"] =destBuildingName;
|
|
|
|
|
map["destFloorName"] =destFloorName;
|
|
|
|
|
map["destDepartmentName"] =destDepartmentName;
|
|
|
|
|
map["senderSiteName"] =senderSiteName;
|
|
|
|
|
map["supplierName"] = supplierName;
|
|
|
|
|
map["destSiteName"] = destSiteName;
|
|
|
|
|
map["destBuildingName"] = destBuildingName;
|
|
|
|
|
map["destFloorName"] = destFloorName;
|
|
|
|
|
map["destDepartmentName"] = destDepartmentName;
|
|
|
|
|
map["senderSiteName"] = senderSiteName;
|
|
|
|
|
map["senderBuildingName"] = senderBuildingName;
|
|
|
|
|
map["senderFloorName"] = senderFloorName;
|
|
|
|
|
map["senderDepartmentName"] = senderDepartmentName;
|
|
|
|
@ -374,13 +387,13 @@ class AssetTransfer {
|
|
|
|
|
map["applied"] = applied;
|
|
|
|
|
map["createdOn"] = createdOn;
|
|
|
|
|
map["modifiedOn"] = modifiedOn;
|
|
|
|
|
map["assetSerialNo"] =assetSerialNo;
|
|
|
|
|
map["assetNumber"] =assetNumber;
|
|
|
|
|
map["assetName"] =assetName;
|
|
|
|
|
map["modelId"] =modelId;
|
|
|
|
|
map["modelName"] =modelName;
|
|
|
|
|
map["manufacturerId"] =manufacturerId;
|
|
|
|
|
map["manufacturerName"] =manufacturerName;
|
|
|
|
|
map["assetSerialNo"] = assetSerialNo;
|
|
|
|
|
map["assetNumber"] = assetNumber;
|
|
|
|
|
map["assetName"] = assetName;
|
|
|
|
|
map["modelId"] = modelId;
|
|
|
|
|
map["modelName"] = modelName;
|
|
|
|
|
map["manufacturerId"] = manufacturerId;
|
|
|
|
|
map["manufacturerName"] = manufacturerName;
|
|
|
|
|
return map;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -425,71 +438,67 @@ class AssetTransfer {
|
|
|
|
|
return map;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fromDetails(AssetTransfer assetTransfer){
|
|
|
|
|
|
|
|
|
|
id= assetTransfer.id;
|
|
|
|
|
transferNo=assetTransfer.transferNo;
|
|
|
|
|
transferCode= assetTransfer.transferCode;
|
|
|
|
|
assetId=assetTransfer.assetId;
|
|
|
|
|
destSiteId= assetTransfer.destSiteId;
|
|
|
|
|
destBuildingId=assetTransfer.destBuildingId;
|
|
|
|
|
destFloorId=assetTransfer.destFloorId;
|
|
|
|
|
destDepartmentId= assetTransfer.destDepartmentId;
|
|
|
|
|
destRoom=assetTransfer.destRoom;
|
|
|
|
|
senderSiteId=assetTransfer.senderSiteId;
|
|
|
|
|
senderBuildingId=assetTransfer.senderBuildingId;
|
|
|
|
|
senderFloorId=assetTransfer.senderFloorId;
|
|
|
|
|
senderDepartmentId=assetTransfer.senderDepartmentId;
|
|
|
|
|
senderRoom=assetTransfer.senderRoom;
|
|
|
|
|
senderAssignedEmployeeId= assetTransfer.senderAssignedEmployeeId;
|
|
|
|
|
senderMachineStatusId=assetTransfer.senderMachineStatusId;
|
|
|
|
|
senderComment=assetTransfer.senderComment;
|
|
|
|
|
senderStartDate= assetTransfer.senderStartDate;
|
|
|
|
|
senderEndDate= assetTransfer.senderEndDate;
|
|
|
|
|
senderWorkingHours= assetTransfer.senderWorkingHours;
|
|
|
|
|
senderTravelingHours= assetTransfer.senderTravelingHours;
|
|
|
|
|
senderEngSignature=assetTransfer.senderEngSignature;
|
|
|
|
|
senderAttachments=assetTransfer.senderAttachments;
|
|
|
|
|
receiverAssignedEmployeeId=assetTransfer.receiverAssignedEmployeeId;
|
|
|
|
|
receiverMachineStatusId= assetTransfer.receiverMachineStatusId;
|
|
|
|
|
receiverComment= assetTransfer.receiverComment;
|
|
|
|
|
receiverStartDate=assetTransfer.receiverStartDate;
|
|
|
|
|
receiverEndDate= assetTransfer.receiverEndDate;
|
|
|
|
|
receiverWorkingHours= assetTransfer.receiverWorkingHours;
|
|
|
|
|
receiverTravelingHours= assetTransfer.receiverTravelingHours;
|
|
|
|
|
receiverEngSignature= assetTransfer.receiverEngSignature;
|
|
|
|
|
receiverAttachments=assetTransfer.receiverAttachments;
|
|
|
|
|
supplierId =assetTransfer.supplierId;
|
|
|
|
|
supplierName=assetTransfer.supplierName;
|
|
|
|
|
destSiteName=assetTransfer.destSiteName;
|
|
|
|
|
destBuildingName=assetTransfer.destBuildingName;
|
|
|
|
|
destFloorName=assetTransfer.destFloorName;
|
|
|
|
|
destDepartmentName=assetTransfer.destDepartmentName;
|
|
|
|
|
senderSiteName=assetTransfer.senderSiteName;
|
|
|
|
|
senderBuildingName=assetTransfer.senderBuildingName;
|
|
|
|
|
senderFloorName=assetTransfer.senderFloorName;
|
|
|
|
|
senderDepartmentName=assetTransfer.senderDepartmentName;
|
|
|
|
|
senderAssignedEmployeeName=assetTransfer.senderAssignedEmployeeName;
|
|
|
|
|
senderMachineStatusName= assetTransfer.senderMachineStatusName;
|
|
|
|
|
senderEngSignatureUrl= assetTransfer.senderEngSignatureUrl;
|
|
|
|
|
receiverAssignedEmployeeName=assetTransfer.receiverAssignedEmployeeName;
|
|
|
|
|
receiverMachineStatusName=assetTransfer.receiverMachineStatusName;
|
|
|
|
|
receiverEngSignatureUrl=assetTransfer.receiverEngSignatureUrl;
|
|
|
|
|
applied=assetTransfer.applied;
|
|
|
|
|
createdOn= assetTransfer.createdOn;
|
|
|
|
|
modifiedOn= assetTransfer.modifiedOn;
|
|
|
|
|
assetSerialNo=assetTransfer.assetSerialNo;
|
|
|
|
|
assetNumber=assetTransfer.assetNumber;
|
|
|
|
|
assetName=assetTransfer.assetName;
|
|
|
|
|
modelId=assetTransfer.modelId;
|
|
|
|
|
modelName=assetTransfer.modelName;
|
|
|
|
|
manufacturerId=assetTransfer.manufacturerId;
|
|
|
|
|
manufacturerName=assetTransfer.manufacturerName;
|
|
|
|
|
fromDetails(AssetTransfer assetTransfer) {
|
|
|
|
|
id = assetTransfer.id;
|
|
|
|
|
transferNo = assetTransfer.transferNo;
|
|
|
|
|
transferCode = assetTransfer.transferCode;
|
|
|
|
|
assetId = assetTransfer.assetId;
|
|
|
|
|
destSiteId = assetTransfer.destSiteId;
|
|
|
|
|
destBuildingId = assetTransfer.destBuildingId;
|
|
|
|
|
destFloorId = assetTransfer.destFloorId;
|
|
|
|
|
destDepartmentId = assetTransfer.destDepartmentId;
|
|
|
|
|
destRoom = assetTransfer.destRoom;
|
|
|
|
|
senderSiteId = assetTransfer.senderSiteId;
|
|
|
|
|
senderBuildingId = assetTransfer.senderBuildingId;
|
|
|
|
|
senderFloorId = assetTransfer.senderFloorId;
|
|
|
|
|
senderDepartmentId = assetTransfer.senderDepartmentId;
|
|
|
|
|
senderRoom = assetTransfer.senderRoom;
|
|
|
|
|
senderAssignedEmployeeId = assetTransfer.senderAssignedEmployeeId;
|
|
|
|
|
senderMachineStatusId = assetTransfer.senderMachineStatusId;
|
|
|
|
|
senderComment = assetTransfer.senderComment;
|
|
|
|
|
senderStartDate = assetTransfer.senderStartDate;
|
|
|
|
|
senderEndDate = assetTransfer.senderEndDate;
|
|
|
|
|
senderWorkingHours = assetTransfer.senderWorkingHours;
|
|
|
|
|
senderTravelingHours = assetTransfer.senderTravelingHours;
|
|
|
|
|
senderEngSignature = assetTransfer.senderEngSignature;
|
|
|
|
|
senderAttachments = assetTransfer.senderAttachments;
|
|
|
|
|
receiverAssignedEmployeeId = assetTransfer.receiverAssignedEmployeeId;
|
|
|
|
|
receiverMachineStatusId = assetTransfer.receiverMachineStatusId;
|
|
|
|
|
receiverComment = assetTransfer.receiverComment;
|
|
|
|
|
receiverStartDate = assetTransfer.receiverStartDate;
|
|
|
|
|
receiverEndDate = assetTransfer.receiverEndDate;
|
|
|
|
|
receiverWorkingHours = assetTransfer.receiverWorkingHours;
|
|
|
|
|
receiverTravelingHours = assetTransfer.receiverTravelingHours;
|
|
|
|
|
receiverEngSignature = assetTransfer.receiverEngSignature;
|
|
|
|
|
receiverAttachments = assetTransfer.receiverAttachments;
|
|
|
|
|
supplierId = assetTransfer.supplierId;
|
|
|
|
|
supplierName = assetTransfer.supplierName;
|
|
|
|
|
destSiteName = assetTransfer.destSiteName;
|
|
|
|
|
destBuildingName = assetTransfer.destBuildingName;
|
|
|
|
|
destFloorName = assetTransfer.destFloorName;
|
|
|
|
|
destDepartmentName = assetTransfer.destDepartmentName;
|
|
|
|
|
senderSiteName = assetTransfer.senderSiteName;
|
|
|
|
|
senderBuildingName = assetTransfer.senderBuildingName;
|
|
|
|
|
senderFloorName = assetTransfer.senderFloorName;
|
|
|
|
|
senderDepartmentName = assetTransfer.senderDepartmentName;
|
|
|
|
|
senderAssignedEmployeeName = assetTransfer.senderAssignedEmployeeName;
|
|
|
|
|
senderMachineStatusName = assetTransfer.senderMachineStatusName;
|
|
|
|
|
senderEngSignatureUrl = assetTransfer.senderEngSignatureUrl;
|
|
|
|
|
receiverAssignedEmployeeName = assetTransfer.receiverAssignedEmployeeName;
|
|
|
|
|
receiverMachineStatusName = assetTransfer.receiverMachineStatusName;
|
|
|
|
|
receiverEngSignatureUrl = assetTransfer.receiverEngSignatureUrl;
|
|
|
|
|
applied = assetTransfer.applied;
|
|
|
|
|
createdOn = assetTransfer.createdOn;
|
|
|
|
|
modifiedOn = assetTransfer.modifiedOn;
|
|
|
|
|
assetSerialNo = assetTransfer.assetSerialNo;
|
|
|
|
|
assetNumber = assetTransfer.assetNumber;
|
|
|
|
|
assetName = assetTransfer.assetName;
|
|
|
|
|
modelId = assetTransfer.modelId;
|
|
|
|
|
modelName = assetTransfer.modelName;
|
|
|
|
|
manufacturerId = assetTransfer.manufacturerId;
|
|
|
|
|
manufacturerName = assetTransfer.manufacturerName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Future<bool> validate(BuildContext context) async {
|
|
|
|
|
if (assetId == null) {
|
|
|
|
|
await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.device}");
|
|
|
|
|