Exemplo n.º 1
0
        /// <summary>Seleziona tutte le tariffe transiti e le ritorna dentro una lista di oggetti "TariffaTransito".
        /// Tenta anche di geolocalizzare i transiti, quelli che non potranno essere convertiti in coordinate non saranno inseriti nella lista.</summary>
        /// <returns>List</returns>
        public static List <TXTariffeTransiti> GetTariffeTransiti()
        {
            List <TXTariffeTransiti> tariffeTransiti = new List <TXTariffeTransiti>();
            Dao     dao  = new Dao();
            string  sql  = "SELECT * FROM TariffeTransiti";
            DataSet data = dao.ExecuteQuery(sql);

            if (data.Tables.Count > 0)
            {
                TXTariffeTransiti tariffaTransito = null;
                for (int i = 0; i < data.Tables[0].Rows.Count; i++)
                {
                    tariffaTransito = new TXTariffeTransiti();
                    tariffaTransito.CreateObject(data.Tables[0].Rows[i]);
                    tariffeTransiti.Add(tariffaTransito);
                }
            }
            return(tariffeTransiti);
        }
Exemplo n.º 2
0
        /// <summary>Interroga TXTango, inserisce una nota spesa per ogni transito a pagamento attraversato sul percorso, e ritorna un evento contenente lo stato del viaggio impostato a "CLOSED".</summary>
        /// <param name="login">L'oggetto login da inviare a TXTango per l'autenticazione della richiesta.</param>
        /// <returns>Eventi</returns>
        public Eventi TXGetTransitsReport(TXTango.Login login)
        {
            // se non sono presenti le date di inizio e fine viaggio non posso ricavare correttamente i transiti attraversati
            // (si rischia di registrare nuovamente le spese di un viaggio antecedente).
            if (this.DataInizio == DateTime.MinValue || this.DataFine == DateTime.MinValue)
            {
                throw new Exception("Impossibile ricavare i transiti poichè non sono presenti le date di inizio o fine viaggio. IdViaggio: " + this.Id + " KeyViaggio: " + this.KeyViaggio);
            }

            // preparo l'evento da ritornare
            Eventi evento = new Eventi();

            evento.Stato     = ConfigurationManager.AppSettings["TXTANGO_STATO_CLOSED"];
            evento.SyncStato = ConfigurationManager.AppSettings["TXTEMP_STATO_SINCRONIZZATO"];
            evento.SyncData  = DateTime.Now;
            evento.SyncTipo  = ConfigurationManager.AppSettings["TXTEMP_FROM_TXTANGO"];
            evento.SyncTask  = ConfigurationManager.AppSettings["TXTANGO_TASK_GET_TRANSITS"];

            // ricavo le tariffe dei transiti
            List <TXTariffeTransiti> tariffeTransiti = TXTariffeTransiti.GetTariffeTransiti();

            // per ogni tariffa controllo se il viaggio ha attraversato il transito nel suo percorso e aggiunto la relativa nota spesa
            int transitiCalcolati               = 0;
            int erroriGeolocalizzazione         = 0;
            PositionAreaSelection areaSelection = null;
            ServiceSoapClient     service       = new ServiceSoapClient();
            GetPositionAreaResult result        = null;
            NoteSpese             notaSpesa     = null;

            for (int i = 0; i < tariffeTransiti.Count; i++)
            {
                // controllo che il tansito sia geolocalizzato
                try {
                    if (tariffeTransiti[i].GeoCoordinate == "")
                    {
                        tariffeTransiti[i].GeoLocalizzaTransito();
                    }
                } catch (GeocodingException ex) {
                    erroriGeolocalizzazione++;

                    // loggo l'errore
                    log.Error(ex.Message, ex);

                    // invio una mail al responsabile del viaggio per avvertirlo che il transito non è geocodificabile
                    Boolean notificationsEnabled = Convert.ToBoolean(ConfigurationManager.AppSettings["ENABLE_EMAIL_NOTIFICATIONS"]);
                    if (notificationsEnabled && this.MailUtenteCompetenza.Trim() != "")
                    {
                        try {
                            List <string> addresses = new List <string>();
                            addresses.Add(this.MailUtenteCompetenza);
                            string subject = "Errore geolocalizzazione transito.";
                            string body    = "<strong>Attenzione:<br/>Si è verificato un errore nel tentativo di geolocalizzare il transito in oggetto.<br/>"
                                             + "Si consiglia di verificare e correggere i dati di localizzazione.</strong><br/><br/>"
                                             + "DATI TRANSITO:<br/>"
                                             + "Nome: " + tariffeTransiti[i].Nome + "<br/>"
                                             + "Indirizzo: " + tariffeTransiti[i].Indirizzo + "<br/>"
                                             + "Cap: " + tariffeTransiti[i].Cap + "<br/>"
                                             + "Citta: " + tariffeTransiti[i].Citta + "<br/>"
                                             + "Provincia: " + tariffeTransiti[i].Provincia + "<br/>"
                                             + "Nazione: " + tariffeTransiti[i].Nazione + "<br/>"
                                             + "Prezzo: " + tariffeTransiti[i].Prezzo + "<br/>"
                                             + "Valuta: " + tariffeTransiti[i].Valuta + "<br/>";
                            Mailer.SendMail(addresses, subject, body);
                        } catch (Exception e) {
                            log.Error(e.Message, e);
                        }
                    }
                }

                // chiedo a TXTango se il viaggio ha attraversato il transito
                if (tariffeTransiti[i].GeoCoordinate != null && tariffeTransiti[i].GeoCoordinate != "")
                {
                    areaSelection = new PositionAreaSelection();
                    areaSelection.DateTimeRange = new DateTimeRangeSelection()
                    {
                        StartDate = (DateTime)this.DataInizio, EndDate = this.DataFine
                    };
                    areaSelection.Driver = new Identifier()
                    {
                        IdentifierType = enumIdentifierType.TRANSICS_ID, Id = this.CodiceAutista
                    };
                    areaSelection.Vehicle = new IdentifierVehicle()
                    {
                        IdentifierVehicleType = enumIdentifierVehicleType.TRANSICS_ID, Id = this.CodiceMezzo
                    };
                    double latitude  = Convert.ToDouble(tariffeTransiti[i].GeoCoordinate.Split(',')[0].Replace('.', ','));
                    double longitude = Convert.ToDouble(tariffeTransiti[i].GeoCoordinate.Split(',')[1].Replace('.', ','));
                    areaSelection.Position = new Position()
                    {
                        Latitude = latitude, Longitude = longitude
                    };
                    areaSelection.KmsAround = 2; // tolleranza sul geopunto
                    result = service.Get_Position_Area(login, areaSelection);

                    // aggiungo all'evento gli xml di richiesta e risposta
                    evento.XmlRequest  += Serializer.SerializeObject(areaSelection, SerializationType.XML);
                    evento.XmlResponse += Serializer.SerializeObject(result, SerializationType.XML);

                    // se il viaggio ha attraversato il transito aggiungo la nota spesa
                    if (result.Errors.Length == 0 && result.DateTime != null)
                    {
                        notaSpesa               = new NoteSpese();
                        notaSpesa.IdViaggio     = this.Id;
                        notaSpesa.Indirizzo     = tariffeTransiti[i].Indirizzo + ", " + tariffeTransiti[i].Cap + " " + tariffeTransiti[i].Citta + ", " + tariffeTransiti[i].Provincia + " " + tariffeTransiti[i].Nazione;
                        notaSpesa.Tipo          = "COST";
                        notaSpesa.Codice        = "Transit";
                        notaSpesa.Descrizione   = "";
                        notaSpesa.Data          = result.DateTime.Value;
                        notaSpesa.GeoCoordinate = tariffeTransiti[i].GeoCoordinate;
                        notaSpesa.Prezzo        = tariffeTransiti[i].Prezzo;
                        notaSpesa.Valuta        = tariffeTransiti[i].Valuta;
                        notaSpesa.Insert();
                        log.Debug("transito rilevato: " + tariffeTransiti[i].Indirizzo + ", " + tariffeTransiti[i].Cap + " " + tariffeTransiti[i].Citta + ", " + tariffeTransiti[i].Provincia + " " + tariffeTransiti[i].Nazione);
                        transitiCalcolati++;
                    }
                    else
                    {
                        if (result.Errors.Length > 0)
                        {
                            log.Error("Errore TXTango: " + result.Errors[0].ErrorCode.ToString());
                        }
                        if (result.DateTime == null)
                        {
                            log.Debug("transito NON rilevato: " + tariffeTransiti[i].Indirizzo + ", " + tariffeTransiti[i].Cap + " " + tariffeTransiti[i].Citta + ", " + tariffeTransiti[i].Provincia + " " + tariffeTransiti[i].Nazione);
                        }
                    }
                }
            }

            // note evento
            evento.Note = "Individuati " + transitiCalcolati + " transiti a pagamento sul percorso del viaggio. ";
            if (erroriGeolocalizzazione != 0)
            {
                evento.Note += "Attenzione: " + erroriGeolocalizzazione + " transiti non sono geolocalizzabili, non è stato pertanto possibile verificarli ed eventualmente aggiungerli alla nota spese.";
            }

            return(evento);
        }