Skip to content

Commit

Permalink
Merge pull request #469 from ForgeFlow/16.0-imp-default_operation_typ…
Browse files Browse the repository at this point in the history
…e_rma_group

[16.0][FWD][IMP] added default operation on rma group, easy setup before rma lines created
  • Loading branch information
AaronHForgeFlow authored Nov 21, 2023
2 parents 11ae665 + 6fec447 commit d7b7ef6
Show file tree
Hide file tree
Showing 6 changed files with 189 additions and 67 deletions.
42 changes: 41 additions & 1 deletion rma/models/rma_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,12 +120,32 @@ def _default_warehouse_id(self):
tracking=True,
default=lambda self: self.env.uid,
)
in_route_id = fields.Many2one(
"stock.route",
string="Inbound Route",
domain=[("rma_selectable", "=", True)],
)
out_route_id = fields.Many2one(
"stock.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(
Expand All @@ -149,6 +169,26 @@ def _default_warehouse_id(self):
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):
Expand Down
22 changes: 17 additions & 5 deletions rma/models/rma_order_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -732,13 +732,25 @@ def _onchange_operation_id(self):
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.customer_to_supplier = (
self.rma_id.customer_to_supplier or self.operation_id.customer_to_supplier
)
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.operation_id.location_id or self.in_warehouse_id.lot_rma_id
self.rma_id.location_id
or self.operation_id.location_id
or self.in_warehouse_id.lot_rma_id
)
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.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.depends("operation_id")
Expand Down
37 changes: 37 additions & 0 deletions rma/views/rma_order_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,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')],
Expand Down Expand Up @@ -247,6 +269,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>

Expand Down
53 changes: 33 additions & 20 deletions rma/wizards/rma_add_serial.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,16 +58,18 @@ def onchange_partner_id(self):
)

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
Expand All @@ -82,7 +84,11 @@ def _prepare_rma_line_from_lot_vals(self, lot):
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),
Expand All @@ -94,6 +100,16 @@ def _prepare_rma_line_from_lot_vals(self, lot):
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":
Expand All @@ -112,15 +128,11 @@ def _prepare_rma_line_from_lot_vals(self, lot):
"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

Expand All @@ -141,4 +153,5 @@ def action_confirm(self):
# 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"}
54 changes: 33 additions & 21 deletions rma/wizards/rma_add_stock_move.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,16 +73,18 @@ def select_all(self):
}

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
Expand All @@ -96,8 +98,11 @@ def _prepare_rma_line_from_stock_move(self, sm, lot=False):
)
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),
Expand All @@ -109,6 +114,16 @@ def _prepare_rma_line_from_stock_move(self, sm, lot=False):
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
Expand All @@ -132,15 +147,11 @@ def _prepare_rma_line_from_stock_move(self, sm, lot=False):
"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

Expand Down Expand Up @@ -184,4 +195,5 @@ def add_lines(self):
# 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"}
48 changes: 28 additions & 20 deletions rma_sale/wizards/rma_add_sale.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,11 @@ def select_all(self):
}

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
Expand All @@ -98,18 +100,27 @@ def _prepare_rma_line_from_sale_order_line(self, line, lot=None):
)
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
Expand Down Expand Up @@ -141,15 +152,11 @@ def _prepare_rma_line_from_sale_order_line(self, line, lot=None):
"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

Expand Down Expand Up @@ -193,6 +200,7 @@ def add_lines(self):
# 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)
Expand Down

0 comments on commit d7b7ef6

Please sign in to comment.