public ActionResult PostLeaveTrans(IEnumerable <LeaveTransOpenBalanceViewModel> models, string transDate)
        {
            string message     = "Ok";
            var    AbsenceType = _hrUnitOfWork.Repository <LeaveType>().Where(a => a.Id == models.Select(s => s.TypeId).FirstOrDefault()).Select(a => a.AbsenceType).FirstOrDefault();

            foreach (var item in models)
            {
                if (item.flag == true && item.transQty != 0)
                {
                    var LeaveTrans = new LeaveTrans
                    {
                        AbsenceType = AbsenceType,
                        EmpId       = item.EmpId,
                        TransDate   = Convert.ToDateTime(transDate),
                        TransQty    = item.transQty,
                        TransType   = 0,
                        CompanyId   = CompanyId,
                        TransFlag   = 1,
                        CreatedTime = DateTime.Now,
                        CreatedUser = UserName,
                        PeriodId    = item.PeriodId,
                        TypeId      = item.TypeId
                    };
                    _hrUnitOfWork.LeaveRepository.Add(LeaveTrans);
                }
            }
            var errors = SaveChanges(User.Identity.GetLanguage());

            if (errors.Count() > 0)
            {
                message = errors.First().errors.First().message;
            }

            return(Json(message, JsonRequestBehavior.AllowGet));
        }
        //SaveAdjustment
        public ActionResult SaveAdjustment(LeaveMoneyAdjustFormViewModel model, OptionsViewModel moreInfo)
        {
            var message = "OK";

            if (model.NofDays > 0)
            {
                if (model.NofDays <= model.Balance)
                {
                    var Absence     = _hrUnitOfWork.Repository <LeaveType>().Where(a => a.Id == model.TypeId).Select(s => s.AbsenceType).FirstOrDefault();
                    var TransRecord = new LeaveTrans()
                    {
                        AbsenceType = Absence,
                        CompanyId   = CompanyId,
                        CreatedUser = UserName,
                        CreatedTime = DateTime.Now,
                        TransFlag   = -1,
                        EmpId       = model.EmpId,
                        PeriodId    = model.PeriodId,
                        TypeId      = model.TypeId,
                        TransDate   = DateTime.Now,
                        TransType   = 12,
                        TransQty    = model.NofDays
                    };
                    _hrUnitOfWork.LeaveRepository.Add(TransRecord);
                    var AdjustRecord = new LeaveAdjust()
                    {
                        NofDays     = model.NofDays,
                        EmpId       = model.EmpId,
                        PeriodId    = model.PeriodId,
                        CreatedUser = UserName,
                        CreatedTime = DateTime.Now,
                        TypeId      = model.TypeId,
                        AdjustDate  = DateTime.Now,
                        CompanyId   = CompanyId,
                        TransType   = 12,
                        PayDone     = false
                    };
                    _hrUnitOfWork.LeaveRepository.Add(AdjustRecord);
                }
                else
                {
                    ModelState.AddModelError("", MsgUtils.Instance.Trls("NotEnoughBalance"));
                    return(Json(Models.Utils.ParseFormErrors(ModelState)));
                }
            }
            else
            {
                ModelState.AddModelError("", MsgUtils.Instance.Trls("EnterNoOfDays"));
                return(Json(Models.Utils.ParseFormErrors(ModelState)));
            }
            var Errors = SaveChanges(Language);

            if (Errors.Count > 0)
            {
                message = Errors.First().errors.First().message;
            }
            return(Json(message));
        }
        public ActionResult SaveRestLeave(LeaveRestFormViewModel model)
        {
            var message         = "OK";
            int periodId        = 0;
            var LeaveTypeRecord = _hrUnitOfWork.Repository <LeaveType>().Where(a => a.Id == model.TypeId).Select(s => new { Absence = s.AbsenceType, CalenderId = s.CalendarId }).FirstOrDefault();
            var PeriodRecord    = _hrUnitOfWork.Repository <Period>().Where(a => a.StartDate <= model.WorkingDate && a.EndDate >= model.WorkingDate && a.CalendarId == LeaveTypeRecord.CalenderId).FirstOrDefault();

            if (PeriodRecord == null)
            {
                ModelState.AddModelError("", MsgUtils.Instance.Trls("Periodnotdefined"));
                return(Json(Models.Utils.ParseFormErrors(ModelState)));
            }
            else
            {
                periodId = PeriodRecord.Id;
            }
            foreach (var item in model.IEmpId)
            {
                var TransRecord = new LeaveTrans()
                {
                    AbsenceType = LeaveTypeRecord.Absence,
                    CompanyId   = CompanyId,
                    CreatedUser = UserName,
                    CreatedTime = DateTime.Now,
                    TransFlag   = 1,
                    EmpId       = item,
                    PeriodId    = periodId,
                    TypeId      = model.TypeId,
                    TransDate   = DateTime.Now,
                    TransType   = 3,
                    TransQty    = model.NofDays
                };
                _hrUnitOfWork.LeaveRepository.Add(TransRecord);
                var AdjustRecord = new LeaveAdjust()
                {
                    NofDays     = model.NofDays,
                    EmpId       = item,
                    PeriodId    = periodId,
                    CreatedUser = UserName,
                    CreatedTime = DateTime.Now,
                    TypeId      = model.TypeId,
                    AdjustDate  = DateTime.Now,
                    CompanyId   = CompanyId,
                    TransType   = 3,
                    PayDone     = false
                };
                _hrUnitOfWork.LeaveRepository.Add(AdjustRecord);
            }
            var Errors = SaveChanges(Language);

            if (Errors.Count > 0)
            {
                message = Errors.First().errors.First().message;
            }
            return(Json(message));
        }
        public void AddLeaveTrans(LeaveAdjust obj, short Absence, short TransType, short TransFlag)
        {
            var TransRecord = new LeaveTrans()
            {
                AbsenceType = Absence,
                CompanyId   = CompanyId,
                CreatedUser = UserName,
                CreatedTime = DateTime.Now,
                TransFlag   = TransFlag,
                EmpId       = obj.EmpId,
                PeriodId    = obj.PeriodId,
                TypeId      = obj.TypeId,
                TransDate   = DateTime.Now,
                TransType   = TransType,
                TransQty    = obj.NofDays
            };

            _hrUnitOfWork.LeaveRepository.Add(TransRecord);
        }
        public void AddActions(LeaveCreditAdjustFormViewModel model, short transType, short transFlag)
        {
            var Absence = _hrUnitOfWork.Repository <LeaveType>().Where(a => a.Id == model.TypeId).Select(s => s.AbsenceType).FirstOrDefault();

            var TransRecord = new LeaveTrans()
            {
                AbsenceType = Absence,
                CompanyId   = CompanyId,
                CreatedUser = UserName,
                CreatedTime = DateTime.Now,
                TransFlag   = transFlag,
                EmpId       = model.EmpId,
                PeriodId    = model.PeriodId,
                TypeId      = model.TypeId,
                TransDate   = DateTime.Now,
                TransType   = transType,
                TransQty    = model.NofDays
            };

            _hrUnitOfWork.LeaveRepository.Add(TransRecord);
            var AdjustRecord = new LeaveAdjust()
            {
                NofDays     = model.NofDays,
                EmpId       = model.EmpId,
                PeriodId    = model.PeriodId,
                CreatedUser = UserName,
                CreatedTime = DateTime.Now,
                TypeId      = model.TypeId,
                AdjustDate  = DateTime.Now,
                CompanyId   = CompanyId,
                TransType   = transType,
                PayDone     = false
            };

            _hrUnitOfWork.LeaveRepository.Add(AdjustRecord);
        }
