Esempio n. 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;
                }
            }
        }
Esempio n. 2
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);
        }