vnc-console 1 год назад
Родитель
Сommit
0bec56911e
3 измененных файлов с 152 добавлено и 61 удалено
  1. 4 12
      tests/test_winmnt.py
  2. 92 0
      winmentor/db_to_df.py
  3. 56 49
      winmentor/dbread.py

+ 4 - 12
tests/test_winmnt.py

@@ -29,22 +29,14 @@ class Test(unittest.TestCase):
         utils.gen_turnover('./generated_files/turn_over', 'to', office, m_month='2019_12', n_headers=n_headers)
     
     def test_get_bank_accounts(self):
-        for account in self.mentor.get_bank_accounts('WEBS'):
+        for account in self.mentor.get_bank_accounts('KINVEST'):
         # if account[2].startswith(' '):
             print(account)
     
     def test_get_oblig(self):
-        head = ['Denumire', 'CF', 'J', 'Adresa', 'Oras', 'Judet', 'Prescurtat', 'Admin', 'AdminP', 'RCNP', 'Obs']
-        # firm_list = list(self.mentor.filtered_firmlist(head))
-        df_dicts = self.mentor.get_oblig('KINVEST')
-        df = pd.DataFrame(df_dicts[0])
-        df2 = pd.DataFrame(df_dicts[1])
-        df3 = pd.merge(df, df2, how='left', left_on='Part', right_on='Cod')
-        df3.drop(columns=['Part', 'Cod'], inplace=True)
-        print(df3.head(10))
-        df3.to_excel('obligatii.xlsx')
+        self.mentor.save_oblig('VIBRO')
         
 
 if __name__ == "__main__":
-
-    unittest.main()
+    Test().test_get_oblig()
+    # unittest.main()

+ 92 - 0
winmentor/db_to_df.py

@@ -0,0 +1,92 @@
+'''Created on 17 Mar 2023 @author: vnc-console'''
+
+from pypxlib import Table
+
+class Dbtodf(object):
+    '''classdocs'''
+
+    def __init__(self, dbp, *kwargs):
+        '''Constructor'''
+        self.dbp = dbp
+        self.kwargs = kwargs
+        for key in self.kwargs:
+            self.__setattr__(key, [])
+    
+    def convert_oblig(self):
+        with Table(self.dbp) as table: # , Table(nbanks) as nbanks
+            all_oblig = []
+            for row in table:
+                # if row.TipDoc == 1 and row.Rest != 0:
+                self.Part.append(row.Part)
+                all_oblig.append(self.Part)
+                self.TipDoc.append(row.TipDoc)
+                all_oblig.append(self.TipDoc)
+                self.Cont.append(row.Cont)
+                all_oblig.append(self.Cont)
+                self.Doc.append(row.Doc)
+                all_oblig.append(self.Doc)
+                self.NrDoc.append(row.NrDoc)
+                all_oblig.append(self.NrDoc)
+                self.DataDoc.append(row.DataDoc)
+                all_oblig.append(self.DataDoc)
+                self.Valoare.append(row.Valoare)
+                all_oblig.append(self.Valoare)
+                self.Rest.append(row.Rest)
+                all_oblig.append(self.Rest)
+        return dict(zip(self.kwargs, all_oblig))
+    
+    def convert_obligf(self):
+        with Table(self.dbp) as table: # , Table(nbanks) as nbanks
+            all_oblig = []
+            for row in table:
+                # if row.TipDoc == 1 and row.Rest != 0:
+                self.Part.append(row.Part)
+                all_oblig.append(self.Part)
+                self.TipTranz.append(row.TipTranz)
+                all_oblig.append(self.TipTranz)
+                self.Cont.append(row.Cont)
+                all_oblig.append(self.Cont)
+                self.Doc.append(row.Doc)
+                all_oblig.append(self.Doc)
+                self.NrDoc.append(row.NrDoc)
+                all_oblig.append(self.NrDoc)
+                self.DataDoc.append(row.DataDoc)
+                all_oblig.append(self.DataDoc)
+                self.Valoare.append(row.Valoare)
+                all_oblig.append(self.Valoare)
+                self.Rest.append(row.Rest)
+                all_oblig.append(self.Rest)
+        return dict(zip(self.kwargs, all_oblig))
+    
+    def convert_parts(self):
+        with Table(self.dbp) as table: # , Table(nbanks) as nbanks
+            all_nparts = []
+            for row in table:
+                # if row.TipDoc == 1:
+                self.Cod.append(row.Cod)
+                all_nparts.append(self.Cod)
+                self.Denumire.append(row.Denumire)
+                all_nparts.append(self.Denumire)
+                self.CodFiscal.append(row.CodFiscal)
+                all_nparts.append(self.CodFiscal)
+        return dict(zip(self.kwargs, all_nparts))
+    
+    def convert_cont(self):
+        with Table(self.dbp) as table: # , Table(nbanks) as nbanks
+            all_conts = []
+            for row in table:
+                # print(row.Simbol)
+                self.Cod.append(row.Cod)
+                all_conts.append(self.Cod)
+                self.Simbol.append(row.Simbol)
+                all_conts.append(self.Simbol)
+        return dict(zip(self.kwargs, all_conts))
+
+
+if __name__ == '__main__':
+    oblig_headers = ['Part', 'TipDoc', 'Doc', 'NrDoc', 'DataDoc', 'Valoare', 'Rest']
+    nparts_headres = ['Cod', 'Denumire', 'CodFiscal']
+    # args_ = {'one': '11', 'two': 12}
+    dbtodf = Dbtodf(*oblig_headers)
+    dbtodf.convert()
+    print(dbtodf.Part)

