Пример #1
0
        public async Task <RetourDeService <DemandeSite> > Ajoute(FournisseurAAjouter ajout)
        {
            Fournisseur fournisseur = new Fournisseur();

            Fournisseur.CopieData(ajout, fournisseur);
            fournisseur.Site = new Site();
            Site.CopieData(ajout.Site, fournisseur.Site);
            DateTime date = DateTime.Now;
            RetourDeService <Fournisseur> retourFournisseur = await base.Ajoute(fournisseur, date);

            RetourDeService <DemandeSite> retour;

            if (!retourFournisseur.Ok)
            {
                return(new RetourDeService <DemandeSite>(retourFournisseur));
            }
            fournisseur = retourFournisseur.Entité;
            DemandeSite demande = new DemandeSite
            {
                Email = ajout.Email,
                Id    = fournisseur.Id,
                Date  = date
            };

            _context.DemandeSite.Add(demande);
            retour = await SaveChangesAsync <DemandeSite>(demande);

            if (retour.Ok)
            {
                retour.Entité.Fournisseur = fournisseur;
            }
            return(retour);
        }
Пример #2
0
 /// <summary>
 /// Cherche une demande de création de site identique à une demande.
 /// </summary>
 /// <param name="demande">DemandeSite cherchée</param>
 /// <returns>une DemandeSite qui inclut son Fournisseur avec son Site, si trouvée; null, sinon.</returns>
 public async Task <DemandeSite> DemandeSiteIdentique(DemandeSite demande)
 {
     return(await _context.DemandeSite
            .Where(d => d.Email == demande.Email && d.Id == demande.Id && d.Date == demande.Date && d.Envoi == demande.Envoi)
            .Include(d => d.Fournisseur).ThenInclude(f => f.Site)
            .FirstOrDefaultAsync());
 }
Пример #3
0
        /// <summary>
        /// Supprime une DemandeSite et son Fournisseur de la bdd.
        /// </summary>
        /// <param name="demande">DemandeSite à supprimer</param>
        /// <returns></returns>
        public async Task <RetourDeService> Annule(DemandeSite demande)
        {
            Fournisseur fournisseur = await _context.Fournisseur.Where(f => f.Id == demande.Id).FirstOrDefaultAsync();

            _context.Fournisseur.Remove(fournisseur);
            _context.DemandeSite.Remove(demande);
            return(await SaveChangesAsync());
        }
Пример #4
0
        /// <summary>
        /// Fixe la date d'envoi de la demande et envoie un message à l'Email de la demande avec un lien contenant la DemandeSite encodée.
        /// </summary>
        /// <param name="demande">DemandeSite à envoyer</param>
        /// <returns></returns>
        public async Task <RetourDeService> EnvoieEmailDemandeSite(DemandeSite demande)
        {
            Fournisseur fournisseur = await _context.Fournisseur
                                      .Where(f => f.Id == demande.Id)
                                      .Include(f => f.Site)
                                      .FirstAsync();

            string objet   = "Création du site: " + fournisseur.Site.Titre;
            string urlBase = ClientApp.Url(ClientApp.NouveauSite);
            string message = "Vous pouvez finaliser la création de votre site: " + fournisseur.Site.Titre;

            demande.Envoi = DateTime.Now;
            await _emailService.EnvoieEmail <DemandeSite>(demande.Email, objet, message, urlBase, demande, null);

            _context.DemandeSite.Update(demande);
            return(await SaveChangesAsync());
        }
Пример #5
0
 /// <summary>
 /// Supprime une DemandeSite mais pas son Fournisseur de la bdd.
 /// </summary>
 /// <param name="demande">DemandeSite à supprimer</param>
 /// <returns></returns>
 public async Task <RetourDeService> Supprime(DemandeSite demande)
 {
     _context.DemandeSite.Remove(demande);
     return(await SaveChangesAsync());
 }
Пример #6
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);
        }