/// <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; }
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 { }); }