Esempio n. 1
0
        /// <summary>
        ///   Il metodo accetta in firma il command, e aggiorna i dati relativi alla conferma della partenza
        /// </summary>
        /// <param name="command">il command in ingresso</param>
        /// <returns>ConfermaPartenze</returns>
        public ConfermaPartenze Update(ConfermaPartenzeCommand command)
        {
            var conferma = new ConfermaPartenze();

            _updateRichiesta.UpDate(command.ConfermaPartenze.richiesta);
            var tipologia = _getTipologieByCodice.Get(command.ConfermaPartenze.richiesta.Tipologie)[0];

            foreach (var partenza in command.ConfermaPartenze.Partenze)
            {
                var dataMovintazione = DateTime.UtcNow;

                //_setMovimentazione.Set(partenza.Mezzo.Codice, DateTime.UtcNow, command.ConfermaPartenze.IdRichiesta, tipologia.Codice, tipologia.Descrizione); //TODO IMPLEMENTARE CON GAC
                _setStatoOperativoMezzo.Set(command.ConfermaPartenze.CodiceSede, partenza.Mezzo.Codice, Costanti.MezzoInViaggio, command.ConfermaPartenze.IdRichiesta);

                foreach (var squadra in partenza.Squadre)
                {
                    _setStatoSquadra.SetStato(squadra.Codice, command.ConfermaPartenze.IdRichiesta, Costanti.MezzoInViaggio, command.ConfermaPartenze.CodiceSede);
                }
            }

            conferma.CodiceSede  = command.ConfermaPartenze.CodiceSede;
            conferma.IdRichiesta = command.ConfermaPartenze.IdRichiesta;
            conferma.richiesta   = command.ConfermaPartenze.richiesta;
            return(conferma);
        }
Esempio n. 2
0
        public TipologieResult Handle(TipologieQuery query)
        {
            Log.Debug("Inizio elaborazione Tipologie Handler");

            var ListaTipologie = _getTipologie.Get();

            Log.Debug("Fine elaborazione Tipologie Handler");

            return(new TipologieResult
            {
                Tipologie = ListaTipologie
            });
        }
