2017-01-17 14 views
0

Обычно я создаю новое поле структуры базы данных, используя режим отладки, затем Edit FormView и записывая, например. <field name="x_delivery_date"/>. Кроме того, я могу показать его позже на распечатанном отчете, как это:Odoo 10: показать поле модели «sale.order» в виде формы «account.invoice»

<div name="x_delivery_date" t-if="doc.x_delivery_date"> 
    <strong>Delivery Date:</strong> 
    <p t-field="doc.x_delivery_date"/> 
</div> 

Но как отобразить поле (commitment_date), которая доступна в модели (sale.order) в другой модели FormView (account.invoice)? Я предполагаю, что мне нужно использовать объектные отношения или связанную область, но я не знаю, как это сделать. Надеюсь, кто-то может мне помочь. Спасибо заранее.

ответ

0

Для этого вы можете использовать соответствующие поля. Вы должны добавить два поля в account.invoice, чтобы сделать это.

class AccountInvoice(models.Model): 
    _inherit = "account.invoice" 

    order_id = fields.Many2one('sale.order', 'Related_order') 
    commitment_date = fields.Date(related='order_id.commitment_date') 

Затем вы можете использовать commitment_date поля в account.invoice формах. Значение поля в sale.order будет сразу отражено на форме. Но имейте в виду, что изменение значения этого поля изменит значение этого поля на sale.order.

EDIT

Для отчетов просто использовать поле, как это регулярное поле account.invoice (так doc.commitment_date)

+0

Я получаю сообщение об ошибке 'ProgrammingError: column account_invoice.order_id не существует' – saitam

+0

После перезагрузки сервера вы должны обновить свой модуль. – Majikat

0

Сначала нужно добавить поле many2one в account.invoice

class account_invoice(osv.osv): 
    _inherit = "account.invoice" 

    _columns = { 
     'source_id':fields.many2one('sale.order','Source') 
    } 

Затем наследуйте функцию _prepare_invoice в sale_order. В этой функции вы собираетесь передать идентификатор продажи заказа в качестве исходного идентификатора в account.invoice

class sale_order(osv.osv): 
    _inherit = "sale.order" 

    def _prepare_invoice(self, cr, uid, order, lines, context=None): 
    if context is None: 
     context = {} 
    journal_id = self.pool['account.invoice'].default_get(cr, uid, ['journal_id'], context=context)['journal_id'] 
    if not journal_id: 
     raise osv.except_osv(_('Error!'), 
      _('Please define sales journal for this company: "%s" (id:%d).') % (order.company_id.name, order.company_id.id)) 
    invoice_vals = { 
     'name': order.client_order_ref or '', 
     'origin': order.name, 
     'type': 'out_invoice', 
#Sale order id as source_id 
     'source_id':order.id, 
     'reference': order.client_order_ref or order.name, 
     'account_id': order.partner_invoice_id.property_account_receivable.id, 
     'partner_id': order.partner_invoice_id.id, 
     'journal_id': journal_id, 
     'invoice_line': [(6, 0, lines)], 
     'currency_id': order.pricelist_id.currency_id.id, 
     'comment': order.note, 
     'payment_term': order.payment_term and order.payment_term.id or False, 
     'fiscal_position': order.fiscal_position.id or order.partner_invoice_id.property_account_position.id, 
     'date_invoice': context.get('date_invoice', False), 
     'company_id': order.company_id.id, 
     'user_id': order.user_id and order.user_id.id or False, 
     'section_id' : order.section_id.id 
    } 

    invoice_vals.update(self._inv_get(cr, uid, order, context=context)) 
    return invoice_vals 

Добавить это в виду файл

<record id="invoice_form" model="ir.ui.view"> 
      <field name="name">account.invoice.form</field> 
      <field name="model">account.invoice</field> 
      <field name="inherit_id" ref="account.invoice_form"/> 
      <field name="arch" type="xml"> 
       <xpath expr="//field[@name='date_invoice']" position="after"> 
        <field name="source_id"/> 
       </xpath> 
      </field> 
     </record> 

Теперь добавьте это в ваш файл отчета

<div name="x_delivery_date" t-if="doc.x_delivery_date"> 
    <strong>Delivery Date:</strong> 
    <p t-field="doc.x_delivery_date"/> 
    <p t-field="doc.source_id.commitment_date"/> 
</div> 
+0

Это в Odoo 8 .. пожалуйста, конвертируйте для odoo 10. это будет работать точно. – sfx

+0

Спасибо, но после добавления строки '_columns = {...}' в 'class AccountInvoice (models.Model)' Я получаю ошибку сервера 500 – saitam