[IMP] account: changes related to the cleaning of the invoice workflow

bzr revid: qdp-launchpad@openerp.com-20120525151740-vjho9b0fopbrils7
This commit is contained in:
Quentin (OpenERP) 2012-05-25 17:17:40 +02:00
parent ab07d440ce
commit 65031e90ef
7 changed files with 28 additions and 46 deletions

View File

@ -204,7 +204,6 @@ class account_invoice(osv.osv):
('proforma','Pro-forma'), ('proforma','Pro-forma'),
('proforma2','Pro-forma'), ('proforma2','Pro-forma'),
('open','Open'), ('open','Open'),
('sent','Sent'),
('paid','Paid'), ('paid','Paid'),
('cancel','Cancelled'), ('cancel','Cancelled'),
],'State', select=True, readonly=True, ],'State', select=True, readonly=True,
@ -370,13 +369,15 @@ class account_invoice(osv.osv):
raise orm.except_orm(_('Unknown Error'), str(e)) raise orm.except_orm(_('Unknown Error'), str(e))
def invoice_print(self, cr, uid, ids, context=None): def invoice_print(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService('workflow') '''
for id in ids: This function prints the invoice and mark it as sent, so that we can see more easily the next step of the workflow
wf_service.trg_validate(uid, 'account.invoice', id, 'invoice_sent', cr) '''
assert len(ids) == 1, 'This option should only be used for a single id at a time'
self.write(cr, uid, ids, {'sent': True}, context=context)
datas = { datas = {
'ids': ids, 'ids': ids,
'model': 'account.invoice', 'model': 'account.invoice',
'form': self.read(cr, uid, ids, context=context)[0] 'form': self.read(cr, uid, ids[0], context=context)
} }
return { return {
'type': 'ir.actions.report.xml', 'type': 'ir.actions.report.xml',
@ -386,6 +387,9 @@ class account_invoice(osv.osv):
} }
def action_invoice_sent(self, cr, uid, ids, context=None): def action_invoice_sent(self, cr, uid, ids, context=None):
'''
This function opens a window to compose an email, with the edi invoice template message loaded by default
'''
mod_obj = self.pool.get('ir.model.data') mod_obj = self.pool.get('ir.model.data')
template = mod_obj.get_object_reference(cr, uid, 'account', 'email_template_edi_invoice') template = mod_obj.get_object_reference(cr, uid, 'account', 'email_template_edi_invoice')
template_id = template and template[1] or False template_id = template and template[1] or False
@ -1715,8 +1719,7 @@ class mail_message(osv.osv):
def _postprocess_sent_message(self, cr, uid, message, context=None): def _postprocess_sent_message(self, cr, uid, message, context=None):
if message.model == 'account.invoice': if message.model == 'account.invoice':
wf_service = netsvc.LocalService("workflow") self.pool.get('account.invoice').write(cr, uid, message.ids, {'sent':True}, context=context)
wf_service.trg_validate(uid, 'account.invoice', message.res_id, 'invoice_sent', cr)
return super(mail_message, self)._postprocess_sent_message(cr, uid, message=message, context=context) return super(mail_message, self)._postprocess_sent_message(cr, uid, message=message, context=context)
mail_message() mail_message()

View File

@ -266,13 +266,13 @@
<button name="invoice_print" string="Print Invoice" type="object" states="open" attrs="{'invisible':['|',('sent','=',True), ('state', '=', 'draft')]}"/> <button name="invoice_print" string="Print Invoice" type="object" states="open" attrs="{'invisible':['|',('sent','=',True), ('state', '=', 'draft')]}"/>
<button name="invoice_open" states="draft,proforma2" string="Validate"/> <button name="invoice_open" states="draft,proforma2" string="Validate"/>
<button name="invoice_proforma2" states="draft" string="PRO-FORMA" groups="account.group_proforma_invoices"/> <button name="invoice_proforma2" states="draft" string="PRO-FORMA" groups="account.group_proforma_invoices"/>
<button name="%(action_account_invoice_refund)d" type='action' string='Refund Invoice' states='sent,paid'/> <button name="%(action_account_invoice_refund)d" type='action' string='Refund Invoice' states='paid'/>
<button name="invoice_cancel" states="draft,proforma2,sale,open,sent" string="Cancel" groups="base.group_no_one"/> <button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" groups="base.group_no_one"/>
<button name="action_cancel_draft" states="cancel" string="Reset to Draft" type="object"/> <button name="action_cancel_draft" states="cancel" string="Reset to Draft" type="object"/>
<button name='%(action_account_state_open)d' type='action' string='Re-Open' groups="account.group_account_invoice" attrs="{'invisible':['|', ('state','&lt;&gt;','paid'), ('reconciled', '=', True)]}" help="This button only appears when the state of the invoice is 'paid' (showing that it has been fully reconciled) and auto-computed boolean 'reconciled' is False (depicting that it's not the case anymore). In other words, the invoice has been dereconciled and it does not fit anymore the 'paid' state. You should press this button to re-open it and let it continue its normal process after having resolved the eventual exceptions it may have created."/> <button name='%(action_account_state_open)d' type='action' string='Re-Open' groups="account.group_account_invoice" attrs="{'invisible':['|', ('state','&lt;&gt;','paid'), ('reconciled', '=', True)]}" help="This button only appears when the state of the invoice is 'paid' (showing that it has been fully reconciled) and auto-computed boolean 'reconciled' is False (depicting that it's not the case anymore). In other words, the invoice has been dereconciled and it does not fit anymore the 'paid' state. You should press this button to re-open it and let it continue its normal process after having resolved the eventual exceptions it may have created."/>
<!--button name="%(account_invoices)d" string="Print Invoice" type="action" states="open,paid,proforma,sale,proforma2"/--> <!--button name="%(account_invoices)d" string="Print Invoice" type="action" states="open,paid,proforma,sale,proforma2"/-->
<div class="oe_right"> <div class="oe_right">
<field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,open,sent,paid" statusbar_colors='{"proforma":"blue","proforma2":"blue"}'/> <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,open,paid" statusbar_colors='{"proforma":"blue","proforma2":"blue"}'/>
</div> </div>
<div class="oe_clear"/> <div class="oe_clear"/>
</div> </div>

View File

@ -30,14 +30,6 @@ action_number()
invoice_validate()</field> invoice_validate()</field>
<field name="kind">function</field> <field name="kind">function</field>
</record> </record>
<record id="act_sent" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="name">sent</field>
<field name="action">write({'state':'sent', 'sent':True})</field>
<field name="kind">function</field>
</record>
<record model="workflow.activity" id="act_open_test"> <record model="workflow.activity" id="act_open_test">
<field name="wkf_id" ref="wkf"/> <field name="wkf_id" ref="wkf"/>
<field name="name">re-open</field> <field name="name">re-open</field>
@ -66,30 +58,13 @@ write({'state':'cancel'})</field>
<field name="act_to" ref="act_open"/> <field name="act_to" ref="act_open"/>
<field name="signal">invoice_open</field> <field name="signal">invoice_open</field>
</record> </record>
<record id="open_to_sent" model="workflow.transition">
<field name="act_from" ref="act_open"/>
<field name="act_to" ref="act_sent"/>
<field name="signal">invoice_sent</field>
</record>
<record id="open_to_paid" model="workflow.transition">
<field name="act_from" ref="act_open"/>
<field name="act_to" ref="act_paid"/>
<field name="trigger_model">account.move.line</field>
<field name="trigger_expr_id">move_line_id_payment_get()</field>
<field name="condition">test_paid()</field>
</record>
<record id="t8" model="workflow.transition"> <record id="t8" model="workflow.transition">
<field name="act_from" ref="act_sent"/> <field name="act_from" ref="act_open"/>
<field name="act_to" ref="act_paid"/> <field name="act_to" ref="act_paid"/>
<field name="trigger_model">account.move.line</field> <field name="trigger_model">account.move.line</field>
<field name="trigger_expr_id">move_line_id_payment_get()</field> <field name="trigger_expr_id">move_line_id_payment_get()</field>
<field name="condition">test_paid()</field> <field name="condition">test_paid()</field>
</record> </record>
<record id="sent_to_cancel" model="workflow.transition">
<field name="act_from" ref="act_sent"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">invoice_cancel</field>
</record>
<record id="t9" model="workflow.transition"> <record id="t9" model="workflow.transition">
<field name="act_from" ref="act_draft"/> <field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_cancel"/> <field name="act_to" ref="act_cancel"/>
@ -111,11 +86,6 @@ write({'state':'cancel'})</field>
<field name="signal">invoice_cancel</field> <field name="signal">invoice_cancel</field>
</record> </record>
<record id="open_test_to_sent" model="workflow.transition">
<field name="act_from" ref="act_open_test"/>
<field name="act_to" ref="act_sent"/>
<field name="signal">invoice_sent</field>
</record>
<record id="open_test_to_paid" model="workflow.transition"> <record id="open_test_to_paid" model="workflow.transition">
<field name="act_from" ref="act_open_test"/> <field name="act_from" ref="act_open_test"/>
<field name="act_to" ref="act_paid"/> <field name="act_to" ref="act_paid"/>

View File

@ -2,7 +2,6 @@
<openerp> <openerp>
<data> <data>
<!-- EDI Export + Send email Action --> <!-- EDI Export + Send email Action -->
<!--
<record id="ir_actions_server_edi_invoice" model="ir.actions.server"> <record id="ir_actions_server_edi_invoice" model="ir.actions.server">
<field name="code">if (object.type in ('out_invoice', 'out_refund')) and not object.partner_id.opt_out: object.edi_export_and_email(template_ext_id='account.email_template_edi_invoice', context=context)</field> <field name="code">if (object.type in ('out_invoice', 'out_refund')) and not object.partner_id.opt_out: object.edi_export_and_email(template_ext_id='account.email_template_edi_invoice', context=context)</field>
<field eval="6" name="sequence"/> <field eval="6" name="sequence"/>
@ -12,7 +11,6 @@
<field name="condition">True</field> <field name="condition">True</field>
<field name="name">Auto-email confirmed invoices</field> <field name="name">Auto-email confirmed invoices</field>
</record> </record>
-->
<!-- EDI related Email Templates menu --> <!-- EDI related Email Templates menu -->
<record model="ir.actions.act_window" id="action_email_templates"> <record model="ir.actions.act_window" id="action_email_templates">
@ -33,11 +31,9 @@
so users can freely customize/delete them --> so users can freely customize/delete them -->
<data noupdate="1"> <data noupdate="1">
<!-- bind the mailing server action to invoice open activity --> <!-- bind the mailing server action to invoice open activity -->
<!--
<record id="account.act_open" model="workflow.activity"> <record id="account.act_open" model="workflow.activity">
<field name="action_id" ref="ir_actions_server_edi_invoice"/> <field name="action_id" ref="ir_actions_server_edi_invoice"/>
</record> </record>
-->
<!--Email template --> <!--Email template -->
<record id="email_template_edi_invoice" model="email.template"> <record id="email_template_edi_invoice" model="email.template">

View File

@ -8,7 +8,7 @@
<field name="inherit_id" ref="account.invoice_form"/> <field name="inherit_id" ref="account.invoice_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<button name="invoice_open" position="after"> <button name="invoice_open" position="after">
<button name="invoice_pay_customer" type="object" string="Register Payment" states="open,sent" icon="gtk-go-forward"/> <button name="invoice_pay_customer" type="object" string="Register Payment" states="open" icon="gtk-go-forward"/>
</button> </button>
</field> </field>
</record> </record>

View File

@ -279,8 +279,12 @@ class purchase_order(osv.osv):
return {'value':{'pricelist_id': pricelist, 'fiscal_position': fiscal_position}} return {'value':{'pricelist_id': pricelist, 'fiscal_position': fiscal_position}}
def view_invoice(self, cr, uid, ids, context=None): def view_invoice(self, cr, uid, ids, context=None):
'''
This function returns an action that display existing invoices of given sale order ids. It can either be a in a list or in a form view, if there is only one invoice to show.
'''
mod_obj = self.pool.get('ir.model.data') mod_obj = self.pool.get('ir.model.data')
wizard_obj = self.pool.get('purchase.order.line_invoice') wizard_obj = self.pool.get('purchase.order.line_invoice')
#compute the number of invoices to display
inv_ids = [] inv_ids = []
for po in self.browse(cr, uid, ids, context=context): for po in self.browse(cr, uid, ids, context=context):
if po.invoice_method == 'manual': if po.invoice_method == 'manual':
@ -307,6 +311,9 @@ class purchase_order(osv.osv):
} }
def view_picking(self, cr, uid, ids, context=None): def view_picking(self, cr, uid, ids, context=None):
'''
This function returns an action that display existing pîcking orders of given purchase order ids.
'''
mod_obj = self.pool.get('ir.model.data') mod_obj = self.pool.get('ir.model.data')
pick_ids = [] pick_ids = []
for po in self.browse(cr, uid, ids, context=context): for po in self.browse(cr, uid, ids, context=context):
@ -333,6 +340,9 @@ class purchase_order(osv.osv):
return True return True
def wkf_send_rfq(self, cr, uid, ids, context=None): def wkf_send_rfq(self, cr, uid, ids, context=None):
'''
This function opens a window to compose an email, with the edi purchase template message loaded by default
'''
mod_obj = self.pool.get('ir.model.data') mod_obj = self.pool.get('ir.model.data')
template = mod_obj.get_object_reference(cr, uid, 'purchase', 'email_template_edi_purchase') template = mod_obj.get_object_reference(cr, uid, 'purchase', 'email_template_edi_purchase')
template_id = template and template[1] or False template_id = template and template[1] or False

View File

@ -469,6 +469,9 @@ class sale_order(osv.osv):
return inv_id return inv_id
def print_quotation(self, cr, uid, ids, context=None): def print_quotation(self, cr, uid, ids, context=None):
'''
This function prints the sale order and mark it as sent, so that we can see more easily the next step of the workflow
'''
assert len(ids) == 1, 'This option should only be used for a single id at a time' assert len(ids) == 1, 'This option should only be used for a single id at a time'
wf_service = netsvc.LocalService("workflow") wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'sale.order', ids[0], 'quotation_sent', cr) wf_service.trg_validate(uid, 'sale.order', ids[0], 'quotation_sent', cr)