public ActionResult GetFormCopiaAnnuncio(string token) { using (DatabaseContext db = new DatabaseContext()) { int idUtente = (Session["utente"] as PersonaModel).Persona.ID; string tokenDecodificato = Server.UrlDecode(token); //string tokenPulito = tokenDecodificato.Substring(3).Substring(0, tokenDecodificato.Length - 6); //Guid tokenGuid = Guid.Parse(tokenPulito); Guid tokenGuid = Guid.Parse(tokenDecodificato); ANNUNCIO annuncio = db.ANNUNCIO.SingleOrDefault(m => m.TOKEN == tokenGuid && m.ID_PERSONA != idUtente); if (annuncio != null) { PubblicaCopiaViewModel copia = null; if (annuncio.ID_OGGETTO != null) { copia = new PubblicaOggettoCopiaViewModel(annuncio); return(PartialView("PartialPages/_CopiaOggetto", copia)); } else { copia = new PubblicaServizioCopiaViewModel(annuncio); return(PartialView("PartialPages/_CopiaServizio", copia)); } } } throw new Exception(ExceptionMessage.OpenCopyForm); }
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 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); }