Files
rma/rma_sale/models/rma.py
Pedro M. Baeza 8b62b51e8d [FIX+IMP] rma_sale: Proper dependency + propagate salesman
- Proper dependency is `sale_stock`, not `sale`, as we are using some fields added
  by this module.
- Propagate salesman from sales order when available.

TT25525

rma_sale 12.0.1.4.1
2020-11-04 10:15:04 -05:00

91 lines
3.2 KiB
Python

# Copyright 2020 Tecnativa - Ernesto Tejeda
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class Rma(models.Model):
_inherit = "rma"
order_id = fields.Many2one(
comodel_name='sale.order',
string='Sale Order',
domain="["
" ('partner_id', 'child_of', commercial_partner_id),"
" ('state', 'in', ['sale', 'done']),"
"]",
readonly=True,
states={'draft': [('readonly', False)]},
)
allowed_picking_ids = fields.Many2many(
comodel_name='stock.picking',
compute="_compute_allowed_picking_ids",
)
picking_id = fields.Many2one(
domain="[('id', 'in', allowed_picking_ids)]",
)
allowed_move_ids = fields.Many2many(
comodel_name='sale.order.line',
compute="_compute_allowed_move_ids",
)
move_id = fields.Many2one(
domain="[('id', 'in', allowed_move_ids)]",
)
allowed_product_ids = fields.Many2many(
comodel_name='product.product',
compute="_compute_allowed_product_ids",
)
product_id = fields.Many2one(
domain="[('id', 'in', allowed_product_ids)]",
)
@api.depends('partner_id', 'order_id')
def _compute_allowed_picking_ids(self):
domain = [('state', '=', 'done'),
('picking_type_id.code', '=', 'outgoing')]
for rec in self:
# if rec.partner_id:
commercial_partner = rec.partner_id.commercial_partner_id
domain.append(('partner_id', 'child_of', commercial_partner.id))
if rec.order_id:
domain.append(('sale_id', '=', rec.order_id.id))
rec.allowed_picking_ids = self.env['stock.picking'].search(domain)
@api.depends('order_id', 'picking_id')
def _compute_allowed_move_ids(self):
for rec in self:
if rec.order_id:
order_move = rec.order_id.order_line.mapped('move_ids')
rec.allowed_move_ids = order_move.filtered(
lambda r: r.picking_id == self.picking_id).ids
else:
rec.allowed_move_ids = self.picking_id.move_lines.ids
@api.depends('order_id')
def _compute_allowed_product_ids(self):
for rec in self:
if rec.order_id:
order_product = rec.order_id.order_line.mapped('product_id')
rec.allowed_product_ids = order_product.filtered(
lambda r: r.type in ['consu', 'product']).ids
else:
rec.allowed_product_ids = self.env['product.product'].search(
[('type', 'in', ['consu', 'product'])]).ids
@api.onchange("partner_id")
def _onchange_partner_id(self):
res = super()._onchange_partner_id()
self.order_id = False
return res
@api.onchange('order_id')
def _onchange_order_id(self):
self.product_id = self.picking_id = False
def _prepare_refund(self, invoice_form, origin):
"""Inject salesman from sales order (if any)"""
res = super()._prepare_refund(invoice_form, origin)
if self.order_id:
invoice_form.user_id = self.order_id.user_id
return res