23
23
# along with this program. If not, see <http://www.gnu.org/licenses/>.
25
25
##############################################################################
26
from openerp.osv import osv, fields
26
from openerp.osv import osv
27
27
from openerp.tools.translate import _
29
import openerp.netsvc as netsvc
46
45
for prod_variation in production.variation_ids:
47
46
context['type'] = 'consumed'
48
47
if prod_variation.product_id and\
49
prod_variation.product_id.valuation == 'real_time' and\
50
prod_variation.quantity != 0:
48
prod_variation.product_id.valuation == 'real_time' and\
49
prod_variation.quantity != 0:
51
50
j_id, src_acc, dest_acc, reference_amount =\
52
51
self.get_journal_accounts(cr, uid, prod_variation,
53
52
production, context=context)
54
53
account_moves += [(j_id,
55
54
self.create_account_variation_move_line(
56
cr, uid, prod_variation, src_acc, dest_acc,
55
cr, uid, prod_variation, src_acc, dest_acc,
59
58
for prod_variation in production.variation_finished_product_ids:
60
59
context['type'] = 'produced'
61
60
if prod_variation.product_id and\
62
prod_variation.product_id.valuation == 'real_time' and\
63
prod_variation.quantity != 0:
61
prod_variation.product_id.valuation == 'real_time' and\
62
prod_variation.quantity != 0:
64
63
j_id, src_acc, dest_acc, reference_amount =\
65
64
self.get_journal_accounts(cr, uid, prod_variation,
66
65
production, context=context)
67
66
account_moves += [(j_id,
68
67
self.create_account_variation_move_line(
69
cr, uid, prod_variation, src_acc, dest_acc,
68
cr, uid, prod_variation, src_acc, dest_acc,
73
72
for j_id, move_lines in account_moves:
74
73
move_obj.create(cr, uid,
77
'line_id': move_lines,
78
'ref': 'PROD: ' + production.name})
76
'line_id': move_lines,
77
'ref': 'PROD: ' + production.name})
93
92
src_acc = production.product_id.property_stock_production.valuation_in_account_id.id
94
93
if product.product_id.type == 'service':
95
94
dest_acc = product.product_id.categ_id.property_stock_valuation_account_id and\
96
product.product_id.categ_id.property_stock_valuation_account_id.id or False
95
product.product_id.categ_id.property_stock_valuation_account_id.id or False
97
96
elif production.product_id.property_stock_production.variation_in_account_id:
98
97
dest_acc = production.product_id.property_stock_production.variation_in_account_id.id
99
98
reference_amount = product.cost_variation
101
100
if product.quantity < 0:
102
101
if product.product_id.type == 'service':
103
102
src_acc = product.product_id.categ_id.property_stock_valuation_account_id and\
104
product.product_id.categ_id.property_stock_valuation_account_id.id or False
103
product.product_id.categ_id.property_stock_valuation_account_id.id or False
105
104
elif production.product_id.property_stock_production.variation_in_account_id:
106
105
src_acc = production.product_id.property_stock_production.variation_in_account_id.id
107
106
if production.product_id.property_stock_production.valuation_in_account_id:
108
107
dest_acc = production.product_id.property_stock_production.valuation_in_account_id.id
109
reference_amount = product.cost_variation*-1
108
reference_amount = product.cost_variation * -1
111
110
if context.get('type', False) == 'produced':
112
111
if product.quantity > 0:
120
119
src_acc = production.product_id.property_stock_production.valuation_out_account_id.id
121
120
if production.product_id.property_stock_production.valuation_out_account_id:
122
121
dest_acc = production.product_id.property_stock_production.variation_out_account_id.id
123
reference_amount = product.cost_variation*-1
122
reference_amount = product.cost_variation * -1
125
124
journal_id = product.product_id.categ_id.property_stock_journal.id
126
125
if not src_acc or not dest_acc:
127
raise osv.except_osv(_('Error!'),
126
raise osv.except_osv(_('Error!'),
128
127
_('There is no account defined for this location: "%s" ') %
129
(production.product_id.property_stock_production.name,))
128
(production.product_id.property_stock_production.name,))
131
130
if not journal_id:
132
131
raise osv.except_osv(_('Error!'),
140
139
def create_account_variation_move_line(self, cr, uid, prod_variation,
141
140
src_account_id, dest_account_id, reference_amount, context=None):
142
141
debit_line_vals = {
143
'name': 'PROD: ' + prod_variation.production_id.name + ' - ' +\
144
(prod_variation.product_id and
145
prod_variation.product_id.name or ''),
146
'product_id': prod_variation.product_id and
147
prod_variation.product_id.id or False,
148
'quantity': prod_variation.quantity,
142
'name': 'PROD: ' + prod_variation.production_id.name + ' - ' +
143
(prod_variation.product_id and
144
prod_variation.product_id.name or ''),
145
'product_id': prod_variation.product_id and
146
prod_variation.product_id.id or False,
147
'quantity': prod_variation.quantity,
149
148
# 'ref': 'prueba',
150
'date': time.strftime('%Y-%m-%d'),
151
# 'partner_id': partner_id,
152
'debit': reference_amount,
153
'account_id': dest_account_id,
149
'date': time.strftime('%Y-%m-%d'),
150
# 'partner_id': partner_id,
151
'debit': reference_amount,
152
'account_id': dest_account_id,
155
154
credit_line_vals = {
156
'name': 'PROD: ' + prod_variation.production_id.name + ' - ' +\
157
(prod_variation.product_id and
155
'name': 'PROD: ' + prod_variation.production_id.name + ' - ' +
156
(prod_variation.product_id and
158
157
prod_variation.product_id.name or ''),
159
158
'product_id': prod_variation.product_id and
160
prod_variation.product_id.id or False,
159
prod_variation.product_id.id or False,
161
160
'quantity': prod_variation.quantity,
163
162
'date': time.strftime('%Y-%m-%d'),
164
# 'partner_id': partner_id,
163
# 'partner_id': partner_id,
165
164
'credit': reference_amount,
166
165
'account_id': src_account_id,