Динамическое создание записей и правил заработной платы для каждой существующей компании и привязка их к плану бухгалтерского учета

#odoo #odoo-13 #odoo-accounting

Вопрос:

В Odoo 13 мы столкнулись с проблемой нескольких компаний, где для каждой компании должен быть одинаковый набор правил и структур заработной платы (относящихся к модулю заработной платы OCA) для каждой компании.

Мы не хотим статически определять записи для каждой компании:

мы хотим создать функцию Odoo, которая автоматически создает записи для каждой компании и ссылается на соответствующие учетные записи в плане бухгалтерского учета для соответствующей компании:

 @api.model def create_rule_for_every_company(self):  """  function that'll create the rule for each company, in the group_system  """    

(функция вызывается при установке модуля из XML-файла данных)

Но потом быстро понял, что вам нужно сделать то же самое для структуры заработной платы и тому подобного, И поэтому мне интересно, есть ли более простой способ сделать это в логике Odoo, о которой я не знаю.

Цель этого состоит в том, чтобы каждое правило было связано с правильным : account.account для компании.

Ответ №1:

В основном, я придумал это:

 @api.model  def create_rule_for_every_company(self):  """  function that'll create the rule for each company, in the group_system  """  list_companies = self.env['res.company'].sudo().search([])  list_rules = self.env['hr.salary.rule'].sudo().search([('company_id', '=', 0)])  for rule in list_rules:  if rule.company_id is False:  for company in list_companies:  if rule.child_ids:  for child in rule.child_ids:  child_copy = child.copy()  child_copy.sudo().write({'company_id': company.id, 'parent_rule_id': rule.id, 'rubric_id': child.rubric_id})  rule_copy = rule.sudo().copy()  rule_copy.sudo().write({'company_id': company.id, 'rubric_id': rule.rubric_id})  else:  rule_copy = rule.sudo().copy()  rule_copy.sudo().write({'company_id': company.id, 'rubric_id': rule.rubric_id})  for rule in list_rules:  if rule.company_id is False:  self.sudo().unlink(rule.id)  

Все еще ищу более оптимальные решения.

Это решение кажется нестабильным.