[action_invoice] corrige l'ordre de création des account.invoice.line pour bien avoir...
authorJulien Moutinho <julm+burette@autogeree.net>
Mon, 4 Feb 2013 23:49:13 +0000 (00:49 +0100)
committerJulien Moutinho <julm+burette@autogeree.net>
Tue, 5 Feb 2013 00:59:11 +0000 (01:59 +0100)
.gitignore
pos_membership.py

index 0d20b64..cc66745 100644 (file)
@@ -1 +1,2 @@
 *.pyc
+*.mo
index d705c86..b347b70 100644 (file)
@@ -31,19 +31,95 @@ class pos_order(osv.osv):
         if not context is None:
             context = {}
         order_line_obj = self.pool.get('pos.order.line')
-        #order_obj = self.pool.get('pos.order')
         data_order_line = order_line_obj.browse(cr, uid, ids, context=context)
         for data in data_order_line:
-            print("INFO: pos_membership - Line:" + data.id),
-            print("Product: " + data.product_id)
+            print("DEV: [pos_membership] [_check_membership_product] [order_line]: data=%s product=%s" % (str(data.id), str(data.product_id))),
         return True
 
     _constraints = [
         (_check_membership_product, 'Error: Invalid Message', ['field_name']),
     ]
 
-pos_order()
+    # XXX: copied from openerp/addons/point_of_sale/point_of_sale.py
+    def action_invoice(self, cr, uid, ids, context=None):
+        print ("DEV: [pos_membership] [pos_order] [action_invoice]");
+        wf_service = netsvc.LocalService("workflow")
+        inv_ref = self.pool.get('account.invoice')
+        inv_line_ref = self.pool.get('account.invoice.line')
+        product_obj = self.pool.get('product.product')
+        inv_ids = []
+
+        for order in self.pool.get('pos.order').browse(cr, uid, ids, context=context):
+            if order.invoice_id:
+                inv_ids.append(order.invoice_id.id)
+                continue
+
+            if not order.partner_id:
+                raise osv.except_osv(_('Error!'), _('Please provide a partner for the sale.'))
+
+            acc = order.partner_id.property_account_receivable.id
+            # XXX: copied from openerp/addons/point_of_sale/point_of_sale.py to fix account.invoice.line creation
+            inv = {
+                'name': order.name,
+                'origin': order.name,
+                'account_id': acc,
+                'journal_id': order.sale_journal.id or None,
+                'type': 'out_invoice',
+                'reference': order.name,
+                'partner_id': order.partner_id.id,
+                'comment': order.note or '',
+                'currency_id': order.pricelist_id.currency_id.id, # considering partner's sale pricelist's currency
+                'invoice_line': []
+            }
+            inv.update(inv_ref.onchange_partner_id(cr, uid, [], 'out_invoice', order.partner_id.id)['value'])
+            if not inv.get('account_id', None):
+                inv['account_id'] = acc
+            for line in order.lines:
+                inv_line = {
+                    #'invoice_id': inv_id,
+                    'product_id': line.product_id.id,
+                    'quantity': line.qty,
+                }
+                inv_name = product_obj.name_get(cr, uid, [line.product_id.id], context=context)[0][1]
+                inv_line.update(inv_line_ref.product_id_change(cr, uid, [],
+                                                               line.product_id.id,
+                                                               line.product_id.uom_id.id,
+                                                               line.qty, partner_id = order.partner_id.id,
+                                                               fposition_id=order.partner_id.property_account_position.id)['value'])
+                if line.product_id.description_sale:
+                    inv_line['note'] = line.product_id.description_sale
+                inv_line['price_unit'] = line.price_unit
+                inv_line['discount'] = line.discount
+                inv_line['name'] = inv_name
+                inv_line['invoice_line_tax_id'] = ('invoice_line_tax_id' in inv_line)\
+                    and [(6, 0, inv_line['invoice_line_tax_id'])] or []
+                #inv_line_ref.create(cr, uid, inv_line, context=context)
+                inv['invoice_line'].append((0, 0, inv_line))
+            inv_id = inv_ref.create(cr, uid, inv, context=context)
 
+            self.write(cr, uid, [order.id], {'invoice_id': inv_id, 'state': 'invoiced'}, context=context)
+            inv_ids.append(inv_id)
+            inv_ref.button_reset_taxes(cr, uid, [inv_id], context=context)
+            wf_service.trg_validate(uid, 'pos.order', order.id, 'invoice', cr)
 
+        if not inv_ids: return {}
+
+        mod_obj = self.pool.get('ir.model.data')
+        res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form')
+        res_id = res and res[1] or False
+        return {
+            'name': _('Customer Invoice'),
+            'view_type': 'form',
+            'view_mode': 'form',
+            'view_id': [res_id],
+            'res_model': 'account.invoice',
+            'context': "{'type':'out_invoice'}",
+            'type': 'ir.actions.act_window',
+            'nodestroy': True,
+            'target': 'current',
+            'res_id': inv_ids and inv_ids[0] or False,
+        }
+
+pos_order()
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: