/// <summary> /// Simple closing of an signal. /// Must include details /// </summary> /// <param name="closeDetails"></param> /// <returns></returns> public async Task CloseNoIncident(SimsSignalCloseNoIncident closeDetails) { var signal = this.ctx.Signals.Find(closeDetails.SignalId); if (signal.SignalStatusId < 50) { signal.SignalStatusId = closeDetails.StatusCloseId; var dbClosedDetails = this.mapper.Map <CloseSignalNoIncidentDb>(closeDetails); // duplicatre reason in the notes field. //ctx.SignalNotes.Add(new SignalNoteDb { HostId = closeDetails.SignalId, Note = closeDetails.UserReason }); var closureReason = "Unknown reason"; var closeReasonId = (SignalStatusTypes)signal.SignalStatusId; if (closeReasonId == SignalStatusTypes.Closed_No_Incident) { closureReason = "No further action"; if (closeDetails.ReasonId.HasValue) { var reason = await ctx.ClosedSignalReasons.AsNoTracking().SingleOrDefaultAsync(a => a.Id == closeDetails.ReasonId); closureReason += $"\nReason\n- {reason.Title}"; } } if (closeReasonId == SignalStatusTypes.Closed_Referrel_Offline) { closureReason = "Referral"; if (closeDetails.TeamIds.Length > 0) { var orAllTeams = new Stack <Expression <Func <CloseSignalTeamDb, bool> > >(); // ctx.ClosedSignalTeams.Where() foreach (var id in closeDetails.TeamIds) { var capturedId = id; orAllTeams.Push(team => team.Id == capturedId); } var teamsWhereClause = BuildOrClause(orAllTeams); var allTeams = String.Join("\n- ", ctx.ClosedSignalTeams.Where(teamsWhereClause).Select(a => a.Title)); closureReason += $"\nReferred to\n{allTeams}"; } } var note = this.ClosureNote(closureReason, null, closeDetails.UserReason); note.HostId = closeDetails.SignalId; this.ctx.Add(dbClosedDetails); this.ctx.SignalNotes.Add(note); await this.ctx.SaveChangesAsync(); } }
public Task CloseNoIncident(SimsSignalCloseNoIncident close) { if (close.ReasonId == 0 && close.TeamIds.Length == 0) { throw new SIMSException("Reason/Team is invalid"); } if (close.SignalId == 0) { throw new SimsSignalMissingException("Signal id missing"); } if (close.StatusCloseId == (int)SimsSignalStatusTypes.Closed_No_Incident || close.StatusCloseId == (int)SimsSignalStatusTypes.Closed_Referrel_Offline) { return(dbHost.Signals.CloseNoIncident(close)); } else { throw new SimsItemMissing("Incorrect close message"); } }
public async Task <IActionResult> CloseNoIncident(SimsSignalCloseNoIncident closeNoIncident) { await this.simsApp.Signals.CloseNoIncident(closeNoIncident); return(this.Ok()); }