# -*- coding: utf-8 -*- from decimal import Decimal from project.customer.forms import ClientsListForm from ..models import AktSverki, AktSverkiItem from ..forms import AktSverkiForm, AktSverkiItemForm from .base_views import BaseItemsViews class AktSverkiViews(BaseItemsViews): """Views для актов сверки.""" MODEL = AktSverki # модель документа FORM_CLASS = AktSverkiForm # форма документа ITEM_MODEL = AktSverkiItem # модель табличной части документа ITEM_FORM_CLASS = AktSverkiItemForm # форма табличной части документа ITEM_FORM_PREFIX = 'aktsverki_items' # префикс формы табличной части # поля, по которым можно сортировать список документов ORDER_FIELDS = ('doc_date', 'doc_num', 'client__name',) # поля, по которым можно фильтровать список документов # должны поддерживаться в docs.filters.build_filterset_class ! FILTER_FIELDS = ('signed_status', 'client', 'total_saldo', 'doc_date',) # префикс именованных урлов этого типа документов, для передачи в шаблон URL_PREFIX = 'docs_aktsverki_' # именованные урлы операций URL_LIST = 'docs_aktsverki_list' URL_EDIT = 'docs_aktsverki_edit' # пути к шаблонам TEMPLATE_LIST = 'docs/aktsverki/list.html' TEMPLATE_FORM = 'docs/aktsverki/form.html' # для генерации pdf/xls PDF_TEMPLATE = 'docs/aktsverki/as_pdf.html' XLS_TEMPLATE = 'aktsverki.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 update_parent_on_items_save(self, obj, obj_items): """Обновить родительскую модель.""" # пересчет общего кредитового/дебетового и итогового сальдо total_credit = Decimal('0.00') total_debit = Decimal('0.00') for item in obj_items: total_credit += item.credit total_debit += item.debit obj.total_credit = total_credit obj.total_debit = total_debit # самое важное, итоговое сальдо - прежде всего, нужно для фильтрации obj.total_saldo = (obj.saldo_credit + total_credit) - (obj.saldo_debit + total_debit) obj.save() def prepare(self, obj, obj_items, export_to=None): """Изменить/подмешать дополнительные поля к документу.""" obj.sum_debit = obj.saldo_debit obj.sum_credit = obj.saldo_credit for item in obj_items: obj.sum_debit += item.debit obj.sum_credit += item.credit if obj.sum_debit == obj.sum_credit: # нет задолженности obj.sum_debit = obj.sum_credit = 0 elif obj.sum_debit > obj.sum_credit: # задолженность нам obj.sum_debit -= obj.sum_credit obj.sum_credit = 0 elif obj.sum_debit < obj.sum_credit: # задолженность контрагенту obj.sum_credit -= obj.sum_debit obj.sum_debit = 0