[IMP] Change move_id in move_dest_id where needed (thanks to branch of psi), give error message when making purchase order for product without supplier
bzr revid: jco@openerp.com-20130812123717-y6golm2oaxn6n9pm
This commit is contained in:
parent
d20cfc65bd
commit
2cda30253f
|
@ -92,10 +92,10 @@ class procurement_order(osv.osv):
|
||||||
|
|
||||||
def get_phantom_bom_id(self, cr, uid, ids, context=None):
|
def get_phantom_bom_id(self, cr, uid, ids, context=None):
|
||||||
for procurement in self.browse(cr, uid, ids, context=context):
|
for procurement in self.browse(cr, uid, ids, context=context):
|
||||||
if procurement.move_id and procurement.move_id.product_id.supply_method=='produce' \
|
if procurement.move_dest_id and procurement.move_dest_id.product_id.supply_method=='produce' \
|
||||||
and procurement.move_id.product_id.procure_method=='make_to_order':
|
and procurement.move_dest_id.product_id.procure_method=='make_to_order':
|
||||||
phantom_bom_id = self.pool.get('mrp.bom').search(cr, uid, [
|
phantom_bom_id = self.pool.get('mrp.bom').search(cr, uid, [
|
||||||
('product_id', '=', procurement.move_id.product_id.id),
|
('product_id', '=', procurement.move_dest_id.product_id.id),
|
||||||
('bom_id', '=', False),
|
('bom_id', '=', False),
|
||||||
('type', '=', 'phantom')])
|
('type', '=', 'phantom')])
|
||||||
return phantom_bom_id
|
return phantom_bom_id
|
||||||
|
@ -120,7 +120,7 @@ class procurement_order(osv.osv):
|
||||||
move_obj = self.pool.get('stock.move')
|
move_obj = self.pool.get('stock.move')
|
||||||
procurement_obj = self.pool.get('procurement.order')
|
procurement_obj = self.pool.get('procurement.order')
|
||||||
for procurement in procurement_obj.browse(cr, uid, ids, context=context):
|
for procurement in procurement_obj.browse(cr, uid, ids, context=context):
|
||||||
res_id = procurement.move_id.id
|
res_id = procurement.move_dest_id and procurement.move_dest_id.id or False
|
||||||
newdate = datetime.strptime(procurement.date_planned, '%Y-%m-%d %H:%M:%S') - relativedelta(days=procurement.product_id.produce_delay or 0.0)
|
newdate = datetime.strptime(procurement.date_planned, '%Y-%m-%d %H:%M:%S') - relativedelta(days=procurement.product_id.produce_delay or 0.0)
|
||||||
newdate = newdate - relativedelta(days=company.manufacturing_lead)
|
newdate = newdate - relativedelta(days=company.manufacturing_lead)
|
||||||
produce_id = production_obj.create(cr, uid, {
|
produce_id = production_obj.create(cr, uid, {
|
||||||
|
|
|
@ -125,7 +125,7 @@ class procurement_order(osv.osv):
|
||||||
('running', 'Running'),
|
('running', 'Running'),
|
||||||
('done', 'Done')
|
('done', 'Done')
|
||||||
], 'Status', required=True, track_visibility='onchange'),
|
], 'Status', required=True, track_visibility='onchange'),
|
||||||
'message': fields.text('Latest error', help="Exception occurred while computing procurement orders."),
|
'message': fields.text('Latest error', help="Exception occurred while computing procurement orders.", track_visibility='onchange'),
|
||||||
}
|
}
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
|
|
|
@ -1218,63 +1218,65 @@ class procurement_order(osv.osv):
|
||||||
acc_pos_obj = self.pool.get('account.fiscal.position')
|
acc_pos_obj = self.pool.get('account.fiscal.position')
|
||||||
seq_obj = self.pool.get('ir.sequence')
|
seq_obj = self.pool.get('ir.sequence')
|
||||||
warehouse_obj = self.pool.get('stock.warehouse')
|
warehouse_obj = self.pool.get('stock.warehouse')
|
||||||
|
pass_ids = []
|
||||||
for procurement in self.browse(cr, uid, ids, context=context):
|
for procurement in self.browse(cr, uid, ids, context=context):
|
||||||
res_id = procurement.move_id.id
|
res_id = procurement.move_dest_id and procurement.move_dest_id.id or False
|
||||||
partner = procurement.product_id.seller_id # Taken Main Supplier of Product of Procurement.
|
partner = procurement.product_id.seller_id # Taken Main Supplier of Product of Procurement.
|
||||||
assert partner, ('There is no supplier associated to product %s', (procurements.product_id.name))
|
if not partner:
|
||||||
seller_qty = procurement.product_id.seller_qty
|
procurement.write({'message': _('There is no supplier associated to product %s') % (procurement.product_id.name)})
|
||||||
partner_id = partner.id
|
else:
|
||||||
address_id = partner_obj.address_get(cr, uid, [partner_id], ['delivery'])['delivery']
|
seller_qty = procurement.product_id.seller_qty
|
||||||
pricelist_id = partner.property_product_pricelist_purchase.id
|
partner_id = partner.id
|
||||||
warehouse_id = warehouse_obj.search(cr, uid, [('company_id', '=', procurement.company_id.id or company.id)], context=context)
|
address_id = partner_obj.address_get(cr, uid, [partner_id], ['delivery'])['delivery']
|
||||||
uom_id = procurement.product_id.uom_po_id.id
|
pricelist_id = partner.property_product_pricelist_purchase.id
|
||||||
|
warehouse_id = warehouse_obj.search(cr, uid, [('company_id', '=', procurement.company_id.id or company.id)], context=context)
|
||||||
|
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)
|
||||||
|
if seller_qty:
|
||||||
|
qty = max(qty,seller_qty)
|
||||||
|
|
||||||
qty = uom_obj._compute_qty(cr, uid, procurement.product_uom.id, procurement.product_qty, uom_id)
|
price = pricelist_obj.price_get(cr, uid, [pricelist_id], procurement.product_id.id, qty, partner_id, {'uom': uom_id})[pricelist_id]
|
||||||
if seller_qty:
|
|
||||||
qty = max(qty,seller_qty)
|
|
||||||
|
|
||||||
price = pricelist_obj.price_get(cr, uid, [pricelist_id], procurement.product_id.id, qty, partner_id, {'uom': uom_id})[pricelist_id]
|
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)
|
||||||
|
|
||||||
schedule_date = self._get_purchase_schedule_date(cr, uid, procurement, company, context=context)
|
#Passing partner_id to context for purchase order line integrity of Line name
|
||||||
purchase_date = self._get_purchase_order_date(cr, uid, procurement, company, schedule_date, context=context)
|
new_context = context.copy()
|
||||||
|
new_context.update({'lang': partner.lang, 'partner_id': partner_id})
|
||||||
#Passing partner_id to context for purchase order line integrity of Line name
|
product = prod_obj.browse(cr, uid, procurement.product_id.id, context=new_context)
|
||||||
new_context = context.copy()
|
taxes_ids = procurement.product_id.supplier_taxes_id
|
||||||
new_context.update({'lang': partner.lang, 'partner_id': partner_id})
|
taxes = acc_pos_obj.map_tax(cr, uid, partner.property_account_position, taxes_ids)
|
||||||
|
name = product.partner_ref
|
||||||
product = prod_obj.browse(cr, uid, procurement.product_id.id, context=new_context)
|
if product.description_purchase:
|
||||||
taxes_ids = procurement.product_id.supplier_taxes_id
|
name += '\n'+ product.description_purchase
|
||||||
taxes = acc_pos_obj.map_tax(cr, uid, partner.property_account_position, taxes_ids)
|
line_vals = {
|
||||||
|
'name': name,
|
||||||
name = product.partner_ref
|
'product_qty': qty,
|
||||||
if product.description_purchase:
|
'product_id': procurement.product_id.id,
|
||||||
name += '\n'+ product.description_purchase
|
'product_uom': uom_id,
|
||||||
line_vals = {
|
'price_unit': price or 0.0,
|
||||||
'name': name,
|
'date_planned': schedule_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT),
|
||||||
'product_qty': qty,
|
'move_dest_id': res_id,
|
||||||
'product_id': procurement.product_id.id,
|
'taxes_id': [(6,0,taxes)],
|
||||||
'product_uom': uom_id,
|
}
|
||||||
'price_unit': price or 0.0,
|
name = seq_obj.get(cr, uid, 'purchase.order') or _('PO: %s') % procurement.name
|
||||||
'date_planned': schedule_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT),
|
po_vals = {
|
||||||
'move_dest_id': res_id,
|
'name': name,
|
||||||
'taxes_id': [(6,0,taxes)],
|
'origin': procurement.origin,
|
||||||
}
|
'partner_id': partner_id,
|
||||||
name = seq_obj.get(cr, uid, 'purchase.order') or _('PO: %s') % procurement.name
|
'location_id': procurement.location_id.id,
|
||||||
po_vals = {
|
'warehouse_id': warehouse_id and warehouse_id[0] or False,
|
||||||
'name': name,
|
'pricelist_id': pricelist_id,
|
||||||
'origin': procurement.origin,
|
'date_order': purchase_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT),
|
||||||
'partner_id': partner_id,
|
'company_id': procurement.company_id.id,
|
||||||
'location_id': procurement.location_id.id,
|
'fiscal_position': partner.property_account_position and partner.property_account_position.id or False,
|
||||||
'warehouse_id': warehouse_id and warehouse_id[0] or False,
|
'payment_term_id': partner.property_supplier_payment_term.id or False,
|
||||||
'pricelist_id': pricelist_id,
|
}
|
||||||
'date_order': purchase_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT),
|
res[procurement.id] = self.create_procurement_purchase_order(cr, uid, procurement, po_vals, line_vals, context=new_context)
|
||||||
'company_id': procurement.company_id.id,
|
self.write(cr, uid, [procurement.id], {'state': 'running', 'purchase_id': res[procurement.id]})
|
||||||
'fiscal_position': partner.property_account_position and partner.property_account_position.id or False,
|
pass_ids += [procurement.id]
|
||||||
'payment_term_id': partner.property_supplier_payment_term.id or False,
|
if pass_ids:
|
||||||
}
|
self.message_post(cr, uid, pass_ids, body=_("Draft Purchase Order created"), context=context)
|
||||||
res[procurement.id] = self.create_procurement_purchase_order(cr, uid, procurement, po_vals, line_vals, context=new_context)
|
|
||||||
self.write(cr, uid, [procurement.id], {'state': 'running', 'purchase_id': res[procurement.id]})
|
|
||||||
self.message_post(cr, uid, ids, body=_("Draft Purchase Order created"), context=context)
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def _product_virtual_get(self, cr, uid, order_point):
|
def _product_virtual_get(self, cr, uid, order_point):
|
||||||
|
|
|
@ -391,7 +391,7 @@ class procurement_order(osv.osv):
|
||||||
'date_end': procurement.date_planned,
|
'date_end': procurement.date_planned,
|
||||||
'warehouse_id': warehouse_id and warehouse_id[0] or False,
|
'warehouse_id': warehouse_id and warehouse_id[0] or False,
|
||||||
'company_id': procurement.company_id.id,
|
'company_id': procurement.company_id.id,
|
||||||
'move_dest_id': procurement.move_id.id,
|
'move_dest_id': procurement.move_dest_id and procurement.move_dest_id.id or False,
|
||||||
'line_ids': [(0, 0, {
|
'line_ids': [(0, 0, {
|
||||||
'product_id': procurement.product_id.id,
|
'product_id': procurement.product_id.id,
|
||||||
'product_uom_id': procurement.product_uom.id,
|
'product_uom_id': procurement.product_uom.id,
|
||||||
|
|
|
@ -107,7 +107,6 @@ class procurement_order(osv.osv):
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
return procurement.move_id.state == 'done'
|
|
||||||
return super(procurement_order, self)._check(cr, uid, procurement, context)
|
return super(procurement_order, self)._check(cr, uid, procurement, context)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue