Merge branch 'zaid_development_new' into majd_development_new

main_design2.0
nextwo 2 years ago
commit a85ea2d799

@ -202,8 +202,11 @@ class DeviceTransferProvider extends ChangeNotifier {
"senderEndDate": newModel.timer?.endAt?.toIso8601String(),
"senderTravelingHours": newModel.travelingHours,
"senderAttachmentName": newModel?.signature ?? "",
"destSiteId": oldModel.receiver.client.id,
"destDepartmentId": oldModel.receiver.department.id,
"destSiteId": oldModel.receiver.client?.id,
"destDepartmentId": oldModel.receiver.department?.id,
"destBuildingId": oldModel.receiver.building?.id,
"destFloorId": oldModel.receiver.floor?.id,
"destRoom": oldModel.receiver?.room,
"receiverAssignedEmployeeId": oldModel.receiver.userId,
"receiverMachineStatusId": oldModel.receiver.status.id ?? "",
"receiverComment": oldModel.receiver.comment,
@ -225,8 +228,11 @@ class DeviceTransferProvider extends ChangeNotifier {
"senderEndDate": oldModel.sender.timer?.endAt?.toIso8601String(),
"senderTravelingHours": oldModel.sender.travelingHours,
"senderAttachmentName": oldModel.sender?.signature ?? "",
"destSiteId": newModel.client.id,
"destDepartmentId": newModel.department.id,
"destSiteId": newModel.client?.id,
"destDepartmentId": newModel.department?.id,
"destBuildingId": newModel.building?.id,
"destFloorId": newModel.floor?.id,
"destRoom": newModel.room,
"receiverAssignedEmployeeId": newModel.userId,
"receiverMachineStatusId": newModel.status?.id ?? "",
"receiverComment": newModel.comment,
@ -237,7 +243,7 @@ class DeviceTransferProvider extends ChangeNotifier {
"receiverAttachmentName": newModel?.signature ?? "",
});
}
if (true) {}
//body.addAll(newModel.toJson(isSender));
print(body);
Response response;

