Получить и установить текст в поле xml

Я новичок в odoo и в своих поисках не нашел ответа на свою проблему.

Я использую расширение res_partner_view в базовой папке для поля имени. Что я хочу сделать, так это то, что пользователь не может изменить имя партнера, если нет НДС или он определен как общий (999999990). Когда я делаю повышение, говоря, что пользователь не может изменить имя, я хочу поместить исходное имя в поле, прежде чем он попытается изменить.

У меня есть функция onchange в моем модуле:

 def onchange_partner_name(self, cr, uid, ids, n, context=None):
    #raise osv.except_osv(_('Alterar nome'), _('Função onchange_partner_name'))

    result = {}

    cr.execute("Select res_partner.vat, res_partner.name, account_invoice.state from account_invoice inner join res_partner on account_invoice.partner_id = res_partner.id where res_partner.id = '%s'" % ids[0])
    registos = cr.fetchall()

    if (len(registos) > 0):
        partner_nif = list(set(i[0] for i in registos))

        if partner_nif[-1] == None or str(partner_nif[-1]) == '999999990':
            for vat,nam,estado in registos:
                if estado == 'open' or estado == 'paid':
                        raise osv.except_osv(_('Cliente com documentos emitidos'), _(content + 'Não pode alterar o Nome de um cliente sem NIF.'))

    result['name'] = n
    return {'value': result}   

И мой xml:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>

        <record id="view_partner_form_Name" model="ir.ui.view">
            <field name="name">res.partner.form2</field>
            <field name="model">res.partner</field>
            <field name="inherit_id" ref="base.view_partner_form"/>
            <field eval="1" name="priority"/>
            <field name="arch" type="xml">
                <field name="name" default_focus="1" placeholder="Name" position="replace">
                    <field name="name" default_focus="1" placeholder="Name" on_change="onchange_partner_name(name)"/>
                </field>
            </field>
        </record>

    </data>
</openerp>

Поэтому я хочу или сохранить имя перед изменением поля «имя» из xml и перед повышением изменить его обратно или перед повышением поставить имя, которое есть в таблице.

Есть ли способ получить и установить соперничество (строку), которое присутствует в имени поля xml?

заранее спасибо


person JSS    schedule 30.12.2014    source источник


Ответы (1)


я не знаю, есть ли у кого-нибудь такая же проблема, как у меня, но решение, которое я нашел, заключалось в том, чтобы добавить предупреждение к возврату вместо повышения osv.кроме....

...
 for vat,nam,estado in registos:
                    if estado == 'open' or estado == 'paid':
                        result['name'] = nam
                        return{'value': result, 'warning':{'title':'warning','message':'Não pode alterar o Nome de um cliente sem NIF.'}}
 ...

И это не позволит изменить поле "имя" с предупреждением, а также откатить изменения в поле на имя, хранящееся в таблице.

person JSS    schedule 06.01.2015