[MERGE] OPW 18001: do not lock-out user when payment.order is 'done', allow it to...
authorXavier ALT <xal@openerp.com>
Tue, 6 Mar 2012 14:00:39 +0000 (15:00 +0100)
committerXavier ALT <xal@openerp.com>
Tue, 6 Mar 2012 14:00:39 +0000 (15:00 +0100)
  - When 'Payment Order' is in 'done' state, the workflow is frozen and the
    user is unable to cancel it (required in case bank refuse the payment).
    This allow to cancel the payment order except when some lines are already
    imported in a bank statement (i.e payment done bank-side: modification
    forbidden).

bzr revid: xal@openerp.com-20120306140039-5r8l3xrzbaq70xev

addons/account_payment/account_payment.py
addons/account_payment/account_payment_view.xml
addons/account_payment/account_payment_workflow.xml

index 138be10..c97c754 100644 (file)
@@ -23,6 +23,7 @@ import time
 
 from osv import osv, fields
 import netsvc
+from tools.translate import _
 
 class payment_mode(osv.osv):
     _name= 'payment.mode'
@@ -108,6 +109,7 @@ class payment_order(osv.osv):
         self.write(cr, uid, ids, {'state': 'draft'})
         wf_service = netsvc.LocalService("workflow")
         for id in ids:
+            wf_service.trg_delete(uid, 'payment.order', id, cr)
             wf_service.trg_create(uid, 'payment.order', id, cr)
         return True
 
@@ -119,6 +121,17 @@ class payment_order(osv.osv):
                 reference = ir_seq_obj.get(cr, uid, 'payment.order')
                 self.write(cr, uid, order['id'], {'reference':reference})
         return True
+    
+    def action_cancel(self, cr, uid, ids, *args):
+        for order in self.browse(cr, uid, ids):
+            for line in order.line_ids:
+                if line.bank_statement_line_id:
+                    raise osv.except_osv(_('Warning !'),
+                        _("Payment order line '%s' is already imported in Bank statement '%s' (id: %s).") % (
+                            line.name, line.bank_statement_line_id.statement_id.name,
+                            line.bank_statement_line_id.statement_id.id))
+        self.write(cr, uid, ids, {'state': 'cancel'})
+        return True
 
     def set_done(self, cr, uid, ids, *args):
         wf_service = netsvc.LocalService("workflow")
index b829748..8eb7fa1 100644 (file)
                     <field name="date_done"/>
                     <field name="state" readonly="1" select="1"/>
                     <group col="4" colspan="2">
-                         <button name="cancel" states="draft,open" string="Cancel" icon="gtk-cancel"/>
+                         <button name="cancel" states="draft,open,done" string="Cancel" icon="gtk-cancel"/>
                          <button name="open" states="draft" string="Confirm Payments"  icon="gtk-apply"/>
                          <button name="set_done" states="open" string="Make Payments" type="object" icon="gtk-execute"/>
                          <button name="set_to_draft" states="cancel" string="Set to draft" type="object" icon="gtk-convert"/>
index 06ba7b8..0934b39 100644 (file)
@@ -26,12 +26,12 @@ write({'state':'open'})</field>
             <field name="wkf_id" ref="wkf_payment_order"/>
             <field name="action">write({'state':'done'})</field>
             <field name="kind">function</field>
-            <field name="flow_stop">True</field>
+            <field name="flow_stop" eval="False"/>
         </record>
         <record id="act_cancel" model="workflow.activity">
             <field name="name">cancel</field>
             <field name="wkf_id" ref="wkf_payment_order"/>
-            <field name="action">write({'state':'cancel'})</field>
+            <field name="action">action_cancel()</field>
             <field name="kind">function</field>
             <field name="flow_stop">True</field>
         </record>
@@ -58,6 +58,11 @@ write({'state':'open'})</field>
             <field name="act_to" ref="act_cancel"/>
             <field name="signal">cancel</field>
         </record>
+        <record id="trans_done_cancel" model="workflow.transition">
+            <field name="act_from" ref="act_done"/>
+            <field name="act_to" ref="act_cancel"/>
+            <field name="signal">cancel</field>
+        </record>
 
     </data>
 </openerp>