You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
4.0 KiB
82 lines
4.0 KiB
# -*- coding: utf-8 -*-
|
|
from decimal import Decimal
|
|
|
|
from ..models import AktRabot, AktRabotItem
|
|
from ..forms import AktRabotForm, AktRabotItemForm
|
|
from .. import consts, utils
|
|
|
|
from .base_views import BaseItemsViews
|
|
from .mixins import AddByInvoiceMethodMixin
|
|
|
|
|
|
class AktRabotViews(BaseItemsViews, AddByInvoiceMethodMixin):
|
|
"""Views для актов выполн. работ."""
|
|
|
|
MODEL = AktRabot # модель документа
|
|
FORM_CLASS = AktRabotForm # форма документа
|
|
|
|
ITEM_MODEL = AktRabotItem # модель табличной части документа
|
|
ITEM_FORM_CLASS = AktRabotItemForm # форма табличной части документа
|
|
ITEM_FORM_PREFIX = 'aktrabot_items' # префикс формы табличной части
|
|
|
|
# поля, по которым можно фильтровать список документов
|
|
# должны поддерживаться в docs.filters.build_filterset_class !
|
|
FILTER_FIELDS = ('signed_status', 'client', 'invoice', 'doc_date',)
|
|
|
|
# по какому полю суммировать табличную часть документа при показе списком
|
|
LIST_SUM_FIELD = 'aktrabot_items__total_price'
|
|
|
|
# префикс именованных урлов этого типа документов, для передачи в шаблон
|
|
URL_PREFIX = 'docs_aktrabot_'
|
|
|
|
# именованные урлы операций
|
|
URL_LIST = 'docs_aktrabot_list'
|
|
URL_EDIT = 'docs_aktrabot_edit'
|
|
|
|
# пути к шаблонам
|
|
TEMPLATE_LIST = 'docs/aktrabot/list.html'
|
|
TEMPLATE_FORM = 'docs/aktrabot/form.html'
|
|
|
|
# для генерации pdf/xls
|
|
PDF_TEMPLATE = 'docs/aktrabot/as_pdf.html'
|
|
XLS_TEMPLATE = 'aktrabot.xls'
|
|
FILENAME = u'Акт выполненных работ № %s, %s' # без расширения
|
|
|
|
# --- грамматика для вывода наименований в шаблонах
|
|
PADEJI = {
|
|
'imenit': u'акт выполненных работ', # кто? что?
|
|
'rodit': u'акта выполненных работ', # кого? чего?
|
|
'dateln': u'акту выполненных работ', # кому? чему?
|
|
'vinit': u'акт выполненных работ', # кого? что?
|
|
'tvorit': u'актом выполненных работ', # кем? чем?
|
|
'predlojn': u'акте выполненных работ', # о ком? о чём?
|
|
}
|
|
|
|
PADEJI_MNOJ = {
|
|
'imenit': u'акты выполненных работ', # кто? что?
|
|
'rodit': u'актов выполненных работ', # кого? чего?
|
|
'dateln': u'актам выполненных работ', # кому? чему?
|
|
'vinit': u'акты выполненных работ', # кого? что?
|
|
'tvorit': u'актами выполненных работ', # кем? чем?
|
|
'predlojn': u'актах выполненных работ', # о ком? о чём?
|
|
}
|
|
|
|
def prepare(self, obj, obj_items, export_to=None):
|
|
"""Изменить/подмешать дополнительные поля к документу."""
|
|
obj.sum_total_price = Decimal('0.00')
|
|
obj.sum_total_nds = Decimal('0.00')
|
|
obj.sum_full_total_price = Decimal('0.00')
|
|
for item in obj_items:
|
|
obj.sum_total_price += item.total_price
|
|
obj.sum_total_nds += utils.calc_total_nds(item)
|
|
obj.sum_full_total_price += utils.calc_full_total_price(item)
|
|
|
|
if obj.nds_type == consts.NDS_TYPE_NO: # не учитывать ндс
|
|
s = u'Без налога (НДС)'
|
|
elif obj.nds_type == consts.NDS_TYPE_IN: # ндс в сумме
|
|
s = u'В том числе НДС (%s)' % obj.get_nds_value_display()
|
|
elif obj.nds_type == consts.NDS_TYPE_OUT: # ндс сверх суммы
|
|
s = u'Итого НДС (%s)' % obj.get_nds_value_display()
|
|
else:
|
|
s = u''
|
|
obj.nds_itogo_text = s
|
|
|