如何将国家组字段与 Odoo 或 OpenERP 中的发票自定义字段相关联?

How relation country group field to invoice custom field in Odoo or OpenERP?

这是我的第一个问题! 我想知道如何将国家/地区组表单中的 export_message 文本字段和 dual_box 布尔字段与发票表单中的 x_message 文本字段和 x_dual 布尔字段相关联。

而且我想知道我怎样才能得到一个国家的国家组。 让我解释一下...

例如:

我有 3 个国家组(A、B 和 C),我有 5 个国家组(1、2、3、4、5)。

那么,国家组A有国家组(1和5),国家组B(2 和 3),国家组 C(1 和 4)。 在发票表格中,我有一个客户有一个地址和一个国家。

如果客户的国家是 1,我如何获取发票中的国家组并将其保存在自定义字段中?

我正在使用 Odoo 12

我的国家组Class

class CountryGroup(models.Model):
   _name = 'country.group'

   name = fields.Char()
   country_ids = fields.Many2many("res.country")
   export_message = fields.Text(string="Export Message")
   dual_box = fields.Boolean(string="Dual Box")

我的发票Class

class AccountInvoice(models.Model):
    _inherit = 'account.invoice'

    x_confirm_message = fields.Boolean(string='Confirm Print Message')
    x_message = fields.Text(string='Message', related='')
    x_dual = fields.Boolean(string="Dual Box", related='')

谢谢

在 account_invoice 模型的 country_group 上实施计算字段:

class AccountInvoice(models.Model):
    _inherit = 'account.invoice'

   country_group = fields.Many2one('country.group', 'Country Group', 
   compute="_find_country_group")
    x_confirm_message = fields.Boolean(string='Confirm Print Message')
    x_message = fields.Text(string='Message', related='country_group.export_message')
    x_dual = fields.Boolean(string="Dual Box", related='country_group.dual_box')

   @api.depends('customer_id')
   def _find_country_group(self):
        # Get country of the customer
        country_id = self.env['res.partner'].search([('id', '=', 
        self.customer_id.id)]).country_id
        # Get country_group based on customer's country
        country_gp_id = self.env['rel.country.group'].search([('country_id', '=', country_id.id)], limit=1)
        self.country_group = country_gp_id

class ResCountry(models.Model):
    _inherit = 'res.country'
    
    country_gp_ids = fields.Many2many("country.group", 'rel_country_group', 'country_id', 'country_group_id')


class CountryGroup(models.Model):
   _name = 'country.group'

   name = fields.Char()
   country_ids = fields.Many2many("res.country", 'rel_country_group', 'country_group_id', 'country_id')
   export_message = fields.Text(string="Export Message")
   dual_box = fields.Boolean(string="Dual Box")

   @api.model
   def create(self, vals):
       gpA = [1, 5]
       gpB = [2, 3]
       if vals['country_ids'].ids in gpA:
           vals['name'] = 'Group A'
       elif vals['country_ids'].ids in gpB:
           vals['name'] = 'Group B'
       ...
       return super(CountryGroup, self).create(vals)

在 odoo v14 中,您可以只检查 many2many in many2manylist in list
在 odoo v12 中,你必须遍历每个 many2many 来检查。

       if [x for x in vals['country_ids'].ids if x in gpA]:
           vals['name'] = 'Group A'
       elif [x for x in vals['country_ids'].ids if x in gpB]:
           vals['name'] = 'Group B'