/// <summary> /// Retourne les ClientAFacturer de tous les clients ayant des commandes livrées non facturées /// contenant les CommandeAFacturer sans Détails /// </summary> /// <param name="site"></param> /// <returns></returns> public async Task <AFacturer> AFacturer(Site site) { IQueryable <Livraison> q_livraisonsTerminées = _context.Livraison.Where(l => l.Uid == site.Uid && l.Rno == site.Rno && l.Date.HasValue); IQueryable <Commande> q_commandesAvecNoLivraisonNonFacturées = _utile.CommandesAvecDétailsLivraisonEtFacture( filtreCommande: null, filtreDétails: null, filtreRole: null, keySite: site) .Where(c => c.Livraison != null && c.Livraison.Date.HasValue && !c.Livraison.FactureNo.HasValue); var q_liv_comAFacturer = q_livraisonsTerminées.Join(q_commandesAvecNoLivraisonNonFacturées, l => l.No, c => c.LivraisonNo, (l, c) => new { livraison = l, commande = c }); List <LivraisonAFacturer> livraisonsAFacturer = await q_liv_comAFacturer .Select(lc => lc.livraison) .GroupBy(lc => lc.No, (no, livraisons) => livraisons.First()) .Select(l => new LivraisonAFacturer { No = l.No, Date = l.Date.Value }) .ToListAsync(); var commandesAFacturerGroupéesParKey = await q_liv_comAFacturer .Select(lc => lc.commande) .GroupBy(c => new { c.Uid, c.Rno }, (key, kcs) => new { key.Uid, key.Rno, commandes = kcs }) .ToListAsync(); List <AFacturerDUnClient> aFacturerParClient = commandesAFacturerGroupéesParKey .Select(kcaf => AFacturerDUnClient(kcaf.Uid, kcaf.Rno, kcaf.commandes)) .Where(claf => claf.Commandes.Count > 0) .ToList(); long noProchaineFacture = await ProchainFactureNo(site); return(new AFacturer { AFacturerParClient = aFacturerParClient, Livraisons = livraisonsAFacturer, NoProchaineFacture = noProchaineFacture }); }
public async Task <Documents> ListeC(AKeyUidRno keySite, AKeyUidRno keyClient) { bool filtreCommandes(Commande c) => c.Uid == keyClient.Uid && c.Rno == keyClient.Rno && c.Date.HasValue; List <Commande> commandes = await _utile.CommandesAvecDétailsLivraisonEtFacture(filtreCommandes, null, null, null).ToListAsync(); return(await Liste(keySite, commandes)); }
/// <summary> /// retourne la commande définie par keyOuVueCommande /// </summary> /// <param name="keyOuVueCommande"></param> /// <returns></returns> public async Task <Commande> CommandeDeKeyOuVue(AKeyUidRnoNo keyOuVueCommande) { bool filtre(Commande c) => c.Uid == keyOuVueCommande.Uid && c.Rno == keyOuVueCommande.Rno && c.No == keyOuVueCommande.No; Commande commande = await _utile.CommandesAvecDétailsLivraisonEtFacture(filtre, null, null, null) .FirstOrDefaultAsync(); return(commande); }
/// <summary> /// Lit la commande définie par vérificateur.KeyCommande et vérifie qu'elle existe. Fixe vérificateur.Commande. /// </summary> /// <param name="vérificateur"></param> /// <returns></returns> private async Task CommandeExiste(Vérificateur vérificateur) { AKeyUidRnoNo key = vérificateur.KeyCommande; Func <Commande, bool> filtre = (Commande c) => c.Uid == key.Uid && c.Rno == key.Rno && c.No == key.No; Commande commande = await _utile.CommandesAvecDétailsLivraisonEtFacture(filtre, null, null, null).FirstOrDefaultAsync(); if (commande == null) { vérificateur.Erreur = RésultatBadRequest("CommandeNExistePas"); return; } vérificateur.Commande = commande; }