/// <summary>
        /// Retourne un message d'erreur si le numéro de tiers de l'écriture courante est invalide.
        /// </summary>
        /// <param name="repository"> Le repository permettant les appels API. </param>
        /// <param name="companyId"> La société concernée par les appels API. </param>
        /// <returns> Une chaîne indiquant l'erreur si le numéro de tiers est invalide. </returns>
        public void ControlNoTiers(APIRepository repository, Dictionary <string, string> existingCompte, Dictionary <string, string> existingInconnuCompte, List <string> errors)
        {
            if (string.IsNullOrEmpty(this.NumeroTiers) || existingCompte.ContainsKey(this.NumeroTiers))
            {
                return;
            }
            if (existingInconnuCompte.ContainsKey(this.NumeroTiers))
            {
                errors.Add("Le numéro de tiers '" + this.NumeroTiers + "' est inconnu.");
                return;
            }

            Dictionary <string, string> options = new Dictionary <string, string>();

            options.Add("$top", "1");
            options.Add("$filter", "numero eq '" + this.NumeroTiers + "'");
            var resultat = repository.Get(repository.CompanyId, "tiers", options).GetJSONResult()["value"];

            if (!resultat.HasValues)
            {
                errors.Add("Le numéro de tiers '" + this.NumeroTiers + "' est inconnu.");
                existingInconnuCompte.Add(this.NumeroTiers, "");
            }
            else
            {
                existingCompte.Add(this.NumeroTiers, resultat[0]["id"].ToString());
            }
        }
        /// <summary>
        /// Controle si le numero de Tiers saisi existe et si oui retourne un message d'erreur
        /// </summary>
        /// <param name="numero"> Le compte tiers à tester </param>
        /// <param name="repository">Le repository </param>
        /// <returns>Un string avec le message formaté si le tiers existe déjà ou une chaine vide si inexistant</returns>
        private string ControlTiersAlreadyExist(string numero, APIRepository repository)
        {
            Dictionary <string, string> options = new Dictionary <string, string>();

            options.Add("$filter", "numero eq '" + numero.ToUpper() + "'");
            options.Add("$select", "numero,intitule,adresse,type");

            var result = repository.Get(repository.CompanyId, "tiers", options);

            if (!Tools.IsSuccess(result))
            {
                return("ERROR:" + Tools.FormateErrorApi(result));
            }

            var values = result.GetJSONResult()["value"];

            if (!values.HasValues)
            {
                return("");
            }
            return(Resource.CLIENT_ALREADY_EXIST.
                   Replace("{numero}", "<b>" + values[0]["numero"].ToString() + "</b>").
                   Replace("{intitule}", "<b>" + values[0]["intitule"].ToString() + "</b>").
                   Replace("{type}", "<b>" + values[0]["type"].ToString() + "</b>"));
        }
        /// <summary>
        /// Retourne un message d'erreur si le compte général de l'écriture courante est invalide.
        /// </summary>
        /// <param name="repositor
        /// y"> Le repository permettant les appels API. </param>
        /// <param name="companyId"> La société concernée par les appels API. </param>
        /// <returns> Un message d'erreur si le compte général de l'écriture comptable courante est invalide. </returns>
        public void ControlGeneralAccount(APIRepository repository, Dictionary <string, string> existingCompte, Dictionary <string, string> existingInconnuCompte, List <string> errors)
        {
            if (existingCompte.ContainsKey(this.Compte))
            {
                return;
            }
            if (existingInconnuCompte.ContainsKey(this.Compte))
            {
                errors.Add("Le numéro de compte '" + this.Compte + "' est inconnu.");
                return;
            }

            Dictionary <string, string> options = new Dictionary <string, string>();

            options.Add("$top", "1");
            options.Add("$filter", "numero eq '" + this.Compte + "'");
            var resultat = repository.Get(repository.CompanyId, "comptes", options).GetJSONResult()["value"];

            if (!resultat.HasValues)
            {
                errors.Add("Le numéro de compte '" + this.Compte + "' est inconnu.");
                existingInconnuCompte.Add(this.Compte, "");
            }
            else
            {
                existingCompte.Add(this.Compte, resultat[0]["id"].ToString());
            }
        }
        /// <summary>
        /// Récupération des paramètres (type comptes généraux, pays). Alimente les propriétés de ViewBag.
        /// </summary>
        /// <param name="repository">Repository courant</param>
        public void LoadParameters(APIRepository repository)
        {
            Dictionary <string, string> options = new Dictionary <string, string>();

            //Liste des comptes généraux commençant par 41
            options.Clear();
            options.Add("$select", "id,type,numero");
            options.Add("$filter", "startswith(numero,'41') and sommeil eq false");
            options.Add("$orderby", "numero");
            ViewBag.Accounts = repository.Get(repository.CompanyId, "comptes", options).GetJSONResult()["value"];

            //Liste des pays
            options.Clear();
            options.Add("$select", "intitule");
            options.Add("$orderby", "intitule");
            ViewBag.Pays = repository.Get(repository.CompanyId, "pays", options).GetJSONResult()["value"];
        }