+ 56 - 49
winmentor/dbread.py

@@ -2,12 +2,16 @@
 Created on Jun 21, 2018 @author: levente.marton
 '''
 import os
-import shutil
 import re
 import datetime
 from dataclasses import dataclass
+
+import shutil
+import pandas as pd
 from pypxlib import Table
 
+from .db_to_df import Dbtodf
+
 @dataclass
 class Company:
     name: str
@@ -187,6 +191,7 @@ class WinMentor(object):
         :param db_file is firme.db from winment/data folder
         :param list headers is the fields from firme.db file
         :param list|str ban companies excluded from list'''
+        headers = headers or ['Denumire', 'CF', 'J', 'Adresa', 'Oras', 'Judet', 'Prescurtat', 'Admin', 'AdminP', 'RCNP', 'Obs']
         if ban:
             if type(ban) is list:
                 for a_company in self.gen_firms(db_file, headers):
@@ -259,56 +264,58 @@ class WinMentor(object):
                     if bank_account[2].startswith(' '):
                         yield bank_account
     
+    def save_oblig(self, short_name):
+        df_dicts = self.get_oblig(short_name)
+        # create dfs from dicts
+        df_parts = pd.DataFrame(df_dicts[1])
+        df_conts = pd.DataFrame(df_dicts[2])
+        df_oblig = pd.DataFrame(df_dicts[0])
+        df_obligf = pd.DataFrame(df_dicts[3])
+        df_obligf = df_obligf.rename(columns={'TipTranz': 'TipDoc'})
+        # join oblig<>part<>cont with left join
+        df_oblig = pd.merge(df_oblig, df_parts, how='left', left_on='Part', right_on='Cod')
+        df_oblig.drop(columns=['Part', 'Cod'], inplace=True)
+        df_oblig = pd.merge(df_oblig, df_conts, how='left', left_on='Cont', right_on='Cod')
+        df_oblig.drop(columns=['Cont', 'Cod'], inplace=True)
+        # join obligf<>party<>cont
+        try:
+            df_obligf = pd.merge(df_obligf, df_parts, how='left', left_on='Part', right_on='Cod')
+            df_obligf.drop(columns=['Part', 'Cod'], inplace=True)
+            df_obligf = pd.merge(df_obligf, df_conts, how='left', left_on='Cont', right_on='Cod')
+            df_obligf.drop(columns=['Cont', 'Cod'], inplace=True)
+            df_obligall = pd.concat([df_oblig, df_obligf])
+        except KeyError as exc_:
+            df_obligall = df_oblig
+        options = ['581', '455', '455.01', '167', '666']
+        df_obligall = df_obligall.loc[(~df_obligall['Simbol'].isin(options)) & (df_obligall['Rest'] != 0)]
+        print(df_obligall.head(10))
+        df_obligall.to_excel('obligatii.xlsx')
+    
     def get_oblig(self, short_name, db_file='/ObligPI.DB'):
