[FIX] google_spreadsheet: adapt code to refactoring

This commit adapts the code for the 'Add to Google Spreadsheet'
entry in the Favorites menu, according to the large refactoring of
the SearchView/ControlPanelView in web.

Part of task 1893568
This commit is contained in:
Mathieu Duckerts-Antoine
2018-12-07 13:16:11 +00:00
committed by Géry Debongnie
parent 38dc5c18b4
commit 1e0b370b16
4 changed files with 107 additions and 53 deletions
@@ -0,0 +1,102 @@
odoo.define('board.AddToGoogleSpreadsheetMenu', function (require) {
"use strict";
var ActionManager = require('web.ActionManager');
var core = require('web.core');
var data = require('web.data');
var Domain = require('web.Domain');
var favorites_submenus_registry = require('web.favorites_submenus_registry');
var pyUtils = require('web.py_utils');
var Widget = require('web.Widget');
var QWeb = core.qweb;
var AddToGoogleSpreadsheetMenu = Widget.extend({
events: _.extend({}, Widget.prototype.events, {
'click .add_to_spreadsheet': '_onAddToSpreadsheetClick',
}),
/**
* @override
* @param {Object} params
* @param {Object} params.action an ir.actions description
*/
init: function (parent, params) {
this._super(parent);
this.action = params.action;
},
/**
* @override
*/
start: function () {
if (this.action.type === 'ir.actions.act_window') {
this._render();
}
return this._super.apply(this, arguments);
},
//--------------------------------------------------------------------------
// Private
//--------------------------------------------------------------------------
/**
* @private
*/
_addToSpreadsheet: function () {
// AAB: trigger_up an event that will be intercepted by the controller,
// as soon as the controller is the parent of the control panel
var actionManager = this.findAncestor(function (ancestor) {
return ancestor instanceof ActionManager;
});
var controller = actionManager.getCurrentController();
var searchQuery;
// TO DO: for now the domains in query are evaluated.
// This should be changed I think.
this.trigger_up('get_search_query', {
callback: function (query) {
searchQuery = query;
}
});
var modelName = this.action.res_model;
var list_view = _.findWhere(controller.widget.actionViews, {type: 'list'});
var list_view_id = list_view ? list_view.viewID : false;
var domain = searchQuery.domain;
var groupBys = pyUtils.eval('groupbys', searchQuery.groupBys).join(" ");
var ds = new data.DataSet(this, 'google.drive.config');
ds.call('set_spreadsheet', [modelName, Domain.prototype.arrayToString(domain), groupBys, list_view_id])
.done(function (res) {
if (res.url){
window.open(res.url, '_blank');
}
});
},
/**
* Renders the `SearchView.addtogooglespreadsheet` template.
*
* @private
*/
_render: function () {
var $el = QWeb.render('SearchView.addtogooglespreadsheet', {widget: this});
this._replaceElement($el);
},
//--------------------------------------------------------------------------
// Handlers
//--------------------------------------------------------------------------
/**
* @private
* @param {jQueryEvent} event
*/
_onAddToSpreadsheetClick: function (event) {
event.preventDefault();
event.stopPropagation();
this._addToSpreadsheet();
},
});
favorites_submenus_registry.add('add_to_google_spreadsheet_menu', AddToGoogleSpreadsheetMenu, 20);
return AddToGoogleSpreadsheetMenu;
});
@@ -1,48 +0,0 @@
odoo.define('google_spreadsheet.google.spreadsheet', function (require) {
"use strict";
var ActionManager = require('web.ActionManager');
var core = require('web.core');
var data = require('web.data');
var Domain = require('web.Domain');
var FavoriteMenu = require('web.FavoriteMenu');
var pyUtils = require('web.py_utils');
var QWeb = core.qweb;
FavoriteMenu.include({
start: function () {
this._super();
if (this.action.type === 'ir.actions.act_window') {
this.$('.o_favorites_menu').append(QWeb.render('SearchView.addtogooglespreadsheet'));
this.$('.add-to-spreadsheet').click(this.add_to_spreadsheet.bind(this));
}
},
add_to_spreadsheet: function () {
// AAB: trigger_up an event that will be intercepted by the controller,
// as soon as the controller is the parent of the control panel
var am = this.findAncestor(function (a) {
return a instanceof ActionManager;
});
var controller = am.getCurrentController();
var sv_data = this.searchview.build_search_data(),
model = this.searchview.dataset.model,
list_view = _.findWhere(controller.widget.actionViews, {type: 'list'}),
list_view_id = list_view ? list_view.viewID : false,
domain = [],
groupbys = pyUtils.eval('groupbys', sv_data.groupbys).join(" "),
ds = new data.DataSet(this, 'google.drive.config');
_.each(sv_data.domains, function (d) {
domain.push.apply(domain, Domain.prototype.stringToArray(d));
});
ds.call('set_spreadsheet', [model, Domain.prototype.arrayToString(domain), groupbys, list_view_id])
.done(function (res) {
if (res.url){
window.open(res.url, '_blank');
}
});
},
});
});
@@ -1,5 +1,5 @@
<template>
<t t-name="SearchView.addtogooglespreadsheet">
<a class="add-to-spreadsheet dropdown-item">Add to Google Spreadsheet</a>
</t>
</template>
<div t-name="SearchView.addtogooglespreadsheet">
<a class="add_to_spreadsheet dropdown-item">Add to Google Spreadsheet</a>
</div>
</template>
@@ -3,7 +3,7 @@
<template id="assets_backend" name="google_spreadsheet assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/google_spreadsheet/static/src/js/search.js"></script>
<script type="text/javascript" src="/google_spreadsheet/static/src/js/add_to_google_spreadsheet_menu.js"></script>
</xpath>
</template>