private void DoPagamento(DatabaseContext db, TRANSAZIONE transazione) { if (transazione.PUNTI != null && transazione.PUNTI > 0) { ContoCorrenteCreditoModel credito = new ContoCorrenteCreditoModel(db, transazione.ID_CONTO_MITTENTE); credito.PayUserForBid(transazione.ID_CONTO_DESTINATARIO, this.ID, transazione.ID); //var listaCrediti = db.CONTO_CORRENTE_CREDITO.Where(m => m.ID_CONTO_CORRENTE == transazione.ID_CONTO_MITTENTE && // m.ID_OFFERTA_USCITA == this.ID && m.STATO == (int)StatoMoneta.SOSPESA).ToList(); //listaCrediti.ForEach(m => //{ // m.ID_TRANSAZIONE_USCITA = transazione.ID; // m.DATA_SCADENZA = DateTime.Now; // m.STATO = (int)StatoCredito.CEDUTO; //}); //if (db.SaveChanges() <= 0) // throw new Exception(string.Format(ExceptionMessage.NotSavedMoney, this.ID, String.Join(", ", listaCrediti.Select(m => m.ID)))); //// passo i punti al destinatario //CONTO_CORRENTE_CREDITO creditoDestinatario = new CONTO_CORRENTE_CREDITO(); //creditoDestinatario.ID_CONTO_CORRENTE = transazione.ID_CONTO_DESTINATARIO; //creditoDestinatario.ID_TRANSAZIONE_ENTRATA = transazione.ID; //creditoDestinatario.PUNTI = (decimal)transazione.PUNTI; //creditoDestinatario.SOLDI = Controllers.Utility.cambioValuta(transazione.PUNTI); //creditoDestinatario.GIORNI_SCADENZA = Convert.ToInt32(ConfigurationManager.AppSettings["GiorniScadenzaCredito"]); //creditoDestinatario.DATA_SCADENZA = DateTime.Now.AddDays(creditoDestinatario.GIORNI_SCADENZA); //creditoDestinatario.DATA_INSERIMENTO = DateTime.Now; //creditoDestinatario.STATO = (int)StatoCredito.ASSEGNATO; //db.CONTO_CORRENTE_CREDITO.Add(creditoDestinatario); //if (db.SaveChanges() <= 0) // throw new Exception(string.Format(ExceptionMessage.NotSavedMoneyForSeller, this.ID, creditoDestinatario.ID)); } }
public bool AddBonusCanalePubblicitario(DatabaseContext db, string promo) { int valorePromo = Convert.ToInt32(ConfigurationManager.AppSettings["bonusPromozione" + promo]); this.Persona.DATA_ACCESSO = DateTime.Now; db.Entry(this.Persona).State = EntityState.Modified; if (db.SaveChanges() > 0) { Guid tokenPortale = Guid.Parse(ConfigurationManager.AppSettings["portaleweb"]); TRANSAZIONE model = new TRANSAZIONE(); model.ID_CONTO_MITTENTE = db.ATTIVITA.Where(p => p.TOKEN == tokenPortale).SingleOrDefault().ID_CONTO_CORRENTE; model.ID_CONTO_DESTINATARIO = this.Persona.ID_CONTO_CORRENTE; model.TIPO = (int)TipoTransazione.BonusCanalePubblicitario; model.NOME = string.Format(App_GlobalResources.Bonus.AdChannel, promo); model.PUNTI = valorePromo; model.DATA_INSERIMENTO = DateTime.Now; model.STATO = (int)StatoPagamento.ACCETTATO; db.TRANSAZIONE.Add(model); db.SaveChanges(); if (model.PUNTI != null && model.PUNTI > 0) { ContoCorrenteCreditoModel credito = new ContoCorrenteCreditoModel(db, this.Persona.ID_CONTO_CORRENTE); credito.Earn(model.ID, (decimal)model.PUNTI); } return(true); } return(false); }
private int SaveTransazionePerAcquirente(DatabaseContext db, PERSONA venditore, int?idPayPal) { // passaggio baratto da acquirente a venditore TRANSAZIONE transazione = new TRANSAZIONE(); transazione.ID_CONTO_MITTENTE = venditore.ID_CONTO_CORRENTE; transazione.ID_CONTO_DESTINATARIO = this.PERSONA.ID_CONTO_CORRENTE; transazione.NOME = Language.BidTransaction + " " + this.ANNUNCIO.NOME; if (transazione.NOME.Length > 100) { transazione.NOME = transazione.NOME.Substring(0, 99); } transazione.PUNTI = 0; transazione.SOLDI = 0; transazione.TIPO = (int)TipoPagamento.HAPPY; transazione.DATA_INSERIMENTO = DateTime.Now; transazione.TEST = 0; transazione.ID_PAYPAL = idPayPal; transazione.STATO = (int)StatoPagamento.ACCETTATO; db.TRANSAZIONE.Add(transazione); if (db.SaveChanges() <= 0) { throw new Exception(string.Format(ExceptionMessage.NotSavedBidTransaction, this.ID)); } return(transazione.ID); }
public int AddCredito(DatabaseContext db, string nomeTransazione, TipoTransazione tipo, int punti) { using (DbContextTransaction transazione = db.Database.BeginTransaction()) { TRANSAZIONE model = new TRANSAZIONE(); //model.ID_COMPRATORE = this.CONTO_CORRENTE.; >>> mettere conto corrente model.TIPO = (int)tipo; model.NOME = nomeTransazione; model.PUNTI = punti; model.DATA_INSERIMENTO = DateTime.Now; model.STATO = (int)StatoPagamento.ACCETTATO; db.TRANSAZIONE.Add(model); db.SaveChanges(); CONTO_CORRENTE_MONETA moneta = new CONTO_CORRENTE_MONETA(); moneta.ID_CONTO_CORRENTE = this.ID_CONTO_CORRENTE; for (int i = 0; i < punti; i++) { try { moneta.ID_MONETA = db.MONETA.FirstOrDefault(m => m.CONTO_CORRENTE_MONETA.Count(item => item.ID_MONETA == m.ID) <= 0).ID; moneta.DATA_INSERIMENTO = DateTime.Now; moneta.STATO = (int)StatoMoneta.ATTIVA; db.CONTO_CORRENTE_MONETA.Add(moneta); db.SaveChanges(); } catch (Exception eccezione) { i -= 1; Elmah.ErrorSignal.FromCurrentContext().Raise(eccezione); } } transazione.Commit(); return(db.CONTO_CORRENTE_MONETA.Count(item => item.ID_CONTO_CORRENTE == this.ID_CONTO_CORRENTE)); } }
public bool AddBonus(int rowCount = 0) { TRANSAZIONE transazione = this as TRANSAZIONE; _db.TRANSAZIONE.Add(transazione); return(_db.SaveChanges() > rowCount); }
private TRANSAZIONE SaveTransazionePerVenditore(DatabaseContext db, PERSONA venditore, CORRIERE_SERVIZIO_SPEDIZIONE spedizione) { // compratore paga venditore TRANSAZIONE transazione = new TRANSAZIONE(); transazione.ID_CONTO_MITTENTE = this.PERSONA.ID_CONTO_CORRENTE; transazione.ID_CONTO_DESTINATARIO = venditore.ID_CONTO_CORRENTE; transazione.NOME = Language.BuyTransaction + " " + this.ANNUNCIO.NOME; if (transazione.NOME.Length > 100) { transazione.NOME = transazione.NOME.Substring(0, 99); } transazione.PUNTI = this.PUNTI; transazione.SOLDI = Utility.cambioValuta(this.PUNTI); transazione.TIPO = (int)TipoPagamento.HAPPY; transazione.DATA_INSERIMENTO = DateTime.Now; transazione.TEST = 0; transazione.STATO = (int)StatoPagamento.ACCETTATO; db.TRANSAZIONE.Add(transazione); if (db.SaveChanges() <= 0) { throw new Exception(string.Format(ExceptionMessage.NotSavedBidTransaction, this.ID)); } TRANSAZIONE_ANNUNCIO transazioneAnnuncio = new Models.TRANSAZIONE_ANNUNCIO(); transazioneAnnuncio.ID_TRANSAZIONE = transazione.ID; transazioneAnnuncio.ID_ANNUNCIO = this.ID_ANNUNCIO; transazioneAnnuncio.PUNTI = (decimal)transazione.PUNTI; transazioneAnnuncio.SOLDI = (decimal)transazione.SOLDI; if (spedizione != null) { transazioneAnnuncio.PUNTI_SPEDIZIONE = (decimal)spedizione.PUNTI; transazioneAnnuncio.SOLDI_SPEDIZIONE = (decimal)spedizione.SOLDI; } transazioneAnnuncio.DATA_INSERIMENTO = DateTime.Now; transazioneAnnuncio.STATO = (int)StatoPagamento.ACCETTATO; db.TRANSAZIONE_ANNUNCIO.Add(transazioneAnnuncio); if (db.SaveChanges() <= 0) { throw new Exception(string.Format(ExceptionMessage.NotSavedBidTransaction, this.ID)); } return(transazione); }
public void SendEmail(System.Web.Mvc.ControllerContext controller, TRANSAZIONE pagamento, PersonaModel utente) { PERSONA venditore = pagamento.CONTO_CORRENTE.PERSONA.SingleOrDefault(); // impostare invio email pagamento effettuato EmailModel email = new EmailModel(controller); email.To.Add(new System.Net.Mail.MailAddress(venditore.PERSONA_EMAIL.SingleOrDefault(e => e.TIPO == (int)TipoEmail.Registrazione).EMAIL)); string nominativo = utente.Persona.NOME + " " + utente.Persona.COGNOME; email.Subject = String.Format(Email.PaymentSubject, pagamento.NOME, nominativo) + " - " + WebConfigurationManager.AppSettings["nomeSito"]; email.Body = "Pagamento"; email.DatiEmail = new SchedaPagamentoViewModel() { Nome = pagamento.NOME, Compratore = nominativo, Venditore = venditore.NOME + " " + venditore.COGNOME, Punti = (int)pagamento.PUNTI, Soldi = (int)pagamento.SOLDI, Data = pagamento.DATA_INSERIMENTO, }; new EmailController().SendEmail(email); }
public TRANSAZIONE Pay(DatabaseContext db, Guid mittente, Guid destinatario, string nomeTransazione, TipoTransazione tipo, int punti) { using (DbContextTransaction transazione = db.Database.BeginTransaction()) { List <CONTO_CORRENTE_MONETA> list = db.CONTO_CORRENTE_MONETA.Where(m => m.ID_CONTO_CORRENTE == mittente && m.STATO == (int)StatoMoneta.ASSEGNATA).Take(punti).ToList(); if (list.Count < punti) { return(null); } TRANSAZIONE model = new TRANSAZIONE(); model.ID_CONTO_MITTENTE = mittente; model.ID_CONTO_DESTINATARIO = destinatario; model.TIPO = (int)tipo; model.NOME = nomeTransazione; model.PUNTI = punti; model.DATA_INSERIMENTO = DateTime.Now; model.STATO = (int)StatoPagamento.ACCETTATO; db.TRANSAZIONE.Add(model); db.SaveChanges(); foreach (CONTO_CORRENTE_MONETA moneta in list) { moneta.DATA_MODIFICA = DateTime.Now; moneta.STATO = (int)StatoMoneta.CEDUTA; db.SaveChanges(); db.Entry(moneta).State = EntityState.Added; moneta.STATO = (int)StatoMoneta.ASSEGNATA; moneta.ID_CONTO_CORRENTE = destinatario; moneta.DATA_INSERIMENTO = DateTime.Now; moneta.DATA_MODIFICA = null; db.SaveChanges(); } transazione.Commit(); return(model); } }
public bool Accetta(DatabaseContext db, PERSONA venditore, int?idPayPal, ref string messaggio) { DateTime dataModifica = DateTime.Now; TipoScambio tipoScambio = TipoScambio.AMano; if (this.OFFERTA_SPEDIZIONE.Count() > 0) { tipoScambio = TipoScambio.Spedizione; } // verifico la possibilità di acquisto del compratore VerificaAcquisto statoAcquisto = AnnuncioModel.CheckAcquisto(this.PERSONA, this.PERSONA.CONTO_CORRENTE.CONTO_CORRENTE_CREDITO.ToList(), tipoScambio, false, true); if (statoAcquisto == VerificaAcquisto.Ok) { this.ANNUNCIO.DATA_VENDITA = dataModifica; this.ANNUNCIO.STATO = (int)StatoVendita.VENDUTO; } else if (statoAcquisto == VerificaAcquisto.VerificaCartaCredito) { this.ANNUNCIO.DATA_VENDITA = dataModifica; this.ANNUNCIO.STATO = (int)StatoVendita.BARATTOINCORSO; } else if (statoAcquisto != VerificaAcquisto.VerificaCartaCredito && statoAcquisto != VerificaAcquisto.SpedizioneDaPagare) { // se il compratore non può acquistare annuncio return(false); } this.ANNUNCIO.DATA_MODIFICA = dataModifica; this.ANNUNCIO.ID_COMPRATORE = this.PERSONA.ID; db.ANNUNCIO.Attach(this.OffertaOriginale.ANNUNCIO); db.Entry(this.OffertaOriginale.ANNUNCIO).State = System.Data.Entity.EntityState.Modified; // salvataggio offerta this.SESSIONE_COMPRATORE = null; this.DATA_MODIFICA = dataModifica; this.STATO = (int)StatoOfferta.ACCETTATA; this.OffertaOriginale.STATO = this.STATO; this.OffertaOriginale.DATA_MODIFICA = this.DATA_MODIFICA; this.OffertaOriginale.SESSIONE_COMPRATORE = this.SESSIONE_COMPRATORE; db.OFFERTA.Attach(this.OffertaOriginale); db.Entry(this.OffertaOriginale).State = System.Data.Entity.EntityState.Modified; int salvataggi = db.SaveChanges(); if (salvataggi > 1) { CORRIERE_SERVIZIO_SPEDIZIONE spedizioneVenditore = null; ANNUNCIO_TIPO_SCAMBIO tipoScambioVenditore = this.ANNUNCIO.ANNUNCIO_TIPO_SCAMBIO .FirstOrDefault(m => m.TIPO_SCAMBIO == (int)tipoScambio); tipoScambioVenditore.DATA_MODIFICA = DateTime.Now; tipoScambioVenditore.STATO = (int)StatoScambio.SELEZIONATO; db.ANNUNCIO_TIPO_SCAMBIO.Attach(tipoScambioVenditore); db.Entry(tipoScambioVenditore).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); // salvataggio spedizione if (tipoScambio == TipoScambio.Spedizione) { var tipoScambioSpedizioneVenditore = tipoScambioVenditore.ANNUNCIO_TIPO_SCAMBIO_SPEDIZIONE.FirstOrDefault(); spedizioneVenditore = db.CORRIERE_SERVIZIO_SPEDIZIONE.FirstOrDefault(m => m.ID == tipoScambioSpedizioneVenditore.ID_CORRIERE_SERVIZIO_SPEDIZIONE); var offertaSpedizione = this.OFFERTA_SPEDIZIONE.FirstOrDefault(); spedizioneVenditore.ID_INDIRIZZO_DESTINATARIO = offertaSpedizione.ID_INDIRIZZO_DESTINATARIO; spedizioneVenditore.NOMINATIVO_DESTINATARIO = offertaSpedizione.NOMINATIVO_DESTINATARIO; spedizioneVenditore.TELEFONO_DESTINATARIO = offertaSpedizione.TELEFONO_DESTINATARIO; spedizioneVenditore.INFO_EXTRA_DESTINATARIO = offertaSpedizione.INFO_EXTRA; spedizioneVenditore.STATO = (int)StatoSpedizione.SOSPESA; //db.CORRIERE_SERVIZIO_SPEDIZIONE.Attach(spedizioneVenditore); db.SaveChanges(); } TRANSAZIONE transazione = SaveTransazionePerVenditore(db, venditore, spedizioneVenditore); // tolgo i punti al mittente DoPagamento(db, transazione); int?idTransazionePerAcquirente = SaveTransazionePerAcquirente(db, venditore, idPayPal); // cambio stato dei baratti offerti for (int i = 0; i < this.OffertaOriginale.OFFERTA_BARATTO.Count(); i++) { var baratto = this.OffertaOriginale.OFFERTA_BARATTO.ToList()[i]; DoBaratto(db, ref baratto, dataModifica, idTransazionePerAcquirente); } AnnullaOfferteEffettuate(db, this.ID_ANNUNCIO); AnnullaOfferteRicevute(db, this.ID_ANNUNCIO, this.ID); this.STATO = this.STATO; return(true); } return(false); }