/// <summary> /// Copie Demande dans AServir pour tous les DétailCommande du site dont la demande est copiable /// et dont la Commande passe le filtre des Commandes si présent et le Produit passe le filtre des produits si présent /// </summary> /// <param name="site"></param> /// <param name="filtreClient"></param> /// <param name="filtreProduit"></param> /// <param name="filtreDétail"></param> /// <returns>null s'il n'y a pas de détails copiables</returns> private async Task <RetourDeService> CopieDemandes(Site site, Func <Commande, bool> filtreClient, Func <Produit, bool> filtreProduit, Func <DétailCommande, bool> filtreDétail) { IQueryable <DétailCommande> détails = _utile.DétailsAvecProduitCommandeLivraisonEtFacture(filtreDétail, filtreClient, null, site); if (filtreProduit != null) { détails = détails.Where(d => filtreProduit(d.Produit)); } List <DétailCommande> copiables = await détails .Where(d => d.Commande.Date.HasValue && d.Commande.LivraisonNo.HasValue && !d.Commande.Livraison.Date.HasValue) .Where(d => d.Produit.TypeCommande != TypeUnitéDeCommande.UnitéOuVrac || d.TypeCommande == TypeUnitéDeCommande.Vrac) .ToListAsync(); if (copiables.Count == 0) { return(null); } copiables.ForEach(d => d.ALivrer = d.Demande); _context.DétailCommande.UpdateRange(copiables); return(await SaveChangesAsync()); }