Search code examples
javascriptodooodoo-16

odoo 16 reconciliation translate not working


when adding

name = fields.Char(translate=True,)
company_name = fields.Char(translate=True)
display_name = fields.Char(translate=True)

to the res.partner then go to trying to open the reconciliation action i am geting

TypeError: (this.m2o_value||"").trim is not a function. (In '(this.m2o_value||"").trim()', '(this.m2o_value||"").trim' is undefined)

is was working in odoo 14 but when i upgraded to 16 is gave me this error.

can you help me with the js part i don't really unstained the error

i tried removing translate=True on the name and company name and the reconciliation works


Solution

  • It's me again

    After been able to test and debug your issue locally I endup with this solution that you need to include in you module

    class AccountReconciliation(models.AbstractModel):
        _inherit = 'account.reconciliation.widget'
    
        @api.model
        def get_all_data_for_manual_reconciliation(self, partner_ids, account_ids):
            res = super(AccountReconciliation, self).get_all_data_for_manual_reconciliation(partner_ids, account_ids)
            for partner_data in res.get('customers', []):
                if isinstance(partner_data.get('partner_name'), dict):
                    partner_data['partner_name'] = partner_data['partner_name'].get(self.env.context['lang'], 'en_US')
            return res
    

    The reason it's that after you change res.partner name field to be translate=True and get that change applied into the database that will cause the field column to be of type JSONB so any select to that field using direct SQL will get a JSON Object which is what happens in get_all_data_for_manual_reconciliation of account.reconciliation.widget model so I manually check that and properly select the value related to the current user lang stored in the Enviroment Context

    Hope that you could solve your issue with this change. I have tested and it's working on my localhost