mirror of
https://github.com/ForgeFlow/stock-rma.git
synced 2025-01-21 12:57:49 +02:00
Merge pull request #468 from ForgeFlow/15.0-imp-default_operation_type_rma_group
[15.0][FWD][IMP] added default operation on rma group, easy setup before rma lines created
This commit is contained in:
@@ -120,12 +120,32 @@ class RmaOrder(models.Model):
|
||||
tracking=True,
|
||||
default=lambda self: self.env.uid,
|
||||
)
|
||||
in_route_id = fields.Many2one(
|
||||
"stock.location.route",
|
||||
string="Inbound Route",
|
||||
domain=[("rma_selectable", "=", True)],
|
||||
)
|
||||
out_route_id = fields.Many2one(
|
||||
"stock.location.route",
|
||||
string="Outbound Route",
|
||||
domain=[("rma_selectable", "=", True)],
|
||||
)
|
||||
in_warehouse_id = fields.Many2one(
|
||||
comodel_name="stock.warehouse",
|
||||
string="Inbound Warehouse",
|
||||
required=True,
|
||||
required=False,
|
||||
default=_default_warehouse_id,
|
||||
)
|
||||
out_warehouse_id = fields.Many2one(
|
||||
comodel_name="stock.warehouse",
|
||||
string="Outbound Warehouse",
|
||||
required=False,
|
||||
default=_default_warehouse_id,
|
||||
)
|
||||
location_id = fields.Many2one(
|
||||
comodel_name="stock.location",
|
||||
string="Send To This Company Location",
|
||||
)
|
||||
customer_to_supplier = fields.Boolean("The customer will send to the supplier")
|
||||
supplier_to_customer = fields.Boolean("The supplier will send to the customer")
|
||||
supplier_address_id = fields.Many2one(
|
||||
@@ -149,6 +169,26 @@ class RmaOrder(models.Model):
|
||||
default="draft",
|
||||
store=True,
|
||||
)
|
||||
operation_default_id = fields.Many2one(
|
||||
comodel_name="rma.operation",
|
||||
required=False,
|
||||
string="Default Operation Type",
|
||||
)
|
||||
|
||||
@api.onchange(
|
||||
"operation_default_id",
|
||||
)
|
||||
def _onchange_operation(self):
|
||||
if self.operation_default_id:
|
||||
self.in_warehouse_id = self.operation_default_id.in_warehouse_id
|
||||
self.out_warehouse_id = self.operation_default_id.out_warehouse_id
|
||||
self.location_id = (
|
||||
self.operation_default_id.location_id or self.in_warehouse_id.lot_rma_id
|
||||
)
|
||||
self.customer_to_supplier = self.operation_default_id.customer_to_supplier
|
||||
self.supplier_to_customer = self.operation_default_id.supplier_to_customer
|
||||
self.in_route_id = self.operation_default_id.in_route_id
|
||||
self.out_route_id = self.operation_default_id.out_route_id
|
||||
|
||||
@api.constrains("partner_id", "rma_line_ids")
|
||||
def _check_partner_id(self):
|
||||
|
||||
@@ -701,15 +701,25 @@ class RmaOrderLine(models.Model):
|
||||
return result
|
||||
self.receipt_policy = self.operation_id.receipt_policy
|
||||
self.delivery_policy = self.operation_id.delivery_policy
|
||||
self.in_warehouse_id = self.operation_id.in_warehouse_id
|
||||
self.out_warehouse_id = self.operation_id.out_warehouse_id
|
||||
self.location_id = (
|
||||
self.operation_id.location_id or self.in_warehouse_id.lot_rma_id
|
||||
self.customer_to_supplier = (
|
||||
self.rma_id.customer_to_supplier or self.operation_id.customer_to_supplier
|
||||
)
|
||||
self.customer_to_supplier = self.operation_id.customer_to_supplier
|
||||
self.supplier_to_customer = self.operation_id.supplier_to_customer
|
||||
self.in_route_id = self.operation_id.in_route_id
|
||||
self.out_route_id = self.operation_id.out_route_id
|
||||
self.supplier_to_customer = (
|
||||
self.rma_id.supplier_to_customer or self.operation_id.supplier_to_customer
|
||||
)
|
||||
self.in_warehouse_id = (
|
||||
self.rma_id.in_warehouse_id or self.operation_id.in_warehouse_id
|
||||
)
|
||||
self.out_warehouse_id = (
|
||||
self.rma_id.out_warehouse_id or self.operation_id.out_warehouse_id
|
||||
)
|
||||
self.location_id = (
|
||||
self.rma_id.location_id
|
||||
or self.operation_id.location_id
|
||||
or self.in_warehouse_id.lot_rma_id
|
||||
)
|
||||
self.in_route_id = self.rma_id.in_route_id or self.operation_id.in_route_id
|
||||
self.out_route_id = self.rma_id.out_route_id or self.operation_id.out_route_id
|
||||
return result
|
||||
|
||||
@api.onchange("customer_to_supplier", "type")
|
||||
|
||||
@@ -118,10 +118,32 @@
|
||||
</group>
|
||||
<group>
|
||||
<group name="inbound_route" string="Inbound">
|
||||
<field
|
||||
name="operation_default_id"
|
||||
domain="[('type','=','customer')]"
|
||||
/>
|
||||
<field
|
||||
name="in_warehouse_id"
|
||||
attrs="{'readonly':[('state', '!=', 'draft')]}"
|
||||
/>
|
||||
<field
|
||||
name="in_route_id"
|
||||
attrs="{'readonly':[('state', '!=', 'draft')]}"
|
||||
/>
|
||||
<field
|
||||
name="out_warehouse_id"
|
||||
invisible="1"
|
||||
attrs="{'readonly':[('state', '!=', 'draft')]}"
|
||||
/>
|
||||
<field
|
||||
name="location_id"
|
||||
attrs="{'readonly':[('state', '!=', 'draft')]}"
|
||||
/>
|
||||
<field
|
||||
name="out_route_id"
|
||||
invisible="1"
|
||||
attrs="{'readonly':[('state', '!=', 'draft')]}"
|
||||
/>
|
||||
<field
|
||||
name="customer_to_supplier"
|
||||
attrs="{'readonly':[('state', '!=', 'draft')],
|
||||
@@ -248,6 +270,21 @@
|
||||
'hide_title': True}
|
||||
</attribute>
|
||||
</field>
|
||||
<field name="operation_default_id" position="attributes">
|
||||
<attribute name="domain">[('type','=','supplier')]</attribute>
|
||||
</field>
|
||||
<field name="in_warehouse_id" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</field>
|
||||
<field name="out_warehouse_id" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</field>
|
||||
<field name="in_route_id" position="attributes">
|
||||
<attribute name="invisible">0</attribute>
|
||||
</field>
|
||||
<field name="out_route_id" position="attributes">
|
||||
<attribute name="invisible">0</attribute>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -58,16 +58,18 @@ class RmaAddSerialWiz(models.TransientModel):
|
||||
)
|
||||
|
||||
def _prepare_rma_line_from_lot_vals(self, lot):
|
||||
if self.env.context.get("customer"):
|
||||
operation = (
|
||||
lot.product_id.rma_customer_operation_id
|
||||
or lot.product_id.categ_id.rma_customer_operation_id
|
||||
)
|
||||
else:
|
||||
operation = (
|
||||
lot.product_id.rma_supplier_operation_id
|
||||
or lot.product_id.categ_id.rma_supplier_operation_id
|
||||
)
|
||||
operation = self.rma_id.operation_default_id
|
||||
if not operation:
|
||||
if self.env.context.get("customer"):
|
||||
operation = (
|
||||
lot.product_id.rma_customer_operation_id
|
||||
or lot.product_id.categ_id.rma_customer_operation_id
|
||||
)
|
||||
else:
|
||||
operation = (
|
||||
lot.product_id.rma_supplier_operation_id
|
||||
or lot.product_id.categ_id.rma_supplier_operation_id
|
||||
)
|
||||
if not operation:
|
||||
operation = self.env["rma.operation"].search(
|
||||
[("type", "=", self.rma_id.type)], limit=1
|
||||
@@ -82,7 +84,11 @@ class RmaAddSerialWiz(models.TransientModel):
|
||||
if not route:
|
||||
raise ValidationError(_("Please define an RMA route"))
|
||||
|
||||
if not operation.in_warehouse_id or not operation.out_warehouse_id:
|
||||
in_warehouse = self.rma_id.in_warehouse_id or operation.in_warehouse_id
|
||||
in_route = self.rma_id.in_route_id or operation.in_route_id
|
||||
out_warehouse = self.rma_id.out_warehouse_id or operation.out_warehouse_id
|
||||
out_route = self.rma_id.out_route_id or operation.out_route_id
|
||||
if not in_warehouse or not out_warehouse:
|
||||
warehouse = self.env["stock.warehouse"].search(
|
||||
[
|
||||
("company_id", "=", self.rma_id.company_id.id),
|
||||
@@ -94,6 +100,16 @@ class RmaAddSerialWiz(models.TransientModel):
|
||||
raise ValidationError(
|
||||
_("Please define a warehouse with a default RMA location")
|
||||
)
|
||||
in_warehouse = in_warehouse or warehouse
|
||||
out_warehouse = out_warehouse or warehouse
|
||||
location = self.rma_id.location_id
|
||||
if not location:
|
||||
location = (
|
||||
operation.location_id
|
||||
or operation.in_warehouse_id.lot_rma_id
|
||||
or in_warehouse.lot_rma_id
|
||||
or out_warehouse.lot_rma_id
|
||||
)
|
||||
|
||||
product_qty = 1 # serial
|
||||
if lot.product_id.tracking == "lot":
|
||||
@@ -112,15 +128,11 @@ class RmaAddSerialWiz(models.TransientModel):
|
||||
"rma_id": self.rma_id.id,
|
||||
"receipt_policy": operation.receipt_policy,
|
||||
"delivery_policy": operation.delivery_policy,
|
||||
"in_warehouse_id": operation.in_warehouse_id.id or warehouse.id,
|
||||
"out_warehouse_id": operation.out_warehouse_id.id or warehouse.id,
|
||||
"in_route_id": operation.in_route_id.id or route.id,
|
||||
"out_route_id": operation.out_route_id.id or route.id,
|
||||
"location_id": (
|
||||
operation.location_id.id
|
||||
or operation.in_warehouse_id.lot_rma_id.id
|
||||
or warehouse.lot_rma_id.id
|
||||
),
|
||||
"in_warehouse_id": in_warehouse.id,
|
||||
"out_warehouse_id": out_warehouse.id,
|
||||
"in_route_id": in_route.id,
|
||||
"out_route_id": out_route.id,
|
||||
"location_id": location.id,
|
||||
}
|
||||
return vals
|
||||
|
||||
@@ -141,4 +153,5 @@ class RmaAddSerialWiz(models.TransientModel):
|
||||
# favor of (pre)computed stored editable fields for all policies
|
||||
# and configuration in the RMA operation.
|
||||
rec._onchange_operation_id()
|
||||
rec.price_unit = rec._get_price_unit()
|
||||
return {"type": "ir.actions.act_window_close"}
|
||||
|
||||
@@ -75,16 +75,18 @@ class RmaAddStockMove(models.TransientModel):
|
||||
}
|
||||
|
||||
def _prepare_rma_line_from_stock_move(self, sm, lot=False):
|
||||
if self.env.context.get("customer"):
|
||||
operation = (
|
||||
sm.product_id.rma_customer_operation_id
|
||||
or sm.product_id.categ_id.rma_customer_operation_id
|
||||
)
|
||||
else:
|
||||
operation = (
|
||||
sm.product_id.rma_supplier_operation_id
|
||||
or sm.product_id.categ_id.rma_supplier_operation_id
|
||||
)
|
||||
operation = self.rma_id.operation_default_id
|
||||
if not operation:
|
||||
if self.env.context.get("customer"):
|
||||
operation = (
|
||||
sm.product_id.rma_customer_operation_id
|
||||
or sm.product_id.categ_id.rma_customer_operation_id
|
||||
)
|
||||
else:
|
||||
operation = (
|
||||
sm.product_id.rma_supplier_operation_id
|
||||
or sm.product_id.categ_id.rma_supplier_operation_id
|
||||
)
|
||||
if not operation:
|
||||
operation = self.env["rma.operation"].search(
|
||||
[("type", "=", self.rma_id.type)], limit=1
|
||||
@@ -98,8 +100,11 @@ class RmaAddStockMove(models.TransientModel):
|
||||
)
|
||||
if not route:
|
||||
raise ValidationError(_("Please define an RMA route"))
|
||||
|
||||
if not operation.in_warehouse_id or not operation.out_warehouse_id:
|
||||
in_warehouse = self.rma_id.in_warehouse_id or operation.in_warehouse_id
|
||||
in_route = self.rma_id.in_route_id or operation.in_route_id
|
||||
out_warehouse = self.rma_id.out_warehouse_id or operation.out_warehouse_id
|
||||
out_route = self.rma_id.out_route_id or operation.out_route_id
|
||||
if not in_warehouse or not out_warehouse:
|
||||
warehouse = self.env["stock.warehouse"].search(
|
||||
[
|
||||
("company_id", "=", self.rma_id.company_id.id),
|
||||
@@ -111,6 +116,16 @@ class RmaAddStockMove(models.TransientModel):
|
||||
raise ValidationError(
|
||||
_("Please define a warehouse with a default RMA location")
|
||||
)
|
||||
in_warehouse = in_warehouse or warehouse
|
||||
out_warehouse = out_warehouse or warehouse
|
||||
location = self.rma_id.location_id
|
||||
if not location:
|
||||
location = (
|
||||
operation.location_id
|
||||
or operation.in_warehouse_id.lot_rma_id
|
||||
or in_warehouse.lot_rma_id
|
||||
or out_warehouse.lot_rma_id
|
||||
)
|
||||
product_qty = sm.product_uom_qty
|
||||
if sm.product_id.tracking == "serial":
|
||||
product_qty = 1
|
||||
@@ -134,15 +149,11 @@ class RmaAddStockMove(models.TransientModel):
|
||||
"rma_id": self.rma_id.id,
|
||||
"receipt_policy": operation.receipt_policy,
|
||||
"delivery_policy": operation.delivery_policy,
|
||||
"in_warehouse_id": operation.in_warehouse_id.id or warehouse.id,
|
||||
"out_warehouse_id": operation.out_warehouse_id.id or warehouse.id,
|
||||
"in_route_id": operation.in_route_id.id or route.id,
|
||||
"out_route_id": operation.out_route_id.id or route.id,
|
||||
"location_id": (
|
||||
operation.location_id.id
|
||||
or operation.in_warehouse_id.lot_rma_id.id
|
||||
or warehouse.lot_rma_id.id
|
||||
),
|
||||
"in_warehouse_id": in_warehouse.id,
|
||||
"out_warehouse_id": out_warehouse.id,
|
||||
"in_route_id": in_route.id,
|
||||
"out_route_id": out_route.id,
|
||||
"location_id": location.id,
|
||||
}
|
||||
return data
|
||||
|
||||
@@ -186,4 +197,5 @@ class RmaAddStockMove(models.TransientModel):
|
||||
# favor of (pre)computed stored editable fields for all policies
|
||||
# and configuration in the RMA operation.
|
||||
rec._onchange_operation_id()
|
||||
rec.price_unit = rec._get_price_unit()
|
||||
return {"type": "ir.actions.act_window_close"}
|
||||
|
||||
@@ -85,9 +85,11 @@ class RmaAddSale(models.TransientModel):
|
||||
}
|
||||
|
||||
def _prepare_rma_line_from_sale_order_line(self, line, lot=None):
|
||||
operation = line.product_id.rma_customer_operation_id
|
||||
operation = self.rma_id.operation_default_id
|
||||
if not operation:
|
||||
operation = line.product_id.categ_id.rma_customer_operation_id
|
||||
operation = line.product_id.rma_customer_operation_id
|
||||
if not operation:
|
||||
operation = line.product_id.categ_id.rma_customer_operation_id
|
||||
if not operation:
|
||||
operation = self.env["rma.operation"].search(
|
||||
[("type", "=", self.rma_id.type)], limit=1
|
||||
@@ -100,18 +102,27 @@ class RmaAddSale(models.TransientModel):
|
||||
)
|
||||
if not route:
|
||||
raise ValidationError(_("Please define an rma route"))
|
||||
if not operation.in_warehouse_id or not operation.out_warehouse_id:
|
||||
warehouse = self.env["stock.warehouse"].search(
|
||||
[
|
||||
("company_id", "=", self.rma_id.company_id.id),
|
||||
("lot_rma_id", "!=", False),
|
||||
],
|
||||
limit=1,
|
||||
)
|
||||
if not warehouse:
|
||||
raise ValidationError(
|
||||
_("Please define a warehouse with a " "default rma location.")
|
||||
warehouse = self.rma_id.in_warehouse_id
|
||||
if not warehouse:
|
||||
if not operation.in_warehouse_id or not operation.out_warehouse_id:
|
||||
warehouse = self.env["stock.warehouse"].search(
|
||||
[
|
||||
("company_id", "=", self.rma_id.company_id.id),
|
||||
("lot_rma_id", "!=", False),
|
||||
],
|
||||
limit=1,
|
||||
)
|
||||
if not warehouse:
|
||||
raise ValidationError(
|
||||
_("Please define a warehouse with a " "default rma location.")
|
||||
)
|
||||
location = self.rma_id.location_id
|
||||
if not location:
|
||||
location = (
|
||||
operation.location_id
|
||||
or operation.in_warehouse_id.lot_rma_id
|
||||
or warehouse.lot_rma_id
|
||||
)
|
||||
product_qty = line.product_uom_qty
|
||||
if line.product_id.tracking == "serial":
|
||||
product_qty = 1
|
||||
@@ -143,15 +154,11 @@ class RmaAddSale(models.TransientModel):
|
||||
"in_route_id": operation.in_route_id.id or route.id,
|
||||
"out_route_id": operation.out_route_id.id or route.id,
|
||||
"receipt_policy": operation.receipt_policy,
|
||||
"location_id": (
|
||||
operation.location_id.id
|
||||
or operation.in_warehouse_id.lot_rma_id.id
|
||||
or warehouse.lot_rma_id.id
|
||||
),
|
||||
"location_id": location.id,
|
||||
"refund_policy": operation.refund_policy,
|
||||
"delivery_policy": operation.delivery_policy,
|
||||
"in_warehouse_id": operation.in_warehouse_id.id or warehouse.id,
|
||||
"out_warehouse_id": operation.out_warehouse_id.id or warehouse.id,
|
||||
"in_warehouse_id": warehouse.id or operation.in_warehouse_id.id,
|
||||
"out_warehouse_id": warehouse.id or operation.out_warehouse_id.id,
|
||||
}
|
||||
return data
|
||||
|
||||
@@ -195,6 +202,7 @@ class RmaAddSale(models.TransientModel):
|
||||
# favor of (pre)computed stored editable fields for all policies
|
||||
# and configuration in the RMA operation.
|
||||
rec._onchange_operation_id()
|
||||
rec.price_unit = rec._get_price_unit()
|
||||
rma = self.rma_id
|
||||
data_rma = self._get_rma_data()
|
||||
rma.write(data_rma)
|
||||
|
||||
Reference in New Issue
Block a user