Example #1
0
        public async Task <IActionResult> Supprime([FromQuery] ParamsSupprimeLigne paramsSupprime)
        {
            vérificateur.Initialise(paramsSupprime);
            try
            {
                await ClientDeLAction();
                await UtilisateurEstClientActifOuNouveauOuFournisseur();

                ContexteCatalogue();
                await DocExiste();

                DocModifiable();
                // vérifie que la ligne commandant le produit dont le No est le No2 du paramétre existe et fixe vérificateur.LigneCLF
                LigneCLF ligne = vérificateur.DocCLF.Lignes.Where(l => l.ProduitId == paramsSupprime.ProduitId).FirstOrDefault();
                if (ligne == null)
                {
                    return(NotFound());
                }
                vérificateur.LigneCLF = ligne;
            }
            catch (VérificationException)
            {
                return(vérificateur.Erreur);
            }

            RetourDeService retour = await _service.SupprimeLigne(vérificateur.LigneCLF);

            return(SaveChangesActionResult(retour));
        }
Example #2
0
        public static CLFLigneData LigneDataAvecAFixer(LigneCLF ligneCLF)
        {
            CLFLigneData data = CLFLigneData.LigneData(ligneCLF);

            data.AFixer = ligneCLF.AFixer;
            return(data);
        }
        /// <summary>
        /// Vérifie que vérificateur.DocCLF.Lignes ne contient pas déjà la ligne
        /// </summary>
        private void LigneNExistePas()
        {
            List <LigneCLF> lignes = new List <LigneCLF>(vérificateur.DocCLF.Lignes);
            LigneCLF        ligne  = lignes.Find(l => l.ProduitId == vérificateur.KeyLigne.ProduitId);

            if (ligne != null)
            {
                vérificateur.Erreur = RésultatBadRequest("LigneExiste");
                throw new VérificationException();
            }
        }
Example #4
0
        public static CLFLigneData LigneData(LigneCLF ligneCLF)
        {
            CLFLigneData data = new CLFLigneData
            {
                ProduitId    = ligneCLF.ProduitId,
                Date         = ligneCLF.Date,
                TypeCommande = ligneCLF.TypeCommande,
                Quantité     = ligneCLF.Quantité,
            };

            return(data);
        }
Example #5
0
        /// <summary>
        /// Supprime toutes les modifications apportées à la bdd depuis et y compris la création du Client sur Invitation
        /// </summary>
        /// <param name="clientNouveau">Client qui a été créé en répondant à une Invitation</param>
        /// <returns>RetourDeService  d'un ClientEtatVue contenant un Client identique à celui que l'Invitation invitait à gérer s'il y en avait un, null sinon</returns>
        public new async Task <RetourDeService <ClientEtatVue> > Supprime(Client clientNouveau)
        {
            Client               rétabli  = null;
            ClientEtatVue        vue      = null;
            List <ArchiveClient> archives = await _context.ArchiveClient
                                            .Where(a => a.Id == clientNouveau.Id)
                                            .OrderBy(a => a.Date)
                                            .ToListAsync();

            // index de l'archive ayant enregiistré le
            int indexCréation = archives.FindIndex(a => a.Etat == EtatRole.Nouveau);

            if (indexCréation != 0)
            {
                // le compte existait avant le rattachement au client, il faut le rétablir
                rétabli = new Client
                {
                    Id     = clientNouveau.Id,
                    SiteId = clientNouveau.SiteId
                };
                // date du dernier changement d'état à fixer à partir des archives
                DateTime dateEtat = archives.ElementAt(0).Date;

                // Fixe les champs du Role à rétablir avec les champs non nuls de l'archive
                // Si l'archive a un Etat fixe la date de changement d'état
                ArchiveClient rétablitArchive(ArchiveClient archive)
                {
                    Client.CopieDataSiPasNull(archive, rétabli);
                    ArchiveClient archiveRétablie = new ArchiveClient
                    {
                        Id = clientNouveau.Id
                    };

                    Client.CopieData(archive, archiveRétablie);
                    archiveRétablie.Date = archive.Date;
                    if (archive.Etat != null)
                    {
                        rétabli.Etat = archive.Etat.Value;
                        dateEtat     = archive.Date;
                    }
                    return(archiveRétablie);
                }

                // transforme un RetourDeService avec erreur en RetourDeService<ClientEtatVue> avec la même erreur
                RetourDeService <ClientEtatVue> transformeErreur(RetourDeService retour)
                {
                    // on copie l'erreur dans RetourDeService de ClientEtatVue
                    RetourDeService <ClientEtatVue> retourVue = new RetourDeService <ClientEtatVue>(retour.Type);

                    if (retour.IdentityError)
                    {
                        retourVue.Objet = retour.Objet;
                    }
                    return(retourVue);
                }

                // on doit attribuer au client créé les archives antérieures au passage à l'état nouveau
                // et rétablir ses champs en fonction de ces archives
                List <ArchiveClient> archivesRétablies = archives
                                                         .GetRange(0, indexCréation)
                                                         .Select(a => rétablitArchive(a))
                                                         .ToList();


                // on ajoute seulement à la table Role
                _context.Client.Add(rétabli);
                // il faut sauvegarder pour pouvoir ajouter les élément dépendants
                RetourDeService retour = await SaveChangesAsync();

                if (!retour.Ok)
                {
                    return(transformeErreur(retour));
                }
                vue = new ClientEtatVue
                {
                    Id       = rétabli.Id,
                    Etat     = EtatRole.Actif,
                    DateEtat = dateEtat
                };
                Client.CopieData(rétabli, vue);

                // on ajoute les archives
                _context.ArchiveClient.AddRange(archivesRétablies);

                // date du passage à l'état nouveau
                DateTime dateCréation = archives.ElementAt(indexCréation).Date;
                // on doit attribuer au client créé les documents et les lignes du client créés avant le passage à l'état nouveau
                List <DocCLF> anciensDocs = await _context.Docs
                                            .Where(d => d.Id == clientNouveau.Id && d.Date < dateCréation)
                                            .ToListAsync();

                // s'il n'y a pas de documents, il n'y a rien à réattribuer
                if (anciensDocs.Count != 0)
                {
                    List <LigneCLF> anciennesLignes = await _context.Lignes
                                                      .Where(l => l.Id == clientNouveau.Id && anciensDocs.Where(d => d.No == l.No).Any())
                                                      .ToListAsync();

                    // s'il n'y a pas de lignes, il n'y a rien à réattribuer
                    if (anciennesLignes.Count != 0)
                    {
                        vue.AvecDocuments = true;
                        List <DocCLF> nouveauxDocs = anciensDocs
                                                     .Select(d => DocCLF.Clone(rétabli.Id, d))
                                                     .ToList();
                        List <LigneCLF> nouvellesLignes = anciennesLignes
                                                          .Select(l => LigneCLF.Clone(rétabli.Id, l))
                                                          .ToList();
                        _context.Docs.AddRange(nouveauxDocs);
                        retour = await SaveChangesAsync();

                        if (retour.Ok)
                        {
                            _context.Lignes.AddRange(nouvellesLignes);
                            retour = await SaveChangesAsync();
                        }
                        if (!retour.Ok)
                        {
                            return(transformeErreur(retour));
                        }
                    }
                }
            }
            _context.Client.Remove(clientNouveau);
            return(await SaveChangesAsync(vue));
        }
