mirror of
https://github.com/OCA/rma.git
synced 2025-02-16 17:11:47 +02:00
72 lines
2.8 KiB
Python
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()
|