You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
5.7 KiB
Python
160 lines
5.7 KiB
Python
8 months ago
|
# -*- coding: utf-8 -*-
|
||
|
from odoo import api, models, fields
|
||
|
from odoo.exceptions import UserError, MissingError
|
||
|
|
||
|
BALANCE_DIRECTION = [('debit', '借'), ('credit', '贷'), ('balance', '平')]
|
||
|
|
||
|
|
||
|
class CarryForwardWizard(models.TransientModel):
|
||
|
"""期末月结向导"""
|
||
|
_name = 'carry.forward.wizard'
|
||
|
_description = '期末月结向导'
|
||
|
|
||
|
# 关系字段
|
||
|
fiscalyear_id = fields.Many2one('fr.account.fiscalyear', string='会计年度', required=True, ondelete='cascade')
|
||
|
period_id = fields.Many2one('fr.account.period', string='会计期间', required=True, store=True, ondelete='cascade')
|
||
|
account_id = fields.Many2one('account.account', string='损益结转科目',
|
||
|
domain=[('fr_as_leaf', '=', True), ('state', '=', 'on_use')])
|
||
|
journal_id = fields.Many2one('account.journal', string='损益结转日记账',
|
||
|
domain=[('type', '=', 'general')])
|
||
|
|
||
|
# 关联字段
|
||
|
period_state = fields.Selection(related='period_id.state', string='期间状态')
|
||
|
unpost_move_ids = fields.One2many(related='period_id.unpost_move_ids', string='未过账凭证', readonly=True)
|
||
|
|
||
|
# 计算字段
|
||
|
num_continue = fields.Boolean(string='凭证编号是否连续', compute='_compute_num_and_carry_over', readonly=False)
|
||
|
carry_over_state = fields.Boolean(string='是否需要损益结转', compute='_compute_num_and_carry_over', readonly=False)
|
||
|
|
||
|
company_id = fields.Many2one('res.company', string='公司', default=lambda self: self.env.company.id)
|
||
|
|
||
|
####################
|
||
|
# 公用方法
|
||
|
####################
|
||
|
# @api.multi
|
||
|
def reset_move_num(self):
|
||
|
"""单实例方法:期间凭证编号整理
|
||
|
|
||
|
:return: 更新后的当前视图
|
||
|
"""
|
||
|
self.ensure_one()
|
||
|
self.period_id.reset_move_num()
|
||
|
|
||
|
return {
|
||
|
'type': 'ir.actions.act_window',
|
||
|
'name': '期末月结',
|
||
|
'res_model': 'carry.forward.wizard',
|
||
|
'views': [[False, "form"]],
|
||
|
'res_id': self.id,
|
||
|
'target': 'new'
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
def reset_move_num(self):
|
||
|
"""单实例方法:期间凭证编号整理
|
||
|
:return: 更新后的当前视图
|
||
|
"""
|
||
|
self.ensure_one()
|
||
|
view = self.env.ref('account_ledger.NumberSortWizardViewForm')
|
||
|
return {
|
||
|
'type': 'ir.actions.act_window',
|
||
|
'name': '编号整理',
|
||
|
'res_model': 'number.sort.wizard',
|
||
|
'views': [(view.id, 'form')],
|
||
|
'view_id': view.id,
|
||
|
'context': {
|
||
|
'default_period_id': self.period_id.id
|
||
|
},
|
||
|
'target': 'new'
|
||
|
}
|
||
|
|
||
|
|
||
|
def carry_over(self):
|
||
|
"""单实例方法:结转期间对应的损益科目总账
|
||
|
|
||
|
:return: 更新后的当前视图
|
||
|
"""
|
||
|
self.ensure_one()
|
||
|
if (not self.journal_id) or (not self.account_id):
|
||
|
raise MissingError('请先配置损益结转科目和损益结转日记账!')
|
||
|
self.period_id.execute_carry_over(self.account_id.id, self.journal_id.id)
|
||
|
return {
|
||
|
'type': 'ir.actions.act_window',
|
||
|
'name': '期末月结',
|
||
|
'res_model': 'carry.forward.wizard',
|
||
|
'views': [[False, "form"]],
|
||
|
'res_id': self.id,
|
||
|
'target': 'new'
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
def carry_forward(self):
|
||
|
"""单实例方法:期末月结,关闭会计期间
|
||
|
|
||
|
:return: 前端特效
|
||
|
"""
|
||
|
self.ensure_one()
|
||
|
self.period_id.carry_forward()
|
||
|
view = self.env.ref('account_ledger.PromptWizardViewForm')
|
||
|
return {
|
||
|
'type': 'ir.actions.act_window',
|
||
|
'name': '月结完成',
|
||
|
'res_model': 'prompt.wizard',
|
||
|
'views': [(view.id, 'form')],
|
||
|
'view_id': view.id,
|
||
|
'target': 'new'
|
||
|
}
|
||
|
|
||
|
|
||
|
def carry_forward_cancel(self):
|
||
|
"""单实例方法:取消期末月结,开启会计期间
|
||
|
|
||
|
:return: None
|
||
|
"""
|
||
|
self.ensure_one()
|
||
|
self.period_id.carry_forward_cancel()
|
||
|
|
||
|
####################
|
||
|
# 继承方法
|
||
|
####################
|
||
|
@api.model
|
||
|
def default_get(self, fields_list):
|
||
|
defaults = super(CarryForwardWizard, self).default_get(fields_list)
|
||
|
fiscalyear = self.env['fr.account.fiscalyear'].search([('state', '=', 'activated')], limit=1, order='name')
|
||
|
account = self.env['account.account'].search([('name', 'ilike', '本年利润'), ('fr_as_leaf', '=', True)], limit=1)
|
||
|
journal = self.env['account.journal'].search([('name', 'ilike', '杂项')], limit=1)
|
||
|
|
||
|
defaults.update({
|
||
|
'fiscalyear_id': fiscalyear.id,
|
||
|
'account_id': account.id,
|
||
|
'journal_id': journal.id
|
||
|
})
|
||
|
|
||
|
return defaults
|
||
|
|
||
|
|
||
|
####################
|
||
|
# onchange方法
|
||
|
####################
|
||
|
@api.onchange('fiscalyear_id')
|
||
|
def _change_period_id(self):
|
||
|
"""自动获取首个未结账期间"""
|
||
|
if self.fiscalyear_id:
|
||
|
periods = self.fiscalyear_id.period_ids.filtered(lambda period: period.state in ['open', 'ongoing'])
|
||
|
|
||
|
if periods:
|
||
|
self.period_id = periods[0]
|
||
|
self.num_continue = self.period_id.check_move_num()
|
||
|
self.carry_over_state = self.period_id.check_carry_over()
|
||
|
|
||
|
####################
|
||
|
# 计算方法
|
||
|
####################
|
||
|
@api.depends('period_id')
|
||
|
def _compute_num_and_carry_over(self):
|
||
|
if self.period_id:
|
||
|
self.num_continue = self.period_id.check_move_num()
|
||
|
self.carry_over_state = self.period_id.check_carry_over()
|