This question has been flagged
2 Replies
8429 Views

Hi,

In order to have a popup when click in Validate button of account.invoice I have made some changes:

In addons/mymodule/account_invoice.py:

class account_invoice(osv.osv):
    _inherit = "account.invoice"
    def verify_vat(self, cr, uid, ids, context=None):
        """ Verify if the client has nif"""

        invoice_obj = self.pool.get('account.invoice')
        this = self.browse(cr, uid, ids)[0]
        for invoice_vi in invoice_obj.browse(cr,uid,ids):

            if invoice_vi.partner_id:
                if not invoice_vi.partner_id.vat:
                    form_res = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'vi_saft_pt', 'warning_vat_form')
                    form_id = form_res and form_res[1] or False
                    #import pdb
                    #pdb.set_trace()
                    print "VERIFY_VAT"
                    return {
                        'name': _('Warning Vat'),
                        'view_type': 'form',
                        'view_mode': 'form',
                        'res_model': 'warning.vat',
                        'view_id':[form_res and form_res[1] or False],
                        'target': 'new',
                        'domain': [],
                        'type': 'ir.actions.act_window',
                        'context': context,
                    }
            else:
                print "VERIFY_VAT 2return"
                return True 
account_invoice()

In addons/mymodule/warning_vat_view.xml:

<record id="warning_vat_form" model="ir.ui.view">
        <field name="name">warning.vat.form</field>
        <field name="model">warning.vat</field>
        <field name="arch" type="xml">
            <form string="Warning Vat" version="7.0">
                <separator string="The following client has no associated nif."/>
                <field name="vat"/>
                <field name="partner_id"/>
                <footer>
                    <button string="Cancel" class="oe_link" special="cancel" />
                </footer>
            </form>
        </field>
    </record>

<record id="action_warning_vat_form" model="ir.actions.act_window">
    <field name="name">Warning Vat</field>
    <field name="type">ir.actions.act_window</field>
    <field name="res_model">warning.vat</field>
    <field name="view_type">form</field>
    <field name="view_mode">form</field>
    <field name="target">new</field>
</record>

<record model="ir.actions.act_window.view" id="action_warning_vat_form_view">
    <field name="name">Warning Vat</field>
    <field name="view_mode">form</field>
    <field name="view_id" ref="warning_vat_form"/>
</record>

In addons/mymodule/account_invoice_workflow.xml :

    <record id="account.act_open" model="workflow.activity">
        <field name="wkf_id" ref="account.wkf"/>
        <field name="name">open</field>
        <field name="action">action_date_assign()

action_move_create() action_number() invoice_validate() verify_vat()</field> <field name="kind">function</field> </record>

This code gives me the following error:

Uncaught TypeError: Cannot read property 'view_type' of undefined
http://localhost:8069/web/webclient/js?db=..

If I change the order in addons/mymodule/account_invoice_workflow.xml like this :

    <record id="account.act_open" model="workflow.activity">
        <field name="wkf_id" ref="account.wkf"/>
        <field name="name">open</field>
        <field name="action">verify_vat()
action_date_assign()
action_move_create()
action_number()
invoice_validate()
</field>
            <field name="kind">function</field>
        </record>

It prints the "VERIFY_VAT" but nothing appears and the invoice is validated.

I had change the code in the return of verify_vat but nothing appears...

Thanks

Avatar
Discard
Author Best Answer

If I change the code of verify_vat to :

def verify_vat(self, cr, uid, ids, context=None):
    """ Verify if the client has nif"""

    invoice_obj = self.pool.get('account.invoice')
    this = self.browse(cr, uid, ids)[0]
    for invoice_vi in invoice_obj.browse(cr,uid,ids):

        if invoice_vi.partner_id:
            if not invoice_vi.partner_id.vat:
                form_res = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'vi_saft_pt', 'warning_vat_form')
                form_id = form_res and form_res[1] or False
                wizard_id = self.pool.get("warning.vat").create(cr, uid, {}, context)
                print "VERIFY_VAT"
                return {
                    'type': 'ir.actions.act_window',
                    'name': _('Warning Vat'),
                    'view_type': 'form',
                    'view_mode': 'form',
                    'res_model': 'warning.vat',
                    'view_id': False,
                    'target': 'new',
                    'nodestroy': True, 
                    'domain': [],
                    'views': [(form_id, 'form')],
                    'res_id': wizard_id,
                    'context': context,
                }

And in addons/mymodule/account_invoice_workflow.xml :

   <record id="account.act_open" model="workflow.activity">
        <field name="wkf_id" ref="account.wkf"/>
        <field name="name">open</field>
        <field name="action">action_date_assign()
action_move_create()
action_number()
invoice_validate()
verify_vat()
</field>
            <field name="kind">function</field>
        </record>

It works.

Thanks.

Avatar
Discard
Best Answer

Hello Anabela, I need to run a wizard on creation of Invoice, when it is in draft. I've tried your code, adding the function to act_draft activity. The function is executed but wizard doesn't show. When I add it to the act_open activiti it works well. Do you have any idea why its not working in a draft on creation of Invoice?

I've even tried to start a subflow and execute the function there, but still no results.

Anyways thanks for your post it is really helpful. Cheers!

Avatar
Discard