private ActionResult SaveAnnuncio(PubblicazioneViewModel viewModel) { ANNUNCIO annuncio = new ANNUNCIO(); using (DatabaseContext db = new DatabaseContext()) { db.Database.Connection.Open(); using (DbContextTransaction transaction = db.Database.BeginTransaction()) { try { viewModel.DbContext = db; // verificare come aprire la transazione sul salvataggio, effettuare commit o rollback if (ModelState.IsValid && viewModel.SalvaAnnuncio(ControllerContext, annuncio)) { int?idAnnuncio = annuncio.ID; if (idAnnuncio != null) { PersonaModel utente = ((PersonaModel)Session["utente"]); viewModel.InviaEmail(ControllerContext, annuncio, utente); decimal numeroCreditiBonus = AddBonus(db, utente, viewModel); if (numeroCreditiBonus > 0) { TempData["BONUS"] = string.Format(Bonus.YouWin, numeroCreditiBonus, Language.Moneta); } transaction.Commit(); return(RedirectToAction("Completato", new { id = idAnnuncio })); } } transaction.Rollback(); } catch (Exception eccezione) { transaction.Rollback(); viewModel.CancelUploadFoto(annuncio); ModelState.AddModelError("Error", eccezione.Message); //ErrorSignal.FromCurrentContext().Raise(eccezione); LoggatoreModel.Errore(eccezione); } } } // se ha già scelto una categoria ricarico i campi string nomeVistaDettaglio = GetNomeVistaDettagliAnnuncio(viewModel.CategoriaId); if (!string.IsNullOrWhiteSpace(nomeVistaDettaglio)) { ViewData["infoAggiuntive"] = RenderRazorViewToString(nomeVistaDettaglio, viewModel); } else { string nomeTipologiaDettaglio = GetNomeVistaTipologia(viewModel.CategoriaId); if (!string.IsNullOrWhiteSpace(nomeTipologiaDettaglio)) { ViewData["infoAggiuntive"] = RenderRazorViewToString(nomeTipologiaDettaglio, viewModel); } } return(View("Index", viewModel)); }
public string CopiaServizio(PubblicaServizioCopiaViewModel viewModel) { if (ModelState.IsValid) { using (DatabaseContext db = new DatabaseContext()) { using (DbContextTransaction transaction = db.Database.BeginTransaction()) { try { PERSONA persona = (Session["utente"] as PersonaModel).Persona; Guid token = Guid.Parse(viewModel.TokenOK); ANNUNCIO annuncio = db.ANNUNCIO.SingleOrDefault(m => m.TOKEN == token && m.ID_PERSONA != persona.ID); if (annuncio != null) { // controllo se ha già quell'annuncio ANNUNCIO annuncioInPossesso = db.ANNUNCIO.FirstOrDefault(m => m.ID_PERSONA == persona.ID && (m.STATO == (int)StatoVendita.ATTIVO || m.STATO == (int)StatoVendita.INATTIVO) && (m.ID == annuncio.ID || m.ID_ORIGINE == annuncio.ID)); if (annuncioInPossesso == null) { ANNUNCIO_DESIDERATO annuncioDesiderato = db.ANNUNCIO_DESIDERATO.Where(m => m.ANNUNCIO.TOKEN == token && m.ID_PERSONA == persona.ID).SingleOrDefault(); if (annuncioDesiderato != null) { db.ANNUNCIO_DESIDERATO.Remove(annuncioDesiderato); db.SaveChanges(); } // copiare e salvare annuncio PubblicazioneViewModel viewModelAnnuncio = UpdateServizio(annuncio, viewModel); // copia foto List <string> fotoEsistenti = annuncio.ANNUNCIO_FOTO .Where(m => viewModelAnnuncio.Foto.Contains(m.ALLEGATO.NOME) == true) .Select(m => m.ALLEGATO.NOME).ToList(); for (int i = 0; i < fotoEsistenti.Count; i++) { string path = "~/Uploads/Images/"; if (annuncio.ATTIVITA != null) { path += annuncio.ATTIVITA.TOKEN; } else { path += annuncio.PERSONA.TOKEN; } string nomeFileOriginale = Server.MapPath(path + "/" + annuncio.DATA_INSERIMENTO.Year + "/Original/" + fotoEsistenti[i]); HttpFile fileOriginale = new HttpFile(nomeFileOriginale); FileUploadifive fileSalvatato = UploadImmagine("/Temp/Images/" + Session.SessionID + "/" + viewModel.TokenUploadFoto, fileOriginale); if (fileSalvatato != null) { string[] array = viewModelAnnuncio.Foto.ToArray(); int indiceArray = Array.IndexOf(array, fileSalvatato.NomeOriginale); viewModelAnnuncio.Foto[indiceArray] = fileSalvatato.Nome; } } viewModelAnnuncio.DbContext = db; annuncioInPossesso = new ANNUNCIO(); if (viewModelAnnuncio.SalvaAnnuncio(ControllerContext, annuncioInPossesso)) { int?idAnnuncio = annuncioInPossesso.ID; if (idAnnuncio != null) { // ASSEGNAZIONE CREDITI PersonaModel utente = ((PersonaModel)Session["utente"]); viewModelAnnuncio.InviaEmail(ControllerContext, annuncio, utente); decimal numeroCreditiBonus = AddBonus(db, utente, viewModelAnnuncio); TempData["BONUS"] = string.Format(Bonus.YouWin, numeroCreditiBonus, Language.Moneta); annuncioInPossesso.PERSONA = persona; // perchè sennò non riesce a recuperare l'associazione AnnuncioViewModel nuovoAnnuncio = new AnnuncioViewModel(db, annuncioInPossesso); transaction.Commit(); return(RenderRazorViewToString("PartialPages/_Possiedo", nuovoAnnuncio)); } } } } } catch (Exception eccezione) { transaction.Rollback(); //ErrorSignal.FromCurrentContext().Raise(eccezione); LoggatoreModel.Errore(eccezione); } } } } // desiderio non registrato throw new Exception(ExceptionMessage.CopyAdvertising); }