test_xml.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. '''Created 16 May 2024 Levi'''
  2. import unittest
  3. from collections import defaultdict
  4. from datetime import date
  5. import openpyxl
  6. import shutil
  7. from lxml import etree
  8. from rich import print # noqa
  9. class Test(unittest.TestCase):
  10. def test_xml(self):
  11. vb_path = r'\\mozaiq\levente.marton\#mngm\Formulare\AUTORITATI\MINISTERUL FINANTELOR\Note explicative (finalizat)\2024\lista_firme.xlsm'
  12. backup_path = r'\\mozaiq\levente.marton\#mngm\Formulare\AUTORITATI\MINISTERUL FINANTELOR\Note explicative (finalizat)\2024\lista_firme.xlsm.bak'
  13. xml_path = r'c:\Users\DECEL\Bilant anual\Kat_Imob\2023\s1005_38063294_2023_12.xml'
  14. xml = etree.parse(xml_path)
  15. # root = xml.getroot()
  16. tree = xml.xpath('/xmlns:Bilant1005/*', namespaces={'xmlns': 'mfp:anaf:dgti:s1005:declaratie:v12'})
  17. # print(tree[0].attrib['F10_0041'])
  18. print(tree)
  19. def F10() -> dict[int]:
  20. def_tree = defaultdict(lambda: 0)
  21. def_tree.update(tree[0].attrib)
  22. xpaths = {}
  23. xpaths['total_act_imob_C1'] = def_tree['F10_0041']
  24. xpaths['total_act_imob_C2'] = def_tree['F10_0042']
  25. xpaths['total_act_circ_C1'] = def_tree['F10_0091']
  26. xpaths['total_act_circ_C2'] = def_tree['F10_0092']
  27. xpaths['total_chelt_av_C1'] = def_tree['F10_0101']
  28. xpaths['total_chelt_av_C2'] = def_tree['F10_0102']
  29. xpaths['total_dat_tot_C1'] = sum([int(def_tree['F10_0131']), int(def_tree['F10_0161'])])
  30. xpaths['total_dat_tot_C2'] = sum([int(def_tree['F10_0132']), int(def_tree['F10_0162'])])
  31. xpaths['total_ven_av_C1'] = def_tree['F10_0181']
  32. xpaths['total_ven_av_C2'] = def_tree['F10_0182']
  33. xpaths['total_cap_soc_C1'] = def_tree['F10_0291']
  34. xpaths['total_cap_soc_C2'] = def_tree['F10_0292']
  35. xpaths['total_rezerve_C1'] = def_tree['F10_0371']
  36. xpaths['total_rezerve_C2'] = def_tree['F10_0372']
  37. xpaths['total_rez_reev_C1'] = def_tree['F10_0361']
  38. xpaths['total_rez_reev_C2'] = def_tree['F10_0362']
  39. xpaths['total_prof_rep_C1'] = def_tree['F10_0411']
  40. xpaths['total_prof_rep_C2'] = def_tree['F10_0412']
  41. xpaths['total_pierd_rep_C1'] = def_tree['F10_0421']
  42. xpaths['total_pierd_rep_C2'] = def_tree['F10_0422']
  43. xpaths['total_prof_cur_C1'] = def_tree['F10_0431']
  44. xpaths['total_prof_cur_C2'] = def_tree['F10_0432']
  45. xpaths['total_pierd_cur_C1'] = def_tree['F10_0441']
  46. xpaths['total_pierd_cur_C2'] = def_tree['F10_0442']
  47. xpaths['total_rep_prof_C1'] = def_tree['F10_0451']
  48. xpaths['total_rep_prof_C2'] = def_tree['F10_0452']
  49. xpaths['total_cap_propr_C1'] = def_tree['F10_0461']
  50. xpaths['total_cap_propr_C2'] = def_tree['F10_0462']
  51. for keys, values in xpaths.items():
  52. xpaths[keys] = int(values)
  53. # print(xpaths)
  54. return xpaths
  55. # F10()
  56. def F20() -> dict[int]:
  57. def_tree = defaultdict(lambda: 0)
  58. def_tree.update(tree[1].attrib)
  59. xpaths = {}
  60. xpaths['total_ven_exp_C1'] = def_tree['F20_0161']
  61. xpaths['total_ven_exp_C2'] = def_tree['F20_0162']
  62. xpaths['total_chelt_exp_C1'] = def_tree['F20_0421']
  63. xpaths['total_chelt_exp_C2'] = def_tree['F20_0422']
  64. xpaths['total_ven_fin_C1'] = def_tree['F20_0521']
  65. xpaths['total_ven_fin_C2'] = def_tree['F20_0522']
  66. xpaths['total_chelt_fin_C1'] = def_tree['F20_0591']
  67. xpaths['total_chelt_fin_C2'] = def_tree['F20_0592']
  68. xpaths['total_imp_C1'] = sum([int(def_tree['F20_0661']), int(def_tree['F20_0681'])])
  69. xpaths['total_imp_C2'] = sum([int(def_tree['F20_0662']), int(def_tree['F20_0682'])])
  70. for keys, values in xpaths.items():
  71. xpaths[keys] = int(values)
  72. # print(xpaths)
  73. return xpaths
  74. def F30() -> dict[int]:
  75. def_tree = defaultdict(lambda: 0)
  76. def_tree.update(tree[2].attrib)
  77. xpaths = {}
  78. xpaths['total_ven_exp_C1'] = def_tree['F30_1821']
  79. xpaths['total_ven_exp_C2'] = def_tree['F30_1822']
  80. xpaths['total_chelt_exp_C1'] = def_tree['F30_2081']
  81. xpaths['total_chelt_exp_C2'] = def_tree['F30_2082']
  82. xpaths['total_ven_fin_C1'] = def_tree['F30_2181']
  83. xpaths['total_ven_fin_C2'] = def_tree['F30_2182']
  84. xpaths['total_chelt_fin_C1'] = def_tree['F30_2251']
  85. xpaths['total_chelt_fin_C2'] = def_tree['F30_2252']
  86. xpaths['total_imp_C1'] = sum([int(def_tree['F30_2321']), int(def_tree['F30_2341'])])
  87. xpaths['total_imp_C2'] = sum([int(def_tree['F30_2322']), int(def_tree['F30_2342'])])
  88. for keys, values in xpaths.items():
  89. xpaths[keys] = int(values)
  90. # print(xpaths)
  91. return xpaths
  92. # F20()
  93. # return F10, F20
  94. firms = ['KATONA IMOBILIARE SRL']
  95. shutil.copy2(vb_path, backup_path)
  96. wb = openpyxl.load_workbook(vb_path, keep_vba=True)
  97. sheet = wb.active
  98. for firm in firms:
  99. for row in sheet.iter_rows(min_row=1, max_col=sheet.max_column, max_row=sheet.max_row):
  100. if firm in str(row[0].value):
  101. print('hit:', firm)
  102. row[9].value = F10()['total_cap_soc_C2']
  103. row[10].value = F10()['total_prof_cur_C2']
  104. row[16].value = F10()['total_pierd_cur_C2']
  105. row[18].value = F30()['total_ven_exp_C2']
  106. row[19].value = F30()['total_ven_fin_C2']
  107. row[22].value = F30()['total_chelt_exp_C2']
  108. row[23].value = F30()['total_chelt_fin_C2']
  109. row[26].value = F30()['total_imp_C2']
  110. row[28].value = F10()['total_act_imob_C2']
  111. row[29].value = F10()['total_act_circ_C2']
  112. row[30].value = F10()['total_chelt_av_C2']
  113. row[32].value = F10()['total_cap_propr_C2']
  114. row[33].value = F10()['total_dat_tot_C2']
  115. row[35].value = F10()['total_ven_av_C2']
  116. row[47].value = 12
  117. row[48].value = date.today().year - 1
  118. row[49].value = date.today().strftime('%d.%m.%Y')
  119. wb.save(vb_path)
  120. if __name__ == "__main__":
  121. Test().test_xml()
  122. # print(F10())
  123. # unittest.main()