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.
 
 
 
 

84 lines
3.7 KiB

# -*- coding: utf-8 -*-
from decimal import Decimal
from project.customer.forms import ClientsListForm
from ..models import Invoice, InvoiceItem
from ..forms import InvoiceForm, InvoiceItemForm
from .. import consts, utils, filters
from .base_views import BaseItemsViews
class InvoiceViews(BaseItemsViews):
"""Views для счетов-фактур."""
MODEL = Invoice # модель документа
FORM_CLASS = InvoiceForm # форма документа
ITEM_MODEL = InvoiceItem # модель табличной части документа
ITEM_FORM_CLASS = InvoiceItemForm # форма табличной части документа
ITEM_FORM_PREFIX = 'invoice_items' # префикс формы табличной части
ORDER_FIELDS = ('doc_date', 'doc_num', 'client__name', 'doc_sum', 'paid_status', 'closed_status')
# поля, по которым можно фильтровать список документов
# должны поддерживаться в docs.filters.build_filterset_class !
FILTER_FIELDS = ('paid_status', 'closed_status', 'client', 'doc_date',)
# по какому полю суммировать табличную часть документа при показе списком
LIST_SUM_FIELD = 'invoice_items__total_price'
# префикс именованных урлов этого типа документов, для передачи в шаблон
URL_PREFIX = 'docs_invoice_'
# именованные урлы операций
URL_LIST = 'docs_invoice_list'
URL_EDIT = 'docs_invoice_edit'
# пути к шаблонам
TEMPLATE_LIST = 'docs/invoice/list.html'
TEMPLATE_FORM = 'docs/invoice/form.html'
TEMPLATE_CREATE_DOCS = 'docs/parts/invoice_create_docs.html'
# для генерации pdf/xls
PDF_TEMPLATE = 'docs/invoice/as_pdf.html'
XLS_TEMPLATE = 'invoice.xls'
FILENAME = u'Счет № %s, %s' # без расширения
MAYBE_SIGNED = True
# --- грамматика для вывода наименований в шаблонах
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 update_list_dict(self, dictionary):
"""Здесь можно изменить словарь параметров перед передачей его в шаблон вывода списка документов."""
dictionary['clients_form'] = ClientsListForm(self.request.user)
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)
s = u'Итого НДС (%s)' % obj.get_nds_value_display()
obj.nds_itogo_text = s