Esempio n. 1
0
        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);

              
            }
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        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;
        }
Esempio n. 4
0
        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;
        }