@ -80,7 +80,6 @@ class RegularVisitsProvider extends ChangeNotifier {
List<Visit> visits = requestsListJson.map((request) => Visit.fromJson(request)).toList();
this.visits ??= [];
this.visits.addAll(visits);
sortMostRecent(this.visits);
notifyListeners();
if (visits.length == pageItemNumber) {
nextPage = true;
@ -100,12 +99,6 @@ class RegularVisitsProvider extends ChangeNotifier {
return response.statusCode;
}
void sortMostRecent(List<Visit> visits) {
visits.sort((prev, next) => (visitsSearch.mostRecent ?? false)
? DateTime.tryParse(next.createdOn).compareTo(DateTime.tryParse(prev.createdOn))
: DateTime.tryParse(prev.createdOn).compareTo(DateTime.tryParse(next.createdOn)));
}
/// 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

@ -9,6 +9,9 @@ class DeviceTransferInfo {
String comment;
Hospital client;
Department department;
Buildings building;
Floors floor;
String room;
String workingHours;
// DateTime startDate;
@ -34,6 +37,9 @@ class DeviceTransferInfo {
this.status,
this.assignedEmployeeName,
this.timer,
this.building,
this.room,
this.floor,
});
Map<String, String> toJson(bool isSender) {
@ -63,6 +69,19 @@ class DeviceTransferInfo {
userName = old.userName;
client = Hospital.fromHospital(old.client);
department = Department.fromDepartment(old.department);
building = Buildings(
id: old.building?.id,
name: old.building?.name,
value: old.building?.value,
floors: old.building?.floors,
);
floor = Floors(
id: old.floor?.id,
name: old.floor?.name,
value: old.floor?.value,
departments: old.floor?.departments,
);
room = old.room;
workingHours = old.workingHours;
// startDate = old.startDate;
// endDate = old.endDate;
@ -94,6 +113,15 @@ class DeviceTransferInfo {
id: parsedJson["${key}DepartmentId"],
name: parsedJson["${key}DepartmentName"],
),
building: Buildings(
id: parsedJson["${key}BuildingId"],
name: parsedJson["${key}BuildingName"],
),
floor: Floors(
id: parsedJson["${key}FloorId"],
name: parsedJson["${key}FloorName"],
),
room: parsedJson["${key}Room"],
status: Lookup(
id: parsedJson["${key}status"],
name: parsedJson["${key}status"],

@ -75,8 +75,8 @@ class Pentry {
Map<String, dynamic> toMap(int visitId) {
Map<String, dynamic> map = {};
map["visitStatusId"] = ppmVisitStatus?.id.toString();
if (status != null) map["deviceStatusId"] = status?.id.toString();
map["visitStatusId"] = ppmVisitStatus?.id?.toString();
if (status != null) map["deviceStatusId"] = status?.id?.toString();
if (travelingHours != null) map["travelingHours"] = travelingHours;
//if(imageFile != null) map["file_attachement"] = base64Encode(imageFile.readAsBytesSync());
map["actualDate"] = actualVisitDate.toIso8601String();
@ -87,7 +87,7 @@ class Pentry {
map["workingHours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5);
}
if (files?.isNotEmpty ?? false) {
map["vAttachments"] = files.map((file) => {"attachmentName": (file.path.split("/").last + base64Encode(file.readAsBytesSync()))}).toList();
map["vAttachments"] = files.map((file) => {"attachmentName": _isLocalUrl(file.path) ? (file.path.split("/").last + "|" + base64Encode(file.readAsBytesSync())) : file.path}).toList();
}
map["travelingHours"] = travelingHours;
// if(contacts?.isNotEmpty == true) {
@ -105,6 +105,11 @@ class Pentry {
return map;
}
bool _isLocalUrl(String url) {
if (url?.isEmpty != false) return false;
return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\');
}
factory Pentry.fromMap(Map<String, dynamic> map) {
// List<Contact> contacts = [];
// if(map['contacts'] != null){
@ -120,6 +125,7 @@ class Pentry {
List<String> files = [];
if (map["vAttachments"] != null) if (map["vAttachments"] is List) {
List list = map["vAttachments"];
list.removeWhere((element) => (element["attachmentURL"]?.toString() ?? "").isEmpty);
files = list.map((e) => URLs.getFileUrl(e["attachmentName"])).toList();
}
List<PPMCheckList> ppmCheckLists = [];
@ -132,7 +138,7 @@ class Pentry {
calibrationTools = (map['vCalibrationTools'] as List<dynamic>).map((e) => CalibrationTool.fromMap(e as Map<String, dynamic>)).toList();
}
return Pentry(
status: Lookup(id: map["taskStatusId"], name: map["taskStatusName"]),
status: Lookup(id: map["deviceStatusId"], name: map["deviceStatusName"]),
ppmVisitStatus: Lookup(id: map["visitStatusId"], name: map["visitStatusName"]),
actualVisitDate: DateTime.tryParse(map["actualDate"] ?? ""),
expectedVisitDate: DateTime.tryParse(map["expectedDate"] ?? ""),
@ -146,7 +152,11 @@ class Pentry {
ppmCheckLists: ppmCheckLists,
calibrationTools: calibrationTools,
pmKits: pmKits,
files: files.map((e) => File(e)).toList(),
files: files?.map((e) {
print("${map["id"]}:${files?.length}:e:$e");
return File(e);
})?.toList() ??
[],
signatureNurse: URLs.getFileUrl(map["nurseSignature"]),
signatureEngineer: URLs.getFileUrl(map["engSignature"]),
);

@ -144,13 +144,13 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
ASmallButton(
text: _subtitle.edit,
onPressed: (_isSender)
? () {
? ( _model.sender.status?.name=="Closed" ? null: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => UpdateDeviceTransfer(
model: _model,
isSender: true,
)));
}
})
: null,
),
],
@ -170,13 +170,13 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
ASmallButton(
text: _subtitle.edit,
onPressed: (_isReceiver)
? () {
? ( _model.receiver.status?.name=="Closed" ? null: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => UpdateDeviceTransfer(
model: _model,
isSender: false,
)));
}
})
: null,
),
],

@ -156,43 +156,13 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
},
),
if (_formModel.device != null) 8.height,
if (_formModel.device != null) const ASubTitle("Asset Site"),
if (_formModel.device != null)
Container(
width: double.infinity,
alignment: Alignment.center,
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16),
decoration: BoxDecoration(
color: AColors.inputFieldBackgroundColor,
border: Border.all(
color: const Color(0xffefefef),
),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
// boxShadow: const [
// AppStyle.boxShadow
// ]
),
child: ASubTitle(_formModel.device?.hospital?.name),
),
if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Site", value: _formModel.device.hospital?.name),
if (_formModel.device != null) 4.height,
if (_formModel.device != null && _formModel.device.destDepartmentName != null) const ASubTitle("Asset Department"),
if (_formModel.device != null && _formModel.device.destDepartmentName != null)
Container(
width: double.infinity,
alignment: Alignment.center,
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16),
decoration: BoxDecoration(
color: AColors.inputFieldBackgroundColor,
border: Border.all(
color: const Color(0xffefefef),
),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
// boxShadow: const [
// AppStyle.boxShadow
// ]
),
child: ASubTitle(_formModel.device.destDepartmentName.toString()),
),
if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Department", value: _formModel.device.destDepartmentName),
if (_formModel.device != null) 4.height,
if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Floor", value: _formModel.device.destFloor),
if (_formModel.device != null) 4.height,
if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Room", value: _formModel.device.destRoom),
if (_formModel.device != null) 8.height,
// const SizedBox(height: 8,),
// const ASubTitle("Sender Department"),
@ -323,3 +293,31 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
);
}
}
class AdditionalAssetInfo extends StatelessWidget {
final String title, value;
const AdditionalAssetInfo({@required this.title, @required this.value, Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ASubTitle(title ?? ""),
Container(
width: double.infinity,
alignment: Alignment.center,
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16),
decoration: BoxDecoration(
color: AColors.inputFieldBackgroundColor,
border: Border.all(
color: const Color(0xffefefef),
),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
),
child: ASubTitle(value ?? ""),
),
],
);
}
}

