Browse Source

rebase

pull/227/head
fossoult 9 years ago
parent
commit
72ac308d6a
  1. 40
      web_tree_date_search/README.rst
  2. 18
      web_tree_date_search/__init__.py
  3. 41
      web_tree_date_search/__openerp__.py
  4. 11
      web_tree_date_search/demo/demo.xml
  5. 31
      web_tree_date_search/i18n/fr.po
  6. 31
      web_tree_date_search/i18n/nl.po
  7. BIN
      web_tree_date_search/static/src/img/demo.png
  8. BIN
      web_tree_date_search/static/src/img/demo1.png
  9. 178
      web_tree_date_search/static/src/js/search.js
  10. 19
      web_tree_date_search/static/src/xml/search.xml
  11. 10
      web_tree_date_search/views/assets_backend.xml

40
web_tree_date_search/README.rst

@ -0,0 +1,40 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:alt: License
Tree Date Search
==============================
This module allow you to easily add dates range search fields on top of List View rows.
These dates fields can be used in combination with the Search window.
How to do ?
Add a new 'dates_filter' key and a list of fields name in the action context:
{'dates_filter': ['start']}
or several dates:
{'dates_filter': ['start','stop',..]}
.. image:: web_tree_date_search/static/src/img/demo.png
.. image:: web_tree_date_search/static/src/img/demo1.png
Credits
=======
Author
------
* Thomas Fossoul, Noviat <thomas.fossoul@noviat.com>
Maintainer
----------
.. image:: http://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: http://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
To contribute to this module, please visit http://odoo-community.org.

18
web_tree_date_search/__init__.py

@ -0,0 +1,18 @@
##############################################################################
#
# Copyright (c) 2015 Noviat nv/sa (www.noviat.com)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################

41
web_tree_date_search/__openerp__.py

@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2015 Noviat nv/sa (www.noviat.com)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'Tree dates search',
'version': '8.0.3.0.1',
'author': 'Noviat, Odoo Community Association (OCA)',
'website': 'http://www.noviat.com',
'license': 'AGPL-3',
'category': 'Web',
'depends': [
'web',
],
'data': [
'views/assets_backend.xml',
],
'qweb': [
'static/src/xml/*.xml',
],
'demo': [
'demo/demo.xml',
],
'installable': True,
}

11
web_tree_date_search/demo/demo.xml

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="base.action_res_users" model="ir.actions.act_window">
<field name="res_model">res.users</field>
<field name="context">{'dates_filter' : ['login_date']}</field>
</record>
</data>
</openerp>

31
web_tree_date_search/i18n/fr.po

@ -0,0 +1,31 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * tree_date_search_extension
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0-20150601\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-06-16 15:10+0000\n"
"PO-Revision-Date: 2015-06-16 15:10+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: tree_date_search_extension
#. openerp-web
#: code:addons/tree_date_search_extension/static/src/js/search_extension.js:72
#, python-format
msgid "From"
msgstr "De"
#. module: tree_date_search_extension
#. openerp-web
#: code:addons/tree_date_search_extension/static/src/js/search_extension.js:74
#, python-format
msgid "To"
msgstr "à"

31
web_tree_date_search/i18n/nl.po

@ -0,0 +1,31 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * tree_date_search_extension
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0-20150601\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-06-16 15:10+0000\n"
"PO-Revision-Date: 2015-06-16 15:10+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: tree_date_search_extension
#. openerp-web
#: code:addons/tree_date_search_extension/static/src/js/search_extension.js:72
#, python-format
msgid "From"
msgstr "Van"
#. module: tree_date_search_extension
#. openerp-web
#: code:addons/tree_date_search_extension/static/src/js/search_extension.js:74
#, python-format
msgid "To"
msgstr "Tot"

BIN
web_tree_date_search/static/src/img/demo.png

After

Width: 891  |  Height: 430  |  Size: 65 KiB

BIN
web_tree_date_search/static/src/img/demo1.png

After

Width: 786  |  Height: 428  |  Size: 46 KiB

178
web_tree_date_search/static/src/js/search.js

