Advertisement
ALEXANDAR_GEORGIEV

expenses_import_form

Dec 19th, 2022 (edited)
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 68.35 KB | Source Code | 0 0
  1. from tkinter import *
  2. from widget_factory import *
  3. from mapped_acc_calculations import *
  4. from json_file_io import JsonFileIo
  5. from Opiti.from_excel.classes.global_inc import registry
  6.  
  7.  
  8. class Expenses(Tk):
  9.     def __init__(self):
  10.         Tk.__init__(self)
  11.         self.account_tree = AccountTree()
  12.         self.widget_factory = WidgetsFactory()
  13.         self.excel_acc_data = ExcelAccData()
  14.         self.mapped_calculations = MappedCalculations()
  15.         self.excel_acc_data.convert_json_data()
  16.         self.acc_data_bycode = self.excel_acc_data.get_acc_data_bycode()
  17.         self.min_top_group_digits = self.excel_acc_data.get_min_top_group_digits()
  18.         self.max_top_group_digits = self.excel_acc_data.get_max_top_group_digits()
  19.         self.max_groups = self.excel_acc_data.get_max_groups()
  20.  
  21.         json_file_io = JsonFileIo(file_name=registry["mapped_account_file_name"])
  22.         acc_data_mapped = json_file_io.read_content()  # {"121": ["СК"], "121-13": ["СК"], "121-14": ["СК"],
  23.         if acc_data_mapped is None:
  24.             print("?? acc_data_mapped is NONE!!!")
  25.         self.acc_data_mapped_da = {}  # Речник с маркираните сметки с вид 'ДА'
  26.         for acc_code in self.acc_data_bycode:
  27.             self.account_tree.add_code(acc_code)  # Захранваме наследственото дърво
  28.         self.acc_data = []
  29.         self.max_depth_rx = 0
  30.         for acc_code in acc_data_mapped:
  31.             acc_types = acc_data_mapped[acc_code]
  32.             if 'ДА' in acc_types and len(acc_types) == 1:
  33.                 self.acc_data_mapped_da[acc_code] = acc_data_mapped[acc_code]
  34.                 depth = self.account_tree.get_depth(acc_code)
  35.                 if depth > self.max_depth_rx:
  36.                     self.max_depth_rx = depth
  37.         for acc_code in self.acc_data_bycode:
  38.             if acc_code in self.acc_data_mapped_da:
  39.                 acc_row = self.acc_data_bycode[acc_code]
  40.                 self.acc_data.append(acc_row)
  41.         # -----------------------
  42.         self.acc_rec_rx = {
  43.             'sm': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  44.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  45.             'vu': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  46.                    'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  47.             'a': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  48.                    'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  49.             'po': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  50.                    'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  51.             'dro': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  52.                    'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  53.             'rd': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  54.                    'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  55.             'ona': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  56.                    'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  57.             'ota': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  58.                    'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  59.             'pr': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  60.                    'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  61.             'drr': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  62.                    'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  63.             'rod': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  64.                    'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  65.             'rsd': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  66.                    'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  67.             'rtd': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  68.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  69.             'rad': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  70.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  71.             'rud': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  72.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  73.             'rlk': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  74.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  75.             'rldopk': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  76.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  77.             'rdrl': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  78.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  79.             'rov': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  80.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  81.             'rofa': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  82.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  83.             'rora': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  84.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  85.             'ropfa': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  86.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  87.             'drfr': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  88.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  89.             'nzpr': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  90.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  91.             'nnpr': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  92.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  93.             'bsna': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  94.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  95.             'bsta': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  96.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  97.             'rtax': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  98.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  99.             'alttax': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0, 'dec': 0, 'diff': 0},
  100.                     'amort_re': {'inc': 0, 'dec': 0, 'diff': 0}},
  101.         }
  102.         # -------------------------
  103.         self.check_assets = IntVar()  # Radiobutton tab - преоценка активи
  104.         self.check_amort = IntVar()  # Radiobutton tab - преоценка амортизации
  105.         self.last_entry = Entry()  # Четене на Entry code
  106.         self.acc_data = []
  107.         self.scr_bar = None
  108.         self.tab_names = {
  109.             "act": "Разходи по вид",
  110.             "amort": "Разходи по дейност",
  111.             "act_p": "Финансови разходи",
  112.             "amort_p": "Коригиращи суми",
  113.         }
  114.         self.current_tab = ''
  115.         self.open = 'str_open_d'
  116.         self.close = 'str_close_d'
  117.         self.term_dc = 'debit'
  118.         self.term = None
  119.         self.all_accounts = []
  120.         self.list_unadded_accs = []
  121.         self.unadded_spin = ''
  122.         self.selected_accs = []  # Данните, които трябва да се запишат във файл за да се маркират сметките в Treeview
  123.         self.selected_accs_amo = []  # Маркирани сметки в Treeview АМортизации
  124.         self.dict_entries = {}  # Списък с Ентритата на Активите
  125.         self.dict_entries_amo = {}  # Списък с Ентрита на Амортизации
  126.         self.get_sums = {}
  127.         self.get_sums_amo = {}
  128.         self.get_total = {'total': {'od': 0.0, 'oc': 0.0, 'td': 0.0, 'tc': 0.0, 'cd': 0.0, 'cc': 0.0}}
  129.         self.get_total_amo = {'total': {'od': 0.0, 'oc': 0.0, 'td': 0.0, 'tc': 0.0, 'cd': 0.0, 'cc': 0.0}}
  130.         self.user_ns = {'adp': 0, 'pzp': 0, 'adas': 0, 'pzas': 0, 'di': 0, 'drz': 0, 'isa': 0}
  131.         self.user_ns_amo = {'di': 0}
  132.         self.assets_re = {'adp': {'inc': 0, 'dec': 0}, 'pzp': {'inc': 0, 'dec': 0}, 'adas': {'inc': 0, 'dec': 0}, 'pzas': {'inc': 0, 'dec': 0}, 'di': {'inc': 0, 'dec': 0}, 'drz': {'inc': 0, 'dec': 0}, 'isa': {'inc': 0, 'dec': 0}}
  133.         self.amort_re = {'di': {'inc': 0, 'dec': 0}}
  134.         self.pop_message_answer = ''
  135.         # TODO -> Главен прозорец
  136.         self.title('Текущи разходи')  # TODO -> Главен прозорец
  137.         self.geometry('1300x630+200+150')  # 480
  138.         self.resizable(True, False)
  139.         self.attributes('-topmost', 'true')
  140.         # TODO -> Notebook
  141.         self.tabs = ttk.Notebook(self)  # TODO -> Табове
  142.         self.tabs.pack(pady=(1, 56), anchor='w')  # class_, cursor, padding, relief, style, takefocus
  143.         self.tab1 = Frame(self.tabs, width=550, height=506, relief=GROOVE, borderwidth=5)
  144.         self.tab1.pack()  # fill=”X” specifies, fill=”Y”
  145.         self.tabs.add(self.tab1, text=self.tab_names['act'], padding=(2, 10))  #
  146.         self.tab2 = Frame(self.tabs, width=550, height=506, relief=GROOVE, borderwidth=5, bg='white')
  147.         self.tab2.pack(fill='both', expand=1)
  148.         self.tabs.add(self.tab2, text=self.tab_names['amort'], padding=(2, 10))
  149.         self.tab3 = Frame(self.tabs, width=550, height=506, relief=GROOVE, borderwidth=5, bg='mint cream')
  150.         self.tab3.pack(fill='both', expand=1)
  151.         self.tabs.add(self.tab3, text=self.tab_names['act_p'], padding=(2, 10))
  152.         self.tab4 = Frame(self.tabs, width=550, height=506, relief=GROOVE, borderwidth=5, bg='lemon chiffon')
  153.         self.tab4.pack(fill='both', expand=1)
  154.         self.tabs.add(self.tab4, text=self.tab_names['amort_p'], padding=(2, 10))  #
  155.         self.tabs.bind('<<NotebookTabChanged>>', self.get_tab)
  156.         # TODO -> LABELS
  157.         self.widget_factory.get_label_un(self.tab1, 'с/ка: Оперативни разходи', 20, 20, 'w', 22, 'blue', bg_border='red')
  158.         self.widget_factory.get_label_un(self.tab1, 'Разходи по вид', 20, 50, 'w', 20, bg_border='red')
  159.         self.widget_factory.get_label_un(self.tab1, 'с/ка\n(сума)', 210, 40, 'w', 6, 'black', bg_border='red', j='center')
  160.         self.widget_factory.get_label_un(self.tab1, '2022\n(хил.лв)', 275, 40, 'w', 6, 'black', bg_border='red', j='center')
  161.         self.widget_factory.get_label_un(self.tab1, '2023\n(лева)', 340, 40, 'center', 11, 'black', bg_border='red', j='center')
  162.         self.widget_factory.get_label_un(self.tab1, 'с/ка:\n(код)', 460, 40, 'center', 4, 'black', bg_border='green')
  163.         self.widget_factory.get_label_un(self.tab1, '1. Суровини и материали', 20, 90, 'w', 24, bg_border='green', j='left')
  164.         self.widget_factory.get_label_un(self.tab1, '2. Външни услуги', 20, 120, 'w', 24, bg_border='green', j='left')
  165.         self.widget_factory.get_label_un(self.tab1, '3. Амортизации', 20, 150, 'w', 24, bg_border='green', j='left')
  166.         self.widget_factory.get_label_un(self.tab1, '4.1 Пенсионни осигуровки', 20, 180, 'w', 24, bg_border='green', j='left')
  167.         self.widget_factory.get_label_un(self.tab1, '4.2 Други осигуровки', 20, 210, 'w', 24, bg_border='green')
  168.         self.widget_factory.get_label_un(self.tab1, '5. Разходи за данъци', 20, 240, 'w', 24, bg_border='green')
  169.         self.widget_factory.get_label_un(self.tab1, '6.1 Обезценка на нетекущи\n       активи', 20, 270, 'w', 24, bg_border='green', j='left')
  170.         self.widget_factory.get_label_un(self.tab1, '6.2 Обезценка на текущи\n       активи', 20, 320, 'w', 24, bg_border='green', j='left')
  171.         self.widget_factory.get_label_un(self.tab1, '6.3 Провизии', 20, 370, 'w', 20, bg_border='green')
  172.         self.widget_factory.get_label_un(self.tab1, '10. Други разходи', 20, 400, 'w', 20, bg_border='green')
  173.         # TODO -> Entries
  174.         self.user_adp = self.widget_factory.get_entry(self.tab1, 280, 90, 5, 'right', name='user_adp')
  175.         self.user_adp.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_adp, "adp", "od"))
  176.         self.l_open_adp = self.widget_factory.get_label_un(self.tab1, '0', 340, 90, 'e', 11, 'black', bg_border='green', j='left', name='adp')
  177.         self.e_adp = self.widget_factory.get_entry(self.tab1, 450, 90, 9, 'left', name='adp')
  178.         self.e_adp.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_adp))
  179.         self.e_adp.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_adp))
  180.  
  181.         self.user_pzp = self.widget_factory.get_entry(self.tab1, 280, 120, 5, 'right', name='user_pzp')
  182.         self.user_pzp.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_pzp, "pzp", "od"))
  183.         self.l_open_pzp = self.widget_factory.get_label_un(self.tab1, '0', 340, 120, 'e', 11, 'black', bg_border='green', j='left')
  184.         self.e_pzp = self.widget_factory.get_entry(self.tab1, 450, 120, 9, name='pzp')
  185.         self.e_pzp.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_pzp))
  186.         self.e_pzp.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_pzp))
  187.  
  188.         self.user_adas = self.widget_factory.get_entry(self.tab1, 280, 150, 5, 'right', name='user_adas')
  189.         self.user_adas.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_adas, "adas", "od"))
  190.         self.l_open_adas = self.widget_factory.get_label_un(self.tab1, '0', 340, 150, 'e', 11, 'black', bg_border='green', j='left')
  191.         self.e_adas = self.widget_factory.get_entry(self.tab1, 450, 150, 9, name='adas')
  192.         self.e_adas.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_adas))
  193.         self.e_adas.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_adas))
  194.  
  195.         self.user_pzas = self.widget_factory.get_entry(self.tab1, 280, 180, 5, 'right', name='user_pzas')
  196.         self.user_pzas.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_pzas, "pzas", "od"))
  197.         self.l_open_pzas = self.widget_factory.get_label_un(self.tab1, '0', 340, 180, 'e', 11, 'black', bg_border='green', j='left')
  198.         self.e_pzas = self.widget_factory.get_entry(self.tab1, 450, 180, 9, name='pzas')
  199.         self.e_pzas.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_pzas))
  200.         self.e_pzas.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_pzas))
  201.  
  202.         self.user_di = self.widget_factory.get_entry(self.tab1, 280, 210, 5, 'right', name='user_di')
  203.         self.user_di.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_di, "di", "od"))
  204.         self.l_open_di = self.widget_factory.get_label_un(self.tab1, '0', 340, 210, 'e', 11, 'black', bg_border='green', j='left')
  205.         self.e_di = self.widget_factory.get_entry(self.tab1, 450, 210, 9, name='di')
  206.         self.e_di.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_di))
  207.         self.e_di.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_di))
  208.  
  209.         self.user_drz = self.widget_factory.get_entry(self.tab1, 280, 240, 5, 'right', name='user_drz')
  210.         self.user_drz.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_drz, "drz", "od"))
  211.         self.l_open_drz = self.widget_factory.get_label_un(self.tab1, '0', 340, 240, 'e', 11, 'black', bg_border='green', j='left')
  212.         self.e_drz = self.widget_factory.get_entry(self.tab1, 450, 240, 9, name='drz')
  213.         self.e_drz.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_drz))
  214.         self.e_drz.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_drz))
  215.  
  216.         self.user_isa = self.widget_factory.get_entry(self.tab1, 280, 280, 5, 'right', name='user_isa')
  217.         self.user_isa.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_isa, "isa", "od"))
  218.         self.l_open_isa = self.widget_factory.get_label_un(self.tab1, '0', 340, 280, 'e', 11, 'black', bg_border='green', j='left')
  219.         self.e_isa = self.widget_factory.get_entry(self.tab1, 450, 280, 9, name='isa')
  220.         self.e_isa.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_isa))
  221.         self.e_isa.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_isa))
  222.  
  223.         self.user_i = self.widget_factory.get_entry(self.tab1, 280, 330, 5, 'right', name='user_i')
  224.         self.user_i.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_i, "i", "od"))
  225.         self.l_open_i = self.widget_factory.get_label_un(self.tab1, '0', 340, 330, 'e', 11, 'black', bg_border='green', j='left')
  226.         self.e_i = self.widget_factory.get_entry(self.tab1, 450, 330, 9, name='i')
  227.         self.e_i.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_i))
  228.         self.e_i.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_i))
  229.         self.user_is = self.widget_factory.get_entry(self.tab1, 280, 370, 5, 'right', name='user_is')
  230.         self.user_is.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_isa, "is", "od"))
  231.         self.l_open_is = self.widget_factory.get_label_un(self.tab1, '0', 340, 370, 'e', 11, 'black', bg_border='green', j='left')
  232.         self.e_is = self.widget_factory.get_entry(self.tab1, 450, 370, 9, name='is')
  233.         self.e_is.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_is))
  234.         self.e_is.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_is))
  235.  
  236.         self.user_a = self.widget_factory.get_entry(self.tab1, 280, 400, 5, 'right', name='user_a')
  237.         self.user_a.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_isa, "a", "od"))
  238.         self.l_open_a = self.widget_factory.get_label_un(self.tab1, '0', 340, 400, 'e', 11, 'black', bg_border='green', j='left')
  239.         self.e_a = self.widget_factory.get_entry(self.tab1, 450, 400, 9, name='a')
  240.         self.e_a.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_a))
  241.         self.e_a.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_a))
  242.         # TODO -> DOWN LABELS
  243.         self.widget_factory.get_label(self.tab1, 240, 450, '2022 година', 10, 'e', font=10)
  244.         self.widget_factory.get_label(self.tab1, 350, 450, '2023 година', 10, 'e', font=10)
  245.         self.widget_factory.get_label(self.tab1, 20, 470, 'Общо разходи:', 12, 'w', font=10)
  246.         self.l_turn_d_total = self.widget_factory.get_label(self.tab1, 220, 470, 0.0, 12, 'e', color='black', font=10)
  247.         self.l_turn_c_total = self.widget_factory.get_label(self.tab1, 330, 470, 0.0, 12, 'e', color='black', font=10)
  248.         self.widget_factory.get_label_un(self, 'Налични сметки:', 720, 1, 'w', 20, 'blue', bg_color=None, bg_border='red')
  249.         # TODO -> CHECKBUTTON
  250.         self.check_1 = Checkbutton(self.tab1, variable=self.check_assets, command=lambda: self.act_c1())
  251.         self.check_1.place(x=220, y=180)
  252.         self.check_2 = Checkbutton(self.tab1, variable=self.check_amort, command=lambda: self.act_c1())
  253.         self.check_2.place(x=220, y=210)
  254.         # TODO Разходи по дейност
  255.         self.widget_factory.get_label_un(self.tab2, 'с/ка: Оперативни разходи', 20, 20, 'w', 22, 'blue',
  256.                                          bg_color='white', bg_border='red')
  257.         self.widget_factory.get_label_un(self.tab2, 'Разходи по дейности', 20, 50, 'w', 22, bg_color='white',
  258.                                          bg_border='red')
  259.         self.widget_factory.get_label_un(self.tab2, 'НС\n(хил.лв)', 275, 40, 'w', 6, 'black', bg_color='white',
  260.                                          bg_border='red', j='center')
  261.         self.widget_factory.get_label_un(self.tab2, 'НС\n(лева)', 340, 40, 'center', 11, 'black', bg_color='white',
  262.                                          bg_border='red', j='center')
  263.         self.widget_factory.get_label_un(self.tab2, 'с/ка:\n(код)', 460, 40, 'center', 4, 'black', bg_color='white',
  264.                                          bg_border='green')
  265.         self.widget_factory.get_label_un(self.tab2, '1. Основна дейност - производство\n       (на продукция / услуги)',
  266.                                          20, 100, 'w', 28, bg_color='white', bg_border='green', j='left')
  267.         self.widget_factory.get_label_un(self.tab2, '2. Спомагателна дейност', 20, 150, 'w', 26, bg_color='white',
  268.                                          bg_border='green', j='left')
  269.         self.widget_factory.get_label_un(self.tab2, '3. Търговска дейност', 20, 180, 'w', 26, bg_color='white',
  270.                                          bg_border='green', j='left')
  271.         self.widget_factory.get_label_un(self.tab2, '4.1 Административна дейност', 20, 210, 'w', 26, bg_color='white',
  272.                                          bg_border='green', j='left')
  273.         self.widget_factory.get_label_un(self.tab2, '4.2 Управленска дейност', 20, 240, 'w', 26, bg_color='white',
  274.                                          bg_border='green')
  275.         # TODO -> Entries
  276.         self.user_rod = self.widget_factory.get_entry(self.tab2, 280, 110, 5, 'right', name='user_rod')
  277.         self.user_rod.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rod, "rod", "td"))
  278.         self.l_open_rod = self.widget_factory.get_label_un(self.tab2, '0', 340, 110, 'e', 11, 'black', bg_color='white',
  279.                                                            bg_border='green', j='left')
  280.         self.e_rod = self.widget_factory.get_entry(self.tab2, 450, 110, 9, name='rod')
  281.         self.e_rod.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rod))
  282.         self.e_rod.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rod))
  283.  
  284.         self.user_rsd = self.widget_factory.get_entry(self.tab2, 280, 150, 5, 'right', name='user_rsd')
  285.         self.user_rsd.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rsd, "rsd", "td"))
  286.         self.l_open_rsd = self.widget_factory.get_label_un(self.tab2, '0', 340, 150, 'e', 11, 'black', bg_color='white',
  287.                                                            bg_border='green', j='left')
  288.         self.e_rsd = self.widget_factory.get_entry(self.tab2, 450, 150, 9, name='rsd')
  289.         self.e_rsd.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rsd))
  290.         self.e_rsd.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rsd))
  291.  
  292.         self.user_rtd = self.widget_factory.get_entry(self.tab2, 280, 180, 5, 'right', name='user_rtd')
  293.         self.user_rtd.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rtd, "rtd", "td"))
  294.         self.l_open_rtd = self.widget_factory.get_label_un(self.tab2, '0', 340, 180, 'e', 11, 'black', bg_color='white',
  295.                                                            bg_border='green', j='left')
  296.         self.e_rtd = self.widget_factory.get_entry(self.tab2, 450, 180, 9, name='rtd')
  297.         self.e_rtd.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rtd))
  298.         self.e_rtd.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rtd))
  299.  
  300.         self.user_rad = self.widget_factory.get_entry(self.tab2, 280, 210, 5, 'right', name='user_rad')
  301.         self.user_rad.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rad, "rad", "td"))
  302.         self.l_open_rad = self.widget_factory.get_label_un(self.tab2, '0', 340, 210, 'e', 11, 'black', bg_color='white',
  303.                                                            bg_border='green', j='left')
  304.         self.e_rad = self.widget_factory.get_entry(self.tab2, 450, 210, 9, name='rad')
  305.         self.e_rad.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rad))
  306.         self.e_rad.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rad))
  307.  
  308.         self.user_rud = self.widget_factory.get_entry(self.tab2, 280, 240, 5, 'right', name='user_rud')
  309.         self.user_rud.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rud, "rud", "td"))
  310.         self.l_open_rud = self.widget_factory.get_label_un(self.tab2, '0', 340, 240, 'e', 11, 'black', bg_color='white',
  311.                                                            bg_border='green', j='left')
  312.         self.e_rud = self.widget_factory.get_entry(self.tab2, 450, 240, 9, name='rud')
  313.         self.e_rud.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rud))
  314.         self.e_rud.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rud))
  315.         # TODO -> DOWN LABELS
  316.         self.widget_factory.get_label(self.tab2, 90, 430, 'В началното', 12, 'e', font=10, bg_color='white')
  317.         self.widget_factory.get_label(self.tab2, 195, 430, 'Увеличение', 12, 'e', font=10, bg_color='white')
  318.         self.widget_factory.get_label(self.tab2, 300, 430, 'Намаление', 12, 'e', font=10, bg_color='white')
  319.         self.widget_factory.get_label(self.tab2, 410, 430, 'В края', 12, 'e', font=10, bg_color='white')
  320.         self.widget_factory.get_label(self.tab2, 20, 450, 'Група III.:', 10, 'w', font=10, bg_color='white')
  321.         self.l_amo_open_total = self.widget_factory.get_label(self.tab2, 90, 450, 0.0, 12, 'e', color='black',
  322.                                                               font=10, bg_color='white')
  323.         self.l_amo_turn_d_total = self.widget_factory.get_label(self.tab2, 195, 450, 0.0, 12, 'e', color='black',
  324.                                                                 font=10, bg_color='white')
  325.         self.l_amo_turn_c_total = self.widget_factory.get_label(self.tab2, 300, 450, 0.0, 12, 'e', color='black',
  326.                                                                 font=10, bg_color='white')
  327.         self.l_amo_close_total = self.widget_factory.get_label(self.tab2, 410, 450, 0.0, 12, 'e', color='black',
  328.                                                                font=10, bg_color='white')
  329.         # TODO Финансови разходи
  330.         self.widget_factory.get_label_un(self.tab3, 'с/ка: ФИНАНСОВИ РАЗХОДИ', 20, 20, 'w', 26, 'black',
  331.                                          bg_color='mint cream', bg_border='red')
  332.         self.widget_factory.get_label_un(self.tab3, 'Увеличение\n(лева)', 280, 40, 'w', 10, 'black',
  333.                                          bg_color='mint cream', bg_border='red', j='center')
  334.         self.widget_factory.get_label_un(self.tab3, 'Намаление\n(лева)', 370, 40, 'w', 10, 'black',
  335.                                          bg_color='mint cream', bg_border='red', j='center')
  336.         self.widget_factory.get_label_un(self.tab3, 'Салдо\n(разлика)', 470, 40, 'w', 7, 'black', bg_color='mint cream',
  337.                                          bg_border='green')
  338.         self.widget_factory.get_label_un(self.tab3, '1. Лихви по кредити', 20, 100, 'w', 20, bg_color='mint cream',
  339.                                          bg_border='green', j='left')
  340.         self.widget_factory.get_label_un(self.tab3, '2. Лихви по ДОПК', 20, 130, 'w', 20, bg_color='mint cream',
  341.                                          bg_border='green', j='left')
  342.         self.widget_factory.get_label_un(self.tab3, '3. Други лихви', 20, 160, 'w', 20, bg_color='mint cream',
  343.                                          bg_border='green', j='left')
  344.         self.widget_factory.get_label_un(self.tab3, '4. Обезценка на валута', 20, 190, 'w', 20, bg_color='mint cream',
  345.                                          bg_border='green', j='left')
  346.         self.widget_factory.get_label_un(self.tab3, '5. Обезценка на финансови активи', 20, 220, 'w', 28,
  347.                                          bg_color='mint cream', bg_border='green')
  348.         self.widget_factory.get_label_un(self.tab3, '6. Провизии на рискови активи', 20, 250, 'w', 28,
  349.                                          bg_color='mint cream', bg_border='green')
  350.         self.widget_factory.get_label_un(self.tab3, '7. Операции с финансови активи', 20, 280, 'w', 28,
  351.                                          bg_color='mint cream', bg_border='green')
  352.         self.widget_factory.get_label_un(self.tab3, '8. Други финансови разходи', 20, 310, 'w', 28,
  353.                                          bg_color='mint cream', bg_border='green')
  354.  
  355.         # TODO -> Entries
  356.         self.user_rlk = self.widget_factory.get_entry(self.tab3, 280, 100, 5, 'right', name='user_rlk')
  357.         self.user_rlk.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rlk, "rlk", "td"))
  358.         self.l_open_rlk = self.widget_factory.get_label_un(self.tab3, '0', 340, 100, 'e', 11, 'black',
  359.                                                            bg_color='mint cream', bg_border='green', j='left',
  360.                                                            name='rlk')
  361.         self.e_rlk = self.widget_factory.get_entry(self.tab3, 450, 100, 9, 'left', name='rlk')
  362.         self.e_rlk.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rlk))
  363.         self.e_rlk.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rlk))
  364.  
  365.         self.user_rldopk = self.widget_factory.get_entry(self.tab3, 280, 130, 5, 'right', name='user_rldopk')
  366.         self.user_rldopk.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rldopk, "rldopk", "td"))
  367.         self.l_open_rlk = self.widget_factory.get_label_un(self.tab3, '0', 340, 130, 'e', 11, 'black',
  368.                                                            bg_color='mint cream', bg_border='green', j='left',
  369.                                                            name='rldopk')
  370.         self.e_rldopk = self.widget_factory.get_entry(self.tab3, 450, 130, 9, 'left', name='rldopk')
  371.         self.e_rldopk.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rldopk))
  372.         self.e_rldopk.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rldopk))
  373.  
  374.         self.user_rdrl = self.widget_factory.get_entry(self.tab3, 280, 160, 5, 'right', name='user_rdrl')
  375.         self.user_rdrl.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rdrl, "rdrl", "td"))
  376.         self.l_open_rlk = self.widget_factory.get_label_un(self.tab3, '0', 340, 160, 'e', 11, 'black',
  377.                                                            bg_color='mint cream', bg_border='green', j='left',
  378.                                                            name='rdrl')
  379.         self.e_rdrl = self.widget_factory.get_entry(self.tab3, 450, 160, 9, 'left', name='rdrl')
  380.         self.e_rdrl.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rdrl))
  381.         self.e_rdrl.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rdrl))
  382.  
  383.         self.user_rov = self.widget_factory.get_entry(self.tab3, 280, 190, 5, 'right', name='user_rov')
  384.         self.user_rov.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rov, "rov", "td"))
  385.         self.l_open_rlk = self.widget_factory.get_label_un(self.tab3, '0', 340, 190, 'e', 11, 'black',
  386.                                                            bg_color='mint cream', bg_border='green', j='left',
  387.                                                            name='rov')
  388.         self.e_rov = self.widget_factory.get_entry(self.tab3, 450, 190, 9, 'left', name='rov')
  389.         self.e_rov.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rov))
  390.         self.e_rov.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rov))
  391.  
  392.         self.user_rofa = self.widget_factory.get_entry(self.tab3, 280, 220, 5, 'right', name='user_rofa')
  393.         self.user_rofa.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rofa, "rofa", "td"))
  394.         self.l_open_rofa = self.widget_factory.get_label_un(self.tab3, '0', 340, 220, 'e', 11, 'black',
  395.                                                             bg_color='mint cream', bg_border='green', j='left',
  396.                                                             name='rofa')
  397.         self.e_rofa = self.widget_factory.get_entry(self.tab3, 450, 220, 9, 'left', name='rofa')
  398.         self.e_rofa.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rofa))
  399.         self.e_rofa.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rofa))
  400.  
  401.         self.user_pra = self.widget_factory.get_entry(self.tab3, 280, 250, 5, 'right', name='user_pra')
  402.         self.user_pra.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_pra, "pra", "td"))
  403.         self.l_open_pra = self.widget_factory.get_label_un(self.tab3, '0', 340, 250, 'e', 11, 'black',
  404.                                                            bg_color='mint cream', bg_border='green', j='left',
  405.                                                            name='pra')
  406.         self.e_pra = self.widget_factory.get_entry(self.tab3, 450, 250, 9, 'left', name='pra')
  407.         self.e_pra.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_pra))
  408.         self.e_pra.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_pra))
  409.  
  410.         self.user_ofa = self.widget_factory.get_entry(self.tab3, 280, 280, 5, 'right', name='user_ofa')
  411.         self.user_ofa.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_pra, "ofa", "td"))
  412.         self.l_open_ofa = self.widget_factory.get_label_un(self.tab3, '0', 340, 280, 'e', 11, 'black',
  413.                                                            bg_color='mint cream', bg_border='green', j='left',
  414.                                                            name='ofa')
  415.         self.e_ofa = self.widget_factory.get_entry(self.tab3, 450, 280, 9, 'left', name='ofa')
  416.         self.e_ofa.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_ofa))
  417.         self.e_ofa.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_ofa))
  418.  
  419.         self.user_drfr = self.widget_factory.get_entry(self.tab3, 280, 310, 5, 'right', name='user_drfr')
  420.         self.user_drfr.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_drfr, "drfr", "td"))
  421.         self.l_open_drfr = self.widget_factory.get_label_un(self.tab3, '0', 340, 310, 'e', 11, 'black',
  422.                                                             bg_color='mint cream', bg_border='green', j='left',
  423.                                                             name='drfr')
  424.         self.e_drfr = self.widget_factory.get_entry(self.tab3, 450, 310, 9, 'left', name='drfr')
  425.         self.e_drfr.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_drfr))
  426.         self.e_drfr.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_drfr))
  427.  
  428.         # TODO Коригиращи суми
  429.         self.widget_factory.get_label_un(self.tab4, 'с/ка: КОРИГИРАЩИ СУМИ', 20, 20, 'w', 24, 'black',
  430.                                          bg_color='lemon chiffon', bg_border='red')
  431.         self.widget_factory.get_label_un(self.tab4, 'Увеличение\n(лева)', 280, 40, 'w', 10, 'black',
  432.                                          bg_color='lemon chiffon', bg_border='red', j='center')
  433.         self.widget_factory.get_label_un(self.tab4, 'Намаление\n(лева)', 370, 40, 'w', 10, 'black',
  434.                                          bg_color='lemon chiffon', bg_border='red', j='center')
  435.         self.widget_factory.get_label_un(self.tab4, 'Салдо\n(разлика)', 470, 40, 'w', 7, 'black',
  436.                                          bg_color='lemon chiffon', bg_border='green')
  437.         self.widget_factory.get_label_un(self.tab4, '1. Намаление на запасите от\n       продукция', 20, 100, 'w', 26,
  438.                                          bg_color='lemon chiffon', bg_border='green')
  439.         self.widget_factory.get_label_un(self.tab4, '2. Намаление на незавършеното\n       производство', 20, 150, 'w',
  440.                                          26, bg_color='lemon chiffon', bg_border='green')
  441.         self.widget_factory.get_label_un(self.tab4, '3. Балансова стойност на про-\n      дадените нетекущи активи', 20,
  442.                                          200, 'w', 26, bg_color='lemon chiffon', bg_border='green')
  443.         self.widget_factory.get_label_un(self.tab4, '4. Балансова стойност на про-\n      дадените текущи активи', 20,
  444.                                          250, 'w', 26, bg_color='lemon chiffon', bg_border='green')
  445.         self.widget_factory.get_label_un(self.tab4, '5. Разходи (премии) за данъци\n       от печалбата', 20, 300, 'w',
  446.                                          26, bg_color='lemon chiffon', bg_border='green')
  447.         self.widget_factory.get_label_un(self.tab4, '6. Алтернативни данъци', 20, 350, 'w', 26,
  448.                                          bg_color='lemon chiffon', bg_border='green')
  449.         # TODO -> Entries
  450.         self.turn_d_amo_di = self.widget_factory.get_entry(self.tab4, 280, 300, 12, 'right', name='d_amo_di')
  451.         self.turn_d_amo_di.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_d_amo_di, "di", "inc"))
  452.         self.turn_c_amo_di = self.widget_factory.get_entry(self.tab4, 370, 300, 12, 'right', name='c_amo_di')
  453.         self.turn_c_amo_di.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_c_amo_di, "di", "dec"))
  454.         self.amo_di = self.widget_factory.get_label(self.tab4, 490, 300, '0', 3, 'e', color='red', font=10,
  455.                                                     bg_color='lemon chiffon')
  456.         # TODO -> CHECKBUTTON
  457.         self.check_3 = Checkbutton(self.tab3, variable=self.check_amort, command=lambda: self.act_c1(), bg='mint cream')
  458.         self.check_3.place(x=220, y=100)
  459.         self.check_4 = Checkbutton(self.tab3, variable=self.check_amort, command=lambda: self.act_c1(), bg='mint cream')
  460.         self.check_4.place(x=220, y=130)
  461.         self.check_5 = Checkbutton(self.tab3, variable=self.check_amort, command=lambda: self.act_c1(), bg='mint cream')
  462.         self.check_5.place(x=220, y=160)
  463.         # TODO TREEVIEW
  464.         self.tv_frame = Frame(self)
  465.         self.tv_frame.place(x=560, y=30)
  466.         self.dict_columns = {"code_i": 'код', "acc_name": 'Сметка', 'open_di': 'НС Дебит', 'turn_di': 'Оборот Дт',
  467.                              'turn_ci': 'Оборот Кт', "close_di": 'КС Дебит'}
  468.         self.treeview_acc = self.widget_factory.get_treeview(self.tv_frame, **self.dict_columns)
  469.         self.treeview_acc.config(selectmode='browse')
  470.         # TODO SCROLLBAR
  471.         self.scr_bar = Scrollbar(self.tv_frame, orient=VERTICAL)
  472.         self.scr_bar.pack(side=RIGHT, fill=Y)
  473.         self.treeview_acc.config(yscrollcommand=self.scr_bar.set)
  474.         self.scr_bar.config(command=self.treeview_acc.yview, bg="red", activebackground="orange")
  475.         self.treeview_acc.bind('<ButtonRelease-1>', lambda e: self.on_selected_acc(self.treeview_acc))
  476.         self.treeview_acc.pack(side=LEFT)
  477.         # TODO Spinboxes
  478.         self.min_spin_2 = self.min_top_group_digits
  479.         self.max_spin_2 = self.max_top_group_digits + self.max_groups
  480.         self.var_spin_1 = StringVar(self)
  481.         self.list_spin_1 = ['всички', 'недобавени']
  482.         self.spin_1 = self.widget_factory.get_list_spinbox(self, self.list_spin_1, 12, 'center',
  483.                                                            self.var_spin_1, 560, 4)
  484.         self.spin_1.configure(command=lambda: self.fill_treeview(term_dc=self.term_dc))
  485.         print("self.min_spin_2", self.min_spin_2, "self.max_depth_rx", self.max_depth_rx)
  486.         self.var_spin_2 = StringVar(self, value=str(self.max_depth_rx))
  487.         self.spin_2 = self.widget_factory.get_spinbox(self, self.min_spin_2, str(self.max_depth_rx), 4,
  488.                                                       'center', self.var_spin_2, 660, 4)
  489.         self.spin_2.configure(command=lambda: self.fill_treeview(term_dc=self.term_dc))
  490.         # TODO Buttons
  491.         # Button Добави
  492.         self.b_add = self.widget_factory.get_save_button(self, 466, 580, text='ДОБАВИ')  # 460, 435
  493.         self.b_add.bind('<ButtonRelease-1>', lambda e: self.on_add())
  494.         # Button Корекции
  495.         self.b_note = self.widget_factory.get_correction_button(self, 360, 580)
  496.         self.b_note.bind('<ButtonRelease-1>', lambda e: self.on_correction())
  497.         # Button Помощ
  498.         self.b_help = self.widget_factory.get_help_button(self, 20, 580)
  499.         self.b_help.bind('<ButtonRelease-1>')
  500.         # Button Save
  501.         self.b_save = self.widget_factory.get_ok_button(self, 830, 580)
  502.         self.b_save.bind('<ButtonRelease-1>', lambda e: self.on_save())
  503.         # Button Отказ
  504.         self.b_exit = self.widget_factory.get_correction_esc(self, 930, 580)
  505.         self.b_exit.config(command=self.destroy)
  506.  
  507.     def get_tab(self, *args):
  508.         self.current_tab = self.tabs.tab(self.tabs.select(), "text")
  509.         # if self.current_tab == 'Активи' or self.current_tab == 'Преоценка активи':
  510.         self.open, self.close = 'str_open_d', 'str_close_d'
  511.         self.treeview_acc.heading('#3', text='НС Дебит  ')
  512.         self.treeview_acc.heading('#6', text='КС Дебит  ')
  513.         self.term_dc = 'debit'
  514.         # if self.current_tab == 'Активи':
  515.         self.treeview_acc.configure(selectmode='browse')
  516.         self.e_adp.focus_set()
  517.         self.b_add['state'] = 'normal'
  518.         self.b_note['state'] = 'normal'
  519.         # else:
  520.         #     self.treeview_acc.configure(selectmode='none')
  521.         #     self.b_note['state'] = 'disabled'
  522.  
  523.         self.fill_treeview(term_dc=self.term_dc)
  524.         self.fill_labels()
  525.  
  526.     def set_pop_message_answer(self, answer):
  527.         self.pop_message_answer = answer
  528.  
  529.     def on_save(self):
  530.         # TODO -> Попълваме Началното салдо, въведено от потребителя:
  531.         for entry in self.user_ns:
  532.             self.acc_rec_rx[entry]['ns'] = self.user_ns[entry]
  533.         for entry in self.user_ns_amo:
  534.             self.acc_rec_rx[entry]['ns_amo'] = self.user_ns_amo[entry]
  535.         # TODO -> Попълваме сметките, по Ентрита на активи и амортизации
  536.         if not self.dict_entries:  # Речника е празен
  537.             for entry in self.acc_rec_rx:
  538.                 self.acc_rec_rx[entry]['assets'].clear()
  539.         if not self.dict_entries_amo:  # Речника е празен
  540.             for entry in self.acc_rec_rx:
  541.                 self.acc_rec_rx[entry]['amort'].clear()
  542.         for entry in self.dict_entries:
  543.             if self.dict_entries[entry] is None:
  544.                 self.dict_entries[entry] = []
  545.             self.acc_rec_rx[entry]['assets'] = self.dict_entries[entry]
  546.         for entry in self.dict_entries_amo:
  547.             if self.dict_entries_amo[entry] is None:
  548.                 self.dict_entries_amo[entry] = []
  549.             self.acc_rec_rx[entry]['amort'] = self.dict_entries_amo[entry]
  550.         # TODO -> попълване на сумите на преоценката
  551.         for entry in self.assets_re:
  552.             for dir in self.assets_re[entry]:
  553.                 self.acc_rec_rx[entry]['assets_re'][dir] = self.assets_re[entry][dir]
  554.         for entry in self.amort_re:
  555.             for dir in self.amort_re[entry]:
  556.                 self.acc_rec_rx[entry]['amort_re'][dir] = self.amort_re[entry][dir]
  557.         print('self.acc_rec_rx: ', self.acc_rec_rx)
  558.  
  559.         json_file_io = JsonFileIo(file_name=registry['orx_import_form_acc_rec_orx_file_name'])
  560.         json_file_io.write_content(self.acc_rec_rx)
  561.         # TODO -> Проверка за недобавена сметка и съобщение !!!!!
  562.         if len(self.list_unadded_accs) > 0:
  563.             # TODO -> Показва pop_message "Има недобавени сметки !
  564.             pop_message = self.widget_factory.get_pop_message(self, lambda answer: self.set_pop_message_answer(answer),
  565.                                                               "Има недобавени сметки !", 1, 'red')
  566.             self.wait_window(pop_message.pop)
  567.             # TODO -> Ако "ДА"
  568.             self.destroy()
  569.             return
  570.         else:
  571.             pop_message = self.widget_factory.get_pop_message(self, lambda answer: self.set_pop_message_answer(answer),
  572.                                                               "Всички сметки са добавени !", 1, 'green')
  573.             self.wait_window(pop_message.pop)
  574.             # TODO -> Ако "ДА"
  575.             self.destroy()
  576.             return
  577.  
  578.     def on_correction(self):
  579.         if self.b_note['state'] == 'disabled':
  580.             return
  581.         if self.current_tab == 'Активи':
  582.             # TODO -> Махаме маркировката на Treeview и забраната за селекция
  583.             for code in self.selected_accs:
  584.                 self.treeview_acc.tag_configure(code, background='lightgrey')
  585.             self.selected_accs.clear()
  586.             # TODO -> Изтриваме стойностите на речника, на ентритата и лейбълите
  587.             self.dict_entries.clear()
  588.             self.get_total = {'total': {'od': 0.0, 'oc': 0.0, 'td': 0.0, 'tc': 0.0, 'cd': 0.0, 'cc': 0.0}}
  589.             self.l_open_adp['text'] = 0
  590.             self.l_open_pzp['text'] = 0
  591.             self.l_open_adas['text'] = 0
  592.             self.l_open_pzas['text'] = 0
  593.             self.l_open_di['text'] = 0
  594.             self.l_open_drz['text'] = 0
  595.             self.l_open_isa['text'] = 0
  596.             # TODO -> На преоценките лейбъли ???
  597.             self.adp['text'] = 0
  598.             self.pzp['text'] = 0
  599.             self.adas['text'] = 0
  600.             self.pzas['text'] = 0
  601.             self.di['text'] = 0
  602.             self.drz['text'] = 0
  603.             self.isa['text'] = 0
  604.  
  605.         elif self.current_tab == 'Амортизации':
  606.             # TODO -> Махаме маркировката на Treeview и забраната за селекция
  607.             for code in self.selected_accs_amo:
  608.                 self.treeview_acc.tag_configure(code, background='lightgrey')
  609.             self.selected_accs_amo.clear()
  610.             # TODO -> Изтриваме стойностите на речника, на ентритата и лейбълите
  611.             self.dict_entries_amo.clear()
  612.             self.get_total_amo = {'total': {'od': 0.0, 'oc': 0.0, 'td': 0.0, 'tc': 0.0, 'cd': 0.0, 'cc': 0.0}}
  613.             self.l_open_amo_di['text'] = 0
  614.             # TODO ?????
  615.             self.amo_di['text'] = 0
  616.  
  617.         self.fill_labels()
  618.  
  619.         self.fill_treeview(term_dc=self.term_dc)
  620.  
  621.     # TODO -> Преоценка
  622.     def revaluations(self, re_val: Entry, key1: str, key2: str):
  623.         revaluation = re_val.get()
  624.         if revaluation == '':
  625.             revaluation = 0
  626.         if not revaluation.isdigit() or revaluation.isalpha():
  627.             return
  628.         if self.current_tab == 'Преоценка активи':
  629.             self.assets_re[key1][key2] = int(revaluation)
  630.         elif self.current_tab == 'Преоценка амортизации':
  631.             self.amort_re[key1][key2] = int(revaluation)
  632.         print('self.assets_re in revaluation: ', self.assets_re)
  633.         print('self.amort_re in revaluation: ', self.amort_re)
  634.  
  635.     # TODO -> ЗА разлики между НС от потребителя и НС от сметките
  636.     def update_state_open_bal(self, open_bal: Entry, key1: str, key2: str): # self.user_s, s, od
  637.         name_entry = open_bal.winfo_name()  # user_s
  638.         print('name_entry: ', name_entry)
  639.         user_1000 = open_bal.get()  # 55
  640.         try:
  641.             user_1000 = int(user_1000)
  642.         except:
  643.             user_1000 = 0
  644.         calc = self.get_sum_string(key1, key2)  # s  od
  645.         calc_1000 = int(round(calc / 1000))
  646.         if user_1000 == calc_1000:
  647.             # TODO оцвети нещо
  648.             open_bal.configure(bg='white')
  649.         else:
  650.             open_bal.configure(bg='red')
  651.         # TODO -> Да се попълни речник с НС, въведени от потребителя !
  652.         if self.current_tab == 'Активи':
  653.             self.user_ns[key1] = user_1000
  654.         elif self.current_tab == 'Амортизации':
  655.             self.user_ns_amo[key1] = user_1000
  656.         if name_entry == 'user_adp':
  657.             self.adp['text'] = user_1000 - calc_1000
  658.             print("self.acc_rec_rx", self.acc_rec_rx)
  659.             self.acc_rec_rx['adp']['assets_re']['diff'] = user_1000 - calc_1000
  660.         elif name_entry == 'user_pzp':
  661.             self.pzp['text'] = int(user_1000 - calc_1000)
  662.             self.acc_rec_rx['pzp']['assets_re']['diff'] = int(user_1000 - calc_1000)
  663.         elif name_entry == 'user_adas':
  664.             self.adas['text'] = int(user_1000 - calc_1000)
  665.             self.acc_rec_rx['adas']['assets_re']['diff'] = int(user_1000 - calc_1000)
  666.         elif name_entry == 'user_pzas':
  667.             self.pzas['text'] = int(user_1000 - calc_1000)
  668.             self.acc_rec_rx['pzas']['assets_re']['diff'] = int(user_1000 - calc_1000)
  669.         elif name_entry == 'user_di':
  670.             self.di['text'] = int(user_1000 - calc_1000)
  671.             self.acc_rec_rx['di']['assets_re']['diff'] = int(user_1000 - calc_1000)
  672.         elif name_entry == 'user_drz':
  673.             self.drz['text'] = int(user_1000 - calc_1000)
  674.             self.acc_rec_rx['drz']['assets_re']['diff'] = int(user_1000 - calc_1000)
  675.         elif name_entry == 'user_isa':
  676.             self.isa['text'] = int(user_1000 - calc_1000)
  677.             self.acc_rec_rx['isa']['assets_re']['diff'] = int(user_1000 - calc_1000)
  678.  
  679.         elif name_entry == 'user_amo_di':
  680.             self.amo_di['text'] = int(user_1000 - calc_1000)
  681.             self.acc_rec_rx['di']['amort_re']['diff'] = int(user_1000 - calc_1000)
  682.  
  683.     def get_sum_string(self, key1, key2):
  684.         if self.current_tab == 'Активи':
  685.             if key1 in self.get_sums:
  686.                 return self.get_sums[key1][key2]
  687.         elif self.current_tab == 'Амортизации':
  688.             if key1 in self.get_sums_amo:
  689.                 return self.get_sums_amo[key1][key2]
  690.         return 0
  691.  
  692.     def fill_labels(self):
  693.         for entry in self.dict_entries_amo:
  694.             if self.dict_entries_amo[entry] is None:
  695.                 self.dict_entries_amo[entry] = []
  696.         for entry in self.dict_entries:
  697.             if self.dict_entries[entry] is None:
  698.                 self.dict_entries[entry] = []
  699.         if self.current_tab == 'Активи':
  700.             if len(self.dict_entries) > 0:
  701.                 self.get_sums, self.get_total = self.mapped_calculations.get_sum_list_accounts(self.dict_entries)
  702.                 for entr in self.get_sums:
  703.                     if entr == 'adp':
  704.                         self.l_open_adp['text'] = f"{self.get_sums['adp']['td']:,.2f}".replace(',', ' ')
  705.                         self.update_state_open_bal(self.user_adp, "adp", "td")
  706.                     elif entr == 'pzp':
  707.                         self.l_open_pzp['text'] = f"{self.get_sums['pzp']['td']:,.2f}".replace(',', ' ')
  708.                         self.update_state_open_bal(self.user_pzp, "pzp", "td")
  709.                     elif entr == 'adas':
  710.                         self.l_open_adas['text'] = f"{self.get_sums['adas']['td']:,.2f}".replace(',', ' ')
  711.                         self.update_state_open_bal(self.user_adas, "adas", "td")
  712.                     elif entr == 'pzas':
  713.                         self.l_open_pzas['text'] = f"{self.get_sums['pzas']['td']:,.2f}".replace(',', ' ')
  714.                         self.update_state_open_bal(self.user_pzas, "pzas", "td")
  715.                     elif entr == 'di':
  716.                         self.l_open_di['text'] = f"{self.get_sums['di']['td']:,.2f}".replace(',', ' ')
  717.                         self.update_state_open_bal(self.user_di, "di", "td")
  718.                     elif entr == 'drz':
  719.                         self.l_open_drz['text'] = f"{self.get_sums['drz']['td']:,.2f}".replace(',', ' ')
  720.                         self.update_state_open_bal(self.user_drz, "drz", "td")
  721.                     elif entr == 'isa':
  722.                         self.l_open_isa['text'] = f"{self.get_sums['isa']['td']:,.2f}".replace(',', ' ')
  723.                         self.update_state_open_bal(self.user_isa, "isa", "td")
  724.  
  725.             self.l_open_total['text'] = f"{self.get_total['total']['od']:,.2f}".replace(',', ' ')
  726.             self.l_turn_d_total['text'] = f"{self.get_total['total']['td']:,.2f}".replace(',', ' ')
  727.             self.l_turn_c_total['text'] = f"{self.get_total['total']['tc']:,.2f}".replace(',', ' ')
  728.             self.l_close_total['text'] = f"{self.get_total['total']['cd']:,.2f}".replace(',', ' ')
  729.         elif self.current_tab == 'Амортизации':
  730.             if len(self.dict_entries_amo) > 0:
  731.                 self.get_sums_amo, self.get_total_amo =\
  732.                     self.mapped_calculations.get_sum_list_accounts(self.dict_entries_amo)
  733.                 for entr in self.get_sums_amo:
  734.                     if entr == 'di':
  735.                         self.l_open_amo_di['text'] = f"{self.get_sums_amo['di']['oc']:,.2f}".replace(',', ' ')
  736.                         self.update_state_open_bal(self.user_amo_di, "di", "oc")
  737.  
  738.             self.l_amo_open_total['text'] = f"{self.get_total_amo['total']['oc']:,.2f}".replace(',', ' ')
  739.             self.l_amo_turn_d_total['text'] = f"{self.get_total_amo['total']['td']:,.2f}".replace(',', ' ')
  740.             self.l_amo_turn_c_total['text'] = f"{self.get_total_amo['total']['tc']:,.2f}".replace(',', ' ')
  741.             self.l_amo_close_total['text'] = f"{self.get_total_amo['total']['cc']:,.2f}".replace(',', ' ')
  742.  
  743.     def on_add(self):
  744.         if self.current_tab == 'Активи':
  745.             acc_code = self.last_entry.get()  # '203'
  746.             if acc_code is None or acc_code == '':
  747.                 return
  748.             self.selected_accs.append(list(self.treeview_acc.selection()))  # current_selection:  ('200',)
  749.             # TODO -> На името на Entry да добавим сметката
  750.             name_entry = self.last_entry.winfo_name()
  751.             if name_entry not in self.dict_entries:
  752.                 self.dict_entries[name_entry] = ()
  753.             self.dict_entries[name_entry] += self.treeview_acc.selection()  # Добавям маркираната сметка
  754.             # TODO -> Добавяне на децата и родителите на добавената сметка
  755.             all_children = self.account_tree.get_all_children(acc_code)  # all_children:  ['200', '203', '205']
  756.             all_parents = self.account_tree.get_all_parents(acc_code)  # acc_code = 223
  757.             self.selected_accs.extend(all_children)
  758.             self.selected_accs.extend(all_parents)
  759.             # TODO -> След добавяне да се изпразват всички ентрита, а не само добавеното !!!!!
  760.             if self.e_adp.get() != '': self.e_adp.delete(0, 'end')
  761.             if self.e_pzp.get() != '': self.e_pzp.delete(0, 'end')
  762.             if self.e_adas.get() != '': self.e_adas.delete(0, 'end')
  763.             if self.e_pzas.get() != '': self.e_pzas.delete(0, 'end')
  764.             if self.e_di.get() != '': self.e_di.delete(0, 'end')
  765.             if self.e_drz.get() != '': self.e_drz.delete(0, 'end')
  766.             if self.e_isa.get() != '': self.e_isa.delete(0, 'end')
  767.  
  768.         elif self.current_tab == 'Амортизации':
  769.             acc_code = self.last_entry.get()  # '203'
  770.             if acc_code is None or acc_code == '':
  771.                 return
  772.             self.selected_accs_amo.append(list(self.treeview_acc.selection()))
  773.             # TODO -> На името на Entry да добавим сметката
  774.             name_entry = self.last_entry.winfo_name()
  775.             if name_entry not in self.dict_entries_amo:
  776.                 self.dict_entries_amo[name_entry] = ()
  777.             self.dict_entries_amo[name_entry] += self.treeview_acc.selection()
  778.             # TODO -> Добавяне на децата и родителите на добавената сметка
  779.             all_children = self.account_tree.get_all_children(acc_code)  # all_children:  ['200', '203']
  780.             all_parents = self.account_tree.get_all_parents(acc_code)  # acc_code = 223
  781.             self.selected_accs_amo.extend(all_children)
  782.             self.selected_accs_amo.extend(all_parents)
  783.             # TODO -> След добавяне да се изпразват всички ентрита, а не само добавеното !!!!!
  784.             if self.e_amo_di.get() != '': self.e_amo_di.delete(0, 'end')
  785.  
  786.         self.fill_labels()
  787.         # TODO -> Попълваме Treeview
  788.         self.fill_treeview(term_dc=self.term_dc)
  789.  
  790.     def act_c1(self):
  791.         if self.check_assets.get() == 1:  # state: must be normal, disabled, or hidden
  792.             self.tabs.tab(self.tab3, state='normal')
  793.         # elif self.check_assets.get() == 0:
  794.         #     self.tabs.tab(self.tab3, state='hidden')
  795.  
  796.     def act_c2(self):
  797.         if self.check_amort.get() == 1:  # state: must be normal, disabled, or hidden
  798.             self.tabs.tab(self.tab4, state='normal')
  799.         # elif self.check_amort.get() == 0:
  800.         #     self.tabs.tab(self.tab4, state='hidden')
  801.  
  802.     def verify_selection(self):  # Забрана за маркиране
  803.         for code in self.selected_accs:
  804.             if self.treeview_acc.exists(code):
  805.                 self.treeview_acc.selection_remove(code)
  806.         for code in self.selected_accs_amo:
  807.             if self.treeview_acc.exists(code):
  808.                 self.treeview_acc.selection_remove(code)
  809.  
  810.     def on_selected_acc(self, source_treeview):
  811.         self.verify_selection()
  812.         current_item = source_treeview.focus()
  813.         if current_item in self.selected_accs or current_item in self.selected_accs_amo:  # <class 'tuple'>
  814.             return
  815.         values = source_treeview.item(current_item)["values"]
  816.         if not isinstance(values, list):
  817.             return
  818.         code = values[0]
  819.         self.last_entry.delete(0, END)
  820.         self.last_entry.insert(0, code)
  821.  
  822.     def entry_on_focus(self, entry):
  823.         self.last_entry = entry
  824.  
  825.     def on_entry_key_release(self, entry):
  826.         self.last_entry = entry
  827.         entry_text = entry.get()
  828.         if len(entry_text) < 2:
  829.             self.fill_treeview(term_dc=self.term_dc)
  830.             return
  831.         term = entry_text
  832.         self.fill_treeview(term=term, term_dc=self.term_dc)
  833.  
  834.     def orx(self):
  835.         try:
  836.             json_file_io = JsonFileIo(file_name=registry["orx_import_form_acc_rec_orx_file_name"])
  837.             tmp_acc_rec_dma = json_file_io.read_content()
  838.             if tmp_acc_rec_dma is not None:
  839.                 self.acc_rec_rx = tmp_acc_rec_dma
  840.             self.refill_form()
  841.             self.get_tab()  # Рефрешва таба, попълва self.current_tab
  842.         except:
  843.             pass
  844.         self.fill_treeview(term_dc=self.term_dc)
  845.         self.mainloop()
  846.  
  847.     def refill_form(self):
  848.         # TODO -> Попълваме Treeview с маркирани и забранени за селектиране сметки
  849.         for entry in self.acc_rec_rx:
  850.             self.dict_entries[entry] = self.acc_rec_rx[entry]['assets']
  851.         for entry in self.acc_rec_rx:
  852.             self.dict_entries_amo[entry] = self.acc_rec_rx[entry]['amort']
  853.         # TODO -> Попълваме сметките, децата и родителите на сметките в self.selected_accs, self.selected_accs_amo
  854.         for entry_name in self.dict_entries:
  855.             for acc_code in self.dict_entries[entry_name]:
  856.                 if acc_code not in self.selected_accs:
  857.                     self.selected_accs.append(acc_code)
  858.                     all_children = self.account_tree.get_all_children(acc_code)  # all_children:['200', '203'']
  859.                     all_parents = self.account_tree.get_all_parents(acc_code)  # acc_code = 223 all_parents:['22',]
  860.                     self.selected_accs.extend([a for a in all_children if a not in self.selected_accs])
  861.                     self.selected_accs.extend([a for a in all_parents if a not in self.selected_accs])
  862.         for entry_name in self.dict_entries_amo:
  863.             for acc_code in self.dict_entries_amo[entry_name]:
  864.                 if acc_code not in self.selected_accs_amo:
  865.                     self.selected_accs_amo.append(acc_code)
  866.                     all_children = self.account_tree.get_all_children(acc_code)  # all_children:['200', '203',]
  867.                     all_parents = self.account_tree.get_all_parents(acc_code)
  868.                     self.selected_accs_amo.extend([a for a in all_children if a not in self.selected_accs_amo])
  869.                     self.selected_accs_amo.extend([a for a in all_parents if a not in self.selected_accs_amo])
  870.         # TODO -> Попълваме Ентритата с НС user_ns и user_ns_amo
  871.         for entry_name in self.user_ns:
  872.             self.user_ns[entry_name] = self.acc_rec_rx[entry_name]['ns']
  873.         if self.user_ns['adp'] > 0:
  874.             self.user_adp.insert(0, self.user_ns['adp'])
  875.         if self.user_ns['pzp'] > 0:
  876.             self.user_pzp.insert(0, self.user_ns['pzp'])
  877.         if self.user_ns['adas'] > 0:
  878.             self.user_adas.insert(0, self.user_ns['adas'])
  879.         if self.user_ns['pzas'] > 0:
  880.             self.user_pzas.insert(0, self.user_ns['pzas'])
  881.         if self.user_ns['di'] > 0:
  882.             self.user_di.insert(0, self.user_ns['di'])
  883.         if self.user_ns['drz'] > 0:
  884.             self.user_drz.insert(0, self.user_ns['drz'])
  885.         if self.user_ns['isa'] > 0:
  886.             self.user_isa.insert(0, self.user_ns['isa'])
  887.  
  888.         for entry_name in self.user_ns_amo:
  889.             self.user_ns_amo[entry_name] = self.acc_rec_rx[entry_name]['ns_amo']
  890.         if self.user_ns_amo['di'] > 0:
  891.             self.user_amo_di.insert(0, self.user_ns_amo['di'])
  892.         # TODO -> Попълваме Ентритата с Преоценките
  893.         print('self.assets_re: ', self.assets_re)
  894.         for entry in self.assets_re:
  895.             for dir in self.assets_re[entry]:
  896.                 self.assets_re[entry][dir] = self.acc_rec_rx[entry]['assets_re'][dir]
  897.         print('self.assets_re след refill: ', self.assets_re)
  898.         if self.assets_re['adp']['inc'] > 0:
  899.             self.turn_d_adp.insert(0, self.assets_re['adp']['inc'])
  900.         if self.assets_re['adp']['dec'] > 0:
  901.             self.turn_c_adp.insert(0, self.assets_re['adp']['dec'])
  902.         if self.assets_re['pzp']['inc'] > 0:
  903.             self.turn_d_pzp.insert(0, self.assets_re['pzp']['inc'])
  904.         if self.assets_re['pzp']['dec'] > 0:
  905.             self.turn_c_pzp.insert(0, self.assets_re['pzp']['dec'])
  906.         if self.assets_re['adas']['inc'] > 0:
  907.             self.turn_d_adas.insert(0, self.assets_re['adas']['inc'])
  908.         if self.assets_re['adas']['dec'] > 0:
  909.             self.turn_c_adas.insert(0, self.assets_re['adas']['dec'])
  910.  
  911.         if self.assets_re['pzas']['inc'] > 0:
  912.             self.turn_d_pzas.insert(0, self.assets_re['pzas']['inc'])
  913.         if self.assets_re['pzas']['dec'] > 0:
  914.             self.turn_c_pzas.insert(0, self.assets_re['pzas']['dec'])
  915.  
  916.         if self.assets_re['di']['inc'] > 0:
  917.             self.turn_d_di.insert(0, self.assets_re['di']['inc'])
  918.         if self.assets_re['di']['dec'] > 0:
  919.             self.turn_c_di.insert(0, self.assets_re['di']['dec'])
  920.  
  921.         if self.assets_re['drz']['inc'] > 0:
  922.             self.turn_d_drz.insert(0, self.assets_re['drz']['inc'])
  923.         if self.assets_re['drz']['dec'] > 0:
  924.             self.turn_c_drz.insert(0, self.assets_re['drz']['dec'])
  925.  
  926.         if self.assets_re['isa']['inc'] > 0:
  927.             self.turn_d_isa.insert(0, self.assets_re['isa']['inc'])
  928.         if self.assets_re['isa']['dec'] > 0:
  929.             self.turn_c_isa.insert(0, self.assets_re['isa']['dec'])
  930.  
  931.         for entry in self.amort_re:
  932.             for dir in self.amort_re[entry]:
  933.                 self.amort_re[entry][dir] = self.acc_rec_rx[entry]['amort_re'][dir]
  934.         print('self.amort_re след refill: ', self.amort_re)
  935.         if self.amort_re['di']['inc'] > 0:
  936.             self.turn_d_amo_di.insert(0, self.amort_re['di']['inc'])
  937.         if self.amort_re['di']['dec'] > 0:
  938.             self.turn_c_amo_di.insert(0, self.amort_re['di']['dec'])
  939.  
  940.     def fill_treeview(self, term=None, term_dc='debit'):
  941.         self.treeview_acc.delete(*self.treeview_acc.get_children())  # Вградена функция за изтриване на Treeview
  942.         # TODO -> Spinboxes
  943.         self.unadded_spin = self.var_spin_1.get()  # Взима стойността на спинбокса за недобавени
  944.         spin_2 = int(self.var_spin_2.get())
  945.         self.all_accounts.extend(self.selected_accs)
  946.         self.all_accounts.extend(self.selected_accs_amo)
  947.         self.list_unadded_accs = self.account_tree.get_unadded_acc(self.all_accounts, self.acc_data_mapped_da)
  948.  
  949.         count_rows = 0
  950.         for acc_code in self.acc_data_bycode:
  951.             if acc_code not in self.acc_data_mapped_da:
  952.                 continue
  953.             if term_dc is not None and term_dc == 'debit':
  954.                 if self.acc_data_bycode[acc_code]['open_c'] > 0 or self.acc_data_bycode[acc_code]['close_c'] > 0:
  955.                     continue
  956.             elif term_dc is not None and term_dc == 'credit':
  957.                 if self.acc_data_bycode[acc_code]['open_d'] > 0 or self.acc_data_bycode[acc_code]['close_d'] > 0:
  958.                     continue
  959.             if term is not None:  # Искаме само сметките дето кода им започва с term
  960.                 term_len = len(term)
  961.                 code_piece = self.acc_data_bycode[acc_code]['code'][0:term_len]
  962.                 # Ако сметката не започва с term
  963.                 if term != code_piece:
  964.                     continue  # прескачаме тая сметка, не отговаря на търсеното
  965.             # TODO -> Ако spin_1 = 'недобавени' -> извежда само недобавените сметки в ентритата
  966.             if self.unadded_spin == 'недобавени':
  967.                 if acc_code not in self.list_unadded_accs:
  968.                     continue
  969.             # TODO -> spin_2 type of spin_2:  <class 'int'>
  970.             groups_in_acc_code = re.findall('[0-9]+', acc_code)  # Връща list със групите на сметката
  971.             top_group = groups_in_acc_code[0]
  972.             depth = self.account_tree.get_depth(acc_code)
  973.             if len(top_group) > spin_2 or depth > spin_2:
  974.                 continue
  975.             count_rows += 1
  976.             row = [self.acc_data_bycode[acc_code]['code'],
  977.                    self.acc_data_bycode[acc_code]['name'],
  978.                    self.acc_data_bycode[acc_code][self.open],
  979.                    self.acc_data_bycode[acc_code]['str_turn_d'],
  980.                    self.acc_data_bycode[acc_code]['str_turn_c'],
  981.                    self.acc_data_bycode[acc_code][self.close]]
  982.             tags = acc_code
  983.             iid = acc_code
  984.             self.treeview_acc.insert('', END, values=row, tags=tags, iid=iid)  # ????
  985.         self.treeview_acc.config(height=count_rows)
  986.         if count_rows > 20:
  987.             self.treeview_acc.configure(height=20)
  988.         for code in self.selected_accs:  # Оцветяване на добавените сметки
  989.             if self.treeview_acc.exists(code):
  990.                 self.treeview_acc.tag_configure(code, background='powderblue')
  991.         for code in self.selected_accs_amo:  # Оцветяване на добавените сметки
  992.             if self.treeview_acc.exists(code):
  993.                 self.treeview_acc.tag_configure(code, background='powderblue')
  994.  
  995.  
  996. if __name__ == '__main__':
  997.     dfa = Expenses()
  998.     dfa.orx()
  999.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement