/// <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> /// 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; }