Skip to Content
Menu
Musisz się zarejestrować, aby móc wchodzić w interakcje z tą społecznością.
To pytanie dostało ostrzeżenie
3 Odpowiedzi
21718 Widoki

A onchange method that try to modify the inherited domain and presents me the following error, this is the code I'm using and the new api..

File "/usr/lib/python2.7/dist-packages/psycopg2/extensions.py", line 129, in getquoted 

pobjs = [adapt(o) for o in self._seq]

ProgrammingError: can't adapt type 'account.journal'

@api.multi
def onchange_company_id(self, company_id, part_id, type, invoice_line, currency_id):
        result = super(account_invoice, self).onchange_company_id(company_id, part_id, type, invoice_line, currency_id)

        obj_jrnl = self.env['account.journal']
        jrnl_ids = result['domain']['journal_id']
        jrd = []

        for jrnl_id in jrnl_ids:
            for lst in jrnl_id[2]:
                jrnl = obj_jrnl.search([('id','=',lst)])
                for rec_jrnl in obj_jrnl.browse(jrnl):
                    if type in ('out_invoice', 'in_invoice'):
                        if rec_jrnl.type_doc.main_doc:                  # <-- Line Error
                            jrd.append(lst)
                    else:
                        if not rec_jrnl.cat_doc.void:             
                            jrd.append(lst)
            if jrd:
                result['value'] = {'journal_id': jrd[0]}
                result['domain'] = {'journal_id':  [('id', 'in', jrd)]}
                
        return result

The field is many2one type_doc to another table and main_doc is a boolean field, this method works flawlessly in 6.1 and 7.0

Awatar
Odrzuć
Najlepsza odpowiedź

Don't pass values to created like this, instead pass the id
'journal_id': self.journal_id,

Like this

'journal_id': self.journal_id.id,


Awatar
Odrzuć
Najlepsza odpowiedź

One line above your error you mention "type" but you do not specify what it is. 

Normally this error shows up when you want to for example browse over a record but the id is a boolean (false) instead of an integer.

Also make sure that type_doc is always provided (mandatory) because in your code you automatically assume that it is!

Awatar
Odrzuć
Autor

thanks ludo the problem was Logic, rewrote the code and ready

Autor Najlepsza odpowiedź

The problem was logic, the correct code is this:

        for jrnl_id in jrnl_ids[0][2]:
            rec_jrnl = obj_jrnl.browse(jrnl_id)
            if type in ('out_invoice', 'in_invoice'):
                if rec_jrnl.type_doc.main_doc:
                    jrd.append(jrnl_id)
                else:
                    if not rec_jrnl.cat_doc.void:
                       jrd.append(jrnl_id)
            if jrd:
                result['value'] = {'journal_id': jrd[0]}
                result['domain'] = {'journal_id':  [('id', 'in', jrd)]}
                
        return result

 

Awatar
Odrzuć
Powiązane posty Odpowiedzi Widoki Czynność
2
maj 23
12985
0
maj 23
37
1
kwi 23
6453
1
wrz 21
4431
2
sty 20
14905