92 lines
3.8 KiB
Python
92 lines
3.8 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""Данные для печатной формы акта сверки (DOCX, движок docx_report).
|
||
|
||
Публичные методы act_docx_* вызываются из docxtpl-шаблона (через кастомные
|
||
переменные), чтобы собрать стороны, строки операций и итоги.
|
||
"""
|
||
from odoo import _, models
|
||
from odoo.exceptions import UserError
|
||
|
||
|
||
class RuodooRsbuActDocx(models.Model):
|
||
_inherit = 'ruodoo.rsbu.act'
|
||
|
||
@staticmethod
|
||
def _party(partner, name=None):
|
||
return {
|
||
'name': name or partner.name or '',
|
||
'inn': (partner.inn or '').strip(),
|
||
'kpp': (getattr(partner, 'kpp', '') or '').strip(),
|
||
'ogrn': (getattr(partner, 'ogrn', '') or '').strip(),
|
||
}
|
||
|
||
def act_docx_seller(self):
|
||
self.ensure_one()
|
||
return self._party(self.company_id.partner_id, self.company_id.name)
|
||
|
||
def act_docx_buyer(self):
|
||
self.ensure_one()
|
||
return self._party(self.partner_id)
|
||
|
||
def act_docx_lines(self):
|
||
"""Операции акта для таблицы DOCX."""
|
||
self.ensure_one()
|
||
rows = []
|
||
for idx, line in enumerate(self.line_ids, start=1):
|
||
rows.append({
|
||
'num': idx,
|
||
'date': line.date.strftime('%d.%m.%Y') if line.date else '',
|
||
'name': line.name or line.doc_name or '',
|
||
'doc': ('%s %s' % (line.doc_name or '', line.doc_number or '')
|
||
).strip(),
|
||
'debit': line.debit,
|
||
'credit': line.credit,
|
||
})
|
||
return rows
|
||
|
||
def act_docx_totals(self):
|
||
self.ensure_one()
|
||
return {
|
||
'opening_debit': self.opening_debit,
|
||
'opening_credit': self.opening_credit,
|
||
'turnover_debit': self.turnover_debit,
|
||
'turnover_credit': self.turnover_credit,
|
||
'closing_debit': self.closing_debit,
|
||
'closing_credit': self.closing_credit,
|
||
}
|
||
|
||
def act_docx_signer(self):
|
||
self.ensure_one()
|
||
signer = self.company_id.rsbu_signatory_id or getattr(
|
||
self.company_id, 'chief_id', False)
|
||
name = signer.partner_id.name if signer else ''
|
||
function = (signer.partner_id.function if signer else '') or (
|
||
getattr(self.company_id, 'rsbu_signatory_title', '')
|
||
or 'Руководитель')
|
||
return {'name': name, 'function': function}
|
||
|
||
def act_docx_summary(self):
|
||
"""Итоговая формулировка задолженности на конец периода."""
|
||
self.ensure_one()
|
||
if self.closing_debit:
|
||
return ('По данным %s задолженность в пользу %s составляет '
|
||
'%.2f руб.' % (self.company_id.name,
|
||
self.company_id.name, self.closing_debit))
|
||
if self.closing_credit:
|
||
return ('По данным %s задолженность в пользу %s составляет '
|
||
'%.2f руб.' % (self.company_id.name,
|
||
self.partner_id.name, self.closing_credit))
|
||
return 'На конец периода задолженность отсутствует.'
|
||
|
||
# ------------------------------------------------------------------
|
||
def action_print_docx(self):
|
||
"""Печать акта сверки в DOCX."""
|
||
self.ensure_one()
|
||
if self.state == 'draft':
|
||
self.action_compute()
|
||
template = self.env.ref(
|
||
'ruodoo_rsbu_act.docx_template_act', raise_if_not_found=False)
|
||
if not template:
|
||
raise UserError(_('Не найден DOCX-шаблон акта сверки.'))
|
||
return template.report_id.report_action(self)
|