@ -0,0 +1,178 @@
// @@@ web_tree_date_search custom JS @@@
// #############################################################################
//
// Copyright (c) 2015 Noviat nv/sa (www.noviat.com)
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// #############################################################################
openerp.web_tree_date_search = function(instance) {
var _t = instance.web._t,
_lt = instance.web._lt;
var QWeb = instance.web.qweb;
instance.web.ListView.include({
init: function(parent, dataset, view_id, options) {
this._super.apply(this, arguments);
if ("dates_filter" in dataset.context){
this.dates_filter = dataset.context["dates_filter"];
this.current_date_from = [];
this.current_date_to = [];
}
this.tree_date_search_loaded = false;
},
do_load_state: function(state, warm) {
var ui_toolbar_loc = $('.ui-toolbar:last');
if (this.dates_filter && this.dates_filter.length > 0){
ui_toolbar_loc.show();
}
else{
if (ui_toolbar_loc.children().length == 0)
ui_toolbar_loc.hide();
}
return this._super.apply(this, arguments);
},
load_list: function(data) {
var self = this;
var tmp = this._super.apply(this, arguments);
if (!this.tree_date_search_loaded){
this.date_field_data = [];
for (i in this.dates_filter){
var date_field = this.dates_filter[i];
for (col in this.columns){
if (this.columns[col].name == date_field){
this.date_field_data[date_field] = []
this.date_field_data[date_field][0] = this.columns[col].string;
this.date_field_data[date_field][1] = this.columns[col].type;
break;
}
}
}
if (this.dates_filter && this.dates_filter.length > 0){
this.$el.parent().prepend(QWeb.render('TreeDateSearch', {widget: this}));
var ui_toolbar_loc = $('.ui-toolbar:last');
ui_toolbar_loc.show();
for (i in this.dates_filter){
var date_field = this.dates_filter[i];
var date_string = this.date_field_data[date_field][0]
var date_type = this.date_field_data[date_field][1]
self.columns
var date_div = QWeb.render('TreeDateSearchField', {'field_name': date_string});
var toolbar_height = ui_toolbar_loc.height();
ui_toolbar_loc.append(date_div);
$('div.oe_form_dropdown_section:last span:eq(0)').addClass('oe_date_filter_from_' + date_field);
$('div.oe_form_dropdown_section:last span:eq(1)').addClass('oe_date_filter_to_' + date_field);
this.value = new (instance.web.search.custom_filters.get_object(date_type))
(this, {"selectable":true,
"name":"oe_date_filter_from_" + date_field,
"type": date_type,
"string":date_string});
var value_loc = $('.oe_date_filter_from_' + date_field + ':last').show().empty();
this.value.appendTo(value_loc);
this.value = new (instance.web.search.custom_filters.get_object(date_type))
(this, {"selectable":true,
"name":"oe_date_filter_to_" + date_field,
"type": date_type,
"string":date_string});
var value_loc = $('.oe_date_filter_to_' + date_field + ':last').show().empty();
this.value.appendTo(value_loc);
var oe_date_filter_from = $('.oe_date_filter_from_' + date_field + ':last .oe_datepicker_master');
var oe_date_filter_to = $('.oe_date_filter_to_' + date_field + ':last .oe_datepicker_master');
if (date_type == 'date'){
oe_date_filter_from.css("width", "105px");
oe_date_filter_to.css("width", "105px");
}
oe_date_filter_from.css("height", "23px");
oe_date_filter_to.css("height", "23px");
// In 2 line to fit with account move line tree view
if (toolbar_height < 40){
var $elem1 = oe_date_filter_from.parent().parent().parent().parent().parent();
var $elem = $elem1.find("h4");
$elem.css("display", "inline");
}
oe_date_filter_from.attr("placeholder", _t("From"));
oe_date_filter_to.attr("placeholder", _t("To"));
// on_change
oe_date_filter_from.change(function() {
var elem = this.parentElement.parentElement.parentElement.className;
var res = elem.split("oe_date_filter_from_");
self.current_date_from[res[1]] = this.value === '' ? null : this.value;
if (self.current_date_from[res[1]]){
self.current_date_from[res[1]] = instance.web.parse_value(
self.current_date_from[res[1]], {"widget": date_type});
}
self.do_search(self.last_domain, self.last_context, self.last_group_by);
});
oe_date_filter_to.change(function() {
var elem = this.parentElement.parentElement.parentElement.className;
var res = elem.split("oe_date_filter_to_");
self.current_date_to[res[1]] = this.value === '' ? null : this.value;
if (self.current_date_to[res[1]]){
self.current_date_to[res[1]] = instance.web.parse_value(
self.current_date_to[res[1]], {"widget": date_type});
}
self.do_search(self.last_domain, self.last_context, self.last_group_by);
});
this.on('edit:after', this, function () {
oe_date_filter_from.attr('disabled', 'disabled');
oe_date_filter_to.attr('disabled', 'disabled');
});
this.on('save:after cancel:after', this, function () {
oe_date_filter_from.removeAttr('disabled');
oe_date_filter_to.removeAttr('disabled');
});
}
}
else{
// Only hide current if it's empty
// Work from tree view to tree view with or withouth date_filters
// Work from tree view to wizard with or withouth date_filters
var ui_toolbar_loc = $('.ui-toolbar:last');
if (ui_toolbar_loc.children().length == 0)
ui_toolbar_loc.hide();
}
this.tree_date_search_loaded = true;
}
return tmp;
},
do_search: function(domain, context, group_by) {
this.last_domain = domain;
this.last_context = context;
this.last_group_by = group_by;
domain = this.get_dates_filter_domain(domain);
return this._super(domain, context, group_by);
},
get_dates_filter_domain: function(last_domain) {
var domain = [];
for (from in this.current_date_from){
if (this.current_date_from[from])
domain.push([from, '>=', this.current_date_from[from]]);
}
for (to in this.current_date_to){
if (this.current_date_to[to])
domain.push([to, '<=', this.current_date_to[to]]);
}
return new instance.web.CompoundDomain(last_domain, domain);
},
});
};

19
web_tree_date_search/static/src/xml/search.xml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="TreeDateSearch">
<div class="ui-toolbar" style="margin-bottom:0px;">
</div>
</t>
<t t-name="TreeDateSearchField">
<div class='oe_form_dropdown_section' style="min-width: 208px; margin-left:4px;">
<h4><t t-esc="field_name"/> :</h4>
<div class='oe_form' style='margin-right:3px; display: inline;' >
<span/>
</div>
<div class='oe_form' style='margin-left:3px; display: inline; float: right;' >
<span/>
</div>
</div>
</t>
</templates>

10
web_tree_date_search/views/assets_backend.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="assets_backend" name="search_assets_backends" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/web_tree_date_search/static/src/js/search.js"></script>
</xpath>
</template>
</data>
</openerp>
Loading…
Cancel
Save