@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart';
import ' package:easy_localization/src/public_ext.dart ' ;
import ' package:flutter/material.dart ' ;
import ' package:flutter/painting.dart ' ;
import ' package:flutter/scheduler.dart ' ;
import ' package:mohem_flutter_app/api/monthlyAttendance_api_client.dart ' ;
import ' package:mohem_flutter_app/classes/colors.dart ' ;
import ' package:mohem_flutter_app/classes/utils.dart ' ;
@ -17,6 +18,10 @@ import 'package:syncfusion_flutter_calendar/calendar.dart';
import ' package:mohem_flutter_app/generated/locale_keys.g.dart ' ;
import ' package:flutter/cupertino.dart ' ;
import ' package:pie_chart/pie_chart.dart ' ;
import ' package:flutter_localizations/flutter_localizations.dart ' ;
import ' package:intl/intl.dart ' ;
import ' package:month_year_picker/month_year_picker.dart ' ;
import ' package:month_picker_dialog/month_picker_dialog.dart ' ;
class MonthlyAttendance extends StatefulWidget {
MonthlyAttendance ( { Key ? key } ) : super ( key: key ) ;
@ -28,12 +33,12 @@ class MonthlyAttendance extends StatefulWidget {
}
class _MonthlyAttendanceState extends State < MonthlyAttendance > {
bool isPresent = tru e;
bool isAbsent = tru e;
bool isMissing Days = tru e;
bool isOff Days = tru e;
bool isPresent = fals e;
bool isAbsent = fals e;
bool isMissing = fals e;
bool isOff = fals e;
DateTime date = DateTime . now ( ) ;
late var formattedDate ;
late DateTime formattedDate ;
var currentMonth = DateTime . now ( ) . month ;
String searchMonth = getMonth ( DateTime . now ( ) . month ) ;
int searchYear = DateTime . now ( ) . year ;
@ -41,84 +46,42 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
List < GetDayHoursTypeDetailsList > getDayHoursTypeDetailsList = [ ] ;
GetTimeCardSummaryList ? getTimeCardSummaryList ;
/ / GetDayHoursTypeDetailsList ? getDayHoursTypeDetailsList ;
GetScheduleShiftsDetailsList ? getScheduleShiftsDetailsList ;
@ override
void initState ( ) {
super . initState ( ) ;
getTimeCardSummary ( searchMonth , searchYear ) ;
getDayHoursTypeDetails ( date . day , searchMonth , searchYear ) ;
formattedDate = DateFormat ( ' MMM-yyyy ' ) . format ( date ) ;
formattedDate = date ;
callTimeCardAndHourDetails ( date . day , searchMonth , searchYear ) ;
}
void getTimeCardSummary( searchMonth , searchYear ) async {
void callTimeCardAndHourDetails( index , searchMonth , searchYear ) async {
try {
Utils . showLoading ( context ) ;
getTimeCardSummaryList = await MonthlyAttendanceApiClient ( ) . getTimeCardSummary ( searchMonth , searchYear ) ;
Utils . hideLoading ( context ) ;
setState ( ( ) { } ) ;
} catch ( ex ) {
Utils . hideLoading ( context ) ;
Utils . handleException ( ex , context , null ) ;
}
}
void getDayHoursTypeDetails ( index , searchMonth , searchYear ) async {
try {
Utils . showLoading ( context ) ;
getDayHoursTypeDetailsList = await MonthlyAttendanceApiClient ( ) . getDayHoursTypeDetails ( searchMonth , searchYear ) ;
Utils . hideLoading ( context ) ;
pRTPID = getDayHoursTypeDetailsList [ index ] . rTPID ;
_calendarController . displayDate = formattedDate ;
setState ( ( ) { } ) ;
} catch ( ex ) {
Utils . hideLoading ( context ) ;
Utils . handleException ( ex , context , null ) ;
}
countAllAttendDays ( ) ;
getScheduleShiftsDetails ( pRTPID ) ;
}
getScheduleShiftsDetails ( pRTPID ) async {
Future getScheduleShiftsDetails ( index , pRTPID ) async {
try {
Utils . showLoading ( context ) ;
getScheduleShiftsDetailsList = await MonthlyAttendanceApiClient ( ) . getScheduleShiftsDetails ( pRTPID ) ;
Utils . hideLoading ( context ) ;
setState ( ( ) { } ) ;
/ / setState ( ( ) { } ) ;
} catch ( ex ) {
Utils . hideLoading ( context ) ;
Utils . handleException ( ex , context , null ) ;
}
}
countAllAttendDays ( ) {
/ / print ( getDayHoursTypeDetailsList . length ) ;
for ( int i = 0 ; i < getDayHoursTypeDetailsList . length ; i + + ) {
if ( getDayHoursTypeDetailsList [ i ] . aTTENDEDFLAG = = ' Y ' ) {
isPresent = true ;
isAbsent = false ;
isMissingDays = false ;
isOffDays = false ;
} else if ( getDayHoursTypeDetailsList [ i ] . aTTENDEDFLAG = = ' N ' & & getDayHoursTypeDetailsList [ i ] . aBSENTFLAG = = ' Y ' ) {
isPresent = false ;
isAbsent = true ;
isMissingDays = false ;
isOffDays = false ;
} else if ( getDayHoursTypeDetailsList [ i ] . aTTENDEDFLAG = = ' N ' & & getDayHoursTypeDetailsList [ i ] . dAYTYPE = = ' OFF ' ) {
isPresent = false ;
isAbsent = false ;
isMissingDays = false ;
isOffDays = true ;
} else {
isPresent = false ;
isAbsent = false ;
isMissingDays = true ;
isOffDays = false ;
}
}
}
final CalendarController _calendarController = CalendarController ( ) ;
final List < Color > _colorList = [ Color ( 0xff2AB2AB ) , Color ( 0xff202529 ) ] ;
@ -126,8 +89,8 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
@ override
Widget build ( BuildContext context ) {
Map < String , double > dataMap = {
" Present " : getTimeCardSummaryList !. aTTENDEDDAYS ! . toDouble ( ) ,
" Absent " : getTimeCardSummaryList !. aBSENTDAYS ! . toDouble ( ) ,
" Present " : getTimeCardSummaryList ?. aTTENDEDDAYS ! = null ? getTimeCardSummaryList !. aTTENDEDDAYS ! . toDouble ( ) : 0 ,
" Absent " : getTimeCardSummaryList ?. aBSENTDAYS ! = null ? getTimeCardSummaryList !. aBSENTDAYS ! . toDouble ( ) : 0 ,
} ;
return Scaffold (
appBar: AppBar (
@ -150,61 +113,42 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
" Attendance " . toText24 ( isBold: true , color: MyColors . darkIconColor ) ,
LocaleKeys . attendance . tr ( ) . toText24 ( isBold: true , color: MyColors . darkIconColor ) ,
Row (
children: [
Text ( formattedDate ) ,
" ${ DateFormat ( " MMMM-yyyy " ) . format ( formattedDate ) } " . toText16 ( color: MyColors . greyACColor ) ,
const Icon ( Icons . keyboard_arrow_down_rounded , color: MyColors . greyACColor ) ,
] ,
) . onPress ( ( ) async {
await showDate Picker(
context: context ,
initialDate: DateTime. now ( ) ,
firstDate: DateTime ( 2 021 ) ,
showMonth Picker(
context: context , / / locale: EasyLocalization . of ( context ) ? . locale ,
initialDate: formattedDate ,
firstDate: DateTime ( searchYear - 2 ) ,
lastDate: DateTime . now ( ) ,
builder: ( context , child ) {
return Theme (
data: ThemeData . dark ( ) . copyWith (
colorScheme: const ColorScheme . dark (
primary: MyColors . lightGreenColor ,
onPrimary: MyColors . white ,
surface: MyColors . lightGreenColor ,
onSurface: MyColors . darkTextColor ,
) ,
dialogBackgroundColor: Colors . white ,
) ,
child: child ! ,
) ;
} ,
) . then ( ( selectedDate ) {
if ( selectedDate ! = null ) {
var selectedMonth = DateFormat ( ' MMMM ' ) . format ( selectedDate ) ;
var selectedYear = DateFormat ( ' yyyy ' ) . format ( selectedDate ) ;
searchMonth = selectedMonth ;
searchYear = int . parse ( selectedYear ) ;
setState ( ( ) {
/ / date = selectedDate ;
formattedDate = DateFormat ( ' MMMM-yyyy ' ) . format ( selectedDate ) ;
getTimeCardSummary ( searchMonth , searchYear ) ;
getDayHoursTypeDetails ( selectedDate . day , searchMonth , searchYear ) ;
} ) ;
searchMonth = getMonth ( selectedDate . month ) ;
searchYear = selectedDate . year ;
formattedDate = selectedDate ; / / DateFormat ( ' MMMM-yyyy ' ) . format ( selectedDate ) ;
/ / _calendarController . selectedDate = formattedDate ;
callTimeCardAndHourDetails ( selectedDate . day , searchMonth , searchYear ) ;
}
} ) ;
} )
] ,
) . paddingOnly ( left: 21 , right: 21 ) ,
18. height ,
AspectRatio ( aspectRatio: 333 / 270 , child: calendarWidget ( ) ) . paddingOnly ( left: 21, right: 21 ) ,
AspectRatio ( aspectRatio: 333 / 270 , child: calendarWidget ( ) ) . paddingOnly ( left: 18 , right: 25 ) ,
Row (
mainAxisAlignment: MainAxisAlignment . start ,
children: [
optionUI ( " Schedule \n Days " , " ${ getTimeCardSummaryList ! . sCHEDULEDAYS } " ) ,
optionUI ( LocaleKeys . scheduleDays . tr ( ) , " ${ getTimeCardSummaryList ? . sCHEDULEDAYS } " ) ,
6. width ,
optionUI ( " Off \n Days " , " ${ getTimeCardSummaryList ! . oFFDAYS } " ) ,
optionUI ( LocaleKeys . offDays . tr ( ) , " ${ getTimeCardSummaryList ? . oFFDAYS } " ) ,
6. width ,
optionUI ( " Non \n Analyzed " , " ${ getTimeCardSummaryList ! . uNAUTHORIZEDLEAVE } " ) ,
optionUI ( LocaleKeys . nonAnalyzed . tr ( ) , " ${ getTimeCardSummaryList ? . uNAUTHORIZEDLEAVE } " ) ,
6. width ,
optionUI ( " Shortage \n Hour " , " ${ getTimeCardSummaryList ! . sHORTAGEHRS } " ) ,
optionUI ( LocaleKeys . shortageHour . tr ( ) , " ${ getTimeCardSummaryList ? . sHORTAGEHRS } " ) ,
] ,
) . paddingOnly ( left: 21 , right: 21 ) ,
35. height ,
@ -229,10 +173,10 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
children: < Widget > [
Column (
children: [
" Attendance " . toText12 ( isBold: true , color: MyColors . grey3AColor ) ,
" Stats " . toText24 ( isBold: true , color: MyColors . grey3AColor ) ,
LocaleKeys . attendance . tr ( ) . toText12 ( isBold: true , color: MyColors . grey3AColor ) ,
LocaleKeys . stats . tr ( ) . toText24 ( isBold: true , color: MyColors . grey3AColor ) ,
] ,
) . paddingOnly ( left: 21 , top: 29 , bottom: 36 ),
) . paddingOnly ( left: 21 , top: 29 , bottom: 36 , right: 23 ),
Row (
children: [
Container (
@ -245,7 +189,7 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
) ,
Container (
margin: const EdgeInsets . only ( left: 5 , right: 5 ) ,
child: " PRESENT ${ getTimeCardSummaryList ! . aTTENDEDDAYS } " . toText16 ( isBold: true , color: MyColors . lightGreenColor ) ,
child: " ${ LocaleKeys . present . tr ( ) } ${ getTimeCardSummaryList ! . aTTENDEDDAYS } " . toText16 ( isBold: true , color: MyColors . lightGreenColor ) ,
) ,
] ,
) . paddingOnly ( left: 21 , right: 23 ) ,
@ -262,13 +206,13 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
) ,
Container (
margin: const EdgeInsets . only ( left: 5 , right: 5 ) ,
child: " ABSENT ${ getTimeCardSummaryList ! . aBSENTDAYS } " . toText16 (
child: " ${ LocaleKeys . absent . tr ( ) } ${ getTimeCardSummaryList ! . aBSENTDAYS } " . toText16 (
isBold: true ,
color: MyColors . backgroundBlackColor ,
) ,
)
] ,
) . paddingOnly ( left: 21 , top: 8 ),
) . paddingOnly ( left: 21 , top: 8 , right: 23 ),
] ,
) ,
Column (
@ -342,17 +286,61 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
Widget calendarWidget ( ) {
return SfCalendar (
view: CalendarView . month ,
/ / onViewChanged: viewChanged ,
showDatePickerButton: false ,
controller: _calendarController ,
headerHeight: 0 ,
todayHighlightColor: MyColors . grey3AColor ,
showNavigationArrow: false ,
showCurrentTimeIndicator: false ,
showWeekNumber: false ,
cellBorderColor: Colors . white ,
selectionDecoration: BoxDecoration (
border: Border . all ( color: MyColors . white , width: 10 ) ,
borderRadius: const BorderRadius . all ( Radius . circular ( 100 ) ) ,
shape: BoxShape . circle ,
) ,
dataSource: MeetingDataSource ( _getDataSource ( ) ) ,
onTap: calendarTapped ,
monthViewSettings: const MonthViewSettings (
dayFormat: ' EEE ' ,
showTrailingAndLeadingDates: false ,
showAgenda: false ,
navigationDirection: MonthNavigationDirection . horizontal ,
monthCellStyle: MonthCellStyle (
textStyle: TextStyle (
fontStyle: FontStyle . normal ,
fontSize: 13 ,
color: Colors . white ,
) ,
) ,
) ,
viewHeaderStyle: const ViewHeaderStyle (
dayTextStyle: TextStyle ( color: MyColors . grey3AColor , fontSize: 13 , fontWeight: FontWeight . w600 ) ,
) ,
monthCellBuilder: ( cxt , build ) {
int val = build . date . day ;
val = = countAllAttendDays ( ) ;
if ( isPresent ) {
monthCellBuilder: ( build , details ) {
if ( details . date . month = = formattedDate . month & & details . date . year = = formattedDate . year ) {
int val = details . date . day ;
/ / check day is off
if ( getDayHoursTypeDetailsList [ val - 1 ] . aTTENDEDFLAG = = ' N ' & & getDayHoursTypeDetailsList [ val - 1 ] . dAYTYPE = = ' OFF ' ) {
return Container (
margin: const EdgeInsets . all ( 4 ) ,
decoration: BoxDecoration (
color: MyColors . greyACColor . withOpacity ( . 12 ) ,
shape: BoxShape . circle ,
) ,
alignment: Alignment . center ,
child: Text (
" ${ val } " ,
style: const TextStyle (
fontSize: 13 ,
fontWeight: FontWeight . w500 ,
color: MyColors . greyA5Color ,
) ,
) ,
) ;
}
/ / check day is Present
else if ( getDayHoursTypeDetailsList [ val - 1 ] . aTTENDEDFLAG = = ' Y ' ) {
return Container (
margin: const EdgeInsets . all ( 4 ) ,
decoration: BoxDecoration (
@ -373,7 +361,7 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
) ,
alignment: Alignment . center ,
child: Text (
" ${ build . date . day } " ,
" ${ val } " ,
style: const TextStyle (
fontSize: 13 ,
fontWeight: FontWeight . w500 ,
@ -381,7 +369,9 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
) ,
) ,
) ;
} else if ( isAbsent ) {
}
/ / check day is Absent
else if ( getDayHoursTypeDetailsList [ val - 1 ] . aTTENDEDFLAG = = ' N ' & & getDayHoursTypeDetailsList [ val - 1 ] . aBSENTFLAG = = ' Y ' ) {
return Container (
margin: const EdgeInsets . all ( 4 ) ,
decoration: BoxDecoration (
@ -397,7 +387,7 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
) ,
alignment: Alignment . center ,
child: Text (
" ${ build . date . day } " ,
" ${ val } " ,
style: const TextStyle (
fontSize: 13 ,
fontWeight: FontWeight . w500 ,
@ -405,7 +395,7 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
) ,
) ,
) ;
} else if ( isMissingDays ) {
}
return Container (
margin: const EdgeInsets . all ( 4 ) ,
decoration: BoxDecoration (
@ -421,7 +411,7 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
) ,
alignment: Alignment . center ,
child: Text (
" ${ build. date . day } " ,
" ${ val } " ,
style: const TextStyle (
fontSize: 13 ,
fontWeight: FontWeight . w500 ,
@ -429,66 +419,35 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
) ,
) ,
) ;
} else if ( isOffDays ) {
return Container (
margin: const EdgeInsets . all ( 4 ) ,
decoration: BoxDecoration (
color: MyColors . greyACColor . withOpacity ( . 12 ) ,
shape: BoxShape . circle ,
) ,
alignment: Alignment . center ,
child: Text (
" ${ build . date . day } " ,
style: const TextStyle (
fontSize: 13 ,
fontWeight: FontWeight . w500 ,
color: MyColors . greyA5Color ,
) ,
) ,
) ;
/ / return Container (
/ / alignment: Alignment . center ,
/ / child: Text ( " $ val " ) ,
/ / ) ;
} else {
return Container ( ) ;
return const SizedBox ( ) ;
}
} ,
monthViewSettings: const MonthViewSettings (
dayFormat: ' EEE ' ,
showTrailingAndLeadingDates: false ,
appointmentDisplayMode: MonthAppointmentDisplayMode . appointment ,
showAgenda: false ,
navigationDirection: MonthNavigationDirection . horizontal ,
monthCellStyle: MonthCellStyle (
textStyle: TextStyle (
fontStyle: FontStyle . normal ,
fontSize: 13 ,
color: Colors . white ,
) ,
) ,
) ,
showNavigationArrow: false ,
showDatePickerButton: false ,
showCurrentTimeIndicator: false ,
showWeekNumber: false ,
cellBorderColor: Colors . white ,
selectionDecoration: BoxDecoration (
border: Border . all ( color: MyColors . white , width: 10 ) ,
borderRadius: const BorderRadius . all ( Radius . circular ( 100 ) ) ,
shape: BoxShape . circle ,
) ,
dataSource: MeetingDataSource ( _getDataSource ( ) ) ,
onTap: calendarTapped ,
) ;
}
calendarTapped ( CalendarTapDetails details ) {
dynamic string = getScheduleShiftsDetailsList ! . pERCENTAGE ;
dynamic percentage = string ! . indexOf ( ' % ' ) ;
print ( percentage ) ;
print ( details . date ? . day . toString ( ) ) ;
int ? index = details . date ? . day ;
calendarTapped ( CalendarTapDetails details ) async {
dynamic index = details . date ? . day ;
if ( index ! = null ) {
index = index - 1 ;
}
getDayHoursTypeDetails ( index , getMonth ( details . date ! . month ) , details . date ? . year ) ;
pRTPID = getDayHoursTypeDetailsList [ index ] . rTPID ;
await getScheduleShiftsDetails ( index , pRTPID ) ;
dynamic value = getScheduleShiftsDetailsList ! . pERCENTAGE ;
dynamic percentage ;
if ( value ! . indexOf ( ' % ' ) = = 3 ) {
percentage = int . parse ( value ! . substring ( 0 , 3 ) ) ;
} else if ( value ! . indexOf ( ' % ' ) = = 2 ) {
percentage = int . parse ( value ! . substring ( 0 , 2 ) ) ;
} else if ( value ! . indexOf ( ' % ' ) = = 1 & & value ! . indexOf ( ' % ' ) ! = 0 & & value ! . indexOf ( ' % ' ) ! = " " ) {
percentage = int . parse ( value ! . substring ( 0 , 1 ) ) ;
} else if ( value ! . indexOf ( ' % ' ) = = 0 | | value ! . indexOf ( ' % ' ) = = " " ) {
percentage = 0 ;
}
showModalBottomSheet (
context: context ,
shape: RoundedRectangleBorder ( borderRadius: BorderRadius . circular ( 25 ) ) ,
@ -499,6 +458,8 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
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 (
@ -524,11 +485,12 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
Column ( children: [
" ${ getScheduleShiftsDetailsList ! . sCHEDULEDATE ! . substring ( 0 , 9 ) } " . toText24 ( isBold: true , color: Colors . white ) ,
" Attendance Details " . tr ( ) . toText16 ( color: MyColors . lightGreyEFColor ) ,
21. height ,
] ) . paddingOnly ( top: 25 , left: 21 , right: 21 , bottom: 10 ) ,
Container ( child:
" ${ DateFormat ( " MMMM-dd-yyyy " ) . format ( dateTime1 ) . replaceAll ( ' - ' , " " ) } " . toText24 ( isBold: true , color: Colors . white ) ,
) . paddingOnly ( top: 26 , left: 21 , right: 21 ) ,
Container (
child: LocaleKeys . attendanceDetails . tr ( ) . toText16 ( color: MyColors . greyACColor ) . paddingOnly ( left: 21 , bottom: 16 ) ,
) ,
Center (
child: CircularStepProgressBar (
totalSteps: 16 * 4 ,
@ -542,9 +504,9 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
mainAxisSize: MainAxisSize . min ,
children: [
" ${ getScheduleShiftsDetailsList ! . pERCENTAGE } " . toText44 ( color: Colors . white , isBold: true ) ,
" Completed " . tr ( ) . toText11 ( color: MyColors . greyACColor ) ,
LocaleKeys . completed . tr ( ) . toText11 ( color: MyColors . greyACColor ) ,
19. height ,
" Shift Time " . tr ( ) . toText11 ( color: MyColors . greyACColor ) ,
LocaleKeys . shiftTime . tr ( ) . toText11 ( color: MyColors . greyACColor ) ,
" ${ getScheduleShiftsDetailsList ! . sHTNAME } " . toText22 ( color: Colors . white , isBold: true ) ,
] ,
) ,
@ -574,11 +536,13 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
" Actual Check In " . tr ( ) . toText11 (
LocaleKeys . actualCheckIn . tr ( ) . toText11 (
color: MyColors . grey67Color ,
) ,
8. height ,
" ${ getScheduleShiftsDetailsList ! . sHTACTUALSTARTTIME } " . toText22 ( color: Colors . black , isBold: true ) ,
" ${ getScheduleShiftsDetailsList ! . sHTACTUALSTARTTIME } " ! = " "
? " ${ getScheduleShiftsDetailsList ! . sHTACTUALSTARTTIME } " . toText22 ( color: Colors . black , isBold: true )
: " __ " . toText22 ( color: Colors . black , isBold: true ) ,
] ,
) ,
) ,
@ -586,11 +550,13 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
" Actual Check Out " . tr ( ) . toText11 (
LocaleKeys . actualCheckOut . tr ( ) . toText11 (
color: MyColors . grey67Color ,
) ,
8. height ,
" ${ getScheduleShiftsDetailsList ! . sHTACTUALENDTIME } " . toText22 ( color: Colors . black , isBold: true ) ,
" ${ getScheduleShiftsDetailsList ! . sHTACTUALENDTIME } " ! = " "
? " ${ getScheduleShiftsDetailsList ! . sHTACTUALENDTIME } " . toText22 ( color: Colors . black , isBold: true )
: " __ " . toText22 ( color: Colors . black , isBold: true ) ,
] ,
) ,
] ,
@ -609,11 +575,13 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
" Approved Check In " . tr ( ) . toText11 (
LocaleKeys . approvedCheckIn . tr ( ) . toText11 (
color: MyColors . grey67Color ,
) ,
8. height ,
" ${ getScheduleShiftsDetailsList ! . aPPROVEDSTARTTIME } " . toText22 ( color: MyColors . greenColor , isBold: true ) ,
" ${ getScheduleShiftsDetailsList ! . aPPROVEDSTARTTIME } " ! = " "
? " ${ getScheduleShiftsDetailsList ! . aPPROVEDSTARTTIME } " . toText22 ( color: MyColors . greenColor , isBold: true )
: " __ " . toText22 ( color: MyColors . greenColor , isBold: true ) ,
] ,
) ,
) ,
@ -621,11 +589,13 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
" Approved Check Out " . tr ( ) . toText11 (
LocaleKeys . approvedCheckOut . tr ( ) . toText11 (
color: MyColors . grey67Color ,
) ,
8. height ,
" ${ getScheduleShiftsDetailsList ! . aPPROVEDENDTIME } " . toText22 ( color: MyColors . greenColor , isBold: true ) ,
" ${ getScheduleShiftsDetailsList ! . aPPROVEDENDTIME } " ! = " "
? " ${ getScheduleShiftsDetailsList ! . aPPROVEDENDTIME } " . toText22 ( color: MyColors . greenColor , isBold: true )
: " __ " . toText22 ( color: MyColors . greenColor , isBold: true ) ,
] ,
) ,
] ,
@ -644,11 +614,11 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
" Late In " . tr ( ) . toText11 (
LocaleKeys . lateIn . tr ( ) . toText11 (
color: MyColors . grey67Color ,
) ,
8. height ,
" ${ getDayHoursTypeDetailsList [ i ] . lATEINHRS } " . toText22 ( color: MyColors . redColor , isBold: true ) ,
" ${ getDayHoursTypeDetailsList [ i ndex ] . lATEINHRS } " . toText22 ( color: MyColors . redColor , isBold: true ) ,
] ,
) ,
) ,
@ -656,11 +626,11 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
" Excess " . tr ( ) . toText11 (
LocaleKeys . excess . tr ( ) . toText11 (
color: MyColors . grey67Color ,
) ,
8. height ,
" ${ getDayHoursTypeDetailsList [ i ] . eXCESSHRS } " . toText22 ( color: Colors . black , isBold: true ) ,
" ${ getDayHoursTypeDetailsList [ i ndex ] . eXCESSHRS } " . toText22 ( color: Colors . black , isBold: true ) ,
] ,
) ,
] ,
@ -679,11 +649,11 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
" Shortage " . tr ( ) . toText11 (
LocaleKeys . shortage . tr ( ) . toText11 (
color: MyColors . grey67Color ,
) ,
8. height ,
" ${ getDayHoursTypeDetailsList [ i ] . sHORTAGEHRS } " . toText22 ( color: Colors . black , isBold: true ) ,
" ${ getDayHoursTypeDetailsList [ i ndex ] . sHORTAGEHRS } " . toText22 ( color: Colors . black , isBold: true ) ,
] ,
) ,
) ,
@ -691,11 +661,11 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
" Early Out " . tr ( ) . toText11 (
LocaleKeys . earlyOut . tr ( ) . toText11 (
color: MyColors . grey67Color ,
) ,
8. height ,
" ${ getDayHoursTypeDetailsList [ i ] . eARLYOUTHRS } " . toText22 ( color: Colors . black , isBold: true ) ,
" ${ getDayHoursTypeDetailsList [ i ndex ] . eARLYOUTHRS } " . toText22 ( color: Colors . black , isBold: true ) ,
] ,
) ,
] ,
@ -751,6 +721,35 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
return " December " ;
}
}
static getMonthAr ( int month ) {
switch ( month ) {
case 1 :
return ' يناير ' ;
case 2 :
return ' فبراير ' ;
case 3 :
return ' مارس ' ;
case 4 :
return ' أبريل ' ;
case 5 :
return ' مايو ' ;
case 6 :
return ' يونيو ' ;
case 7 :
return ' يوليو ' ;
case 8 :
return ' أغسطس ' ;
case 9 :
return ' سبتمبر ' ;
case 10 :
return ' اكتوبر ' ;
case 11 :
return ' نوفمبر ' ;
case 12 :
return ' ديسمبر ' ;
}
}
}
class MeetingDataSource extends CalendarDataSource {