Example #6
0
        /// <summary>
        /// Crée un nouveau Client et si il y a un ancien Client attribue ses archives et ses documents au client créé.
        /// </summary>
        /// <param name="idSite">Id du Site</param>
        /// <param name="idUtilisateur">Id de l'Utilisateur</param>
        /// <param name="vue">Données du Client à créer</param>
        /// <param name="clientInvité">Client créé par le fournisseur que le nouveau Client va prendre en charge</param>
        /// <returns></returns>
        public async Task <RetourDeService> CréeClient(uint idSite, string idUtilisateur, IClientData vue, Client clientInvité)
        {
            // on crée le Client
            Client client = new Client
            {
                UtilisateurId = idUtilisateur,
                SiteId        = idSite,
                Etat          = EtatRole.Nouveau
            };

            Client.CopieData(vue, client);
            if (clientInvité == null)
            {
                // il n'y a ni archives ni documents à récupérer
                // on ajoute aux tables Client et ArchiveClient
                return(await Ajoute(client));
            }

            // il y a des archives et peut-être des documents à réattribuer
            // on ajoute seulement à la table Client (sans utiliser Ajoute)
            _context.Client.Add(client);
            RetourDeService <Client> retour = await SaveChangesAsync(client);

            if (!retour.Ok)
            {
                return(retour);
            }

            // on doit attribuer au client créé les archives du Client existant
            List <ArchiveClient> archives = await _context.ArchiveClient
                                            .Where(a => a.Id == clientInvité.Id)
                                            .ToListAsync();

            archives = archives
                       .Select(a => ArchiveClient.Clone(client.Id, a))
                       .ToList();
            // et ajouter une archive enregistrant le passage à l'état Nouveau
            ArchiveClient archive = new ArchiveClient
            {
                Id   = client.Id,
                Etat = EtatRole.Nouveau,
                Date = DateTime.Now
            };

            archives.Add(archive);
            _context.ArchiveClient.AddRange(archives);

            // on doit attribuer au client créé les documents et les lignes du client existant et supprimer celui-ci
            List <DocCLF> anciensDocs = await _context.Docs
                                        .Where(d => d.Id == clientInvité.Id)
                                        .ToListAsync();

            // s'il n'y a pas de documents, il n'y a rien à réattribuer
            if (anciensDocs.Count != 0)
            {
                List <LigneCLF> anciennesLignes = await _context.Lignes
                                                  .Where(l => l.Id == clientInvité.Id)
                                                  .ToListAsync();

                // s'il n'y a pas de lignes, il n'y a rien à réattribuer
                if (anciennesLignes.Count != 0)
                {
                    List <DocCLF> nouveauxDocs = anciensDocs
                                                 .Select(d => DocCLF.Clone(client.Id, d))
                                                 .ToList();
                    List <LigneCLF> nouvellesLignes = anciennesLignes
                                                      .Select(l => LigneCLF.Clone(client.Id, l))
                                                      .ToList();
                    _context.Docs.AddRange(nouveauxDocs);
                    var r = await SaveChangesAsync();

                    if (r.Ok)
                    {
                        _context.Lignes.AddRange(nouvellesLignes);
                        r = await SaveChangesAsync();
                    }
                }
            }

            // supprime l'ancien client et en cascade ses archives, ses documents et ses lignes
            SupprimeSansSauver(clientInvité);
            _context.Client.Remove(clientInvité);
            await SaveChangesAsync();

            return(retour);
        }