public async void Handle(SostituzionePartenzaCommand command) { Parallel.ForEach(command.sostituzione.Sostituzioni, sostituzione => { #region GESTIONE NOTE string NoteSquadreSmontanti = ""; string NoteSquadreMontanti = ""; if (sostituzione.SquadreSmontanti.Count() > 1) { foreach (var squadra in sostituzione.SquadreSmontanti) { NoteSquadreSmontanti = NoteSquadreSmontanti + squadra + ","; } NoteSquadreSmontanti = "Le squadre " + NoteSquadreSmontanti.Substring(0, NoteSquadreSmontanti.Length - 1) + " vengono sostituite "; } else { NoteSquadreSmontanti = "La squadra " + sostituzione.SquadreSmontanti[0] + " viene sostituita "; } if (sostituzione.SquadreMontanti.Count() > 1) { foreach (var squadra in sostituzione.SquadreMontanti) { NoteSquadreMontanti = NoteSquadreMontanti + squadra + ","; } NoteSquadreMontanti = " dalle squadre " + NoteSquadreMontanti.Substring(0, NoteSquadreMontanti.Length - 1); } else { NoteSquadreMontanti = " dalla squadra " + sostituzione.SquadreMontanti[0]; } string Note = NoteSquadreSmontanti + NoteSquadreMontanti + " sul mezzo " + sostituzione.CodMezzoSmontante + " tornando in sede con il mezzo " + sostituzione.CodMezzoMontante; #endregion #region GESTIONE RICHIESTA E EVENTI RICIHESTA new SostituzionePartenzaFineTurno(command.Richiesta, sostituzione.CodMezzoSmontante, command.sostituzione.DataOraOperazione, command.sostituzione.idOperatore, Note); var PartenzaMontante = command.Richiesta.Partenze.FirstOrDefault(x => x.Partenza.Mezzo.Codice.Equals(sostituzione.CodMezzoMontante) && x.PartenzaAnnullata == false && x.Partenza.Terminata == false && x.Partenza.Sganciata == false); var PartenzaSmontante = command.Richiesta.Partenze.FirstOrDefault(x => x.Partenza.Mezzo.Codice.Equals(sostituzione.CodMezzoSmontante) && x.PartenzaAnnullata == false && x.Partenza.Terminata == false && x.Partenza.Sganciata == false); var SquadreSwitch = PartenzaSmontante.Partenza.Squadre; //GESTIONE PARTENZA SMONTANTE PartenzaSmontante.Partenza.Squadre = PartenzaMontante.Partenza.Squadre; PartenzaSmontante.Partenza.Terminata = true; //GESTIONE PARTENZA MONTANTE PartenzaMontante.Partenza.Squadre = PartenzaSmontante.Partenza.Squadre; PartenzaMontante.Partenza.Terminata = true; //GESTIONE NUOVA PARTENZA SMONTANTE var PartenzaSmontanteNuova = new ComposizionePartenze(command.Richiesta, DateTime.Now, command.sostituzione.idOperatore, false) { Partenza = new Partenza() { Codice = command.Richiesta.CodiceUltimaPartenza + 1, Mezzo = PartenzaSmontante.Partenza.Mezzo, Squadre = PartenzaMontante.Partenza.Squadre } }; //GESTIONE NUOVA PARTENZA MONTANTE var PartenzaMontanteNuova = new ComposizionePartenze(command.Richiesta, DateTime.Now, command.sostituzione.idOperatore, false) { Partenza = new Partenza() { Codice = command.Richiesta.CodiceUltimaPartenza + 1, Mezzo = PartenzaMontante.Partenza.Mezzo, Squadre = SquadreSwitch } }; var CodSede = PartenzaSmontante.Partenza.Mezzo.Distaccamento.Codice; _updateRichiesta.UpDate(command.Richiesta); #endregion #region Comunicazione a servizi GAC //RIENTRO SMONTANTE Task.Factory.StartNew(async() => { _rientroMezzo.Set(new RientroGAC() { idPartenza = PartenzaSmontante.Partenza.Codice.ToString(), dataIntervento = PartenzaSmontante.DataOraInserimento, numeroIntervento = command.Richiesta.CodRichiesta, dataRientro = PartenzaSmontante.DataOraInserimento, targa = PartenzaSmontante.Partenza.Mezzo.Codice, tipoMezzo = PartenzaSmontante.Partenza.Mezzo.Genere }); //RIENTRO MONTANTE _rientroMezzo.Set(new RientroGAC() { idPartenza = PartenzaMontante.Partenza.Codice.ToString(), dataIntervento = PartenzaMontante.DataOraInserimento, numeroIntervento = command.Richiesta.CodRichiesta, dataRientro = PartenzaMontante.DataOraInserimento, targa = PartenzaMontante.Partenza.Mezzo.Codice, tipoMezzo = PartenzaMontante.Partenza.Mezzo.Genere }); //USCITA NUOVA PARTENZA MONTANTE _uscitaMezzo.Set(new UscitaGAC() { idPartenza = PartenzaMontanteNuova.Partenza.Codice.ToString(), dataIntervento = PartenzaMontanteNuova.DataOraInserimento, numeroIntervento = command.Richiesta.CodRichiesta, dataUscita = PartenzaMontanteNuova.DataOraInserimento, targa = PartenzaMontanteNuova.Partenza.Mezzo.Codice, tipoMezzo = PartenzaMontanteNuova.Partenza.Mezzo.Genere }); //USCITA NUOVA PARTENZA SMONTANTE _uscitaMezzo.Set(new UscitaGAC() { idPartenza = PartenzaSmontanteNuova.Partenza.Codice.ToString(), dataIntervento = PartenzaSmontanteNuova.DataOraInserimento, numeroIntervento = command.Richiesta.CodRichiesta, dataUscita = PartenzaSmontanteNuova.DataOraInserimento, targa = PartenzaSmontanteNuova.Partenza.Mezzo.Codice, tipoMezzo = PartenzaSmontanteNuova.Partenza.Mezzo.Genere }); }); #endregion }); }
/// <summary> /// Il metodo accetta in firma il command, e in seguito al cambio di stato di uno o più /// mezzi aggiorna le informazioni relative alla richiesta a cui quel mezzo è associato /// </summary> /// <param name="command">il command in ingresso</param> public void Update(AggiornaStatoMezzoCommand command) { _upDateRichiesta.UpDate(command.Richiesta); var codiceSedeMezzo = command.CodiciSede.First(); _setStatoOperativoMezzo.Set(codiceSedeMezzo, command.IdMezzo, command.StatoMezzo, command.Richiesta.Codice); var dataMovintazione = DateTime.Now; var dataIntervento = command.Richiesta.ListaEventi.OfType <Telefonata>().FirstOrDefault(p => p.CodiceRichiesta.Equals(command.Richiesta.Codice)).Istante; foreach (var partenza in command.Richiesta.Partenze.Where(c => c.Partenza.Mezzo.Codice == command.IdMezzo)) { foreach (var squadra in partenza.Partenza.Squadre) { _setStatoSquadra.SetStato(squadra.Codice, command.Richiesta.Id, command.StatoMezzo, codiceSedeMezzo, command.IdMezzo); } if (!partenza.Partenza.Mezzo.Stato.Equals(Costanti.MezzoInUscita)) { if (partenza.Partenza.Mezzo.Stato.Equals(Costanti.MezzoInSede) || partenza.Partenza.Mezzo.Stato.Equals(Costanti.MezzoRientrato)) { var dataRientro = command.Richiesta.ListaEventi.OfType <PartenzaRientrata>().FirstOrDefault(p => p.CodicePartenza.Equals(partenza.Partenza.Codice)).Istante; _setRientroMezzo.Set(new RientroGAC() { targa = partenza.Partenza.Mezzo.Codice.Split('.')[1], tipoMezzo = partenza.Partenza.Mezzo.Codice.Split('.')[0], idPartenza = partenza.Partenza.Codice.ToString(), numeroIntervento = command.Richiesta.CodRichiesta, dataIntervento = dataIntervento, dataRientro = dataRientro, autista = "" }); } else if (partenza.Partenza.Mezzo.Stato.Equals(Costanti.MezzoInViaggio)) { var dataUscita = command.Richiesta.ListaEventi.OfType <ComposizionePartenze>().FirstOrDefault(p => p.Partenza.Codice.Equals(partenza.Partenza.Codice)).Istante; _setUscitaMezzo.Set(new UscitaGAC() { targa = partenza.Partenza.Mezzo.Codice.Split('.')[1], tipoMezzo = partenza.Partenza.Mezzo.Codice.Split('.')[0], idPartenza = partenza.Partenza.Codice.ToString(), numeroIntervento = command.Richiesta.CodRichiesta, dataIntervento = dataIntervento, dataUscita = dataUscita, autista = "", tipoUscita = new TipoUscita() { codice = "", descrizione = "Servizio" }, comune = new ComuneGAC() { codice = "", descrizione = command.Richiesta.Localita.Citta, }, provincia = new Models.Classi.Gac.ProvinciaGAC() { codice = "", descrizione = command.Richiesta.Localita.Provincia }, localita = command.Richiesta.Localita.Citta, latitudine = command.Richiesta.Localita.Coordinate.Latitudine.ToString(), longitudine = command.Richiesta.Localita.Coordinate.Longitudine.ToString() }); } } } }
/// <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 codiceSede = command.ConfermaPartenze.CodiceSede.Split(",", StringSplitOptions.RemoveEmptyEntries)[0]; foreach (var partenza in command.ConfermaPartenze.Partenze) { var dataMovintazione = DateTime.UtcNow; _setStatoOperativoMezzo.Set(codiceSede, partenza.Mezzo.Codice, partenza.Mezzo.Stato, command.ConfermaPartenze.richiesta.Codice); foreach (var squadra in partenza.Squadre) { _setStatoSquadra.SetStato(squadra.Codice, command.ConfermaPartenze.IdRichiesta, partenza.Mezzo.Stato, codiceSede, partenza.Mezzo.Codice); } var dataIntervento = command.Richiesta.ListaEventi.OfType <Telefonata>().FirstOrDefault(p => p.CodiceRichiesta.Equals(command.Richiesta.Codice)).Istante; //GAC USCITA/ENTRATA if (!partenza.Mezzo.Stato.Equals(Costanti.MezzoInUscita)) { if (partenza.Mezzo.Stato.Equals(Costanti.MezzoInSede) || partenza.Mezzo.Stato.Equals(Costanti.MezzoRientrato)) { var dataRientro = command.Richiesta.ListaEventi.OfType <PartenzaRientrata>().FirstOrDefault(p => p.CodicePartenza.Equals(partenza.Codice)).Istante; _setRientroMezzo.Set(new RientroGAC() { targa = partenza.Mezzo.Codice.Split('.')[1], tipoMezzo = partenza.Mezzo.Codice.Split('.')[0], idPartenza = partenza.Codice.ToString(), numeroIntervento = command.Richiesta.CodRichiesta, dataIntervento = dataIntervento, dataRientro = dataRientro, autista = "" }); } else if (partenza.Mezzo.Stato.Equals(Costanti.MezzoInViaggio)) { var dataUscita = command.Richiesta.ListaEventi.OfType <ComposizionePartenze>().FirstOrDefault(p => p.Partenza.Codice.Equals(partenza.Codice)).Istante; _setUscitaMezzo.Set(new UscitaGAC() { targa = partenza.Mezzo.Codice.Split('.')[1], tipoMezzo = partenza.Mezzo.Codice.Split('.')[0], idPartenza = partenza.Codice.ToString(), numeroIntervento = command.Richiesta.CodRichiesta, dataIntervento = dataIntervento, dataUscita = dataUscita, autista = "", tipoUscita = new TipoUscita() { codice = "", descrizione = "Servizio" }, comune = new ComuneGAC() { codice = "", descrizione = command.Richiesta.Localita.Citta, }, provincia = new Models.Classi.Gac.ProvinciaGAC() { codice = "", descrizione = command.Richiesta.Localita.Provincia }, localita = command.Richiesta.Localita.Citta, latitudine = command.Richiesta.Localita.Coordinate.Latitudine.ToString(), longitudine = command.Richiesta.Localita.Coordinate.Longitudine.ToString(), }); } } } conferma.CodiceSede = command.ConfermaPartenze.CodiceSede; conferma.IdRichiesta = command.ConfermaPartenze.IdRichiesta; conferma.richiesta = command.ConfermaPartenze.richiesta; return(conferma); }