Files
public/rsbu_journal/models/rsbu_trial_balance.py

74 lines
3.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
"""Оборотно-сальдовая ведомость (ОСВ) по РСБУ-проводкам.
Строится за период по проведённым строкам rsbu.move.line, сгруппированным
по счёту плана счетов. Для каждого счёта показываются шесть показателей:
сальдо на начало (Дт/Кт), обороты за период (Дт/Кт), сальдо на конец
(Дт/Кт) — как в 1С.
Особенности:
* сальдо активно-пассивных счетов (60/62/76) — РАЗВЁРНУТОЕ (дебиторка и
кредиторка одновременно), считается в разрезе субконто через
rsbu.account.get_expanded_balance;
* иерархия счетов сворачивается снизу вверх: показатели счёта-группы =
сумма показателей его потомков-листьев;
* начало года для сальдо — календарное (1 января), результатные счета
90/91/99 к концу года закрываются регламентом закрытия месяца.
Строки живут в рамках пользовательской сессии (TransientModel); отчёт на
экране (QWeb-HTML) и переход к проводкам (drill-down) строятся поверх них.
"""
from odoo import api, fields, models
class RsbuTrialBalanceLine(models.TransientModel):
_name = 'rsbu.trial.balance.line'
_description = 'РСБУ — Строка оборотно-сальдовой ведомости'
_order = 'code'
wizard_id = fields.Many2one(
'rsbu.trial.balance.wizard', string='Отчёт', ondelete='cascade',
index=True)
account_id = fields.Many2one('rsbu.account', string='Счёт', index=True)
code = fields.Char(string='Код счёта', index=True)
name = fields.Char(string='Наименование счёта')
level = fields.Integer(string='Уровень')
is_group = fields.Boolean(string='Счёт-группа')
parent_code = fields.Char(string='Код родителя')
company_id = fields.Many2one('res.company', string='Компания')
currency_id = fields.Many2one('res.currency', string='Валюта')
opening_debit = fields.Monetary(string='Сальдо нач. Дт',
currency_field='currency_id')
opening_credit = fields.Monetary(string='Сальдо нач. Кт',
currency_field='currency_id')
turnover_debit = fields.Monetary(string='Оборот Дт',
currency_field='currency_id')
turnover_credit = fields.Monetary(string='Оборот Кт',
currency_field='currency_id')
closing_debit = fields.Monetary(string='Сальдо кон. Дт',
currency_field='currency_id')
closing_credit = fields.Monetary(string='Сальдо кон. Кт',
currency_field='currency_id')
def action_open_entries(self):
"""Drill-down: открыть проводки счёта за период отчёта."""
self.ensure_one()
wiz = self.wizard_id
domain = [
('account_id', 'child_of', self.account_id.id),
('state', '=', 'posted'),
('company_id', '=', self.company_id.id),
('date', '>=', wiz.date_from),
('date', '<=', wiz.date_to),
]
return {
'type': 'ir.actions.act_window',
'name': '%s %s' % (self.code, self.name or ''),
'res_model': 'rsbu.move.line',
'view_mode': 'list,form',
'domain': domain,
'context': {'search_default_group_account': 0},
}