示例#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));
        }
示例#2
0
        private PubblicazioneViewModel UpdateServizio(ANNUNCIO model, PubblicaServizioCopiaViewModel viewModelCopia)
        {
            PubblicazioneViewModel viewModel = null;

            viewModel = new PubblicaServizioViewModel(model);
            // se è stato copiato l'annuncio, allora riporto le modifiche
            if (viewModel != null)
            {
                viewModel.Update(viewModelCopia);
            }

            return(viewModel);
        }
示例#3
0
        public ActionResult Index()
        {
            PubblicazioneViewModel viewModel = new PubblicazioneViewModel();
            // se ho selezionato già una categoria dalla ricerca, carico di default la pubblicazione per quella categoria
            HttpCookie cookie      = HttpContext.Request.Cookies.Get("ricerca");
            int        idCategoria = Convert.ToInt32(cookie["IDCategoria"]);

            if (idCategoria > 1)
            {
                string nomeVistaDettaglio = GetNomeVistaDettagliAnnuncio(idCategoria);
                if (!string.IsNullOrWhiteSpace(nomeVistaDettaglio))
                {
                    viewModel.CategoriaId      = idCategoria;
                    viewModel.CategoriaNome    = cookie["Categoria"];
                    ViewData["infoAggiuntive"] = RenderRazorViewToString(nomeVistaDettaglio, null);
                }
            }
            return(View(viewModel));
        }
示例#4
0
        private decimal AddBonus(DatabaseContext db, PersonaModel utente, PubblicazioneViewModel viewModel)
        {
            bool    risultato             = false;
            decimal numeroPuntiGuadagnati = 0;

            // verifico se dare un bonus dopo un certo numero di pubblicazioni
            Guid portale         = Guid.Parse(ConfigurationManager.AppSettings["portaleweb"]);
            Guid idContoCorrente = db.ATTIVITA.SingleOrDefault(p => p.TOKEN == portale).ID_CONTO_CORRENTE;
            int  numeroVendite   = db.ANNUNCIO.Where(v => v.ID_PERSONA == utente.Persona.ID).GroupBy(v => v.ID_CATEGORIA).Count();

            // aggiunge il bonus sui primi tot. annunci iniziali
            TRANSAZIONE bonus = db.TRANSAZIONE.Where(b => b.ID_CONTO_MITTENTE == idContoCorrente &&
                                                     b.ID_CONTO_DESTINATARIO == utente.Persona.ID_CONTO_CORRENTE && b.TIPO == (int)TipoTransazione.BonusPubblicazioneIniziale).FirstOrDefault();

            if (numeroVendite == Convert.ToInt32(ConfigurationManager.AppSettings["numeroPubblicazioniBonus"]) &&
                bonus == null)
            {
                decimal puntiBonusIniziali = Convert.ToInt32(ConfigurationManager.AppSettings["bonusPubblicazioniIniziali"]);
                this.AddBonus(db, ControllerContext, utente.Persona, portale, puntiBonusIniziali,
                              TipoTransazione.BonusPubblicazioneIniziale, Bonus.InitialPubblication);
                numeroPuntiGuadagnati += (decimal)puntiBonusIniziali;
                risultato              = risultato | true;
            }

            // aggiunge bonus se l'annuncio è completo di tutti i dati
            if (viewModel.IsAnnuncioCompleto())
            {
                decimal puntiAnnuncioCompleto = Convert.ToInt32(ConfigurationManager.AppSettings["bonusAnnuncioCompleto"]);
                this.AddBonus(db, ControllerContext, utente.Persona, portale, puntiAnnuncioCompleto,
                              TipoTransazione.BonusAnnuncioCompleto, Bonus.FullAnnouncement);
                numeroPuntiGuadagnati += puntiAnnuncioCompleto;
                risultato              = risultato | true;
            }

            return((risultato) ? numeroPuntiGuadagnati : 0);
            //return ((risultato) ? (int)bonus.PUNTI : 0);
        }
示例#5
0
        private PubblicazioneViewModel UpdateOggetto(ANNUNCIO model, PubblicaOggettoCopiaViewModel viewModelCopia)
        {
            PubblicazioneViewModel viewModel = null;

            if (model.ID_CATEGORIA == 12)
            {
                viewModel = new PubblicaTelefoniSmartphoneViewModel(model);
            }
            else if (model.ID_CATEGORIA == 64)
            {
                viewModel = new PubblicaConsoleViewModel(model);
            }
            else if (model.ID_CATEGORIA == 13 || (model.ID_CATEGORIA >= 62 && model.ID_CATEGORIA <= 63) || model.ID_CATEGORIA == 65)
            {
                viewModel = new PubblicaTecnologiaViewModel(model);
            }
            else if (model.ID_CATEGORIA == 14)
            {
                viewModel = new PubblicaPcViewModel(model);
            }
            else if (model.ID_CATEGORIA == 26)
            {
                viewModel = new PubblicaElettrodomesticoViewModel(model);
            }
            else if ((model.ID_CATEGORIA >= 28 && model.ID_CATEGORIA <= 39) || model.ID_CATEGORIA == 41)
            {
                viewModel = new PubblicaMusicaViewModel(model);
            }
            else if (model.ID_CATEGORIA == 40)
            {
                viewModel = new PubblicaStrumentoViewModel(model);
            }
            else if (model.ID_CATEGORIA == 45)
            {
                viewModel = new PubblicaVideogamesViewModel(model);
            }
            else if (model.ID_CATEGORIA >= 42 && model.ID_CATEGORIA <= 47)
            {
                viewModel = new PubblicaGiocoViewModel(model);
            }
            else if (model.ID_CATEGORIA >= 50 && model.ID_CATEGORIA <= 61)
            {
                viewModel = new PubblicaSportViewModel(model);
            }
            else if (model.ID_CATEGORIA >= 67 && model.ID_CATEGORIA <= 80)
            {
                viewModel = new PubblicaVideoViewModel(model);
            }
            else if (model.ID_CATEGORIA >= 81 && model.ID_CATEGORIA <= 85)
            {
                viewModel = new PubblicaLibroViewModel(model);
            }
            else if (model.ID_CATEGORIA >= 89 && model.ID_CATEGORIA <= 93)
            {
                viewModel = new PubblicaVeicoloViewModel(model);
            }
            else if (model.ID_CATEGORIA >= 127 && model.ID_CATEGORIA <= 170 && model.ID_CATEGORIA != 161 && model.ID_CATEGORIA != 152 && model.ID_CATEGORIA != 141 && model.ID_CATEGORIA != 127)
            {
                viewModel = new PubblicaVestitoViewModel(model);
            }
            else
            {
                viewModel = new PubblicaOggettoViewModel(model);
            }
            // se è stato copiato l'annuncio, allora riporto le modifiche
            if (viewModel != null)
            {
                viewModel.Update(viewModelCopia);
            }

            return(viewModel);
        }
示例#6
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);
        }