Ejemplo n.º 1
0
        public List <Sal_PayrollEstimateDetailEntity> GetTemplatePayrollEstimate(Sal_PayrollEstimateEntity model)
        {
            using (var context = new VnrHrmDataContext())
            {
                var unitOfWork                = (IUnitOfWork) new UnitOfWork(context);
                var repoOrgStructure          = new CustomBaseRepository <Cat_OrgStructure>(unitOfWork);
                var repoPayrollEstimateDetail = new CustomBaseRepository <Sal_PayrollEstimateDetail>(unitOfWork);

                List <Cat_OrgStructure> listOrg = repoOrgStructure.FindBy(m => m.IsDelete != true).ToList();
                if (model.OrgStructureIDs != null)
                {
                    string[] listOrdernumber = model.OrgStructureIDs.Split(',');
                    listOrg = listOrg.Where(m => listOrdernumber.Contains(m.OrderNumber.ToString())).ToList();
                }

                List <Sal_PayrollEstimateDetail> ListPayrollEstimateDetail = new List <Sal_PayrollEstimateDetail>();
                ListPayrollEstimateDetail = repoPayrollEstimateDetail.FindBy(m => m.IsDelete != true && m.PayrollEstimateID == null).ToList();

                List <Sal_PayrollEstimateDetailEntity> Result = new List <Sal_PayrollEstimateDetailEntity>();
                foreach (var i in listOrg)
                {
                    Sal_PayrollEstimateDetailEntity item = new Sal_PayrollEstimateDetailEntity();
                    item.ID = Guid.NewGuid();
                    item.OrgStructureName = i.OrgStructureName;
                    item.OrgStructureCode = i.Code;
                    item.OrgStructureID   = i.ID;
                    var _tmp = ListPayrollEstimateDetail.FirstOrDefault(m => m.OrgStructureID == i.ID);
                    if (_tmp != null)
                    {
                        item.LeaveUnpaid          = _tmp.LeaveUnpaid != null ? _tmp.LeaveUnpaid : 0;
                        item.OvertimeHoliday      = _tmp.OvertimeHoliday != null ? _tmp.OvertimeHoliday : 0;
                        item.OvertimeNightHoliday = _tmp.OvertimeNightHoliday != null ? _tmp.OvertimeNightHoliday : 0;
                        item.OvertimeNightNormal  = _tmp.OvertimeNightNormal != null ? _tmp.OvertimeNightNormal : 0;
                        item.OvertimeNightWeekend = _tmp.OvertimeNightWeekend != null ? _tmp.OvertimeNightWeekend : 0;
                        item.OvertimeNormal       = _tmp.OvertimeNormal != null ? _tmp.OvertimeNormal : 0;
                        item.OvertimeWeekend      = _tmp.OvertimeWeekend != null ? _tmp.OvertimeWeekend : 0;
                    }
                    else
                    {
                        item.LeaveUnpaid          = 0;
                        item.OvertimeHoliday      = 0;
                        item.OvertimeNightHoliday = 0;
                        item.OvertimeNightNormal  = 0;
                        item.OvertimeNightWeekend = 0;
                        item.OvertimeNormal       = 0;
                        item.OvertimeWeekend      = 0;
                    }
                    Result.Add(item);
                }
                return(Result);
            }
        }
