public ActionResult ProdottoTest(string collezione = "", string categoria = "", string prodotto = "")
        {
            string lang = "it";

            if (!string.IsNullOrEmpty(prodotto))
            {
                //PAGINA PRODOTTO
                Collezioni coll = db.Collezioni.Where(x => x.lang == lang && x.urlname == collezione).FirstOrDefault();
                Categorie  cat  = db.Categorie.Where(x => x.lang == lang && x.urlname == categoria).FirstOrDefault();

                string listacollezioniurl  = (lang == "it" ? "/collezioni" : "/collections");
                string listacollezionitext = (lang == "it" ? "Collezioni" : "Collections");

                string collezioneig = coll.itemgroup.ToString();
                string categoriaig  = cat.itemgroup.ToString();

                Prodotti p = db.Prodotti.Where(x => x.collezione.StartsWith(collezioneig + "|") && x.categoria.StartsWith(categoriaig + "|") && x.lang == lang && x.visibile == true && x.codice == prodotto).FirstOrDefault();

                if (p == null)
                {
                    Response.Redirect((lang != "it" ? "/" + lang : "") + "/" + (lang != "it" ? "collections" : "collezioni"));
                }

                string link = "<a href=\"" + LanguageSetting.GetLangNavigation() + "{0}\">{1}</a>";



                ProdottoPage pp = new ProdottoPage();
                pp.Prodotto = p;

                //TODO - RIMUOVERE modifica temporanea in attesa del listino it a marzo 2020
                if (lang == "it")
                {
                    pp.Finiture = p.ListaFiniture == null ? new List <Finiture>() : p.ListaFiniture;
                }
                else
                {
                    pp.Finiture = p.ListaFinitureEstero == null ? new List <Finiture>() : p.ListaFinitureEstero;
                }

                string[] igfiniture = pp.Finiture.Select(f => f.gruppoitemgroup).ToArray();
                pp.GruppiFiniture = db.FinitureGruppi.Where(x => x.lang == lang && igfiniture.Contains(x.itemgroup.ToString())).OrderBy(x => x.ordinamento).ToList();


                pp.Accessori = p.ListaAccessori;

                pp.breadcrumb = string.Format(link, "/", "Ceramica Globo") + " | " +
                                string.Format(link, listacollezioniurl, listacollezionitext) + " | " +
                                string.Format(link, listacollezioniurl + "/" + coll.urlname, coll.titolo) + " | " +
                                string.Format(link, listacollezioniurl + "/" + coll.urlname + "/" + cat.urlname, cat.titolo) + " | " +
                                "<span>" + p.titolo + " " + p.codice + "</span>";

                pp.backurl = listacollezioniurl + "/" + coll.urlname + "/" + cat.urlname + "?p=" + prodotto;

                pp.isLogged = HttpContext.User.Identity.IsAuthenticated;
                return(View("ProdottoTest", pp));
            }

            return(View("ProdottoTest", null));
        }
        public void TestArray2()
        {
            int[] a   = { 1, 2, 3, 4 };
            int[] asp = { 11, 12, 13, 14 };

            int[] incremento = Collezioni.Incremento(a);
            CollectionAssert.AreEqual(asp, incremento);
        }
        public ActionResult Collezioni(string lang = "it", string collezione = "", string categoria = "", string prodotto = "")
        {
            if (!string.IsNullOrEmpty(prodotto))
            {
                //PAGINA PRODOTTO
                Collezioni coll = db.Collezioni.Where(x => x.lang == lang && x.urlname == collezione).FirstOrDefault();
                Categorie  cat  = db.Categorie.Where(x => x.lang == lang && x.urlname == categoria).FirstOrDefault();

                string listacollezioniurl  = (lang == "it" ? "/collezioni" : "/collections");
                string listacollezionitext = (lang == "it" ? "Collezioni" : "Collections");

                string collezioneig = coll.itemgroup.ToString();
                string categoriaig  = cat.itemgroup.ToString();

                Prodotti p = db.Prodotti.Where(x => x.collezione.StartsWith(collezioneig + "|") && x.categoria.StartsWith(categoriaig + "|") && x.lang == lang && x.visibile == true && x.codice == prodotto).FirstOrDefault();

                if (p == null)
                {
                    Response.Redirect((lang != "it" ? "/" + lang : "") + "/" + (lang != "it" ? "collections" : "collezioni"));
                }

                string link = "<a href=\"" + LanguageSetting.GetLangNavigation() + "{0}\">{1}</a>";


                ProdottoPage pp = new ProdottoPage();
                pp.Prodotto = p;

                //TODO - RIMUOVERE modifica temporanea in attesa del listino it a marzo 2020
                //if (lang == "it" || lang=="de")
                //{
                //    pp.Finiture = p.ListaFiniture == null ? new List<Finiture>() : p.ListaFiniture;
                //}
                //else
                //{
                //    pp.Finiture = p.ListaFinitureEstero == null ? new List<Finiture>() : p.ListaFinitureEstero;
                //}

                pp.Finiture = p.ListaFiniture == null ? new List <Finiture>() : p.ListaFiniture;


                string[] igfiniture = pp.Finiture.Select(f => f.gruppoitemgroup).ToArray();
                pp.GruppiFiniture = db.FinitureGruppi.Where(x => x.lang == lang && igfiniture.Contains(x.itemgroup.ToString())).OrderBy(x => x.ordinamento).ToList();

                pp.Accessori = p.ListaAccessori;

                pp.breadcrumb = string.Format(link, "/", "Ceramica Globo") + " | " +
                                string.Format(link, listacollezioniurl, listacollezionitext) + " | " +
                                string.Format(link, listacollezioniurl + "/" + coll.urlname, coll.titolo) + " | " +
                                string.Format(link, listacollezioniurl + "/" + coll.urlname + "/" + cat.urlname, cat.titolo) + " | " +
                                "<span>" + p.titolo + " " + p.codice + "</span>";

                pp.backurl = listacollezioniurl + "/" + coll.urlname + "/" + cat.urlname + "?p=" + prodotto;

                pp.isLogged = HttpContext.User.Identity.IsAuthenticated;

                return(View("Prodotto", pp));
            }
            else if (!string.IsNullOrEmpty(categoria))
            {
                // COLLEZIONE CATEGORIA (INVIO I PRODOTTI DI UNA SPECIFICA CATEGORIA)

                Collezioni c = db.Collezioni.Where(x => x.urlname == collezione && x.lang == lang).DefaultIfEmpty(null).FirstOrDefault();
                if (c == null)
                {
                    Response.Redirect((lang != "it" ? "/" + lang : "") + "/" + (lang != "it" ? "collections" : "collezioni"));
                }

                CollezioneProdotti cp = new CollezioneProdotti();
                cp.Collezione     = c;
                cp.Prodotti       = new List <Prodotti>();
                cp.Sottocategorie = new Dictionary <int, string>();

                string igcat = db.Categorie.Where(x => x.urlname == categoria && x.lang == lang).Select(x => x.itemgroup).FirstOrDefault().ToString();

                // ECCEZIONE VASI E BIDET 4ALL
                cp.Prodotti = db.Prodotti
                              .Where(x => x.collezione.StartsWith(c.itemgroup.ToString() + "|") && x.lang == lang && x.visibile == true && x.tipologiaprodotto == "prodotto" && x.categoria.StartsWith(igcat + "|"))
                              //.OrderBy(x => x.codice).ToList();
                              .OrderByDescending(x => x.basecm).ThenByDescending(x => x.altezzacm).ThenByDescending(x => x.profonditacm).ThenBy(x => x.codice)
                              .ToList();



                string[] igsubcat = cp.Prodotti.GroupBy(x => x.sottocategoria).Select(x => x.FirstOrDefault()).ToList().Select(x => x.sottocategoriaitemgroup).ToArray();

                List <Sottocategorie> sc = db.Sottocategorie.Where(x => x.lang == lang && igsubcat.Contains(x.itemgroup.ToString())).OrderBy(x => x.ordinamento).ToList();
                sc.ForEach(x =>
                {
                    cp.Sottocategorie.Add(x.itemgroup, x.titolo);
                });

                cp.CategoriaName    = db.Categorie.Where(x => x.itemgroup.ToString() == igcat && x.lang == lang).Select(x => x.titolo).FirstOrDefault();
                cp.CollezioneLink   = (lang != "it" ? "/" + lang : "") + "/" + (lang != "it" ? "collections" : "collezioni") + "/" + c.urlname;
                cp.CategoriaUrlName = categoria;

                return(View("CollezioneCategoria", cp));
            }
            else if (!string.IsNullOrEmpty(collezione))
            {
                // COLLEZIONE SPECIFICA
                Collezioni c = db.Collezioni.Where(x => x.urlname == collezione && x.lang == lang).DefaultIfEmpty(null).FirstOrDefault();
                if (c == null)
                {
                    Response.Redirect((lang != "it" ? "/" + lang : "") + "/" + (lang != "it" ? "collections" : "collezioni"));
                }

                CollezioneCategorie cat = new CollezioneCategorie();
                cat.Collezione = c;
                cat.Categorie  = new List <CategoriaLink>();

                // categorie
                List <Prodotti> prodotti             = db.Prodotti.Where(x => x.collezione.StartsWith(c.itemgroup.ToString() + "|") && x.lang == lang && x.visibile == true && x.tipologiaprodotto == "prodotto").GroupBy(x => x.categoria).Select(x => x.FirstOrDefault()).ToList();
                string          collezioneurlnameita = db.Collezioni.Where(x => x.lang == "it" && x.itemgroup == c.itemgroup).Select(x => x.urlname).FirstOrDefault();
                string[]        igcat;


                igcat = prodotti.Select(x => x.categoriaitemgroup).ToArray();

                List <Categorie> cc = db.Categorie.Where(x => igcat.Contains(x.itemgroup.ToString()) && x.lang == lang).OrderBy(x => x.ordinamento).ToList();
                cc.ForEach(x =>
                {
                    string urlinvariant = db.Categorie.Where(coll => coll.itemgroup == x.itemgroup && coll.lang == "it").Select(coll => coll.urlname).FirstOrDefault();

                    string imgcat = "/public/resource/prodotti/imgcategorie/" + urlinvariant + "/" + collezioneurlnameita + ".jpg";

                    if (!System.IO.File.Exists(Server.MapPath(imgcat)))
                    {
                        imgcat = prodotti.Where(p => p.categoria.StartsWith(x.itemgroup.ToString() + "|")).Select(p => p.imgmain).FirstOrDefault();
                    }
                    // se non ci sono prodotti non visualizzo la categoria|
                    if (db.Prodotti.Where(j => j.collezione.StartsWith(c.itemgroup + "|") && j.categoria.StartsWith(x.itemgroup + "|") && j.visibile == true && j.lang == lang && j.tipologiaprodotto != "accessorio").Count() > 0)
                    {
                        cat.Categorie.Add(new CategoriaLink
                        {
                            Categoria = x.titolo,
                            img       = imgcat,
                            link      = x.urlname
                        });
                    }
                });

                return(View("CollezioniDettaglio", cat));
            }
            else
            {
                // LISTA COLLEZIONI
                PageInfo p = db.PageInfo.Where(x => x.pname == "collezioni" && x.lang == lang)?.FirstOrDefault();
                return(View(p));
            }
        }
        public ActionResult Tipologie(string lang = "it", string tipologia = "", string prodotto = "", string collezione = "")
        {
            if (!string.IsNullOrEmpty(prodotto))
            {
                // PRODOTTO
                Collezioni    coll = db.Collezioni.Where(x => x.lang == lang && x.urlname == collezione).FirstOrDefault();
                TipologieMenu tip  = db.TipologieMenu.Where(x => x.lang == lang && x.urlname == tipologia).FirstOrDefault();

                string listatipologieurl  = (lang == "it" ? "/tipologie" : "/typologies");
                string listatipologietext = (lang == "it" ? "Tipologie" : "Typologies");
                string listacollezioniurl = (lang == "it" ? "/collezioni" : "/collections");

                string collezioneig = coll.itemgroup.ToString();
                string tipologiaig  = tip.itemgroup.ToString();

                Prodotti p = db.Prodotti.Where(x => x.collezione.StartsWith(collezioneig + "|") && x.tipologiamenu.StartsWith(tipologiaig + "|") && x.lang == lang && x.visibile == true && x.codice == prodotto).FirstOrDefault();

                if (p == null)
                {
                    Response.Redirect((lang != "it" ? "/" + lang : "") + "/" + (lang != "it" ? "collections" : "collezioni"));
                }

                string link = "<a href=\"" + LanguageSetting.GetLangNavigation() + "{0}\">{1}</a>";


                ProdottoPage pp = new ProdottoPage();
                pp.Prodotto = p;
                pp.Finiture = p.ListaFiniture == null ? new List <Finiture>() : p.ListaFiniture;
                string[] igfiniture = pp.Finiture.Select(f => f.gruppoitemgroup).ToArray();
                pp.GruppiFiniture = db.FinitureGruppi.Where(x => x.lang == lang && igfiniture.Contains(x.itemgroup.ToString())).OrderBy(x => x.ordinamento).ToList();
                pp.Accessori      = p.ListaAccessori;

                pp.breadcrumb = string.Format(link, "/", "Ceramica Globo") + " | " +
                                string.Format(link, listatipologieurl, listatipologietext) + " | " +
                                string.Format(link, listatipologieurl + "/" + tip.urlname, tip.titolo) + " | " +
                                string.Format(link, listacollezioniurl + "/" + coll.urlname, coll.titolo) + " | " +
                                "<span>" + p.titolo + " " + p.codice + "</span>";

                // pp.backurl = listacollezioniurl + "/" + coll.urlname;
                pp.backurl = listatipologieurl + "/" + tip.urlname + "?p=" + prodotto;


                pp.isLogged = HttpContext.User.Identity.IsAuthenticated;

                return(View("Prodotto", pp));
            }
            else if (!string.IsNullOrEmpty(collezione))
            {
                // REDIRECT TO COLLEZIONE
                return(Redirect(lang == "it" ? "/collezioni/" + collezione : "/collections/" + collezione));
            }
            else if (!string.IsNullOrEmpty(tipologia))
            {
                // DETTAGLIO TIPOLOGIA
                // lista prodotti per tipologia
                TipologieProdotti tp = new TipologieProdotti();

                TipologieMenu c = db.TipologieMenu.Where(x => x.urlname == tipologia && x.lang == lang).DefaultIfEmpty(null).FirstOrDefault();
                if (c == null)
                {
                    Response.Redirect((lang != "it" ? "/" + lang : "") + "/" + (lang != "it" ? "typologies" : "tipologie"));
                }

                tp.Metatitle        = c.metatitle;
                tp.Metadescription  = c.metadescription;
                tp.TipologiaName    = c.titolo;
                tp.TipologieLink    = (lang == "it" ? "/tipologie" : ("/" + lang + "/typologies"));
                tp.TipologiaUrlname = tipologia;

                List <Prodotti> lp = db.Prodotti
                                     .Where(x => x.tipologiamenu.StartsWith(c.itemgroup + "|") && x.lang == lang && x.visibile == true)
                                     .OrderByDescending(x => x.basecm).ThenByDescending(x => x.altezzacm).ThenByDescending(x => x.profonditacm).ThenBy(x => x.codice)
                                     .ToList();

                tp.Prodotti = lp;

                return(View("TipologieDettaglio", tp));
            }
            else
            {
                // LISTA TIPOLOGIE
                PageInfo p = db.PageInfo.Where(x => x.pname == "tipologie" && x.lang == lang)?.FirstOrDefault();
                return(View(p));
            }
        }