Advertisement
ALEXANDAR_GEORGIEV

da_saled

Jan 11th, 2023
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 47.00 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('700x410+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=650, height=300, 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=(8, 10))  #
  146.         self.tab2 = Frame(self.tabs, width=550, height=300, 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=(8, 10))
  149.         # self.tab3 = Frame(self.tabs, width=550, height=300, 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=300, 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', 24, 'blue', bg_border='red')
  158.  
  159.         self.widget_factory.get_label_un(self.tab1, 'Отписани активи', 20, 50, 'w', 14, bg_border='green')
  160.         self.l_open_adp = self.widget_factory.get_label_un(self.tab1, '0', 40, 80, 'e', 11, 'black', bg_border='green', j='left', name='adp')
  161.  
  162.         self.widget_factory.get_label_un(self.tab1, 'Отписана амортизация', 180, 50, 'w', 19, bg_border='green', j='left')
  163.         self.l_open_adp = self.widget_factory.get_label_un(self.tab1, '0', 234, 80, 'e', 11, 'black', bg_border='green', j='left', name='adp')
  164.  
  165.         self.widget_factory.get_label_un(self.tab1, 'Балансова стойност', 380, 50, 'w', 19, bg_border='green')
  166.         self.l_open_adp = self.widget_factory.get_label_un(self.tab1, '0', 380, 80, 'e', 4, 'black', bg_border='green', j='left', name='adp')
  167.         self.l_open_adp = self.widget_factory.get_label_un(self.tab1, '0', 432, 80, 'e', 11, 'black', bg_border='green', j='left', name='adp')
  168.  
  169.         # # TODO -> CHECKBUTTON
  170.         # self.check_1 = Checkbutton(self.tab1, variable=self.check_assets, command=lambda: self.act_c1(), text='Прехвърляне')
  171.         # self.check_1.place(x=520, y=130)
  172.  
  173.         self.widget_factory.get_label_un(self.tab1, 'Продадени нетекущи активи', 20, 130, 'w', 24, 'blue', bg_border='red')
  174.  
  175.         self.widget_factory.get_label_un(self.tab1, 'Продадени активи', 20, 160, 'w', 15, bg_border='green', j='left')
  176.         self.user_adp = self.widget_factory.get_entry(self.tab1, 46, 200, 14, 'right', name='user_adp')
  177.  
  178.         self.widget_factory.get_label_un(self.tab1, 'Отписана амортизация', 180, 160, 'w', 19, bg_border='green', j='left')
  179.         self.user_am = self.widget_factory.get_entry(self.tab1, 232, 200, 14, 'right', name='user_am')
  180.  
  181.         self.widget_factory.get_label_un(self.tab1, 'Балансова стойност', 380, 160, 'w', 19, bg_border='green')
  182.         self.user_bs = self.widget_factory.get_entry(self.tab1, 380, 200, 4, 'right', name='user_bs')
  183.         self.user_bals = self.widget_factory.get_entry(self.tab1, 434, 200, 14, 'right', name='user_bals')
  184.  
  185.  
  186.         # TODO Разходи по дейност
  187.         self.widget_factory.get_label_un(self.tab2, 'Движение на нетекущи активи', 20, 20, 'w', 22, 'blue', bg_color='white', bg_border='red')
  188.         self.widget_factory.get_label_un(self.tab2, 'Разходи по дейности', 20, 50, 'w', 22, bg_color='white', bg_border='red')
  189.         self.widget_factory.get_label_un(self.tab2, 'НС\n(хил.лв)', 275, 40, 'w', 6, 'black', bg_color='white', bg_border='red', j='center')
  190.         self.widget_factory.get_label_un(self.tab2, 'НС\n(лева)', 340, 40, 'center', 11, 'black', bg_color='white', bg_border='red', j='center')
  191.         self.widget_factory.get_label_un(self.tab2, 'с/ка:\n(код)', 460, 40, 'center', 4, 'black', bg_color='white', bg_border='green')
  192.         self.widget_factory.get_label_un(self.tab2, '1. Отписани нетекущи активи', 20, 100, 'w', 28, bg_color='white', bg_border='green', j='left')
  193.         self.widget_factory.get_label_un(self.tab2, '2. Отписана амортизация', 20, 150, 'w', 26, bg_color='white', bg_border='green', j='left')
  194.         self.widget_factory.get_label_un(self.tab2, '3. Отписана балансова стойност', 20, 180, 'w', 26, bg_color='white', bg_border='green', j='left')
  195.  
  196.         self.widget_factory.get_label_un(self.tab2, '1.1 Продадени нетекущи активи', 20, 210, 'w', 26, bg_color='white', bg_border='green', j='left')
  197.         self.widget_factory.get_label_un(self.tab2, '2.1 Отписана амортизация', 20, 240, 'w', 26, bg_color='white', bg_border='green')
  198.         self.widget_factory.get_label_un(self.tab2, '3.1 Отписана балансова стойност', 20, 180, 'w', 26, bg_color='white', bg_border='green', j='left')
  199.         # TODO -> Entries
  200.         self.user_rod = self.widget_factory.get_entry(self.tab2, 280, 110, 5, 'right', name='user_rod')
  201.         self.user_rod.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rod, "rod", "td"))
  202.         self.l_open_rod = self.widget_factory.get_label_un(self.tab2, '0', 340, 110, 'e', 11, 'black', bg_color='white',
  203.                                                            bg_border='green', j='left')
  204.         self.e_rod = self.widget_factory.get_entry(self.tab2, 450, 110, 9, name='rod')
  205.         self.e_rod.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rod))
  206.         self.e_rod.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rod))
  207.  
  208.         self.user_rsd = self.widget_factory.get_entry(self.tab2, 280, 150, 5, 'right', name='user_rsd')
  209.         self.user_rsd.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rsd, "rsd", "td"))
  210.         self.l_open_rsd = self.widget_factory.get_label_un(self.tab2, '0', 340, 150, 'e', 11, 'black', bg_color='white',
  211.                                                            bg_border='green', j='left')
  212.         self.e_rsd = self.widget_factory.get_entry(self.tab2, 450, 150, 9, name='rsd')
  213.         self.e_rsd.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rsd))
  214.         self.e_rsd.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rsd))
  215.  
  216.         self.user_rtd = self.widget_factory.get_entry(self.tab2, 280, 180, 5, 'right', name='user_rtd')
  217.         self.user_rtd.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rtd, "rtd", "td"))
  218.         self.l_open_rtd = self.widget_factory.get_label_un(self.tab2, '0', 340, 180, 'e', 11, 'black', bg_color='white',
  219.                                                            bg_border='green', j='left')
  220.         self.e_rtd = self.widget_factory.get_entry(self.tab2, 450, 180, 9, name='rtd')
  221.         self.e_rtd.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rtd))
  222.         self.e_rtd.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rtd))
  223.  
  224.         self.user_rad = self.widget_factory.get_entry(self.tab2, 280, 210, 5, 'right', name='user_rad')
  225.         self.user_rad.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rad, "rad", "td"))
  226.         self.l_open_rad = self.widget_factory.get_label_un(self.tab2, '0', 340, 210, 'e', 11, 'black', bg_color='white',
  227.                                                            bg_border='green', j='left')
  228.         self.e_rad = self.widget_factory.get_entry(self.tab2, 450, 210, 9, name='rad')
  229.         self.e_rad.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rad))
  230.         self.e_rad.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rad))
  231.  
  232.         self.user_rud = self.widget_factory.get_entry(self.tab2, 280, 240, 5, 'right', name='user_rud')
  233.         self.user_rud.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rud, "rud", "td"))
  234.         self.l_open_rud = self.widget_factory.get_label_un(self.tab2, '0', 340, 240, 'e', 11, 'black', bg_color='white',
  235.                                                            bg_border='green', j='left')
  236.         self.e_rud = self.widget_factory.get_entry(self.tab2, 450, 240, 9, name='rud')
  237.         self.e_rud.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rud))
  238.         self.e_rud.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rud))
  239.         # TODO -> DOWN LABELS
  240.         self.widget_factory.get_label(self.tab2, 90, 430, 'В началното', 12, 'e', font=10, bg_color='white')
  241.         self.widget_factory.get_label(self.tab2, 195, 430, 'Увеличение', 12, 'e', font=10, bg_color='white')
  242.         self.widget_factory.get_label(self.tab2, 300, 430, 'Намаление', 12, 'e', font=10, bg_color='white')
  243.         self.widget_factory.get_label(self.tab2, 410, 430, 'В края', 12, 'e', font=10, bg_color='white')
  244.         self.widget_factory.get_label(self.tab2, 20, 450, 'Група III.:', 10, 'w', font=10, bg_color='white')
  245.         self.l_amo_open_total = self.widget_factory.get_label(self.tab2, 90, 450, 0.0, 12, 'e', color='black',
  246.                                                               font=10, bg_color='white')
  247.         self.l_amo_turn_d_total = self.widget_factory.get_label(self.tab2, 195, 450, 0.0, 12, 'e', color='black',
  248.                                                                 font=10, bg_color='white')
  249.         self.l_amo_turn_c_total = self.widget_factory.get_label(self.tab2, 300, 450, 0.0, 12, 'e', color='black',
  250.                                                                 font=10, bg_color='white')
  251.         self.l_amo_close_total = self.widget_factory.get_label(self.tab2, 410, 450, 0.0, 12, 'e', color='black',
  252.                                                                font=10, bg_color='white')
  253.  
  254.         # TODO Buttons
  255.         # Button Помощ
  256.         self.b_help = self.widget_factory.get_help_button(self, 20, 360)
  257.         self.b_help.bind('<ButtonRelease-1>')
  258.         # Button Корекции
  259.         self.b_note = self.widget_factory.get_correction_button(self, 180, 360)
  260.         self.b_note.bind('<ButtonRelease-1>', lambda e: self.on_correction())
  261.         # Button Прехвърли
  262.         self.b_add = self.widget_factory.get_save_button(self, 360, 360, text='ПРЕХВЪРЛИ')  # 460, 435
  263.         self.b_add.bind('<ButtonRelease-1>', lambda e: self.on_add())
  264.         # Button Save
  265.         self.b_save = self.widget_factory.get_ok_button(self, 465, 360)
  266.         self.b_save.bind('<ButtonRelease-1>', lambda e: self.on_save())
  267.         # Button Отказ
  268.         self.b_exit = self.widget_factory.get_correction_esc(self, 565, 360)
  269.         self.b_exit.config(command=self.destroy)
  270.  
  271.     # def get_tab(self, *args):
  272.     #     self.current_tab = self.tabs.tab(self.tabs.select(), "text")
  273.     #     # if self.current_tab == 'Активи' or self.current_tab == 'Преоценка активи':
  274.     #     self.open, self.close = 'str_open_d', 'str_close_d'
  275.     #     self.treeview_acc.heading('#3', text='НС Дебит  ')
  276.     #     self.treeview_acc.heading('#6', text='КС Дебит  ')
  277.     #     self.term_dc = 'debit'
  278.     #     # if self.current_tab == 'Активи':
  279.     #     self.treeview_acc.configure(selectmode='browse')
  280.     #     self.e_adp.focus_set()
  281.     #     self.b_add['state'] = 'normal'
  282.     #     self.b_note['state'] = 'normal'
  283.     #     # else:
  284.     #     #     self.treeview_acc.configure(selectmode='none')
  285.     #     #     self.b_note['state'] = 'disabled'
  286.     #
  287.     #     self.fill_treeview(term_dc=self.term_dc)
  288.     #     self.fill_labels()
  289.  
  290.     def set_pop_message_answer(self, answer):
  291.         self.pop_message_answer = answer
  292.  
  293.     def on_save(self):
  294.         # TODO -> Попълваме Началното салдо, въведено от потребителя:
  295.         # for entry in self.user_ns:
  296.         #     self.acc_rec_rx[entry]['ns'] = self.user_ns[entry]
  297.         # for entry in self.user_ns_amo:
  298.         #     self.acc_rec_rx[entry]['ns_amo'] = self.user_ns_amo[entry]
  299.         # TODO -> Попълваме сметките, по Ентрита на активи и амортизации
  300.         if not self.dict_entries:  # Речника е празен
  301.             for entry in self.acc_rec_rx:
  302.                 self.acc_rec_rx[entry]['assets'].clear()
  303.         # if not self.dict_entries_amo:  # Речника е празен
  304.         #     for entry in self.acc_rec_rx:
  305.         #         self.acc_rec_rx[entry]['amort'].clear()
  306.         for entry in self.dict_entries:
  307.             if self.dict_entries[entry] is None:
  308.                 self.dict_entries[entry] = []
  309.             self.acc_rec_rx[entry]['assets'] = self.dict_entries[entry]
  310.         # for entry in self.dict_entries_amo:
  311.         #     if self.dict_entries_amo[entry] is None:
  312.         #         self.dict_entries_amo[entry] = []
  313.         #     self.acc_rec_rx[entry]['amort'] = self.dict_entries_amo[entry]
  314.         # TODO -> попълване на сумите на преоценката
  315.         # for entry in self.assets_re:
  316.         #     for dir in self.assets_re[entry]:
  317.         #         self.acc_rec_rx[entry]['assets_re'][dir] = self.assets_re[entry][dir]
  318.         # for entry in self.amort_re:
  319.         #     for dir in self.amort_re[entry]:
  320.         #         self.acc_rec_rx[entry]['amort_re'][dir] = self.amort_re[entry][dir]
  321.         # print('self.acc_rec_rx: ', self.acc_rec_rx)
  322.  
  323.         json_file_io = JsonFileIo(file_name=registry['orx_import_form_acc_rec_orx_file_name'])
  324.         json_file_io.write_content(self.acc_rec_rx)
  325.         # TODO -> Проверка за недобавена сметка и съобщение !!!!!
  326.         if len(self.list_unadded_accs) > 0:
  327.             # TODO -> Показва pop_message "Има недобавени сметки !
  328.             pop_message = self.widget_factory.get_pop_message(self, lambda answer: self.set_pop_message_answer(answer),
  329.                                                               "Има недобавени сметки !", 1, 'red')
  330.             self.wait_window(pop_message.pop)
  331.             # TODO -> Ако "ДА"
  332.             self.destroy()
  333.             return
  334.         else:
  335.             pop_message = self.widget_factory.get_pop_message(self, lambda answer: self.set_pop_message_answer(answer),
  336.                                                               "Всички сметки са добавени !", 1, 'green')
  337.             self.wait_window(pop_message.pop)
  338.             # TODO -> Ако "ДА"
  339.             self.destroy()
  340.             return
  341.  
  342.     # def on_correction(self):
  343.     #     if self.b_note['state'] == 'disabled':
  344.     #         return
  345.     #     if self.current_tab == 'Активи':
  346.     #         # TODO -> Махаме маркировката на Treeview и забраната за селекция
  347.     #         for code in self.selected_accs:
  348.     #             self.treeview_acc.tag_configure(code, background='lightgrey')
  349.     #         self.selected_accs.clear()
  350.     #         # TODO -> Изтриваме стойностите на речника, на ентритата и лейбълите
  351.     #         self.dict_entries.clear()
  352.     #         self.get_total = {'total': {'od': 0.0, 'oc': 0.0, 'td': 0.0, 'tc': 0.0, 'cd': 0.0, 'cc': 0.0}}
  353.     #         self.l_open_adp['text'] = 0
  354.     #         self.l_open_pzp['text'] = 0
  355.     #         self.l_open_a['text'] = 0
  356.     #         self.l_open_pzas['text'] = 0
  357.     #         self.l_open_di['text'] = 0
  358.     #         self.l_open_drz['text'] = 0
  359.     #         self.l_open_isa['text'] = 0
  360.     #         # TODO -> На преоценките лейбъли ???
  361.     #         self.adp['text'] = 0
  362.     #         self.pzp['text'] = 0
  363.     #         self.a['text'] = 0
  364.     #         self.pzas['text'] = 0
  365.     #         self.di['text'] = 0
  366.     #         self.drz['text'] = 0
  367.     #         self.isa['text'] = 0
  368.  
  369.         # elif self.current_tab == 'Амортизации':
  370.         #     # TODO -> Махаме маркировката на Treeview и забраната за селекция
  371.         #     for code in self.selected_accs_amo:
  372.         #         self.treeview_acc.tag_configure(code, background='lightgrey')
  373.         #     self.selected_accs_amo.clear()
  374.         #     # TODO -> Изтриваме стойностите на речника, на ентритата и лейбълите
  375.         #     self.dict_entries_amo.clear()
  376.         #     self.get_total_amo = {'total': {'od': 0.0, 'oc': 0.0, 'td': 0.0, 'tc': 0.0, 'cd': 0.0, 'cc': 0.0}}
  377.         #     self.l_open_amo_di['text'] = 0
  378.         #     # TODO ?????
  379.         #     self.amo_di['text'] = 0
  380.         #
  381.         # self.fill_labels()
  382.         #
  383.         # self.fill_treeview(term_dc=self.term_dc)
  384.  
  385.     # TODO -> ЗА разлики между НС от потребителя и НС от сметките
  386.     def update_state_open_bal(self, open_bal: Entry, key1: str, key2: str): # self.user_s, s, od
  387.         name_entry = open_bal.winfo_name()  # user_s
  388.         print('name_entry: ', name_entry)
  389.         user_1000 = open_bal.get()  # 55
  390.         try:
  391.             user_1000 = int(user_1000)
  392.         except:
  393.             user_1000 = 0
  394.         calc = self.get_sum_string(key1, key2)  # s  od
  395.         calc_1000 = int(round(calc / 1000))
  396.         if user_1000 == calc_1000:
  397.             # TODO оцвети нещо
  398.             open_bal.configure(bg='white')
  399.         else:
  400.             open_bal.configure(bg='red')
  401.         # TODO -> Да се попълни речник с НС, въведени от потребителя !
  402.         if self.current_tab == 'Разходи по вид':
  403.             self.user_ns[key1] = user_1000
  404.         elif self.current_tab == 'Амортизации':
  405.             self.user_ns_amo[key1] = user_1000
  406.         if name_entry == 'user_adp':
  407.             self.adp['text'] = user_1000 - calc_1000
  408.             print("self.acc_rec_rx", self.acc_rec_rx)
  409.             self.acc_rec_rx['adp']['assets_re']['diff'] = user_1000 - calc_1000
  410.         elif name_entry == 'user_pzp':
  411.             self.pzp['text'] = int(user_1000 - calc_1000)
  412.             self.acc_rec_rx['pzp']['assets_re']['diff'] = int(user_1000 - calc_1000)
  413.         # elif name_entry == 'user_a':
  414.         #     self.a['text'] = int(user_1000 - calc_1000)
  415.         #     self.acc_rec_rx['a']['assets_re']['diff'] = int(user_1000 - calc_1000)
  416.         elif name_entry == 'user_pzas':
  417.             self.pzas['text'] = int(user_1000 - calc_1000)
  418.             self.acc_rec_rx['pzas']['assets_re']['diff'] = int(user_1000 - calc_1000)
  419.         elif name_entry == 'user_di':
  420.             self.di['text'] = int(user_1000 - calc_1000)
  421.             self.acc_rec_rx['di']['assets_re']['diff'] = int(user_1000 - calc_1000)
  422.         elif name_entry == 'user_drz':
  423.             self.drz['text'] = int(user_1000 - calc_1000)
  424.             self.acc_rec_rx['drz']['assets_re']['diff'] = int(user_1000 - calc_1000)
  425.         elif name_entry == 'user_isa':
  426.             self.isa['text'] = int(user_1000 - calc_1000)
  427.             self.acc_rec_rx['isa']['assets_re']['diff'] = int(user_1000 - calc_1000)
  428.  
  429.         elif name_entry == 'user_amo_di':
  430.             self.amo_di['text'] = int(user_1000 - calc_1000)
  431.             self.acc_rec_rx['di']['amort_re']['diff'] = int(user_1000 - calc_1000)
  432.  
  433.     def get_sum_string(self, key1, key2):
  434.         if self.current_tab == 'Разходи по вид':
  435.             if key1 in self.get_sums:
  436.                 return self.get_sums[key1][key2]
  437.         elif self.current_tab == 'Амортизации':
  438.             if key1 in self.get_sums_amo:
  439.                 return self.get_sums_amo[key1][key2]
  440.         return 0
  441.  
  442.     def fill_labels(self):
  443.         for entry in self.dict_entries_amo:
  444.             if self.dict_entries_amo[entry] is None:
  445.                 self.dict_entries_amo[entry] = []
  446.         for entry in self.dict_entries:
  447.             if self.dict_entries[entry] is None:
  448.                 self.dict_entries[entry] = []
  449.         if self.current_tab == 'Разходи по вид':
  450.             if len(self.dict_entries) > 0:
  451.                 self.get_sums, self.get_total = self.mapped_calculations.get_sum_list_accounts(self.dict_entries)
  452.                 for entr in self.get_sums:
  453.                     if entr == 'adp':
  454.                         self.l_open_adp['text'] = f"{self.get_sums['adp']['td']:,.2f}".replace(',', ' ')
  455.                         self.update_state_open_bal(self.user_adp, "adp", "td")
  456.                     elif entr == 'pzp':
  457.                         self.l_open_pzp['text'] = f"{self.get_sums['pzp']['td']:,.2f}".replace(',', ' ')
  458.                         self.update_state_open_bal(self.user_pzp, "pzp", "td")
  459.                     elif entr == 'a':
  460.                         self.l_open_a['text'] = f"{self.get_sums['a']['td']:,.2f}".replace(',', ' ')
  461.                         self.update_state_open_bal(self.user_a, "a", "td")
  462.                     elif entr == 'pzas':
  463.                         self.l_open_pzas['text'] = f"{self.get_sums['pzas']['td']:,.2f}".replace(',', ' ')
  464.                         self.update_state_open_bal(self.user_pzas, "pzas", "td")
  465.                     elif entr == 'di':
  466.                         self.l_open_di['text'] = f"{self.get_sums['di']['td']:,.2f}".replace(',', ' ')
  467.                         self.update_state_open_bal(self.user_di, "di", "td")
  468.                     elif entr == 'drz':
  469.                         self.l_open_drz['text'] = f"{self.get_sums['drz']['td']:,.2f}".replace(',', ' ')
  470.                         self.update_state_open_bal(self.user_drz, "drz", "td")
  471.                     elif entr == 'isa':
  472.                         self.l_open_isa['text'] = f"{self.get_sums['isa']['td']:,.2f}".replace(',', ' ')
  473.                         self.update_state_open_bal(self.user_isa, "isa", "td")
  474.  
  475.             # self.l_open_total['text'] = f"{self.get_total['total']['od']:,.2f}".replace(',', ' ')
  476.             self.l_turn_d_total['text'] = f"{self.get_total['total']['td']:,.2f}".replace(',', ' ')
  477.             self.l_turn_c_total['text'] = f"{self.get_total['total']['tc']:,.2f}".replace(',', ' ')
  478.             # self.l_close_total['text'] = f"{self.get_total['total']['cd']:,.2f}".replace(',', ' ')
  479.         elif self.current_tab == 'Амортизации':
  480.             if len(self.dict_entries_amo) > 0:
  481.                 self.get_sums_amo, self.get_total_amo =\
  482.                     self.mapped_calculations.get_sum_list_accounts(self.dict_entries_amo)
  483.                 for entr in self.get_sums_amo:
  484.                     if entr == 'di':
  485.                         self.l_open_amo_di['text'] = f"{self.get_sums_amo['di']['oc']:,.2f}".replace(',', ' ')
  486.                         self.update_state_open_bal(self.user_amo_di, "di", "oc")
  487.  
  488.             self.l_amo_open_total['text'] = f"{self.get_total_amo['total']['oc']:,.2f}".replace(',', ' ')
  489.             self.l_amo_turn_d_total['text'] = f"{self.get_total_amo['total']['td']:,.2f}".replace(',', ' ')
  490.             self.l_amo_turn_c_total['text'] = f"{self.get_total_amo['total']['tc']:,.2f}".replace(',', ' ')
  491.             self.l_amo_close_total['text'] = f"{self.get_total_amo['total']['cc']:,.2f}".replace(',', ' ')
  492.  
  493.     def on_add(self):
  494.         if self.current_tab == 'Разходи по вид':
  495.             acc_code = self.last_entry.get()  # '203'
  496.             if acc_code is None or acc_code == '':
  497.                 return
  498.             self.selected_accs.append(list(self.treeview_acc.selection()))  # current_selection:  ('200',)
  499.             # TODO -> На името на Entry да добавим сметката
  500.             name_entry = self.last_entry.winfo_name()
  501.             if name_entry not in self.dict_entries:
  502.                 self.dict_entries[name_entry] = ()
  503.             self.dict_entries[name_entry] += self.treeview_acc.selection()  # Добавям маркираната сметка
  504.             # TODO -> Добавяне на децата и родителите на добавената сметка
  505.             all_children = self.account_tree.get_all_children(acc_code)  # all_children:  ['200', '203', '205']
  506.             all_parents = self.account_tree.get_all_parents(acc_code)  # acc_code = 223
  507.             self.selected_accs.extend(all_children)
  508.             self.selected_accs.extend(all_parents)
  509.             # TODO -> След добавяне да се изпразват всички ентрита, а не само добавеното !!!!!
  510.             if self.e_adp.get() != '': self.e_adp.delete(0, 'end')
  511.             if self.e_pzp.get() != '': self.e_pzp.delete(0, 'end')
  512.             if self.e_a.get() != '': self.e_a.delete(0, 'end')
  513.             if self.e_pzas.get() != '': self.e_pzas.delete(0, 'end')
  514.             if self.e_di.get() != '': self.e_di.delete(0, 'end')
  515.             if self.e_drz.get() != '': self.e_drz.delete(0, 'end')
  516.             if self.e_isa.get() != '': self.e_isa.delete(0, 'end')
  517.  
  518.         elif self.current_tab == 'Амортизации':
  519.             acc_code = self.last_entry.get()  # '203'
  520.             if acc_code is None or acc_code == '':
  521.                 return
  522.             self.selected_accs_amo.append(list(self.treeview_acc.selection()))
  523.             # TODO -> На името на Entry да добавим сметката
  524.             name_entry = self.last_entry.winfo_name()
  525.             if name_entry not in self.dict_entries_amo:
  526.                 self.dict_entries_amo[name_entry] = ()
  527.             self.dict_entries_amo[name_entry] += self.treeview_acc.selection()
  528.             # TODO -> Добавяне на децата и родителите на добавената сметка
  529.             all_children = self.account_tree.get_all_children(acc_code)  # all_children:  ['200', '203']
  530.             all_parents = self.account_tree.get_all_parents(acc_code)  # acc_code = 223
  531.             self.selected_accs_amo.extend(all_children)
  532.             self.selected_accs_amo.extend(all_parents)
  533.             # TODO -> След добавяне да се изпразват всички ентрита, а не само добавеното !!!!!
  534.             if self.e_amo_di.get() != '': self.e_amo_di.delete(0, 'end')
  535.  
  536.         self.fill_labels()
  537.         # TODO -> Попълваме Treeview
  538.         self.fill_treeview(term_dc=self.term_dc)
  539.  
  540.     def act_c1(self):
  541.         if self.check_assets.get() == 1:  # state: must be normal, disabled, or hidden
  542.             self.tabs.tab(self.tab3, state='normal')
  543.         # elif self.check_assets.get() == 0:
  544.         #     self.tabs.tab(self.tab3, state='hidden')
  545.  
  546.     def act_c2(self):
  547.         if self.check_amort.get() == 1:  # state: must be normal, disabled, or hidden
  548.             self.tabs.tab(self.tab4, state='normal')
  549.         # elif self.check_amort.get() == 0:
  550.         #     self.tabs.tab(self.tab4, state='hidden')
  551.  
  552.     def verify_selection(self):  # Забрана за маркиране
  553.         for code in self.selected_accs:
  554.             if self.treeview_acc.exists(code):
  555.                 self.treeview_acc.selection_remove(code)
  556.         for code in self.selected_accs_amo:
  557.             if self.treeview_acc.exists(code):
  558.                 self.treeview_acc.selection_remove(code)
  559.  
  560.     def on_selected_acc(self, source_treeview):
  561.         self.verify_selection()
  562.         current_item = source_treeview.focus()
  563.         if current_item in self.selected_accs or current_item in self.selected_accs_amo:  # <class 'tuple'>
  564.             return
  565.         values = source_treeview.item(current_item)["values"]
  566.         if not isinstance(values, list):
  567.             return
  568.         code = values[0]
  569.         self.last_entry.delete(0, END)
  570.         self.last_entry.insert(0, code)
  571.  
  572.     def entry_on_focus(self, entry):
  573.         self.last_entry = entry
  574.  
  575.     def on_entry_key_release(self, entry):
  576.         self.last_entry = entry
  577.         entry_text = entry.get()
  578.         if len(entry_text) < 2:
  579.             self.fill_treeview(term_dc=self.term_dc)
  580.             return
  581.         term = entry_text
  582.         self.fill_treeview(term=term, term_dc=self.term_dc)
  583.  
  584.     def orx(self):
  585.         # try:
  586.         #     json_file_io = JsonFileIo(file_name=registry["orx_import_form_acc_rec_orx_file_name"])
  587.         #     tmp_acc_rec_rx = json_file_io.read_content()
  588.         #     if tmp_acc_rec_rx is not None:
  589.         #         self.acc_rec_rx = tmp_acc_rec_rx
  590.         #     self.refill_form()
  591.         #     self.get_tab()  # Рефрешва таба, попълва self.current_tab
  592.         # except:
  593.         #     pass
  594.         # self.fill_treeview(term_dc=self.term_dc)
  595.         self.mainloop()
  596.  
  597.     def refill_form(self):
  598.         # TODO -> Попълваме Treeview с маркирани и забранени за селектиране сметки
  599.         for entry in self.acc_rec_rx:
  600.             self.dict_entries[entry] = self.acc_rec_rx[entry]['assets']
  601.         for entry in self.acc_rec_rx:
  602.             self.dict_entries_amo[entry] = self.acc_rec_rx[entry]['amort']
  603.         # TODO -> Попълваме сметките, децата и родителите на сметките в self.selected_accs, self.selected_accs_amo
  604.         for entry_name in self.dict_entries:
  605.             for acc_code in self.dict_entries[entry_name]:
  606.                 if acc_code not in self.selected_accs:
  607.                     self.selected_accs.append(acc_code)
  608.                     all_children = self.account_tree.get_all_children(acc_code)  # all_children:['200', '203'']
  609.                     all_parents = self.account_tree.get_all_parents(acc_code)  # acc_code = 223 all_parents:['22',]
  610.                     self.selected_accs.extend([a for a in all_children if a not in self.selected_accs])
  611.                     self.selected_accs.extend([a for a in all_parents if a not in self.selected_accs])
  612.         for entry_name in self.dict_entries_amo:
  613.             for acc_code in self.dict_entries_amo[entry_name]:
  614.                 if acc_code not in self.selected_accs_amo:
  615.                     self.selected_accs_amo.append(acc_code)
  616.                     all_children = self.account_tree.get_all_children(acc_code)  # all_children:['200', '203',]
  617.                     all_parents = self.account_tree.get_all_parents(acc_code)
  618.                     self.selected_accs_amo.extend([a for a in all_children if a not in self.selected_accs_amo])
  619.                     self.selected_accs_amo.extend([a for a in all_parents if a not in self.selected_accs_amo])
  620.         # TODO -> Попълваме Ентритата с НС user_ns и user_ns_amo
  621.         for entry_name in self.user_ns:
  622.             self.user_ns[entry_name] = self.acc_rec_rx[entry_name]['ns']
  623.         if self.user_ns['adp'] > 0:
  624.             self.user_adp.insert(0, self.user_ns['adp'])
  625.         if self.user_ns['pzp'] > 0:
  626.             self.user_pzp.insert(0, self.user_ns['pzp'])
  627.         if self.user_ns['adas'] > 0:
  628.             self.user_a.insert(0, self.user_ns['a'])
  629.         if self.user_ns['pzas'] > 0:
  630.             self.user_pzas.insert(0, self.user_ns['pzas'])
  631.         if self.user_ns['di'] > 0:
  632.             self.user_di.insert(0, self.user_ns['di'])
  633.         if self.user_ns['drz'] > 0:
  634.             self.user_drz.insert(0, self.user_ns['drz'])
  635.         if self.user_ns['isa'] > 0:
  636.             self.user_isa.insert(0, self.user_ns['isa'])
  637.  
  638.         for entry_name in self.user_ns_amo:
  639.             self.user_ns_amo[entry_name] = self.acc_rec_rx[entry_name]['ns_amo']
  640.         if self.user_ns_amo['di'] > 0:
  641.             self.user_amo_di.insert(0, self.user_ns_amo['di'])
  642.         # TODO -> Попълваме Ентритата с Преоценките
  643.         print('self.assets_re: ', self.assets_re)
  644.         for entry in self.assets_re:
  645.             for dir in self.assets_re[entry]:
  646.                 self.assets_re[entry][dir] = self.acc_rec_rx[entry]['assets_re'][dir]
  647.         print('self.assets_re след refill: ', self.assets_re)
  648.         if self.assets_re['adp']['inc'] > 0:
  649.             self.turn_d_adp.insert(0, self.assets_re['adp']['inc'])
  650.         if self.assets_re['adp']['dec'] > 0:
  651.             self.turn_c_adp.insert(0, self.assets_re['adp']['dec'])
  652.         if self.assets_re['pzp']['inc'] > 0:
  653.             self.turn_d_pzp.insert(0, self.assets_re['pzp']['inc'])
  654.         if self.assets_re['pzp']['dec'] > 0:
  655.             self.turn_c_pzp.insert(0, self.assets_re['pzp']['dec'])
  656.         if self.assets_re['adas']['inc'] > 0:
  657.             self.turn_d_adas.insert(0, self.assets_re['adas']['inc'])
  658.         if self.assets_re['adas']['dec'] > 0:
  659.             self.turn_c_adas.insert(0, self.assets_re['adas']['dec'])
  660.  
  661.         if self.assets_re['pzas']['inc'] > 0:
  662.             self.turn_d_pzas.insert(0, self.assets_re['pzas']['inc'])
  663.         if self.assets_re['pzas']['dec'] > 0:
  664.             self.turn_c_pzas.insert(0, self.assets_re['pzas']['dec'])
  665.  
  666.         if self.assets_re['di']['inc'] > 0:
  667.             self.turn_d_di.insert(0, self.assets_re['di']['inc'])
  668.         if self.assets_re['di']['dec'] > 0:
  669.             self.turn_c_di.insert(0, self.assets_re['di']['dec'])
  670.  
  671.         if self.assets_re['drz']['inc'] > 0:
  672.             self.turn_d_drz.insert(0, self.assets_re['drz']['inc'])
  673.         if self.assets_re['drz']['dec'] > 0:
  674.             self.turn_c_drz.insert(0, self.assets_re['drz']['dec'])
  675.  
  676.         if self.assets_re['isa']['inc'] > 0:
  677.             self.turn_d_isa.insert(0, self.assets_re['isa']['inc'])
  678.         if self.assets_re['isa']['dec'] > 0:
  679.             self.turn_c_isa.insert(0, self.assets_re['isa']['dec'])
  680.  
  681.         for entry in self.amort_re:
  682.             for dir in self.amort_re[entry]:
  683.                 self.amort_re[entry][dir] = self.acc_rec_rx[entry]['amort_re'][dir]
  684.         print('self.amort_re след refill: ', self.amort_re)
  685.         if self.amort_re['di']['inc'] > 0:
  686.             self.turn_d_amo_di.insert(0, self.amort_re['di']['inc'])
  687.         if self.amort_re['di']['dec'] > 0:
  688.             self.turn_c_amo_di.insert(0, self.amort_re['di']['dec'])
  689.  
  690.     def fill_treeview(self, term=None, term_dc='debit'):
  691.         self.treeview_acc.delete(*self.treeview_acc.get_children())  # Вградена функция за изтриване на Treeview
  692.         # TODO -> Spinboxes
  693.         self.unadded_spin = self.var_spin_1.get()  # Взима стойността на спинбокса за недобавени
  694.         spin_2 = int(self.var_spin_2.get())
  695.         self.all_accounts.extend(self.selected_accs)
  696.         self.all_accounts.extend(self.selected_accs_amo)
  697.         self.list_unadded_accs = self.account_tree.get_unadded_acc(self.all_accounts, self.acc_data_mapped_da)
  698.  
  699.         count_rows = 0
  700.         for acc_code in self.acc_data_bycode:
  701.             if acc_code not in self.acc_data_mapped_da:
  702.                 continue
  703.             if term_dc is not None and term_dc == 'debit':
  704.                 if self.acc_data_bycode[acc_code]['open_c'] > 0 or self.acc_data_bycode[acc_code]['close_c'] > 0:
  705.                     continue
  706.             elif term_dc is not None and term_dc == 'credit':
  707.                 if self.acc_data_bycode[acc_code]['open_d'] > 0 or self.acc_data_bycode[acc_code]['close_d'] > 0:
  708.                     continue
  709.             if term is not None:  # Искаме само сметките дето кода им започва с term
  710.                 term_len = len(term)
  711.                 code_piece = self.acc_data_bycode[acc_code]['code'][0:term_len]
  712.                 # Ако сметката не започва с term
  713.                 if term != code_piece:
  714.                     continue  # прескачаме тая сметка, не отговаря на търсеното
  715.             # TODO -> Ако spin_1 = 'недобавени' -> извежда само недобавените сметки в ентритата
  716.             if self.unadded_spin == 'недобавени':
  717.                 if acc_code not in self.list_unadded_accs:
  718.                     continue
  719.             # TODO -> spin_2 type of spin_2:  <class 'int'>
  720.             groups_in_acc_code = re.findall('[0-9]+', acc_code)  # Връща list със групите на сметката
  721.             top_group = groups_in_acc_code[0]
  722.             depth = self.account_tree.get_depth(acc_code)
  723.             if len(top_group) > spin_2 or depth > spin_2:
  724.                 continue
  725.             count_rows += 1
  726.             row = [self.acc_data_bycode[acc_code]['code'],
  727.                    self.acc_data_bycode[acc_code]['name'],
  728.                    self.acc_data_bycode[acc_code][self.open],
  729.                    self.acc_data_bycode[acc_code]['str_turn_d'],
  730.                    self.acc_data_bycode[acc_code]['str_turn_c'],
  731.                    self.acc_data_bycode[acc_code][self.close]]
  732.             tags = acc_code
  733.             iid = acc_code
  734.             self.treeview_acc.insert('', END, values=row, tags=tags, iid=iid)  # ????
  735.         self.treeview_acc.config(height=count_rows)
  736.         if count_rows > 20:
  737.             self.treeview_acc.configure(height=20)
  738.         for code in self.selected_accs:  # Оцветяване на добавените сметки
  739.             if self.treeview_acc.exists(code):
  740.                 self.treeview_acc.tag_configure(code, background='powderblue')
  741.         for code in self.selected_accs_amo:  # Оцветяване на добавените сметки
  742.             if self.treeview_acc.exists(code):
  743.                 self.treeview_acc.tag_configure(code, background='powderblue')
  744.  
  745.  
  746. if __name__ == '__main__':
  747.     orx = Expenses()
  748.     orx.orx()
  749.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement