merged
[odoo/odoo.git] / addons / sale / sale.py
index 0f13e80..56ce895 100644 (file)
@@ -379,7 +379,8 @@ class sale_order(osv.osv):
             'currency_id': order.pricelist_id.currency_id.id,
             'comment': order.note,
             'payment_term': pay_term,
-            'fiscal_position': order.partner_id.property_account_position.id
+            'fiscal_position': order.partner_id.property_account_position.id,
+            'date_invoice' : context.get('date_invoice',False)
         }
         inv_obj = self.pool.get('account.invoice')
         inv.update(self._inv_get(cr, uid, order))
@@ -390,12 +391,17 @@ class sale_order(osv.osv):
         inv_obj.button_compute(cr, uid, [inv_id])
         return inv_id
 
-    def action_invoice_create(self, cr, uid, ids, grouped=False, states=['confirmed', 'done', 'exception']):
+    def action_invoice_create(self, cr, uid, ids, grouped=False, states=['confirmed', 'done', 'exception'], date_inv = False):
         res = False
         invoices = {}
         invoice_ids = []
 
-        for o in self.browse(cr, uid, ids):
+        context = {}
+        # If date was specified, use it as date invoiced, usefull when invoices are generated this month and put the 
+        # last day of the last month as invoice date
+        if date_inv:
+            context['date_inv'] = date_inv
+        for o in self.browse(cr,uid,ids):
             lines = []
             for line in o.order_line:
                 if (line.state in states) and not line.invoiced:
@@ -412,15 +418,15 @@ class sale_order(osv.osv):
         picking_obj = self.pool.get('stock.picking')
         for val in invoices.values():
             if grouped:
-                res = self._make_invoice(cr, uid, val[0][0], reduce(lambda x, y: x + y, [l for o, l in val], []))
-                for o, l in val:
-                    self.write(cr, uid, [o.id], {'state': 'progress'})
-                    if o.order_policy == 'picking':
-                        picking_obj.write(cr, uid, map(lambda x: x.id, o.picking_ids), {'invoice_state': 'invoiced'})
+                res = self._make_invoice(cr, uid, val[0][0], reduce(lambda x,y: x + y, [l for o,l in val], []), context=context)
+                for o,l in val:
+                    self.write(cr, uid, [o.id], {'state' : 'progress'})
+                    if o.order_policy=='picking':
+                        picking_obj.write(cr,uid,map(lambda x:x.id,o.picking_ids),{'invoice_state':'invoiced'})
                     cr.execute('insert into sale_order_invoice_rel (order_id,invoice_id) values (%s,%s)', (o.id, res))
             else:
                 for order, il in val:
-                    res = self._make_invoice(cr, uid, order, il)
+                    res = self._make_invoice(cr, uid, order, il, context=context)
                     invoice_ids.append(res)
                     self.write(cr, uid, [order.id], {'state': 'progress'})
                     if order.order_policy == 'picking':
@@ -951,7 +957,7 @@ class sale_order_line(osv.osv):
             partner = partner_obj.browse(cr, uid, partner_id)
             result['tax_id'] = self.pool.get('account.fiscal.position').map_tax(cr, uid, fpos, product_obj.taxes_id)
         if not flag:
-            result['name'] = product_obj.partner_ref
+            result['name'] = self.pool.get('product.product').name_get(cr, uid, [product_obj.id])[0][1]
         domain = {}
         if (not uom) and (not uos):
             result['product_uom'] = product_obj.uom_id.id