openerp-community-reviewer team mailing list archive
-
openerp-community-reviewer team
-
Mailing list archive
-
Message #01751
[Merge] lp:~therp-nl/ocb-addons/7.0-fix_conflict_rev_9651 into lp:ocb-addons
Holger Brunn (Therp) has proposed merging lp:~therp-nl/ocb-addons/7.0-fix_conflict_rev_9651 into lp:ocb-addons.
Requested reviews:
OpenERP Community Backports Team (ocb)
For more details, see:
https://code.launchpad.net/~therp-nl/ocb-addons/7.0-fix_conflict_rev_9651/+merge/197171
This branch fixes conflicts with commit
http://bazaar.launchpad.net/~openerp/openobject-addons/7.0/revision/9651
The conflicts were introduced by
http://bazaar.launchpad.net/~ocb/ocb-addons/7.0/revision/9628
There's a runbot instance on
http://conflict-rev-9651-25732.runbot.openerp.com/?
What the code does now: I preserved Christophe Chauvet's code (the ocb part) for using reordering rules if applicable, but if not, I use Christophe Simonis' code (the upstream part) looking for warehouses in the location hierarchy.
This way, it seems we get the best of both proposals.
I'm btw just as unhappy as you about the signature of _get_warehouse, but I think we shouldn't change API signatures, even if newly introduced.
Please review fast as this conflict stalls the merge process for ocb-addons.
--
https://code.launchpad.net/~therp-nl/ocb-addons/7.0-fix_conflict_rev_9651/+merge/197171
Your team OpenERP Community Backports Team is requested to review the proposed merge of lp:~therp-nl/ocb-addons/7.0-fix_conflict_rev_9651 into lp:ocb-addons.
=== modified file 'procurement/schedulers.py'
--- procurement/schedulers.py 2013-11-12 13:06:12 +0000
+++ procurement/schedulers.py 2013-11-29 11:11:54 +0000
@@ -197,7 +197,6 @@
'company_id': orderpoint.company_id.id,
'product_uom': orderpoint.product_uom.id,
'location_id': orderpoint.location_id.id,
- 'warehouse_id': orderpoint.warehouse_id.id,
'procure_method': 'make_to_order',
'origin': orderpoint.name}
=== modified file 'purchase/purchase.py'
--- purchase/purchase.py 2013-11-27 08:46:25 +0000
+++ purchase/purchase.py 2013-11-29 11:11:54 +0000
@@ -1117,6 +1117,45 @@
seller_delay = int(procurement.product_id.seller_delay)
return schedule_date - relativedelta(days=seller_delay)
+ def _get_warehouse(self, procurement, user_company):
+ """
+ Return the warehouse containing the procurment stock location (or one of it ancestors)
+ If none match, returns then first warehouse of the company
+ """
+ # TODO refactor the domain once we implement the "parent_of" domain operator
+ # NOTE This method has been copied in the `purchase_requisition` module to ensure
+ # retro-compatibility. This code duplication will be deleted in next stable version.
+ # Do not forget to update both version in case of modification.
+ Orderpoint = self.pool['stock.warehouse.orderpoint']
+ ids = Orderpoint.search(
+ procurement._cr, procurement._uid,
+ [('procurement_id','=', procurement.id)],
+ context=procurement._context)
+ if ids:
+ return Orderpoint.browse(
+ procurement._cr, procurement._uid, ids[0],
+ context=procurement._context).warehouse_id.id
+
+ company_id = (procurement.company_id or user_company).id
+ domains = [
+ [
+ '&', ('company_id', '=', company_id),
+ '|', '&', ('lot_stock_id.parent_left', '<', procurement.location_id.parent_left),
+ ('lot_stock_id.parent_right', '>', procurement.location_id.parent_right),
+ ('lot_stock_id', '=', procurement.location_id.id)
+ ],
+ [('company_id', '=', company_id)]
+ ]
+
+ cr, uid = procurement._cr, procurement._uid
+ context = procurement._context
+ Warehouse = self.pool['stock.warehouse']
+ for domain in domains:
+ ids = Warehouse.search(cr, uid, domain, context=context)
+ if ids:
+ return ids[0]
+ return False
+
def make_po(self, cr, uid, ids, context=None):
""" Make purchase order from procurement
@return: New created Purchase Orders procurement wise
@@ -1131,8 +1170,6 @@
prod_obj = self.pool.get('product.product')
acc_pos_obj = self.pool.get('account.fiscal.position')
seq_obj = self.pool.get('ir.sequence')
- warehouse_obj = self.pool.get('stock.warehouse')
- orderpoint_obj = self.pool.get('stock.warehouse.orderpoint')
for procurement in self.browse(cr, uid, ids, context=context):
res_id = procurement.move_id.id
partner = procurement.product_id.seller_id # Taken Main Supplier of Product of Procurement.
@@ -1140,12 +1177,6 @@
partner_id = partner.id
address_id = partner_obj.address_get(cr, uid, [partner_id], ['delivery'])['delivery']
pricelist_id = partner.property_product_pricelist_purchase.id
- order_point_ids = orderpoint_obj.search(cr, uid, [('procurement_id','=', procurement.id)], context=context)
- if order_point_ids:
- warehouse_id = orderpoint_obj.browse(cr, uid, order_point_ids[0], context=context).warehouse_id.id
- else:
- warehouse_ids = warehouse_obj.search(cr, uid, [('lot_input_id', '=', procurement.location_id.id)], context=context)
- warehouse_id = warehouse_ids and warehouse_ids[0] or False
uom_id = procurement.product_id.uom_po_id.id
qty = uom_obj._compute_qty(cr, uid, procurement.product_uom.id, procurement.product_qty, uom_id)
@@ -1184,7 +1215,7 @@
'origin': procurement.origin,
'partner_id': partner_id,
'location_id': procurement.location_id.id,
- 'warehouse_id': warehouse_id,
+ 'warehouse_id': self._get_warehouse(procurement, company),
'pricelist_id': pricelist_id,
'date_order': purchase_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT),
'company_id': procurement.company_id.id,
=== modified file 'purchase_requisition/purchase_requisition.py'
--- purchase_requisition/purchase_requisition.py 2013-09-05 10:09:56 +0000
+++ purchase_requisition/purchase_requisition.py 2013-11-29 11:11:54 +0000
@@ -262,40 +262,79 @@
product_product()
class procurement_order(osv.osv):
-
_inherit = 'procurement.order'
_columns = {
- 'requisition_id' : fields.many2one('purchase.requisition','Latest Requisition')
+ 'requisition_id': fields.many2one('purchase.requisition', 'Latest Requisition')
}
+
+ def _get_warehouse(self, procurement, user_company):
+ """
+ Return the warehouse containing the procurment stock location (or one of it ancestors)
+ If none match, returns then first warehouse of the company
+ """
+ # NOTE This method is a copy of the one on the procurement.order defined in purchase
+ # module. It's been copied to ensure it been always available, even if module
+ # purchase is not up to date.
+ # Do not forget to update both version in case of modification.
+ Orderpoint = self.pool['stock.warehouse.orderpoint']
+ ids = Orderpoint.search(
+ procurement._cr, procurement._uid,
+ [('procurement_id','=', procurement.id)],
+ context=procurement._context)
+ if ids:
+ return Orderpoint.browse(
+ procurement._cr, procurement._uid, ids[0],
+ context=procurement._context).warehouse_id.id
+
+ company_id = (procurement.company_id or user_company).id
+ domains = [
+ [
+ '&', ('company_id', '=', company_id),
+ '|', '&', ('lot_stock_id.parent_left', '<', procurement.location_id.parent_left),
+ ('lot_stock_id.parent_right', '>', procurement.location_id.parent_right),
+ ('lot_stock_id', '=', procurement.location_id.id)
+ ],
+ [('company_id', '=', company_id)]
+ ]
+
+ cr, uid = procurement._cr, procurement._uid
+ context = procurement._context
+ Warehouse = self.pool['stock.warehouse']
+ for domain in domains:
+ ids = Warehouse.search(cr, uid, domain, context=context)
+ if ids:
+ return ids[0]
+ return False
+
def make_po(self, cr, uid, ids, context=None):
res = {}
requisition_obj = self.pool.get('purchase.requisition')
- warehouse_obj = self.pool.get('stock.warehouse')
- orderpoint_obj = self.pool.get('stock.warehouse.orderpoint')
- procurement = self.browse(cr, uid, ids, context=context)[0]
- if procurement.product_id.purchase_requisition:
- order_point_ids = orderpoint_obj.search(cr, uid, [('procurement_id','=', procurement.id)], context=context)
- if order_point_ids:
- warehouse_id = orderpoint_obj.browse(cr, uid, order_point_ids[0], context=context).warehouse_id.id
- else:
- warehouse_ids = warehouse_obj.search(cr, uid, [('lot_input_id', '=', procurement.location_id.id)], context=context)
- warehouse_id = warehouse_ids and warehouse_ids[0] or False
- res[procurement.id] = requisition_obj.create(cr, uid,
- {
+ non_requisition = []
+ for procurement in self.browse(cr, uid, ids, context=context):
+ if procurement.product_id.purchase_requisition:
+ user_company = self.pool['res.users'].browse(cr, uid, uid, context=context).company_id
+ req = res[procurement.id] = requisition_obj.create(cr, uid, {
'origin': procurement.origin,
'date_end': procurement.date_planned,
- 'warehouse_id': warehouse_id,
- 'company_id':procurement.company_id.id,
- 'line_ids': [(0,0,{
+ 'warehouse_id': self._get_warehouse(procurement, user_company),
+ 'company_id': procurement.company_id.id,
+ 'line_ids': [(0, 0, {
'product_id': procurement.product_id.id,
'product_uom_id': procurement.product_uom.id,
'product_qty': procurement.product_qty
-
- })],
- })
- self.write(cr,uid,[procurement.id],{'state': 'running','requisition_id': res[procurement.id]},context=context)
- return {}
- return super(procurement_order, self).make_po(cr, uid, ids, context=context)
+ })],
+ })
+ procurement.write({
+ 'state': 'running',
+ 'requisition_id': req
+ })
+ else:
+ non_requisition.append(procurement.id)
+
+ if non_requisition:
+ res.update(super(procurement_order, self).make_po(cr, uid, non_requisition, context=context))
+
+ return res
procurement_order()
Follow ups