/// <summary> /// Metodo di esecuzione della query /// </summary> /// <param name="query">Il DTO di ingresso della query</param> /// <returns>Il DTO di uscita della query</returns> public ListaTurniResult Handle(ListaTurniQuery query) { var listaTurni = _getTurno.Get(); return(new ListaTurniResult() { Turno = listaTurni }); }
/// <summary> /// Metodo di esecuzione della query /// </summary> /// <param name="query">Il DTO di ingresso della query</param> /// <returns>Il DTO di uscita della query</returns> public ListaTurniResult Handle(ListaTurniQuery query) { Log.Debug("Inizio elaborazione Lista Turni Handler"); var listaTurni = _getTurno.Get(); Log.Debug("Fine elaborazione Lista Turni Handler"); return(new ListaTurniResult() { Turno = listaTurni }); }
public List <SintesiRichiesta> GetListaSintesiRichieste(FiltroRicercaRichiesteAssistenza filtro) { var filtroSediCompetenti = Builders <RichiestaAssistenza> .Filter .In(richiesta => richiesta.CodSOCompetente, filtro.UnitaOperative.Select(uo => uo.Codice)); List <string> listaCodSedi = new List <string>(); foreach (var sede in filtro.UnitaOperative) { listaCodSedi.Add(sede.Codice); } var filtriSediAllertate = Builders <RichiestaAssistenza> .Filter.AnyIn(x => x.CodSOAllertate, listaCodSedi); List <RichiestaAssistenza> result = new List <RichiestaAssistenza>(); result = _dbContext.RichiestaAssistenzaCollection.Find(filtroSediCompetenti).ToList(); //FILTRO TIPOLOGIA RICHIESTA (CHIAMATE/INTERVENTI) if (filtro.TipologiaRichiesta != null) { result = result.Where(r => { if (filtro.TipologiaRichiesta.Equals("Chiamate")) { return(r.TestoStatoRichiesta == "C"); } if (filtro.TipologiaRichiesta.Equals("Interventi")) { return(r.TestoStatoRichiesta != "C"); } return(true); }).ToList(); } //FILTRO STATI RICHIESTA if (filtro.StatiRichiesta != null && filtro.StatiRichiesta.Count() != 0) { if (filtro.StatiRichiesta.Contains("Assegnata")) { filtro.StatiRichiesta.Add("InAttesa"); } result = result.Where(r => filtro.StatiRichiesta.Contains(r.StatoRichiesta.GetType().Name)).ToList(); } else //CHIUSE NASCOSTE DI DEFAULT { result = result.Where(r => !r.StatoRichiesta.GetType().Name.Contains("Chiusa")).ToList(); } //FILTRO ZONE EMERGENZA if (filtro.ZoneEmergenza != null) { result = result.Where(r => r.CodZoneEmergenza.Any(z => filtro.ZoneEmergenza.Contains(z))).ToList(); } //FILTRO PERIODO CHIAMATE CHIUSE if (filtro.PeriodoChiuse != null) { result = result.Where(r => { if (filtro.PeriodoChiuse.Data != null) { return(r.Aperta == true || (r.Chiusa == true && r.IstanteChiusura.Value.Year == filtro.PeriodoChiuse.Data.Value.Year && r.IstanteChiusura.Value.Month == filtro.PeriodoChiuse.Data.Value.Month && r.IstanteChiusura.Value.Day == filtro.PeriodoChiuse.Data.Value.Day)); } else if (filtro.PeriodoChiuse.Turno != null) { var turno = _getTurno.Get(r.IstanteChiusura); return(r.Aperta == true || (r.Chiusa == true && turno.Codice.Contains(filtro.PeriodoChiuse.Turno))); } else if (filtro.PeriodoChiuse.Da != null && filtro.PeriodoChiuse.A != null) { return(r.Aperta == true || (r.IstanteChiusura >= filtro.PeriodoChiuse.Da && r.IstanteChiusura <= filtro.PeriodoChiuse.A)); } return(true); }).ToList(); } if (filtro.FiltriTipologie != null) { result = result.Where(o => filtro.FiltriTipologie.Any(s => o.Tipologie.Contains(s))).ToList(); } if (filtro.IndirizzoIntervento != null) { result = result.FindAll(o => o.Localita.Coordinate.Latitudine.Equals(filtro.IndirizzoIntervento.Coordinate.Latitudine) && o.Localita.Coordinate.Longitudine.Equals(filtro.IndirizzoIntervento.Coordinate.Longitudine)); } if (filtro.StatiRichiesta != null && filtro.StatiRichiesta.Count() > 0) { result = result.Where(r => filtro.StatiRichiesta.Contains(r.StatoRichiesta.GetType().Name)).ToList(); } var listaSistesiRichieste = new List <SintesiRichiesta>(); foreach (RichiestaAssistenza richiesta in result) { List <EnteDTO> rubrica = new List <EnteDTO>(); if (richiesta.CodEntiIntervenuti != null) { var lstCodiciEnti = richiesta.CodEntiIntervenuti.Select(c => int.Parse(c)).ToArray(); rubrica = _getRubrica.GetBylstCodici(lstCodiciEnti); } SintesiRichiesta sintesi = new SintesiRichiesta(); if (richiesta.CodUOCompetenza != null) { sintesi = _mapperSintesi.Map(richiesta); sintesi.Competenze = MapCompetenze(richiesta.CodUOCompetenza); sintesi.SediAllertate = richiesta.CodSOAllertate != null?MapCompetenze(richiesta.CodSOAllertate.ToArray()) : null; sintesi.ListaEntiIntervenuti = rubrica.Count == 0 ? null : rubrica; listaSistesiRichieste.Add(sintesi); } } //ORDINAMENTO RICHIESTE return(listaSistesiRichieste .OrderByDescending(c => c.Stato.Equals(Costanti.Chiamata) && c.Partenze.Count == 0) .ThenByDescending(c => c.Stato.Equals(Costanti.Chiamata) && c.Partenze.Count > 0) .ThenByDescending(c => c.Stato.Equals(Costanti.RichiestaAssegnata)) .ThenByDescending(c => c.Stato.Equals(Costanti.RichiestaPresidiata)) .ThenByDescending(c => c.Stato.Equals(Costanti.RichiestaChiusa)) .ThenByDescending(x => x.PrioritaRichiesta) .ThenBy(x => x.IstanteRicezioneRichiesta) .ToList()); }
public void Handle(AddInterventoCommand command) { var Competenze = _getCompetenze.GetCompetenzeByCoordinateIntervento(command.Chiamata.Localita.Coordinate).ToHashSet(); var lstCompetenze = new List <Distaccamento>(); Competenze.ToList().ForEach(c => lstCompetenze.Add(_getDistaccamento.Get(c).Result)); if (Competenze.ToList()[0] == null) { throw new Exception(Costanti.CoordinateErrate); } var sedeRichiesta = command.CodiceSede; var prioritaRichiesta = (RichiestaAssistenza.Priorita)command.Chiamata.PrioritaRichiesta; var codiceChiamata = _generaCodiceRichiesta.GeneraCodiceChiamata(sedeRichiesta, DateTime.UtcNow.Year); command.Chiamata.Codice = codiceChiamata; var listaCodiciTipologie = new List <string>(); var utentiInLavorazione = new List <string>(); var utentiPresaInCarico = new List <string>(); foreach (var tipologia in command.Chiamata.Tipologie) { listaCodiciTipologie.Add(tipologia.Codice); } if (command.Chiamata.ListaUtentiInLavorazione != null) { foreach (var utente in command.Chiamata.ListaUtentiInLavorazione) { utentiInLavorazione.Add(utente.Nominativo); } } if (command.Chiamata.ListaUtentiPresaInCarico != null) { foreach (var utente in command.Chiamata.ListaUtentiPresaInCarico) { utentiPresaInCarico.Add(utente.Nominativo); } } var richiesta = new RichiestaAssistenza() { Tipologie = listaCodiciTipologie, CodZoneEmergenza = command.Chiamata.ZoneEmergenza, Richiedente = command.Chiamata.Richiedente, Localita = command.Chiamata.Localita, Descrizione = command.Chiamata.Descrizione, Codice = codiceChiamata, TrnInsChiamata = $"Turno {_getTurno.Get().Codice.Substring(0, 1)}", TipoTerreno = command.Chiamata.TipoTerreno, ObiettivoSensibile = command.Chiamata.ObiettivoSensibile, UtInLavorazione = utentiInLavorazione, UtPresaInCarico = utentiPresaInCarico, NotePubbliche = command.Chiamata.NotePubbliche, NotePrivate = command.Chiamata.NotePrivate, CodUOCompetenza = Competenze.ToArray(), Competenze = lstCompetenze.Select(d => new Sede(d.CodSede.ToString(), d.DescDistaccamento, d.Indirizzo, d.Coordinate, null, null, null, null, null)).ToList(), CodOperatore = command.CodUtente, CodSOCompetente = command.CodiceSede, CodEntiIntervenuti = command.Chiamata.listaEnti != null?command.Chiamata.listaEnti.Select(c => c.ToString()).ToList() : null }; if (command.Chiamata.Stato == Costanti.RichiestaChiusa) { new ChiusuraRichiesta("", richiesta, DateTime.UtcNow, command.CodUtente); } if (command.Chiamata.Tags != null) { foreach (var t in command.Chiamata.Tags) { richiesta.Tags.Add(t); } } new Telefonata(richiesta, command.Chiamata.Richiedente.Telefono, DateTime.UtcNow, command.CodUtente) { NominativoChiamante = command.Chiamata.Richiedente.Nominativo, Motivazione = command.Chiamata.Motivazione, NotePrivate = command.Chiamata.NotePrivate, NotePubbliche = command.Chiamata.NotePubbliche, NumeroTelefono = command.Chiamata.Richiedente.Telefono, Esito = command.Chiamata.Azione.ToString(), CodiceSchedaContatto = command.Chiamata.CodiceSchedaNue }; new AssegnazionePriorita(richiesta, prioritaRichiesta, DateTime.UtcNow.AddMilliseconds(1.0), command.CodUtente); if (command.Chiamata.RilevanteGrave || command.Chiamata.RilevanteStArCu) { new MarcaRilevante(richiesta, DateTime.UtcNow.AddMilliseconds(1.5), command.CodUtente, "", command.Chiamata.RilevanteGrave, command.Chiamata.RilevanteStArCu); } if (command.Chiamata.Azione.Equals(Azione.FalsoAllarme) || command.Chiamata.Azione.Equals(Azione.ChiusuraForzata) || command.Chiamata.Azione.Equals(Azione.InterventoDuplicato) || command.Chiamata.Azione.Equals(Azione.InterventoNonPiuNecessario)) { command.Chiamata.Stato = Costanti.RichiestaChiusa; new ChiusuraRichiesta("", richiesta, DateTime.UtcNow.AddMilliseconds(1.0), command.CodUtente); } if (command.Chiamata.CodiceSchedaNue != null) { var codiceFiscaleOperatore = _getUtenteById.GetUtenteByCodice(command.CodUtente).CodiceFiscale; _setStatoGestioneSchedaContatto.Gestita(command.Chiamata.CodiceSchedaNue, command.CodiceSede, codiceFiscaleOperatore, true); } _saveRichiestaAssistenza.Save(richiesta); }
public void Handle(AddInterventoCommand command) { var sedeRichiesta = command.Chiamata.Operatore.Sede.Codice; var prioritaRichiesta = (RichiestaAssistenza.Priorita)command.Chiamata.PrioritaRichiesta; var codiceChiamata = _generaCodiceRichiesta.GeneraCodiceChiamata(sedeRichiesta, DateTime.UtcNow.Year); command.Chiamata.Codice = codiceChiamata; command.Chiamata.Id = codiceChiamata; var richiesta = new RichiestaAssistenza() { Tipologie = command.Chiamata.Tipologie, ZoneEmergenza = command.Chiamata.ZoneEmergenza, Operatore = command.Chiamata.Operatore, Richiedente = command.Chiamata.Richiedente, Localita = command.Chiamata.Localita, Descrizione = command.Chiamata.Descrizione, Codice = codiceChiamata, TurnoInserimentoChiamata = _getTurno.Get(), TipoTerreno = command.Chiamata.TipoTerreno, ListaEntiIntervenuti = command.Chiamata.ListaEntiIntervenuti, ObiettivoSensibile = command.Chiamata.ObiettivoSensibile, ListaUtentiInLavorazione = command.Chiamata.ListaUtentiInLavorazione, ListaUtentiPresaInCarico = command.Chiamata.ListaUtentiPresaInCarico, NotePubbliche = command.Chiamata.NotePubbliche, NotePrivate = command.Chiamata.NotePrivate, Id = codiceChiamata // TODO DA TOGLIERE QUANDO AVREMO UN DB }; if (command.Chiamata.Stato == Costanti.RichiestaChiusa) { new ChiusuraRichiesta("", richiesta, DateTime.UtcNow, command.Chiamata.Operatore.Id); } if (command.Chiamata.Tags != null) { foreach (var t in command.Chiamata.Tags) { richiesta.Tags.Add(t); } } new Telefonata(richiesta, command.Chiamata.Richiedente.Telefono, DateTime.UtcNow, command.Chiamata.Operatore.Id) { NominativoChiamante = command.Chiamata.Richiedente.Nominativo, Motivazione = command.Chiamata.Motivazione, NotePrivate = command.Chiamata.NotePrivate, NotePubbliche = command.Chiamata.NotePubbliche, NumeroTelefono = command.Chiamata.Richiedente.Telefono, Esito = command.Chiamata.Azione.ToString(), }; new AssegnazionePriorita(richiesta, prioritaRichiesta, DateTime.UtcNow.AddMilliseconds(1.0), command.Chiamata.Operatore.Id); if (command.Chiamata.RilevanteGrave || command.Chiamata.RilevanteStArCu) { new MarcaRilevante(richiesta, DateTime.UtcNow.AddMilliseconds(1.5), command.Chiamata.Operatore.Id, "", command.Chiamata.RilevanteGrave, command.Chiamata.RilevanteStArCu); } this._saveRichiestaAssistenza.Save(richiesta); }
public void Handle(AddInterventoCommand command) { var Competenza = _getCompetenze.GetCompetenzeByCoordinateIntervento(command.Chiamata.Localita.Coordinate); string[] CodUOCompetenzaAppo = { Competenza.CodProvincia + "." + Competenza.CodDistaccamento, Competenza.CodProvincia + "." + Competenza.CodDistaccamento2, Competenza.CodProvincia + "." + Competenza.CodDistaccamento3, Competenza.CodProvincia + ".1000" }; var sedeRichiesta = command.CodiceSede; var prioritaRichiesta = (RichiestaAssistenza.Priorita)command.Chiamata.PrioritaRichiesta; var codiceChiamata = _generaCodiceRichiesta.GeneraCodiceChiamata(sedeRichiesta, DateTime.UtcNow.Year); command.Chiamata.Codice = codiceChiamata; var listaCodiciTipologie = new List <string>(); var utentiInLavorazione = new List <string>(); var utentiPresaInCarico = new List <string>(); foreach (var tipologia in command.Chiamata.Tipologie) { listaCodiciTipologie.Add(tipologia.Codice); } if (command.Chiamata.ListaUtentiInLavorazione != null) { foreach (var utente in command.Chiamata.ListaUtentiInLavorazione) { utentiInLavorazione.Add(utente.Nominativo); } } if (command.Chiamata.ListaUtentiPresaInCarico != null) { foreach (var utente in command.Chiamata.ListaUtentiPresaInCarico) { utentiPresaInCarico.Add(utente.Nominativo); } } var richiesta = new RichiestaAssistenza() { Tipologie = listaCodiciTipologie, CodZoneEmergenza = command.Chiamata.ZoneEmergenza, Richiedente = command.Chiamata.Richiedente, Localita = command.Chiamata.Localita, Descrizione = command.Chiamata.Descrizione, Codice = codiceChiamata, TrnInsChiamata = $"Turno {_getTurno.Get().Codice.Substring(0, 1)}", TipoTerreno = command.Chiamata.TipoTerreno, ObiettivoSensibile = command.Chiamata.ObiettivoSensibile, UtInLavorazione = utentiInLavorazione, UtPresaInCarico = utentiPresaInCarico, NotePubbliche = command.Chiamata.NotePubbliche, NotePrivate = command.Chiamata.NotePrivate, CodUOCompetenza = CodUOCompetenzaAppo, CodOperatore = command.CodUtente, CodSOCompetente = CodUOCompetenzaAppo[0] }; if (command.Chiamata.Stato == Costanti.RichiestaChiusa) { new ChiusuraRichiesta("", richiesta, DateTime.UtcNow, command.CodUtente); } if (command.Chiamata.Tags != null) { foreach (var t in command.Chiamata.Tags) { richiesta.Tags.Add(t); } } new Telefonata(richiesta, command.Chiamata.Richiedente.Telefono, DateTime.UtcNow, command.CodUtente) { NominativoChiamante = command.Chiamata.Richiedente.Nominativo, Motivazione = command.Chiamata.Motivazione, NotePrivate = command.Chiamata.NotePrivate, NotePubbliche = command.Chiamata.NotePubbliche, NumeroTelefono = command.Chiamata.Richiedente.Telefono, Esito = command.Chiamata.Azione.ToString(), }; new AssegnazionePriorita(richiesta, prioritaRichiesta, DateTime.UtcNow.AddMilliseconds(1.0), command.CodUtente); if (command.Chiamata.RilevanteGrave || command.Chiamata.RilevanteStArCu) { new MarcaRilevante(richiesta, DateTime.UtcNow.AddMilliseconds(1.5), command.CodUtente, "", command.Chiamata.RilevanteGrave, command.Chiamata.RilevanteStArCu); } this._saveRichiestaAssistenza.Save(richiesta); }
public ComposizionePartenzaAvanzataResult Handle(ComposizionePartenzaAvanzataQuery query) { Log.Debug("Inizio elaborazione Composizione partenza avanzata Handler"); var lstSedi = query.CodiceSede.ToList(); var tipologia90 = _getTipologieByCodice.Get(new List <string> { "90" }).First(); var turnoCorrente = _getTurno.Get(); var turnoPrecedente = _getTurno.Get(turnoCorrente.DataOraInizio.AddMilliseconds(-1)); var turnoSuccessivo = _getTurno.Get(turnoCorrente.DataOraFine.AddMinutes(1)); //REPERISCO I DATI, FACCIO IL MAPPING ED APPLICO I FILTRI (MEZZI E SQUADRE) var lstSquadre = Task.Factory.StartNew(() => _getListaSquadre.Get(lstSedi) .ContinueWith(lstsquadre => { var statiOperativi = _getStatoSquadre.Get(lstSedi); return(lstsquadre.Result.Select(squadra => { if (statiOperativi.Exists(x => x.IdSquadra.Equals(squadra.Id))) { squadra.Stato = MappaStatoSquadraDaStatoMezzo.MappaStato(statiOperativi.Find(x => x.IdSquadra.Equals(squadra.Id)).StatoSquadra); } else { squadra.Stato = Squadra.StatoSquadra.InSede; } var comp = new Classi.Composizione.ComposizioneSquadre() { Id = squadra.Id, Squadra = squadra }; squadra.IndiceOrdinamento = new OrdinamentoSquadre(query.Richiesta).GetIndiceOrdinamento(comp); return comp; })); }) .ContinueWith(lstCompSquadre => FiltraSquadre(query, lstCompSquadre.Result, tipologia90, turnoCorrente, turnoPrecedente, turnoSuccessivo)).Result); var lstMezzi = Task.Factory.StartNew(() => _getPosizioneFlotta.Get(0) .ContinueWith(lstPosizioneFlotta => _getMezziUtilizzabili.Get(lstSedi, posizioneFlotta: lstPosizioneFlotta.Result).Result) .ContinueWith(lstmezzi => //Mapping { var composizioneMezzi = (from mezzo in lstmezzi.Result let kmGen = new Random().Next(1, 60).ToString() let tempoPer = Convert.ToDouble(kmGen.Replace(".", ",")) / 1.75 select new Classi.Composizione.ComposizioneMezzi() { Id = mezzo.Codice, Mezzo = mezzo, Km = kmGen, TempoPercorrenza = Math.Round(tempoPer, 2).ToString(CultureInfo.InvariantCulture), }).ToList(); var mezziPrenotati = _getMezziPrenotati.Get(query.CodiceSede); decimal totaleKM = 0; decimal totaleTempoPercorrenza = 0; string mediaDistanza; string mediaTempoPercorrenza; return(composizioneMezzi.Select(c => { if (c.IstanteScadenzaSelezione < DateTime.Now) { c.IstanteScadenzaSelezione = null; } if (mezziPrenotati.Find(x => x.CodiceMezzo.Equals(c.Mezzo.Codice)) != null) { c.Id = c.Mezzo.Codice; c.IstanteScadenzaSelezione = mezziPrenotati.Find(x => x.CodiceMezzo.Equals(c.Mezzo.Codice)).IstanteScadenzaSelezione; if (c.Mezzo.Stato.Equals("In Sede")) { c.Mezzo.Stato = mezziPrenotati.Find(x => x.CodiceMezzo.Equals(c.Mezzo.Codice)).StatoOperativo; } } //Per i mezzi con coordinate Fake nella property i Km e la TempoPercorrenza vengono impostati i valori medi della collection totaleKM += Convert.ToDecimal(c.Km.Replace(".", ",")); totaleTempoPercorrenza += Convert.ToDecimal(c.TempoPercorrenza.Replace(".", ",")); mediaDistanza = Math.Round(totaleKM / composizioneMezzi.Count(), 2).ToString(CultureInfo.InvariantCulture); mediaTempoPercorrenza = Math.Round(totaleTempoPercorrenza / composizioneMezzi.Count(), 2).ToString(CultureInfo.InvariantCulture); c.Km = mediaDistanza; c.TempoPercorrenza = mediaTempoPercorrenza; c.IndiceOrdinamento = new OrdinamentoMezzi(query.Richiesta, _getTipologieByCodice, _configuration, _memoryCache).GetIndiceOrdinamento(c, c.Mezzo.CoordinateFake); return c; })); }) .ContinueWith(lstCompMezzi => FiltraMezzi(query, lstCompMezzi.Result)).Result); //PREPARO PAGINAZIONE IN BASE AI FILTRI var indexMezzo = query.Filtro.Mezzo != null?lstMezzi.Result.FindIndex(c => c.Mezzo.Codice.Equals(query.Filtro.Mezzo.Codice)) : 0; var indexSquadra = query.Filtro.Squadre != null?lstSquadre.Result.FindIndex(c => c.Squadra.Codice.Equals(query.Filtro.Squadre.FirstOrDefault().Codice)) : 0; if (indexMezzo != 0) { query.Filtro.MezziPagination.Page = (indexMezzo + 1) / query.Filtro.MezziPagination.PageSize + 1; } if (indexSquadra != 0) { query.Filtro.SquadrePagination.Page = (indexSquadra + 1) / query.Filtro.SquadrePagination.PageSize + 1; } //COMPONGO IL DTO E FACCIO LA PAGINAZIONE var composizioneAvanzata = new Classi.Composizione.ComposizionePartenzaAvanzata() { ComposizioneMezziDataArray = lstMezzi.Result .Skip(query.Filtro.MezziPagination.PageSize * (query.Filtro.MezziPagination.Page - 1)) .Take(query.Filtro.MezziPagination.PageSize).ToList(), ComposizioneSquadreDataArray = lstSquadre.Result .Skip(query.Filtro.SquadrePagination.PageSize * (query.Filtro.SquadrePagination.Page - 1)) .Take(query.Filtro.SquadrePagination.PageSize).ToList(), MezziPagination = new Paginazione() { Page = query.Filtro.MezziPagination.Page, PageSize = query.Filtro.MezziPagination.PageSize, TotalItems = lstMezzi.Result.Count }, SquadrePagination = new Paginazione() { Page = query.Filtro.SquadrePagination.Page, PageSize = query.Filtro.SquadrePagination.PageSize, TotalItems = lstSquadre.Result.Count } }; Log.Debug("Fine elaborazione Composizione partenza avanzata Handler"); return(new ComposizionePartenzaAvanzataResult() { ComposizionePartenzaAvanzata = composizioneAvanzata }); }