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; } }
public static async Task <CrisisPlanViewModel> ToViewModelAsync(this CrisisPlan source) { var viewModel = CrisisPlan.ToViewModel(source); return(await Task.Run(() => viewModel)); }