[FIX] Payments do not go into accounting when pos_order is invoiced
authorRaphael Collet <rco@openerp.com>
Fri, 16 Sep 2011 10:31:49 +0000 (12:31 +0200)
committerRaphael Collet <rco@openerp.com>
Fri, 16 Sep 2011 10:31:49 +0000 (12:31 +0200)
lp bug: https://launchpad.net/bugs/823568 fixed

bzr revid: rco@openerp.com-20110916103149-tvwbx52cuo4lbscw

addons/point_of_sale/pos.py
addons/point_of_sale/pos_workflow.xml
addons/point_of_sale/wizard/wizard_pos_payment.py

index 27f1cb7..9540898 100644 (file)
@@ -496,6 +496,24 @@ class pos_order(osv.osv):
                     })
         return clone_list
 
+    def invoice_action_done(self, cr, uid, ids, context = None):
+        "create invoice for a paid order"
+        for order in self.browse(cr, uid, ids, context):
+            if order.state == 'paid':
+                assert (not order.invoice_id), "Order already has an invoice"
+                inv_ids = self.action_invoice(cr, uid, ids, context)
+                amount = 0.0
+                assert order.payments, "Paid order with no payment"
+                for pay in order.payments:
+                    amount += pay.amount
+                inv_obj = self.pool.get('account.invoice')
+                inv = inv_obj.browse(cr, uid, inv_ids, context)[0]
+                inv_obj.pay_and_reconcile(cr, uid, inv_ids, amount,
+                    pay.journal_id.default_credit_account_id.id, inv.period_id.id,
+                    pay.journal_id.id, pay.journal_id.default_debit_account_id.id,
+                    inv.period_id.id, pay.journal_id.id, context, pay.name)
+        return True
+
     def action_invoice(self, cr, uid, ids, context={}):
         inv_ref = self.pool.get('account.invoice')
         inv_line_ref = self.pool.get('account.invoice.line')
index 9b43b1f..f02e108 100644 (file)
@@ -40,7 +40,7 @@
          <field name="wkf_id" ref="wkf_pos"/>
          <field name="name">invoiced</field>
          <field name="flow_stop">True</field>
-         <field name="action">action_invoice()</field>
+         <field name="action">invoice_action_done()</field>
          <field name="kind">function</field>
        </record>
 
index 9e23b7f..d4a6061 100644 (file)
@@ -169,11 +169,7 @@ def create_invoice(self, cr, uid, data, context):
     order_obj = pool.get('pos.order')
     order = order_obj.browse(cr, uid, data['id'], context)
     if not order.invoice_id:
-        inv_id = order_obj.action_invoice(cr, uid, [data['id']])
-        #raise wizard.except_wizard(_('Error !'), _('Please create an invoice for this sale.'))
-#    wf_service = netsvc.LocalService("workflow")
-#    for i in data['ids']:
-#        wf_service.trg_validate(uid, 'pos.order', i, 'invoice', cr)
+        order_obj.invoice_action_done(cr, uid, [data['id']])
     return {}