my team module and workList settings
parent
0820f87877
commit
a22f679908
@ -0,0 +1,149 @@
|
|||||||
|
|
||||||
|
|
||||||
|
import 'package:mohem_flutter_app/api/api_client.dart';
|
||||||
|
import 'package:mohem_flutter_app/app_state/app_state.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/consts.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/dashboard/menu_entries.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_time_card_summary_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart';
|
||||||
|
|
||||||
|
class MyTeamApiClient {
|
||||||
|
static final MyTeamApiClient _instance = MyTeamApiClient._internal();
|
||||||
|
|
||||||
|
MyTeamApiClient._internal();
|
||||||
|
|
||||||
|
factory MyTeamApiClient() => _instance;
|
||||||
|
|
||||||
|
|
||||||
|
Future<List<GetEmployeeSubordinatesList>> getEmployeeSubordinates(String searchEmpEmail, String searchEmpName, String searchEmpNo) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_EMPLOYEE_SUBORDINATES";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_PAGE_LIMIT": 50,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
"P_SEARCH_EMAIL_ADDRESS": searchEmpEmail,
|
||||||
|
"P_SEARCH_EMPLOYEE_DISPLAY_NAME": searchEmpName,
|
||||||
|
"P_SEARCH_EMPLOYEE_NUMBER": searchEmpNo,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getEmployeeSubordinatesList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<GetTimeCardSummaryList?> getTimeCardSummary(String month, int year, String? empID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_TIME_CARD_SUMMARY";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_MENU_TYPE": "M",
|
||||||
|
"P_SELECTED_RESP_ID": -999,
|
||||||
|
"SearchMonth": month,
|
||||||
|
"SearchYear": year,
|
||||||
|
};
|
||||||
|
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID;
|
||||||
|
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, String? empID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_DAY_HOURS_TYPE_DETAILS";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_MENU_TYPE": "M",
|
||||||
|
"P_PAGE_LIMIT": 100,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
"P_SELECTED_RESP_ID": -999,
|
||||||
|
"SearchMonth": month,
|
||||||
|
"SearchYear": year,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID;
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
|
||||||
|
print(responseData.getDayHoursTypeDetailsList!.length);
|
||||||
|
return responseData.getDayHoursTypeDetailsList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Future<GetAttendanceTracking?> getAttendanceTracking(String? empID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_Attendance_Tracking";
|
||||||
|
Map<String, dynamic> postParams = {};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID;
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
|
||||||
|
print(responseData.getAttendanceTrackingList);
|
||||||
|
return responseData.getAttendanceTrackingList;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<GetEmployeeSubordinatesList>> employeeSubordinates(String searchEmpEmail, String searchEmpName, String searchEmpNo, String? empID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_EMPLOYEE_SUBORDINATES";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_PAGE_LIMIT": 50,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
"P_SEARCH_EMAIL_ADDRESS": searchEmpEmail,
|
||||||
|
"P_SEARCH_EMPLOYEE_DISPLAY_NAME": searchEmpName,
|
||||||
|
"P_SEARCH_EMPLOYEE_NUMBER": searchEmpNo,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID;
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getEmployeeSubordinatesList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<GetMenuEntriesList>> employeeSubordinatesRequest(String? empID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_MENU_ENTRIES";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_MENU_TYPE": "M",
|
||||||
|
"P_SELECTED_RESP_ID": -999,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID;
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getMenuEntriesList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<GetFavoriteReplacements>?> getFavoriteReplacement() async {
|
||||||
|
String url = "${ApiConsts.erpRest}Mohemm_GetFavoriteReplacements";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.mohemmGetFavoriteReplacementsList;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<GenericResponseModel> changeFavoriteReplacements({required String email, required String employeName, required String image, required String userName, bool isFav = false}) async {
|
||||||
|
String url = "${ApiConsts.erpRest}Mohemm_ChangeFavoriteReplacements";
|
||||||
|
Map<String, dynamic> postParamsObj = {
|
||||||
|
"EMAIL_ADDRESS": email,
|
||||||
|
"EMPLOYEE_DISPLAY_NAME": employeName,
|
||||||
|
"EMPLOYEE_IMAGE": image,
|
||||||
|
"IsFavorite": isFav,
|
||||||
|
"USER_NAME": userName,
|
||||||
|
};
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"Mohemm_ChangeReplacementsInputList": [postParamsObj],
|
||||||
|
//postParams["Mohemm_ChangeReplacementsInputList"] = list;
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
|
||||||
|
class GetAttendanceTrackingList {
|
||||||
|
String? pBREAKHOURS;
|
||||||
|
String? pLATEINHOURS;
|
||||||
|
String? pREMAININGHOURS;
|
||||||
|
String? pRETURNMSG;
|
||||||
|
String? pRETURNSTATUS;
|
||||||
|
String? pSCHEDULEDHOURS;
|
||||||
|
String? pSHTNAME;
|
||||||
|
String? pSPENTHOURS;
|
||||||
|
String? pSWIPESEXEMPTEDFLAG;
|
||||||
|
Null? pSWIPEIN;
|
||||||
|
Null? pSWIPEOUT;
|
||||||
|
|
||||||
|
GetAttendanceTrackingList(
|
||||||
|
{this.pBREAKHOURS,
|
||||||
|
this.pLATEINHOURS,
|
||||||
|
this.pREMAININGHOURS,
|
||||||
|
this.pRETURNMSG,
|
||||||
|
this.pRETURNSTATUS,
|
||||||
|
this.pSCHEDULEDHOURS,
|
||||||
|
this.pSHTNAME,
|
||||||
|
this.pSPENTHOURS,
|
||||||
|
this.pSWIPESEXEMPTEDFLAG,
|
||||||
|
this.pSWIPEIN,
|
||||||
|
this.pSWIPEOUT});
|
||||||
|
|
||||||
|
GetAttendanceTrackingList.fromJson(Map<String, dynamic> json) {
|
||||||
|
pBREAKHOURS = json['P_BREAK_HOURS'];
|
||||||
|
pLATEINHOURS = json['P_LATE_IN_HOURS'];
|
||||||
|
pREMAININGHOURS = json['P_REMAINING_HOURS'];
|
||||||
|
pRETURNMSG = json['P_RETURN_MSG'];
|
||||||
|
pRETURNSTATUS = json['P_RETURN_STATUS'];
|
||||||
|
pSCHEDULEDHOURS = json['P_SCHEDULED_HOURS'];
|
||||||
|
pSHTNAME = json['P_SHT_NAME'];
|
||||||
|
pSPENTHOURS = json['P_SPENT_HOURS'];
|
||||||
|
pSWIPESEXEMPTEDFLAG = json['P_SWIPES_EXEMPTED_FLAG'];
|
||||||
|
pSWIPEIN = json['P_SWIPE_IN'];
|
||||||
|
pSWIPEOUT = json['P_SWIPE_OUT'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['P_BREAK_HOURS'] = this.pBREAKHOURS;
|
||||||
|
data['P_LATE_IN_HOURS'] = this.pLATEINHOURS;
|
||||||
|
data['P_REMAINING_HOURS'] = this.pREMAININGHOURS;
|
||||||
|
data['P_RETURN_MSG'] = this.pRETURNMSG;
|
||||||
|
data['P_RETURN_STATUS'] = this.pRETURNSTATUS;
|
||||||
|
data['P_SCHEDULED_HOURS'] = this.pSCHEDULEDHOURS;
|
||||||
|
data['P_SHT_NAME'] = this.pSHTNAME;
|
||||||
|
data['P_SPENT_HOURS'] = this.pSPENTHOURS;
|
||||||
|
data['P_SWIPES_EXEMPTED_FLAG'] = this.pSWIPESEXEMPTEDFLAG;
|
||||||
|
data['P_SWIPE_IN'] = this.pSWIPEIN;
|
||||||
|
data['P_SWIPE_OUT'] = this.pSWIPEOUT;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,313 @@
|
|||||||
|
|
||||||
|
class GetEmployeeSubordinatesList {
|
||||||
|
String? aCTUALTERMINATIONDATE;
|
||||||
|
String? aSSIGNMENTENDDATE;
|
||||||
|
int? aSSIGNMENTID;
|
||||||
|
String? aSSIGNMENTNUMBER;
|
||||||
|
String? aSSIGNMENTSTARTDATE;
|
||||||
|
int? aSSIGNMENTSTATUSTYPEID;
|
||||||
|
String? aSSIGNMENTTYPE;
|
||||||
|
int? bUSINESSGROUPID;
|
||||||
|
String? bUSINESSGROUPNAME;
|
||||||
|
String? cURRENTEMPLOYEEFLAG;
|
||||||
|
String? eMPLOYEEDISPLAYNAME;
|
||||||
|
String? eMPLOYEEEMAILADDRESS;
|
||||||
|
String? eMPLOYEEIMAGE;
|
||||||
|
String? eMPLOYEEMOBILENUMBER;
|
||||||
|
String? eMPLOYEENAME;
|
||||||
|
String? eMPLOYEENUMBER;
|
||||||
|
String? eMPLOYEEWORKNUMBER;
|
||||||
|
String? eMPLOYMENTCATEGORY;
|
||||||
|
String? eMPLOYMENTCATEGORYMEANING;
|
||||||
|
String? fREQUENCY;
|
||||||
|
String? fREQUENCYMEANING;
|
||||||
|
int? fROMROWNUM;
|
||||||
|
dynamic? gRADEID;
|
||||||
|
dynamic? gRADENAME;
|
||||||
|
dynamic? genderCode;
|
||||||
|
dynamic? genderMeaning;
|
||||||
|
String? hIREDATE;
|
||||||
|
bool? isFavorite;
|
||||||
|
int? jOBID;
|
||||||
|
String? jOBNAME;
|
||||||
|
int? lOCATIONID;
|
||||||
|
String? lOCATIONNAME;
|
||||||
|
String? mANUALTIMECARDFLAG;
|
||||||
|
String? mANUALTIMECARDMEANING;
|
||||||
|
String? nATIONALITYCODE;
|
||||||
|
String? nATIONALITYMEANING;
|
||||||
|
String? nATIONALIDENTIFIER;
|
||||||
|
dynamic? nORMALHOURS;
|
||||||
|
int? nOOFROWS;
|
||||||
|
int? nUMOFSUBORDINATES;
|
||||||
|
int? oRGANIZATIONID;
|
||||||
|
String? oRGANIZATIONNAME;
|
||||||
|
String? pAYROLLCODE;
|
||||||
|
int? pAYROLLID;
|
||||||
|
String? pAYROLLNAME;
|
||||||
|
int? pERSONID;
|
||||||
|
String? pERSONTYPE;
|
||||||
|
int? pERSONTYPEID;
|
||||||
|
String? pERINFORMATIONCATEGORY;
|
||||||
|
int? pOSITIONID;
|
||||||
|
String? pOSITIONNAME;
|
||||||
|
String? pRIMARYFLAG;
|
||||||
|
int? rOWNUM;
|
||||||
|
int? sERVICEDAYS;
|
||||||
|
int? sERVICEMONTHS;
|
||||||
|
int? sERVICEYEARS;
|
||||||
|
String? sUPERVISORASSIGNMENTID;
|
||||||
|
String? sUPERVISORDISPLAYNAME;
|
||||||
|
String? sUPERVISOREMAILADDRESS;
|
||||||
|
int? sUPERVISORID;
|
||||||
|
String? sUPERVISORMOBILENUMBER;
|
||||||
|
String? sUPERVISORNAME;
|
||||||
|
String? sUPERVISORNUMBER;
|
||||||
|
String? sUPERVISORWORKNUMBER;
|
||||||
|
String? sWIPESEXEMPTEDFLAG;
|
||||||
|
String? sWIPESEXEMPTEDMEANING;
|
||||||
|
String? sYSTEMPERSONTYPE;
|
||||||
|
String? tKEMAILADDRESS;
|
||||||
|
String? tKEMPLOYEEDISPLAYNAME;
|
||||||
|
String? tKEMPLOYEENAME;
|
||||||
|
String? tKEMPLOYEENUMBER;
|
||||||
|
int? tKPERSONID;
|
||||||
|
int? tOROWNUM;
|
||||||
|
String? uNITNUMBER;
|
||||||
|
String? uSERSTATUS;
|
||||||
|
|
||||||
|
GetEmployeeSubordinatesList(
|
||||||
|
{this.aCTUALTERMINATIONDATE,
|
||||||
|
this.aSSIGNMENTENDDATE,
|
||||||
|
this.aSSIGNMENTID,
|
||||||
|
this.aSSIGNMENTNUMBER,
|
||||||
|
this.aSSIGNMENTSTARTDATE,
|
||||||
|
this.aSSIGNMENTSTATUSTYPEID,
|
||||||
|
this.aSSIGNMENTTYPE,
|
||||||
|
this.bUSINESSGROUPID,
|
||||||
|
this.bUSINESSGROUPNAME,
|
||||||
|
this.cURRENTEMPLOYEEFLAG,
|
||||||
|
this.eMPLOYEEDISPLAYNAME,
|
||||||
|
this.eMPLOYEEEMAILADDRESS,
|
||||||
|
this.eMPLOYEEIMAGE,
|
||||||
|
this.eMPLOYEEMOBILENUMBER,
|
||||||
|
this.eMPLOYEENAME,
|
||||||
|
this.eMPLOYEENUMBER,
|
||||||
|
this.eMPLOYEEWORKNUMBER,
|
||||||
|
this.eMPLOYMENTCATEGORY,
|
||||||
|
this.eMPLOYMENTCATEGORYMEANING,
|
||||||
|
this.fREQUENCY,
|
||||||
|
this.fREQUENCYMEANING,
|
||||||
|
this.fROMROWNUM,
|
||||||
|
this.gRADEID,
|
||||||
|
this.gRADENAME,
|
||||||
|
this.genderCode,
|
||||||
|
this.genderMeaning,
|
||||||
|
this.hIREDATE,
|
||||||
|
this.isFavorite,
|
||||||
|
this.jOBID,
|
||||||
|
this.jOBNAME,
|
||||||
|
this.lOCATIONID,
|
||||||
|
this.lOCATIONNAME,
|
||||||
|
this.mANUALTIMECARDFLAG,
|
||||||
|
this.mANUALTIMECARDMEANING,
|
||||||
|
this.nATIONALITYCODE,
|
||||||
|
this.nATIONALITYMEANING,
|
||||||
|
this.nATIONALIDENTIFIER,
|
||||||
|
this.nORMALHOURS,
|
||||||
|
this.nOOFROWS,
|
||||||
|
this.nUMOFSUBORDINATES,
|
||||||
|
this.oRGANIZATIONID,
|
||||||
|
this.oRGANIZATIONNAME,
|
||||||
|
this.pAYROLLCODE,
|
||||||
|
this.pAYROLLID,
|
||||||
|
this.pAYROLLNAME,
|
||||||
|
this.pERSONID,
|
||||||
|
this.pERSONTYPE,
|
||||||
|
this.pERSONTYPEID,
|
||||||
|
this.pERINFORMATIONCATEGORY,
|
||||||
|
this.pOSITIONID,
|
||||||
|
this.pOSITIONNAME,
|
||||||
|
this.pRIMARYFLAG,
|
||||||
|
this.rOWNUM,
|
||||||
|
this.sERVICEDAYS,
|
||||||
|
this.sERVICEMONTHS,
|
||||||
|
this.sERVICEYEARS,
|
||||||
|
this.sUPERVISORASSIGNMENTID,
|
||||||
|
this.sUPERVISORDISPLAYNAME,
|
||||||
|
this.sUPERVISOREMAILADDRESS,
|
||||||
|
this.sUPERVISORID,
|
||||||
|
this.sUPERVISORMOBILENUMBER,
|
||||||
|
this.sUPERVISORNAME,
|
||||||
|
this.sUPERVISORNUMBER,
|
||||||
|
this.sUPERVISORWORKNUMBER,
|
||||||
|
this.sWIPESEXEMPTEDFLAG,
|
||||||
|
this.sWIPESEXEMPTEDMEANING,
|
||||||
|
this.sYSTEMPERSONTYPE,
|
||||||
|
this.tKEMAILADDRESS,
|
||||||
|
this.tKEMPLOYEEDISPLAYNAME,
|
||||||
|
this.tKEMPLOYEENAME,
|
||||||
|
this.tKEMPLOYEENUMBER,
|
||||||
|
this.tKPERSONID,
|
||||||
|
this.tOROWNUM,
|
||||||
|
this.uNITNUMBER,
|
||||||
|
this.uSERSTATUS});
|
||||||
|
|
||||||
|
GetEmployeeSubordinatesList.fromJson(Map<String, dynamic> json) {
|
||||||
|
aCTUALTERMINATIONDATE = json['ACTUAL_TERMINATION_DATE'];
|
||||||
|
aSSIGNMENTENDDATE = json['ASSIGNMENT_END_DATE'];
|
||||||
|
aSSIGNMENTID = json['ASSIGNMENT_ID'];
|
||||||
|
aSSIGNMENTNUMBER = json['ASSIGNMENT_NUMBER'];
|
||||||
|
aSSIGNMENTSTARTDATE = json['ASSIGNMENT_START_DATE'];
|
||||||
|
aSSIGNMENTSTATUSTYPEID = json['ASSIGNMENT_STATUS_TYPE_ID'];
|
||||||
|
aSSIGNMENTTYPE = json['ASSIGNMENT_TYPE'];
|
||||||
|
bUSINESSGROUPID = json['BUSINESS_GROUP_ID'];
|
||||||
|
bUSINESSGROUPNAME = json['BUSINESS_GROUP_NAME'];
|
||||||
|
cURRENTEMPLOYEEFLAG = json['CURRENT_EMPLOYEE_FLAG'];
|
||||||
|
eMPLOYEEDISPLAYNAME = json['EMPLOYEE_DISPLAY_NAME'];
|
||||||
|
eMPLOYEEEMAILADDRESS = json['EMPLOYEE_EMAIL_ADDRESS'];
|
||||||
|
eMPLOYEEIMAGE = json['EMPLOYEE_IMAGE'];
|
||||||
|
eMPLOYEEMOBILENUMBER = json['EMPLOYEE_MOBILE_NUMBER'];
|
||||||
|
eMPLOYEENAME = json['EMPLOYEE_NAME'];
|
||||||
|
eMPLOYEENUMBER = json['EMPLOYEE_NUMBER'];
|
||||||
|
eMPLOYEEWORKNUMBER = json['EMPLOYEE_WORK_NUMBER'];
|
||||||
|
eMPLOYMENTCATEGORY = json['EMPLOYMENT_CATEGORY'];
|
||||||
|
eMPLOYMENTCATEGORYMEANING = json['EMPLOYMENT_CATEGORY_MEANING'];
|
||||||
|
fREQUENCY = json['FREQUENCY'];
|
||||||
|
fREQUENCYMEANING = json['FREQUENCY_MEANING'];
|
||||||
|
fROMROWNUM = json['FROM_ROW_NUM'];
|
||||||
|
gRADEID = json['GRADE_ID'];
|
||||||
|
gRADENAME = json['GRADE_NAME'];
|
||||||
|
genderCode = json['GenderCode'];
|
||||||
|
genderMeaning = json['GenderMeaning'];
|
||||||
|
hIREDATE = json['HIRE_DATE'];
|
||||||
|
isFavorite = json['IsFavorite'];
|
||||||
|
jOBID = json['JOB_ID'];
|
||||||
|
jOBNAME = json['JOB_NAME'];
|
||||||
|
lOCATIONID = json['LOCATION_ID'];
|
||||||
|
lOCATIONNAME = json['LOCATION_NAME'];
|
||||||
|
mANUALTIMECARDFLAG = json['MANUAL_TIMECARD_FLAG'];
|
||||||
|
mANUALTIMECARDMEANING = json['MANUAL_TIMECARD_MEANING'];
|
||||||
|
nATIONALITYCODE = json['NATIONALITY_CODE'];
|
||||||
|
nATIONALITYMEANING = json['NATIONALITY_MEANING'];
|
||||||
|
nATIONALIDENTIFIER = json['NATIONAL_IDENTIFIER'];
|
||||||
|
nORMALHOURS = json['NORMAL_HOURS'];
|
||||||
|
nOOFROWS = json['NO_OF_ROWS'];
|
||||||
|
nUMOFSUBORDINATES = json['NUM_OF_SUBORDINATES'];
|
||||||
|
oRGANIZATIONID = json['ORGANIZATION_ID'];
|
||||||
|
oRGANIZATIONNAME = json['ORGANIZATION_NAME'];
|
||||||
|
pAYROLLCODE = json['PAYROLL_CODE'];
|
||||||
|
pAYROLLID = json['PAYROLL_ID'];
|
||||||
|
pAYROLLNAME = json['PAYROLL_NAME'];
|
||||||
|
pERSONID = json['PERSON_ID'];
|
||||||
|
pERSONTYPE = json['PERSON_TYPE'];
|
||||||
|
pERSONTYPEID = json['PERSON_TYPE_ID'];
|
||||||
|
pERINFORMATIONCATEGORY = json['PER_INFORMATION_CATEGORY'];
|
||||||
|
pOSITIONID = json['POSITION_ID'];
|
||||||
|
pOSITIONNAME = json['POSITION_NAME'];
|
||||||
|
pRIMARYFLAG = json['PRIMARY_FLAG'];
|
||||||
|
rOWNUM = json['ROW_NUM'];
|
||||||
|
sERVICEDAYS = json['SERVICE_DAYS'];
|
||||||
|
sERVICEMONTHS = json['SERVICE_MONTHS'];
|
||||||
|
sERVICEYEARS = json['SERVICE_YEARS'];
|
||||||
|
sUPERVISORASSIGNMENTID = json['SUPERVISOR_ASSIGNMENT_ID'];
|
||||||
|
sUPERVISORDISPLAYNAME = json['SUPERVISOR_DISPLAY_NAME'];
|
||||||
|
sUPERVISOREMAILADDRESS = json['SUPERVISOR_EMAIL_ADDRESS'];
|
||||||
|
sUPERVISORID = json['SUPERVISOR_ID'];
|
||||||
|
sUPERVISORMOBILENUMBER = json['SUPERVISOR_MOBILE_NUMBER'];
|
||||||
|
sUPERVISORNAME = json['SUPERVISOR_NAME'];
|
||||||
|
sUPERVISORNUMBER = json['SUPERVISOR_NUMBER'];
|
||||||
|
sUPERVISORWORKNUMBER = json['SUPERVISOR_WORK_NUMBER'];
|
||||||
|
sWIPESEXEMPTEDFLAG = json['SWIPES_EXEMPTED_FLAG'];
|
||||||
|
sWIPESEXEMPTEDMEANING = json['SWIPES_EXEMPTED_MEANING'];
|
||||||
|
sYSTEMPERSONTYPE = json['SYSTEM_PERSON_TYPE'];
|
||||||
|
tKEMAILADDRESS = json['TK_EMAIL_ADDRESS'];
|
||||||
|
tKEMPLOYEEDISPLAYNAME = json['TK_EMPLOYEE_DISPLAY_NAME'];
|
||||||
|
tKEMPLOYEENAME = json['TK_EMPLOYEE_NAME'];
|
||||||
|
tKEMPLOYEENUMBER = json['TK_EMPLOYEE_NUMBER'];
|
||||||
|
tKPERSONID = json['TK_PERSON_ID'];
|
||||||
|
tOROWNUM = json['TO_ROW_NUM'];
|
||||||
|
uNITNUMBER = json['UNIT_NUMBER'];
|
||||||
|
uSERSTATUS = json['USER_STATUS'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ACTUAL_TERMINATION_DATE'] = this.aCTUALTERMINATIONDATE;
|
||||||
|
data['ASSIGNMENT_END_DATE'] = this.aSSIGNMENTENDDATE;
|
||||||
|
data['ASSIGNMENT_ID'] = this.aSSIGNMENTID;
|
||||||
|
data['ASSIGNMENT_NUMBER'] = this.aSSIGNMENTNUMBER;
|
||||||
|
data['ASSIGNMENT_START_DATE'] = this.aSSIGNMENTSTARTDATE;
|
||||||
|
data['ASSIGNMENT_STATUS_TYPE_ID'] = this.aSSIGNMENTSTATUSTYPEID;
|
||||||
|
data['ASSIGNMENT_TYPE'] = this.aSSIGNMENTTYPE;
|
||||||
|
data['BUSINESS_GROUP_ID'] = this.bUSINESSGROUPID;
|
||||||
|
data['BUSINESS_GROUP_NAME'] = this.bUSINESSGROUPNAME;
|
||||||
|
data['CURRENT_EMPLOYEE_FLAG'] = this.cURRENTEMPLOYEEFLAG;
|
||||||
|
data['EMPLOYEE_DISPLAY_NAME'] = this.eMPLOYEEDISPLAYNAME;
|
||||||
|
data['EMPLOYEE_EMAIL_ADDRESS'] = this.eMPLOYEEEMAILADDRESS;
|
||||||
|
data['EMPLOYEE_IMAGE'] = this.eMPLOYEEIMAGE;
|
||||||
|
data['EMPLOYEE_MOBILE_NUMBER'] = this.eMPLOYEEMOBILENUMBER;
|
||||||
|
data['EMPLOYEE_NAME'] = this.eMPLOYEENAME;
|
||||||
|
data['EMPLOYEE_NUMBER'] = this.eMPLOYEENUMBER;
|
||||||
|
data['EMPLOYEE_WORK_NUMBER'] = this.eMPLOYEEWORKNUMBER;
|
||||||
|
data['EMPLOYMENT_CATEGORY'] = this.eMPLOYMENTCATEGORY;
|
||||||
|
data['EMPLOYMENT_CATEGORY_MEANING'] = this.eMPLOYMENTCATEGORYMEANING;
|
||||||
|
data['FREQUENCY'] = this.fREQUENCY;
|
||||||
|
data['FREQUENCY_MEANING'] = this.fREQUENCYMEANING;
|
||||||
|
data['FROM_ROW_NUM'] = this.fROMROWNUM;
|
||||||
|
data['GRADE_ID'] = this.gRADEID;
|
||||||
|
data['GRADE_NAME'] = this.gRADENAME;
|
||||||
|
data['GenderCode'] = this.genderCode;
|
||||||
|
data['GenderMeaning'] = this.genderMeaning;
|
||||||
|
data['HIRE_DATE'] = this.hIREDATE;
|
||||||
|
data['IsFavorite'] = this.isFavorite;
|
||||||
|
data['JOB_ID'] = this.jOBID;
|
||||||
|
data['JOB_NAME'] = this.jOBNAME;
|
||||||
|
data['LOCATION_ID'] = this.lOCATIONID;
|
||||||
|
data['LOCATION_NAME'] = this.lOCATIONNAME;
|
||||||
|
data['MANUAL_TIMECARD_FLAG'] = this.mANUALTIMECARDFLAG;
|
||||||
|
data['MANUAL_TIMECARD_MEANING'] = this.mANUALTIMECARDMEANING;
|
||||||
|
data['NATIONALITY_CODE'] = this.nATIONALITYCODE;
|
||||||
|
data['NATIONALITY_MEANING'] = this.nATIONALITYMEANING;
|
||||||
|
data['NATIONAL_IDENTIFIER'] = this.nATIONALIDENTIFIER;
|
||||||
|
data['NORMAL_HOURS'] = this.nORMALHOURS;
|
||||||
|
data['NO_OF_ROWS'] = this.nOOFROWS;
|
||||||
|
data['NUM_OF_SUBORDINATES'] = this.nUMOFSUBORDINATES;
|
||||||
|
data['ORGANIZATION_ID'] = this.oRGANIZATIONID;
|
||||||
|
data['ORGANIZATION_NAME'] = this.oRGANIZATIONNAME;
|
||||||
|
data['PAYROLL_CODE'] = this.pAYROLLCODE;
|
||||||
|
data['PAYROLL_ID'] = this.pAYROLLID;
|
||||||
|
data['PAYROLL_NAME'] = this.pAYROLLNAME;
|
||||||
|
data['PERSON_ID'] = this.pERSONID;
|
||||||
|
data['PERSON_TYPE'] = this.pERSONTYPE;
|
||||||
|
data['PERSON_TYPE_ID'] = this.pERSONTYPEID;
|
||||||
|
data['PER_INFORMATION_CATEGORY'] = this.pERINFORMATIONCATEGORY;
|
||||||
|
data['POSITION_ID'] = this.pOSITIONID;
|
||||||
|
data['POSITION_NAME'] = this.pOSITIONNAME;
|
||||||
|
data['PRIMARY_FLAG'] = this.pRIMARYFLAG;
|
||||||
|
data['ROW_NUM'] = this.rOWNUM;
|
||||||
|
data['SERVICE_DAYS'] = this.sERVICEDAYS;
|
||||||
|
data['SERVICE_MONTHS'] = this.sERVICEMONTHS;
|
||||||
|
data['SERVICE_YEARS'] = this.sERVICEYEARS;
|
||||||
|
data['SUPERVISOR_ASSIGNMENT_ID'] = this.sUPERVISORASSIGNMENTID;
|
||||||
|
data['SUPERVISOR_DISPLAY_NAME'] = this.sUPERVISORDISPLAYNAME;
|
||||||
|
data['SUPERVISOR_EMAIL_ADDRESS'] = this.sUPERVISOREMAILADDRESS;
|
||||||
|
data['SUPERVISOR_ID'] = this.sUPERVISORID;
|
||||||
|
data['SUPERVISOR_MOBILE_NUMBER'] = this.sUPERVISORMOBILENUMBER;
|
||||||
|
data['SUPERVISOR_NAME'] = this.sUPERVISORNAME;
|
||||||
|
data['SUPERVISOR_NUMBER'] = this.sUPERVISORNUMBER;
|
||||||
|
data['SUPERVISOR_WORK_NUMBER'] = this.sUPERVISORWORKNUMBER;
|
||||||
|
data['SWIPES_EXEMPTED_FLAG'] = this.sWIPESEXEMPTEDFLAG;
|
||||||
|
data['SWIPES_EXEMPTED_MEANING'] = this.sWIPESEXEMPTEDMEANING;
|
||||||
|
data['SYSTEM_PERSON_TYPE'] = this.sYSTEMPERSONTYPE;
|
||||||
|
data['TK_EMAIL_ADDRESS'] = this.tKEMAILADDRESS;
|
||||||
|
data['TK_EMPLOYEE_DISPLAY_NAME'] = this.tKEMPLOYEEDISPLAYNAME;
|
||||||
|
data['TK_EMPLOYEE_NAME'] = this.tKEMPLOYEENAME;
|
||||||
|
data['TK_EMPLOYEE_NUMBER'] = this.tKEMPLOYEENUMBER;
|
||||||
|
data['TK_PERSON_ID'] = this.tKPERSONID;
|
||||||
|
data['TO_ROW_NUM'] = this.tOROWNUM;
|
||||||
|
data['UNIT_NUMBER'] = this.uNITNUMBER;
|
||||||
|
data['USER_STATUS'] = this.uSERSTATUS;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class UpdateUserTypesList {
|
||||||
|
int? itemID;
|
||||||
|
String? pFYAENABLEDFALG;
|
||||||
|
String? pFYIENABLEDFALG;
|
||||||
|
String? pITEMTYPE;
|
||||||
|
|
||||||
|
|
||||||
|
UpdateUserTypesList({this.itemID, this.pFYAENABLEDFALG, this.pFYIENABLEDFALG, this.pITEMTYPE});
|
||||||
|
|
||||||
|
UpdateUserTypesList.fromJson(Map<String, dynamic> json) {
|
||||||
|
itemID = json['ItemID'];
|
||||||
|
pFYAENABLEDFALG = json['P_FYAENABLED_FALG'];
|
||||||
|
pFYIENABLEDFALG = json['P_FYIENABLED_FALG'];
|
||||||
|
pITEMTYPE = json['P_ITEM_TYPE'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ItemID'] = this.itemID;
|
||||||
|
data['P_FYAENABLED_FALG'] = this.pFYAENABLEDFALG;
|
||||||
|
data['P_FYIENABLED_FALG'] = this.pFYIENABLEDFALG;
|
||||||
|
data['P_ITEM_TYPE'] = this.pITEMTYPE;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,95 @@
|
|||||||
|
|
||||||
|
import 'dart:ui';
|
||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
|
import 'package:mohem_flutter_app/api/my_team/my_team_api_client.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/colors.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/utils.dart';
|
||||||
|
import 'package:mohem_flutter_app/config/routes.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/models/dashboard/menu_entries.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart';
|
||||||
|
import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
|
||||||
|
|
||||||
|
class CreateRequest extends StatefulWidget {
|
||||||
|
const CreateRequest ({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_CreateRequestState createState() => _CreateRequestState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _CreateRequestState extends State<CreateRequest> {
|
||||||
|
String searchEmpEmail ="";
|
||||||
|
String searchEmpName ="";
|
||||||
|
String searchEmpNo = "";
|
||||||
|
String? empId;
|
||||||
|
List<GetEmployeeSubordinatesList> getEmployeeSubordinatesList = [];
|
||||||
|
// late DashboardProviderModel data;
|
||||||
|
List<GetMenuEntriesList> getMenuEntriesList = [];
|
||||||
|
GetEmployeeSubordinatesList? getEmployeeSubordinates;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
// data.fetchMenuEntries();
|
||||||
|
employeeSubRequest();
|
||||||
|
}
|
||||||
|
|
||||||
|
void employeeSubRequest() async {
|
||||||
|
try {
|
||||||
|
Utils.showLoading(context);
|
||||||
|
getEmployeeSubordinatesList = await MyTeamApiClient().getEmployeeSubordinates(searchEmpEmail.toString(), searchEmpName.toString(), searchEmpNo.toString());
|
||||||
|
getMenuEntriesList = await MyTeamApiClient().employeeSubordinatesRequest(getEmployeeSubordinates?.eMPLOYEENUMBER);
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
setState(() {});
|
||||||
|
} catch (ex) {
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
getEmployeeSubordinates ??= ModalRoute.of(context)?.settings.arguments as GetEmployeeSubordinatesList;
|
||||||
|
print(getMenuEntriesList.length);
|
||||||
|
return Scaffold(
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
appBar: AppBarWidget(
|
||||||
|
context,
|
||||||
|
title: LocaleKeys.createRequest.tr(),
|
||||||
|
),
|
||||||
|
body: SizedBox(
|
||||||
|
width: double.infinity,
|
||||||
|
height: double.infinity,
|
||||||
|
child: getMenuEntriesList.isEmpty
|
||||||
|
? Utils.getNoDataWidget(context)
|
||||||
|
: ListView.separated(
|
||||||
|
padding: const EdgeInsets.all(21),
|
||||||
|
itemBuilder: (cxt, index) => itemView("assets/images/pdf.svg", getMenuEntriesList[index].prompt!, index).onPress(() {
|
||||||
|
Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(getMenuEntriesList[index].prompt!, getMenuEntriesList[index].functionName!));
|
||||||
|
}),
|
||||||
|
separatorBuilder: (cxt, index) => 12.height,
|
||||||
|
itemCount: getMenuEntriesList.length),
|
||||||
|
),
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget itemView(String icon, String title, index) {
|
||||||
|
return getMenuEntriesList[index].parentMenuName !=""? Row(
|
||||||
|
children: [
|
||||||
|
(title).toText16().expanded, 12.width,
|
||||||
|
SvgPicture.asset(
|
||||||
|
"assets/images/arrow_next.svg",
|
||||||
|
color: MyColors.darkIconColor,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
).objectContainerView() : SizedBox();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,314 @@
|
|||||||
|
import 'dart:collection';
|
||||||
|
import 'dart:ui';
|
||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
|
import 'package:mohem_flutter_app/api/my_team/my_team_api_client.dart';
|
||||||
|
import 'package:mohem_flutter_app/api/worklist/worklist_api_client.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/colors.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/utils.dart';
|
||||||
|
import 'package:mohem_flutter_app/config/routes.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/models/dashboard/menu_entries.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/generic_response_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/profile_menu.model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/circular_avatar.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
|
class EmployeeDetails extends StatefulWidget {
|
||||||
|
EmployeeDetails();
|
||||||
|
|
||||||
|
@override
|
||||||
|
_EmployeeDetailsState createState() => _EmployeeDetailsState();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class _EmployeeDetailsState extends State<EmployeeDetails> {
|
||||||
|
GetEmployeeSubordinatesList? getEmployeeSubordinates;
|
||||||
|
static List<GetMenuEntriesList> menuData = [];
|
||||||
|
List<ProfileMenu> menu =[];
|
||||||
|
String? selectedFavLetter;
|
||||||
|
List<String>? favLetters;
|
||||||
|
List<GetFavoriteReplacements>? favUsersList;
|
||||||
|
List<ReplacementList>? replacementList;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
|
|
||||||
|
//favorite
|
||||||
|
void fetchChangeFav({required String email, required String employeName, required String image, required String userName, bool isFav = false, bool isNeedToRefresh = false}) async {
|
||||||
|
Utils.showLoading(context);
|
||||||
|
getEmployeeSubordinates = ModalRoute.of(context)?.settings.arguments as GetEmployeeSubordinatesList;
|
||||||
|
GenericResponseModel model = await MyTeamApiClient().changeFavoriteReplacements(
|
||||||
|
email: email,
|
||||||
|
employeName: employeName,
|
||||||
|
image: image,
|
||||||
|
userName: userName,
|
||||||
|
isFav: isFav,
|
||||||
|
);
|
||||||
|
getEmployeeSubordinates!.isFavorite = isFav;
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
getEmployeeSubordinates = ModalRoute.of(context)?.settings.arguments as GetEmployeeSubordinatesList;
|
||||||
|
setMenu();
|
||||||
|
return Scaffold(
|
||||||
|
extendBody: true,
|
||||||
|
backgroundColor: MyColors.lightGreyEFColor,
|
||||||
|
body: Stack(children: [
|
||||||
|
Container(
|
||||||
|
height: 200,
|
||||||
|
margin: EdgeInsets.only(top: 30),
|
||||||
|
decoration: BoxDecoration(image: DecorationImage(image: MemoryImage(Utils.getPostBytes(getEmployeeSubordinates!.eMPLOYEEIMAGE)), fit: BoxFit.cover)),
|
||||||
|
child: new BackdropFilter(
|
||||||
|
filter: new ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0),
|
||||||
|
child: new Container(
|
||||||
|
decoration: new BoxDecoration(color: Colors.white.withOpacity(0.0)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SingleChildScrollView(
|
||||||
|
scrollDirection: Axis.vertical,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
80.height,
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.only(left: 15, right: 15),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
IconButton(
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
icon: Icon(
|
||||||
|
Icons.arrow_back_ios,
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
myTeamInfo()
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
]));
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget myTeamInfo() {
|
||||||
|
Uri phoneNumber = Uri.parse('tel:${getEmployeeSubordinates?.eMPLOYEEMOBILENUMBER}');
|
||||||
|
double _width = MediaQuery
|
||||||
|
.of(context)
|
||||||
|
.size
|
||||||
|
.width;
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.fromLTRB(21, 0, 21, 10),
|
||||||
|
child: Stack(children: [
|
||||||
|
Container(
|
||||||
|
width: _width,
|
||||||
|
//height: 150,
|
||||||
|
margin: EdgeInsets.only(top: 50),
|
||||||
|
padding: EdgeInsets.only(top: 50),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: const BorderRadius.all(Radius.circular(15)),
|
||||||
|
boxShadow: [BoxShadow(color: MyColors.lightGreyColor, blurRadius: 15, spreadRadius: 3)],
|
||||||
|
),
|
||||||
|
child: Container(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
/// card header
|
||||||
|
customLabel(getEmployeeSubordinates!.eMPLOYEENAME.toString(), 22, Colors.black, true),
|
||||||
|
customLabel(getEmployeeSubordinates!.eMPLOYEENUMBER.toString() + ' | ' + getEmployeeSubordinates!.jOBNAME.toString(), 14, Colors.grey, false),
|
||||||
|
customLabel(getEmployeeSubordinates!.eMPLOYEEEMAILADDRESS.toString(), 13, Colors.black, true),
|
||||||
|
],
|
||||||
|
).paddingOnly(top: 10, bottom: 10),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
IconButton(
|
||||||
|
onPressed: (){
|
||||||
|
if(getEmployeeSubordinates!.isFavorite != true){
|
||||||
|
showFavoriteAlertDialog(context);
|
||||||
|
setState(() {});
|
||||||
|
}else{
|
||||||
|
fetchChangeFav(
|
||||||
|
email: getEmployeeSubordinates?.eMPLOYEEEMAILADDRESS ?? "",
|
||||||
|
employeName: getEmployeeSubordinates!.eMPLOYEENAME ?? "",
|
||||||
|
image: getEmployeeSubordinates!.eMPLOYEEIMAGE ?? "",
|
||||||
|
userName: getEmployeeSubordinates!.eMPLOYEENUMBER ?? "",
|
||||||
|
isFav: false,);
|
||||||
|
setState(() {});
|
||||||
|
} },
|
||||||
|
icon: getEmployeeSubordinates!.isFavorite != true
|
||||||
|
? Icon(
|
||||||
|
Icons.star_outline,
|
||||||
|
size: 35,
|
||||||
|
color: Colors.green,
|
||||||
|
)
|
||||||
|
: Icon(
|
||||||
|
Icons.star_outlined,
|
||||||
|
size: 35,
|
||||||
|
color: Colors.green,
|
||||||
|
),
|
||||||
|
).paddingOnly(top: 50),
|
||||||
|
Container(height: 100, alignment: Alignment.center, child: ProfileImage()),
|
||||||
|
IconButton(
|
||||||
|
onPressed: () {
|
||||||
|
launchUrl(phoneNumber);
|
||||||
|
},
|
||||||
|
icon: Icon(
|
||||||
|
Icons.whatsapp,
|
||||||
|
color: Colors.green,
|
||||||
|
size: 30,
|
||||||
|
).paddingOnly(top: 30),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
])),
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.fromLTRB(21, 8, 21, 10),
|
||||||
|
height: 260,
|
||||||
|
padding: EdgeInsets.only(top: 15, bottom: 15),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: const BorderRadius.all(Radius.circular(15)),
|
||||||
|
boxShadow: [BoxShadow(color: MyColors.lightGreyColor, blurRadius: 15, spreadRadius: 3)],
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
children: menu.map((ProfileMenu i) => rowItem(i, context)).toList(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget ProfileImage() =>
|
||||||
|
CircleAvatar(
|
||||||
|
radius: 70,
|
||||||
|
backgroundImage: MemoryImage(Utils.getPostBytes(getEmployeeSubordinates?.eMPLOYEEIMAGE)),
|
||||||
|
backgroundColor: Colors.black,
|
||||||
|
);
|
||||||
|
|
||||||
|
Widget customLabel(String label, double size, Color color, bool isBold, {double padding = 0.0}) =>
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.all(padding),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [Text(label, style: TextStyle(color: color, fontSize: size, fontWeight: isBold ? FontWeight.bold : FontWeight.normal))]));
|
||||||
|
|
||||||
|
Widget rowItem(obj, context) {
|
||||||
|
return InkWell(
|
||||||
|
onTap: () {
|
||||||
|
|
||||||
|
Navigator.pushNamed(context, obj.route, arguments:obj.arguments);
|
||||||
|
|
||||||
|
},
|
||||||
|
child: ListTile(
|
||||||
|
leading: SvgPicture.asset('assets/images/' + obj.icon),
|
||||||
|
title: Text(obj.name),
|
||||||
|
trailing: Icon(Icons.arrow_forward),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
void setMenu(){
|
||||||
|
menu = [
|
||||||
|
ProfileMenu(name: "Profile Details", icon: 'personal-info.svg', route: AppRoutes.profileDetails, arguments:getEmployeeSubordinates, dynamicUrl: '', menuEntries: getMenuEntries('')),
|
||||||
|
ProfileMenu(name: "Create Request", icon: 'personal-info.svg', route: AppRoutes.createRequest,arguments: getEmployeeSubordinates, menuEntries: getMenuEntries('')),
|
||||||
|
ProfileMenu(name: "View Attendance", icon: 'personal-info.svg', route: AppRoutes.viewAttendance, arguments: getEmployeeSubordinates, dynamicUrl: '', menuEntries: getMenuEntries('')),
|
||||||
|
ProfileMenu(name: "Team Members", icon: 'family-members.svg', route: AppRoutes.teamMembers, arguments: getEmployeeSubordinates, dynamicUrl: '', menuEntries: getMenuEntries('')),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
void showFavoriteAlertDialog(BuildContext context) {
|
||||||
|
Widget cancelButton = TextButton(
|
||||||
|
child: Text(
|
||||||
|
LocaleKeys.cancel.tr(),
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
Widget continueButton = TextButton(
|
||||||
|
child: Text(
|
||||||
|
LocaleKeys.ok.tr(),
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
fetchChangeFav(
|
||||||
|
email: getEmployeeSubordinates?.eMPLOYEEEMAILADDRESS ?? "",
|
||||||
|
employeName: getEmployeeSubordinates!.eMPLOYEENAME ?? "",
|
||||||
|
image: getEmployeeSubordinates!.eMPLOYEEIMAGE ?? "",
|
||||||
|
userName: getEmployeeSubordinates!.eMPLOYEENUMBER ?? "",
|
||||||
|
isFav: true,
|
||||||
|
);
|
||||||
|
setState(() {});
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
AlertDialog alert = AlertDialog(
|
||||||
|
title: Text(
|
||||||
|
LocaleKeys.confirm.tr(),
|
||||||
|
),
|
||||||
|
content: Container(
|
||||||
|
height: 150,
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Text("Do you want to add" + "${getEmployeeSubordinates!.eMPLOYEENAME.toString()}" + "in your favorite list "),
|
||||||
|
CircularAvatar(
|
||||||
|
url: getEmployeeSubordinates!.eMPLOYEEIMAGE ?? "",
|
||||||
|
height: 50,
|
||||||
|
width: 50,
|
||||||
|
isImageBase64: true,
|
||||||
|
).paddingOnly(top: 21),
|
||||||
|
// 16.width,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
cancelButton,
|
||||||
|
continueButton,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return alert;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GetMenuEntriesList getMenuEntries(String type) {
|
||||||
|
List<GetMenuEntriesList> data = _EmployeeDetailsState.menuData.where((GetMenuEntriesList test) => test.functionName == type).toList();
|
||||||
|
if (data.isNotEmpty) {
|
||||||
|
return data[0];
|
||||||
|
} else {
|
||||||
|
return GetMenuEntriesList();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,241 @@
|
|||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:mohem_flutter_app/api/my_team/my_team_api_client.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/colors.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/utils.dart';
|
||||||
|
import 'package:mohem_flutter_app/config/routes.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/my_team/get_employee_subordinates_list.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
|
|
||||||
|
class MyTeam extends StatefulWidget {
|
||||||
|
const MyTeam({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_MyTeamState createState() => _MyTeamState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MyTeamState extends State<MyTeam> {
|
||||||
|
String searchEmpEmail ="";
|
||||||
|
String searchEmpName ="";
|
||||||
|
String searchEmpNo = "";
|
||||||
|
String? empId;
|
||||||
|
List<GetEmployeeSubordinatesList> getEmployeeSubordinatesList = [];
|
||||||
|
TextEditingController? _textEditingController = TextEditingController();
|
||||||
|
List<GetEmployeeSubordinatesList> getEmployeeSListOnSearch = [];
|
||||||
|
|
||||||
|
String dropdownValue = 'Name';
|
||||||
|
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
getEmployeeSubordinates();
|
||||||
|
}
|
||||||
|
|
||||||
|
void getEmployeeSubordinates() async {
|
||||||
|
try {
|
||||||
|
Utils.showLoading(context);
|
||||||
|
getEmployeeSubordinatesList = await MyTeamApiClient().getEmployeeSubordinates(searchEmpEmail.toString(), searchEmpName.toString(), searchEmpNo.toString());
|
||||||
|
getEmployeeSListOnSearch =getEmployeeSubordinatesList;
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
setState(() {});
|
||||||
|
} catch (ex) {
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBarWidget(
|
||||||
|
context,
|
||||||
|
title:"My Team Members",
|
||||||
|
),
|
||||||
|
backgroundColor: MyColors.backgroundColor,
|
||||||
|
body: SingleChildScrollView(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
margin: EdgeInsets.only(
|
||||||
|
top: 28,
|
||||||
|
left: 18,
|
||||||
|
right: 18,
|
||||||
|
// bottom: 28
|
||||||
|
),
|
||||||
|
padding: EdgeInsets.only( left: 10, right: 10),
|
||||||
|
height: 65,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 5,
|
||||||
|
blurRadius: 26,
|
||||||
|
offset: Offset(0, 3),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(10.0),
|
||||||
|
),
|
||||||
|
child:
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children : <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child:
|
||||||
|
TextField(
|
||||||
|
onChanged: dropdownValue =="Name" ?
|
||||||
|
(String value){
|
||||||
|
getEmployeeSListOnSearch = getEmployeeSubordinatesList.where((GetEmployeeSubordinatesList element)
|
||||||
|
=> element.eMPLOYEENAME!.toLowerCase().contains(value.toLowerCase())).toList();
|
||||||
|
setState(() {});
|
||||||
|
}: (String value){
|
||||||
|
getEmployeeSListOnSearch = getEmployeeSubordinatesList.where((GetEmployeeSubordinatesList element)
|
||||||
|
=> element.eMPLOYEEEMAILADDRESS!.toLowerCase().contains(value.toLowerCase())).toList();
|
||||||
|
setState(() {});
|
||||||
|
},
|
||||||
|
controller: _textEditingController,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
filled: true,
|
||||||
|
fillColor: Colors.white,
|
||||||
|
border: InputBorder.none,
|
||||||
|
enabledBorder: InputBorder.none,
|
||||||
|
focusedBorder: InputBorder.none,
|
||||||
|
// contentPadding: EdgeInsets.fromLTRB(10, 15, 10, 15),
|
||||||
|
hintText: 'Search by $dropdownValue',
|
||||||
|
hintStyle: TextStyle(fontSize: 16.0, color: Colors.black,),
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
dropDown()
|
||||||
|
]),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: MediaQuery.of(context).size.width,
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
scrollDirection: Axis.vertical,
|
||||||
|
child: Column(
|
||||||
|
children: <Widget>[
|
||||||
|
_textEditingController!.text.isNotEmpty && getEmployeeSListOnSearch.isEmpty ?
|
||||||
|
Container(
|
||||||
|
child: "No Results found".toText16(color: MyColors.blackColor),).paddingOnly(top: 10)
|
||||||
|
: ListView.builder(
|
||||||
|
scrollDirection: Axis.vertical,
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: ScrollPhysics(),
|
||||||
|
itemCount: _textEditingController!.text.isNotEmpty ? getEmployeeSListOnSearch.length : getEmployeeSubordinatesList.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
var phoneNumber = Uri.parse('tel:${getEmployeeSListOnSearch[index].eMPLOYEEMOBILENUMBER}');
|
||||||
|
return Container(
|
||||||
|
width: double.infinity,
|
||||||
|
margin: EdgeInsets.only(
|
||||||
|
top: 18,
|
||||||
|
left: 18,
|
||||||
|
right: 18,
|
||||||
|
),
|
||||||
|
padding: EdgeInsets.only(left: 10, right: 10, top: 10, bottom: 10),
|
||||||
|
// height: 110,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 5,
|
||||||
|
blurRadius: 26,
|
||||||
|
offset: Offset(0, 3),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(10.0),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
|
||||||
|
CircleAvatar(
|
||||||
|
radius: 25,
|
||||||
|
backgroundImage: MemoryImage(Utils.getPostBytes(getEmployeeSListOnSearch[index].eMPLOYEEIMAGE)),
|
||||||
|
backgroundColor: Colors.black,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
width: 10,
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
"Present".toText13(color: MyColors.greenColor),
|
||||||
|
"${getEmployeeSListOnSearch[index].eMPLOYEENAME}".toText16(color: MyColors.blackColor),
|
||||||
|
"${getEmployeeSListOnSearch[index].pOSITIONNAME}".toText13(color: MyColors.blackColor),
|
||||||
|
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
IconButton(
|
||||||
|
onPressed: () {
|
||||||
|
launchUrl(phoneNumber);
|
||||||
|
},
|
||||||
|
icon: Icon(
|
||||||
|
Icons.whatsapp,
|
||||||
|
color: Colors.green,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
IconButton(
|
||||||
|
onPressed: () async{
|
||||||
|
Navigator.pushNamed(context,AppRoutes.employeeDetails,arguments: getEmployeeSListOnSearch[index]);
|
||||||
|
// Navigator.of(context).push(MaterialPageRoute(builder: (context)=> EmployeeDetails(getEmployeeSubordinates: getEmployeeSubordinatesList[index])),);
|
||||||
|
},
|
||||||
|
icon: Icon(
|
||||||
|
Icons.arrow_forward_outlined,
|
||||||
|
color: Colors.grey,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
})
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget dropDown(){
|
||||||
|
return DropdownButton<String>(
|
||||||
|
value: dropdownValue,
|
||||||
|
icon: const Icon(Icons.keyboard_arrow_down),
|
||||||
|
elevation: 16,
|
||||||
|
onChanged: (String? newValue) {
|
||||||
|
setState(() {
|
||||||
|
dropdownValue = newValue!;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
items: <String>['Name', 'Email']
|
||||||
|
.map<DropdownMenuItem<String>>((String value) {
|
||||||
|
return DropdownMenuItem<String>(
|
||||||
|
value: value,
|
||||||
|
child: Text(value),
|
||||||
|
);
|
||||||
|
}).toList(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,91 @@
|
|||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:mohem_flutter_app/app_state/app_state.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/colors.dart';
|
||||||
|
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
|
||||||
|
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/member_information_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
|
||||||
|
|
||||||
|
class ProfileDetails extends StatefulWidget {
|
||||||
|
const ProfileDetails({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ProfileDetailsState createState() => _ProfileDetailsState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ProfileDetailsState extends State<ProfileDetails> {
|
||||||
|
|
||||||
|
GetEmployeeSubordinatesList? getEmployeeSubordinates;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
getEmployeeSubordinates ??= ModalRoute.of(context)?.settings.arguments as GetEmployeeSubordinatesList;
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBarWidget(
|
||||||
|
context,
|
||||||
|
title: "Profile Details",
|
||||||
|
),
|
||||||
|
backgroundColor: MyColors.backgroundColor,
|
||||||
|
body: Column(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
margin: EdgeInsets.only(
|
||||||
|
top: 28,
|
||||||
|
left: 26,
|
||||||
|
right: 26,
|
||||||
|
),
|
||||||
|
padding: EdgeInsets.only(left: 14, right: 14, top: 13, bottom: 20),
|
||||||
|
height: 350,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 5,
|
||||||
|
blurRadius: 26,
|
||||||
|
offset: Offset(0, 3),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(10.0),
|
||||||
|
),
|
||||||
|
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
||||||
|
LocaleKeys.category.tr().toText13(color: MyColors.lightGrayColor),
|
||||||
|
"${getEmployeeSubordinates?.eMPLOYMENTCATEGORYMEANING}".toText16(isBold: true, color: MyColors.blackColor),
|
||||||
|
SizedBox(
|
||||||
|
height: 20,
|
||||||
|
),
|
||||||
|
LocaleKeys.address.tr().toText13(color: MyColors.lightGrayColor),
|
||||||
|
"${getEmployeeSubordinates?.lOCATIONNAME}".toText16(isBold: true, color: MyColors.blackColor),
|
||||||
|
SizedBox(
|
||||||
|
height: 20,
|
||||||
|
),
|
||||||
|
LocaleKeys.phoneNumber.tr().toText13(color: MyColors.lightGrayColor),
|
||||||
|
"${getEmployeeSubordinates?.eMPLOYEEMOBILENUMBER}".toText16(isBold: true, color: MyColors.blackColor),
|
||||||
|
SizedBox(
|
||||||
|
height: 20,
|
||||||
|
),
|
||||||
|
LocaleKeys.businessGroup.tr().toText13(color: MyColors.lightGrayColor),
|
||||||
|
"${getEmployeeSubordinates?.bUSINESSGROUPNAME}".toText16(isBold: true, color: MyColors.blackColor),
|
||||||
|
SizedBox(
|
||||||
|
height: 20,
|
||||||
|
),
|
||||||
|
LocaleKeys.Payroll.tr().toText13(color: MyColors.lightGrayColor),
|
||||||
|
"${getEmployeeSubordinates?.pAYROLLNAME}".toText16(isBold: true, color: MyColors.blackColor),
|
||||||
|
]),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,156 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:mohem_flutter_app/api/my_team/my_team_api_client.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/colors.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/utils.dart';
|
||||||
|
import 'package:mohem_flutter_app/config/routes.dart';
|
||||||
|
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
|
class TeamMembers extends StatefulWidget {
|
||||||
|
const TeamMembers({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_TeamMembersState createState() => _TeamMembersState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _TeamMembersState extends State<TeamMembers> {
|
||||||
|
String searchEmpEmail ="";
|
||||||
|
String searchEmpName ="";
|
||||||
|
String searchEmpNo = "";
|
||||||
|
String? empId;
|
||||||
|
List<GetEmployeeSubordinatesList> getEmployeeSubordinatesList = [];
|
||||||
|
GetEmployeeSubordinatesList? getEmployeeSubordinates;
|
||||||
|
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
employeeSubordinates();
|
||||||
|
setState(() {});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void employeeSubordinates() async {
|
||||||
|
try {
|
||||||
|
Utils.showLoading(context);
|
||||||
|
getEmployeeSubordinatesList = await MyTeamApiClient().getEmployeeSubordinates(searchEmpEmail.toString(), searchEmpName.toString(), searchEmpNo.toString());
|
||||||
|
getEmployeeSubordinatesList = await MyTeamApiClient().employeeSubordinates(searchEmpEmail.toString(), searchEmpName.toString(), searchEmpNo.toString(),getEmployeeSubordinates?.eMPLOYEENUMBER);
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
setState(() {});
|
||||||
|
} catch (ex) {
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
getEmployeeSubordinates ??= ModalRoute.of(context)?.settings.arguments as GetEmployeeSubordinatesList;
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBarWidget(
|
||||||
|
context,
|
||||||
|
title: "Team Members",
|
||||||
|
),
|
||||||
|
backgroundColor: MyColors.backgroundColor,
|
||||||
|
body: SingleChildScrollView(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: MediaQuery.of(context).size.width,
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
scrollDirection: Axis.vertical,
|
||||||
|
child: Column(
|
||||||
|
children: <Widget>[
|
||||||
|
if(getEmployeeSubordinatesList != 0)
|
||||||
|
ListView.builder(
|
||||||
|
scrollDirection: Axis.vertical,
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: ScrollPhysics(),
|
||||||
|
itemCount: getEmployeeSubordinatesList.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
var phoneNumber = Uri.parse('tel:${getEmployeeSubordinatesList[index].eMPLOYEENUMBER}');
|
||||||
|
return Container(
|
||||||
|
width: double.infinity,
|
||||||
|
margin: EdgeInsets.only(
|
||||||
|
top: 18,
|
||||||
|
left: 18,
|
||||||
|
right: 18,
|
||||||
|
),
|
||||||
|
padding: EdgeInsets.only(left: 10, right: 10, top: 10, bottom: 10),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 5,
|
||||||
|
blurRadius: 26,
|
||||||
|
offset: Offset(0, 3),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(10.0),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
CircleAvatar(
|
||||||
|
radius: 25,
|
||||||
|
backgroundImage: MemoryImage(Utils.getPostBytes(getEmployeeSubordinatesList[index].eMPLOYEEIMAGE)),
|
||||||
|
backgroundColor: Colors.black,
|
||||||
|
),
|
||||||
|
// MyTeamImage()
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
width: 10,
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
"Present".toText13(color: MyColors.greenColor),
|
||||||
|
"${getEmployeeSubordinatesList[index].eMPLOYEENAME}".toText16(color: MyColors.blackColor),
|
||||||
|
"${getEmployeeSubordinatesList[index].pOSITIONNAME}".toText13(color: MyColors.blackColor),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
IconButton(
|
||||||
|
onPressed: () {
|
||||||
|
launchUrl(phoneNumber);
|
||||||
|
},
|
||||||
|
icon: Icon(
|
||||||
|
Icons.whatsapp,
|
||||||
|
color: Colors.green,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.only(top:30),
|
||||||
|
child: "No Members".toText16(isBold: true, color: MyColors.black),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
// SizedBox(height: 20),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget MyTeamImage() => CircleAvatar(
|
||||||
|
radius: 30,
|
||||||
|
//backgroundImage: MemoryImage(Utils.getPostBytes(memberInformationList.eMPLOYEEIMAGE)),
|
||||||
|
backgroundColor: Colors.black,
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -0,0 +1,569 @@
|
|||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:mohem_flutter_app/api/monthly_attendance_api_client.dart';
|
||||||
|
import 'package:mohem_flutter_app/api/my_team/my_team_api_client.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/colors.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/utils.dart';
|
||||||
|
import 'package:mohem_flutter_app/config/routes.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/models/dashboard/get_attendance_tracking_list_model.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/models/my_team/get_employee_subordinates_list.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/circular_step_progress_bar.dart';
|
||||||
|
import 'package:month_picker_dialog/month_picker_dialog.dart';
|
||||||
|
import 'package:pie_chart/pie_chart.dart';
|
||||||
|
import 'package:syncfusion_flutter_calendar/calendar.dart';
|
||||||
|
|
||||||
|
class ViewAttendance extends StatefulWidget {
|
||||||
|
const ViewAttendance({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ViewAttendanceState createState() => _ViewAttendanceState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ViewAttendanceState extends State<ViewAttendance> {
|
||||||
|
bool isPresent = false;
|
||||||
|
bool isAbsent = false;
|
||||||
|
bool isMissing = false;
|
||||||
|
bool isOff = false;
|
||||||
|
DateTime date = DateTime.now();
|
||||||
|
late DateTime formattedDate;
|
||||||
|
var currentMonth = DateTime.now().month;
|
||||||
|
String searchMonth = getMonth(DateTime.now().month);
|
||||||
|
int searchYear = DateTime.now().year;
|
||||||
|
int? pRTPID;
|
||||||
|
|
||||||
|
String searchEmpEmail ="";
|
||||||
|
String searchEmpName ="";
|
||||||
|
String searchEmpNo = "";
|
||||||
|
String? empId;
|
||||||
|
List<GetEmployeeSubordinatesList> getEmployeeSubordinatesList = [];
|
||||||
|
List<GetDayHoursTypeDetailsList> getDayHoursTypeDetailsList = [];
|
||||||
|
GetTimeCardSummaryList? getTimeCardSummaryList;
|
||||||
|
GetAttendanceTracking? attendanceTracking;
|
||||||
|
GetEmployeeSubordinatesList? getEmployeeSubordinates;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
formattedDate = date;
|
||||||
|
callTimeCardAndHourDetails(date.day, searchMonth, searchYear);
|
||||||
|
// setState(() {});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void callTimeCardAndHourDetails(index, searchMonth, searchYear) async {
|
||||||
|
try {
|
||||||
|
Utils.showLoading(context);
|
||||||
|
getEmployeeSubordinatesList = await MyTeamApiClient().getEmployeeSubordinates(searchEmpEmail.toString(), searchEmpName.toString(), searchEmpNo.toString());
|
||||||
|
getTimeCardSummaryList = await MyTeamApiClient().getTimeCardSummary(searchMonth, searchYear,getEmployeeSubordinates?.eMPLOYEENUMBER);
|
||||||
|
getDayHoursTypeDetailsList = await MyTeamApiClient().getDayHoursTypeDetails(searchMonth, searchYear, getEmployeeSubordinates?.eMPLOYEENUMBER);
|
||||||
|
attendanceTracking = await MyTeamApiClient().getAttendanceTracking(getEmployeeSubordinates?.eMPLOYEENUMBER);
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
_calendarController.displayDate = formattedDate;
|
||||||
|
setState(() {});
|
||||||
|
} catch (ex) {
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
final CalendarController _calendarController = CalendarController();
|
||||||
|
final List<Color> _colorList = [Color(0xff2AB2AB), Color(0xff202529)];
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
getEmployeeSubordinates ??= ModalRoute.of(context)?.settings.arguments as GetEmployeeSubordinatesList;
|
||||||
|
Map<String, double> dataMap = {
|
||||||
|
"Present": getTimeCardSummaryList?.aTTENDEDDAYS != null ? getTimeCardSummaryList!.aTTENDEDDAYS!.toDouble() : 0,
|
||||||
|
"Absent": getTimeCardSummaryList?.aBSENTDAYS != null ? getTimeCardSummaryList!.aBSENTDAYS!.toDouble() : 0,
|
||||||
|
};
|
||||||
|
//if(getTimeCardSummaryList ==null)
|
||||||
|
// callTimeCardAndHourDetails(date.day, searchMonth, searchYear);
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBarWidget(
|
||||||
|
context,
|
||||||
|
title: "View Attendance",
|
||||||
|
),
|
||||||
|
backgroundColor: MyColors.backgroundColor,
|
||||||
|
body: SingleChildScrollView(
|
||||||
|
child: Column(children: [
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
margin: EdgeInsets.only(
|
||||||
|
top: 28,
|
||||||
|
left: 18,
|
||||||
|
right: 18,
|
||||||
|
),
|
||||||
|
padding: EdgeInsets.only(left: 16, right: 16, top: 16, bottom: 16),
|
||||||
|
// height: 120,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 5,
|
||||||
|
blurRadius: 26,
|
||||||
|
offset: Offset(0, 3),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(10.0),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
"Today's Attendance".toText20(color: MyColors.blackColor),
|
||||||
|
SizedBox(
|
||||||
|
height: 10,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
LocaleKeys.checkIn.tr().toText12(isBold: true, color: MyColors.greenColor),
|
||||||
|
"${(attendanceTracking?.pSwipeIn)?? "- - : - -"}".toText16(isBold: true, color: MyColors.grey57Color),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
LocaleKeys.checkOut.tr().toText12(isBold: true, color: MyColors.redColor),
|
||||||
|
"${(attendanceTracking?.pSwipeOut)?? "- - : - -"}".toText16(isBold: true, color: MyColors.grey57Color),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
LocaleKeys.lateIn.tr().toText12(isBold: true, color: MyColors.blackColor),
|
||||||
|
"${(attendanceTracking?.pLateInHours)?? "- - : - -"}".toText16(isBold: true, color: MyColors.grey57Color),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
margin: EdgeInsets.only(
|
||||||
|
top: 18,
|
||||||
|
left: 18,
|
||||||
|
right: 18,
|
||||||
|
bottom: 28,
|
||||||
|
),
|
||||||
|
padding: EdgeInsets.only(left: 16, right: 16, top: 16, bottom: 16),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 5,
|
||||||
|
blurRadius: 26,
|
||||||
|
offset: Offset(0, 3),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(10.0),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
//20.height,
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
"${DateFormat("MMMM-yyyy").format(formattedDate)}".toText16(color: MyColors.blackColor),
|
||||||
|
const Icon(Icons.keyboard_arrow_down_rounded, color: MyColors.blackColor),
|
||||||
|
],
|
||||||
|
).onPress(() async {
|
||||||
|
showMonthPicker(
|
||||||
|
context: context, //locale: EasyLocalization.of(context)?.locale,
|
||||||
|
initialDate: formattedDate,
|
||||||
|
firstDate: DateTime(searchYear - 2),
|
||||||
|
lastDate: DateTime.now(),
|
||||||
|
).then((selectedDate) {
|
||||||
|
if (selectedDate != null) {
|
||||||
|
searchMonth = getMonth(selectedDate.month);
|
||||||
|
searchYear = selectedDate.year;
|
||||||
|
formattedDate = selectedDate; //DateFormat('MMMM-yyyy').format(selectedDate);
|
||||||
|
// _calendarController.selectedDate = formattedDate;
|
||||||
|
callTimeCardAndHourDetails(selectedDate.day, searchMonth, searchYear);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
],
|
||||||
|
),
|
||||||
|
18.height,
|
||||||
|
AspectRatio(aspectRatio: 333 / 270, child: calendarWidget()),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: <Widget>[
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
LocaleKeys.attendance.tr().toText12(isBold: true, color: MyColors.grey3AColor),
|
||||||
|
LocaleKeys.stats.tr().toText24(isBold: true, color: MyColors.grey3AColor),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
30.height,
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
height: 8,
|
||||||
|
width: 8,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: MyColors.lightGreenColor,
|
||||||
|
borderRadius: BorderRadius.circular(100),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
margin: const EdgeInsets.only(left: 5, right: 5),
|
||||||
|
child: "${LocaleKeys.present.tr()} ${getTimeCardSummaryList?.aTTENDEDDAYS != null ? getTimeCardSummaryList?.aTTENDEDDAYS : 0}".toText16(isBold: true, color: MyColors.lightGreenColor),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
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: "${LocaleKeys.absent.tr()} ${getTimeCardSummaryList?.aBSENTDAYS != null ? getTimeCardSummaryList?.aBSENTDAYS : 0 }".toText16(
|
||||||
|
isBold: true,
|
||||||
|
color: MyColors.backgroundBlackColor,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
width: 20,
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
width: 170,
|
||||||
|
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: 21, right: 21, bottom: 21),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget calendarWidget() {
|
||||||
|
return SfCalendar(
|
||||||
|
view: CalendarView.month,
|
||||||
|
showDatePickerButton: false,
|
||||||
|
controller: _calendarController,
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
headerHeight: 0,
|
||||||
|
viewNavigationMode: ViewNavigationMode.none,
|
||||||
|
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()),
|
||||||
|
monthViewSettings: const MonthViewSettings(
|
||||||
|
dayFormat: 'EEE',
|
||||||
|
showTrailingAndLeadingDates: false,
|
||||||
|
showAgenda: false,
|
||||||
|
//navigationDirection: MonthNavigationDirection.vertical,
|
||||||
|
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: (build, details) {
|
||||||
|
if (details.date.month == formattedDate.month && details.date.year == formattedDate.year) {
|
||||||
|
int val = details.date.day;
|
||||||
|
//check day is off
|
||||||
|
if (getDayHoursTypeDetailsList.isNotEmpty) {
|
||||||
|
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(
|
||||||
|
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(
|
||||||
|
"$val",
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 13,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: MyColors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
//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(
|
||||||
|
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(
|
||||||
|
"$val",
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 13,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: MyColors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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(
|
||||||
|
"$val",
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 13,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: Color(0xff1F2428),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
// return Container(
|
||||||
|
// alignment: Alignment.center,
|
||||||
|
// child: Text("$val"),
|
||||||
|
// );
|
||||||
|
} else {
|
||||||
|
return const SizedBox();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
List<Meeting> _getDataSource() {
|
||||||
|
final List<Meeting> meetings = <Meeting>[];
|
||||||
|
return meetings;
|
||||||
|
}
|
||||||
|
|
||||||
|
static String 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";
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static String 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 'ديسمبر';
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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,197 @@
|
|||||||
|
|
||||||
|
import 'package:easy_localization/src/public_ext.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/svg.dart';
|
||||||
|
import 'package:mohem_flutter_app/api/worklist/worklist_api_client.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/colors.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/utils.dart';
|
||||||
|
import 'package:mohem_flutter_app/config/routes.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/models/generic_response_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_user_item_type_list.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/update_user_item_type_list.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/worklist/update_user_type_list.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
|
||||||
|
|
||||||
|
class WorklistSettings extends StatefulWidget {
|
||||||
|
const WorklistSettings({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_WorklistSettingsState createState() => _WorklistSettingsState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _WorklistSettingsState extends State<WorklistSettings> {
|
||||||
|
List<GetUserItemTypesList> getUserItemTypesList = [];
|
||||||
|
UpdateUserItemTypesList? updateUserItemTypesList;
|
||||||
|
|
||||||
|
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
userItemTypesList();
|
||||||
|
}
|
||||||
|
|
||||||
|
void userItemTypesList() async {
|
||||||
|
try {
|
||||||
|
Utils.showLoading(context);
|
||||||
|
getUserItemTypesList = await WorkListApiClient().getUserItemTypes();
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
setState(() {});
|
||||||
|
} catch (ex) {
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void updateUserItem() async {
|
||||||
|
try {
|
||||||
|
Utils.showLoading(context);
|
||||||
|
List<Map<String, dynamic>> itemList=[];
|
||||||
|
for (var element in getUserItemTypesList) {
|
||||||
|
|
||||||
|
itemList.add(UpdateUserTypesList(itemID: element.uSERITEMTYPEID, pITEMTYPE: element.iTEMTYPE,pFYAENABLEDFALG: element.fYAENABLEDFALG, pFYIENABLEDFALG: element.fYIENABLEDFLAG).toJson());
|
||||||
|
|
||||||
|
}
|
||||||
|
updateUserItemTypesList = await WorkListApiClient().updateUserItemTypes(itemList);
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Navigator.pushNamed(context, AppRoutes.workList);
|
||||||
|
setState(() {});
|
||||||
|
} catch (ex) {
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(backgroundColor: Colors.white,
|
||||||
|
appBar: AppBarWidget(
|
||||||
|
context,
|
||||||
|
title: "Worklist Settings",
|
||||||
|
),
|
||||||
|
body:Container(
|
||||||
|
margin: const EdgeInsets.only(top: 21, left: 21, right: 21),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
child: "Turn on notifications for".tr().toText22(color: MyColors.blackColor),
|
||||||
|
).paddingOnly(top: 10, bottom: 50),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
child: "Item Type".tr().toText14(color: MyColors.blackColor) ,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
child: "FYA".tr().toText14(color: MyColors.blackColor) ,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
child: "FYI".tr().toText14(color: MyColors.blackColor) ,
|
||||||
|
).paddingOnly(left: 30, right: 30),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Divider(
|
||||||
|
color: MyColors.greyA5Color,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: MediaQuery.of(context).size.width,
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
scrollDirection: Axis.vertical,
|
||||||
|
child: ListView.builder(
|
||||||
|
scrollDirection: Axis.vertical,
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: ScrollPhysics(),
|
||||||
|
itemCount: getUserItemTypesList == null ? 0 : getUserItemTypesList.length,
|
||||||
|
itemBuilder: (BuildContext context,int index) {
|
||||||
|
return Container(
|
||||||
|
child: Column(
|
||||||
|
children:[
|
||||||
|
|
||||||
|
customSwitch(getUserItemTypesList[index]),
|
||||||
|
]
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
),
|
||||||
|
)
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 30,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: MyColors.white,
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: DefaultButton(
|
||||||
|
LocaleKeys.submit.tr(), () async {
|
||||||
|
updateUserItem();
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.insideContainer,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Widget customSwitch(GetUserItemTypesList list){
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.only(top: 21),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Text(list.iTEMTYPE.toString(), style: TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
color: MyColors.blackColor
|
||||||
|
),),
|
||||||
|
const Spacer(),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
CupertinoSwitch(
|
||||||
|
trackColor: Colors.grey,
|
||||||
|
activeColor: MyColors.gradiantEndColor,
|
||||||
|
value: list?.fYAENABLEDFALG =='Y' ?true : false,
|
||||||
|
onChanged: (value){
|
||||||
|
setState(() {
|
||||||
|
list?.fYAENABLEDFALG = value == true ? 'Y': 'N';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
),
|
||||||
|
CupertinoSwitch(
|
||||||
|
trackColor: Colors.grey,
|
||||||
|
activeColor: MyColors.gradiantEndColor,
|
||||||
|
value: list?.fYIENABLEDFLAG =='Y' ?true : false,
|
||||||
|
onChanged: (value){
|
||||||
|
setState(() {
|
||||||
|
// list.isFYI = value;
|
||||||
|
list?.fYIENABLEDFLAG = value ==true ? 'Y': 'N';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue