示例#1
0
        /// <summary>
        /// <Kiet.Chung> phân tích nghỉ bù
        /// </summary>
        /// <returns></returns>
        /// 
        public List<Att_OvertimeEntity> AddTimeOffInLieu(Att_OvertimeEntity objAttOT, DateTime? LeaveDay1, DateTime? LeaveDay2, out string strStatus)
        {
            strStatus = "";
            List<Att_OvertimeEntity> lstOvertime = new List<Att_OvertimeEntity>();
            lstOvertime.Add(objAttOT);
            List<Att_Overtime> lstAtt_OvertimeValidate = lstOvertime.Translate<Att_Overtime>();
            List<Att_OvertimeEntity> lstResult = new List<Att_OvertimeEntity>();
            strStatus = validateSaveLeaveDay(lstAtt_OvertimeValidate, LeaveDay1, LeaveDay2);
            if (strStatus != "")
            {
                strStatus = "Dữ liệu không đủ để tạo ngày nghỉ";
                return lstOvertime;
            }
            double Hour1 = 0, Hour2 = 0;
            if (LeaveDay1.HasValue)
            {
                Hour1 = HourInShiftByDate(objAttOT.ProfileID, LeaveDay1.Value);
                if (Hour1 == 0)
                {
                    strStatus = ConstantMessages.PlsCheckRosterOfEmpByDate.TranslateString();
                    return lstOvertime;
                }
            }
            if (LeaveDay2.HasValue)
            {
                Hour2 = HourInShiftByDate(objAttOT.ProfileID, LeaveDay2.Value);
                if (Hour2 == 0)
                {
                    strStatus = ConstantMessages.PlsCheckRosterOfEmpByDate.TranslateString();
                    return lstOvertime;
                }
            }
            DateTime date = objAttOT.WorkDateRoot ?? objAttOT.WorkDate.Date;
            DateTime EndMonthNext = new DateTime(date.Year, date.Month, 1).AddMonths(2).AddMinutes(-1);
            if (LeaveDay1.HasValue)
            {
                if (LeaveDay1 > EndMonthNext)
                {
                    strStatus = ConstantMessages.DoNotRegisterLeaveOverLastNextMonthOvertimeDay.TranslateString();
                    return lstOvertime;
                }
            }
            if (LeaveDay2.HasValue)
            {
                if (LeaveDay2 > EndMonthNext)
                {
                    strStatus = ConstantMessages.DoNotRegisterLeaveOverLastNextMonthOvertimeDay.TranslateString();
                    return lstOvertime;
                }
            }

            double TotalHour = 0;
            if (objAttOT.Status == OverTimeStatus.E_APPROVED.ToString())
            {
                TotalHour += (objAttOT.ApproveHours ?? 0) * (objAttOT.TimeOffInLieuRate ?? 0);
            }
            else if (objAttOT.Status == OverTimeStatus.E_CONFIRM.ToString())
            {
                TotalHour += objAttOT.ConfirmHours * (objAttOT.TimeOffInLieuRate ?? 0);
            }
            else
            {
                TotalHour += objAttOT.RegisterHours * (objAttOT.TimeOffInLieuRate ?? 0);
            }

            if (TotalHour < (Hour1 + Hour2))
            {
                //lstResult.Add(objAttOT);
                strStatus = ConstantMessages.DataNotEnoughToMakeLeave.TranslateString();
                return lstOvertime;
            }

            objAttOT.MethodPayment = MethodOption.E_TIMEOFF.ToString();
            double Dental = TotalHour - (Hour1 + Hour2);
            double HourByDental = 0;
            if (objAttOT.TimeOffInLieuRate != null && objAttOT.TimeOffInLieuRate != 0)
            {
                HourByDental = Dental / objAttOT.TimeOffInLieuRate ?? 0;
                objAttOT.RegisterHours = objAttOT.RegisterHours - HourByDental;
                if (objAttOT.ApproveHours != null)
                {
                    objAttOT.ApproveHours = objAttOT.ApproveHours - HourByDental;
                }
                objAttOT.AnalyseHour = objAttOT.AnalyseHour - HourByDental;
                if (objAttOT.ConfirmHours > 0)
                {
                    objAttOT.ConfirmHours = objAttOT.ConfirmHours - HourByDental;
                }
            }
            Att_OvertimeEntity OvertimeNew = new Att_OvertimeEntity();
            objAttOT.CopyData(OvertimeNew, "ID");
            OvertimeNew.WorkDate = objAttOT.WorkDate.AddHours(objAttOT.RegisterHours);
            OvertimeNew.MethodPayment = MethodOption.E_CASHOUT.ToString();
            OvertimeNew.RegisterHours = HourByDental;
            OvertimeNew.AnalyseHour = HourByDental;
            if (OvertimeNew.Status == OverTimeStatus.E_APPROVED.ToString())
            {
                OvertimeNew.ApproveHours = HourByDental;
            }
            else if (OvertimeNew.Status == OverTimeStatus.E_CONFIRM.ToString())
            {
                OvertimeNew.ApproveHours = HourByDental;
                OvertimeNew.ConfirmHours = HourByDental;
            }
            lstResult.Add(objAttOT);
            lstResult.Add(OvertimeNew);

            return lstResult;
        }
