|
- # Copyright 2016 上海开阖软件有限公司 (http://www.osbzr.com)
- # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
- from odoo import models, fields, api
-
-
- class ProfitStatement(models.Model):
- """利润表模板
- 模板主要用来定义项目的 科目范围,
- 然后根据科目的范围得到科目范围内的科目 的利润
-
- """
- _name = "profit.statement"
- _order = "sequence,id"
- _description = '利润表模板'
-
- sequence = fields.Integer('序号')
-
- balance = fields.Char('项目', help='报表的行次的总一个名称')
- line_num = fields.Char('行次', help='生成报表的行次')
- cumulative_occurrence_balance = fields.Float('本年累计金额', help='本年利润金额')
- occurrence_balance_formula = fields.Text(
- '科目范围', help='设定本行的利润的科目范围,例如1001~1012999999 结束科目尽可能大一些方便以后扩展')
- current_occurrence_balance = fields.Float('本月金额', help='本月的利润的金额')
- company_id = fields.Many2one(
- 'res.company',
- string='公司',
- change_default=True,
- default=lambda self: self.env.company)
-
-
- class Dupont(models.Model):
- _name = 'dupont'
- _description = '企业财务指标'
- _rec_name = 'period_id'
- _order = 'period_id'
-
- period_id = fields.Many2one('finance.period', '期间', index=True)
- kpi = fields.Char('指标')
- val = fields.Float('值', digits='Amount')
-
- @api.model
- def fill(self, period_id):
-
- if self.search([('period_id', '=', period_id.id)]):
- return True
-
- ta = te = income = ni = roe = roa = em = 0.0
-
- for b in self.env['trial.balance'].search(
- [('period_id', '=', period_id.id)]):
- if b.subject_name_id.costs_types == 'assets':
- ta += b.ending_balance_debit - b.ending_balance_credit
- if b.subject_name_id.costs_types == 'equity':
- te += b.ending_balance_credit - b.ending_balance_debit
- if b.subject_name_id.costs_types == 'in':
- income += b.current_occurrence_credit
- if b.subject_name_id == self.env.user.company_id.profit_account:
- ni = b.current_occurrence_credit
-
- roe = te and ni / te * 100
- roa = ta and ni / ta * 100
- em = te and ta / te * 100
- res = {'资产': ta, '权益': te, '收入': income, '净利': ni,
- '权益净利率': roe, '资产净利率': roa, '权益乘数': em}
- for k in res:
- self.create({'period_id': period_id.id, 'kpi': k, 'val': res[k]})
|