mirror of
https://github.com/bringout/oca-technical.git
synced 2026-04-22 18:12:10 +02:00
Initial commit: OCA Technical packages (595 packages)
This commit is contained in:
commit
2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions
216
odoo-bringout-oca-rma-rma/rma/models/stock_warehouse.py
Normal file
216
odoo-bringout-oca-rma-rma/rma/models/stock_warehouse.py
Normal file
|
|
@ -0,0 +1,216 @@
|
|||
# Copyright 2020 Tecnativa - Ernesto Tejeda
|
||||
# Copyright 2023 Michael Tietz (MT Software) <mtietz@mt-software.de>
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import _, fields, models
|
||||
|
||||
|
||||
class StockWarehouse(models.Model):
|
||||
_inherit = "stock.warehouse"
|
||||
|
||||
# This is a strategic field used to create an rma location
|
||||
# and rma operation types in existing warehouses when
|
||||
# installing this module.
|
||||
rma = fields.Boolean(
|
||||
"RMA",
|
||||
default=True,
|
||||
help="RMA related products can be stored in this warehouse.",
|
||||
)
|
||||
rma_in_type_id = fields.Many2one(
|
||||
comodel_name="stock.picking.type",
|
||||
string="RMA In Type",
|
||||
)
|
||||
rma_out_type_id = fields.Many2one(
|
||||
comodel_name="stock.picking.type",
|
||||
string="RMA Out Type",
|
||||
)
|
||||
rma_loc_id = fields.Many2one(
|
||||
comodel_name="stock.location",
|
||||
string="RMA Location",
|
||||
)
|
||||
rma_in_route_id = fields.Many2one("stock.route", "RMA in Route")
|
||||
rma_out_route_id = fields.Many2one("stock.route", "RMA out Route")
|
||||
rma_out_replace_route_id = fields.Many2one("stock.route", "RMA out Replace Route")
|
||||
|
||||
def _get_rma_location_values(self, vals, code=False):
|
||||
"""this method is intended to be used by 'create' method
|
||||
to create a new RMA location to be linked to a new warehouse.
|
||||
"""
|
||||
company_id = vals.get(
|
||||
"company_id", self.default_get(["company_id"])["company_id"]
|
||||
)
|
||||
code = vals.get("code") or code or ""
|
||||
code = code.replace(" ", "").upper()
|
||||
view_location_id = vals.get("view_location_id")
|
||||
view_location = (
|
||||
view_location_id
|
||||
and self.view_location_id.browse(view_location_id)
|
||||
or self.view_location_id
|
||||
)
|
||||
return {
|
||||
"name": view_location.name,
|
||||
"active": True,
|
||||
"return_location": True,
|
||||
"usage": "internal",
|
||||
"company_id": company_id,
|
||||
"location_id": self.env.ref("rma.stock_location_rma").id,
|
||||
"barcode": self._valid_barcode(code + "-RMA", company_id),
|
||||
}
|
||||
|
||||
def _get_locations_values(self, vals, code=False):
|
||||
res = super()._get_locations_values(vals, code)
|
||||
res["rma_loc_id"] = self._get_rma_location_values(vals, code)
|
||||
return res
|
||||
|
||||
def _get_sequence_values(self, name=False, code=False):
|
||||
values = super()._get_sequence_values(name=name, code=code)
|
||||
values.update(
|
||||
{
|
||||
"rma_in_type_id": {
|
||||
"name": self.name + " " + _("Sequence RMA in"),
|
||||
"prefix": self.code + "/RMA/IN/",
|
||||
"padding": 5,
|
||||
"company_id": self.company_id.id,
|
||||
},
|
||||
"rma_out_type_id": {
|
||||
"name": self.name + " " + _("Sequence RMA out"),
|
||||
"prefix": self.code + "/RMA/OUT/",
|
||||
"padding": 5,
|
||||
"company_id": self.company_id.id,
|
||||
},
|
||||
}
|
||||
)
|
||||
return values
|
||||
|
||||
def _update_name_and_code(self, new_name=False, new_code=False):
|
||||
res = super()._update_name_and_code(new_name, new_code)
|
||||
for warehouse in self:
|
||||
sequence_data = warehouse._get_sequence_values()
|
||||
warehouse.rma_in_type_id.sequence_id.write(sequence_data["rma_in_type_id"])
|
||||
warehouse.rma_out_type_id.sequence_id.write(
|
||||
sequence_data["rma_out_type_id"]
|
||||
)
|
||||
return res
|
||||
|
||||
def _get_picking_type_create_values(self, max_sequence):
|
||||
data, next_sequence = super()._get_picking_type_create_values(max_sequence)
|
||||
data.update(
|
||||
{
|
||||
"rma_in_type_id": {
|
||||
"name": _("RMA Receipts"),
|
||||
"code": "incoming",
|
||||
"use_create_lots": False,
|
||||
"use_existing_lots": True,
|
||||
"default_location_src_id": False,
|
||||
"default_location_dest_id": self.rma_loc_id.id,
|
||||
"sequence": max_sequence + 1,
|
||||
"sequence_code": "RMA/IN",
|
||||
"company_id": self.company_id.id,
|
||||
},
|
||||
"rma_out_type_id": {
|
||||
"name": _("RMA Delivery Orders"),
|
||||
"code": "outgoing",
|
||||
"use_create_lots": False,
|
||||
"use_existing_lots": True,
|
||||
"default_location_src_id": self.rma_loc_id.id,
|
||||
"default_location_dest_id": False,
|
||||
"sequence": max_sequence + 2,
|
||||
"sequence_code": "RMA/OUT",
|
||||
"company_id": self.company_id.id,
|
||||
},
|
||||
}
|
||||
)
|
||||
return data, max_sequence + 3
|
||||
|
||||
def _get_picking_type_update_values(self):
|
||||
data = super()._get_picking_type_update_values()
|
||||
picking_types = {
|
||||
"rma_in_type_id": {"default_location_dest_id": self.rma_loc_id.id},
|
||||
"rma_out_type_id": {"default_location_src_id": self.rma_loc_id.id},
|
||||
}
|
||||
if self.env.context.get("rma_post_init_hook"):
|
||||
return picking_types
|
||||
data.update(picking_types)
|
||||
return data
|
||||
|
||||
def _create_or_update_sequences_and_picking_types(self):
|
||||
data = super()._create_or_update_sequences_and_picking_types()
|
||||
stock_picking_type = self.env["stock.picking.type"]
|
||||
if "out_type_id" in data:
|
||||
rma_out_type = stock_picking_type.browse(data["rma_out_type_id"])
|
||||
rma_out_type.write(
|
||||
{"return_picking_type_id": data.get("rma_in_type_id", False)}
|
||||
)
|
||||
if "rma_in_type_id" in data:
|
||||
rma_in_type = stock_picking_type.browse(data["rma_in_type_id"])
|
||||
rma_in_type.write(
|
||||
{"return_picking_type_id": data.get("rma_out_type_id", False)}
|
||||
)
|
||||
return data
|
||||
|
||||
def _get_routes_values(self):
|
||||
res = super()._get_routes_values()
|
||||
rma_routes = {
|
||||
"rma_in_route_id": {
|
||||
"routing_key": "rma_in",
|
||||
"depends": ["active"],
|
||||
"route_update_values": {
|
||||
"name": self._format_routename("RMA In"),
|
||||
"active": self.active,
|
||||
},
|
||||
"route_create_values": {
|
||||
"warehouse_selectable": True,
|
||||
"company_id": self.company_id.id,
|
||||
"sequence": 100,
|
||||
},
|
||||
"rules_values": {
|
||||
"active": True,
|
||||
},
|
||||
},
|
||||
"rma_out_route_id": {
|
||||
"routing_key": "rma_out",
|
||||
"depends": ["active"],
|
||||
"route_update_values": {
|
||||
"name": self._format_routename("RMA Out"),
|
||||
"active": self.active,
|
||||
},
|
||||
"route_create_values": {
|
||||
"warehouse_selectable": True,
|
||||
"company_id": self.company_id.id,
|
||||
"sequence": 110,
|
||||
},
|
||||
"rules_values": {
|
||||
"active": True,
|
||||
},
|
||||
},
|
||||
}
|
||||
if self.env.context.get("rma_post_init_hook"):
|
||||
return rma_routes
|
||||
res.update(rma_routes)
|
||||
return res
|
||||
|
||||
def get_rules_dict(self):
|
||||
res = super().get_rules_dict()
|
||||
customer_loc, supplier_loc = self._get_partner_locations()
|
||||
for warehouse in self:
|
||||
res[warehouse.id].update(
|
||||
{
|
||||
"rma_in": [
|
||||
self.Routing(
|
||||
customer_loc,
|
||||
warehouse.rma_loc_id,
|
||||
warehouse.rma_in_type_id,
|
||||
"pull",
|
||||
)
|
||||
],
|
||||
"rma_out": [
|
||||
self.Routing(
|
||||
warehouse.rma_loc_id,
|
||||
customer_loc,
|
||||
warehouse.rma_out_type_id,
|
||||
"pull",
|
||||
)
|
||||
],
|
||||
}
|
||||
)
|
||||
return res
|
||||
Loading…
Add table
Add a link
Reference in a new issue