示例#2
0
        public void ChangeMethodOverTime_Manual(Att_OvertimeEntity model)
        {

            using (var context = new VnrHrmDataContext())
            {
                var unitOfWork = (IUnitOfWork)(new UnitOfWork(context));
                var repoAtt_Overtime = new CustomBaseRepository<Att_Overtime>(unitOfWork);
                var repoAtt_TimeofInLieu = new CustomBaseRepository<Att_TimeOffInLieu>(unitOfWork);



                double TimeOffRealValidate = 0;
                double TimeOffValidate = 0;
                double CashOutValidate = 0;
                if (model.TimeOffReal != null)
                {
                    TimeOffRealValidate = (double)model.TimeOffReal;
                    //double.TryParse(model.TimeOffReal.ToString(), out TimeOffRealValidate);
                }
                if (model.HourToTimeOff != null)
                {
                    TimeOffValidate = (double)model.HourToTimeOff;
                    //double.TryParse(txt_TimeOff.Text, out TimeOffValidate);
                }
                if (model.TimeRegister != null)
                {
                    CashOutValidate = (double)model.TimeRegister;
                    //double.TryParse(txt_CashOut.Text, out CashOutValidate);
                }
                if (TimeOffRealValidate < 0 || TimeOffValidate < 0 || CashOutValidate < 0)
                {
                    return;
                }

                double Cashout = CashOutValidate;
                double Timeoff = TimeOffValidate;

                //if (Ot.Status == OverTimeStatus.E_APPROVED.ToString())
                //{
                //    Common.MessageBoxs(Messages.Msg, Messages.DataCantBeModify.TranslateString(), Ext.Net.MessageBox.Icon.WARNING, string.Empty);
                //    return;
                //}

                Att_Overtime OT_New = new Att_Overtime();

                if (Cashout > 0 && Timeoff <= 0)
                {
                    //Chuyển hết cho trả tiền
                    model.MethodPayment = MethodOption.E_CASHOUT.ToString();

                }
                else if (Cashout <= 0 && Timeoff > 0)
                {
                    //Chuyển hết cho nghỉ bù
                    model.MethodPayment = MethodOption.E_TIMEOFF.ToString();


                }
                else if (Cashout > 0 && Timeoff > 0)
                {
                    //Vửa chuyển tiền vừa nghỉ bù
                    model.MethodPayment = MethodOption.E_CASHOUT.ToString();
                    model.RegisterHours = Cashout;

                    if (model.Status == OverTimeStatus.E_APPROVED.ToString())
                    {
                        model.ApproveHours = Cashout;
                    }
                    if (model.Status == OverTimeStatus.E_CONFIRM.ToString())
                    {
                        model.ApproveHours = Cashout;
                        model.ConfirmHours = Cashout;
                    }
                    OT_New = model.CopyData<Att_Overtime>();
                    OT_New.ID = Guid.NewGuid();
                    OT_New.WorkDate = model.WorkDate.AddHours(model.RegisterHours);
                    OT_New.MethodPayment = MethodOption.E_TIMEOFF.ToString();
                    OT_New.RegisterHours = Timeoff;
                    if (OT_New.Status == OverTimeStatus.E_APPROVED.ToString())
                    {
                        OT_New.ApproveHours = Timeoff;
                    }
                    if (OT_New.Status == OverTimeStatus.E_CONFIRM.ToString())
                    {
                        OT_New.ApproveHours = Timeoff;
                        OT_New.ConfirmHours = Timeoff;
                    }
                    if (model.IsNonOvertime == true)
                    {
                        //model.IsNonOvertime = true;
                        OT_New.IsNonOvertime = true;
                    }
                    //repoAtt_Overtime.FindBy<Att_Overtime>();
                    repoAtt_Overtime.Add(OT_New);
                    var att_overtimeEntity = model.CopyData<Att_Overtime>();
                    repoAtt_Overtime.Edit(att_overtimeEntity);

                    //EntityService.AddEntity<Att_Overtime>(GuidContext, (new List<Att_Overtime>() { OT_New }).ToArray());
                }

                if (model.LeaveDay1 != null || model.LeaveDay2 != null)
                {
                    DateTime? date1 = null;
                    DateTime? date2 = null;
                    if (model.LeaveDay1 != null)
                    {
                        date1 = model.LeaveDay1;
                    }
                    if (model.LeaveDay2 != null)
                    {
                        date2 = model.LeaveDay2;
                    }
                    //string Error = AddTimeOffInLieu(new List<Att_Overtime>() { Ot, OT_New }, date1, date2);
                    //if (Error != string.Empty)
                    //{
                    //    return;
                    //}
                }

                if (model.Status == OverTimeStatus.E_APPROVED.ToString() || model.Status == OverTimeStatus.E_CONFIRM.ToString())
                {
                    List<Att_TimeOffInLieu> lstTimeOffInsert = new List<Att_TimeOffInLieu>();
                    //TimeOffInLieeu
                    //1 Xóa Đi những cái OT liên Quan trong TimeOff
                    //2 Insert lại nhưng cái liên quan đên TimeOff
                    List<Att_TimeOffInLieu> lstTimeOff = repoAtt_TimeofInLieu.FindBy(m => m.OvertimeID == model.ID).ToList<Att_TimeOffInLieu>();
                    foreach (var item in lstTimeOff)
                    {
                        item.IsDelete = null;
                    }

                    if (model.MethodPayment == MethodOption.E_TIMEOFF.ToString())
                    {
                        Att_TimeOffInLieu TimeOffInsert = AddTimeOffInLieu(model.CopyData<Att_Overtime>());
                        TimeOffInsert.ID = Guid.NewGuid();
                        TimeOffInsert.ProfileID = model.ProfileID;
                        lstTimeOffInsert.Add(TimeOffInsert);
                    }
                    if (OT_New.MethodPayment == MethodOption.E_TIMEOFF.ToString())
                    {
                        Att_TimeOffInLieu TimeOffInsert = AddTimeOffInLieu(OT_New);
                        TimeOffInsert.ID = Guid.NewGuid();
                        TimeOffInsert.ProfileID = model.ProfileID;
                        lstTimeOffInsert.Add(TimeOffInsert);
                    }
                    if (lstTimeOffInsert.Count > 0)
                    {
                        for (int i = 0; i < lstTimeOffInsert.Count; i++)
                        {
                            lstTimeOffInsert[i].Hre_Profile = null;
                            repoAtt_TimeofInLieu.Add(lstTimeOffInsert[i]);
                        }
                        // repoAtt_TimeofInLieu.Add(lstTimeOffInsert);
                        //EntityService.AddEntity<Att_TimeOffInLieu>(GuidContext, lstTimeOffInsert.ToArray());
                    }
                }
                unitOfWork.SaveChanges();
                // EntityService.SubmitChanges(GuidContext, LoginUserID.Value);
                //IsSave = false;

                //IsSave = false;
            }
            //return Json(new { });

        }