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