Exemplo n.º 1
0
        public async Task Connecte(CarteUtilisateur carteUtilisateur)
        {
            Utilisateur utilisateur = carteUtilisateur.Utilisateur;
            // persistant est false car l'utilisateur doit s'authentifier à chaque accès
            await _signInManager.SignInAsync(utilisateur, false);

            // lit et augmente le sessionId de l'utilisateur
            int sessionId = utilisateur.SessionId;

            if (sessionId < 0)
            {
                // l'utilisateur s'est déconnecté lors de sa dernière session
                // et son SessionId a été changé en son opposé
                sessionId = -sessionId;
            }
            sessionId = sessionId + 1;
            // fixe le sessionId de l'utilisateur et de la carte
            utilisateur.SessionId = sessionId;
            _context.Utilisateur.Update(utilisateur);
            ArchiveUtilisateur archive = new ArchiveUtilisateur
            {
                Id        = utilisateur.Id,
                Date      = DateTime.Now,
                SessionId = sessionId
            };

            _context.ArchiveUtilisateur.Add(archive);
            await _context.SaveChangesAsync();

            carteUtilisateur.SessionId = sessionId;
        }
Exemplo n.º 2
0
        public async Task ArchiveDernierSite(uint idSite)
        {
            ArchiveUtilisateur archive = Utilisateur.Archives
                                         .Where(a => a.IdDernierSite != null)
                                         .LastOrDefault();

            if (archive == null || archive.IdDernierSite.Value != idSite)
            {
                ArchiveUtilisateur nouveau = new ArchiveUtilisateur
                {
                    Id            = Utilisateur.Id,
                    Date          = DateTime.Now,
                    IdDernierSite = idSite
                };
                _context.ArchiveUtilisateur.Add(nouveau);
                await _context.SaveChangesAsync();
            }
        }
Exemplo n.º 3
0
        public async Task Déconnecte(CarteUtilisateur carteUtilisateur)
        {
            Utilisateur utilisateur = carteUtilisateur.Utilisateur;
            await _signInManager.SignOutAsync();

            // change le sessionId de l'utilisateur en son opposé
            utilisateur.SessionId = -utilisateur.SessionId;
            _context.Utilisateur.Update(utilisateur);
            ArchiveUtilisateur archive = new ArchiveUtilisateur
            {
                Id            = utilisateur.Id,
                Date          = DateTime.Now,
                SessionId     = utilisateur.SessionId,
                IdDernierSite = carteUtilisateur.IdDernierSite
            };

            _context.ArchiveUtilisateur.Add(archive);
            await _context.SaveChangesAsync();
        }
Exemplo n.º 4
0
        /// <summary>
        /// Ajoute à la bdd un nouvel Utilisateur à partir de son Email et de son mot de passe.
        /// </summary>
        /// <param name="vue">objet ayant l'Email et le Password de l'utilisateur à créer</param>
        /// <returns></returns>
        public async Task <RetourDeService <Utilisateur> > CréeUtilisateur(ICréeCompteVue vue)
        {
            Utilisateur applicationUser = new Utilisateur
            {
                UserName = vue.Email,
                Email    = vue.Email,
                Etat     = EtatUtilisateur.Nouveau
            };

            try
            {
                IdentityResult identityResult = await _userManager.CreateAsync(applicationUser, vue.Password);

                if (!identityResult.Succeeded)
                {
                    return(new RetourDeService <Utilisateur>(identityResult));
                }

                ArchiveUtilisateur archive = new ArchiveUtilisateur
                {
                    Id    = applicationUser.Id,
                    Email = applicationUser.Email,
                    Etat  = EtatUtilisateur.Nouveau,
                    Date  = DateTime.Now
                };
                _context.ArchiveUtilisateur.Add(archive);
                await SaveChangesAsync();

                return(new RetourDeService <Utilisateur>(applicationUser));
            }
            catch (DbUpdateConcurrencyException)
            {
                return(new RetourDeService <Utilisateur>(TypeRetourDeService.ConcurrencyError));
            }
            catch (Exception)
            {
                return(new RetourDeService <Utilisateur>(TypeRetourDeService.Indéterminé));
            }
        }
