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