public ActionResult GetOptimizedProcedures(int?countryId)
        {
            if (countryId == 0)
            {
                return(null);
            }

            int    start          = Convert.ToInt32(Request["start"]);
            int    length         = Convert.ToInt32(Request["length"]);
            string searchValue    = Request["search[value]"];
            string sortColumnName = Request["columns[" + Request["order[0][column]"] + "][name]"];
            string sortDirection  = Request["order[0][dir]"];

            var proceduresDto = _procedureService.GetProceduresOptimized(countryId, searchValue, sortColumnName, sortDirection, start, length, out int totalrows, out int totalrowsafterfiltering);

            var config = new MapperConfiguration(cfg => cfg.CreateMap <ProcedureDTO, ProcedureViewOptimized>()
                                                 .ForMember(dest => dest.ProcedureType, opt => opt.MapFrom(c => c.ProcedureType.ToString()))
                                                 .ForMember(dest => dest.ProductInfo, opt => opt.MapFrom(c => string.Format($"{c.Product.ProductName.Name} {c.Product.ProductCode}")))
                                                 .ForMember(dest => dest.Name, opt => opt.MapFrom(c => c.Name))
                                                 .ForMember(dest => dest.EstimatedSubmissionDate, opt => opt.MapFrom(c => c.EstimatedSubmissionDate.ToString()))
                                                 .ForMember(dest => dest.SubmissionDate, opt => opt.MapFrom(c => c.SubmissionDate.ToString()))
                                                 .ForMember(dest => dest.EstimatedApprovalDate, opt => opt.MapFrom(c => c.EstimatedApprovalDate.ToString()))
                                                 .ForMember(dest => dest.ApprovalDate, opt => opt.MapFrom(c => c.ApprovalDate.ToString()))
                                                 .ForMember(dest => dest.Comments, opt => opt.MapFrom(c => c.Comments))
                                                 .ForMember(dest => dest.ProductId, opt => opt.MapFrom(c => c.ProductId))
                                                 .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id)));
            var mapper     = config.CreateMapper();
            var procedures = mapper.Map <List <ProcedureDTO>, List <ProcedureViewOptimized> >(proceduresDto.ToList());

            var json = Json(new { data = procedures, draw = Request["draw"], recordsTotal = totalrows, recordsFiltered = totalrowsafterfiltering }, JsonRequestBehavior.AllowGet);

            return(json);
        }