Files
rma/rma/hooks.py
2022-08-10 07:47:02 +02:00

72 lines
2.8 KiB
Python

# Copyright 2020 Tecnativa - Ernesto Tejeda
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import SUPERUSER_ID, api
def post_init_hook(cr, registry):
env = api.Environment(cr, SUPERUSER_ID, {})
def _get_next_picking_type_color():
"""Choose the next available color for the operation types."""
stock_picking_type = env["stock.picking.type"]
picking_type = stock_picking_type.search_read(
[("warehouse_id", "!=", False), ("color", "!=", False)],
["color"],
order="color",
)
all_used_colors = [res["color"] for res in picking_type]
available_colors = [
color for color in range(0, 12) if color not in all_used_colors
]
return available_colors[0] if available_colors else 0
def create_rma_locations(warehouse):
stock_location = env["stock.location"]
if not warehouse.rma_loc_id:
rma_location_vals = warehouse._get_rma_location_values()
warehouse.rma_loc_id = (
stock_location.with_context(active_test=False)
.create(rma_location_vals)
.id
)
def create_rma_picking_types(whs):
ir_sequence_sudo = env["ir.sequence"].sudo()
stock_picking_type = env["stock.picking.type"]
color = _get_next_picking_type_color()
stock_picking = stock_picking_type.search(
[("sequence", "!=", False)], limit=1, order="sequence desc"
)
max_sequence = stock_picking.sequence or 0
create_data = whs._get_picking_type_create_values(max_sequence)[0]
sequence_data = whs._get_sequence_values()
data = {}
for picking_type, values in create_data.items():
if (
picking_type in ["rma_in_type_id", "rma_out_type_id"]
and not whs[picking_type]
):
picking_sequence = sequence_data[picking_type]
sequence = ir_sequence_sudo.create(picking_sequence)
values.update(
warehouse_id=whs.id,
color=color,
sequence_id=sequence.id,
)
data[picking_type] = stock_picking_type.create(values).id
if data:
whs.write(data)
whs.rma_in_type_id.return_picking_type_id = whs.rma_out_type_id.id
whs.rma_out_type_id.return_picking_type_id = whs.rma_in_type_id.id
# Create rma locations and picking types
warehouses = env["stock.warehouse"].search([])
for warehouse in warehouses:
create_rma_locations(warehouse)
create_rma_picking_types(warehouse)
# Create rma sequence per company
for company in env["res.company"].search([]):
company.create_rma_index()