Пример #1
0
        public OffertaViewModel(DatabaseContext db, OFFERTA model)
        {
            SetDefault();
            BarattiToken       = new List <string>();
            Id                 = model.ID;
            Token              = Utility.Encode(model.ID);
            Annuncio           = new AnnuncioViewModel(db, model.ANNUNCIO);
            Punti              = Convert.ToDecimal(model.PUNTI).ToHappyCoin();
            Soldi              = Convert.ToDecimal(model.SOLDI).ToString("C");
            Annuncio.Categoria = model.ANNUNCIO.CATEGORIA.NOME;
            Annuncio.Foto      = model.ANNUNCIO.ANNUNCIO_FOTO.Select(f => new AnnuncioFoto()
            {
                ID_ANNUNCIO      = f.ID_ANNUNCIO,
                ALLEGATO         = f.ALLEGATO,
                DATA_INSERIMENTO = f.DATA_INSERIMENTO,
                DATA_MODIFICA    = f.DATA_MODIFICA
            }).ToList();
            Baratti = model.OFFERTA_BARATTO
                      .Where(b => b.ID_OFFERTA == model.ID && b.ANNUNCIO != null)
                      .Select(b =>
                              new AnnuncioViewModel()
            {
                Token        = b.ANNUNCIO.TOKEN.ToString(),
                TipoAcquisto = b.ANNUNCIO.SERVIZIO != null ? TipoAcquisto.Servizio : TipoAcquisto.Oggetto,
                Nome         = b.ANNUNCIO.NOME,
                Punti        = b.ANNUNCIO.PUNTI.ToHappyCoin(),
                Soldi        = Convert.ToDecimal(b.ANNUNCIO.SOLDI).ToString("C"),
            }).ToList();
            BarattiToken    = Baratti.Select(m => m.Token.ToString()).ToList();
            Compratore      = new UtenteVenditaViewModel(model.PERSONA);
            TipoOfferta     = (TipoPagamento)model.TIPO_OFFERTA;
            TipoPagamento   = (TipoPagamento)model.ANNUNCIO.TIPO_PAGAMENTO;
            StatoOfferta    = (StatoOfferta)model.STATO;
            DataInserimento = (DateTime)model.DATA_INSERIMENTO;
            OFFERTA_SPEDIZIONE offertaSpedizione = model.OFFERTA_SPEDIZIONE.FirstOrDefault();

            TipoScambio = TipoScambio.AMano;
            if (offertaSpedizione != null)
            {
                TipoScambio = TipoScambio.Spedizione;
                INDIRIZZO indirizzo = offertaSpedizione.INDIRIZZO;
                CapDestinatario        = indirizzo.COMUNE.CAP;
                IndirizzoDestinatario  = indirizzo.INDIRIZZO1;
                CivicoDestinatario     = indirizzo.CIVICO;
                NominativoDestinatario = offertaSpedizione.NOMINATIVO_DESTINATARIO;
                TelefonoDestinatario   = offertaSpedizione.TELEFONO_DESTINATARIO;
                SoldiSpedizione        = offertaSpedizione.SOLDI.ToString("C");
                ANNUNCIO_TIPO_SCAMBIO tipoScambio = model.ANNUNCIO.ANNUNCIO_TIPO_SCAMBIO.FirstOrDefault(m => m.TIPO_SCAMBIO == (int)TipoScambio.Spedizione);
                if (tipoScambio != null)
                {
                    NomeCorriere = tipoScambio.ANNUNCIO_TIPO_SCAMBIO_SPEDIZIONE.FirstOrDefault()
                                   .CORRIERE_SERVIZIO_SPEDIZIONE.CORRIERE_SERVIZIO.CORRIERE.NOME;
                }
            }
        }
Пример #2
0
        public VerificaOfferta CheckAccettaOfferta(PersonaModel utente, OFFERTA model)
        {
            decimal credito = model.PERSONA.CONTO_CORRENTE.CONTO_CORRENTE_CREDITO
                              .Where(m => m.STATO == (int)StatoCredito.SOSPESO).Sum(m => m.PUNTI);

            //int credito = utente.Credito.Count(m => m.STATO == (int)StatoCredito.ASSEGNATO);

            if (model.PERSONA.STATO != (int)Stato.ATTIVO)
            {
                return(VerificaOfferta.CompratoreNonAttivo);
            }

            if (model.ID_PERSONA == utente.Persona.ID)
            {
                return(VerificaOfferta.OffertaNonValida);
            }

            if (!(model.STATO == (int)StatoOfferta.ATTIVA || model.STATO == (int)StatoOfferta.SOSPESA || model.STATO == (int)StatoOfferta.ACCETTATA_ATTESO_PAGAMENTO))
            {
                return(VerificaOfferta.OffertaNonDisponibile);
            }

            if (model.PUNTI > credito)
            {
                return(VerificaOfferta.CreditiNonSufficienti);
            }

            if (utente.Persona.STATO != (int)Stato.ATTIVO)
            {
                return(VerificaOfferta.VenditoreNonAttivo);
            }

            if (model.OFFERTA_SPEDIZIONE.Count() > 0)
            {
                OFFERTA_SPEDIZIONE spedizione = model.OFFERTA_SPEDIZIONE.FirstOrDefault(m => m.STATO != (int)StatoSpedizione.PAGATA);

                if (spedizione != null && spedizione.SOLDI > 0)
                {
                    return(VerificaOfferta.VerificaCartaDiCredito);
                }
            }

            if ((int)this.SOLDI > 0 && model.ANNUNCIO.TIPO_PAGAMENTO != (int)TipoPagamento.HAPPY)
            {
                return(VerificaOfferta.VerificaCartaDiCredito);
            }

            return(VerificaOfferta.Ok);
        }
Пример #3
0
        public AcquistoViewModel(OFFERTA offerta)
        {
            Token     = offerta.ANNUNCIO.TOKEN.ToString();
            TipoCarta = TipoCartaCredito.PayPal;
            // recupero dati per spedizione
            TipoScambio = Models.TipoScambio.Spedizione;
            OFFERTA_SPEDIZIONE spedizione = offerta.OFFERTA_SPEDIZIONE.SingleOrDefault();

            NominativoDestinatario = spedizione.NOMINATIVO_DESTINATARIO;
            TelefonoDestinatario   = spedizione.TELEFONO_DESTINATARIO;
            InfoExtraDestinatario  = spedizione.INFO_EXTRA;
            CapDestinatario        = spedizione.INDIRIZZO.COMUNE.CAP;
            IndirizzoDestinatario  = spedizione.INDIRIZZO.INDIRIZZO1;
            CivicoDestinatario     = spedizione.INDIRIZZO.CIVICO;
        }
Пример #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);
        }