public async Task <Result <EmployeeReview> > Update(Request <EmployeeReview> request)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(request.Model.Name))
                {
                    return(new Result <EmployeeReview>("Name is Required"));
                }

                if (request.Model.ReviewTemplateId == 0 || request.Model.ReviewTemplateId == null)
                {
                    return(new Result <EmployeeReview>("Review Template is required"));
                }

                if (request.Model.ReviewDate == null)
                {
                    return(new Result <EmployeeReview>("Review date is required"));
                }

                if (request.Model.EmployeeId == 0)
                {
                    return(new Result <EmployeeReview>("Employee is required"));
                }

                if (request.Model.SupervisorId == 0)
                {
                    return(new Result <EmployeeReview>("Supervisor is required"));
                }

                request.Model.Rating = null;
                request.Model.EmployeeAverageScore   = 0;
                request.Model.SupervisorAverageScore = 0;

                var updateRes = _repo.Update(Mapper.Map <EmployeeReviewData>(request.Model));

                if (!updateRes)
                {
                    return(new Result <EmployeeReview>("Unable to update data"));
                }

                var searchReviewTemplate = new ReviewTemplateDataRepository().GetById(request.Model.ReviewTemplateId);

                CreateAnswer(searchReviewTemplate.Questions, request.Model.Id);

                return(new Result <EmployeeReview>()
                {
                    Successful = true, Message = "Successfully updated record", Model = request.Model
                });
            }
            catch (Exception e)
            {
                return(new Result <EmployeeReview>(e.Message));
            }
        }
        public async Task <Result <EmployeeReview> > Create(Request <EmployeeReview> request)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(request.Model.Name))
                {
                    return(new Result <EmployeeReview>("Name is Required"));
                }

                if (request.Model.ReviewTemplateId == 0 || request.Model.ReviewTemplateId == null)
                {
                    return(new Result <EmployeeReview>("Review Template is required"));
                }

                if (request.Model.ReviewDate == null)
                {
                    return(new Result <EmployeeReview>("Review date is required"));
                }

                if (request.Model.EmployeeId == 0)
                {
                    return(new Result <EmployeeReview>("Employee is required"));
                }

                if (request.Model.SupervisorId == 0)
                {
                    return(new Result <EmployeeReview>("Supervisor is required"));
                }

                request.Model.DateCreated = DateTime.Now;

                var searchExist = _repo.Search(new SearchRequest <DAL.Models.EmployeeReviewData>()
                {
                    Filter = f => f.Name == request.Model.Name
                });

                if (searchExist.SearchTotal > 0)
                {
                    return(new Result <EmployeeReview>("Employee Review is already exist"));
                }

                request.Model.Status = "Scheduled";

                var createRes = _repo.Insert(Mapper.Map <EmployeeReviewData>(request.Model));

                if (!createRes)
                {
                    return(new Result <EmployeeReview>("Unable to add employee review data"));
                }

                var searchEmployeeReview = _repo.Search(new SearchRequest <EmployeeReviewData>()).Items.OrderByDescending(x => x.Id).FirstOrDefault();

                var searchReviewTemplate = new ReviewTemplateDataRepository().GetById(request.Model.ReviewTemplateId);

                CreateAnswer(searchReviewTemplate.Questions, searchEmployeeReview.Id);

                return(new Result <EmployeeReview>()
                {
                    Successful = true, Message = "Successfully created employee review data", Model = request.Model
                });
            }
            catch (Exception e)
            {
                return(new Result <EmployeeReview>(e.Message));
            }
        }