summaryrefslogtreecommitdiff
path: root/addons/base_calendar/static/src
diff options
context:
space:
mode:
authorFabien Meghazi <fme@openerp.com>2011-08-01 17:48:56 +0200
committerFabien Meghazi <fme@openerp.com>2011-08-01 17:48:56 +0200
commit29bbb4601ef67e7cd00bbafd8aac1710175f13d9 (patch)
treea2b79c374595441b055b88e59a3c466b2e0a241c /addons/base_calendar/static/src
parent595966fb2212466742b9ff35ee534c6a59b4a33d (diff)
[ADD] Added a sidebar to the calendar view
bzr revid: fme@openerp.com-20110801154856-2nhjjtjwa1jc8qy1
Diffstat (limited to 'addons/base_calendar/static/src')
-rw-r--r--addons/base_calendar/static/src/js/calendar.js98
-rw-r--r--addons/base_calendar/static/src/xml/base_calendar.xml47
2 files changed, 101 insertions, 44 deletions
diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js
index 04b75193974..18299655dc3 100644
--- a/addons/base_calendar/static/src/js/calendar.js
+++ b/addons/base_calendar/static/src/js/calendar.js
@@ -15,10 +15,11 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
this.view_id = view_id;
this.domain = this.dataset.domain || [];
this.context = this.dataset.context || {};
+ this.has_been_loaded = $.Deferred();
this.options = options || {};
},
start: function() {
- this.rpc("/base_calendar/calendarview/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded);
+ this.rpc("/base_calendar/calendarview/load", {"model": this.model, "view_id": this.view_id, 'toolbar': true}, this.on_loaded);
},
on_loaded: function(data) {
this.calendar_fields = {};
@@ -54,8 +55,23 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
this.info_fields.push(this.fields_view.arch.children[fld].attrs.name);
}
this.$element.html(QWeb.render("CalendarView", {"fields_view": this.fields_view}));
+
+ if (this.options.sidebar && this.options.sidebar_id) {
+ this.sidebar = new openerp.base.Sidebar(this, this.options.sidebar_id);
+ this.sidebar.start();
+ this.sidebar.navigator = new openerp.base_calendar.SidebarNavigator(this.sidebar, this.sidebar.add_section('navigator', "Navigator"), this);
+ this.sidebar.responsible = new openerp.base_calendar.SidebarResponsible(this.sidebar, this.sidebar.add_section('responsible', "Responsible"), this);
+ this.sidebar.add_toolbar(data.fields_view.toolbar);
+ this.set_common_sidebar_sections(this.sidebar);
+ this.sidebar.do_unfold();
+ this.sidebar.do_fold.add_last(this.resize_scheduler);
+ this.sidebar.do_unfold.add_last(this.resize_scheduler);
+ this.sidebar.do_toggle.add_last(this.resize_scheduler);
+ }
+
this.init_scheduler();
this.load_scheduler();
+ this.has_been_loaded.resolve();
},
init_scheduler: function() {
var self = this;
@@ -76,8 +92,6 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
// Initialize Sceduler
scheduler.init('openerp_scheduler', null, this.mode);
- this.$element.find('#dhx_minical_icon').bind('click', this.mini_calendar);
-
// Event Options Click,edit
scheduler.attachEvent('onDblClick', this.popup_event);
@@ -120,6 +134,17 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
return true;
}
});
+ scheduler.renderCalendar({
+ container: this.sidebar.navigator.element_id,
+ navigation: true,
+ date: scheduler._date,
+ handler: function(date, calendar) {
+ scheduler.setCurrentView(date, 'day');
+ }
+ });
+ },
+ resize_scheduler: function() {
+ scheduler.setCurrentView(scheduler._date);
},
load_scheduler: function() {
var self = this;
@@ -142,7 +167,9 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
scheduler.clearAll();
//To parse Events we have to convert date Format
- var res_events = [];
+ var res_events = [],
+ sidebar_items = [],
+ sidebar_ids = [];
for (var e = 0; e < events.length; e++) {
var evt = events[e];
if (!evt[this.date_start]) {
@@ -156,10 +183,26 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
if (this.date_stop && evt[this.date_stop] && this.fields[this.date_stop]['type'] == 'date') {
evt[this.date_stop] = openerp.base.parse_date(evt[this.date_stop]).set({hour: 17}).toString('yyyy-MM-dd HH:mm:ss');
}
+ if (this.color_field) {
+ var user = evt[this.color_field];
+ if (user) {
+ if (_.indexOf(sidebar_ids, user[0]) === -1) {
+ sidebar_items.push({
+ id: user[0],
+ name: user[1],
+ // TODO: use color table
+ color: '#dddddd'
+ });
+ sidebar_ids.push(user[0]);
+ }
+ }
+ }
res_events.push(this.convert_event(evt));
}
scheduler.parse(res_events, 'json');
+ this.resize_scheduler();
+ this.sidebar.responsible.on_events_loaded(sidebar_items);
},
convert_event: function(event) {
var starts = event[this.date_start],
@@ -240,21 +283,6 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
'title': res_description.join()
}
},
- mini_calendar: function() {
- if (scheduler.isCalendarVisible()) {
- scheduler.destroyCalendar();
- } else {
- scheduler.renderCalendar({
- position:"dhx_minical_icon",
- date:scheduler._date,
- navigation:true,
- handler: function(date, calendar) {
- scheduler.setCurrentView(date);
- scheduler.destroyCalendar()
- }
- });
- }
- },
do_search: function(domains, contexts, groupbys) {
var self = this;
this.rpc('/base/session/eval_domain_and_context', {
@@ -271,10 +299,19 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
});
},
do_show: function () {
- this.$element.show();
+ var self = this;
+ $.when(this.has_been_loaded).then(function() {
+ self.$element.show();
+ if (self.sidebar) {
+ self.sidebar.$element.show();
+ }
+ });
},
do_hide: function () {
this.$element.hide();
+ if (this.sidebar) {
+ this.sidebar.$element.hide();
+ }
},
popup_event: function(event_id) {
var self = this;
@@ -325,6 +362,27 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
}
}
});
+
+openerp.base_calendar.SidebarResponsible = openerp.base.Widget.extend({
+ init: function(parent, element_id, view) {
+ this._super(parent, element_id);
+ this.view = view;
+ },
+ on_events_loaded: function(users) {
+ this.$element.html(QWeb.render('CalendarView.sidebar.responsible', { users : users }));
+ // TODO: bind checkboxes reload sheduler
+ }
+});
+
+openerp.base_calendar.SidebarNavigator = openerp.base.Widget.extend({
+ init: function(parent, element_id, view) {
+ this._super(parent, element_id);
+ this.view = view;
+ },
+ on_events_loaded: function(events) {
+ }
+});
+
};
// DEBUG_RPC:rpc.request:('execute', 'addons-dsh-l10n_us', 1, '*', ('ir.filters', 'get_filters', u'res.partner'))
diff --git a/addons/base_calendar/static/src/xml/base_calendar.xml b/addons/base_calendar/static/src/xml/base_calendar.xml
index 59f77cbb0bc..757c4925cd1 100644
--- a/addons/base_calendar/static/src/xml/base_calendar.xml
+++ b/addons/base_calendar/static/src/xml/base_calendar.xml
@@ -1,27 +1,26 @@
<template>
- <t t-name="CalendarView">
+ <t t-name="CalendarView">
<h3 class="title"><t t-esc="fields_view.arch.attrs.string"/></h3>
- <table class="calendar-view" width="100%" height="100%" cellspacing="0" cellpadding="0">
- <tr>
- <td style="width:100%;" align="left">
- <div id="openerp_scheduler" class="dhx_cal_container" style="height: 1000px;width: 100%;">
- <div class="dhx_cal_navline">
- <div class="dhx_cal_prev_button"/>
- <div class="dhx_cal_next_button"/>
- <div class="dhx_cal_today_button"/>
- <div class="dhx_cal_date"/>
- <div class="dhx_minical_icon" id="dhx_minical_icon"/>
- <div class="dhx_cal_tab" name="day_tab" style="right:204px;"/>
- <div class="dhx_cal_tab" name="week_tab" style="right:140px;"/>
- <div class="dhx_cal_tab" name="month_tab" style="right:76px;"/>
- </div>
- <div class="dhx_cal_header">
- </div>
- <div class="dhx_cal_data">
- </div>
- </div>
- </td>
- </tr>
- </table>
- </t>
+ <div id="openerp_scheduler" class="dhx_cal_container" style="height: 1000px;">
+ <div class="dhx_cal_navline">
+ <div class="dhx_cal_prev_button"/>
+ <div class="dhx_cal_next_button"/>
+ <div class="dhx_cal_today_button"/>
+ <div class="dhx_cal_date"/>
+ <div class="dhx_cal_tab" name="day_tab" style="right:204px;"/>
+ <div class="dhx_cal_tab" name="week_tab" style="right:140px;"/>
+ <div class="dhx_cal_tab" name="month_tab" style="right:76px;"/>
+ </div>
+ <div class="dhx_cal_header">
+ </div>
+ <div class="dhx_cal_data">
+ </div>
+ </div>
+</t>
+<t t-name="CalendarView.sidebar.responsible">
+ <div t-foreach="users" t-as="user" class="oe_calendar_responsible" t-attf-style="background: #{user.color}">
+ <input type="checkbox" name="selection" t-att-value="user.id"/>
+ <span><t t-esc="user.name"/></span>
+ </div>
+</t>
</template>