Search code examples
pythonpython-2.7odoo-8odoo

AttributeError: 'res.partner' object has no attribute 'journal_id' - Odoo v8


I have this method:

@api.multi
@api.depends('order_picking', 'order_picking.isbn', 'contract_worksheet', 'state')
def accounting_scenarios(self):
    for record in self:
        if not len(record.transporter):
            raise Warning('Please Enter Transporter !')
        elif not len(record.transporter.transp_transit):
            raise Warning('Please assign transit account to the transporter !')
        if record.state in ('awaitingraw'): #('cancel', 'done')
            acc_move = self.env['account.move'] 
            move_lines = [
                (0, 0, {
                    'name': 'name', 
                    'debit': record.contract_worksheet.total_alles, 
                    'credit': record.contract_worksheet.total_alles,
                    'account_id': record.transporter.transp_transit, 
                    'date': date,
                    'partner_id': record.transporter, 
                }),
            ]
            acc_move.create({
                    #'period_id': period_id,
                    'journal_id': record.transporter.journal_id.id,
                    'date':date,
                    'state': 'draft',
                    'line_id': move_lines, # this is one2many field to account.move.line
                })
        elif record.state in ('work_in_progress'):
            record.temp2 = record.contract_worksheet.total_totals
        elif record.state in ('delivered'):
            record.transporter.transp_transit.debit = record.contract_worksheet.total_alles

It throws me this:

Traceback (most recent call last):
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 546, in _handle_exception
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 583, in dispatch
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 319, in _call_function
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\service\model.py", line 118, in wrapper
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 316, in checked_call
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 812, in __call__
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 412, in response_wrap
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\addons\web\controllers\main.py", line 948, in call_button
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\addons\web\controllers\main.py", line 936, in _call_kw
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 268, in wrapper
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 399, in old_api
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\addons\bsi\models\models.py", line 1471, in check_quantity
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 266, in wrapper
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\addons\bsi\models\models.py", line 1399, in write
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 266, in wrapper
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\models.py", line 3789, in write
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 266, in wrapper
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 592, in new_api
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\models.py", line 4048, in _write
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 266, in wrapper
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\models.py", line 5773, in recompute
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\models.py", line 5773, in <dictcomp>
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\models.py", line 5654, in __getitem__
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\fields.py", line 835, in __get__
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\fields.py", line 913, in determine_value
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\fields.py", line 893, in compute_value
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\fields.py", line 885, in _compute_value
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 266, in wrapper
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\addons\bsi\models\models.py", line 1386, in accounting_scenarios
AttributeError: 'res.partner' object has no attribute 'journal_id'

The error comes on this line journal_id': record.transporter.journal_id.id,, how can I assign a journal from the res.partner?

I mean, it has an account assigned to it (Many2one to account.account), but how do I know the journal assigned to that account? And specify it on this method?

Any ideas?

EDIT

The offending field:

transporter = fields.Many2one('res.partner', string="Transporter", domain="[('type_of_supplier','=','transporter')]")

Solution

  • The problem is that res.partner model doesn't have any journal_id field, so you have to take it from the accounts assigned to the partner. It will depend on if you are paying or selling some service to the transporter.

    If you are paying some service to the transporter (I guess this is the case):

    @api.multi
    @api.depends('order_picking', 'order_picking.isbn', 'contract_worksheet', 'state')
    def accounting_scenarios(self):
        for record in self:
            if not len(record.transporter):
                raise Warning('Please Enter Transporter !')
            elif not len(record.transporter.transp_transit):
                raise Warning('Please assign transit account to the transporter !')
            if record.state in ('awaitingraw'): #('cancel', 'done')
                acc_move = self.env['account.move'] 
                move_lines = [
                    (0, 0, {
                        'name': 'name', 
                        'debit': record.contract_worksheet.total_alles, 
                        'credit': record.contract_worksheet.total_alles,
                        'account_id': record.transporter.transp_transit, 
                        'date': date,
                        'partner_id': record.transporter, 
                    }),
                ]
                journal_id = False
                if record.transporter.property_account_payable:
                    journals = self.env['account.journal'].search([
                        ('default_debit_account_id', '=', record.transporter.property_account_payable.id)
                    ])
                    if journals:
                        journal_id = journals[0].id
                acc_move.create({
                    #'period_id': period_id,
                    'journal_id': journal_id,
                    'date':date,
                    'state': 'draft',
                    'line_id': move_lines, # this is one2many field to account.move.line
                })
            elif record.state in ('work_in_progress'):
                record.temp2 = record.contract_worksheet.total_totals
            elif record.state in ('delivered'):
                record.transporter.transp_transit.debit = record.contract_worksheet.total_alles
    

    But, if you are selling them some service:

    @api.multi
    @api.depends('order_picking', 'order_picking.isbn', 'contract_worksheet', 'state')
    def accounting_scenarios(self):
        for record in self:
            if not len(record.transporter):
                raise Warning('Please Enter Transporter !')
            elif not len(record.transporter.transp_transit):
                raise Warning('Please assign transit account to the transporter !')
            if record.state in ('awaitingraw'): #('cancel', 'done')
                acc_move = self.env['account.move'] 
                move_lines = [
                    (0, 0, {
                        'name': 'name', 
                        'debit': record.contract_worksheet.total_alles, 
                        'credit': record.contract_worksheet.total_alles,
                        'account_id': record.transporter.transp_transit, 
                        'date': date,
                        'partner_id': record.transporter, 
                    }),
                ]
                journal_id = False
                if record.transporter.property_account_receivable:
                    journals = self.env['account.journal'].search([
                        ('default_credit_account_id', '=', record.transporter.property_account_receivable.id)
                    ])
                    if journals:
                        journal_id = journals[0]
                acc_move.create({
                    #'period_id': period_id,
                    'journal_id': journal_id,
                    'date':date,
                    'state': 'draft',
                    'line_id': move_lines, # this is one2many field to account.move.line
                })
            elif record.state in ('work_in_progress'):
                record.temp2 = record.contract_worksheet.total_totals
            elif record.state in ('delivered'):
                record.transporter.transp_transit.debit = record.contract_worksheet.total_alles