add nds methot to nakladn

prod
Dmitriy Shesterkin 9 years ago
parent 436b51fe85
commit 01bec7e8ad
  1. 10
      src/docs/forms/nakladn.py
  2. 10
      src/docs/utils.py
  3. 53
      src/docs/views/nakladn.py
  4. 4
      src/dokumentor/templates/docs/nakladn/form.html
  5. 19
      src/dokumentor/templates/docs/nakladn/form_tbl_items.html

@ -11,16 +11,22 @@ class NakladnForm(BaseModelForm):
"""Форма редактирования накладной."""
class Meta:
model = Nakladn
fields = ('doc_num', 'doc_date',
'bank_account', 'client', 'invoice',
fields = (
'doc_num',
'doc_date',
'bank_account',
'client',
'invoice',
'doc_reason',
'nds_value',
'nds_method',
'doc_text',
)
_radioselect = forms.RadioSelect
_textarea = forms.Textarea(attrs={'cols': 80, 'rows': 3})
widgets = {
'doc_text': _textarea,
'nds_method': forms.RadioSelect()
}

@ -38,6 +38,16 @@ def calc_full_total_price(obj):
return calc_total_nds(obj) + calc_clean_total_price(obj)
def get_clean_total_price(obj):
"""
Считает стоимость без налога.
"""
if obj.parent.nds_method:
return calc_clean_price(obj) * obj.qty
else:
return calc_clean_price(obj) * obj.qty - get_total_nds(obj)
def get_total_nds(obj):
"""Считает сумму налога."""
total_price = obj.price * obj.qty

@ -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

@ -25,6 +25,7 @@
<div class="block" style="border-bottom: 1px solid #777; padding: 0 20px 15px 0;">
{% include 'docs/parts/form_field.html' with field=form.nds_value id="nds_value" classes="left" label="НДС" no_clear_after="True" %}
{% include 'docs/parts/form_field.html' with field=form.nds_method id="nds_method" classes="left nds-method hidden" no_clear_after="True" %}
{% if formset %}
{% include 'docs/nakladn/form_tbl_items.html' %}
@ -34,9 +35,6 @@
{% block js %}
{% comment %}<script type="text/javascript">
{% include 'docs/_common_js/add_line_handler.js' %}
{% include 'docs/_common_js/calc_summa.js' %}
{% include 'docs/_common_js/calc_itogo.js' %}
function set_events() {
$("#tbl_items tr.row td.qty input").blur(calc_summa);

@ -36,22 +36,25 @@
</tr>
{% endfor %}
<tr>
<tr id="blockTotalNds" class="hidden">
<td colspan="3">
</td>
<td class="itogo-td itogo-td1"><span>Итого</span></td>
<td class="itogo-td itogo-td2"><span id="itogo"></span></td>
<td class="itogo-nds-td"><span>НДС</span></td>
<td class="itogo-nds-td"><span id="totalNds"></span></td>
<td></td>
</tr>
{% comment %}
<tr>
<td colspan="3"></td>
<td align="right"><b id="itogo_nds_text">Без НДС</b></td>
<td><b id="itogo_nds"></b></td>
<td colspan="3">
</td>
<td class="itogo-td itogo-td1"><span>Итого</span></td>
<td class="itogo-td itogo-td2">
<span id="itogo"></span>
<span id="decryption"></span>
</td>
<td></td>
</tr>
{% endcomment %}
</table>
{{ formset.management_form }}

Loading…
Cancel
Save