diff options
| author | Fabien Meghazi <fme@openerp.com> | 2011-08-01 17:48:56 +0200 |
|---|---|---|
| committer | Fabien Meghazi <fme@openerp.com> | 2011-08-01 17:48:56 +0200 |
| commit | 29bbb4601ef67e7cd00bbafd8aac1710175f13d9 (patch) | |
| tree | a2b79c374595441b055b88e59a3c466b2e0a241c /addons/base_calendar/static/src | |
| parent | 595966fb2212466742b9ff35ee534c6a59b4a33d (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.js | 98 | ||||
| -rw-r--r-- | addons/base_calendar/static/src/xml/base_calendar.xml | 47 |
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> |