Ejemplo n.º 2
0
        public bool ComputePayrollEstimate(List <Sal_PayrollEstimateDetailEntity> listPayrollEstimateDetail, Sal_PayrollEstimateEntity model, string userLogin)
        {
            try
            {
                using (var context = new VnrHrmDataContext())
                {
                    var unitOfWork                = (IUnitOfWork) new UnitOfWork(context);
                    var repoCutOffDuration        = new CustomBaseRepository <Att_CutOffDuration>(unitOfWork);
                    var repoPayrollEstimateDetail = new CustomBaseRepository <Sal_PayrollEstimateDetail>(unitOfWork);
                    var repoPayrollEstimate       = new CustomBaseRepository <Sal_PayrollEstimate>(unitOfWork);

                    List <Att_CutOffDuration> listCutoffDuration = repoCutOffDuration.FindBy(m => m.IsDelete != true && m.MonthYear <= model.MonthEnd && m.MonthYear >= model.MonthStart).ToList();

                    #region Delete Sal_PayrollEstimate và Sal_PayrollEstimateDetail

                    List <Sal_PayrollEstimateDetail> ListPayrollEstimateDetailDelete = new List <Sal_PayrollEstimateDetail>();
                    List <Sal_PayrollEstimate>       ListPayrollEstimateDelete       = new List <Sal_PayrollEstimate>();

                    ListPayrollEstimateDelete = repoPayrollEstimate.FindBy(m => m.IsDelete != true && m.OrgStructureID == model.OrgStructureID).ToList();
                    ListPayrollEstimateDelete = ListPayrollEstimateDelete.Where(m => listCutoffDuration.Any(t => t.ID == m.CutOffDurationID)).ToList();

                    ListPayrollEstimateDetailDelete = repoPayrollEstimateDetail.FindBy(m => m.IsDelete != true).ToList();
                    ListPayrollEstimateDetailDelete = ListPayrollEstimateDetailDelete.Where(m => ListPayrollEstimateDelete.Any(t => t.ID == m.PayrollEstimateID)).ToList();

                    ListPayrollEstimateDelete.ForEach(m => m.IsDelete       = true);
                    ListPayrollEstimateDetailDelete.ForEach(m => m.IsDelete = true);

                    unitOfWork.SaveChanges();
                    #endregion

                    //Giờ công chuẩn lấy trong web config
                    double TotalAmount = 0;

                    //lay du lieu  cau hinh
                    string status = string.Empty;
                    Sys_AllSettingServices sysServices = new Sys_AllSettingServices();
                    var    AllSetting   = sysServices.GetData <Sys_AllSettingEntity>("HRM_SAL_PAYROLL_ESTIMATE_SALRYAVERAGE", ConstantSql.hrm_sys_sp_get_AllSettingByKey, userLogin, ref status).FirstOrDefault();
                    double StandardHour = 200;
                    Double.TryParse(AllSetting != null ? AllSetting.Value2 : "a", out StandardHour);

                    foreach (var CutOff in listCutoffDuration)
                    {
                        //reset tổng tiền master
                        TotalAmount = 0;
                        //tạo dữ liệu master
                        Sal_PayrollEstimate Master = new Sal_PayrollEstimate();
                        Master.ID               = Guid.NewGuid();
                        Master.OrgStructureID   = model.OrgStructureID;
                        Master.CutOffDurationID = CutOff.ID;
                        Master.PayrollGroupID   = model.PayrollGroupID;
                        Master.RateAdjust       = model.RateAdjust;
                        Master.OrgStructureType = model.OrgStructureType;
                        Master.BonusBudget      = model.BonusBudget;
                        Master.StatusEmp        = model.StatusEmp;

                        foreach (var i in listPayrollEstimateDetail)
                        {
                            #region Check null value
                            i.SalaryAverage = i.SalaryAverage != null ? (double)i.SalaryAverage : 0;
                            i.QuantityEmp   = i.QuantityEmp != null ? (double)i.QuantityEmp : 0;
                            i.LeaveUnpaid   = i.LeaveUnpaid != null ? (double)i.LeaveUnpaid : 0;

                            i.OvertimeNormal       = i.OvertimeNormal != null ? (double)i.OvertimeNormal : 0;
                            i.OvertimeNightNormal  = i.OvertimeNightNormal != null ? (double)i.OvertimeNightNormal : 0;
                            i.OvertimeWeekend      = i.OvertimeWeekend != null ? (double)i.OvertimeWeekend : 0;
                            i.OvertimeNightWeekend = i.OvertimeNightWeekend != null ? (double)i.OvertimeNightWeekend : 0;
                            i.OvertimeHoliday      = i.OvertimeHoliday != null ? (double)i.OvertimeHoliday : 0;
                            i.OvertimeNightHoliday = i.OvertimeNightHoliday != null ? (double)i.OvertimeNightHoliday : 0;

                            model.RateAdjust  = model.RateAdjust != null ? (double)model.RateAdjust : 0;
                            model.BonusBudget = model.BonusBudget != null ? (double)model.BonusBudget : 0;
                            #endregion

                            #region Tính toán số liệu
                            double AmountHour     = (double)i.SalaryAverage * (double)i.QuantityEmp;
                            double AmountLeaveDay = (double)i.SalaryAverage * (double)i.LeaveUnpaid != 0 ? ((double)i.LeaveUnpaid / StandardHour) : 1;
                            double AmountOvertime = 0;
                            AmountOvertime += (double)i.SalaryAverage * 1.5 * (double)i.OvertimeNormal;
                            AmountOvertime += (double)i.SalaryAverage * 1.95 * (double)i.OvertimeNightNormal;
                            AmountOvertime += (double)i.SalaryAverage * 2.0 * (double)i.OvertimeWeekend;
                            AmountOvertime += (double)i.SalaryAverage * 2.6 * (double)i.OvertimeNightWeekend;
                            AmountOvertime += (double)i.SalaryAverage * 3.0 * (double)i.OvertimeHoliday;
                            AmountOvertime += (double)i.SalaryAverage * 3.9 * (double)i.OvertimeNightHoliday;
                            double Percent     = (double)model.RateAdjust != 0 ? (double)model.RateAdjust / 100 : 1;
                            double AmountTotal = ((AmountHour - AmountLeaveDay + AmountOvertime) * Percent) + (double)model.BonusBudget;
                            //cập nhật tổng tiền cho master
                            TotalAmount += AmountTotal;
                            #endregion

                            //tạo dữ liệu detail
                            Sal_PayrollEstimateDetail Detail = new Sal_PayrollEstimateDetail();
                            Detail.ID                   = Guid.NewGuid();
                            Detail.SalaryAverage        = i.SalaryAverage;
                            Detail.PayrollEstimateID    = Master.ID;
                            Detail.OrgStructureID       = i.OrgStructureID;
                            Detail.LeaveUnpaid          = i.LeaveUnpaid;
                            Detail.OvertimeHoliday      = i.OvertimeHoliday;
                            Detail.OvertimeNightHoliday = i.OvertimeNightHoliday;
                            Detail.OvertimeNightNormal  = i.OvertimeNightNormal;
                            Detail.OvertimeNightWeekend = i.OvertimeNightWeekend;
                            Detail.QuantityEmp          = i.QuantityEmp;
                            Detail.OvertimeNormal       = i.OvertimeNormal;
                            Detail.OvertimeWeekend      = i.OvertimeWeekend;
                            Detail.AmountHour           = AmountHour;
                            Detail.AmountLeaveDay       = AmountLeaveDay;
                            Detail.AmountOvertime       = AmountOvertime;
                            Detail.AmountTotal          = AmountTotal;
                            repoPayrollEstimateDetail.Add(Detail);
                        }

                        //update tổng tiền
                        Master.AmountTotal = TotalAmount;
                        repoPayrollEstimate.Add(Master);
                    }
                    unitOfWork.SaveChanges();
                    return(true);
                }
            }
            catch
            {
                return(false);
            }
        }