/// <summary> /// creates a list of EmployeeSalaryOverview either for one Employee (employeeId != null) or for all Employees (employeeId == null) /// </summary> /// <param name="employeeId">null or employeeId</param> public CreateEmployeeSalaryOverview(int?employeeId, DateTime periodfrom, DateTime periodto) { employeeSalaryOverviews = new List <EmployeeSalaryOverview>(); employees = new List <EmployeesForTravelExpenses>(); this.periodfrom = periodfrom; this.periodto = periodto; if (employeeId == null) { employees = dbAccess.GetAllEmployees(); } else { employees.Add(dbAccess.FindEmployeeById((int)employeeId)); } foreach (EmployeesForTravelExpenses employee in employees) { if (string.IsNullOrEmpty(employee.FirstName)) { employee.FirstName = string.Empty; } EmployeeSalaryOverview e = GetEmployeeSalaryOverview(employee.Id); if (e.TotalSalary > 0) { employeeSalaryOverviews.Add(e); } } }
private bool IsActiveEmployee(EmployeeSalaryOverview overviewItem, int month) { decimal totalamount = 0m; switch (month) { case 1: totalamount = overviewItem.January + overviewItem.JanuaryBonus; break; case 2: totalamount = overviewItem.February + overviewItem.FebruaryBonus; break; case 3: totalamount = overviewItem.March + overviewItem.MarchBonus; break; case 4: totalamount = overviewItem.April + overviewItem.AprilBonus; break; case 5: totalamount = overviewItem.May + overviewItem.MayBonus; break; case 6: totalamount = overviewItem.June + overviewItem.JuneBonus; break; case 7: totalamount = overviewItem.July + overviewItem.JulyBonus; break; case 8: totalamount = overviewItem.August + overviewItem.AugustBonus; break; case 9: totalamount = overviewItem.September + overviewItem.SeptemberBonus; break; case 10: totalamount = overviewItem.October + overviewItem.OctoberBonus; break; case 11: totalamount = overviewItem.November + overviewItem.NovemberBonus; break; case 12: totalamount = overviewItem.December + overviewItem.DecemberBonus; break; default: totalamount = 0m; break; } return(totalamount > 0); }
private decimal SetMonthlySalary(EmployeeSalaryOverview overviewItem, int month) { switch (month) { case 1: return(overviewItem.January); case 2: return(overviewItem.February); case 3: return(overviewItem.March); case 4: return(overviewItem.April); case 5: return(overviewItem.May); case 6: return(overviewItem.June); case 7: return(overviewItem.July); case 8: return(overviewItem.August); case 9: return(overviewItem.September); case 10: return(overviewItem.October); case 11: return(overviewItem.November); case 12: return(overviewItem.December); default: return(0m); } }
private decimal SetBonusAmount(EmployeeSalaryOverview overviewItem, int month) { switch (month) { case 1: return(overviewItem.JanuaryBonus); case 2: return(overviewItem.FebruaryBonus); case 3: return(overviewItem.MarchBonus); case 4: return(overviewItem.AprilBonus); case 5: return(overviewItem.MayBonus); case 6: return(overviewItem.JuneBonus); case 7: return(overviewItem.JulyBonus); case 8: return(overviewItem.AugustBonus); case 9: return(overviewItem.SeptemberBonus); case 10: return(overviewItem.OctoberBonus); case 11: return(overviewItem.NovemberBonus); case 12: return(overviewItem.DecemberBonus); default: return(0m); } }
private void AddBonusPayment(EmployeeSalaryOverview overview, DateTime firstPayment, decimal monthlyAmount) { overview.TotalBonus += monthlyAmount; switch (firstPayment.Month) { case 1: { overview.JanuaryBonus += monthlyAmount; break; } case 2: { overview.FebruaryBonus += monthlyAmount; break; } case 3: { overview.MarchBonus += monthlyAmount; break; } case 4: { overview.AprilBonus += monthlyAmount; break; } case 5: { overview.MayBonus += monthlyAmount; break; } case 6: { overview.JuneBonus += monthlyAmount; break; } case 7: { overview.JulyBonus += monthlyAmount; break; } case 8: { overview.AugustBonus += monthlyAmount; break; } case 9: { overview.SeptemberBonus += monthlyAmount; break; } case 10: { overview.OctoberBonus += monthlyAmount; break; } case 11: { overview.NovemberBonus += monthlyAmount; break; } case 12: { overview.DecemberBonus += monthlyAmount; break; } } }
private void AddSalary(EmployeeSalaryOverview overview, DateTime firstPayment, DateTime?lastPayment, decimal monthlyAmount) { if (overview.EmployeeName.Contains("Achelrod")) { } decimal salaryAmount = 0m; DateTime paymentDate = firstPayment; if (paymentDate < periodfrom) { paymentDate = periodfrom; } DateTime endDate = periodto; if (lastPayment == null) { endDate = periodto; } else { if ((DateTime)lastPayment < endDate) { endDate = (DateTime)lastPayment; } } DateTime compareDate = dateFunctions.MonthEnd(endDate); bool isemployed = true; do { salaryAmount = monthlyAmount; if (paymentDate.Month == endDate.Month) { // das Gehalt muss eventuell gekürzt werden, wenn der Austritt / Unterbrechnung nicht am Monatsende erfolgt. if (lastPayment != null && lastPayment <= endDate) { DateTime monthEnd = dateFunctions.MonthEnd(new DateTime(paymentDate.Year, paymentDate.Month, 1)); DateTime helperDate = (DateTime)lastPayment; if (monthEnd.Day != helperDate.Day) { salaryAmount = Math.Round(monthlyAmount / 30 * helperDate.Day, 0); } } } if (paymentDate == firstPayment && paymentDate.Day != 1) { // das erste Gehalt muss gekürzt werden, wenn der Starttermin nicht auf den 1. eines Monats fällt int numberofDays = DateTime.DaysInMonth(firstPayment.Year, firstPayment.Month) - firstPayment.Day; salaryAmount = Math.Round(monthlyAmount / 30 * numberofDays); } overview.TotalSalary += salaryAmount; switch (paymentDate.Month) { case 1: { overview.January += salaryAmount; break; } case 2: { overview.February += salaryAmount; break; } case 3: { overview.March += salaryAmount; break; } case 4: { overview.April += salaryAmount; break; } case 5: { overview.May += salaryAmount; break; } case 6: { overview.June += salaryAmount; break; } case 7: { overview.July += salaryAmount; break; } case 8: { overview.August += salaryAmount; break; } case 9: { overview.September += salaryAmount; break; } case 10: { overview.October += salaryAmount; break; } case 11: { overview.November += salaryAmount; break; } case 12: { overview.December += salaryAmount; break; } } paymentDate = paymentDate.AddMonths(1); if (paymentDate > compareDate) { isemployed = false; } } while (isemployed); }
private EmployeeSalaryOverview GetEmployeeSalaryOverview(int id) { EmployeesForTravelExpenses employee = dbAccess.FindEmployeeById(id); List <EmployeePaymentDetail> details = dbAccess.GetAllPaymentDetails(id); QuantCoBranch branch = dbAccess.GetBranchById(employee.QuantCoBranchId); EmployeeSalaryOverview overview = new EmployeeSalaryOverview(); if (details.Count == 0) { return(overview); } overview.EmployeeForTravelExpensesId = id; overview.EmployeeName = employee.FullName; if (branch != null) { overview.OfficeLocation = branch.LocationName; overview.GermanPayroll = branch.GermanPayroll; } overview.CalenderYear = periodfrom.Year.ToString(); foreach (EmployeePaymentDetail detail in details) { if (detail.PaymentType == PaymentType.Bonus && detail.LastPayment == null) { detail.LastPayment = detail.FirstPayment; } else if (detail.LastPayment == null) { detail.LastPayment = periodto; //set LastPayment } if (detail.LastPayment < periodfrom) { continue; // payment was before reporting period } if (detail.FirstPayment > periodto) { continue; // payment is after reporting period } DateTime periodStart = periodfrom; if (detail.PaymentType == PaymentType.Bonus) { AddBonusPayment(overview, detail.FirstPayment, detail.MonthlyAmount); } else if (detail.PaymentType == PaymentType.Salary) { AddSalary(overview, detail.FirstPayment, detail.LastPayment, detail.MonthlyAmount); } else if (detail.PaymentType == PaymentType.CurrentSalary) { AddSalary(overview, detail.FirstPayment, detail.LastPayment, detail.MonthlyAmount); } else { } } return(overview); }