mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
91 lines
4.1 KiB
Python
91 lines
4.1 KiB
Python
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class RMAMakeRTV(models.TransientModel):
|
|
_name = 'rma.make.rtv'
|
|
_description = 'Make RTV Batch'
|
|
|
|
partner_id = fields.Many2one('res.partner', string='Vendor')
|
|
partner_shipping_id = fields.Many2one('res.partner', string='Shipping Address')
|
|
rma_line_ids = fields.One2many('rma.make.rtv.line', 'rma_make_rtv_id', string='Lines')
|
|
|
|
@api.model
|
|
def default_get(self, fields):
|
|
result = super().default_get(fields)
|
|
if 'rma_line_ids' in fields and self._context.get('active_model') == 'rma.rma' and self._context.get('active_ids'):
|
|
active_ids = self._context.get('active_ids')
|
|
rmas = self.env['rma.rma'].browse(active_ids)
|
|
result['rma_line_ids'] = [(0, 0, {
|
|
'rma_id': r.id,
|
|
'rma_state': r.state,
|
|
'rma_claim_number': r.claim_number,
|
|
}) for r in rmas]
|
|
rma_partner = rmas.mapped('partner_id')
|
|
if rma_partner:
|
|
result['partner_id'] = rma_partner[0].id
|
|
return result
|
|
|
|
def create_batch(self):
|
|
self.ensure_one()
|
|
if self.rma_line_ids.filtered(lambda rl: rl.rma_id.state != 'draft'):
|
|
raise UserError('All RMAs must be in the draft state.')
|
|
rma_partner = self.rma_line_ids.mapped('rma_id.partner_id')
|
|
if rma_partner and len(rma_partner) != 1:
|
|
raise UserError('All RMAs must be for the same partner.')
|
|
elif not rma_partner and not self.partner_id:
|
|
raise UserError('Please select a Vendor')
|
|
elif not rma_partner:
|
|
rma_partner = self.partner_id
|
|
rma_partner_shipping = self.partner_shipping_id or rma_partner
|
|
# update all RMA's to the currently selected vendor
|
|
self.rma_line_ids.mapped('rma_id').write({
|
|
'partner_id': rma_partner.id,
|
|
'partner_shipping_id': rma_partner_shipping.id,
|
|
})
|
|
if len(self.rma_line_ids.mapped('rma_id.template_id')) != 1:
|
|
raise UserError('All RMAs must be of the same template.')
|
|
|
|
in_values = None
|
|
out_values = None
|
|
for rma in self.rma_line_ids.mapped('rma_id'):
|
|
if rma.template_id.create_in_picking:
|
|
if not in_values:
|
|
in_values = rma.template_id._values_for_in_picking(rma)
|
|
in_values['origin'] = [in_values['origin']]
|
|
else:
|
|
other_in_values = rma.template_id._values_for_in_picking(rma)
|
|
in_values['move_lines'] += other_in_values['move_lines']
|
|
if rma.template_id.create_out_picking:
|
|
if not out_values:
|
|
out_values = rma.template_id._values_for_out_picking(rma)
|
|
out_values['origin'] = [out_values['origin']]
|
|
else:
|
|
other_out_values = rma.template_id._values_for_out_picking(rma)
|
|
out_values['move_lines'] += other_out_values['move_lines']
|
|
in_picking_id = False
|
|
out_picking_id = False
|
|
if in_values:
|
|
in_values['origin'] = ', '.join(in_values['origin'])
|
|
in_picking = self.env['stock.picking'].sudo().create(in_values)
|
|
in_picking_id = in_picking.id
|
|
if out_values:
|
|
out_values['origin'] = ', '.join(out_values['origin'])
|
|
out_picking = self.env['stock.picking'].sudo().create(out_values)
|
|
out_picking_id = out_picking.id
|
|
rmas = self.rma_line_ids.mapped('rma_id').with_context(rma_in_picking_id=in_picking_id, rma_out_picking_id=out_picking_id)
|
|
# action_confirm known to be multi-aware and makes only one context
|
|
rmas.action_confirm()
|
|
|
|
|
|
class RMAMakeRTVLine(models.TransientModel):
|
|
_name = 'rma.make.rtv.line'
|
|
_description = 'Make RTV Batch RMA'
|
|
|
|
rma_make_rtv_id = fields.Many2one('rma.make.rtv')
|
|
rma_id = fields.Many2one('rma.rma')
|
|
rma_state = fields.Selection(related='rma_id.state')
|
|
rma_claim_number = fields.Char(related='rma_id.claim_number', readonly=False)
|