Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[14.0][IMP] added default operation on rma group, easy setup before rma lines created #452

Merged
merged 3 commits into from
Oct 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 41 additions & 1 deletion rma/models/rma_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,12 +121,32 @@ def _default_warehouse_id(self):
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(
Expand All @@ -151,6 +171,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
24 changes: 17 additions & 7 deletions rma/models/rma_order_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -724,15 +724,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.operation_id.in_route_id
self.out_route_id = self.operation_id.out_route_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")
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 @@ -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')],
Expand Down Expand Up @@ -249,6 +271,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 @@ -75,16 +75,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 @@ -98,8 +100,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 @@ -111,6 +116,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 @@ -134,15 +149,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 @@ -186,4 +197,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"}
Loading
Loading