예제 #1
0
        /// <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());
        }