[ProducesResponseType(409)] // Conflict
        public async Task <IActionResult> Envoi([FromQuery] ParamsKeyClient paramsClient)
        {
            vérificateur.Initialise(paramsClient);
            try
            {
                await ClientDeLAction();
                await UtilisateurEstClientActifOuNouveau();

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

            DocCLF dernièreCommande = await _service.DernierDoc(paramsClient.Id, TypeCLF.Commande);

            // la dernière commande doit exister et ne pas être envoyée
            if (dernièreCommande == null || dernièreCommande.Date.HasValue)
            {
                return(RésultatBadRequest("DerniereCommandeAbsenteOuEnvoyée"));
            }

            RetourDeService <CLFDoc> retour = await _service.EnvoiCommande(vérificateur.Site, dernièreCommande);

            if (retour.Ok)
            {
                return(RésultatCréé(retour.Entité));
            }

            return(SaveChangesActionResult(retour));
        }
        [ProducesResponseType(409)] // Conflict
        public async Task <IActionResult> EnCours([FromQuery] ParamsKeyClient paramsKeyClient)
        {
            vérificateur.Initialise(paramsKeyClient);
            try
            {
                await ClientDeLAction();
                await UtilisateurEstClientActifOuNouveau();

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

            if (paramsKeyClient.DateCatalogue.HasValue)
            {
                // la commande en cours a déjà été chargée par l'application client qui vérifie seulement le contexte catalogue
                // la vérification a réussi
                // retourne un CLFDocs vide
                return(Ok(new CLFDocs()));
            }

            CLFDocs docs = await _service.CommandeEnCours(paramsKeyClient.Id);

            return(Ok(docs));
        }
        /// <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)));
        }
 [ProducesResponseType(409)] // Conflict
 public async Task <IActionResult> Clone([FromQuery] ParamsKeyClient paramsClient)
 {
     return(await CréeBon(paramsClient, true));
 }
 [ProducesResponseType(409)] // Conflict
 public async Task <IActionResult> Nouveau([FromQuery] ParamsKeyClient paramsClient)
 {
     return(await CréeBon(paramsClient, false));
 }
Beispiel #6
0
 /// <summary>
 /// Fixe KeyClient et DateCatalogue.
 /// </summary>
 /// <param name="paramsCrée">contient la KeyUidRno du client et la date du catalogue de l'utilisateur</param>
 public void Initialise(ParamsKeyClient paramsCrée)
 {
     IdClient      = paramsCrée.Id;
     DateCatalogue = paramsCrée.DateCatalogue;
 }