From 9aaddf07f5b62db092a05b5d2c34aed01df940cb Mon Sep 17 00:00:00 2001 From: Parthiv Patel Date: Mon, 2 Jan 2023 08:35:43 +0000 Subject: [PATCH] [PATCH] Upstream patch - 02012023 --- addons/delivery/models/__init__.py | 2 +- addons/delivery/models/stock_move.py | 17 ++++++++++++++- addons/delivery/models/stock_picking.py | 21 ++++++++++++++++++- .../src/js/project_task_kanban_examples.js | 2 +- .../static/src/js/editor/snippets.editor.js | 11 ++++++++++ .../static/src/js/editor/snippets.options.js | 2 ++ .../static/src/js/wysiwyg/widgets/media.js | 3 ++- .../static/src/js/editor/snippets.options.js | 18 +++++++++++----- 8 files changed, 66 insertions(+), 10 deletions(-) diff --git a/addons/delivery/models/__init__.py b/addons/delivery/models/__init__.py index 39ec187c88..123ee42e54 100644 --- a/addons/delivery/models/__init__.py +++ b/addons/delivery/models/__init__.py @@ -7,5 +7,5 @@ from . import product_packaging from . import product_template from . import sale_order from . import partner -from . import stock_picking from . import stock_move +from . import stock_picking diff --git a/addons/delivery/models/stock_move.py b/addons/delivery/models/stock_move.py index 902fb58dc8..37db0ab535 100644 --- a/addons/delivery/models/stock_move.py +++ b/addons/delivery/models/stock_move.py @@ -2,12 +2,27 @@ # Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details. from flectra import api, fields, models - +from flectra.tools.sql import column_exists, create_column class StockMove(models.Model): _inherit = 'stock.move' + def _auto_init(self): + if not column_exists(self.env.cr, "stock_move", "weight"): + # In case of a big database with a lot of stock moves, the RAM gets exhausted + # To prevent a process from being killed We create the column 'weight' manually + # Then we do the computation in a query by multiplying product weight with qty + create_column(self.env.cr, "stock_move", "weight", "numeric") + self.env.cr.execute(""" + UPDATE stock_move move + SET weight = move.product_qty * product.weight + FROM product_product product + WHERE move.product_id = product.id + AND move.state != 'cancel' + """) + return super()._auto_init() + weight = fields.Float(compute='_cal_move_weight', digits='Stock Weight', store=True, compute_sudo=True) @api.depends('product_id', 'product_uom_qty', 'product_uom') diff --git a/addons/delivery/models/stock_picking.py b/addons/delivery/models/stock_picking.py index 761a092edb..c6bfc8c592 100644 --- a/addons/delivery/models/stock_picking.py +++ b/addons/delivery/models/stock_picking.py @@ -6,7 +6,7 @@ from collections import defaultdict from flectra import models, fields, api, _ from flectra.exceptions import UserError - +from flectra.tools.sql import column_exists, create_column class StockQuantPackage(models.Model): @@ -55,6 +55,25 @@ class StockQuantPackage(models.Model): class StockPicking(models.Model): _inherit = 'stock.picking' + def _auto_init(self): + if not column_exists(self.env.cr, "stock_picking", "weight"): + # In order to speed up module installation when dealing with hefty data + # We create the column weight manually, but the computation will be skipped + # Therefore we do the computation in a query by getting weight sum from stock moves + create_column(self.env.cr, "stock_picking", "weight", "numeric") + self.env.cr.execute(""" + WITH computed_weight AS ( + SELECT SUM(weight) AS weight_sum, picking_id + FROM stock_move + WHERE picking_id IS NOT NULL + GROUP BY picking_id + ) + UPDATE stock_picking + SET weight = weight_sum + FROM computed_weight + WHERE stock_picking.id = computed_weight.picking_id; + """) + return super()._auto_init() @api.depends('move_line_ids', 'move_line_ids.result_package_id') def _compute_packages(self): diff --git a/addons/project/static/src/js/project_task_kanban_examples.js b/addons/project/static/src/js/project_task_kanban_examples.js index f693b98435..1ed848ae92 100644 --- a/addons/project/static/src/js/project_task_kanban_examples.js +++ b/addons/project/static/src/js/project_task_kanban_examples.js @@ -31,7 +31,7 @@ function escFormat() { var args = arguments; return { toString: function () { - args[0] = _.unescape(args[0]); + args[0] = _.escape(args[0]); return _.str.sprintf.apply(_.str, args); }, }; diff --git a/addons/web_editor/static/src/js/editor/snippets.editor.js b/addons/web_editor/static/src/js/editor/snippets.editor.js index 37a0a856e5..e29a82eb9b 100644 --- a/addons/web_editor/static/src/js/editor/snippets.editor.js +++ b/addons/web_editor/static/src/js/editor/snippets.editor.js @@ -708,6 +708,7 @@ var SnippetEditor = Widget.extend({ width: self.$target.width(), height: self.$target.height() }; + const closestFormEl = this.$target[0].closest('form'); self.$target.after('