Example #5
0
        public void TestMethod1()
        {
            IRepository <Post> repo = new LocalRepository <Post>("posts.json");

            Assert.AreEqual(repo.Get().Count(), 100);

            repo = new APIRepository <Post>("https://jsonplaceholder.typicode.com/posts");

            Assert.AreEqual(repo.Get().Count(), 100);
        }
        /// <summary>
        /// Récupère un objet Customer selon un id donné.
        /// </summary>
        /// <param name="id"> L'id du client à récupérer. </param>
        /// <param name="repository"> Le repository. </param>
        /// <returns>Un objet Customer.</returns>
        public Customer GetCustomerById(string id, APIRepository repository)
        {
            // Construction de la requête OData afin de récupérer le client correspondant.
            Dictionary <string, string> options = new Dictionary <string, string>();
            var expand = "comptePrincipal($select=id,numero)";

            options.Add("$expand", expand);
            var result = repository.Get(repository.CompanyId, "clients", options, id);

            if (!Tools.IsSuccess(result))
            {
                return(new Customer(new Address(), new Telecom()));
            }

            Customer customer = Tools.ConvertToCustomer(result.GetJSONResult());

            return(customer);
        }
        /// <summary>
        /// Traite les données du formulaire.
        /// </summary>
        /// <param name="repository"> Le repository permettant d'accéder aux données de l'API. </param>
        /// <param name="model"> Les données du formulaire. </param>
        private void ExecuteRequest(APIRepository repository, Request model)
        {
            Dictionary <string, string> options    = new Dictionary <string, string>();
            Dictionary <string, string> parameters = new Dictionary <string, string>
            {
                { "$expand", model.Expand },
                { "$filter", model.Filter },
                { "$select", model.Select },
                { "$orderby", model.Orderby },
                { "$top", model.Top },
                { "$skip", model.Skip },
                { "$count", model.Count }
            };

            foreach (var parameter in parameters)
            {
                if (!string.IsNullOrEmpty(parameter.Value) && !string.IsNullOrWhiteSpace(parameter.Value))
                {
                    options.Add(parameter.Key, parameter.Value);
                }
            }

            var result = repository.Get(model.Company, model.Resource, options, model.ResourceId, model.Subresource);
            var data   = Tools.GetJSONResult(result);

            //Tout ce qui est en dessous sert uniquement à formater l'affichage de la réponse dans le formulaire.
            //Dans le contexte de l'onglet requête on n'utilise pas le retour standard erreur on laisse le code retour s'afficher dans la réponse.
            model.RespStatusCode    = (int)result.StatusCode;
            model.RespStatusMessage = result.StatusCode.ToString();

            if (data.HasValues)
            {
                model.RespCount = (data.ContainsKey("value")) ? data["value"].Count() : 1;
            }
            else
            {
                model.RespCount = 0;
            }

            dynamic parsedJson = JsonConvert.DeserializeObject(data.ToString());

            model.RespBody = JsonConvert.SerializeObject(parsedJson, Newtonsoft.Json.Formatting.Indented);
        }
Example #8
0
 public API GetAPI(int id)
 {
     return(apiRepo.Get(id));
 }
Example #9
0
        /// <summary>
        /// Lecture des informations à ne pas relire à chaque contrôle d'une nouvelle ligne
        /// </summary>
        /// <param name="repository"></param>
        /// <returns>Objet Import contenant les informations</returns>
        private Import ReadParameters(APIRepository repository)
        {
            // Récupération des codes journaux, ces codes journaux seront accessibles en les recherchant directement par leurs indices (code).
            Dictionary <string, string> options = new Dictionary <string, string>();

            options.Add("$expand", "compte");
            options.Add("$select", "code,id,optContrepartie,compte");
            var result = repository.Get(repository.CompanyId, "journaux", options);

            if (!Tools.IsSuccess(result))
            {
                return new Import {
                           ErrorMessage = Tools.FormateErrorApi(result)
                }
            }
            ;

            var journaux = result.GetJSONResult()["value"];
            Dictionary <string, JournalCache> codes = new Dictionary <string, JournalCache>();

            foreach (var journal in journaux)
            {
                codes.Add(journal["code"].ToString(), JournalCache.Create(journal));
            }

            // Récupération des intitules de modes de réglements.
            options.Clear();
            options.Add("$select", "intitule,id");
            result = repository.Get(repository.CompanyId, "modesReglement", options);
            if (!Tools.IsSuccess(result))
            {
                return new Import {
                           ErrorMessage = Tools.FormateErrorApi(result)
                }
            }
            ;

            var modesReglement = result.GetJSONResult()["value"];
            Dictionary <string, string> intitulesModesReglement = new Dictionary <string, string>();

            foreach (var mode in modesReglement)
            {
                intitulesModesReglement.Add(mode["intitule"].ToString(), mode["id"].ToString());
            }

            // Récupération des informations de la société afin d'obtenir les dates d'exercices.
            options.Clear();
            options.Add("$select", "exercices($select=dateDebut,dateFin;$filter=cloture eq false;$orderby=dateDebut desc;$top=1)");
            result = repository.Get(repository.CompanyId, "company", options);
            if (!Tools.IsSuccess(result))
            {
                return new Import {
                           ErrorMessage = Tools.FormateErrorApi(result)
                }
            }
            ;

            var company           = result.GetJSONResult();
            var exerciceStartDate = (DateTime)company["exercices"][0]["dateDebut"];
            var exerciceEndDate   = (DateTime)company["exercices"][0]["dateFin"];

            //Structure pour tampon des comptes déjà lus, sera alimenté au fur et à mesure du parcours des lignes
            Dictionary <string, string> comptes        = new Dictionary <string, string>();
            Dictionary <string, string> inconnuComptes = new Dictionary <string, string>();

            return(new Import
            {
                Codes = codes,
                ExerciceStartDate = exerciceStartDate,
                ExerciceEndDate = exerciceEndDate,
                IntitulesModesReglement = intitulesModesReglement,
                Comptes = comptes,
                InconnuComptes = inconnuComptes,
                ErrorMessage = null
            });
        }
    }
}