Ejemplo n.º 1
0
        /// <summary>
        /// obtien des infos sur le tiers assuré principal
        /// elles sont stockées par l'objet DataManager
        /// </summary>
        public static void GetDataTiers()
        {
            //connexion à la base
            using (SqlConnection connection = new SqlConnection(ServiceCfg.ConnectionString))
            {
                //ouverture
                connection.Open();

                //commande sql
                SqlCommand command = new SqlCommand("GetTierDataByRef", connection);

                command.CommandType = CommandType.StoredProcedure;

                command.Parameters.Add(new SqlParameter("@pli", RefPli));

                var numCarte = GetLastCardsSerial().Split(',')[0];
                var carte    = DataManager.Cartes.FirstOrDefault(x => x.Serial == numCarte);

                command.Parameters.Add(new SqlParameter("@serial", numCarte));

                try
                {
                    //execution de la commande
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        //si un résultat existe
                        if (reader.HasRows)
                        {
                            reader.Read();
                            //on garde id tiers
                            SetDicoValue(LogTableParam.Tiers, reader["id_tiers"].ToString());
                            _nir13       = reader["nni"].ToString();
                            _cle         = NumeroINSEE.CalculerCleINSEE(_nir13).ToString("D2");
                            _dateEdition = reader["date_edition"].ToString();
                            SetDicoValue(LogTableParam.Edition, DateEdition);
                            SetDicoValue(LogTableParam.Enveloppe, Enveloppe);
                        }
                        else
                        {
                            throw new Exception($"Aucune donnée trouvée en base concernant le pli référence [{DataManager.RefPli}] carte [{numCarte}] {Environment.NewLine}(voir fichier '{carte.SourceFile}' page {carte.SourcePage})");
                        }
                    }
                }
                catch (Exception e)
                {
                    ServiceCfg.Log.Error("DataManager.GetDataTiers : ", e);
                    throw new Exception($"DataManager.GetDataTiers : {e.GetBaseException().Message}", e);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// recherche des données exploitables dans un tableau de texte
        /// </summary>
        /// <param name="dataStrings"></param>
        public static void PrepareData(string[] dataStrings)
        {
            try
            {
                if (ServiceCfg.DataIndex.Equals("scan"))
                {
                    ExtractCarte(dataStrings);

                    var reference = dataStrings.First(x => x.Contains(ServiceCfg.TagBegin));
                    if (string.IsNullOrEmpty(reference))
                    {
                        throw new Exception($"Pas de balise xml {ServiceCfg.TagBegin}{ServiceCfg.TagEnd}");
                    }
                    //on enlève la balise début et fin dans la chaine
                    reference   = reference.Replace(ServiceCfg.TagBegin, string.Empty).Replace(ServiceCfg.TagEnd, string.Empty);
                    _hasChanged = !reference.Equals(RefPli);
                    //matcher avec la référence si traitement sur le même pli
                    //on ne fait rien sinon on reactualise les infos
                    if (_hasChanged)
                    {
                        InitDico();
                        _refPli      = reference;
                        _nir13       = string.Empty;
                        _cle         = string.Empty;
                        _dateEdition = string.Empty;
                        _edition     = string.Empty;
                        _cartes.Clear();

                        //on recherche les infos
                        foreach (var s in dataStrings)
                        {
                            if (string.IsNullOrEmpty(Nir13) || string.IsNullOrEmpty(DateEdition) || string.IsNullOrEmpty(Edition))
                            {
                                //on cherche un contenu ayant la date d'edition du document
                                if (s.Contains("Edité") && (string.IsNullOrEmpty(DateEdition) || string.IsNullOrEmpty(Edition)))
                                {
                                    _edition     = s;
                                    _dateEdition = ExtractDate(s);
                                }
                                else
                                {
                                    //si on a pas de Nir13
                                    if (string.IsNullOrEmpty(Nir13))
                                    {
                                        //ici on va récupéré le numero INSEE de l'adhérent
                                        //qui doit faire partie des informations contenues dans le document
                                        //(information qui doit etre contenue dans une ligne et isolée)
                                        var num = string.Empty;

                                        //on match les chaines de 13 caractères maximum (NIR sans clé)
                                        if (s.Replace(" ", "").Length == 13)
                                        {
                                            //on extrait de la chaine un potentiel NIR
                                            if (!string.IsNullOrEmpty(NumeroINSEE.MatchNumeroInsee(s)))
                                            {
                                                num  = NumeroINSEE.NettoyerNumero(NumeroINSEE.MatchNumeroInsee(s));
                                                _cle = NumeroINSEE.CalculerCleINSEE(num).ToString("D2");
                                                if (NumeroINSEE.VerifierINSEE(num + Cle))
                                                {
                                                    //un NIR est trouvé on le garde
                                                    _nir13 = num;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                        //on récupère l'info tiers id assuré principal
                    }
                }
                else
                {
                    //traitement par référence
                    var reference = dataStrings.First(x => x.Contains(ServiceCfg.TagBegin));
                    if (string.IsNullOrEmpty(reference))
                    {
                        throw new Exception($"Pas de balise xml {ServiceCfg.TagBegin}{ServiceCfg.TagEnd}");
                    }
                    //on enlève la balise début et fin dans la chaine
                    reference   = reference.Replace(ServiceCfg.TagBegin, string.Empty).Replace(ServiceCfg.TagEnd, string.Empty);
                    _hasChanged = !reference.Equals(RefPli);

                    //var list = ServiceCfg.DataIndex.Split(',');
                    //var pli = list.First(x => x.Contains("pli"));
                    //if (string.IsNullOrEmpty(pli))
                    //    throw new Exception("Pas de paramètre 'pli'");

                    ////si on change de référence pli
                    //_hasChanged = !dataStrings[int.Parse(pli.Split(':')[1])].Equals(RefPli);
                    if (HasChanged)
                    {
                        _cartes.Clear();
                        _refPli = reference;
                    }

                    //foreach (var data in list)
                    //{
                    //    //donnée / position : name / value
                    //    string name = data.Split(':')[0];
                    //    int value = int.Parse(data.Split(':')[1]);

                    //    switch (name)
                    //    {
                    //        case "pli":
                    //            if (HasChanged)
                    //                _refPli = dataStrings[value];
                    //            break;
                    //        case "nni":
                    //            if (HasChanged)
                    //                _nir13 = dataStrings[value];
                    //                _cle = NumeroINSEE.CalculerCleINSEE(dataStrings[value]).ToString("D2");
                    //            break;
                    //        case "edit":
                    //            if (HasChanged)
                    //                _edition = dataStrings[value];
                    //                _dateEdition = ExtractDate(dataStrings[value]);
                    //            break;
                    //        case "barcod":
                    //        case "barcod2":
                    //            ExtractCarte(new string[] { dataStrings[value] });
                    //            break;
                    //        default:
                    //            break;
                    //    }
                    //}
                    string[] codes = dataStrings.Where(x => x.Contains(_barCodTags[0]) || x.Contains(_barCodTags[2])).ToArray();
                    if (codes.Length > 0)
                    {
                        ExtractCarte(codes);
                        //on récupère l'info tiers id assuré principal
                        if (HasChanged)
                        {
                            GetDataTiers();
                        }
                    }
                }
                //si à la fin de la recherche on a rien obtenu on log en erreur
                if (string.IsNullOrEmpty(Nir13))
                {
                    throw new Exception("Aucune information exploitable dans le document");
                }
            }
            catch (Exception ex)
            {
                ServiceCfg.Log.Error("DataManager.PrepareData : ", ex);
                throw new Exception("DataManager.PrepareData : ", ex);
            }
        }