Merge branch 'development' of https://gitlab.com/Cloud_Solution/doctor_app_flutter into get_pending_orders

get_pending_orders
hussam al-habibeh 4 years ago
commit ff1cffc24d

@ -380,6 +380,10 @@ const CHECK_ACTIVATION_CODE_FOR_PATIENT =
const PATIENT_REGISTRATION = "Services/Authentication.svc/REST/PatientRegistration";
const GET_PATIENT_INFO= "Services/NHIC.svc/REST/GetPatientInfo";
/// Discharge Summary
const GET_PENDING_DISCHARGE_SUMMARY = "Services/DoctorApplication.svc/REST/DoctorApp_GetPendingDischargeSummary";
var selectedPatientType = 1;
//*********change value to decode json from Dropdown ************

@ -0,0 +1,4 @@
enum CalenderType{
Gregorian,
Hijri,
}

@ -0,0 +1,32 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/service/base/base_service.dart';
import 'package:doctor_app_flutter/models/discharge_summary/GetDischargeSummaryReqModel.dart';
import 'package:doctor_app_flutter/models/discharge_summary/GetDischargeSummaryResModel.dart';
import 'package:doctor_app_flutter/models/operation_report/create_update_operation_report_request_model.dart';
import 'package:doctor_app_flutter/models/operation_report/get_operation_details_request_modle.dart';
import 'package:doctor_app_flutter/models/operation_report/get_operation_details_response_modle.dart';
import 'package:doctor_app_flutter/models/operation_report/get_reservations_response_model.dart';
import 'package:doctor_app_flutter/models/operation_report/get_reservations_request_model.dart';
class DischargeSummaryService extends BaseService {
List<GetDischargeSummaryResModel> _pendingDischargeSummaryList = [];
List<GetDischargeSummaryResModel> get pendingDischargeSummaryList => _pendingDischargeSummaryList;
Future getPendingDischargeSummary(
{GetDischargeSummaryReqModel getDischargeSummaryReqModel}) async {
hasError = false;
await baseAppClient.post(GET_PENDING_DISCHARGE_SUMMARY,
onSuccess: (dynamic response, int statusCode) {
_pendingDischargeSummaryList.clear();
response['List_PendingDischargeSummary'].forEach(
(v) {
_pendingDischargeSummaryList.add(GetDischargeSummaryResModel.fromJson(v));
},
);
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: getDischargeSummaryReqModel.toJson());
}
}

@ -0,0 +1,31 @@
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/service/patient/profile/discharge_summary_servive.dart';
import 'package:doctor_app_flutter/core/service/patient/profile/operation_report_servive.dart';
import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart';
import 'package:doctor_app_flutter/locator.dart';
import 'package:doctor_app_flutter/models/discharge_summary/GetDischargeSummaryReqModel.dart';
import 'package:doctor_app_flutter/models/discharge_summary/GetDischargeSummaryResModel.dart';
class DischargeSummaryViewModel extends BaseViewModel {
bool hasError = false;
DischargeSummaryService _dischargeSummaryService =
locator<DischargeSummaryService>();
List<GetDischargeSummaryResModel> get pendingDischargeSummaryList =>
_dischargeSummaryService.pendingDischargeSummaryList;
Future getPendingDischargeSummary({int patientId, int admissionNo, }) async {
GetDischargeSummaryReqModel getDischargeSummaryReqModel = GetDischargeSummaryReqModel(admissionNo:admissionNo,patientID: patientId );
hasError = false;
setState(ViewState.Busy);
await _dischargeSummaryService.getPendingDischargeSummary(getDischargeSummaryReqModel: getDischargeSummaryReqModel);
if (_dischargeSummaryService.hasError) {
error = _dischargeSummaryService.error;
setState(ViewState.ErrorLocal);
} else {
setState(ViewState.Idle);
}
}
}

@ -1,5 +1,5 @@
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/service/operation_report_servive.dart';
import 'package:doctor_app_flutter/core/service/patient/profile/operation_report_servive.dart';
import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart';
import 'package:doctor_app_flutter/locator.dart';
import 'package:doctor_app_flutter/models/operation_report/create_update_operation_report_request_model.dart';

@ -1,11 +1,12 @@
import 'package:doctor_app_flutter/core/service/authentication_service.dart';
import 'package:doctor_app_flutter/core/service/home/scan_qr_service.dart';
import 'package:doctor_app_flutter/core/service/operation_report_servive.dart';
import 'package:doctor_app_flutter/core/service/patient/profile/discharge_summary_servive.dart';
import 'package:doctor_app_flutter/core/service/pending_order_service.dart';
import 'package:doctor_app_flutter/core/viewModel/dashboard_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/hospitals_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/medical_file_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/operation_report_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/profile/discharge_summary_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/profile/operation_report_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/pednding_orders_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart';
@ -31,6 +32,7 @@ import 'core/service/patient/out_patient_service.dart';
import 'core/service/patient/patient-doctor-referral-service.dart';
import 'core/service/patient/patientInPatientService.dart';
import 'core/service/patient/patient_service.dart';
import 'core/service/patient/profile/operation_report_servive.dart';
import 'core/service/patient/referral_patient_service.dart';
import 'core/service/patient_medical_file/admission_request/patient-admission-request-service.dart';
import 'core/service/patient_medical_file/insurance/InsuranceCardService.dart';
@ -109,6 +111,7 @@ void setupLocator() {
locator.registerLazySingleton(() => OperationReportService());
locator.registerLazySingleton(() => PendingOrderService());
locator.registerLazySingleton(() => PatientRegistrationService());
locator.registerLazySingleton(() => DischargeSummaryService());
/// View Model
locator.registerFactory(() => DoctorReplayViewModel());
@ -140,5 +143,6 @@ void setupLocator() {
locator.registerFactory(() => OperationReportViewModel());
locator.registerFactory(() => PatientRegistrationViewModel());
locator.registerFactory(() => PendingOrdersViewModel());
locator.registerFactory(() => DischargeSummaryViewModel());
}

@ -0,0 +1,27 @@
class GetDischargeSummaryReqModel {
int patientID;
int admissionNo;
int patientType;
int patientTypeID;
GetDischargeSummaryReqModel(
{this.patientID, this.admissionNo, this.patientType = 1, this.patientTypeID=1});
GetDischargeSummaryReqModel.fromJson(Map<String, dynamic> json) {
patientID = json['PatientID'];
admissionNo = json['AdmissionNo'];
patientType = json['PatientType'];
patientTypeID = json['PatientTypeID'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['PatientID'] = this.patientID;
data['AdmissionNo'] = this.admissionNo;
data['PatientType'] = this.patientType;
data['PatientTypeID'] = this.patientTypeID;
data['SetupID'] = "010266";
data['isDentalAllowedBackend'] = false;
return data;
}
}

@ -0,0 +1,192 @@
class GetDischargeSummaryResModel {
String setupID;
int projectID;
int dischargeNo;
String dischargeDate;
int admissionNo;
int assessmentNo;
int patientType;
int patientID;
int clinicID;
int doctorID;
String finalDiagnosis;
String persentation;
String pastHistory;
String planOfCare;
String investigations;
String followupPlan;
String conditionOnDischarge;
String significantFindings;
String planedProcedure;
int daysStayed;
String remarks;
String eRCare;
int status;
bool isActive;
int createdBy;
String createdOn;
int editedBy;
String editedOn;
bool isPatientDied;
Null isMedicineApproved;
Null isOpenBillDischarge;
Null activatedDate;
Null activatedBy;
Null lAMA;
Null patientCodition;
Null others;
Null reconciliationInstruction;
String dischargeInstructions;
String reason;
Null dischargeDisposition;
Null hospitalID;
String createdByName;
Null createdByNameN;
String editedByName;
Null editedByNameN;
GetDischargeSummaryResModel(
{this.setupID,
this.projectID,
this.dischargeNo,
this.dischargeDate,
this.admissionNo,
this.assessmentNo,
this.patientType,
this.patientID,
this.clinicID,
this.doctorID,
this.finalDiagnosis,
this.persentation,
this.pastHistory,
this.planOfCare,
this.investigations,
this.followupPlan,
this.conditionOnDischarge,
this.significantFindings,
this.planedProcedure,
this.daysStayed,
this.remarks,
this.eRCare,
this.status,
this.isActive,
this.createdBy,
this.createdOn,
this.editedBy,
this.editedOn,
this.isPatientDied,
this.isMedicineApproved,
this.isOpenBillDischarge,
this.activatedDate,
this.activatedBy,
this.lAMA,
this.patientCodition,
this.others,
this.reconciliationInstruction,
this.dischargeInstructions,
this.reason,
this.dischargeDisposition,
this.hospitalID,
this.createdByName,
this.createdByNameN,
this.editedByName,
this.editedByNameN});
GetDischargeSummaryResModel.fromJson(Map<String, dynamic> json) {
setupID = json['SetupID'];
projectID = json['ProjectID'];
dischargeNo = json['DischargeNo'];
dischargeDate = json['DischargeDate'];
admissionNo = json['AdmissionNo'];
assessmentNo = json['AssessmentNo'];
patientType = json['PatientType'];
patientID = json['PatientID'];
clinicID = json['ClinicID'];
doctorID = json['DoctorID'];
finalDiagnosis = json['FinalDiagnosis'];
persentation = json['Persentation'];
pastHistory = json['PastHistory'];
planOfCare = json['PlanOfCare'];
investigations = json['Investigations'];
followupPlan = json['FollowupPlan'];
conditionOnDischarge = json['ConditionOnDischarge'];
significantFindings = json['SignificantFindings'];
planedProcedure = json['PlanedProcedure'];
daysStayed = json['DaysStayed'];
remarks = json['Remarks'];
eRCare = json['ERCare'];
status = json['Status'];
isActive = json['IsActive'];
createdBy = json['CreatedBy'];
createdOn = json['CreatedOn'];
editedBy = json['EditedBy'];
editedOn = json['EditedOn'];
isPatientDied = json['IsPatientDied'];
isMedicineApproved = json['IsMedicineApproved'];
isOpenBillDischarge = json['IsOpenBillDischarge'];
activatedDate = json['ActivatedDate'];
activatedBy = json['ActivatedBy'];
lAMA = json['LAMA'];
patientCodition = json['PatientCodition'];
others = json['Others'];
reconciliationInstruction = json['ReconciliationInstruction'];
dischargeInstructions = json['DischargeInstructions'];
reason = json['Reason'];
dischargeDisposition = json['DischargeDisposition'];
hospitalID = json['HospitalID'];
createdByName = json['CreatedByName'];
createdByNameN = json['CreatedByNameN'];
editedByName = json['EditedByName'];
editedByNameN = json['EditedByNameN'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['SetupID'] = this.setupID;
data['ProjectID'] = this.projectID;
data['DischargeNo'] = this.dischargeNo;
data['DischargeDate'] = this.dischargeDate;
data['AdmissionNo'] = this.admissionNo;
data['AssessmentNo'] = this.assessmentNo;
data['PatientType'] = this.patientType;
data['PatientID'] = this.patientID;
data['ClinicID'] = this.clinicID;
data['DoctorID'] = this.doctorID;
data['FinalDiagnosis'] = this.finalDiagnosis;
data['Persentation'] = this.persentation;
data['PastHistory'] = this.pastHistory;
data['PlanOfCare'] = this.planOfCare;
data['Investigations'] = this.investigations;
data['FollowupPlan'] = this.followupPlan;
data['ConditionOnDischarge'] = this.conditionOnDischarge;
data['SignificantFindings'] = this.significantFindings;
data['PlanedProcedure'] = this.planedProcedure;
data['DaysStayed'] = this.daysStayed;
data['Remarks'] = this.remarks;
data['ERCare'] = this.eRCare;
data['Status'] = this.status;
data['IsActive'] = this.isActive;
data['CreatedBy'] = this.createdBy;
data['CreatedOn'] = this.createdOn;
data['EditedBy'] = this.editedBy;
data['EditedOn'] = this.editedOn;
data['IsPatientDied'] = this.isPatientDied;
data['IsMedicineApproved'] = this.isMedicineApproved;
data['IsOpenBillDischarge'] = this.isOpenBillDischarge;
data['ActivatedDate'] = this.activatedDate;
data['ActivatedBy'] = this.activatedBy;
data['LAMA'] = this.lAMA;
data['PatientCodition'] = this.patientCodition;
data['Others'] = this.others;
data['ReconciliationInstruction'] = this.reconciliationInstruction;
data['DischargeInstructions'] = this.dischargeInstructions;
data['Reason'] = this.reason;
data['DischargeDisposition'] = this.dischargeDisposition;
data['HospitalID'] = this.hospitalID;
data['CreatedByName'] = this.createdByName;
data['CreatedByNameN'] = this.createdByNameN;
data['EditedByName'] = this.editedByName;
data['EditedByNameN'] = this.editedByNameN;
return data;
}
}

@ -37,7 +37,6 @@ class STPReferralFrequencyRequest {
{this.languageID = 2,
this.stamp = "2020-06-03T11:18:19.986Z",
this.iPAdress = "11.11.11.11",
this.versionID = 5.8,
this.channel = 9,
this.tokenID,
this.sessionID = "JBXRsDl37L",

@ -35,8 +35,6 @@ class ProgressNoteRequest {
bool isLoginForDoctorApp;
bool patientOutSA;
int patientTypeID;
double versionID;
ProgressNoteRequest(
{this.visitType ,
this.admissionNo,
@ -49,7 +47,6 @@ class ProgressNoteRequest {
this.sessionID = "LlBk8lUEJY",
this.isLoginForDoctorApp = true,
this.patientTypeID = 1,
this.versionID = 5.5,
this.patientOutSA = false});
ProgressNoteRequest.fromJson(Map<String, dynamic> json) {
@ -65,7 +62,6 @@ class ProgressNoteRequest {
isLoginForDoctorApp = json['IsLoginForDoctorApp'];
patientOutSA = json['PatientOutSA'];
patientTypeID = json['PatientTypeID'];
versionID = json['VersionID'];
}
Map<String, dynamic> toJson() {
@ -82,7 +78,6 @@ class ProgressNoteRequest {
data['IsLoginForDoctorApp'] = this.isLoginForDoctorApp;
data['PatientOutSA'] = this.patientOutSA;
data['PatientTypeID'] = this.patientTypeID;
data['VersionID'] = this.versionID;
return data;
}
}

@ -26,7 +26,6 @@ class PharmaciesListRequestModel {
this.languageID = 2,
this.stamp = '2020-04-23T21:01:21.492Z',
this.ipAdress = '11.11.11.11',
this.versionID = 5.5,
this.tokenID,
this.sessionID = 'e29zoooEJ4',
this.isLoginForDoctorApp = true,

@ -10,7 +10,6 @@ class PharmaciesItemsRequestModel {
String pHRItemName;
int pageIndex = 0;
int pageSize = 20;
double versionID = 5.5;
int channel = 3;
int languageID = 2;
String iPAdress = "10.20.10.20";
@ -24,7 +23,6 @@ class PharmaciesItemsRequestModel {
{this.pHRItemName,
this.pageIndex = 0,
this.pageSize = 20,
this.versionID = 5.8,
this.channel = 3,
this.languageID = 2,
this.iPAdress = "10.20.10.20",
@ -38,7 +36,6 @@ class PharmaciesItemsRequestModel {
pHRItemName = json['PHR_itemName'];
pageIndex = json['PageIndex'];
pageSize = json['PageSize'];
versionID = json['VersionID'];
channel = json['Channel'];
languageID = json['LanguageID'];
iPAdress = json['IPAdress'];
@ -54,7 +51,6 @@ class PharmaciesItemsRequestModel {
data['PHR_itemName'] = this.pHRItemName;
data['PageIndex'] = this.pageIndex;
data['PageSize'] = this.pageSize;
data['VersionID'] = this.versionID;
data['Channel'] = this.channel;
data['LanguageID'] = this.languageID;
data['IPAdress'] = this.iPAdress;

@ -7,6 +7,7 @@ import 'package:doctor_app_flutter/screens/patients/insurance_approval_screen_pa
import 'package:doctor_app_flutter/screens/patients/profile/diabetic_chart/diabetic_chart.dart';
import 'package:doctor_app_flutter/screens/patients/profile/diagnosis/diagnosis_screen.dart';
import 'package:doctor_app_flutter/screens/patients/profile/admission-orders/admission_orders_screen.dart';
import 'package:doctor_app_flutter/screens/patients/profile/discharge_summary/discharge_summary.dart';
import 'package:doctor_app_flutter/screens/patients/profile/lab_result/all_lab_special_result_page.dart';
import 'package:doctor_app_flutter/screens/patients/profile/lab_result/labs_home_page.dart';
import 'package:doctor_app_flutter/screens/patients/profile/medical_report/AddVerifyMedicalReport.dart';
@ -78,7 +79,9 @@ const String PENDING_ORDERS = 'pending-orders';
const String ADMISSION_ORDERS = 'admission-orders';
const String NURSING_PROGRESS_NOTE = 'nursing_progress_note';
const String DIAGNOSIS_FOR_IN_PATIENT = 'get_diagnosis_for_in_patient';
const String DIABETIC_CHART_VALUES = 'get_diabetic_chart_values';
const String DISCHARGE_SUMMARY = 'discharge_summary';
//todo: change the routing way.
var routes = {
@ -125,6 +128,7 @@ var routes = {
GET_OPERATION_REPORT: (_) => OperationReportScreen(),
PENDING_ORDERS: (_) => PendingOrdersScreen(),
NURSING_PROGRESS_NOTE: (_) => NursingProgressNoteScreen(),
DISCHARGE_SUMMARY : (_) => DischargeSummaryPage(),
DIAGNOSIS_FOR_IN_PATIENT: (_) => DiagnosisScreen(),
ADMISSION_ORDERS: (_) => AdmissionOrdersScreen(),
DIABETIC_CHART_VALUES: (_) => DiabeticChart(),

@ -0,0 +1,67 @@
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/viewModel/doctor_replay_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/profile/discharge_summary_view_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/screens/doctor/doctor_replay/doctor_reply_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart';
import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart';
import 'package:doctor_app_flutter/widgets/shared/errors/error_message.dart';
import 'package:flutter/material.dart';
import 'discharge_Summary_widget.dart';
class AllDischargeSummary extends StatefulWidget {
final Function changeCurrentTab;
const AllDischargeSummary({Key key, this.changeCurrentTab}) : super(key: key);
@override
_AllDischargeSummaryState createState() => _AllDischargeSummaryState();
}
class _AllDischargeSummaryState extends State<AllDischargeSummary> {
int pageIndex = 1;
@override
Widget build(BuildContext context) {
return BaseView<DischargeSummaryViewModel>(
onModelReady: (model) {
model.getPendingDischargeSummary();
},
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
isShowAppBar: false,
body: model.pendingDischargeSummaryList.isEmpty
?ErrorMessage(error: TranslationBase.of(context).noItem)// DrAppEmbeddedError(error: TranslationBase.of(context).noItem)
: Column(
children: [
Expanded(
child: Container(
padding: EdgeInsetsDirectional.fromSTEB(30, 0, 30, 0),
child: ListView.builder(
scrollDirection: Axis.vertical,
itemCount: model.pendingDischargeSummaryList.length,
shrinkWrap: true,
itemBuilder: (BuildContext ctxt, int index) {
return Column(
children: [
InkWell(
child: DischargeSummaryWidget(
dischargeSummary: model
.pendingDischargeSummaryList[index]),
),
],
);
}),
),
),
],
),
),
);
}
}

@ -0,0 +1,171 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/models/discharge_summary/GetDischargeSummaryResModel.dart';
import 'package:doctor_app_flutter/models/doctor/list_gt_my_patients_question_model.dart';
import 'package:doctor_app_flutter/util/date-utils.dart';
import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/card_with_bg_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/user-guid/CusomRow.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';
class DischargeSummaryWidget extends StatefulWidget {
final GetDischargeSummaryResModel dischargeSummary;
bool isShowMore = false;
DischargeSummaryWidget({Key key, this.dischargeSummary});
@override
_DischargeSummaryWidgetState createState() => _DischargeSummaryWidgetState();
}
class _DischargeSummaryWidgetState extends State<DischargeSummaryWidget> {
@override
Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return Container(
child: CardWithBgWidget(
bgColor:Colors.transparent,
hasBorder: false,
widget: Container(
child: InkWell(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
AppText(
AppDateUtils.getDateTimeFromServerFormat(
widget.dischargeSummary.createdOn)
.day
.toString() +
" " +
AppDateUtils.getMonth(
AppDateUtils.getDateTimeFromServerFormat(
widget.dischargeSummary.createdOn)
.month)
.toString()
.substring(0, 3) +
' ' +
AppDateUtils.getDateTimeFromServerFormat(
widget.dischargeSummary.createdOn)
.year
.toString(),
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
),
AppText(
AppDateUtils.getDateTimeFromServerFormat(
widget.dischargeSummary.createdOn)
.hour
.toString() +
":" +
AppDateUtils.getDateTimeFromServerFormat(
widget.dischargeSummary.createdOn)
.minute
.toString(),
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
)
],
),
],
),
SizedBox(
height: 20,
),
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(
width: 20,
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// SizedBox(height: 10,),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
CustomRow(
label: TranslationBase.of(context).fileNumber,
value: widget.dischargeSummary.patientID.toString(),
isCopyable:false,
),
SizedBox(
height: 8,
),
],
),
],
),
Container(
width: MediaQuery.of(context).size.width * 0.5,
child: RichText(
maxLines: 3,
overflow: TextOverflow.ellipsis,
text: new TextSpan(
style: new TextStyle(
fontSize: 1.3 * SizeConfig.textMultiplier,
color: Color(0xFF575757)),
children: <TextSpan>[
new TextSpan(
text:
TranslationBase.of(context).requestType +
": ",
style: TextStyle(
fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
2.8,
color: Color(0xFF575757),
//TranslationBase.of(context).doctorResponse + " : ",
)),
new TextSpan(
text:
"${widget.dischargeSummary.dischargeInstructions}",
style: TextStyle(
fontFamily: 'Poppins',
fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3,
color: Color(0xFF2E303A),
fontWeight: FontWeight.w700,
)),
],
),
),
),
],
)
],
),
// Container(
// alignment: projectViewModel.isArabic?Alignment.centerLeft:Alignment.centerRight,
// child: Icon(FontAwesomeIcons.arrowRight,
// size: 20, color: Colors.black),)
],
),
// onTap: onTap,
)),
),
);
}
}

@ -0,0 +1,187 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/viewModel/doctor_replay_view_model.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/doctor/doctor_replay/doctor_repaly_chat.dart';
import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/screens/doctor/doctor_replay/doctor_reply_widget.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-app-bar.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart';
import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/text_fields_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'all_discharge_summary.dart';
import 'pending_discharge_summary.dart';
class DischargeSummaryPage extends StatefulWidget {
final Function changeCurrentTab;
const DischargeSummaryPage({Key key, this.changeCurrentTab}) : super(key: key);
@override
_DoctorReplyScreenState createState() => _DoctorReplyScreenState();
}
class _DoctorReplyScreenState extends State<DischargeSummaryPage>
with SingleTickerProviderStateMixin {
TabController _tabController;
int _activeTab = 0;
int pageIndex = 1;
@override
void initState() {
super.initState();
_tabController = TabController(length: 2, vsync: this);
_tabController.addListener(_handleTabSelection);
}
@override
void dispose() {
super.dispose();
_tabController.dispose();
}
_handleTabSelection() {
setState(() {
_activeTab = _tabController.index;
});
}
@override
Widget build(BuildContext context) {
final screenSize = MediaQuery.of(context).size;
final routeArgs = ModalRoute.of(context).settings.arguments as Map;
PatiantInformtion patient = routeArgs['patient'];
return WillPopScope(
onWillPop: () async {
widget.changeCurrentTab();
return false;
},
child: AppScaffold(
appBarTitle: TranslationBase.of(context).replay2,
isShowAppBar: true,
// appBarTitle: TranslationBase.of(context).progressNote,
appBar: PatientProfileAppBar(
patient,
isInpatient: true,
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Scaffold(
extendBodyBehindAppBar: false,
appBar: PreferredSize(
preferredSize: Size.fromHeight(
MediaQuery.of(context).size.height * 0.070),
child: Container(
height: MediaQuery.of(context).size.height * 0.070,
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
color: Theme.of(context).dividerColor,
width: 0.5), //width: 0.7
),
color: Colors.white),
child: Center(
child: TabBar(
isScrollable: false,
controller: _tabController,
indicatorColor: Colors.transparent,
indicatorWeight: 1.0,
indicatorSize: TabBarIndicatorSize.tab,
labelColor: Theme.of(context).primaryColor,
labelPadding: EdgeInsets.only(
top: 0, left: 0, right: 0, bottom: 0),
unselectedLabelColor: Colors.grey[800],
tabs: [
tabWidget(
screenSize,
_activeTab == 0,
"Pending",
),
tabWidget(
screenSize,
_activeTab == 1,
TranslationBase.of(context).all,
),
],
),
),
),
),
body: Column(
children: [
Expanded(
child: TabBarView(
physics: BouncingScrollPhysics(),
controller: _tabController,
children: [
PendingDischargeSummary(patient:patient ,),
AllDischargeSummary(),
],
),
),
],
),
),
),
],
),
),
);
}
}
Widget tabWidget(Size screenSize, bool isActive, String title,
{int counter = -1}) {
return Center(
child: Container(
height: screenSize.height * 0.070,
decoration: TextFieldsUtils.containerBorderDecoration(
isActive ? Color(0xFFD02127 /*B8382B*/) : Color(0xFFEAEAEA),
isActive ? Color(0xFFD02127) : Color(0xFFEAEAEA),
borderRadius: 4,
borderWidth: 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
AppText(
title,
fontSize: SizeConfig.textMultiplier * 1.5,
color: isActive ? Colors.white : Color(0xFF2B353E),
fontWeight: FontWeight.w700,
),
if (counter != -1)
Container(
margin: EdgeInsets.all(4),
width: 15,
height: 15,
decoration: BoxDecoration(
color: isActive ? Colors.white : Color(0xFFD02127),
shape: BoxShape.circle,
),
child: Center(
child: FittedBox(
child: AppText(
"$counter",
fontSize: SizeConfig.textMultiplier * 1.5,
color: !isActive ? Colors.white : Color(0xFFD02127),
fontWeight: FontWeight.w700,
),
),
),
),
],
),
),
);
}

