mirror of https://github.com/OCA/web.git
[ADD] Added the module for letting the end user search basd on alphabets
commit
d76e471353
|
@ -0,0 +1,23 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# OpenERP, Open Source Management Solution
|
||||||
|
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||||
|
# Copyright (C) 2011-2014 Serpent Consulting Services (<http://www.serpentcs.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/>.
|
||||||
|
#
|
||||||
|
############################################################################
|
||||||
|
|
||||||
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,49 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# OpenERP, Open Source Management Solution
|
||||||
|
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||||
|
# Copyright (C) 2011-2014 Serpent Consulting Services (<http://www.serpentcs.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': 'Web Alphabetical Search',
|
||||||
|
'author' : 'Serpent Consulting Services Pvt. Ltd.',
|
||||||
|
'category' : 'Web',
|
||||||
|
'website': 'http://www.serpentcs.com',
|
||||||
|
'description': """
|
||||||
|
OpenERP Web Search Extended.
|
||||||
|
============================
|
||||||
|
|
||||||
|
This module used for search record base on alphabetical character be default it will search on name field.
|
||||||
|
User also is able to change search field name instead of name field.
|
||||||
|
""",
|
||||||
|
'version': '1.0',
|
||||||
|
'depends': ['web'],
|
||||||
|
'js': [
|
||||||
|
'static/src/js/web_search.js'
|
||||||
|
],
|
||||||
|
'css': [
|
||||||
|
'static/src/css/web_search.css'
|
||||||
|
],
|
||||||
|
'qweb' : [
|
||||||
|
'static/src/xml/web_search.xml',
|
||||||
|
],
|
||||||
|
'auto_install': False
|
||||||
|
}
|
||||||
|
|
||||||
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,44 @@
|
||||||
|
.openerp .search_filter {
|
||||||
|
background: #F0F0F0;
|
||||||
|
width: 100%;
|
||||||
|
border: 1px solid #999;
|
||||||
|
background: -moz-linear-gradient(top, #F0F0F0 0%, #C0C0C0 100%);
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#F0F0F0), color-stop(100%,#C0C0C0));
|
||||||
|
}
|
||||||
|
|
||||||
|
.openerp .oe_filter_label {
|
||||||
|
background: #F0F0F0;
|
||||||
|
width: 3.35%;
|
||||||
|
border: 1px solid #999;
|
||||||
|
background: -moz-linear-gradient(top, #F0F0F0 0%, #C0C0C0 100%);
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#F0F0F0), color-stop(100%,#C0C0C0));
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#F0F0F0', endColorstr='#C0C0C0',GradientType=0 );
|
||||||
|
}
|
||||||
|
.openerp .oe_filter_label:hover {
|
||||||
|
background: #F0F0F0;
|
||||||
|
background: -moz-linear-gradient(top, #F0F0F0 0%, #A1A7CE 100%);
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#F0F0F0), color-stop(100%,#A1A7CE));
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#F0F0F0', endColorstr='#A1A7CE',GradientType=0 );
|
||||||
|
}
|
||||||
|
.openerp .oe_filter_label:active {
|
||||||
|
background: #aaa;
|
||||||
|
background: -moz-linear-gradient(top, #999999 0%, #EEEEEE 100%);
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#999999), color-stop(100%,#EEEEEE));
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#999999', endColorstr='#EEEEEE',GradientType=0 );
|
||||||
|
}
|
||||||
|
.openerp .oe_filter_label.enabled {
|
||||||
|
background: #aaa;
|
||||||
|
filter: none;
|
||||||
|
-moz-box-shadow: none;
|
||||||
|
-webkit-box-shadow: none;
|
||||||
|
-o-box-shadow: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
.openerp .oe_filter_label {
|
||||||
|
font-weight: bold;
|
||||||
|
text-transform: uppercase;
|
||||||
|
text-shadow: #EEE 0 1px 0;
|
||||||
|
color: #4C4C4C;
|
||||||
|
white-space: nowrap;
|
||||||
|
margin: 0;
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
|
@ -0,0 +1,80 @@
|
||||||
|
openerp.web_search_alphabetic = function (instance) {
|
||||||
|
var QWeb = instance.web.qweb;
|
||||||
|
instance.web.SearchView.include({
|
||||||
|
start: function() {
|
||||||
|
var result = this._super();
|
||||||
|
var self = this;
|
||||||
|
self.search_on = "name";
|
||||||
|
self.fields_selection = [];
|
||||||
|
this.dataset.call('fields_get', [false, {}]).done(function (fields) {
|
||||||
|
$.each(fields, function (value) {
|
||||||
|
if(fields[value].type == "char"){
|
||||||
|
fields[value].id = value;
|
||||||
|
self.fields_selection.push(fields[value]);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if(self.fields_selection.length){
|
||||||
|
$('.field_selection_column').append((QWeb.render('field-selection', {widget: self})));
|
||||||
|
$("#field_name_selection").change(function(){
|
||||||
|
self.search_on = $(this).val() || false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$('.oe_filter_label').click(function (e) {
|
||||||
|
$(this).toggleClass('enabled');
|
||||||
|
self.do_search();
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
search_filter: function(){
|
||||||
|
var filter_domain = [];
|
||||||
|
var self = this;
|
||||||
|
_.each($('.oe_filter_label'), function(value) {
|
||||||
|
if ($(value).hasClass('enabled') && $(value).attr('id') && self.search_on) {
|
||||||
|
filter_domain.push("[('" + self.search_on + "', '=ilike', '" + $(value).attr('id').split('_')[1] + "%')]")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (filter_domain.length) {
|
||||||
|
var filter_or_domain = [];
|
||||||
|
for (i = 0; i < filter_domain.length-1; i++) {
|
||||||
|
filter_or_domain.push("['|']");
|
||||||
|
}
|
||||||
|
return filter_or_domain.concat(filter_domain || []);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
build_search_data: function () {
|
||||||
|
var result = this._super();
|
||||||
|
filter_domain = this.search_filter();
|
||||||
|
if (filter_domain)
|
||||||
|
result['domains'] = filter_domain.concat(result.domains || []);
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
instance.web.ViewManager.include({
|
||||||
|
switch_mode: function(view_type, no_store, view_options) {
|
||||||
|
var view = this.views[view_type];
|
||||||
|
var result = this._super(view_type, no_store, view_options);
|
||||||
|
if (this.searchview && this.active_view != "form") {
|
||||||
|
if ((view.controller.searchable === false || this.searchview.options.hidden) || this.active_view == "form"){
|
||||||
|
$('.search_filter').live().hide();
|
||||||
|
}else
|
||||||
|
$('.search_filter').show();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$('.search_filter').live().hide();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
instance.web.FormView.include({
|
||||||
|
load_defaults: function () {
|
||||||
|
if($('.search_filter'))
|
||||||
|
$('.search_filter').hide();
|
||||||
|
return this._super();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:
|
|
@ -0,0 +1,49 @@
|
||||||
|
<template>
|
||||||
|
<t t-name="field-selection">
|
||||||
|
<t t-if="widget.fields_selection">
|
||||||
|
<select id="field_name_selection">
|
||||||
|
<t t-foreach="widget.fields_selection" t-as="record">
|
||||||
|
<option t-att-value="record.id"><t t-esc="record.string"/></option>
|
||||||
|
</t>
|
||||||
|
</select>
|
||||||
|
</t>
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<t t-extend="ViewManagerAction">
|
||||||
|
<t t-jquery=".oe_view_manager .oe_view_manager_header" t-operation="append">
|
||||||
|
<table class="search_filter">
|
||||||
|
<tr>
|
||||||
|
<th class="field_selection_column"/>
|
||||||
|
<th>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_a" title="A">A</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_b" title="B">B</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_c" title="C">C</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_d" title="D">D</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_e" title="E">E</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_f" title="F">F</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_g" title="G">G</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_h" title="H">H</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_i" title="I">I</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_j" title="J">J</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_k" title="K">K</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_l" title="L">L</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_m" title="M">M</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_n" title="N">N</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_o" title="O">O</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_p" title="P">P</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_q" title="Q">Q</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_r" title="R">R</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_s" title="S">S</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_t" title="T">T</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_u" title="U">U</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_v" title="V">V</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_w" title="W">W</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_x" title="X">X</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_y" title="Y">Y</button>
|
||||||
|
<button type="button" autofocus="autofocus" class="oe_filter_label" id="filter_z" title="Z">z</button>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</t>
|
||||||
|
</t>
|
||||||
|
</template>
|
Loading…
Reference in New Issue