-
Notifications
You must be signed in to change notification settings - Fork 72
[MIG] batch picking modules #829
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: 19.0
Are you sure you want to change the base?
Changes from all commits
ff625dc
c43e8d7
0a98a26
fb2bf72
1f8ef14
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -18,34 +18,22 @@ class StockPickingBatch(models.Model): | |||||||||||
| # required=True, | ||||||||||||
| help="If you choose a partner then only pickings of this partner will" "be sellectable", | ||||||||||||
| ) | ||||||||||||
| voucher_number = fields.Char() | ||||||||||||
| voucher_required = fields.Boolean( | ||||||||||||
| # related='picking_type_id.voucher_required', | ||||||||||||
| compute="_compute_picking_type_data", | ||||||||||||
| ) | ||||||||||||
| restrict_number_package = fields.Boolean( | ||||||||||||
| compute="_compute_picking_type_data", | ||||||||||||
| ) | ||||||||||||
| number_of_packages = fields.Integer( | ||||||||||||
| copy=False, | ||||||||||||
| ) | ||||||||||||
|
|
||||||||||||
| # restrict_number_package = fields.Boolean( | ||||||||||||
| # compute="_compute_picking_type_data", | ||||||||||||
| # ) | ||||||||||||
| # number_of_packages = fields.Integer( | ||||||||||||
| # copy=False, | ||||||||||||
| # ) | ||||||||||||
| picking_type_id = fields.Many2one(required=True) | ||||||||||||
|
|
||||||||||||
| picking_type_ids = fields.Many2many( | ||||||||||||
| "stock.picking.type", | ||||||||||||
| # related='picking_type_id.voucher_required', | ||||||||||||
| compute="_compute_picking_type_data", | ||||||||||||
| ) | ||||||||||||
| vouchers = fields.Char( | ||||||||||||
| related="picking_ids.vouchers", | ||||||||||||
| ) | ||||||||||||
|
|
||||||||||||
| picking_count = fields.Integer( | ||||||||||||
| string="# Transferencias", | ||||||||||||
| compute="_compute_picking_count", | ||||||||||||
| ) | ||||||||||||
|
|
||||||||||||
| notes = fields.Text(help="free form remarks") | ||||||||||||
|
|
||||||||||||
| def _compute_picking_count(self): | ||||||||||||
|
|
@@ -59,40 +47,43 @@ def _compute_picking_count(self): | |||||||||||
| for batch in self: | ||||||||||||
| batch.picking_count = counts.get(batch.id, 0) | ||||||||||||
|
|
||||||||||||
| @api.depends("partner_id") | ||||||||||||
| def _compute_allowed_picking_ids(self): | ||||||||||||
| super()._compute_allowed_picking_ids() | ||||||||||||
| for rec in self.filtered("partner_id"): | ||||||||||||
| rec.allowed_picking_ids = rec.allowed_picking_ids.filtered(lambda p: p.partner_id == rec.partner_id) | ||||||||||||
|
|
||||||||||||
| def write(self, vals): | ||||||||||||
| # Interceptamos las operaciones de picking_ids para evitar que se borren físicamente | ||||||||||||
| # En lugar de comando 2 (delete), usamos comando 3 (unlink) que solo desvincula | ||||||||||||
| if "picking_ids" in vals: | ||||||||||||
| new_picking_ops = [] | ||||||||||||
| for operation in vals["picking_ids"]: | ||||||||||||
| if operation[0] == 2: # Si es un delete (2), lo convertimos a unlink (3) | ||||||||||||
| new_picking_ops.append((3, operation[1])) # Unlink en lugar de delete | ||||||||||||
| else: | ||||||||||||
| new_picking_ops.append(operation) | ||||||||||||
| vals["picking_ids"] = new_picking_ops | ||||||||||||
| return super().write(vals) | ||||||||||||
|
|
||||||||||||
| @api.depends("picking_ids") | ||||||||||||
| def _compute_picking_type_data(self): | ||||||||||||
| for rec in self: | ||||||||||||
| types = rec.picking_ids.mapped("picking_type_id") | ||||||||||||
| rec.picking_type_ids = types | ||||||||||||
| rec.voucher_required = any(x.voucher_required for x in types) | ||||||||||||
| rec.restrict_number_package = False | ||||||||||||
| # rec.voucher_required = any(x.voucher_required for x in types) | ||||||||||||
| # rec.restrict_number_package = False | ||||||||||||
| # este viene exigido desde la cia pero seguramente lo movamos a | ||||||||||||
| # exigir desde picking type | ||||||||||||
| # solo es requerido para outgoings | ||||||||||||
| if rec.picking_type_code == "outgoing": | ||||||||||||
| rec.restrict_number_package = any(x.picking_type_id.restrict_number_package for x in rec.picking_ids) | ||||||||||||
| # if rec.picking_type_code == "outgoing": | ||||||||||||
| # rec.restrict_number_package = any(x.picking_type_id.restrict_number_package for x in rec.picking_ids) | ||||||||||||
|
|
||||||||||||
| @api.onchange("picking_type_code", "partner_id") | ||||||||||||
| def changes_set_pickings(self): | ||||||||||||
| # if we change type or partner reset pickings | ||||||||||||
| self.picking_ids = False | ||||||||||||
|
|
||||||||||||
| @api.onchange("voucher_number", "picking_ids") | ||||||||||||
| def format_voucher_number(self): | ||||||||||||
| for rec in self: | ||||||||||||
| if not rec.voucher_number: | ||||||||||||
| continue | ||||||||||||
| voucher_number = self.env["stock.picking.voucher"]._format_document_number(rec.voucher_number) | ||||||||||||
| if voucher_number and voucher_number != rec.voucher_number: | ||||||||||||
| rec.voucher_number = voucher_number | ||||||||||||
|
|
||||||||||||
| def write(self, vals): | ||||||||||||
| if "voucher_number" in vals and vals.get("voucher_number"): | ||||||||||||
| voucher_number = self.env["stock.picking.voucher"]._format_document_number(vals.get("voucher_number")) | ||||||||||||
| if voucher_number and voucher_number != vals.get("voucher_number"): | ||||||||||||
| vals["voucher_number"] = voucher_number | ||||||||||||
| return super().write(vals) | ||||||||||||
|
|
||||||||||||
| def add_picking_operation(self): | ||||||||||||
| self.ensure_one() | ||||||||||||
| view_id = self.env.ref("stock_ux.view_move_line_tree").id | ||||||||||||
|
|
@@ -112,28 +103,14 @@ def action_done(self): | |||||||||||
| # al agregar la restriccion de que al menos una tenga que tener | ||||||||||||
| # cantidad entonces nunca se manda el force_qty al picking | ||||||||||||
| if all(operation.quantity == 0 for operation in rec.move_line_ids): | ||||||||||||
| raise UserError(_("Debe definir Cantidad Realizada en al menos una " "operación.")) | ||||||||||||
| raise UserError(_("Debe definir Cantidad Realizada en al menos una operación.")) | ||||||||||||
|
|
||||||||||||
| if rec.restrict_number_package and not rec.number_of_packages > 0: | ||||||||||||
| raise UserError(_("The number of packages can not be 0")) | ||||||||||||
| if rec.number_of_packages: | ||||||||||||
| rec.picking_ids.write({"number_of_packages": rec.number_of_packages}) | ||||||||||||
| # if rec.restrict_number_package and not rec.number_of_packages > 0: | ||||||||||||
| # raise UserError(_("The number of packages can not be 0")) | ||||||||||||
| # if rec.number_of_packages: | ||||||||||||
| # rec.picking_ids.write({"number_of_packages": rec.number_of_packages}) | ||||||||||||
|
|
||||||||||||
|
Comment on lines
+108
to
112
|
||||||||||||
| # if rec.restrict_number_package and not rec.number_of_packages > 0: | |
| # raise UserError(_("The number of packages can not be 0")) | |
| # if rec.number_of_packages: | |
| # rec.picking_ids.write({"number_of_packages": rec.number_of_packages}) | |
| # Si se requiere la restricción de número de paquetes, validar aquí. |
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Se están eliminando campos almacenados (
voucher_numberynumber_of_packages) del modelostock.picking.batchsin proporcionar un script de migración.Según las guías de migración, cuando se eliminan campos almacenados se debe crear un script de migración en
migrations/19.0.1.0.0/pre-migration.pypara eliminar las columnas de la base de datos de forma limpia:Esto evita warnings y problemas durante la actualización del módulo.