예제 #1
0
        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));
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
 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));
     }
 }
예제 #5
0
        public bool AddBonus(int rowCount = 0)
        {
            TRANSAZIONE transazione = this as TRANSAZIONE;

            _db.TRANSAZIONE.Add(transazione);
            return(_db.SaveChanges() > rowCount);
        }
예제 #6
0
        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);
        }
예제 #7
0
        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);
        }
예제 #8
0
        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);
            }
        }
예제 #9
0
        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);
        }