mirror of
https://github.com/OCA/rma.git
synced 2025-02-16 17:11:47 +02:00
91 lines
3.1 KiB
Python
91 lines
3.1 KiB
Python
# Copyright 2020 Tecnativa - Ernesto Tejeda
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import _, api, fields, models
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class RmaReDeliveryWizard(models.TransientModel):
|
|
_name = "rma.delivery.wizard"
|
|
_description = "RMA Delivery Wizard"
|
|
|
|
rma_count = fields.Integer()
|
|
type = fields.Selection(
|
|
selection=[("replace", "Replace"), ("return", "Return to customer")],
|
|
string="Type",
|
|
required=True,
|
|
)
|
|
product_id = fields.Many2one(
|
|
comodel_name="product.product",
|
|
string="Replace Product",
|
|
)
|
|
product_uom_qty = fields.Float(
|
|
string="Product qty",
|
|
digits="Product Unit of Measure",
|
|
)
|
|
product_uom = fields.Many2one(comodel_name="uom.uom", string="Unit of measure")
|
|
scheduled_date = fields.Datetime(required=True, default=fields.Datetime.now())
|
|
warehouse_id = fields.Many2one(
|
|
comodel_name="stock.warehouse",
|
|
string="Warehouse",
|
|
required=True,
|
|
)
|
|
uom_category_id = fields.Many2one(related="product_id.uom_id.category_id")
|
|
|
|
@api.constrains("product_uom_qty")
|
|
def _check_product_uom_qty(self):
|
|
self.ensure_one()
|
|
rma_ids = self.env.context.get("active_ids")
|
|
if len(rma_ids) == 1 and self.product_uom_qty <= 0:
|
|
raise ValidationError(_("Quantity must be greater than 0."))
|
|
|
|
@api.model
|
|
def default_get(self, fields_list):
|
|
res = super().default_get(fields_list)
|
|
rma_ids = self.env.context.get("active_ids")
|
|
rma = self.env["rma"].browse(rma_ids)
|
|
warehouse_id = (
|
|
self.env["stock.warehouse"]
|
|
.search([("company_id", "=", rma[0].company_id.id)], limit=1)
|
|
.id
|
|
)
|
|
delivery_type = self.env.context.get("rma_delivery_type")
|
|
product_id = False
|
|
if len(rma) == 1 and delivery_type == "return":
|
|
product_id = rma.product_id.id
|
|
product_uom_qty = 0.0
|
|
if len(rma) == 1 and rma.remaining_qty > 0.0:
|
|
product_uom_qty = rma.remaining_qty
|
|
res.update(
|
|
rma_count=len(rma),
|
|
warehouse_id=warehouse_id,
|
|
type=delivery_type,
|
|
product_id=product_id,
|
|
product_uom_qty=product_uom_qty,
|
|
)
|
|
return res
|
|
|
|
@api.onchange("product_id")
|
|
def _onchange_product_id(self):
|
|
if self.product_id:
|
|
if not self.product_uom or self.product_id.uom_id.id != self.product_uom.id:
|
|
self.product_uom = self.product_id.uom_id
|
|
|
|
def action_deliver(self):
|
|
self.ensure_one()
|
|
rma_ids = self.env.context.get("active_ids")
|
|
rma = self.env["rma"].browse(rma_ids)
|
|
if self.type == "replace":
|
|
rma.create_replace(
|
|
self.scheduled_date,
|
|
self.warehouse_id,
|
|
self.product_id,
|
|
self.product_uom_qty,
|
|
self.product_uom,
|
|
)
|
|
elif self.type == "return":
|
|
qty = uom = None
|
|
if self.rma_count == 1:
|
|
qty, uom = self.product_uom_qty, self.product_uom
|
|
rma.create_return(self.scheduled_date, qty, uom)
|