[FIX] web_calendar: Selection fields used as color attributes of calendar view

JKE:
 + refactoring
 + auto select previous checkbox
This commit is contained in:
Randhir Mayatra 2015-02-02 17:11:28 +01:00 committed by Jeremy Kersten
parent 913fa445aa
commit 23dc795ff2
2 changed files with 28 additions and 17 deletions

View File

@ -681,25 +681,33 @@ openerp.web_calendar = function(instance) {
} }
if (!self.useContacts) { // If we use all peoples displayed in the current month as filter in sidebars if (!self.useContacts) { // If we use all peoples displayed in the current month as filter in sidebars
var filter_value;
var filter_item; var filter_item;
self.now_filter_ids = []; self.now_filter_ids = [];
var color_field = self.fields[self.color_field];
_.each(events, function (e) { _.each(events, function (e) {
filter_value = e[self.color_field][0]; var key,val = null;
if (!self.all_filters[e[self.color_field][0]]) { if (self.color_field.type == "selection") {
key = e[self.color_field];
val = _.find( self.color_field.selection, function(name){ return name[0] === key;});
}
else {
key = e[self.color_field][0];
val = e[self.color_field];
}
if (!self.all_filters[key]) {
filter_item = { filter_item = {
value: filter_value, value: key,
label: e[self.color_field][1], label: val[1],
color: self.get_color(filter_value), color: self.get_color(key),
avatar_model: (_.str.toBoolElse(self.avatar_filter, true) ? self.avatar_filter : false ), avatar_model: (_.str.toBoolElse(self.avatar_filter, true) ? self.avatar_filter : false ),
is_checked: true is_checked: true
}; };
self.all_filters[e[self.color_field][0]] = filter_item; self.all_filters[key] = filter_item;
} }
if (! _.contains(self.now_filter_ids, filter_value)) { if (! _.contains(self.now_filter_ids, key)) {
self.now_filter_ids.push(filter_value); self.now_filter_ids.push(key);
} }
}); });
@ -708,7 +716,8 @@ openerp.web_calendar = function(instance) {
self.sidebar.filter.set_filters(); self.sidebar.filter.set_filters();
events = $.map(events, function (e) { events = $.map(events, function (e) {
if (_.contains(self.now_filter_ids,e[self.color_field][0]) && self.all_filters[e[self.color_field][0]].is_checked) { var key = self.color_field.type == "selection" ? e[self.color_field] : e[self.color_field][0];
if (_.contains(self.now_filter_ids, key) && self.all_filters[key].is_checked) {
return e; return e;
} }
return null; return null;
@ -730,10 +739,7 @@ openerp.web_calendar = function(instance) {
}); });
} }
} }
} }
var all_attendees = $.map(events, function (e) { return e[self.attendee_people]; }); var all_attendees = $.map(events, function (e) { return e[self.attendee_people]; });
all_attendees = _.chain(all_attendees).flatten().uniq().value(); all_attendees = _.chain(all_attendees).flatten().uniq().value();
@ -1378,7 +1384,9 @@ openerp.web_calendar = function(instance) {
}); });
instance.web_calendar.SidebarFilter = instance.web.Widget.extend({ instance.web_calendar.SidebarFilter = instance.web.Widget.extend({
events: { events: {
'change input:checkbox': 'filter_click' 'change input:checkbox': 'filter_click',
'click span.color_filter': 'select_previous',
}, },
init: function(parent, view) { init: function(parent, view) {
this._super(parent); this._super(parent);
@ -1409,10 +1417,13 @@ openerp.web_calendar = function(instance) {
if (self.view.all_filters[0] && e.target.value == self.view.all_filters[0].value) { if (self.view.all_filters[0] && e.target.value == self.view.all_filters[0].value) {
self.view.all_filters[0].is_checked = e.target.checked; self.view.all_filters[0].is_checked = e.target.checked;
} else { } else {
self.view.all_filters[parseInt(e.target.value)].is_checked = e.target.checked; self.view.all_filters[e.target.value].is_checked = e.target.checked;
} }
self.view.$calendar.fullCalendar('refetchEvents'); self.view.$calendar.fullCalendar('refetchEvents');
}, },
select_previous: function(e) {
$(e.target).siblings('input').trigger('click');
}
}); });
}; };

View File

@ -27,7 +27,7 @@
<t t-name="CalendarView.sidebar.responsible"> <t t-name="CalendarView.sidebar.responsible">
<div class="oe_calendar_all_responsibles"> <div class="oe_calendar_all_responsibles">
<div t-foreach="filters" class="oe_calendar_responsible" > <div t-foreach="filters" class="oe_calendar_responsible" >
<t t-if="filters_value.value&gt;=-1"> <!-- don't display if no value given (or undefined) --> <t t-if="filters_value.value"> <!-- don't display if no value given (or undefined) -->
<input type="checkbox" name="selection" t-att-value="filters_value.value" checked="checked" /> <input type="checkbox" name="selection" t-att-value="filters_value.value" checked="checked" />
<t t-if="filters_value.value == -1"> <t t-if="filters_value.value == -1">
<span><i t-attf-class="fa fa-users fa-fw cal_avatar" ></i></span> <span><i t-attf-class="fa fa-users fa-fw cal_avatar" ></i></span>
@ -35,7 +35,7 @@
<t t-if="(filters_value.value != -1) &amp;&amp; filters_value.avatar_model "> <t t-if="(filters_value.value != -1) &amp;&amp; filters_value.avatar_model ">
<img t-att-src="'/web/binary/image?model=' + filters_value.avatar_model + '&amp;field=image_small&amp;id=' + filters_value.value" class="cal_avatar"/> <img t-att-src="'/web/binary/image?model=' + filters_value.avatar_model + '&amp;field=image_small&amp;id=' + filters_value.value" class="cal_avatar"/>
</t> </t>
<span id="color_filter" t-attf-class="cal_opacity underline_color_#{filters_value.color}" ><t t-esc="filters_value.label" /></span> <span t-attf-class="color_filter cal_opacity underline_color_#{filters_value.color}" ><t t-esc="filters_value.label" /></span>
</t> </t>
</div> </div>
</div> </div>