Merge branch 'master' into faiz_dev
# Conflicts: # lib/core/api/api_client.dart # lib/core/app_assets.dart # lib/core/utils/date_util.dart # lib/features/emergency_services/emergency_services_repo.dart # lib/features/emergency_services/emergency_services_view_model.dart # lib/presentation/emergency_services/emergency_services_page.dart # lib/widgets/common_bottom_sheet.dartpull/98/head
commit
8ddfdeeac4
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 543 KiB |
@ -0,0 +1,5 @@
|
||||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.49411 2.85661C9.06887 2.71829 8.56575 2.71849 7.82926 2.71878L5.20973 2.7188C4.36011 2.71878 3.66581 2.71877 3.11767 2.79255C2.5447 2.86967 2.04795 3.03656 1.65143 3.43352C1.25491 3.83049 1.0882 4.32779 1.01117 4.90139C0.93747 5.45014 0.937484 6.14521 0.9375 6.99576V10.0798C0.937484 10.9303 0.93747 11.6254 1.01117 12.1741C1.0882 12.7477 1.25491 13.245 1.65143 13.642C1.76583 13.7565 1.89283 13.8531 2.02893 13.9345C2.22063 14.0492 2.31647 14.1065 2.39389 14.059C2.47131 14.0115 2.46224 13.8786 2.44411 13.6127C2.43973 13.5484 2.4375 13.4836 2.4375 13.4181C2.4375 11.8631 3.6967 10.6025 5.25 10.6025C6.8033 10.6025 8.0625 11.8631 8.0625 13.4181C8.0625 13.5947 8.04626 13.7675 8.01519 13.9351C7.97875 14.1317 7.96053 14.23 8.00499 14.2841C8.04945 14.3381 8.14092 14.3389 8.32387 14.3406C8.77449 14.3448 9.22551 14.3448 9.67614 14.3406C9.85908 14.3389 9.95055 14.3381 9.99501 14.2841C10.0395 14.23 10.0213 14.1317 9.98481 13.9351C9.95374 13.7675 9.9375 13.5947 9.9375 13.4181C9.9375 11.8631 11.1967 10.6025 12.75 10.6025C14.3033 10.6025 15.5625 11.8631 15.5625 13.4181C15.5625 13.4835 15.5603 13.5484 15.5559 13.6127C15.5378 13.8786 15.5287 14.0115 15.6061 14.059C15.6835 14.1065 15.7794 14.0492 15.9711 13.9345C16.1072 13.8531 16.2342 13.7565 16.3486 13.642C16.7451 13.245 16.9118 12.7477 16.9888 12.1741C17.0625 11.6254 17.0625 10.9303 17.0625 10.0798V8.55433C17.0654 8.4286 17.0367 8.30042 16.9729 8.18177L15.9988 6.37069C15.7544 5.91626 15.5451 5.52708 15.3388 5.22173C15.1184 4.89536 14.8689 4.61351 14.5195 4.40455C14.17 4.19558 13.8038 4.10932 13.4123 4.06973C13.046 4.0327 12.6044 4.03272 12.0889 4.03274L11.2524 4.03274C11.1353 4.03274 11.0767 4.03274 11.0295 4.00933C10.9823 3.98592 10.9424 3.93349 10.8626 3.82864C10.5202 3.37853 10.0455 3.03597 9.49411 2.85661ZM11.7406 5.53441C11.5945 5.53441 11.5214 5.53441 11.4773 5.57901C11.4333 5.62362 11.4342 5.69802 11.4359 5.84684C11.4377 5.99664 11.4376 6.15736 11.4375 6.33106C11.4375 6.93389 11.4444 7.20613 11.4834 7.32612C11.5761 7.61185 11.7999 7.83587 12.0853 7.92871C12.2052 7.96769 12.3728 7.97464 12.975 7.97464H14.6556C14.8798 7.97464 14.9919 7.97464 15.0355 7.90148C15.0792 7.82832 15.026 7.72952 14.9197 7.53192L14.6949 7.11386C14.429 6.61959 14.2551 6.29803 14.0963 6.06291C13.9469 5.84183 13.845 5.75037 13.7503 5.69375C13.6556 5.63714 13.5268 5.59062 13.2616 5.5638C12.9795 5.53529 12.6142 5.53441 12.0535 5.53441H11.7406ZM4.5001 5.53125C4.91431 5.53125 5.2501 5.86704 5.2501 6.28125V7.78125C5.2501 8.19546 4.91431 8.53125 4.5001 8.53125C4.08589 8.53125 3.7501 8.19546 3.7501 7.78125V6.28125C3.7501 5.86704 4.08589 5.53125 4.5001 5.53125ZM7.5001 5.53125C7.91431 5.53125 8.2501 5.86704 8.2501 6.28125V7.78125C8.2501 8.19546 7.91431 8.53125 7.5001 8.53125C7.08589 8.53125 6.7501 8.19546 6.7501 7.78125V6.28125C6.7501 5.86704 7.08589 5.53125 7.5001 5.53125Z" fill="#2E3039"/>
|
||||
<path d="M5.25 11.5312C4.21447 11.5312 3.375 12.3707 3.375 13.4062C3.375 14.4418 4.21447 15.2812 5.25 15.2812C6.28553 15.2812 7.125 14.4418 7.125 13.4062C7.125 12.3707 6.28553 11.5312 5.25 11.5312Z" fill="#2E3039"/>
|
||||
<path d="M12.75 11.5312C11.7145 11.5312 10.875 12.3707 10.875 13.4062C10.875 14.4418 11.7145 15.2812 12.75 15.2812C13.7855 15.2812 14.625 14.4418 14.625 13.4062C14.625 12.3707 13.7855 11.5312 12.75 11.5312Z" fill="#2E3039"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 10 KiB |
@ -0,0 +1,3 @@
|
||||
enum OrderDislpay{
|
||||
ALL,RRT,AMBULANCE
|
||||
}
|
||||
@ -0,0 +1,75 @@
|
||||
class RRTRequestModel {
|
||||
num? patientId;
|
||||
int? patientOutSa;
|
||||
bool? isOutPatient;
|
||||
int? nearestProjectId;
|
||||
num? longitude;
|
||||
num? latitude;
|
||||
String? additionalDetails;
|
||||
String? nationality;
|
||||
num? paymentAmount;
|
||||
List<Procedures>? procedures;
|
||||
|
||||
RRTRequestModel(
|
||||
{this.patientId,
|
||||
this.patientOutSa,
|
||||
this.isOutPatient,
|
||||
this.nearestProjectId,
|
||||
this.longitude,
|
||||
this.latitude,
|
||||
this.additionalDetails,
|
||||
this.nationality,
|
||||
this.paymentAmount,
|
||||
this.procedures});
|
||||
|
||||
RRTRequestModel.fromJson(Map<String, dynamic> json) {
|
||||
patientId = json['patientId'];
|
||||
patientOutSa = json['patientOutSa'];
|
||||
isOutPatient = json['isOutPatient'];
|
||||
nearestProjectId = json['nearestProjectId'];
|
||||
longitude = json['longitude'];
|
||||
latitude = json['latitude'];
|
||||
additionalDetails = json['additionalDetails'];
|
||||
nationality = json['nationality'];
|
||||
paymentAmount = json['paymentAmount'];
|
||||
if (json['procedures'] != null) {
|
||||
procedures = <Procedures>[];
|
||||
json['procedures'].forEach((v) {
|
||||
procedures!.add(new Procedures.fromJson(v));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['patientId'] = this.patientId;
|
||||
data['patientOutSa'] = this.patientOutSa;
|
||||
data['isOutPatient'] = this.isOutPatient;
|
||||
data['nearestProjectId'] = this.nearestProjectId;
|
||||
data['longitude'] = this.longitude;
|
||||
data['latitude'] = this.latitude;
|
||||
data['additionalDetails'] = this.additionalDetails;
|
||||
data['nationality'] = this.nationality;
|
||||
data['paymentAmount'] = this.paymentAmount;
|
||||
if (this.procedures != null) {
|
||||
data['procedures'] = this.procedures!.map((v) => v.toJson()).toList();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class Procedures {
|
||||
String? serviceID;
|
||||
|
||||
Procedures({this.serviceID});
|
||||
|
||||
Procedures.fromJson(Map<String, dynamic> json) {
|
||||
serviceID = json['ServiceID'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['ServiceID'] = this.serviceID;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,53 @@
|
||||
class ServicePrice {
|
||||
String? currency;
|
||||
dynamic maxPrice;
|
||||
dynamic maxTotalPrice;
|
||||
dynamic maxVAT;
|
||||
dynamic minPrice;
|
||||
dynamic minTotalPrice;
|
||||
dynamic minVAT;
|
||||
dynamic price;
|
||||
dynamic totalPrice;
|
||||
dynamic vat;
|
||||
|
||||
ServicePrice({
|
||||
this.currency,
|
||||
this.maxPrice,
|
||||
this.maxTotalPrice,
|
||||
this.maxVAT,
|
||||
this.minPrice,
|
||||
this.minTotalPrice,
|
||||
this.minVAT,
|
||||
this.price,
|
||||
this.totalPrice,
|
||||
this.vat});
|
||||
|
||||
ServicePrice.fromJson(dynamic json) {
|
||||
currency = json["Currency"];
|
||||
maxPrice = json["MaxPrice"];
|
||||
maxTotalPrice = json["MaxTotalPrice"];
|
||||
maxVAT = json["MaxVAT"];
|
||||
minPrice = json["MinPrice"];
|
||||
minTotalPrice = json["MinTotalPrice"];
|
||||
minVAT = json["MinVAT"];
|
||||
price = json["Price"];
|
||||
totalPrice = json["TotalPrice"];
|
||||
vat = json["VAT"];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
var map = <String, dynamic>{};
|
||||
map["Currency"] = currency;
|
||||
map["MaxPrice"] = maxPrice;
|
||||
map["MaxTotalPrice"] = maxTotalPrice;
|
||||
map["MaxVAT"] = maxVAT;
|
||||
map["MinPrice"] = minPrice;
|
||||
map["MinTotalPrice"] = minTotalPrice;
|
||||
map["MinVAT"] = minVAT;
|
||||
map["Price"] = price;
|
||||
map["TotalPrice"] = totalPrice;
|
||||
map["VAT"] = vat;
|
||||
return map;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,406 @@
|
||||
class RRTServiceData {
|
||||
List<GetCMCAllOrdersResponseModel> pendingOrders = [];
|
||||
List<GetCMCAllOrdersResponseModel> completedOrders = [];
|
||||
ServicePrice servicePrice = ServicePrice();
|
||||
}
|
||||
|
||||
class GetCMCAllOrdersResponseModel {
|
||||
int? iD;
|
||||
int? patientId;
|
||||
int? patientOutSa;
|
||||
bool? isOutPatient;
|
||||
int? projectId;
|
||||
int? nearestProjectId;
|
||||
dynamic longitude;
|
||||
dynamic latitude;
|
||||
dynamic appointmentNo;
|
||||
dynamic dischargeId;
|
||||
int? statusId;
|
||||
int? serviceId;
|
||||
int? channel;
|
||||
Orderpayment? orderpayment;
|
||||
dynamic orderselectedservice;
|
||||
dynamic wforder;
|
||||
dynamic orderapprovalobj;
|
||||
String? created;
|
||||
dynamic createdBy;
|
||||
dynamic modified;
|
||||
dynamic modifiedBy;
|
||||
bool? isDeleted;
|
||||
String? statusText;
|
||||
int? paymentStatus;
|
||||
dynamic clientRequestid;
|
||||
dynamic paymentStatusText;
|
||||
String? projectName;
|
||||
String? nearestProjectName;
|
||||
dynamic paymentAmount;
|
||||
WFOrder? wFOrder;
|
||||
String? serviceText;
|
||||
bool? isSentForApproval;
|
||||
int? exaCartOrderId;
|
||||
bool? isTimer;
|
||||
int? timeSeconds;
|
||||
int? totalPendingSeconds;
|
||||
int? timeMinute;
|
||||
int? timeHour;
|
||||
int? timeTotalSeconds;
|
||||
int? timeTotalMinute;
|
||||
int? timeTotalHour;
|
||||
dynamic approvalStatus;
|
||||
bool? isActive;
|
||||
int? clickButton;
|
||||
List<dynamic>? procedures;
|
||||
dynamic pickupLocation;
|
||||
dynamic dropOffLocation;
|
||||
dynamic clinicName;
|
||||
dynamic doctorName;
|
||||
dynamic branch;
|
||||
dynamic time;
|
||||
dynamic notes;
|
||||
|
||||
GetCMCAllOrdersResponseModel(
|
||||
{this.iD,
|
||||
this.patientId,
|
||||
this.patientOutSa,
|
||||
this.isOutPatient,
|
||||
this.projectId,
|
||||
this.nearestProjectId,
|
||||
this.longitude,
|
||||
this.latitude,
|
||||
this.appointmentNo,
|
||||
this.dischargeId,
|
||||
this.statusId,
|
||||
this.serviceId,
|
||||
this.channel,
|
||||
this.orderpayment,
|
||||
this.orderselectedservice,
|
||||
this.wforder,
|
||||
this.orderapprovalobj,
|
||||
this.created,
|
||||
this.createdBy,
|
||||
this.modified,
|
||||
this.modifiedBy,
|
||||
this.isDeleted,
|
||||
this.statusText,
|
||||
this.paymentStatus,
|
||||
this.clientRequestid,
|
||||
this.paymentStatusText,
|
||||
this.projectName,
|
||||
this.nearestProjectName,
|
||||
this.paymentAmount,
|
||||
this.wFOrder,
|
||||
this.serviceText,
|
||||
this.isSentForApproval,
|
||||
this.exaCartOrderId,
|
||||
this.isTimer,
|
||||
this.timeSeconds,
|
||||
this.totalPendingSeconds,
|
||||
this.timeMinute,
|
||||
this.timeHour,
|
||||
this.timeTotalSeconds,
|
||||
this.timeTotalMinute,
|
||||
this.timeTotalHour,
|
||||
this.approvalStatus,
|
||||
this.isActive,
|
||||
this.clickButton,
|
||||
this.procedures,
|
||||
this.pickupLocation,
|
||||
this.dropOffLocation,
|
||||
this.clinicName,
|
||||
this.doctorName,
|
||||
this.branch,
|
||||
this.time,
|
||||
this.notes});
|
||||
|
||||
GetCMCAllOrdersResponseModel.fromJson(Map<String, dynamic> json) {
|
||||
iD = json['ID'];
|
||||
patientId = json['PatientId'];
|
||||
patientOutSa = json['PatientOutSa'];
|
||||
isOutPatient = json['IsOutPatient'];
|
||||
projectId = json['ProjectId'];
|
||||
nearestProjectId = json['NearestProjectId'];
|
||||
longitude = json['Longitude'];
|
||||
latitude = json['Latitude'];
|
||||
appointmentNo = json['AppointmentNo'];
|
||||
dischargeId = json['DischargeId'];
|
||||
statusId = json['StatusId'];
|
||||
serviceId = json['ServiceId'];
|
||||
channel = json['Channel'];
|
||||
orderpayment = json['orderpayment'] != null
|
||||
? new Orderpayment.fromJson(json['orderpayment'])
|
||||
: null;
|
||||
orderselectedservice = json['orderselectedservice'];
|
||||
wforder = json['wforder'];
|
||||
orderapprovalobj = json['orderapprovalobj'];
|
||||
created = json['Created'];
|
||||
createdBy = json['CreatedBy'];
|
||||
modified = json['Modified'];
|
||||
modifiedBy = json['ModifiedBy'];
|
||||
isDeleted = json['IsDeleted'];
|
||||
statusText = json['StatusText'];
|
||||
paymentStatus = json['PaymentStatus'];
|
||||
clientRequestid = json['ClientRequestid'];
|
||||
paymentStatusText = json['PaymentStatusText'];
|
||||
projectName = json['ProjectName'];
|
||||
nearestProjectName = json['NearestProjectName'];
|
||||
paymentAmount = json['PaymentAmount'];
|
||||
wFOrder = json['WF_order'] != null
|
||||
? new WFOrder.fromJson(json['WF_order'])
|
||||
: null;
|
||||
serviceText = json['ServiceText'];
|
||||
isSentForApproval = json['isSentForApproval'];
|
||||
exaCartOrderId = json['ExaCart_OrderId'];
|
||||
isTimer = json['isTimer'];
|
||||
timeSeconds = json['TimeSeconds'];
|
||||
totalPendingSeconds = json['TotalPendingSeconds'];
|
||||
timeMinute = json['TimeMinute'];
|
||||
timeHour = json['TimeHour'];
|
||||
timeTotalSeconds = json['TimeTotalSeconds'];
|
||||
timeTotalMinute = json['TimeTotalMinute'];
|
||||
timeTotalHour = json['TimeTotalHour'];
|
||||
approvalStatus = json['ApprovalStatus'];
|
||||
isActive = json['isActive'];
|
||||
clickButton = json['ClickButton'];
|
||||
pickupLocation = json['PickupLocation'];
|
||||
dropOffLocation = json['DropOffLocation'];
|
||||
clinicName = json['clinicName'];
|
||||
doctorName = json['DoctorName'];
|
||||
branch = json['Branch'];
|
||||
time = json['Time'];
|
||||
notes = json['Notes'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['ID'] = this.iD;
|
||||
data['PatientId'] = this.patientId;
|
||||
data['PatientOutSa'] = this.patientOutSa;
|
||||
data['IsOutPatient'] = this.isOutPatient;
|
||||
data['ProjectId'] = this.projectId;
|
||||
data['NearestProjectId'] = this.nearestProjectId;
|
||||
data['Longitude'] = this.longitude;
|
||||
data['Latitude'] = this.latitude;
|
||||
data['AppointmentNo'] = this.appointmentNo;
|
||||
data['DischargeId'] = this.dischargeId;
|
||||
data['StatusId'] = this.statusId;
|
||||
data['ServiceId'] = this.serviceId;
|
||||
data['Channel'] = this.channel;
|
||||
if (this.orderpayment != null) {
|
||||
data['orderpayment'] = this.orderpayment!.toJson();
|
||||
}
|
||||
data['orderselectedservice'] = this.orderselectedservice;
|
||||
|
||||
data['wforder'] = this.wforder;
|
||||
data['orderapprovalobj'] = this.orderapprovalobj;
|
||||
data['Created'] = this.created;
|
||||
data['CreatedBy'] = this.createdBy;
|
||||
data['Modified'] = this.modified;
|
||||
data['ModifiedBy'] = this.modifiedBy;
|
||||
data['IsDeleted'] = this.isDeleted;
|
||||
data['StatusText'] = this.statusText;
|
||||
data['PaymentStatus'] = this.paymentStatus;
|
||||
data['ClientRequestid'] = this.clientRequestid;
|
||||
data['PaymentStatusText'] = this.paymentStatusText;
|
||||
data['ProjectName'] = this.projectName;
|
||||
data['NearestProjectName'] = this.nearestProjectName;
|
||||
data['PaymentAmount'] = this.paymentAmount;
|
||||
if (this.wFOrder != null) {
|
||||
data['WF_order'] = this.wFOrder!.toJson();
|
||||
}
|
||||
data['ServiceText'] = this.serviceText;
|
||||
data['isSentForApproval'] = this.isSentForApproval;
|
||||
data['ExaCart_OrderId'] = this.exaCartOrderId;
|
||||
data['isTimer'] = this.isTimer;
|
||||
data['TimeSeconds'] = this.timeSeconds;
|
||||
data['TotalPendingSeconds'] = this.totalPendingSeconds;
|
||||
data['TimeMinute'] = this.timeMinute;
|
||||
data['TimeHour'] = this.timeHour;
|
||||
data['TimeTotalSeconds'] = this.timeTotalSeconds;
|
||||
data['TimeTotalMinute'] = this.timeTotalMinute;
|
||||
data['TimeTotalHour'] = this.timeTotalHour;
|
||||
data['ApprovalStatus'] = this.approvalStatus;
|
||||
data['isActive'] = this.isActive;
|
||||
data['ClickButton'] = this.clickButton;
|
||||
data['PickupLocation'] = this.pickupLocation;
|
||||
data['DropOffLocation'] = this.dropOffLocation;
|
||||
data['clinicName'] = this.clinicName;
|
||||
data['DoctorName'] = this.doctorName;
|
||||
data['Branch'] = this.branch;
|
||||
data['Time'] = this.time;
|
||||
data['Notes'] = this.notes;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class Orderpayment {
|
||||
int? iD;
|
||||
int? orderId;
|
||||
dynamic clientRequestId;
|
||||
dynamic totalAmount;
|
||||
int? paymentStatus;
|
||||
dynamic order;
|
||||
String? created;
|
||||
dynamic createdBy;
|
||||
dynamic modified;
|
||||
dynamic modifiedBy;
|
||||
bool? isDeleted;
|
||||
|
||||
Orderpayment(
|
||||
{this.iD,
|
||||
this.orderId,
|
||||
this.clientRequestId,
|
||||
this.totalAmount,
|
||||
this.paymentStatus,
|
||||
this.order,
|
||||
this.created,
|
||||
this.createdBy,
|
||||
this.modified,
|
||||
this.modifiedBy,
|
||||
this.isDeleted});
|
||||
|
||||
Orderpayment.fromJson(Map<String, dynamic> json) {
|
||||
iD = json['ID'];
|
||||
orderId = json['OrderId'];
|
||||
clientRequestId = json['ClientRequestId'];
|
||||
totalAmount = json['TotalAmount'];
|
||||
paymentStatus = json['PaymentStatus'];
|
||||
order = json['Order'];
|
||||
created = json['Created'];
|
||||
createdBy = json['CreatedBy'];
|
||||
modified = json['Modified'];
|
||||
modifiedBy = json['ModifiedBy'];
|
||||
isDeleted = json['IsDeleted'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['ID'] = this.iD;
|
||||
data['OrderId'] = this.orderId;
|
||||
data['ClientRequestId'] = this.clientRequestId;
|
||||
data['TotalAmount'] = this.totalAmount;
|
||||
data['PaymentStatus'] = this.paymentStatus;
|
||||
data['Order'] = this.order;
|
||||
data['Created'] = this.created;
|
||||
data['CreatedBy'] = this.createdBy;
|
||||
data['Modified'] = this.modified;
|
||||
data['ModifiedBy'] = this.modifiedBy;
|
||||
data['IsDeleted'] = this.isDeleted;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class WFOrder {
|
||||
dynamic wfButtonsDTO;
|
||||
int? iD;
|
||||
int? orderId;
|
||||
int? previousStep;
|
||||
int? nextStep;
|
||||
int? serviceId;
|
||||
dynamic order;
|
||||
String? created;
|
||||
dynamic createdBy;
|
||||
dynamic modified;
|
||||
dynamic modifiedBy;
|
||||
bool? isDeleted;
|
||||
|
||||
WFOrder(
|
||||
{this.wfButtonsDTO,
|
||||
this.iD,
|
||||
this.orderId,
|
||||
this.previousStep,
|
||||
this.nextStep,
|
||||
this.serviceId,
|
||||
this.order,
|
||||
this.created,
|
||||
this.createdBy,
|
||||
this.modified,
|
||||
this.modifiedBy,
|
||||
this.isDeleted});
|
||||
|
||||
WFOrder.fromJson(Map<String, dynamic> json) {
|
||||
wfButtonsDTO = json['wf_ButtonsDTO'];
|
||||
iD = json['ID'];
|
||||
orderId = json['OrderId'];
|
||||
previousStep = json['PreviousStep'];
|
||||
nextStep = json['NextStep'];
|
||||
serviceId = json['ServiceId'];
|
||||
order = json['Order'];
|
||||
created = json['Created'];
|
||||
createdBy = json['CreatedBy'];
|
||||
modified = json['Modified'];
|
||||
modifiedBy = json['ModifiedBy'];
|
||||
isDeleted = json['IsDeleted'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['wf_ButtonsDTO'] = this.wfButtonsDTO;
|
||||
data['ID'] = this.iD;
|
||||
data['OrderId'] = this.orderId;
|
||||
data['PreviousStep'] = this.previousStep;
|
||||
data['NextStep'] = this.nextStep;
|
||||
data['ServiceId'] = this.serviceId;
|
||||
data['Order'] = this.order;
|
||||
data['Created'] = this.created;
|
||||
data['CreatedBy'] = this.createdBy;
|
||||
data['Modified'] = this.modified;
|
||||
data['ModifiedBy'] = this.modifiedBy;
|
||||
data['IsDeleted'] = this.isDeleted;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class ServicePrice {
|
||||
String? currency;
|
||||
dynamic maxPrice;
|
||||
dynamic maxTotalPrice;
|
||||
dynamic maxVAT;
|
||||
dynamic minPrice;
|
||||
dynamic minTotalPrice;
|
||||
dynamic minVAT;
|
||||
dynamic price;
|
||||
dynamic totalPrice;
|
||||
dynamic vat;
|
||||
|
||||
ServicePrice({
|
||||
this.currency,
|
||||
this.maxPrice,
|
||||
this.maxTotalPrice,
|
||||
this.maxVAT,
|
||||
this.minPrice,
|
||||
this.minTotalPrice,
|
||||
this.minVAT,
|
||||
this.price,
|
||||
this.totalPrice,
|
||||
this.vat});
|
||||
|
||||
ServicePrice.fromJson(dynamic json) {
|
||||
currency = json["Currency"];
|
||||
maxPrice = json["MaxPrice"];
|
||||
maxTotalPrice = json["MaxTotalPrice"];
|
||||
maxVAT = json["MaxVAT"];
|
||||
minPrice = json["MinPrice"];
|
||||
minTotalPrice = json["MinTotalPrice"];
|
||||
minVAT = json["MinVAT"];
|
||||
price = json["Price"];
|
||||
totalPrice = json["TotalPrice"];
|
||||
vat = json["VAT"];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
var map = <String, dynamic>{};
|
||||
map["Currency"] = currency;
|
||||
map["MaxPrice"] = maxPrice;
|
||||
map["MaxTotalPrice"] = maxTotalPrice;
|
||||
map["MaxVAT"] = maxVAT;
|
||||
map["MinPrice"] = minPrice;
|
||||
map["MinTotalPrice"] = minTotalPrice;
|
||||
map["MinVAT"] = minVAT;
|
||||
map["Price"] = price;
|
||||
map["TotalPrice"] = totalPrice;
|
||||
map["VAT"] = vat;
|
||||
return map;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,636 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hmg_patient_app_new/core/app_assets.dart';
|
||||
import 'package:hmg_patient_app_new/core/app_export.dart';
|
||||
import 'package:hmg_patient_app_new/core/utils/utils.dart';
|
||||
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/features/emergency_services/emergency_services_view_model.dart';
|
||||
import 'package:hmg_patient_app_new/features/emergency_services/models/AmbulanceCallingPlace.dart';
|
||||
import 'package:hmg_patient_app_new/features/location/GeocodeResponse.dart';
|
||||
import 'package:hmg_patient_app_new/features/location/PlaceDetails.dart';
|
||||
import 'package:hmg_patient_app_new/features/location/PlacePrediction.dart';
|
||||
import 'package:hmg_patient_app_new/features/location/location_view_model.dart';
|
||||
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
|
||||
import 'package:hmg_patient_app_new/presentation/appointments/widgets/appointment_doctor_card.dart';
|
||||
import 'package:hmg_patient_app_new/presentation/emergency_services/call_ambulance/widgets/AddressItem.dart';
|
||||
import 'package:hmg_patient_app_new/presentation/emergency_services/call_ambulance/widgets/HospitalBottomSheetBody.dart';
|
||||
import 'package:hmg_patient_app_new/presentation/emergency_services/call_ambulance/widgets/appointment_bottom_sheet.dart' show AppointmentBottomSheet;
|
||||
import 'package:hmg_patient_app_new/presentation/emergency_services/widgets/location_input_bottom_sheet.dart';
|
||||
import 'package:hmg_patient_app_new/theme/colors.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/CustomSwitch.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/expandable_bottom_sheet/ExpandableBottomSheet.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/expandable_bottom_sheet/model/BottomSheetType.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/input_widget.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/map/HMSMap.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/map/map.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '../../../widgets/common_bottom_sheet.dart';
|
||||
|
||||
class RrtMapScreen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
floatingActionButton: Visibility(
|
||||
visible: context.watch<EmergencyServicesViewModel>().bottomSheetType ==
|
||||
BottomSheetType.FIXED,
|
||||
child: Padding(
|
||||
padding: EdgeInsetsDirectional.only(end: 8.h, bottom: 68.h),
|
||||
child: DecoratedBox(
|
||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||
color: AppColors.whiteColor, borderRadius: 12.h),
|
||||
child: Utils.buildSvgWithAssets(
|
||||
icon: AppAssets.locate_me, width: 24.h, height: 24.h)
|
||||
.paddingAll(12.h)
|
||||
.onPress(() {
|
||||
context
|
||||
.read<EmergencyServicesViewModel>()
|
||||
.moveToCurrentLocation();
|
||||
}),
|
||||
),
|
||||
),
|
||||
),
|
||||
bottomSheet: ExpandableBottomSheet(
|
||||
bottomSheetType:
|
||||
context.watch<EmergencyServicesViewModel>().bottomSheetType,
|
||||
children: {
|
||||
BottomSheetType.EXPANDED: ExpanedBottomSheet(context),
|
||||
BottomSheetType.FIXED: FixedBottomSheet(context),
|
||||
},
|
||||
),
|
||||
body: Stack(
|
||||
children: [
|
||||
if (context.read<EmergencyServicesViewModel>().isGMSAvailable )
|
||||
GMSMap(
|
||||
currentLocation:
|
||||
context.read<EmergencyServicesViewModel>().getGMSLocation(),
|
||||
onCameraMoved: (value) => context
|
||||
.read<LocationViewModel>()
|
||||
.handleGMSMapCameraMoved(value),
|
||||
onCameraIdle:
|
||||
context.read<LocationViewModel>().handleOnCameraIdle,
|
||||
myLocationEnabled: true,
|
||||
inputController:
|
||||
context.read<EmergencyServicesViewModel>().gmsController,
|
||||
showCenterMarker: true,
|
||||
)
|
||||
else
|
||||
HMSMap(
|
||||
currentLocation:
|
||||
context.read<EmergencyServicesViewModel>().getHMSLocation(),
|
||||
onCameraMoved: (value) => context
|
||||
.read<LocationViewModel>()
|
||||
.handleHMSMapCameraMoved(value),
|
||||
onCameraIdle:
|
||||
context.read<LocationViewModel>().handleOnCameraIdle,
|
||||
myLocationEnabled: false,
|
||||
inputController:
|
||||
context.read<EmergencyServicesViewModel>().hmsController,
|
||||
showCenterMarker: true,
|
||||
),
|
||||
Align(
|
||||
alignment: AlignmentDirectional.topStart,
|
||||
child: Utils.buildSvgWithAssets(
|
||||
icon: AppAssets.closeBottomNav, width: 32.h, height: 32.h)
|
||||
.onPress(() {
|
||||
context
|
||||
.read<EmergencyServicesViewModel>()
|
||||
.flushPickupInformation();
|
||||
Navigator.pop(context);
|
||||
}),
|
||||
).paddingOnly(top: 51.h, left: 24.h),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget FixedBottomSheet(BuildContext context) {
|
||||
return GestureDetector(
|
||||
onVerticalDragUpdate: (details){
|
||||
},
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
spacing: 24.h,
|
||||
children: [
|
||||
inputFields(context),
|
||||
SizedBox(
|
||||
height: 200.h,
|
||||
child: DecoratedBox(
|
||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||
color: AppColors.scaffoldBgColor,
|
||||
customBorder: BorderRadius.only(
|
||||
topLeft: Radius.circular(24.h),
|
||||
topRight: Radius.circular(24.h),
|
||||
),
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
spacing: 24.h,
|
||||
children: [
|
||||
Column(
|
||||
spacing: 4.h,
|
||||
children: [
|
||||
"Select Pickup Details".needTranslation.toText21(
|
||||
weight: FontWeight.w600,
|
||||
color: AppColors.textColor,
|
||||
),
|
||||
" Please select the details of pickup"
|
||||
.needTranslation
|
||||
.toText12(
|
||||
fontWeight: FontWeight.w500,
|
||||
color: AppColors.greyTextColor,
|
||||
)
|
||||
],
|
||||
),
|
||||
CustomButton(
|
||||
text: "Select Details".needTranslation,
|
||||
onPressed: () {
|
||||
LocationViewModel locationViewModel = context.read<LocationViewModel>();
|
||||
GeocodeResponse? response = locationViewModel.geocodeResponse;
|
||||
PlaceDetails? placeDetails = locationViewModel.placeDetails;
|
||||
PlacePrediction? placePrediction = locationViewModel.selectedPrediction;
|
||||
context.read<EmergencyServicesViewModel>().submitRRTRequest(response?.results.first, placeDetails, placePrediction);
|
||||
})
|
||||
],
|
||||
).paddingOnly(top: 24.h, bottom: 32.h, left: 24.h, right: 24.h),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget ExpanedBottomSheet(BuildContext context) {
|
||||
return GestureDetector(
|
||||
onVerticalDragUpdate: (details){
|
||||
if(details.delta.dy>0){
|
||||
context.read<EmergencyServicesViewModel>().updateBottomSheetState(BottomSheetType.FIXED);
|
||||
}
|
||||
},
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
DecoratedBox(
|
||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||
color: AppColors.scaffoldBgColor,
|
||||
customBorder: BorderRadius.only(
|
||||
topLeft: Radius.circular(24.h),
|
||||
topRight: Radius.circular(24.h),
|
||||
),
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
spacing: 16.h,
|
||||
children: [
|
||||
|
||||
hospitalAndPickUpSection(context),
|
||||
|
||||
|
||||
],
|
||||
).paddingOnly(top: 24.h, bottom: 32.h,left: 24.h, right: 24.h),
|
||||
|
||||
bottomPriceContent(context)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
locationsSections(BuildContext context) {
|
||||
return DecoratedBox(
|
||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||
color: AppColors.whiteColor,
|
||||
borderRadius: 24.h,
|
||||
),
|
||||
child: Column(mainAxisSize: MainAxisSize.min, children: [
|
||||
ListView.separated(
|
||||
separatorBuilder: (_, __) => Column(
|
||||
children: [
|
||||
SizedBox(height: 16.h),
|
||||
Divider(
|
||||
color: AppColors.bottomNAVBorder,
|
||||
height: 1,
|
||||
thickness: 1,
|
||||
),
|
||||
SizedBox(height: 16.h),
|
||||
],
|
||||
),
|
||||
shrinkWrap: true,
|
||||
itemCount: 3,
|
||||
itemBuilder: (__, index) {
|
||||
if (index ==
|
||||
2) // todo means the end of the list so handle as per the viewmodel
|
||||
{
|
||||
return CustomButton(
|
||||
height: 40.h,
|
||||
backgroundColor: AppColors.lightRedButtonColor,
|
||||
borderColor: Colors.transparent,
|
||||
text: "Add new address".needTranslation,
|
||||
textColor: AppColors.primaryRedColor,
|
||||
iconColor: AppColors.primaryRedColor,
|
||||
onPressed: () {},
|
||||
icon: AppAssets.add_icon);
|
||||
} else {
|
||||
return AddressItem(
|
||||
isSelected: index == 0,
|
||||
address:
|
||||
"Flat No 301, Building No 12, Palm Spring Apartment, Sector 45, Gurugram, Haryana 122003",
|
||||
title: index == 0
|
||||
? "Home".needTranslation
|
||||
: "Work".needTranslation,
|
||||
onTap: () {},
|
||||
);
|
||||
}
|
||||
})
|
||||
]).paddingAll(16.h),
|
||||
);
|
||||
}
|
||||
|
||||
hospitalAndPickUpSection(BuildContext context) {
|
||||
return DecoratedBox(
|
||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||
color: AppColors.whiteColor,
|
||||
borderRadius: 24.r,
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
spacing: 16.h,
|
||||
children: [
|
||||
// Row(
|
||||
// children: [
|
||||
// hospitalAndPickUpItemContent(
|
||||
// title: "Select Hospital".needTranslation,
|
||||
// subTitle: "hospital".needTranslation,
|
||||
// leadingIcon: AppAssets.hospital,
|
||||
// ),
|
||||
// Utils.buildSvgWithAssets(icon: AppAssets.down_cheveron,
|
||||
// width: 24.h, height: 24.h)
|
||||
// .paddingAll(16.h)
|
||||
// ],
|
||||
// ).onPress((){
|
||||
// showHospitalBottomSheet(context);
|
||||
// }),
|
||||
// SizedBox(height: 16.h),
|
||||
// Divider(
|
||||
// color: AppColors.bottomNAVBorder,
|
||||
// height: 1,
|
||||
// thickness: 1,
|
||||
// ),
|
||||
// SizedBox(height: 16.h),
|
||||
|
||||
Row(
|
||||
children: [
|
||||
hospitalAndPickUpItemContent(
|
||||
title: "Pick".needTranslation,
|
||||
subTitle: "Inside the home".needTranslation,
|
||||
leadingIcon: AppAssets.pickup_bed,
|
||||
),
|
||||
CustomSwitch(
|
||||
value: context
|
||||
.watch<EmergencyServicesViewModel>()
|
||||
.pickupFromInsideTheLocation,
|
||||
onChanged: (value){
|
||||
context
|
||||
.read<EmergencyServicesViewModel>()
|
||||
.updateThePickupPlaceFromLocation(value);
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
|
||||
Row(
|
||||
children: [
|
||||
hospitalAndPickUpItemContent(
|
||||
title: '',
|
||||
subTitle: "Have any appointment".needTranslation,
|
||||
leadingIcon: AppAssets.appointment_checkin_icon,
|
||||
),
|
||||
CustomSwitch(
|
||||
value: context
|
||||
.watch<EmergencyServicesViewModel>()
|
||||
.haveAnAppointment,
|
||||
onChanged: (value) async {
|
||||
// if (value) {
|
||||
// openAppointmentList(context);
|
||||
// }
|
||||
await context.read<EmergencyServicesViewModel>()
|
||||
.updateAppointment(value);
|
||||
if (context.read<EmergencyServicesViewModel>().appointments?.isNotEmpty == true) {
|
||||
openAppointmentList(context);
|
||||
}
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
).paddingAll(16.h),
|
||||
);
|
||||
}
|
||||
|
||||
leadingIcon(String leadingIcon) {
|
||||
return Container(
|
||||
height: 40.h,
|
||||
width: 40.h,
|
||||
margin: EdgeInsets.only(right: 10.h),
|
||||
padding: EdgeInsets.all(8.h),
|
||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||
borderRadius: 12.h,
|
||||
color: AppColors.greyColor,
|
||||
),
|
||||
child: Utils.buildSvgWithAssets(icon: leadingIcon),
|
||||
);
|
||||
}
|
||||
|
||||
hospitalAndPickUpItemContent({
|
||||
required String title,
|
||||
required String subTitle,
|
||||
required String leadingIcon,
|
||||
}) {
|
||||
return Expanded(
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
this.leadingIcon(leadingIcon),
|
||||
Expanded(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Visibility(
|
||||
visible: title.isNotEmpty,
|
||||
child: Column(
|
||||
children: [
|
||||
title.toText12(
|
||||
color: AppColors.greyTextColor,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
SizedBox(height: 2.h),
|
||||
],
|
||||
),
|
||||
),
|
||||
subTitle.toText14(
|
||||
color: AppColors.textColor,
|
||||
weight: FontWeight.w500,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
bottomPriceContent(BuildContext context) {
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
DecoratedBox(
|
||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||
color: AppColors.scaffoldBgColor,
|
||||
customBorder: BorderRadius.only(
|
||||
topLeft: Radius.circular(24.h),
|
||||
topRight: Radius.circular(24.h),
|
||||
),
|
||||
hasShadow: true
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
spacing: 12.h,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
spacing: 4.h,
|
||||
children: [
|
||||
"Total amount to pay".needTranslation.toText18(
|
||||
weight: FontWeight.w600,
|
||||
color: AppColors.textColor,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Utils.buildSvgWithAssets(icon: AppAssets.warning,
|
||||
height: 18.h, width: 18.h),
|
||||
SizedBox(width: 4.h,),
|
||||
"Amount will be paid at the hospital"
|
||||
.needTranslation
|
||||
.toText12(
|
||||
fontWeight: FontWeight.w500,
|
||||
color: AppColors.greyTextColor,
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
Utils.getPaymentAmountWithSymbol(
|
||||
(Utils.formatNumberToInternationalFormat(context
|
||||
.read<EmergencyServicesViewModel>()
|
||||
.getTotalPrice() ??
|
||||
0))
|
||||
.toText24(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: AppColors.textColor,
|
||||
letterSpacing: -2),
|
||||
AppColors.blackColor,
|
||||
17.h)
|
||||
|
||||
// Utils.getPaymentAmountWithSymbol2(context.read<EmergencyServicesViewModel>().selectedTransportOption?.priceTotal??"0", letterSpacing: -2)
|
||||
],
|
||||
),
|
||||
CustomButton(
|
||||
text: "Submit Request".needTranslation,
|
||||
onPressed: () {
|
||||
LocationViewModel locationViewModel = context.read<LocationViewModel>();
|
||||
GeocodeResponse? response = locationViewModel.geocodeResponse;
|
||||
PlaceDetails? placeDetails = locationViewModel.placeDetails;
|
||||
PlacePrediction? placePrediction = locationViewModel.selectedPrediction;
|
||||
context.read<EmergencyServicesViewModel>().submitAmbulanceRequest(response?.results.first, placeDetails, placePrediction);
|
||||
})
|
||||
],
|
||||
).paddingOnly(top: 24.h, bottom: 12.h, left: 24.h, right: 24.h),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
showHospitalBottomSheet(BuildContext context){
|
||||
showCommonBottomSheetWithoutHeight(
|
||||
title:
|
||||
LocaleKeys.selectHospital.tr(),
|
||||
context,
|
||||
child: Consumer<EmergencyServicesViewModel>(
|
||||
builder:(_,vm,__)=> HospitalBottomSheetBody(
|
||||
searchText: vm.searchController,
|
||||
displayList: vm.displayList,
|
||||
onFacilityClicked: (value) {
|
||||
vm.setSelectedFacility(value);
|
||||
vm.getDisplayList();
|
||||
},
|
||||
onHospitalClicked: (hospital) {
|
||||
Navigator.pop(context);
|
||||
vm.setSelectedHospital(hospital);
|
||||
},
|
||||
onHospitalSearch: (value) {
|
||||
vm.searchHospitals(value ?? "");
|
||||
},
|
||||
selectedFacility:
|
||||
vm.selectedFacility,
|
||||
hmcCount: vm.hmcCount,
|
||||
hmgCount: vm.hmgCount,
|
||||
),
|
||||
),
|
||||
isFullScreen: false,
|
||||
isCloseButtonVisible: true,
|
||||
hasBottomPadding: false,
|
||||
backgroundColor: AppColors.bottomSheetBgColor,
|
||||
callBackFunc: () {
|
||||
context.read<EmergencyServicesViewModel>().clearSearchText();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
///it will show the places field first and then hospital field
|
||||
PlaceFirstThanHospitalField(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
spacing: 16.h,
|
||||
children: [
|
||||
textPlaceInput(context),
|
||||
hospitalField(context),
|
||||
],
|
||||
).paddingOnly(right: 24.h, left: 24.h);
|
||||
}
|
||||
|
||||
HospitalFieldFirstThanPlaces(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
spacing: 16.h,
|
||||
children: [hospitalField(context), textPlaceInput(context)],
|
||||
).paddingOnly(right: 24.h, left: 24.h);
|
||||
}
|
||||
|
||||
textPlaceInput(context) {
|
||||
return Consumer<LocationViewModel>(builder: (_, vm, __) {
|
||||
print(
|
||||
"the data is ${vm.geocodeResponse?.results.first.formattedAddress ?? vm.selectedPrediction?.description}");
|
||||
return SizedBox(
|
||||
width: MediaQuery.sizeOf(context).width,
|
||||
child: TextInputWidget(
|
||||
labelText: "Enter Pickup Location Manually".needTranslation,
|
||||
hintText: "Enter Pickup Location".needTranslation,
|
||||
controller: TextEditingController(
|
||||
text: vm.geocodeResponse?.results.first.formattedAddress ??
|
||||
vm.selectedPrediction?.description,
|
||||
),
|
||||
leadingIcon: AppAssets.location_pickup,
|
||||
isAllowLeadingIcon: true,
|
||||
isEnable: false,
|
||||
prefix: null,
|
||||
autoFocus: false,
|
||||
isBorderAllowed: false,
|
||||
keyboardType: TextInputType.text,
|
||||
padding: EdgeInsets.symmetric(
|
||||
vertical: ResponsiveExtension(10).h,
|
||||
horizontal: ResponsiveExtension(15).h,
|
||||
),
|
||||
).onPress(() {
|
||||
openLocationInputBottomSheet(context);
|
||||
}),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
///decide which field to show first based on the selected calling place
|
||||
inputFields(BuildContext context) {
|
||||
return textPlaceInput(context);
|
||||
}
|
||||
|
||||
openLocationInputBottomSheet(BuildContext context) {
|
||||
context.read<LocationViewModel>().flushSearchPredictions();
|
||||
showCommonBottomSheetWithoutHeight(
|
||||
title: "".needTranslation,
|
||||
context,
|
||||
child: SizedBox(
|
||||
height: MediaQuery.sizeOf(context).height * .8,
|
||||
child: LocationInputBottomSheet(),
|
||||
),
|
||||
isFullScreen: false,
|
||||
isCloseButtonVisible: true,
|
||||
hasBottomPadding: false,
|
||||
backgroundColor: AppColors.bottomSheetBgColor,
|
||||
callBackFunc: () {},
|
||||
);
|
||||
}
|
||||
|
||||
hospitalField(BuildContext context) {
|
||||
return DecoratedBox(
|
||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||
color: AppColors.whiteColor, borderRadius: 12.h),
|
||||
child: Row(
|
||||
children: [
|
||||
hospitalAndPickUpItemContent(
|
||||
title: "Select Hospital".needTranslation,
|
||||
subTitle: context
|
||||
.read<EmergencyServicesViewModel>()
|
||||
.getSelectedHospitalName() ??
|
||||
"Select Hospital".needTranslation,
|
||||
leadingIcon: AppAssets.hospital,
|
||||
),
|
||||
Utils.buildSvgWithAssets(
|
||||
icon: AppAssets.down_cheveron, width: 24.h, height: 24.h)
|
||||
.paddingAll(16.h)
|
||||
],
|
||||
).onPress(() {
|
||||
print("the item is clicked");
|
||||
showHospitalBottomSheet(context);
|
||||
}).paddingSymmetrical(
|
||||
10.w,
|
||||
12.h,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void openAppointmentList(BuildContext context) {
|
||||
showCommonBottomSheetWithoutHeight(
|
||||
title: "Select Appointment".needTranslation,
|
||||
context,
|
||||
child: SizedBox(
|
||||
height: MediaQuery.sizeOf(context).height * .5,
|
||||
child: AppointmentBottomSheet(
|
||||
list: context.read<EmergencyServicesViewModel>().appointments!,
|
||||
onAppointmentSelection: (appointment) {
|
||||
Navigator.pop(context);
|
||||
context.read<EmergencyServicesViewModel>().setSelectedAppointment(appointment);
|
||||
}),
|
||||
),
|
||||
isFullScreen: false,
|
||||
isCloseButtonVisible: true,
|
||||
hasBottomPadding: false,
|
||||
backgroundColor: AppColors.bottomSheetBgColor,
|
||||
callBackFunc: () {
|
||||
context.read<EmergencyServicesViewModel>().checkHasAppointment();
|
||||
},
|
||||
);
|
||||
// );
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,76 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hmg_patient_app_new/core/app_assets.dart';
|
||||
import 'package:hmg_patient_app_new/core/app_export.dart';
|
||||
import 'package:hmg_patient_app_new/core/utils/date_util.dart';
|
||||
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/features/emergency_services/emergency_services_view_model.dart';
|
||||
import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/AmbulanceRequestOrdersModel.dart';
|
||||
import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/RRTServiceData.dart';
|
||||
import 'package:hmg_patient_app_new/presentation/emergency_services/history/widget/RequestStatus.dart';
|
||||
import 'package:hmg_patient_app_new/theme/colors.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '../../../../core/utils/utils.dart';
|
||||
|
||||
|
||||
class RRTItem extends StatelessWidget {
|
||||
final GetCMCAllOrdersResponseModel order;
|
||||
|
||||
const RRTItem({super.key, required this.order});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return DecoratedBox(
|
||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||
color: Colors.white,
|
||||
hasShadow: true,
|
||||
customBorder: BorderRadius.all(
|
||||
Radius.circular(20.h),
|
||||
),
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
spacing: 8.h,
|
||||
children: [
|
||||
RequestStatus(status: order.statusId ?? 0),
|
||||
"Req ID: ${order.iD}".toText16(color: AppColors.textColor, weight: FontWeight.w600),
|
||||
Row(
|
||||
spacing: 4.w,
|
||||
children: [
|
||||
chip( Utils.getDayMonthYearDateFormatted(DateUtil.convertStringToDate(order.time)), AppAssets.calendar, AppColors.blackBgColor),
|
||||
chip("Rapid Response Team(RRT)".needTranslation, AppAssets.ic_rrt_vehicle, AppColors.blackBgColor),
|
||||
],
|
||||
),
|
||||
|
||||
if (order.statusId == 1 || order.statusId == 2)
|
||||
CustomButton(
|
||||
text: "Cancel Request".needTranslation,
|
||||
onPressed: () async {
|
||||
openCancelOrderBottomSheet(context);
|
||||
},
|
||||
backgroundColor: AppColors.primaryRedColor,
|
||||
borderColor: AppColors.primaryRedColor,
|
||||
textColor: Colors.white,
|
||||
icon: AppAssets.cancel,
|
||||
),
|
||||
],
|
||||
).paddingAll(16.h),
|
||||
).paddingOnly(bottom: 16.h);
|
||||
}
|
||||
|
||||
chip(String title, String iconString, Color iconColor) {
|
||||
return AppCustomChipWidget(
|
||||
labelText: title,
|
||||
icon: iconString,
|
||||
iconColor: iconColor,
|
||||
iconSize: 12.h,
|
||||
);
|
||||
}
|
||||
|
||||
openCancelOrderBottomSheet(BuildContext context) {
|
||||
context.read<EmergencyServicesViewModel>().cancelRRTOrder(order.iD);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue