Merge pull request #498 from odoo-dev/master-calendar-meeting-ptr

[IMP] calendar: favorite contacts list
This commit is contained in:
Richard Mathot 2014-06-23 15:15:41 +02:00
commit 4871d68d2d
7 changed files with 154 additions and 106 deletions

View File

@ -43,7 +43,6 @@ If you need to manage your meetings, you should install the CRM module.
'security/ir.model.access.csv',
'security/calendar_security.xml',
'calendar_view.xml',
'contacts_view.xml',
'calendar_data.xml',
'views/calendar.xml',
],

View File

@ -1,31 +0,0 @@
<?xml version="1.0"?>
<openerp>
<data>
<record id="view_calendar_contacts" model="ir.ui.view">
<field name="name">My Coworkers</field>
<field name="model">calendar.contacts</field>
<field name="arch" type="xml">
<tree string="contacts" editable="bottom">
<field name="partner_id"/>
</tree>
</field>
</record>
<record id="action_calendar_contacts" model="ir.actions.act_window">
<field name="name">Calendar Contacts</field>
<field name="res_model">calendar.contacts</field>
<field name="view_type">form</field>
<field name="view_mode">tree</field>
<field name="domain">[('user_id','=',uid)]</field>
<field name="view_id" ref="view_calendar_contacts" />
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click on "<b>create</b>" to select colleagues you want to see meetings.
</p><p>
Your colleagues will appear in the right list to see them in the calendar view. You will easily manage collaboration and meeting with them.
</p>
</field>
</record>
</data>
</openerp>

View File

@ -72,3 +72,13 @@ span.no-wrap {
.cal_tab {
margin: 20 0 20 0;
}
.openerp .oe_remove_follower {
cursor: pointer;
position: absolute;
right: 0px;
line-height: 20px;
color: #D3D3D3;
}
.openerp .oe_add_input_box > div > input{
width: 200px;
}

View File

@ -1,9 +1,136 @@
openerp.calendar = function(instance) {
var _t = instance.web._t;
var _t = instance.web._t,
_lt = instance.web._lt;
var QWeb = instance.web.qweb;
instance.calendar = {};
function reload_favorite_list(result) {
var self = current = result;
if (result.view) {
self = result.view;
}
new instance.web.Model("res.users").query(["partner_id"]).filter([["id", "=",self.dataset.context.uid]]).first()
.done(
function(result) {
var sidebar_items = {};
var filter_value = result.partner_id[0];
var filter_item = {
value: filter_value,
label: result.partner_id[1] + _lt(" [Me]"),
color: self.get_color(filter_value),
avatar_model: self.avatar_model,
is_checked: true,
is_remove: false,
};
sidebar_items[0] = filter_item ;
filter_item = {
value: -1,
label: _lt("Everybody's calendars"),
color: self.get_color(-1),
avatar_model: self.avatar_model,
is_checked: false
};
sidebar_items[-1] = filter_item ;
//Get my coworkers/contacts
new instance.web.Model("calendar.contacts").query(["partner_id"]).filter([["user_id", "=",self.dataset.context.uid]]).all().then(function(result) {
_.each(result, function(item) {
filter_value = item.partner_id[0];
filter_item = {
value: filter_value,
label: item.partner_id[1],
color: self.get_color(filter_value),
avatar_model: self.avatar_model,
is_checked: true
};
sidebar_items[filter_value] = filter_item ;
});
self.all_filters = sidebar_items;
self.now_filter_ids = $.map(self.all_filters, function(o) { return o.value; });
self.sidebar.filter.events_loaded(self.all_filters);
self.sidebar.filter.set_filters();
self.sidebar.filter.set_distroy_filters();
self.sidebar.filter.addInputBox();
self.sidebar.filter.destroy_filter();
}).done(function () {
self.$calendar.fullCalendar('refetchEvents');
if (current.ir_model_m2o) {
current.ir_model_m2o.set_value(false);
}
});
});
}
instance.web_calendar.CalendarView.include({
extraSideBar: function(){
this._super();
if (this.useContacts){
new reload_favorite_list(this);
}
}
});
instance.web_calendar.SidebarFilter.include({
set_distroy_filters: function() {
var self = this;
// When mouse-enter the favorite list it will show the 'X' for removing partner from the favorite list.
if (self.view.useContacts){
self.$('.oe_calendar_all_responsibles').on('mouseenter mouseleave', function(e) {
self.$('.oe_remove_follower').toggleClass('hidden', e.type == 'mouseleave');
});
}
},
addInputBox: function() {
var self = this;
if (this.dfm)
return;
this.dfm = new instance.web.form.DefaultFieldManager(self);
this.dfm.extend_field_desc({
partner_id: {
relation: "res.partner",
},
});
this.ir_model_m2o = new instance.web.form.FieldMany2One(self.dfm, {
attrs: {
class: 'oe_add_input_box',
name: "partner_id",
type: "many2one",
options: '{"no_open": True}',
placeholder: _t("Select Favorite Calendar"),
},
});
this.ir_model_m2o.insertAfter($('div.oe_calendar_filter'));
this.ir_model_m2o.on('change:value', self, function() {
self.add_filter();
});
},
add_filter: function() {
var self = this;
new instance.web.Model("res.users").query(["partner_id"]).filter([["id", "=",this.view.dataset.context.uid]]).first().done(function(result){
$.map(self.ir_model_m2o.display_value, function(element,index) {
if (result.partner_id[0] != index){
self.ds_message = new instance.web.DataSetSearch(self, 'calendar.contacts');
self.ds_message.call("create", [{'partner_id': index}]);
}
});
});
new reload_favorite_list(this);
},
destroy_filter: function(e) {
var self= this;
this.$(".oe_remove_follower").on('click', function(e) {
self.ds_message = new instance.web.DataSetSearch(self, 'calendar.contacts');
if (! confirm(_t("Do you really want to delete this filter from favorite?"))) { return false; }
var id = $(e.currentTarget)[0].dataset.id;
self.ds_message.call('search', [[['partner_id', '=', parseInt(id)]]]).then(function(record){
return self.ds_message.unlink(record);
}).done(function() {
new reload_favorite_list(self);
});
});
},
});
instance.web.WebClient = instance.web.WebClient.extend({

View File

@ -73,4 +73,13 @@
</div>
</div>
</t>
<t t-extend="CalendarView.sidebar.responsible">
<t t-jquery="span#color_filter" t-operation="after">
<t t-if="(filters_value.value != -1) &amp;&amp; (filters_value.is_remove != false)">
<span class="oe_remove_follower oe_e hidden" title="Remove this favorite from the list" t-att-data-id="filters_value.value">X</span>
</t>
</t>
</t>
</template>

View File

@ -325,59 +325,6 @@ openerp.web_calendar = function(instance) {
firstDay: translate.firstDay,
});
if (this.useContacts) {
//Get my Partner ID
new instance.web.Model("res.users").query(["partner_id"]).filter([["id", "=",this.dataset.context.uid]]).first()
.done(
function(result) {
var sidebar_items = {};
var filter_value = result.partner_id[0];
var filter_item = {
value: filter_value,
label: result.partner_id[1] + _lt(" [Me]"),
color: self.get_color(filter_value),
avatar_model: self.avatar_model,
is_checked: true
};
sidebar_items[filter_value] = filter_item ;
filter_item = {
value: -1,
label: _lt("Everybody's calendars"),
color: self.get_color(-1),
avatar_model: self.avatar_model,
is_checked: false
};
sidebar_items[-1] = filter_item ;
//Get my coworkers/contacts
new instance.web.Model("calendar.contacts").query(["partner_id"]).filter([["user_id", "=",self.dataset.context.uid]]).all().then(function(result) {
_.each(result, function(item) {
filter_value = item.partner_id[0];
filter_item = {
value: filter_value,
label: item.partner_id[1],
color: self.get_color(filter_value),
avatar_model: self.avatar_model,
is_checked: true
};
sidebar_items[filter_value] = filter_item ;
});
self.all_filters = sidebar_items;
self.now_filter_ids = $.map(self.all_filters, function(o) { return o.value; });
self.sidebar.filter.events_loaded(self.all_filters);
self.sidebar.filter.set_filters();
self.sidebar.filter.addUpdateButton();
}).done(function () {
self.$calendar.fullCalendar('refetchEvents');
});
}
);
}
this.extraSideBar();
}
self.$calendar.fullCalendar(self.get_fc_init_options());
@ -1430,20 +1377,14 @@ openerp.web_calendar = function(instance) {
this.$el.html(QWeb.render('CalendarView.sidebar.responsible', { filters: filters }));
},
filter_click: function(e) {
var self = this;
self.view.all_filters[parseInt(e.target.value)].is_checked = e.target.checked;
var self = this;
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;
} else {
self.view.all_filters[parseInt(e.target.value)].is_checked = e.target.checked;
}
self.view.$calendar.fullCalendar('refetchEvents');
},
addUpdateButton: function() {
var self=this;
this.$('div.oe_calendar_all_responsibles').append(QWeb.render('CalendarView.sidebar.button_add_contact'));
this.$(".add_contacts_link_btn").on('click', function() {
self.rpc("/web/action/load", {
action_id: "calendar.action_calendar_contacts"
}).then( function(result) { return self.do_action(result); });
});
},
});
};

View File

@ -35,7 +35,7 @@
<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"/>
</t>
<span t-attf-class="cal_opacity underline_color_#{filters_value.color}" ><t t-esc="filters_value.label" /></span>
<span id="color_filter" t-attf-class="cal_opacity underline_color_#{filters_value.color}" ><t t-esc="filters_value.label" /></span>
</t>
</div>
</div>
@ -53,13 +53,6 @@
</t>
</t>
</div>
<div t-name="CalendarView.sidebar.button_add_contact" class="oe_calendar_buttons_add_contact">
<button class='oe_button oe_form_button oe_link add_contacts_link_btn' style='margin-top:10px'>
<span class='add_contacts_link'>See Employee's Meeting</span>
</button>
</div>
<div t-name="CalendarView.quick_create" class="oe_calendar_quick_create openerp">