[FIX] some undefined references:
* use of 'cursor' instead of 'cr' * use of 'user' instead of 'uid' bzr revid: olt@tinyerp.com-20100329142943-rl3qthstskovtcmp
This commit is contained in:
parent
0f4c0f45c2
commit
18be8e5246
|
@ -124,10 +124,10 @@ class stock_location(osv.osv):
|
||||||
c['location'] = id
|
c['location'] = id
|
||||||
product = self.pool.get('product.product').read(cr, uid, r['product_id'], [field_to_read], context=c)
|
product = self.pool.get('product.product').read(cr, uid, r['product_id'], [field_to_read], context=c)
|
||||||
# Compute the amount_unit in right currency
|
# Compute the amount_unit in right currency
|
||||||
|
|
||||||
context['currency_id']=self.pool.get('res.users').browse(cr,uid,uid).company_id.currency_id.id
|
context['currency_id']=self.pool.get('res.users').browse(cr,uid,uid).company_id.currency_id.id
|
||||||
amount_unit=self.pool.get('product.product').browse(cr,uid,r['product_id']).price_get(pricetype.field, context)[r['product_id']]
|
amount_unit=self.pool.get('product.product').browse(cr,uid,r['product_id']).price_get(pricetype.field, context)[r['product_id']]
|
||||||
|
|
||||||
final_value += (product[field_to_read] * amount_unit)
|
final_value += (product[field_to_read] * amount_unit)
|
||||||
return final_value
|
return final_value
|
||||||
|
|
||||||
|
@ -229,7 +229,7 @@ class stock_location(osv.osv):
|
||||||
price_type_id=self.pool.get('res.users').browse(cr,uid,uid).company_id.property_valuation_price_type.id
|
price_type_id=self.pool.get('res.users').browse(cr,uid,uid).company_id.property_valuation_price_type.id
|
||||||
pricetype=self.pool.get('product.price.type').browse(cr,uid,price_type_id)
|
pricetype=self.pool.get('product.price.type').browse(cr,uid,price_type_id)
|
||||||
context['currency_id']=self.pool.get('res.users').browse(cr,uid,uid).company_id.currency_id.id
|
context['currency_id']=self.pool.get('res.users').browse(cr,uid,uid).company_id.currency_id.id
|
||||||
|
|
||||||
if not product_ids:
|
if not product_ids:
|
||||||
product_ids = product_obj.search(cr, uid, [])
|
product_ids = product_obj.search(cr, uid, [])
|
||||||
|
|
||||||
|
@ -260,10 +260,10 @@ class stock_location(osv.osv):
|
||||||
continue
|
continue
|
||||||
product = products_by_id[product_id]
|
product = products_by_id[product_id]
|
||||||
quantity_total += qty[product_id]
|
quantity_total += qty[product_id]
|
||||||
|
|
||||||
# Compute based on pricetype
|
# Compute based on pricetype
|
||||||
# Choose the right filed standard_price to read
|
# Choose the right filed standard_price to read
|
||||||
amount_unit=product.price_get(pricetype.field, context)[product.id]
|
amount_unit=product.price_get(pricetype.field, context)[product.id]
|
||||||
price = qty[product_id] * amount_unit
|
price = qty[product_id] * amount_unit
|
||||||
# price = qty[product_id] * product.standard_price
|
# price = qty[product_id] * product.standard_price
|
||||||
|
|
||||||
|
@ -649,45 +649,48 @@ class stock_picking(osv.osv):
|
||||||
context=context)
|
context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def get_currency_id(self, cursor, user, picking):
|
def get_currency_id(self, cr, uid, picking):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _get_payment_term(self, cursor, user, picking):
|
def _get_payment_term(self, cr, uid, picking):
|
||||||
'''Return {'contact': address, 'invoice': address} for invoice'''
|
'''Return {'contact': address, 'invoice': address} for invoice'''
|
||||||
partner_obj = self.pool.get('res.partner')
|
partner_obj = self.pool.get('res.partner')
|
||||||
partner = picking.address_id.partner_id
|
partner = picking.address_id.partner_id
|
||||||
return partner.property_payment_term and partner.property_payment_term.id or False
|
return partner.property_payment_term and partner.property_payment_term.id or False
|
||||||
|
|
||||||
def _get_address_invoice(self, cursor, user, picking):
|
def _get_address_invoice(self, cr, uid, picking):
|
||||||
'''Return {'contact': address, 'invoice': address} for invoice'''
|
'''Return {'contact': address, 'invoice': address} for invoice'''
|
||||||
partner_obj = self.pool.get('res.partner')
|
partner_obj = self.pool.get('res.partner')
|
||||||
partner = picking.address_id.partner_id
|
partner = picking.address_id.partner_id
|
||||||
|
|
||||||
return partner_obj.address_get(cursor, user, [partner.id],
|
return partner_obj.address_get(cr, uid, [partner.id],
|
||||||
['contact', 'invoice'])
|
['contact', 'invoice'])
|
||||||
|
|
||||||
def _get_comment_invoice(self, cursor, user, picking):
|
def _get_comment_invoice(self, cr, uid, picking):
|
||||||
'''Return comment string for invoice'''
|
'''Return comment string for invoice'''
|
||||||
return picking.note or ''
|
return picking.note or ''
|
||||||
|
|
||||||
def _get_price_unit_invoice(self, cursor, user, move_line, type):
|
def _get_price_unit_invoice(self, cr, uid, move_line, type, context=None):
|
||||||
'''Return the price unit for the move line'''
|
'''Return the price unit for the move line'''
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
|
||||||
if type in ('in_invoice', 'in_refund'):
|
if type in ('in_invoice', 'in_refund'):
|
||||||
# Take the user company and pricetype
|
# Take the user company and pricetype
|
||||||
price_type_id=self.pool.get('res.users').browse(cr,users,users).company_id.property_valuation_price_type.id
|
price_type_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.property_valuation_price_type.id
|
||||||
pricetype=self.pool.get('product.price.type').browse(cr,uid,price_type_id)
|
pricetype = self.pool.get('product.price.type').browse(cr, uid, price_type_id)
|
||||||
context['currency_id']=move_line.company_id.currency_id.id
|
context['currency_id'] = move_line.company_id.currency_id.id
|
||||||
|
|
||||||
amount_unit=move_line.product_id.price_get(pricetype.field, context)[move_line.product_id.id]
|
amount_unit = move_line.product_id.price_get(pricetype.field, context)[move_line.product_id.id]
|
||||||
return amount_unit
|
return amount_unit
|
||||||
else:
|
else:
|
||||||
return move_line.product_id.list_price
|
return move_line.product_id.list_price
|
||||||
|
|
||||||
def _get_discount_invoice(self, cursor, user, move_line):
|
def _get_discount_invoice(self, cr, uid, move_line):
|
||||||
'''Return the discount for the move line'''
|
'''Return the discount for the move line'''
|
||||||
return 0.0
|
return 0.0
|
||||||
|
|
||||||
def _get_taxes_invoice(self, cursor, user, move_line, type):
|
def _get_taxes_invoice(self, cr, uid, move_line, type):
|
||||||
'''Return taxes ids for the move line'''
|
'''Return taxes ids for the move line'''
|
||||||
if type in ('in_invoice', 'in_refund'):
|
if type in ('in_invoice', 'in_refund'):
|
||||||
taxes = move_line.product_id.supplier_taxes_id
|
taxes = move_line.product_id.supplier_taxes_id
|
||||||
|
@ -696,34 +699,37 @@ class stock_picking(osv.osv):
|
||||||
|
|
||||||
if move_line.picking_id and move_line.picking_id.address_id and move_line.picking_id.address_id.partner_id:
|
if move_line.picking_id and move_line.picking_id.address_id and move_line.picking_id.address_id.partner_id:
|
||||||
return self.pool.get('account.fiscal.position').map_tax(
|
return self.pool.get('account.fiscal.position').map_tax(
|
||||||
cursor,
|
cr,
|
||||||
user,
|
uid,
|
||||||
move_line.picking_id.address_id.partner_id.property_account_position,
|
move_line.picking_id.address_id.partner_id.property_account_position,
|
||||||
taxes
|
taxes
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return map(lambda x: x.id, taxes)
|
return map(lambda x: x.id, taxes)
|
||||||
|
|
||||||
def _get_account_analytic_invoice(self, cursor, user, picking, move_line):
|
def _get_account_analytic_invoice(self, cr, uid, picking, move_line):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _invoice_line_hook(self, cursor, user, move_line, invoice_line_id):
|
def _invoice_line_hook(self, cr, uid, move_line, invoice_line_id):
|
||||||
'''Call after the creation of the invoice line'''
|
'''Call after the creation of the invoice line'''
|
||||||
return
|
return
|
||||||
|
|
||||||
def _invoice_hook(self, cursor, user, picking, invoice_id):
|
def _invoice_hook(self, cr, uid, picking, invoice_id):
|
||||||
'''Call after the creation of the invoice'''
|
'''Call after the creation of the invoice'''
|
||||||
return
|
return
|
||||||
|
|
||||||
def action_invoice_create(self, cursor, user, ids, journal_id=False,
|
def action_invoice_create(self, cr, uid, ids, journal_id=False,
|
||||||
group=False, type='out_invoice', context=None):
|
group=False, type='out_invoice', context=None):
|
||||||
'''Return ids of created invoices for the pickings'''
|
'''Return ids of created invoices for the pickings'''
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
|
||||||
invoice_obj = self.pool.get('account.invoice')
|
invoice_obj = self.pool.get('account.invoice')
|
||||||
invoice_line_obj = self.pool.get('account.invoice.line')
|
invoice_line_obj = self.pool.get('account.invoice.line')
|
||||||
invoices_group = {}
|
invoices_group = {}
|
||||||
res = {}
|
res = {}
|
||||||
|
|
||||||
for picking in self.browse(cursor, user, ids, context=context):
|
for picking in self.browse(cr, uid, ids, context=context):
|
||||||
if picking.invoice_state != '2binvoiced':
|
if picking.invoice_state != '2binvoiced':
|
||||||
continue
|
continue
|
||||||
payment_term_id = False
|
payment_term_id = False
|
||||||
|
@ -734,24 +740,24 @@ class stock_picking(osv.osv):
|
||||||
|
|
||||||
if type in ('out_invoice', 'out_refund'):
|
if type in ('out_invoice', 'out_refund'):
|
||||||
account_id = partner.property_account_receivable.id
|
account_id = partner.property_account_receivable.id
|
||||||
payment_term_id = self._get_payment_term(cursor, user, picking)
|
payment_term_id = self._get_payment_term(cr, uid, picking)
|
||||||
else:
|
else:
|
||||||
account_id = partner.property_account_payable.id
|
account_id = partner.property_account_payable.id
|
||||||
|
|
||||||
address_contact_id, address_invoice_id = \
|
address_contact_id, address_invoice_id = \
|
||||||
self._get_address_invoice(cursor, user, picking).values()
|
self._get_address_invoice(cr, uid, picking).values()
|
||||||
|
|
||||||
comment = self._get_comment_invoice(cursor, user, picking)
|
comment = self._get_comment_invoice(cr, uid, picking)
|
||||||
if group and partner.id in invoices_group:
|
if group and partner.id in invoices_group:
|
||||||
invoice_id = invoices_group[partner.id]
|
invoice_id = invoices_group[partner.id]
|
||||||
invoice = invoice_obj.browse(cursor, user, invoice_id)
|
invoice = invoice_obj.browse(cr, uid, invoice_id)
|
||||||
invoice_vals = {
|
invoice_vals = {
|
||||||
'name': (invoice.name or '') + ', ' + (picking.name or ''),
|
'name': (invoice.name or '') + ', ' + (picking.name or ''),
|
||||||
'origin': (invoice.origin or '') + ', ' + (picking.name or '') + (picking.origin and (':' + picking.origin) or ''),
|
'origin': (invoice.origin or '') + ', ' + (picking.name or '') + (picking.origin and (':' + picking.origin) or ''),
|
||||||
'comment': (comment and (invoice.comment and invoice.comment+"\n"+comment or comment)) or (invoice.comment and invoice.comment or ''),
|
'comment': (comment and (invoice.comment and invoice.comment+"\n"+comment or comment)) or (invoice.comment and invoice.comment or ''),
|
||||||
'date_invoice':context.get('date_inv',False)
|
'date_invoice':context.get('date_inv',False)
|
||||||
}
|
}
|
||||||
invoice_obj.write(cursor, user, [invoice_id], invoice_vals, context=context)
|
invoice_obj.write(cr, uid, [invoice_id], invoice_vals, context=context)
|
||||||
else:
|
else:
|
||||||
invoice_vals = {
|
invoice_vals = {
|
||||||
'name': picking.name,
|
'name': picking.name,
|
||||||
|
@ -767,12 +773,12 @@ class stock_picking(osv.osv):
|
||||||
'date_invoice': context.get('date_inv',False),
|
'date_invoice': context.get('date_inv',False),
|
||||||
'company_id': picking.company_id.id,
|
'company_id': picking.company_id.id,
|
||||||
}
|
}
|
||||||
cur_id = self.get_currency_id(cursor, user, picking)
|
cur_id = self.get_currency_id(cr, uid, picking)
|
||||||
if cur_id:
|
if cur_id:
|
||||||
invoice_vals['currency_id'] = cur_id
|
invoice_vals['currency_id'] = cur_id
|
||||||
if journal_id:
|
if journal_id:
|
||||||
invoice_vals['journal_id'] = journal_id
|
invoice_vals['journal_id'] = journal_id
|
||||||
invoice_id = invoice_obj.create(cursor, user, invoice_vals,
|
invoice_id = invoice_obj.create(cr, uid, invoice_vals,
|
||||||
context=context)
|
context=context)
|
||||||
invoices_group[partner.id] = invoice_id
|
invoices_group[partner.id] = invoice_id
|
||||||
res[picking.id] = invoice_id
|
res[picking.id] = invoice_id
|
||||||
|
@ -798,26 +804,25 @@ class stock_picking(osv.osv):
|
||||||
account_id = move_line.product_id.categ_id.\
|
account_id = move_line.product_id.categ_id.\
|
||||||
property_account_expense_categ.id
|
property_account_expense_categ.id
|
||||||
|
|
||||||
price_unit = self._get_price_unit_invoice(cursor, user,
|
price_unit = self._get_price_unit_invoice(cr, uid,
|
||||||
move_line, type)
|
move_line, type)
|
||||||
discount = self._get_discount_invoice(cursor, user, move_line)
|
discount = self._get_discount_invoice(cr, uid, move_line)
|
||||||
tax_ids = self._get_taxes_invoice(cursor, user, move_line, type)
|
tax_ids = self._get_taxes_invoice(cr, uid, move_line, type)
|
||||||
account_analytic_id = self._get_account_analytic_invoice(cursor,
|
account_analytic_id = self._get_account_analytic_invoice(cr, uid, picking, move_line)
|
||||||
user, picking, move_line)
|
|
||||||
|
|
||||||
#set UoS if it's a sale and the picking doesn't have one
|
#set UoS if it's a sale and the picking doesn't have one
|
||||||
uos_id = move_line.product_uos and move_line.product_uos.id or False
|
uos_id = move_line.product_uos and move_line.product_uos.id or False
|
||||||
if not uos_id and type in ('out_invoice', 'out_refund'):
|
if not uos_id and type in ('out_invoice', 'out_refund'):
|
||||||
uos_id = move_line.product_uom.id
|
uos_id = move_line.product_uom.id
|
||||||
|
|
||||||
account_id = self.pool.get('account.fiscal.position').map_account(cursor, user, partner.property_account_position, account_id)
|
account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, partner.property_account_position, account_id)
|
||||||
notes = False
|
notes = False
|
||||||
if move_line.sale_line_id:
|
if move_line.sale_line_id:
|
||||||
notes = move_line.sale_line_id.notes
|
notes = move_line.sale_line_id.notes
|
||||||
elif move_line.purchase_line_id:
|
elif move_line.purchase_line_id:
|
||||||
notes = move_line.purchase_line_id.notes
|
notes = move_line.purchase_line_id.notes
|
||||||
|
|
||||||
invoice_line_id = invoice_line_obj.create(cursor, user, {
|
invoice_line_id = invoice_line_obj.create(cr, uid, {
|
||||||
'name': name,
|
'name': name,
|
||||||
'origin': origin,
|
'origin': origin,
|
||||||
'invoice_id': invoice_id,
|
'invoice_id': invoice_id,
|
||||||
|
@ -831,15 +836,15 @@ class stock_picking(osv.osv):
|
||||||
'account_analytic_id': account_analytic_id,
|
'account_analytic_id': account_analytic_id,
|
||||||
'note': notes,
|
'note': notes,
|
||||||
}, context=context)
|
}, context=context)
|
||||||
self._invoice_line_hook(cursor, user, move_line, invoice_line_id)
|
self._invoice_line_hook(cr, uid, move_line, invoice_line_id)
|
||||||
|
|
||||||
invoice_obj.button_compute(cursor, user, [invoice_id], context=context,
|
invoice_obj.button_compute(cr, uid, [invoice_id], context=context,
|
||||||
set_total=(type in ('in_invoice', 'in_refund')))
|
set_total=(type in ('in_invoice', 'in_refund')))
|
||||||
self.write(cursor, user, [picking.id], {
|
self.write(cr, uid, [picking.id], {
|
||||||
'invoice_state': 'invoiced',
|
'invoice_state': 'invoiced',
|
||||||
}, context=context)
|
}, context=context)
|
||||||
self._invoice_hook(cursor, user, picking, invoice_id)
|
self._invoice_hook(cr, uid, picking, invoice_id)
|
||||||
self.write(cursor, user, res.keys(), {
|
self.write(cr, uid, res.keys(), {
|
||||||
'invoice_state': 'invoiced',
|
'invoice_state': 'invoiced',
|
||||||
}, context=context)
|
}, context=context)
|
||||||
return res
|
return res
|
||||||
|
@ -867,7 +872,7 @@ class stock_picking(osv.osv):
|
||||||
|
|
||||||
def do_partial(self, cr, uid, ids, partial_datas, context={}):
|
def do_partial(self, cr, uid, ids, partial_datas, context={}):
|
||||||
"""
|
"""
|
||||||
@ partial_datas : dict. contain details of partial picking
|
@ partial_datas : dict. contain details of partial picking
|
||||||
like partner_id, address_id, delivery_date, delivery moves with product_id, product_qty, uom
|
like partner_id, address_id, delivery_date, delivery moves with product_id, product_qty, uom
|
||||||
"""
|
"""
|
||||||
res = {}
|
res = {}
|
||||||
|
@ -892,11 +897,11 @@ class stock_picking(osv.osv):
|
||||||
for move in pick.move_lines:
|
for move in pick.move_lines:
|
||||||
if move.state in ('done', 'cancel'):
|
if move.state in ('done', 'cancel'):
|
||||||
continue
|
continue
|
||||||
partial_data = partial_datas.get('move%s'%(move.id), False)
|
partial_data = partial_datas.get('move%s'%(move.id), False)
|
||||||
assert partial_data, _('Do not Found Partial data of Stock Move Line :%s' %(move.id))
|
assert partial_data, _('Do not Found Partial data of Stock Move Line :%s' %(move.id))
|
||||||
product_qty = partial_data.get('product_qty',0.0)
|
product_qty = partial_data.get('product_qty',0.0)
|
||||||
move_product_qty[move.id] = product_qty
|
move_product_qty[move.id] = product_qty
|
||||||
product_uom = partial_data.get('product_uom',False)
|
product_uom = partial_data.get('product_uom',False)
|
||||||
product_price = partial_data.get('product_price',0.0)
|
product_price = partial_data.get('product_price',0.0)
|
||||||
product_currency = partial_data.get('product_currency',False)
|
product_currency = partial_data.get('product_currency',False)
|
||||||
if move.product_qty == product_qty:
|
if move.product_qty == product_qty:
|
||||||
|
@ -909,8 +914,8 @@ class stock_picking(osv.osv):
|
||||||
# Average price computation
|
# Average price computation
|
||||||
if (pick.type == 'in') and (move.product_id.cost_method == 'average'):
|
if (pick.type == 'in') and (move.product_id.cost_method == 'average'):
|
||||||
product = product_obj.browse(cr, uid, move.product_id.id)
|
product = product_obj.browse(cr, uid, move.product_id.id)
|
||||||
user = users_obj.browse(cr, uid, uid)
|
user = users_obj.browse(cr, uid, uid)
|
||||||
context['currency_id'] = move.company_id.currency_id.id
|
context['currency_id'] = move.company_id.currency_id.id
|
||||||
qty = uom_obj._compute_qty(cr, uid, product_uom, product_qty, product.uom_id.id)
|
qty = uom_obj._compute_qty(cr, uid, product_uom, product_qty, product.uom_id.id)
|
||||||
pricetype = False
|
pricetype = False
|
||||||
if user.company_id.property_valuation_price_type:
|
if user.company_id.property_valuation_price_type:
|
||||||
|
@ -919,7 +924,7 @@ class stock_picking(osv.osv):
|
||||||
new_price = currency_obj.compute(cr, uid, product_currency,
|
new_price = currency_obj.compute(cr, uid, product_currency,
|
||||||
user.company_id.currency_id.id, product_price)
|
user.company_id.currency_id.id, product_price)
|
||||||
new_price = uom_obj._compute_price(cr, uid, product_uom, new_price,
|
new_price = uom_obj._compute_price(cr, uid, product_uom, new_price,
|
||||||
product.uom_id.id)
|
product.uom_id.id)
|
||||||
if product.qty_available <= 0:
|
if product.qty_available <= 0:
|
||||||
new_std_price = new_price
|
new_std_price = new_price
|
||||||
else:
|
else:
|
||||||
|
@ -927,13 +932,13 @@ class stock_picking(osv.osv):
|
||||||
amount_unit = product.price_get(pricetype.field, context)[product.id]
|
amount_unit = product.price_get(pricetype.field, context)[product.id]
|
||||||
new_std_price = ((amount_unit * product.qty_available)\
|
new_std_price = ((amount_unit * product.qty_available)\
|
||||||
+ (new_price * qty))/(product.qty_available + qty)
|
+ (new_price * qty))/(product.qty_available + qty)
|
||||||
|
|
||||||
# Write the field according to price type field
|
# Write the field according to price type field
|
||||||
product_obj.write(cr, uid, [product.id],
|
product_obj.write(cr, uid, [product.id],
|
||||||
{pricetype.field: new_std_price})
|
{pricetype.field: new_std_price})
|
||||||
move_obj.write(cr, uid, [move.id], {'price_unit': new_price})
|
move_obj.write(cr, uid, [move.id], {'price_unit': new_price})
|
||||||
|
|
||||||
|
|
||||||
for move in too_few:
|
for move in too_few:
|
||||||
product_qty = move_product_qty[move.id]
|
product_qty = move_product_qty[move.id]
|
||||||
if not new_picking:
|
if not new_picking:
|
||||||
|
@ -945,22 +950,22 @@ class stock_picking(osv.osv):
|
||||||
'state':'draft',
|
'state':'draft',
|
||||||
})
|
})
|
||||||
if product_qty != 0:
|
if product_qty != 0:
|
||||||
|
|
||||||
new_obj = move_obj.copy(cr, uid, move.id,
|
new_obj = move_obj.copy(cr, uid, move.id,
|
||||||
{
|
{
|
||||||
'product_qty' : product_qty,
|
'product_qty' : product_qty,
|
||||||
'product_uos_qty': product_qty, #TODO: put correct uos_qty
|
'product_uos_qty': product_qty, #TODO: put correct uos_qty
|
||||||
'picking_id' : new_picking,
|
'picking_id' : new_picking,
|
||||||
'state': 'assigned',
|
'state': 'assigned',
|
||||||
'move_dest_id': False,
|
'move_dest_id': False,
|
||||||
'price_unit': move.price_unit,
|
'price_unit': move.price_unit,
|
||||||
})
|
})
|
||||||
|
|
||||||
move_obj.write(cr, uid, [move.id],
|
move_obj.write(cr, uid, [move.id],
|
||||||
{
|
{
|
||||||
'product_qty' : move.product_qty - product_qty,
|
'product_qty' : move.product_qty - product_qty,
|
||||||
'product_uos_qty':move.product_qty - product_qty, #TODO: put correct uos_qty
|
'product_uos_qty':move.product_qty - product_qty, #TODO: put correct uos_qty
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
if new_picking:
|
if new_picking:
|
||||||
|
@ -982,7 +987,7 @@ class stock_picking(osv.osv):
|
||||||
'product_uos_qty': product_qty #TODO: put correct uos_qty
|
'product_uos_qty': product_qty #TODO: put correct uos_qty
|
||||||
})
|
})
|
||||||
|
|
||||||
# At first we confirm the new picking (if necessary)
|
# At first we confirm the new picking (if necessary)
|
||||||
if new_picking:
|
if new_picking:
|
||||||
wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
|
wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
|
||||||
# Then we finish the good picking
|
# Then we finish the good picking
|
||||||
|
@ -994,18 +999,18 @@ class stock_picking(osv.osv):
|
||||||
delivered_pack_id = new_picking
|
delivered_pack_id = new_picking
|
||||||
else:
|
else:
|
||||||
self.action_move(cr, uid, [pick.id])
|
self.action_move(cr, uid, [pick.id])
|
||||||
wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_done', cr)
|
wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_done', cr)
|
||||||
delivered_pack_id = pick.id
|
delivered_pack_id = pick.id
|
||||||
|
|
||||||
delivered_pack = self.browse(cr, uid, delivered_pack_id, context=context)
|
delivered_pack = self.browse(cr, uid, delivered_pack_id, context=context)
|
||||||
delivery_id = delivery_obj.create(cr, uid, {
|
delivery_id = delivery_obj.create(cr, uid, {
|
||||||
'name': delivered_pack.name,
|
'name': delivered_pack.name,
|
||||||
'partner_id': partner_id,
|
'partner_id': partner_id,
|
||||||
'address_id': address_id,
|
'address_id': address_id,
|
||||||
'date': delivery_date,
|
'date': delivery_date,
|
||||||
'picking_id' : pick.id,
|
'picking_id' : pick.id,
|
||||||
'move_delivered' : [(6,0, map(lambda x:x.id, delivered_pack.move_lines))]
|
'move_delivered' : [(6,0, map(lambda x:x.id, delivered_pack.move_lines))]
|
||||||
}, context=context)
|
}, context=context)
|
||||||
res[pick.id] = {'delivered_picking': delivered_pack.id or False}
|
res[pick.id] = {'delivered_picking': delivered_pack.id or False}
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
@ -1106,21 +1111,21 @@ class stock_production_lot_revision(osv.osv):
|
||||||
}
|
}
|
||||||
|
|
||||||
stock_production_lot_revision()
|
stock_production_lot_revision()
|
||||||
|
|
||||||
class stock_delivery(osv.osv):
|
class stock_delivery(osv.osv):
|
||||||
|
|
||||||
""" Tracability of partialdeliveries """
|
""" Tracability of partialdeliveries """
|
||||||
|
|
||||||
_name = "stock.delivery"
|
_name = "stock.delivery"
|
||||||
_description = "Delivery"
|
_description = "Delivery"
|
||||||
_columns = {
|
_columns = {
|
||||||
'name': fields.char('Name', size=60, required=True),
|
'name': fields.char('Name', size=60, required=True),
|
||||||
'date': fields.datetime('Date', required=True),
|
'date': fields.datetime('Date', required=True),
|
||||||
'partner_id': fields.many2one('res.partner', 'Partner', required=True),
|
'partner_id': fields.many2one('res.partner', 'Partner', required=True),
|
||||||
'address_id': fields.many2one('res.partner.address', 'Address', required=True),
|
'address_id': fields.many2one('res.partner.address', 'Address', required=True),
|
||||||
'move_delivered':fields.one2many('stock.move', 'delivered_id', 'Move Delivered'),
|
'move_delivered':fields.one2many('stock.move', 'delivered_id', 'Move Delivered'),
|
||||||
'picking_id': fields.many2one('stock.picking', 'Picking list'),
|
'picking_id': fields.many2one('stock.picking', 'Picking list'),
|
||||||
|
|
||||||
}
|
}
|
||||||
stock_delivery()
|
stock_delivery()
|
||||||
# ----------------------------------------------------
|
# ----------------------------------------------------
|
||||||
|
@ -1207,7 +1212,7 @@ class stock_move(osv.osv):
|
||||||
'origin': fields.related('picking_id','origin',type='char', size=64, relation="stock.picking", string="Origin"),
|
'origin': fields.related('picking_id','origin',type='char', size=64, relation="stock.picking", string="Origin"),
|
||||||
'move_stock_return_history': fields.many2many('stock.move', 'stock_move_return_history', 'move_id', 'return_move_id', 'Move Return History',readonly=True),
|
'move_stock_return_history': fields.many2many('stock.move', 'stock_move_return_history', 'move_id', 'return_move_id', 'Move Return History',readonly=True),
|
||||||
'delivered_id': fields.many2one('stock.delivery', 'Product delivered'),
|
'delivered_id': fields.many2one('stock.delivery', 'Product delivered'),
|
||||||
'scraped': fields.boolean('Scraped'),
|
'scraped': fields.boolean('Scraped'),
|
||||||
}
|
}
|
||||||
_constraints = [
|
_constraints = [
|
||||||
(_check_tracking,
|
(_check_tracking,
|
||||||
|
@ -1449,7 +1454,7 @@ class stock_move(osv.osv):
|
||||||
if done:
|
if done:
|
||||||
count += len(done)
|
count += len(done)
|
||||||
self.write(cr, uid, done, {'state': 'assigned'})
|
self.write(cr, uid, done, {'state': 'assigned'})
|
||||||
|
|
||||||
if count:
|
if count:
|
||||||
for pick_id in pickings:
|
for pick_id in pickings:
|
||||||
wf_service = netsvc.LocalService("workflow")
|
wf_service = netsvc.LocalService("workflow")
|
||||||
|
@ -1482,8 +1487,8 @@ class stock_move(osv.osv):
|
||||||
for id in ids:
|
for id in ids:
|
||||||
wf_service.trg_trigger(uid, 'stock.move', id, cr)
|
wf_service.trg_trigger(uid, 'stock.move', id, cr)
|
||||||
#self.action_cancel(cr,uid, ids2, context)
|
#self.action_cancel(cr,uid, ids2, context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def action_done(self, cr, uid, ids, context=None):
|
def action_done(self, cr, uid, ids, context=None):
|
||||||
track_flag = False
|
track_flag = False
|
||||||
picking_ids = []
|
picking_ids = []
|
||||||
|
@ -1562,7 +1567,7 @@ class stock_move(osv.osv):
|
||||||
amount_unit=move.product_id.price_get(pricetype.field, context)[move.product_id.id]
|
amount_unit=move.product_id.price_get(pricetype.field, context)[move.product_id.id]
|
||||||
amount=amount_unit * q or 1.0
|
amount=amount_unit * q or 1.0
|
||||||
# amount = q * move.product_id.standard_price
|
# amount = q * move.product_id.standard_price
|
||||||
|
|
||||||
partner_id = False
|
partner_id = False
|
||||||
if move.picking_id:
|
if move.picking_id:
|
||||||
partner_id = move.picking_id.address_id and (move.picking_id.address_id.partner_id and move.picking_id.address_id.partner_id.id or False) or False
|
partner_id = move.picking_id.address_id and (move.picking_id.address_id.partner_id and move.picking_id.address_id.partner_id.id or False) or False
|
||||||
|
@ -1608,7 +1613,7 @@ class stock_move(osv.osv):
|
||||||
raise osv.except_osv(_('UserError'),
|
raise osv.except_osv(_('UserError'),
|
||||||
_('You can only delete draft moves.'))
|
_('You can only delete draft moves.'))
|
||||||
return super(stock_move, self).unlink(
|
return super(stock_move, self).unlink(
|
||||||
cr, uid, ids, context=context)
|
cr, uid, ids, context=context)
|
||||||
|
|
||||||
def _create_lot(self, cr, uid, ids, product_id, prefix=False):
|
def _create_lot(self, cr, uid, ids, product_id, prefix=False):
|
||||||
prodlot_obj = self.pool.get('stock.production.lot')
|
prodlot_obj = self.pool.get('stock.production.lot')
|
||||||
|
@ -1617,18 +1622,18 @@ class stock_move(osv.osv):
|
||||||
if not sequence:
|
if not sequence:
|
||||||
raise osv.except_osv(_('Error!'), _('No production sequence defined'))
|
raise osv.except_osv(_('Error!'), _('No production sequence defined'))
|
||||||
prodlot_id = prodlot_obj.create(cr, uid, {'name': sequence, 'prefix': prefix}, {'product_id': product_id})
|
prodlot_id = prodlot_obj.create(cr, uid, {'name': sequence, 'prefix': prefix}, {'product_id': product_id})
|
||||||
prodlot = prodlot_obj.browse(cr, uid, prodlot_id)
|
prodlot = prodlot_obj.browse(cr, uid, prodlot_id)
|
||||||
ref = ','.join(map(lambda x:str(x),ids))
|
ref = ','.join(map(lambda x:str(x),ids))
|
||||||
if prodlot.ref:
|
if prodlot.ref:
|
||||||
ref = '%s, %s' % (prodlot.ref, ref)
|
ref = '%s, %s' % (prodlot.ref, ref)
|
||||||
prodlot_obj.write(cr, uid, [prodlot_id], {'ref': ref})
|
prodlot_obj.write(cr, uid, [prodlot_id], {'ref': ref})
|
||||||
return prodlot_id
|
return prodlot_id
|
||||||
|
|
||||||
|
|
||||||
def action_scrap(self, cr, uid, ids, quantity, location_id, context=None):
|
def action_scrap(self, cr, uid, ids, quantity, location_id, context=None):
|
||||||
'''
|
'''
|
||||||
Move the scrap/damaged product into scrap location
|
Move the scrap/damaged product into scrap location
|
||||||
|
|
||||||
@ param cr: the database cursor
|
@ param cr: the database cursor
|
||||||
@ param uid: the user id
|
@ param uid: the user id
|
||||||
@ param ids: ids of stock move object to be scraped
|
@ param ids: ids of stock move object to be scraped
|
||||||
|
@ -1637,30 +1642,30 @@ class stock_move(osv.osv):
|
||||||
@ param context: context arguments
|
@ param context: context arguments
|
||||||
|
|
||||||
@ return: Scraped lines
|
@ return: Scraped lines
|
||||||
'''
|
'''
|
||||||
if quantity <= 0:
|
if quantity <= 0:
|
||||||
raise osv.except_osv(_('Warning!'), _('Please provide Proper Quantity !'))
|
raise osv.except_osv(_('Warning!'), _('Please provide Proper Quantity !'))
|
||||||
res = []
|
res = []
|
||||||
for move in self.browse(cr, uid, ids, context=context):
|
for move in self.browse(cr, uid, ids, context=context):
|
||||||
move_qty = move.product_qty
|
move_qty = move.product_qty
|
||||||
uos_qty = quantity / move_qty * move.product_uos_qty
|
uos_qty = quantity / move_qty * move.product_uos_qty
|
||||||
default_val = {
|
default_val = {
|
||||||
'product_qty': quantity,
|
'product_qty': quantity,
|
||||||
'product_uos_qty': uos_qty,
|
'product_uos_qty': uos_qty,
|
||||||
'state': move.state,
|
'state': move.state,
|
||||||
'scraped' : True,
|
'scraped' : True,
|
||||||
'location_dest_id': location_id
|
'location_dest_id': location_id
|
||||||
}
|
}
|
||||||
new_move = self.copy(cr, uid, move.id, default_val)
|
new_move = self.copy(cr, uid, move.id, default_val)
|
||||||
#self.write(cr, uid, [new_move], {'move_history_ids':[(4,move.id)]}) #TODO : to track scrap moves
|
#self.write(cr, uid, [new_move], {'move_history_ids':[(4,move.id)]}) #TODO : to track scrap moves
|
||||||
res += [new_move]
|
res += [new_move]
|
||||||
self.action_done(cr, uid, res)
|
self.action_done(cr, uid, res)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def action_split(self, cr, uid, ids, quantity, split_by_qty=1, prefix=False, with_lot=True, context=None):
|
def action_split(self, cr, uid, ids, quantity, split_by_qty=1, prefix=False, with_lot=True, context=None):
|
||||||
'''
|
'''
|
||||||
Split Stock Move lines into production lot which specified split by quantity.
|
Split Stock Move lines into production lot which specified split by quantity.
|
||||||
|
|
||||||
@ param cr: the database cursor
|
@ param cr: the database cursor
|
||||||
@ param uid: the user id
|
@ param uid: the user id
|
||||||
@ param ids: ids of stock move object to be splited
|
@ param ids: ids of stock move object to be splited
|
||||||
|
@ -1670,14 +1675,14 @@ class stock_move(osv.osv):
|
||||||
@ param context: context arguments
|
@ param context: context arguments
|
||||||
|
|
||||||
@ return: splited move lines
|
@ return: splited move lines
|
||||||
'''
|
'''
|
||||||
|
|
||||||
if quantity <= 0:
|
if quantity <= 0:
|
||||||
raise osv.except_osv(_('Warning!'), _('Please provide Proper Quantity !'))
|
raise osv.except_osv(_('Warning!'), _('Please provide Proper Quantity !'))
|
||||||
|
|
||||||
res = []
|
res = []
|
||||||
|
|
||||||
for move in self.browse(cr, uid, ids):
|
for move in self.browse(cr, uid, ids):
|
||||||
if split_by_qty <= 0 or quantity == 0:
|
if split_by_qty <= 0 or quantity == 0:
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
@ -1689,8 +1694,8 @@ class stock_move(osv.osv):
|
||||||
update_val = {
|
update_val = {
|
||||||
'product_qty': split_by_qty,
|
'product_qty': split_by_qty,
|
||||||
'product_uos_qty': uos_qty,
|
'product_uos_qty': uos_qty,
|
||||||
}
|
}
|
||||||
for idx in range(int(quantity//split_by_qty)):
|
for idx in range(int(quantity//split_by_qty)):
|
||||||
if not idx and move.product_qty<=quantity:
|
if not idx and move.product_qty<=quantity:
|
||||||
current_move = move.id
|
current_move = move.id
|
||||||
else:
|
else:
|
||||||
|
@ -1700,66 +1705,66 @@ class stock_move(osv.osv):
|
||||||
update_val['prodlot_id'] = self._create_lot(cr, uid, [current_move], move.product_id.id)
|
update_val['prodlot_id'] = self._create_lot(cr, uid, [current_move], move.product_id.id)
|
||||||
|
|
||||||
self.write(cr, uid, [current_move], update_val)
|
self.write(cr, uid, [current_move], update_val)
|
||||||
|
|
||||||
|
|
||||||
if quantity_rest > 0:
|
if quantity_rest > 0:
|
||||||
idx = int(quantity//split_by_qty)
|
idx = int(quantity//split_by_qty)
|
||||||
update_val['product_qty'] = quantity_rest
|
update_val['product_qty'] = quantity_rest
|
||||||
update_val['product_uos_qty'] = uos_qty_rest
|
update_val['product_uos_qty'] = uos_qty_rest
|
||||||
if not idx and move.product_qty<=quantity:
|
if not idx and move.product_qty<=quantity:
|
||||||
current_move = move.id
|
current_move = move.id
|
||||||
else:
|
else:
|
||||||
current_move = self.copy(cr, uid, move.id, {'state': move.state})
|
current_move = self.copy(cr, uid, move.id, {'state': move.state})
|
||||||
|
|
||||||
res.append(current_move)
|
res.append(current_move)
|
||||||
|
|
||||||
|
|
||||||
if with_lot:
|
if with_lot:
|
||||||
update_val['prodlot_id'] = self._create_lot(cr, uid, [current_move], move.product_id.id)
|
update_val['prodlot_id'] = self._create_lot(cr, uid, [current_move], move.product_id.id)
|
||||||
|
|
||||||
self.write(cr, uid, [current_move], update_val)
|
self.write(cr, uid, [current_move], update_val)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def action_consume(self, cr, uid, ids, quantity, location_id=False, context=None):
|
def action_consume(self, cr, uid, ids, quantity, location_id=False, context=None):
|
||||||
'''
|
'''
|
||||||
Consumed product with specific quatity from specific source location
|
Consumed product with specific quatity from specific source location
|
||||||
|
|
||||||
@ param cr: the database cursor
|
@ param cr: the database cursor
|
||||||
@ param uid: the user id
|
@ param uid: the user id
|
||||||
@ param ids: ids of stock move object to be consumed
|
@ param ids: ids of stock move object to be consumed
|
||||||
@ param quantity : specify consume quantity
|
@ param quantity : specify consume quantity
|
||||||
@ param location_id : specify source location
|
@ param location_id : specify source location
|
||||||
@ param context: context arguments
|
@ param context: context arguments
|
||||||
|
|
||||||
@ return: Consumed lines
|
@ return: Consumed lines
|
||||||
'''
|
'''
|
||||||
if not context:
|
if not context:
|
||||||
context = {}
|
context = {}
|
||||||
|
|
||||||
if quantity <= 0:
|
if quantity <= 0:
|
||||||
raise osv.except_osv(_('Warning!'), _('Please provide Proper Quantity !'))
|
raise osv.except_osv(_('Warning!'), _('Please provide Proper Quantity !'))
|
||||||
|
|
||||||
res = []
|
res = []
|
||||||
for move in self.browse(cr, uid, ids, context=context):
|
for move in self.browse(cr, uid, ids, context=context):
|
||||||
move_qty = move.product_qty
|
move_qty = move.product_qty
|
||||||
quantity_rest = move.product_qty
|
quantity_rest = move.product_qty
|
||||||
|
|
||||||
quantity_rest -= quantity
|
quantity_rest -= quantity
|
||||||
uos_qty_rest = quantity_rest / move_qty * move.product_uos_qty
|
uos_qty_rest = quantity_rest / move_qty * move.product_uos_qty
|
||||||
if quantity_rest <= 0:
|
if quantity_rest <= 0:
|
||||||
quantity_rest = 0
|
quantity_rest = 0
|
||||||
uos_qty_rest = 0
|
uos_qty_rest = 0
|
||||||
quantity = move.product_qty
|
quantity = move.product_qty
|
||||||
|
|
||||||
uos_qty = quantity / move_qty * move.product_uos_qty
|
uos_qty = quantity / move_qty * move.product_uos_qty
|
||||||
|
|
||||||
if quantity_rest > 0:
|
if quantity_rest > 0:
|
||||||
default_val = {
|
default_val = {
|
||||||
'product_qty': quantity,
|
'product_qty': quantity,
|
||||||
'product_uos_qty': uos_qty,
|
'product_uos_qty': uos_qty,
|
||||||
'state': move.state,
|
'state': move.state,
|
||||||
'location_id': location_id
|
'location_id': location_id
|
||||||
}
|
}
|
||||||
if move.product_id.track_production and location_id:
|
if move.product_id.track_production and location_id:
|
||||||
# IF product has checked track for production lot, move lines will be split by 1
|
# IF product has checked track for production lot, move lines will be split by 1
|
||||||
res += self.action_split(cr, uid, [move.id], quantity, split_by_qty=1, context=context)
|
res += self.action_split(cr, uid, [move.id], quantity, split_by_qty=1, context=context)
|
||||||
|
@ -1767,33 +1772,33 @@ class stock_move(osv.osv):
|
||||||
current_move = self.copy(cr, uid, move.id, default_val)
|
current_move = self.copy(cr, uid, move.id, default_val)
|
||||||
res += [current_move]
|
res += [current_move]
|
||||||
|
|
||||||
update_val = {}
|
update_val = {}
|
||||||
update_val['product_qty'] = quantity_rest
|
update_val['product_qty'] = quantity_rest
|
||||||
update_val['product_uos_qty'] = uos_qty_rest
|
update_val['product_uos_qty'] = uos_qty_rest
|
||||||
self.write(cr, uid, [move.id], update_val)
|
self.write(cr, uid, [move.id], update_val)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
quantity_rest = quantity
|
quantity_rest = quantity
|
||||||
uos_qty_rest = uos_qty
|
uos_qty_rest = uos_qty
|
||||||
|
|
||||||
if move.product_id.track_production and location_id:
|
if move.product_id.track_production and location_id:
|
||||||
res += self.split_lines(cr, uid, [move.id], quantity_rest, split_by_qty=1, context=context)
|
res += self.split_lines(cr, uid, [move.id], quantity_rest, split_by_qty=1, context=context)
|
||||||
else:
|
else:
|
||||||
res += [move.id]
|
res += [move.id]
|
||||||
update_val = {
|
update_val = {
|
||||||
'product_qty' : quantity_rest,
|
'product_qty' : quantity_rest,
|
||||||
'product_uos_qty' : uos_qty_rest,
|
'product_uos_qty' : uos_qty_rest,
|
||||||
'location_id': location_id
|
'location_id': location_id
|
||||||
}
|
}
|
||||||
|
|
||||||
self.write(cr, uid, [move.id], update_val)
|
self.write(cr, uid, [move.id], update_val)
|
||||||
|
|
||||||
self.action_done(cr, uid, res)
|
self.action_done(cr, uid, res)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def do_partial(self, cr, uid, ids, partial_datas, context={}):
|
def do_partial(self, cr, uid, ids, partial_datas, context={}):
|
||||||
"""
|
"""
|
||||||
@ partial_datas : dict. contain details of partial picking
|
@ partial_datas : dict. contain details of partial picking
|
||||||
like partner_id, address_id, delivery_date, delivery moves with product_id, product_qty, uom
|
like partner_id, address_id, delivery_date, delivery moves with product_id, product_qty, uom
|
||||||
"""
|
"""
|
||||||
res = {}
|
res = {}
|
||||||
|
@ -1809,7 +1814,7 @@ class stock_move(osv.osv):
|
||||||
partner_id = partial_datas.get('partner_id', False)
|
partner_id = partial_datas.get('partner_id', False)
|
||||||
address_id = partial_datas.get('address_id', False)
|
address_id = partial_datas.get('address_id', False)
|
||||||
delivery_date = partial_datas.get('delivery_date', False)
|
delivery_date = partial_datas.get('delivery_date', False)
|
||||||
|
|
||||||
new_moves = []
|
new_moves = []
|
||||||
|
|
||||||
complete, too_many, too_few = [], [], []
|
complete, too_many, too_few = [], [], []
|
||||||
|
@ -1817,11 +1822,11 @@ class stock_move(osv.osv):
|
||||||
for move in self.browse(cr, uid, ids, context=context):
|
for move in self.browse(cr, uid, ids, context=context):
|
||||||
if move.state in ('done', 'cancel'):
|
if move.state in ('done', 'cancel'):
|
||||||
continue
|
continue
|
||||||
partial_data = partial_datas.get('move%s'%(move.id), False)
|
partial_data = partial_datas.get('move%s'%(move.id), False)
|
||||||
assert partial_data, _('Do not Found Partial data of Stock Move Line :%s' %(move.id))
|
assert partial_data, _('Do not Found Partial data of Stock Move Line :%s' %(move.id))
|
||||||
product_qty = partial_data.get('product_qty',0.0)
|
product_qty = partial_data.get('product_qty',0.0)
|
||||||
move_product_qty[move.id] = product_qty
|
move_product_qty[move.id] = product_qty
|
||||||
product_uom = partial_data.get('product_uom',False)
|
product_uom = partial_data.get('product_uom',False)
|
||||||
product_price = partial_data.get('product_price',0.0)
|
product_price = partial_data.get('product_price',0.0)
|
||||||
product_currency = partial_data.get('product_currency',False)
|
product_currency = partial_data.get('product_currency',False)
|
||||||
if move.product_qty == product_qty:
|
if move.product_qty == product_qty:
|
||||||
|
@ -1834,8 +1839,8 @@ class stock_move(osv.osv):
|
||||||
# Average price computation
|
# Average price computation
|
||||||
if (move.picking_id.type == 'in') and (move.product_id.cost_method == 'average'):
|
if (move.picking_id.type == 'in') and (move.product_id.cost_method == 'average'):
|
||||||
product = product_obj.browse(cr, uid, move.product_id.id)
|
product = product_obj.browse(cr, uid, move.product_id.id)
|
||||||
user = users_obj.browse(cr, uid, uid)
|
user = users_obj.browse(cr, uid, uid)
|
||||||
context['currency_id'] = move.company_id.currency_id.id
|
context['currency_id'] = move.company_id.currency_id.id
|
||||||
qty = uom_obj._compute_qty(cr, uid, product_uom, product_qty, product.uom_id.id)
|
qty = uom_obj._compute_qty(cr, uid, product_uom, product_qty, product.uom_id.id)
|
||||||
pricetype = False
|
pricetype = False
|
||||||
if user.company_id.property_valuation_price_type:
|
if user.company_id.property_valuation_price_type:
|
||||||
|
@ -1844,7 +1849,7 @@ class stock_move(osv.osv):
|
||||||
new_price = currency_obj.compute(cr, uid, product_currency,
|
new_price = currency_obj.compute(cr, uid, product_currency,
|
||||||
user.company_id.currency_id.id, product_price)
|
user.company_id.currency_id.id, product_price)
|
||||||
new_price = uom_obj._compute_price(cr, uid, product_uom, new_price,
|
new_price = uom_obj._compute_price(cr, uid, product_uom, new_price,
|
||||||
product.uom_id.id)
|
product.uom_id.id)
|
||||||
if product.qty_available <= 0:
|
if product.qty_available <= 0:
|
||||||
new_std_price = new_price
|
new_std_price = new_price
|
||||||
else:
|
else:
|
||||||
|
@ -1852,14 +1857,14 @@ class stock_move(osv.osv):
|
||||||
amount_unit = product.price_get(pricetype.field, context)[product.id]
|
amount_unit = product.price_get(pricetype.field, context)[product.id]
|
||||||
new_std_price = ((amount_unit * product.qty_available)\
|
new_std_price = ((amount_unit * product.qty_available)\
|
||||||
+ (new_price * qty))/(product.qty_available + qty)
|
+ (new_price * qty))/(product.qty_available + qty)
|
||||||
|
|
||||||
# Write the field according to price type field
|
# Write the field according to price type field
|
||||||
product_obj.write(cr, uid, [product.id],
|
product_obj.write(cr, uid, [product.id],
|
||||||
{pricetype.field: new_std_price})
|
{pricetype.field: new_std_price})
|
||||||
self.write(cr, uid, [move.id], {'price_unit': new_price})
|
self.write(cr, uid, [move.id], {'price_unit': new_price})
|
||||||
|
|
||||||
for move in too_few:
|
for move in too_few:
|
||||||
product_qty = move_product_qty[move.id]
|
product_qty = move_product_qty[move.id]
|
||||||
if product_qty != 0:
|
if product_qty != 0:
|
||||||
new_move = self.copy(cr, uid, move.id,
|
new_move = self.copy(cr, uid, move.id,
|
||||||
{
|
{
|
||||||
|
@ -1877,35 +1882,35 @@ class stock_move(osv.osv):
|
||||||
'product_uos_qty':move.product_qty - product_qty,
|
'product_uos_qty':move.product_qty - product_qty,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
for move in too_many:
|
for move in too_many:
|
||||||
self.write(cr, uid, move.id,
|
self.write(cr, uid, move.id,
|
||||||
{
|
{
|
||||||
'product_qty': product_qty,
|
'product_qty': product_qty,
|
||||||
'product_uos_qty': product_qty
|
'product_uos_qty': product_qty
|
||||||
})
|
})
|
||||||
complete.append(move)
|
complete.append(move)
|
||||||
|
|
||||||
for move in complete:
|
for move in complete:
|
||||||
self.action_done(cr, uid, [move.id])
|
self.action_done(cr, uid, [move.id])
|
||||||
|
|
||||||
# TOCHECK : Done picking if all moves are done
|
# TOCHECK : Done picking if all moves are done
|
||||||
cr.execute("""
|
cr.execute("""
|
||||||
SELECT move.id FROM stock_picking pick
|
SELECT move.id FROM stock_picking pick
|
||||||
RIGHT JOIN stock_move move ON move.picking_id = pick.id AND move.state = %s
|
RIGHT JOIN stock_move move ON move.picking_id = pick.id AND move.state = %s
|
||||||
WHERE pick.id = %s""",
|
WHERE pick.id = %s""",
|
||||||
('done', move.picking_id.id))
|
('done', move.picking_id.id))
|
||||||
res = cr.fetchall()
|
res = cr.fetchall()
|
||||||
if len(res) == len(move.picking_id.move_lines):
|
if len(res) == len(move.picking_id.move_lines):
|
||||||
picking_obj.action_move(cr, uid, [move.picking_id.id])
|
picking_obj.action_move(cr, uid, [move.picking_id.id])
|
||||||
wf_service.trg_validate(uid, 'stock.picking', move.picking_id.id, 'button_done', cr)
|
wf_service.trg_validate(uid, 'stock.picking', move.picking_id.id, 'button_done', cr)
|
||||||
|
|
||||||
ref = {}
|
ref = {}
|
||||||
done_move_ids = []
|
done_move_ids = []
|
||||||
for move in complete:
|
for move in complete:
|
||||||
done_move_ids.append(move.id)
|
done_move_ids.append(move.id)
|
||||||
if move.picking_id.id not in ref:
|
if move.picking_id.id not in ref:
|
||||||
delivery_id = delivery_obj.create(cr, uid, {
|
delivery_id = delivery_obj.create(cr, uid, {
|
||||||
'partner_id': partner_id,
|
'partner_id': partner_id,
|
||||||
'address_id': address_id,
|
'address_id': address_id,
|
||||||
'date': delivery_date,
|
'date': delivery_date,
|
||||||
|
@ -1938,8 +1943,8 @@ class stock_inventory(osv.osv):
|
||||||
'state': lambda *a: 'draft',
|
'state': lambda *a: 'draft',
|
||||||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', context=c)
|
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', context=c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def _inventory_line_hook(self, cr, uid, inventory_line, move_vals):
|
def _inventory_line_hook(self, cr, uid, inventory_line, move_vals):
|
||||||
'''Creates a stock move from an inventory line'''
|
'''Creates a stock move from an inventory line'''
|
||||||
return self.pool.get('stock.move').create(cr, uid, move_vals)
|
return self.pool.get('stock.move').create(cr, uid, move_vals)
|
||||||
|
@ -1950,7 +1955,7 @@ class stock_inventory(osv.osv):
|
||||||
move_line = []
|
move_line = []
|
||||||
for line in inv.inventory_line_id:
|
for line in inv.inventory_line_id:
|
||||||
pid = line.product_id.id
|
pid = line.product_id.id
|
||||||
|
|
||||||
# price = line.product_id.standard_price or 0.0
|
# price = line.product_id.standard_price or 0.0
|
||||||
amount = self.pool.get('stock.location')._product_get(cr, uid, line.location_id.id, [pid], {'uom': line.product_uom.id})[pid]
|
amount = self.pool.get('stock.location')._product_get(cr, uid, line.location_id.id, [pid], {'uom': line.product_uom.id})[pid]
|
||||||
change = line.product_qty - amount
|
change = line.product_qty - amount
|
||||||
|
@ -2050,7 +2055,7 @@ class stock_warehouse(osv.osv):
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', context=c),
|
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', context=c),
|
||||||
}
|
}
|
||||||
stock_warehouse()
|
stock_warehouse()
|
||||||
|
|
||||||
|
|
||||||
# Move wizard :
|
# Move wizard :
|
||||||
|
|
Loading…
Reference in New Issue