private bool SaveOffertaCompleta(PayPalIndexViewModel paypal, Payment payment) { AcquistoViewModel viewModel = Session["PayPalCompra"] as AcquistoViewModel; AnnuncioModel model = Session["PayPalAnnuncio"] as AnnuncioModel; using (DatabaseContext db = new DatabaseContext()) { // AGGIUNGERE TRANSAZIONE NELLA TABELLA LOG_PAGAMENTO LOG_PAGAMENTO log = new LOG_PAGAMENTO(); ANNUNCIO annuncio = db.ANNUNCIO.SingleOrDefault(m => m.TOKEN.ToString() == viewModel.Token && m.SESSIONE_COMPRATORE == model.SESSIONE_COMPRATORE); log.ID_ANNUNCIO = annuncio.ID; log.ID_COMPRATORE = (Session["utente"] as PersonaModel).Persona.ID; log.SESSIONE_COMPRATORE = paypal.Guid; log.ID_PAGAMENTO = payment.id; //log.ID_PAGAMENTO = "TEST"; log.ISTITUTO_PAGAMENTO = "PAYPAL"; log.NOME_ANNUNCIO = "Pagamento spedizione per " + annuncio.NOME; log.DATA_INSERIMENTO = DateTime.Now; db.LOG_PAGAMENTO.Add(log); db.SaveChanges(); int idPayPal = SavePayPal(db, payment); using (DbContextTransaction transaction = db.Database.BeginTransaction()) { viewModel.PagamentoFatto = true; AnnuncioModel annuncioModel = new AnnuncioModel(annuncio); Models.Enumerators.VerificaAcquisto verifica = annuncioModel.Acquisto(db, viewModel, true); if (verifica == Models.Enumerators.VerificaAcquisto.Ok) { OFFERTA offerta = db.OFFERTA.SingleOrDefault(m => m.ID == paypal.Id); if (model.CompletaAcquistoOfferta(db, offerta, idPayPal)) { transaction.Commit(); this.RefreshPunteggioUtente(db); Models.ViewModels.Email.PagamentoOffertaViewModel pagamentoOfferta = new Models.ViewModels.Email.PagamentoOffertaViewModel(); pagamentoOfferta.NominativoDestinatario = offerta.ANNUNCIO.PERSONA.NOME + " " + offerta.ANNUNCIO.PERSONA.COGNOME; pagamentoOfferta.NomeAnnuncio = offerta.ANNUNCIO.NOME; pagamentoOfferta.Moneta = offerta.PUNTI; pagamentoOfferta.SoldiSpedizione = offerta.SOLDI; pagamentoOfferta.Baratti = offerta.OFFERTA_BARATTO.Select(m => m.ANNUNCIO.NOME).ToList(); this.SendNotifica((Session["utente"] as PersonaModel).Persona, offerta.ANNUNCIO.PERSONA, TipoNotifica.OffertaPagata, ControllerContext, "pagamentoOfferta", pagamentoOfferta); System.Web.Routing.RouteValueDictionary data = new System.Web.Routing.RouteValueDictionary(new { token = viewModel.Token }); _UrlFinePagamento = Url.Action("Index", "Annuncio", data, this.Request.Url.Scheme, this.Request.Url.Host); return(true); } // altrimenti acquisto fallito } } } return(false); }
// GET: Test public ActionResult Index() { Models.ViewModels.Email.PagamentoOffertaViewModel pagamentoOfferta = new Models.ViewModels.Email.PagamentoOffertaViewModel(); pagamentoOfferta.NominativoDestinatario = "Prova Davide"; pagamentoOfferta.Moneta = 0; Models.PersonaModel destinatario = Session["utente"] as Models.PersonaModel; string indirizzoEmail = destinatario.Email.SingleOrDefault(e => e.TIPO == (int)Models.TipoEmail.Registrazione).EMAIL; if (this.SendEmail(indirizzoEmail, Models.TipoNotifica.OffertaPagata.ToString(), ControllerContext, "test", pagamentoOfferta)) { ViewData["test"] = "Funziona"; } else { ViewData["test"] = "Non funziona"; } return(View()); }
private bool SaveOfferta(Payment payment) { OffertaModel offerta = Session["PayPalOfferta"] as OffertaModel; using (DatabaseContext db = new DatabaseContext()) { db.Database.Connection.Open(); // AGGIUNGERE TRANSAZIONE NELLA TABELLA DEI LOG LOG_PAGAMENTO log = new LOG_PAGAMENTO(); OFFERTA model = db.OFFERTA.Include(m => m.PERSONA) .Include(m => m.ANNUNCIO.ANNUNCIO_TIPO_SCAMBIO) .SingleOrDefault(m => m.ID == offerta.ID); log.ID_ANNUNCIO = model.ID_ANNUNCIO; log.ID_COMPRATORE = model.ID_PERSONA; log.ID_PAGAMENTO = model.ID.ToString(); log.ISTITUTO_PAGAMENTO = "PAYPAL"; log.NOME_ANNUNCIO = "Offerta per l'annuncio " + model.ANNUNCIO.NOME; log.DATA_INSERIMENTO = DateTime.Now; db.LOG_PAGAMENTO.Add(log); db.SaveChanges(); // cambia stato spedizione in pagata OFFERTA_SPEDIZIONE spedizione = model.OFFERTA_SPEDIZIONE.FirstOrDefault(); spedizione.DATA_MODIFICA = DateTime.Now; spedizione.STATO = (int)StatoSpedizione.PAGATA; db.OFFERTA_SPEDIZIONE.Attach(spedizione); db.Entry(spedizione).State = EntityState.Modified; db.SaveChanges(); int idPayPal = SavePayPal(db, payment); using (DbContextTransaction transaction = db.Database.BeginTransaction()) { try { var utente = (Session["utente"] as PersonaModel); string messaggio = string.Empty; // ripopolo classe offerta per calcoli nella funzione ACCETTA offerta.OffertaOriginale = model; offerta.ANNUNCIO.ANNUNCIO_TIPO_SCAMBIO = db.ANNUNCIO_TIPO_SCAMBIO .Include(m => m.ANNUNCIO_TIPO_SCAMBIO_SPEDIZIONE) .Where(m => m.ID_ANNUNCIO == offerta.ID_ANNUNCIO).ToList(); offerta.AnnuncioModel.ANNUNCIO_TIPO_SCAMBIO = offerta.ANNUNCIO.ANNUNCIO_TIPO_SCAMBIO; //if (offerta.Accetta(db, utente.Persona, utente.Credito, ref messaggio)) => non passa compratore nell'offerta if (offerta.Accetta(db, utente.Persona, idPayPal, ref messaggio)) { transaction.Commit(); Models.ViewModels.Email.PagamentoOffertaViewModel offertaAccettata = new Models.ViewModels.Email.PagamentoOffertaViewModel(); offertaAccettata.NominativoDestinatario = offerta.PERSONA.NOME + " " + offerta.PERSONA.COGNOME; offertaAccettata.NomeAnnuncio = offerta.ANNUNCIO.NOME; offertaAccettata.Moneta = offerta.PUNTI; offertaAccettata.SoldiSpedizione = offerta.SOLDI; offertaAccettata.Baratti = offerta.OFFERTA_BARATTO.Select(m => m.ANNUNCIO.NOME).ToList(); this.SendNotifica(utente.Persona, offerta.PERSONA, TipoNotifica.OffertaAccettata, ControllerContext, "offertaAccettata", offertaAccettata); //System.Web.Routing.RouteValueDictionary data = new System.Web.Routing.RouteValueDictionary(new { token = offerta.ID }); _UrlFinePagamento = Url.Action("OfferteRicevute", "Vendite", null, this.Request.Url.Scheme, this.Request.Url.Host); //return (db.SaveChanges() > 0); return(true); } } catch (Exception ex) { transaction.Rollback(); LoggatoreModel.Errore(ex); throw ex; } } } return(false); }
public ActionResult AccettaOfferta(string token) { int idOfferta = Utility.DecodeToInt(token); string messaggio = ""; //OffertaModel offerta = new OffertaModel(idOfferta, (Session["utente"] as PersonaModel).Persona); using (DatabaseContext db = new DatabaseContext()) { using (var transazioneDb = db.Database.BeginTransaction()) { try { PersonaModel utente = ((PersonaModel)System.Web.HttpContext.Current.Session["utente"]); OFFERTA offerta = db.OFFERTA.Include(m => m.PERSONA) .Where(o => o.ID == idOfferta && o.ANNUNCIO.ID_PERSONA == utente.Persona.ID && (o.STATO == (int)StatoOfferta.ATTIVA || o.STATO == (int)StatoOfferta.ACCETTATA_ATTESO_PAGAMENTO)).SingleOrDefault(); OffertaModel offertaModel = new OffertaModel(offerta); Models.Enumerators.VerificaOfferta verifica = offertaModel.CheckAccettaOfferta(utente, offerta); // se bisogna pagare la spedizione reindirizzo su paypal if (verifica == Models.Enumerators.VerificaOfferta.VerificaCartaDiCredito) { // prima setto la sessione per il pagamento offerta.STATO = (int)StatoOfferta.ACCETTATA_ATTESO_PAGAMENTO; offerta.SESSIONE_COMPRATORE = HttpContext.Session.SessionID + "§" + Guid.NewGuid().ToString(); db.OFFERTA.Attach(offerta); db.Entry(offerta).State = EntityState.Modified; if (db.SaveChanges() > 0) { // metto l'annuncio dell'offerta come baratto in corso offertaModel.ANNUNCIO.STATO = (int)StatoVendita.BARATTOINCORSO; db.ANNUNCIO.Attach(offertaModel.ANNUNCIO); db.Entry(offertaModel.ANNUNCIO).State = EntityState.Modified; if (db.SaveChanges() > 0) { transazioneDb.Commit(); //Session["PayPalCompra"] = viewModel; Session["PayPalOfferta"] = new OffertaModel(offertaModel.OffertaOriginale); return(RedirectToAction("Payment", "PayPal", new { Id = offerta.ID, Token = token, Azione = AzionePayPal.Offerta })); } } } else if (verifica == Models.Enumerators.VerificaOfferta.Ok) { if (offertaModel.Accetta(db, utente.Persona, null, ref messaggio)) { // se offerta dev'essere pagata, invio notifica e reindirizzo a pagina pagamento // se venditore annulla pagamento, potrà sempre pagare più avanti, sennò feedback negativo e annullo transazioni if (offertaModel.ANNUNCIO.STATO == (int)StatoVendita.BARATTOINCORSO) { Models.ViewModels.Email.PagamentoOffertaViewModel offertaAccettata = new Models.ViewModels.Email.PagamentoOffertaViewModel(); offertaAccettata.NominativoDestinatario = offertaModel.PERSONA.NOME + " " + offertaModel.PERSONA.COGNOME; offertaAccettata.NomeAnnuncio = offertaModel.ANNUNCIO.NOME; offertaAccettata.Moneta = offertaModel.PUNTI; offertaAccettata.SoldiSpedizione = offertaModel.SOLDI; offertaAccettata.Baratti = offertaModel.OFFERTA_BARATTO.Select(m => m.ANNUNCIO.NOME).ToList(); this.SendNotifica(utente.Persona, offertaModel.PERSONA, TipoNotifica.OffertaAccettata, ControllerContext, "offertaAccettata", offertaAccettata); } transazioneDb.Commit(); ViewBag.Message = Language.AcceptedBid; return(Redirect(System.Web.HttpContext.Current.Request.UrlReferrer.ToString())); } } } catch (Exception eccezione) { //Elmah.ErrorSignal.FromCurrentContext().Raise(eccezione); LoggatoreModel.Errore(eccezione); } transazioneDb.Rollback(); } } TempData["MESSAGGIO"] = Language.ErrorAcceptBid; return(Redirect(System.Web.HttpContext.Current.Request.UrlReferrer.ToString())); }