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