@ -34,7 +34,7 @@ class GasRefillDetails extends StatefulWidget {
}
class _GasRefillDetailsState extends State<GasRefillDetails> {
final GasRefillModel _model = GasRefillModel();
GasRefillModel _model = GasRefillModel();
bool _enableEdit = false;
bool _validate = false;
UserProvider _userProvider;
@ -75,7 +75,7 @@ class _GasRefillDetailsState extends State<GasRefillDetails> {
@override
void initState() {
_model.fromGasRefillModel(widget.model);
_model?.fromGasRefillModel(widget.model);
super.initState();
}
@ -121,24 +121,28 @@ class _GasRefillDetailsState extends State<GasRefillDetails> {
color: Theme.of(context).colorScheme.onPrimary,
buttonSize: 42,
backgroundColor: AColors.green,
onPressed: () async {
// _enableEdit = !_enableEdit;
print(widget.model.startDate);
_model.fromGasRefillModel(widget.model);
print(widget.model.startDate);
// setState(() {});
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => RequestGasRefill(
gasRefillModel: widget.model,
),
),
).then((value) {
_model.status = value;
});
setState(() {});
},
onPressed: (widget.model.status?.value ?? 0) == 2
? null
: () async {
// _enableEdit = !_enableEdit;
print(widget.model.startDate);
_model?.fromGasRefillModel(widget.model);
print(widget.model.startDate);
// setState(() {});
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => RequestGasRefill(
gasRefillModel: widget.model,
),
),
).then((value) {
if (value != null) {
_model = value;
}
});
setState(() {});
},
),
const SizedBox(
width: 16,
@ -168,6 +172,10 @@ class _GasRefillDetailsState extends State<GasRefillDetails> {
title: "Floor",
info: _model.floor?.name,
),
RequestInfoRow(
title: "Department",
info: _model.department?.departmentName,
),
RequestInfoRow(
title: _subtitle.startDate,
info: _model.startDate == null ? null : "${DateFormat.yMd().format(_model.startDate)} ${DateFormat.Hms().format(_model.startDate)}",

@ -104,7 +104,7 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
Fluttertoast.showToast(
msg: _subtitle.requestCompleteSuccessfully,
);
Navigator.of(context).pop(_formModel.status);
Navigator.of(context).pop(_formModel);
setState(() {});
} else {
String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle);
@ -294,6 +294,8 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
onChange: (timer) async {
_gasRefillProvider.timer = timer;
_formModel.workingHours = num.tryParse((((timer?.durationInSecond ?? 0) / 60) / 60)?.toStringAsFixed(2) ?? "0");
_formModel.startDate = timer.startAt;
_formModel.endDate = timer.endAt;
return true;
},
),
@ -533,12 +535,12 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
if (widget.gasRefillModel != null)
ESignature(
oldSignature: _formModel.signatureEngineer,
newSignature: _formModel.localNurseSignature,
newSignature: _formModel.localEngineerSignature,
onChange: (signature) {
if (signature == null || signature.isEmpty) {
return;
}
_formModel.localNurseSignature = signature;
_formModel.localEngineerSignature = signature;
_formModel.signatureEngineer = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
},
),

@ -545,7 +545,6 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
ServiceReportFaultDescription(
requestId: widget.request?.id,
initialValue: _serviceReport.faultDescription,
enabled: false,
onSelect: (status) {
if (status != null) {
_serviceReport.faultDescription = status;

@ -716,9 +716,10 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
requestId: widget.request?.id,
initialValue: _serviceReport.faultDescription,
onSelect: (status) {
print("faluttt:${status?.toJson()}");
_serviceReport.faultDescription = status;
if (mounted) setState(() {});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
if (mounted) setState(() {});
});
},
),
const SizedBox(height: 8),