@ -0,0 +1,75 @@
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/viewModel/doctor_replay_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/profile/discharge_summary_view_model.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/screens/doctor/doctor_replay/doctor_reply_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart';
import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart';
import 'package:doctor_app_flutter/widgets/shared/errors/error_message.dart';
import 'package:flutter/material.dart';
import 'discharge_Summary_widget.dart';
class PendingDischargeSummary extends StatefulWidget {
final Function changeCurrentTab;
final PatiantInformtion patient;
const PendingDischargeSummary({Key key, this.changeCurrentTab, this.patient})
: super(key: key);
@override
_PendingDischargeSummaryState createState() =>
_PendingDischargeSummaryState();
}
class _PendingDischargeSummaryState extends State<PendingDischargeSummary> {
int pageIndex = 1;
@override
Widget build(BuildContext context) {
return BaseView<DischargeSummaryViewModel>(
onModelReady: (model) {
model.getPendingDischargeSummary(
patientId: widget.patient.patientId,
admissionNo: int.parse(widget.patient.admissionNo),
);
},
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
isShowAppBar: false,
body: model.pendingDischargeSummaryList.isEmpty
? ErrorMessage(
error: TranslationBase.of(context)
.noItem) // DrAppEmbeddedError(error: TranslationBase.of(context).noItem)
: Column(
children: [
Expanded(
child: Container(
padding: EdgeInsetsDirectional.fromSTEB(30, 0, 30, 0),
child: ListView.builder(
scrollDirection: Axis.vertical,
itemCount: model.pendingDischargeSummaryList.length,
shrinkWrap: true,
itemBuilder: (BuildContext ctxt, int index) {
return Column(
children: [
InkWell(
child: DischargeSummaryWidget(
dischargeSummary: model
.pendingDischargeSummaryList[index]),
),
],
);
}),
),
),
],
),
),
);
}
}

