Advertisement
ALEXANDAR_GEORGIEV

excel_acc_data

Nov 22nd, 2022
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.98 KB | Source Code | 0 0
  1. from json_file_io import JsonFileIo
  2. from Opiti.from_excel.classes.global_inc import registry    # TODO KАКВО Е ТОВА ???
  3. import re
  4.  
  5.  
  6. class ExcelAccData:
  7.  
  8.     def __init__(self):
  9.         self.acc_data = []  # dict    # Сурови данни от Excel -> Списък от речници
  10.         self.acc_data_bycode = {}  # Данни от Excel с Ключ "сметка" -> Речник в речник {10: {'code': '10', 'name':..}}
  11.  
  12.         self.min_top_group_digits = 0  # Минимален брой цифри в топ групата на кода на сметките -> spin_1
  13.         self.max_top_group_digits = 0  # Максимален брой цифри в топ групата на кода на сметките -> spin_1
  14.         self.max_groups = 0  # Максимален брой групи в кода на сметките
  15.  
  16.     def get_acc_data_bycode(self):
  17.         return self.acc_data_bycode
  18.  
  19.     def get_min_top_group_digits(self):
  20.         return self.min_top_group_digits
  21.  
  22.     def get_max_top_group_digits(self):
  23.         return self.max_top_group_digits
  24.  
  25.     def get_max_groups(self):
  26.         return self.max_groups
  27.  
  28.     def count_acc_digits(self, code):  # Броим групи и цифри в кода на сметките
  29.         groups_in_top_code = re.findall('[0-9]+', code)  # '400-20-2' -> ['400', '20', '2']
  30.         len_groups = len(groups_in_top_code)  # Брой групи в 'code' -> max за spin_level_2
  31.         len_digits_top_group = len(groups_in_top_code[0])  # Брой цифри в топ групата -> min и max за spin_level_1
  32.         if self.min_top_group_digits == 0: self.min_top_group_digits = len_digits_top_group
  33.         if len_digits_top_group < self.min_top_group_digits: self.min_top_group_digits = len_digits_top_group
  34.         if len_digits_top_group > self.max_top_group_digits: self.max_top_group_digits = len_digits_top_group
  35.         if len_groups > self.max_groups: self.max_groups = len_groups  # max level_spin_2
  36.         self.max_groups = self.max_groups - 1
  37.  
  38.     def read_json(self):
  39.         json_file_io = JsonFileIo(file_name=registry["trial_balance_file_name"])
  40.         self.acc_data = json_file_io.read_content()
  41.  
  42.     def convert_json_data(self):  # TODO МАЙ Е 1-ви метод дето трябва да се пусне от MAIN()
  43.         self.read_json()
  44.  
  45.         def to_float(value):
  46.             if value is None or value == "":
  47.                 return 0.0
  48.             return float(value)
  49.  
  50.         def to_text(value):
  51.             if value is None or value == "":
  52.                 return "0.0"
  53.             return f'{float(value):,.2f}'.replace(',', ' ')
  54.  
  55.         for acc_row in self.acc_data:
  56.             acc_code = acc_row['code']  # Взимаме 'code' от acc_dada '10'
  57.             if acc_code is None or acc_row == '':
  58.                 continue  # Прескачаме посления ред на Excel със сумата и паразитни редове
  59.             #self.list_all_code_account.append(acc_code)  # TODO -> Списък със всички кодове на сметки
  60.             # self.acc_data_bycode[acc_code] = acc_row  # Създаваме ключ 'acc_code'='10' -> {'10': {'code': '10', 'name':}
  61.             self.acc_data_bycode[acc_code] = {
  62.                 'code': acc_row["code"],
  63.                 "name": acc_row["name"],
  64.                 "open_d": to_float(acc_row["open_d"]),
  65.                 "open_c": to_float(acc_row["open_c"]),
  66.                 "turn_d": to_float(acc_row["turn_d"]),
  67.                 "turn_c": to_float(acc_row["turn_c"]),
  68.                 "close_d": to_float(acc_row["close_d"]),
  69.                 "close_c": to_float(acc_row["close_c"]),
  70.                 "str_open_d": to_text(acc_row["open_d"]),
  71.                 "str_open_c": to_text(acc_row["open_c"]),
  72.                 "str_turn_d": to_text(acc_row["turn_d"]),
  73.                 "str_turn_c": to_text(acc_row["turn_c"]),
  74.                 "str_close_d": to_text(acc_row["close_d"]),
  75.                 "str_close_c": to_text(acc_row["close_c"]),
  76.             }
  77.             # Да дадем кода на с/та за да го броим (Обща дължина на сметката, брой групи, мин и макс на ТОП група)
  78.             self.count_acc_digits(acc_code)  # Подаваме 'code' за да броим Top_grup и count_grups in code
  79.             # self.acc_tree.add_code(acc_code) # Захранваме наследственото дърво в новия клас
  80.         return
  81.  
  82.  
  83.  
  84. class MappedAccData:
  85.     def __init__(self):
  86.         self.mapped_acc = {}
  87.  
  88.     def read_json(self):
  89.         print("RRRRRRRRRRRRRRR")
  90.         json_file_io = JsonFileIo(file_name=registry['mapped_account_file_name'])
  91.         self.mapped_acc = json_file_io.read_content()
  92.         if self.mapped_acc is None:
  93.             self.mapped_acc = {}
  94.  
  95.         print("MappedAccData: self.mapped_acc", self.mapped_acc)
  96.  
  97.     def get_mapped_acc(self):
  98.         return self.mapped_acc
  99.  
  100.  
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement