Ejemplo n.º 1
0
        public ActionResult Acquista(ServizioViewModel model)
        {
            if (model == null || string.IsNullOrWhiteSpace(model.Token))
            {
                return(Redirect("/Servizi/Tutti"));
            }

            if (model.Offerta.TipoOfferta == TipoOfferta.Baratto && model.Offerta.ServiziBarattati != null && model.Offerta.ServiziBarattati.Length > 4)
            {
                ModelState.AddModelError("ErroreOfferta", ErroreOfferta.PrezzoErrato.ToString());
            }

            if (CheckUtenteAttivo(1))
            {
                return(RedirectToAction("Impostazioni", "Utente"));
            }

            string nomeView = "Index";

            try
            {
                using (DatabaseContext db = new DatabaseContext())
                {
                    string tokenDecodificato = Server.UrlDecode(model.Token);
                    string tokenPulito       = tokenDecodificato.Substring(3).Substring(0, tokenDecodificato.Length - 6);
                    Guid   tokenGuid         = Guid.Parse(tokenPulito);

                    if (ModelState.IsValid)
                    {
                        ObjectParameter errore = new ObjectParameter("Errore", typeof(int));
                        errore.Value = 0;
                        string baratti = "";
                        if (model.Offerta.TipoOfferta == TipoOfferta.Baratto)
                        {
                            XElement xml = new XElement("Root",
                                                        model.Offerta.ServiziBarattati.Select((i, index)
                                                                                              => new XElement("Guid", i)
                                                                                              )
                                                        );
                            baratti = xml.ToString();
                        }

                        int?idOfferta = db.BENE_SAVE_OFFERTA_SERVIZIO(tokenGuid, ((PersonaModel)Session["utente"]).Persona.ID_CONTO_CORRENTE, 1, (int)model.Offerta.TipoOfferta, model.Offerta.PuntiOfferti, Utils.cambioValuta(model.Offerta.PuntiOfferti), baratti, errore);

                        if (idOfferta != null && Convert.ToInt32(errore.Value) == 0)
                        {
                            // impostare invio email offerta effettuata
                            EmailModel email = new EmailModel(ControllerContext);
                            email.To.Add(new System.Net.Mail.MailAddress(model.VenditoreToken.ToString(), App_GlobalResources.Email.BidOf + " " + model.VenditoreNominativo + " - " + System.Web.Configuration.WebConfigurationManager.AppSettings["nomeSito"]));
                            email.Subject   = App_GlobalResources.Email.BidSubject + " " + model.Nome;
                            email.Body      = "Offerta";
                            email.DatiEmail = model;
                            new EmailController().SendEmail(email);

                            return(RedirectToAction("OffertaInviata", "Servizio", new { idOfferta = idOfferta }));
                        }

                        // ERRORE
                        ModelState.AddModelError("ErroreOfferta", ((ErroreOfferta)errore.Value).GetDisplayName());
                    }
                    else
                    {
                        ModelState.AddModelError("ErroreOfferta", App_GlobalResources.Language.ErrorGenericBid);
                    }
                    int idUtente = (Session["utente"] as PersonaModel).Persona.ID;
                    // recupero le informazioni sul servizio
                    ANNUNCIO vendita = db.ANNUNCIO.Where(v => v.TOKEN == tokenGuid && v.SERVIZIO != null && v.ID_PERSONA != idUtente && (v.STATO == (int)StatoVendita.ATTIVO || v.STATO == (int)StatoVendita.BARATTOINCORSO)).FirstOrDefault();
                    // reindirizza alla lista generale di servizi
                    if (vendita == null)
                    {
                        return(RedirectToAction("Tutti", "Servizi"));
                    }
                    nomeView                  = vendita.CATEGORIA.DESCRIZIONE;
                    model.Id                  = (int)vendita.ID_SERVIZIO;
                    model.CategoriaID         = vendita.ID_CATEGORIA;
                    model.Categoria           = vendita.CATEGORIA.NOME;
                    model.Token               = Utils.RandomString(3) + vendita.TOKEN.ToString() + Utils.RandomString(3);
                    model.Citta               = vendita.OGGETTO.COMUNE.NOME;
                    model.DataInserimento     = vendita.DATA_INSERIMENTO;
                    model.VenditoreToken      = vendita.PERSONA.TOKEN;
                    model.Foto                = vendita.ANNUNCIO_FOTO.Select(f => f.FOTO.FOTO1).ToList();
                    model.Nome                = vendita.NOME;
                    model.Punti               = vendita.PUNTI;
                    model.Soldi               = vendita.SOLDI;
                    model.Lunedi              = (bool)vendita.SERVIZIO.LUNEDI;
                    model.Martedi             = (bool)vendita.SERVIZIO.MARTEDI;
                    model.Mercoledi           = (bool)vendita.SERVIZIO.MERCOLEDI;
                    model.Giovedi             = (bool)vendita.SERVIZIO.GIOVEDI;
                    model.Venerdi             = (bool)vendita.SERVIZIO.VENERDI;
                    model.Sabato              = (bool)vendita.SERVIZIO.SABATO;
                    model.Domenica            = (bool)vendita.SERVIZIO.DOMENICA;
                    model.Tutti               = (bool)vendita.SERVIZIO.TUTTI;
                    model.OraInizio           = (TimeSpan)vendita.SERVIZIO.ORA_INIZIO_FERIALI;
                    model.OraFine             = (TimeSpan)vendita.SERVIZIO.ORA_FINE_FERIALI;
                    model.OraInizio           = (TimeSpan)vendita.SERVIZIO.ORA_INIZIO_FESTIVI;
                    model.OraFine             = (TimeSpan)vendita.SERVIZIO.ORA_FINE_FESTIVI;
                    model.TipoPagamento       = (TipoPagamento)vendita.TIPO_PAGAMENTO;
                    model.VenditoreID         = vendita.ID_PERSONA;
                    model.VenditoreNominativo = vendita.PERSONA.NOME + ' ' + vendita.PERSONA.COGNOME;
                    model.Tariffa             = (Tariffa)vendita.SERVIZIO.TARIFFA;
                    model.StatoVendita        = (StatoVendita)vendita.STATO;
                    model = SetServizioViewModel(db, model);
                    SetFeedbackVenditoreServizio(db, model);
                }
            }
            catch (Exception ex)
            {
                Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
            }

            return(View(nomeView, model));
        }