跳至內容
選單
此問題已被標幟
707 瀏覽次數

I want to create GRN/receive products based on expected arrival in the purchase order line on confirming the purchase order. For example: in the purchase order line, one product has an expected arrival of today's date and another product has an expected arrival of another date. On confirming the purchase order, 2 GRNs should be created. If both products have the same expected arrival dates then only grn should be created. 

def button_confirm ( self ): 
if self .state != 'approved' :
raise UserError( 'Approved orders can be confirmed.' )

if self .partner_id.status == 'draft' :
raise UserError( 'Purchase order cannot be confirmed, customer is in draft state.' )

elif self .partner_id.status == 'blocked' :
raise UserError( 'Purchase order cannot be confirmed. customer is blocked.' )

elif self .partner_id.status == 'risk' :
raise UserError ( 'Purchase order cannot be confirmed. customer is at risk.' )

else :
for order in self :
if order.state not in [ 'custom_draft' , 'draft' , 'sent' , 'review' , 'onhold' , ' approved' ]:
continue
for line in order.order_line:
expected_arrival_date = line.date_planned
delivery = line.picking_type_id
same_date_lines = order.order_line.filtered( lambda l: l.date_planned == expected_arrival_date)
same_delivery = order.order_line.filtered( lambda l : l.picking_type_id == delivery)
picking_type_id = self .env[ 'stock.picking.type' ].search([( 'code' , '=' , 'incoming' )], limit = 1 )

if len (same_date_lines) > 1 :
order.order_line._validate_analytic_distribution()
order._add_supplier_to_product()
# Deal with double validation process
if order._approval_allowed():
order.button_approve()
else :
order.write({ 'state' : 'to approve' })
if order.partner_id not in order.message_partner_ids:
order.message_subscribe([order.partner_id.id])
else:
stock_picking = self .env[ 'stock.picking' ].create({
'partner_id' : order.partner_id.id,
'scheduled_date' : line.date_planned,
'date_deadline' : line.date_planned,
'location_id' : line.product_id .property_stock_inventory.id,
'location_dest_id' : line.product_id.property_stock_inventory.id,
'picking_type_id' : picking_type_id.id,
'transporter' : order.transporter,
'origin' : order.name,
'move_ids' : [( 0 , 0 , {
'product_id' : line.product_id.id,
'product_size' : line.product_size,
'quantity' : line.product_qty,
'location_id' : line.product_id.property_stock_inventory.id,
'location_dest_id' : line.product_id.property_stock_inventory. id,
'name' : line.name,
'product_uom_qty' : 1
})]
})
print (stock_picking)

vendor_ids = self .mapped( 'partner_id' ).ids
if vendor_ids:
vendors = self .env[ 'res.partner' ].browse(vendor_ids)
vendors.write({ 'status' : 'active' })
return True

this is my method but it is not creating grns properly. It is creating GRN on the backend but not showing in the purchase order. For one purchase order line, it is also doing the same. If I create multiple purchase order lines with the same dates then it shows the GRN on the purchase order. 
Please help me out with this. 

頭像
捨棄