@ -57,7 +57,9 @@ class _PentryInfoFormState extends State<PentryInfoForm> {
PentryVisitsStatusMenu(
initialValue: widget.model.ppmVisitStatus,
onSelect: (status) {
widget.model.ppmVisitStatus = status;
if (status != null) {
widget.model.ppmVisitStatus = status;
}
},
),
const SizedBox(

@ -7,9 +7,8 @@ class FaultDescriptionMenu extends StatefulWidget {
final List<FaultDescription> statuses;
final FaultDescription initialStatus;
final Function(FaultDescription) onSelect;
final bool enabled;
const FaultDescriptionMenu({Key key, this.statuses, this.onSelect, this.initialStatus, this.enabled}) : super(key: key);
const FaultDescriptionMenu({Key key, this.statuses, this.onSelect, this.initialStatus}) : super(key: key);
@override
_SingleStatusMenuState createState() => _SingleStatusMenuState();
@ -72,42 +71,39 @@ class _SingleStatusMenuState extends State<FaultDescriptionMenu> {
// AppStyle.boxShadow
// ]
),
child: IgnorePointer(
ignoring: !widget.enabled,
child: DropdownButton<FaultDescription>(
value: _selectedStatus,
iconSize: 24,
icon: const Icon(Icons.keyboard_arrow_down_rounded),
elevation: 0,
isExpanded: true,
hint: Text(
"Select",
style: Theme.of(context).textTheme.subtitle1,
),
style: TextStyle(color: Theme.of(context).primaryColor),
underline: SizedBox.shrink(),
onChanged: (FaultDescription newValue) {
setState(() {
_selectedStatus = newValue;
});
widget.onSelect(newValue);
},
items: widget.statuses.map<DropdownMenuItem<FaultDescription>>(
(FaultDescription value) {
return DropdownMenuItem<FaultDescription>(
value: value,
child: Text(
value.defectName ?? "",
style: Theme.of(context).textTheme.subtitle1.copyWith(
color: Theme.of(context).primaryColor,
fontSize: 11,
//fontWeight: FontWeight.bold
),
),
);
},
).toList(),
child: DropdownButton<FaultDescription>(
value: _selectedStatus,
iconSize: 24,
icon: const Icon(Icons.keyboard_arrow_down_rounded),
elevation: 0,
isExpanded: true,
hint: Text(
"Select",
style: Theme.of(context).textTheme.subtitle1.copyWith(color: widget.statuses.isEmpty ? Colors.grey : null),
),
style: TextStyle(color: Theme.of(context).primaryColor),
underline: const SizedBox.shrink(),
onChanged: (FaultDescription newValue) {
setState(() {
_selectedStatus = newValue;
});
widget.onSelect(newValue);
},
items: widget.statuses.map<DropdownMenuItem<FaultDescription>>(
(FaultDescription value) {
return DropdownMenuItem<FaultDescription>(
value: value,
child: Text(
value.defectName ?? "",
style: Theme.of(context).textTheme.subtitle1.copyWith(
color: Theme.of(context).primaryColor,
fontSize: 11,
//fontWeight: FontWeight.bold
),
),
);
},
).toList(),
),
);
}

@ -11,9 +11,9 @@ class ServiceReportFaultDescription extends StatelessWidget {
final String requestId;
final Function(FaultDescription) onSelect;
final FaultDescription initialValue;
final bool enabled;
const ServiceReportFaultDescription({Key key, this.requestId, this.onSelect, this.initialValue, this.enabled = true}) : super(key: key);
const ServiceReportFaultDescription({Key key, this.requestId, this.onSelect, this.initialValue}) : super(key: key);
@override
Widget build(BuildContext context) {
SettingProvider settingProvider = Provider.of<SettingProvider>(context);
@ -27,19 +27,11 @@ class ServiceReportFaultDescription extends StatelessWidget {
menuProvider.reset();
await menuProvider.getCallRequestForWorkOrder(user: userProvider.user, host: settingProvider.host, requestId: requestId);
},
child: Builder(builder: (context) {
if (initialValue == null && !enabled && menuProvider.items.isNotEmpty) {
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
onSelect(menuProvider.items.first);
});
}
return FaultDescriptionMenu(
initialStatus: initialValue,
statuses: menuProvider.items,
onSelect: onSelect,
enabled: enabled,
);
}),
child: FaultDescriptionMenu(
initialStatus: initialValue,
statuses: menuProvider.items ?? [],
onSelect: onSelect,
),
);
}
}

Loading…
Cancel
Save