|
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
from odoo import api, models, fields
|
|
|
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ReportInquiryWizard(models.TransientModel):
|
|
|
|
|
"""报表查询向导"""
|
|
|
|
|
_name = 'report.inquiry.wizard'
|
|
|
|
|
_description = '报表查询向导'
|
|
|
|
|
|
|
|
|
|
def _default_fiscalyear_id(self):
|
|
|
|
|
fiscalyears = self.env['fr.account.fiscalyear'].search([
|
|
|
|
|
('state', '=', 'activated'), ('company_id', '=', self.company_id.id)])
|
|
|
|
|
if len(fiscalyears) > 1:
|
|
|
|
|
return fiscalyears[-1]
|
|
|
|
|
else:
|
|
|
|
|
return fiscalyears
|
|
|
|
|
|
|
|
|
|
# 基础字段
|
|
|
|
|
report_type = fields.Selection([
|
|
|
|
|
('assets_liability', '资产负债表'),
|
|
|
|
|
('profit', '利润表'),
|
|
|
|
|
('cash_flow', '现金流量表'),
|
|
|
|
|
('owner', '所有者权益变动表'),
|
|
|
|
|
], string='报表类型', required=True)
|
|
|
|
|
|
|
|
|
|
# 关系字段
|
|
|
|
|
fiscalyear_id = fields.Many2one('fr.account.fiscalyear', string='会计年度', default=_default_fiscalyear_id, required=True)
|
|
|
|
|
period_id = fields.Many2one('fr.account.period', string='会计期间', required=True)
|
|
|
|
|
report_id = fields.Many2one('account.ledger.report', string='报表模板', required=True, ondelete='cascade')
|
|
|
|
|
|
|
|
|
|
# 关联字段
|
|
|
|
|
period_state = fields.Selection(related='period_id.state', string='期间状态')
|
|
|
|
|
|
|
|
|
|
company_id = fields.Many2one('res.company', string='公司', default=lambda self: self.env.company.id)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def confirm(self):
|
|
|
|
|
"""单实例方法:结转期间对应的损益科目总账
|
|
|
|
|
|
|
|
|
|
:return: 更新后的当前视图
|
|
|
|
|
"""
|
|
|
|
|
self.ensure_one()
|
|
|
|
|
return {
|
|
|
|
|
'type': 'ir.actions.client',
|
|
|
|
|
'tag': 'ledger_report',
|
|
|
|
|
'target': 'current',
|
|
|
|
|
# 'name': self.report_id.name + ':' + self.period_id.name,
|
|
|
|
|
'context': {'report_id': self.report_id.id, 'period_id': self.period_id.id}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@api.onchange('report_type')
|
|
|
|
|
def _change_report_id(self):
|
|
|
|
|
"""自动获取报表"""
|
|
|
|
|
if self.report_type:
|
|
|
|
|
default_report_id = self.env.context.get('default_report_id', [])
|
|
|
|
|
report = self.env['account.ledger.report'].browse(default_report_id)
|
|
|
|
|
if report.report_type == self.report_type:
|
|
|
|
|
self.report_id = report
|
|
|
|
|
else:
|
|
|
|
|
self.report_id = self.env['account.ledger.report'].search(
|
|
|
|
|
[('report_type', '=', self.report_type)], order='id desc', limit=1)
|
|
|
|
|
|
|
|
|
|
@api.onchange('fiscalyear_id')
|
|
|
|
|
def _change_period_id(self):
|
|
|
|
|
"""自动获取首个未结账期间"""
|
|
|
|
|
if self.fiscalyear_id:
|
|
|
|
|
periods = self.fiscalyear_id.period_ids.filtered(lambda period: period.state != 'unuse')
|
|
|
|
|
if periods:
|
|
|
|
|
self.period_id = periods[0]
|