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 =
'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 =

@ -389,5 +389,18 @@ const Map<String, Map<String, String>> localizedValues = {
'holiday': {'en': "Holiday", 'ar': 'يوم الاجازة'},
'to': {'en': "To", '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;
await baseAppClient.post(
GET_SICK_LEAVE,
@ -97,7 +97,7 @@ class SickLeaveService extends BaseService {
hasError = true;
super.error = error;
},
body: {'PatientMRN': 3120772},
body: {'PatientMRN': patientMRN},
);
}
@ -186,4 +186,20 @@ class SickLeaveService extends BaseService {
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);
}
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);
@ -105,4 +105,14 @@ class SickLeaveViewModel extends BaseViewModel {
} else
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,
onPressed: () => {
// openSickLeave(context, true,
// extendedData: item)
openLeave(context, true,
extendedData: item)
},
))
: SizedBox(),
@ -239,18 +239,15 @@ class AddRescheduleLeavScreen extends StatelessWidget {
));
}
openLeave(BuildContext context, isExtend,
{GetAllSickLeaveResponse extendedData}) {
openLeave(BuildContext context, isExtend, {extendedData}) {
showModalBottomSheet(
context: context,
builder: (context) {
return new Container(
child: RescheduleLeaveScreen(
// appointmentNo: extendedData.appointmentNo,
// patientMRN: extendedData.patientMRN,
// isExtended: isExtend,
// extendedData: extendedData,
));
isExtend,
extendedData,
));
});
}

@ -27,7 +27,9 @@ import 'package:provider/provider.dart';
Helpers helpers = Helpers();
class RescheduleLeaveScreen extends StatefulWidget {
RescheduleLeaveScreen();
final isUpdate;
final updateData;
RescheduleLeaveScreen(this.isUpdate, this.updateData);
@override
_RescheduleLeaveScreen createState() => _RescheduleLeaveScreen();
}
@ -45,8 +47,8 @@ class _RescheduleLeaveScreen extends State<RescheduleLeaveScreen> {
var reason;
var fromDate;
var toDate;
var clinicID;
TextEditingController _controller4;
// AddSickLeaveRequest addSickLeave = AddSickLeaveRequest();
void _presentDatePicker(id) {
showDatePicker(
context: context,
@ -58,11 +60,7 @@ class _RescheduleLeaveScreen extends State<RescheduleLeaveScreen> {
return;
}
setState(() {
// var selectedDate = DateFormat.yMd().format(pickedDate);
final df = new DateFormat('yyyy-MM-dd');
//addSickLeave.startDate;
if (id == 'fromDate') {
fromDate = pickedDate; //df.format();
_toDateController.text = df.format(pickedDate);
@ -70,7 +68,6 @@ class _RescheduleLeaveScreen extends State<RescheduleLeaveScreen> {
toDate = pickedDate; //
_toDateController2.text = df.format(pickedDate);
}
//addSickLeave.startDate = selectedDate;
});
});
}
@ -703,9 +700,15 @@ class _RescheduleLeaveScreen extends State<RescheduleLeaveScreen> {
alignment: WrapAlignment.center,
children: <Widget>[
AppButton(
title: TranslationBase.of(context).add,
title: widget.isUpdate == true
? TranslationBase.of(context).update
: TranslationBase.of(context).add,
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);
setState(() {
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);
});
}
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/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<SickLeaveViewModel>(
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<Widget>((GetAllSickLeaveResponse item) {
return CardWithBgWidgetNew(
widget: Column(
children: [
Container(
padding: EdgeInsets.only(left: 10, right: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Expanded(
flex: 4,
child: Wrap(
// mainAxisAlignment:
// MainAxisAlignment.start,
children: <Widget>[
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
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<Widget>((GetAllSickLeaveResponse item) {
return CardWithBgWidgetNew(
widget: Column(
children: [
Container(
padding: EdgeInsets.only(left: 10, right: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Expanded(
flex: 4,
child: Wrap(
// mainAxisAlignment:
// MainAxisAlignment.start,
children: <Widget>[
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
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));
});
}
}

@ -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();
}
@ -252,6 +256,7 @@ class _SickLeaveScreenState extends State<SickLeaveScreen> {
model2.sickLeaveStatistics[
'recommendedSickLeaveDays'],
fontWeight: FontWeight.bold,
textAlign: TextAlign.start,
),
padding: EdgeInsets.all(10),
)
@ -339,9 +344,7 @@ class _SickLeaveScreenState extends State<SickLeaveScreen> {
print(value);
});
} else {
model2
.addSickLeave(addSickLeave)
.then((value) => print(value));
_validateInputs(model2);
}
},
),
@ -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 {
Map p = await sharedPref.getObj(DOCTOR_PROFILE);
setState(() {

@ -430,6 +430,13 @@ class TranslationBase {
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];
}
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

Loading…
Cancel
Save