#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
модели. Таким образом, он устанавливает продукт строки заказа на продажу для учета продукта строки перемещения.