|
|
|
|
@ -4,6 +4,7 @@ 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';
|
|
|
|
|
@ -24,7 +25,8 @@ 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 {
|
|
|
|
|
AddLeaveBalanceScreen({Key? key}) : super(key: key);
|
|
|
|
|
final String selectedEmp;
|
|
|
|
|
AddLeaveBalanceScreen({this.selectedEmp = '', Key? key}) : super(key: key);
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
_AddLeaveBalanceScreenState createState() {
|
|
|
|
|
@ -42,19 +44,21 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> {
|
|
|
|
|
int? totalDays;
|
|
|
|
|
String comment = "";
|
|
|
|
|
ReplacementList? selectedReplacementEmployee;
|
|
|
|
|
dynamic dynamicParams;
|
|
|
|
|
String selectedEmp = "";
|
|
|
|
|
|
|
|
|
|
DateTime selectedDate = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day);
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void initState() {
|
|
|
|
|
super.initState();
|
|
|
|
|
getAbsenceAttendanceTypes();
|
|
|
|
|
//getAbsenceAttendanceTypes();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void getAbsenceAttendanceTypes() async {
|
|
|
|
|
try {
|
|
|
|
|
Utils.showLoading(context);
|
|
|
|
|
absenceList = await LeaveBalanceApiClient().getAbsenceAttendanceTypes();
|
|
|
|
|
absenceList = await LeaveBalanceApiClient().getAbsenceAttendanceTypes(empID: selectedEmp);
|
|
|
|
|
Utils.hideLoading(context);
|
|
|
|
|
setState(() {});
|
|
|
|
|
} catch (ex) {
|
|
|
|
|
@ -67,7 +71,7 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> {
|
|
|
|
|
try {
|
|
|
|
|
Utils.showLoading(context);
|
|
|
|
|
getabsenceDffStructureList.clear();
|
|
|
|
|
getabsenceDffStructureList = await LeaveBalanceApiClient().getAbsenceDffStructure(selectedAbsenceType!.dESCFLEXCONTEXTCODE!, "HR_LOA_SS", -999);
|
|
|
|
|
getabsenceDffStructureList = await LeaveBalanceApiClient().getAbsenceDffStructure(selectedAbsenceType!.dESCFLEXCONTEXTCODE!, "HR_LOA_SS", -999, empID: selectedEmp);
|
|
|
|
|
Utils.hideLoading(context);
|
|
|
|
|
setState(() {});
|
|
|
|
|
} catch (ex) {
|
|
|
|
|
@ -80,7 +84,7 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> {
|
|
|
|
|
try {
|
|
|
|
|
Utils.showLoading(context);
|
|
|
|
|
CalculateAbsenceDuration duration = await LeaveBalanceApiClient()
|
|
|
|
|
.calculateAbsenceDuration(selectedAbsenceType!.aBSENCEATTENDANCETYPEID!, Utils.getMonthNamedFormat(startDateTime!), Utils.getMonthNamedFormat(endDateTime!), -999);
|
|
|
|
|
.calculateAbsenceDuration(selectedAbsenceType!.aBSENCEATTENDANCETYPEID!, Utils.getMonthNamedFormat(startDateTime!), Utils.getMonthNamedFormat(endDateTime!), -999, empID: selectedEmp);
|
|
|
|
|
|
|
|
|
|
totalDays = duration.pABSENCEDAYS?.toInt();
|
|
|
|
|
Utils.hideLoading(context);
|
|
|
|
|
@ -91,58 +95,60 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void validateAbsenceTransaction() 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;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
void validateAbsenceTransaction(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;
|
|
|
|
|
}
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
} catch (ex) {
|
|
|
|
|
Utils.hideLoading(context);
|
|
|
|
|
Utils.handleException(ex, context, null);
|
|
|
|
|
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);
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
@ -152,6 +158,16 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> {
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
if (dynamicParams == null) {
|
|
|
|
|
dynamicParams = ModalRoute.of(context)!.settings.arguments;
|
|
|
|
|
if (dynamicParams.isNotEmpty) {
|
|
|
|
|
AppState().postParamsJson['P_SELECTED_EMPLOYEE_NUMBER'] = dynamicParams;
|
|
|
|
|
selectedEmp = dynamicParams;
|
|
|
|
|
getAbsenceAttendanceTypes();
|
|
|
|
|
} else {
|
|
|
|
|
getAbsenceAttendanceTypes();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return Scaffold(
|
|
|
|
|
backgroundColor: Colors.white,
|
|
|
|
|
appBar: AppBarWidget(
|
|
|
|
|
@ -269,7 +285,7 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> {
|
|
|
|
|
validateFieldData()
|
|
|
|
|
? null
|
|
|
|
|
: () {
|
|
|
|
|
validateAbsenceTransaction();
|
|
|
|
|
validateAbsenceTransaction(selectedEmp);
|
|
|
|
|
},
|
|
|
|
|
).insideContainer
|
|
|
|
|
],
|
|
|
|
|
|