示例#1
0
    /*
     * Init
     */

    /// <summary>
    /// Génerer les paniers
    /// </summary>
    private void GenerePaniers()
    {
        Client client = Session.GetClient();

        var panierArticlesParVendeurs = from article in db.articlesEnPanier.Values
                                        join produit in db.produits.Values on article.NoProduit equals produit.NoProduit
                                        where article.NoClient == client.NoClient
                                        select new
        {
            Article = article,
            Produit = produit
        } into articleProduit
        group articleProduit by articleProduit.Article.NoVendeur into g
        join vendeur in db.vendeurs.Values on g.Key equals vendeur.NoVendeur
            select new
        {
            Vendeur  = vendeur,
            Articles = g.ToList()
        };

        foreach (var group in panierArticlesParVendeurs)
        {
            // Ajouter les vendeurs au DropDownList
            string pnlVendeurId = $"pnlVendeur{group.Vendeur.NoVendeur}";
            dictVendeurs.Add(group.Vendeur, pnlVendeurId);
            // Faire les paniers
            pnlPaniersGeneres.CardDyn(
                pnlVendeurId, "mb-3",
                lbl => lbl.HlinkDYN("", $"~/Pages/Client/Catalogue.aspx?NoVendeur={group.Vendeur.NoVendeur}", group.Vendeur.NomAffaires, "text-white"),
                pnlBody =>
            {
                Table tablePanier        = pnlBody.TableDyn("", "table table-hover fake-button");
                TableHeaderRow headerRow = tablePanier.ThrDyn();

                headerRow.ThdDyn("Image");
                headerRow.ThdDyn("Nom");
                headerRow.ThdDyn("Description");
                headerRow.ThdDyn("Poids<br/>(Livre)");
                headerRow.ThdDyn("Quantité commandée");
                headerRow.ThdDyn("Prix individuel");
                headerRow.ThdDyn("Prix");

                TableHeaderCell cellHeaderSupprimerTout = headerRow.ThdDyn();
                cellHeaderSupprimerTout.BtnClientDyn("", "Vider le panier", $"supprimerPanier({client.NoClient}, {group.Vendeur.NoVendeur}); return false;", "btn btn-dark btn-block");

                List <decimal> lstPrixPanier      = new List <decimal>();
                List <decimal> lstPrixPanierAvant = new List <decimal>();
                List <decimal> lstPoidsPanier     = new List <decimal>();

                foreach (var article in group.Articles)
                {
                    decimal prixIndividuel = 0;

                    bool prixIndividuelVente = false;
                    if ((article.Produit.PrixVente.HasValue && article.Produit.PrixVente != article.Produit.PrixDemande) &&
                        (!article.Produit.DateVente.HasValue || article.Produit.DateVente >= DateTime.Now))
                    {
                        prixIndividuel      = article.Produit.PrixVente.Value;
                        prixIndividuelVente = true;
                    }
                    else
                    {
                        prixIndividuel = article.Produit.PrixDemande.Value;
                    }

                    short nbItems           = article.Produit.NombreItems.Value;
                    short nbItemsDansPanier = article.Article.NbItems.Value;

                    TableRow row = tablePanier.TrDyn();

                    string windowLocation = $"window.location.href = '/Pages/Client/InfoProduit.aspx?ID={article.Produit.NoProduit}'";

                    TableCell cellImage = row.TdDyn();
                    cellImage.ImgDyn("", "~/Pictures/" + article.Produit.Photo, "image-panier");
                    cellImage.Attributes.Add("onclick", windowLocation);

                    TableCell cellNom = row.TdDyn(article.Produit.Nom);
                    cellNom.Attributes.Add("onclick", windowLocation);
                    TableCell cellDescription = row.TdDyn(article.Produit.Description);
                    cellDescription.Attributes.Add("onclick", windowLocation);
                    TableCell cellPoids = row.TdDyn(article.Produit.Poids.ToString());
                    cellPoids.Attributes.Add("onclick", windowLocation);

                    TableCell cellQuantite   = row.TdDyn();
                    DropDownList ddlQuantite = cellQuantite.DdlDyn("", $"quantiteArticle({article.Article.NoPanier}, this);", "form-control");
                    // Make sure the label doesn't have values (happens when reloading even though it should be replaced)
                    ddlQuantite.Items.Clear();
                    for (int i = 1; i <= nbItems; i++)
                    {
                        ddlQuantite.Items.Add(i.ToString());
                    }
                    ddlQuantite.SelectedIndex = nbItemsDansPanier - 1;

                    // Prix individuel
                    if (prixIndividuelVente)
                    {
                        TableCell cellPrix = row.TdDyn();
                        cellPrix.CssClass  = "text-right";
                        cellPrix.Attributes.Add("onclick", windowLocation);
                        decimal prixDemande = article.Produit.PrixDemande.Value;
                        cellPrix.LblDyn("", prixDemande.ToString("N2") + "$<br/>", "text-secondary");
                        decimal pourcent = ((prixIndividuel / article.Produit.PrixDemande.Value) * 100) - 100;
                        cellPrix.LblDyn("", $"{pourcent.ToString("N2")}%<br/>", "text-success");
                        cellPrix.LblDyn("", prixIndividuel.ToString("N2") + "$", "text-success");
                        decimal prixNbAvant = prixDemande * nbItemsDansPanier;
                        lstPrixPanierAvant.Add(prixDemande * nbItemsDansPanier);

                        TableCell cellPrixNb = row.TdDyn();
                        cellPrixNb.CssClass  = "text-right";
                        cellPrixNb.Attributes.Add("onclick", windowLocation);
                        cellPrixNb.LblDyn("", prixNbAvant.ToString("N2") + "$<br/>", "text-secondary");
                        decimal prixNb = prixIndividuel * nbItemsDansPanier;
                        lstPrixPanier.Add(prixNb);
                        cellPrixNb.LblDyn("", prixNb.ToString("N2") + "$", "text-success");
                    }
                    else
                    {
                        TableCell cellPrixIndividuel = row.TdDyn(prixIndividuel.ToString("N2") + "$");
                        cellPrixIndividuel.CssClass  = "text-right";
                        cellPrixIndividuel.Attributes.Add("onclick", windowLocation);
                        // Prix
                        decimal prixNb     = prixIndividuel * nbItemsDansPanier;
                        TableCell cellPrix = row.TdDyn(prixNb.ToString("N2") + "$");
                        cellPrix.CssClass  = "text-right";
                        cellPrix.Attributes.Add("onclick", windowLocation);
                        lstPrixPanier.Add(prixNb);
                    }

                    TableCell cellSupprimerArticle = row.TdDyn();
                    cellSupprimerArticle.BtnClientDyn("", "Supprimer l'article", $"supprimerArticle({article.Article.NoPanier}); return false;", "btn btn-dark btn-block");
                }

                if (lstPrixPanier.Count > 0)
                {
                    TableRow rowEnd = tablePanier.TrDyn();
                    rowEnd.TdDyn();
                    rowEnd.TdDyn();
                    rowEnd.TdDyn();
                    rowEnd.TdDyn();
                    rowEnd.TdDyn();
                    rowEnd.TdDyn();
                    TableCell cellPrixTotal = rowEnd.TdDyn();
                    cellPrixTotal.CssClass  = "text-right";
                    cellPrixTotal.LblDyn("", lstPrixPanier.Sum().ToString("N2") + "$");
                    rowEnd.TdDyn();
                }

                decimal poidsMax      = group.Vendeur.PoidsMaxLivraison.Value;
                decimal poidsCommande = group.Articles.Sum(x => x.Produit.Poids * x.Article.NbItems).Value;

                Panel pnlPoids = pnlBody.DivDyn("", "w-100 text-right");
                pnlPoids.LblDyn("", $"Poids de la livraison: {poidsCommande} Livre<br/>", "text-secondary");
                pnlPoids.LblDyn("", $"Poids maximal du vendeur: {group.Vendeur.PoidsMaxLivraison} Livre", "text-secondary");

                if (poidsMax < poidsCommande)
                {
                    pnlBody.BtnDyn("", "Le panier est trop lourd de " + (poidsCommande - poidsMax), null, "btn btn-danger btn-block").Enabled = false;
                }
                else
                {
                    Button btn = pnlBody.BtnDyn("", "Commander le panier", btnCommander_OnClick, "btn btn-secondary btn-block mt-3");
                    btn.Attributes.Add("data-vendeur", group.Vendeur.NoVendeur.ToString());
                }
            });
        }
    }