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));
            }
        }
Beispiel #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);
        }
        public void PayUserForBid(Guid idContoDestinatario, int idOfferta, int idTransazione)
        {
            var listaCrediti = _db.CONTO_CORRENTE_CREDITO.Where(m => m.ID_CONTO_CORRENTE == this.ID_CONTO_CORRENTE &&
                                                                m.ID_OFFERTA_USCITA == idOfferta && m.STATO == (int)StatoMoneta.SOSPESA).ToList();

            listaCrediti.ForEach(m =>
            {
                m.ID_TRANSAZIONE_USCITA = idTransazione;
                m.DATA_SCADENZA         = DateTime.Now;
                m.STATO = (int)StatoCredito.CEDUTO;
            });
            if (_db.SaveChanges() <= 0)
            {
                throw new Exception(string.Format(App_GlobalResources.ExceptionMessage.NotSavedMoney, idOfferta,
                                                  String.Join(", ", listaCrediti.Select(m => m.ID))));
            }

            ContoCorrenteCreditoModel creditoDestinatario = new ContoCorrenteCreditoModel(_db, idContoDestinatario);

            creditoDestinatario.AddCreditoSuDB(idTransazione, listaCrediti.Sum(m => m.PUNTI));
        }
Beispiel #4
0
        public bool Save(DatabaseContext db, ref string messaggio)
        {
            string       tokenDecodificato = HttpContext.Current.Server.UrlDecode(this.Annuncio.Token);
            Guid         tokenGuid         = Guid.Parse(tokenDecodificato);
            PersonaModel utente            = (PersonaModel)HttpContext.Current.Session["utente"];
            decimal      crediti           = utente.Credito.Where(m => m.STATO == (int)StatoCredito.ASSEGNATO)
                                             .Select(m => m.PUNTI).Sum();
            decimal puntiOfferta = 0;

            if (!string.IsNullOrWhiteSpace(this.Punti))
            {
                puntiOfferta = this.Punti.ParseFromHappyCoin();
            }
            bool baratto = false;

            if (this.BarattiToken != null && this.BarattiToken.Count > 0)
            {
                baratto = true;
            }
            ANNUNCIO annuncio = db.ANNUNCIO.SingleOrDefault(m => m.TOKEN == tokenGuid && m.ID_PERSONA != utente.Persona.ID && m.STATO == (int)StatoVendita.ATTIVO &&
                                                            puntiOfferta <= crediti &&
                                                            utente.Persona.STATO == (int)Stato.ATTIVO && ((m.OGGETTO != null && 1 <= m.OGGETTO.NUMERO_PEZZI) || (m.SERVIZIO != null)) &&
                                                            (baratto || puntiOfferta > 0));

            if (annuncio != null)
            {
                // verifica se offerta già effettuata
                if (annuncio.OFFERTA.Count(o => o.ID_PERSONA == utente.Persona.ID && o.STATO != (int)StatoOfferta.ANNULLATA) > 0)
                {
                    messaggio = App_GlobalResources.ErrorResource.BidInProgress;
                    return(false);
                }

                // inserimento offerta
                OFFERTA offerta = new OFFERTA();
                offerta.ID_ANNUNCIO = annuncio.ID;
                offerta.ID_PERSONA  = utente.Persona.ID;
                offerta.PUNTI       = puntiOfferta;
                //offerta.SOLDI = decimal.Parse(this.Soldi, System.Globalization.NumberStyles.Currency);
                offerta.SOLDI            = Utility.cambioValuta(offerta.PUNTI);
                offerta.TIPO_OFFERTA     = (int)this.TipoOfferta;
                offerta.TIPO_TRATTATIVA  = (int)this.TipoPagamento; // DA VERIFICARE CHE COSA SERVA
                offerta.DATA_INSERIMENTO = DateTime.Now;
                offerta.STATO            = (int)StatoOfferta.ATTIVA;
                db.OFFERTA.Add(offerta);

                if (db.SaveChanges() > 0)
                {
                    // Sospensione crediti associati all'offerta
                    if (offerta.PUNTI > 0)
                    {
                        ContoCorrenteCreditoModel credito = new ContoCorrenteCreditoModel(db, utente.Persona.ID_CONTO_CORRENTE);
                        credito.Suspend(offerta.ID, (decimal)offerta.PUNTI);
                    }
                    decimal soldiSpedizione = 0;
                    if (baratto)
                    {
                        // se sto offrendo un baratto, inserisco gli oggetti barattati
                        foreach (string annuncioDiScambio in this.BarattiToken)
                        {
                            OFFERTA_BARATTO offertaBaratto = new OFFERTA_BARATTO();
                            offertaBaratto.ID_OFFERTA = offerta.ID;
                            var annuncioBaratto = db.ANNUNCIO.SingleOrDefault(m => m.TOKEN.ToString() == annuncioDiScambio &&
                                                                              m.STATO == (int)StatoVendita.ATTIVO);
                            offertaBaratto.ID_ANNUNCIO      = annuncioBaratto.ID;
                            offertaBaratto.DATA_INSERIMENTO = DateTime.Now;
                            offertaBaratto.STATO            = (int)Stato.ATTIVO;
                            db.OFFERTA_BARATTO.Add(offertaBaratto);
                            if (db.SaveChanges() <= 0)
                            {
                                return(false);
                            }

                            if (this.TipoScambio == TipoScambio.Spedizione)
                            {
                                var annuncioBarattoSpedizione = annuncioBaratto.ANNUNCIO_TIPO_SCAMBIO
                                                                .FirstOrDefault(m => m.TIPO_SCAMBIO == (int)TipoScambio.Spedizione);
                                soldiSpedizione += db.ANNUNCIO_TIPO_SCAMBIO_SPEDIZIONE
                                                   .SingleOrDefault(m => m.ID_ANNUNCIO_TIPO_SCAMBIO == annuncioBarattoSpedizione.ID).SOLDI;
                            }
                        }
                    }

                    // aggiungere offerta_spedizione per salvare dati destinazione
                    if (this.TipoScambio == TipoScambio.Spedizione)
                    {
                        OFFERTA_SPEDIZIONE offertaSpedizione = new OFFERTA_SPEDIZIONE();
                        offertaSpedizione.ID_OFFERTA = offerta.ID;
                        INDIRIZZO indirizzo = db.INDIRIZZO.FirstOrDefault(m => m.INDIRIZZO1 == this.IndirizzoDestinatario && m.COMUNE.CAP == this.CapDestinatario && m.CIVICO == this.CivicoDestinatario);
                        if (indirizzo == null)
                        {
                            indirizzo                  = new INDIRIZZO();
                            indirizzo.INDIRIZZO1       = this.IndirizzoDestinatario;
                            indirizzo.CIVICO           = this.CivicoDestinatario;
                            indirizzo.ID_COMUNE        = db.COMUNE.FirstOrDefault(m => m.CAP == this.CapDestinatario).ID;
                            indirizzo.TIPOLOGIA        = (int)TipoIndirizzo.Residenza;
                            indirizzo.DATA_INSERIMENTO = DateTime.Now;
                            indirizzo.STATO            = (int)Stato.ATTIVO;
                            db.INDIRIZZO.Add(indirizzo);
                            db.SaveChanges();
                        }
                        offertaSpedizione.SOLDI                     = soldiSpedizione;
                        offertaSpedizione.ID_COMMISSIONE            = GetCommissioneSpedizione(db, soldiSpedizione);
                        offertaSpedizione.ID_INDIRIZZO_DESTINATARIO = indirizzo.ID;
                        offertaSpedizione.NOMINATIVO_DESTINATARIO   = this.NominativoDestinatario;
                        offertaSpedizione.TELEFONO_DESTINATARIO     = this.TelefonoDestinatario;
                        TIPO_VALUTA tipoValuta = (HttpContext.Current.Application["tipoValuta"] as List <TIPO_VALUTA>).SingleOrDefault(m => m.SIMBOLO == System.Globalization.NumberFormatInfo.CurrentInfo.CurrencySymbol);
                        offertaSpedizione.ID_TIPO_VALUTA   = tipoValuta.ID;
                        offertaSpedizione.DATA_INSERIMENTO = DateTime.Now;
                        offertaSpedizione.STATO            = (int)Stato.ATTIVO;
                        db.OFFERTA_SPEDIZIONE.Add(offertaSpedizione);
                        if (db.SaveChanges() <= 0)
                        {
                            return(false);
                        }
                    }
                    return(true);
                }
            }
            else
            {
                messaggio = App_GlobalResources.ErrorResource.BidAd;
                return(false);
            }
            return(false);
        }