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