d710.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. '''Created Jan 25, 2022 Levi'''
  2. from collections import defaultdict
  3. import xlsxwriter as xlsw
  4. from lxml import etree as ET
  5. from declarations.declaration import Declaration
  6. class D710(Declaration):
  7. def __init__(self):
  8. super().__init__()
  9. def from_xml(self, fp):
  10. self.obligs = []
  11. xml = ET.parse(fp)
  12. root = xml.getroot()
  13. def_root = defaultdict(lambda: 0)
  14. def_root.update(root.attrib)
  15. self.def_root = def_root
  16. self.cui = def_root['cui']
  17. self.den = def_root['den']
  18. self.month = int(def_root['luna'])
  19. self.year = int(def_root['an'])
  20. # print(root.nsmap)
  21. self.tree = xml.xpath('/x:declaratie710/*', namespaces={'x': 'mfp:anaf:dgti:d710:declaratie:v2'})
  22. for oblig in self.tree:
  23. print(oblig.attrib)
  24. self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['cod_oblig']))
  25. self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_dat_I']))
  26. self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_dat_C']))
  27. self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_ded_I']))
  28. self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_ded_C']))
  29. self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_plata_I']))
  30. self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_plata_C']))
  31. self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_rest_I']))
  32. self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_rest_C']))
  33. self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_bonif_I']))
  34. self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_bonif_C']))
  35. self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_spons_I']))
  36. self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_spons_C']))
  37. self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_AMEF']))
  38. # print(self.obligs)
  39. return self
  40. @property
  41. def data(self):
  42. data = {
  43. self.cui:
  44. [
  45. self.den,
  46. self.month,
  47. self.year,
  48. ]
  49. }
  50. self.dict_data = data
  51. return self.dict_data
  52. def to_xlsx(self, xl_name, w_sheet_name, files, headers=[], **kwargs):
  53. book = xlsw.Workbook(xl_name + '.xlsm')
  54. book.add_vba_project('./vbaProject.bin')
  55. sheet = book.add_worksheet(w_sheet_name)
  56. # sheet2 = book.add_worksheet('all')
  57. row, row2, col = 1, 1, 0
  58. headformat = book.add_format({'bold': True})
  59. hcol, hcol2 = 0, 0
  60. for h in headers:
  61. sheet.write(1, hcol, h, headformat)
  62. hcol += 1
  63. hcol2 += 1
  64. for file in files:
  65. d = D710() # obj['type']()
  66. d = d.from_xml(file)
  67. for i in d.data:
  68. row += 1
  69. sheet.write(row, col, i)
  70. print(f'write {row}', i)
  71. data = d.data[i]
  72. data.extend(d.obligs)
  73. sheet.write_row(row, 1, data) # d.data[i]
  74. for k, a in kwargs.items():
  75. if k == 'autofilter':
  76. sheet.autofilter(a[0], a[1], 100, 100)
  77. # sheet2.autofilter(a[0], a[1], 1000, 1000)
  78. if k == 'freeze':
  79. sheet.freeze_panes(a[0], a[1])
  80. # sheet2.freeze_panes(a[0], a[1])
  81. book.close()
  82. if __name__ == '__main__':
  83. headers = ['cod fiscal', 'den', 'luna', 'an', 'oblig', 'dat', 'dat_C', 'ded', 'ded_C', 'plata', 'plata_C', 'rest', 'rest_C', 'bonif', 'spons', 'spons_C', 'AMEF',
  84. 'oblig', 'dat', 'dat_C', 'ded', 'ded_C', 'plata', 'plata_C', 'rest', 'rest_C', 'bonif', 'spons', 'spons_C', 'AMEF']
  85. d710 = D710()
  86. # d.from_xml('../D100_2021_6_17259191_generat.xml')
  87. d710.to_xlsx('D710', 'data', ['D710_47381114_2022_12.xml'], headers, autofilter=[1, 0], freeze=[2, 1])
  88. # print(d100.data)