From c0bedd91f07cfb07084a16b1dd2d5839a8a21505 Mon Sep 17 00:00:00 2001 From: "olt@tinyerp.com" <> Date: Thu, 11 Aug 2011 12:58:35 +0200 Subject: [PATCH 01/13] [IMP] added more fields in default anonymization config bzr revid: olt@tinyerp.com-20110811105835-1tbv4s50o2160maf --- .../ir.model.fields.anonymization.csv | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/addons/anonymization/ir.model.fields.anonymization.csv b/addons/anonymization/ir.model.fields.anonymization.csv index f0918ccda80..2d7ac5de31a 100644 --- a/addons/anonymization/ir.model.fields.anonymization.csv +++ b/addons/anonymization/ir.model.fields.anonymization.csv @@ -37,3 +37,18 @@ anonymization_field_account_invoice_tax_base,account.invoice.tax,base anonymization_field_product_name,product.template,name anonymization_field_res_users_name,res.users,name anonymization_field_res_users_signature,res.users,signature +anonymization_field_res_partner_contact_name,res.partner.contact,name +anonymization_field_res_partner_contact_first_name,res.partner.contact,first_name +anonymization_field_res_partner_contact_maiden_name,res.partner.contact,maiden_name +anonymization_field_res_partner_contact_mobile,res.partner.contact,mobile +anonymization_field_res_partner_contact_email,res.partner.contact,email +anonymization_field_res_partner_job_email,res.partner.job,email +anonymization_field_res_partner_job_phone,res.partner.job,phone +anonymization_field_res_partner_job_fax,res.partner.job,fax +anonymization_field_res_partner_job_other,res.partner.job,other +anonymization_field_crm_phonecall_partner_phone,crm.phonecall,partner_phone +anonymization_field_training_participation_stakeholder_request_email,training.participation.stakeholder.request,email +anonymization_field_training_participation_contact_firstname,training.participation,contact_firstname +anonymization_field_training_participation_contact_lastname,training.participation,contact_lastname +anonymization_field_training_subscription_partner_rh_email,training.subscription,partner_rh_email +anonymization_field_training_subscription_line_job_email,training.subscription.line,job_email From 3c8664626cdc4ee553b12fcf0079fd83b298d694 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 11 Aug 2011 14:48:13 +0200 Subject: [PATCH 02/13] [fix] problem due alification bzr revid: nicolas.vanhoren@openerp.com-20110811124813-ni1mdvcmp6gwvhsn --- addons/base/static/src/js/form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 2eb06eba81f..8cb29d3e62f 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -1679,7 +1679,7 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({ self.save_form_view(); }); setTimeout(function () { - self.viewmanager.appendTo(this.$element); + self.viewmanager.appendTo(self.$element); }, 0); }, reload_current_view: function() { From 142ae74461975f16b4030337405b01870fa6221f Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 11 Aug 2011 15:12:57 +0200 Subject: [PATCH 03/13] [FIX] re-introduce M2M widget bzr revid: xmo@openerp.com-20110811131257-t6pdqsdrhuxgne22 --- addons/base/static/src/js/search.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index 661e0d650b8..e88e31ebba0 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -361,7 +361,6 @@ openerp.base.search.fields = new openerp.base.Registry({ 'selection': 'openerp.base.search.SelectionField', 'datetime': 'openerp.base.search.DateTimeField', 'date': 'openerp.base.search.DateField', - 'one2many': 'openerp.base.search.OneToManyField', 'many2one': 'openerp.base.search.ManyToOneField', 'many2many': 'openerp.base.search.ManyToManyField' }); @@ -796,6 +795,12 @@ openerp.base.search.ManyToOneField = openerp.base.search.CharField.extend({ return this._super(); } }); +/** + * m2m search field behaves pretty much exactly like a char field + * + * @class + */ +openerp.base.search.ManyToManyField = openerp.base.search.CharField.extend({}); openerp.base.search.ExtendedSearch = openerp.base.OldWidget.extend({ template: 'SearchView.extended_search', From 935f52f741ed3b579a63bc209ae78535c116be29 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 15:24:10 +0200 Subject: [PATCH 04/13] [IMP] CalendarView now works with date_delay bzr revid: fme@openerp.com-20110811132410-9g7nktccxfis9tkk --- .../base_calendar/static/src/js/calendar.js | 143 +++--------------- 1 file changed, 22 insertions(+), 121 deletions(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index b53ed9ba900..8107f88fb2c 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -99,7 +99,8 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ scheduler.config.multi_day = true; //Multi day events are not rendered in daily and weekly views scheduler.config.start_on_monday = true; scheduler.config.scroll_hour = 8; - scheduler.config.drag_resize = scheduler.config.drag_create = !!this.date_stop; + scheduler.config.drag_resize = true; + scheduler.config.drag_create = true; // Initialize Sceduler this.mode = this.mode || 'month'; @@ -131,7 +132,9 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ }, load_scheduler: function() { var self = this; - this.dataset.read_slice({}, function(events) { + this.dataset.read_slice({ + fields: _.keys(self.fields_view.fields) + }, function(events) { if (self.session.locale_code) { // TODO: replace $LAB $LAB.setOptions({AlwaysPreserveOrder: true}).script([ @@ -186,82 +189,35 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ this.refresh_minical(); this.sidebar.responsible.on_events_loaded(sidebar_items); }, - convert_event: function(event) { - var starts = event[this.date_start], - ends = event[this.date_delay] || 1, - span = 0, + convert_event: function(evt) { + var date_start = openerp.base.parse_datetime(evt[this.date_start]), + date_stop = this.date_stop ? openerp.base.parse_datetime(evt[this.date_stop]) : null, + date_delay = evt[this.date_delay] || null, res_text = '', res_description = []; - var parse_start_date = openerp.base.parse_datetime(starts); - if (event[this.date_stop]) { - var parse_end_date = openerp.base.parse_datetime(event[this.date_stop]); - } if (this.info_fields) { - var fld = event[this.info_fields[0]]; - - if (typeof fld == 'object') { - res_text = fld[fld.length -1]; - } else { - res_text = fld; - } + var fld = evt[this.info_fields[0]]; + res_text = (typeof fld == 'object') ? fld[fld.length -1] : res_text = fld; var sliced_info_fields = this.info_fields.slice(1); - for (sl_fld in sliced_info_fields) { - var slc_fld = event[sliced_info_fields[sl_fld]]; - + for (var sl_fld in sliced_info_fields) { + var slc_fld = evt[sliced_info_fields[sl_fld]]; if (typeof slc_fld == 'object') { res_description.push(slc_fld[slc_fld.length - 1]); - } else { - if(slc_fld) res_description.push(slc_fld); + } else if (slc_fld) { + res_description.push(slc_fld); } } } - - if (starts && ends) { - var n = 0, - h = ends; - if (ends == this.day_length) { - span = 1; - } else if (ends > this.day_length) { - n = ends / this.day_length; - h = ends % this.day_length; - n = parseInt(Math.floor(n)); - - if (h > 0) { - span = n + 1; - } else { - span = n; - } - } - var start = parse_start_date.setTime((parse_start_date.getTime() + (h * 60 * 60) + (n * 24 * 60 * 60))); - ends = parse_start_date; - } - - if (starts && this.date_stop) { - ends = parse_end_date; - if (event[this.date_stop] == undefined) { - var start = parse_start_date.setTime((parse_start_date.getTime() + (h * 60 * 60) + (n * 24 * 60 * 60))); - ends = parse_start_date; - } - var tds = parse_start_date.getTime(), - tde = parse_end_date.getTime(); - - if (tds >= tde) { - tde = tds + 60 * 60; - parse_end_date.setTime(tde); - ends = parse_end_date; - } - n = (tde - tds) / (60 * 60); - if (n >= this.day_length) { - span = Math.ceil(n / 24); - } + if (!date_stop && date_delay) { + date_stop = date_start.clone().addHours(date_delay); } return { - 'start_date': parse_start_date.toString('yyyy-MM-dd HH:mm:ss'), - 'end_date': ends.toString('yyyy-MM-dd HH:mm:ss'), + 'start_date': date_start.toString('yyyy-MM-dd HH:mm:ss'), + 'end_date': date_stop.toString('yyyy-MM-dd HH:mm:ss'), 'text': res_text, - 'id': event['id'], + 'id': evt.id, 'title': res_description.join() } }, @@ -317,15 +273,8 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ data[this.date_stop] = openerp.base.format_datetime(event_obj.end_date); } if (this.date_delay) { - var tds = (event_obj.start_date.getOrdinalNumber() / 1e3 >> 0) - (event_obj.start_date.getOrdinalNumber() < 0); - var tde = (event_obj.end_date.getOrdinalNumber() / 1e3 >> 0) - (event_obj.end_date.getOrdinalNumber() < 0); - var n = (tde - tds) / (60 * 60); - if (n > this.day_length) { - var d = Math.floor(n / 24), - h = n % 24; - n = d * this.day_length + h; - } - data[this.date_delay] = n; + var diff_seconds = Math.round((event_obj.end_date.getTime() - event_obj.start_date.getTime()) / 1000); + data[this.date_delay] = diff_seconds / 3600; } return data; }, @@ -362,54 +311,6 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ if (this.sidebar) { this.sidebar.$element.hide(); } - }, - popup_event: function(event_id) { - var self = this; - if (event_id) event_id = parseInt(event_id, 10); - var action = { - res_model: this.dataset.model, - res_id: event_id, - views: [[false, 'form']], - type: 'ir.actions.act_window', - view_type: 'form', - view_mode: 'form', - flags : { - search_view: false, - sidebar : false, - views_switcher : false, - action_buttons : false, - pager: false - } - } - var element_id = _.uniqueId("act_window_dialog"); - var dialog = $('
', { - 'id': element_id - }).dialog({ - modal: true, - width: 'auto', - height: 'auto', - buttons: { - Cancel: function() { - $(this).dialog("destroy"); - }, - Save: function() { - var view_manager = action_manager.viewmanager; - var _dialog = this; - view_manager.views[view_manager.active_view].controller.do_save(function(r) { - $(_dialog).dialog("destroy"); - // self.start(); - self.load_scheduler(); - }) - } - } - }); - var action_manager = new openerp.base.ActionManager(this, element_id); - action_manager.start(); - action_manager.do_action(action); - //Default_get - if (!event_id) { - this.dataset.index = null; - } } }); From 1dea9ed16fedae2b8d08328b03b84d1fe5948694 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 11 Aug 2011 16:44:07 +0200 Subject: [PATCH 05/13] [FIX] when reloading the view description thingie, the listview needs to send the search context along so stuff line invisible attributes (for invisible columns) can be correctly evaluated bzr revid: xmo@openerp.com-20110811144407-f5nlq89wqdh4z0pa --- addons/base/static/src/js/list.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index e7abfdfaf0f..3032e702a73 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -352,8 +352,9 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi * Reloads the list view based on the current settings (dataset & al) * * @param {Boolean} [grouped] Should the list be displayed grouped + * @param {Object} [context] context to send the server while loading the view */ - reload_view: function (grouped) { + reload_view: function (grouped, context) { var self = this; var callback = function (field_view_get) { self.on_loaded(field_view_get, grouped); @@ -364,7 +365,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi return this.rpc('/base/listview/load', { model: this.model, view_id: this.view_id, - context: this.dataset.get_context(), + context: this.dataset.get_context(context), toolbar: this.options.sidebar }, callback); } @@ -411,7 +412,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi results.group_by = null; } - this.reload_view(!!results.group_by).then( + this.reload_view(!!results.group_by, results.context).then( $.proxy(this, 'reload_content')); }, /** From 1dea8eff47b258bcab4e81a765080a7ffa618fad Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 11 Aug 2011 16:59:04 +0200 Subject: [PATCH 06/13] [FIX] action where res_id is defined bzr revid: al@openerp.com-20110811145904-0on11bcatcvg8r3q --- addons/base/static/src/js/view_tree.js | 1 - addons/base/static/src/js/views.js | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/base/static/src/js/view_tree.js b/addons/base/static/src/js/view_tree.js index da426080574..5c3c7457e1c 100644 --- a/addons/base/static/src/js/view_tree.js +++ b/addons/base/static/src/js/view_tree.js @@ -176,7 +176,6 @@ openerp.base.TreeView = openerp.base.View.extend({ }, function (actions) { if (!actions.length) { return; } var action = actions[0][2]; - action.flags.new_window = true; self.do_action(action); }); }, diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js index fc6e38593d4..7e6bfa0a5cb 100644 --- a/addons/base/static/src/js/views.js +++ b/addons/base/static/src/js/views.js @@ -39,7 +39,6 @@ openerp.base.ActionManager = openerp.base.Widget.extend({ var type = action.type.replace(/\./g,'_'); var popup = action.target === 'new'; action.flags = _.extend({ - popup: popup, views_switcher : !popup, search_view : !popup, action_buttons : !popup, @@ -53,7 +52,7 @@ openerp.base.ActionManager = openerp.base.Widget.extend({ this[type](action, on_close); }, ir_actions_act_window: function (action, on_close) { - if (action.flags.popup) { + if (action.target === 'new') { if (this.dialog == null) { this.dialog = new openerp.base.Dialog(this, { title: action.name, width: '80%' }); if(on_close) @@ -252,13 +251,15 @@ openerp.base.ViewManager = openerp.base.Widget.extend({ openerp.base.ViewManagerAction = openerp.base.ViewManager.extend({ init: function(parent, action) { this.session = parent.session; + this.action = action; var dataset; if (!action.res_id) { dataset = new openerp.base.DataSetSearch(this, action.res_model, action.context, action.domain); } else { + this.action.flags.search_view = false; dataset = new openerp.base.DataSetStatic(this, action.res_model, action.context, [action.res_id]); + dataset.index = 0; } - this.action = action; this._super(parent, dataset, action.views); this.action = action; this.flags = this.action.flags || {}; From a245bf37194da0ad2e0ebbb06fc8665b6ad7cc49 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 11 Aug 2011 18:03:47 +0200 Subject: [PATCH 07/13] [imp] add Save & New in popups for o2m & m2m bzr revid: nicolas.vanhoren@openerp.com-20110811160347-rn4kjlpib1lh1o5p --- addons/base/static/src/js/form.js | 71 ++++++++++++++++++++--------- addons/base/static/src/xml/base.xml | 14 ++++-- 2 files changed, 59 insertions(+), 26 deletions(-) diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 8cb29d3e62f..4e7876b1768 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -1506,7 +1506,6 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ var dataset = new openerp.base.DataSetStatic(self, self.field.relation, self.build_context()); dataset.name_get([element_ids[0]], function(data) { self._change_int_ext_value(data[0]); - pop.stop(); }); }); }, @@ -1842,16 +1841,16 @@ openerp.base.form.One2ManyListView = openerp.base.ListView.extend({ pop.select_element(self.o2m.field.relation,{ initial_view: "form", alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined, - auto_create: false, + create_function: function(data) { + return self.o2m.dataset.create(data, function(r) { + self.o2m.dataset.set_ids(self.o2m.dataset.ids.concat([r.result])); + self.o2m.dataset.on_change(); + }); + }, parent_view: self.o2m.view }, self.o2m.build_domain(), self.o2m.build_context()); - pop.on_create.add(function(data) { - self.o2m.dataset.create(data, function(r) { - self.o2m.dataset.set_ids(self.o2m.dataset.ids.concat([r.result])); - self.o2m.dataset.on_change(); - pop.stop(); - self.o2m.reload_current_view(); - }); + pop.on_select_elements.add_last(function() { + self.o2m.reload_current_view(); }); } }, @@ -1946,7 +1945,6 @@ openerp.base.form.Many2ManyListView = openerp.base.ListView.extend({ self.reload_content(); } }); - pop.stop(); }); }, do_activate_record: function(index, id) { @@ -1968,16 +1966,22 @@ openerp.base.form.SelectCreatePopup = openerp.base.OldWidget.extend({ * - initial_view: form or search (default search) * - disable_multiple_selection * - alternative_form_view - * - auto_create (default true) + * - create_function (defaults to a naive saving behavior) * - parent_view */ select_element: function(model, options, domain, context) { + var self = this; this.model = model; this.domain = domain || []; this.context = context || {}; - this.options = _.defaults(options || {}, {"initial_view": "search", "auto_create": true}); + this.options = _.defaults(options || {}, {"initial_view": "search", "create_function": function() { + return self.create_row.apply(self, arguments); + }}); this.initial_ids = this.options.initial_ids; - openerp.base.form.dialog(this.render()); + this.created_elements = []; + openerp.base.form.dialog(this.render(), {close:function() { + self.check_exit(); + }}); this.start(); }, start: function() { @@ -2023,6 +2027,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.OldWidget.extend({ } $sbutton.click(function() { self.on_select_elements(self.selected_ids); + self.stop(); }); self.view_list = new openerp.base.form.SelectCreateListView(self, self.element_id + "_view_list", self.dataset, false, @@ -2035,15 +2040,11 @@ openerp.base.form.SelectCreatePopup = openerp.base.OldWidget.extend({ }); this.searchview.start(); }, - on_create: function(data) { - if (!this.options.auto_create) - return; + create_row: function(data) { var self = this; var wdataset = new openerp.base.DataSetSearch(this, this.model, this.context, this.domain); wdataset.parent_view = this.options.parent_view; - wdataset.create(data, function(r) { - self.on_select_elements([r.result]); - }); + return wdataset.create(data); }, on_select_elements: function(element_ids) { }, @@ -2071,18 +2072,43 @@ openerp.base.form.SelectCreatePopup = openerp.base.OldWidget.extend({ this.view_form.start(); this.view_form.on_loaded.add_last(function() { var $buttons = self.view_form.$element.find(".oe_form_buttons"); - $buttons.html(QWeb.render("SelectCreatePopup.form.buttons")); + $buttons.html(QWeb.render("SelectCreatePopup.form.buttons", {widget:self})); + var $nbutton = $buttons.find(".oe_selectcreatepopup-form-save-new"); + $nbutton.click(function() { + self._created = $.Deferred().then(function() { + self._created = undefined; + self.view_form.on_button_new(); + }); + self.view_form.do_save(); + }); var $nbutton = $buttons.find(".oe_selectcreatepopup-form-save"); $nbutton.click(function() { + self._created = $.Deferred().then(function() { + self._created = undefined; + self.check_exit(); + }); self.view_form.do_save(); }); var $cbutton = $buttons.find(".oe_selectcreatepopup-form-close"); $cbutton.click(function() { - self.stop(); + self.check_exit(); + }); + }); + this.dataset.on_create.add(function(data) { + self.options.create_function(data).then(function(r) { + self.created_elements.push(r.result); + if (self._created) { + self._created.resolve(); + } }); }); - this.dataset.on_create.add(this.on_create); this.view_form.do_show(); + }, + check_exit: function() { + if (this.created_elements.length > 0) { + this.on_select_elements(this.created_elements); + } + this.stop(); } }); @@ -2092,6 +2118,7 @@ openerp.base.form.SelectCreateListView = openerp.base.ListView.extend({ }, select_record: function(index) { this.popup.on_select_elements([this.dataset.ids[index]]); + this.popup.stop(); }, do_select: function(ids, records) { this._super(ids, records); diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index 4e581e8c175..f9ec63dd69c 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -1114,11 +1114,17 @@ - + - - + + + + + + + +
@@ -1127,7 +1133,7 @@ - + From 673a0683e825f0e257b831e94d464deaee011de4 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 18:07:54 +0200 Subject: [PATCH 08/13] [IMP] CalendarView: Fitler events using sidebar 'Responsibles' option bzr revid: fme@openerp.com-20110811160754-jfexopgrrqnfg9df --- .../base_calendar/static/src/js/calendar.js | 102 ++++++++++-------- .../static/src/xml/base_calendar.xml | 6 +- 2 files changed, 63 insertions(+), 45 deletions(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index 8107f88fb2c..9204695b663 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -17,6 +17,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ this.context = this.dataset.context || {}; this.has_been_loaded = $.Deferred(); this.creating_event_id = null; + this.dataset_events = []; if (this.options.action_views_ids.form) { this.form_dialog = new openerp.base_calendar.CalendarFormDialog(this, {}, this.options.action_views_ids.form, dataset); this.form_dialog.start(); @@ -130,25 +131,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ reload_event: function(id) { this.dataset.read_ids([id], _.keys(this.fields), this.on_events_loaded); }, - load_scheduler: function() { - var self = this; - this.dataset.read_slice({ - fields: _.keys(self.fields_view.fields) - }, function(events) { - if (self.session.locale_code) { - // TODO: replace $LAB - $LAB.setOptions({AlwaysPreserveOrder: true}).script([ - '/base_calendar/static/lib/dhtmlxScheduler/sources/locale_' + self.session.locale_code + '.js', - '/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_' + self.session.locale_code + '.js' - ]).wait(function() { - self.on_events_loaded(events); - }); - } else { - self.on_events_loaded(events); - } - }); - }, - on_events_loaded: function(events) { + on_events_loaded: function(events, fn_filter, no_filter_reload) { var self = this; //To parse Events we have to convert date Format @@ -162,32 +145,41 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ break; } - if (this.fields[this.date_start]['type'] == 'date') { + if (this.color_field) { + var filter = evt[this.color_field]; + if (filter) { + //evt.color = '#dddddd'; + var filter_item = { + value: (typeof filter === 'object') ? filter[0] : filter, + label: (typeof filter === 'object') ? filter[1] : filter, + color: evt.color + } + if (fn_filter && !fn_filter(filter_item.value)) { + continue; + } + if (_.indexOf(sidebar_ids, filter_item.value) === -1) { + sidebar_items.push(filter_item); + sidebar_ids.push(filter_item.value); + } + } + } + + /* + * TODO: check dates of type date + * if (this.fields[this.date_start]['type'] == 'date') { evt[this.date_start] = openerp.base.parse_date(evt[this.date_start]).set({hour: 9}).toString('yyyy-MM-dd HH:mm:ss'); } 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.refresh_scheduler(); this.refresh_minical(); - this.sidebar.responsible.on_events_loaded(sidebar_items); + if (!no_filter_reload) { + this.sidebar.responsible.on_events_loaded(sidebar_items); + } }, convert_event: function(evt) { var date_start = openerp.base.parse_datetime(evt[this.date_start]), @@ -213,13 +205,20 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ if (!date_stop && date_delay) { date_stop = date_start.clone().addHours(date_delay); } - return { + var r = { 'start_date': date_start.toString('yyyy-MM-dd HH:mm:ss'), 'end_date': date_stop.toString('yyyy-MM-dd HH:mm:ss'), 'text': res_text, 'id': evt.id, 'title': res_description.join() } + if (evt.color) { + r.color = evt.color; + } + if (evt.textColor) { + r.textColor = evt.textColor; + } + return r; }, do_create_event: function(event_id, event_obj) { var self = this, @@ -280,6 +279,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ }, do_search: function(domains, contexts, groupbys) { var self = this; + scheduler.clearAll(); $.when(this.has_been_loaded).then(function() { self.rpc('/base/session/eval_domain_and_context', { domains: domains, @@ -293,7 +293,11 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ fields: _.keys(self.fields), offset:0, limit: self.limit - }, self.on_events_loaded); + }, function(events) { + self.dataset_events = events; + self.on_events_loaded(events); + } + ); }); }); }, @@ -352,10 +356,25 @@ openerp.base_calendar.SidebarResponsible = openerp.base.Widget.extend({ init: function(parent, element_id, view) { this._super(parent, element_id); this.view = view; + this.$element.delegate('input:checkbox', 'change', this.on_filter_click); }, - on_events_loaded: function(users) { - this.$element.html(QWeb.render('CalendarView.sidebar.responsible', { users : users })); - // TODO: bind checkboxes reload sheduler + on_events_loaded: function(filters) { + this.$element.html(QWeb.render('CalendarView.sidebar.responsible', { filters: filters })); + }, + on_filter_click: function(e) { + var responsibles = [], + $e = $(e.target); + this.$element.find('div.oe_calendar_responsible input:checked').each(function() { + responsibles.push($(this).val()); + }); + scheduler.clearAll(); + if (responsibles.length) { + this.view.on_events_loaded(this.view.dataset_events, function(filter_value) { + return _.indexOf(responsibles, filter_value.toString()) > -1; + }, true); + } else { + this.view.on_events_loaded(this.view.dataset_events, false, true); + } } }); @@ -367,7 +386,6 @@ openerp.base_calendar.SidebarNavigator = openerp.base.Widget.extend({ 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 d5350ec9046..299f3ba0f3c 100644 --- a/addons/base_calendar/static/src/xml/base_calendar.xml +++ b/addons/base_calendar/static/src/xml/base_calendar.xml @@ -18,9 +18,9 @@
-
- - +
+ +
From c1401ef8f04fbabbf23089c9e222c000528979cb Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 18:19:27 +0200 Subject: [PATCH 09/13] [FIX] Fixed css problem with reauired fields bzr revid: fme@openerp.com-20110811161927-ot5p552djlb1iigw --- addons/base/static/src/css/base.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base/static/src/css/base.css b/addons/base/static/src/css/base.css index a629e559d4c..13294819f6b 100644 --- a/addons/base/static/src/css/base.css +++ b/addons/base/static/src/css/base.css @@ -923,7 +923,7 @@ label.error { height: 15px; } .openerp td.required input, .openerp td.required select { - background-color: #D2D2FF; + background-color: #D2D2FF !important; } .openerp td.invalid input, .openerp td.invalid select, .openerp td.invalid textarea { background-color: #F66 !important; From 9df84d52ed480d2e3ae8312e16c75197d612a473 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 18:21:04 +0200 Subject: [PATCH 10/13] [IMP] CalendarView: bind openerp form view to 'open details' icon bzr revid: fme@openerp.com-20110811162104-2pueyflxtpf7oqpf --- addons/base_calendar/static/src/js/calendar.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index 9204695b663..9640f600b55 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -112,6 +112,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ scheduler.attachEvent('onEventDeleted', this.do_delete_event); scheduler.attachEvent('onEventChanged', this.do_save_event); scheduler.attachEvent('onDblClick', this.do_edit_event); + scheduler.attachEvent('onBeforeLightbox', this.do_edit_event); this.mini_calendar = scheduler.renderCalendar({ container: this.sidebar.navigator.element_id, @@ -259,9 +260,9 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ this.dataset.index = index; this.form_dialog.form.do_show(); this.form_dialog.open(); - } else { - this.notification.warn("Edit event", "Could not find event #" + event_id); + return false; } + return true; }, get_event_data: function(event_obj) { var data = { From 4df61cba6930f14e6a54fccfea52949b875f3a7d Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 18:22:10 +0200 Subject: [PATCH 11/13] [FIX] CalendarView: extra argument type check bzr revid: fme@openerp.com-20110811162210-suf52n8k1abgu2az --- addons/base_calendar/static/src/js/calendar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index 9640f600b55..c3331ca6c06 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -155,7 +155,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ label: (typeof filter === 'object') ? filter[1] : filter, color: evt.color } - if (fn_filter && !fn_filter(filter_item.value)) { + if (typeof(fn_filter) === 'function') { continue; } if (_.indexOf(sidebar_ids, filter_item.value) === -1) { From 1ce53f9425af367f3af6182af4a0d6814afb3ff0 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 18:26:09 +0200 Subject: [PATCH 12/13] [FIX] Bug in previous revision bzr revid: fme@openerp.com-20110811162609-k112p5t0bewnaj42 --- addons/base_calendar/static/src/js/calendar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index c3331ca6c06..8cefd40193a 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -155,7 +155,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ label: (typeof filter === 'object') ? filter[1] : filter, color: evt.color } - if (typeof(fn_filter) === 'function') { + if (typeof(fn_filter) === 'function' && !fn_filter(filter_item.value)) { continue; } if (_.indexOf(sidebar_ids, filter_item.value) === -1) { From a94ac45ed761c632f4f8ecd4c6b8fdbf7549efcf Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 19:13:37 +0200 Subject: [PATCH 13/13] [IMP] CalendarView: Added colors to events bzr revid: fme@openerp.com-20110811171337-ebal9w5qwsjfbq2c --- .../base_calendar/static/src/js/calendar.js | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index 8cefd40193a..22088493e16 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -22,6 +22,10 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ this.form_dialog = new openerp.base_calendar.CalendarFormDialog(this, {}, this.options.action_views_ids.form, dataset); this.form_dialog.start(); } + this.COLOR_PALETTE = ['#f57900', '#cc0000', '#d400a8', '#75507b', '#3465a4', '#73d216', '#c17d11', '#edd400', + '#fcaf3e', '#ef2929', '#ff00c9', '#ad7fa8', '#729fcf', '#8ae234', '#e9b96e', '#fce94f', + '#ff8e00', '#ff0000', '#b0008c', '#9000ff', '#0078ff', '#00ff00', '#e6ff00', '#ffff00', + '#905000', '#9b0000', '#840067', '#510090', '#0000c9', '#009b00', '#9abe00', '#ffc900' ]; }, start: function() { this.rpc("/base_calendar/calendarview/load", {"model": this.model, "view_id": this.view_id, 'toolbar': true}, this.on_loaded); @@ -132,6 +136,10 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ reload_event: function(id) { this.dataset.read_ids([id], _.keys(this.fields), this.on_events_loaded); }, + get_color: function(index) { + index = index % this.COLOR_PALETTE.length; + return this.COLOR_PALETTE[index]; + }, on_events_loaded: function(events, fn_filter, no_filter_reload) { var self = this; @@ -149,30 +157,31 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ if (this.color_field) { var filter = evt[this.color_field]; if (filter) { - //evt.color = '#dddddd'; var filter_item = { value: (typeof filter === 'object') ? filter[0] : filter, - label: (typeof filter === 'object') ? filter[1] : filter, - color: evt.color + label: (typeof filter === 'object') ? filter[1] : filter } if (typeof(fn_filter) === 'function' && !fn_filter(filter_item.value)) { continue; } - if (_.indexOf(sidebar_ids, filter_item.value) === -1) { + var filter_index = _.indexOf(sidebar_ids, filter_item.value); + if (filter_index === -1) { + evt.color = filter_item.color = this.get_color(sidebar_ids.length); sidebar_items.push(filter_item); sidebar_ids.push(filter_item.value); + } else { + evt.color = this.get_color(filter_index); } + evt.textColor = '#ffffff'; } } - /* - * TODO: check dates of type date - * if (this.fields[this.date_start]['type'] == 'date') { + if (this.fields[this.date_start]['type'] == 'date') { evt[this.date_start] = openerp.base.parse_date(evt[this.date_start]).set({hour: 9}).toString('yyyy-MM-dd HH:mm:ss'); } 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'); - }*/ + } res_events.push(this.convert_event(evt)); } scheduler.parse(res_events, 'json');