public ActionResult Impostazioni()
        {
            PersonaModel utente = base.Session["utente"] as PersonaModel;
            UtenteImpostazioniViewModel model = new UtenteImpostazioniViewModel();

            using (DatabaseContext db = new DatabaseContext())
            {
                utente.Persona = db.PERSONA.FirstOrDefault(u => u.ID == utente.Persona.ID);
                model.Email    = utente.Email.SingleOrDefault(item =>
                                                              item.ID_PERSONA == utente.Persona.ID && item.TIPO == (int)TipoEmail.Registrazione)
                                 .EMAIL;
                model.Nome    = utente.Persona.NOME;
                model.Cognome = utente.Persona.COGNOME;
                PERSONA_TELEFONO modelTelefono = utente.Telefono.SingleOrDefault(item =>
                                                                                 item.ID_PERSONA == utente.Persona.ID && item.TIPO == (int)TipoTelefono.Privato);
                if (modelTelefono != null)
                {
                    model.Telefono = modelTelefono.TELEFONO;
                }
                PERSONA_INDIRIZZO modelIndirizzo = utente.Indirizzo.SingleOrDefault(item =>
                                                                                    item.ID_PERSONA == utente.Persona.ID && item.TIPO == (int)TipoIndirizzo.Residenza);

                if (modelIndirizzo != null && modelIndirizzo.INDIRIZZO != null)
                {
                    model.Citta     = modelIndirizzo.INDIRIZZO.COMUNE.NOME;
                    model.IDCitta   = modelIndirizzo.INDIRIZZO.ID_COMUNE;
                    model.Indirizzo = modelIndirizzo.INDIRIZZO.INDIRIZZO1;
                    model.Civico    = modelIndirizzo.INDIRIZZO.CIVICO;
                }
            }
            return(base.View(model));
        }
        public ActionResult Impostazioni(UtenteImpostazioniViewModel model)
        {
            if (base.ModelState.IsValid)
            {
                using (DatabaseContext db = new DatabaseContext())
                {
                    using (DbContextTransaction transazione = db.Database.BeginTransaction())
                    {
                        try
                        {
                            PersonaModel utente = base.Session["utente"] as PersonaModel;
                            utente.SetEmail(db, model.Email);
                            utente.SetTelefono(db, model.Telefono);
                            utente.SetIndirizzo(db, model.IDCitta, model.Indirizzo, model.Civico, (int)TipoIndirizzo.Residenza);
                            utente.SetIndirizzo(db, model.IDCittaSpedizione, model.IndirizzoSpedizione, model.CivicoSpedizione, (int)TipoIndirizzo.Spedizione);
                            if (utente.Persona.NOME != model.Nome || utente.Persona.COGNOME != model.Cognome)
                            {
                                utente.Persona.NOME          = model.Nome;
                                utente.Persona.COGNOME       = model.Cognome;
                                utente.Persona.DATA_MODIFICA = DateTime.Now;
                                bool primaVolta = utente.Persona.STATO == (int)Stato.INATTIVO;
                                if (primaVolta)
                                {
                                    utente.Persona.STATO = (int)Stato.ATTIVO;
                                }
                                db.Entry(utente.Persona).State = EntityState.Modified;
                                if (db.SaveChanges() > 0)
                                {
                                    if (primaVolta)
                                    {
                                        // crediti omaggio registrazione completata
                                        if (db.TRANSAZIONE.Count(item => item.ID_CONTO_DESTINATARIO == utente.Persona.ID_CONTO_CORRENTE && item.TIPO == (int)TipoTransazione.BonusIscrizione) <= 0)
                                        {
                                            Guid tokenPortale = Guid.Parse(ConfigurationManager.AppSettings["portaleweb"]);
                                            int  punti        = Convert.ToInt32(ConfigurationManager.AppSettings["bonusIscrizione"]);
                                            this.AddBonus(db, utente.Persona, tokenPortale, punti, TipoTransazione.BonusIscrizione, Bonus.Registration);
                                            this.RefreshPunteggioUtente(db);
                                        }

                                        // attivo automaticamente annunci già pubblicati
                                        db.ANNUNCIO.Where(m => m.ID_PERSONA == utente.Persona.ID && m.STATO == (int)StatoVendita.INATTIVO).ToList().ForEach(m =>
                                        {
                                            m.STATO           = (int)StatoVendita.ATTIVO;
                                            db.Entry(m).State = EntityState.Modified;
                                            if (db.SaveChanges() <= 0)
                                            {
                                                // non blocco l'attivazione dell'account, abiliterà gli annunci manualmente
                                                Exception eccezione = new Exception(Language.ImpostazioniErroreAttivaAnnunci);
                                                ModelState.AddModelError("", eccezione.Message);
                                                Elmah.ErrorSignal.FromCurrentContext().Raise(eccezione);
                                            }
                                        });
                                    }
                                    transazione.Commit();
                                    base.Session["utente"]   = utente;
                                    base.TempData["salvato"] = true;
                                }
                                else
                                {
                                    throw new Exception(Language.ImpostazioniErroreSalvaUtente);
                                }
                                base.TempData["salvato"] = false;
                            }
                        }
                        catch (Exception eccezione)
                        {
                            transazione.Rollback();
                            ModelState.AddModelError("", eccezione.Message);
                            Elmah.ErrorSignal.FromCurrentContext().Raise(eccezione);
                        }
                    }
                }
            }

            return(base.View(model));
        }