public async Task <IActionResult> SearchFormularyByName(string q)
        {
            string token = HttpContext.Session.GetString("access_token");

            var filterCriteria = new FormularyFilterCriteriaAPIModel()
            {
                searchTerm        = q,
                hideArchived      = false,
                showOnlyDuplicate = false
            };

            var response = await TerminologyAPIService.SearchFormulariesAsList(filterCriteria, token);

            if (response.StatusCode != DataService.APIModel.StatusCode.Success)
            {
                _toastNotification.AddErrorToastMessage(string.Join('\n', response.ErrorMessages));

                return(Json(null));
            }

            var formularies = response.Data;

            if (!formularies.IsCollectionValid())
            {
                return(Json(null));
            }

            return(Json(formularies));
        }
        private async Task <List <FormularyListAPIModel> > InvokeSearchAPI(FormularyFilterCriteriaAPIModel filterCriteria, string token)
        {
            //If has any search criteria - hit search api
            if (filterCriteria.searchTerm.IsNotEmpty() || filterCriteria.formularyStatusCd.IsCollectionValid() || filterCriteria.IncludeDeleted || filterCriteria.recStatusCds.IsCollectionValid() || filterCriteria.Flags.IsCollectionValid() || filterCriteria.hideArchived)
            {
                var recStsCodes = new List <string>();

                if (filterCriteria.recStatusCds.IsCollectionValid())
                {
                    recStsCodes = filterCriteria.recStatusCds;
                }

                //if (filterCriteria.hideArchived)
                //{
                //    recStsCodes.Clear();
                //    recStsCodes.Add("004");
                //}

                if (recStsCodes.IsCollectionValid())
                {
                    filterCriteria.recStatusCds = recStsCodes;
                }

                var formulariesResponse = await TerminologyAPIService.SearchFormularies(filterCriteria, token);

                if (formulariesResponse.StatusCode != DataService.APIModel.StatusCode.Success)
                {
                    string errors = "Error getting the Formularies data.";

                    if (formulariesResponse.ErrorMessages.IsCollectionValid())
                    {
                        errors += string.Join('\n', formulariesResponse.ErrorMessages.ToArray());
                    }

                    _toastNotification.AddErrorToastMessage(errors);

                    return(null);
                }
                return(formulariesResponse.Data?.data);
            }
            else
            {
                var formulariesResponse = await TerminologyAPIService.GetLatestTopLevelFormulariesBasicInfo(token);

                if (formulariesResponse.StatusCode != DataService.APIModel.StatusCode.Success)
                {
                    string errors = "Error getting the Formularies data.";
                    if (formulariesResponse.ErrorMessages.IsCollectionValid())
                    {
                        errors += string.Join('\n', formulariesResponse.ErrorMessages.ToArray());
                    }

                    _toastNotification.AddErrorToastMessage(errors);
                    return(null);
                }
                return(formulariesResponse.Data);
            }
        }
        public async Task <JsonResult> LoadFormularyList(FormularyListSearchCriteria searchCriteria)
        {
            var pageSize = 100;

            if (int.TryParse(_configuration["Settings:FormularyResultsPageSize"], out int configPageSize))
            {
                pageSize = configPageSize;
            }
            var paginatedVM = new FormularyTreePaginatedModel {
                PageSize = pageSize
            };

            string token = HttpContext.Session.GetString("access_token");

            HttpContext.Session.Remove(SynapseSession.FormularySearchResults);

            FormularyFilterCriteriaAPIModel filterCriteria = ConstructFormularyListFilterModel(searchCriteria);

            var recordStatusDictionary = HttpContext.Session.GetObject <Dictionary <string, string> >(SynapseSession.FormularyRecStatusLkpKey);

            var formularies = await InvokeSearchAPI(filterCriteria, token);

            if (!formularies.IsCollectionValid())
            {
                return(Json(paginatedVM));
            }

            if (!recordStatusDictionary.IsCollectionValid())
            {
                var recordStatusLkp = await TerminologyAPIService.GetRecordStatusLookup(token);

                if (recordStatusLkp.IsCollectionValid())
                {
                    recordStatusDictionary = recordStatusLkp.Where(rec => rec.Recordstatus == 1).ToDictionary(k => k.Cd.ToString(), v => v.Desc);

                    HttpContext.Session.SetObject(SynapseSession.FormularyRecStatusLkpKey, recordStatusDictionary);
                }
            }

            var formulariesAsTreeModel = ConvertToFormularyTreeModel(formularies, recordStatusDictionary);

            paginatedVM.TotalRecords = formulariesAsTreeModel.Count;

            HttpContext.Session.SetObject(SynapseSession.FormularySearchResults, formulariesAsTreeModel);

            paginatedVM.Results = formulariesAsTreeModel.Skip(0).Take(pageSize).ToList();

            return(Json(paginatedVM));
        }
        private FormularyFilterCriteriaAPIModel ConstructFormularyListFilterModel(FormularyListSearchCriteria searchCriteria)
        {
            FormularyFilterCriteriaAPIModel filter = new FormularyFilterCriteriaAPIModel();

            filter.searchTerm        = searchCriteria.SearchTerm ?? "";
            filter.hideArchived      = searchCriteria.HideArchived ?? false;
            filter.recStatusCds      = new List <string>();
            filter.formularyStatusCd = new List <string>();
            filter.Flags             = new List <string>();

            if (searchCriteria.RecStatusCds != null)
            {
                AssignFilterByRecStatusCodes(filter, searchCriteria);
            }

            return(filter);
        }
 private void AssignFilterByRecStatusCodes(FormularyFilterCriteriaAPIModel filter, FormularyListSearchCriteria searchCriteria)
 {
     if (searchCriteria.RecStatusCds.IndexOf(',') > -1)
     {
         foreach (string status in searchCriteria.RecStatusCds.Split(','))
         {
             if (status == "Duplicate")
             {
                 filter.showOnlyDuplicate = true;
             }
             else if (status.Split('|')[0] == "Rec")
             {
                 filter.recStatusCds.Add(status.Split('|')[1]);
             }
             else if (status.Split('|')[0] == "Form")
             {
                 filter.formularyStatusCd.Add(status.Split('|')[1]);
             }
             else if (status.Split('|')[0] == "Flags")
             {
                 filter.Flags.Add(status.Split('|')[1]);
             }
         }
     }
     else
     {
         if (searchCriteria.RecStatusCds == "Duplicate")
         {
             filter.showOnlyDuplicate = true;
         }
         else if (searchCriteria.RecStatusCds.IndexOf('|') > -1 && searchCriteria.RecStatusCds.Split('|')[0] == "Rec")
         {
             filter.recStatusCds.Add(searchCriteria.RecStatusCds.Split('|')[1]);
         }
         else if (searchCriteria.RecStatusCds.IndexOf('|') > -1 && searchCriteria.RecStatusCds.Split('|')[0] == "Form")
         {
             filter.formularyStatusCd.Add(searchCriteria.RecStatusCds.Split('|')[1]);
         }
         else if (searchCriteria.RecStatusCds.IndexOf('|') > -1 && searchCriteria.RecStatusCds.Split('|')[0] == "Flags")
         {
             filter.Flags.Add(searchCriteria.RecStatusCds.Split('|')[1]);
         }
     }
 }
        public static async Task <TerminologyAPIResponse <List <FormularyListAPIModel> > > SearchFormulariesAsList(FormularyFilterCriteriaAPIModel filterCriteria, string token)
        {
            var results = await InvokeService <List <FormularyListAPIModel> >($"{FormularyAPI_URI}/searchformulariesaslist/", token, HttpMethod.Post, filterCriteria);

            return(results);
        }