reschedule leave

merge-requests/214/head
Sultan Khan 5 years ago
parent 4587fdda59
commit 9bf07d7117

@ -112,6 +112,8 @@ const GET_OFFTIME = 'Services/DoctorApplication.svc/REST/GetMasterLookUpList';
const GET_COVERING_DOCTORS = const GET_COVERING_DOCTORS =
'Services/DoctorApplication.svc/REST/GetCoveringDoctor'; 'Services/DoctorApplication.svc/REST/GetCoveringDoctor';
const ADD_RESCHDEULE = 'Services/DoctorApplication.svc/REST/PostRequisition'; const ADD_RESCHDEULE = 'Services/DoctorApplication.svc/REST/PostRequisition';
const UPDATE_RESCHDEULE =
'Services/DoctorApplication.svc/REST/PatchRequisition';
const GET_RESCHEDULE_LEAVE = const GET_RESCHEDULE_LEAVE =
'Services/DoctorApplication.svc/REST/GetRequisition'; 'Services/DoctorApplication.svc/REST/GetRequisition';
const GET_PRESCRIPTION_LIST = const GET_PRESCRIPTION_LIST =

@ -389,5 +389,18 @@ const Map<String, Map<String, String>> localizedValues = {
'holiday': {'en': "Holiday", 'ar': 'يوم الاجازة'}, 'holiday': {'en': "Holiday", 'ar': 'يوم الاجازة'},
'to': {'en': "To", 'ar': 'إلى'}, 'to': {'en': "To", 'ar': 'إلى'},
'coveringDoctor': {'en': "Covering Doctor", 'ar': 'تغطية دكتور'}, 'coveringDoctor': {'en': "Covering Doctor", 'ar': 'تغطية دكتور'},
'requestLeave': {'en': 'Request Leave', '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': 'تحديث'}
}; };

@ -82,7 +82,7 @@ class SickLeaveService extends BaseService {
); );
} }
Future getSickLeave() async { Future getSickLeave(patientMRN) async {
hasError = false; hasError = false;
await baseAppClient.post( await baseAppClient.post(
GET_SICK_LEAVE, GET_SICK_LEAVE,
@ -97,7 +97,7 @@ class SickLeaveService extends BaseService {
hasError = true; hasError = true;
super.error = error; super.error = error;
}, },
body: {'PatientMRN': 3120772}, body: {'PatientMRN': patientMRN},
); );
} }
@ -186,4 +186,20 @@ class SickLeaveService extends BaseService {
body: request, 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,
);
}
} }

@ -46,9 +46,9 @@ class SickLeaveViewModel extends BaseViewModel {
setState(ViewState.Idle); setState(ViewState.Idle);
} }
Future getSickLeave() async { Future getSickLeave(patientMRN) async {
setState(ViewState.Busy); setState(ViewState.Busy);
await _sickLeaveService.getSickLeave(); await _sickLeaveService.getSickLeave(patientMRN);
if (_sickLeaveService.hasError) { if (_sickLeaveService.hasError) {
error = _sickLeaveService.error; error = _sickLeaveService.error;
setState(ViewState.Error); setState(ViewState.Error);
@ -105,4 +105,14 @@ class SickLeaveViewModel extends BaseViewModel {
} else } else
setState(ViewState.Idle); setState(ViewState.Idle);
} }
Future updateReschedule(request) async {
setState(ViewState.Busy);
await _sickLeaveService.updateReschedule(request);
if (_sickLeaveService.hasError) {
error = _sickLeaveService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
} }

@ -175,8 +175,8 @@ class AddRescheduleLeavScreen extends StatelessWidget {
), ),
// color: Colors.green, //Colors.black, // color: Colors.green, //Colors.black,
onPressed: () => { onPressed: () => {
// openSickLeave(context, true, openLeave(context, true,
// extendedData: item) extendedData: item)
}, },
)) ))
: SizedBox(), : SizedBox(),
@ -239,17 +239,14 @@ class AddRescheduleLeavScreen extends StatelessWidget {
)); ));
} }
openLeave(BuildContext context, isExtend, openLeave(BuildContext context, isExtend, {extendedData}) {
{GetAllSickLeaveResponse extendedData}) {
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
builder: (context) { builder: (context) {
return new Container( return new Container(
child: RescheduleLeaveScreen( child: RescheduleLeaveScreen(
// appointmentNo: extendedData.appointmentNo, isExtend,
// patientMRN: extendedData.patientMRN, extendedData,
// isExtended: isExtend,
// extendedData: extendedData,
)); ));
}); });
} }

