|
|
|
|
@ -15,14 +15,20 @@ from .mixins import AddByInvoiceMethodMixin |
|
|
|
|
class NakladnViews(BaseItemsViews, AddByInvoiceMethodMixin): |
|
|
|
|
"""Views для накладных торг12.""" |
|
|
|
|
|
|
|
|
|
MODEL = Nakladn # модель документа |
|
|
|
|
FORM_CLASS = NakladnForm # форма документа |
|
|
|
|
# модель документа |
|
|
|
|
MODEL = Nakladn |
|
|
|
|
# форма документа |
|
|
|
|
FORM_CLASS = NakladnForm |
|
|
|
|
|
|
|
|
|
ITEM_MODEL = NakladnItem # модель табличной части документа |
|
|
|
|
ITEM_FORM_CLASS = NakladnItemForm # форма табличной части документа |
|
|
|
|
ITEM_FORM_PREFIX = 'nakladn_items' # префикс формы табличной части |
|
|
|
|
# модель табличной части документа |
|
|
|
|
ITEM_MODEL = NakladnItem |
|
|
|
|
# форма табличной части документа |
|
|
|
|
ITEM_FORM_CLASS = NakladnItemForm |
|
|
|
|
# префикс формы табличной части |
|
|
|
|
ITEM_FORM_PREFIX = 'nakladn_items' |
|
|
|
|
|
|
|
|
|
FILTERSET_CLASS = NakladnFilterSet # фильтры |
|
|
|
|
# фильтры |
|
|
|
|
FILTERSET_CLASS = NakladnFilterSet |
|
|
|
|
|
|
|
|
|
# по какому полю суммировать табличную часть документа при показе списком |
|
|
|
|
LIST_SUM_FIELD = 'nakladn_items__total_price' |
|
|
|
|
@ -73,9 +79,9 @@ class NakladnViews(BaseItemsViews, AddByInvoiceMethodMixin): |
|
|
|
|
# строки табличной части |
|
|
|
|
for item in obj_items: |
|
|
|
|
item.clean_price = utils.calc_clean_price(item) |
|
|
|
|
item.clean_total_price = utils.calc_clean_total_price(item) |
|
|
|
|
item.total_nds = utils.calc_total_nds(item) |
|
|
|
|
item.full_total_price = utils.calc_full_total_price(item) |
|
|
|
|
item.clean_total_price = utils.get_clean_total_price(item) |
|
|
|
|
item.total_nds = utils.get_total_nds(item) |
|
|
|
|
item.full_total_price = utils.get_full_total_price(item) |
|
|
|
|
# итого табличной части |
|
|
|
|
obj.sum_total_nds += item.total_nds |
|
|
|
|
obj.sum_full_total_price += item.full_total_price |
|
|
|
|
@ -88,17 +94,21 @@ class NakladnViews(BaseItemsViews, AddByInvoiceMethodMixin): |
|
|
|
|
page_rows = 42 |
|
|
|
|
|
|
|
|
|
# высота в строках + рамки и вертикальные отступы |
|
|
|
|
doc_header_rows = 20 # TODO: рассчитывать! |
|
|
|
|
# TODO: рассчитывать! |
|
|
|
|
doc_header_rows = 20 |
|
|
|
|
doc_footer_rows = 26 |
|
|
|
|
tbl_header_rows = 6 + 1 # шапка таблицы |
|
|
|
|
tbl_page_footer_rows = 1 + 1 # подитог (итого по странице) таблицы |
|
|
|
|
tbl_footer_rows = 1 + 1 # подвал таблицы |
|
|
|
|
# шапка таблицы |
|
|
|
|
tbl_header_rows = 6 + 1 |
|
|
|
|
# подитог (итого по странице) таблицы |
|
|
|
|
tbl_page_footer_rows = 1 + 1 |
|
|
|
|
# подвал таблицы |
|
|
|
|
tbl_footer_rows = 1 + 1 |
|
|
|
|
|
|
|
|
|
curr_rows = doc_header_rows + tbl_header_rows |
|
|
|
|
# print '(start) curr_rows =', curr_rows |
|
|
|
|
|
|
|
|
|
# если шрифт не моноширный, то в строчках умещается разное количество символов! |
|
|
|
|
chars_per_line = 38 # для наименования |
|
|
|
|
# для наименования |
|
|
|
|
chars_per_line = 38 |
|
|
|
|
|
|
|
|
|
last_page_item_idx = 0 |
|
|
|
|
|
|
|
|
|
@ -118,9 +128,8 @@ class NakladnViews(BaseItemsViews, AddByInvoiceMethodMixin): |
|
|
|
|
just_calc_itogo = False |
|
|
|
|
# сколько строк займет строка |
|
|
|
|
name = wrap(item.name, chars_per_line) |
|
|
|
|
name_rows = max(1, len(name.split('\n'))) + 1 # + отступ/рамка |
|
|
|
|
# print 'name_rows =', name_rows, |
|
|
|
|
# print '(+%s)' % (tbl_page_footer_rows + tbl_footer_rows) |
|
|
|
|
# + отступ/рамка |
|
|
|
|
name_rows = max(1, len(name.split('\n'))) + 1 |
|
|
|
|
# строка, подитог и итог не помещаются на странице |
|
|
|
|
if (curr_rows + name_rows + tbl_page_footer_rows + |
|
|
|
|
tbl_footer_rows > page_rows): |
|
|
|
|
@ -129,9 +138,7 @@ class NakladnViews(BaseItemsViews, AddByInvoiceMethodMixin): |
|
|
|
|
prev_item = item |
|
|
|
|
else: |
|
|
|
|
prev_item = obj_items[idx-1] |
|
|
|
|
# print '--- new page', \ |
|
|
|
|
# curr_rows + name_rows + tbl_page_footer_rows + tbl_footer_rows, \ |
|
|
|
|
# '>', page_rows |
|
|
|
|
|
|
|
|
|
prev_item.pdf_pagebreak_after = True |
|
|
|
|
prev_item.pdf_page_footer = True |
|
|
|
|
calc_itogo(prev_item, last_page_item_idx, idx) |
|
|
|
|
@ -141,7 +148,8 @@ class NakladnViews(BaseItemsViews, AddByInvoiceMethodMixin): |
|
|
|
|
else: |
|
|
|
|
curr_rows += name_rows |
|
|
|
|
else: |
|
|
|
|
if len(obj_items): # только если были записи в табличной части |
|
|
|
|
# только если были записи в табличной части |
|
|
|
|
if len(obj_items): |
|
|
|
|
if not just_calc_itogo: |
|
|
|
|
item.pdf_page_footer = True |
|
|
|
|
calc_itogo(item, last_page_item_idx, idx) |
|
|
|
|
@ -149,4 +157,3 @@ class NakladnViews(BaseItemsViews, AddByInvoiceMethodMixin): |
|
|
|
|
curr_rows += tbl_footer_rows |
|
|
|
|
if curr_rows + doc_footer_rows > page_rows: |
|
|
|
|
item.pdf_pagebreak_after = True |
|
|
|
|
# print 'curr_rows =', curr_rows |
|
|
|
|
|