# -*- 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' # префикс формы табличной части # поля, по которым можно фильтровать список документов # должны поддерживаться в 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' # для генерации pdf/xls PDF_TEMPLATE = 'docs/invoice/as_pdf.html' XLS_TEMPLATE = 'invoice.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 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) 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