Пример #1
0
        private async Task <IActionResult> Document(KeyDocSansType keyDocSansType, TypeCLF type)
        {
            if (keyDocSansType is null)
            {
                throw new System.ArgumentNullException(nameof(keyDocSansType));
            }

            vérificateur.Initialise(keyDocSansType);
            try
            {
                await ClientDeLAction();
                await UtilisateurEstClientPasFerméOuFournisseur();
            }
            catch (VérificationException)
            {
                return(vérificateur.Erreur);
            }

            CLFDocs document = await _service.Document(vérificateur.Site, keyDocSansType, type);

            if (document == null)
            {
                return(NotFound());
            }

            return(Ok(document));
        }
Пример #2
0
        /// <summary>
        /// Exécute une action sur chaque ligne du document défini par la clé. Retourne une erreur s'il n'y a pas de ligne où l'action est possible.
        /// </summary>
        /// <param name="keyDocSansType"></param>
        /// <param name="action">retourne null si l'action est impossible</param>
        /// <returns></returns>
        protected async Task <IActionResult> Action(KeyDocSansType keyDocSansType, Func <DocCLF, Task <RetourDeService> > action)
        {
            vérificateur.Initialise(keyDocSansType);
            try
            {
                await ClientDeLAction();
                await UtilisateurEstFournisseur();

                ContexteCatalogue();
                await DocExiste();

                DocEstASynthétiser();
            }
            catch (VérificationException)
            {
                return(vérificateur.Erreur);
            }

            RetourDeService retour = await action(vérificateur.DocCLF);

            return(SaveChangesActionResult(retour));
        }
Пример #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="paramsClient"></param>
        /// <param name="copieLignes"></param>
        /// <returns></returns>
        protected async Task <IActionResult> CréeBon(ParamsKeyClient paramsClient, bool copieLignes)
        {
            vérificateur.Initialise(paramsClient);
            try
            {
                await ClientDeLAction();
                await UtilisateurEstClientActifOuNouveauOuFournisseur();

                ContexteCatalogue();
            }
            catch (VérificationException)
            {
                return(vérificateur.Erreur);
            }

            uint   noBon;
            DocCLF docACopier = null;

            if (vérificateur.EstClient)
            {
                if (_type != TypeCLF.Commande)
                {
                    return(RésultatInterdit("Un client ne peut créer que des bons de commande."));
                }
                DocCLF dernièreCommande = await _service.DernierDoc(vérificateur.IdClient, TypeCLF.Commande);

                if (copieLignes)
                {
                    // la dernière commande doit exister et être envoyée
                    if (dernièreCommande == null || !dernièreCommande.Date.HasValue)
                    {
                        return(RésultatBadRequest("DerniereCommandeAbsenteOuPasEnvoyée"));
                    }
                    docACopier = dernièreCommande;
                }
                else
                {
                    // la dernière commande doit ne pas exister ou être envoyée.
                    if (!(dernièreCommande == null || dernièreCommande.Date.HasValue))
                    {
                        return(RésultatBadRequest("DerniereCommandePrésenteEtPasEnvoyée"));
                    }
                }
                noBon = dernièreCommande == null ? 1 : dernièreCommande.No + 1;
            }
            else
            {
                // key du bon virtuel du client
                KeyDocSansType key = new KeyDocSansType
                {
                    Id = vérificateur.IdClient,
                    No = 0
                };
                DocCLF bonVirtuel = await _service.DocCLFDeKey(key, _type);

                if (bonVirtuel != null)
                {
                    // il ne peut y avoir qu'un seul bon virtuel d'un type donné
                    return(RésultatBadRequest("BonVirtuelPrésent"));
                }
                if (copieLignes)
                {
                    // on ne peut copier les lignes que si la synthèse précédente a été réalisée à partir du seul bon virtuel
                    // c'est le cas s'il n'y a pas de bon ayant pour NoGroupe le No de cette synthèse
                    docACopier = await _service.DernierDoc(vérificateur.IdClient, DocCLF.TypeSynthèse(_type));

                    if (docACopier == null)
                    {
                        return(RésultatBadRequest("PasDeDernièreSynthèse"));
                    }
                    if (!(await _service.EstSynthèseSansBons(docACopier)))
                    {
                        return(RésultatBadRequest("DernièreSynthèseAvecBons"));
                    }
                }
                noBon = 0;
            }

            RetourDeService <DocCLF> retour = await _service.AjouteBon(vérificateur.IdClient, vérificateur.Site, _type, noBon);

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

            if (docACopier != null)
            {
                RetourDeService retour1 = await _service.CopieLignes(retour.Entité, docACopier, vérificateur.Site.DateCatalogue.Value);

                if (!retour1.Ok)
                {
                    return(SaveChangesActionResult(retour1));
                }
            }

            return(RésultatCréé(CLFDoc.DeNo(noBon)));
        }
Пример #4
0
 [ProducesResponseType(404)] // Not found
 public async Task <IActionResult> Facture([FromQuery] KeyDocSansType keyDocument)
 {
     return(await Document(keyDocument, TypeCLF.Facture));
 }
Пример #5
0
 [ProducesResponseType(404)] // Not found
 public async Task <IActionResult> Livraison([FromQuery] KeyDocSansType keyDocument)
 {
     return(await Document(keyDocument, TypeCLF.Livraison));
 }
        [ProducesResponseType(409)] // Conflict
        public async Task <IActionResult> AnnuleD([FromQuery] KeyDocSansType keyDoc)
        {
            Task <RetourDeService> action(DocCLF docCLF) => _service.Annule(docCLF, TypeCLF.Livraison);

            return(await Action(keyDoc, action));
        }
Пример #7
0
        [ProducesResponseType(409)] // Conflict
        public async Task <IActionResult> CopieD([FromQuery] KeyDocSansType keyDoc)
        {
            Task <RetourDeService> action(DocCLF docCLF) => _service.CopieQuantité(docCLF, TypeCLF.Commande);

            return(await Action(keyDoc, action));
        }
Пример #8
0
 /// <summary>
 /// Fixe KeyClient et KeyDoc.
 /// </summary>
 /// <param name="keyDocSansType">objet ayant la même KeyUidRnoNo que le document</param>
 public void Initialise(KeyDocSansType keyDocSansType)
 {
     IdClient = keyDocSansType.Id;
     KeyDoc   = keyDocSansType;
 }