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); }
/// <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()); }
/// <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()); }
/// <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()); }
/// <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()); }
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); }