-        oblig_headers = ['Part', 'TipDoc', 'Doc', 'NrDoc', 'DataDoc', 'Valoare', 'Rest']
+        firm_list = self.filtered_firmlist(None)
+        oblig_headers = ['Part', 'TipDoc', 'Cont', 'Doc', 'NrDoc', 'DataDoc', 'Valoare', 'Rest']
+        obligf_headers = ['Part', 'TipTranz', 'Cont', 'Doc', 'NrDoc', 'DataDoc', 'Valoare', 'Rest']
         nparts_headres = ['Cod', 'Denumire', 'CodFiscal']
-        short_name = self.winment_path + short_name
-        nparts_db = self.update_copy(short_name + '/NPART.DB')
-        oblig_db = self.update_copy(short_name + '/2023_02' + db_file)
-        with Table(oblig_db) as table: # , Table(nbanks) as nbanks
-            all_oblig = []
-            parts = []
-            tips = []
-            docs = []
-            nrs = []
-            dates = []
-            values = []
-            rests = []
-            for row in table:
-                if row.TipDoc == 1 and row.Rest != 0:
-                    parts.append(row.Part)
-                    all_oblig.append(parts)
-                    tips.append(row.TipDoc)
-                    all_oblig.append(tips)
-                    docs.append(row.Doc)
-                    all_oblig.append(docs)
-                    nrs.append(row.NrDoc)
-                    all_oblig.append(nrs)
-                    dates.append(row.DataDoc)
-                    all_oblig.append(dates)
-                    values.append(row.Valoare)
-                    all_oblig.append(values)
-                    rests.append(row.Rest)
-                    all_oblig.append(rests)
-        
-        with Table(nparts_db) as table: # , Table(nbanks) as nbanks
-            all_nparts = []
-            cods = []
-            names = []
-            fiscals = []
-            for row in table:
-                # if row.TipDoc == 1:
-                cods.append(row.Cod)
-                all_nparts.append(cods)
-                names.append(row.Denumire)
-                all_nparts.append(names)
-                fiscals.append(row.CodFiscal)
-                all_nparts.append(fiscals)
-        
-        oblig_dict = dict(zip(oblig_headers, all_oblig))
-        parts_dict = dict(zip(nparts_headres, all_nparts))
-        return (oblig_dict, parts_dict)
-        
+        cont_headers = ['Cod', 'Simbol']
+        for firm in firm_list:
+            if firm[6] == short_name:
+                short_path = self.winment_path + short_name
+                # update files
+                nparts_db = self.update_copy(short_path + '/NPART.DB')
+                oblig_db = self.update_copy(short_path + '/' + self.get_last_month(short_name) + db_file)
+                obligf_db = self.update_copy(short_path + '/' + self.get_last_month(short_name) + '/ObligF.DB')
+                conts_db = self.update_copy(short_path + '/' + self.get_last_month(short_name) + '/NCONT.DB')
+                # convert dbs to dfs
+                dbtodf_oblig = Dbtodf(oblig_db, *oblig_headers)
+                dbtodf_parts = Dbtodf(nparts_db, *nparts_headres)
+                dbtodf_conts = Dbtodf(conts_db, *cont_headers)
+                dbtodf_obligf  =Dbtodf(obligf_db, *obligf_headers)
+                # actual converting
+                oblig_dict = dbtodf_oblig.convert_oblig()
+                obligf_dict = dbtodf_obligf.convert_obligf()
+                parts_dict = dbtodf_parts.convert_parts()
+                conts_dict = dbtodf_conts.convert_cont()
+        return (oblig_dict, parts_dict, conts_dict, obligf_dict)
 
     def corp_list(self, name=None):
         '''returns company list from actual shortnames from winmwnt/data folder