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,18 +239,15 @@ 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: () {
addRecheduleLeave(model2); if (widget.isUpdate == true) {
updateRecheduleLeave(model2);
} else {
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,166 +15,167 @@ 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),
children: model.getAllSIckLeave model.getAllSIckLeave.length > 0
.map<Widget>((GetAllSickLeaveResponse item) { ? Column(
return CardWithBgWidgetNew( children: model.getAllSIckLeave
widget: Column( .map<Widget>((GetAllSickLeaveResponse item) {
children: [ return CardWithBgWidgetNew(
Container( widget: Column(
padding: EdgeInsets.only(left: 10, right: 10), children: [
child: Row( Container(
mainAxisAlignment: MainAxisAlignment.start, padding: EdgeInsets.only(left: 10, right: 10),
children: <Widget>[ child: Row(
Expanded( mainAxisAlignment: MainAxisAlignment.start,
flex: 4, children: <Widget>[
child: Wrap( Expanded(
// mainAxisAlignment: flex: 4,
// MainAxisAlignment.start, child: Wrap(
children: <Widget>[ // mainAxisAlignment:
Column( // MainAxisAlignment.start,
crossAxisAlignment: children: <Widget>[
CrossAxisAlignment.start, Column(
children: <Widget>[ crossAxisAlignment:
Container( CrossAxisAlignment.start,
padding: EdgeInsets.all(3), children: <Widget>[
child: AppText( Container(
item.status == 1 padding: EdgeInsets.all(3),
? TranslationBase.of( child: AppText(
context) item.status == 1
.approved ? TranslationBase.of(
: 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(
context) context)
.daysSickleave, .approved
: item.status == 2
? TranslationBase.of(
context)
.extended
: TranslationBase.of(
context)
.pending,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Colors.white,
), ),
Row(children: [ color: item.status == 1
? Colors.green
: Colors.yellow[800],
),
Row(
children: [
AppText( AppText(
item.remarks, TranslationBase.of(context)
) .leaveStartDate +
]), ' ',
], fontWeight: FontWeight.bold,
), ),
SizedBox( Flexible(
width: 20, 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( (item.status == 1 || item.status == 2)
flex: 1, ? Expanded(
child: IconButton( flex: 1,
icon: Icon( child: IconButton(
Icons.open_in_full, icon: Icon(
size: 40, Icons.open_in_full,
), size: 25,
// color: Colors.green, //Colors.black, ),
onPressed: () => { // color: Colors.green, //Colors.black,
openSickLeave(context, true, onPressed: () => {
extendedData: item) openSickLeave(context, true,
}, extendedData: item)
)) },
: SizedBox(), ))
], : SizedBox(),
)), ],
SizedBox( )),
height: 20, 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( Padding(
height: 1, 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, 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
isExtended: isExtend, : patient.appointmentNo, //extendedData.appointmentNo,
extendedData: extendedData, patientMRN: isExtend == true
)); ? extendedData.patientMRN
: patient.patientMRN,
isExtended: isExtend,
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