как передать значения из продажи в счет odoo?

#odoo

Вопрос:

Я создал новое поле one2many, такое как строки заказа в продаже после вкладки «Другая информация». Кроме того,я создал новое поле one2many, такое как строки счета-фактуры в форме счета-фактуры после вкладки «Другая информация».

Что мне нужно сделать, так это передать значения из поля «Продажа» в поле «Накладная» в поле «Накладная», нажав кнопку «Создать накладную».

Я попытался наследовать функции _prepare_invoice и _prepare_invoice_line по умолчанию. Это не работает для другого поля one2many.

Не мог бы кто-нибудь, пожалуйста, помочь мне сделать это!

Ответ №1:

Если вы используете Odoo14/Odoo13/Odoo12/Odoo11 , то вам нужно переопределить sale.order метод, т. Е. _prepare_invoice Ниже приведен пример Odoo14

 @api.model
def _prepare_invoice(self):
    """
    Prepare the dict of values to create the new invoice for a sales order. This method may be
    overridden to implement custom invoice generation (making sure to call super() to establish
    a clean extension chain).
    """
    self.ensure_one()
    journal = self.env['account.move'].with_context(default_move_type='out_invoice')._get_default_journal()
    if not journal:
        raise UserError(_('Please define an accounting sales journal for the company %s (%s).') % (self.company_id.name, self.company_id.id))

    invoice_vals = {
        'ref': self.client_order_ref or '',
        'move_type': 'out_invoice',
        'narration': self.note,
        'currency_id': self.pricelist_id.currency_id.id,
        'campaign_id': self.campaign_id.id,
        'medium_id': self.medium_id.id,
        'source_id': self.source_id.id,
        'invoice_user_id': self.user_id and self.user_id.id,
        'team_id': self.team_id.id,
        'partner_id': self.partner_invoice_id.id,
        'partner_shipping_id': self.partner_shipping_id.id,
        'fiscal_position_id': (self.fiscal_position_id or self.fiscal_position_id.get_fiscal_position(self.partner_invoice_id.id)).id,
        'partner_bank_id': self.company_id.partner_id.bank_ids[:1].id,
        'journal_id': journal.id,  # company comes from the journal
        'invoice_origin': self.name,
        'invoice_payment_term_id': self.payment_term_id.id,
        'payment_reference': self.reference,
        'transaction_ids': [(6, 0, self.transaction_ids.ids)],
        'invoice_line_ids': [],
        'company_id': self.company_id.id,
        'tax_line': [(6, 0, self.tax_line.ids)] //This is my customize field.
        }
    return invoice_vals
 

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

1. Спасибо, но это не передало ценностей!

2. Не могли бы вы объяснить свою проблему после переопределения этого метода, потому что в настоящее время я использую тот же метод для передачи значений из SO в счет

3. В account.move у меня есть это поле o2m account_tax_line_ids = поля. One2many(«учетная запись.налоговая.строка», «идентификатор учетной записи», строка=»Налоги»)

4. В заказе на продажу, sale_tax_line_ids = поля. One2many(«продажа.заказ.налог», «идентификатор продажи», строка= «Налоговые строки», только для чтения=Истина, состояния={«черновик»: [(«только для чтения», Ложь)]}, копия=Истина)

5. ‘account_tax_line_ids’: [(6, 0, self.sale_tax_line_ids.ids)] Я поместил это в поле prepare_invoice #моя настройка

Ответ №2:

Вы не можете напрямую передать o2M, который будет иметь совершенно другие идентификаторы. ‘account_tax_line_ids’: [(6, 0, self.sale_tax_line_ids.ids)] невозможно.

Если вам нужно снова отредактировать account_tax_line_ids в форме счета-фактуры, и значение sale_tax_line_ids не должно измениться, попробуйте сделать это ниже.

 @api.multi
def _prepare_invoice(self):
    self.ensure_one()
    invoice_vals = super(SaleOrder, self)._prepare_invoice()
    invoice_vals['account_tax_line_ids'] = [(0, 0, {'FIELD1': line.FIELD1_VALUE, ... } for line in self.sale_tax_line_ids]
    return invoice_vals

Specify the fields in side Dictionary.
 

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

1. Спасибо за помощь. Я сделал это, скопировав o2m из продажи в o2m в счете-фактуре. Я сделал это с помощью списка.

Ответ №3:

Прочитайте ваши комментарии и узнайте, почему он не отображается или не получает ошибок.

В поле заказ на продажу:

 sale_tax_line_ids = fields.One2many('**sale.order.tax**', 'sale_id', string='Tax Lines', readonly=True, states={'draft': [('readonly', False)]}, copy=True)
 

И, в учетной записи, переместите:

 account_tax_line_ids = fields.One2many('**account.tax.line**', 'account_line_id', string='Taxes') and you set value like 'account_tax_line_ids': [(6, 0,**self.sale_tax_line_ids.ids**)]
 

Таким образом, в account_tax_line_ids полях вы должны установить записи account.tax.line модели, но вы пытаетесь установить sale.order.tax записи модели.

Кроме того, вы можете видеть, что в odoo по умолчанию, как и в строке заказа на продажу , есть product_id , поэтому она связана с product.product моделью , и то же самое с учетной записью: переместите туда строку product_id , которая относится к product.product модели. Таким образом, он устанавливает продукт строки заказа на продажу для учета продукта строки перемещения.