2

カスタム odoo モジュールを作成しましたが、インストールするとシングルトン エラーがスローされます。_compute_margin(self) 内のすべてをコメントアウトして 0.0 を返すと、モジュールは正常にインストールされます。その後、_compute_margin 関数を元に戻してモジュールを更新すると、正常に更新されます。

_compute_margin 関数の内容を使用してモジュールを正常にインストールするには、どのような変更を加える必要がありますか?

class MyCompanyintercompanyMargin(models.Model):
    _name = 'my_companyintercompany.margin'
    name = fields.Char()
    x_marginsplitmodel = fields.Char()
    x_marginsplitdescription = fields.Char()

class ResPartner(models.Model):
    _name = 'res.partner'
    _inherit = 'res.partner'

    x_my_companyintercompany = fields.Boolean()
    x_my_companyintercompany_marginsplit = fields.Many2one(
        'my_companyintercompany.margin',
        string='Margin Split Model'
    )

    class SaleOrder(models.Model):
    _name = 'sale.order'
    _inherit = 'sale.order'

    x_endcustomer = fields.Many2one(
            comodel_name='res.partner',
            string='Customer'
    )

    x_my_companyintercompany_marginsplit = fields.Many2one(string='Margin Split', related="partner_id.x_my_companyintercompany_marginsplit")
    x_my_companyintercompany_marginsplitid = fields.Char(related="x_my_companyintercompany_marginsplit.name", string="Margin Split")

    x_prsmarginpercentage = fields.Float(string="Marge %")

    @api.depends('order_line.margin')
    def _compute_margin(self):
        amount_untaxed = self.amount_untaxed
        if self.x_my_companyintercompany_marginsplit:
            try:
                if self.x_my_companyintercompany_marginsplitid == "Total -2,5%":
                    totalordercost = 0.0
                    for line in self.order_line:
                        totalordercost += line.purchase_price * line.product_uom_qty
                    intercompanymargin = amount_untaxed * 0.025
                    self.x_prsmargin = amount_untaxed - totalordercost - intercompanymargin
                elif self.x_my_companyintercompany_marginsplitid == "Marge 50/50":
                    self.x_prsmargin = self.margin / 2
                else:
                    self.x_prsmargin = self.margin
            except:
                raise "Exception!"
        else:
            self.x_prsmargin = self.margin
        if amount_untaxed > 0.0:
              self.x_prsmarginpercentage = self.x_prsmargin / amount_untaxed * 100
        else:
               self.x_prsmarginpercentage = 0.0
    x_prsmargin = fields.Monetary(compute='_compute_margin', store='true')
4

2 に答える 2