public ActionResult OffertaInviata(int idOfferta)
        {
            OffertaEffettuataViewModel offerta = new OffertaEffettuataViewModel();

            try
            {
                using (DatabaseContext db = new DatabaseContext())
                {
                    PersonaModel utente = Session["utente"] as PersonaModel;
                    offerta = db.OFFERTA.Where(item => item.ID == idOfferta && item.ID_PERSONA == utente.Persona.ID && (item.STATO == (int)StatoOfferta.ATTIVA || item.STATO == (int)StatoOfferta.ACCETTATA))
                              .Select(item => new OffertaEffettuataViewModel()
                    {
                        Token     = item.ANNUNCIO.TOKEN.ToString(),
                        Venditore = item.ANNUNCIO.PERSONA.NOME + " " + item.ANNUNCIO.PERSONA.COGNOME,
                        //Categoria = item.VENDITA1.CATEGORIA.NOME,
                        IDCategoria = item.ANNUNCIO.ID_CATEGORIA,
                        Punti       = (int)item.PUNTI,
                        Soldi       = (int)item.SOLDI,
                        Foto        = db.ANNUNCIO_FOTO.Where(f => f.ID_ANNUNCIO == item.ANNUNCIO.ID).Select(f =>
                                                                                                            f.FOTO.FOTO1
                                                                                                            ).ToList(),
                        Baratti = db.OFFERTA_BARATTO.Where(b => b.ID_OFFERTA == item.ID).Select(b =>
                                                                                                new VenditaViewModel()
                        {
                            Token        = b.ANNUNCIO.TOKEN.ToString(),
                            TipoAcquisto = b.ANNUNCIO.SERVIZIO != null ? TipoAcquisto.Servizio : TipoAcquisto.Oggetto,
                            Nome         = b.ANNUNCIO.NOME,
                            Punti        = b.ANNUNCIO.PUNTI,
                            Soldi        = b.ANNUNCIO.SOLDI,
                        }).ToList(),
                        Nome           = item.ANNUNCIO.NOME,
                        TipoOfferta    = (TipoOfferta)item.TIPO_OFFERTA,
                        TipoTrattativa = (TipoTrattativa)item.TIPO_TRATTATIVA,
                        //PuntiCompratore = item.PERSONA.CONTO_CORRENTE.CONTO_CORRENTE_MONETA.Count(m => m.STATO == (int)StatoMoneta.ASSEGNATA),
                        //PuntiSospesiCompratore = item.PERSONA.CONTO_CORRENTE.CONTO_CORRENTE_MONETA.Count(m => m.STATO == (int)StatoMoneta.SOSPESA)
                    }).SingleOrDefault();
                    // se non trovo l'offerta lo reindirizzo alla home page
                    if (offerta == null)
                    {
                        return(RedirectToAction("Index", "Utente"));
                    }
                    // aggiorno punti attuali utente
                    RefreshPunteggioUtente(db);
                }
            }
            catch (Exception ex)
            {
                Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
            }

            // creare corpo metodo
            return(View(offerta));
        }
        public ActionResult Effettuate(int pagina = 1)
        {
            List <OffertaEffettuataViewModel> offerte = new List <OffertaEffettuataViewModel>();

            try
            {
                using (DatabaseContext db = new DatabaseContext())
                {
                    int utente = ((PersonaModel)Session["utente"]).Persona.ID;
                    // verifica stato offerta se attivo o non accettata, identità utente e stato di attivazione, presenza bene o servizio -- vechia
                    // verifica identità utente e stato di attivazione, presenza bene o servizio
                    var query          = db.OFFERTA.Where(item => item.PERSONA.ID == utente && item.PERSONA.STATO == (int)Stato.ATTIVO && (item.ANNUNCIO.ID_OGGETTO != null || item.ANNUNCIO.ID_SERVIZIO != null));
                    int numeroElementi = Convert.ToInt32(WebConfigurationManager.AppSettings["numeroElementi"]);
                    ViewData["TotalePagine"] = (int)Math.Ceiling((decimal)query.Count() / (decimal)numeroElementi);
                    ViewData["Pagina"]       = pagina;
                    pagina -= 1;
                    string         randomString = Utils.RandomString(3);
                    List <OFFERTA> lista        = query
                                                  .OrderByDescending(item => item.DATA_INSERIMENTO)
                                                  .Skip(pagina * numeroElementi)
                                                  .Take(numeroElementi).ToList();

                    foreach (OFFERTA item in lista)
                    {
                        OffertaEffettuataViewModel offertaEffettuata = new OffertaEffettuataViewModel();
                        offertaEffettuata.Id             = item.ID.ToString();
                        offertaEffettuata.Nome           = item.ANNUNCIO.NOME;
                        offertaEffettuata.Venditore      = (item.ANNUNCIO.ID_ATTIVITA != null) ? item.ANNUNCIO.ATTIVITA.NOME : item.ANNUNCIO.PERSONA.NOME + ' ' + item.ANNUNCIO.PERSONA.COGNOME;
                        offertaEffettuata.Email          = (item.ANNUNCIO.ID_ATTIVITA != null) ? item.ANNUNCIO.ATTIVITA.ATTIVITA_EMAIL.SingleOrDefault(e => e.TIPO == (int)TipoEmail.Registrazione).EMAIL : item.ANNUNCIO.PERSONA.PERSONA_EMAIL.SingleOrDefault(e => e.TIPO == (int)TipoEmail.Registrazione).EMAIL;
                        offertaEffettuata.VenditoreToken = item.ANNUNCIO.PERSONA.TOKEN;
                        if (item.ANNUNCIO.ID_ATTIVITA != null)
                        {
                            ATTIVITA_TELEFONO telefono = item.ANNUNCIO.ATTIVITA.ATTIVITA_TELEFONO.SingleOrDefault(t => t.TIPO == (int)TipoTelefono.Privato);
                            if (telefono != null)
                            {
                                offertaEffettuata.Telefono = telefono.TELEFONO;
                            }
                        }
                        else
                        {
                            PERSONA_TELEFONO telefono = item.ANNUNCIO.PERSONA.PERSONA_TELEFONO.SingleOrDefault(t => t.TIPO == (int)TipoTelefono.Privato);
                            if (telefono != null)
                            {
                                offertaEffettuata.Telefono = telefono.TELEFONO;
                            }
                        }
                        offertaEffettuata.Punti     = (int)item.PUNTI;
                        offertaEffettuata.Soldi     = (int)item.SOLDI;
                        offertaEffettuata.Categoria = item.ANNUNCIO.CATEGORIA.NOME;
                        offertaEffettuata.Foto      = db.ANNUNCIO_FOTO
                                                      .Where(f => f.ID_ANNUNCIO == item.ANNUNCIO.ID)
                                                      .Select(f =>
                                                              f.FOTO.FOTO1
                                                              ).ToList();
                        offertaEffettuata.Baratti = db.OFFERTA_BARATTO
                                                    .Where(b => b.ID_OFFERTA == item.ID && b.ANNUNCIO != null)
                                                    .Select(b =>
                                                            new VenditaViewModel()
                        {
                            Token        = randomString + b.ANNUNCIO.TOKEN.ToString() + randomString,
                            TipoAcquisto = b.ANNUNCIO.SERVIZIO != null ? TipoAcquisto.Servizio : TipoAcquisto.Oggetto,
                            Nome         = b.ANNUNCIO.NOME,
                            Punti        = b.ANNUNCIO.PUNTI,
                            Soldi        = b.ANNUNCIO.SOLDI,
                        }).ToList();
                        offertaEffettuata.Token           = item.ANNUNCIO.TOKEN.ToString();
                        offertaEffettuata.TipoOfferta     = (TipoOfferta)item.TIPO_OFFERTA;
                        offertaEffettuata.TipoTrattativa  = (TipoTrattativa)item.TIPO_TRATTATIVA;
                        offertaEffettuata.TipoPagamento   = (TipoPagamento)item.ANNUNCIO.TIPO_PAGAMENTO;
                        offertaEffettuata.StatoOfferta    = (StatoOfferta)item.STATO;
                        offertaEffettuata.StatoVendita    = (StatoVendita)item.ANNUNCIO.STATO;
                        offertaEffettuata.DataInserimento = (DateTime)item.DATA_INSERIMENTO;
                        offerte.Add(offertaEffettuata);
                    }
                    if (offerte.Count > 0)
                    {
                        RefreshPunteggioUtente(db);
                    }
                }
            }
            catch (Exception ex)
            {
                Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
            }
            return(View(offerte));
        }
        public ActionResult Acquisto(string acquisto = null, string baratto = null)
        {
            if (String.IsNullOrEmpty(acquisto) && String.IsNullOrEmpty(baratto))
            {
                return(RedirectToAction("", "Home"));
            }

            OffertaEffettuataViewModel viewModel = new OffertaEffettuataViewModel();

            try
            {
                using (DatabaseContext db = new DatabaseContext())
                {
                    int     numeroElementi = Convert.ToInt32(WebConfigurationManager.AppSettings["numeroElementi"]);
                    OFFERTA offerta        = new OFFERTA();
                    int     idUtente       = (Session["utente"] as PersonaModel).Persona.ID;
                    // fare un if e fare ricerca o per acquisto direttamente o per baratto
                    if (!String.IsNullOrEmpty(acquisto))
                    {
                        Guid tokenAcquisto = Guid.Parse(Utils.DecodeToString(acquisto.Trim().Substring(3, acquisto.Trim().Length - 6)));
                        offerta = db.OFFERTA.SingleOrDefault(c => c.ANNUNCIO.TOKEN == tokenAcquisto && c.ANNUNCIO.ID_PERSONA == idUtente && c.PERSONA.STATO == (int)Stato.ATTIVO);
                    }
                    else
                    {
                        Guid tokenBaratto = Guid.Parse(Utils.DecodeToString(baratto.Trim().Substring(3, baratto.Trim().Length - 6)));
                        offerta = db.OFFERTA.SingleOrDefault(c => c.OFFERTA_BARATTO.Count(b => b.ANNUNCIO.TOKEN == tokenBaratto && b.ANNUNCIO.ID_PERSONA == idUtente) > 0);
                    }

                    viewModel = new OffertaEffettuataViewModel()
                    {
                        Id             = offerta.ID.ToString(),
                        Nome           = offerta.ANNUNCIO.NOME,
                        Venditore      = (offerta.ANNUNCIO.ID_ATTIVITA != null) ? offerta.ANNUNCIO.ATTIVITA.NOME : offerta.ANNUNCIO.PERSONA.NOME + ' ' + offerta.ANNUNCIO.PERSONA.COGNOME,
                        Email          = (offerta.ANNUNCIO.ID_ATTIVITA != null) ? offerta.ANNUNCIO.ATTIVITA.ATTIVITA_EMAIL.SingleOrDefault(e => e.TIPO == (int)TipoEmail.Registrazione).EMAIL : offerta.ANNUNCIO.PERSONA.PERSONA_EMAIL.SingleOrDefault(e => e.TIPO == (int)TipoEmail.Registrazione).EMAIL,
                        VenditoreToken = offerta.ANNUNCIO.PERSONA.TOKEN,
                        Telefono       = (offerta.ANNUNCIO.ID_ATTIVITA != null) ? offerta.ANNUNCIO.ATTIVITA.ATTIVITA_TELEFONO.SingleOrDefault(t => t.TIPO == (int)TipoTelefono.Privato).TELEFONO : offerta.ANNUNCIO.PERSONA.PERSONA_TELEFONO.SingleOrDefault(t => t.TIPO == (int)TipoTelefono.Privato).TELEFONO,
                        Punti          = (int)offerta.PUNTI,
                        Soldi          = (int)offerta.SOLDI,
                        Categoria      = offerta.ANNUNCIO.CATEGORIA.NOME,
                        Foto           = db.ANNUNCIO_FOTO.Where(f => f.ID_ANNUNCIO == offerta.ANNUNCIO.ID).Select(f =>
                                                                                                                  f.FOTO.FOTO1
                                                                                                                  ).ToList(),
                        Baratti = db.OFFERTA_BARATTO.Where(b => b.ID_OFFERTA == offerta.ID && b.ANNUNCIO != null).Select(b =>
                                                                                                                         new VenditaViewModel()
                        {
                            Token        = b.ANNUNCIO.TOKEN.ToString(),
                            TipoAcquisto = b.ANNUNCIO.SERVIZIO != null ? TipoAcquisto.Servizio : TipoAcquisto.Oggetto,
                            Nome         = b.ANNUNCIO.NOME,
                            Punti        = b.ANNUNCIO.PUNTI,
                            Soldi        = b.ANNUNCIO.SOLDI,
                        }).ToList(),
                        Token           = offerta.ANNUNCIO.TOKEN.ToString(),
                        TipoOfferta     = (TipoOfferta)offerta.TIPO_OFFERTA,
                        TipoTrattativa  = (TipoTrattativa)offerta.TIPO_TRATTATIVA,
                        TipoPagamento   = (TipoPagamento)offerta.ANNUNCIO.TIPO_PAGAMENTO,
                        StatoOfferta    = (StatoOfferta)offerta.STATO,
                        StatoVendita    = (StatoVendita)offerta.ANNUNCIO.STATO,
                        DataInserimento = (DateTime)offerta.DATA_INSERIMENTO,
                        //PuntiCompratore = offerta.PERSONA.CONTO_CORRENTE.CONTO_CORRENTE_MONETA.Count(m => m.STATO == (int)StatoMoneta.ASSEGNATA),
                        //PuntiSospesiCompratore = offerta.PERSONA.CONTO_CORRENTE.CONTO_CORRENTE_MONETA.Count(m => m.STATO == (int)StatoMoneta.SOSPESA)
                    };
                }
            }
            catch (Exception ex)
            {
                Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
            }

            return(View(viewModel));
        }