Merge pull request #498 from odoo-dev/master-calendar-meeting-ptr
[IMP] calendar: favorite contacts list
This commit is contained in:
commit
4871d68d2d
|
@ -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',
|
||||
],
|
||||
|
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
|
@ -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({
|
||||
|
||||
|
|
|
@ -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) && (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>
|
||||
|
|
|
@ -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); });
|
||||
});
|
||||
|
||||
},
|
||||
});
|
||||
|
||||
};
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
<t t-if="(filters_value.value != -1) && filters_value.avatar_model ">
|
||||
<img t-att-src="'/web/binary/image?model=' + filters_value.avatar_model + '&field=image_small&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">
|
||||
|
||||
|
|
Loading…
Reference in New Issue