Inherit res.config.setting

Inherit res.config.setting untuk settingan configurable

Assalamu'alaikum kembali lagi bersama saya. kali ini saya akan sharing tentang bagaimana cara membuat settingan di odoo. biasanya memboat coding itu ada beberapa yang di hardcode, tapi dengan adanya settingan ini bisa dirubah yang tadinya hardcode di codingan kita bisa menjadi functional dan configurable. dalam kasus yg saya alami saya membutuhkan id balance sheet untuk mengeluarkan laporan balancesheet dan profit loss untuk mengeluarkan profitloss dengan cara hardcode lalu saya ada ide untuk menjadikanya configurable agar tidak perlu di hardcode lagi. caranya adalah membuat file py namanya res_config.py isinya adalah berikut :

from odoo import fields, models

class AccountReportConfigSettings(models.TransientModel):
_name = 'account.report.config.settings'
_inherit = 'res.config.settings'


company_id = fields.Many2one('res.company', string='Company', required=True,
default=lambda self: self.env.user.company_id)
account_balance_sheet = fields.Many2one(comodel_name='account.account',string='Account Balance Sheet', related='company_id.account_balance_sheet')
account_profit_loss = fields.Many2one(comodel_name='account.account', string='Account Profit Loss', related='company_id.account_profit_loss')
account_equity = fields.Many2one(comodel_name='account.account', string='Account Equity', related='company_id.account_equity')
activapasiva = fields.Boolean(string='Activa and Passiva')

class ResCompany(models.Model):
_inherit = 'res.company'

account_balance_sheet = fields.Many2one(comodel_name='account.account',string='Account Balance Sheet')
account_profit_loss = fields.Many2one(comodel_name='account.account', string='Account Profit Loss')
account_equity = fields.Many2one(comodel_name='account.account', string='Account Equity')


saya tidak perlu menjelaskan perbaris, karena saya anggap sudah mengerti dari isi dari fields diatas.

berikut adalah file xmlnya :

<record id="view_account_report_config_settings" model="ir.ui.view">
<field name="name">account report settings</field>
<field name="model">account.report.config.settings</field>
<field name="arch" type="xml">
<form string="Configure Report Accounting" class="oe_form_configuration">
<header>
<button string="Apply" type="object" name="execute" class="oe_highlight"/>
<button string="Cancel" type="object" name="cancel" class="oe_link"/>
</header>
<field name="company_id"
options="{'no_create': True}"
invisible='1'/>
<group string="Chart of Accounts">

<label for="account_balance_sheet"/>
<div>
<field name="account_balance_sheet" class="oe_inline" domain="[('internal_type','=','view')]" context="{'show_parent_account':True}"/>
</div>
<label for="account_profit_loss"/>
<div>
<field name="account_profit_loss" class="oe_inline" domain="[('internal_type','=','view')]" context="{'show_parent_account':True}"/>
</div>
<label for="account_equity"/>
<div>
<field name="account_equity" class="oe_inline" domain="[('internal_type','=','view')]" context="{'show_parent_account':True}"/>
</div>



</group>


<div>
<span>(*) This configuration is related to the company you're logged into.</span>
</div>
</form>
</field>
</record>

<record id="action_account_report_config" model="ir.actions.act_window">
<field name="name">Configure Accounting</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">account.report.config.settings</field>
<field name="view_mode">form</field>
<field name="target">inline</field>
</record>

<menuitem id="menu_account_report_config" name="Settings Reports Accounting" parent="account.menu_finance_configuration"
sequence="2" action="action_account_report_config" groups="base.group_system"/>


berikut ini adalah cara memanggil dari configurasi yang telah kita apply di codingan kita:

default_balance_sheet = self.env['res.company']._company_default_get('account.account').account_balance_sheet
default_profit_loss = self.env['res.company']._company_default_get('account.account').account_profit_loss
default_account_equity = self.env['res.company']._company_default_get('account.account').account_equity
if not default_balance_sheet or not default_profit_loss or not default_account_equity:
raise UserError(('its no account for parent Balance Sheet/Profit loss.\nPlease go to Configuration > Setting.'))


sekian dari saya. mudah2an bermanfaat

wassalamu'alaikum warahmatullah wabarakatuh