private void DoBaratto(DatabaseContext db, ref OFFERTA_BARATTO baratto, DateTime dataModifica, int?idTransazione) { baratto.DATA_MODIFICA = DateTime.Now; baratto.STATO = (int)StatoOfferta.ACCETTATA; db.OFFERTA_BARATTO.Attach(baratto); db.Entry(baratto).State = System.Data.Entity.EntityState.Modified; if (db.SaveChanges() <= 0) { throw new Exception(string.Format(ExceptionMessage.NotSavedBidBarter, this.ID, baratto.ID)); } baratto.ANNUNCIO.STATO = (int)StatoVendita.BARATTATO; baratto.ANNUNCIO.DATA_MODIFICA = dataModifica; baratto.ANNUNCIO.ID_COMPRATORE = this.ANNUNCIO.ID_PERSONA; baratto.ANNUNCIO.DATA_VENDITA = dataModifica; db.ANNUNCIO.Attach(baratto.ANNUNCIO); db.Entry(baratto.ANNUNCIO).State = System.Data.Entity.EntityState.Modified; if (db.SaveChanges() <= 0) { throw new Exception(string.Format(ExceptionMessage.NotSavedBidBarter, this.ID, baratto.ID)); } if (idTransazione != null) { TRANSAZIONE_ANNUNCIO transazioneAnnuncio = new TRANSAZIONE_ANNUNCIO(); transazioneAnnuncio.ID_ANNUNCIO = baratto.ID_ANNUNCIO; transazioneAnnuncio.ID_TRANSAZIONE = (int)idTransazione; transazioneAnnuncio.PUNTI = 0; transazioneAnnuncio.SOLDI = 0; transazioneAnnuncio.DATA_INSERIMENTO = DateTime.Now; transazioneAnnuncio.STATO = (int)StatoPagamento.ACCETTATO; db.TRANSAZIONE_ANNUNCIO.Add(transazioneAnnuncio); if (db.SaveChanges() <= 0) { throw new Exception(string.Format(ExceptionMessage.NotSavedBidBarter, this.ID, baratto.ID)); } } }
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); }