From 260cd2a394195f3d1da848916cf958b0f12e277c Mon Sep 17 00:00:00 2001 From: snt Date: Thu, 12 Sep 2024 21:43:10 +0200 Subject: [PATCH] =?UTF-8?q?arregla=20el=20dep=C3=B3sito=20de=20entrada,=20?= =?UTF-8?q?no=20probado=20con=20salida,=20pero=20deber=C3=ADa=20funcionar?= =?UTF-8?q?=20igual.=20Cambia=20el=20location=20dst=20en=20el=20onchange?= =?UTF-8?q?=20partner=5Fid.=20Tambi=C3=A9n=20se=20asegura=20que=20si=20se?= =?UTF-8?q?=20han=20creado=20stock=20moves=20se=20cambie=20su=20location?= =?UTF-8?q?=20dst.=20El=20create=20y=20el=20write=20=20no=20s=C3=A9=20si?= =?UTF-8?q?=20son=20necesarios,=20a=20lo=20mejor=20para=20importaciones,?= =?UTF-8?q?=20duplicados=20y=20as=C3=AD.=20El=20escribir=20el=20stock=20lo?= =?UTF-8?q?cation=20directamnete=20no=20es=20muy=20elegante,=20lo=20suyo?= =?UTF-8?q?=20ser=C3=ADa=20sobreescribir=20el=20onchange=5Fpartner=5Fid=20?= =?UTF-8?q?de=20stock.move=20y=20dejar=20que=20se=20enargue=20de=20locatio?= =?UTF-8?q?n=20dst=20ah=C3=AD.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/stock_picking.py | 79 ++++++++++++------- 1 file changed, 49 insertions(+), 30 deletions(-) diff --git a/stock_picking_deposito/models/stock_picking.py b/stock_picking_deposito/models/stock_picking.py index 879c484..9340d11 100644 --- a/stock_picking_deposito/models/stock_picking.py +++ b/stock_picking_deposito/models/stock_picking.py @@ -1,53 +1,72 @@ # Copyright 2021-2024 Criptomart # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) -import logging - from odoo import api, models, fields from odoo.exceptions import ValidationError -_logger = logging.getLogger(__name__) class PickingType(models.Model): _inherit = 'stock.picking.type' is_deposit = fields.Boolean( string='Depósito', - help='Éste albarán es un depósito, no es una venta final.', + help='Los albaranes creados con éste tipo son depósitos, no son compras/ventas finales.', default= False, ) + class Picking(models.Model): _inherit = 'stock.picking' @api.model def create(self, vals): - pick = super().create(vals) - if pick.picking_type_id.is_deposit: - pick.change_dest_location() - return pick + if vals.get('picking_type_id'): + picking_type = self.env['stock.picking.type'].browse(vals.get('picking_type_id')) + if picking_type.is_deposit: + self.change_dest_location(vals, picking_type.code) + return super().create(vals) - @api.onchange("partner_id") + def write(self, vals): + if vals.get('picking_type_id'): + picking_type = self.env['stock.picking.type'].browse(vals.get('picking_type_id')) + if picking_type.is_deposit: + self.change_dest_location(vals, picking_type.code) + return super().write(vals) + + @api.onchange('partner_id') def onchange_partner_id(self): - if self.partner_id and self.picking_type_id.is_deposit: - if self.picking_type_id.code == 'internal': - self.location_dest_id = self.partner_id.deposit_sale_location_id - elif self.picking_type_id.code == 'incoming': - self.location_dest_id = self.partner_id.deposit_buy_location_id - _logger.warning("location id: %s %s", self.location_dest_id, self.partner_id.deposit_sale_location_id) + for picking in self: + if not self.partner_id: + return + if self.picking_type_id.is_deposit: + if self.picking_type_id.code == 'internal': + if not self.partner_id.deposit_sale_accept: + raise ValidationError("Éste cliente no acepta material en depósito, configúralo antes de crear un depósito para él.") + return + self.location_dest_id = self.partner_id.deposit_sale_location_id.id, + elif self.picking_type_id.code == 'incoming': + if not self.partner_id.deposit_buy_accept: + raise ValidationError("Éste proveedor no suministra material en depósito, configúralo antes de crear un depósito para él.") + return + self.location_dest_id = self.partner_id.deposit_buy_location_id.id + moves = self.env['stock.move'].search([('picking_id', '=', self.id)]) + for move in moves: + move.write({'partner_id': self.partner_id.id}, {'location_dest_id': self.location_dest_id}) - def change_dest_location(self): - if self.picking_type_id.code == 'internal': - if not self.partner_id.deposit_sale_accept: - raise ValidationError("Éste cliente no acepta material en depósito, configúralo antes de crear un depósito para él.") - return - self.update({ - 'location_dest_id': self.partner_id.deposit_sale_location_id.id, - }) - elif self.picking_type_id.code == 'incoming': - if not self.partner_id.deposit_buy_accept: - raise ValidationError("Éste proveedor no suministra material en depósito, configúralo antes de crear un depósito para él.") - return - self.update({ - 'location_dest_id': self.partner_id.deposit_buy_location_id.id, - }) + def change_dest_location(self, vals, code): + if vals.get('partner_id'): + partner = self.env['res.partner'].browse(vals.get('partner_id')) + if code == 'internal': + if not partner.deposit_sale_accept: + raise ValidationError("Éste cliente no acepta material en depósito, configúralo antes de crear un depósito para él.") + return + vals.update({ + 'location_dest_id': partner.deposit_sale_location_id.id, + }) + elif code == 'incoming': + if not partner.deposit_buy_accept: + raise ValidationError("Éste proveedor no suministra material en depósito, configúralo antes de crear un depósito para él.") + return + vals.update({ + 'location_dest_id': partner.deposit_buy_location_id.id, + })