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