/// <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); } } }
/// <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); } }