|
|
|
@ -424,209 +424,214 @@ class _ViewAttendanceState extends State<ViewAttendance> {
|
|
|
|
|
} else if (value!.indexOf('%') == 0 || value!.indexOf('%') == "") {
|
|
|
|
|
percentage = 0;
|
|
|
|
|
}
|
|
|
|
|
showModalBottomSheet(
|
|
|
|
|
context: context,
|
|
|
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(25)),
|
|
|
|
|
isScrollControlled: true,
|
|
|
|
|
backgroundColor: MyColors.backgroundBlackColor,
|
|
|
|
|
builder: (_) {
|
|
|
|
|
return DraggableScrollableSheet(
|
|
|
|
|
maxChildSize: 0.9,
|
|
|
|
|
expand: false,
|
|
|
|
|
builder: (_, controller) {
|
|
|
|
|
dynamic dmyString = getScheduleShiftsDetailsList!.sCHEDULEDATE;
|
|
|
|
|
DateTime dateTime1 = DateFormat("MM/dd/yyyy hh:mm:ss a").parse(dmyString);
|
|
|
|
|
return Column(
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
width: 49,
|
|
|
|
|
height: 7,
|
|
|
|
|
margin: const EdgeInsets.symmetric(vertical: 10),
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
borderRadius: BorderRadius.circular(25),
|
|
|
|
|
color: MyColors.darkGreyColor,
|
|
|
|
|
if (details.date!.month == formattedDate.month && details.date!.year == formattedDate.year) {
|
|
|
|
|
int val = details.date!.day;
|
|
|
|
|
getDayHoursTypeDetailsList?[val - 1].aTTENDEDFLAG == 'Y' ?
|
|
|
|
|
showModalBottomSheet(
|
|
|
|
|
context: context,
|
|
|
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(25)),
|
|
|
|
|
isScrollControlled: true,
|
|
|
|
|
backgroundColor: MyColors.backgroundBlackColor,
|
|
|
|
|
builder: (_) {
|
|
|
|
|
return DraggableScrollableSheet(
|
|
|
|
|
maxChildSize: 0.9,
|
|
|
|
|
expand: false,
|
|
|
|
|
builder: (_, controller) {
|
|
|
|
|
dynamic dmyString = getScheduleShiftsDetailsList!.sCHEDULEDATE;
|
|
|
|
|
DateTime dateTime1 = DateFormat("MM/dd/yyyy hh:mm:ss a").parse(dmyString);
|
|
|
|
|
return Column(
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
width: 49,
|
|
|
|
|
height: 7,
|
|
|
|
|
margin: const EdgeInsets.symmetric(vertical: 10),
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
borderRadius: BorderRadius.circular(25),
|
|
|
|
|
color: MyColors.darkGreyColor,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
Expanded(
|
|
|
|
|
child: ListView.builder(
|
|
|
|
|
controller: controller,
|
|
|
|
|
itemCount: 1,
|
|
|
|
|
itemBuilder: (_, i) => Container(
|
|
|
|
|
decoration: const BoxDecoration(
|
|
|
|
|
borderRadius: BorderRadius.vertical(
|
|
|
|
|
top: Radius.circular(25.0),
|
|
|
|
|
),
|
|
|
|
|
color: MyColors.backgroundBlackColor,
|
|
|
|
|
),
|
|
|
|
|
child: Column(
|
|
|
|
|
children: [
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
"${DateFormat("MMMM-dd-yyyy").format(dateTime1).replaceAll('-', " ")}".toText24(isBold: true, color: Colors.white),
|
|
|
|
|
LocaleKeys.attendanceDetails.tr().toText16(color: MyColors.greyACColor),
|
|
|
|
|
12.height,
|
|
|
|
|
CircularStepProgressBar(
|
|
|
|
|
totalSteps: 16 * 4,
|
|
|
|
|
currentStep: percentage,
|
|
|
|
|
width: 224,
|
|
|
|
|
height: 236,
|
|
|
|
|
selectedColor: MyColors.gradiantEndColor,
|
|
|
|
|
unselectedColor: MyColors.grey70Color,
|
|
|
|
|
child: Column(
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
Expanded(
|
|
|
|
|
child: ListView.builder(
|
|
|
|
|
controller: controller,
|
|
|
|
|
itemCount: 1,
|
|
|
|
|
itemBuilder: (_, i) =>
|
|
|
|
|
Container(
|
|
|
|
|
decoration: const BoxDecoration(
|
|
|
|
|
borderRadius: BorderRadius.vertical(
|
|
|
|
|
top: Radius.circular(25.0),
|
|
|
|
|
),
|
|
|
|
|
color: MyColors.backgroundBlackColor,
|
|
|
|
|
),
|
|
|
|
|
child: Column(
|
|
|
|
|
children: [
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
"${getScheduleShiftsDetailsList!.pERCENTAGE}".toText44(color: Colors.white, isBold: true),
|
|
|
|
|
LocaleKeys.completed.tr().toText11(color: MyColors.greyACColor),
|
|
|
|
|
28.height,
|
|
|
|
|
LocaleKeys.shiftTime.tr().toText11(color: MyColors.greyACColor),
|
|
|
|
|
"${getScheduleShiftsDetailsList!.sHTNAME}".toText22(color: Colors.white, isBold: true),
|
|
|
|
|
"${DateFormat("MMMM-dd-yyyy").format(dateTime1).replaceAll('-', " ")}".toText24(isBold: true, color: Colors.white),
|
|
|
|
|
LocaleKeys.attendanceDetails.tr().toText16(color: MyColors.greyACColor),
|
|
|
|
|
12.height,
|
|
|
|
|
CircularStepProgressBar(
|
|
|
|
|
totalSteps: 16 * 4,
|
|
|
|
|
currentStep: percentage,
|
|
|
|
|
width: 224,
|
|
|
|
|
height: 236,
|
|
|
|
|
selectedColor: MyColors.gradiantEndColor,
|
|
|
|
|
unselectedColor: MyColors.grey70Color,
|
|
|
|
|
child: Column(
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
children: [
|
|
|
|
|
"${getScheduleShiftsDetailsList!.pERCENTAGE}".toText44(color: Colors.white, isBold: true),
|
|
|
|
|
LocaleKeys.completed.tr().toText11(color: MyColors.greyACColor),
|
|
|
|
|
28.height,
|
|
|
|
|
LocaleKeys.shiftTime.tr().toText11(color: MyColors.greyACColor),
|
|
|
|
|
"${getScheduleShiftsDetailsList!.sHTNAME}".toText22(color: Colors.white, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).center,
|
|
|
|
|
).center,
|
|
|
|
|
],
|
|
|
|
|
).center,
|
|
|
|
|
).center,
|
|
|
|
|
],
|
|
|
|
|
).paddingOnly(left: 21, right: 21, top: 27, bottom: 37),
|
|
|
|
|
Stack(
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
width: double.infinity,
|
|
|
|
|
decoration: const BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white),
|
|
|
|
|
padding: const EdgeInsets.only(left: 31, right: 31, top: 30, bottom: 29),
|
|
|
|
|
child: Column(
|
|
|
|
|
).paddingOnly(left: 21, right: 21, top: 27, bottom: 37),
|
|
|
|
|
Stack(
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.actualCheckIn.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}" != ""
|
|
|
|
|
? "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}".toText22(color: Colors.black, isBold: true)
|
|
|
|
|
: "__".toText22(color: Colors.black, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.actualCheckOut.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}" != ""
|
|
|
|
|
? "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}".toText22(color: Colors.black, isBold: true)
|
|
|
|
|
: "__".toText22(color: Colors.black, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
25.height,
|
|
|
|
|
const Divider(
|
|
|
|
|
height: 1,
|
|
|
|
|
thickness: 1,
|
|
|
|
|
color: MyColors.lightGreyEFColor,
|
|
|
|
|
),
|
|
|
|
|
25.height,
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.approvedCheckIn.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}" != ""
|
|
|
|
|
? "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}".toText22(color: MyColors.greenColor, isBold: true)
|
|
|
|
|
: "__".toText22(color: MyColors.greenColor, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.approvedCheckOut.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}" != ""
|
|
|
|
|
? "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}".toText22(color: MyColors.greenColor, isBold: true)
|
|
|
|
|
: "__".toText22(color: MyColors.greenColor, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
25.height,
|
|
|
|
|
const Divider(
|
|
|
|
|
height: 1,
|
|
|
|
|
thickness: 1,
|
|
|
|
|
color: MyColors.lightGreyEFColor,
|
|
|
|
|
),
|
|
|
|
|
25.height,
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.lateIn.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getDayHoursTypeDetailsList[index].lATEINHRS}".toText22(color: MyColors.redColor, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.excess.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getDayHoursTypeDetailsList[index].eXCESSHRS}".toText22(color: MyColors.backgroundBlackColor, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
25.height,
|
|
|
|
|
const Divider(
|
|
|
|
|
height: 1,
|
|
|
|
|
thickness: 1,
|
|
|
|
|
color: MyColors.lightGreyEFColor,
|
|
|
|
|
),
|
|
|
|
|
25.height,
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.shortage.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getDayHoursTypeDetailsList[index].sHORTAGEHRS}".toText22(color: MyColors.backgroundBlackColor, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.earlyOut.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getDayHoursTypeDetailsList[index].eARLYOUTHRS}".toText22(color: Colors.black, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
],
|
|
|
|
|
Container(
|
|
|
|
|
width: double.infinity,
|
|
|
|
|
decoration: const BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white),
|
|
|
|
|
padding: const EdgeInsets.only(left: 31, right: 31, top: 30, bottom: 29),
|
|
|
|
|
child: Column(
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.actualCheckIn.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}" != ""
|
|
|
|
|
? "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}".toText22(color: Colors.black, isBold: true)
|
|
|
|
|
: "__".toText22(color: Colors.black, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.actualCheckOut.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}" != ""
|
|
|
|
|
? "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}".toText22(color: Colors.black, isBold: true)
|
|
|
|
|
: "__".toText22(color: Colors.black, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
25.height,
|
|
|
|
|
const Divider(
|
|
|
|
|
height: 1,
|
|
|
|
|
thickness: 1,
|
|
|
|
|
color: MyColors.lightGreyEFColor,
|
|
|
|
|
),
|
|
|
|
|
25.height,
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.approvedCheckIn.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}" != ""
|
|
|
|
|
? "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}".toText22(color: MyColors.greenColor, isBold: true)
|
|
|
|
|
: "__".toText22(color: MyColors.greenColor, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.approvedCheckOut.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}" != ""
|
|
|
|
|
? "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}".toText22(color: MyColors.greenColor, isBold: true)
|
|
|
|
|
: "__".toText22(color: MyColors.greenColor, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
25.height,
|
|
|
|
|
const Divider(
|
|
|
|
|
height: 1,
|
|
|
|
|
thickness: 1,
|
|
|
|
|
color: MyColors.lightGreyEFColor,
|
|
|
|
|
),
|
|
|
|
|
25.height,
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.lateIn.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getDayHoursTypeDetailsList[index].lATEINHRS}".toText22(color: MyColors.redColor, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.excess.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getDayHoursTypeDetailsList[index].eXCESSHRS}".toText22(color: MyColors.backgroundBlackColor, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
25.height,
|
|
|
|
|
const Divider(
|
|
|
|
|
height: 1,
|
|
|
|
|
thickness: 1,
|
|
|
|
|
color: MyColors.lightGreyEFColor,
|
|
|
|
|
),
|
|
|
|
|
25.height,
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.shortage.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getDayHoursTypeDetailsList[index].sHORTAGEHRS}".toText22(color: MyColors.backgroundBlackColor, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.earlyOut.tr().toText11(
|
|
|
|
|
color: MyColors.grey67Color,
|
|
|
|
|
),
|
|
|
|
|
"${getDayHoursTypeDetailsList[index].eARLYOUTHRS}".toText22(color: Colors.black, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
).expanded,
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
],
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
):null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<Meeting> _getDataSource() {
|
|
|
|
|
List<Meeting> meetings = <Meeting>[];
|
|
|
|
|