Advertisement
ALEXANDAR_GEORGIEV

lib_data_3

Jul 10th, 2022
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 21.00 KB | None | 0 0
  1. from reportlab.lib import colors
  2. from reportlab.platypus import Paragraph, Frame, Table, TableStyle, KeepInFrame, BaseDocTemplate, PageTemplate
  3.  
  4.  
  5. # Добавя редове в Актива, за да се приложи SPAN
  6. # @param data_row list Списък от 3 стойности/колони
  7. # @param extra_row None/dect Речник от свойства/стилове
  8. def append_data_row(data_row, extra_row = None, target = None):    # data_
  9.     target_data_table = data_table_a
  10.     target_extra = extra_a
  11.     if target is not None and target == "p":
  12.         target_data_table = data_table_p
  13.         target_extra = extra_p
  14.  
  15.  
  16.     if data_row[1] == '0' and data_row[2] == '0':
  17.         return
  18.     target_data_table.append(data_row)
  19.     print(f"Добавен ред на индекс {len(target_data_table) - 1}")
  20.     if extra_row is None:
  21.         extra_row = {}
  22.     if "Общо" in data_row[0]:
  23.         extra_row["is_total"] = True
  24.     line_breaks_count = data_row[0].count("\n")
  25.     print(f"Ред: {data_row[0]}")
  26.     print(f"Брой преноси: {line_breaks_count}")
  27.     if line_breaks_count:  # Само ако има поне 1 пренос
  28.         extra_row["span_rows"] = line_breaks_count + 1  # е нужно спан-ване
  29.     target_extra.append(extra_row)
  30.     print(f"Добавен extra на индекс {len(target_extra) - 1}")
  31.     for line_break_idx in range(line_breaks_count):  # за всеки пренос добавя по 1 празен ред
  32.         target_data_table.append(['', '', ''])
  33.         print(f"Добавен празен ред на индекс {len(target_data_table)-1}")
  34.         target_extra.append({})
  35.         print(f"Добавен extra на индекс {len(target_extra) - 1}")
  36.  
  37. # Антетка
  38. text_antec = [
  39.     ['АКТИВ', '', '', 'ПАСИВ', '', ''],  # Антетка 5 реда
  40.     ['РАЗДЕЛИ, ГРУПИ, СТАТИИ', 'Сума (хил.лв)', '', 'РАЗДЕЛИ, ГРУПИ, СТАТИИ', 'Сума (хил.лв)', ''],  # Антетка
  41.     ['', 'Текуща\nгодина', 'Предх.\nгодина', '', 'Текуща\nгодина', 'Предх.\nгодина'],  # Антетка
  42.     ['', '', '', '', '', ''],  # Антетка
  43.     ['a', '1', '2', 'a', '1', '2'],  # Антетка
  44. ]
  45. style_antec = TableStyle([
  46.     ('GRID',(0,0),(-1,-1),0.5,colors.blue),
  47.     ('FONT', (0,0),(0,3),'Timesbd',9),   # АКТИВ, РАЗДЕЛИ, ГРУПИ, СТАТИИ, а
  48.     ('FONT', (3,0),(3,3),'Timesbd',9),   # ПАСИВ, РАЗДЕЛИ, ГРУПИ, СТАТИИ, а
  49.     ('FONT', (1,1),(2,3),'Times',8),   # Сума (хил. лв), Тек и Предходна години
  50.     ('FONT', (4,1),(5,3),'Times',8),   # Сума (хил. лв), Тек и Предходна години
  51.     ('FONT', (0,4),(5,4),'Timesbd',8),   # 1, 2
  52.     ('ALIGN', (0, 0), (5, 4), 'CENTER'),    # Център по X
  53.     ('BACKGROUND', (0, 0), (5, 4), colors.lightgoldenrodyellow),
  54.     ('SPAN', (0, 0), (2, 0)),   # АКТИВ
  55.     ('SPAN', (3, 0), (5, 0)),   # ПАСИВ
  56.     ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),     # Център по Y
  57.     ('SPAN', (0, 1), (0, 3)),   # РАЗДЕЛИ, ГРУПИ, СТАТИИ - Актива
  58.     ('SPAN', (3, 1), (3, 3)),   # РАЗДЕЛИ, ГРУПИ, СТАТИИ - Пасива
  59.     ('SPAN', (1, 1), (2, 1)),   # Сума (хил. лв) - Актива
  60.     ('SPAN', (4, 1), (5, 1)),   # Сума (хил. лв) - Пасива
  61.     ('SPAN', (1, 2), (1, 3)),   # Текуща година - Актива
  62.     ('SPAN', (4, 2), (4, 3)),   # Текуща година - Пасива
  63.     ('SPAN', (2, 2), (2, 3)),   # Предходна година - Актива
  64.     ('SPAN', (5, 2), (5, 3)),   # Предходна година - Пасива
  65.  
  66. ])
  67. # Актив
  68. a1 = 0
  69. a2 = 0
  70. totals_a = {
  71.     "раздел_Б": ['Общо за раздел Б:', f'{a1}', f'{a2:_}'.replace('_', ' ')],
  72.     "група_БI": ['Общо за група I:', '23', f'{9550:_}'.replace('_', ' ')],
  73.     "група_БII": ['Общо за група II:', '23', f'{9550:_}'.replace('_', ' ')],
  74.     "група_БIII": ['Общо за група III:', '23', f'{9550:_}'.replace('_', ' ')],
  75.     "раздел_В": ['Общо за раздел В:', '23', f'{9550:_}'.replace('_', ' ')],
  76.     "група_ВI": ['Общо за група I:', '23', f'{9550:_}'.replace('_', ' ')],
  77.     "група_ВII": ['Общо за група II:', '23', f'{9550:_}'.replace('_', ' ')],
  78.     "група_ВIII": ['Общо за група III:', f'{a1}', f'{a2:_}'.replace('_', ' ')]
  79. }
  80.  
  81.  
  82. data_table_a = []        # MAX 45 ROWS per Sheet !!
  83. extra_a = []
  84. append_data_row(['А. Записан, но невнесен капитал', '255', '355'])
  85.  
  86. if (totals_a["раздел_Б"][1] == "0" and totals_a["раздел_Б"][2] == "0"):
  87.     pass # Пропускаме целия раздел Б
  88. else:  # Иначе добавяме раздел Б
  89.     append_data_row(['Б. Нетекущи активи', '', ''])
  90.     if (totals_a["група_БI"][1] == "0" and totals_a["група_БI"][2] == "0"):
  91.         pass  # Пропускаме цялата група БI
  92.     else:  # Добавяме група БI
  93.         append_data_row(['I. Нематериални активи', '', ''])
  94.         append_data_row(['1. Продукти от развойна дейност', '255', '355'])
  95.         append_data_row(['2. Концесии, патенти, лицензии, \nтърговски марки, програмни '
  96.                      'продукти и \nдруги подобни права и активи', '23', f'{9550:_}'.replace('_', ' ')])
  97.         append_data_row(['3. Търговска репутация', '23', f'{9550:_}'.replace('_', ' ')])
  98.         append_data_row(['4. Предоставени аванси и нематериални\nактиви в процес на изграждане', '23', f'{9550:_}'.replace('_', ' ')])
  99.         append_data_row(totals_a["група_БI"])    # ляво, наклонено, bd
  100.     if (totals_a["група_БII"][1] == "0" and totals_a["група_БII"][2] == "0"):
  101.         pass # Пропускаме цялата група БII
  102.     else:   # Добавяме група БII
  103.         append_data_row(['II. Дълготрайни материални активи', '', ''])
  104.         append_data_row(['1. Земи и сгради, в т.ч.:', '255', '355'])
  105.         append_data_row(['       - земи', '255', '355'])
  106.         append_data_row(['       - сгради', '255', '355'])
  107.         append_data_row(['2. Машини, производствено оборудване и апаратура', '23', f'{9550:_}'.replace('_', ' ')])
  108.         append_data_row(['3. Съоръжения и други', '23', f'{9550:_}'.replace('_', ' ')])
  109.         append_data_row(['4. Предоставени аванси и дълготрайни материални\nактиви в процес на изграждане', '23', f'{9550:_}'.replace('_', ' ')])
  110.         append_data_row(totals_a['група_БII'])
  111.     if (totals_a["група_БIII"][1] == "0" and totals_a["група_БIII"][2] == "0"):
  112.         pass # Пропускаме цялата група БIII
  113.     else:   # Добавяме група БIII
  114.         append_data_row(['III. Дългосрочни финансови активи', '', ''])
  115.         append_data_row(['1. Акции и дялове в предприятия от групата', '255', '355'])
  116.         append_data_row(['2. Предоставени заеми на предприятия от групата', '23', f'{9550:_}'.replace('_', ' ')])
  117.         append_data_row(['3. Акции и дялове в асоциирани и смесени предприятия', '23', f'{9550:_}'.replace('_', ' ')])
  118.         append_data_row(['4. Предоставени заеми, свързани с асоциирани и\nсмесени предприятия', '23', f'{9550:_}'.replace('_', ' ')])
  119.         append_data_row(['5. Дългосрочни инвестиции (инвестиционни имоти)', '255', '355'])
  120.         append_data_row(['6. Други инвестиции', '255', '355'])
  121.         append_data_row(['7. Изкупени собствени акции', '255', '355'])
  122.         append_data_row(['- с ном. стойност: ..... хил.лв.', 'x', 'x'])
  123.         append_data_row(totals_a['група_БIII'])
  124.     append_data_row(['IV. Отсрочени данъци', '223', '45'])
  125.     append_data_row(totals_a["раздел_Б"])
  126.  
  127. if (totals_a["раздел_В"][1] == "0" and totals_a["раздел_В"][2] == "0"):
  128.     pass # Пропускаме целия раздел Б
  129. else:  # Иначе добавяме раздел Б
  130.     append_data_row(['В. Текущи активи', '', ''])
  131.     if (totals_a["група_ВI"][1] == "0" and totals_a["група_ВI"][2] == "0"):
  132.         pass  # Пропускаме цялата група ВI
  133.     else:  # Добавяме група ВI
  134.         append_data_row(['I. Материални запаси', '', ''])
  135.         append_data_row(['1. Суровини и материали', '255', '355'])
  136.         append_data_row(['2. Незавършено производство', '23', f'{9550:_}'.replace('_', ' ')])
  137.         append_data_row(['3. Продукция и стоки, в т.ч.:', '23', f'{9550:_}'.replace('_', ' ')])
  138.         append_data_row(['       - продукция', '255', '355'])
  139.         append_data_row(['       - стоки', '255', '355'])
  140.         append_data_row(['4. Предоставени аванси', '23', f'{9550:_}'.replace('_', ' ')])
  141.         append_data_row(totals_a["група_ВI"])
  142.     if (totals_a["група_ВII"][1] == "0" and totals_a["група_ВII"][2] == "0"):
  143.         pass  # Пропускаме цялата група ВII
  144.     else:  # Добавяме група ВII
  145.         append_data_row(['II. Взземания', '', ''])
  146.         append_data_row(['1. Вземания от клиенти и доставчици, в т.ч.:', '255', '355'])
  147.         append_data_row(['       - над 1 година', '255', '355'])
  148.         append_data_row(['2. Вземания от предприятия от група, в т.ч.:', '23', f'{9550:_}'.replace('_', ' ')])
  149.         append_data_row(['       - над 1 година', '255', '355'])
  150.         append_data_row(['3. Вземания, свързани с асоциирани и смесени предприятия, в т.ч.:', '23', f'{9550:_}'.replace('_', ' ')])
  151.         append_data_row(['       - над 1 година', '255', '355'])
  152.         append_data_row(['4. Други вземания, в т.ч.:', '23', f'{9550:_}'.replace('_', ' ')])
  153.         append_data_row(['       - над 1 година', '255', '355'])
  154.         append_data_row(totals_a["група_ВII"])
  155.     if (totals_a["група_ВIII"][1] == "0" and totals_a["група_ВIII"][2] == "0"):
  156.         pass  # Пропускаме цялата група ВIII
  157.     else:  # Добавяме група ВIII
  158.         append_data_row(['III. Инвестиции', '', ''])
  159.         append_data_row(['1. Акции и дялове в предприятия от групата', '255', '355'])
  160.         append_data_row(['2. Изкупени собствени акции', '23', f'{9550:_}'.replace('_', ' ')])
  161.         append_data_row(['- с ном. стойност: ..... хил.лв.', 'x', 'x'])
  162.         append_data_row(['3. Други инвестиции', '23', f'{9550:_}'.replace('_', ' ')])
  163.         append_data_row(totals_a["група_ВIII"])
  164.     append_data_row(['IV. Парични средства, в т.ч.:', '223', '45'])
  165.     append_data_row(['       - в брой', '255', '355'])
  166.     append_data_row(['       - в безсрочни сметки(депозити)', '255', '355'])
  167.     append_data_row(totals_a["раздел_В"])
  168.  
  169. append_data_row(['Г. Разходи за бъдещи периоди', '22', '0'])
  170. # append_data_row(['СУМА НА АКТИВА', '255', '355'])
  171.  
  172. list_style_a = TableStyle([
  173.     ('GRID',(0,0),(-1,-1),0.5,colors.blue),
  174.     ('FONT', (0,0),(2,-1),'Times',9),
  175.     ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),     # Център по Y
  176.     ('RIGHTPADDING', (0, 5), (2, -1), 3),   # Залепя числото на дясно
  177.     ('ALIGN', (1, 5), (2, -1), 'RIGHT'),
  178.     ('SPAN', (0, 6), (2, 6)),
  179.     ('SPAN', (0, 7), (2, 7)),
  180.     ('BACKGROUND', (0, 6), (2, 7), colors.lightgoldenrodyellow),
  181.     # ('SPAN', (0, 9), (0, 10)),
  182.     # ('SPAN', (1, 9), (1, 10)),
  183.     # ('SPAN', (2, 9), (2, 10)),
  184.     # ('SPAN', (0, 12), (0, 13)),
  185.     # ('SPAN', (1, 12), (1, 13)),
  186.     # ('SPAN', (2, 12), (2, 13)),
  187.     ('ALIGN', (0, 14), (0, 14), 'RIGHT'),    # Център по X
  188.     ('FONT', (0,14),(0,14),'Timesbi',9),
  189.     ('FONT', (1,14),(2,14),'Timesbd',9),
  190. ])
  191.     # [('LINEABOVE', (0,0), (-1,0), 0.1, colors.green),
  192.     #  ('RIGHTPADDING', (0, 0), (3, -2), 1),
  193.     #  ('TEXTCOLOR', (1,1), (-2,-2), colors.red),
  194.     #  #('GRID', (1, 1), (-2, -2), 0.25, colors.red),
  195.     #  ('BOX', (0, 0),(-1, -1), 0.1, colors.blue, None, (2,2,1)),
  196.     #  ('INNERGRID', (0,0), (-1,-1), 0.25, colors.blue),
  197.     #  #('RIGHTPADDING', (1, 5), (2, 5), 1),
  198.     #  ('BACKGROUND', (0, 0), (2, 4), colors.lightgrey),   # (col, row), (col, row) от колона 0 до 2 от ред 1 до ред 2
  199.     #  #('NOSPLIT', (0, 0), (0, 0))]
  200.     #  # ('ROUNDEDCORNERS', [None, None, None, None])]; ('ROUNDEDCORNERS', [5, 10, 20, 30]) радиуси на дъгите
  201.     #  # ('spitfirst'),     # за 1-ви ред само
  202.     #  # ('spitlast'),]     # за последен ред само
  203.     #  # ('FONT', (0,1),(len(topiclist)-1,1),'Helvetica-Bold',12),
  204.     #  # ('FONTSIZE', (0,1),(-1,-1), 10),
  205.     # # LEFTPADDING             - takes an integer, defaults to 6.
  206.     # ('RIGHTPADDING', (1, 8), (2, -1), 1),          # - takes an integer, defaults to 6.
  207.     # ('BOTTOMPADDING', (0, 4), (2, -1), 0)]        #  - takes an integer, defaults to 3.
  208.     # # TOPPADDING              - takes an integer, defaults to 3.
  209.     # # ROWBACKGROUNDS          - takes a list of colors to be used cyclically.
  210.     # # COLBACKGROUNDS          - takes a list of colors to be used cyclically.
  211.     # # VALIGN                  - takes one of TOP, MIDDLE or the default BOTTOM
  212.     # # LEADING                 - takes leading in points.
  213.     # Title
  214.     # ('LEFTPADDING', (0, 0), (1, 0), 0),
  215.     # ('RIGHTPADDING', (0, 0), (1, 0), 0),
  216.     # ('VALIGN', (0, 0), (1, 0), 'TOP'),
  217.     # ('ALIGN', (0, 0), (1, 0), 'CENTRE'),
  218.     # # DataTable
  219.     # ('ALIGN', (0, 1), (1, -1), 'CENTRE'),
  220.     # ('SIZE', (0, 1), (-1, -1), 7),  # Размер на шрифта
  221.     # ('LEADING', (0, 1), (-1, -1), 8.4), #8.4 допълнително разсточние под текста и клетката
  222.     # ('VALIGN', (0, 1), (-1, -1), 'MIDDLE'),
  223.     # ('TOPPADDING', (0, 1), (-1, -1), 2.6),
  224.     # ('BOTTOMPADDING', (0, 1), (-1, -1), 2.6),
  225.     # ('LINEBELOW', (0, 1), (-1, -1), 0.3, colors.red), # Линия на таблицата само отдолу на редовете
  226. # ПАСИВ
  227. totals_p = {  # По аналогия с totals_a
  228.     "раздел_Б": ['Общо за раздел Б:', f'{a1}', f'{a2:_}'.replace('_', ' ')],
  229.     "група_БI": ['Общо за група I:', '23', f'{9550:_}'.replace('_', ' ')],
  230.     "група_БII": ['Общо за група II:', '23', f'{9550:_}'.replace('_', ' ')],
  231.     "група_БIII": ['Общо за група III:', '23', f'{9550:_}'.replace('_', ' ')],
  232.     "раздел_В": ['Общо за раздел В:', '23', f'{9550:_}'.replace('_', ' ')],
  233.     "група_ВI": ['Общо за група I:', '23', f'{9550:_}'.replace('_', ' ')],
  234.     "група_ВII": ['Общо за група II:', '23', f'{9550:_}'.replace('_', ' ')],
  235.     "група_ВIII": ['Общо за група III:', f'{a1}', f'{a2:_}'.replace('_', ' ')]
  236. }
  237. extra_p = []
  238. data_table_p = []
  239. append_data_row(['А. Собствен капитал', '', ''], target="p")
  240.  
  241. data_table_p = [        # MAX 45 ROWS per Sheet without Odit!!
  242.     ['А. Собствен капитал', '', ''],
  243.     ['I. Записан капитал', '130', '150'],
  244.     ['II. Премии от емисии', '10', '10'],
  245.     ['III. Резерв от последваща оценка', '20', '15'],
  246.     ['IV. Резерви', '', ''],
  247.     ['1. Законови резерви', '255', '355'],
  248.     ['2. Резерв, свързан с изкупени собствени акции', '23', f'{9550:_}'.replace('_', ' ')],
  249.     ['3. Резерв съгласно учредителен акт', '23', f'{9550:_}'.replace('_', ' ')],
  250.     ['4. Други резерви', '23', f'{9550:_}'.replace('_', ' ')],
  251.     ['Общо за група IV:', '23', f'{9550:_}'.replace('_', ' ')],  # ляво, наклонено, bd
  252.     ['V. Натрупана печалба(загуба) от минали години, в т.ч.:', '23', f'{9550:_}'.replace('_', ' ')],  # ляво, наклонено, bd
  253.     ['       - неразпределена печалба', '255', '355'],
  254.     ['       - непокрита загуба', '255', '355'],
  255.     ['VI. Текуща печалба(загуба)', '23', f'{9550:_}'.replace('_', ' ')],
  256.     ['Общо за раздел А:', '23', f'{9550:_}'.replace('_', ' ')],  # ляво, наклонено, bd
  257.     ['Б. Провизии и сходни задължения', '', ''],
  258.     ['1. Провизии за пенсии и други подобни задължения', '255', '355'],
  259.     ['2. Провизии за данъци, в т.ч.:', '23', f'{9550:_}'.replace('_', ' ')],
  260.     ['       - отсрочени данъци', '255', '355'],
  261.     ['3. Други провизии и сходни задължения', '23', f'{9550:_}'.replace('_', ' ')],
  262.     ['Общо за раздел Б:', '23', f'{9550:_}'.replace('_', ' ')],  # ляво, наклонено, bd
  263.     ['В. Задължения', '', ''],  # Balance_1
  264.     ['1. Облигационни заеми, в т.ч.:', '255', '355'],
  265.     ['   - конвертируеми', '255', '355'],
  266.     ['       - до 1 година', '255', '355'],
  267.     ['       - над 1 година', '255', '355'],
  268.     ['2. Задължения към финансови предприятия, в т.ч.:', '255', '355'],
  269.     ['       - до 1 година', '255', '355'],
  270.     ['       - над 1 година', '255', '355'],
  271.     ['3. Получени аванси, в т.ч.:', '255', '355'],
  272.     ['       - до 1 година', '255', '355'],
  273.     ['       - над 1 година', '255', '355'],
  274.     ['4. Задължения към доставчици, в т.ч.:', '255', '355'],
  275.     ['       - до 1 година', '255', '355'],
  276.     ['       - над 1 година', '255', '355'],
  277.     ['5. Задължения по полици, в т.ч.:', '255', '355'],
  278.     ['       - до 1 година', '255', '355'],
  279.     ['       - над 1 година', '255', '355'],
  280.     ['6. Задължения към предприятия от група, в т.ч.:', '255', '355'],
  281.     ['       - до 1 година', '255', '355'],
  282.     ['       - над 1 година', '255', '355'],
  283.     ['7. Задължения, свързани с асоциирани и смесени предприятия, в т.ч.:', '255', '355'],
  284.     ['       - до 1 година', '255', '355'],
  285.     ['       - над 1 година', '255', '355'],
  286.     ['8. Други задължения, в т.ч.:', '255', '355'],
  287.     ['       - до 1 година', '255', '355'],
  288.     ['       - над 1 година', '255', '355'],
  289.     ['   - към персонала, в т.ч.:', '255', '355'],
  290.     ['       - до 1 година', '255', '355'],
  291.     ['       - над 1 година', '255', '355'],
  292.     ['   - осигурителни задължения, в т.ч.:', '255', '355'],
  293.     ['       - до 1 година', '255', '355'],
  294.     ['       - над 1 година', '255', '355'],
  295.     ['   - данъчни задължения, в т.ч.:', '255', '355'],
  296.     ['       - до 1 година', '255', '355'],
  297.     ['       - над 1 година', '255', '355'],
  298.     ['Общо за раздел В:', '23', f'{9550:_}'.replace('_', ' ')],    #ляво, наклонено, bd
  299.     ['       - до 1 година', '255', '355'],
  300.     ['       - над 1 година', '255', '355'],
  301.     ['Г. Финансирания и приходи за бъдещи периоди, в т.ч.:', '', ''],
  302.     ['       - финансирания', '255', '355'],
  303.     ['       - приходи за бъдещи периоди', '255', '355'],
  304.     #['СУМА НА ПАСИВА', '255', '355'],
  305. ]
  306.  
  307.  
  308.  
  309. if __name__ == '__main__':
  310.     from reportlab.lib.units import mm
  311.     from balance_2 import top_f, top_m, ta
  312.     from reportlab.lib.pagesizes import A4
  313.  
  314.     count_data_rows = len(data_table_a)     # Брой редове в таблицата
  315.     print(count_data_rows)  # 37
  316.     print(mm)
  317.     y1 = A4[1] - top_m - top_f - count_data_rows * 4 * mm
  318.     print(y1)
  319.     w, h = ta.wrap(0, 0)  # Дава размерите на таблицата
  320.     print(w, ' ', h)  # 240.94488188976382   419.52755905511816
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement