예제 #1
0
        private void SetFeedbackVenditore(ANNUNCIO model, TipoVenditore tipoVenditore)
        {
            try
            {
                List <int> voti = model.ANNUNCIO_FEEDBACK
                                  .Where(item => (tipoVenditore == TipoVenditore.Persona && item.ANNUNCIO.ID_PERSONA == Venditore.Id) ||
                                         (tipoVenditore == TipoVenditore.Attivita && item.ANNUNCIO.ID_ATTIVITA == Venditore.Id)).Select(item => item.VOTO).ToList();

                int votoMassimo = voti.Count * 10;
                if (voti.Count <= 0)
                {
                    VenditoreFeedback = -1;
                }
                else
                {
                    int x = voti.Sum() / votoMassimo;
                    VenditoreFeedback = x * 100;
                }
            }
            catch (Exception eccezione)
            {
                Elmah.ErrorSignal.FromCurrentContext().Raise(eccezione);
                VenditoreFeedback = -1;
            }
        }
예제 #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);
        }
예제 #3
0
        public AnnuncioViewModel(DatabaseContext db, ANNUNCIO model)
        {
            this.SetProprietaIniziali();
            Id = model.ID;
            if (model.ID_ATTIVITA != null)
            {
                Venditore = new UtenteVenditaViewModel(model.ATTIVITA, model.PERSONA);
                SetFeedbackVenditore(model, TipoVenditore.Attivita);
            }
            else
            {
                Venditore = new UtenteVenditaViewModel(model.PERSONA);
                SetFeedbackVenditore(model, TipoVenditore.Persona);
            }
            Token         = model.TOKEN.ToString();
            Nome          = model.NOME;
            TipoPagamento = (TipoPagamento)model.TIPO_PAGAMENTO;
            if (model.ID_SERVIZIO != null)
            {
                TipoAcquisto = TipoAcquisto.Servizio;
            }
            //Punti = model.PUNTI.ToHappyCoin();
            Punti           = model.PUNTI.ToString();
            Soldi           = Convert.ToDecimal(model.SOLDI).ToString("C");
            DataInserimento = (DateTime)model.DATA_INSERIMENTO;
            CategoriaID     = model.ID_CATEGORIA;
            Categoria       = model.CATEGORIA.NOME;
            //TipoSpedizione = (Spedizione)model.TIPO_SPEDIZIONE;
            int venditaId = model.ID;

            Foto = model.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();
            StatoVendita = (StatoVendita)model.STATO;
            Notificato   = (model.ANNUNCIO_NOTIFICA.Count > 0) ? true : false;
            var listaInteressati = model.ANNUNCIO_DESIDERATO.Where(f => f.ID_ANNUNCIO == model.ID);

            NumeroInteressati = listaInteressati.Count();
            PersonaModel utente = (HttpContext.Current.Session["utente"] as PersonaModel);

            if (utente != null)
            {
                int idUtente = utente.Persona.ID;
                Desidero = listaInteressati.FirstOrDefault(m => m.ID_PERSONA == idUtente) != null;
                // controllo se l'utente ha già proposto lo stesso annuncio
                int?     idAnnuncioOriginale = model.ID_ORIGINE;
                ANNUNCIO copiaAnnuncio       = db.ANNUNCIO.SingleOrDefault(m => m.ID_PERSONA == idUtente &&
                                                                           (m.STATO == (int)StatoVendita.ATTIVO || m.STATO == (int)StatoVendita.INATTIVO) &&
                                                                           ((m.ID_ORIGINE == idAnnuncioOriginale && idAnnuncioOriginale != null) ||
                                                                            m.ID_ORIGINE == model.ID));
                if (copiaAnnuncio != null)
                {
                    TokenAnnuncioCopiato = Utility.RandomString(3) + copiaAnnuncio.TOKEN + Utility.RandomString(3);
                }
            }
            CondivisioneFacebookG4G    = (StatoPubblicaAnnuncioFacebook?)model.CONDIVISIONE_FACEBOOK_G4G;
            CondivisioneFacebookUtente = (StatoPubblicaAnnuncioFacebook?)model.CONDIVISIONE_FACEBOOK_UTENTE;
            DataPubblicazioneFacebook  = model.DATA_PUBBLICAZIONE_FACEBOOK;
        }