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; } } }
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); }