показывать только аналитический счет, связанный с конкретным бюджетом, в пользовательском модуле выставления счетов поставщикам odoo 11

#odoo #odoo-11

#odoo #odoo-11

Вопрос:

Привет всем, я добавил новое поле account.invoice и добавил это поле в представление счетов поставщика, чтобы получить весь бюджет. После выбора определенного бюджета я хочу показать только аналитический счет, связанный с этим бюджетом, в разделе счета, используя onchange.

Вот учетная запись.счет-фактура введите описание изображения здесь

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

    creating_user_id = fields.Many2one('res.users', 'Project Manager', default=lambda self: self.env.user)
    email = fields.Char('Email', related='creating_user_id.login')
    budget_id = fields.Many2one('crossovered.budget', string='Budget')


    @api.onchange('budget_id')
    def onchange_analytic_account_budget(self):
        return {'domain': {'invoice_line_ids.account_analytic_id': [
            ('id',
             'in',
             self.mapped('budget_id.crossovered_budget_line.analytic_account_id.id')
             )]
        }
        }
 

Ответ №1:

Вы можете переопределить существующий метод onchange в строках счета, чтобы изменить analytic_account_id домен.

В следующем примере домен устанавливается при Unit of Measure изменении и только в том случае, если budget_id поле установлено:

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

    account_analytic_id = fields.Many2one('account.analytic.account',
                                          string='Budget line')

    @api.onchange('uom_id')
    def _onchange_uom_id(self):
        res = super(BillsEdit, self)._onchange_uom_id()
        account_ids = self.mapped('invoice_id.budget_id.crossovered_budget_line.analytic_account_id.id')
        new_domain = {}
        if account_ids:
            new_domain['account_analytic_id'] = [('id', 'in', account_ids)]
            if 'domain' in res:
                res['domain'].update(new_domain)
            else:
                res['domain'] = new_domain
        return res
 

Комментарии:

1. большое вам спасибо за спасение моего дня

2. что я могу для вас сделать?