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