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.
 
 
 
 

97 lines
4.5 KiB

# -*- 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