Esempio n. 3
0
 private decimal GeneraValoreAdeguatezzaMezzo(List <string> codiciTipologie, string genere)
 {
     foreach (var tipologia in _getTipologieByCodice.Get(codiciTipologie))
     {
         if (tipologia != null)
         {
             return(genere switch
             {
                 "APS" => Convert.ToDecimal(tipologia.AdeguatezzaMezzo.Aps),
                 "AS" => Convert.ToDecimal(tipologia.AdeguatezzaMezzo.As),
                 "AB" => Convert.ToDecimal(tipologia.AdeguatezzaMezzo.Ab),
                 "AV" => Convert.ToDecimal(tipologia.AdeguatezzaMezzo.Av),
                 "AG" => Convert.ToDecimal(tipologia.AdeguatezzaMezzo.Ag),
                 _ => Convert.ToDecimal(tipologia.AdeguatezzaMezzo.Default),
             });
Esempio n. 4
0
 public SintesiRichiesta Map(RichiestaAssistenza richiesta)
 {
     try
     {
         var mapConfing = new MapperConfiguration(
             cfg => cfg.CreateMap <RichiestaAssistenza, SintesiRichiesta>()
             .ForMember(x => x.CodiceSchedaNue, y => y.MapFrom(z => z.CodNue))
             .ForMember(x => x.ZoneEmergenza, y => y.MapFrom(z => z.CodZoneEmergenza))
             .ForMember(x => x.ListaEntiIntervenuti, y => y.MapFrom(z => z.CodEntiIntervenuti))
             .ForMember(x => x.Tipologie, y => y.MapFrom(_ => _getTipologieByCodice.Get(richiesta.Tipologie)))
             .ForMember(x => x.Operatore, y => y.MapFrom(_ => _getUtenteById.GetUtenteByCodice(richiesta.CodOperatore)))
             //.ForMember(x => x.TurnoInserimentoChiamata, y => y.Ignore())
             .ForMember(x => x.ListaUtentiInLavorazione, y => y.MapFrom(_ => MapUtenteAttivita(richiesta, "L")))
             .ForMember(x => x.ListaUtentiPresaInCarico, y => y.MapFrom(_ => MapUtenteAttivita(richiesta, "P")))
             );
         _mapper = mapConfing.CreateMapper();
         return(_mapper.Map <SintesiRichiesta>(richiesta));
     }
     catch (Exception ex)
     {
         return(null);
     }
 }
Esempio n. 5
0
        /// <summary>
        ///   Query che estrae tutti i parametri iniziali della Home Page
        /// </summary>
        /// <param name="query">Filtri utilizzati per l'estrazione</param>
        /// <returns>Tutti i parametri iniziali della Home Page</returns>
        public WelcomeResult Handle(WelcomeQuery query)
        {
            Log.Debug("Inizio elaborazione Welcome Handler");

            var listaSediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();

            var pinNodi = new List <PinNodo>();
            var pinNodiNoDistaccamenti = new List <PinNodo>();

            foreach (var sede in query.CodiceSede)
            {
                pinNodi.Add(new PinNodo(sede, true));
                pinNodiNoDistaccamenti.Add(new PinNodo(sede, true));
            }

            foreach (var figlio in listaSediAlberate.GetSottoAlbero(pinNodi))
            {
                pinNodi.Add(new PinNodo(figlio.Codice, true));
            }

            FiltroRicercaRichiesteAssistenza filtro = new FiltroRicercaRichiesteAssistenza
            {
                SearchKey      = "0",
                idOperatore    = query.idOperatore,
                UnitaOperative = pinNodi.ToHashSet()
            };

            var sintesiRichiesteAssistenzaQuery = new SintesiRichiesteAssistenzaQuery()
            {
                CodiciSede = query.CodiceSede,
                Filtro     = filtro
            };

            var filtri = _filtriHandler.Get();

            filtri.Distaccamenti = _getDistaccamenti.GetListaDistaccamenti(pinNodiNoDistaccamenti);

            try
            {
                var boxListaInterventi   = _boxRichiesteHandler.Get(pinNodi.ToHashSet());
                var boxListaMezzi        = _boxMezziHandler.Get(query.CodiceSede);
                var boxListaPersonale    = _boxPersonaleHandler.Get(query.CodiceSede);
                var listaChiamateInCorso = _listaChiamateInCorsoMarkerHandler.Get(pinNodi);
                var listaSintesi         = _sintesiRichiesteAssistenzaHandler.Handle(sintesiRichiesteAssistenzaQuery);
                var centroMappaMarker    = _centroMappaMarkerHandler.GetCentroMappaMarker(query.CodiceSede[0]);
                var listaFiltri          = filtri;
                var infoNue   = _getConteggioSchedeHandler.GetConteggio(query.CodiceSede);
                var tipologie = _tipologieQueryHandler.Get();

                var welcome = new SO115App.Models.Classi.Condivise.Welcome()
                {
                    BoxListaInterventi   = boxListaInterventi,
                    BoxListaMezzi        = boxListaMezzi,
                    BoxListaPersonale    = boxListaPersonale,
                    ListaChiamateInCorso = listaChiamateInCorso,
                    ListaSintesi         = listaSintesi,
                    CentroMappaMarker    = centroMappaMarker,
                    ListaFiltri          = listaFiltri,
                    InfoNue   = infoNue,
                    Tipologie = tipologie
                };

                Log.Debug("Fine elaborazione Welcome Handler");

                return(new WelcomeResult()
                {
                    WelcomeRes = welcome
                });
            }
            catch (System.Exception ex)
            {
                throw;
            }
        }
Esempio n. 6
0
        public List <SintesiRichiestaMarker> GetListaRichiesteMarker(SintesiRichiesteAssistenzaMarkerQuery query)
        {
            var listaSintesiRichieste = new List <RichiestaAssistenza>();
            var pinNodi = new List <PinNodo>();

            foreach (var sede in query.CodiciSedi)
            {
                pinNodi.Add(new PinNodo(sede, true));
            }

            query.Filtro = new API.Models.Servizi.Infrastruttura.GestioneSoccorso.RicercaRichiesteAssistenza.FiltroRicercaRichiesteAssistenza
            {
                UnitaOperative = pinNodi.ToHashSet()
            };

            var listaSediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();

            foreach (var figlio in listaSediAlberate.GetSottoAlbero(query.Filtro.UnitaOperative))
            {
                listaSintesiRichieste.AddRange(_dbContext.RichiestaAssistenzaCollection.Find(Builders <RichiestaAssistenza> .Filter.Eq(x => x.CodSOCompetente, figlio.Codice)).ToList());
            }

            var listaSintesiRichiesteMarker = new List <SintesiRichiestaMarker>();

            foreach (RichiestaAssistenza richiesta in listaSintesiRichieste)
            {
                SintesiRichiestaMarker sintesi = new SintesiRichiestaMarker()
                {
                    Aperta          = richiesta.Aperta,
                    Chiusa          = richiesta.Chiusa,
                    Codice          = richiesta.Codice,
                    CodiceRichiesta = richiesta.CodRichiesta,
                    Descrizione     = richiesta.Descrizione,
                    Id       = richiesta.Id,
                    InAttesa = richiesta.InAttesa,
                    IstantePrimaAssegnazione = richiesta.IstantePrimaAssegnazione,
                    Localita          = richiesta.Localita,
                    Presidiata        = richiesta.Presidiata,
                    PrioritaRichiesta = richiesta.PrioritaRichiesta,
                    RilevanteGrave    = richiesta.RilevanteGrave,
                    RilevanteStArCu   = richiesta.RilevanteStArCu,
                    Sospesa           = richiesta.Sospesa,
                    Tipologie         = _getTipologie.Get(richiesta.Tipologie)
                };

                listaSintesiRichiesteMarker.Add(sintesi);
            }

            List <SintesiRichiestaMarker> listaSintesiRichiestaMarkers;

            if (listaSintesiRichiesteMarker == null)
            {
                return(null);
            }
            switch (query.FiltroCentroMappa)
            {
            case null:
                return(listaSintesiRichiesteMarker);

            default:
                listaSintesiRichiestaMarkers = listaSintesiRichiesteMarker.Where(richiesta =>
                                                                                 (richiesta.Localita.Coordinate.Latitudine >= query.FiltroCentroMappa.BottomLeft.Latitudine) &&
                                                                                 (richiesta.Localita.Coordinate.Latitudine <= query.FiltroCentroMappa.TopRight.Latitudine) &&
                                                                                 (richiesta.Localita.Coordinate.Longitudine >= query.FiltroCentroMappa.BottomLeft.Longitudine) &&
                                                                                 (richiesta.Localita.Coordinate.Longitudine <= query.FiltroCentroMappa.TopRight.Longitudine))
                                               .ToList();
                break;
            }

            if (query.FiltroCentroMappa.FiltroRichieste == null)
            {
                return(listaSintesiRichiestaMarkers);
            }
            var listaRichiesteFiltrate = new List <SintesiRichiestaMarker>();

            if (!query.FiltroCentroMappa.FiltroRichieste.Stato.Any())
            {
                return(query.FiltroCentroMappa.FiltroRichieste.Priorita == null ? listaSintesiRichiestaMarkers : listaSintesiRichiestaMarkers.FindAll(x => x.PrioritaRichiesta >= query.FiltroCentroMappa.FiltroRichieste.Priorita));
            }
            ;

            foreach (var statoRichiesta in query.FiltroCentroMappa.FiltroRichieste.Stato)
            {
                if (statoRichiesta == Costanti.RichiestaAssegnata)
                {
                    listaRichiesteFiltrate.AddRange(
                        listaSintesiRichiesteMarker.FindAll(x => x.Stato == Costanti.RichiestaAssegnata));
                }
                if (statoRichiesta == Costanti.RichiestaPresidiata)
                {
                    listaRichiesteFiltrate.AddRange(
                        listaSintesiRichiesteMarker.FindAll(x => x.Stato == Costanti.RichiestaPresidiata));
                }
                if (statoRichiesta == Costanti.Chiamata)
                {
                    listaRichiesteFiltrate.AddRange(
                        listaSintesiRichiesteMarker.FindAll(x => x.Stato == Costanti.Chiamata));
                }
                if (statoRichiesta == Costanti.RichiestaSospesa)
                {
                    listaRichiesteFiltrate.AddRange(
                        listaSintesiRichiesteMarker.FindAll(x => x.Stato == Costanti.RichiestaSospesa));
                }
            }
            return(query.FiltroCentroMappa.FiltroRichieste.Priorita == null ? listaRichiesteFiltrate : listaRichiesteFiltrate.FindAll(x => x.PrioritaRichiesta >= query.FiltroCentroMappa.FiltroRichieste.Priorita));
        }
Esempio n. 7
0
        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
            });
        }