@ -27,7 +27,9 @@ import 'package:provider/provider.dart';
Helpers helpers = Helpers(); Helpers helpers = Helpers();
class RescheduleLeaveScreen extends StatefulWidget { class RescheduleLeaveScreen extends StatefulWidget {
RescheduleLeaveScreen(); final isUpdate;
final updateData;
RescheduleLeaveScreen(this.isUpdate, this.updateData);
@override @override
_RescheduleLeaveScreen createState() => _RescheduleLeaveScreen(); _RescheduleLeaveScreen createState() => _RescheduleLeaveScreen();
} }
@ -45,8 +47,8 @@ class _RescheduleLeaveScreen extends State<RescheduleLeaveScreen> {
var reason; var reason;
var fromDate; var fromDate;
var toDate; var toDate;
var clinicID;
TextEditingController _controller4; TextEditingController _controller4;
// AddSickLeaveRequest addSickLeave = AddSickLeaveRequest();
void _presentDatePicker(id) { void _presentDatePicker(id) {
showDatePicker( showDatePicker(
context: context, context: context,
@ -58,11 +60,7 @@ class _RescheduleLeaveScreen extends State<RescheduleLeaveScreen> {
return; return;
} }
setState(() { setState(() {
// var selectedDate = DateFormat.yMd().format(pickedDate);
final df = new DateFormat('yyyy-MM-dd'); final df = new DateFormat('yyyy-MM-dd');
//addSickLeave.startDate;
if (id == 'fromDate') { if (id == 'fromDate') {
fromDate = pickedDate; //df.format(); fromDate = pickedDate; //df.format();
_toDateController.text = df.format(pickedDate); _toDateController.text = df.format(pickedDate);
@ -70,7 +68,6 @@ class _RescheduleLeaveScreen extends State<RescheduleLeaveScreen> {
toDate = pickedDate; // toDate = pickedDate; //
_toDateController2.text = df.format(pickedDate); _toDateController2.text = df.format(pickedDate);
} }
//addSickLeave.startDate = selectedDate;
}); });
}); });
} }
@ -703,9 +700,15 @@ class _RescheduleLeaveScreen extends State<RescheduleLeaveScreen> {
alignment: WrapAlignment.center, alignment: WrapAlignment.center,
children: <Widget>[ children: <Widget>[
AppButton( AppButton(
title: TranslationBase.of(context).add, title: widget.isUpdate == true
? TranslationBase.of(context).update
: TranslationBase.of(context).add,
onPressed: () { onPressed: () {
if (widget.isUpdate == true) {
updateRecheduleLeave(model2);
} else {
addRecheduleLeave(model2); addRecheduleLeave(model2);
}
}, },
), ),
], ],
@ -730,6 +733,10 @@ class _RescheduleLeaveScreen extends State<RescheduleLeaveScreen> {
Map p = await sharedPref.getObj(DOCTOR_PROFILE); Map p = await sharedPref.getObj(DOCTOR_PROFILE);
setState(() { setState(() {
this.profile = p; this.profile = p;
this.clinicID = widget.updateData.clinicId;
_toDateController.text = widget.updateData.dateTimeFrom;
_toDateController2.text = widget.updateData.dateTimeTo;
}); });
} }
@ -773,4 +780,38 @@ class _RescheduleLeaveScreen extends State<RescheduleLeaveScreen> {
print(response); print(response);
}); });
} }
updateRecheduleLeave(model) {
final df = new DateFormat('yyyy-MM-ddThh:mm:ss');
Map<String, dynamic> 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);
});
}
} }

