|  |  |  | @ -4,7 +4,6 @@ import 'package:easy_localization/easy_localization.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:flutter/cupertino.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:flutter/material.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/api/leave_balance_api_client.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/app_state/app_state.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/classes/date_uitl.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/classes/utils.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/config/routes.dart'; | 
		
	
	
		
			
				
					|  |  |  | @ -25,8 +24,7 @@ import 'package:mohem_flutter_app/widgets/button/default_button.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | class AddLeaveBalanceScreen extends StatefulWidget { | 
		
	
		
			
				|  |  |  |  |   final String selectedEmp; | 
		
	
		
			
				|  |  |  |  |   AddLeaveBalanceScreen({this.selectedEmp = '', Key? key}) : super(key: key); | 
		
	
		
			
				|  |  |  |  |   AddLeaveBalanceScreen({Key? key}) : super(key: key); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   @override | 
		
	
		
			
				|  |  |  |  |   _AddLeaveBalanceScreenState createState() { | 
		
	
	
		
			
				
					|  |  |  | @ -44,15 +42,21 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> { | 
		
	
		
			
				|  |  |  |  |   int? totalDays; | 
		
	
		
			
				|  |  |  |  |   String comment = ""; | 
		
	
		
			
				|  |  |  |  |   ReplacementList? selectedReplacementEmployee; | 
		
	
		
			
				|  |  |  |  |   dynamic dynamicParams; | 
		
	
		
			
				|  |  |  |  |   String selectedEmp = ""; | 
		
	
		
			
				|  |  |  |  |   String? selectedEmp; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   DateTime selectedDate = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   @override | 
		
	
		
			
				|  |  |  |  |   void initState() { | 
		
	
		
			
				|  |  |  |  |     super.initState(); | 
		
	
		
			
				|  |  |  |  |     //getAbsenceAttendanceTypes(); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     WidgetsBinding.instance.addPostFrameCallback((timeStamp) { | 
		
	
		
			
				|  |  |  |  |       var dynamicParam = ModalRoute.of(context)!.settings.arguments; | 
		
	
		
			
				|  |  |  |  |       if (dynamicParam != null) { | 
		
	
		
			
				|  |  |  |  |         selectedEmp = dynamicParam.toString(); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |       getAbsenceAttendanceTypes(); | 
		
	
		
			
				|  |  |  |  |     }); | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   void getAbsenceAttendanceTypes() async { | 
		
	
	
		
			
				
					|  |  |  | @ -85,7 +89,6 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> { | 
		
	
		
			
				|  |  |  |  |       Utils.showLoading(context); | 
		
	
		
			
				|  |  |  |  |       CalculateAbsenceDuration duration = await LeaveBalanceApiClient() | 
		
	
		
			
				|  |  |  |  |           .calculateAbsenceDuration(selectedAbsenceType!.aBSENCEATTENDANCETYPEID!, Utils.getMonthNamedFormat(startDateTime!), Utils.getMonthNamedFormat(endDateTime!), -999, empID: selectedEmp); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       totalDays = duration.pABSENCEDAYS?.toInt(); | 
		
	
		
			
				|  |  |  |  |       Utils.hideLoading(context); | 
		
	
		
			
				|  |  |  |  |       setState(() {}); | 
		
	
	
		
			
				
					|  |  |  | @ -95,56 +98,56 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> { | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   void validateAbsenceTransaction(selectedID) async { | 
		
	
		
			
				|  |  |  |  |   void validateAbsenceTransaction(String? selectedID) async { | 
		
	
		
			
				|  |  |  |  |     try { | 
		
	
		
			
				|  |  |  |  |     Utils.showLoading(context); | 
		
	
		
			
				|  |  |  |  |     Map<String, String?> dffDataMap = {}; | 
		
	
		
			
				|  |  |  |  |     for (int i = 1; i <= 20; i++) { | 
		
	
		
			
				|  |  |  |  |       dffDataMap["P_ATTRIBUTE$i"] = null; | 
		
	
		
			
				|  |  |  |  |       for (int dffIndex = 0; dffIndex < getabsenceDffStructureList.length; dffIndex++) { | 
		
	
		
			
				|  |  |  |  |         if ("ATTRIBUTE$i" == getabsenceDffStructureList[dffIndex].aPPLICATIONCOLUMNNAME) { | 
		
	
		
			
				|  |  |  |  |           if (getabsenceDffStructureList[dffIndex].fORMATTYPE == "X") { | 
		
	
		
			
				|  |  |  |  |             dffDataMap["P_ATTRIBUTE$i"] = | 
		
	
		
			
				|  |  |  |  |                 getabsenceDffStructureList[dffIndex].eSERVICESDV!.pIDCOLUMNNAME != null ? Utils.formatDate(getabsenceDffStructureList[dffIndex].eSERVICESDV!.pIDCOLUMNNAME!) : ""; | 
		
	
		
			
				|  |  |  |  |           } else { | 
		
	
		
			
				|  |  |  |  |             dffDataMap["P_ATTRIBUTE$i"] = getabsenceDffStructureList[dffIndex].eSERVICESDV?.pIDCOLUMNNAME; | 
		
	
		
			
				|  |  |  |  |       Utils.showLoading(context); | 
		
	
		
			
				|  |  |  |  |       Map<String, String?> dffDataMap = {}; | 
		
	
		
			
				|  |  |  |  |       for (int i = 1; i <= 20; i++) { | 
		
	
		
			
				|  |  |  |  |         dffDataMap["P_ATTRIBUTE$i"] = null; | 
		
	
		
			
				|  |  |  |  |         for (int dffIndex = 0; dffIndex < getabsenceDffStructureList.length; dffIndex++) { | 
		
	
		
			
				|  |  |  |  |           if ("ATTRIBUTE$i" == getabsenceDffStructureList[dffIndex].aPPLICATIONCOLUMNNAME) { | 
		
	
		
			
				|  |  |  |  |             if (getabsenceDffStructureList[dffIndex].fORMATTYPE == "X") { | 
		
	
		
			
				|  |  |  |  |               dffDataMap["P_ATTRIBUTE$i"] = | 
		
	
		
			
				|  |  |  |  |                   getabsenceDffStructureList[dffIndex].eSERVICESDV!.pIDCOLUMNNAME != null ? Utils.formatDate(getabsenceDffStructureList[dffIndex].eSERVICESDV!.pIDCOLUMNNAME!) : ""; | 
		
	
		
			
				|  |  |  |  |             } else { | 
		
	
		
			
				|  |  |  |  |               dffDataMap["P_ATTRIBUTE$i"] = getabsenceDffStructureList[dffIndex].eSERVICESDV?.pIDCOLUMNNAME; | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |             break; | 
		
	
		
			
				|  |  |  |  |           } | 
		
	
		
			
				|  |  |  |  |           break; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     await LeaveBalanceApiClient().validateAbsenceTransaction( | 
		
	
		
			
				|  |  |  |  |         selectedAbsenceType!.dESCFLEXCONTEXTCODE!, | 
		
	
		
			
				|  |  |  |  |         "HR_LOA_SS", | 
		
	
		
			
				|  |  |  |  |         selectedAbsenceType!.aBSENCEATTENDANCETYPEID!, | 
		
	
		
			
				|  |  |  |  |         selectedReplacementEmployee != null ? selectedReplacementEmployee!.userName! : "", | 
		
	
		
			
				|  |  |  |  |         DateUtil.getFormattedDate(startDateTime!, "MM/dd/yyyy"), | 
		
	
		
			
				|  |  |  |  |         DateUtil.getFormattedDate(endDateTime!, "MM/dd/yyyy"), | 
		
	
		
			
				|  |  |  |  |         -999, | 
		
	
		
			
				|  |  |  |  |         dffDataMap, | 
		
	
		
			
				|  |  |  |  |         comments: comment, | 
		
	
		
			
				|  |  |  |  |         empID: selectedEmp); | 
		
	
		
			
				|  |  |  |  |       await LeaveBalanceApiClient().validateAbsenceTransaction( | 
		
	
		
			
				|  |  |  |  |           selectedAbsenceType!.dESCFLEXCONTEXTCODE!, | 
		
	
		
			
				|  |  |  |  |           "HR_LOA_SS", | 
		
	
		
			
				|  |  |  |  |           selectedAbsenceType!.aBSENCEATTENDANCETYPEID!, | 
		
	
		
			
				|  |  |  |  |           selectedReplacementEmployee != null ? selectedReplacementEmployee!.userName! : "", | 
		
	
		
			
				|  |  |  |  |           DateUtil.getFormattedDate(startDateTime!, "MM/dd/yyyy"), | 
		
	
		
			
				|  |  |  |  |           DateUtil.getFormattedDate(endDateTime!, "MM/dd/yyyy"), | 
		
	
		
			
				|  |  |  |  |           -999, | 
		
	
		
			
				|  |  |  |  |           dffDataMap, | 
		
	
		
			
				|  |  |  |  |           comments: comment, | 
		
	
		
			
				|  |  |  |  |           empID: selectedID); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     SumbitAbsenceTransactionList submit = await LeaveBalanceApiClient().submitAbsenceTransaction( | 
		
	
		
			
				|  |  |  |  |         selectedAbsenceType!.dESCFLEXCONTEXTCODE!, | 
		
	
		
			
				|  |  |  |  |         "HR_LOA_SS", | 
		
	
		
			
				|  |  |  |  |         selectedAbsenceType!.aBSENCEATTENDANCETYPEID!, | 
		
	
		
			
				|  |  |  |  |         selectedReplacementEmployee != null ? selectedReplacementEmployee!.userName! : "", | 
		
	
		
			
				|  |  |  |  |         DateUtil.getFormattedDate(startDateTime!, "MM/dd/yyyy"), | 
		
	
		
			
				|  |  |  |  |         DateUtil.getFormattedDate(endDateTime!, "MM/dd/yyyy"), | 
		
	
		
			
				|  |  |  |  |         -999, | 
		
	
		
			
				|  |  |  |  |         dffDataMap, | 
		
	
		
			
				|  |  |  |  |         comments: comment, | 
		
	
		
			
				|  |  |  |  |         empID: selectedEmp); | 
		
	
		
			
				|  |  |  |  |       SumbitAbsenceTransactionList submit = await LeaveBalanceApiClient().submitAbsenceTransaction( | 
		
	
		
			
				|  |  |  |  |           selectedAbsenceType!.dESCFLEXCONTEXTCODE!, | 
		
	
		
			
				|  |  |  |  |           "HR_LOA_SS", | 
		
	
		
			
				|  |  |  |  |           selectedAbsenceType!.aBSENCEATTENDANCETYPEID!, | 
		
	
		
			
				|  |  |  |  |           selectedReplacementEmployee != null ? selectedReplacementEmployee!.userName! : "", | 
		
	
		
			
				|  |  |  |  |           DateUtil.getFormattedDate(startDateTime!, "MM/dd/yyyy"), | 
		
	
		
			
				|  |  |  |  |           DateUtil.getFormattedDate(endDateTime!, "MM/dd/yyyy"), | 
		
	
		
			
				|  |  |  |  |           -999, | 
		
	
		
			
				|  |  |  |  |           dffDataMap, | 
		
	
		
			
				|  |  |  |  |           comments: comment, | 
		
	
		
			
				|  |  |  |  |           empID: selectedID); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     Utils.hideLoading(context); | 
		
	
		
			
				|  |  |  |  |       Utils.hideLoading(context); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     var res = await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), submit.pTRANSACTIONID!, "", "add_leave_balance")); | 
		
	
		
			
				|  |  |  |  |     if (res != null && res == true) { | 
		
	
		
			
				|  |  |  |  |       Utils.showLoading(context); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     await LeaveBalanceApiClient().cancelHrTransaction(submit.pTRANSACTIONID!); | 
		
	
		
			
				|  |  |  |  |     Utils.hideLoading(context); | 
		
	
		
			
				|  |  |  |  |       var res = await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), submit.pTRANSACTIONID!, "", "add_leave_balance")); | 
		
	
		
			
				|  |  |  |  |       if (res != null && res == true) { | 
		
	
		
			
				|  |  |  |  |         Utils.showLoading(context); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |       await LeaveBalanceApiClient().cancelHrTransaction(submit.pTRANSACTIONID!); | 
		
	
		
			
				|  |  |  |  |       Utils.hideLoading(context); | 
		
	
		
			
				|  |  |  |  |     } catch (ex) { | 
		
	
		
			
				|  |  |  |  |       Utils.hideLoading(context); | 
		
	
		
			
				|  |  |  |  |       Utils.handleException(ex, context, null); | 
		
	
	
		
			
				
					|  |  |  | @ -158,16 +161,6 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   @override | 
		
	
		
			
				|  |  |  |  |   Widget build(BuildContext context) { | 
		
	
		
			
				|  |  |  |  |     if (dynamicParams == null) { | 
		
	
		
			
				|  |  |  |  |       dynamicParams = ModalRoute.of(context)!.settings.arguments; | 
		
	
		
			
				|  |  |  |  |       if (dynamicParams!= null && dynamicParams.isNotEmpty) { | 
		
	
		
			
				|  |  |  |  |         AppState().postParamsJson['P_SELECTED_EMPLOYEE_NUMBER'] = dynamicParams; | 
		
	
		
			
				|  |  |  |  |         selectedEmp = dynamicParams; | 
		
	
		
			
				|  |  |  |  |         getAbsenceAttendanceTypes(); | 
		
	
		
			
				|  |  |  |  |       } else { | 
		
	
		
			
				|  |  |  |  |         getAbsenceAttendanceTypes(); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return Scaffold( | 
		
	
		
			
				|  |  |  |  |       backgroundColor: Colors.white, | 
		
	
		
			
				|  |  |  |  |       appBar: AppBarWidget( | 
		
	
	
		
			
				
					|  |  |  | @ -187,13 +180,13 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> { | 
		
	
		
			
				|  |  |  |  |                   isPopup: true, | 
		
	
		
			
				|  |  |  |  |                 ), | 
		
	
		
			
				|  |  |  |  |                 itemBuilder: (_) => <PopupMenuItem<int>>[ | 
		
	
		
			
				|  |  |  |  |                   for (int i = 0; i < absenceList.length; i++) PopupMenuItem<int>(value: i, child: Text(absenceList[i].aBSENCEATTENDANCETYPENAME!)), | 
		
	
		
			
				|  |  |  |  |                   for (int i = 0; i < (absenceList?.length ?? 0); i++) PopupMenuItem<int>(value: i, child: Text(absenceList![i].aBSENCEATTENDANCETYPENAME!)), | 
		
	
		
			
				|  |  |  |  |                 ], | 
		
	
		
			
				|  |  |  |  |                 onSelected: (int popupIndex) { | 
		
	
		
			
				|  |  |  |  |                   if (selectedAbsenceType == absenceList[popupIndex]) { | 
		
	
		
			
				|  |  |  |  |                   if (selectedAbsenceType == absenceList![popupIndex]) { | 
		
	
		
			
				|  |  |  |  |                     return; | 
		
	
		
			
				|  |  |  |  |                   } | 
		
	
		
			
				|  |  |  |  |                   selectedAbsenceType = absenceList[popupIndex]; | 
		
	
		
			
				|  |  |  |  |                   selectedAbsenceType = absenceList![popupIndex]; | 
		
	
		
			
				|  |  |  |  |                   setState(() {}); | 
		
	
		
			
				|  |  |  |  |                   getAbsenceDffStructure(); | 
		
	
		
			
				|  |  |  |  |                 }, | 
		
	
	
		
			
				
					|  |  |  | @ -285,7 +278,7 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> { | 
		
	
		
			
				|  |  |  |  |             validateFieldData() | 
		
	
		
			
				|  |  |  |  |                 ? null | 
		
	
		
			
				|  |  |  |  |                 : () { | 
		
	
		
			
				|  |  |  |  |                     validateAbsenceTransaction(selectedEmp); | 
		
	
		
			
				|  |  |  |  |                     validateAbsenceTransaction(selectedEmp!.isEmpty ? null : selectedEmp); | 
		
	
		
			
				|  |  |  |  |                   }, | 
		
	
		
			
				|  |  |  |  |           ).insideContainer | 
		
	
		
			
				|  |  |  |  |         ], | 
		
	
	
		
			
				
					|  |  |  | 
 |