public void UpdateLeaveBalance(LeaveApplication lvappl, int PayrollPeriodID) { try { float LvDays = (float)lvappl.NoOfDays; List <LeaveQuotaYear> _lvConsumed = new List <LeaveQuotaYear>(); Expression <Func <LeaveQuotaYear, bool> > SpecificEntries = aa => aa.EmployeeID == lvappl.EmpID && aa.FinancialYearID == lvappl.FinancialYearID && aa.LeaveTypeID == lvappl.LeaveTypeID; _lvConsumed = LeaveQuotaYearRepo.FindBy(SpecificEntries); if (_lvConsumed.Count > 0) { if (lvappl.LeaveTypeID == 1) { if (lvappl.IsAccum == true) { _lvConsumed.FirstOrDefault().GrandRemaining = (float)(_lvConsumed.FirstOrDefault().GrandRemaining + LvDays); _lvConsumed.FirstOrDefault().CFRemaining = (float)(_lvConsumed.FirstOrDefault().CFRemaining + LvDays); } else { if (_lvConsumed.FirstOrDefault().YearlyRemaining >= 0) { _lvConsumed.FirstOrDefault().YearlyRemaining = (float)(_lvConsumed.FirstOrDefault().YearlyRemaining + LvDays); } _lvConsumed.FirstOrDefault().GrandRemaining = (float)(_lvConsumed.FirstOrDefault().GrandRemaining + LvDays); if (_lvConsumed.FirstOrDefault().YearlyRemaining > _lvConsumed.FirstOrDefault().YearlyTotal) { _lvConsumed.FirstOrDefault().CFRemaining = _lvConsumed.FirstOrDefault().YearlyRemaining - _lvConsumed.FirstOrDefault().YearlyTotal; _lvConsumed.FirstOrDefault().YearlyRemaining = _lvConsumed.FirstOrDefault().YearlyTotal; } } } else if (lvappl.LeaveTypeID == 4) { if (_lvConsumed.FirstOrDefault().YearlyRemaining > 0) { _lvConsumed.FirstOrDefault().YearlyRemaining = (float)(_lvConsumed.FirstOrDefault().YearlyRemaining + LvDays); } _lvConsumed.FirstOrDefault().GrandRemaining = (float)(_lvConsumed.FirstOrDefault().GrandRemaining + LvDays); // Add leave from LeaveCPLBalance Expression <Func <LeaveCPLEmpBalance, bool> > SpecificEntrie3 = aa => aa.EmployeeID == lvappl.EmpID && aa.IsExpire == false; List <LeaveCPLEmpBalance> dbLeaveCPLBalances = LeaveCPLEmpBalanceRepo.FindBy(SpecificEntrie3).OrderBy(aa => aa.PLeaveCPLEmpBalanceID).ToList(); if (dbLeaveCPLBalances.Count == 1) { LeaveCPLEmpBalance dbLeaveCPLBalance = dbLeaveCPLBalances.First(); dbLeaveCPLBalance.Used = (float)(dbLeaveCPLBalance.Used - lvappl.NoOfDays); dbLeaveCPLBalance.RemainingDays = (float)(dbLeaveCPLBalance.RemainingDays + lvappl.NoOfDays); LeaveCPLEmpBalanceRepo.Edit(dbLeaveCPLBalance); LeaveCPLEmpBalanceRepo.Save(); } else if (dbLeaveCPLBalances.Count > 1) { double?NoOfdays = lvappl.NoOfDays; foreach (var dbLeaveCPLBalance in dbLeaveCPLBalances.OrderByDescending(aa => aa.PLeaveCPLEmpBalanceID).ToList()) { if (NoOfdays > 0 && dbLeaveCPLBalance.Used > 0) { dbLeaveCPLBalance.Used = (float)(dbLeaveCPLBalance.Used - NoOfdays); dbLeaveCPLBalance.RemainingDays = (float)(dbLeaveCPLBalance.RemainingDays + NoOfdays); if (dbLeaveCPLBalance.Used < 0) { NoOfdays = -1.0 * dbLeaveCPLBalance.Used; dbLeaveCPLBalance.Used = 0; dbLeaveCPLBalance.RemainingDays = dbLeaveCPLBalance.TotalDays; } else { NoOfdays = 0; } LeaveCPLEmpBalanceRepo.Edit(dbLeaveCPLBalance); LeaveCPLEmpBalanceRepo.Save(); } } } } else { if (_lvConsumed.FirstOrDefault().YearlyRemaining > 0) { _lvConsumed.FirstOrDefault().YearlyRemaining = (float)(_lvConsumed.FirstOrDefault().YearlyRemaining + LvDays); } _lvConsumed.FirstOrDefault().GrandRemaining = (float)(_lvConsumed.FirstOrDefault().GrandRemaining + LvDays); } LeaveQuotaYearRepo.Edit(_lvConsumed.FirstOrDefault()); LeaveQuotaYearRepo.Save(); LeaveQuotaPeriod atLQp = new LeaveQuotaPeriod(); Expression <Func <LeaveQuotaPeriod, bool> > SpecificEntrie2 = aa => aa.EmployeeID == lvappl.EmpID && aa.PayrollPeriodID == PayrollPeriodID && aa.LeaveTypeID == lvappl.LeaveTypeID; if (LeaveQuotaPeriodRepo.FindBy(SpecificEntrie2).Count() > 0) { atLQp = LeaveQuotaPeriodRepo.FindBy(SpecificEntrie2).First(); } atLQp.ConsumedDays = atLQp.ConsumedDays - lvappl.NoOfDays; atLQp.RemainingDays = atLQp.StartNoOfDays - atLQp.ConsumedDays; LeaveQuotaPeriodRepo.Edit(atLQp); LeaveQuotaPeriodRepo.Save(); } } catch (Exception) { } }
/// <summary> /// Adding Balace in the leave Quota Year Table from the application /// </summary> /// <param name="_lvConsumed"></param> /// <param name="lvappl"></param> /// <param name="atLQP"></param> /// <returns></returns> public static LeaveQuotaPeriod AddBalancceMonthQuota(List <LeaveQuotaYear> _lvConsumed, LeaveApplication lvappl, LeaveQuotaPeriod atLQP) { atLQP.ConsumedDays = atLQP.ConsumedDays + lvappl.NoOfDays; atLQP.RemainingDays = atLQP.StartNoOfDays - atLQP.ConsumedDays; return(atLQP); }
public bool BalanceLeaves(LeaveApplication lvappl, LeaveType LeaveType, int PayrollPeriodID) { bool isAccLeave = false; List <LeaveQuotaYear> _lvConsumedYear = new List <LeaveQuotaYear>(); Expression <Func <LeaveQuotaYear, bool> > SpecificEntries = aa => aa.EmployeeID == lvappl.EmpID && aa.FinancialYearID == lvappl.FinancialYearID && aa.LeaveTypeID == lvappl.LeaveTypeID; _lvConsumedYear = LeaveQuotaYearRepo.FindBy(SpecificEntries); float _NoOfDays = lvappl.NoOfDays; if (_lvConsumedYear.Count > 0) { // For Yearly Leave Quota if (lvappl.LeaveTypeID == 1) // AL { if (lvappl.IsAccum == true) { _lvConsumedYear.FirstOrDefault().CFRemaining = (float)(_lvConsumedYear.FirstOrDefault().CFRemaining - _NoOfDays); _lvConsumedYear.FirstOrDefault().GrandRemaining = (float)(_lvConsumedYear.FirstOrDefault().GrandRemaining - _NoOfDays); if (_lvConsumedYear.FirstOrDefault().CFRemaining < 0) { _lvConsumedYear.FirstOrDefault().YearlyRemaining = (float)(_lvConsumedYear.FirstOrDefault().YearlyRemaining + _lvConsumedYear.FirstOrDefault().CFRemaining); //_lvConsumedYear.FirstOrDefault().GrandRemaining = (float)(_lvConsumedYear.FirstOrDefault().GrandRemaining + _lvConsumedYear.FirstOrDefault().CFRemaining); _lvConsumedYear.FirstOrDefault().CFRemaining = 0; } } else { if (_lvConsumedYear.FirstOrDefault().YearlyRemaining > 0) { _lvConsumedYear.FirstOrDefault().YearlyRemaining = (float)(_lvConsumedYear.FirstOrDefault().YearlyRemaining - _NoOfDays); } _lvConsumedYear.FirstOrDefault().GrandRemaining = (float)(_lvConsumedYear.FirstOrDefault().GrandRemaining - _NoOfDays); } } else if (lvappl.LeaveTypeID == 4) //CPL { if (_lvConsumedYear.FirstOrDefault().YearlyRemaining > 0) { _lvConsumedYear.FirstOrDefault().YearlyRemaining = (float)(_lvConsumedYear.FirstOrDefault().YearlyRemaining - _NoOfDays); } _lvConsumedYear.FirstOrDefault().GrandRemaining = (float)(_lvConsumedYear.FirstOrDefault().GrandRemaining - _NoOfDays); // Subtract leave from LeaveCPLBalance Expression <Func <LeaveCPLEmpBalance, bool> > SpecificEntrie3 = aa => aa.EmployeeID == lvappl.EmpID && aa.IsExpire == false && aa.RemainingDays > 0; List <LeaveCPLEmpBalance> dbLeaveCPLBalances = LeaveCPLEmpBalanceRepo.FindBy(SpecificEntrie3).OrderBy(aa => aa.PLeaveCPLEmpBalanceID).ToList(); if (dbLeaveCPLBalances.Count == 1) { LeaveCPLEmpBalance dbLeaveCPLBalance = dbLeaveCPLBalances.First(); dbLeaveCPLBalance.Used = (float)(dbLeaveCPLBalance.Used + _NoOfDays); dbLeaveCPLBalance.RemainingDays = (float)(dbLeaveCPLBalance.RemainingDays - _NoOfDays); LeaveCPLEmpBalanceRepo.Edit(dbLeaveCPLBalance); LeaveCPLEmpBalanceRepo.Save(); } else if (dbLeaveCPLBalances.Count > 1) { double?NoOfdays = _NoOfDays; foreach (var dbLeaveCPLBalance in dbLeaveCPLBalances) { if (dbLeaveCPLBalance.RemainingDays > 0 && NoOfdays > 0) { dbLeaveCPLBalance.Used = (float)(dbLeaveCPLBalance.Used + NoOfdays); dbLeaveCPLBalance.RemainingDays = (float)(dbLeaveCPLBalance.RemainingDays - NoOfdays); if (dbLeaveCPLBalance.RemainingDays < 0) { NoOfdays = -1.0 * dbLeaveCPLBalance.RemainingDays; dbLeaveCPLBalance.Used = (float)(dbLeaveCPLBalance.Used - NoOfdays); dbLeaveCPLBalance.RemainingDays = 0; } else { NoOfdays = 0; } LeaveCPLEmpBalanceRepo.Edit(dbLeaveCPLBalance); LeaveCPLEmpBalanceRepo.Save(); } } } } else // All others { if (_lvConsumedYear.FirstOrDefault().YearlyRemaining > 0) { _lvConsumedYear.FirstOrDefault().YearlyRemaining = (float)(_lvConsumedYear.FirstOrDefault().YearlyRemaining - _NoOfDays); } _lvConsumedYear.FirstOrDefault().GrandRemaining = (float)(_lvConsumedYear.FirstOrDefault().GrandRemaining - _NoOfDays); } LeaveQuotaYearRepo.Edit(_lvConsumedYear.First()); LeaveQuotaYearRepo.Save(); LeaveQuotaPeriod atLQp = new LeaveQuotaPeriod(); Expression <Func <LeaveQuotaPeriod, bool> > SpecificEntrie2 = aa => aa.EmployeeID == lvappl.EmpID && aa.PayrollPeriodID == PayrollPeriodID && aa.LeaveTypeID == lvappl.LeaveTypeID; if (LeaveQuotaPeriodRepo.FindBy(SpecificEntrie2).Count() > 0) { atLQp = LeaveQuotaPeriodRepo.FindBy(SpecificEntrie2).First(); } else { atLQp.EmployeeID = lvappl.EmpID; atLQp.LeaveTypeID = lvappl.LeaveTypeID; atLQp.PayrollPeriodID = PayrollPeriodID; atLQp.ConsumedDays = 0; atLQp.StartNoOfDays = _lvConsumedYear.FirstOrDefault().GrandRemaining + _NoOfDays; LeaveQuotaPeriodRepo.Add(atLQp); LeaveQuotaPeriodRepo.Save(); } atLQp = AssistantLeave.AddBalancceMonthQuota(_lvConsumedYear, lvappl, atLQp); LeaveQuotaPeriodRepo.Edit(atLQp); // Check for Post edit LeaveQuotaPeriodRepo.Save(); } return(isAccLeave); }