Merge branch 'Fatima' of https://gitlab.com/mirza.shafique/mohem_flutter_app into development_sultan
commit
74c06203db
@ -0,0 +1,72 @@
|
|||||||
|
|
||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:mohem_flutter_app/app_state/app_state.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/consts.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/generic_response_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_day_hours_type_details_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_mobile_login_info_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_schedule_shifts_details_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart';
|
||||||
|
import 'api_client.dart';
|
||||||
|
|
||||||
|
class MonthlyAttendanceApiClient {
|
||||||
|
static final MonthlyAttendanceApiClient _instance = MonthlyAttendanceApiClient._internal();
|
||||||
|
|
||||||
|
MonthlyAttendanceApiClient._internal();
|
||||||
|
|
||||||
|
factory MonthlyAttendanceApiClient() => _instance;
|
||||||
|
|
||||||
|
|
||||||
|
Future<GetTimeCardSummaryList?> getTimeCardSummary(String month, int year) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_TIME_CARD_SUMMARY";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_MENU_TYPE": "E",
|
||||||
|
"P_SELECTED_RESP_ID": -999,
|
||||||
|
"SearchMonth": month,
|
||||||
|
"SearchYear": year,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return (responseData.getTimeCardSummaryList?.length ?? 0) > 0 ? responseData.getTimeCardSummaryList!.first : null;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<GetDayHoursTypeDetailsList>> getDayHoursTypeDetails(String month, int year) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_DAY_HOURS_TYPE_DETAILS";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_MENU_TYPE": "E",
|
||||||
|
"P_PAGE_LIMIT": 100,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
"P_SELECTED_RESP_ID": -999,
|
||||||
|
"SearchMonth": month,
|
||||||
|
"SearchYear": year,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
// postParams["DeviceToken"] = deviceToken;
|
||||||
|
// postParams["DeviceType"] = deviceType;
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
|
||||||
|
print("Response Data______");
|
||||||
|
print(responseData.getDayHoursTypeDetailsList!.length);
|
||||||
|
return responseData.getDayHoursTypeDetailsList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Future<GetScheduleShiftsDetailsList?> getScheduleShiftsDetails(int pRTPID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_SCHEDULE_SHIFTS_DETAILS";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_PAGE_LIMIT": 10,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
"P_RTP_ID": pRTPID,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return (responseData.getScheduleShiftsDetailsList?.length ?? 0) > 0 ? responseData.getScheduleShiftsDetailsList!.first : null;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
|
||||||
|
|
||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:mohem_flutter_app/app_state/app_state.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/consts.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/generic_response_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_employee_address_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_employee_phones_model.dart';
|
||||||
|
import 'api_client.dart';
|
||||||
|
|
||||||
|
class ProfileApiClient {
|
||||||
|
static final ProfileApiClient _instance = ProfileApiClient._internal();
|
||||||
|
|
||||||
|
ProfileApiClient._internal();
|
||||||
|
|
||||||
|
factory ProfileApiClient() => _instance;
|
||||||
|
|
||||||
|
|
||||||
|
Future<GetEmployeeContactsList?> getEmployeeContacts() async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_EMPLOYEE_CONTACTS";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_MENU_TYPE": "E",
|
||||||
|
"P_SELECTED_RESP_ID": -999,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return (responseData.getEmployeeContactsList?.length ?? 0) > 0 ? responseData.getEmployeeContactsList!.first : null;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<GetEmployeeBasicDetailsList>> getEmployeeBasicDetails() async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_EMPLOYEE_BASIC_DETAILS";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_MENU_TYPE": "E",
|
||||||
|
"P_SELECTED_RESP_ID": -999,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getEmployeeBasicDetailsList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<GetEmployeePhonesList?> getEmployeePhones() async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_EMPLOYEE_PHONES";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_MENU_TYPE": "E",
|
||||||
|
"P_SELECTED_RESP_ID": -999,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return (responseData.getEmployeePhonesList?.length ?? 0) > 0 ? responseData.getEmployeePhonesList!.first : null;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<GetEmployeeAddressList?> getEmployeeAddress() async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_EMPLOYEE_ADDRESS";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_MENU_TYPE": "E",
|
||||||
|
"P_SELECTED_RESP_ID": -999,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return (responseData.getEmployeeAddressList?.length ?? 0) > 0 ? responseData.getEmployeeAddressList!.first : null;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,180 @@
|
|||||||
|
class GetDayHoursTypeDetailsList {
|
||||||
|
Null? aBSENCEATTENDANCEID;
|
||||||
|
Null? aBSENCEATTENDANCETYPEID;
|
||||||
|
String? aBSENTFLAG;
|
||||||
|
String? aCTUALHRS;
|
||||||
|
String? aNALAYZEDFLAG;
|
||||||
|
String? aPPROVEDTIMEBACKHRS;
|
||||||
|
String? aPPRTIMEBACKFLAG;
|
||||||
|
int? aSSIGNMENTID;
|
||||||
|
String? aTTENDEDFLAG;
|
||||||
|
Null? cALENDARENTRYID;
|
||||||
|
String? cOMPOFFFLAG;
|
||||||
|
String? cOMPOFFHRS;
|
||||||
|
String? cOMPOFFHHRS;
|
||||||
|
String? cOMPOFFNHRS;
|
||||||
|
String? cOMPOFFWHRS;
|
||||||
|
String? dAYTYPE;
|
||||||
|
String? eARLYOUTFLAG;
|
||||||
|
String? eARLYOUTHRS;
|
||||||
|
String? eXCESSFLAG;
|
||||||
|
String? eXCESSHRS;
|
||||||
|
int? fROMROWNUM;
|
||||||
|
String? lATEINFLAG;
|
||||||
|
String? lATEINHRS;
|
||||||
|
String? mISSINGSWIPEFLAG;
|
||||||
|
String? nONSCHEDULEDFLAG;
|
||||||
|
Null? nOOFROWS;
|
||||||
|
String? oNCALLHRS;
|
||||||
|
Null? pERSONEXTRAINFOID;
|
||||||
|
String? pLANNEDOTHRS;
|
||||||
|
String? pLANNEDOTHRSFLAG;
|
||||||
|
String? rEMARKS;
|
||||||
|
int? rOWNUM;
|
||||||
|
int? rTPID;
|
||||||
|
String? sCHEDULEDHRS;
|
||||||
|
String? sCHEDULEDONCALLHRS;
|
||||||
|
String? sCHEDULEDPLANNEDOTHRS;
|
||||||
|
String? sCHEDULEDATE;
|
||||||
|
String? sHORTAGEFLAG;
|
||||||
|
String? sHORTAGEHRS;
|
||||||
|
String? tIMEBACKFLAG;
|
||||||
|
String? tIMEBACKHRS;
|
||||||
|
int? tOROWNUM;
|
||||||
|
|
||||||
|
GetDayHoursTypeDetailsList(
|
||||||
|
{this.aBSENCEATTENDANCEID,
|
||||||
|
this.aBSENCEATTENDANCETYPEID,
|
||||||
|
this.aBSENTFLAG,
|
||||||
|
this.aCTUALHRS,
|
||||||
|
this.aNALAYZEDFLAG,
|
||||||
|
this.aPPROVEDTIMEBACKHRS,
|
||||||
|
this.aPPRTIMEBACKFLAG,
|
||||||
|
this.aSSIGNMENTID,
|
||||||
|
this.aTTENDEDFLAG,
|
||||||
|
this.cALENDARENTRYID,
|
||||||
|
this.cOMPOFFFLAG,
|
||||||
|
this.cOMPOFFHRS,
|
||||||
|
this.cOMPOFFHHRS,
|
||||||
|
this.cOMPOFFNHRS,
|
||||||
|
this.cOMPOFFWHRS,
|
||||||
|
this.dAYTYPE,
|
||||||
|
this.eARLYOUTFLAG,
|
||||||
|
this.eARLYOUTHRS,
|
||||||
|
this.eXCESSFLAG,
|
||||||
|
this.eXCESSHRS,
|
||||||
|
this.fROMROWNUM,
|
||||||
|
this.lATEINFLAG,
|
||||||
|
this.lATEINHRS,
|
||||||
|
this.mISSINGSWIPEFLAG,
|
||||||
|
this.nONSCHEDULEDFLAG,
|
||||||
|
this.nOOFROWS,
|
||||||
|
this.oNCALLHRS,
|
||||||
|
this.pERSONEXTRAINFOID,
|
||||||
|
this.pLANNEDOTHRS,
|
||||||
|
this.pLANNEDOTHRSFLAG,
|
||||||
|
this.rEMARKS,
|
||||||
|
this.rOWNUM,
|
||||||
|
this.rTPID,
|
||||||
|
this.sCHEDULEDHRS,
|
||||||
|
this.sCHEDULEDONCALLHRS,
|
||||||
|
this.sCHEDULEDPLANNEDOTHRS,
|
||||||
|
this.sCHEDULEDATE,
|
||||||
|
this.sHORTAGEFLAG,
|
||||||
|
this.sHORTAGEHRS,
|
||||||
|
this.tIMEBACKFLAG,
|
||||||
|
this.tIMEBACKHRS,
|
||||||
|
this.tOROWNUM});
|
||||||
|
|
||||||
|
GetDayHoursTypeDetailsList.fromJson(Map<String, dynamic> json) {
|
||||||
|
aBSENCEATTENDANCEID = json['ABSENCE_ATTENDANCE_ID'];
|
||||||
|
aBSENCEATTENDANCETYPEID = json['ABSENCE_ATTENDANCE_TYPE_ID'];
|
||||||
|
aBSENTFLAG = json['ABSENT_FLAG'];
|
||||||
|
aCTUALHRS = json['ACTUAL_HRS'];
|
||||||
|
aNALAYZEDFLAG = json['ANALAYZED_FLAG'];
|
||||||
|
aPPROVEDTIMEBACKHRS = json['APPROVED_TIMEBACK_HRS'];
|
||||||
|
aPPRTIMEBACKFLAG = json['APPR_TIMEBACK_FLAG'];
|
||||||
|
aSSIGNMENTID = json['ASSIGNMENT_ID'];
|
||||||
|
aTTENDEDFLAG = json['ATTENDED_FLAG'];
|
||||||
|
cALENDARENTRYID = json['CALENDAR_ENTRY_ID'];
|
||||||
|
cOMPOFFFLAG = json['COMP_OFF_FLAG'];
|
||||||
|
cOMPOFFHRS = json['COMP_OFF_HRS'];
|
||||||
|
cOMPOFFHHRS = json['COMP_OFF_H_HRS'];
|
||||||
|
cOMPOFFNHRS = json['COMP_OFF_N_HRS'];
|
||||||
|
cOMPOFFWHRS = json['COMP_OFF_W_HRS'];
|
||||||
|
dAYTYPE = json['DAY_TYPE'];
|
||||||
|
eARLYOUTFLAG = json['EARLY_OUT_FLAG'];
|
||||||
|
eARLYOUTHRS = json['EARLY_OUT_HRS'];
|
||||||
|
eXCESSFLAG = json['EXCESS_FLAG'];
|
||||||
|
eXCESSHRS = json['EXCESS_HRS'];
|
||||||
|
fROMROWNUM = json['FROM_ROW_NUM'];
|
||||||
|
lATEINFLAG = json['LATE_IN_FLAG'];
|
||||||
|
lATEINHRS = json['LATE_IN_HRS'];
|
||||||
|
mISSINGSWIPEFLAG = json['MISSING_SWIPE_FLAG'];
|
||||||
|
nONSCHEDULEDFLAG = json['NON_SCHEDULED_FLAG'];
|
||||||
|
nOOFROWS = json['NO_OF_ROWS'];
|
||||||
|
oNCALLHRS = json['ON_CALL_HRS'];
|
||||||
|
pERSONEXTRAINFOID = json['PERSON_EXTRA_INFO_ID'];
|
||||||
|
pLANNEDOTHRS = json['PLANNED_OT_HRS'];
|
||||||
|
pLANNEDOTHRSFLAG = json['PLANNED_OT_HRS_FLAG'];
|
||||||
|
rEMARKS = json['REMARKS'];
|
||||||
|
rOWNUM = json['ROW_NUM'];
|
||||||
|
rTPID = json['RTP_ID'];
|
||||||
|
sCHEDULEDHRS = json['SCHEDULED_HRS'];
|
||||||
|
sCHEDULEDONCALLHRS = json['SCHEDULED_ON_CALL_HRS'];
|
||||||
|
sCHEDULEDPLANNEDOTHRS = json['SCHEDULED_PLANNED_OT_HRS'];
|
||||||
|
sCHEDULEDATE = json['SCHEDULE_DATE'];
|
||||||
|
sHORTAGEFLAG = json['SHORTAGE_FLAG'];
|
||||||
|
sHORTAGEHRS = json['SHORTAGE_HRS'];
|
||||||
|
tIMEBACKFLAG = json['TIMEBACK_FLAG'];
|
||||||
|
tIMEBACKHRS = json['TIMEBACK_HRS'];
|
||||||
|
tOROWNUM = json['TO_ROW_NUM'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ABSENCE_ATTENDANCE_ID'] = this.aBSENCEATTENDANCEID;
|
||||||
|
data['ABSENCE_ATTENDANCE_TYPE_ID'] = this.aBSENCEATTENDANCETYPEID;
|
||||||
|
data['ABSENT_FLAG'] = this.aBSENTFLAG;
|
||||||
|
data['ACTUAL_HRS'] = this.aCTUALHRS;
|
||||||
|
data['ANALAYZED_FLAG'] = this.aNALAYZEDFLAG;
|
||||||
|
data['APPROVED_TIMEBACK_HRS'] = this.aPPROVEDTIMEBACKHRS;
|
||||||
|
data['APPR_TIMEBACK_FLAG'] = this.aPPRTIMEBACKFLAG;
|
||||||
|
data['ASSIGNMENT_ID'] = this.aSSIGNMENTID;
|
||||||
|
data['ATTENDED_FLAG'] = this.aTTENDEDFLAG;
|
||||||
|
data['CALENDAR_ENTRY_ID'] = this.cALENDARENTRYID;
|
||||||
|
data['COMP_OFF_FLAG'] = this.cOMPOFFFLAG;
|
||||||
|
data['COMP_OFF_HRS'] = this.cOMPOFFHRS;
|
||||||
|
data['COMP_OFF_H_HRS'] = this.cOMPOFFHHRS;
|
||||||
|
data['COMP_OFF_N_HRS'] = this.cOMPOFFNHRS;
|
||||||
|
data['COMP_OFF_W_HRS'] = this.cOMPOFFWHRS;
|
||||||
|
data['DAY_TYPE'] = this.dAYTYPE;
|
||||||
|
data['EARLY_OUT_FLAG'] = this.eARLYOUTFLAG;
|
||||||
|
data['EARLY_OUT_HRS'] = this.eARLYOUTHRS;
|
||||||
|
data['EXCESS_FLAG'] = this.eXCESSFLAG;
|
||||||
|
data['EXCESS_HRS'] = this.eXCESSHRS;
|
||||||
|
data['FROM_ROW_NUM'] = this.fROMROWNUM;
|
||||||
|
data['LATE_IN_FLAG'] = this.lATEINFLAG;
|
||||||
|
data['LATE_IN_HRS'] = this.lATEINHRS;
|
||||||
|
data['MISSING_SWIPE_FLAG'] = this.mISSINGSWIPEFLAG;
|
||||||
|
data['NON_SCHEDULED_FLAG'] = this.nONSCHEDULEDFLAG;
|
||||||
|
data['NO_OF_ROWS'] = this.nOOFROWS;
|
||||||
|
data['ON_CALL_HRS'] = this.oNCALLHRS;
|
||||||
|
data['PERSON_EXTRA_INFO_ID'] = this.pERSONEXTRAINFOID;
|
||||||
|
data['PLANNED_OT_HRS'] = this.pLANNEDOTHRS;
|
||||||
|
data['PLANNED_OT_HRS_FLAG'] = this.pLANNEDOTHRSFLAG;
|
||||||
|
data['REMARKS'] = this.rEMARKS;
|
||||||
|
data['ROW_NUM'] = this.rOWNUM;
|
||||||
|
data['RTP_ID'] = this.rTPID;
|
||||||
|
data['SCHEDULED_HRS'] = this.sCHEDULEDHRS;
|
||||||
|
data['SCHEDULED_ON_CALL_HRS'] = this.sCHEDULEDONCALLHRS;
|
||||||
|
data['SCHEDULED_PLANNED_OT_HRS'] = this.sCHEDULEDPLANNEDOTHRS;
|
||||||
|
data['SCHEDULE_DATE'] = this.sCHEDULEDATE;
|
||||||
|
data['SHORTAGE_FLAG'] = this.sHORTAGEFLAG;
|
||||||
|
data['SHORTAGE_HRS'] = this.sHORTAGEHRS;
|
||||||
|
data['TIMEBACK_FLAG'] = this.tIMEBACKFLAG;
|
||||||
|
data['TIMEBACK_HRS'] = this.tIMEBACKHRS;
|
||||||
|
data['TO_ROW_NUM'] = this.tOROWNUM;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
class GetEmployeeAddressList {
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
|
||||||
|
class GetEmployeeBasicDetailsList {
|
||||||
|
String? aPPLICATIONCOLUMNNAME;
|
||||||
|
String? dATATYPE;
|
||||||
|
String? dATEVALUE;
|
||||||
|
String? dISPLAYFLAG;
|
||||||
|
int? gROUPNUM;
|
||||||
|
int? nUMBERVALUE;
|
||||||
|
String? sEGMENTPROMPT;
|
||||||
|
int? sEGMENTSEQNUM;
|
||||||
|
String? sEGMENTVALUEDSP;
|
||||||
|
String? vARCHAR2VALUE;
|
||||||
|
|
||||||
|
GetEmployeeBasicDetailsList(
|
||||||
|
{this.aPPLICATIONCOLUMNNAME,
|
||||||
|
this.dATATYPE,
|
||||||
|
this.dATEVALUE,
|
||||||
|
this.dISPLAYFLAG,
|
||||||
|
this.gROUPNUM,
|
||||||
|
this.nUMBERVALUE,
|
||||||
|
this.sEGMENTPROMPT,
|
||||||
|
this.sEGMENTSEQNUM,
|
||||||
|
this.sEGMENTVALUEDSP,
|
||||||
|
this.vARCHAR2VALUE});
|
||||||
|
|
||||||
|
GetEmployeeBasicDetailsList.fromJson(Map<String, dynamic> json) {
|
||||||
|
aPPLICATIONCOLUMNNAME = json['APPLICATION_COLUMN_NAME'];
|
||||||
|
dATATYPE = json['DATATYPE'];
|
||||||
|
dATEVALUE = json['DATE_VALUE'];
|
||||||
|
dISPLAYFLAG = json['DISPLAY_FLAG'];
|
||||||
|
gROUPNUM = json['GROUP_NUM'];
|
||||||
|
nUMBERVALUE = json['NUMBER_VALUE'];
|
||||||
|
sEGMENTPROMPT = json['SEGMENT_PROMPT'];
|
||||||
|
sEGMENTSEQNUM = json['SEGMENT_SEQ_NUM'];
|
||||||
|
sEGMENTVALUEDSP = json['SEGMENT_VALUE_DSP'];
|
||||||
|
vARCHAR2VALUE = json['VARCHAR2_VALUE'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['APPLICATION_COLUMN_NAME'] = this.aPPLICATIONCOLUMNNAME;
|
||||||
|
data['DATATYPE'] = this.dATATYPE;
|
||||||
|
data['DATE_VALUE'] = this.dATEVALUE;
|
||||||
|
data['DISPLAY_FLAG'] = this.dISPLAYFLAG;
|
||||||
|
data['GROUP_NUM'] = this.gROUPNUM;
|
||||||
|
data['NUMBER_VALUE'] = this.nUMBERVALUE;
|
||||||
|
data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT;
|
||||||
|
data['SEGMENT_SEQ_NUM'] = this.sEGMENTSEQNUM;
|
||||||
|
data['SEGMENT_VALUE_DSP'] = this.sEGMENTVALUEDSP;
|
||||||
|
data['VARCHAR2_VALUE'] = this.vARCHAR2VALUE;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,45 @@
|
|||||||
|
|
||||||
|
class GetEmployeeContactsList {
|
||||||
|
String? cONTACTNAME;
|
||||||
|
int? cONTACTPERSONID;
|
||||||
|
int? cONTACTRELATIONSHIPID;
|
||||||
|
String? cONTACTTYPE;
|
||||||
|
String? dATEOFBIRTH;
|
||||||
|
int? pERSONID;
|
||||||
|
String? pRIMARYCONTACTFLAG;
|
||||||
|
String? rELATIONSHIP;
|
||||||
|
|
||||||
|
GetEmployeeContactsList(
|
||||||
|
{this.cONTACTNAME,
|
||||||
|
this.cONTACTPERSONID,
|
||||||
|
this.cONTACTRELATIONSHIPID,
|
||||||
|
this.cONTACTTYPE,
|
||||||
|
this.dATEOFBIRTH,
|
||||||
|
this.pERSONID,
|
||||||
|
this.pRIMARYCONTACTFLAG,
|
||||||
|
this.rELATIONSHIP});
|
||||||
|
|
||||||
|
GetEmployeeContactsList.fromJson(Map<String, dynamic> json) {
|
||||||
|
cONTACTNAME = json['CONTACT_NAME'];
|
||||||
|
cONTACTPERSONID = json['CONTACT_PERSON_ID'];
|
||||||
|
cONTACTRELATIONSHIPID = json['CONTACT_RELATIONSHIP_ID'];
|
||||||
|
cONTACTTYPE = json['CONTACT_TYPE'];
|
||||||
|
dATEOFBIRTH = json['DATE_OF_BIRTH'];
|
||||||
|
pERSONID = json['PERSON_ID'];
|
||||||
|
pRIMARYCONTACTFLAG = json['PRIMARY_CONTACT_FLAG'];
|
||||||
|
rELATIONSHIP = json['RELATIONSHIP'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['CONTACT_NAME'] = this.cONTACTNAME;
|
||||||
|
data['CONTACT_PERSON_ID'] = this.cONTACTPERSONID;
|
||||||
|
data['CONTACT_RELATIONSHIP_ID'] = this.cONTACTRELATIONSHIPID;
|
||||||
|
data['CONTACT_TYPE'] = this.cONTACTTYPE;
|
||||||
|
data['DATE_OF_BIRTH'] = this.dATEOFBIRTH;
|
||||||
|
data['PERSON_ID'] = this.pERSONID;
|
||||||
|
data['PRIMARY_CONTACT_FLAG'] = this.pRIMARYCONTACTFLAG;
|
||||||
|
data['RELATIONSHIP'] = this.rELATIONSHIP;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
|
||||||
|
class GetEmployeePhonesList {
|
||||||
|
String? dATEFROM;
|
||||||
|
String? dATETO;
|
||||||
|
int? oBJECTVERSIONNUMBER;
|
||||||
|
int? pARENTID;
|
||||||
|
String? pARENTTABLE;
|
||||||
|
int? pHONEID;
|
||||||
|
String? pHONENUMBER;
|
||||||
|
String? pHONETYPE;
|
||||||
|
String? pHONETYPEMEANING;
|
||||||
|
int? rOWINDEX;
|
||||||
|
|
||||||
|
GetEmployeePhonesList(
|
||||||
|
{this.dATEFROM,
|
||||||
|
this.dATETO,
|
||||||
|
this.oBJECTVERSIONNUMBER,
|
||||||
|
this.pARENTID,
|
||||||
|
this.pARENTTABLE,
|
||||||
|
this.pHONEID,
|
||||||
|
this.pHONENUMBER,
|
||||||
|
this.pHONETYPE,
|
||||||
|
this.pHONETYPEMEANING,
|
||||||
|
this.rOWINDEX});
|
||||||
|
|
||||||
|
GetEmployeePhonesList.fromJson(Map<String, dynamic> json) {
|
||||||
|
dATEFROM = json['DATE_FROM'];
|
||||||
|
dATETO = json['DATE_TO'];
|
||||||
|
oBJECTVERSIONNUMBER = json['OBJECT_VERSION_NUMBER'];
|
||||||
|
pARENTID = json['PARENT_ID'];
|
||||||
|
pARENTTABLE = json['PARENT_TABLE'];
|
||||||
|
pHONEID = json['PHONE_ID'];
|
||||||
|
pHONENUMBER = json['PHONE_NUMBER'];
|
||||||
|
pHONETYPE = json['PHONE_TYPE'];
|
||||||
|
pHONETYPEMEANING = json['PHONE_TYPE_MEANING'];
|
||||||
|
rOWINDEX = json['ROW_INDEX'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['DATE_FROM'] = this.dATEFROM;
|
||||||
|
data['DATE_TO'] = this.dATETO;
|
||||||
|
data['OBJECT_VERSION_NUMBER'] = this.oBJECTVERSIONNUMBER;
|
||||||
|
data['PARENT_ID'] = this.pARENTID;
|
||||||
|
data['PARENT_TABLE'] = this.pARENTTABLE;
|
||||||
|
data['PHONE_ID'] = this.pHONEID;
|
||||||
|
data['PHONE_NUMBER'] = this.pHONENUMBER;
|
||||||
|
data['PHONE_TYPE'] = this.pHONETYPE;
|
||||||
|
data['PHONE_TYPE_MEANING'] = this.pHONETYPEMEANING;
|
||||||
|
data['ROW_INDEX'] = this.rOWINDEX;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,129 @@
|
|||||||
|
|
||||||
|
class GetScheduleShiftsDetailsList {
|
||||||
|
String? aCTUALWOBHRS;
|
||||||
|
String? aPPROVEDENDDATETIME;
|
||||||
|
String? aPPROVEDENDREASON;
|
||||||
|
String? aPPROVEDENDREASONDESC;
|
||||||
|
String? aPPROVEDENDTIME;
|
||||||
|
String? aPPROVEDSTARTDATETIME;
|
||||||
|
String? aPPROVEDSTARTREASON;
|
||||||
|
String? aPPROVEDSTARTREASONDESC;
|
||||||
|
String? aPPROVEDSTARTTIME;
|
||||||
|
int? aSSIGNMENTID;
|
||||||
|
String? bREAKNAME;
|
||||||
|
int? fROMROWNUM;
|
||||||
|
int? nOOFROWS;
|
||||||
|
String? pERCENTAGE;
|
||||||
|
int? rOWNUM;
|
||||||
|
int? rTPID;
|
||||||
|
int? rTPSCHEDULEID;
|
||||||
|
String? sCHEDULEDATE;
|
||||||
|
int? sEQNO;
|
||||||
|
String? sHTACTUALENDDATETIME;
|
||||||
|
String? sHTACTUALENDTIME;
|
||||||
|
String? sHTACTUALHRS;
|
||||||
|
String? sHTACTUALSTARTDATETIME;
|
||||||
|
String? sHTACTUALSTARTTIME;
|
||||||
|
String? sHTCODE;
|
||||||
|
String? sHTNAME;
|
||||||
|
String? sHTTYPE;
|
||||||
|
String? sHTTYPEDESC;
|
||||||
|
int? tOROWNUM;
|
||||||
|
|
||||||
|
GetScheduleShiftsDetailsList(
|
||||||
|
{this.aCTUALWOBHRS,
|
||||||
|
this.aPPROVEDENDDATETIME,
|
||||||
|
this.aPPROVEDENDREASON,
|
||||||
|
this.aPPROVEDENDREASONDESC,
|
||||||
|
this.aPPROVEDENDTIME,
|
||||||
|
this.aPPROVEDSTARTDATETIME,
|
||||||
|
this.aPPROVEDSTARTREASON,
|
||||||
|
this.aPPROVEDSTARTREASONDESC,
|
||||||
|
this.aPPROVEDSTARTTIME,
|
||||||
|
this.aSSIGNMENTID,
|
||||||
|
this.bREAKNAME,
|
||||||
|
this.fROMROWNUM,
|
||||||
|
this.nOOFROWS,
|
||||||
|
this.pERCENTAGE,
|
||||||
|
this.rOWNUM,
|
||||||
|
this.rTPID,
|
||||||
|
this.rTPSCHEDULEID,
|
||||||
|
this.sCHEDULEDATE,
|
||||||
|
this.sEQNO,
|
||||||
|
this.sHTACTUALENDDATETIME,
|
||||||
|
this.sHTACTUALENDTIME,
|
||||||
|
this.sHTACTUALHRS,
|
||||||
|
this.sHTACTUALSTARTDATETIME,
|
||||||
|
this.sHTACTUALSTARTTIME,
|
||||||
|
this.sHTCODE,
|
||||||
|
this.sHTNAME,
|
||||||
|
this.sHTTYPE,
|
||||||
|
this.sHTTYPEDESC,
|
||||||
|
this.tOROWNUM});
|
||||||
|
|
||||||
|
GetScheduleShiftsDetailsList.fromJson(Map<String, dynamic> json) {
|
||||||
|
aCTUALWOBHRS = json['ACTUAL_WOB_HRS'];
|
||||||
|
aPPROVEDENDDATETIME = json['APPROVED_END_DATETIME'];
|
||||||
|
aPPROVEDENDREASON = json['APPROVED_END_REASON'];
|
||||||
|
aPPROVEDENDREASONDESC = json['APPROVED_END_REASON_DESC'];
|
||||||
|
aPPROVEDENDTIME = json['APPROVED_END_TIME'];
|
||||||
|
aPPROVEDSTARTDATETIME = json['APPROVED_START_DATETIME'];
|
||||||
|
aPPROVEDSTARTREASON = json['APPROVED_START_REASON'];
|
||||||
|
aPPROVEDSTARTREASONDESC = json['APPROVED_START_REASON_DESC'];
|
||||||
|
aPPROVEDSTARTTIME = json['APPROVED_START_TIME'];
|
||||||
|
aSSIGNMENTID = json['ASSIGNMENT_ID'];
|
||||||
|
bREAKNAME = json['BREAK_NAME'];
|
||||||
|
fROMROWNUM = json['FROM_ROW_NUM'];
|
||||||
|
nOOFROWS = json['NO_OF_ROWS'];
|
||||||
|
pERCENTAGE = json['PERCENTAGE'];
|
||||||
|
rOWNUM = json['ROW_NUM'];
|
||||||
|
rTPID = json['RTP_ID'];
|
||||||
|
rTPSCHEDULEID = json['RTP_SCHEDULE_ID'];
|
||||||
|
sCHEDULEDATE = json['SCHEDULE_DATE'];
|
||||||
|
sEQNO = json['SEQ_NO'];
|
||||||
|
sHTACTUALENDDATETIME = json['SHT_ACTUAL_END_DATETIME'];
|
||||||
|
sHTACTUALENDTIME = json['SHT_ACTUAL_END_TIME'];
|
||||||
|
sHTACTUALHRS = json['SHT_ACTUAL_HRS'];
|
||||||
|
sHTACTUALSTARTDATETIME = json['SHT_ACTUAL_START_DATETIME'];
|
||||||
|
sHTACTUALSTARTTIME = json['SHT_ACTUAL_START_TIME'];
|
||||||
|
sHTCODE = json['SHT_CODE'];
|
||||||
|
sHTNAME = json['SHT_NAME'];
|
||||||
|
sHTTYPE = json['SHT_TYPE'];
|
||||||
|
sHTTYPEDESC = json['SHT_TYPE_DESC'];
|
||||||
|
tOROWNUM = json['TO_ROW_NUM'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ACTUAL_WOB_HRS'] = this.aCTUALWOBHRS;
|
||||||
|
data['APPROVED_END_DATETIME'] = this.aPPROVEDENDDATETIME;
|
||||||
|
data['APPROVED_END_REASON'] = this.aPPROVEDENDREASON;
|
||||||
|
data['APPROVED_END_REASON_DESC'] = this.aPPROVEDENDREASONDESC;
|
||||||
|
data['APPROVED_END_TIME'] = this.aPPROVEDENDTIME;
|
||||||
|
data['APPROVED_START_DATETIME'] = this.aPPROVEDSTARTDATETIME;
|
||||||
|
data['APPROVED_START_REASON'] = this.aPPROVEDSTARTREASON;
|
||||||
|
data['APPROVED_START_REASON_DESC'] = this.aPPROVEDSTARTREASONDESC;
|
||||||
|
data['APPROVED_START_TIME'] = this.aPPROVEDSTARTTIME;
|
||||||
|
data['ASSIGNMENT_ID'] = this.aSSIGNMENTID;
|
||||||
|
data['BREAK_NAME'] = this.bREAKNAME;
|
||||||
|
data['FROM_ROW_NUM'] = this.fROMROWNUM;
|
||||||
|
data['NO_OF_ROWS'] = this.nOOFROWS;
|
||||||
|
data['PERCENTAGE'] = this.pERCENTAGE;
|
||||||
|
data['ROW_NUM'] = this.rOWNUM;
|
||||||
|
data['RTP_ID'] = this.rTPID;
|
||||||
|
data['RTP_SCHEDULE_ID'] = this.rTPSCHEDULEID;
|
||||||
|
data['SCHEDULE_DATE'] = this.sCHEDULEDATE;
|
||||||
|
data['SEQ_NO'] = this.sEQNO;
|
||||||
|
data['SHT_ACTUAL_END_DATETIME'] = this.sHTACTUALENDDATETIME;
|
||||||
|
data['SHT_ACTUAL_END_TIME'] = this.sHTACTUALENDTIME;
|
||||||
|
data['SHT_ACTUAL_HRS'] = this.sHTACTUALHRS;
|
||||||
|
data['SHT_ACTUAL_START_DATETIME'] = this.sHTACTUALSTARTDATETIME;
|
||||||
|
data['SHT_ACTUAL_START_TIME'] = this.sHTACTUALSTARTTIME;
|
||||||
|
data['SHT_CODE'] = this.sHTCODE;
|
||||||
|
data['SHT_NAME'] = this.sHTNAME;
|
||||||
|
data['SHT_TYPE'] = this.sHTTYPE;
|
||||||
|
data['SHT_TYPE_DESC'] = this.sHTTYPEDESC;
|
||||||
|
data['TO_ROW_NUM'] = this.tOROWNUM;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,153 @@
|
|||||||
|
|
||||||
|
|
||||||
|
class GetTimeCardSummaryList {
|
||||||
|
int? aBSENTDAYS;
|
||||||
|
int? aCTUALHRS;
|
||||||
|
int? aPPROVEDTIMEBACKHRS;
|
||||||
|
int? aSSIGNMENTID;
|
||||||
|
int? aTTENDEDDAYS;
|
||||||
|
int? bUSINESSTRIP;
|
||||||
|
int? cOMPOFFHHRS;
|
||||||
|
int? cOMPOFFNHRS;
|
||||||
|
int? cOMPOFFWHRS;
|
||||||
|
int? dESIREDSCHEDULEDHRS;
|
||||||
|
int? eARLYOUTHRS;
|
||||||
|
int? eXCESSHRS;
|
||||||
|
int? hALFDAYLEAVE;
|
||||||
|
int? lATEINHRS;
|
||||||
|
int? lEAVESHOLIDAYSHRS;
|
||||||
|
int? nONSCHEDULEDAYS;
|
||||||
|
int? nOTANALYZEDDAYS;
|
||||||
|
int? oFFDAYS;
|
||||||
|
int? oNCALLHRS;
|
||||||
|
int? pAIDLEAVE;
|
||||||
|
int? pERIODDAYS;
|
||||||
|
int? pLANNEDOTHRS;
|
||||||
|
int? pUBLICHOLIDAY;
|
||||||
|
int? sCHEDULEDHRS;
|
||||||
|
int? sCHEDULEDONCALLHRS;
|
||||||
|
int? sCHEDULEDPLANNEDOTHRS;
|
||||||
|
int? sCHEDULEDAYS;
|
||||||
|
int? sHORTAGEHRS;
|
||||||
|
int? sHORTAGESCHEDULEHRS;
|
||||||
|
int? sICKLEAVE;
|
||||||
|
int? tIMEBACKHRS;
|
||||||
|
double? tIMEBACKBALANCE;
|
||||||
|
int? uNAUTHORIZEDLEAVE;
|
||||||
|
int? uNCOVERDSHORTAGEHRS;
|
||||||
|
int? uNPAIDLEAVE;
|
||||||
|
|
||||||
|
GetTimeCardSummaryList(
|
||||||
|
{this.aBSENTDAYS,
|
||||||
|
this.aCTUALHRS,
|
||||||
|
this.aPPROVEDTIMEBACKHRS,
|
||||||
|
this.aSSIGNMENTID,
|
||||||
|
this.aTTENDEDDAYS,
|
||||||
|
this.bUSINESSTRIP,
|
||||||
|
this.cOMPOFFHHRS,
|
||||||
|
this.cOMPOFFNHRS,
|
||||||
|
this.cOMPOFFWHRS,
|
||||||
|
this.dESIREDSCHEDULEDHRS,
|
||||||
|
this.eARLYOUTHRS,
|
||||||
|
this.eXCESSHRS,
|
||||||
|
this.hALFDAYLEAVE,
|
||||||
|
this.lATEINHRS,
|
||||||
|
this.lEAVESHOLIDAYSHRS,
|
||||||
|
this.nONSCHEDULEDAYS,
|
||||||
|
this.nOTANALYZEDDAYS,
|
||||||
|
this.oFFDAYS,
|
||||||
|
this.oNCALLHRS,
|
||||||
|
this.pAIDLEAVE,
|
||||||
|
this.pERIODDAYS,
|
||||||
|
this.pLANNEDOTHRS,
|
||||||
|
this.pUBLICHOLIDAY,
|
||||||
|
this.sCHEDULEDHRS,
|
||||||
|
this.sCHEDULEDONCALLHRS,
|
||||||
|
this.sCHEDULEDPLANNEDOTHRS,
|
||||||
|
this.sCHEDULEDAYS,
|
||||||
|
this.sHORTAGEHRS,
|
||||||
|
this.sHORTAGESCHEDULEHRS,
|
||||||
|
this.sICKLEAVE,
|
||||||
|
this.tIMEBACKHRS,
|
||||||
|
this.tIMEBACKBALANCE,
|
||||||
|
this.uNAUTHORIZEDLEAVE,
|
||||||
|
this.uNCOVERDSHORTAGEHRS,
|
||||||
|
this.uNPAIDLEAVE});
|
||||||
|
|
||||||
|
GetTimeCardSummaryList.fromJson(Map<String, dynamic> json) {
|
||||||
|
aBSENTDAYS = json['ABSENT_DAYS'];
|
||||||
|
aCTUALHRS = json['ACTUAL_HRS'];
|
||||||
|
aPPROVEDTIMEBACKHRS = json['APPROVED_TIMEBACK_HRS'];
|
||||||
|
aSSIGNMENTID = json['ASSIGNMENT_ID'];
|
||||||
|
aTTENDEDDAYS = json['ATTENDED_DAYS'];
|
||||||
|
bUSINESSTRIP = json['BUSINESS_TRIP'];
|
||||||
|
cOMPOFFHHRS = json['COMP_OFF_H_HRS'];
|
||||||
|
cOMPOFFNHRS = json['COMP_OFF_N_HRS'];
|
||||||
|
cOMPOFFWHRS = json['COMP_OFF_W_HRS'];
|
||||||
|
dESIREDSCHEDULEDHRS = json['DESIRED_SCHEDULED_HRS'];
|
||||||
|
eARLYOUTHRS = json['EARLY_OUT_HRS'];
|
||||||
|
eXCESSHRS = json['EXCESS_HRS'];
|
||||||
|
hALFDAYLEAVE = json['HALF_DAY_LEAVE'];
|
||||||
|
lATEINHRS = json['LATE_IN_HRS'];
|
||||||
|
lEAVESHOLIDAYSHRS = json['LEAVES_HOLIDAYS_HRS'];
|
||||||
|
nONSCHEDULEDAYS = json['NON_SCHEDULE_DAYS'];
|
||||||
|
nOTANALYZEDDAYS = json['NOT_ANALYZED_DAYS'];
|
||||||
|
oFFDAYS = json['OFF_DAYS'];
|
||||||
|
oNCALLHRS = json['ON_CALL_HRS'];
|
||||||
|
pAIDLEAVE = json['PAID_LEAVE'];
|
||||||
|
pERIODDAYS = json['PERIOD_DAYS'];
|
||||||
|
pLANNEDOTHRS = json['PLANNED_OTHRS'];
|
||||||
|
pUBLICHOLIDAY = json['PUBLIC_HOLIDAY'];
|
||||||
|
sCHEDULEDHRS = json['SCHEDULED_HRS'];
|
||||||
|
sCHEDULEDONCALLHRS = json['SCHEDULED_ON_CALL_HRS'];
|
||||||
|
sCHEDULEDPLANNEDOTHRS = json['SCHEDULED_PLANNED_OT_HRS'];
|
||||||
|
sCHEDULEDAYS = json['SCHEDULE_DAYS'];
|
||||||
|
sHORTAGEHRS = json['SHORTAGE_HRS'];
|
||||||
|
sHORTAGESCHEDULEHRS = json['SHORTAGE_SCHEDULE_HRS'];
|
||||||
|
sICKLEAVE = json['SICK_LEAVE'];
|
||||||
|
tIMEBACKHRS = json['TIMEBACK_HRS'];
|
||||||
|
tIMEBACKBALANCE = json['TIME_BACK_BALANCE'];
|
||||||
|
uNAUTHORIZEDLEAVE = json['UNAUTHORIZED_LEAVE'];
|
||||||
|
uNCOVERDSHORTAGEHRS = json['UNCOVERD_SHORTAGE_HRS'];
|
||||||
|
uNPAIDLEAVE = json['UNPAID_LEAVE'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ABSENT_DAYS'] = this.aBSENTDAYS;
|
||||||
|
data['ACTUAL_HRS'] = this.aCTUALHRS;
|
||||||
|
data['APPROVED_TIMEBACK_HRS'] = this.aPPROVEDTIMEBACKHRS;
|
||||||
|
data['ASSIGNMENT_ID'] = this.aSSIGNMENTID;
|
||||||
|
data['ATTENDED_DAYS'] = this.aTTENDEDDAYS;
|
||||||
|
data['BUSINESS_TRIP'] = this.bUSINESSTRIP;
|
||||||
|
data['COMP_OFF_H_HRS'] = this.cOMPOFFHHRS;
|
||||||
|
data['COMP_OFF_N_HRS'] = this.cOMPOFFNHRS;
|
||||||
|
data['COMP_OFF_W_HRS'] = this.cOMPOFFWHRS;
|
||||||
|
data['DESIRED_SCHEDULED_HRS'] = this.dESIREDSCHEDULEDHRS;
|
||||||
|
data['EARLY_OUT_HRS'] = this.eARLYOUTHRS;
|
||||||
|
data['EXCESS_HRS'] = this.eXCESSHRS;
|
||||||
|
data['HALF_DAY_LEAVE'] = this.hALFDAYLEAVE;
|
||||||
|
data['LATE_IN_HRS'] = this.lATEINHRS;
|
||||||
|
data['LEAVES_HOLIDAYS_HRS'] = this.lEAVESHOLIDAYSHRS;
|
||||||
|
data['NON_SCHEDULE_DAYS'] = this.nONSCHEDULEDAYS;
|
||||||
|
data['NOT_ANALYZED_DAYS'] = this.nOTANALYZEDDAYS;
|
||||||
|
data['OFF_DAYS'] = this.oFFDAYS;
|
||||||
|
data['ON_CALL_HRS'] = this.oNCALLHRS;
|
||||||
|
data['PAID_LEAVE'] = this.pAIDLEAVE;
|
||||||
|
data['PERIOD_DAYS'] = this.pERIODDAYS;
|
||||||
|
data['PLANNED_OTHRS'] = this.pLANNEDOTHRS;
|
||||||
|
data['PUBLIC_HOLIDAY'] = this.pUBLICHOLIDAY;
|
||||||
|
data['SCHEDULED_HRS'] = this.sCHEDULEDHRS;
|
||||||
|
data['SCHEDULED_ON_CALL_HRS'] = this.sCHEDULEDONCALLHRS;
|
||||||
|
data['SCHEDULED_PLANNED_OT_HRS'] = this.sCHEDULEDPLANNEDOTHRS;
|
||||||
|
data['SCHEDULE_DAYS'] = this.sCHEDULEDAYS;
|
||||||
|
data['SHORTAGE_HRS'] = this.sHORTAGEHRS;
|
||||||
|
data['SHORTAGE_SCHEDULE_HRS'] = this.sHORTAGESCHEDULEHRS;
|
||||||
|
data['SICK_LEAVE'] = this.sICKLEAVE;
|
||||||
|
data['TIMEBACK_HRS'] = this.tIMEBACKHRS;
|
||||||
|
data['TIME_BACK_BALANCE'] = this.tIMEBACKBALANCE;
|
||||||
|
data['UNAUTHORIZED_LEAVE'] = this.uNAUTHORIZEDLEAVE;
|
||||||
|
data['UNCOVERD_SHORTAGE_HRS'] = this.uNCOVERDSHORTAGEHRS;
|
||||||
|
data['UNPAID_LEAVE'] = this.uNPAIDLEAVE;
|
||||||
|
return data;
|
||||||
|
}}
|
||||||
@ -0,0 +1,805 @@
|
|||||||
|
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:mohem_flutter_app/api/monthlyAttendance_api_client.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/colors.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/utils.dart';
|
||||||
|
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
|
||||||
|
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
|
||||||
|
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_day_hours_type_details_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_schedule_shifts_details_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/circular_step_progress_bar.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
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';
|
||||||
|
|
||||||
|
class MonthlyAttendance extends StatefulWidget {
|
||||||
|
MonthlyAttendance({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_MonthlyAttendanceState createState() {
|
||||||
|
return _MonthlyAttendanceState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MonthlyAttendanceState extends State<MonthlyAttendance> {
|
||||||
|
bool isPresent = true;
|
||||||
|
bool isAbsent = true;
|
||||||
|
bool isMissingDays = true;
|
||||||
|
bool isOffDays = true;
|
||||||
|
DateTime date = DateTime.now();
|
||||||
|
late var formattedDate;
|
||||||
|
var currentMonth = DateTime.now().month;
|
||||||
|
String searchMonth = getMonth(DateTime.now().month);
|
||||||
|
int searchYear = DateTime.now().year;
|
||||||
|
int? pRTPID;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
void getTimeCardSummary(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;
|
||||||
|
setState(() {});
|
||||||
|
} catch (ex) {
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
countAllAttendDays();
|
||||||
|
getScheduleShiftsDetails(pRTPID);
|
||||||
|
}
|
||||||
|
|
||||||
|
getScheduleShiftsDetails(pRTPID) async {
|
||||||
|
try {
|
||||||
|
Utils.showLoading(context);
|
||||||
|
getScheduleShiftsDetailsList = await MonthlyAttendanceApiClient().getScheduleShiftsDetails(pRTPID);
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
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)];
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
Map<String, double> dataMap = {
|
||||||
|
"Present": getTimeCardSummaryList!.aTTENDEDDAYS!.toDouble(),
|
||||||
|
"Absent": getTimeCardSummaryList!.aBSENTDAYS!.toDouble(),
|
||||||
|
};
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
backgroundColor: MyColors.white,
|
||||||
|
leading: IconButton(
|
||||||
|
icon: const Icon(
|
||||||
|
Icons.arrow_back_ios,
|
||||||
|
color: MyColors.backgroundBlackColor,
|
||||||
|
),
|
||||||
|
onPressed: () => Navigator.pop(context),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
body: ListView(
|
||||||
|
scrollDirection: Axis.vertical,
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
20.height,
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
"Attendance".toText24(isBold: true, color: MyColors.darkIconColor),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Text(formattedDate),
|
||||||
|
const Icon(Icons.keyboard_arrow_down_rounded, color: MyColors.greyACColor),
|
||||||
|
],
|
||||||
|
).onPress(() async {
|
||||||
|
await showDatePicker(
|
||||||
|
context: context,
|
||||||
|
initialDate: DateTime.now(),
|
||||||
|
firstDate: DateTime(2021),
|
||||||
|
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);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 21, right: 21),
|
||||||
|
18.height,
|
||||||
|
AspectRatio(aspectRatio: 333 / 270, child: calendarWidget()).paddingOnly(left: 21, right: 21),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
optionUI("Schedule\nDays", "${getTimeCardSummaryList!.sCHEDULEDAYS}"),
|
||||||
|
6.width,
|
||||||
|
optionUI("Off\nDays", "${getTimeCardSummaryList!.oFFDAYS}"),
|
||||||
|
6.width,
|
||||||
|
optionUI("Non\nAnalyzed", "${getTimeCardSummaryList!.uNAUTHORIZEDLEAVE}"),
|
||||||
|
6.width,
|
||||||
|
optionUI("Shortage\nHour", "${getTimeCardSummaryList!.sHORTAGEHRS}"),
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 21, right: 21),
|
||||||
|
35.height,
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
height: 227,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: const BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
offset: const Offset(0, 2),
|
||||||
|
blurRadius: 26,
|
||||||
|
color: MyColors.darkColor.withOpacity(0.1),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: <Widget>[
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
"Attendance".toText12(isBold: true, color: MyColors.grey3AColor),
|
||||||
|
"Stats".toText24(isBold: true, color: MyColors.grey3AColor),
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 21, top: 29, bottom: 36),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
height: 9,
|
||||||
|
width: 9,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: MyColors.lightGreenColor,
|
||||||
|
borderRadius: BorderRadius.circular(100),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
margin: const EdgeInsets.only(left: 5, right: 5),
|
||||||
|
child: "PRESENT ${getTimeCardSummaryList!.aTTENDEDDAYS}".toText16(isBold: true, color: MyColors.lightGreenColor),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 21, right: 23),
|
||||||
|
8.height,
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
height: 9,
|
||||||
|
width: 9,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: MyColors.backgroundBlackColor,
|
||||||
|
borderRadius: BorderRadius.circular(100),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
margin: const EdgeInsets.only(left: 5, right: 5),
|
||||||
|
child: "ABSENT ${getTimeCardSummaryList!.aBSENTDAYS}".toText16(
|
||||||
|
isBold: true,
|
||||||
|
color: MyColors.backgroundBlackColor,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 21, top: 8),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
width: 169,
|
||||||
|
height: 170,
|
||||||
|
child: PieChart(
|
||||||
|
dataMap: dataMap,
|
||||||
|
animationDuration: const Duration(milliseconds: 800),
|
||||||
|
chartLegendSpacing: 0,
|
||||||
|
chartRadius: MediaQuery.of(context).size.width / 5.2,
|
||||||
|
colorList: _colorList,
|
||||||
|
initialAngleInDegree: 0,
|
||||||
|
chartType: ChartType.ring,
|
||||||
|
ringStrokeWidth: 80,
|
||||||
|
legendOptions: const LegendOptions(
|
||||||
|
showLegendsInRow: false,
|
||||||
|
showLegends: false,
|
||||||
|
),
|
||||||
|
chartValuesOptions: const ChartValuesOptions(
|
||||||
|
showChartValueBackground: false,
|
||||||
|
showChartValues: true,
|
||||||
|
showChartValuesInPercentage: true,
|
||||||
|
showChartValuesOutside: false,
|
||||||
|
decimalPlaces: 1,
|
||||||
|
chartValueStyle: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontSize: 16,
|
||||||
|
color: MyColors.white,
|
||||||
|
)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 65, top: 27, right: 21, bottom: 28),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget optionUI(String title, String value) {
|
||||||
|
return AspectRatio(
|
||||||
|
aspectRatio: 1 / 1,
|
||||||
|
child: Container(
|
||||||
|
padding: const EdgeInsets.only(top: 10, left: 8, right: 8, bottom: 10),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(12),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
offset: const Offset(0, 1),
|
||||||
|
blurRadius: 15,
|
||||||
|
color: MyColors.darkColor.withOpacity(0.1),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: <Widget>[title.toText10(color: MyColors.darkTextColor).expanded, value.toText20(color: MyColors.darkTextColor)],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
).expanded;
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget calendarWidget() {
|
||||||
|
return SfCalendar(
|
||||||
|
view: CalendarView.month,
|
||||||
|
// onViewChanged: viewChanged,
|
||||||
|
controller: _calendarController,
|
||||||
|
headerHeight: 0,
|
||||||
|
todayHighlightColor: MyColors.grey3AColor,
|
||||||
|
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) {
|
||||||
|
return Container(
|
||||||
|
margin: const EdgeInsets.all(4),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
gradient: const LinearGradient(
|
||||||
|
transform: GradientRotation(.46),
|
||||||
|
begin: Alignment.topRight,
|
||||||
|
end: Alignment.bottomLeft,
|
||||||
|
colors: [MyColors.gradiantEndColor, MyColors.gradiantStartColor],
|
||||||
|
),
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
offset: const Offset(0, 2),
|
||||||
|
blurRadius: 26,
|
||||||
|
color: MyColors.blackColor.withOpacity(0.100),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: Text(
|
||||||
|
"${build.date.day}",
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 13,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: MyColors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else if (isAbsent) {
|
||||||
|
return Container(
|
||||||
|
margin: const EdgeInsets.all(4),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: MyColors.backgroundBlackColor,
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
offset: const Offset(0, 2),
|
||||||
|
blurRadius: 26,
|
||||||
|
color: MyColors.blackColor.withOpacity(0.100),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: Text(
|
||||||
|
"${build.date.day}",
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 13,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: MyColors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else if (isMissingDays) {
|
||||||
|
return Container(
|
||||||
|
margin: const EdgeInsets.all(4),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border.all(color: MyColors.backgroundBlackColor, width: 2.0, style: BorderStyle.solid), //Border.all
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
offset: const Offset(0, 2),
|
||||||
|
blurRadius: 26,
|
||||||
|
color: MyColors.blackColor.withOpacity(0.100),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: Text(
|
||||||
|
"${build.date.day}",
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 13,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: Color(0xff1F2428),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} 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,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return Container();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
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;
|
||||||
|
if (index != null) {
|
||||||
|
index = index - 1;
|
||||||
|
}
|
||||||
|
getDayHoursTypeDetails(index, getMonth(details.date!.month), details.date?.year);
|
||||||
|
showModalBottomSheet(
|
||||||
|
context: context,
|
||||||
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(25)),
|
||||||
|
isScrollControlled: true,
|
||||||
|
backgroundColor: MyColors.backgroundBlackColor,
|
||||||
|
builder: (_) {
|
||||||
|
return DraggableScrollableSheet(
|
||||||
|
maxChildSize: 0.9,
|
||||||
|
expand: false,
|
||||||
|
builder: (_, controller) {
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: 75,
|
||||||
|
height: 7,
|
||||||
|
margin: const EdgeInsets.symmetric(vertical: 10),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(20),
|
||||||
|
color: MyColors.darkGreyColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: ListView.builder(
|
||||||
|
controller: controller,
|
||||||
|
itemCount: 1,
|
||||||
|
itemBuilder: (_, i) => Container(
|
||||||
|
decoration: const BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.vertical(
|
||||||
|
top: Radius.circular(35.0),
|
||||||
|
),
|
||||||
|
color: MyColors.backgroundBlackColor,
|
||||||
|
),
|
||||||
|
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),
|
||||||
|
Center(
|
||||||
|
child: CircularStepProgressBar(
|
||||||
|
totalSteps: 16 * 4,
|
||||||
|
currentStep: percentage,
|
||||||
|
width: 210,
|
||||||
|
height: 210,
|
||||||
|
selectedColor: MyColors.gradiantEndColor,
|
||||||
|
unselectedColor: MyColors.grey70Color,
|
||||||
|
child: Center(
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
"${getScheduleShiftsDetailsList!.pERCENTAGE}".toText44(color: Colors.white, isBold: true),
|
||||||
|
"Completed".tr().toText11(color: MyColors.greyACColor),
|
||||||
|
19.height,
|
||||||
|
"Shift Time".tr().toText11(color: MyColors.greyACColor),
|
||||||
|
"${getScheduleShiftsDetailsList!.sHTNAME}".toText22(color: Colors.white, isBold: true),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
padding: const EdgeInsets.only(top: 20, bottom: 20),
|
||||||
|
),
|
||||||
|
Stack(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
height: 5,
|
||||||
|
padding: const EdgeInsets.only(top: 24, bottom: 24),
|
||||||
|
color: MyColors.backgroundBlackColor,
|
||||||
|
),
|
||||||
|
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: 21, right: 21, top: 28, bottom: 24),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
margin: const EdgeInsets.only(right: 30, left: 15),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
"Actual Check In ".tr().toText11(
|
||||||
|
color: MyColors.grey67Color,
|
||||||
|
),
|
||||||
|
8.height,
|
||||||
|
"${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}".toText22(color: Colors.black, isBold: true),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
40.width,
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
"Actual Check Out".tr().toText11(
|
||||||
|
color: MyColors.grey67Color,
|
||||||
|
),
|
||||||
|
8.height,
|
||||||
|
"${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}".toText22(color: Colors.black, isBold: true),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
25.height,
|
||||||
|
const Divider(
|
||||||
|
height: 1,
|
||||||
|
thickness: 1,
|
||||||
|
color: MyColors.whiteColor,
|
||||||
|
),
|
||||||
|
25.height,
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
margin: const EdgeInsets.only(right: 30, left: 15),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
"Approved Check In".tr().toText11(
|
||||||
|
color: MyColors.grey67Color,
|
||||||
|
),
|
||||||
|
8.height,
|
||||||
|
"${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}".toText22(color: MyColors.greenColor, isBold: true),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
30.width,
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
"Approved Check Out".tr().toText11(
|
||||||
|
color: MyColors.grey67Color,
|
||||||
|
),
|
||||||
|
8.height,
|
||||||
|
"${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}".toText22(color: MyColors.greenColor, isBold: true),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
25.height,
|
||||||
|
const Divider(
|
||||||
|
height: 1,
|
||||||
|
thickness: 1,
|
||||||
|
color: MyColors.whiteColor,
|
||||||
|
),
|
||||||
|
25.height,
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
margin: const EdgeInsets.only(right: 30, left: 15),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
"Late In".tr().toText11(
|
||||||
|
color: MyColors.grey67Color,
|
||||||
|
),
|
||||||
|
8.height,
|
||||||
|
"${getDayHoursTypeDetailsList[i].lATEINHRS}".toText22(color: MyColors.redColor, isBold: true),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
80.width,
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
"Excess".tr().toText11(
|
||||||
|
color: MyColors.grey67Color,
|
||||||
|
),
|
||||||
|
8.height,
|
||||||
|
"${getDayHoursTypeDetailsList[i].eXCESSHRS}".toText22(color: Colors.black, isBold: true),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
25.height,
|
||||||
|
const Divider(
|
||||||
|
height: 1,
|
||||||
|
thickness: 1,
|
||||||
|
color: MyColors.whiteColor,
|
||||||
|
),
|
||||||
|
25.height,
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
margin: const EdgeInsets.only(right: 30, left: 15),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
"Shortage".tr().toText11(
|
||||||
|
color: MyColors.grey67Color,
|
||||||
|
),
|
||||||
|
8.height,
|
||||||
|
"${getDayHoursTypeDetailsList[i].sHORTAGEHRS}".toText22(color: Colors.black, isBold: true),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
80.width,
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
"Early Out".tr().toText11(
|
||||||
|
color: MyColors.grey67Color,
|
||||||
|
),
|
||||||
|
8.height,
|
||||||
|
"${getDayHoursTypeDetailsList[i].eARLYOUTHRS}".toText22(color: Colors.black, isBold: true),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
List<Meeting> _getDataSource() {
|
||||||
|
final List<Meeting> meetings = <Meeting>[];
|
||||||
|
return meetings;
|
||||||
|
}
|
||||||
|
|
||||||
|
static getMonth(int month) {
|
||||||
|
switch (month) {
|
||||||
|
case 1:
|
||||||
|
return "January";
|
||||||
|
case 2:
|
||||||
|
return "February";
|
||||||
|
case 3:
|
||||||
|
return "March";
|
||||||
|
case 4:
|
||||||
|
return "April";
|
||||||
|
case 5:
|
||||||
|
return "May";
|
||||||
|
case 6:
|
||||||
|
return "June";
|
||||||
|
case 7:
|
||||||
|
return "July";
|
||||||
|
case 8:
|
||||||
|
return "August";
|
||||||
|
case 9:
|
||||||
|
return "September";
|
||||||
|
case 10:
|
||||||
|
return "October";
|
||||||
|
case 11:
|
||||||
|
return "November";
|
||||||
|
case 12:
|
||||||
|
return "December";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MeetingDataSource extends CalendarDataSource {
|
||||||
|
MeetingDataSource(List<Meeting> source) {
|
||||||
|
appointments = source;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
DateTime getStartTime(int index) {
|
||||||
|
return _getMeetingData(index).from;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
DateTime getEndTime(int index) {
|
||||||
|
return _getMeetingData(index).to;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String getSubject(int index) {
|
||||||
|
return _getMeetingData(index).eventName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Color getColor(int index) {
|
||||||
|
return _getMeetingData(index).background;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool isAllDay(int index) {
|
||||||
|
return _getMeetingData(index).isAllDay;
|
||||||
|
}
|
||||||
|
|
||||||
|
Meeting _getMeetingData(int index) {
|
||||||
|
final dynamic meeting = appointments;
|
||||||
|
Meeting meetingData;
|
||||||
|
if (meeting is Meeting) {
|
||||||
|
meetingData = meeting;
|
||||||
|
}
|
||||||
|
return meeting;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Meeting {
|
||||||
|
Meeting(this.eventName, this.from, this.to, this.background, this.isAllDay);
|
||||||
|
|
||||||
|
String eventName;
|
||||||
|
DateTime from;
|
||||||
|
DateTime to;
|
||||||
|
Color background;
|
||||||
|
bool isAllDay;
|
||||||
|
}
|
||||||
@ -0,0 +1,228 @@
|
|||||||
|
import 'package:easy_localization/src/public_ext.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/colors.dart';
|
||||||
|
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
|
||||||
|
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
|
||||||
|
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
|
||||||
|
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/circular_step_progress_bar.dart';
|
||||||
|
|
||||||
|
class AttendenceDetailsBottomSheet extends StatefulWidget {
|
||||||
|
|
||||||
|
AttendenceDetailsBottomSheet({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_AttendenceDetailsBottomSheetState createState() => _AttendenceDetailsBottomSheetState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _AttendenceDetailsBottomSheetState extends State<AttendenceDetailsBottomSheet> {
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
bottomSheet:BottomSheet(
|
||||||
|
|
||||||
|
onClosing: () => print("not getting called"),
|
||||||
|
builder: (_) => Container(
|
||||||
|
color: Colors.red,
|
||||||
|
height: MediaQuery.of(context).size.height*0.9,
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.vertical( top: Radius.circular(25.0),),
|
||||||
|
color: MyColors.backgroundBlackColor,
|
||||||
|
),
|
||||||
|
margin:EdgeInsets.only(top: 45) ,
|
||||||
|
padding: EdgeInsets.only(left: 11, right: 11, bottom: 21),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Center(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(10),
|
||||||
|
child: Container(
|
||||||
|
margin:EdgeInsets.only(top: 5) ,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(35.0),),
|
||||||
|
color: Color(0xff464646),
|
||||||
|
),
|
||||||
|
width: 80,
|
||||||
|
height: 6,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.only(top: 25,left: 11, right: 11, bottom: 10),
|
||||||
|
child: Column(children: [
|
||||||
|
"June 13, 2021".toText24(isBold: true, color: Colors.white),
|
||||||
|
// LocaleKeys.attendanceDetails.tr().toText16(color: Color(0xffACACAC)),
|
||||||
|
// LocaleKeys.timeLeftToday.tr().toText16(color: Color(0xffACACAC)),
|
||||||
|
21.height,
|
||||||
|
] ),
|
||||||
|
),
|
||||||
|
Center(
|
||||||
|
child: CircularStepProgressBar(
|
||||||
|
totalSteps: 16 * 4,
|
||||||
|
currentStep: 16,
|
||||||
|
width: 210,
|
||||||
|
height: 210,
|
||||||
|
selectedColor: MyColors.gradiantEndColor,
|
||||||
|
unselectedColor: MyColors.grey70Color,
|
||||||
|
child: Center(
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
"99%".toText32(color: Colors.white, isBold: true),
|
||||||
|
"Completed".tr().toText12(color: MyColors.greyACColor),
|
||||||
|
19.height,
|
||||||
|
"Shift Time".tr().toText12(color: MyColors.greyACColor),
|
||||||
|
"08:00 - 17:00".toText22(color: Colors.white, isBold: true),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Stack(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
height: 32,
|
||||||
|
// padding: EdgeInsets.only(top: 24, bottom: 24),
|
||||||
|
color: MyColors.backgroundBlackColor,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
decoration: BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white),
|
||||||
|
margin: EdgeInsets.only(top: 10),
|
||||||
|
padding: EdgeInsets.only(left: 21, right: 21, top: 24, bottom: 24),
|
||||||
|
child: Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||||
|
children:[
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
"Actual Check In ".tr().toText12(color: MyColors.black),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 8,),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
"08:27".toText22(color: Colors.black, isBold: true),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 30,),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
"Approved Check In".tr().toText12(color: MyColors.black),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 8,),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
"09:27".toText22(color: Color(0xff1FA269), isBold: true),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 30,),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
"Late In".tr().toText12(color: MyColors.black),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 8,),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
"00:27".toText22(color: Color(0xffD02127), isBold: true),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 30,),
|
||||||
|
Row(
|
||||||
|
children: [ "Shortage".tr().toText12(color: MyColors.black),
|
||||||
|
] ),
|
||||||
|
SizedBox(height: 8,),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
"00:00".toText22(color: Colors.black, isBold: true),],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
"Actual Check Out".tr().toText12(color: MyColors.black),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 8,),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
"18:20".toText22(color: Colors.black, isBold: true),],
|
||||||
|
),
|
||||||
|
SizedBox(height: 30,),
|
||||||
|
Row(
|
||||||
|
children: [ "Approved Check Out".tr().toText12(color: MyColors.black),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 8,),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
"18:20".toText22(color: Color(0xff1FA269), isBold: true),],
|
||||||
|
),
|
||||||
|
SizedBox(height: 30,),
|
||||||
|
Row(
|
||||||
|
children: ["Excess".tr().toText12(color: MyColors.black),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 8,),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
"00:00".toText22(color: Colors.black, isBold: true),],
|
||||||
|
),
|
||||||
|
SizedBox(height: 30,),
|
||||||
|
Row(
|
||||||
|
children: ["Early Out".tr().toText12(color: MyColors.black),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 8,),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
"00:00".toText22(color: Colors.black, isBold: true),],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
] ),
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,288 @@
|
|||||||
|
import 'package:easy_localization/src/public_ext.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:mohem_flutter_app/api/profile_api_client.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/colors.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/utils.dart';
|
||||||
|
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
|
||||||
|
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
|
||||||
|
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart';
|
||||||
|
|
||||||
|
class Profile extends StatefulWidget {
|
||||||
|
const Profile({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ProfileState createState() => _ProfileState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ProfileState extends State<Profile> {
|
||||||
|
String? fullName = "";
|
||||||
|
String? maritalStatus = "";
|
||||||
|
String? birthDate = "";
|
||||||
|
String? civilIdentityNumber = "";
|
||||||
|
String? emailAddress = "";
|
||||||
|
String? employeeNo = "";
|
||||||
|
|
||||||
|
List<GetEmployeeBasicDetailsList> getEmployeeBasicDetailsList = [];
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
getEmployeeBasicDetails();
|
||||||
|
basicDetails();
|
||||||
|
}
|
||||||
|
|
||||||
|
void getEmployeeBasicDetails() async {
|
||||||
|
try {
|
||||||
|
Utils.showLoading(context);
|
||||||
|
getEmployeeBasicDetailsList = await ProfileApiClient().getEmployeeBasicDetails();
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
basicDetails();
|
||||||
|
print("getEmployeeBasicDetailsList.length");
|
||||||
|
print(getEmployeeBasicDetailsList.length);
|
||||||
|
setState(() {});
|
||||||
|
} catch (ex) {
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
basicDetails() {
|
||||||
|
for (int i = 0; i < getEmployeeBasicDetailsList.length; i++) {
|
||||||
|
if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'FULL_NAME') {
|
||||||
|
fullName = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP;
|
||||||
|
} else if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'MARITAL_STATUS') {
|
||||||
|
maritalStatus = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP;
|
||||||
|
} else if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'DATE_OF_BIRTH') {
|
||||||
|
birthDate = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP;
|
||||||
|
} else if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'NATIONAL_IDENTIFIER') {
|
||||||
|
civilIdentityNumber = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP;
|
||||||
|
} else if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'EMAIL_ADDRESS') {
|
||||||
|
emailAddress = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP;
|
||||||
|
} else if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'EMPLOYEE_NUMBER') {
|
||||||
|
employeeNo = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
backgroundColor: MyColors.lightGreenColor,
|
||||||
|
leading: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
IconButton(
|
||||||
|
icon: const Icon(
|
||||||
|
Icons.arrow_back_ios,
|
||||||
|
color: MyColors.backgroundBlackColor,
|
||||||
|
),
|
||||||
|
onPressed: () => Navigator.pop(context),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
backgroundColor: MyColors.lightGreenColor,
|
||||||
|
body: Stack(children: [
|
||||||
|
Align(
|
||||||
|
alignment: Alignment.topRight,
|
||||||
|
child: Container(
|
||||||
|
height: 30,
|
||||||
|
width: 80,
|
||||||
|
padding: EdgeInsets.only(left: 10.0, right: 10.0, top: 5, bottom: 5),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border.all(
|
||||||
|
color: MyColors.gradiantEndColor,
|
||||||
|
style: BorderStyle.solid,
|
||||||
|
),
|
||||||
|
color: MyColors.gradiantEndColor,
|
||||||
|
borderRadius: BorderRadius.circular(100.0)),
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {},
|
||||||
|
child: RichText(
|
||||||
|
text: TextSpan(
|
||||||
|
children: [
|
||||||
|
WidgetSpan(
|
||||||
|
child: Icon(
|
||||||
|
Icons.image,
|
||||||
|
size: 20,
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TextSpan(
|
||||||
|
text: " Edit",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
margin: EdgeInsets.only(top: 48),
|
||||||
|
height: double.infinity,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.only(topLeft: Radius.circular(30.0), topRight: Radius.circular(30.0)),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
"${fullName}".toText20(isBold: true, color: MyColors.blackColor),
|
||||||
|
"${employeeNo}".toText12(isBold: false, color: MyColors.lightGrayColor),
|
||||||
|
"${emailAddress}".toText12(isBold: false, color: MyColors.black),
|
||||||
|
SizedBox(
|
||||||
|
height: 5,
|
||||||
|
),
|
||||||
|
Divider(
|
||||||
|
color: MyColors.lightGreyE6Color,
|
||||||
|
height: 20,
|
||||||
|
thickness: 8,
|
||||||
|
indent: 0,
|
||||||
|
endIndent: 0,
|
||||||
|
),
|
||||||
|
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.only(left: 10.0),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: <Widget>[
|
||||||
|
InkWell(
|
||||||
|
onTap: () {
|
||||||
|
|
||||||
|
},
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
|
||||||
|
SizedBox(
|
||||||
|
width: 15,
|
||||||
|
),
|
||||||
|
"Personal Information".toText16(isBold: true, color: MyColors.grey3AColor),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 5,
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
onTap: () {
|
||||||
|
|
||||||
|
},
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
|
||||||
|
SizedBox(
|
||||||
|
width: 15,
|
||||||
|
),
|
||||||
|
"Basic Details".toText16(isBold: true, color: MyColors.grey3AColor),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 5,
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
onTap: () {
|
||||||
|
|
||||||
|
},
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
|
||||||
|
SizedBox(
|
||||||
|
width: 20,
|
||||||
|
),
|
||||||
|
"Contact Details".toText16(isBold: true, color: MyColors.grey3AColor),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 5,
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
onTap: () {
|
||||||
|
|
||||||
|
},
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
|
||||||
|
SizedBox(
|
||||||
|
width: 20,
|
||||||
|
),
|
||||||
|
"Family Members".toText16(isBold: true, color: MyColors.grey3AColor),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 5,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
).paddingOnly( top: 35, bottom: 36),
|
||||||
|
),
|
||||||
|
Align(
|
||||||
|
alignment: Alignment.topCenter,
|
||||||
|
child: SizedBox(
|
||||||
|
child: CircleAvatar(
|
||||||
|
radius: 40.0,
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
child: CircleAvatar(
|
||||||
|
child: Align(
|
||||||
|
alignment: Alignment.bottomRight,
|
||||||
|
// child: CircleAvatar(
|
||||||
|
// backgroundColor: Colors.white,
|
||||||
|
// radius: 12.0,
|
||||||
|
// child: Icon(
|
||||||
|
// Icons.camera_alt,
|
||||||
|
// size: 15.0,
|
||||||
|
// color: Color(0xFF404040),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
),
|
||||||
|
radius: 38.0,
|
||||||
|
// url:"",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
])
|
||||||
|
// Container(
|
||||||
|
// margin: const EdgeInsets.only(top:50),
|
||||||
|
// decoration: const BoxDecoration(
|
||||||
|
// color: Colors.white,
|
||||||
|
// borderRadius: BorderRadius.only(
|
||||||
|
// topLeft: Radius.circular(30.0),
|
||||||
|
// topRight: Radius.circular(30.0))
|
||||||
|
// ),
|
||||||
|
// // color: MyColors.white,
|
||||||
|
// child: Stack(
|
||||||
|
// children: [
|
||||||
|
// Container(
|
||||||
|
// height: 30,
|
||||||
|
// color: MyColors.lightGreenColor,
|
||||||
|
// margin: const EdgeInsets.only(bottom: 20,),
|
||||||
|
// child: Row(
|
||||||
|
// mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
// children: [
|
||||||
|
// CircleAvatar(
|
||||||
|
// backgroundColor: Colors.grey.shade800,
|
||||||
|
// ),
|
||||||
|
// ],
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// ListView(
|
||||||
|
// scrollDirection: Axis.vertical,
|
||||||
|
// children: [
|
||||||
|
// Column(
|
||||||
|
// children: [
|
||||||
|
// // 20.height,
|
||||||
|
// ],
|
||||||
|
// )
|
||||||
|
// ],
|
||||||
|
// ),
|
||||||
|
// ]
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue