Advertisement
ALEXANDAR_GEORGIEV

dma_import_form

Dec 17th, 2022 (edited)
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 71.38 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 DnaFormImport(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_da = 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_da:
  36.                     self.max_depth_da = 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_dma = {
  43.             'pdr': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0},
  44.                     'amort_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0}},
  45.             'z': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0},
  46.                    'amort_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0}},
  47.             'pz': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0},
  48.                    'amort_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0}},
  49.             's': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0},
  50.                    'amort_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0}},
  51.             'm': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0},
  52.                    'amort_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0}},
  53.             'sdr': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0},
  54.                    'amort_re': {'inc': 0.0, 'dec': .00, 'diff': 0}},
  55.             'ts': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0},
  56.                    'amort_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0}},
  57.             'rpma': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0},
  58.                      'amort_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0}},
  59.             'adv': {'ns': 0, 'ns_amo': 0, 'assets': [], 'amort': [], 'assets_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0},
  60.                     'amort_re': {'inc': 0.0, 'dec': 0.0, 'diff': 0}}}
  61.         # -------------------------
  62.         self.check_assets = IntVar()  # Radiobutton tab - преоценка активи
  63.         self.check_amort = IntVar()  # Radiobutton tab - преоценка амортизации
  64.         self.last_entry = Entry()  # Четене на Entry code
  65.         self.acc_data = []
  66.         self.scr_bar = None
  67.         self.tab_names = {
  68.             "act": "Активи",
  69.             "amort": "Амортизации",
  70.             "act_p": "Преоценка активи",
  71.             "amort_p": "Преоценка амортизации",
  72.         }
  73.         self.current_tab = ''
  74.         self.open = 'str_open_d'
  75.         self.close = 'str_close_d'
  76.         self.term_dc = 'debit'
  77.         self.term = None
  78.         self.all_accounts = []
  79.         self.list_unadded_accs = []
  80.         self.unadded_spin = ''
  81.         self.selected_accs = []  # Данните, които трябва да се запишат във файл за да се маркират сметките в Treeview
  82.         self.selected_accs_amo = []  # Маркирани сметки в Treeview АМортизации
  83.         self.dict_entries = {}  # Списък с Ентритата на Активите
  84.         self.dict_entries_amo = {}  # Списък с Ентрита на Амортизации
  85.         self.get_sums = {}
  86.         self.get_sums_amo = {}
  87.         self.get_total = {'total': {'od': 0.0, 'oc': 0.0, 'td': 0.0, 'tc': 0.0, 'cd': 0.0, 'cc': 0.0}}
  88.         self.get_total_amo = {'total': {'od': 0.0, 'oc': 0.0, 'td': 0.0, 'tc': 0.0, 'cd': 0.0, 'cc': 0.0}}
  89.         self.user_ns = {'pdr': 0, 'z': 0, 'pz': 0, 's': 0, 'm': 0, 'sdr': 0, 'ts': 0, 'rpma': 0, 'adv': 0}
  90.         self.user_ns_amo = {'pdr': 0, 'pz': 0, 's': 0, 'm': 0, 'sdr': 0, 'ts': 0}
  91.         self.assets_re = {'pdr': {'inc': 0.0, 'dec': 0.0}, 'z': {'inc': 0.0, 'dec': 0.0}, 'pz': {'inc': 0.0, 'dec': 0.0}, 's': {'inc': 0.0, 'dec': 0.0}, 'm': {'inc': 0.0, 'dec': 0.0}, 'sdr': {'inc': 0.0, 'dec': 0.0}, 'ts': {'inc': 0.0, 'dec': 0.0}}
  92.         self.amort_re = {'pdr': {'inc': 0.0, 'dec': 0.0}, 'pz': {'inc': 0.0, 'dec': 0.0}, 's': {'inc': 0.0, 'dec': 0.0}, 'm': {'inc': 0.0, 'dec': 0.0}, 'sdr': {'inc': 0.0, 'dec': 0.0}, 'ts': {'inc': 0.0, 'dec': 0.0}}
  93.         self.pop_message_answer = ''
  94.         # TODO -> Главен прозорец
  95.         self.title('Материални дълготрайни активи')  # TODO -> Главен прозорец
  96.         self.geometry('1300x600+200+150')  # 480
  97.         self.resizable(True, False)
  98.         self.attributes('-topmost', 'true')
  99.         # TODO -> Notebook
  100.         self.tabs = ttk.Notebook(self)  # TODO -> Табове
  101.         self.tabs.pack(pady=(1, 56), anchor='w')  # class_, cursor, padding, relief, style, takefocus
  102.         self.tab1 = Frame(self.tabs, width=550, height=480, relief=GROOVE, borderwidth=5)
  103.         self.tab1.pack()  # fill=”X” specifies, fill=”Y”
  104.         self.tabs.add(self.tab1, text=self.tab_names['act'], padding=(2, 10))  #
  105.         self.tab2 = Frame(self.tabs, width=550, height=480, relief=GROOVE, borderwidth=5, bg='white')
  106.         self.tab2.pack(fill='both', expand=1)
  107.         self.tabs.add(self.tab2, text=self.tab_names['amort'], padding=(2, 10))
  108.         self.tab3 = Frame(self.tabs, width=550, height=480, relief=GROOVE, borderwidth=5,
  109.                           bg='mint cream')  # bg='lightgrey'
  110.         self.tab3.pack(fill='both', expand=1)
  111.         self.tabs.add(self.tab3, text=self.tab_names['act_p'],
  112.                       state='hidden')  # compound must be none, text, image, center, top, bottom, left, or right
  113.         self.tab4 = Frame(self.tabs, width=550, height=480, relief=GROOVE, borderwidth=5,
  114.                           bg='lemon chiffon')  # bg='lightgrey'
  115.         self.tab4.pack(fill='both', expand=1)
  116.         self.tabs.add(self.tab4, text=self.tab_names['amort_p'],
  117.                       state='hidden')  #
  118.         self.tabs.bind('<<NotebookTabChanged>>', self.get_tab)
  119.         # TODO -> LABELS
  120.         self.widget_factory.get_label_un(self.tab1, 'с/ка: АКТИВИ', 20, 20, 'w', 26, 'blue', bg_border='red')
  121.         self.widget_factory.get_label_un(self.tab1, 'Група II.: Дълг. матер. активи', 20, 50, 'w', 26, bg_border='red')
  122.         self.widget_factory.get_label_un(self.tab1, 'НС\n(хил.лв)', 275, 40, 'w', 6, 'black', bg_border='red',
  123.                                          j='center')
  124.         self.widget_factory.get_label_un(self.tab1, 'НС\n(лева)', 340, 40, 'center', 11, 'black', bg_border='red',
  125.                                          j='center')
  126.         self.widget_factory.get_label_un(self.tab1, 'с/ка:\n(код)', 460, 40, 'center', 4, 'black', bg_border='green')
  127.         self.widget_factory.get_label_un(self.tab1, '1. Права върху имоти и други', 20, 90, 'w', 26, bg_border='green')
  128.         self.widget_factory.get_label_un(self.tab1, '    - земи', 20, 120, 'w', 24, bg_border='green', j='left')
  129.         self.widget_factory.get_label_un(self.tab1, '    - подобрения върху земите', 20, 150, 'w', 24, bg_border='green')
  130.         self.widget_factory.get_label_un(self.tab1, '    - сгради', 20, 180, 'w', 24, bg_border='green')
  131.         self.widget_factory.get_label_un(self.tab1, '2. Машини, производствено\nоборудване и апаратура', 20, 210, 'w', 24, bg_border='green')
  132.         self.widget_factory.get_label_un(self.tab1, '3. Съоръжения и други', 20, 260, 'w', 24, bg_border='green')
  133.         self.widget_factory.get_label_un(self.tab1, '    - транспортни средства', 20, 290, 'w', 24, bg_border='green')
  134.         self.widget_factory.get_label_un(self.tab1, '4. Дълг. материални активи в\n процес на изграждане', 20, 320, 'w', 26, bg_border='green', j='left')
  135.         self.widget_factory.get_label_un(self.tab1, '    - предоставени аванси', 20, 370, 'w', 26, bg_border='green')
  136.         # TODO -> Entries
  137.         self.user_pdr = self.widget_factory.get_entry(self.tab1, 280, 90, 5, 'right', name='user_pdr')
  138.         self.user_pdr.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_pdr, "pdr", "od"))
  139.         self.l_open_pdr = self.widget_factory.get_label_un(self.tab1, '0', 340, 90, 'e', 11, 'black', bg_border='green', j='left', name='pdr')
  140.         self.e_pdr = self.widget_factory.get_entry(self.tab1, 450, 90, 9, 'left', name='pdr')
  141.         self.e_pdr.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_pdr))
  142.         self.e_pdr.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_pdr))
  143.  
  144.         self.user_z = self.widget_factory.get_entry(self.tab1, 280, 120, 5, 'right', name='user_z')
  145.         self.user_z.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_z, "z", "od"))
  146.         self.l_open_z = self.widget_factory.get_label_un(self.tab1, '0', 340, 120, 'e', 11, 'black', bg_border='green', j='left')
  147.         self.e_z = self.widget_factory.get_entry(self.tab1, 450, 120, 9, name='z')
  148.         self.e_z.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_z))
  149.         self.e_z.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_z))
  150.  
  151.         self.user_pz = self.widget_factory.get_entry(self.tab1, 280, 150, 5, 'right', name='user_pz')
  152.         self.user_pz.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_pz, "pz", "od"))
  153.         self.l_open_pz = self.widget_factory.get_label_un(self.tab1, '0', 340, 150, 'e', 11, 'black', bg_border='green', j='left')
  154.         self.e_pz = self.widget_factory.get_entry(self.tab1, 450, 150, 9, name='pz')
  155.         self.e_pz.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_pz))
  156.         self.e_pz.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_pz))
  157.  
  158.         self.user_s = self.widget_factory.get_entry(self.tab1, 280, 180, 5, 'right', name='user_s')
  159.         self.user_s.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_s, "s", "od"))
  160.         self.l_open_s = self.widget_factory.get_label_un(self.tab1, '0', 340, 180, 'e', 11, 'black', bg_border='green', j='left')
  161.         self.e_s = self.widget_factory.get_entry(self.tab1, 450, 180, 9, name='s')
  162.         self.e_s.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_s))
  163.         self.e_s.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_s))
  164.  
  165.         self.user_m = self.widget_factory.get_entry(self.tab1, 280, 220, 5, 'right', name='user_m')
  166.         self.user_m.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_m, "m", "od"))
  167.         self.l_open_m = self.widget_factory.get_label_un(self.tab1, '0', 340, 220, 'e', 11, 'black', bg_border='green', j='left')
  168.         self.e_m = self.widget_factory.get_entry(self.tab1, 450, 220, 9, name='m')
  169.         self.e_m.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_m))
  170.         self.e_m.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_m))
  171.  
  172.         self.user_sdr = self.widget_factory.get_entry(self.tab1, 280, 260, 5, 'right', name='user_sdr')
  173.         self.user_sdr.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_sdr, "sdr", "od"))
  174.         self.l_open_sdr = self.widget_factory.get_label_un(self.tab1, '0', 340, 260, 'e', 11, 'black', bg_border='green', j='left')
  175.         self.e_sdr = self.widget_factory.get_entry(self.tab1, 450, 260, 9, name='sdr')
  176.         self.e_sdr.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_sdr))
  177.         self.e_sdr.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_sdr))
  178.  
  179.         self.user_ts = self.widget_factory.get_entry(self.tab1, 280, 290, 5, 'right', name='user_ts')
  180.         self.user_ts.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_ts, "ts", "od"))
  181.         self.l_open_ts = self.widget_factory.get_label_un(self.tab1, '0', 340, 290, 'e', 11, 'black', bg_border='green', j='left')
  182.         self.e_ts = self.widget_factory.get_entry(self.tab1, 450, 290, 9, name='ts')
  183.         self.e_ts.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_ts))
  184.         self.e_ts.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_ts))
  185.  
  186.         self.user_rpma = self.widget_factory.get_entry(self.tab1, 280, 330, 5, 'right', name='user_rpma')
  187.         self.user_rpma.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_rpma, "rpma", "od"))
  188.         self.l_open_rpma = self.widget_factory.get_label_un(self.tab1, '0', 340, 330, 'e', 11, 'black', bg_border='green', j='left')
  189.         self.e_rpma = self.widget_factory.get_entry(self.tab1, 450, 330, 9, name='rpma')
  190.         self.e_rpma.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_rpma))
  191.         self.e_rpma.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_rpma))
  192.  
  193.         self.user_adv = self.widget_factory.get_entry(self.tab1, 280, 370, 5, 'right', name='user_adv')
  194.         self.user_adv.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_adv, "adv", "od"))
  195.         self.l_open_adv = self.widget_factory.get_label_un(self.tab1, '0', 340, 370, 'e', 11, 'black', bg_border='green', j='left')
  196.         self.e_adv = self.widget_factory.get_entry(self.tab1, 450, 370, 9, name='adv')
  197.         self.e_adv.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_adv))
  198.         self.e_adv.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_adv))
  199.         # TODO -> DOWN LABELS
  200.         self.widget_factory.get_label(self.tab1, 90, 430, 'В началното', 12, 'e', font=10)
  201.         self.widget_factory.get_label(self.tab1, 195, 430, 'Увеличение', 12, 'e', font=10)
  202.         self.widget_factory.get_label(self.tab1, 300, 430, 'Намаление', 12, 'e', font=10)
  203.         self.widget_factory.get_label(self.tab1, 410, 430, 'В края', 12, 'e', font=10)
  204.         self.widget_factory.get_label(self.tab1, 20, 450, 'Група II.:', 10, 'w', font=10)
  205.         self.l_open_total = self.widget_factory.get_label(self.tab1, 90, 450, 0.0, 12, 'e', color='black',
  206.                                                           font=10)
  207.         self.l_turn_d_total = self.widget_factory.get_label(self.tab1, 195, 450, 0.0, 12, 'e', color='black',
  208.                                                             font=10)
  209.         self.l_turn_c_total = self.widget_factory.get_label(self.tab1, 300, 450, 0.0, 12, 'e', color='black',
  210.                                                             font=10)
  211.         self.l_close_total = self.widget_factory.get_label(self.tab1, 410, 450, 0.0, 12, 'e', color='black',
  212.                                                            font=10)
  213.         self.widget_factory.get_label_un(self, 'Налични сметки:', 720, 1, 'w', 20, 'blue', bg_color=None,
  214.                                          bg_border='red')
  215.         # TODO -> CHECKBUTTON
  216.         self.check_asset = Checkbutton(self.tab1, text="преоценка", variable=self.check_assets,
  217.                                        command=lambda: self.act_c1())
  218.         self.check_asset.place(x=275, y=20)
  219.         # TODO TREEVIEW
  220.         self.tv_frame = Frame(self)
  221.         self.tv_frame.place(x=560, y=30)
  222.         self.dict_columns = {"code_i": 'код', "acc_name": 'Сметка', 'open_di': 'НС Дебит', 'turn_di': 'Оборот Дт',
  223.                              'turn_ci': 'Оборот Кт', "close_di": 'КС Дебит'}
  224.         self.treeview_acc = self.widget_factory.get_treeview(self.tv_frame, **self.dict_columns)
  225.         self.treeview_acc.config(selectmode='browse')
  226.         # TODO SCROLLBAR
  227.         self.scr_bar = Scrollbar(self.tv_frame, orient=VERTICAL)
  228.         self.scr_bar.pack(side=RIGHT, fill=Y)
  229.         self.treeview_acc.config(yscrollcommand=self.scr_bar.set)
  230.         self.scr_bar.config(command=self.treeview_acc.yview, bg="red", activebackground="orange")
  231.         self.treeview_acc.bind('<ButtonRelease-1>', lambda e: self.on_selected_acc(self.treeview_acc))
  232.         self.treeview_acc.pack(side=LEFT)
  233.         # TODO Spinboxes
  234.         self.min_spin_2 = self.min_top_group_digits
  235.         self.max_spin_2 = self.max_top_group_digits + self.max_groups
  236.         self.var_spin_1 = StringVar(self)
  237.         self.list_spin_1 = ['всички', 'недобавени']
  238.         self.spin_1 = self.widget_factory.get_list_spinbox(self, self.list_spin_1, 12, 'center',
  239.                                                            self.var_spin_1, 560, 4)
  240.         self.spin_1.configure(command=lambda: self.fill_treeview(term_dc=self.term_dc))
  241.         print("self.min_spin_2", self.min_spin_2, "self.max_depth_da", self.max_depth_da)
  242.         self.var_spin_2 = StringVar(self, value=str(self.max_depth_da))
  243.         self.spin_2 = self.widget_factory.get_spinbox(self, self.min_spin_2, str(self.max_depth_da), 4,
  244.                                                       'center', self.var_spin_2, 660, 4)
  245.         self.spin_2.configure(command=lambda: self.fill_treeview(term_dc=self.term_dc))
  246.         # TODO Buttons
  247.         # Button Добави
  248.         self.b_add = self.widget_factory.get_save_button(self, 466, 550, text='ДОБАВИ')  # 460, 435
  249.         self.b_add.bind('<ButtonRelease-1>', lambda e: self.on_add())
  250.         # Button Корекции
  251.         self.b_note = self.widget_factory.get_correction_button(self, 360, 550)
  252.         self.b_note.bind('<ButtonRelease-1>', lambda e: self.on_correction())
  253.         # Button Помощ
  254.         self.b_help = self.widget_factory.get_help_button(self, 20, 550)
  255.         self.b_help.bind('<ButtonRelease-1>')
  256.         # Button Save
  257.         self.b_save = self.widget_factory.get_ok_button(self, 830, 550)
  258.         self.b_save.bind('<ButtonRelease-1>', lambda e: self.on_save())
  259.         # Button Отказ
  260.         self.b_exit = self.widget_factory.get_correction_esc(self, 930, 550)
  261.         self.b_exit.config(command=self.destroy)
  262.         # TODO AMORTIZATION Амортизации
  263.         self.widget_factory.get_label_un(self.tab2, 'с/ка: АМОРТИЗАЦИИ', 20, 20, 'w', 26, 'red', bg_color='white', bg_border='blue')
  264.         self.widget_factory.get_label_un(self.tab2, 'Група II.: Дълг. матер. активи', 20, 50, 'w', 26, bg_color='white', bg_border='blue')
  265.         self.widget_factory.get_label_un(self.tab2, 'НС\n(хил.лв)', 275, 40, 'w', 6, 'black', bg_color='white', bg_border='blue', j='center')
  266.         self.widget_factory.get_label_un(self.tab2, 'НС\n(лева)', 340, 40, 'center', 11, 'black', bg_color='white', bg_border='blue', j='center')
  267.         self.widget_factory.get_label_un(self.tab2, 'с/ка:\n(код)', 460, 40, 'center', 4, 'black',  bg_color='white', bg_border='green')
  268.         self.widget_factory.get_label_un(self.tab2, '1. Права върху имоти и други', 20, 90, 'w', 26, bg_color='white', bg_border='green')
  269.         self.widget_factory.get_label_un(self.tab2, '    - подобрения върху земите', 20, 150, 'w', 24, bg_color='white', bg_border='green')
  270.         self.widget_factory.get_label_un(self.tab2, '    - сгради', 20, 180, 'w', 24, bg_color='white', bg_border='green')
  271.         self.widget_factory.get_label_un(self.tab2, '2. Машини, производствено\nоборудване и апаратура', 20, 210, 'w', 24, bg_color='white', bg_border='green')
  272.         self.widget_factory.get_label_un(self.tab2, '3. Съоръжения и други', 20, 260, 'w', 24, bg_color='white', bg_border='green')
  273.         self.widget_factory.get_label_un(self.tab2, '    - транспортни средства', 20, 290, 'w', 24, bg_color='white', bg_border='green')
  274.         # TODO -> Entries
  275.         self.user_amo_pdr = self.widget_factory.get_entry(self.tab2, 280, 90, 5, 'right', name='user_amo_pdr')
  276.         self.user_amo_pdr.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_amo_pdr, "pdr", "oc"))
  277.         self.l_open_amo_pdr = self.widget_factory.get_label_un(self.tab2, '0', 340, 90, 'e', 11, 'black',bg_color='white', bg_border='green', j='left', name='amo_pdr')
  278.         self.e_amo_pdr = self.widget_factory.get_entry(self.tab2, 450, 90, 9, 'left', name='pdr')
  279.         self.e_amo_pdr.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_amo_pdr))
  280.         self.e_amo_pdr.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_amo_pdr))
  281.  
  282.         self.user_amo_pz = self.widget_factory.get_entry(self.tab2, 280, 150, 5, 'right', name='user_amo_pz')
  283.         self.user_amo_pz.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_amo_pz, "pz", "oc"))
  284.         self.l_open_amo_pz = self.widget_factory.get_label_un(self.tab2, '0', 340, 150, 'e', 11, 'black',bg_color='white', bg_border='green', j='left')
  285.         self.e_amo_pz = self.widget_factory.get_entry(self.tab2, 450, 150, 9, name='pz')
  286.         self.e_amo_pz.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_amo_pz))
  287.         self.e_amo_pz.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_amo_pz))
  288.  
  289.         self.user_amo_s = self.widget_factory.get_entry(self.tab2, 280, 180, 5, 'right', name='user_amo_s')
  290.         self.user_amo_s.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_amo_s, "s", "oc"))
  291.         self.l_open_amo_s = self.widget_factory.get_label_un(self.tab2, '0', 340, 180, 'e', 11, 'black',bg_color='white', bg_border='green', j='left')
  292.         self.e_amo_s = self.widget_factory.get_entry(self.tab2, 450, 180, 9, name='s')
  293.         self.e_amo_s.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_amo_s))
  294.         self.e_amo_s.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_amo_s))
  295.  
  296.         self.user_amo_m = self.widget_factory.get_entry(self.tab2, 280, 220, 5, 'right', name='user_amo_m')
  297.         self.user_amo_m.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_amo_m, "m", "oc"))
  298.         self.l_open_amo_m = self.widget_factory.get_label_un(self.tab2, '0', 340, 220, 'e', 11, 'black',bg_color='white', bg_border='green', j='left')
  299.         self.e_amo_m = self.widget_factory.get_entry(self.tab2, 450, 220, 9, name='m')
  300.         self.e_amo_m.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_amo_m))
  301.         self.e_amo_m.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_amo_m))
  302.  
  303.         self.user_amo_sdr = self.widget_factory.get_entry(self.tab2, 280, 260, 5, 'right', name='user_amo_sdr')
  304.         self.user_amo_sdr.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_amo_sdr, "sdr", "oc"))
  305.         self.l_open_amo_sdr = self.widget_factory.get_label_un(self.tab2, '0', 340, 260, 'e', 11, 'black',bg_color='white', bg_border='green', j='left')
  306.         self.e_amo_sdr = self.widget_factory.get_entry(self.tab2, 450, 260, 9, name='sdr')
  307.         self.e_amo_sdr.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_amo_sdr))
  308.         self.e_amo_sdr.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_amo_sdr))
  309.  
  310.         self.user_amo_ts = self.widget_factory.get_entry(self.tab2, 280, 290, 5, 'right', name='user_amo_ts')
  311.         self.user_amo_ts.bind("<KeyRelease>", lambda e: self.update_state_open_bal(self.user_amo_ts, "ts", "oc"))
  312.         self.l_open_amo_ts = self.widget_factory.get_label_un(self.tab2, '0', 340, 290, 'e', 11, 'black',bg_color='white', bg_border='green', j='left')
  313.         self.e_amo_ts = self.widget_factory.get_entry(self.tab2, 450, 290, 9, name='ts')
  314.         self.e_amo_ts.bind("<KeyRelease>", lambda e: self.on_entry_key_release(self.e_amo_ts))
  315.         self.e_amo_ts.bind("<FocusIn>", lambda e: self.entry_on_focus(self.e_amo_ts))
  316.         # TODO Check button Amort
  317.         self.check_b2 = Checkbutton(self.tab2, text="преоценка", bg='white', variable=self.check_amort,
  318.                                     command=lambda: self.act_c2())
  319.         self.check_b2.place(x=275, y=20)
  320.         # TODO -> DOWN LABELS
  321.         self.widget_factory.get_label(self.tab2, 90, 430, 'В началното', 12, 'e', font=10, bg_color='white')
  322.         self.widget_factory.get_label(self.tab2, 195, 430, 'Увеличение', 12, 'e', font=10, bg_color='white')
  323.         self.widget_factory.get_label(self.tab2, 300, 430, 'Намаление', 12, 'e', font=10, bg_color='white')
  324.         self.widget_factory.get_label(self.tab2, 410, 430, 'В края', 12, 'e', font=10, bg_color='white')
  325.         self.widget_factory.get_label(self.tab2, 20, 450, 'Група II.:', 10, 'w', font=10, bg_color='white')
  326.         self.l_amo_open_total = self.widget_factory.get_label(self.tab2, 90, 450, 0.0, 12, 'e', color='black',
  327.                                                               font=10, bg_color='white')
  328.         self.l_amo_turn_d_total = self.widget_factory.get_label(self.tab2, 195, 450, 0.0, 12, 'e', color='black',
  329.                                                                 font=10, bg_color='white')
  330.         self.l_amo_turn_c_total = self.widget_factory.get_label(self.tab2, 300, 450, 0.0, 12, 'e', color='black',
  331.                                                                 font=10, bg_color='white')
  332.         self.l_amo_close_total = self.widget_factory.get_label(self.tab2, 410, 450, 0.0, 12, 'e', color='black',
  333.                                                                font=10, bg_color='white')
  334.         # TODO Преоценка Активи
  335.         self.widget_factory.get_label_un(self.tab3, 'С/ка: АКТИВИ', 20, 20, 'w', 26, 'black', bg_color='mint cream', bg_border='red')
  336.         self.widget_factory.get_label_un(self.tab3, 'Група II.: ПРЕОЦЕНКА !', 20, 50, 'w', 26, 'black', bg_color='mint cream', bg_border='red')
  337.         self.widget_factory.get_label_un(self.tab3, 'Увеличение\n(лева)', 280, 40, 'w', 10, 'black', bg_color='mint cream', bg_border='red', j='center')
  338.         self.widget_factory.get_label_un(self.tab3, 'Намаление\n(лева)', 370, 40, 'w', 10, 'black', bg_color='mint cream', bg_border='red', j='center')
  339.         self.widget_factory.get_label_un(self.tab3, 'Салдо\n(разлика)', 470, 40, 'w', 7, 'black', bg_color='mint cream', bg_border='green')
  340.         self.widget_factory.get_label_un(self.tab3, '1. Права върху имоти и други', 20, 90, 'w', 26, bg_color='mint cream', bg_border='red')
  341.         self.widget_factory.get_label_un(self.tab3, '    - земи', 20, 120, 'w', 24, bg_color='mint cream', bg_border='red', j='left')
  342.         self.widget_factory.get_label_un(self.tab3, '    - подобрения върху земите', 20, 150, 'w', 24, bg_color='mint cream', bg_border='red')
  343.         self.widget_factory.get_label_un(self.tab3, '    - сгради', 20, 180, 'w', 24, bg_color='mint cream', bg_border='red')
  344.         self.widget_factory.get_label_un(self.tab3, '2. Машини, производствено\nоборудване и апаратура', 20, 210, 'w', 24, bg_color='mint cream', bg_border='red')
  345.         self.widget_factory.get_label_un(self.tab3, '3. Съоръжения и други', 20, 260, 'w', 24, bg_color='mint cream', bg_border='red')
  346.         self.widget_factory.get_label_un(self.tab3, '    - транспортни средства', 20, 290, 'w', 24, bg_color='mint cream', bg_border='red')
  347.         self.widget_factory.get_label_un(self.tab3, '4. Дълг. материални активи в\n процес на изграждане', 20, 320, 'w', 26, bg_color='mint cream', bg_border='red', j='left')
  348.         self.widget_factory.get_label_un(self.tab3, '    - предоставени аванси', 20, 370, 'w', 26, bg_color='mint cream', bg_border='red')
  349.         # TODO -> Entries
  350.         self.turn_d_pdr = self.widget_factory.get_entry(self.tab3, 280, 90, 12, 'right', name='d_pdr')
  351.         self.turn_d_pdr.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_d_pdr, "pdr", "inc"))
  352.         self.turn_c_pdr = self.widget_factory.get_entry(self.tab3, 370, 90, 12, 'right', name='c_pdr')
  353.         self.turn_c_pdr.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_c_pdr, "pdr", "dec"))
  354.         self.pdr = self.widget_factory.get_label(self.tab3, 490, 90, '0', 3, 'e', color='red', font=10, bg_color='mint cream')
  355.  
  356.         self.turn_d_z = self.widget_factory.get_entry(self.tab3, 280, 120, 12, 'right', name='d_z')
  357.         self.turn_d_z.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_d_z, "z", "inc"))
  358.         self.turn_c_z = self.widget_factory.get_entry(self.tab3, 370, 120, 12, 'right', name='c_z')
  359.         self.turn_c_z.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_c_z, "z", "dec"))
  360.         self.z = self.widget_factory.get_label(self.tab3, 490, 120, '0', 3, 'e', color='red', font=10, bg_color='mint cream')
  361.  
  362.         self.turn_d_pz = self.widget_factory.get_entry(self.tab3, 280, 150, 12, 'right', name='d_pz')
  363.         self.turn_d_pz.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_d_pz, "pz", "inc"))
  364.         self.turn_c_pz = self.widget_factory.get_entry(self.tab3, 370, 150, 12, 'right', name='c_pz')
  365.         self.turn_c_pz.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_c_pz, "pz", "dec"))
  366.         self.pz = self.widget_factory.get_label(self.tab3, 490, 150, '0', 3, 'e', color='red', font=10, bg_color='mint cream')
  367.  
  368.         self.turn_d_s = self.widget_factory.get_entry(self.tab3, 280, 180, 12, 'right', name='d_s')
  369.         self.turn_d_s.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_d_s, "s", "inc"))
  370.         self.turn_c_s = self.widget_factory.get_entry(self.tab3, 370, 180, 12, 'right', name='c_s')
  371.         self.turn_c_s.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_c_s, "s", "dec"))
  372.         self.s = self.widget_factory.get_label(self.tab3, 490, 180, '0', 3, 'e', color='red', font=10, bg_color='mint cream')
  373.  
  374.         self.turn_d_m = self.widget_factory.get_entry(self.tab3, 280, 220, 12, 'right', name='d_m')
  375.         self.turn_d_m.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_d_m, "m", "inc"))
  376.         self.turn_c_m = self.widget_factory.get_entry(self.tab3, 370, 220, 12, 'right', name='c_m')
  377.         self.turn_c_m.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_c_m, "m", "dec"))
  378.         self.m = self.widget_factory.get_label(self.tab3, 490, 220, '0', 3, 'e', color='red', font=10, bg_color='mint cream')
  379.  
  380.         self.turn_d_sdr = self.widget_factory.get_entry(self.tab3, 280, 260, 12, 'right', name='d_sdr')
  381.         self.turn_d_sdr.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_d_sdr, "sdr", "inc"))
  382.         self.turn_c_sdr = self.widget_factory.get_entry(self.tab3, 370, 260, 12, 'right', name='c_sdr')
  383.         self.turn_c_sdr.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_c_sdr, "sdr", "dec"))
  384.         self.sdr = self.widget_factory.get_label(self.tab3, 490, 260, '0', 3, 'e', color='red', font=10, bg_color='mint cream')
  385.  
  386.         self.turn_d_ts = self.widget_factory.get_entry(self.tab3, 280, 290, 12, 'right', name='d_ts')
  387.         self.turn_d_ts.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_d_pz, "ts", "inc"))
  388.         self.turn_c_ts = self.widget_factory.get_entry(self.tab3, 370, 290, 12, 'right', name='c_ts')
  389.         self.turn_c_ts.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_c_pz, "ts", "dec"))
  390.         self.ts = self.widget_factory.get_label(self.tab3, 490, 290, '0', 3, 'e', color='red', font=10, bg_color='mint cream')
  391.  
  392.         self.rpma = self.widget_factory.get_label(self.tab3, 490, 320, '0', 3, 'e', color='red', font=10, bg_color='mint cream')
  393.         self.adv = self.widget_factory.get_label(self.tab3, 490, 370, '0', 3, 'e', color='red', font=10, bg_color='mint cream')
  394.  
  395.         # TODO Преоценка Амортизации
  396.         self.widget_factory.get_label_un(self.tab4, 'с/ка: АМОРТИЗАЦИИ', 20, 20, 'w', 26, 'black', bg_color='lemon chiffon', bg_border='red')
  397.         self.widget_factory.get_label_un(self.tab4, 'Група I.: ПРЕОЦЕНКА !', 20, 50, 'w', 26, 'black', bg_color='lemon chiffon', bg_border='red')
  398.         self.widget_factory.get_label_un(self.tab4, 'Увеличение\n(лева)', 280, 40, 'w', 10, 'black', bg_color='lemon chiffon', bg_border='red', j='center')
  399.         self.widget_factory.get_label_un(self.tab4, 'Намаление\n(лева)', 370, 40, 'w', 10, 'black', bg_color='lemon chiffon', bg_border='red', j='center')
  400.         self.widget_factory.get_label_un(self.tab4, 'Салдо\n(разлика)', 470, 40, 'w', 7, 'black', bg_color='lemon chiffon', bg_border='green')
  401.         self.widget_factory.get_label_un(self.tab4, '1. Права върху имоти и други', 20, 90, 'w', 26, bg_color='lemon chiffon', bg_border='green')
  402.         self.widget_factory.get_label_un(self.tab4, '    - подобрения върху земите', 20, 150, 'w', 24, bg_color='lemon chiffon', bg_border='green')
  403.         self.widget_factory.get_label_un(self.tab4, '    - сгради', 20, 180, 'w', 24, bg_color='lemon chiffon', bg_border='green')
  404.         self.widget_factory.get_label_un(self.tab4, '2. Машини, производствено\nоборудване и апаратура', 20, 210, 'w', 24, bg_color='lemon chiffon', bg_border='green')
  405.         self.widget_factory.get_label_un(self.tab4, '3. Съоръжения и други', 20, 260, 'w', 24, bg_color='lemon chiffon', bg_border='green')
  406.         self.widget_factory.get_label_un(self.tab4, '    - транспортни средства', 20, 290, 'w', 24, bg_color='lemon chiffon', bg_border='green')
  407.         # TODO -> Entries
  408.         self.turn_d_amo_pdr = self.widget_factory.get_entry(self.tab4, 280, 90, 12, 'right')
  409.         self.turn_d_amo_pdr.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_d_amo_pdr, "pdr", "inc"))
  410.         self.turn_c_amo_pdr = self.widget_factory.get_entry(self.tab4, 370, 90, 12, 'right')
  411.         self.turn_c_amo_pdr.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_c_amo_pdr, "pdr", "dec"))
  412.         self.amo_pdr = self.widget_factory.get_label(self.tab4, 490, 90, '0', 3, 'e', color='red', font=10, bg_color='lemon chiffon')
  413.  
  414.         self.turn_d_amo_pz = self.widget_factory.get_entry(self.tab4, 280, 150, 12, 'right', name='d_amo_pz')
  415.         self.turn_d_amo_pz.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_d_amo_pz, "pz", "inc"))
  416.         self.turn_c_amo_pz = self.widget_factory.get_entry(self.tab4, 370, 150, 12, 'right', name='c_pz')
  417.         self.turn_c_amo_pz.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_c_amo_pz, "pz", "dec"))
  418.         self.amo_pz = self.widget_factory.get_label(self.tab4, 490, 150, '0', 3, 'e', color='red', font=10, bg_color='lemon chiffon')
  419.  
  420.         self.turn_d_amo_s = self.widget_factory.get_entry(self.tab4, 280, 180, 12, 'right', name='d_amo_s')
  421.         self.turn_d_amo_s.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_d_amo_s, "s", "inc"))
  422.         self.turn_c_amo_s = self.widget_factory.get_entry(self.tab4, 370, 180, 12, 'right', name='c_s')
  423.         self.turn_c_amo_s.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_c_amo_s, "s", "dec"))
  424.         self.amo_s = self.widget_factory.get_label(self.tab4, 490, 180, '0', 3, 'e', color='red', font=10, bg_color='lemon chiffon')
  425.  
  426.         self.turn_d_amo_m = self.widget_factory.get_entry(self.tab4, 280, 220, 12, 'right', name='d_amo_m')
  427.         self.turn_d_amo_m.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_d_amo_m, "m", "inc"))
  428.         self.turn_c_amo_m = self.widget_factory.get_entry(self.tab4, 370, 220, 12, 'right', name='c_m')
  429.         self.turn_c_amo_m.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_c_amo_m, "m", "dec"))
  430.         self.amo_m = self.widget_factory.get_label(self.tab4, 490, 220, '0', 3, 'e', color='red', font=10, bg_color='lemon chiffon')
  431.  
  432.         self.turn_d_amo_sdr = self.widget_factory.get_entry(self.tab4, 280, 260, 12, 'right', name='d_amo_sdr')
  433.         self.turn_d_amo_sdr.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_d_amo_sdr, "sdr", "inc"))
  434.         self.turn_c_amo_sdr = self.widget_factory.get_entry(self.tab4, 370, 260, 12, 'right', name='c_sdr')
  435.         self.turn_c_amo_sdr.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_c_amo_sdr, "sdr", "dec"))
  436.         self.amo_sdr = self.widget_factory.get_label(self.tab4, 490, 260, '0', 3, 'e', color='red', font=10, bg_color='lemon chiffon')
  437.  
  438.         self.turn_d_amo_ts = self.widget_factory.get_entry(self.tab4, 280, 290, 12, 'right', name='d_amo_ts')
  439.         self.turn_d_amo_ts.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_d_amo_pz, "ts", "inc"))
  440.         self.turn_c_amo_ts = self.widget_factory.get_entry(self.tab4, 370, 290, 12, 'right', name='c_ts')
  441.         self.turn_c_amo_ts.bind("<KeyRelease>", lambda e: self.revaluations(self.turn_c_amo_pz, "ts", "dec"))
  442.         self.amo_ts = self.widget_factory.get_label(self.tab4, 490, 290, '0', 3, 'e', color='red', font=10, bg_color='lemon chiffon')
  443.  
  444.     def get_tab(self, *args):
  445.         self.current_tab = self.tabs.tab(self.tabs.select(), "text")
  446.         if self.current_tab == 'Активи' or self.current_tab == 'Преоценка активи':
  447.             self.open, self.close = 'str_open_d', 'str_close_d'
  448.             self.treeview_acc.heading('#3', text='НС Дебит  ')
  449.             self.treeview_acc.heading('#6', text='КС Дебит  ')
  450.             self.term_dc = 'debit'
  451.             if self.current_tab == 'Активи':
  452.                 self.treeview_acc.configure(selectmode='browse')
  453.                 self.e_pdr.focus_set()
  454.                 self.b_add['state'] = 'normal'
  455.                 self.b_note['state'] = 'normal'
  456.             else:
  457.                 self.treeview_acc.configure(selectmode='none')
  458.                 self.b_note['state'] = 'disabled'
  459.         else:
  460.             self.open, self.close = 'str_open_c', 'str_close_c'
  461.             self.treeview_acc.heading('#3', text='НС Кредит  ')
  462.             self.treeview_acc.heading('#6', text='КС Кредит  ')
  463.             self.term_dc = 'credit'
  464.             if self.current_tab == "Амортизации":
  465.                 self.treeview_acc.configure(selectmode='browse')
  466.                 self.e_amo_pdr.focus_set()
  467.                 self.b_note['state'] = 'normal'
  468.             else:
  469.                 self.treeview_acc.configure(selectmode='none')
  470.                 self.b_note['state'] = 'disabled'
  471.         self.fill_treeview(term_dc=self.term_dc)
  472.         self.fill_labels()
  473.  
  474.     def set_pop_message_answer(self, answer):
  475.         self.pop_message_answer = answer
  476.  
  477.     def on_save(self):
  478.         # TODO -> Попълваме Началното салдо, въведено от потребителя:
  479.         for entry in self.user_ns:
  480.             self.acc_rec_dma[entry]['ns'] = self.user_ns[entry]
  481.         for entry in self.user_ns_amo:
  482.             self.acc_rec_dma[entry]['ns_amo'] = self.user_ns_amo[entry]
  483.         # TODO -> Попълваме сметките, по Ентрита на активи и амортизации
  484.         if not self.dict_entries:  # Речника е празен
  485.             for entry in self.acc_rec_dma:
  486.                 self.acc_rec_dma[entry]['assets'].clear()
  487.         if not self.dict_entries_amo:  # Речника е празен
  488.             for entry in self.acc_rec_dma:
  489.                 self.acc_rec_dma[entry]['amort'].clear()
  490.         for entry in self.dict_entries:
  491.             if self.dict_entries[entry] is None:
  492.                 self.dict_entries[entry] = []
  493.             self.acc_rec_dma[entry]['assets'] = self.dict_entries[entry]
  494.         for entry in self.dict_entries_amo:
  495.             if self.dict_entries_amo[entry] is None:
  496.                 self.dict_entries_amo[entry] = []
  497.             self.acc_rec_dma[entry]['amort'] = self.dict_entries_amo[entry]
  498.         # TODO -> попълване на сумите на преоценката
  499.         for entry in self.assets_re:
  500.             for dir in self.assets_re[entry]:
  501.                 self.acc_rec_dma[entry]['assets_re'][dir] = self.assets_re[entry][dir]
  502.         for entry in self.amort_re:
  503.             for dir in self.amort_re[entry]:
  504.                 self.acc_rec_dma[entry]['amort_re'][dir] = self.amort_re[entry][dir]
  505.         print('self.acc_rec_dma: ', self.acc_rec_dma)
  506.  
  507.         json_file_io = JsonFileIo(file_name=registry['dma_import_form_acc_rec_dma_file_name'])
  508.         json_file_io.write_content(self.acc_rec_dma)
  509.         # TODO -> Проверка за недобавена сметка и съобщение !!!!!
  510.         if len(self.list_unadded_accs) > 0:
  511.             # TODO -> Показва pop_message "Има недобавени сметки !
  512.             pop_message = self.widget_factory.get_pop_message(self, lambda answer: self.set_pop_message_answer(answer),
  513.                                                               "Има недобавени сметки !", 1, 'red')
  514.             self.wait_window(pop_message.pop)
  515.             # TODO -> Ако "ДА"
  516.             self.destroy()
  517.             return
  518.         else:
  519.             pop_message = self.widget_factory.get_pop_message(self, lambda answer: self.set_pop_message_answer(answer),
  520.                                                               "Всички сметки са добавени !", 1, 'green')
  521.             self.wait_window(pop_message.pop)
  522.             # TODO -> Ако "ДА"
  523.             self.destroy()
  524.             return
  525.  
  526.     def on_correction(self):
  527.         if self.b_note['state'] == 'disabled':
  528.             return
  529.         if self.current_tab == 'Активи':
  530.             # TODO -> Махаме маркировката на Treeview и забраната за селекция
  531.             for code in self.selected_accs:
  532.                 self.treeview_acc.tag_configure(code, background='lightgrey')
  533.             self.selected_accs.clear()
  534.             # TODO -> Изтриваме стойностите на речника, на ентритата и лейбълите
  535.             self.dict_entries.clear()
  536.             self.get_total = {'total': {'od': 0.0, 'oc': 0.0, 'td': 0.0, 'tc': 0.0, 'cd': 0.0, 'cc': 0.0}}
  537.             self.l_open_pdr['text'] = 0
  538.             self.l_open_z['text'] = 0
  539.             self.l_open_pz['text'] = 0
  540.             self.l_open_s['text'] = 0
  541.             self.l_open_m['text'] = 0
  542.             self.l_open_sdr['text'] = 0
  543.             self.l_open_ts['text'] = 0
  544.             self.l_open_rpma['text'] = 0
  545.             self.l_open_adv['text'] = 0
  546.             # TODO -> На преоценките лейбъли ???
  547.             self.pdr['text'] = 0
  548.             self.z['text'] = 0
  549.             self.pz['text'] = 0
  550.             self.s['text'] = 0
  551.             self.m['text'] = 0
  552.             self.sdr['text'] = 0
  553.             self.ts['text'] = 0
  554.             self.rpma['text'] = 0
  555.             self.adv['text'] = 0
  556.         elif self.current_tab == 'Амортизации':
  557.             # TODO -> Махаме маркировката на Treeview и забраната за селекция
  558.             for code in self.selected_accs_amo:
  559.                 self.treeview_acc.tag_configure(code, background='lightgrey')
  560.             self.selected_accs_amo.clear()
  561.             # TODO -> Изтриваме стойностите на речника, на ентритата и лейбълите
  562.             self.dict_entries_amo.clear()
  563.             self.get_total_amo = {'total': {'od': 0.0, 'oc': 0.0, 'td': 0.0, 'tc': 0.0, 'cd': 0.0, 'cc': 0.0}}
  564.             self.l_open_amo_pdr['text'] = 0
  565.             self.l_open_amo_pz['text'] = 0
  566.             self.l_open_amo_s['text'] = 0
  567.             self.l_open_amo_m['text'] = 0
  568.             self.l_open_amo_sdr['text'] = 0
  569.             self.l_open_amo_ts['text'] = 0
  570.             # TODO ?????
  571.             self.amo_pdr['text'] = 0
  572.             self.amo_pz['text'] = 0
  573.             self.amo_s['text'] = 0
  574.             self.amo_m['text'] = 0
  575.             self.amo_sdr['text'] = 0
  576.             self.amo_ts['text'] = 0
  577.  
  578.         self.fill_labels()
  579.  
  580.         self.fill_treeview(term_dc=self.term_dc)
  581.  
  582.     # TODO -> Преоценка
  583.     def revaluations(self, re_val: Entry, key1: str, key2: str):
  584.         revaluation = re_val.get()
  585.         if ' ' in revaluation:
  586.             re_val.delete(0, END)
  587.             re_val.insert(0, revaluation)
  588.         is_good = True
  589.         if revaluation == '':
  590.             revaluation = 0.0
  591.         else:
  592.             try:
  593.                 float(revaluation)
  594.             except:
  595.                 is_good = False
  596.                 revaluation = 0.0
  597.         if is_good:
  598.             re_val.configure(bg='white')
  599.         else:
  600.             re_val.configure(bg='red')
  601.         if self.current_tab == 'Преоценка активи':
  602.             self.assets_re[key1][key2] = float(revaluation)
  603.         elif self.current_tab == 'Преоценка амортизации':
  604.             self.amort_re[key1][key2] = float(revaluation)
  605.  
  606.     # TODO -> ЗА разлики между НС от потребителя и НС от сметките
  607.     def update_state_open_bal(self, open_bal: Entry, key1: str, key2: str): # self.user_s, s, od
  608.         name_entry = open_bal.winfo_name()  # user_s
  609.         user_1000 = open_bal.get()  # 55
  610.         try:
  611.             user_1000 = int(user_1000)
  612.         except:
  613.             user_1000 = 0
  614.         calc = self.get_sum_string(key1, key2)  # s  od
  615.         calc_1000 = int(round(calc / 1000))
  616.         if user_1000 == calc_1000:
  617.             # TODO оцвети нещо
  618.             open_bal.configure(bg='white')
  619.         else:
  620.             open_bal.configure(bg='red')
  621.         # TODO -> Да се попълни речник с НС, въведени от потребителя !
  622.         if self.current_tab == 'Активи':
  623.             self.user_ns[key1] = user_1000
  624.         elif self.current_tab == 'Амортизации':
  625.             self.user_ns_amo[key1] = user_1000
  626.         if name_entry == 'user_pdr':
  627.             self.pdr['text'] = user_1000 - calc_1000
  628.             print("self.acc_rec_dma", self.acc_rec_dma)
  629.             self.acc_rec_dma['pdr']['assets_re']['diff'] = user_1000 - calc_1000
  630.         elif name_entry == 'user_z':
  631.             self.z['text'] = int(user_1000 - calc_1000)
  632.             self.acc_rec_dma['z']['assets_re']['diff'] = int(user_1000 - calc_1000)
  633.         elif name_entry == 'user_pz':
  634.             self.pz['text'] = int(user_1000 - calc_1000)
  635.             self.acc_rec_dma['pz']['assets_re']['diff'] = int(user_1000 - calc_1000)
  636.         elif name_entry == 'user_s':
  637.             self.s['text'] = int(user_1000 - calc_1000)
  638.             self.acc_rec_dma['s']['assets_re']['diff'] = int(user_1000 - calc_1000)
  639.         elif name_entry == 'user_m':
  640.             self.m['text'] = int(user_1000 - calc_1000)
  641.             self.acc_rec_dma['m']['assets_re']['diff'] = int(user_1000 - calc_1000)
  642.         elif name_entry == 'user_sdr':
  643.             self.sdr['text'] = int(user_1000 - calc_1000)
  644.             self.acc_rec_dma['sdr']['assets_re']['diff'] = int(user_1000 - calc_1000)
  645.         elif name_entry == 'user_ts':
  646.             self.ts['text'] = int(user_1000 - calc_1000)
  647.             self.acc_rec_dma['ts']['assets_re']['diff'] = int(user_1000 - calc_1000)
  648.         elif name_entry == 'user_rpma':
  649.             self.rpma['text'] = int(user_1000 - calc_1000)
  650.             self.acc_rec_dma['rpma']['assets_re']['diff'] = int(user_1000 - calc_1000)
  651.         elif name_entry == 'user_adv':
  652.             self.adv['text'] = int(user_1000 - calc_1000)
  653.             self.acc_rec_dma['adv']['assets_re']['diff'] = int(user_1000 - calc_1000)
  654.  
  655.         elif name_entry == 'user_amo_pdr':
  656.             self.amo_pdr['text'] = int(user_1000 - calc_1000)
  657.             self.acc_rec_dma['pdr']['amort_re']['diff'] = int(user_1000 - calc_1000)
  658.         elif name_entry == 'user_amo_pz':
  659.             self.amo_pz['text'] = int(user_1000 - calc_1000)
  660.             self.acc_rec_dma['pz']['amort_re']['diff'] = int(user_1000 - calc_1000)
  661.         elif name_entry == 'user_amo_s':
  662.             self.amo_s['text'] = int(user_1000 - calc_1000)
  663.             self.acc_rec_dma['s']['amort_re']['diff'] = int(user_1000 - calc_1000)
  664.         elif name_entry == 'user_amo_m':
  665.             self.amo_m['text'] = int(user_1000 - calc_1000)
  666.             self.acc_rec_dma['m']['amort_re']['diff'] = int(user_1000 - calc_1000)
  667.         elif name_entry == 'user_amo_sdr':
  668.             self.amo_sdr['text'] = int(user_1000 - calc_1000)
  669.             self.acc_rec_dma['sdr']['amort_re']['diff'] = int(user_1000 - calc_1000)
  670.         elif name_entry == 'user_amo_ts':
  671.             self.amo_ts['text'] = int(user_1000 - calc_1000)
  672.             self.acc_rec_dma['ts']['amort_re']['diff'] = int(user_1000 - calc_1000)
  673.  
  674.     def get_sum_string(self, key1, key2):
  675.         if self.current_tab == 'Активи':
  676.             if key1 in self.get_sums:
  677.                 return self.get_sums[key1][key2]
  678.         elif self.current_tab == 'Амортизации':
  679.             if key1 in self.get_sums_amo:
  680.                 return self.get_sums_amo[key1][key2]
  681.         return 0
  682.  
  683.     def fill_labels(self):
  684.         for entry in self.dict_entries_amo:
  685.             if self.dict_entries_amo[entry] is None:
  686.                 self.dict_entries_amo[entry] = []
  687.         for entry in self.dict_entries:
  688.             if self.dict_entries[entry] is None:
  689.                 self.dict_entries[entry] = []
  690.         if self.current_tab == 'Активи':
  691.             if len(self.dict_entries) > 0:
  692.                 self.get_sums, self.get_total = self.mapped_calculations.get_sum_list_accounts(self.dict_entries)
  693.                 for entr in self.get_sums:
  694.                     if entr == 'pdr':
  695.                         self.l_open_pdr['text'] = f"{self.get_sums['pdr']['od']:,.2f}".replace(',', ' ')
  696.                         self.update_state_open_bal(self.user_pdr, "pdr", "od")
  697.                     elif entr == 'z':
  698.                         self.l_open_z['text'] = f"{self.get_sums['z']['od']:,.2f}".replace(',', ' ')
  699.                         self.update_state_open_bal(self.user_z, "z", "od")
  700.                     elif entr == 'pz':
  701.                         self.l_open_pz['text'] = f"{self.get_sums['pz']['od']:,.2f}".replace(',', ' ')
  702.                         self.update_state_open_bal(self.user_pz, "pz", "od")
  703.                     elif entr == 's':
  704.                         self.l_open_s['text'] = f"{self.get_sums['s']['od']:,.2f}".replace(',', ' ')
  705.                         self.update_state_open_bal(self.user_s, "s", "od")
  706.                     elif entr == 'm':
  707.                         self.l_open_m['text'] = f"{self.get_sums['m']['od']:,.2f}".replace(',', ' ')
  708.                         self.update_state_open_bal(self.user_m, "m", "od")
  709.                     elif entr == 'sdr':
  710.                         self.l_open_sdr['text'] = f"{self.get_sums['sdr']['od']:,.2f}".replace(',', ' ')
  711.                         self.update_state_open_bal(self.user_sdr, "sdr", "od")
  712.                     elif entr == 'ts':
  713.                         self.l_open_ts['text'] = f"{self.get_sums['ts']['od']:,.2f}".replace(',', ' ')
  714.                         self.update_state_open_bal(self.user_ts, "ts", "od")
  715.                     elif entr == 'rpma':
  716.                         self.l_open_rpma['text'] = f"{self.get_sums['rpma']['od']:,.2f}".replace(',', ' ')
  717.                         self.update_state_open_bal(self.user_rpma, "rpma", "od")
  718.                     elif entr == 'adv':
  719.                         self.l_open_adv['text'] = f"{self.get_sums['adv']['od']:,.2f}".replace(',', ' ')
  720.                         self.update_state_open_bal(self.user_adv, "adv", "od")
  721.             self.l_open_total['text'] = f"{self.get_total['total']['od']:,.2f}".replace(',', ' ')
  722.             self.l_turn_d_total['text'] = f"{self.get_total['total']['td']:,.2f}".replace(',', ' ')
  723.             self.l_turn_c_total['text'] = f"{self.get_total['total']['tc']:,.2f}".replace(',', ' ')
  724.             self.l_close_total['text'] = f"{self.get_total['total']['cd']:,.2f}".replace(',', ' ')
  725.         elif self.current_tab == 'Амортизации':
  726.             if len(self.dict_entries_amo) > 0:
  727.                 self.get_sums_amo, self.get_total_amo =\
  728.                     self.mapped_calculations.get_sum_list_accounts(self.dict_entries_amo)
  729.                 for entr in self.get_sums_amo:
  730.                     if entr == 'pdr':
  731.                         self.l_open_amo_pdr['text'] = f"{self.get_sums_amo['pdr']['oc']:,.2f}".replace(',', ' ')
  732.                         self.update_state_open_bal(self.user_amo_pdr, "pdr", "oc")
  733.                     elif entr == 'pz':
  734.                         self.l_open_amo_pz['text'] = f"{self.get_sums_amo['pz']['oc']:,.2f}".replace(',', ' ')
  735.                         self.update_state_open_bal(self.user_amo_pz, "pz", "oc")
  736.                     elif entr == 's':
  737.                         self.l_open_amo_s['text'] = f"{self.get_sums_amo['s']['oc']:,.2f}".replace(',', ' ')
  738.                         self.update_state_open_bal(self.user_amo_s, "s", "oc")
  739.                     elif entr == 'm':
  740.                         self.l_open_amo_m['text'] = f"{self.get_sums_amo['m']['oc']:,.2f}".replace(',', ' ')
  741.                         self.update_state_open_bal(self.user_amo_m, "m", "oc")
  742.                     elif entr == 'sdr':
  743.                         self.l_open_amo_sdr['text'] = f"{self.get_sums_amo['sdr']['oc']:,.2f}".replace(',', ' ')
  744.                         self.update_state_open_bal(self.user_amo_sdr, "sdr", "oc")
  745.                     elif entr == 'ts':
  746.                         self.l_open_amo_ts['text'] = f"{self.get_sums_amo['ts']['oc']:,.2f}".replace(',', ' ')
  747.                         self.update_state_open_bal(self.user_amo_ts, "ts", "oc")
  748.  
  749.             self.l_amo_open_total['text'] = f"{self.get_total_amo['total']['oc']:,.2f}".replace(',', ' ')
  750.             self.l_amo_turn_d_total['text'] = f"{self.get_total_amo['total']['td']:,.2f}".replace(',', ' ')
  751.             self.l_amo_turn_c_total['text'] = f"{self.get_total_amo['total']['tc']:,.2f}".replace(',', ' ')
  752.             self.l_amo_close_total['text'] = f"{self.get_total_amo['total']['cc']:,.2f}".replace(',', ' ')
  753.  
  754.     def on_add(self):
  755.         if self.current_tab == 'Активи':
  756.             acc_code = self.last_entry.get()  # '203'
  757.             if acc_code is None or acc_code == '':
  758.                 return
  759.             self.selected_accs.append(list(self.treeview_acc.selection()))  # current_selection:  ('200',)
  760.             # TODO -> На името на Entry да добавим сметката
  761.             name_entry = self.last_entry.winfo_name()
  762.             if name_entry not in self.dict_entries:
  763.                 self.dict_entries[name_entry] = ()
  764.             self.dict_entries[name_entry] += self.treeview_acc.selection()  # Добавям маркираната сметка
  765.             # TODO -> Добавяне на децата и родителите на добавената сметка
  766.             all_children = self.account_tree.get_all_children(acc_code)  # all_children:  ['200', '203', '205']
  767.             all_parents = self.account_tree.get_all_parents(acc_code)  # acc_code = 223
  768.             self.selected_accs.extend(all_children)
  769.             self.selected_accs.extend(all_parents)
  770.             # TODO -> След добавяне да се изпразват всички ентрита, а не само добавеното !!!!!
  771.             if self.e_pdr.get() != '': self.e_pdr.delete(0, 'end')
  772.             if self.e_z.get() != '': self.e_z.delete(0, 'end')
  773.             if self.e_pz.get() != '': self.e_pz.delete(0, 'end')
  774.             if self.e_s.get() != '': self.e_s.delete(0, 'end')
  775.             if self.e_m.get() != '': self.e_m.delete(0, 'end')
  776.             if self.e_sdr.get() != '': self.e_sdr.delete(0, 'end')
  777.             if self.e_ts.get() != '': self.e_ts.delete(0, 'end')
  778.             if self.e_rpma.get() != '': self.e_rpma.delete(0, 'end')
  779.             if self.e_adv.get() != '': self.e_adv.delete(0, 'end')
  780.  
  781.         elif self.current_tab == 'Амортизации':
  782.             acc_code = self.last_entry.get()  # '203'
  783.             if acc_code is None or acc_code == '':
  784.                 return
  785.             self.selected_accs_amo.append(list(self.treeview_acc.selection()))
  786.             # TODO -> На името на Entry да добавим сметката
  787.             name_entry = self.last_entry.winfo_name()
  788.             if name_entry not in self.dict_entries_amo:
  789.                 self.dict_entries_amo[name_entry] = ()
  790.             self.dict_entries_amo[name_entry] += self.treeview_acc.selection()
  791.             # TODO -> Добавяне на децата и родителите на добавената сметка
  792.             all_children = self.account_tree.get_all_children(acc_code)  # all_children:  ['200', '203']
  793.             all_parents = self.account_tree.get_all_parents(acc_code)  # acc_code = 223
  794.             self.selected_accs_amo.extend(all_children)
  795.             self.selected_accs_amo.extend(all_parents)
  796.             # TODO -> След добавяне да се изпразват всички ентрита, а не само добавеното !!!!!
  797.             if self.e_amo_pdr.get() != '': self.e_amo_pdr.delete(0, 'end')
  798.             if self.e_amo_pz.get() != '': self.e_amo_pz.delete(0, 'end')
  799.             if self.e_amo_s.get() != '': self.e_amo_s.delete(0, 'end')
  800.             if self.e_amo_m.get() != '': self.e_amo_m.delete(0, 'end')
  801.             if self.e_amo_sdr.get() != '': self.e_amo_sdr.delete(0, 'end')
  802.             if self.e_amo_ts.get() != '': self.e_amo_ts.delete(0, 'end')
  803.  
  804.         self.fill_labels()
  805.         # TODO -> Попълваме Treeview
  806.         self.fill_treeview(term_dc=self.term_dc)
  807.  
  808.     def act_c1(self):
  809.         if self.check_assets.get() == 1:  # state: must be normal, disabled, or hidden
  810.             self.tabs.tab(self.tab3, state='normal')
  811.         elif self.check_assets.get() == 0:
  812.             self.tabs.tab(self.tab3, state='hidden')
  813.  
  814.     def act_c2(self):
  815.         if self.check_amort.get() == 1:  # state: must be normal, disabled, or hidden
  816.             self.tabs.tab(self.tab4, state='normal')
  817.         elif self.check_amort.get() == 0:
  818.             self.tabs.tab(self.tab4, state='hidden')
  819.  
  820.     def verify_selection(self):  # Забрана за маркиране
  821.         for code in self.selected_accs:
  822.             if self.treeview_acc.exists(code):
  823.                 self.treeview_acc.selection_remove(code)
  824.         for code in self.selected_accs_amo:
  825.             if self.treeview_acc.exists(code):
  826.                 self.treeview_acc.selection_remove(code)
  827.  
  828.     def on_selected_acc(self, source_treeview):
  829.         self.verify_selection()
  830.         current_item = source_treeview.focus()
  831.         if current_item in self.selected_accs or current_item in self.selected_accs_amo:  # <class 'tuple'>
  832.             return
  833.         values = source_treeview.item(current_item)["values"]
  834.         if not isinstance(values, list):
  835.             return
  836.         code = values[0]
  837.         self.last_entry.delete(0, END)
  838.         self.last_entry.insert(0, code)
  839.  
  840.     def entry_on_focus(self, entry):
  841.         self.last_entry = entry
  842.  
  843.     def on_entry_key_release(self, entry):
  844.         self.last_entry = entry
  845.         entry_text = entry.get()
  846.         if len(entry_text) < 2:
  847.             self.fill_treeview(term_dc=self.term_dc)
  848.             return
  849.         term = entry_text
  850.         self.fill_treeview(term=term, term_dc=self.term_dc)
  851.  
  852.     def dna(self):
  853.         try:
  854.             json_file_io = JsonFileIo(file_name=registry["dma_import_form_acc_rec_dma_file_name"])
  855.             tmp_acc_rec_dma = json_file_io.read_content()
  856.             if tmp_acc_rec_dma is not None:
  857.                 self.acc_rec_dma = tmp_acc_rec_dma
  858.             self.refill_form()
  859.             self.get_tab()  # Рефрешва таба, попълва self.current_tab
  860.         except:
  861.             pass
  862.         self.fill_treeview(term_dc=self.term_dc)
  863.         self.mainloop()
  864.  
  865.     def refill_form(self):
  866.         # TODO -> Попълваме Treeview с маркирани и забранени за селектиране сметки
  867.         for entry in self.acc_rec_dma:
  868.             self.dict_entries[entry] = self.acc_rec_dma[entry]['assets']
  869.         for entry in self.acc_rec_dma:
  870.             self.dict_entries_amo[entry] = self.acc_rec_dma[entry]['amort']
  871.         # TODO -> Попълваме сметките, децата и родителите на сметките в self.selected_accs, self.selected_accs_amo
  872.         for entry_name in self.dict_entries:
  873.             for acc_code in self.dict_entries[entry_name]:
  874.                 if acc_code not in self.selected_accs:
  875.                     self.selected_accs.append(acc_code)
  876.                     all_children = self.account_tree.get_all_children(acc_code)  # all_children:['200', '203'']
  877.                     all_parents = self.account_tree.get_all_parents(acc_code)  # acc_code = 223 all_parents:['22',]
  878.                     self.selected_accs.extend([a for a in all_children if a not in self.selected_accs])
  879.                     self.selected_accs.extend([a for a in all_parents if a not in self.selected_accs])
  880.         for entry_name in self.dict_entries_amo:
  881.             for acc_code in self.dict_entries_amo[entry_name]:
  882.                 if acc_code not in self.selected_accs_amo:
  883.                     self.selected_accs_amo.append(acc_code)
  884.                     all_children = self.account_tree.get_all_children(acc_code)  # all_children:['200', '203',]
  885.                     all_parents = self.account_tree.get_all_parents(acc_code)
  886.                     self.selected_accs_amo.extend([a for a in all_children if a not in self.selected_accs_amo])
  887.                     self.selected_accs_amo.extend([a for a in all_parents if a not in self.selected_accs_amo])
  888.         # TODO -> Попълваме Ентритата с НС user_ns и user_ns_amo
  889.         for entry_name in self.user_ns:
  890.             self.user_ns[entry_name] = self.acc_rec_dma[entry_name]['ns']
  891.         if self.user_ns['pdr'] > 0:
  892.             self.user_pdr.insert(0, self.user_ns['pdr'])
  893.         if self.user_ns['z'] > 0:
  894.             self.user_z.insert(0, self.user_ns['z'])
  895.         if self.user_ns['pz'] > 0:
  896.             self.user_pz.insert(0, self.user_ns['pz'])
  897.         if self.user_ns['s'] > 0:
  898.             self.user_s.insert(0, self.user_ns['s'])
  899.         if self.user_ns['m'] > 0:
  900.             self.user_m.insert(0, self.user_ns['m'])
  901.         if self.user_ns['sdr'] > 0:
  902.             self.user_sdr.insert(0, self.user_ns['sdr'])
  903.         if self.user_ns['ts'] > 0:
  904.             self.user_ts.insert(0, self.user_ns['ts'])
  905.         if self.user_ns['rpma'] > 0:
  906.             self.user_rpma.insert(0, self.user_ns['rpma'])
  907.         if self.user_ns['adv'] > 0:
  908.             self.user_adv.insert(0, self.user_ns['adv'])
  909.         for entry_name in self.user_ns_amo:
  910.             self.user_ns_amo[entry_name] = self.acc_rec_dma[entry_name]['ns_amo']
  911.         if self.user_ns_amo['pdr'] > 0:
  912.             self.user_amo_pdr.insert(0, self.user_ns_amo['pdr'])
  913.         if self.user_ns_amo['pz'] > 0:
  914.             self.user_amo_pz.insert(0, self.user_ns_amo['pz'])
  915.         if self.user_ns_amo['s'] > 0:
  916.             self.user_amo_s.insert(0, self.user_ns_amo['s'])
  917.         if self.user_ns_amo['m'] > 0:
  918.             self.user_amo_m.insert(0, self.user_ns_amo['m'])
  919.         if self.user_ns_amo['sdr'] > 0:
  920.             self.user_amo_sdr.insert(0, self.user_ns_amo['sdr'])
  921.         if self.user_ns_amo['ts'] > 0:
  922.             self.user_amo_ts.insert(0, self.user_ns_amo['ts'])
  923.         # TODO -> Попълваме Ентритата с Преоценките
  924.         print('self.assets_re: ', self.assets_re)
  925.         for entry in self.assets_re:
  926.             for dir in self.assets_re[entry]:
  927.                 self.assets_re[entry][dir] = self.acc_rec_dma[entry]['assets_re'][dir]
  928.         print('self.assets_re след refill: ', self.assets_re)
  929.         if self.assets_re['pdr']['inc'] > 0:
  930.             self.turn_d_pdr.insert(0, self.assets_re['pdr']['inc'])
  931.         if self.assets_re['pdr']['dec'] > 0:
  932.             self.turn_c_pdr.insert(0, self.assets_re['pdr']['dec'])
  933.         if self.assets_re['z']['inc'] > 0:
  934.             self.turn_d_z.insert(0, self.assets_re['z']['inc'])
  935.         if self.assets_re['z']['dec'] > 0:
  936.             self.turn_c_z.insert(0, self.assets_re['z']['dec'])
  937.         if self.assets_re['pz']['inc'] > 0:
  938.             self.turn_d_pz.insert(0, self.assets_re['pz']['inc'])
  939.         if self.assets_re['pz']['dec'] > 0:
  940.             self.turn_c_pz.insert(0, self.assets_re['pz']['dec'])
  941.  
  942.         if self.assets_re['s']['inc'] > 0:
  943.             self.turn_d_s.insert(0, self.assets_re['s']['inc'])
  944.         if self.assets_re['s']['dec'] > 0:
  945.             self.turn_c_s.insert(0, self.assets_re['s']['dec'])
  946.  
  947.         if self.assets_re['m']['inc'] > 0:
  948.             self.turn_d_m.insert(0, self.assets_re['m']['inc'])
  949.         if self.assets_re['m']['dec'] > 0:
  950.             self.turn_c_m.insert(0, self.assets_re['m']['dec'])
  951.  
  952.         if self.assets_re['sdr']['inc'] > 0:
  953.             self.turn_d_sdr.insert(0, self.assets_re['sdr']['inc'])
  954.         if self.assets_re['sdr']['dec'] > 0:
  955.             self.turn_c_sdr.insert(0, self.assets_re['sdr']['dec'])
  956.  
  957.         if self.assets_re['ts']['inc'] > 0:
  958.             self.turn_d_ts.insert(0, self.assets_re['ts']['inc'])
  959.         if self.assets_re['ts']['dec'] > 0:
  960.             self.turn_c_ts.insert(0, self.assets_re['ts']['dec'])
  961.  
  962.         for entry in self.amort_re:
  963.             for dir in self.amort_re[entry]:
  964.                 self.amort_re[entry][dir] = self.acc_rec_dma[entry]['amort_re'][dir]
  965.         print('self.amort_re след refill: ', self.amort_re)
  966.         if self.amort_re['pdr']['inc'] > 0:
  967.             self.turn_d_amo_pdr.insert(0, self.amort_re['pdr']['inc'])
  968.         if self.amort_re['pdr']['dec'] > 0:
  969.             self.turn_c_amo_pdr.insert(0, self.amort_re['pdr']['dec'])
  970.         if self.amort_re['pz']['inc'] > 0:
  971.             self.turn_d_amo_pz.insert(0, self.amort_re['pz']['inc'])
  972.         if self.amort_re['pz']['dec'] > 0:
  973.             self.turn_c_amo_pz.insert(0, self.amort_re['pz']['dec'])
  974.         if self.amort_re['s']['inc'] > 0:
  975.             self.turn_d_amo_s.insert(0, self.amort_re['s']['inc'])
  976.         if self.amort_re['s']['dec'] > 0:
  977.             self.turn_c_amo_s.insert(0, self.amort_re['s']['dec'])
  978.         if self.amort_re['m']['inc'] > 0:
  979.             self.turn_d_amo_m.insert(0, self.amort_re['m']['inc'])
  980.         if self.amort_re['m']['dec'] > 0:
  981.             self.turn_c_amo_m.insert(0, self.amort_re['m']['dec'])
  982.         if self.amort_re['sdr']['inc'] > 0:
  983.             self.turn_d_amo_sdr.insert(0, self.amort_re['sdr']['inc'])
  984.         if self.amort_re['sdr']['dec'] > 0:
  985.             self.turn_c_amo_sdr.insert(0, self.amort_re['sdr']['dec'])
  986.         if self.amort_re['ts']['inc'] > 0:
  987.             self.turn_d_amo_ts.insert(0, self.amort_re['ts']['inc'])
  988.         if self.amort_re['ts']['dec'] > 0:
  989.             self.turn_c_amo_ts.insert(0, self.amort_re['ts']['dec'])
  990.  
  991.     def fill_treeview(self, term=None, term_dc='debit'):
  992.         self.treeview_acc.delete(*self.treeview_acc.get_children())  # Вградена функция за изтриване на Treeview
  993.         # TODO -> Spinboxes
  994.         self.unadded_spin = self.var_spin_1.get()  # Взима стойността на спинбокса за недобавени
  995.         spin_2 = int(self.var_spin_2.get())
  996.         self.all_accounts.extend(self.selected_accs)
  997.         self.all_accounts.extend(self.selected_accs_amo)
  998.         self.list_unadded_accs = self.account_tree.get_unadded_acc(self.all_accounts, self.acc_data_mapped_da)
  999.  
  1000.         count_rows = 0
  1001.         for acc_code in self.acc_data_bycode:
  1002.             if acc_code not in self.acc_data_mapped_da:
  1003.                 continue
  1004.             if term_dc is not None and term_dc == 'debit':
  1005.                 if self.acc_data_bycode[acc_code]['open_c'] > 0 or self.acc_data_bycode[acc_code]['close_c'] > 0:
  1006.                     continue
  1007.             elif term_dc is not None and term_dc == 'credit':
  1008.                 if self.acc_data_bycode[acc_code]['open_d'] > 0 or self.acc_data_bycode[acc_code]['close_d'] > 0:
  1009.                     continue
  1010.             if term is not None:  # Искаме само сметките дето кода им започва с term
  1011.                 term_len = len(term)
  1012.                 code_piece = self.acc_data_bycode[acc_code]['code'][0:term_len]
  1013.                 # Ако сметката не започва с term
  1014.                 if term != code_piece:
  1015.                     continue  # прескачаме тая сметка, не отговаря на търсеното
  1016.             # TODO -> Ако spin_1 = 'недобавени' -> извежда само недобавените сметки в ентритата
  1017.             if self.unadded_spin == 'недобавени':
  1018.                 if acc_code not in self.list_unadded_accs:
  1019.                     continue
  1020.             # TODO -> spin_2 type of spin_2:  <class 'int'>
  1021.             groups_in_acc_code = re.findall('[0-9]+', acc_code)  # Връща list със групите на сметката
  1022.             top_group = groups_in_acc_code[0]
  1023.             depth = self.account_tree.get_depth(acc_code)
  1024.             if len(top_group) > spin_2 or depth > spin_2:
  1025.                 continue
  1026.             count_rows += 1
  1027.             row = [self.acc_data_bycode[acc_code]['code'],
  1028.                    self.acc_data_bycode[acc_code]['name'],
  1029.                    self.acc_data_bycode[acc_code][self.open],
  1030.                    self.acc_data_bycode[acc_code]['str_turn_d'],
  1031.                    self.acc_data_bycode[acc_code]['str_turn_c'],
  1032.                    self.acc_data_bycode[acc_code][self.close]]
  1033.             tags = acc_code
  1034.             iid = acc_code
  1035.             self.treeview_acc.insert('', END, values=row, tags=tags, iid=iid)  # ????
  1036.         self.treeview_acc.config(height=count_rows)
  1037.         if count_rows > 19:
  1038.             self.treeview_acc.configure(height=19)
  1039.         for code in self.selected_accs:  # Оцветяване на добавените сметки
  1040.             if self.treeview_acc.exists(code):
  1041.                 self.treeview_acc.tag_configure(code, background='powderblue')
  1042.         for code in self.selected_accs_amo:  # Оцветяване на добавените сметки
  1043.             if self.treeview_acc.exists(code):
  1044.                 self.treeview_acc.tag_configure(code, background='powderblue')
  1045.  
  1046.  
  1047. if __name__ == '__main__':
  1048.     dna = DnaFormImport()
  1049.     dna.dna()
  1050.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement