/// <summary> /// crée une vue sans la clé de Livraison avec Date, NomClient, NouveauClient si vrai, Etat /// avec Details avec No (du produit), TypeCommande (si nécessaire), Demande, AServir /// /// </summary> /// <param name="commande">la commande à transformer</param> /// <returns></returns> public CommandeVue CréeVueDeLivraison(Commande commande) { CommandeVue vue = new CommandeVue { Date = commande.Date, NomClient = commande.Client.Nom, Etat = commande.Etat, Details = commande.DétailCommandes.Select(d => { CommandeVueDétail détail = new CommandeVueDétail { No = d.No2, TypeCommande = d.TypeCommande, Demande = d.Demande, AServir = d.AServir }; return(détail); }).ToList(), }; if (commande.Client.Role.Etat == TypeEtatRole.Nouveau) { vue.NouveauClient = true; } vue.CopieKey(commande.KeyParam); return(vue); }
/// <summary> /// crée la commande d'un client ou fixe sa date /// met à jour les détails de la commande pour qu'ils correspondent à ceux de la vue /// </summary> /// <param name="vue"></param> /// <returns></returns> public async Task <RetourDeService> EnvoiBon(CommandeVue vue) { List <CommandeVueDétail> ajouter = new List <CommandeVueDétail>(vue.Details); Commande commande = await _context.Commande .Where(c => vue.EstSemblable(c)) .LastOrDefaultAsync(); commande.Date = vue.Date; _context.Commande.Update(commande); DétailCommande[] actuels = await _context.DétailCommande.Where(dc => vue.EstSemblable(dc)).ToArrayAsync(); List <DétailCommande> supprimer = new List <DétailCommande>(); List <DétailCommande> editer = new List <DétailCommande>(); foreach (DétailCommande détail in actuels) { CommandeVueDétail vdétail = vue.Details.Find(d => d.No == détail.No2); if (vdétail == null) { supprimer.Add(détail); } else { if (vdétail.TypeCommande != détail.TypeCommande || vdétail.Demande != détail.Demande) { détail.TypeCommande = vdétail.TypeCommande; détail.Demande = vdétail.Demande; editer.Add(détail); } ajouter.Remove(vdétail); } } _context.DétailCommande.RemoveRange(supprimer); _context.DétailCommande.UpdateRange(editer); _context.DétailCommande.AddRange(ajouter .Select(vd => new DétailCommande { Uid = vue.Uid, Rno = vue.Rno, No = vue.No, Uid2 = commande.LivraisonUid, Rno2 = commande.LivraisonRno, No2 = vd.No, TypeCommande = vd.TypeCommande, Demande = vd.Demande })); return(await SaveChangesAsync()); }