25
25
##############################################################################
27
from tools.translate import _
28
from osv import osv, fields
27
from openerp.tools.translate import _
29
from openerp.osv import osv, fields
29
30
import decimal_precision as dp
31
class mrp_production(osv.osv):
33
class mrp_production(osv.Model):
32
34
_inherit = "mrp.production"
34
36
def _get_product_subproduction_qty(self, cr, uid, ids, field_names, args, context=None):
35
37
if context is None:
37
product_uom_pool=self.pool.get('product.uom')
39
product_uom_pool = self.pool.get('product.uom')
40
42
subp_real_sum = 0.0
44
46
if (subprod.product_lines and subprod.state not in ('cancel')):
45
47
for scheduled in subprod.product_lines:
46
48
if scheduled.product_id.id == production.product_id.id:
47
subp_sum += product_uom_pool._compute_qty(cr, uid, scheduled.product_uom.id, scheduled.product_qty, to_uom_id=production.product_uom.id)
49
subp_sum += product_uom_pool._compute_qty(
50
cr, uid, scheduled.product_uom.id, scheduled.product_qty, to_uom_id=production.product_uom.id)
49
52
if (subprod.move_lines2 and subprod.state not in ('cancel')):
50
53
for consumed in subprod.move_lines2:
51
54
if (consumed.product_id.id == production.product_id.id and consumed.state not in ('cancel')):
52
subp_real_sum += product_uom_pool._compute_qty(cr, uid, consumed.product_uom.id, consumed.product_qty, to_uom_id=production.product_uom.id)
55
subp_real_sum += product_uom_pool._compute_qty(
56
cr, uid, consumed.product_uom.id, consumed.product_qty, to_uom_id=production.product_uom.id)
53
57
result[production.id] = {
54
58
'product_subproduction_qty_real': subp_real_sum,
55
59
'product_subproduction_qty_planned': subp_sum
59
63
def _get_parent_product(self, cr, uid, ids, field_names, args, context=None):
60
product_uom_pool=self.pool.get('product.uom')
64
product_uom_pool = self.pool.get('product.uom')
61
65
parent_id = context.get('subproduction_parent_id') or 0
62
66
parent_product_id = 0
65
parent_production = self.browse(cr, uid, parent_id, context=context)
69
parent_production = self.browse(
70
cr, uid, parent_id, context=context)
66
71
parent_product_id = parent_production.product_id.id
68
73
for production in self.browse(cr, uid, ids, context=context):
71
76
if production.product_lines:
72
77
for scheduled in production.product_lines:
73
78
if scheduled.product_id.id == parent_product_id:
74
planned_qty += product_uom_pool._compute_qty(cr, uid, scheduled.product_uom.id, scheduled.product_qty, to_uom_id=parent_production.product_uom.id)
79
planned_qty += product_uom_pool._compute_qty(
80
cr, uid, scheduled.product_uom.id, scheduled.product_qty, to_uom_id=parent_production.product_uom.id)
76
82
if production.move_lines2:
77
83
for consumed in production.move_lines2:
78
84
if (consumed.product_id.id == parent_product_id and consumed.state in ('done')):
79
real_qty += product_uom_pool._compute_qty(cr, uid, consumed.product_uom.id, consumed.product_qty, to_uom_id=parent_production.product_uom.id)
85
real_qty += product_uom_pool._compute_qty(
86
cr, uid, consumed.product_uom.id, consumed.product_qty, to_uom_id=parent_production.product_uom.id)
81
88
result[production.id] = {
82
89
'product_subproduction_qty_line_real': real_qty,
83
90
'product_subproduction_qty_line_planned': planned_qty
87
94
def _get_self_consumed(self, cr, uid, ids, field_name, args, context=None):
88
product_uom_pool=self.pool.get('product.uom')
95
product_uom_pool = self.pool.get('product.uom')
89
96
if context is None:
93
#ids received are the ones from superproducts, broese is done in backwards
100
# ids received are the ones from superproducts, broese is done in
94
102
for production in self.browse(cr, uid, ids, context=context):
95
103
if production.move_created_ids2:
97
105
for finished in production.move_created_ids2:
98
106
if (finished.product_id.id == production.product_id.id and finished.state in ('done')):
99
total_consumed += product_uom_pool._compute_qty(cr, uid, finished.product_uom.id, finished.product_qty, to_uom_id=production.product_uom.id)
107
total_consumed += product_uom_pool._compute_qty(
108
cr, uid, finished.product_uom.id, finished.product_qty, to_uom_id=production.product_uom.id)
101
110
total_consumed = production.product_qty
102
111
result[production.id] = total_consumed
105
114
if (subprods.move_lines2 and subprods.state not in ('cancel')):
106
115
for consumed in subprods.move_lines2:
107
116
if (consumed.product_id.id == production.product_id.id and consumed.state in ('done')):
108
total_consumed -= product_uom_pool._compute_qty(cr, uid, consumed.product_uom.id, consumed.product_qty, to_uom_id=production.product_uom.id)
117
total_consumed -= product_uom_pool._compute_qty(
118
cr, uid, consumed.product_uom.id, consumed.product_qty, to_uom_id=production.product_uom.id)
109
119
result[production.id] = total_consumed
113
123
'subproduction_ids': fields.many2many('mrp.production', 'rel_mrp_subproduction_self', 'parent_id', 'children_id', 'Subproductions'),
114
124
'superproduction_ids': fields.many2many('mrp.production', 'rel_mrp_subproduction_self', 'children_id', 'parent_id', 'Superproductions'),
118
128
'product_subproduction_qty_line_planned': fields.function(_get_parent_product, type='float', digits_compute=dp.get_precision('Product UoM'), method=True, string='Planned in line', multi="product_subproduction_qty_line_real"),
119
129
'product_superproduction_qty_consumed': fields.function(_get_self_consumed, type='float', digits_compute=dp.get_precision('Product UoM'), method=True, string='Remaining'),
122
132
def copy(self, cr, uid, id, default=None, context=None):
123
133
if default is None:
126
'subproduction_ids' : [],
127
'superproduction_ids' : [],
136
'subproduction_ids': [],
137
'superproduction_ids': [],
129
139
return super(mrp_production, self).copy(cr, uid, id, default, context)
b'\\ No newline at end of file'