Advertisement
ALEXANDAR_GEORGIEV

stock_inventory

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