diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 0de19189fc3..d0d281c1392 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -455,6 +455,7 @@ class purchase_order(osv.osv):
'state': 'draft',
'purchase_line_id': order_line.id,
'company_id': order.company_id.id,
+ 'price_unit': order_line.price_unit
})
if order_line.move_dest_id:
self.pool.get('stock.move').write(cr, uid, [order_line.move_dest_id.id], {'location_id':order.location_id.id})
@@ -816,4 +817,20 @@ class procurement_order(osv.osv):
procurement_order()
+class stock_invoice_onshipping(osv.osv_memory):
+ _inherit = "stock.invoice.onshipping"
+
+ def create_invoice(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ purchase_obj = self.pool.get('purchase.order')
+ picking_obj = self.pool.get('stock.picking')
+ res = super(stock_invoice_onshipping,self).create_invoice(cr, uid, ids, context=context)
+ purchase_id = picking_obj.browse(cr, uid, res.keys()[0]).purchase_id.id
+ purchase_obj.write(cr, uid, [purchase_id], {
+ 'invoice_ids': [(4, res.values()[0])]}, context=context)
+ return res
+
+stock_invoice_onshipping()
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 359810fb306..0312e0d5968 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -15,7 +15,7 @@
-
+
@@ -32,7 +32,7 @@
-
+
@@ -40,7 +40,7 @@
-
+
@@ -113,10 +113,10 @@
-
+
-
+
@@ -292,7 +292,7 @@
You can create a request for quotation when you want to buy products to a supplier but the purchase is not confirmed yet. Use also this menu to review requests for quotation created automatically based on your logistic rules (minimum stock, MTO, etc). You can convert the request for quotation into a purchase order once the order is confirmed. If you use the extended interface (from user's preferences), you can select the way to control your supplier invoices: based on the order, based on the receptions or manual encoding.
-
@@ -458,7 +458,7 @@
Purchase Lines Not Invoiced
ir.actions.act_window
purchase.order.line
- [('state','in',('confirmed','done')), ('invoiced', '=', False)]
+ [('order_id.invoice_method','<>','picking'), ('state','in',('confirmed','done')), ('invoiced', '=', False)]
form
tree,form
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index 7503674f7fe..4dea848c190 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -1170,6 +1170,7 @@ class stock_picking(osv.osv):
complete, too_many, too_few = [], [], []
move_product_qty = {}
prodlot_ids = {}
+ product_avail = {}
for move in pick.move_lines:
if move.state in ('done', 'cancel'):
continue
@@ -1195,6 +1196,12 @@ class stock_picking(osv.osv):
move_currency_id = move.company_id.currency_id.id
context['currency_id'] = move_currency_id
qty = uom_obj._compute_qty(cr, uid, product_uom, product_qty, product.uom_id.id)
+
+ if product.id in product_avail:
+ product_avail[product.id] += qty
+ else:
+ product_avail[product.id] = product.qty_available
+
if qty > 0:
new_price = currency_obj.compute(cr, uid, product_currency,
move_currency_id, product_price)
@@ -1205,9 +1212,8 @@ class stock_picking(osv.osv):
else:
# Get the standard price
amount_unit = product.price_get('standard_price', context)[product.id]
- new_std_price = ((amount_unit * product.qty_available)\
- + (new_price * qty))/(product.qty_available + qty)
-
+ new_std_price = ((amount_unit * product_avail[product.id])\
+ + (new_price * qty))/(product_avail[product.id] + qty)
# Write the field according to price type field
product_obj.write(cr, uid, [product.id], {'standard_price': new_std_price})
diff --git a/addons/stock/wizard/stock_invoice_onshipping.py b/addons/stock/wizard/stock_invoice_onshipping.py
index 091049b5689..c7eab1eef4d 100644
--- a/addons/stock/wizard/stock_invoice_onshipping.py
+++ b/addons/stock/wizard/stock_invoice_onshipping.py
@@ -85,34 +85,18 @@ class stock_invoice_onshipping(osv.osv_memory):
raise osv.except_osv(_('Warning !'), _('None of these picking lists require invoicing.'))
return res
-
-
- def create_invoice(self, cr, uid, ids, context=None):
+ def open_invoice(self, cr, uid, ids, context=None):
if context is None:
context = {}
- picking_pool = self.pool.get('stock.picking')
- data_pool = self.pool.get('ir.model.data')
- onshipdata_obj = self.read(cr, uid, ids[0], ['journal_id', 'group', 'invoice_date'])
- if context.get('new_picking', False):
- onshipdata_obj['id'] = onshipdata_obj.new_picking
- onshipdata_obj[ids] = onshipdata_obj.new_picking
-
- context['date_inv'] = onshipdata_obj['invoice_date']
invoice_ids = []
- active_ids = context.get('active_ids', [])
- active_picking = picking_pool.browse(cr, uid, context.get('active_id',False), context=context)
- inv_type = picking_pool._get_invoice_type(active_picking)
-
- res = picking_pool.action_invoice_create(cr, uid, active_ids,
- journal_id = onshipdata_obj['journal_id'],
- group = onshipdata_obj['group'],
- type = None,
- context=context)
+ data_pool = self.pool.get('ir.model.data')
+ res = self.create_invoice(cr, uid, ids, context=context)
invoice_ids += res.values()
- if not invoice_ids:
- raise osv.except_osv(_('Error'), _('No Invoices were created'))
+ inv_type = context.get('inv_type', False)
action_model = False
action = {}
+ if not invoice_ids:
+ raise osv.except_osv(_('Error'), _('No Invoices were created'))
if inv_type == "out_invoice":
action_model,action_id = data_pool.get_object_reference(cr, uid, 'account', "action_invoice_tree1")
elif inv_type == "in_invoice":
@@ -127,6 +111,26 @@ class stock_invoice_onshipping(osv.osv_memory):
action['domain'] = "[('id','in', ["+','.join(map(str,invoice_ids))+"])]"
return action
+ def create_invoice(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ picking_pool = self.pool.get('stock.picking')
+ onshipdata_obj = self.read(cr, uid, ids, ['journal_id', 'group', 'invoice_date'])
+ if context.get('new_picking', False):
+ onshipdata_obj['id'] = onshipdata_obj.new_picking
+ onshipdata_obj[ids] = onshipdata_obj.new_picking
+ context['date_inv'] = onshipdata_obj[0]['invoice_date']
+ active_ids = context.get('active_ids', [])
+ active_picking = picking_pool.browse(cr, uid, context.get('active_id',False), context=context)
+ inv_type = picking_pool._get_invoice_type(active_picking)
+ context['inv_type'] = inv_type
+ res = picking_pool.action_invoice_create(cr, uid, active_ids,
+ journal_id = onshipdata_obj[0]['journal_id'],
+ group = onshipdata_obj[0]['group'],
+ type = None,
+ context=context)
+ return res
+
stock_invoice_onshipping()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock/wizard/stock_invoice_onshipping_view.xml b/addons/stock/wizard/stock_invoice_onshipping_view.xml
index 6a4cfec5fca..06d93f49ea1 100644
--- a/addons/stock/wizard/stock_invoice_onshipping_view.xml
+++ b/addons/stock/wizard/stock_invoice_onshipping_view.xml
@@ -15,7 +15,7 @@
-
+
diff --git a/addons/stock/wizard/stock_partial_picking.py b/addons/stock/wizard/stock_partial_picking.py
index b657e6639f5..76a77d80bf6 100644
--- a/addons/stock/wizard/stock_partial_picking.py
+++ b/addons/stock/wizard/stock_partial_picking.py
@@ -32,24 +32,24 @@ class stock_partial_picking(osv.osv_memory):
'product_moves_out' : fields.one2many('stock.move.memory.out', 'wizard_id', 'Moves'),
'product_moves_in' : fields.one2many('stock.move.memory.in', 'wizard_id', 'Moves'),
}
-
+
def __is_in(self,cr, uid, pick_ids):
"""
@return: True if one of the moves has as picking type 'in'
"""
if not pick_ids:
return False
-
+
pick_obj = self.pool.get('stock.picking')
pick_ids = pick_obj.search(cr, uid, [('id','in',pick_ids)])
-
-
+
+
for pick in pick_obj.browse(cr, uid, pick_ids):
for move in pick.move_lines:
if pick.type == 'in' and move.product_id.cost_method == 'average':
return True
return False
-
+
def __get_picking_type(self, cr, uid, pick_ids):
if self.__is_in(cr, uid, pick_ids):
return "product_moves_in"
@@ -62,11 +62,11 @@ class stock_partial_picking(osv.osv_memory):
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False,submenu=False):
result = super(stock_partial_picking, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar,submenu)
-
-
+
+
picking_ids = context.get('active_ids', False)
picking_type = self.__get_picking_type(cr, uid, picking_ids)
-
+
_moves_arch_lst = """