1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
from odoo import api, models
class ReplenishmentReport(models.AbstractModel):
_inherit = 'report.stock.report_product_product_replenishment'
@api.model
def _get_report_lines(self, product_template_ids, product_variant_ids, wh_location_ids):
lines = super(ReplenishmentReport, self)._get_report_lines(product_template_ids, product_variant_ids, wh_location_ids)
result_dict = {}
for line in lines:
document_out = line.get('document_out')
order_id = document_out.id if document_out else None
product_id = line.get('product', {}).get('id')
query = [('product_id', '=', product_id)]
if order_id:
result = self._calculate_result(line)
quantity = line.get('quantity', 0)
result_dict.setdefault(order_id, []).append((result, quantity))
for order_id, results in result_dict.items():
sales_order = self.env['sale.order'].browse(order_id)
for result, quantity in results:
self.env['sales.order.fullfillment'].create({
'sales_order_id': sales_order.id,
'product_id': product_id,
'reserved_from': result,
'qty_fullfillment': quantity,
})
return lines
def _calculate_result(self, line):
if line['document_in']:
return str(line["document_in"].name)
elif line['reservation'] and not line['document_in']:
return 'Reserved from stock'
elif line['replenishment_filled']:
if line['document_out']:
return 'Inventory On Hand'
else:
return 'Free Stock'
else:
return 'Unfulfilled'
|