summaryrefslogtreecommitdiff
path: root/addons/mrp/static/src/js/mrp_bom_report.js
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/mrp/static/src/js/mrp_bom_report.js
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/mrp/static/src/js/mrp_bom_report.js')
-rw-r--r--addons/mrp/static/src/js/mrp_bom_report.js228
1 files changed, 228 insertions, 0 deletions
diff --git a/addons/mrp/static/src/js/mrp_bom_report.js b/addons/mrp/static/src/js/mrp_bom_report.js
new file mode 100644
index 00000000..cb56c797
--- /dev/null
+++ b/addons/mrp/static/src/js/mrp_bom_report.js
@@ -0,0 +1,228 @@
+odoo.define('mrp.mrp_bom_report', function (require) {
+'use strict';
+
+var core = require('web.core');
+var framework = require('web.framework');
+var stock_report_generic = require('stock.stock_report_generic');
+
+var QWeb = core.qweb;
+var _t = core._t;
+
+var MrpBomReport = stock_report_generic.extend({
+ events: {
+ 'click .o_mrp_bom_unfoldable': '_onClickUnfold',
+ 'click .o_mrp_bom_foldable': '_onClickFold',
+ 'click .o_mrp_bom_action': '_onClickAction',
+ 'click .o_mrp_show_attachment_action': '_onClickShowAttachment',
+ },
+ get_html: function() {
+ var self = this;
+ var args = [
+ this.given_context.active_id,
+ this.given_context.searchQty || false,
+ this.given_context.searchVariant,
+ ];
+ return this._rpc({
+ model: 'report.mrp.report_bom_structure',
+ method: 'get_html',
+ args: args,
+ context: this.given_context,
+ })
+ .then(function (result) {
+ self.data = result;
+ if (! self.given_context.searchVariant) {
+ self.given_context.searchVariant = result.is_variant_applied && Object.keys(result.variants)[0];
+ }
+ });
+ },
+ set_html: function() {
+ var self = this;
+ return this._super().then(function () {
+ self.$('.o_content').html(self.data.lines);
+ self.renderSearch();
+ self.update_cp();
+ });
+ },
+ render_html: function(event, $el, result){
+ if (result.indexOf('mrp.document') > 0) {
+ if (this.$('.o_mrp_has_attachments').length === 0) {
+ var column = $('<th/>', {
+ class: 'o_mrp_has_attachments',
+ title: 'Files attached to the product Attachments',
+ text: 'Attachments',
+ });
+ this.$('table thead th:last-child').after(column);
+ }
+ }
+ $el.after(result);
+ $(event.currentTarget).toggleClass('o_mrp_bom_foldable o_mrp_bom_unfoldable fa-caret-right fa-caret-down');
+ this._reload_report_type();
+ },
+ get_bom: function(event) {
+ var self = this;
+ var $parent = $(event.currentTarget).closest('tr');
+ var activeID = $parent.data('id');
+ var productID = $parent.data('product_id');
+ var lineID = $parent.data('line');
+ var qty = $parent.data('qty');
+ var level = $parent.data('level') || 0;
+ return this._rpc({
+ model: 'report.mrp.report_bom_structure',
+ method: 'get_bom',
+ args: [
+ activeID,
+ productID,
+ parseFloat(qty),
+ lineID,
+ level + 1,
+ ]
+ })
+ .then(function (result) {
+ self.render_html(event, $parent, result);
+ });
+ },
+ get_operations: function(event) {
+ var self = this;
+ var $parent = $(event.currentTarget).closest('tr');
+ var activeID = $parent.data('bom-id');
+ var qty = $parent.data('qty');
+ var level = $parent.data('level') || 0;
+ return this._rpc({
+ model: 'report.mrp.report_bom_structure',
+ method: 'get_operations',
+ args: [
+ activeID,
+ parseFloat(qty),
+ level + 1
+ ]
+ })
+ .then(function (result) {
+ self.render_html(event, $parent, result);
+ });
+ },
+ update_cp: function () {
+ var status = {
+ cp_content: {
+ $buttons: this.$buttonPrint,
+ $searchview: this.$searchView
+ },
+ };
+ return this.updateControlPanel(status);
+ },
+ renderSearch: function () {
+ this.$buttonPrint = $(QWeb.render('mrp.button', {'is_variant_applied': this.data.is_variant_applied}));
+ this.$buttonPrint.find('.o_mrp_bom_print').on('click', this._onClickPrint.bind(this));
+ this.$buttonPrint.find('.o_mrp_bom_print_all_variants').on('click', this._onClickPrint.bind(this));
+ this.$buttonPrint.find('.o_mrp_bom_print_unfolded').on('click', this._onClickPrint.bind(this));
+ this.$searchView = $(QWeb.render('mrp.report_bom_search', _.omit(this.data, 'lines')));
+ this.$searchView.find('.o_mrp_bom_report_qty').on('change', this._onChangeQty.bind(this));
+ this.$searchView.find('.o_mrp_bom_report_variants').on('change', this._onChangeVariants.bind(this));
+ this.$searchView.find('.o_mrp_bom_report_type').on('change', this._onChangeType.bind(this));
+ },
+ _onClickPrint: function (ev) {
+ var childBomIDs = _.map(this.$el.find('.o_mrp_bom_foldable').closest('tr'), function (el) {
+ return $(el).data('id');
+ });
+ framework.blockUI();
+ var reportname = 'mrp.report_bom_structure?docids=' + this.given_context.active_id +
+ '&report_type=' + this.given_context.report_type +
+ '&quantity=' + (this.given_context.searchQty || 1);
+ if (! $(ev.currentTarget).hasClass('o_mrp_bom_print_unfolded')) {
+ reportname += '&childs=' + JSON.stringify(childBomIDs);
+ }
+ if ($(ev.currentTarget).hasClass('o_mrp_bom_print_all_variants')) {
+ reportname += '&all_variants=' + 1;
+ } else if (this.given_context.searchVariant) {
+ reportname += '&variant=' + this.given_context.searchVariant;
+ }
+ var action = {
+ 'type': 'ir.actions.report',
+ 'report_type': 'qweb-pdf',
+ 'report_name': reportname,
+ 'report_file': 'mrp.report_bom_structure',
+ };
+ return this.do_action(action).then(function (){
+ framework.unblockUI();
+ });
+ },
+ _onChangeQty: function (ev) {
+ var qty = $(ev.currentTarget).val().trim();
+ if (qty) {
+ this.given_context.searchQty = parseFloat(qty);
+ this._reload();
+ }
+ },
+ _onChangeType: function (ev) {
+ var report_type = $("option:selected", $(ev.currentTarget)).data('type');
+ this.given_context.report_type = report_type;
+ this._reload_report_type();
+ },
+ _onChangeVariants: function (ev) {
+ this.given_context.searchVariant = $(ev.currentTarget).val();
+ this._reload();
+ },
+ _onClickUnfold: function (ev) {
+ var redirect_function = $(ev.currentTarget).data('function');
+ this[redirect_function](ev);
+ },
+ _onClickFold: function (ev) {
+ this._removeLines($(ev.currentTarget).closest('tr'));
+ $(ev.currentTarget).toggleClass('o_mrp_bom_foldable o_mrp_bom_unfoldable fa-caret-right fa-caret-down');
+ },
+ _onClickAction: function (ev) {
+ ev.preventDefault();
+ return this.do_action({
+ type: 'ir.actions.act_window',
+ res_model: $(ev.currentTarget).data('model'),
+ res_id: $(ev.currentTarget).data('res-id'),
+ context: {
+ 'active_id': $(ev.currentTarget).data('res-id')
+ },
+ views: [[false, 'form']],
+ target: 'current'
+ });
+ },
+ _onClickShowAttachment: function (ev) {
+ ev.preventDefault();
+ var ids = $(ev.currentTarget).data('res-id');
+ return this.do_action({
+ name: _t('Attachments'),
+ type: 'ir.actions.act_window',
+ res_model: $(ev.currentTarget).data('model'),
+ domain: [['id', 'in', ids]],
+ views: [[false, 'kanban'], [false, 'list'], [false, 'form']],
+ view_mode: 'kanban,list,form',
+ target: 'current',
+ });
+ },
+ _reload: function () {
+ var self = this;
+ return this.get_html().then(function () {
+ self.$('.o_content').html(self.data.lines);
+ self._reload_report_type();
+ });
+ },
+ _reload_report_type: function () {
+ this.$('.o_mrp_bom_cost.o_hidden, .o_mrp_prod_cost.o_hidden').toggleClass('o_hidden');
+ if (this.given_context.report_type === 'bom_structure') {
+ this.$('.o_mrp_bom_cost, .o_mrp_prod_cost').toggleClass('o_hidden');
+ }
+ },
+ _removeLines: function ($el) {
+ var self = this;
+ var activeID = $el.data('id');
+ _.each(this.$('tr[parent_id='+ activeID +']'), function (parent) {
+ var $parent = self.$(parent);
+ var $el = self.$('tr[parent_id='+ $parent.data('id') +']');
+ if ($el.length) {
+ self._removeLines($parent);
+ }
+ $parent.remove();
+ });
+ },
+});
+
+core.action_registry.add('mrp_bom_report', MrpBomReport);
+return MrpBomReport;
+
+});