Exemplo n.º 5
0
        public async Task <Identifiant> Identifiant()
        {
            Identifiant identifiant = new Identifiant(Utilisateur);

            if (EstAdministrateur)
            {
                return(identifiant);
            }

            // listes des Id des sites de l'utilisateur dans l'ordre inverse de leurs dernières visites
            IEnumerable <uint> idSites = Utilisateur.Archives
                                         .Where(a => a.IdDernierSite != null)
                                         .GroupBy(a => a.IdDernierSite.Value)
                                         .Select(g => new { idSite = g.Key, date = g.OrderBy(a => a.Date).Last().Date })
                                         .OrderByDescending(x => x.date)
                                         .Select(x => x.idSite);

            foreach (uint idSite in idSites)
            {
                Fournisseur fournisseur = Utilisateur.Fournisseurs.Where(f => f.Id == idSite).FirstOrDefault();
                if (fournisseur != null)
                {
                    identifiant.Sites.Add(new SiteDIdentifiant(fournisseur));
                }
                else
                {
                    Client client = Utilisateur.Clients.Where(c => c.SiteId == idSite).FirstOrDefault();
                    identifiant.Sites.Add(new SiteDIdentifiant(client));
                }
            }

            DateTime?dateDernièreDéconnection = null;
            int      sessionId = Utilisateur.SessionId; // > 0 car l'utilisateur est connecté

            sessionId--;                                // id de la session précédente
            if (sessionId > 0)
            {
                // si l'utilisateur s'est déconnecté de la session précédente, une archive
                // avec un SessionId opposé à celui de la session précédente a été enregistrée
                ArchiveUtilisateur dernièreDéconnection = Utilisateur.Archives
                                                          .Where(archive => archive.SessionId == -sessionId)
                                                          .FirstOrDefault();
                if (dernièreDéconnection != null)
                {
                    dateDernièreDéconnection = dernièreDéconnection.Date;
                    // on inscrit l'Id du dernier Site ou 0 si l'utilisateur était sur l'AppSite
                    identifiant.IdDernierSite = dernièreDéconnection.IdDernierSite.Value;
                }
            }

            IQueryable <DocCLF>   queryNouveauxDocs = null;
            Func <DocCLF, CLFDoc> nouveauCLFDoc     = null;

            foreach (SiteDIdentifiant site in identifiant.Sites)
            {
                if (site.Client == null)
                {
                    // c'est un site où l'utilisateur est Fournisseur
                    List <Produit> produits = await _context.Produit
                                              .Where(produit => produit.SiteId == site.Id && produit.Disponible)
                                              .ToListAsync();

                    int           nbCatégories = produits.GroupBy(produit => produit.CategorieId).Count();
                    List <Client> clients      = await _context.Client
                                                 .Where(client => client.SiteId == site.Id)
                                                 .ToListAsync();

                    site.Bilan = new BilanSite
                    {
                        Catalogue = new BilanCatalogue
                        {
                            Catégories = nbCatégories,
                            Produits   = produits.Count()
                        },
                        Clients = new BilanClients
                        {
                            Actifs   = clients.Where(client => client.Etat == EtatRole.Actif).Count(),
                            Nouveaux = clients.Where(client => client.Etat == EtatRole.Nouveau).Count()
                        }
                    };
                    queryNouveauxDocs = _context.Docs
                                        .Where(docCLF => docCLF.SiteId == site.Id && docCLF.Type == TypeCLF.Commande);
                    nouveauCLFDoc = (DocCLF docCLF) => CLFDoc.DeKey(docCLF);
                }
                else
                {
                    queryNouveauxDocs = _context.Docs
                                        .Where(docCLF => docCLF.SiteId == site.Id && (docCLF.Type == TypeCLF.Livraison || docCLF.Type == TypeCLF.Facture));
                    nouveauCLFDoc = (DocCLF docCLF) => CLFDoc.DeNoType(docCLF);
                }
                if (sessionId == 0)
                {
                    // c'est la première connection
                    site.NouveauxDocs = new List <CLFDoc>();
                }
                else
                {
                    // on ne joint les nouveaux docs que s'il y a eu déconnection
                    if (dateDernièreDéconnection != null)
                    {
                        List <DocCLF> nouveauxDocCLFs = await queryNouveauxDocs
                                                        .Where(docCLF => docCLF.Date >= dateDernièreDéconnection)
                                                        .ToListAsync();

                        site.NouveauxDocs = nouveauxDocCLFs
                                            .Select(docCLF => nouveauCLFDoc(docCLF))
                                            .ToList();
                    }
                }
            }

            DemandeSite demandeSite = await _context.DemandeSite.Where(ns => ns.Email == identifiant.Email).FirstOrDefaultAsync();

            if (demandeSite != null)
            {
                identifiant.NouveauSite = demandeSite;
            }

            return(identifiant);
        }