Ejemplo n.º 6
0
        private void AddTrans(IEnumerable <LeaveBalanceGridViewModel> models, ref bool closePeriod)
        {
            List <int> EmpIds          = models.Select(m => m.EmpId).ToList();
            var        periodId        = models.FirstOrDefault().PeriodId;
            var        leavePostingLst = _hrUnitOfWork.Repository <LeavePosting>().Where(lp => EmpIds.Contains(lp.EmpId) && !lp.Posted && lp.PeriodId == periodId);

            ////2.Accrual Balance استحقاق الرصيد
            //var oldOpenTrans = _hrUnitOfWork.Repository<LeaveTrans>().Where(t => t.CompanyId == CompanyId && EmpIds.Contains(t.EmpId) && t.TransType == 2 && t.TransFlag == 1 && t.TypeId == models.FirstOrDefault().TypeId && t.PeriodId == models.FirstOrDefault().NewPeriodId);

            //Leave posting
            foreach (LeaveBalanceGridViewModel model in models)
            {
                ///post -> repalcementTrans -> openBalance
                LeaveTrans openTrans = new LeaveTrans()
                {
                    CompanyId   = model.CompanyId,
                    EmpId       = model.EmpId,
                    PeriodId    = model.NewPeriodId,
                    TypeId      = model.TypeId,
                    AbsenceType = model.AbsenceType,
                    TransDate   = model.SubStartDate ?? DateTime.Parse(model.NewPeriodDate),
                    CreatedUser = UserName,
                    CreatedTime = DateTime.Now
                };

                //Event: 1-Open Balance  2-Post Balance 12-Balance Replacement
                //PostAction: 1-Success 2-Add Time compensation trans 3-Fail
                LeavePosting posting = leavePostingLst.Where(lp => lp.EmpId == model.EmpId).FirstOrDefault();
                if (model.PeriodId != model.NewPeriodId) //&& !fail //only if new Period & not fail
                {
                    LeaveTrans postTrans = new LeaveTrans();
                    AutoMapper(new Models.AutoMapperParm {
                        Source = openTrans, Destination = postTrans, Transtype = TransType.Insert
                    });
                    if (model.PostBal != 0)
                    {
                        postTrans.TransType = 1; //Post Balance رصيد سابق مرحل
                        postTrans.TransFlag = 1;
                        postTrans.TransQty  = model.PostBal;
                        postTrans.TransDate = DateTime.Parse(model.NewPeriodDate);

                        _hrUnitOfWork.LeaveRepository.Add(postTrans);
                    }

                    if (model.PostAction == 2) //2-Add Time compensation
                    {
                        LeaveTrans repalcementTrans = new LeaveTrans();
                        AutoMapper(new Models.AutoMapperParm {
                            Source = openTrans, Destination = repalcementTrans, Transtype = TransType.Insert
                        });
                        repalcementTrans.PeriodId  = model.PeriodId;
                        repalcementTrans.TransType = 12;
                        repalcementTrans.TransQty  = model.Compensations;
                        repalcementTrans.TransFlag = -1;
                        postTrans.TransDate        = DateTime.Parse(model.NewPeriodDate);
                        _hrUnitOfWork.LeaveRepository.Add(repalcementTrans);
                    }
                }

                if (model.PeriodId != model.NewPeriodId) //Post only if new Period
                {
                    if (posting == null)                 //new
                    {
                        posting = new LeavePosting()
                        {
                            EmpId       = model.EmpId,
                            PeriodId    = model.PeriodId,
                            Posted      = (model.PostAction == 3 && model.PostBal != 0), //PostAction 3-fail -- MinDays Errors
                            Reason      = model.Reason,
                            CreatedUser = UserName,
                            CreatedTime = DateTime.Now
                        };
                        _hrUnitOfWork.LeaveRepository.Add(posting);
                    }
                    else //update
                    {
                        posting.Posted      = (model.PostAction == 3 && model.PostBal != 0); //--MinDays Errors
                        posting.Reason      = model.Reason;
                        posting.CreatedUser = UserName;
                        posting.CreatedTime = DateTime.Now;
                        _hrUnitOfWork.LeaveRepository.Attach(posting);
                        _hrUnitOfWork.LeaveRepository.Entry(posting).State = EntityState.Modified;
                    }
                }

                //for retrive post balanca first
                if (model.OpenBalance != 0)
                {
                    openTrans.TransType = 2; //Accrual Balance استحقاق الرصيد
                    openTrans.TransQty  = model.OpenBalance;
                    openTrans.TransFlag = 1;
                    //if (posting != null)
                    //{
                    //    var oldTrans = oldOpenTrans.Where(o => o.EmpId == model.EmpId).LastOrDefault();
                    //    if(oldTrans != null) _hrUnitOfWork.LeaveRepository.Remove(oldTrans);
                    //}

                    _hrUnitOfWork.LeaveRepository.Add(openTrans);
                }
            }
        }
        // Delete LeaveAdjust where Period Status is Open and Paydone in leave adjust equal false
        public ActionResult DeleteLeaveAdjust(int id)
        {
            DataSource <LeaveActionViewModel> Source = new DataSource <LeaveActionViewModel>();
            List <Error>        error         = new List <Error>();
            List <ErrorMessage> errorMessages = new List <ErrorMessage>();
            List <Error>        errors        = new List <Error>();
            LeaveAdjust         obj           = _hrUnitOfWork.LeaveRepository.GetLeaveAction(id);

            if (obj != null)
            {
                var status = _hrUnitOfWork.Repository <Period>().Where(a => a.Id == obj.PeriodId).Select(a => a.Status).FirstOrDefault();
                if (obj.PayDone == true)
                {
                    ErrorMessage errormessa = new ErrorMessage()
                    {
                        message = MsgUtils.Instance.Trls("PayDoneIsTrue")
                    };
                    errorMessages.Add(errormessa);
                    Error err = new Error()
                    {
                        errors = errorMessages
                    };
                    error.Add(err);
                    Source.Errors = error;
                    return(Json(Source));
                }
                if (status != 1)
                {
                    ErrorMessage errormessa = new ErrorMessage()
                    {
                        message = MsgUtils.Instance.Trls("StatusIsClosed")
                    };
                    errorMessages.Add(errormessa);
                    Error err = new Error()
                    {
                        errors = errorMessages
                    };
                    error.Add(err);
                    Source.Errors = error;
                    return(Json(Source));
                }
                var Absence     = _hrUnitOfWork.Repository <LeaveType>().Where(a => a.Id == obj.TypeId).Select(s => s.AbsenceType).FirstOrDefault();
                var TransRecord = new LeaveTrans()
                {
                    AbsenceType = Absence,
                    CompanyId   = CompanyId,
                    CreatedUser = UserName,
                    CreatedTime = DateTime.Now,
                    TransFlag   = 1,
                    EmpId       = obj.EmpId,
                    PeriodId    = obj.PeriodId,
                    TypeId      = obj.TypeId,
                    TransDate   = DateTime.Now,
                    TransType   = 24,
                    TransQty    = obj.NofDays
                };
                _hrUnitOfWork.LeaveRepository.Add(TransRecord);

                AutoMapper(new Models.AutoMapperParm
                {
                    Source     = obj,
                    ObjectName = "LeaveAction",
                    Transtype  = TransType.Delete
                });
                _hrUnitOfWork.LeaveRepository.Remove(obj);
            }
            string message = "OK";

            if (errors.Count() > 0)
            {
                message = errors.First().errors.First().message;
                return(Json(message));
            }
            errors = SaveChanges(Language);

            if (errors.Count() > 0)
            {
                message = errors.First().errors.First().message;
            }

            return(Json(message));
        }