public void ComputeDepartment(Guid departmentID) { using (var context = new VnrHrmDataContext()) { var unitOfWork = (UnitOfWork)(new UnitOfWork(context)); var repoSal_SalaryDepartment = new CustomBaseRepository<Sal_SalaryDepartment>(unitOfWork); var repoSal_SalaryDepartmentItem = new CustomBaseRepository<Sal_SalaryDepartmentItem>(unitOfWork); var repoAtt_CutOffDuration = new CustomBaseRepository<Att_CutOffDurationEntity>(unitOfWork); Sal_SalaryDepartment item = new Sal_SalaryDepartment(); item = repoSal_SalaryDepartment.GetById(departmentID); //xóa các item nếu đã tính trước đó List<Sal_SalaryDepartmentItem> listDepartmentItem = new List<Sal_SalaryDepartmentItem>(); listDepartmentItem = repoSal_SalaryDepartmentItem.GetAll().Where(m => m.SalaryDepartmentID == departmentID).ToList(); repoSal_SalaryDepartmentItem.Delete(listDepartmentItem); unitOfWork.SaveChanges(); //nếu chọn theo cutoff thì lấy datefrom dateto của cutoff if (item.CutOffDurationID != null) { var cutoff= repoAtt_CutOffDuration.GetById((Guid)item.CutOffDurationID); item.MonthYear = cutoff.MonthYear; item.DateFrom = cutoff.DateStart; item.DateTo = cutoff.DateEnd; } Hashtable hasTable = new Hashtable(); List<Sal_SalaryDepartment> listSalaryDepartment = new List<Sal_SalaryDepartment>(); listSalaryDepartment.Add(item); ComputeSalaryDepartment(item.MonthYear, (DateTime)item.DateFrom, (DateTime)item.DateTo, listSalaryDepartment, ref hasTable); } }
public List<Sal_SalaryDepartmentItem> CalSalaryItemProfile(Sal_SalaryDepartment salDepartment, List<Att_AttendanceTableItem> lstAttItemPro, Hre_Profile pro, List<Sal_SalaryDepartmentItem> lstItemPro, DateTime dfrom, DateTime dto, DateTime monthYear) { List<Sal_SalaryDepartmentItem> lstItem = new List<Sal_SalaryDepartmentItem>(); List<Sal_SalaryDepartmentItem> lstDepItemPro = lstItemPro.Where(p => p.ProfileID == pro.ID).ToList(); Double ratePer = 0; //Lấy hệ số từ bảng Sal_SalaryDepartmentItem foreach (Sal_SalaryDepartmentItem rtDepItem in lstDepItemPro) { ratePer = rtDepItem.Rate != null ? rtDepItem.Rate : 0; Sal_SalaryDepartmentItem depItem = new Sal_SalaryDepartmentItem(); //depItem.Sal_SalaryDepartment = salDepartment; depItem.SalaryDepartmentID = salDepartment.ID; depItem.DateFrom = dfrom; depItem.DateTo = dto; depItem.ProfileID = pro.ID; depItem.Rate = ratePer; for (DateTime idx = dfrom; idx <= dto; idx = idx.AddDays(1)) { //(3.Use general: Insert chi tiết --> Gần Finished) depItem = SetItemSalDep(depItem, lstAttItemPro, idx); } lstItem.Add(depItem); } return lstItem; }
public List<Sal_SalaryDepartmentItem> CalSalaryLineItemProfile(Sal_SalaryDepartment salDepartment, List<Att_AttendanceTableItem> lstAttItemPro, Hre_Profile pro, List<Sal_BasicSalary> lstBasicSalPro, List<Att_Roster> lstRosterPro, DateTime dfrom, DateTime dto, DateTime monthYear, Sal_SalaryDepartmentItem itemProAdd) { List<Sal_SalaryDepartmentItem> lstItem = new List<Sal_SalaryDepartmentItem>(); Double ratePer = 0; //Lấy hệ số trong lương cơ bản Sal_BasicSalary basSal = new Sal_BasicSalary(); if (lstBasicSalPro.Count == 2) basSal = lstBasicSalPro[1]; else if (lstBasicSalPro.Count == 1) basSal = lstBasicSalPro[0]; if (ratePer != basSal.PersonalRate) { ratePer = basSal.PersonalRate != null ? basSal.PersonalRate.Value : 0; Sal_SalaryDepartmentItem depItem = null; string stFIX = EnumDropDown.StatusLoadEnumSalDepartItem.E_FIX.ToString(); string stEDIT_FIX = EnumDropDown.StatusLoadEnumSalDepartItem.E_EDIT_FIX.ToString(); if (itemProAdd != null && itemProAdd.ID.ToString() != Guid.Empty.ToString() && itemProAdd.Status != stFIX && itemProAdd.Status != stEDIT_FIX) { depItem = itemProAdd; } else { depItem = new Sal_SalaryDepartmentItem(); } depItem.Sal_SalaryDepartment = salDepartment; depItem.DateFrom = dfrom; depItem.DateTo = dto; depItem.ProfileID = pro.ID; depItem.Rate = ratePer; if (itemProAdd != null) depItem.Status = itemProAdd.Status; for (DateTime idx = dfrom; idx <= dto; idx = idx.AddDays(1)) { //(3.Use general: Insert chi tiết --> Gần Finished) depItem = SetItemSalDep(depItem, lstAttItemPro, idx); } //AppConfig var service = new Sys_AttOvertimePermitConfigServices(); var value56 = service.GetConfigValue<string>(AppConfig.HRM_SAL_CONFIG_VALUE56); var value57 = service.GetConfigValue<string>(AppConfig.HRM_SAL_CONFIG_VALUE57); var value58 = service.GetConfigValue<string>(AppConfig.HRM_SAL_CONFIG_VALUE58); //Nếu có check áp dụng trừ số giờ cho nữ string gender = EnumDropDown.Gender.E_FEMALE.ToString(); if (value56.ToLower() == true.ToString().ToLower() && pro.Gender == gender) { if (!value57.IsNullOrEmpty() && !value58.IsNullOrEmpty()) { double hoursub = Convert.ToDouble(value57); double daywork = Convert.ToDouble(value58); if (hoursub > 0 && daywork > 0) { var lstAttItem = lstAttItemPro.Where(p => p.IsHavingPregTreatment == true).ToList(); //Nếu nhân viên không có thai sản if (lstAttItem.Count <= 0) { if (depItem.PaidWorkHours / 8 > daywork) depItem.PaidWorkHours = depItem.PaidWorkHours - hoursub; } } } } lstItem.Add(depItem); } return lstItem; }
public List<Sal_SalaryDepartmentItem> ComputeAmountPro(List<Sal_SalaryDepartmentItem> lstDepItem, Sal_SalaryDepartment salDep) { //Hệ số trung bình và tổng giờ công tất cả NV (Sum of Tổng công của từng NV * hệ số cá nhân ) Double avgSalOrg = 0; Double totalHoursRateOrg = 0; //AppConfig var service = new Sys_AttOvertimePermitConfigServices(); var value52 = service.GetConfigValue<string>(AppConfig.HRM_SAL_CONFIG_VALUE54); var value54 = service.GetConfigValue<string>(AppConfig.HRM_SAL_CONFIG_VALUE54); //Tính tổng công sản phẩm [Tổng Công Sản Phẩm = Công Đi làm + OT1 + OT2 + OT3 + OT4 + OT5 + OT6 (với: OT chưa quy đổi)] #region " Lấy tổng công" if (value52 == AppConfig.E_RATE_BY_ATUALARISING.ToString()) { for (int i = 0; i < lstDepItem.Count(); i++) { Sal_SalaryDepartmentItem item = lstDepItem[i]; Double totalOT = 0; if (item.Overtime1TypeID != null) { Double hours = item.Overtime1Hours != null ? item.Overtime1Hours.Value : 0; totalOT += hours; Double rate = item.Cat_OvertimeType != null ? item.Cat_OvertimeType.Rate : 0; item.udOT1 = hours * rate; //Lấy OT1 quy đổi để sử dụng tính số tiền OT (OT1AmountSalary) } if (item.Overtime2TypeID != null) { Double hours = item.Overtime2Hours != null ? item.Overtime2Hours.Value : 0; totalOT += hours; Double rate = item.Cat_OvertimeType1 != null ? item.Cat_OvertimeType1.Rate : 0; item.udOT2 = hours * rate; //Lấy OT2 quy đổi để sử dụng tính số tiền OT (OT2AmountSalary) } if (item.Overtime3TypeID != null) { Double hours = item.Overtime3Hours != null ? item.Overtime3Hours.Value : 0; totalOT += hours; Double rate = item.Cat_OvertimeType2 != null ? item.Cat_OvertimeType2.Rate : 0; item.udOT3 = hours * rate; //Lấy OT3 quy đổi để sử dụng tính số tiền OT (OT3AmountSalary) } if (item.Overtime4TypeID != null) { Double hours = item.Overtime4Hours != null ? item.Overtime4Hours.Value : 0; totalOT += hours; Double rate = item.Cat_OvertimeType3 != null ? item.Cat_OvertimeType3.Rate : 0; item.udOT4 = hours * rate; //Lấy OT4 quy đổi để sử dụng tính số tiền OT (OT4AmountSalary) } if (item.Overtime5TypeID != null) { Double hours = item.Overtime5Hours != null ? item.Overtime5Hours.Value : 0; totalOT += hours; Double rate = item.Cat_OvertimeType4 != null ? item.Cat_OvertimeType4.Rate : 0; item.udOT5 = hours * rate; //Lấy OT5 quy đổi để sử dụng tính số tiền OT (OT5AmountSalary) } if (item.Overtime6TypeID != null) { Double hours = item.Overtime6Hours != null ? item.Overtime6Hours.Value : 0; totalOT += hours; Double rate = item.Cat_OvertimeType5 != null ? item.Cat_OvertimeType5.Rate : 0; item.udOT6 = hours * rate; //Lấy OT6 quy đổi để sử dụng tính số tiền OT (OT6AmountSalary) } item.udTotalHoursProduct = (lstDepItem[i].PaidWorkHours + totalOT); } } #endregion //Các trường hợp tính OT if (value54 == AppConfig.E_OT_CHANGE_COMPUTE.ToString()) { #region "OT quy đổi" for (int i = 0; i < lstDepItem.Count(); i++) { Sal_SalaryDepartmentItem item = lstDepItem[i]; Double totalOT = 0; if (item.Overtime1TypeID != null) { Double hours = item.Overtime1Hours != null ? item.Overtime1Hours.Value : 0; Double rate = item.Cat_OvertimeType != null ? item.Cat_OvertimeType.Rate : 0; totalOT += hours * rate; } if (item.Overtime2TypeID != null) { Double hours = item.Overtime2Hours != null ? item.Overtime2Hours.Value : 0; Double rate = item.Cat_OvertimeType1 != null ? item.Cat_OvertimeType1.Rate : 0; totalOT += hours * rate; } if (item.Overtime3TypeID != null) { Double hours = item.Overtime3Hours != null ? item.Overtime3Hours.Value : 0; Double rate = item.Cat_OvertimeType2 != null ? item.Cat_OvertimeType2.Rate : 0; totalOT += hours * rate; } if (item.Overtime4TypeID != null) { Double hours = item.Overtime4Hours != null ? item.Overtime4Hours.Value : 0; Double rate = item.Cat_OvertimeType3 != null ? item.Cat_OvertimeType3.Rate : 0; totalOT += hours * rate; } if (item.Overtime5TypeID != null) { Double hours = item.Overtime5Hours != null ? item.Overtime5Hours.Value : 0; Double rate = item.Cat_OvertimeType4 != null ? item.Cat_OvertimeType4.Rate : 0; totalOT += hours * rate; } if (item.Overtime6TypeID != null) { Double hours = item.Overtime6Hours != null ? item.Overtime6Hours.Value : 0; Double rate = item.Cat_OvertimeType5 != null ? item.Cat_OvertimeType5.Rate : 0; totalOT += hours * rate; } //Tổng giờ công và Total OT của từng NV. item.udTotalHoursOTPaid = (lstDepItem[i].PaidWorkHours + totalOT); //Tổng giờ công của tất cả NV trong ds tính = Sum(Tổng công của từng NV * hệ số cá nhân ) totalHoursRateOrg += lstDepItem[i].Rate * item.udTotalHoursOTPaid; if (i == lstDepItem.Count() - 1 && totalHoursRateOrg != 0) { if (value52 == AppConfig.E_RATE_BY_ATUALARISING.ToString()) avgSalOrg = salDep.AmountAfterAdjust.Value / totalHoursRateOrg; else avgSalOrg = salDep.Amount / totalHoursRateOrg; } } #endregion } else if (value54 == AppConfig.E_NOT_OT_COMPUTE.ToString()) { #region "Không tính OT" for (int i = 0; i < lstDepItem.Count(); i++) { Sal_SalaryDepartmentItem item = lstDepItem[i]; item.udTotalHoursOTPaid = lstDepItem[i].PaidWorkHours; totalHoursRateOrg += lstDepItem[i].Rate * item.udTotalHoursOTPaid; if (i == lstDepItem.Count() - 1 && totalHoursRateOrg != 0) { if (value52 == AppConfig.E_RATE_BY_ATUALARISING.ToString()) avgSalOrg = salDep.AmountAfterAdjust.Value / totalHoursRateOrg; else avgSalOrg = salDep.Amount / totalHoursRateOrg; } } #endregion } else { #region "OT chưa quy đổi" for (int i = 0; i < lstDepItem.Count(); i++) { Sal_SalaryDepartmentItem item = lstDepItem[i]; Double totalOT = 0; if (item.Overtime1TypeID != null) { Double hours = item.Overtime1Hours != null ? item.Overtime1Hours.Value : 0; totalOT += hours; } if (item.Overtime2TypeID != null) { Double hours = item.Overtime2Hours != null ? item.Overtime2Hours.Value : 0; totalOT += hours; } if (item.Overtime3TypeID != null) { Double hours = item.Overtime3Hours != null ? item.Overtime3Hours.Value : 0; totalOT += hours; } if (item.Overtime4TypeID != null) { Double hours = item.Overtime4Hours != null ? item.Overtime4Hours.Value : 0; totalOT += hours; } if (item.Overtime5TypeID != null) { Double hours = item.Overtime5Hours != null ? item.Overtime5Hours.Value : 0; totalOT += hours; } if (item.Overtime6TypeID != null) { Double hours = item.Overtime6Hours != null ? item.Overtime6Hours.Value : 0; totalOT += hours; } item.udTotalHoursOTPaid = (lstDepItem[i].PaidWorkHours + totalOT); totalHoursRateOrg += lstDepItem[i].Rate * item.udTotalHoursOTPaid; if (i == lstDepItem.Count() - 1 && totalHoursRateOrg != 0) { if (value52 == AppConfig.E_RATE_BY_ATUALARISING.ToString()) avgSalOrg = salDep.AmountAfterAdjust.Value / totalHoursRateOrg; else avgSalOrg = salDep.Amount / totalHoursRateOrg; } } #endregion } foreach (Sal_SalaryDepartmentItem item in lstDepItem) { //Tổng tiền sản phẩm. [udTotalHoursOTPaid = ngày công + tổng OT theo 3 TH (quy đổi, ko qđ, ko OT)] item.AmoutSalary = item.Rate * item.udTotalHoursOTPaid * avgSalOrg; //Nếu cách tính lương là dùng hệ số tự nhập từ màn hình nhập hệ số (Theo logic PHONGPHU) if (value52 == AppConfig.E_RATE_BY_ATUALARISING.ToString()) { //Tính StdAmountSalary (lương sản phẩm theo công). [udTotalHoursProduct = ngày công + tổng OT theo TH ko qđ] if (item.udTotalHoursProduct != 0 && item.PaidWorkHours != 0) item.StdAmountSalary = item.AmoutSalary / item.udTotalHoursProduct * item.PaidWorkHours; else item.StdAmountSalary = 0; //Tính các tổng tiền OT và tiền phụ trội ca đêm (bổ sung thêm cho Phongphu) if (item.udTotalHoursProduct == 0) { item.OT1AmountSalary = 0; item.OT2AmountSalary = 0; item.OT3AmountSalary = 0; item.OT4AmountSalary = 0; item.OT5AmountSalary = 0; item.OT6AmountSalary = 0; item.NightAmountSalary = 0; } else { item.OT1AmountSalary = item.AmoutSalary / item.udTotalHoursProduct * item.udOT1; item.OT2AmountSalary = item.AmoutSalary / item.udTotalHoursProduct * item.udOT2; item.OT3AmountSalary = item.AmoutSalary / item.udTotalHoursProduct * item.udOT3; item.OT4AmountSalary = item.AmoutSalary / item.udTotalHoursProduct * item.udOT4; item.OT5AmountSalary = item.AmoutSalary / item.udTotalHoursProduct * item.udOT5; item.OT6AmountSalary = item.AmoutSalary / item.udTotalHoursProduct * item.udOT6; item.NightAmountSalary = item.AmoutSalary / item.udTotalHoursProduct * item.NightShiftHours * 0.3; //0.3 là hệ số phụ trội ca đêm } //Tiền lương ngày item.DayAmountSalary = item.StdAmountSalary + item.NightAmountSalary + item.OT1AmountSalary + item.OT2AmountSalary + item.OT3AmountSalary + item.OT4AmountSalary + item.OT5AmountSalary + item.OT6AmountSalary; } } salDep.TotalGroupHours = totalHoursRateOrg; return lstDepItem; }