Here is to fix stock valuation layer to current stock.
Issues what this will be fixing:
- Stock Valuation layer doesn't match to qty in stok
- AVCO and FIFO standard price calculations.
These issues might be because something is went wrong in configuration or stock.move's. Like bug in external module.
These will happen, and I don't know why theres no fix tool built in odoo.
Or I haven't found it.
def action_fix_category_svl(self):
self.ensure_one()
if self.property_cost_method != 'standard':
raise ValidationError(_('You must change valuation type to standard to run this method'))
products = self.env['product.product'].search([('categ_id', '=', self.id)])
for product in products:
#1. Getting Stock Valuation Layer value and quantity
valuation_quantity = product.quantity_svl
valuation_value = product.value_svl
#2. Getting in stock value and quantity
qty_available = product.qty_available
qty_value = product.standard_price * qty_available
company_id = self.env.company.id
#3. Finding all the stock layers that has remaining qty and remaining value and setting it to zero
#This is for avco and fifo calculations. When setting those 0 they are not effecting in standard price
#Caluculations
domain = [
('product_id', '=', product.id),
('company_id', '=', company_id),
('remaining_qty', '!=', 0)
]
svls = self.env['stock.valuation.layer'].search(domain)
for svl in svls:
svl.write({"remaining_qty": 0})
domain = [
('product_id', '=', product.id),
('company_id', '=', company_id),
('remaining_value', '!=', 0)
]
svls = self.env['stock.valuation.layer'].search(domain)
for svl in svls:
svl.write({"remaining_value": 0})
#5. Calculating real stock adjustment for stock valuation layer
#This method makes adjustment for example adjustment to 20 from -20 would be 40
qty_to_svl = self.fix_value(qty_available, valuation_quantity)
value_to_svl = self.fix_value(qty_value, valuation_value)
vals = {
'product_id': product.id,
'value': value_to_svl,
'unit_cost': 0,
'quantity': qty_to_svl,
'remaining_qty': 0,
'remaining_value':0,
'company_id': self.env.company.id,
'description': _('Fixing of %s to match stock.quant valuation %s with qty %s', product.name, qty_value, qty_available) }
self.env['stock.valuation.layer'].sudo().create(vals)
Does anyone have the fix_value method
you are missing the fix_value function