@ -2,7 +2,7 @@ import 'package:doctor_app_flutter/core/model/note/note_model.dart';
import 'package:doctor_app_flutter/core/model/note/update_note_model.dart';
import 'package:doctor_app_flutter/core/service/AnalyticsService.dart';
import 'package:doctor_app_flutter/core/viewModel/authentication_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/operation_report_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/profile/operation_report_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';

@ -6,7 +6,7 @@ import 'package:doctor_app_flutter/core/model/note/CreateNoteModel.dart';
import 'package:doctor_app_flutter/core/model/note/note_model.dart';
import 'package:doctor_app_flutter/core/model/note/update_note_model.dart';
import 'package:doctor_app_flutter/core/provider/robot_provider.dart';
import 'package:doctor_app_flutter/core/viewModel/operation_report_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/profile/operation_report_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';

@ -115,10 +115,10 @@ class ProfileGridForInPatient extends StatelessWidget {
PatientProfileCardModel(
TranslationBase.of(context).discharge,
TranslationBase.of(context).report,
null,
DISCHARGE_SUMMARY,
'patient/patient_sick_leave.png',
isInPatient: isInpatient,
isDisable: true),
isInPatient: isInpatient,)
,
PatientProfileCardModel(
TranslationBase.of(context).patientSick,
TranslationBase.of(context).leave,

@ -8,7 +8,7 @@ import 'package:doctor_app_flutter/core/model/note/note_model.dart';
import 'package:doctor_app_flutter/core/model/note/update_note_model.dart';
import 'package:doctor_app_flutter/core/provider/robot_provider.dart';
import 'package:doctor_app_flutter/core/viewModel/PatientRegistrationViewModel.dart';
import 'package:doctor_app_flutter/core/viewModel/operation_report_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/profile/operation_report_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
@ -63,8 +63,7 @@ class _RegisterConfirmationPatientPageState
TextEditingController middleNameAr;
TextEditingController lastNameAr;
TextEditingController emailAddressController;
TextEditingController langController = TextEditingController(
text: "English");
TextEditingController langController = TextEditingController(text: "English");
int selectedLang = 1;
@override
@ -397,10 +396,13 @@ class _RegisterConfirmationPatientPageState
widget.model.getPatientInfoResponseModel.dateOfBirth);
String wellFormat =
"${dateFormat.day}\/${dateFormat.month}\/${dateFormat.year}";
print(dateFormat.toUtc().toString());
print(
dateFormat.toUtc().toString(),
);
HijriCalendar hijriDate = HijriCalendar.fromDate(
new DateTime(dateFormat.year, dateFormat.month,
dateFormat.day));
new DateTime(
dateFormat.year, dateFormat.month, dateFormat.day),
);
// return ;
GifLoaderDialogUtils.showMyDialog(context);
@ -664,7 +666,6 @@ class _RegisterConfirmationPatientPageState
groupValue: selectedLang,
onChanged: (value) {
setSelectedLang(value);
},
activeColor: Colors.red,
),
@ -682,10 +683,11 @@ class _RegisterConfirmationPatientPageState
);
});
}
setSelectedLang(lang){
setSelectedLang(lang) {
setState(() {
selectedLang = lang;
langController.text = lang==1?"English": "العربيه";
langController.text = lang == 1 ? "English" : "العربيه";
});
Navigator.of(context).pop();
}

@ -20,6 +20,10 @@ import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/country_textfield_custom.dart';
import 'package:flutter/material.dart';
import 'package:hijri/hijri_calendar.dart';
import 'package:hijri_picker/hijri_picker.dart';
import 'package:doctor_app_flutter/core/enum/CalenderType.dart';
import 'package:intl/intl.dart';
class RegisterSearchPatientPage extends StatefulWidget {
final Function changePageViewIndex;
@ -54,8 +58,10 @@ class _RegisterSearchPatientPageState extends State<RegisterSearchPatientPage> {
TextEditingController(text: "1062938285");
String idError;
DateTime _birthDate;
DateTime _birthDateInGregorian;
String birthdateError;
var birthDateInHijri = new HijriCalendar.now();
CalenderType calenderType = CalenderType.Gregorian;
@override
void initState() {
@ -178,15 +184,44 @@ class _RegisterSearchPatientPageState extends State<RegisterSearchPatientPage> {
SizedBox(
height: 10,
),
Row(
children: [
Expanded(
child: RadioListTile<CalenderType>(
title: AppText("Gregorian"),
value: CalenderType.Gregorian,
groupValue: calenderType,
onChanged: (CalenderType value) {
setState(() {
calenderType = value;
});
},
),
),
Expanded(
child: RadioListTile<CalenderType>(
title: AppText("Hijri"),
value: CalenderType.Hijri,
groupValue: calenderType,
onChanged: (CalenderType value) {
setState(() {
calenderType = value;
});
},
),
),
],
),
SizedBox(
height: 10,
),
AppTextFieldCustom(
height: screenSize.height * 0.075,
hintText: "Birthdate",
dropDownText: _birthDate != null
? "${AppDateUtils.convertStringToDateFormat(_birthDate.toString(), "yyyy/MM/dd")}"
: null,
dropDownText: getBirthdate(),
enabled: false,
isTextFieldHasSuffix: true,
validationError: _birthDate == null && isSubmitted
validationError: _birthDateInGregorian == null && isSubmitted
? TranslationBase.of(context).emptyMessage
: null,
suffixIcon: IconButton(
@ -197,12 +232,29 @@ class _RegisterSearchPatientPageState extends State<RegisterSearchPatientPage> {
onPressed: null,
),
onClick: () {
if (_birthDate == null) {
_birthDate = DateTime.now();
if (_birthDateInGregorian == null) {
_birthDateInGregorian = DateTime.now();
}
_selectDate(context, _birthDate, (picked) {
_selectDate(context, _birthDateInGregorian,
(dynamic selectedDate) {
setState(() {
_birthDate = picked;
if (calenderType == CalenderType.Hijri) {
birthDateInHijri = selectedDate;
_birthDateInGregorian = HijriCalendar().hijriToGregorian(
birthDateInHijri.hYear,
birthDateInHijri.hMonth,
birthDateInHijri.hDay);
print(_birthDateInGregorian);
print(birthDateInHijri);
} else {
_birthDateInGregorian = selectedDate;
birthDateInHijri = HijriCalendar()
.gregorianToHijri(
selectedDate.year, selectedDate.month, selectedDate.day);
print(_birthDateInGregorian);
print(birthDateInHijri);
}
});
});
},
@ -276,13 +328,14 @@ class _RegisterSearchPatientPageState extends State<RegisterSearchPatientPage> {
patientOutSA: 0,
generalid: GENERAL_ID,
dOB:
"${AppDateUtils.convertStringToDateFormat(_birthDate.toString(), "yyyy/MM/dd")}");
"${AppDateUtils.convertStringToDateFormat(_birthDateInGregorian.toString(), "yyyy/MM/dd")}");
await widget.model.checkPatientForRegistration(
checkPatientForRegistrationModel);
GetPatientInfoRequestModel getPatientInfoRequestModel =
GetPatientInfoRequestModel(
//TODO Elham* this return the static to dynamic
//patientIdentificationID:"1062938285", _idController.text,
patientIdentificationID: "1062938285",
// _idController.text,
isHijri: 0,
isDentalAllowedBackend: false,
patientOutSA: 0,
@ -319,23 +372,41 @@ class _RegisterSearchPatientPageState extends State<RegisterSearchPatientPage> {
_phoneController.text.isNotEmpty &&
_idController.text != null &&
_idController.text.isNotEmpty &&
_birthDate != null) {
_birthDateInGregorian != null) {
return true;
}
return false;
}
Future _selectDate(BuildContext context, DateTime dateTime,
Function(DateTime picked) updateDate) async {
final DateTime picked = await showDatePicker(
context: context,
initialDate: dateTime,
firstDate: DateTime(DateTime.now().year - 150),
lastDate: DateTime(DateTime.now().year + 150),
initialEntryMode: DatePickerEntryMode.calendar,
);
if (picked != null && picked != dateTime) {
updateDate(picked);
Function(dynamic) updateDate) async {
if (calenderType == CalenderType.Hijri) {
HijriCalendar hijriDate = HijriCalendar.fromDate(DateTime.now());
final HijriCalendar pickedH = await showHijriDatePicker(
context: context,
initialDate: birthDateInHijri ?? hijriDate,
lastDate: new HijriCalendar()
..hYear = hijriDate.hYear
..hMonth = hijriDate.hMonth
..hDay = hijriDate.hDay,
firstDate: new HijriCalendar()
..hYear = 1438
..hMonth = 12
..hDay = 25,
initialDatePickerMode: DatePickerMode.day,
);
if (pickedH != null && birthDateInHijri != pickedH) updateDate(pickedH);
} else {
final DateTime picked = await showDatePicker(
context: context,
initialDate: dateTime ?? DateTime.now(),
firstDate: DateTime(DateTime.now().year - 150),
lastDate: DateTime.now(),
initialEntryMode: DatePickerEntryMode.calendar,
);
if (picked != null && picked != dateTime) {
updateDate(picked);
}
}
}
@ -359,4 +430,18 @@ class _RegisterSearchPatientPageState extends State<RegisterSearchPatientPage> {
},
);
}
getBirthdate() {
if (calenderType == CalenderType.Hijri) {
return birthDateInHijri != null
? "$birthDateInHijri"
: null;
}else{
return _birthDateInGregorian != null
? "${AppDateUtils.convertStringToDateFormat(_birthDateInGregorian.toString(), "yyyy/MM/dd")}"
: null;
}
}
}

@ -575,12 +575,19 @@ packages:
source: hosted
version: "1.0.6"
hijri:
dependency: "direct main"
dependency: transitive
description:
name: hijri
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
hijri_picker:
dependency: "direct main"
description:
name: hijri_picker
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
html:
dependency: "direct main"
description:
@ -699,7 +706,7 @@ packages:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0-nullsafety.4"
version: "1.3.0-nullsafety.3"
mime:
dependency: transitive
description:
@ -1033,7 +1040,7 @@ packages:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "1.10.0-nullsafety.2"
version: "1.10.0-nullsafety.1"
sticky_headers:
dependency: "direct main"
description:
@ -1238,5 +1245,5 @@ packages:
source: hosted
version: "2.2.1"
sdks:
dart: ">=2.10.2 <=2.11.0-213.1.beta"
dart: ">=2.10.2 <2.11.0"
flutter: ">=1.22.2 <2.0.0"

@ -104,7 +104,8 @@ dependencies:
badges: ^1.1.4
# Hijri
hijri: ^2.0.0
# hijri: ^2.0.3
hijri_picker: ^2.0.0

Loading…
Cancel
Save