odoo.define('stock.stock_report_generic', function (require) { 'use strict'; var AbstractAction = require('web.AbstractAction'); var core = require('web.core'); var session = require('web.session'); var ReportWidget = require('stock.ReportWidget'); var framework = require('web.framework'); var QWeb = core.qweb; var stock_report_generic = AbstractAction.extend({ hasControlPanel: true, // Stores all the parameters of the action. init: function(parent, action) { this._super.apply(this, arguments); this.actionManager = parent; this.given_context = Object.assign({}, session.user_context); this.controller_url = action.context.url; if (action.context.context) { this.given_context = action.context.context; } this.given_context.active_id = action.context.active_id || action.params.active_id; this.given_context.model = action.context.active_model || false; this.given_context.ttype = action.context.ttype || false; this.given_context.auto_unfold = action.context.auto_unfold || false; this.given_context.lot_name = action.context.lot_name || false; }, willStart: function() { return Promise.all([this._super.apply(this, arguments), this.get_html()]); }, set_html: function() { var self = this; var def = Promise.resolve(); if (!this.report_widget) { this.report_widget = new ReportWidget(this, this.given_context); def = this.report_widget.appendTo(this.$('.o_content')); } return def.then(function () { self.report_widget.$el.html(self.html); self.report_widget.$el.find('.o_report_heading').html('

Traceability Report

'); if (self.given_context.auto_unfold) { _.each(self.$el.find('.fa-caret-right'), function (line) { self.report_widget.autounfold(line, self.given_context.lot_name); }); } }); }, start: async function() { this.controlPanelProps.cp_content = { $buttons: this.$buttons }; await this._super(...arguments); this.set_html(); }, // Fetches the html and is previous report.context if any, else create it get_html: async function() { const { html } = await this._rpc({ args: [this.given_context], method: 'get_html', model: 'stock.traceability.report', }); this.html = html; this.renderButtons(); }, // Updates the control panel and render the elements that have yet to be rendered update_cp: function() { if (!this.$buttons) { this.renderButtons(); } this.controlPanelProps.cp_content = { $buttons: this.$buttons }; return this.updateControlPanel(); }, renderButtons: function() { var self = this; this.$buttons = $(QWeb.render("stockReports.buttons", {})); // pdf output this.$buttons.bind('click', function () { var $element = $(self.$el[0]).find('.o_stock_reports_table tbody tr'); var dict = []; $element.each(function( index ) { var $el = $($element[index]); dict.push({ 'id': $el.data('id'), 'model_id': $el.data('model_id'), 'model_name': $el.data('model'), 'unfoldable': $el.data('unfold'), 'level': $el.find('td:first').data('level') || 1 }); }); framework.blockUI(); var url_data = self.controller_url.replace('active_id', self.given_context.active_id); session.get_file({ url: url_data.replace('output_format', 'pdf'), data: {data: JSON.stringify(dict)}, complete: framework.unblockUI, error: (error) => self.call('crash_manager', 'rpc_error', error), }); }); return this.$buttons; }, }); core.action_registry.add("stock_report_generic", stock_report_generic); return stock_report_generic; });