@ -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/patient_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/sick_leave_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/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/models/sickleave/get_all_sickleave_response.dart';
import 'package:doctor_app_flutter/screens/base/base_view.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/screens/sick-leave/sick_leave.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.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_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_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'; import 'package:doctor_app_flutter/widgets/shared/card_with_bgNew_widget.dart';
@ -13,16 +15,21 @@ import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
class AddSickLeavScreen extends StatelessWidget { class AddSickLeavScreen extends StatelessWidget {
PatiantInformtion patient;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final routeArgs = ModalRoute.of(context).settings.arguments as Map;
patient = routeArgs['patient'];
return BaseView<SickLeaveViewModel>( return BaseView<SickLeaveViewModel>(
onModelReady: (model) => model.getSickLeave(), onModelReady: (model) => model.getSickLeave(patient.patientMRN),
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
appBarTitle: TranslationBase.of(context).sickleave, appBarTitle: TranslationBase.of(context).sickleave,
body: model.getAllSIckLeave.length > 0 body: SingleChildScrollView(
? SingleChildScrollView( child: Column(children: [
child: Column( PatientPageHeaderWidget(patient),
model.getAllSIckLeave.length > 0
? Column(
children: model.getAllSIckLeave children: model.getAllSIckLeave
.map<Widget>((GetAllSickLeaveResponse item) { .map<Widget>((GetAllSickLeaveResponse item) {
return CardWithBgWidgetNew( return CardWithBgWidgetNew(
@ -51,11 +58,11 @@ class AddSickLeavScreen extends StatelessWidget {
context) context)
.approved .approved
: item.status == 2 : item.status == 2
? TranslationBase ? TranslationBase.of(
.of(context) context)
.extended .extended
: TranslationBase : TranslationBase.of(
.of(context) context)
.pending, .pending,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Colors.white, color: Colors.white,
@ -67,12 +74,10 @@ class AddSickLeavScreen extends StatelessWidget {
Row( Row(
children: [ children: [
AppText( AppText(
TranslationBase.of( TranslationBase.of(context)
context)
.leaveStartDate + .leaveStartDate +
' ', ' ',
fontWeight: fontWeight: FontWeight.bold,
FontWeight.bold,
), ),
Flexible( Flexible(
child: Text( child: Text(
@ -85,8 +90,7 @@ class AddSickLeavScreen extends StatelessWidget {
AppText( AppText(
item.noOfDays.toString() + item.noOfDays.toString() +
' ' + ' ' +
TranslationBase.of( TranslationBase.of(context)
context)
.daysSickleave, .daysSickleave,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
@ -109,7 +113,7 @@ class AddSickLeavScreen extends StatelessWidget {
child: IconButton( child: IconButton(
icon: Icon( icon: Icon(
Icons.open_in_full, Icons.open_in_full,
size: 40, size: 25,
), ),
// color: Colors.green, //Colors.black, // color: Colors.green, //Colors.black,
onPressed: () => { onPressed: () => {
@ -129,11 +133,10 @@ class AddSickLeavScreen extends StatelessWidget {
], ],
)); ));
}).toList(), }).toList(),
),
) )
: new Builder(builder: (context) { : new Builder(builder: (context) {
return Center( return Container(
child: SingleChildScrollView( height: MediaQuery.of(context).size.height * .7,
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
@ -158,7 +161,8 @@ class AddSickLeavScreen extends StatelessWidget {
), ),
Padding( Padding(
child: AppText( child: AppText(
TranslationBase.of(context).noSickLeaveApplied, TranslationBase.of(context)
.noSickLeaveApplied,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
@ -169,10 +173,9 @@ class AddSickLeavScreen extends StatelessWidget {
color: HexColor('#B8382C'), color: HexColor('#B8382C'),
) )
], ],
),
)); ));
}), }),
)); ]))));
} }
openSickLeave(BuildContext context, isExtend, openSickLeave(BuildContext context, isExtend,
@ -182,11 +185,15 @@ class AddSickLeavScreen extends StatelessWidget {
builder: (context) { builder: (context) {
return new Container( return new Container(
child: SickLeaveScreen( child: SickLeaveScreen(
appointmentNo: extendedData.appointmentNo, appointmentNo: isExtend == true
patientMRN: extendedData.patientMRN, ? extendedData.appointmentNo
: patient.appointmentNo, //extendedData.appointmentNo,
patientMRN: isExtend == true
? extendedData.patientMRN
: patient.patientMRN,
isExtended: isExtend, isExtended: isExtend,
extendedData: extendedData, extendedData: extendedData,
)); patient: patient));
}); });
} }
} }

@ -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/models/sickleave/add_sickleave_request.dart';
import 'package:doctor_app_flutter/screens/base/base_view.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_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/helpers.dart';
import 'package:doctor_app_flutter/util/text_validator.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/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/Text.dart';
import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.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_scaffold_widget.dart';
@ -28,11 +30,13 @@ class SickLeaveScreen extends StatefulWidget {
final GetAllSickLeaveResponse extendedData; final GetAllSickLeaveResponse extendedData;
final appointmentNo; final appointmentNo;
final patientMRN; final patientMRN;
final patient;
SickLeaveScreen( SickLeaveScreen(
{this.appointmentNo, {this.appointmentNo,
this.patientMRN, this.patientMRN,
this.isExtended = false, this.isExtended = false,
this.extendedData}); this.extendedData,
this.patient});
@override @override
_SickLeaveScreenState createState() => _SickLeaveScreenState(); _SickLeaveScreenState createState() => _SickLeaveScreenState();
} }
@ -252,6 +256,7 @@ class _SickLeaveScreenState extends State<SickLeaveScreen> {
model2.sickLeaveStatistics[ model2.sickLeaveStatistics[
'recommendedSickLeaveDays'], 'recommendedSickLeaveDays'],
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
textAlign: TextAlign.start,
), ),
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
) )
@ -339,9 +344,7 @@ class _SickLeaveScreenState extends State<SickLeaveScreen> {
print(value); print(value);
}); });
} else { } else {
model2 _validateInputs(model2);
.addSickLeave(addSickLeave)
.then((value) => print(value));
} }
}, },
), ),
@ -363,6 +366,25 @@ class _SickLeaveScreenState extends State<SickLeaveScreen> {
))); )));
} }
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 {
model2.addSickLeave(addSickLeave).then((value) => print(value));
}
} catch (err) {
print(err);
}
}
getProfile() async { getProfile() async {
Map p = await sharedPref.getObj(DOCTOR_PROFILE); Map p = await sharedPref.getObj(DOCTOR_PROFILE);
setState(() { setState(() {

@ -430,6 +430,13 @@ class TranslationBase {
localizedValues['coveringDoctor'][locale.languageCode]; localizedValues['coveringDoctor'][locale.languageCode];
String get requestLeave => String get requestLeave =>
localizedValues['requestLeave'][locale.languageCode]; 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];
} }
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> { class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

Loading…
Cancel
Save