private void btnGeneratePayslips_Click(object sender, EventArgs e) { ServiceEmployee service = new ServiceEmployee(); this.Cursor = Cursors.WaitCursor; try { int idx = 1; headerGroupMain.ValuesSecondary.Heading = string.Format("Processing Payroll for {0}", dtSalaryMonth.Value.ToString("MMMM yyyy")); _EmployeesList = AppCommon.ConvertToBindingList <SelectListItem>((new ServiceAttendance()).GetDistinctEmployeesListForMonthInAttendance(dtSalaryMonth.Value)); headerGroupMain.ValuesSecondary.Heading = string.Format("Generating Payslip [{0}/{1}].Employees", idx, _EmployeesList.Count); foreach (SelectListItem emp in _EmployeesList) { //if (emp.ID == 8) // for debugging //{ // MessageBox.Show(emp.ID.ToString()); //} EmployeePayslipModel model = (new ServiceEmployee()).GetEmployeePayslipModel(emp.ID, dtSalaryMonth.Value); (new ServiceEmployee()).SaveEmployeePayslip(model); headerGroupMain.ValuesSecondary.Heading = string.Format("Processed [{0}/{1}].\n{2}", idx++, _EmployeesList.Count, emp.Description); Application.DoEvents(); } gridActiveEmployees.DataSource = _EmployeesList; FormatEmployeeGrid(); headerGroupMain.ValuesSecondary.Heading = string.Format("Select Employee to View/Modify Salary"); Application.DoEvents(); } catch (Exception ex) { string errMessage = ex.Message; if (ex.InnerException != null) { errMessage += string.Format("\n{0}", ex.InnerException.Message); } MessageBox.Show(errMessage, "PageGeneratePayslips::btnGeneratePayslips_Click", MessageBoxButtons.OK, MessageBoxIcon.Error); } this.Cursor = Cursors.Default; }
public void RecalculateEmployeeSalaryHeads(EmployeePayslipModel model) { try { int basicSalaryHeadID = _dbContext.APP_DEFAULTS.Where(X => X.ID == (int)APP_DEFAULT_VALUES.BasicSalaryHeadID).FirstOrDefault().DEFAULT_VALUE; int daSalaryHeadID = _dbContext.APP_DEFAULTS.Where(X => X.ID == (int)APP_DEFAULT_VALUES.daSalaryHeadID).FirstOrDefault().DEFAULT_VALUE; foreach (EmployeePayslipItemModel item in model.MonthlyAllounces) { if (item.SalaryHeadID == basicSalaryHeadID) { item.SalaryHeadAmount = model.BasicSalaryApplied; } switch (item.ChargesType) { case ITEM_CHARGE_TYPE.LUMPSUM: item.SalaryHeadAmount = item.SalaryHeadAmount; break; case ITEM_CHARGE_TYPE.PERCENTAGE: if (item.HeadForCalculation == SalaryHeadCalculatedOn.PERCENT_OF_BASIC) { item.SalaryHeadAmount = (model.BasicSalaryApplied * item.SalaryHeadValue) / 100; } if (item.HeadForCalculation == SalaryHeadCalculatedOn.PERCENT_OF_GROSS) { item.SalaryHeadAmount = (model.GrossSalaryAmount * item.SalaryHeadValue) / 100; } if (item.HeadForCalculation == SalaryHeadCalculatedOn.PERCENT_OF_BASIC_AND_DA) { decimal daAmount = model.MonthlyAllounces.Where(x => x.SalaryHeadID == daSalaryHeadID).FirstOrDefault().SalaryHeadAmount; item.SalaryHeadAmount = ((model.BasicSalaryApplied + daAmount) * item.SalaryHeadValue) / 100; } break; } } foreach (EmployeePayslipItemModel item in model.MonthlyDeducations) { if (item.SalaryHeadID == basicSalaryHeadID) { item.SalaryHeadAmount = model.BasicSalaryApplied; } switch (item.ChargesType) { case ITEM_CHARGE_TYPE.LUMPSUM: item.SalaryHeadAmount = item.SalaryHeadValue; break; case ITEM_CHARGE_TYPE.PERCENTAGE: if (item.HeadForCalculation == SalaryHeadCalculatedOn.PERCENT_OF_BASIC) { item.SalaryHeadAmount = (model.BasicSalaryApplied * item.SalaryHeadValue) / 100; } if (item.HeadForCalculation == SalaryHeadCalculatedOn.PERCENT_OF_GROSS) { item.SalaryHeadAmount = (model.GrossSalaryAmount * item.SalaryHeadValue) / 100; } if (item.HeadForCalculation == SalaryHeadCalculatedOn.PERCENT_OF_BASIC_AND_DA) { decimal daAmount = model.MonthlyAllounces.Where(x => x.SalaryHeadID == daSalaryHeadID).FirstOrDefault().SalaryHeadAmount; item.SalaryHeadAmount = ((model.BasicSalaryApplied + daAmount) * item.SalaryHeadValue) / 100; } break; } } } catch (Exception ex) { string errMessage = ex.Message; if (ex.InnerException != null) { errMessage += string.Format("\n{0}", ex.InnerException.Message); } MessageBox.Show(errMessage, "ServicePayRoll::RecalculateEmployeeSalaryHeads", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public DataTable GeneratePayrollDatatableForMonth(DateTime dateSalaryMonth) { // MONTH FORMAT -> JAN-2019 DataTable dtMain = new DataTable(); string strPayMonth = string.Format("{0}", dateSalaryMonth.ToString("MMM-yyyy")).ToUpper(); try { #region PREPARE DATATABLE COLUMNS // ADD COLUMNS TO THE DATATABLE dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_PAYSLIP_ID, DataType = typeof(int), DefaultValue = 0 }); dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_EMP_ID, DataType = typeof(int), DefaultValue = 0 }); dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_EMP_CODE, DataType = typeof(int), DefaultValue = 0 }); dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_EMP_NAME, DataType = typeof(string), DefaultValue = 0 }); dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_TOT_DAYS, DataType = typeof(int), DefaultValue = 0 }); dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_PRESENT_DAYS, DataType = typeof(int), DefaultValue = 0 }); dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_ABSENT_DAYS, DataType = typeof(int), DefaultValue = 0 }); dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_PAID_HOLIDAYS, DataType = typeof(int), DefaultValue = 0 }); dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_WEEKLY_OFF, DataType = typeof(int), DefaultValue = 0 }); dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_LEAVES, DataType = typeof(int), DefaultValue = 0 }); dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_PAID_DAYS, DataType = typeof(int), DefaultValue = 0 }); dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_TOT_EARNINGS, DataType = typeof(decimal), DefaultValue = 0 }); dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_TOT_DEDUCTIONS, DataType = typeof(decimal), DefaultValue = 0 }); dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_GROSS_SALARY, DataType = typeof(decimal), DefaultValue = 0 }); dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_NET_SALARY, DataType = typeof(decimal), DefaultValue = 0 }); dtMain.Columns.Add(new DataColumn() { ColumnName = payroll_col_IS_APPROVED, DataType = typeof(bool), DefaultValue = 0 }); int stIndex = dtMain.Columns[payroll_col_TOT_EARNINGS].Ordinal; // ADDEND COLUMNS OF EARNING TYPE int ALLOUNCE_CATAGAORY_ID = _dbContext.APP_DEFAULTS.Where(X => X.ID == (int)APP_DEFAULT_VALUES.SalaryHeadEARNINGType).FirstOrDefault().DEFAULT_VALUE; List <SelectListItem> lstAllounces = (new ServiceSalaryHead()).GetSelectListItemSalaryHeadsofType(ALLOUNCE_CATAGAORY_ID); foreach (SelectListItem item in lstAllounces) { dtMain.Columns.Add(new DataColumn() { ColumnName = string.Format("{0}", item.Description), DataType = typeof(decimal), DefaultValue = false }); dtMain.Columns[item.Description].SetOrdinal(stIndex++); } dtMain.Columns[payroll_col_TOT_EARNINGS].SetOrdinal(stIndex++); // ADDEND COLUMNS OF DEDUCTION TYPE stIndex = dtMain.Columns[payroll_col_TOT_DEDUCTIONS].Ordinal; int DEDUCTION_CATAGAORY_ID = _dbContext.APP_DEFAULTS.Where(X => X.ID == (int)APP_DEFAULT_VALUES.SalaryHeadDEDUCTIONType).FirstOrDefault().DEFAULT_VALUE; List <SelectListItem> lstDeductions = (new ServiceSalaryHead()).GetSelectListItemSalaryHeadsofType(DEDUCTION_CATAGAORY_ID); foreach (SelectListItem item in lstDeductions) { dtMain.Columns.Add(new DataColumn() { ColumnName = item.Description, DataType = typeof(decimal), DefaultValue = false }); dtMain.Columns[item.Description].SetOrdinal(stIndex++); } dtMain.Columns[payroll_col_TOT_DEDUCTIONS].SetOrdinal(stIndex++); dtMain.Columns[payroll_col_GROSS_SALARY].SetOrdinal(stIndex++); dtMain.Columns[payroll_col_NET_SALARY].SetOrdinal(stIndex++); #endregion List <TBL_MP_HR_PayslipMaster> lstPayroll = _dbContext.TBL_MP_HR_PayslipMaster.Where(x => x.PayslipMonth == strPayMonth).ToList(); foreach (TBL_MP_HR_PayslipMaster item in lstPayroll) { DataRow dtrow = dtMain.NewRow(); dtrow[payroll_col_PAYSLIP_ID] = item.PayslipID; dtrow[payroll_col_EMP_ID] = item.FK_EmployeeID; dtrow[payroll_col_EMP_NAME] = _dbContext.vEMPLOYEE_DESCRIPTION.Where(x => x.PK_EmployeeId == item.FK_EmployeeID).FirstOrDefault().EmployeeDescription; dtrow[payroll_col_IS_APPROVED] = item.IsApproved; #region POPULATE DATABALE BY GETTING ATTENDANCE INFO EmployeeAttendanceSummaryModel attendance = (new ServiceAttendance()).GetAttendanceSummaryOfEmployeeForMonth(item.FK_EmployeeID, dateSalaryMonth); if (attendance != null) { dtrow[payroll_col_TOT_DAYS] = attendance.TotalDays.Days; dtrow[payroll_col_PRESENT_DAYS] = attendance.Present.Days; dtrow[payroll_col_ABSENT_DAYS] = attendance.Absent.Days; dtrow[payroll_col_PAID_DAYS] = attendance.PaidDays.Days; dtrow[payroll_col_PAID_HOLIDAYS] = attendance.NonWorkingDays.Days; //dtrow[payroll_col_WEEKLY_OFF] = attendance.Present; dtrow[payroll_col_LEAVES] = attendance.TotalLeaves; } #endregion #region POPULATE DATATABLE WITH ALLOUNCES & DEDUCTIONS EmployeePayslipModel SALARY = (new ServiceEmployee()).GetEmployeePayslipModel(item.FK_EmployeeID, dateSalaryMonth); if (SALARY != null) { foreach (EmployeePayslipItemModel payslipItem in SALARY.MonthlyAllounces) { dtrow[payslipItem.SalaryHeadName] = payslipItem.SalaryHeadAmount; } foreach (EmployeePayslipItemModel payslipItem in SALARY.MonthlyDeducations) { dtrow[payslipItem.SalaryHeadName] = payslipItem.SalaryHeadAmount; } dtrow[payroll_col_TOT_EARNINGS] = SALARY.StandardAllouncesAmount + SALARY.AdditionalAllouncesAmount; dtrow[payroll_col_TOT_DEDUCTIONS] = SALARY.StandardDeducationAmount + SALARY.AdditionalDeducationAmount; dtrow[payroll_col_GROSS_SALARY] = SALARY.GrossSalaryAmount; dtrow[payroll_col_NET_SALARY] = SALARY.NetSalaryAmount; } #endregion dtMain.Rows.Add(dtrow); } } catch (Exception ex) { string errMessage = ex.Message; if (ex.InnerException != null) { errMessage += string.Format("\n{0}", ex.InnerException.Message); } MessageBox.Show(errMessage, "ServicePayRoll::GeneratePayrollDatatableForMonth", MessageBoxButtons.OK, MessageBoxIcon.Error); } return(dtMain); }