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