/// <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");
            }
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> CloseNoIncident(SimsSignalCloseNoIncident closeNoIncident)
        {
            await this.simsApp.Signals.CloseNoIncident(closeNoIncident);

            return(this.Ok());
        }