atlas.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. '''
  2. Created on Nov 14, 2019 @author: deeejas
  3. '''
  4. import fitz
  5. import re
  6. class itemList(object):
  7. def __init__(self, item_list, code_ind, name_ind):
  8. self.item_list = item_list
  9. self._code_ind = code_ind
  10. self._name_ind = name_ind
  11. self.codes = []
  12. for c in self.item_list:
  13. c = c.split(1*' '+'\n')[self._code_ind] # 1 for invoice 0 for proforma: TO DO
  14. if c != '':
  15. i = re.search('(?<=ROSP-)[A-Z0-9]*', c)
  16. if i:
  17. c = c.replace('ROSP-', '')
  18. self.codes.append(c)
  19. # print(c)
  20. self.names = []
  21. for c in self.item_list:
  22. try:
  23. c = c.split(1*' '+'\n')[self._name_ind] # 2 for invoice 1 for proforma: TO DO
  24. if c != '':
  25. # i = re.search('(?<=ROSP-)[0-9]+', c)
  26. # if i:
  27. # c = c.replace('ROSP-', '')
  28. self.names.append('ROLAND ' + c)
  29. # print(c)
  30. except IndexError:
  31. pass
  32. self.qnt = []
  33. for c in self.item_list:
  34. try:
  35. if not isinstance(int(c.split(1*' '+'\n')[3]), int):
  36. c = c.split(1*' '+'\n')[4]
  37. else:
  38. c = c.split(1*' '+'\n')[3]
  39. if c != '':
  40. self.qnt.append(c)
  41. except IndexError:
  42. pass
  43. except ValueError:
  44. c = c.split(1*' '+'\n')[2]
  45. if c != '':
  46. self.qnt.append(c)
  47. # print(c)
  48. self.net_val = []
  49. for c in self.item_list:
  50. try:
  51. if not isinstance(int(c.split(1*' '+'\n')[3]), int):
  52. try:
  53. c = c.split(1*' '+'\n')[5].replace(',', '.')
  54. except IndexError:
  55. c = c.split(1*' '+'\n')[4].replace(',', '.')
  56. else:
  57. c = c.split(1*' '+'\n')[4].replace(',', '.')
  58. if c != '':
  59. self.net_val.append(c)
  60. except IndexError:
  61. pass
  62. except ValueError:
  63. try:
  64. c = c.split(1*' '+'\n')[3].replace(',', '.')
  65. if c != '':
  66. self.net_val.append(c)
  67. # print(self.net_val)
  68. except IndexError:
  69. pass
  70. # print(c)
  71. # c = c.split(1*' '+'\n')[4].replace(',', '.')
  72. # print(self.net_val)
  73. self.disc = ['0' for i in range(len(self.item_list)-1)]
  74. def __getitem__(self, k):
  75. return self.__dict__[k]
  76. class atlasInvoice(object):
  77. '''
  78. classdocs
  79. '''
  80. def __init__(self, invoice):
  81. '''
  82. Constructor
  83. '''
  84. self.doc = fitz.open(invoice)
  85. self.fpage = self.doc.loadPage(0)
  86. self.cnt = self.fpage.getText('text')
  87. self.items_start = re.search('Price \(€\)', self.cnt)
  88. # print(self.items_start)
  89. self.items_end = re.search('Total Net Value \(€\)', self.cnt)
  90. self.items_area = self.cnt[self.items_start.end()+3:self.items_end.start()].split(
  91. 3 * ' ' + '\n')
  92. self.items_details = itemList(self.items_area, 1, 2)
  93. self.size = len(self.cnt[self.items_start.end()+3:self.items_end.start()].split(
  94. 3 * ' ' + '\n')) - 1
  95. if re.search('(?<=INV)[0-9]+', self.cnt):
  96. self.inv_nr = re.search('(?<=INV)[0-9]+', self.cnt).group(0)
  97. else:
  98. self.inv_nr = re.search('(?<=INVDN)[0-9]+', self.cnt).group(0)
  99. if re.search('(?<=Date: ).+', self.cnt):
  100. self.data = re.search('(?<=Date: ).+', self.cnt).group(0).replace(' ', '').replace('/', '.')
  101. else:
  102. self.data = re.search('(?<=Date : ).+', self.cnt).group(0).replace(' ', '').replace('/', '.')
  103. self.vat_num = re.search('(?<=VAT No: )[A-Z0-9]+', self.cnt).group(0)
  104. def __getitem__(self, k):
  105. return self.__dict__[k]
  106. def __len__(self):
  107. return self.size
  108. class atlasProforma(object):
  109. '''
  110. classdocs
  111. '''
  112. def __init__(self, invoice):
  113. '''
  114. Constructor
  115. '''
  116. self.doc = fitz.open(invoice)
  117. self.fpage = self.doc.loadPage(0)
  118. self.cnt = self.fpage.getText('text')
  119. self.items_start = re.search('Price \(€\)', self.cnt)
  120. # print(self.items_start)
  121. self.items_end = re.search('Total \(€\)', self.cnt)
  122. self.items_area = self.cnt[self.items_start.end()+2:self.items_end.start()].split(
  123. 3 * ' ' + '\n')
  124. # print(self.items_area)
  125. self.items_details = itemList(self.items_area, 0, 1)
  126. self.size = len(self.cnt[self.items_start.end()+3:self.items_end.start()].split(
  127. 3 * ' ' + '\n')) - 1
  128. if re.search('(?<=INV)[0-9]+', self.cnt):
  129. self.inv_nr = re.search('(?<=INV)[0-9]+', self.cnt).group(0)
  130. else:
  131. self.inv_nr = re.search('(?<=PAX)[0-9]+', self.cnt).group(0)
  132. if re.search('(?<=Date: ).+', self.cnt):
  133. self.data = re.search('(?<=Date: ).+', self.cnt).group(0).replace(' ', '').replace('/', '.')
  134. else:
  135. self.data = re.search('(?<=Date : ).+', self.cnt).group(0).replace(' ', '').replace('/', '.')
  136. self.vat_num = re.search('(?<=VAT No: )[A-Z0-9]+', self.cnt).group(0)
  137. def __getitem__(self, k):
  138. return self.__dict__[k]
  139. def __len__(self):
  140. return self.size