39 lines
2.2 KiB
Python
39 lines
2.2 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
from odoo import models
|
|
|
|
|
|
class AccountChartTemplate(models.AbstractModel):
|
|
_inherit = 'account.chart.template'
|
|
|
|
def _load(self, template_code, company, install_demo):
|
|
# EXTENDS account to set up default accounts on stock locations
|
|
res = super()._load(template_code, company, install_demo)
|
|
if template_code == 'ec':
|
|
self._l10n_ec_setup_location_accounts(company)
|
|
return res
|
|
|
|
def _l10n_ec_setup_location_accounts(self, companies):
|
|
parent_location = self.env.ref('stock.stock_location_locations_virtual', raise_if_not_found=False)
|
|
loss_locs = dict(self.env['stock.location']._read_group(domain=[('location_id', '=', parent_location.id), ('usage', '=', 'inventory'), ('scrap_location', '=', False)], groupby=['company_id', 'id'])) if parent_location else {}
|
|
prod_locs = dict(self.env['stock.location']._read_group(domain=[('location_id', '=', parent_location.id), ('usage', '=', 'production'), ('scrap_location', '=', False)], groupby=['company_id', 'id'])) if parent_location else {}
|
|
for company in companies:
|
|
# get template data
|
|
Template = self.env['account.chart.template'].with_company(company)
|
|
template_code = company.chart_template
|
|
full_data = Template._get_chart_template_data(template_code)
|
|
template_data = full_data.pop('template_data')
|
|
|
|
ref = template_data.get('loss_stock_valuation_account')
|
|
if (loss_loc := loss_locs.get(company)) and (loss_loc_account := ref and Template.ref(ref, raise_if_not_found=False)):
|
|
loss_loc.write({
|
|
'valuation_in_account_id': loss_loc_account.id,
|
|
'valuation_out_account_id': loss_loc_account.id,
|
|
})
|
|
|
|
ref = template_data.get('production_stock_valuation_account')
|
|
if (prod_loc := prod_locs.get(company)) and (prod_loc_account := ref and Template.ref(ref, raise_if_not_found=False)):
|
|
prod_loc.write({
|
|
'valuation_in_account_id': prod_loc_account.id,
|
|
'valuation_out_account_id': prod_loc_account.id,
|
|
})
|