예제 #1
0
        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));
                }
            }
        }
예제 #2
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);
        }