public List <ComposizioneSquadre> Get(ComposizioneSquadreQuery query) { var listaSedi = new List <string> { query.CodiceSede }; var listaSquadre = _getSquadre.Get(listaSedi).Result; var statiOperativi = _getStatoSquadre.Get(listaSedi); var composizioneSquadre = new List <ComposizioneSquadre>(); foreach (Squadra s in listaSquadre) { if (statiOperativi.Exists(x => x.IdSquadra.Equals(s.Id))) { s.Stato = MappaStatoSquadraDaStatoMezzo.MappaStato(statiOperativi.Find(x => x.IdSquadra.Equals(s.Id)).StatoSquadra); s.IndiceOrdinamento = -200; } else { s.Stato = Squadra.StatoSquadra.InSede; } var c = new ComposizioneSquadre { Squadra = s, Id = s.Id }; composizioneSquadre.Add(c); } return(composizioneSquadre.OrderByDescending(x => x.Squadra.IndiceOrdinamento).ToList()); }
public void Handle(AggiornaStatoMezzoCommand command) { var richiesta = _getRichiestaById.GetById(command.Chiamata.Id); if (command.StatoMezzo == Costanti.MezzoSulPosto) { new ArrivoSulPosto(richiesta, command.IdMezzo, DateTime.UtcNow, richiesta.CodOperatore); richiesta.SincronizzaStatoRichiesta(Costanti.RichiestaPresidiata, richiesta.StatoRichiesta, richiesta.CodOperatore, ""); foreach (var composizione in richiesta.Partenze) { if (composizione.Partenza.Mezzo.Codice == command.IdMezzo) { composizione.Partenza.Mezzo.Stato = Costanti.MezzoSulPosto; composizione.Partenza.Mezzo.IdRichiesta = richiesta.CodRichiesta; } } } else if (command.StatoMezzo == Costanti.MezzoInRientro) { foreach (var composizione in richiesta.Partenze) { if (composizione.Partenza.Mezzo.Codice == command.IdMezzo) { composizione.Partenza.Mezzo.Stato = Costanti.MezzoInRientro; composizione.Partenza.Mezzo.IdRichiesta = null; } } foreach (var composizione in richiesta.Partenze) { if (composizione.Partenza.Mezzo.Stato == Costanti.MezzoSulPosto || composizione.Partenza.Mezzo.Stato == Costanti.MezzoInViaggio) { _mezziTuttiInSede = false; } } if (_mezziTuttiInSede) { new PartenzaInRientro(richiesta, command.IdMezzo, DateTime.UtcNow, richiesta.CodOperatore); //TODO GESTIRE IL CODICE OPERATORE } } else if (command.StatoMezzo == Costanti.MezzoRientrato) { foreach (var composizione in richiesta.Partenze) { if (composizione.Partenza.Mezzo.Codice == command.IdMezzo) { composizione.Partenza.Mezzo.Stato = Costanti.MezzoInSede; composizione.Partenza.Mezzo.IdRichiesta = null; } } foreach (var composizione in richiesta.Partenze) { if (composizione.Partenza.Mezzo.Stato != Costanti.MezzoInSede && composizione.Partenza.Mezzo.Stato != Costanti.MezzoInRientro && composizione.Partenza.Mezzo.Stato != Costanti.MezzoRientrato) { _mezziTuttiInSede = false; } } if (_mezziTuttiInSede) { new PartenzaRientrata(richiesta, command.IdMezzo, DateTime.UtcNow, richiesta.CodOperatore); } } else if (command.StatoMezzo == Costanti.MezzoInViaggio) { foreach (var composizione in richiesta.Partenze) { if (composizione.Partenza.Mezzo.Codice == command.IdMezzo) { composizione.Partenza.Mezzo.Stato = Costanti.MezzoInViaggio; composizione.Partenza.Mezzo.IdRichiesta = richiesta.CodRichiesta; } } } foreach (var composizione in richiesta.Partenze) { if (composizione.Partenza.Mezzo.Codice == command.IdMezzo) { foreach (var squadra in composizione.Partenza.Squadre) { { squadra.Stato = MappaStatoSquadraDaStatoMezzo.MappaStato(command.StatoMezzo); } } } command.Richiesta = richiesta; _updateStatoPartenze.Update(command); } }
/// <summary> /// Query che estrae i valori dei Box presenti in Home Page /// </summary> /// <param name="command">Filtri utilizzati per l'estrazione</param> /// <returns>Elenco dei mezzi disponibili</returns> public void Handle(ConfermaPartenzeCommand command) { /// preparazione del DTO var stato_mezzo = _getStatoMezzi.Get(new string[] { command.ConfermaPartenze.CodiceSede }); foreach (var partenza in command.ConfermaPartenze.Partenze) { var listaMezzi = _getStatoMezzi.Get(new string[] { command.ConfermaPartenze.CodiceSede }, partenza.Mezzo.Codice); if (listaMezzi.Count > 0) { if (listaMezzi[0].IdOpPrenotazione != null && !listaMezzi[0].IdOpPrenotazione.Equals(command.ConfermaPartenze.IdOperatore)) { throw new Exception(Costanti.MezzoErroreGiaOccupato); } } } var attivita = new AttivitaUtente(); var idComposizioneDaSganciare = 0; var StatoInViaggio = 0; var StatoSulPosto = 0; bool PartenzaEsistente = false; foreach (var partenza in command.ConfermaPartenze.Partenze) { PartenzaEsistente = command.Richiesta.Partenze.Select(x => x.Partenza.Mezzo.Codice.Equals(partenza.Mezzo.Codice) && !x.Partenza.Terminata && !x.Partenza.PartenzaAnnullata && !x.Partenza.Sganciata).FirstOrDefault(); if (PartenzaEsistente) { throw new Exception(Costanti.PartenzaGiaPresente); } } #region SGANCIAMENTO if (command.ConfermaPartenze.IdRichiestaDaSganciare != null) { command.RichiestaDaSganciare = _getRichiestaById.GetByCodice(command.ConfermaPartenze.IdRichiestaDaSganciare); foreach (var composizione in command.RichiestaDaSganciare.Eventi.Where(x => x is ComposizionePartenze).ToList()) { var CompPartenza = ((ComposizionePartenze)composizione).Partenza; if (!CompPartenza.PartenzaAnnullata && !CompPartenza.Terminata && !CompPartenza.Sganciata && !CompPartenza.Mezzo.Stato.Equals(Costanti.MezzoInRientro)) { if (CompPartenza.Mezzo.Codice.Equals(command.ConfermaPartenze.IdMezzoDaSganciare)) { CompPartenza.Sganciata = true; } if (CompPartenza.Mezzo.Stato == Costanti.MezzoInViaggio && !CompPartenza.Mezzo.Codice.Equals(command.ConfermaPartenze.IdMezzoDaSganciare)) { StatoInViaggio++; } if (CompPartenza.Mezzo.Stato == Costanti.MezzoSulPosto && !CompPartenza.Mezzo.Codice.Equals(command.ConfermaPartenze.IdMezzoDaSganciare)) { StatoSulPosto++; } idComposizioneDaSganciare++; } } foreach (var composizione in command.RichiestaDaSganciare.Partenze) { if (composizione.Partenza.Mezzo.Codice.Equals(command.ConfermaPartenze.IdMezzoDaSganciare)) { composizione.Partenza.Sganciata = true; } } if (idComposizioneDaSganciare == 1) { command.RichiestaDaSganciare.SincronizzaStatoRichiesta(Costanti.RichiestaSospesa, command.RichiestaDaSganciare.StatoRichiesta, command.RichiestaDaSganciare.CodOperatore, "", DateTime.UtcNow); } else { if (StatoSulPosto > 0) { command.RichiestaDaSganciare.SincronizzaStatoRichiesta(Costanti.RichiestaPresidiata, command.RichiestaDaSganciare.StatoRichiesta, command.RichiestaDaSganciare.CodOperatore, "", DateTime.UtcNow); } else if (StatoInViaggio > 0) { command.RichiestaDaSganciare.SincronizzaStatoRichiesta(Costanti.RichiestaAssegnata, command.RichiestaDaSganciare.StatoRichiesta, command.RichiestaDaSganciare.CodOperatore, "", DateTime.UtcNow); } } //new RevocaPerRiassegnazione(richiesta, richiestaDaSganciare, command.ConfermaPartenze.IdMezzoDaSganciare, DateTime.UtcNow, richiesta.CodOperatore); _updateRichiestaAssistenza.UpDate(command.RichiestaDaSganciare); } #endregion SGANCIAMENTO if (command.Richiesta.Eventi.Where(x => x is InizioPresaInCarico).ToList().Count == 0) { new InizioPresaInCarico(command.Richiesta, DateTime.UtcNow, command.Utente.Id); } foreach (var partenza in command.ConfermaPartenze.Partenze) { partenza.Sganciata = false; new ComposizionePartenze(command.Richiesta, DateTime.UtcNow, command.Utente.Id, false) { Partenza = partenza }; } command.Richiesta.SincronizzaStatoRichiesta(Costanti.RichiestaAssegnata, command.Richiesta.StatoRichiesta, command.Utente.Id, "", DateTime.UtcNow); command.ConfermaPartenze.richiesta = command.Richiesta; var sedeRichiesta = command.Richiesta.CodSOCompetente; if (command.Richiesta.CodRichiesta == null) { command.Richiesta.CodRichiesta = _generaCodiceRichiesta.Genera(sedeRichiesta, DateTime.UtcNow.Year); } foreach (var partenza in command.ConfermaPartenze.Partenze) { partenza.Mezzo.IdRichiesta = command.Richiesta.Id; } var nominativo = command.Utente.Nome + "." + command.Utente.Cognome; if (command.Richiesta.UtPresaInCarico != null) { command.Richiesta.UtPresaInCarico.Add(nominativo); } else { command.Richiesta.UtPresaInCarico = new List <String> { nominativo }; } foreach (var partenza in command.ConfermaPartenze.Partenze) { foreach (var squadra in partenza.Squadre) { squadra.Stato = MappaStatoSquadraDaStatoMezzo.MappaStato(partenza.Mezzo.Stato); } } int ContatorePartenze = 1; foreach (var partenza in command.Richiesta.Partenze) { if (partenza.Partenza.Codice == 0) { partenza.Partenza.Codice = ContatorePartenze; } ContatorePartenze++; } command.ConfermaPartenze.IdRichiesta = command.Richiesta.Id; var confermaPartenze = _updateConfermaPartenze.Update(command); command.ConfermaPartenze.CodiceSede = confermaPartenze.CodiceSede; }
/// <summary> /// Cambio lo stato di una singola partenza e dei relativi mezzi e stato squadre /// </summary> /// <param name="partenzaDaLavorare">La partenza la quale devo cambiarne lo stato</param> /// <param name="stato">Lo stato che va attribuito alla partenza</param> internal void CambiaStatoPartenza(ComposizionePartenze partenzaDaLavorare, CambioStatoMezzo stato) { #region SWITCH STATO MEZZI if (stato.Stato == Costanti.MezzoInViaggio) { new UscitaPartenza(this, partenzaDaLavorare.Partenza.Mezzo.Codice, stato.DataOraAggiornamento, CodOperatore, partenzaDaLavorare.Partenza.Codice); SincronizzaStatoRichiesta(Costanti.RichiestaAssegnata, StatoRichiesta, CodOperatore, "", stato.DataOraAggiornamento); partenzaDaLavorare.Partenza.Mezzo.Stato = Costanti.MezzoInViaggio; partenzaDaLavorare.Partenza.Mezzo.IdRichiesta = Id; } else if (stato.Stato == Costanti.MezzoSulPosto) { new ArrivoSulPosto(this, partenzaDaLavorare.Partenza.Mezzo.Codice, stato.DataOraAggiornamento, CodOperatore, partenzaDaLavorare.Partenza.Codice); SincronizzaStatoRichiesta(Costanti.RichiestaPresidiata, StatoRichiesta, CodOperatore, "", stato.DataOraAggiornamento); partenzaDaLavorare.Partenza.Mezzo.Stato = Costanti.MezzoSulPosto; partenzaDaLavorare.Partenza.Mezzo.IdRichiesta = Id; } else if (stato.Stato == Costanti.MezzoInRientro) { partenzaDaLavorare.Partenza.Mezzo.Stato = Costanti.MezzoInRientro; new PartenzaInRientro(this, partenzaDaLavorare.Partenza.Mezzo.Codice, stato.DataOraAggiornamento, CodOperatore, partenzaDaLavorare.Partenza.Codice); if (lstPartenze.Select(p => p.Mezzo.Stato).All(s => s != Costanti.MezzoInSede && s != Costanti.MezzoInViaggio && s != Costanti.MezzoInUscita && s != Costanti.MezzoSulPosto)) { new ChiusuraRichiesta("", this, stato.DataOraAggiornamento, CodOperatore); } } else if (stato.Stato == Costanti.MezzoRientrato) { partenzaDaLavorare.Partenza.Mezzo.Stato = Costanti.MezzoInSede; partenzaDaLavorare.Partenza.Mezzo.IdRichiesta = null; partenzaDaLavorare.Partenza.Terminata = true; new PartenzaRientrata(this, partenzaDaLavorare.Partenza.Mezzo.Codice, stato.DataOraAggiornamento, CodOperatore, partenzaDaLavorare.Partenza.Codice); if (lstPartenze.Select(p => p.Mezzo.Stato).All(s => s != Costanti.MezzoInSede && s != Costanti.MezzoInViaggio && s != Costanti.MezzoInUscita && s != Costanti.MezzoSulPosto)) { new ChiusuraRichiesta("", this, stato.DataOraAggiornamento, CodOperatore); } } else if (stato.Stato == Costanti.MezzoInViaggio) { partenzaDaLavorare.Partenza.Mezzo.Stato = Costanti.MezzoInViaggio; partenzaDaLavorare.Partenza.Mezzo.IdRichiesta = Id; } else if (stato.Stato == Costanti.MezzoInUscita) { partenzaDaLavorare.Partenza.Mezzo.Stato = Costanti.MezzoInUscita; } #endregion SWITCH STATO MEZZI foreach (var squadra in partenzaDaLavorare.Partenza.Squadre) { squadra.Stato = MappaStatoSquadraDaStatoMezzo.MappaStato(stato.Stato); } }
/// <summary> /// Query che estrae i valori dei Box presenti in Home Page /// </summary> /// <param name="query">Filtri utilizzati per l'estrazione</param> /// <returns>Elenco dei mezzi disponibili</returns> public void Handle(ConfermaPartenzeCommand command) { /// preparazione del DTO var richiesta = _getRichiestaById.Get(command.ConfermaPartenze.IdRichiesta); var richiestaDaSganciare = new RichiestaAssistenza(); var attivita = new AttivitaUtente(); var idComposizioneDaSganciare = 0; ///Gestione Sganciamento if (command.ConfermaPartenze.IdRichiestaDaSganciare != null) { richiestaDaSganciare = _getRichiestaById.Get(command.ConfermaPartenze.IdRichiestaDaSganciare); foreach (var composizione in richiestaDaSganciare.Eventi.Where(x => x is ComposizionePartenze).ToList()) { if (((ComposizionePartenze)composizione).Partenza.Mezzo.Codice.Equals(command.ConfermaPartenze.IdMezzoDaSganciare)) { ((ComposizionePartenze)composizione).Partenza.Sganciata = true; } idComposizioneDaSganciare++; } foreach (var composizione in richiestaDaSganciare.Partenze) { if (composizione.Partenza.Mezzo.Codice.Equals(command.ConfermaPartenze.IdMezzoDaSganciare)) { composizione.Partenza.Sganciata = true; } } if (idComposizioneDaSganciare == 1) { richiestaDaSganciare.SincronizzaStatoRichiesta(Costanti.RichiestaSospesa, richiestaDaSganciare.StatoRichiesta, richiestaDaSganciare.Operatore.Id, ""); } //new RevocaPerRiassegnazione(richiesta, richiestaDaSganciare, command.ConfermaPartenze.IdMezzoDaSganciare, DateTime.UtcNow, richiesta.Operatore.Id); _updateRichiestaAssistenza.UpDate(richiestaDaSganciare); } if (richiesta.Eventi.Where(x => x is InizioPresaInCarico).ToList().Count == 0) { new InizioPresaInCarico(richiesta, DateTime.UtcNow, richiesta.Operatore.Id); } foreach (var partenza in command.ConfermaPartenze.Partenze) { new ComposizionePartenze(richiesta, DateTime.UtcNow, richiesta.Operatore.Id, false) { Partenza = partenza }; } richiesta.SincronizzaStatoRichiesta(Costanti.RichiestaAssegnata, richiesta.StatoRichiesta, richiesta.Operatore.Id, ""); richiesta.Id = command.ConfermaPartenze.IdRichiesta; command.ConfermaPartenze.richiesta = richiesta; var sedeRichiesta = command.ConfermaPartenze.richiesta.Operatore.Sede.Codice; richiesta.CodiceRichiesta = _generaCodiceRichiesta.Genera(sedeRichiesta, DateTime.UtcNow.Year); foreach (var partenza in command.ConfermaPartenze.Partenze) { partenza.Mezzo.IdRichiesta = richiesta.CodiceRichiesta; } attivita.IdUtente = command.ConfermaPartenze.richiesta.Operatore.Id; attivita.Nominativo = command.ConfermaPartenze.richiesta.Operatore.Nome + " " + command.ConfermaPartenze.richiesta.Operatore.Cognome; attivita.DataInizioAttivita = DateTime.UtcNow; if (richiesta.ListaUtentiPresaInCarico != null) { richiesta.ListaUtentiPresaInCarico.Add(attivita); } else { richiesta.ListaUtentiPresaInCarico = new List <AttivitaUtente> { attivita }; } foreach (var partenze in command.ConfermaPartenze.Partenze) { foreach (var squadra in partenze.Squadre) { squadra.Stato = MappaStatoSquadraDaStatoMezzo.MappaStato(partenze.Mezzo.Stato); } } var confermaPartenze = _updateConfermaPartenze.Update(command); command.ConfermaPartenze.CodiceSede = confermaPartenze.CodiceSede; }
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 }); }