diff --git a/assets/fonts/DoctorApp.ttf b/assets/fonts/DoctorApp.ttf
index 21ce4a5d..22539da0 100644
Binary files a/assets/fonts/DoctorApp.ttf and b/assets/fonts/DoctorApp.ttf differ
diff --git a/assets/images/leaves.svg b/assets/images/leaves.svg
new file mode 100644
index 00000000..474585fd
--- /dev/null
+++ b/assets/images/leaves.svg
@@ -0,0 +1,7 @@
+
diff --git a/lib/config/config.dart b/lib/config/config.dart
index fc7edf42..359d458d 100644
--- a/lib/config/config.dart
+++ b/lib/config/config.dart
@@ -107,6 +107,15 @@ const ARRIVED_PATIENT_URL =
const ADD_SICK_LEAVE = 'Services/DoctorApplication.svc/REST/PostSickLeave';
const GET_SICK_LEAVE = 'Services/DoctorApplication.svc/REST/GetAllSickLeaves';
const EXTEND_SICK_LEAVE = 'Services/DoctorApplication.svc/REST/ExtendSickLeave';
+
+const GET_OFFTIME = 'Services/DoctorApplication.svc/REST/GetMasterLookUpList';
+const GET_COVERING_DOCTORS =
+ 'Services/DoctorApplication.svc/REST/GetCoveringDoctor';
+const ADD_RESCHDEULE = 'Services/DoctorApplication.svc/REST/PostRequisition';
+const UPDATE_RESCHDEULE =
+ 'Services/DoctorApplication.svc/REST/PatchRequisition';
+const GET_RESCHEDULE_LEAVE =
+ 'Services/DoctorApplication.svc/REST/GetRequisition';
const GET_PRESCRIPTION_LIST =
'Services/DoctorApplication.svc/REST/GetPrescription';
@@ -130,13 +139,14 @@ const POST_CHIEF_COMPLAINT =
const POST_PHYSICAL_EXAM =
'Services/DoctorApplication.svc/REST/PostPhysicalExam';
const POST_PROGRESS_NOTE =
- 'Services/DoctorApplication.svc/REST/PostProgressNote';
+ '/Services/DoctorApplication.svc/REST/PostProgressNote';
const POST_ASSESSMENT = 'Services/DoctorApplication.svc/REST/PostAssessment';
const PATCH_ALLERGY = 'Services/DoctorApplication.svc/REST/PatchAllergies';
const PATCH_HISTORY = 'Services/DoctorApplication.svc/REST/PatchHistory';
const PATCH_CHIEF_COMPLAINT =
'Services/DoctorApplication.svc/REST/PatchChiefcomplaint';
+
const PATCH_PHYSICAL_EXAM =
'Services/DoctorApplication.svc/REST/PatchPhysicalExam';
const PATCH_PROGRESS_NOTE =
diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart
index 85954bb0..66c2e58c 100644
--- a/lib/config/localized_values.dart
+++ b/lib/config/localized_values.dart
@@ -354,6 +354,14 @@ const Map> localizedValues = {
'instruction': {'en': 'Instructions', 'ar': 'إرشادات'},
'addMedication': {'en': 'ADD MEDICATION', 'ar': 'اضف الدواء'},
'route': {'en': 'Route', 'ar': 'المسار'},
+ 'reschedule-leave': {
+ 'en': 'Reschedule and leaves',
+ 'ar': 'إعادة الجدولة والأوراق'
+ },
+ 'no-reschedule-leave': {
+ 'en': 'No Reschedule and leaves',
+ 'ar': 'لا إعادة جدولة ويغادر'
+ },
'weight': {'en': "Weight", 'ar': 'الوزن'},
'kg': {'en': "kg", 'ar': 'كغ'},
'height': {'en': "Height", 'ar': 'الطول'},
@@ -369,66 +377,131 @@ const Map> localizedValues = {
'rhythm': {'en': "Rhythm", 'ar': 'الإيقاع'},
'respBeats': {'en': 'RESP (beats/minute)', 'ar': ' (دقة/دقيقة)التنفس'},
'patternOfRespiration': {'en': "Pattern Of Respiration", 'ar': 'نمط التنفس'},
- 'bloodPressureDiastoleAndSystole': {'en': 'Blood Pressure (Sys, Dias)', 'ar': 'ضغط الدم (العظمى, الصغرى)'},
+ 'bloodPressureDiastoleAndSystole': {
+ 'en': 'Blood Pressure (Sys, Dias)',
+ 'ar': 'ضغط الدم (العظمى, الصغرى)'
+ },
'cuffLocation': {'en': "Cuff Location", 'ar': 'موقع الكف'},
'cuffSize': {'en': "Cuff Size", 'ar': 'حجم الكف'},
'patientPosition': {'en': "Patient Position", 'ar': 'موقع المريض'},
'fio2': {'en': "FIO2(%)", 'ar': 'FIO2(%)'},
'sao2': {'en': "SAO2(%)", 'ar': 'SAO2(%)'},
'painManagement': {'en': "Pain Management", 'ar': 'إدارة الألم'},
+ 'holiday': {'en': "Holiday", 'ar': 'يوم الاجازة'},
+ 'to': {'en': "To", 'ar': 'إلى'},
+ 'coveringDoctor': {'en': "Covering Doctor", 'ar': 'تغطية دكتور'},
+ 'requestLeave': {'en': 'Request Leave', 'ar': 'طلب إجازة'},
+ 'pleaseEnterDate': {
+ 'en': 'Please enter leave start date',
+ 'ar': 'الرجاء إدخال تاريخ بدء الإجازة'
+ },
+ 'pleaseEnterNoOfDays': {
+ 'en': 'Please enter sick leave days',
+ 'ar': 'الرجاء إدخال أيام الإجازة المرضية'
+ },
+ 'pleaseEnterRemarks': {
+ 'en': 'Please enter remarks',
+ 'ar': 'الرجاء إدخال الملاحظات'
+ },
+ 'update': {'en': 'Update', 'ar': 'تحديث'},
'admission': {'en': "Admission", 'ar': 'قبول'},
'request': {'en': "Request", 'ar': 'طلب'},
'admissionRequest': {'en': "Admission Request", 'ar': 'طلب قبول'},
'patientDetails': {'en': "Patient Details", 'ar': 'تفاصيل المريض'},
- 'specialityAndDoctorDetail': {'en': "SPECIALITY AND DOCTOR DETAILS", 'ar': 'تفاصيل التخصص والطبيب'},
+ 'specialityAndDoctorDetail': {
+ 'en': "SPECIALITY AND DOCTOR DETAILS",
+ 'ar': 'تفاصيل التخصص والطبيب'
+ },
'referringDate': {'en': "Referring Date", 'ar': 'تاريخ الإحالة'},
'referringDoctor': {'en': "Referring Doctor", 'ar': 'دكتور الإحالة'},
'otherInformation': {'en': "Other Information", 'ar': 'معلومات أخرى'},
'expectedDays': {'en': "Expected Days", 'ar': 'الأيام المتوقعة'},
- 'expectedAdmissionDate': {'en': "Expected Admission Date", 'ar': 'تاريخ القبول المتوقع'},
+ 'expectedAdmissionDate': {
+ 'en': "Expected Admission Date",
+ 'ar': 'تاريخ القبول المتوقع'
+ },
'emergencyAdmission': {'en': "EMERGENCY ADMISSION", 'ar': 'دخول الطوارئ'},
'patientPregnant': {'en': "Patient Pregnant", 'ar': 'حمل المريض'},
- 'treatmentLine': {'en': "Main line of treatment", 'ar': 'الخط الرئيسي للعلاج'},
+ 'treatmentLine': {
+ 'en': "Main line of treatment",
+ 'ar': 'الخط الرئيسي للعلاج'
+ },
'ward': {'en': "Ward", 'ar': 'رعاية'},
- 'preAnesthesiaReferred': {'en': "PRE ANESTHESIA REFERRED", 'ar': 'الاحالة قبل التخدير'},
+ 'preAnesthesiaReferred': {
+ 'en': "PRE ANESTHESIA REFERRED",
+ 'ar': 'الاحالة قبل التخدير'
+ },
'admissionType': {'en': "Admission Type", 'ar': 'نوع القبول'},
'diagnosis': {'en': "Diagnosis", 'ar': 'التشخيص'},
'allergies': {'en': "Allergies", 'ar': 'الحساسية'},
- 'preOperativeOrders': {'en': "Pre Operative Orders", 'ar': 'أوامر ما قبل العملية'},
- 'elementForImprovement': {'en': "Element For Improvement", 'ar': 'عنصر للتحسين'},
+ 'preOperativeOrders': {
+ 'en': "Pre Operative Orders",
+ 'ar': 'أوامر ما قبل العملية'
+ },
+ 'elementForImprovement': {
+ 'en': "Element For Improvement",
+ 'ar': 'عنصر للتحسين'
+ },
'dischargeDate': {'en': "Discharge Date", 'ar': 'تاريخ التفريغ'},
'dietType': {'en': "Diet Type", 'ar': 'نوع النظام الغذائي'},
- 'dietTypeRemarks': {'en': "Remarks on diet type", 'ar': 'ملاحظات على نوع النظام الغذائي'},
+ 'dietTypeRemarks': {
+ 'en': "Remarks on diet type",
+ 'ar': 'ملاحظات على نوع النظام الغذائي'
+ },
'save': {'en': "SAVE", 'ar': 'حفظ'},
- 'postPlansEstimatedCost': {'en': "POST PLANS & ESTIMATED COST", 'ar': 'خطط البريد والتكلفة المقدرة'},
+ 'postPlansEstimatedCost': {
+ 'en': "POST PLANS & ESTIMATED COST",
+ 'ar': 'خطط البريد والتكلفة المقدرة'
+ },
'ucaf': {'en': "UCAF", 'ar': 'UCAF'},
'emergencyCase': {'en': "Emergency Case", 'ar': 'حالة طارئة'},
'durationOfIllness': {'en': "duration Of Illness", 'ar': 'مدة المرض'},
- 'chiefComplaintsAndSymptoms': {'en': "CHIEF COMPLAINTS & OTHER SYMPTOMS", 'ar': 'شكاوى الرئيس وأعراض أخرى'},
- 'patientFeelsPainInHisBackAndCough': {'en': "Patient Feels pain in his back and cough", 'ar': 'يشعر المريض بألم في ظهره ويسعل'},
- 'additionalTextComplaints': {'en': "Additional text to add about Complaints", 'ar': 'نص إضافي لإضافته حول الشكاوى'},
+ 'chiefComplaintsAndSymptoms': {
+ 'en': "CHIEF COMPLAINTS & OTHER SYMPTOMS",
+ 'ar': 'شكاوى الرئيس وأعراض أخرى'
+ },
+ 'patientFeelsPainInHisBackAndCough': {
+ 'en': "Patient Feels pain in his back and cough",
+ 'ar': 'يشعر المريض بألم في ظهره ويسعل'
+ },
+ 'additionalTextComplaints': {
+ 'en': "Additional text to add about Complaints",
+ 'ar': 'نص إضافي لإضافته حول الشكاوى'
+ },
'otherConditions': {'en': "OTHER CONDITIONS", 'ar': 'شروط أخرى'},
'other': {'en': "Other", 'ar': 'أخرى'},
'how': {'en': "How", 'ar': 'كيف'},
'when': {'en': "When", 'ar': 'متى'},
'where': {'en': "Where", 'ar': 'أين'},
- 'specifyPossibleLineManagement': {'en': "Specify possible line of management", 'ar': 'حدد خط الإدارة المحتمل'},
+ 'specifyPossibleLineManagement': {
+ 'en': "Specify possible line of management",
+ 'ar': 'حدد خط الإدارة المحتمل'
+ },
'significantSigns': {'en': "SIGNIFICANT SIGNS", 'ar': 'علامات مهمة'},
'backAbdomen': {'en': "Back : Abdomen", 'ar': 'الظهر: البطن'},
+ 'reasons': {'en': "Reasons", 'ar': 'الأسباب'},
'createNew': {'en': "Create New", 'ar': 'انشاء '},
'episode': {'en': "Episode", 'ar': 'Episode'},
- 'update': {'en': "Update", 'ar': 'تعديل'},
'chiefComplaints': {'en': "Chief Complaints", 'ar': 'الشكاوى'},
'addChiefComplaints': {'en': "Add Chief Complaints", 'ar': ' اضافه الشكاوى'},
'histories': {'en': "Histories", 'ar': 'التاريخ المرضي'},
'allergiesSoap': {'en': "Allergies", 'ar': 'الحساسية'},
- 'historyOfPresentIllness': {'en': "History of Present Illness", 'ar': 'تاريخ المرض الحالي'},
- 'requiredMsg': {'en': "Please add required field correctly", 'ar':"الرجاء إضافة الحقل المطلوب بشكل صحيح" },
- 'addHistory': {'en': "Add History", 'ar':"اضافه تاريخ مرضي" },
- 'searchHistory': {'en': "Search History", 'ar':" البحث" },
- 'addSelectedHistories': {'en': "add selected histories", 'ar':" اضافه تاريخ مرضي" },
- 'addAllergies': {'en': "Add Allergies", 'ar':"أضف الحساسية" },
- 'itemExist': {'en': "This item already exist", 'ar':"هذا العنصر موجود" },
- 'selectAllergy': {'en': "Select Allergy", 'ar':"أختر الحساسية" },
- 'selectSeverity': {'en': "Select Severity", 'ar':"أختر الدرجه" },
+ 'historyOfPresentIllness': {
+ 'en': "History of Present Illness",
+ 'ar': 'تاريخ المرض الحالي'
+ },
+ 'requiredMsg': {
+ 'en': "Please add required field correctly",
+ 'ar': "الرجاء إضافة الحقل المطلوب بشكل صحيح"
+ },
+ 'addHistory': {'en': "Add History", 'ar': "اضافه تاريخ مرضي"},
+ 'searchHistory': {'en': "Search History", 'ar': " البحث"},
+ 'addSelectedHistories': {
+ 'en': "add selected histories",
+ 'ar': " اضافه تاريخ مرضي"
+ },
+ 'addAllergies': {'en': "Add Allergies", 'ar': "أضف الحساسية"},
+ 'itemExist': {'en': "This item already exist", 'ar': "هذا العنصر موجود"},
+ 'selectAllergy': {'en': "Select Allergy", 'ar': "أختر الحساسية"},
+ 'selectSeverity': {'en': "Select Severity", 'ar': "أختر الدرجه"},
};
diff --git a/lib/core/service/sickleave_service.dart b/lib/core/service/sickleave_service.dart
index 70d9a3e4..c4aa8abf 100644
--- a/lib/core/service/sickleave_service.dart
+++ b/lib/core/service/sickleave_service.dart
@@ -1,5 +1,6 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/service/base/base_service.dart';
+import 'package:doctor_app_flutter/core/viewModel/leave_rechdule_response.dart';
import 'package:doctor_app_flutter/models/sickleave/add_sickleave_request.dart';
import 'package:doctor_app_flutter/models/sickleave/extend_sick_leave_request.dart';
import 'package:doctor_app_flutter/models/sickleave/get_all_sickleave_response.dart';
@@ -8,9 +9,18 @@ import 'package:doctor_app_flutter/models/sickleave/get_all_sickleave_response.d
class SickLeaveService extends BaseService {
Map get sickLeavestatisitics => _statistics;
Map _statistics = {};
-
+ List get getOffTimeList => offTime;
+ List offTime = [];
+ List get getReasons => reasonse;
+ List reasonse = [];
List get getAllSickLeave => _getAllsickLeave;
List _getAllsickLeave = [];
+ List get coveringDoctorsList => _coveringDoctors;
+ List _coveringDoctors = [];
+
+ List get getAllRescheduleLeave =>
+ _getReScheduleLeave;
+ List _getReScheduleLeave = [];
Future getStatistics(appoNo, patientMRN) async {
hasError = false;
await baseAppClient.post(
@@ -29,14 +39,14 @@ class SickLeaveService extends BaseService {
}
Future addSickLeave(AddSickLeaveRequest addSickLeaveRequest) async {
- addSickLeaveRequest.appointmentNo = '2016054661';
- addSickLeaveRequest.patientMRN = '3120746';
+ // addSickLeaveRequest.appointmentNo = '2016054661';
+ // addSickLeaveRequest.patientMRN = '3120746';
hasError = false;
await baseAppClient.post(
ADD_SICK_LEAVE,
onSuccess: (dynamic response, int statusCode) {
Future.value(response);
- print(response);
+ //print(response);
// _statistics = {};
// _statistics = response['SickLeaveStatistics'];
},
@@ -72,7 +82,7 @@ class SickLeaveService extends BaseService {
);
}
- Future getSickLeave() async {
+ Future getSickLeave(patientMRN) async {
hasError = false;
await baseAppClient.post(
GET_SICK_LEAVE,
@@ -87,7 +97,109 @@ class SickLeaveService extends BaseService {
hasError = true;
super.error = error;
},
- body: {'PatientMRN': 3120772},
+ body: {'PatientMRN': patientMRN},
+ );
+ }
+
+ Future getRescheduleLeave() async {
+ hasError = false;
+ await baseAppClient.post(
+ GET_RESCHEDULE_LEAVE,
+ onSuccess: (dynamic response, int statusCode) {
+ Future.value(response);
+ _getReScheduleLeave.clear();
+ response['requisitionList']['entityList'].forEach((v) {
+ _getReScheduleLeave.add(GetRescheduleLeavesResponse.fromJson(v));
+ });
+ },
+ onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ },
+ body: {'ClinicID': 1},
+ );
+ }
+
+ Future getOffTime() async {
+ hasError = false;
+
+ await baseAppClient.post(
+ GET_OFFTIME,
+ onSuccess: (dynamic response, int statusCode) {
+ offTime = [];
+ offTime = response['MasterLookUpList']['entityList'];
+ },
+ onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ },
+ body: {"MasterInput": 2013},
+ );
+ }
+
+ Future getReasonsByID({id}) async {
+ hasError = false;
+
+ await baseAppClient.post(
+ GET_OFFTIME,
+ onSuccess: (dynamic response, int statusCode) {
+ reasonse = [];
+ reasonse = response['MasterLookUpList']['entityList'];
+ },
+ onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ },
+ body: {"MasterInput": id ?? 18},
+ );
+ }
+
+ Future getCoveringDoctors() async {
+ hasError = false;
+
+ await baseAppClient.post(
+ GET_COVERING_DOCTORS,
+ onSuccess: (dynamic response, int statusCode) {
+ _coveringDoctors = [];
+ _coveringDoctors = response['coveringDoctorList']['entityList'];
+ },
+ onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ },
+ body: {"ClinicID": 1},
+ );
+ }
+
+ addReschedule(request) async {
+ hasError = false;
+
+ await baseAppClient.post(
+ ADD_RESCHDEULE,
+ onSuccess: (dynamic response, int statusCode) {
+ Future.value(response);
+ },
+ onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ },
+ body: request,
+ );
+ }
+
+ updateReschedule(request) async {
+ hasError = false;
+
+ await baseAppClient.post(
+ UPDATE_RESCHDEULE,
+ onSuccess: (dynamic response, int statusCode) {
+ Future.value(response);
+ },
+ onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ },
+ body: request,
);
}
}
diff --git a/lib/core/viewModel/leave_rechdule_response.dart b/lib/core/viewModel/leave_rechdule_response.dart
new file mode 100644
index 00000000..d7cab8bf
--- /dev/null
+++ b/lib/core/viewModel/leave_rechdule_response.dart
@@ -0,0 +1,52 @@
+class GetRescheduleLeavesResponse {
+ int clinicId;
+ var coveringDoctorId;
+ String date;
+ String dateTimeFrom;
+ String dateTimeTo;
+ int doctorId;
+ int reasonId;
+ int requisitionNo;
+ int requisitionType;
+ int status;
+
+ GetRescheduleLeavesResponse(
+ {this.clinicId,
+ this.coveringDoctorId,
+ this.date,
+ this.dateTimeFrom,
+ this.dateTimeTo,
+ this.doctorId,
+ this.reasonId,
+ this.requisitionNo,
+ this.requisitionType,
+ this.status});
+
+ GetRescheduleLeavesResponse.fromJson(Map json) {
+ clinicId = json['clinicId'];
+ coveringDoctorId = json['coveringDoctorId'];
+ date = json['date'];
+ dateTimeFrom = json['dateTimeFrom'];
+ dateTimeTo = json['dateTimeTo'];
+ doctorId = json['doctorId'];
+ reasonId = json['reasonId'];
+ requisitionNo = json['requisitionNo'];
+ requisitionType = json['requisitionType'];
+ status = json['status'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['clinicId'] = this.clinicId;
+ data['coveringDoctorId'] = this.coveringDoctorId;
+ data['date'] = this.date;
+ data['dateTimeFrom'] = this.dateTimeFrom;
+ data['dateTimeTo'] = this.dateTimeTo;
+ data['doctorId'] = this.doctorId;
+ data['reasonId'] = this.reasonId;
+ data['requisitionNo'] = this.requisitionNo;
+ data['requisitionType'] = this.requisitionType;
+ data['status'] = this.status;
+ return data;
+ }
+}
diff --git a/lib/core/viewModel/patient_view_model.dart b/lib/core/viewModel/patient_view_model.dart
index 9672da83..2fcdc779 100644
--- a/lib/core/viewModel/patient_view_model.dart
+++ b/lib/core/viewModel/patient_view_model.dart
@@ -49,7 +49,7 @@ class PatientViewModel extends BaseViewModel {
List get referralFrequencyList =>
_patientService.referalFrequancyList;
- Future getPatientList( patient, patientType,
+ Future getPatientList(patient, patientType,
{bool isBusyLocal = false}) async {
if (isBusyLocal) {
setState(ViewState.BusyLocal);
diff --git a/lib/core/viewModel/sick_leave_view_model.dart b/lib/core/viewModel/sick_leave_view_model.dart
index a11d43ec..d5aba154 100644
--- a/lib/core/viewModel/sick_leave_view_model.dart
+++ b/lib/core/viewModel/sick_leave_view_model.dart
@@ -12,6 +12,10 @@ class SickLeaveViewModel extends BaseViewModel {
SickLeaveService _sickLeaveService = locator();
get sickLeaveStatistics => _sickLeaveService.sickLeavestatisitics;
get getAllSIckLeave => _sickLeaveService.getAllSickLeave;
+ List get allOffTime => _sickLeaveService.getOffTimeList;
+ List get allReasons => _sickLeaveService.getReasons;
+ List get coveringDoctors => _sickLeaveService.coveringDoctorsList;
+ get getReschduleLeave => _sickLeaveService.getAllRescheduleLeave;
Future addSickLeave(AddSickLeaveRequest addSickLeaveRequest) async {
setState(ViewState.Busy);
await _sickLeaveService.addSickLeave(addSickLeaveRequest);
@@ -42,9 +46,69 @@ class SickLeaveViewModel extends BaseViewModel {
setState(ViewState.Idle);
}
- Future getSickLeave() async {
+ Future getSickLeave(patientMRN) async {
setState(ViewState.Busy);
- await _sickLeaveService.getSickLeave();
+ await _sickLeaveService.getSickLeave(patientMRN);
+ if (_sickLeaveService.hasError) {
+ error = _sickLeaveService.error;
+ setState(ViewState.Error);
+ } else
+ setState(ViewState.Idle);
+ }
+
+ Future getRescheduleLeave() async {
+ setState(ViewState.Busy);
+ await _sickLeaveService.getRescheduleLeave();
+ if (_sickLeaveService.hasError) {
+ error = _sickLeaveService.error;
+ setState(ViewState.Error);
+ } else
+ setState(ViewState.Idle);
+ }
+
+ Future getOffTime() async {
+ setState(ViewState.Busy);
+ await _sickLeaveService.getOffTime();
+ if (_sickLeaveService.hasError) {
+ error = _sickLeaveService.error;
+ setState(ViewState.Error);
+ } else
+ setState(ViewState.Idle);
+ }
+
+ Future getReasons(id) async {
+ setState(ViewState.Busy);
+ await _sickLeaveService.getReasonsByID(id: id);
+ if (_sickLeaveService.hasError) {
+ error = _sickLeaveService.error;
+ setState(ViewState.Error);
+ } else
+ setState(ViewState.Idle);
+ }
+
+ Future getCoveringDoctors() async {
+ setState(ViewState.Busy);
+ await _sickLeaveService.getCoveringDoctors();
+ if (_sickLeaveService.hasError) {
+ error = _sickLeaveService.error;
+ setState(ViewState.Error);
+ } else
+ setState(ViewState.Idle);
+ }
+
+ Future addReschedule(request) async {
+ setState(ViewState.Busy);
+ await _sickLeaveService.addReschedule(request);
+ if (_sickLeaveService.hasError) {
+ error = _sickLeaveService.error;
+ setState(ViewState.Error);
+ } else
+ setState(ViewState.Idle);
+ }
+
+ Future updateReschedule(request) async {
+ setState(ViewState.Busy);
+ await _sickLeaveService.updateReschedule(request);
if (_sickLeaveService.hasError) {
error = _sickLeaveService.error;
setState(ViewState.Error);
diff --git a/lib/icons_app/config.json b/lib/icons_app/config.json
index fef927b0..ede09595 100644
--- a/lib/icons_app/config.json
+++ b/lib/icons_app/config.json
@@ -384,6 +384,34 @@
"sync"
]
},
+ {
+ "uid": "a0f7dbb184f90f285a9cba8cf09a9b6a",
+ "css": "drawer_icon",
+ "code": 59429,
+ "src": "custom_icons",
+ "selected": true,
+ "svg": {
+ "path": "M1564.7 1000H68C30.6 1000 0 958.7 0 908.2H0C0 857.6 30.6 816.3 68 816.3H1564.7C1602 816.3 1632.7 857.6 1632.7 908.2H1632.7C1632.7 958.7 1602 1000 1564.7 1000ZM911.6 591.8H68C30.6 591.8 0 550.5 0 500H0C0 449.5 30.6 408.2 68 408.2H911.6C949 408.2 979.6 449.5 979.6 500H979.6C979.6 550.5 949 591.8 911.6 591.8ZM1238.1 183.7H68C30.6 183.7 0 142.4 0 91.8H0C0 41.3 30.6 0 68 0H1238.1C1275.5 0 1306.1 41.3 1306.1 91.8H1306.1C1306.1 142.4 1275.5 183.7 1238.1 183.7Z",
+ "width": 1633
+ },
+ "search": [
+ "drawer_icon"
+ ]
+ },
+ {
+ "uid": "764baf138776221a3e1e845391b188a4",
+ "css": "leaves",
+ "code": 59446,
+ "src": "custom_icons",
+ "selected": true,
+ "svg": {
+ "path": "M968.7 468.7H572.9A31.3 31.3 0 1 1 572.9 406.2H968.7A31.3 31.3 0 1 1 968.7 468.7ZM968.7 468.7M812.5 625A31.3 31.3 0 0 1 790.4 571.6L924.5 437.5 790.4 303.3A31.3 31.3 0 0 1 834.6 259.1L990.9 415.4A31.3 31.3 0 0 1 990.9 459.6L834.6 615.8A31.2 31.2 0 0 1 812.5 625ZM812.5 625M333.3 1000A83.3 83.3 0 0 0 416.7 916.7V166.7A83.9 83.9 0 0 0 360.3 87.5L109.9 4.1A84.2 84.2 0 0 0 0 83.4V833.4A83.9 83.9 0 0 0 56.4 912.4L306.8 995.8A87.2 87.2 0 0 0 333.3 1000ZM83.3 62.5A24.5 24.5 0 0 1 90.8 63.6L340.1 146.7A21.4 21.4 0 0 1 354.2 166.6V916.6A22 22 0 0 1 325.9 936.4L76.6 853.3A21.5 21.5 0 0 1 62.5 833.3V83.3A20.9 20.9 0 0 1 83.3 62.5ZM83.3 62.5M635.4 208.3A31.3 31.3 0 0 0 666.7 177.1V114.6A114.7 114.7 0 0 0 552.1 0H83.3A31.3 31.3 0 0 0 83.3 62.5H552.1A52.1 52.1 0 0 1 604.2 114.6V177.1A31.3 31.3 0 0 0 635.4 208.3ZM635.4 208.3M385.4 875H552.1A114.7 114.7 0 0 0 666.6 760.4V697.9A31.3 31.3 0 0 0 604.1 697.9V760.4A52.1 52.1 0 0 1 552.1 812.5H385.4A31.3 31.3 0 0 0 385.4 875ZM385.4 875",
+ "width": 1000
+ },
+ "search": [
+ "leaves"
+ ]
+ },
{
"uid": "740f78c2b53c8cc100a8b0d283bbd34f",
"css": "home_icon-1",
@@ -481,19 +509,6 @@
"search": [
"scdedule_icon_active"
]
- }, {
- "uid": "a0f7dbb184f90f285a9cba8cf09a9b6a",
- "css": "drawer_icon",
- "code": 59429,
- "src": "custom_icons",
- "selected": true,
- "svg": {
- "path": "M1564.7 1000H68C30.6 1000 0 958.7 0 908.2H0C0 857.6 30.6 816.3 68 816.3H1564.7C1602 816.3 1632.7 857.6 1632.7 908.2H1632.7C1632.7 958.7 1602 1000 1564.7 1000ZM911.6 591.8H68C30.6 591.8 0 550.5 0 500H0C0 449.5 30.6 408.2 68 408.2H911.6C949 408.2 979.6 449.5 979.6 500H979.6C979.6 550.5 949 591.8 911.6 591.8ZM1238.1 183.7H68C30.6 183.7 0 142.4 0 91.8H0C0 41.3 30.6 0 68 0H1238.1C1275.5 0 1306.1 41.3 1306.1 91.8H1306.1C1306.1 142.4 1275.5 183.7 1238.1 183.7Z",
- "width": 1633
- },
- "search": [
- "drawer_icon"
- ]
}
]
}
\ No newline at end of file
diff --git a/lib/icons_app/doctor_app_icons.dart b/lib/icons_app/doctor_app_icons.dart
index 80db55c1..ef01c934 100644
--- a/lib/icons_app/doctor_app_icons.dart
+++ b/lib/icons_app/doctor_app_icons.dart
@@ -11,7 +11,7 @@
/// fonts:
/// - asset: fonts/DoctorApp.ttf
///
-///
+///
///
import 'package:flutter/widgets.dart';
@@ -19,35 +19,64 @@ class DoctorApp {
DoctorApp._();
static const _kFontFam = 'DoctorApp';
- static const _kFontPkg = null;
-
- static const IconData female_icon = IconData(0xe800, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData male = IconData(0xe801, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData reject_icon = IconData(0xe802, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData home_icon_active = IconData(0xe803, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData menu_icon = IconData(0xe804, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData menu_icon_active = IconData(0xe805, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData message_icon = IconData(0xe806, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData message_icon_active = IconData(0xe807, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData scdedule_icon_active = IconData(0xe808, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData schedule_icon = IconData(0xe809, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData discharge_patient = IconData(0xe80a, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData approved_icon = IconData(0xe80b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData pending_icon = IconData(0xe80c, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData in_patient_white = IconData(0xe80d, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData lab_results = IconData(0xe80e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData home_icon = IconData(0xe80f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData operations = IconData(0xe813, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData out_patient = IconData(0xe814, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData patient = IconData(0xe815, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData radiology = IconData(0xe817, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData mail = IconData(0xe81e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData medicine_search = IconData(0xe81f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData qr_code = IconData(0xe820, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData referral = IconData(0xe821, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData referred = IconData(0xe822, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData search_patient = IconData(0xe823, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData sync_icon = IconData(0xe824, fontFamily: _kFontFam, fontPackage: _kFontPkg);
- static const IconData drawer_icon = IconData(0xe825, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const String _kFontPkg = null;
+ static const IconData female_icon =
+ IconData(0xe800, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData male =
+ IconData(0xe801, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData reject_icon =
+ IconData(0xe802, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData home_icon_active =
+ IconData(0xe803, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData menu_icon =
+ IconData(0xe804, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData menu_icon_active =
+ IconData(0xe805, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData message_icon =
+ IconData(0xe806, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData message_icon_active =
+ IconData(0xe807, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData scdedule_icon_active =
+ IconData(0xe808, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData schedule_icon =
+ IconData(0xe809, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData discharge_patient =
+ IconData(0xe80a, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData approved_icon =
+ IconData(0xe80b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData pending_icon =
+ IconData(0xe80c, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData in_patient_white =
+ IconData(0xe80d, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData lab_results =
+ IconData(0xe80e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData home_icon =
+ IconData(0xe80f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData operations =
+ IconData(0xe813, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData out_patient =
+ IconData(0xe814, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData patient =
+ IconData(0xe815, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData qr_code =
+ IconData(0xe816, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData radiology =
+ IconData(0xe817, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData referral =
+ IconData(0xe818, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData search_patient =
+ IconData(0xe81a, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData mail =
+ IconData(0xe81e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData medicine_search =
+ IconData(0xe81f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData referred =
+ IconData(0xe822, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData sync_icon =
+ IconData(0xe824, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData drawer_icon =
+ IconData(0xe825, fontFamily: _kFontFam, fontPackage: _kFontPkg);
+ static const IconData leaves =
+ IconData(0xe836, fontFamily: _kFontFam, fontPackage: _kFontPkg);
}
diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart
index b6bbc6cf..20f22382 100644
--- a/lib/screens/dashboard_screen.dart
+++ b/lib/screens/dashboard_screen.dart
@@ -11,6 +11,7 @@ import 'package:doctor_app_flutter/core/viewModel/hospital_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/profile/referral/my-referral-patient-screen.dart';
+import 'package:doctor_app_flutter/screens/reschedule-leaves/add-rescheduleleave.dart';
import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart';
import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
@@ -184,7 +185,9 @@ class _DashboardScreenState extends State {
),
Container(
color: Colors.white,
- height: this.isExpanded ? 150 : 110,
+ height: this.isExpanded
+ ? MediaQuery.of(context).size.height * 0.19
+ : MediaQuery.of(context).size.height * 0.12,
),
],
),
@@ -953,6 +956,40 @@ class _DashboardScreenState extends State {
SizedBox(
height: 20,
),
+ Row(
+ children: [
+ DashboardItem(
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.spaceAround,
+ children: [
+ Icon(
+ DoctorApp.leaves,
+ size: 50,
+ ),
+ AppText(
+ TranslationBase.of(context).rescheduleLeaves,
+ color: Colors.black,
+ textAlign: TextAlign.center,
+ )
+ ],
+ ),
+ hasBorder: true,
+ onTap: () {
+ Navigator.push(
+ context,
+ MaterialPageRoute(
+ builder: (context) =>
+ AddRescheduleLeavScreen(),
+ // MyReferredPatient(),
+ ),
+ );
+ },
+ )
+ ],
+ ),
+ SizedBox(
+ height: 20,
+ ),
],
),
),
diff --git a/lib/screens/reschedule-leaves/add-rescheduleleave.dart b/lib/screens/reschedule-leaves/add-rescheduleleave.dart
new file mode 100644
index 00000000..a4739247
--- /dev/null
+++ b/lib/screens/reschedule-leaves/add-rescheduleleave.dart
@@ -0,0 +1,292 @@
+import 'package:doctor_app_flutter/config/config.dart';
+import 'package:doctor_app_flutter/config/size_config.dart';
+import 'package:doctor_app_flutter/core/viewModel/leave_rechdule_response.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/core/viewModel/sick_leave_view_model.dart';
+import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
+import 'package:doctor_app_flutter/models/sickleave/get_all_sickleave_response.dart';
+import 'package:doctor_app_flutter/screens/base/base_view.dart';
+import 'package:doctor_app_flutter/screens/reschedule-leaves/reschedule_leave.dart';
+import 'package:doctor_app_flutter/screens/sick-leave/sick_leave.dart';
+import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
+import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
+import 'package:doctor_app_flutter/widgets/shared/app_text_form_field.dart';
+import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
+import 'package:doctor_app_flutter/widgets/shared/card_with_bgNew_widget.dart';
+import 'package:flutter/material.dart';
+import 'package:hexcolor/hexcolor.dart';
+import 'package:provider/provider.dart';
+
+class AddRescheduleLeavScreen extends StatelessWidget {
+ ProjectViewModel projectsProvider;
+ @override
+ Widget build(BuildContext context) {
+ projectsProvider = Provider.of(context);
+ return BaseView(
+ onModelReady: (model) =>
+ {model.getRescheduleLeave(), model.getCoveringDoctors()},
+ builder: (_, model, w) => AppScaffold(
+ baseViewModel: model,
+ appBarTitle: TranslationBase.of(context).rescheduleLeaves,
+ body: model.getReschduleLeave.length > 0
+ ? SingleChildScrollView(
+ child: Column(
+ children: [
+ Container(
+ margin:
+ EdgeInsets.only(left: 15, right: 15, top: 20),
+ decoration: BoxDecoration(
+ borderRadius:
+ BorderRadius.all(Radius.circular(6.0)),
+ border: Border.all(
+ width: 1.0, color: HexColor("#CCCCCC"))),
+ padding: EdgeInsets.all(5),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ AppTextFormField(
+ hintText:
+ TranslationBase.of(context).requestLeave,
+ borderColor: Colors.white,
+ prefix: IconButton(
+ icon: Icon(
+ Icons.add_circle,
+ color: Colors.red,
+ )),
+ textInputType: TextInputType.text,
+ onTap: () {
+ openLeave(
+ context,
+ false,
+ );
+ },
+ inputFormatter: ONLY_LETTERS,
+ )
+ ],
+ ),
+ ),
+ Column(
+ children: model.getReschduleLeave.map(
+ (GetRescheduleLeavesResponse item) {
+ return CardWithBgWidgetNew(
+ widget: Column(
+ children: [
+ Container(
+ padding:
+ EdgeInsets.only(left: 10, right: 10),
+ child: Row(
+ mainAxisAlignment:
+ MainAxisAlignment.start,
+ children: [
+ Expanded(
+ flex: 4,
+ child: Wrap(
+ children: [
+ Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ Container(
+ padding:
+ EdgeInsets.all(3),
+ child: AppText(
+ item.status == 1
+ ? TranslationBase
+ .of(context)
+ .approved
+ : item.status == 2
+ ? TranslationBase.of(
+ context)
+ .pending
+ : TranslationBase.of(
+ context)
+ .rejected,
+ fontWeight:
+ FontWeight.bold,
+ color: Colors.white,
+ ),
+ color: item.status == 1
+ ? Colors.green
+ : item.status == 2
+ ? Colors
+ .yellow[800]
+ : Colors.red[800],
+ ),
+ SizedBox(
+ height: 5,
+ ),
+ Container(
+ child: AppText(
+ TranslationBase.of(
+ context)
+ .holiday +
+ ' ',
+ fontWeight:
+ FontWeight.bold,
+ )),
+ Row(
+ children: [
+ Flexible(
+ child: Text(
+ item.dateTimeFrom +
+ ' ' +
+ TranslationBase.of(
+ context)
+ .to +
+ ' ' +
+ item.dateTimeTo,
+ // overflow:
+ // TextOverflow.ellipsis,
+ ))
+ ],
+ ),
+ SizedBox(
+ height: 5,
+ ),
+ AppText(
+ TranslationBase.of(
+ context)
+ .coveringDoctor,
+ fontWeight:
+ FontWeight.bold,
+ ),
+ model.coveringDoctors
+ .length >
+ 0
+ ? Row(children: [
+ AppText(getDoctor(
+ model
+ .coveringDoctors,
+ item.doctorId))
+ ])
+ : SizedBox(),
+ AppText(
+ TranslationBase.of(
+ context)
+ .reasons,
+ fontWeight:
+ FontWeight.bold,
+ ),
+ model.allReasons.length > 0
+ ? Row(children: [
+ AppText(getReasons(
+ model
+ .allReasons,
+ item.reasonId))
+ ])
+ : SizedBox(),
+ ],
+ ),
+ SizedBox(
+ width: 10,
+ ),
+ ],
+ ),
+ ),
+ (item.status == 1)
+ ? Expanded(
+ flex: 1,
+ child: IconButton(
+ icon: Icon(
+ Icons.edit_outlined,
+ size: 30,
+ ),
+ // color: Colors.green, //Colors.black,
+ onPressed: () => {
+ openLeave(context, true,
+ extendedData: item)
+ },
+ ))
+ : SizedBox(),
+ ],
+ )),
+ SizedBox(
+ height: 10,
+ ),
+ Divider(
+ height: 1,
+ ),
+ ],
+ ));
+ }).toList(),
+ )
+ ],
+ ),
+ )
+ : new Builder(builder: (context) {
+ return Center(
+ child: SingleChildScrollView(
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Container(
+ padding: EdgeInsets.all(40),
+ decoration: BoxDecoration(
+ border: Border.all(
+ color: HexColor('#B8382C'), width: 4),
+ borderRadius:
+ BorderRadius.all(Radius.circular(100))),
+ child: IconButton(
+ icon: Icon(
+ Icons.add,
+ size: 35,
+ ),
+ onPressed: () {
+ openLeave(
+ context,
+ false,
+ );
+ }),
+ ),
+ Padding(
+ child: AppText(
+ TranslationBase.of(context).noReScheduleLeave,
+ fontWeight: FontWeight.bold,
+ ),
+ padding: EdgeInsets.all(10),
+ ),
+ AppText(
+ TranslationBase.of(context).applyNow,
+ fontWeight: FontWeight.bold,
+ color: HexColor('#B8382C'),
+ )
+ ],
+ ),
+ ));
+ }),
+ ));
+ }
+
+ openLeave(BuildContext context, isExtend, {extendedData}) {
+ showModalBottomSheet(
+ context: context,
+ builder: (context) {
+ return new Container(
+ child: RescheduleLeaveScreen(
+ isExtend,
+ extendedData,
+ ));
+ });
+ }
+
+ getDoctor(model, doctorId) {
+ var obj;
+ obj = model.where((i) => i['doctorID'] == doctorId).toList();
+ print(obj);
+
+ return obj.length > 0 ? obj[0]['doctorName'] : "";
+ }
+
+ getReasons(model, reasonID) {
+ var obj;
+ obj = model.where((i) => i['id'] == reasonID).toList();
+ print(obj);
+
+ return obj.length > 0
+ ? projectsProvider.isArabic == true
+ ? obj[0]['nameAr']
+ : obj[0]['nameEn']
+ : "";
+ }
+}
diff --git a/lib/screens/reschedule-leaves/reschedule_leave.dart b/lib/screens/reschedule-leaves/reschedule_leave.dart
new file mode 100644
index 00000000..c74395a3
--- /dev/null
+++ b/lib/screens/reschedule-leaves/reschedule_leave.dart
@@ -0,0 +1,819 @@
+import 'package:date_time_picker/date_time_picker.dart';
+import 'package:doctor_app_flutter/config/config.dart';
+import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
+import 'package:doctor_app_flutter/config/size_config.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/core/viewModel/sick_leave_view_model.dart';
+import 'package:doctor_app_flutter/models/sickleave/add_sickleave_request.dart';
+import 'package:doctor_app_flutter/screens/base/base_view.dart';
+import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart';
+import 'package:doctor_app_flutter/util/helpers.dart';
+import 'package:doctor_app_flutter/util/text_validator.dart';
+import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
+import 'package:doctor_app_flutter/widgets/shared/Text.dart';
+import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart';
+import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
+import 'package:doctor_app_flutter/widgets/shared/app_text_form_field.dart';
+import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
+import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:hexcolor/hexcolor.dart';
+import 'package:intl/intl.dart';
+import 'package:doctor_app_flutter/models/sickleave/get_all_sickleave_response.dart';
+import 'package:provider/provider.dart';
+
+Helpers helpers = Helpers();
+
+class RescheduleLeaveScreen extends StatefulWidget {
+ final isUpdate;
+ final updateData;
+ RescheduleLeaveScreen(this.isUpdate, this.updateData);
+ @override
+ _RescheduleLeaveScreen createState() => _RescheduleLeaveScreen();
+}
+
+class _RescheduleLeaveScreen extends State {
+ DrAppSharedPreferances sharedPref = new DrAppSharedPreferances();
+ TextEditingController _toDateController = new TextEditingController();
+ TextEditingController _toDateController2 = new TextEditingController();
+ ProjectViewModel projectsProvider;
+ String _selectedClinic;
+ Map profile = {};
+ var offTime = '2';
+ var date;
+ var doctorID;
+ var reason;
+ var fromDate;
+ var toDate;
+ var clinicID;
+ TextEditingController _controller4;
+ void _presentDatePicker(id) {
+ showDatePicker(
+ context: context,
+ initialDate: DateTime.now(),
+ firstDate: DateTime.now(),
+ lastDate: DateTime(2050),
+ ).then((pickedDate) {
+ if (pickedDate == null) {
+ return;
+ }
+ setState(() {
+ final df = new DateFormat('yyyy-MM-dd');
+ if (id == 'fromDate') {
+ fromDate = pickedDate; //df.format();
+ _toDateController.text = df.format(pickedDate);
+ } else {
+ toDate = pickedDate; //
+ _toDateController2.text = df.format(pickedDate);
+ }
+ });
+ });
+ }
+
+ @override
+ void initState() {
+ getProfile();
+
+ super.initState();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ projectsProvider = Provider.of(context);
+ return BaseView(
+ onModelReady: (model) => model.getClinicsList(),
+ builder: (_, model, w) => BaseView(
+ onModelReady: (model2) => {
+ model2.getOffTime(),
+ model2.getReasons(18),
+ model2.getCoveringDoctors()
+ },
+ builder: (_, model2, w) => AppScaffold(
+ baseViewModel: model2,
+ isShowAppBar: false,
+ body: Center(
+ child: Container(
+ margin: EdgeInsets.only(top: 10),
+ child: FractionallySizedBox(
+ widthFactor: 0.9,
+ child: ListView(
+ children: [
+ Container(
+ margin: EdgeInsets.all(8),
+ decoration: BoxDecoration(
+ borderRadius:
+ BorderRadius.all(Radius.circular(6.0)),
+ border: Border.all(
+ width: 1.0,
+ color: HexColor("#CCCCCC"))),
+ width: double.infinity,
+ child: Padding(
+ padding: EdgeInsets.only(
+ top: SizeConfig.widthMultiplier * 0.9,
+ bottom: SizeConfig.widthMultiplier * 0.9,
+ right: SizeConfig.widthMultiplier * 3,
+ left: SizeConfig.widthMultiplier * 3),
+ child: Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ Row(
+ mainAxisSize: MainAxisSize.max,
+ children: [
+ Expanded(
+ // add Expanded to have your dropdown button fill remaining space
+ child: DropdownButtonHideUnderline(
+ child: new IgnorePointer(
+ ignoring: true,
+ child: DropdownButton(
+ focusColor: Colors.grey,
+ isExpanded: true,
+ value: getClinicName(
+ model) ??
+ "",
+ iconSize: 40,
+ elevation: 16,
+ selectedItemBuilder:
+ (BuildContext
+ context) {
+ return model
+ .getClinicNameList()
+ .map((item) {
+ return Row(
+ mainAxisSize:
+ MainAxisSize
+ .max,
+ children: [
+ AppText(
+ item,
+ fontSize: SizeConfig
+ .textMultiplier *
+ 2.1,
+ color:
+ Colors.grey,
+ ),
+ ],
+ );
+ }).toList();
+ },
+ onChanged: (newValue) =>
+ {},
+ items: model
+ .getClinicNameList()
+ .map((item) {
+ return DropdownMenuItem(
+ value:
+ item.toString(),
+ child: Text(
+ item,
+ textAlign:
+ TextAlign.end,
+ ),
+ );
+ }).toList(),
+ ))),
+ ),
+ ],
+ )
+ ],
+ ),
+ )),
+
+ Container(
+ margin: EdgeInsets.all(8),
+ decoration: BoxDecoration(
+ borderRadius:
+ BorderRadius.all(Radius.circular(6.0)),
+ border: Border.all(
+ width: 1.0, color: HexColor("#CCCCCC"))),
+ padding: EdgeInsets.all(5),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ new IgnorePointer(
+ ignoring: true,
+ child: AppTextFormField(
+ readOnly: true,
+ hintText: profile != null
+ ? profile['DoctorName']
+ : "",
+ borderColor: Colors.white,
+ onSaved: (value) {},
+ inputFormatter: ONLY_NUMBERS))
+ ],
+ ),
+ ),
+
+ Container(
+ margin: EdgeInsets.all(8),
+ decoration: BoxDecoration(
+ borderRadius:
+ BorderRadius.all(Radius.circular(6.0)),
+ border: Border.all(
+ width: 1.0,
+ color: HexColor("#CCCCCC"))),
+ width: double.infinity,
+ child: Padding(
+ padding: EdgeInsets.only(
+ top: SizeConfig.widthMultiplier * 0.9,
+ bottom: SizeConfig.widthMultiplier * 0.9,
+ right: SizeConfig.widthMultiplier * 3,
+ left: SizeConfig.widthMultiplier * 3),
+ child: Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ Row(
+ mainAxisSize: MainAxisSize.max,
+ children: [
+ model2.allOffTime.length > 0
+ ? Expanded(
+ // add Expanded to have your dropdown button fill remaining space
+ child:
+ DropdownButtonHideUnderline(
+ child: DropdownButton(
+ focusColor: Colors.grey,
+ isExpanded: true,
+ value: offTime == null
+ ? model2.allOffTime[0]
+ ['code']
+ : offTime,
+ iconSize: 40,
+ elevation: 16,
+ selectedItemBuilder:
+ (BuildContext context) {
+ return model2.allOffTime
+ .map((item) {
+ return Row(
+ mainAxisSize:
+ MainAxisSize.max,
+ children: [
+ AppText(
+ item[
+ 'description'],
+ fontSize: SizeConfig
+ .textMultiplier *
+ 2.1,
+ color:
+ Colors.grey,
+ ),
+ ],
+ );
+ }).toList();
+ },
+ onChanged: (newValue) => {
+ setState(() {
+ offTime = newValue;
+ }),
+ if (offTime == '1')
+ {model2.getReasons(18)}
+ else if (offTime == '2')
+ {model2.getReasons(19)}
+ else if (offTime == '3' ||
+ offTime == '5')
+ {model2.getReasons(102)}
+ },
+ items: model2.allOffTime
+ .map((item) {
+ return DropdownMenuItem<
+ String>(
+ value: item['code']
+ .toString(),
+ child: Text(
+ item['description'],
+ textAlign:
+ TextAlign.end,
+ ),
+ );
+ }).toList(),
+ )),
+ )
+ : SizedBox(),
+ ],
+ )
+ ],
+ ),
+ )),
+ offTime == '1'
+ ? Column(
+ children: [
+ Container(
+ margin: EdgeInsets.all(8),
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.all(
+ Radius.circular(6.0)),
+ border: Border.all(
+ width: 1.0,
+ color: HexColor("#CCCCCC"))),
+ padding: EdgeInsets.all(5),
+ child: Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ AppTextFormField(
+ hintText: TranslationBase.of(
+ context)
+ .fromDate,
+ borderColor: Colors.white,
+ prefix: IconButton(
+ icon: Icon(Icons
+ .calendar_today)),
+ textInputType:
+ TextInputType.number,
+ controller: _toDateController,
+ onTap: () {
+ _presentDatePicker(
+ 'fromDate');
+ },
+ inputFormatter: ONLY_DATE,
+ onChanged: (value) {
+ fromDate = value;
+ }),
+ ],
+ )),
+ Row(
+ children: [
+ Expanded(
+ child: Container(
+ margin: EdgeInsets.all(8),
+ decoration: BoxDecoration(
+ borderRadius:
+ BorderRadius.all(
+ Radius.circular(6.0)),
+ border: Border.all(
+ width: 1.0,
+ color:
+ HexColor("#CCCCCC"))),
+ padding: EdgeInsets.all(5),
+ child: Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ // new AppTextFormField(
+ // readOnly: true,
+ // hintText: "",
+ // borderColor: Colors.white,
+ // onSaved: (value) {},
+ // inputFormatter: ONLY_NUMBERS),
+
+ DateTimePicker(
+ type:
+ DateTimePickerType.time,
+ controller: _controller4,
+ //initialValue: _initialValue,
+ // icon: Icon(Icons.access_time),
+
+ //use24HourFormat: false,
+ //locale: Locale('en', 'US'),
+ onChanged: (val) => () {
+ print(val);
+ },
+ validator: (val) {
+ print(val);
+ // setState(
+ // () => _valueToValidate4 = val);
+ return null;
+ },
+ onSaved: (val) => {},
+ )
+ ],
+ ),
+ ),
+ ),
+ Expanded(
+ child: Container(
+ margin: EdgeInsets.all(8),
+ decoration: BoxDecoration(
+ borderRadius:
+ BorderRadius.all(
+ Radius.circular(6.0)),
+ border: Border.all(
+ width: 1.0,
+ color:
+ HexColor("#CCCCCC"))),
+ padding: EdgeInsets.all(5),
+ child: Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ DateTimePicker(
+ type:
+ DateTimePickerType.time,
+ controller: _controller4,
+ //initialValue: _initialValue,
+ // icon: Icon(Icons.access_time),
+
+ //use24HourFormat: false,
+ //locale: Locale('en', 'US'),
+ onChanged: (val) => () {
+ print(val);
+ },
+ validator: (val) {
+ print(val);
+ // setState(
+ // () => _valueToValidate4 = val);
+ return null;
+ },
+ onSaved: (val) =>
+ {print(val)},
+ )
+ ],
+ ),
+ ),
+ )
+ ],
+ )
+ ],
+ )
+ : Column(
+ children: [
+ Container(
+ margin: EdgeInsets.all(8),
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.all(
+ Radius.circular(6.0)),
+ border: Border.all(
+ width: 1.0,
+ color: HexColor("#CCCCCC"))),
+ padding: EdgeInsets.all(5),
+ child: Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ AppTextFormField(
+ hintText: TranslationBase.of(
+ context)
+ .fromDate,
+ borderColor: Colors.white,
+ prefix: IconButton(
+ icon: Icon(Icons
+ .calendar_today)),
+ textInputType:
+ TextInputType.number,
+ controller: _toDateController,
+ onTap: () {
+ _presentDatePicker(
+ 'fromDate');
+ },
+ inputFormatter: ONLY_DATE,
+ onChanged: (value) {
+ setState(() {
+ toDate = value;
+ });
+ }),
+ ],
+ )),
+ Container(
+ margin: EdgeInsets.all(8),
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.all(
+ Radius.circular(6.0)),
+ border: Border.all(
+ width: 1.0,
+ color: HexColor("#CCCCCC"))),
+ padding: EdgeInsets.all(5),
+ child: Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ AppTextFormField(
+ hintText: TranslationBase
+ .of(context)
+ .fromDate,
+ borderColor: Colors.white,
+ prefix: IconButton(
+ icon: Icon(
+ Icons
+ .calendar_today)),
+ textInputType:
+ TextInputType.number,
+ controller:
+ _toDateController2,
+ onTap: () {
+ _presentDatePicker(
+ 'toDate');
+ },
+ inputFormatter: ONLY_DATE,
+ onChanged: (value) {
+ setState(() {
+ toDate = value;
+ });
+ }),
+ ],
+ ))
+ ],
+ ),
+ Container(
+ margin: EdgeInsets.all(8),
+ decoration: BoxDecoration(
+ borderRadius:
+ BorderRadius.all(Radius.circular(6.0)),
+ border: Border.all(
+ width: 1.0,
+ color: HexColor("#CCCCCC"))),
+ width: double.infinity,
+ child: Padding(
+ padding: EdgeInsets.only(
+ top: SizeConfig.widthMultiplier * 0.9,
+ bottom: SizeConfig.widthMultiplier * 0.9,
+ right: SizeConfig.widthMultiplier * 3,
+ left: SizeConfig.widthMultiplier * 3),
+ child: Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ Row(
+ mainAxisSize: MainAxisSize.max,
+ children: [
+ model2.allReasons.length > 0
+ ? Expanded(
+ // add Expanded to have your dropdown button fill remaining space
+ child:
+ DropdownButtonHideUnderline(
+ child: DropdownButton(
+ focusColor: Colors.grey,
+ isExpanded: true,
+ value: reason == null
+ ? model2.allReasons[0]
+ ['id']
+ .toString()
+ : reason,
+ iconSize: 40,
+ elevation: 16,
+ selectedItemBuilder:
+ (BuildContext context) {
+ return model2.allReasons
+ .map((item) {
+ return Row(
+ mainAxisSize:
+ MainAxisSize.max,
+ children: [
+ AppText(
+ projectsProvider
+ .isArabic
+ ? item[
+ 'nameAr']
+ : item[
+ 'nameEn'],
+ fontSize: SizeConfig
+ .textMultiplier *
+ 2.1,
+ color:
+ Colors.grey,
+ ),
+ ],
+ );
+ }).toList();
+ },
+ onChanged: (newValue) => {
+ setState(() {
+ reason = newValue;
+ })
+ },
+ items: model2.allReasons
+ .map((item) {
+ return DropdownMenuItem<
+ String>(
+ value: item['id']
+ .toString(),
+ child: Text(
+ projectsProvider
+ .isArabic
+ ? item['nameAr']
+ : item['nameEn'],
+ textAlign:
+ TextAlign.end,
+ ),
+ );
+ }).toList(),
+ )),
+ )
+ : SizedBox(),
+ ],
+ )
+ ],
+ ),
+ )),
+
+ Container(
+ margin: EdgeInsets.all(8),
+ decoration: BoxDecoration(
+ borderRadius:
+ BorderRadius.all(Radius.circular(6.0)),
+ border: Border.all(
+ width: 1.0,
+ color: HexColor("#CCCCCC"))),
+ width: double.infinity,
+ child: Padding(
+ padding: EdgeInsets.only(
+ top: SizeConfig.widthMultiplier * 0.9,
+ bottom: SizeConfig.widthMultiplier * 0.9,
+ right: SizeConfig.widthMultiplier * 3,
+ left: SizeConfig.widthMultiplier * 3),
+ child: Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ Row(
+ mainAxisSize: MainAxisSize.max,
+ children: [
+ model2.coveringDoctors.length > 0
+ ? Expanded(
+ // add Expanded to have your dropdown button fill remaining space
+ child:
+ DropdownButtonHideUnderline(
+ child: DropdownButton(
+ focusColor: Colors.grey,
+ isExpanded: true,
+ value: doctorID == null
+ ? model2
+ .coveringDoctors[0]
+ ['doctorID']
+ .toString()
+ : doctorID,
+ iconSize: 40,
+ elevation: 16,
+ selectedItemBuilder:
+ (BuildContext context) {
+ return model2
+ .coveringDoctors
+ .map((item) {
+ return Row(
+ mainAxisSize:
+ MainAxisSize.max,
+ children: [
+ AppText(
+ projectsProvider
+ .isArabic
+ ? item[
+ 'doctorNameN']
+ : item[
+ 'doctorName'],
+ fontSize: SizeConfig
+ .textMultiplier *
+ 2.1,
+ color:
+ Colors.grey,
+ ),
+ ],
+ );
+ }).toList();
+ },
+ onChanged: (newValue) => {
+ setState(() {
+ doctorID = newValue;
+ })
+ },
+ items: model2
+ .coveringDoctors
+ .map((item) {
+ return DropdownMenuItem<
+ String>(
+ value: item['doctorID']
+ .toString(),
+ child: Text(
+ projectsProvider
+ .isArabic
+ ? item[
+ 'doctorNameN']
+ : item[
+ 'doctorName'],
+ textAlign:
+ TextAlign.start,
+ ),
+ );
+ }).toList(),
+ )),
+ )
+ : SizedBox(),
+ ],
+ )
+ ],
+ ),
+ )),
+ Container(
+ margin: EdgeInsets.all(
+ SizeConfig.widthMultiplier * 5),
+ child: Wrap(
+ alignment: WrapAlignment.center,
+ children: [
+ AppButton(
+ title: widget.isUpdate == true
+ ? TranslationBase.of(context).update
+ : TranslationBase.of(context).add,
+ onPressed: () {
+ if (widget.isUpdate == true) {
+ updateRecheduleLeave(model2);
+ } else {
+ addRecheduleLeave(model2);
+ }
+ },
+ ),
+ ],
+ ),
+ ),
+ // Column(
+ // children: [
+ // Texts(TranslationBase.of(context)
+ // .previousSickLeaveIssue +
+ // ' ')
+ // ],
+ // )
+ ],
+ ),
+ ),
+ ),
+ ),
+ )));
+ }
+
+ getProfile() async {
+ Map p = await sharedPref.getObj(DOCTOR_PROFILE);
+ setState(() {
+ if (widget.updateData != null) {
+ this.profile = p;
+ this.clinicID = widget.updateData.clinicId;
+
+ _toDateController.text = widget.updateData.dateTimeFrom;
+ _toDateController2.text = widget.updateData.dateTimeTo;
+ }
+ });
+ }
+
+ getClinicName(model) {
+ var clinicID = this.profile['ClinicID'] ?? 1;
+ var clinicInfo =
+ model.clinicsList.where((i) => i['ClinicID'] == clinicID).toList();
+ return clinicInfo.length > 0 ? clinicInfo[0]['ClinicDescription'] : "";
+ }
+
+ addRecheduleLeave(model) {
+ final df = new DateFormat('yyyy-MM-ddThh:mm:ss');
+ Map request = {
+ "Requisition": {
+ "requisitionNo": 0,
+ "requisitionType": offTime,
+ "clinicId": this.profile['ClinicID'],
+ "doctorId": this.profile['ClinicID'],
+ "dateTimeFrom": df.format(fromDate),
+ "dateTimeTo": df.format(toDate),
+ "date": df.format(DateTime.now()),
+ "reasonId": reason == null ? model.allOffTime[0]['code'] : reason,
+ "coveringDoctorId":
+ doctorID == null ? model.coveringDoctors[0]['doctorID'] : doctorID,
+ "status": 2,
+ "schedule": [
+ {
+ "weekDayId": 1,
+ "shiftId": 1,
+ "isOpen": true,
+ "timeFrom": null,
+ "timeTo": null,
+ "timeFromstr": "",
+ "timeTostr": ""
+ }
+ ]
+ }
+ };
+
+ model.addReschedule(request).then((response) {
+ print(response);
+ });
+ }
+
+ updateRecheduleLeave(model) {
+ final df = new DateFormat('yyyy-MM-ddThh:mm:ss');
+ Map request = {
+ "Requisition": {
+ "requisitionNo": 0,
+ "requisitionType": offTime,
+ "clinicId": this.profile['ClinicID'],
+ "doctorId": this.profile['ClinicID'],
+ "dateTimeFrom": df.format(fromDate),
+ "dateTimeTo": df.format(toDate),
+ "date": df.format(DateTime.now()),
+ "reasonId": reason == null ? model.allOffTime[0]['code'] : reason,
+ "coveringDoctorId":
+ doctorID == null ? model.coveringDoctors[0]['doctorID'] : doctorID,
+ "status": 2,
+ "schedule": [
+ {
+ "weekDayId": 1,
+ "shiftId": 1,
+ "isOpen": true,
+ "timeFrom": null,
+ "timeTo": null,
+ "timeFromstr": "",
+ "timeTostr": ""
+ }
+ ]
+ }
+ };
+
+ model.updateReschedule(request).then((response) {
+ print(response);
+ });
+ }
+}
diff --git a/lib/screens/sick-leave/add-sickleave.dart b/lib/screens/sick-leave/add-sickleave.dart
index 37bf9454..d456f2a6 100644
--- a/lib/screens/sick-leave/add-sickleave.dart
+++ b/lib/screens/sick-leave/add-sickleave.dart
@@ -2,10 +2,12 @@ import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/sick_leave_view_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
+import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/models/sickleave/get_all_sickleave_response.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/sick-leave/sick_leave.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
+import 'package:doctor_app_flutter/widgets/patients/profile/patient-page-header-widget.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/card_with_bgNew_widget.dart';
@@ -13,166 +15,167 @@ import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
class AddSickLeavScreen extends StatelessWidget {
+ PatiantInformtion patient;
@override
Widget build(BuildContext context) {
+ final routeArgs = ModalRoute.of(context).settings.arguments as Map;
+ patient = routeArgs['patient'];
return BaseView(
- onModelReady: (model) => model.getSickLeave(),
+ onModelReady: (model) => model.getSickLeave(patient.patientMRN),
builder: (_, model, w) => AppScaffold(
- baseViewModel: model,
- appBarTitle: TranslationBase.of(context).sickleave,
- body: model.getAllSIckLeave.length > 0
- ? SingleChildScrollView(
- child: Column(
- children: model.getAllSIckLeave
- .map((GetAllSickLeaveResponse item) {
- return CardWithBgWidgetNew(
- widget: Column(
- children: [
- Container(
- padding: EdgeInsets.only(left: 10, right: 10),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.start,
- children: [
- Expanded(
- flex: 4,
- child: Wrap(
- // mainAxisAlignment:
- // MainAxisAlignment.start,
- children: [
- Column(
- crossAxisAlignment:
- CrossAxisAlignment.start,
- children: [
- Container(
- padding: EdgeInsets.all(3),
- child: AppText(
- item.status == 1
- ? TranslationBase.of(
- context)
- .approved
- : item.status == 2
- ? TranslationBase
- .of(context)
- .extended
- : TranslationBase
- .of(context)
- .pending,
- fontWeight: FontWeight.bold,
- color: Colors.white,
- ),
- color: item.status == 1
- ? Colors.green
- : Colors.yellow[800],
- ),
- Row(
- children: [
- AppText(
- TranslationBase.of(
- context)
- .leaveStartDate +
- ' ',
- fontWeight:
- FontWeight.bold,
- ),
- Flexible(
- child: Text(
- item.startDate,
- overflow:
- TextOverflow.ellipsis,
- ))
- ],
- ),
- AppText(
- item.noOfDays.toString() +
- ' ' +
- TranslationBase.of(
+ baseViewModel: model,
+ appBarTitle: TranslationBase.of(context).sickleave,
+ body: SingleChildScrollView(
+ child: Column(children: [
+ PatientPageHeaderWidget(patient),
+ model.getAllSIckLeave.length > 0
+ ? Column(
+ children: model.getAllSIckLeave
+ .map((GetAllSickLeaveResponse item) {
+ return CardWithBgWidgetNew(
+ widget: Column(
+ children: [
+ Container(
+ padding: EdgeInsets.only(left: 10, right: 10),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: [
+ Expanded(
+ flex: 4,
+ child: Wrap(
+ // mainAxisAlignment:
+ // MainAxisAlignment.start,
+ children: [
+ Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ Container(
+ padding: EdgeInsets.all(3),
+ child: AppText(
+ item.status == 1
+ ? TranslationBase.of(
context)
- .daysSickleave,
+ .approved
+ : item.status == 2
+ ? TranslationBase.of(
+ context)
+ .extended
+ : TranslationBase.of(
+ context)
+ .pending,
fontWeight: FontWeight.bold,
+ color: Colors.white,
),
- Row(children: [
+ color: item.status == 1
+ ? Colors.green
+ : Colors.yellow[800],
+ ),
+ Row(
+ children: [
AppText(
- item.remarks,
- )
- ]),
- ],
- ),
- SizedBox(
- width: 20,
- ),
- ],
- ),
+ TranslationBase.of(context)
+ .leaveStartDate +
+ ' ',
+ fontWeight: FontWeight.bold,
+ ),
+ Flexible(
+ child: Text(
+ item.startDate,
+ overflow:
+ TextOverflow.ellipsis,
+ ))
+ ],
+ ),
+ AppText(
+ item.noOfDays.toString() +
+ ' ' +
+ TranslationBase.of(context)
+ .daysSickleave,
+ fontWeight: FontWeight.bold,
+ ),
+ Row(children: [
+ AppText(
+ item.remarks,
+ )
+ ]),
+ ],
+ ),
+ SizedBox(
+ width: 20,
+ ),
+ ],
),
- (item.status == 1 || item.status == 2)
- ? Expanded(
- flex: 1,
- child: IconButton(
- icon: Icon(
- Icons.open_in_full,
- size: 40,
- ),
- // color: Colors.green, //Colors.black,
- onPressed: () => {
- openSickLeave(context, true,
- extendedData: item)
- },
- ))
- : SizedBox(),
- ],
- )),
- SizedBox(
- height: 20,
+ ),
+ (item.status == 1 || item.status == 2)
+ ? Expanded(
+ flex: 1,
+ child: IconButton(
+ icon: Icon(
+ Icons.open_in_full,
+ size: 25,
+ ),
+ // color: Colors.green, //Colors.black,
+ onPressed: () => {
+ openSickLeave(context, true,
+ extendedData: item)
+ },
+ ))
+ : SizedBox(),
+ ],
+ )),
+ SizedBox(
+ height: 20,
+ ),
+ Divider(
+ height: 1,
+ ),
+ ],
+ ));
+ }).toList(),
+ )
+ : new Builder(builder: (context) {
+ return Container(
+ height: MediaQuery.of(context).size.height * .7,
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Container(
+ padding: EdgeInsets.all(40),
+ decoration: BoxDecoration(
+ border: Border.all(
+ color: HexColor('#B8382C'), width: 4),
+ borderRadius:
+ BorderRadius.all(Radius.circular(100))),
+ child: IconButton(
+ icon: Icon(
+ Icons.add,
+ size: 35,
+ ),
+ onPressed: () {
+ openSickLeave(
+ context,
+ false,
+ );
+ }),
),
- Divider(
- height: 1,
+ Padding(
+ child: AppText(
+ TranslationBase.of(context)
+ .noSickLeaveApplied,
+ fontWeight: FontWeight.bold,
+ ),
+ padding: EdgeInsets.all(10),
),
+ AppText(
+ TranslationBase.of(context).applyNow,
+ fontWeight: FontWeight.bold,
+ color: HexColor('#B8382C'),
+ )
],
));
- }).toList(),
- ),
- )
- : new Builder(builder: (context) {
- return Center(
- child: SingleChildScrollView(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- Container(
- padding: EdgeInsets.all(40),
- decoration: BoxDecoration(
- border: Border.all(
- color: HexColor('#B8382C'), width: 4),
- borderRadius:
- BorderRadius.all(Radius.circular(100))),
- child: IconButton(
- icon: Icon(
- Icons.add,
- size: 35,
- ),
- onPressed: () {
- openSickLeave(
- context,
- false,
- );
- }),
- ),
- Padding(
- child: AppText(
- TranslationBase.of(context).noSickLeaveApplied,
- fontWeight: FontWeight.bold,
- ),
- padding: EdgeInsets.all(10),
- ),
- AppText(
- TranslationBase.of(context).applyNow,
- fontWeight: FontWeight.bold,
- color: HexColor('#B8382C'),
- )
- ],
- ),
- ));
}),
- ));
+ ]))));
}
openSickLeave(BuildContext context, isExtend,
@@ -182,11 +185,15 @@ class AddSickLeavScreen extends StatelessWidget {
builder: (context) {
return new Container(
child: SickLeaveScreen(
- appointmentNo: extendedData.appointmentNo,
- patientMRN: extendedData.patientMRN,
- isExtended: isExtend,
- extendedData: extendedData,
- ));
+ appointmentNo: isExtend == true
+ ? extendedData.appointmentNo
+ : patient.appointmentNo, //extendedData.appointmentNo,
+ patientMRN: isExtend == true
+ ? extendedData.patientMRN
+ : patient.patientMRN,
+ isExtended: isExtend,
+ extendedData: extendedData,
+ patient: patient));
});
}
}
diff --git a/lib/screens/sick-leave/sick_leave.dart b/lib/screens/sick-leave/sick_leave.dart
index 026b7c19..2aea6f43 100644
--- a/lib/screens/sick-leave/sick_leave.dart
+++ b/lib/screens/sick-leave/sick_leave.dart
@@ -6,9 +6,11 @@ import 'package:doctor_app_flutter/core/viewModel/sick_leave_view_model.dart';
import 'package:doctor_app_flutter/models/sickleave/add_sickleave_request.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart';
+import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/text_validator.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
+import 'package:doctor_app_flutter/widgets/patients/profile/patient-page-header-widget.dart';
import 'package:doctor_app_flutter/widgets/shared/Text.dart';
import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
@@ -28,11 +30,13 @@ class SickLeaveScreen extends StatefulWidget {
final GetAllSickLeaveResponse extendedData;
final appointmentNo;
final patientMRN;
+ final patient;
SickLeaveScreen(
{this.appointmentNo,
this.patientMRN,
this.isExtended = false,
- this.extendedData});
+ this.extendedData,
+ this.patient});
@override
_SickLeaveScreenState createState() => _SickLeaveScreenState();
}
@@ -48,7 +52,7 @@ class _SickLeaveScreenState extends State {
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(2019),
- lastDate: DateTime.now(),
+ lastDate: DateTime(2050),
).then((pickedDate) {
if (pickedDate == null) {
return;
@@ -252,6 +256,7 @@ class _SickLeaveScreenState extends State {
model2.sickLeaveStatistics[
'recommendedSickLeaveDays'],
fontWeight: FontWeight.bold,
+ textAlign: TextAlign.start,
),
padding: EdgeInsets.all(10),
)
@@ -339,9 +344,7 @@ class _SickLeaveScreenState extends State {
print(value);
});
} else {
- model2
- .addSickLeave(addSickLeave)
- .then((value) => print(value));
+ _validateInputs(model2);
}
},
),
@@ -363,6 +366,27 @@ class _SickLeaveScreenState extends State {
)));
}
+ void _validateInputs(model2) async {
+ try {
+ if (addSickLeave.noOfDays == null) {
+ DrAppToastMsg.showErrorToast(
+ TranslationBase.of(context).pleaseEnterNoOfDays);
+ } else if (addSickLeave.remarks == null) {
+ DrAppToastMsg.showErrorToast(
+ TranslationBase.of(context).pleaseEnterRemarks);
+ } else if (addSickLeave.startDate == null) {
+ DrAppToastMsg.showErrorToast(
+ TranslationBase.of(context).pleaseEnterDate);
+ } else {
+ addSickLeave.patientMRN = widget.patient.patientMRN.toString();
+ addSickLeave.appointmentNo = widget.patient.appointmentNo.toString();
+ model2.addSickLeave(addSickLeave).then((value) => print(value));
+ }
+ } catch (err) {
+ print(err);
+ }
+ }
+
getProfile() async {
Map p = await sharedPref.getObj(DOCTOR_PROFILE);
setState(() {
diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart
index e928f521..2cc38638 100644
--- a/lib/util/translations_delegate_base.dart
+++ b/lib/util/translations_delegate_base.dart
@@ -388,88 +388,148 @@ class TranslationBase {
String get indication => localizedValues['indication'][locale.languageCode];
String get duration => localizedValues['duration'][locale.languageCode];
String get instruction => localizedValues['instruction'][locale.languageCode];
+ String get rescheduleLeaves =>
+ localizedValues['reschedule-leave'][locale.languageCode];
String get addMedication =>
localizedValues['addMedication'][locale.languageCode];
String get route => localizedValues['route'][locale.languageCode];
+ String get noReScheduleLeave =>
+ localizedValues['no-reschedule-leave'][locale.languageCode];
String get weight => localizedValues['weight'][locale.languageCode];
String get kg => localizedValues['kg'][locale.languageCode];
String get height => localizedValues['height'][locale.languageCode];
String get cm => localizedValues['cm'][locale.languageCode];
- String get idealBodyWeight => localizedValues['idealBodyWeight'][locale.languageCode];
+ String get idealBodyWeight =>
+ localizedValues['idealBodyWeight'][locale.languageCode];
String get waistSize => localizedValues['waistSize'][locale.languageCode];
String get inch => localizedValues['inch'][locale.languageCode];
String get headCircum => localizedValues['headCircum'][locale.languageCode];
- String get leanBodyWeight => localizedValues['leanBodyWeight'][locale.languageCode];
- String get bodyMassIndex => localizedValues['bodyMassIndex'][locale.languageCode];
+ String get leanBodyWeight =>
+ localizedValues['leanBodyWeight'][locale.languageCode];
+ String get bodyMassIndex =>
+ localizedValues['bodyMassIndex'][locale.languageCode];
String get method => localizedValues['method'][locale.languageCode];
String get pulseBeats => localizedValues['pulseBeats'][locale.languageCode];
String get rhythm => localizedValues['rhythm'][locale.languageCode];
String get respBeats => localizedValues['respBeats'][locale.languageCode];
- String get patternOfRespiration => localizedValues['patternOfRespiration'][locale.languageCode];
- String get bloodPressureDiastoleAndSystole => localizedValues['bloodPressureDiastoleAndSystole'][locale.languageCode];
- String get cuffLocation => localizedValues['cuffLocation'][locale.languageCode];
+ String get patternOfRespiration =>
+ localizedValues['patternOfRespiration'][locale.languageCode];
+ String get bloodPressureDiastoleAndSystole =>
+ localizedValues['bloodPressureDiastoleAndSystole'][locale.languageCode];
+ String get cuffLocation =>
+ localizedValues['cuffLocation'][locale.languageCode];
String get cuffSize => localizedValues['cuffSize'][locale.languageCode];
- String get patientPosition => localizedValues['patientPosition'][locale.languageCode];
+ String get patientPosition =>
+ localizedValues['patientPosition'][locale.languageCode];
String get fio2 => localizedValues['fio2'][locale.languageCode];
String get sao2 => localizedValues['sao2'][locale.languageCode];
- String get painManagement => localizedValues['painManagement'][locale.languageCode];
+ String get painManagement =>
+ localizedValues['painManagement'][locale.languageCode];
+ String get holiday => localizedValues['holiday'][locale.languageCode];
+ String get to => localizedValues['to'][locale.languageCode];
+ String get coveringDoctor =>
+ localizedValues['coveringDoctor'][locale.languageCode];
+ String get requestLeave =>
+ localizedValues['requestLeave'][locale.languageCode];
+ String get pleaseEnterDate =>
+ localizedValues['pleaseEnterDate'][locale.languageCode];
+ String get pleaseEnterNoOfDays =>
+ localizedValues['pleaseEnterNoOfDays'][locale.languageCode];
+ String get pleaseEnterRemarks =>
+ localizedValues['pleaseEnterRemarks'][locale.languageCode];
+ String get update => localizedValues['update'][locale.languageCode];
String get admission => localizedValues['admission'][locale.languageCode];
String get request => localizedValues['request'][locale.languageCode];
- String get admissionRequest => localizedValues['admissionRequest'][locale.languageCode];
- String get patientDetails => localizedValues['patientDetails'][locale.languageCode];
- String get specialityAndDoctorDetail => localizedValues['specialityAndDoctorDetail'][locale.languageCode];
- String get referringDate => localizedValues['referringDate'][locale.languageCode];
- String get referringDoctor => localizedValues['referringDoctor'][locale.languageCode];
- String get otherInformation => localizedValues['otherInformation'][locale.languageCode];
- String get expectedDays => localizedValues['expectedDays'][locale.languageCode];
- String get expectedAdmissionDate => localizedValues['expectedAdmissionDate'][locale.languageCode];
- String get emergencyAdmission => localizedValues['emergencyAdmission'][locale.languageCode];
- String get patientPregnant => localizedValues['patientPregnant'][locale.languageCode];
- String get treatmentLine => localizedValues['treatmentLine'][locale.languageCode];
+ String get admissionRequest =>
+ localizedValues['admissionRequest'][locale.languageCode];
+ String get patientDetails =>
+ localizedValues['patientDetails'][locale.languageCode];
+ String get specialityAndDoctorDetail =>
+ localizedValues['specialityAndDoctorDetail'][locale.languageCode];
+ String get referringDate =>
+ localizedValues['referringDate'][locale.languageCode];
+ String get referringDoctor =>
+ localizedValues['referringDoctor'][locale.languageCode];
+ String get otherInformation =>
+ localizedValues['otherInformation'][locale.languageCode];
+ String get expectedDays =>
+ localizedValues['expectedDays'][locale.languageCode];
+ String get expectedAdmissionDate =>
+ localizedValues['expectedAdmissionDate'][locale.languageCode];
+ String get emergencyAdmission =>
+ localizedValues['emergencyAdmission'][locale.languageCode];
+ String get patientPregnant =>
+ localizedValues['patientPregnant'][locale.languageCode];
+ String get treatmentLine =>
+ localizedValues['treatmentLine'][locale.languageCode];
String get ward => localizedValues['ward'][locale.languageCode];
- String get preAnesthesiaReferred => localizedValues['preAnesthesiaReferred'][locale.languageCode];
- String get admissionType => localizedValues['admissionType'][locale.languageCode];
+ String get preAnesthesiaReferred =>
+ localizedValues['preAnesthesiaReferred'][locale.languageCode];
+ String get admissionType =>
+ localizedValues['admissionType'][locale.languageCode];
String get diagnosis => localizedValues['diagnosis'][locale.languageCode];
String get allergies => localizedValues['allergies'][locale.languageCode];
- String get preOperativeOrders => localizedValues['preOperativeOrders'][locale.languageCode];
- String get elementForImprovement => localizedValues['elementForImprovement'][locale.languageCode];
- String get dischargeDate => localizedValues['dischargeDate'][locale.languageCode];
+ String get preOperativeOrders =>
+ localizedValues['preOperativeOrders'][locale.languageCode];
+ String get elementForImprovement =>
+ localizedValues['elementForImprovement'][locale.languageCode];
+ String get dischargeDate =>
+ localizedValues['dischargeDate'][locale.languageCode];
String get dietType => localizedValues['dietType'][locale.languageCode];
- String get dietTypeRemarks => localizedValues['dietTypeRemarks'][locale.languageCode];
+ String get dietTypeRemarks =>
+ localizedValues['dietTypeRemarks'][locale.languageCode];
String get save => localizedValues['save'][locale.languageCode];
- String get postPlansEstimatedCost => localizedValues['postPlansEstimatedCost'][locale.languageCode];
+ String get postPlansEstimatedCost =>
+ localizedValues['postPlansEstimatedCost'][locale.languageCode];
String get ucaf => localizedValues['ucaf'][locale.languageCode];
- String get emergencyCase => localizedValues['emergencyCase'][locale.languageCode];
- String get durationOfIllness => localizedValues['durationOfIllness'][locale.languageCode];
- String get chiefComplaintsAndSymptoms => localizedValues['chiefComplaintsAndSymptoms'][locale.languageCode];
- String get patientFeelsPainInHisBackAndCough => localizedValues['patientFeelsPainInHisBackAndCough'][locale.languageCode];
- String get additionalTextComplaints => localizedValues['additionalTextComplaints'][locale.languageCode];
- String get otherConditions => localizedValues['otherConditions'][locale.languageCode];
+ String get emergencyCase =>
+ localizedValues['emergencyCase'][locale.languageCode];
+ String get durationOfIllness =>
+ localizedValues['durationOfIllness'][locale.languageCode];
+ String get chiefComplaintsAndSymptoms =>
+ localizedValues['chiefComplaintsAndSymptoms'][locale.languageCode];
+ String get patientFeelsPainInHisBackAndCough =>
+ localizedValues['patientFeelsPainInHisBackAndCough'][locale.languageCode];
+ String get additionalTextComplaints =>
+ localizedValues['additionalTextComplaints'][locale.languageCode];
+ String get otherConditions =>
+ localizedValues['otherConditions'][locale.languageCode];
String get other => localizedValues['other'][locale.languageCode];
String get how => localizedValues['how'][locale.languageCode];
String get when => localizedValues['when'][locale.languageCode];
String get where => localizedValues['where'][locale.languageCode];
- String get specifyPossibleLineManagement => localizedValues['specifyPossibleLineManagement'][locale.languageCode];
- String get significantSigns => localizedValues['significantSigns'][locale.languageCode];
+ String get specifyPossibleLineManagement =>
+ localizedValues['specifyPossibleLineManagement'][locale.languageCode];
+ String get significantSigns =>
+ localizedValues['significantSigns'][locale.languageCode];
String get backAbdomen => localizedValues['backAbdomen'][locale.languageCode];
+ String get reasons => localizedValues['reasons'][locale.languageCode];
String get createNew => localizedValues['createNew'][locale.languageCode];
- String get update => localizedValues['update'][locale.languageCode];
- String get episode => localizedValues['episode'][locale.languageCode];
+ String get episode => localizedValues['episode'][locale.languageCode];
- String get chiefComplaints=> localizedValues['chiefComplaints'][locale.languageCode];
+ String get chiefComplaints =>
+ localizedValues['chiefComplaints'][locale.languageCode];
String get histories => localizedValues['histories'][locale.languageCode];
- String get allergiesSoap => localizedValues['allergiesSoap'][locale.languageCode];
- String get addChiefComplaints => localizedValues['addChiefComplaints'][locale.languageCode];
- String get historyOfPresentIllness => localizedValues['historyOfPresentIllness'][locale.languageCode];
+ String get allergiesSoap =>
+ localizedValues['allergiesSoap'][locale.languageCode];
+ String get addChiefComplaints =>
+ localizedValues['addChiefComplaints'][locale.languageCode];
+ String get historyOfPresentIllness =>
+ localizedValues['historyOfPresentIllness'][locale.languageCode];
String get requiredMsg => localizedValues['requiredMsg'][locale.languageCode];
String get addHistory => localizedValues['addHistory'][locale.languageCode];
- String get searchHistory => localizedValues['searchHistory'][locale.languageCode];
- String get addSelectedHistories => localizedValues['addSelectedHistories'][locale.languageCode];
- String get addAllergies => localizedValues['addAllergies'][locale.languageCode];
+ String get searchHistory =>
+ localizedValues['searchHistory'][locale.languageCode];
+ String get addSelectedHistories =>
+ localizedValues['addSelectedHistories'][locale.languageCode];
+ String get addAllergies =>
+ localizedValues['addAllergies'][locale.languageCode];
String get itemExist => localizedValues['itemExist'][locale.languageCode];
- String get selectAllergy => localizedValues['selectAllergy'][locale.languageCode];
- String get selectSeverity => localizedValues['selectSeverity'][locale.languageCode];
+ String get selectAllergy =>
+ localizedValues['selectAllergy'][locale.languageCode];
+ String get selectSeverity =>
+ localizedValues['selectSeverity'][locale.languageCode];
}
class TranslationBaseDelegate extends LocalizationsDelegate {
diff --git a/lib/widgets/shared/app_drawer_widget.dart b/lib/widgets/shared/app_drawer_widget.dart
index 4ff72904..808e09dc 100644
--- a/lib/widgets/shared/app_drawer_widget.dart
+++ b/lib/widgets/shared/app_drawer_widget.dart
@@ -35,9 +35,6 @@ class _AppDrawerState extends State {
// _isInit = false;
// }
-
-
-
@override
Widget build(BuildContext context) {
AuthViewModel authProvider = Provider.of(context);
@@ -68,20 +65,24 @@ class _AppDrawerState extends State {
),
),
SizedBox(height: 15),
- CircleAvatar(
- radius: SizeConfig.imageSizeMultiplier * 12,
- backgroundImage:
- NetworkImage(authProvider.doctorProfile.doctorImageURL),
- backgroundColor: Colors.white,
- ),
- Padding(
- padding: EdgeInsets.only(top: 10),
- child: AppText(
- authProvider.doctorProfile?.doctorName,
- fontWeight: FontWeight.bold,
- color: Colors.black,
- fontSize: SizeConfig.textMultiplier * 2,
- )),
+ authProvider.doctorProfile != null
+ ? CircleAvatar(
+ radius: SizeConfig.imageSizeMultiplier * 12,
+ backgroundImage: NetworkImage(
+ authProvider.doctorProfile.doctorImageURL),
+ backgroundColor: Colors.white,
+ )
+ : SizedBox(),
+ authProvider.doctorProfile != null
+ ? Padding(
+ padding: EdgeInsets.only(top: 10),
+ child: AppText(
+ authProvider.doctorProfile?.doctorName,
+ fontWeight: FontWeight.bold,
+ color: Colors.black,
+ fontSize: SizeConfig.textMultiplier * 2,
+ ))
+ : SizedBox(),
AppText(
"Director of medical records", //TODO: Make The Dr Title Dynamic and check overflow issue.
fontWeight: FontWeight.normal,
@@ -121,7 +122,9 @@ class _AppDrawerState extends State {
),
InkWell(
child: DrawerItem(
- TranslationBase.of(context).qr+ TranslationBase.of(context).reader, DoctorApp.qr_code),
+ TranslationBase.of(context).qr +
+ TranslationBase.of(context).reader,
+ DoctorApp.qr_code),
onTap: () {
Navigator.pop(context);
Navigator.of(context).pushNamed(QR_READER);
diff --git a/pubspec.lock b/pubspec.lock
index 9cbacb6d..7f1d8c1d 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -260,6 +260,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.10"
+ date_time_picker:
+ dependency: "direct main"
+ description:
+ name: date_time_picker
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.1.1"
device_info:
dependency: "direct main"
description:
@@ -496,7 +503,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:
@@ -753,7 +760,7 @@ packages:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
- version: "1.10.0-nullsafety.2"
+ version: "1.10.0-nullsafety.1"
stream_channel:
dependency: transitive
description:
@@ -888,5 +895,5 @@ packages:
source: hosted
version: "2.2.1"
sdks:
- dart: ">=2.10.0 <=2.11.0-213.1.beta"
+ dart: ">=2.10.0 <2.11.0"
flutter: ">=1.22.0 <2.0.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 91283a89..57ed4cbb 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -62,6 +62,7 @@ dependencies:
#Autocomplete TextField
autocomplete_textfield: ^1.7.3
+ date_time_picker: ^1.1.1
# Html
html: ^0.14.0+4