IMP purchase request logic
This commit is contained in:
parent
a40d7597d8
commit
f353a47aca
|
|
@ -243,15 +243,15 @@ class PurchaseRequest(models.Model):
|
|||
if not self.department_id:
|
||||
raise ValidationError(_("Please Select department for employee"))
|
||||
storable_lines = self.line_ids.filtered(lambda l: l.product_id.type == 'product')
|
||||
asset_lines = self.line_ids.filtered(lambda l: l.product_id.asset_ok)
|
||||
consu_lines = self.line_ids.filtered(lambda l: l.product_id.type == 'consu')
|
||||
consu_non_asset_lines = self.line_ids.filtered(
|
||||
lambda l: l.product_id.type == 'consu' and not l.product_id.asset_ok)
|
||||
relevant_lines = storable_lines | asset_lines | consu_non_asset_lines
|
||||
has_available = any(l.available_qty > 0 for l in relevant_lines)
|
||||
has_insufficient_qty = any(l.qty > l.available_qty for l in relevant_lines)
|
||||
|
||||
if storable_lines or consu_lines:
|
||||
relevant_lines = self.line_ids.filtered(
|
||||
lambda l: l.product_id.type == 'product' or
|
||||
l.product_id.asset_ok or
|
||||
(l.product_id.type == 'consu' and not l.product_id.asset_ok)
|
||||
)
|
||||
has_available = any(l.available_qty > 0 for l in relevant_lines)
|
||||
has_insufficient_qty = any(l.qty > l.available_qty for l in relevant_lines)
|
||||
if self.has_asset_product_line:
|
||||
self.create_asset_custody_lines()
|
||||
return self._open_picking_wizard(has_available if has_insufficient_qty else False)
|
||||
|
|
|
|||
|
|
@ -31,16 +31,16 @@ class PurcahseRefues(models.TransientModel):
|
|||
|
||||
move_vals = []
|
||||
|
||||
for line in self.request_line_ids.filtered(lambda line: line.product_id.type in ['product']):
|
||||
if not line.product_id.asset_ok:
|
||||
if min(line.qty, line.available_qty):
|
||||
move_vals.append((0, 0, {
|
||||
"product_id": line.product_id.id,
|
||||
"name": line.product_id.name,
|
||||
"product_uom": line.product_id.uom_id.id,
|
||||
'product_uom_qty': min(line.qty, line.available_qty),
|
||||
}))
|
||||
line.qty_purchased = 0
|
||||
for line in self.request_line_ids.filtered(
|
||||
lambda l: l.product_id.type == 'product' and not l.product_id.asset_ok):
|
||||
if min(line.qty, line.available_qty):
|
||||
move_vals.append((0, 0, {
|
||||
"product_id": line.product_id.id,
|
||||
"name": line.product_id.name,
|
||||
"product_uom": line.product_id.uom_id.id,
|
||||
'product_uom_qty': min(line.qty, line.available_qty),
|
||||
}))
|
||||
line.qty_purchased = 0
|
||||
picking_vals.update({'move_lines': move_vals})
|
||||
picking_id = self.env['stock.picking'].create(picking_vals)
|
||||
self.request_id.picking_id = picking_id.id
|
||||
|
|
@ -78,19 +78,18 @@ class PurcahseRefues(models.TransientModel):
|
|||
}
|
||||
|
||||
move_vals = []
|
||||
filtered_lines = self.request_line_ids.filtered(lambda line: line.product_id.type in ['product', 'consu'])
|
||||
for line in filtered_lines:
|
||||
if not line.product_id.asset_ok:
|
||||
move_vals.append((0, 0, {
|
||||
"product_id": line.product_id.id,
|
||||
"name": line.product_id.name,
|
||||
"product_uom": line.product_id.uom_id.id,
|
||||
'product_uom_qty': line.qty,
|
||||
}))
|
||||
if line.qty < line.available_qty:
|
||||
line.qty_purchased = 0
|
||||
else:
|
||||
line.qty_purchased = line.qty - line.available_qty
|
||||
for line in self.request_line_ids.filtered(
|
||||
lambda l: (l.product_id.type in ('product', 'consu')) and not l.product_id.asset_ok):
|
||||
move_vals.append((0, 0, {
|
||||
"product_id": line.product_id.id,
|
||||
"name": line.product_id.name,
|
||||
"product_uom": line.product_id.uom_id.id,
|
||||
'product_uom_qty': line.qty,
|
||||
}))
|
||||
if line.qty < line.available_qty:
|
||||
line.qty_purchased = 0
|
||||
else:
|
||||
line.qty_purchased = line.qty - line.available_qty
|
||||
picking_vals.update({'move_lines': move_vals})
|
||||
picking_id = self.env['stock.picking'].create(picking_vals)
|
||||
self.request_id.picking_id = picking_id.id
|
||||
|
|
@ -116,30 +115,28 @@ class PurcahseRefues(models.TransientModel):
|
|||
}
|
||||
move_vals = []
|
||||
|
||||
for line in self.request_line_ids.filtered(lambda line: line.product_id.type in ['product', 'consu']):
|
||||
if not line.product_id.asset_ok:
|
||||
move_vals.append((0, 0, {
|
||||
"product_id": line.product_id.id,
|
||||
"name": line.product_id.name,
|
||||
"product_uom": line.product_id.uom_id.id,
|
||||
'product_uom_qty': line.qty,
|
||||
}))
|
||||
for line in self.request_line_ids.filtered(
|
||||
lambda l: (l.product_id.type in ('product', 'consu')) and not l.product_id.asset_ok):
|
||||
move_vals.append((0, 0, {
|
||||
"product_id": line.product_id.id,
|
||||
"name": line.product_id.name,
|
||||
"product_uom": line.product_id.uom_id.id,
|
||||
'product_uom_qty': line.qty,
|
||||
}))
|
||||
picking_vals.update({'move_lines': move_vals})
|
||||
picking_id = self.env['stock.picking'].create(picking_vals)
|
||||
self.request_id.picking_id = picking_id.id
|
||||
storable_lines = self.request_line_ids.filtered(lambda l: l.product_id.type == 'product')
|
||||
asset_lines = self.request_line_ids.filtered(lambda l: l.product_id.asset_ok)
|
||||
consu_non_asset_lines = self.request_line_ids.filtered(
|
||||
lambda l: l.product_id.type == 'consu' and not l.product_id.asset_ok
|
||||
relevant_lines = self.request_line_ids.filtered(
|
||||
lambda l: l.product_id.type == 'product' or
|
||||
l.product_id.asset_ok or
|
||||
(l.product_id.type == 'consu' and not l.product_id.asset_ok)
|
||||
)
|
||||
relevant_lines = storable_lines | asset_lines | consu_non_asset_lines
|
||||
non_storable_product = self.request_line_ids - storable_lines - asset_lines - consu_non_asset_lines
|
||||
non_storable_product = self.request_line_ids - relevant_lines
|
||||
fully_available = all(l.qty <= l.available_qty for l in relevant_lines)
|
||||
|
||||
for line in self.request_line_ids:
|
||||
line.qty_purchased = line.qty if fully_available else line.qty - line.available_qty
|
||||
if fully_available:
|
||||
# self = self.with_context(fully_available=True)
|
||||
if non_storable_product:
|
||||
self.request_id.write({'state': 'waiting'})
|
||||
else:
|
||||
|
|
|
|||
Loading…
Reference in New Issue