예제 #1
0
        /// <summary>
        /// Crée un Fournisseur avec son Utilisateur, son Site et l'ajoute au Peuplement.
        /// Crée éventuellement les Clients sans Utilisateur du Site et les ajoute au Peuplement.
        /// Crée éventuellement les Catégories et les Produits du Site et les compte dans le Peuplement.
        /// </summary>
        /// <param name="vue">PeupleFournisseurVue définissant le Fournisseur à créer</param>
        /// <param name="peupleId">PeupleId contenant les Id des derniers objets créés</param>
        /// <returns></returns>
        private async Task <RetourDeService> AjouteFournisseur(PeupleFournisseurVue vue, PeupleId peupleId)
        {
            uint id = peupleId.Fournisseur + 1;
            RetourDeService <Utilisateur> retourUtilisateur = await _utilisateurService.CréeUtilisateur(vue);

            if (!retourUtilisateur.Ok)
            {
                return(retourUtilisateur);
            }
            Utilisateur utilisateur = retourUtilisateur.Entité;
            await _utilisateurService.ConfirmeEmailDirect(utilisateur);

            Fournisseur fournisseur = new Fournisseur
            {
                Id            = id,
                UtilisateurId = utilisateur.Id,
                Siret         = "légal" + id,
                Site          = new Site
                {
                    Ouvert = false
                }
            };

            Role.CopieData(vue, fournisseur);
            Site.CopieData(vue, fournisseur.Site);
            RetourDeService <Fournisseur> retourFournisseur = await _fournisseurService.Ajoute(fournisseur);

            if (!retourFournisseur.Ok)
            {
                return(retourFournisseur);
            }
            fournisseur             = retourFournisseur.Entité;
            fournisseur.Utilisateur = utilisateur;
            peupleId.Fournisseur    = id;

            RetourDeService retour = new RetourDeService(TypeRetourDeService.Ok);

            if (vue.Clients != null)
            {
                for (int i = 0; i < vue.Clients.Length && retour.Ok; i++)
                {
                    retour = await AjouteClient(vue.Clients[i], peupleId);
                }
            }
            if (vue.ClientsSansCompte.HasValue)
            {
                for (int i = 0; i < vue.ClientsSansCompte.Value && retour.Ok; i++, id++)
                {
                    retour = await AjouteClient(peupleId);
                }
            }
            if (vue.Produits.HasValue)
            {
                DateTime            dateDébut    = DateTime.Now;
                int                 nbProduits   = vue.Produits.Value;
                int                 nbCatégories = vue.Catégories ?? 1;
                PeuplementCatalogue catalogue    = new PeuplementCatalogue(fournisseur.Id, nbCatégories, nbProduits, peupleId);
                for (int j = 0; j < nbCatégories && retour.Ok; j++)
                {
                    retour = await _catégorieService.Ajoute(catalogue.Catégories.ElementAt(j));
                }

                for (int j = 0; j < nbProduits && retour.Ok; j++)
                {
                    retour = await _produitService.Ajoute(catalogue.Produits.ElementAt(j));
                }
                DateTime dateFin = DateTime.Now;
                await _produitService.TermineModification(fournisseur.Id, dateDébut, dateFin);

                await _catégorieService.TermineModification(fournisseur.Id, dateDébut, dateFin);

                if (nbProduits > 0)
                {
                    retour = await _siteService.TermineEtatCatalogue(fournisseur.Site, dateFin);
                }
            }
            return(retour);
        }