From 48211d0c83f8775c4f53df1f1cd23e46c5b84403 Mon Sep 17 00:00:00 2001 From: "rpa (Open ERP)" Date: Fri, 7 Jan 2011 18:32:46 +0530 Subject: [PATCH] [MERGE]: Merge with lp:~openerp-commiter/openobject-addons/dev-addons2-rha1 bzr revid: rpa@tinyerp.com-20110107130246-ve4c015v6w3nr20d --- addons/purchase/purchase.py | 17 +++++++ addons/purchase/purchase_view.xml | 14 +++--- addons/stock/stock.py | 12 +++-- .../stock/wizard/stock_invoice_onshipping.py | 48 ++++++++++--------- .../wizard/stock_invoice_onshipping_view.xml | 2 +- addons/stock/wizard/stock_partial_picking.py | 46 +++++++++--------- 6 files changed, 83 insertions(+), 56 deletions(-) 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 @@