From 971a20fddc029182145b76cbcf1597b8b682610c Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Fri, 31 Mar 2017 13:55:22 +0200 Subject: [PATCH] [FIX][web_export_view] Remove monetary formatting (#594) Monetary fields were being exported empty because the parsing failed. In the way of correctly exporting them as numbers, this chunk of code's performance has been improved. --- .../static/src/js/web_export_view.js | 70 +++++++++---------- 1 file changed, 33 insertions(+), 37 deletions(-) diff --git a/web_export_view/static/src/js/web_export_view.js b/web_export_view/static/src/js/web_export_view.js index 68be0964..3b4fb0bc 100644 --- a/web_export_view/static/src/js/web_export_view.js +++ b/web_export_view/static/src/js/web_export_view.js @@ -46,49 +46,45 @@ odoo.define('web_export_view', function (require) { export_columns_names.push(this.string); } }); - var rows = view.$el.find('.o_list_view > tbody > tr'); var export_rows = []; - $.each(rows, function () { - var $row = $(this); + $.blockUI(); + if (children) { // find only rows with data - if ($row.attr('data-id')) { + view.$el.find('.o_list_view > tbody > tr[data-id]:has(.o_list_record_selector input:checkbox:checked)') + .each(function () { + var $row = $(this); var export_row = []; - var checked = $row.find('.o_list_record_selector input[type=checkbox]').is(':checked'); - if (children && checked === true) { - $.each(export_columns_keys, function () { - var $cell = $row.find('td[data-field="' + this + '"]') - var $cellcheckbox = $cell.find('.o_checkbox input[type=checkbox]'); - if ($cellcheckbox.length) { - if ($cellcheckbox.is(':checked')) { - export_row.push(_t("True")); - } - else { - export_row.push(_t("False")); - } + $.each(export_columns_keys, function () { + var $cell = $row.find('td[data-field="' + this + '"]') + var $cellcheckbox = $cell.find('.o_checkbox input:checkbox'); + if ($cellcheckbox.length) { + export_row.push( + $cellcheckbox.is(":checked") + ? _t("True") : _t("False") + ); + } + else { + var text = $cell.text().trim(); + if ($cell.hasClass("o_list_number")) { + export_row.push(parseFloat( + text + // Remove thousands separator + .split(_t.database.parameters.thousands_sep) + .join("") + // Always use a `.` as decimal separator + .replace(_t.database.parameters.decimal_point, ".") + // Remove non-numeric characters + .replace(/[^\d\.-]/g, "") + )); } else { - var cell = $cell.get(0); - var text = cell.text || cell.textContent || cell.innerHTML || ""; - - if (cell.classList.contains("o_list_number")) { - var tmp2 = text; - do { - var tmp = tmp2; - tmp2 = tmp.replace(_t.database.parameters.thousands_sep, ""); - } while (tmp !== tmp2); - tmp2 = tmp.replace(_t.database.parameters.decimal_point, "."); - export_row.push(parseFloat(tmp2)); - } - else { - export_row.push(text.trim()); - } + export_row.push(text); } - }); - export_rows.push(export_row); - } - } - }); - $.blockUI(); + } + }); + export_rows.push(export_row); + }); + } view.session.get_file({ url: '/web/export/xls_view', data: {data: JSON.stringify({