public async SystemTasks.Task <CrisisPlanViewModel> GetForPatient(string nhsNumber, bool ifActive)
        {
            try
            {
                var builder = Builders <CrisisPlan> .Filter;
                var filters = new List <FilterDefinition <CrisisPlan> >();

                if (ifActive)
                {
                    filters.Add(builder.Eq(x => x.Active, true));
                }

                filters.Add(builder.Eq(x => x.PatientNhsNumber, nhsNumber));
                filters.Add(builder.Eq(x => x.RecordType, RecordType.MentalHealthCrisisPlan.ToString()));

                var options = new FindOptions <CrisisPlan, CrisisPlan>();
                options.Sort = Builders <CrisisPlan> .Sort.Descending(x => x.Version);

                var model = await _context.CrisisPlans.FindSync(builder.And(filters), options).FirstOrDefaultAsync();

                if (model == null)
                {
                    return(null);
                }

                return(CrisisPlan.ToViewModel(model));
            }
            catch (Exception ex)
            {
                // log or manage the exception
                throw ex;
            }
        }
        public async SystemTasks.Task <CrisisPlanViewModel> GetById(string planId)
        {
            try
            {
                var builder = Builders <CrisisPlan> .Filter;
                var filters = new List <FilterDefinition <CrisisPlan> >();
                filters.Add(builder.Eq(x => x.Active, true));
                filters.Add(builder.Eq(x => x.Id, new ObjectId(planId)));
                filters.Add(builder.Eq(x => x.RecordType, RecordType.MentalHealthCrisisPlan.ToString()));

                var model = await _context.CrisisPlans.FindSync(builder.And(filters), null).FirstOrDefaultAsync();

                if (model == null)
                {
                    return(null);
                }

                return(CrisisPlan.ToViewModel(model));
            }
            catch (Exception ex)
            {
                // log or manage the exception
                throw ex;
            }
        }
        public async SystemTasks.Task <CrisisPlanViewModel> SavePlan(CrisisPlanViewModel crisisPlan)
        {
            try
            {
                crisisPlan = crisisPlan.Cleaned();

                var currentPlan = await this.GetForPatient(crisisPlan.PatientNhsNumber, true);

                int version = 1;

                if (currentPlan != null)
                {
                    version          = currentPlan.Version + 1;
                    currentPlan.Asid = crisisPlan.Asid;
                    //Should really archive plans after update rather than mark as delete
                    //Delete only when an active delete request is made
                    var deleted = await DeletePlan(currentPlan);
                }

                crisisPlan.Version = version;
                crisisPlan.Active  = true;

                //Create new plan
                var newCrisisPlan = CrisisPlan.ToModel(crisisPlan);

                _context.CrisisPlans.InsertOne(newCrisisPlan);

                //Hardcoded values - this is a demo with urls to ficticious documents
                var pointerRequest = NrlsPointerRequest.Create(crisisPlan.OrgCode, crisisPlan.OrgCode, crisisPlan.PatientNhsNumber, $"https://spine-proxy.national.ncrs.nhs.uk/{newCrisisPlan.Id}/mental-health-care-plan.pdf", "application/pdf", MentalHealthCrisisPlanTypeCode, MentalHealthCrisisPlanTypeDisplay, crisisPlan.Asid);

                //Create new NRLS pointer
                var newPointer = await _documentReferenceServices.GenerateAndCreatePointer(pointerRequest);

                //Create map between NRLS Pointer and Medical Record
                _pointerMapService.CreatePointerMap(newPointer.ResourceId, newCrisisPlan.Id, RecordType.MentalHealthCrisisPlan);

                return(await SystemTasks.Task.Run(() => CrisisPlan.ToViewModel(newCrisisPlan)));
            }
            catch (Exception ex)
            {
                // log or manage the exception
                throw ex;
            }
        }
Пример #4
0
        public static async Task <CrisisPlanViewModel> ToViewModelAsync(this CrisisPlan source)
        {
            var viewModel = CrisisPlan.ToViewModel(source);

            return(await Task.Run(() => viewModel));
        }