private DocumentBilan DocumentBilanTarif(DocumentBilan doc, List <DocumentCommande> commandes, Func <decimal, DétailCommandeData, decimal> agrégeDétails) { Func <DétailCommandeData, DocumentCommande, DataDétailProduit> détail_Produit = (détail, commande) => { ProduitData produit = commande.Tarif.Produits.Where(p => p.No == détail.No).First(); CatégorieData catégorie = commande.Tarif.Catégories.Where(c => c.No == produit.CategorieNo).First(); return(new DataDétailProduit { Détail = détail, Produit = produit, Catégorie = catégorie }); }; Func <IEnumerable <DataDétailProduit>, DocumentCommande, IEnumerable <DataDétailProduit> > agrége = (détails, commande) => détails.Concat(commande.Détails.Select(d => détail_Produit(d, commande))); var x = commandes .Aggregate(new List <DataDétailProduit>(), agrége) .GroupBy(dp => new { dp.Produit.No, dp.Produit.Date }) .Select(dps => new { produit = dps.First().Produit, catégorie = dps.First().Catégorie, détails = dps.Select(dp => dp.Détail) }); List <ProduitData> produits = x.Select(pcds => pcds.produit).ToList(); List <CatégorieData> catégories = x.Select(pcds => pcds.catégorie) .GroupBy(c => new { c.No, c.Date }) .Select(cs => cs.First()) .ToList(); doc.Produits = x.Select(pcds => BilanProduit(pcds.produit, pcds.détails, agrégeDétails)).ToList(); doc.Tarif = new Catalogue { Produits = produits, Catégories = catégories }; return(doc); }
private DocumentBilan DocumentFactureBase(Facture facture) { DocumentBilan doc = new DocumentBilan { Uid = facture.Uid, Rno = facture.Rno, No = facture.No, Date = facture.Date.Value, }; return(doc); }
private DocumentBilan DocumentLivraisonBase(Livraison livraison, IEnumerable <DocumentCommande> commandes) { DocumentCommande commande = commandes.First(); DocumentBilan doc = new DocumentBilan { Uid = commande.Uid, Rno = commande.Rno, No = livraison.No, Date = livraison.Date.Value, }; return(doc); }
public async Task <AKeyUidRnoNo> Livraison(AKeyUidRno keySite, KeyUidRnoNo keyDocument) { Func <Commande, bool> filtreCommandes = c => c.Uid == keyDocument.Uid && c.Rno == keyDocument.Rno; Func <DétailCommande, bool> filtreDétails = d => d.ALivrer.HasValue && d.ALivrer.Value > 0; List <Commande> commandes = await _utile.CommandesAvecDétailsLivraisonEtFacture(filtreCommandes, filtreDétails, null, null) .Where(c => c.Livraison != null && c.Livraison.No == keyDocument.No && c.Livraison.Date.HasValue) .ToListAsync(); if (commandes.Count() == 0) { return(null); } List <DocumentCommande> documentCommandes = (await DocumentCommandes(keySite, commandes, filtreDétails, avecDétails: true)); DocumentBilan livraison = DocumentsLivraisonTarif(commandes, documentCommandes).First(); return(livraison); }