23
23
# along with this program. If not, see <http://www.gnu.org/licenses/>.
25
25
##############################################################################
26
from osv import osv,fields
27
from tools.translate import _
26
from openerp.osv import osv, fields
27
from openerp.tools.translate import _
29
import openerp.netsvc as netsvc
31
class mrp_production(osv.osv):
32
_inherit='mrp.production'
34
def action_finish(self,cr,uid,ids,context={}):
35
res = super(mrp_production, self).action_finish(cr,uid,ids,context=context)
33
class mrp_production(osv.Model):
34
_inherit = 'mrp.production'
36
def action_finish(self, cr, uid, ids, context={}):
37
res = super(mrp_production, self).action_finish(
38
cr, uid, ids, context=context)
36
39
self.create_move_variation_price(cr, uid, ids, context=context)
45
48
total_product_consumed = 0.0
46
49
total_product_finished = 0.0
47
50
for prod_consumed in production.product_lines:
48
product_consumed = product_uom_pool._compute_qty(cr, uid, prod_consumed.product_uom.id, prod_consumed.product_qty, to_uom_id=prod_consumed.product_id.uom_id.id)
49
total_product_consumed += product_consumed * prod_consumed.product_id.standard_price
51
product_consumed = product_uom_pool._compute_qty(
52
cr, uid, prod_consumed.product_uom.id, prod_consumed.product_qty, to_uom_id=prod_consumed.product_id.uom_id.id)
53
total_product_consumed += product_consumed * \
54
prod_consumed.product_id.standard_price
50
55
for prod_finished in production.pt_planified_ids:
51
product_finished = product_uom_pool._compute_qty(cr, uid, prod_finished.product_uom.id, prod_finished.quantity, to_uom_id=prod_finished.product_id.uom_id.id)
52
total_product_finished += product_finished * prod_finished.product_id.standard_price
56
product_finished = product_uom_pool._compute_qty(
57
cr, uid, prod_finished.product_uom.id, prod_finished.quantity, to_uom_id=prod_finished.product_id.uom_id.id)
58
total_product_finished += product_finished * \
59
prod_finished.product_id.standard_price
53
60
if production.product_id.property_stock_production:
54
61
if total_product_consumed > total_product_finished:
55
62
if production.product_id.property_stock_production.property_account_in_production_price_difference:
56
63
src_account_id = production.product_id.property_stock_production.valuation_out_account_id.id
57
64
dest_account_id = production.product_id.property_stock_production.property_account_in_production_price_difference.id
58
reference_amount = (total_product_consumed - total_product_finished)
66
total_product_consumed - total_product_finished)
59
67
journal_id = production.product_id.categ_id.property_stock_journal.id
60
account_moves = [(journal_id, self.create_account_variation_price_move_line(cr, uid, production, src_account_id, dest_account_id, reference_amount, context=None))]
68
account_moves = [(journal_id, self.create_account_variation_price_move_line(
69
cr, uid, production, src_account_id, dest_account_id, reference_amount, context=None))]
61
70
if total_product_consumed < total_product_finished:
62
71
if production.product_id.property_stock_production.property_account_out_production_price_difference:
63
72
src_account_id = production.product_id.property_stock_production.property_account_out_production_price_difference.id
64
73
dest_account_id = production.product_id.property_stock_production.valuation_in_account_id.id
65
reference_amount = (total_product_consumed - total_product_finished)*-1
75
total_product_consumed - total_product_finished)*-1
66
76
journal_id = production.product_id.categ_id.property_stock_journal.id
67
account_moves = [(journal_id,self.create_account_variation_price_move_line(cr, uid, production, src_account_id, dest_account_id, reference_amount, context=None))]
77
account_moves = [(journal_id, self.create_account_variation_price_move_line(
78
cr, uid, production, src_account_id, dest_account_id, reference_amount, context=None))]
70
for j_id,move_lines in account_moves:
81
for j_id, move_lines in account_moves:
71
82
move_obj.create(cr, uid,
74
'line_id': move_lines,
75
'ref': 'PROD: ' + production.name + ' - ' + _('Deflection by difference on consume RM vs FP')})
85
'line_id': move_lines,
86
'ref': 'PROD: ' + production.name + ' - ' + _('Deflection by difference on consume RM vs FP')})
78
89
def create_account_variation_price_move_line(self, cr, uid, production, src_account_id, dest_account_id, reference_amount, context=None):
79
90
debit_line_vals = {
80
'name': 'PROD: ' + production.name or '',
91
'name': 'PROD: ' + production.name or '',
81
92
'date': time.strftime('%Y-%m-%d'),
82
93
'debit': reference_amount,
83
94
'account_id': dest_account_id,
84
'production_id' : production.id
95
'production_id': production.id
86
97
credit_line_vals = {
87
'name': 'PROD: ' + production.name or '',
98
'name': 'PROD: ' + production.name or '',
88
99
'date': time.strftime('%Y-%m-%d'),
89
100
'credit': reference_amount,
90
101
'account_id': src_account_id,
91
'production_id' : production.id
102
'production_id': production.id
94
105
return [(0, 0, debit_line_vals), (0, 0, credit_line_vals)]