Selaa lähdekoodia

added clean name + return to old re_check

vnc-console 4 kuukautta sitten
vanhempi
commit
455a01e6ec
2 muutettua tiedostoa jossa 57 lisäystä ja 23 poistoa
  1. 18 7
      pymt940/utils.py
  2. 39 16
      tests/test_csv2mentor.py

+ 18 - 7
pymt940/utils.py

@@ -64,13 +64,13 @@ def dig_it(search_in, default=0.00, fl_point=100, pattern=r'\d+') -> float:
 def re_check(string, pattern=r'(?<=;)[A-Za-z-]*\w [A-Za-z :.-]*(?=;)'):
     # string = re.sub(r'^[^a-zA-Z]+', '', string)
     matches = re.findall(pattern, string, flags=re.RegexFlag.IGNORECASE)
-    if string.startswith('Incasare') or string.startswith('Plata'):
-        first_semicolon_index_from_end = string.rfind(';')
-        second_semicolon_index_from_end = string.rfind(';', 0, first_semicolon_index_from_end)
-        third_semicolon_index_from_end = string.rfind(';', 0, second_semicolon_index_from_end)
-        ret_val = string[third_semicolon_index_from_end + 1:second_semicolon_index_from_end]
-        return ret_val
-    elif len(matches) == 0:
+    # if string.startswith('Incasare') or string.startswith('Plata'):
+    #     first_semicolon_index_from_end = string.rfind(';')
+    #     second_semicolon_index_from_end = string.rfind(';', 0, first_semicolon_index_from_end)
+    #     third_semicolon_index_from_end = string.rfind(';', 0, second_semicolon_index_from_end)
+    #     ret_val = string[third_semicolon_index_from_end + 1:second_semicolon_index_from_end]
+    #     return ret_val
+    if len(matches) == 0:
         ret_val = ''
         return ret_val
     #     matches = re.findall(r'\d+([A-Za-z-]+\s[A-Za-z :.-]*)', string)
@@ -87,6 +87,17 @@ def re_check(string, pattern=r'(?<=;)[A-Za-z-]*\w [A-Za-z :.-]*(?=;)'):
         ret_val = matches[0]
         return ret_val
 
+def clean_name(s):
+    clean_chars = ['srl', 's.r.l.', 'sc', 's.c.', 's r l', 's c', 'pfa', 'p.f.a.', 'ii', 'i.i.', 'pf', 'SRLPMN']
+    if s:
+        for char in clean_chars:
+            if s.upper().startswith(char.upper()) or s.upper().endswith(char.upper()):
+                s = s.upper().replace(char.upper(), '').strip()
+            # s = s.upper().strip(char.upper())
+        return s
+    else:
+        return ''
+
 def re_check_otp(string, pattern=r'(?<=Ben: )[A-Za-z-]*\w [A-Za-z :.-]*(?= - )'):
     matches = re.findall(pattern, string, flags=re.RegexFlag.IGNORECASE)
     if len(matches) == 0:

+ 39 - 16
tests/test_csv2mentor.py

@@ -26,25 +26,48 @@ class CsvTest(unittest.TestCase):
     # body_template = 'body_payments.txt'
     template = templates.get_template(body_template)
 
-    processor = PaymentsProcessorBtrl(os.path.join(downloads_dir, private.MZK[currency]), private.MZK['name'],
-                                      account_name=private.MZK[acc_currency]['name'],
-                                      account_number=private.MZK[acc_currency]['number'],
-                                      currency=private.MZK[acc_currency]['currency'],
-                                      account_location=private.MZK['location'],
-                                      account_agency=private.MZK['agency'],
-                                      account_symbol=private.MZK['symbol'])
+    processor = PaymentsProcessorBtrl(os.path.join(downloads_dir, private.RIDEW[currency]), private.RIDEW['name'],
+                                      account_name=private.RIDEW[acc_currency]['name'],
+                                      account_number=private.RIDEW[acc_currency]['number'],
+                                      currency=private.RIDEW[acc_currency]['currency'],
+                                      account_location=private.RIDEW['location'],
+                                      account_agency=private.RIDEW['agency'],
+                                      account_symbol=private.RIDEW['symbol'])
 
-    df = pd.read_csv('../csv/RO26BTRL01301202N63584XX.csv', skiprows=14, keep_default_na=False).astype({'Balance': 'object'})
+    df = pd.read_csv(r'c:\Users\vnc-console\Downloads\mentor\import\RIDEWAVE\RO69BTRLRONCRT0CP9775401.csv ', skiprows=14, keep_default_na=False).astype({'Sold contabil': 'object'})
 
     def test_df(self):
         # print(df['Description'])
-        desc = [d for d in self.df['Description']]
-        text = desc[2]
-        first_semicolon_index_from_end = text.rfind(';')
-        second_semicolon_index_from_end = text.rfind(';', 0, first_semicolon_index_from_end)
-        third_semicolon_index_from_end = text.rfind(';', 0, second_semicolon_index_from_end)
-        self.df['Name'] = self.df['Description'].apply(utils.re_check)
+        # desc = [d for d in self.df['Description']]
+        # text = desc[2]
+        # first_semicolon_index_from_end = text.rfind(';')
+        # second_semicolon_index_from_end = text.rfind(';', 0, first_semicolon_index_from_end)
+        # third_semicolon_index_from_end = text.rfind(';', 0, second_semicolon_index_from_end)
+        self.df['Name'] = self.df['Descriere'].apply(utils.re_check)
+        self.df['Name'] = self.df['Name'].apply(utils.clean_name)
         print(self.df['Name'])
+        names = [name for name in self.df['Name'] if name != '']
+        # print(names)
+        df_dict = utils.get_partners(self.processor.partner_data)
+        fiscal_codes = df_dict['CodFiscal']
+        mentor_names = df_dict['Denumire']
+        # print(mentor_names)
+        for name2 in names:
+            # index_ = name2.count(' ')
+            # nname =  name2 # ' '.join(name2.split()[:index_]).upper()
+            # print(name2)
+            for name in mentor_names:
+                # index_ = name.count(' ')
+                # if ' '.join(name.split()[:index_]).upper().count(' ') < 3:
+                #     index_ = 2
+                # elif ' '.join(name.split()[:index_]).upper().count(' ') < 2:
+                #     index_ = 1
+                if name2.upper() in name.upper():
+                    print(name)
+                    # for index, row in self.df.iterrows():
+                    #     if row['Name'] == name2:
+                    #         print(name)
+                            # df.loc[index, 'Name'] = name
 
     def test_process_income(self):
         df = self.processor.process_income_data(lang=languages.LANG.EN)
@@ -70,5 +93,5 @@ class CsvTest(unittest.TestCase):
 
 
 if __name__ == "__main__":
-    # import sys;sys.argv = ['', 'Test.testName']
-    unittest.main()
+    CsvTest().test_df()
+    # unittest.main()