stock/wizard/stock_change_product_qty.py

45 lines
1.9 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import _, api, fields, models
from odoo.exceptions import UserError
class ProductChangeQuantity(models.TransientModel):
_name = "stock.change.product.qty"
_description = "Change Product Quantity"
product_id = fields.Many2one('product.product', 'Product', required=True)
product_tmpl_id = fields.Many2one('product.template', 'Template', required=True)
product_variant_count = fields.Integer('Variant Count', related='product_tmpl_id.product_variant_count')
new_quantity = fields.Float(
'New Quantity on Hand', default=1,
digits='Product Unit of Measure', required=True,
help='This quantity is expressed in the Default Unit of Measure of the product.')
product_uom_id = fields.Many2one(related='product_tmpl_id.uom_id')
@api.onchange('product_id')
def _onchange_product_id(self):
self.new_quantity = self.product_id.qty_available
@api.constrains('new_quantity')
def check_new_quantity(self):
if any(wizard.new_quantity < 0 for wizard in self):
raise UserError(_('Quantity cannot be negative.'))
def change_product_qty(self):
""" Changes the Product Quantity by creating/editing corresponding quant.
"""
warehouse = self.env['stock.warehouse'].search(
[('company_id', '=', self.env.company.id)], limit=1
)
# Before creating a new quant, the quand `create` method will check if
# it exists already. If it does, it'll edit its `inventory_quantity`
# instead of create a new one.
self.env['stock.quant'].with_context(inventory_mode=True).create({
'product_id': self.product_id.id,
'location_id': warehouse.lot_stock_id.id,
'inventory_quantity': self.new_quantity,
})._apply_inventory()
return {'type': 'ir.actions.act_window_close'}