diff --git a/addons/mrp/procurement.py b/addons/mrp/procurement.py index b667f2e075f..76c9f229fdc 100644 --- a/addons/mrp/procurement.py +++ b/addons/mrp/procurement.py @@ -92,10 +92,10 @@ class procurement_order(osv.osv): def get_phantom_bom_id(self, cr, uid, ids, context=None): for procurement in self.browse(cr, uid, ids, context=context): - if procurement.move_id and procurement.move_id.product_id.supply_method=='produce' \ - and procurement.move_id.product_id.procure_method=='make_to_order': + if procurement.move_dest_id and procurement.move_dest_id.product_id.supply_method=='produce' \ + and procurement.move_dest_id.product_id.procure_method=='make_to_order': 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), ('type', '=', 'phantom')]) return phantom_bom_id @@ -120,7 +120,7 @@ class procurement_order(osv.osv): move_obj = self.pool.get('stock.move') procurement_obj = self.pool.get('procurement.order') 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 = newdate - relativedelta(days=company.manufacturing_lead) produce_id = production_obj.create(cr, uid, { diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py index 62823369add..69e2b1cbf23 100644 --- a/addons/procurement/procurement.py +++ b/addons/procurement/procurement.py @@ -125,7 +125,7 @@ class procurement_order(osv.osv): ('running', 'Running'), ('done', 'Done') ], '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 = { diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 31522c26dd9..a80b84bddbc 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -1218,63 +1218,65 @@ class procurement_order(osv.osv): acc_pos_obj = self.pool.get('account.fiscal.position') seq_obj = self.pool.get('ir.sequence') warehouse_obj = self.pool.get('stock.warehouse') + pass_ids = [] 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. - assert partner, ('There is no supplier associated to product %s', (procurements.product_id.name)) - seller_qty = procurement.product_id.seller_qty - partner_id = partner.id - address_id = partner_obj.address_get(cr, uid, [partner_id], ['delivery'])['delivery'] - 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 + if not partner: + procurement.write({'message': _('There is no supplier associated to product %s') % (procurement.product_id.name)}) + else: + seller_qty = procurement.product_id.seller_qty + partner_id = partner.id + address_id = partner_obj.address_get(cr, uid, [partner_id], ['delivery'])['delivery'] + 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) - 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] - 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) - purchase_date = self._get_purchase_order_date(cr, uid, procurement, company, schedule_date, context=context) - - #Passing partner_id to context for purchase order line integrity of Line name - new_context = context.copy() - new_context.update({'lang': partner.lang, 'partner_id': partner_id}) - - product = prod_obj.browse(cr, uid, procurement.product_id.id, context=new_context) - taxes_ids = procurement.product_id.supplier_taxes_id - taxes = acc_pos_obj.map_tax(cr, uid, partner.property_account_position, taxes_ids) - - name = product.partner_ref - if product.description_purchase: - name += '\n'+ product.description_purchase - line_vals = { - 'name': name, - 'product_qty': qty, - 'product_id': procurement.product_id.id, - 'product_uom': uom_id, - 'price_unit': price or 0.0, - 'date_planned': schedule_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT), - 'move_dest_id': res_id, - 'taxes_id': [(6,0,taxes)], - } - name = seq_obj.get(cr, uid, 'purchase.order') or _('PO: %s') % procurement.name - po_vals = { - 'name': name, - 'origin': procurement.origin, - 'partner_id': partner_id, - 'location_id': procurement.location_id.id, - 'warehouse_id': warehouse_id and warehouse_id[0] or False, - 'pricelist_id': pricelist_id, - 'date_order': purchase_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT), - 'company_id': procurement.company_id.id, - 'fiscal_position': partner.property_account_position and partner.property_account_position.id or False, - 'payment_term_id': partner.property_supplier_payment_term.id or False, - } - 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) + #Passing partner_id to context for purchase order line integrity of Line name + new_context = context.copy() + new_context.update({'lang': partner.lang, 'partner_id': partner_id}) + product = prod_obj.browse(cr, uid, procurement.product_id.id, context=new_context) + taxes_ids = procurement.product_id.supplier_taxes_id + taxes = acc_pos_obj.map_tax(cr, uid, partner.property_account_position, taxes_ids) + name = product.partner_ref + if product.description_purchase: + name += '\n'+ product.description_purchase + line_vals = { + 'name': name, + 'product_qty': qty, + 'product_id': procurement.product_id.id, + 'product_uom': uom_id, + 'price_unit': price or 0.0, + 'date_planned': schedule_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT), + 'move_dest_id': res_id, + 'taxes_id': [(6,0,taxes)], + } + name = seq_obj.get(cr, uid, 'purchase.order') or _('PO: %s') % procurement.name + po_vals = { + 'name': name, + 'origin': procurement.origin, + 'partner_id': partner_id, + 'location_id': procurement.location_id.id, + 'warehouse_id': warehouse_id and warehouse_id[0] or False, + 'pricelist_id': pricelist_id, + 'date_order': purchase_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT), + 'company_id': procurement.company_id.id, + 'fiscal_position': partner.property_account_position and partner.property_account_position.id or False, + 'payment_term_id': partner.property_supplier_payment_term.id or False, + } + 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]}) + pass_ids += [procurement.id] + if pass_ids: + self.message_post(cr, uid, pass_ids, body=_("Draft Purchase Order created"), context=context) return res def _product_virtual_get(self, cr, uid, order_point): diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py index 7f23e1b548e..85fda69a65e 100644 --- a/addons/purchase_requisition/purchase_requisition.py +++ b/addons/purchase_requisition/purchase_requisition.py @@ -391,7 +391,7 @@ class procurement_order(osv.osv): 'date_end': procurement.date_planned, 'warehouse_id': warehouse_id and warehouse_id[0] or False, '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, { 'product_id': procurement.product_id.id, 'product_uom_id': procurement.product_uom.id, diff --git a/addons/stock/procurement.py b/addons/stock/procurement.py index 71864afab13..7f36871b9d1 100644 --- a/addons/stock/procurement.py +++ b/addons/stock/procurement.py @@ -107,7 +107,6 @@ class procurement_order(osv.osv): return False else: return True - return procurement.move_id.state == 'done' return super(procurement_order, self)._check(cr, uid, procurement, context)