Esempio n. 1
0
        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));
        }