Arregla retornos y salidas de depósitos en onchange.

This commit is contained in:
snt 2024-09-18 16:57:25 +02:00 committed by snt
parent a6f6858e8c
commit 4f454347af

View file

@ -29,47 +29,52 @@ class Picking(models.Model):
return super().create(vals) return super().create(vals)
def write(self, vals): def write(self, vals):
if vals.get('picking_type_id'): if vals.get("picking_type_id"):
picking_type = self.env['stock.picking.type'].browse(vals.get('picking_type_id')) picking_type = self.env["stock.picking.type"].browse(vals.get("picking_type_id"))
if picking_type.is_deposit: if picking_type.is_deposit:
self.change_dest_location(vals, picking_type.code) self.change_dest_location(vals, picking_type.code)
return super().write(vals) return super().write(vals)
@api.onchange('partner_id') @api.onchange("partner_id")
def onchange_partner_id(self): def onchange_partner_id(self):
#super().onchange_partner_id()
for picking in self: for picking in self:
if not picking.partner_id: if not picking.partner_id:
return return
_logger.debug("onchange %s", picking.location_dest_id.name) # web cliebt does not update without this, wtf? _logger.warning("onchange %s %s", picking.location_dest_id.name, picking.location_id.name) # web cliebt does not update without this, wtf?
_logger.warning("onchange %s", picking.picking_type_id.code)
if picking.picking_type_id.is_deposit: if picking.picking_type_id.is_deposit:
if picking.picking_type_id.code == 'internal': if picking.picking_type_id.code in ["internal","outgoing"]:
if not picking.partner_id.deposit_sale_accept: if not picking.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.") raise ValidationError("Éste cliente no acepta material en depósito, configúralo antes de crear un depósito para él.")
return return
picking.location_dest_id = picking.partner_id.deposit_sale_location_id.id, picking.location_id = picking.partner_id.deposit_sale_location_id.id,
elif picking.picking_type_id.code == 'incoming': moves = picking.env["stock.move"].search([("picking_id", "=", picking.id)])
for move in moves:
move.write({"partner_id": picking.partner_id.id}, {"location_id": picking.location_id})
elif picking.picking_type_id.code == "incoming":
if not picking.partner_id.deposit_buy_accept: if not picking.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.") raise ValidationError("Éste proveedor no suministra material en depósito, configúralo antes de crear un depósito para él.")
return return
picking.location_dest_id = picking.partner_id.deposit_buy_location_id.id picking.location_dest_id = picking.partner_id.deposit_buy_location_id.id
moves = picking.env['stock.move'].search([('picking_id', '=', picking.id)]) moves = picking.env["stock.move"].search([("picking_id", "=", picking.id)])
for move in moves: for move in moves:
move.write({'partner_id': picking.partner_id.id}, {'location_dest_id': picking.location_dest_id}) move.write({"partner_id": picking.partner_id.id}, {"location_dest_id": picking.location_dest_id})
def change_dest_location(self, vals, code): def change_dest_location(self, vals, code):
if vals.get('partner_id'): if vals.get("partner_id"):
partner = self.env['res.partner'].browse(vals.get('partner_id')) partner = self.env["res.partner"].browse(vals.get("partner_id"))
if code == 'internal': if code == "internal":
if not partner.deposit_sale_accept: 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.") raise ValidationError("Éste cliente no acepta material en depósito, configúralo antes de crear un depósito para él.")
return return
vals.update({ vals.update({
'location_dest_id': partner.deposit_sale_location_id.id, "location_dest_id": partner.deposit_sale_location_id.id,
}) })
elif code == 'incoming': elif code == 'incoming':
if not partner.deposit_buy_accept: 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.") raise ValidationError("Éste proveedor no suministra material en depósito, configúralo antes de crear un depósito para él.")
return return
vals.update({ vals.update({
'location_dest_id': partner.deposit_buy_location_id.id, "location_dest_id": partner.deposit_buy_location_id.id,
}) })