//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 ActionResult DeleteRestBalance(int id)
        {
            DataSource <LeaveMoneyAdjustViewModel> Source = new DataSource <LeaveMoneyAdjustViewModel>();
            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 (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();
                AddLeaveTrans(obj, Absence, 14, -1);
                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));
        }
        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 ActionResult DeleteLeaveaction(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.Posted == false)
            //{
            //    ErrorMessage errormessa = new ErrorMessage() { message = "Change Posted Value to This Record Then Delete it" };
            //    errorMessages.Add(errormessa);
            //    Error err = new Error() { errors = errorMessages };
            //    error.Add(err);
            //    Source.Errors = error;
            //    return Json(Source);
            //}
            if (obj != null)
            {
                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));
        }
        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);
        }
        // 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));
        }
        public ActionResult GroupLeaveActionDetails(LeaveActionFormViewModel model, OptionsViewModel moreInfo, int[] grid1)
        {
            List <Error> errors = new List <Error>();

            if (ModelState.IsValid)
            {
                if (ServerValidationEnabled)
                {
                    errors = _hrUnitOfWork.SiteRepository.CheckForm(new CheckParm
                    {
                        CompanyId    = CompanyId,
                        ObjectName   = "LeaveAction",
                        TableName    = "LeaveAdjusts",
                        ParentColumn = "CompanyId",
                        Columns      = Models.Utils.GetColumnViews(ModelState.Where(a => !a.Key.Contains('.'))),
                        Culture      = Language
                    });
                    if (errors.Count() > 0)
                    {
                        foreach (var e in errors)
                        {
                            foreach (var errorMsg in e.errors)
                            {
                                ModelState.AddModelError(errorMsg.field, errorMsg.message);
                            }
                        }
                        return(Json(Models.Utils.ParseFormErrors(ModelState)));
                    }
                }
                var message  = "OK";
                var Employee = _hrUnitOfWork.Repository <Assignment>().Where(a => grid1.Contains(a.DepartmentId)).Select(a => a.EmpId).ToList().Distinct();
                if (Employee.Count() > 0)
                {
                    foreach (var item in Employee)
                    {
                        var record = new LeaveAdjust();
                        AutoMapper(new Models.AutoMapperParm {
                            Destination = record, Source = model, ObjectName = "LeaveAction", Options = moreInfo
                        });
                        record.EmpId       = item;
                        record.CreatedUser = UserName;
                        record.CreatedTime = DateTime.Now;
                        record.AdjustDate  = DateTime.Now;
                        record.CompanyId   = CompanyId;
                        _hrUnitOfWork.LeaveRepository.Add(record);
                        //_hrUnitOfWork.LeaveRepository.PostLeaveAction(record, UserName);
                    }
                }
                else
                {
                    message = MsgUtils.Instance.Trls("thereisnoEmployee");
                }
                var Errors = SaveChanges(Language);
                if (Errors.Count > 0)
                {
                    message = Errors.First().errors.First().message;
                }
                return(Json(message));
            }
            return(Json(Models.Utils.ParseFormErrors(ModelState)));
        }
        public ActionResult Details(LeaveActionFormViewModel model, OptionsViewModel moreInfo)
        {
            List <Error> errors = new List <Error>();

            if (ModelState.IsValid)
            {
                if (ServerValidationEnabled)
                {
                    errors = _hrUnitOfWork.SiteRepository.CheckForm(new CheckParm
                    {
                        CompanyId    = CompanyId,
                        ObjectName   = "LeaveAction",
                        TableName    = "LeaveAdjusts",
                        ParentColumn = "CompanyId",
                        Columns      = Models.Utils.GetColumnViews(ModelState.Where(a => !a.Key.Contains('.'))),
                        Culture      = Language
                    });

                    if (errors.Count() > 0)
                    {
                        foreach (var e in errors)
                        {
                            foreach (var errorMsg in e.errors)
                            {
                                ModelState.AddModelError(errorMsg.field, errorMsg.message);
                            }
                        }

                        return(Json(Models.Utils.ParseFormErrors(ModelState)));
                    }
                }

                var record = _hrUnitOfWork.LeaveRepository.GetLeaveAction(model.Id);
                //insert
                if (record == null)
                {
                    record = new LeaveAdjust();
                    AutoMapper(new Models.AutoMapperParm
                    {
                        Destination = record,
                        Source      = model,
                        ObjectName  = "LeaveAction",
                        Options     = moreInfo,
                        Transtype   = TransType.Insert
                    });
                    record.CreatedUser = UserName;
                    record.CreatedTime = DateTime.Now;
                    record.AdjustDate  = DateTime.Now;
                    record.CompanyId   = CompanyId;
                    _hrUnitOfWork.LeaveRepository.Add(record);
                }

                //update
                else
                {
                    AutoMapper(new Models.AutoMapperParm
                    {
                        Destination = record,
                        Source      = model,
                        ObjectName  = "LeaveAction",
                        Options     = moreInfo,
                        Transtype   = TransType.Update
                    });

                    record.CompanyId = CompanyId;
                    _hrUnitOfWork.LeaveRepository.Attach(record);
                    _hrUnitOfWork.LeaveRepository.Entry(record).State = EntityState.Modified;
                }
                var Errors  = SaveChanges(Language);
                var message = "OK";
                if (Errors.Count > 0)
                {
                    message = Errors.First().errors.First().message;
                }

                return(Json(message));
            }

            return(Json(Models.Utils.ParseFormErrors(ModelState)));
        }