Отключить предыдущие даты в datepicker odoo 10 - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь отключить предыдущие даты при оплате счета, но у меня это не работает.

Вот моя модель:

from odoo import models, fields, api
from datetime import datetime
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT


class account_payment(models.Model):
    _inherit = 'account.payment'

    def onchange_date(self, cr, uid, ids, payment_date, context=None):
        if datetime.strptime(payment_date, DEFAULT_SERVER_DATE_FORMAT).date() > datetime.now().date():
            return False
        return payment_date

Вот мой xml-файл:

<odoo>
  <data>

        <record model="ir.ui.view" id="view_account_payment_invoice_form">

            <field name="name">account.payment.invoice.form</field>

            <field name="model">account.payment</field>

            <field name="inherit_id" ref="account.view_account_payment_invoice_form"/>

            <field name="arch" type="xml">

                <xpath expr="//field[@name='payment_date']" position="replace">

                    <field name="payment_date" on_change="onchange_date(payment_date)"/>

                </xpath>

            </field>

        </record>


  </data>
</odoo>

Ошибка:

TypeError: onchange_date () принимает не менее 5 аргументов (2 дано)

Пожалуйста, кто-нибудь может мне помочь. Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Причина, по которой вы получаете ошибку, заключается в том, что вы смешиваете старый и новый API. Если вы хотите использовать API старого стиля (cr, uid, ids, ... и XML on_change=...), вы должны добавить декоратор в новый метод API (ваш python - это новый API, поскольку ваш класс наследует models.Model).

Модели / account_payment.py

# This decorator provides cr, uid, ids, and context variables
# to your method by default (like the old API had)
@api.cr_uid_ids_context
def onchange_date(self, cr, uid, ids, payment_date, context=None):
    ...

Вы можете узнать больше о некоторых из этих специальных декораторов (которые были представлены в версии 9.0) в этом сообщении в блоге

0 голосов
/ 04 мая 2018

Я думаю, это может быть полезно, Ваша модель:

@api.onchange('payment_date')
def onchange_date(self):
    if datetime.strptime(self.payment_date, DEFAULT_SERVER_DATE_FORMAT).date() > datetime.now().date():
        self.payment_date = ''

Ваш взгляд:

<odoo>
  <data>
        <record model="ir.ui.view" id="view_account_payment_invoice_form">
            <field name="name">account.payment.invoice.form</field>
            <field name="model">account.payment</field>
            <field name="inherit_id" ref="account.view_account_payment_invoice_form"/>
            <field name="arch" type="xml">
                <xpath expr="//field[@name='payment_date']" position="replace">
                    <field name="payment_date"/>
                </xpath>
            </field>
        </record>
  </data>
</odoo>
...