[IMP] Run schedulers and minimum stock rules done by company + purchase order should change date when adding (to) lines
This commit is contained in:
parent
c1cab32402
commit
f30cf0cf1b
|
@ -267,7 +267,7 @@ class procurement_order(osv.osv):
|
|||
#
|
||||
# Scheduler
|
||||
#
|
||||
def run_scheduler(self, cr, uid, use_new_cursor=False, context=None):
|
||||
def run_scheduler(self, cr, uid, use_new_cursor=False, company_id = False, context=None):
|
||||
'''
|
||||
Call the scheduler to check the procurement order. This is intented to be done for all existing companies at
|
||||
the same time, so we're running all the methods as SUPERUSER to avoid intercompany and access rights issues.
|
||||
|
@ -288,8 +288,11 @@ class procurement_order(osv.osv):
|
|||
cr = openerp.registry(cr.dbname).cursor()
|
||||
|
||||
# Run confirmed procurements
|
||||
dom = [('state', '=', 'confirmed')]
|
||||
if company_id:
|
||||
dom += [('company_id', '=', company_id)]
|
||||
while True:
|
||||
ids = self.search(cr, SUPERUSER_ID, [('state', '=', 'confirmed')], context=context)
|
||||
ids = self.search(cr, SUPERUSER_ID, dom, context=context)
|
||||
if not ids:
|
||||
break
|
||||
self.run(cr, SUPERUSER_ID, ids, context=context)
|
||||
|
@ -298,8 +301,11 @@ class procurement_order(osv.osv):
|
|||
|
||||
# Check if running procurements are done
|
||||
offset = 0
|
||||
dom = [('state', '=', 'running')]
|
||||
if company_id:
|
||||
dom += [('company_id', '=', company_id)]
|
||||
while True:
|
||||
ids = self.search(cr, SUPERUSER_ID, [('state', '=', 'running')], offset=offset, context=context)
|
||||
ids = self.search(cr, SUPERUSER_ID, dom, offset=offset, context=context)
|
||||
if not ids:
|
||||
break
|
||||
done = self.check(cr, SUPERUSER_ID, ids, context=context)
|
||||
|
|
|
@ -37,8 +37,12 @@ class procurement_compute_all(osv.osv_memory):
|
|||
"""
|
||||
proc_obj = self.pool.get('procurement.order')
|
||||
#As this function is in a new thread, i need to open a new cursor, because the old one may be closed
|
||||
|
||||
new_cr = self.pool.cursor()
|
||||
proc_obj.run_scheduler(new_cr, uid, use_new_cursor=new_cr.dbname, context=context)
|
||||
user = self.pool.get('res.users').browse(new_cr, uid, uid, context=context)
|
||||
comps = [x.id for x in user.company_ids]
|
||||
for comp in comps:
|
||||
proc_obj.run_scheduler(new_cr, uid, use_new_cursor=new_cr.dbname, company_id = comp, context=context)
|
||||
#close the new cursor
|
||||
new_cr.close()
|
||||
return {}
|
||||
|
|
|
@ -1299,6 +1299,7 @@ class procurement_order(osv.osv):
|
|||
res[procurement.id] = False
|
||||
else:
|
||||
schedule_date = self._get_purchase_schedule_date(cr, uid, procurement, company, context=context)
|
||||
purchase_date = self._get_purchase_order_date(cr, uid, procurement, company, schedule_date, context=context)
|
||||
line_vals = self._get_po_line_values_from_proc(cr, uid, procurement, partner, company, schedule_date, context=context)
|
||||
#look for any other draft PO for the same supplier, to attach the new line on instead of creating a new draft one
|
||||
available_draft_po_ids = po_obj.search(cr, uid, [
|
||||
|
@ -1306,6 +1307,9 @@ class procurement_order(osv.osv):
|
|||
('location_id', '=', procurement.location_id.id), ('company_id', '=', procurement.company_id.id), ('dest_address_id', '=', procurement.partner_dest_id.id)], context=context)
|
||||
if available_draft_po_ids:
|
||||
po_id = available_draft_po_ids[0]
|
||||
po_rec = po_obj.browse(cr, uid, po_id, context=context)
|
||||
if datetime.strptime(po_rec.date_order, DEFAULT_SERVER_DATE_FORMAT) > purchase_date:
|
||||
po_obj.write(cr, uid, [po_id], {'date_order': purchase_date}, context=context)
|
||||
#look for any other PO line in the selected PO with same product and UoM to sum quantities instead of creating a new po line
|
||||
available_po_line_ids = po_line_obj.search(cr, uid, [('order_id', '=', po_id), ('product_id', '=', line_vals['product_id']), ('product_uom', '=', line_vals['product_uom'])], context=context)
|
||||
if available_po_line_ids:
|
||||
|
@ -1318,7 +1322,6 @@ class procurement_order(osv.osv):
|
|||
po_line_id = po_line_obj.create(cr, SUPERUSER_ID, line_vals, context=context)
|
||||
linked_po_ids.append(procurement.id)
|
||||
else:
|
||||
purchase_date = self._get_purchase_order_date(cr, uid, procurement, company, schedule_date, context=context)
|
||||
name = seq_obj.get(cr, uid, 'purchase.order') or _('PO: %s') % procurement.name
|
||||
po_vals = {
|
||||
'name': name,
|
||||
|
|
|
@ -261,7 +261,7 @@ class procurement_order(osv.osv):
|
|||
result['domain'] = "[('group_id','in',[" + ','.join(map(str, list(group_ids))) + "])]"
|
||||
return result
|
||||
|
||||
def run_scheduler(self, cr, uid, use_new_cursor=False, context=None):
|
||||
def run_scheduler(self, cr, uid, use_new_cursor=False, company_id=False, context=None):
|
||||
'''
|
||||
Call the scheduler in order to check the running procurements (super method), to check the minimum stock rules
|
||||
and the availability of moves. This function is intended to be run for all the companies at the same time, so
|
||||
|
@ -286,8 +286,7 @@ class procurement_order(osv.osv):
|
|||
move_obj = self.pool.get('stock.move')
|
||||
|
||||
#Minimum stock rules
|
||||
company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id
|
||||
self._procure_orderpoint_confirm(cr, SUPERUSER_ID, use_new_cursor=False, company_id=company.id, context=context)
|
||||
self._procure_orderpoint_confirm(cr, SUPERUSER_ID, use_new_cursor=False, company_id=company_id, context=context)
|
||||
|
||||
#Search all confirmed stock_moves and try to assign them
|
||||
confirmed_ids = move_obj.search(cr, uid, [('state', '=', 'confirmed')], limit=None, order='priority desc, date_expected asc', context=context)
|
||||
|
@ -331,7 +330,7 @@ class procurement_order(osv.osv):
|
|||
[order_point.product_id.id],
|
||||
context={'location': order_point.location_id.id})[order_point.product_id.id]['virtual_available']
|
||||
|
||||
def _procure_orderpoint_confirm(self, cr, uid, use_new_cursor=False, company_id=False, context=None):
|
||||
def _procure_orderpoint_confirm(self, cr, uid, use_new_cursor=False, company_id = False, context=None):
|
||||
'''
|
||||
Create procurement based on Orderpoint
|
||||
|
||||
|
@ -341,14 +340,18 @@ class procurement_order(osv.osv):
|
|||
if context is None:
|
||||
context = {}
|
||||
if use_new_cursor:
|
||||
cr = openerp.registry(cr.dbname).db.cursor()
|
||||
cr = openerp.registry(cr.dbname).cursor()
|
||||
orderpoint_obj = self.pool.get('stock.warehouse.orderpoint')
|
||||
|
||||
procurement_obj = self.pool.get('procurement.order')
|
||||
offset = 0
|
||||
ids = [1]
|
||||
if company_id:
|
||||
dom = [('company_id', '=', company_id)]
|
||||
else:
|
||||
dom = []
|
||||
while ids:
|
||||
ids = orderpoint_obj.search(cr, uid, [('company_id', '=', company_id)], offset=offset, limit=100)
|
||||
ids = orderpoint_obj.search(cr, uid, dom, offset=offset, limit=100)
|
||||
for op in orderpoint_obj.browse(cr, uid, ids, context=context):
|
||||
prods = self._product_virtual_get(cr, uid, op)
|
||||
if prods is None:
|
||||
|
|
|
@ -43,8 +43,10 @@ class procurement_compute(osv.osv_memory):
|
|||
proc_obj = self.pool.get('procurement.order')
|
||||
#As this function is in a new thread, I need to open a new cursor, because the old one may be closed
|
||||
new_cr = self.pool.cursor()
|
||||
for proc in self.browse(new_cr, uid, ids, context=context):
|
||||
proc_obj._procure_orderpoint_confirm(new_cr, uid, use_new_cursor=new_cr.dbname, context=context)
|
||||
user_obj = self.pool.get('res.users')
|
||||
user = user_obj.browse(new_cr, uid, uid, context=context)
|
||||
for comp in user.company_ids:
|
||||
proc_obj._procure_orderpoint_confirm(new_cr, uid, use_new_cursor=new_cr.dbname, company_id = comp.id, context=context)
|
||||
#close the new cursor
|
||||
new_cr.close()
|
||||
return {}
|
||||
|
|
Loading…
Reference in New Issue