From 558ad0616a4fef54ec290ef1967ab0d0ac083260 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Wed, 3 Oct 2012 16:04:28 +0530 Subject: [PATCH 01/26] [IMP]remove callbacks from call method and improve related code. bzr revid: vme@tinyerp.com-20121003103428-fnr942tzl065rcei --- addons/web/static/src/js/data.js | 4 ++-- addons/web/static/test/fulltest/dataset.js | 4 ++-- addons/web_view_editor/static/src/js/view_editor.js | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index 2b82e618203..cf4b29ab56b 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -586,8 +586,8 @@ instance.web.DataSet = instance.web.CallbackEnabled.extend({ * @param {Function} error_callback * @returns {$.Deferred} */ - call: function (method, args, callback, error_callback) { - return this._model.call(method, args).then(callback, error_callback); + call: function (method, args) { + return this._model.call(method, args); }, /** * Calls an arbitrary method, with more crazy diff --git a/addons/web/static/test/fulltest/dataset.js b/addons/web/static/test/fulltest/dataset.js index d276f4e2494..f7e64fba53e 100644 --- a/addons/web/static/test/fulltest/dataset.js +++ b/addons/web/static/test/fulltest/dataset.js @@ -82,14 +82,14 @@ $(document).ready(function () { }); t.test('call', function (openerp) { var ds = new openerp.web.DataSet({session: openerp.session}, 'mod'); - t.expect(ds.call('frob', ['a', 'b', 42]), function (r) { + t.expect(ds.call('frob', ['a', 'b', 42]).then(function (r) { strictEqual(r.method, 'frob'); strictEqual(r.args.length, 3); deepEqual(r.args, ['a', 'b', 42]); ok(_.isEmpty(r.kwargs)); - }); + })); }); t.test('name_get').then(function (openerp) { var ds = new openerp.web.DataSet({session: openerp.session}, 'mod'); diff --git a/addons/web_view_editor/static/src/js/view_editor.js b/addons/web_view_editor/static/src/js/view_editor.js index 73d07efd5c0..e65f0ab5d38 100644 --- a/addons/web_view_editor/static/src/js/view_editor.js +++ b/addons/web_view_editor/static/src/js/view_editor.js @@ -136,7 +136,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({ var field_dataset = new instance.web.DataSetSearch(this, this.model, null, null); var model_dataset = new instance.web.DataSetSearch(this, 'ir.model', null, null); var view_string = "", field_name = false, self = this; - field_dataset.call( 'fields_get', [], function(fields) { + field_dataset.call( 'fields_get', []).then(function(fields) { _.each(['name', 'x_name'], function(value) { if (_.include(_.keys(fields), value)) { field_name = value; @@ -539,7 +539,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({ var value = _.has(_CHILDREN, element) ? element : _.str.include(html_tag, element)?"html_tag":false; property_to_check.push(value); }); - field_dataset.call( 'fields_get', [], function(result) { + field_dataset.call( 'fields_get', []).then(function(result) { var fields = _.keys(result); fields.push(" "),fields.sort(); self.on_add_node(property_to_check, fields); From 30069a02398c4f9de698c6fcc43bc4958aa1d960 Mon Sep 17 00:00:00 2001 From: ggh-openerp Date: Wed, 3 Oct 2012 17:58:36 +0530 Subject: [PATCH 02/26] [IMP]In rpc method remove callback and modify relate code bzr revid: ggh@tinyerp.com-20121003122836-36g8ijxdcjwgntjl --- addons/web/static/src/js/chrome.js | 10 +++++----- addons/web/static/src/js/corelib.js | 6 +++--- addons/web/static/src/js/coresetup.js | 4 ++-- addons/web/static/src/js/data_export.js | 8 ++++---- addons/web/static/src/js/search.js | 2 +- addons/web/static/src/js/view_form.js | 4 ++-- addons/web/static/src/js/view_list.js | 2 +- addons/web/static/src/js/view_tree.js | 2 +- addons/web/static/src/js/views.js | 6 +++--- addons/web_calendar/static/src/js/calendar.js | 2 +- addons/web_diagram/static/src/js/diagram.js | 3 +-- 11 files changed, 24 insertions(+), 25 deletions(-) diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index bed4a159535..985912d57bf 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -392,7 +392,7 @@ instance.web.DatabaseManager = instance.web.Widget.extend({ do_create: function(form) { var self = this; var fields = $(form).serializeArray(); - self.rpc("/web/database/create", {'fields': fields}, function(result) { + self.rpc("/web/database/create", {'fields': fields}).then(function(result) { var form_obj = self.to_object(fields); var client_action = { type: 'ir.actions.client', @@ -418,7 +418,7 @@ instance.web.DatabaseManager = instance.web.Widget.extend({ if (!db || !confirm("Do you really want to delete the database: " + db + " ?")) { return; } - self.rpc("/web/database/drop", {'fields': fields}, function(result) { + self.rpc("/web/database/drop", {'fields': fields}).then(function(result) { if (result.error) { self.display_error(result); return; @@ -481,7 +481,7 @@ instance.web.DatabaseManager = instance.web.Widget.extend({ var self = this; self.rpc("/web/database/change_password", { 'fields': $(form).serializeArray() - }, function(result) { + }).then(function(result) { if (result.error) { self.display_error(result); return; @@ -660,7 +660,7 @@ instance.web.ChangePassword = instance.web.Widget.extend({ submitHandler: function (form) { self.rpc("/web/session/change_password",{ 'fields': $(form).serializeArray() - }, function(result) { + }).then(function(result) { if (result.error) { self.display_error(result); return; @@ -1165,7 +1165,7 @@ instance.web.EmbeddedClient = instance.web.Client.extend({ var self = this; return $.when(this._super()).pipe(function() { return instance.session.session_authenticate(self.dbname, self.login, self.key, true).pipe(function() { - return self.rpc("/web/action/load", { action_id: self.action_id }, function(result) { + return self.rpc("/web/action/load", { action_id: self.action_id }).then(function(result) { var action = result.result; action.flags = _.extend({ //views_switcher : false, diff --git a/addons/web/static/src/js/corelib.js b/addons/web/static/src/js/corelib.js index 62ac48f0c61..d6dfac963e0 100644 --- a/addons/web/static/src/js/corelib.js +++ b/addons/web/static/src/js/corelib.js @@ -841,7 +841,7 @@ instance.web.Widget = instance.web.Class.extend(instance.web.WidgetMixin, { rpc: function(url, data, success, error) { var def = $.Deferred().then(success, error); var self = this; - instance.session.rpc(url, data). then(function() { + instance.session.rpc(url, data).then(function() { if (!self.isDestroyed()) def.resolve.apply(def, arguments); }, function() { @@ -1299,7 +1299,7 @@ instance.web.JsonRPC = instance.web.CallbackEnabled.extend({ * @param {Function} error_callback function to execute on RPC call failure * @returns {jQuery.Deferred} jquery-provided ajax deferred */ - rpc: function(url, params, success_callback, error_callback) { + rpc: function(url, params) { var self = this; // url can be an $.ajax option object if (_.isString(url)) { @@ -1358,7 +1358,7 @@ instance.web.JsonRPC = instance.web.CallbackEnabled.extend({ self.on_rpc_error(error, event); } }); - }).then(success_callback, error_callback).promise(); + }); return deferred; }, /** diff --git a/addons/web/static/src/js/coresetup.js b/addons/web/static/src/js/coresetup.js index ea160d6faee..7134c068ec3 100644 --- a/addons/web/static/src/js/coresetup.js +++ b/addons/web/static/src/js/coresetup.js @@ -19,9 +19,9 @@ instance.web.Session = instance.web.JsonRPC.extend( /** @lends instance.web.Sess this.name = instance._session_id; this.qweb_mutex = new $.Mutex(); }, - rpc: function(url, params, success_callback, error_callback) { + rpc: function(url, params) { params.session_id = this.session_id; - return this._super(url, params, success_callback, error_callback); + return this._super(url, params); }, /** * Setup a sessionm diff --git a/addons/web/static/src/js/data_export.js b/addons/web/static/src/js/data_export.js index 29aea6362f7..a06e9ccb155 100644 --- a/addons/web/static/src/js/data_export.js +++ b/addons/web/static/src/js/data_export.js @@ -49,7 +49,7 @@ instance.web.DataExport = instance.web.Dialog.extend({ self.rpc("/web/export/get_fields", { model: self.dataset.model, import_compat: Boolean(import_comp) - }, function (records) { + }).then(function (records) { got_fields.resolve(); self.on_show_data(records); }); @@ -57,7 +57,7 @@ instance.web.DataExport = instance.web.Dialog.extend({ return $.when( got_fields, - this.rpc('/web/export/formats', {}, this.do_setup_export_formats), + this.rpc('/web/export/formats', {}).then(this.do_setup_export_formats), this.show_exports_list()); }, do_setup_export_formats: function (formats) { @@ -91,7 +91,7 @@ instance.web.DataExport = instance.web.Dialog.extend({ self.$el.find('#fields_list option').remove(); var export_id = self.$el.find('#saved_export_list option:selected').val(); if (export_id) { - self.rpc('/web/export/namelist', {'model': self.dataset.model, export_id: parseInt(export_id)}, self.do_load_export_field); + self.rpc('/web/export/namelist', {'model': self.dataset.model, export_id: parseInt(export_id)}).then(self.do_load_export_field); } }); self.$el.find('#delete_export_list').click(function() { @@ -181,7 +181,7 @@ instance.web.DataExport = instance.web.Dialog.extend({ import_compat: Boolean(import_comp), parent_field_type : record['field_type'], exclude: exclude_fields - }, function(results) { + }).then(function(results) { record.loaded = true; self.on_show_data(results, record.id); }); diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 01bc0c76c87..63d6574dd82 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -1693,7 +1693,7 @@ instance.web.search.Advanced = instance.web.search.Input.extend({ }); return $.when( this._super(), - this.rpc("/web/searchview/fields_get", {model: this.view.model}, function(data) { + this.rpc("/web/searchview/fields_get", {model: this.view.model}).then(function(data) { self.fields = _.extend({ id: { string: 'ID', type: 'id' } }, data.fields); diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index bf6b869482b..af11ce27bda 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -4417,7 +4417,7 @@ instance.web.form.SelectCreatePopup = instance.web.form.AbstractFormPopup.extend self.rpc('/web/session/eval_domain_and_context', { domains: [], contexts: [this.context] - }, function (results) { + }).then(function (results) { var search_defaults = {}; _.each(results.context, function (value_, key) { var match = /^search_default_(.*)$/.exec(key); @@ -4485,7 +4485,7 @@ instance.web.form.SelectCreatePopup = instance.web.form.AbstractFormPopup.extend domains: domains || [], contexts: contexts || [], group_by_seq: groupbys || [] - }, function (results) { + }).then(function (results) { self.view_list.do_search(results.domain, results.context, results.group_by); }); }, diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index fd34ffddb7b..7457ca5ef67 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -482,7 +482,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi view_type: "tree", context: this.dataset.get_context(context), toolbar: !!this.options.$sidebar - }, callback); + }).then(callback); } }, /** diff --git a/addons/web/static/src/js/view_tree.js b/addons/web/static/src/js/view_tree.js index e0493a446e2..05760420ba8 100644 --- a/addons/web/static/src/js/view_tree.js +++ b/addons/web/static/src/js/view_tree.js @@ -45,7 +45,7 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie view_type: "tree", toolbar: this.view_manager ? !!this.view_manager.sidebar : false, context: this.dataset.get_context() - }, this.on_loaded); + }).then(this.on_loaded); }, /** * Returns the list of fields needed to correctly read objects. diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 2fff0e7b683..c80b111fdc8 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -648,7 +648,7 @@ instance.web.ViewManager = instance.web.Widget.extend({ domains: [this.action.domain || []].concat(domains || []), contexts: [action_context].concat(contexts || []), group_by_seq: groupbys || [] - }, function (results) { + }).then(function (results) { self.dataset._model = new instance.web.Model( self.dataset.model, results.context, results.domain); var groupby = results.group_by.length @@ -1054,7 +1054,7 @@ instance.web.Sidebar = instance.web.Widget.extend({ self.rpc("/web/action/load", { action_id: item.action.id, context: additional_context - }, function(result) { + }).then(function(result) { result.result.context = _.extend(result.result.context || {}, additional_context); result.result.flags = result.result.flags || {}; @@ -1233,7 +1233,7 @@ instance.web.View = instance.web.Widget.extend({ args.push(context); return dataset.call_button(action_data.name, args).then(handler); } else if (action_data.type=="action") { - return this.rpc('/web/action/load', { action_id: action_data.name, context: context, do_not_eval: true}, handler); + return this.rpc('/web/action/load', { action_id: action_data.name, context: context, do_not_eval: true}).then(handler); } else { return dataset.exec_workflow(record_id, action_data.name).then(handler); } diff --git a/addons/web_calendar/static/src/js/calendar.js b/addons/web_calendar/static/src/js/calendar.js index 644a35f7fad..81533413312 100644 --- a/addons/web_calendar/static/src/js/calendar.js +++ b/addons/web_calendar/static/src/js/calendar.js @@ -41,7 +41,7 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ }, start: function() { this._super(); - return this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type":"calendar", 'toolbar': false}, this.on_loaded); + return this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type":"calendar", 'toolbar': false}).then(this.on_loaded); }, destroy: function() { scheduler.clearAll(); diff --git a/addons/web_diagram/static/src/js/diagram.js b/addons/web_diagram/static/src/js/diagram.js index 543cc6a9c12..508aeb30563 100644 --- a/addons/web_diagram/static/src/js/diagram.js +++ b/addons/web_diagram/static/src/js/diagram.js @@ -105,8 +105,7 @@ instance.web.DiagramView = instance.web.View.extend({ }); this.rpc( - '/web_diagram/diagram/get_diagram_info',params, - function(result) { + '/web_diagram/diagram/get_diagram_info',params).then(function(result) { self.draw_diagram(result); } ); From 3c26ec305a6aa003a6d764048a82bd39a16e5792 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse <> Date: Thu, 4 Oct 2012 06:46:24 +0200 Subject: [PATCH 03/26] [IMP] mail: move the code from publisher_warranty to mail bzr revid: stw@openerp.com-20121004044624-hwa3kztl58zrjguh --- addons/mail/__init__.py | 1 + addons/mail/data/mail_data.xml | 14 +++++ addons/mail/mail_message.py | 2 +- addons/mail/update.py | 112 +++++++++++++++++++++++++++++++++ 4 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 addons/mail/update.py diff --git a/addons/mail/__init__.py b/addons/mail/__init__.py index 92e882ae6d8..abf714ad534 100644 --- a/addons/mail/__init__.py +++ b/addons/mail/__init__.py @@ -33,6 +33,7 @@ import report import wizard import res_config import mail_group_menu +import update # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mail/data/mail_data.xml b/addons/mail/data/mail_data.xml index 5fe1ee45b1d..522cbe8c7a7 100644 --- a/addons/mail/data/mail_data.xml +++ b/addons/mail/data/mail_data.xml @@ -13,6 +13,20 @@ + + Update Notification + + + 1 + weeks + -1 + + + + + 1000 + + comment diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index bbf68509277..9c873a31097 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -504,7 +504,7 @@ class mail_message(osv.Model): if not values.get('message_id') and values.get('res_id') and values.get('model'): values['message_id'] = tools.generate_tracking_message_id('%(model)s-%(res_id)s' % values) newid = super(mail_message, self).create(cr, uid, values, context) - self._notify(cr, 1, newid, context=context) + self._notify(cr, SUPERUSER_ID, newid, context=context) return newid def read(self, cr, uid, ids, fields=None, context=None, load='_classic_read'): diff --git a/addons/mail/update.py b/addons/mail/update.py new file mode 100644 index 00000000000..0e10ee0a7f1 --- /dev/null +++ b/addons/mail/update.py @@ -0,0 +1,112 @@ +# -*- coding: utf-8 -*- +import datetime +import logging +import sys +import urllib +import urllib2 + +import pooler +import release +from osv import osv, fields +from tools.translate import _ +from tools.safe_eval import safe_eval +from tools.config import config +from tools import misc + +_logger = logging.getLogger(__name__) + +""" +Time interval that will be used to determine up to which date we will +check the logs to see if a message we just received was already logged. +@type: datetime.timedelta +""" +_PREVIOUS_LOG_CHECK = datetime.timedelta(days=365) + +def get_sys_logs(cr, uid): + """ + Utility method to send a publisher warranty get logs messages. + """ + pool = pooler.get_pool(cr.dbname) + + dbuuid = pool.get('ir.config_parameter').get_param(cr, uid, 'database.uuid') + db_create_date = pool.get('ir.config_parameter').get_param(cr, uid, 'database.create_date') + limit_date = datetime.datetime.now() + limit_date = limit_date - datetime.timedelta(15) + limit_date_str = limit_date.strftime(misc.DEFAULT_SERVER_DATETIME_FORMAT) + nbr_users = pool.get("res.users").search(cr, uid, [], count=True) + nbr_active_users = pool.get("res.users").search(cr, uid, [("date", ">=", limit_date_str)], count=True) + nbr_share_users = False + nbr_active_share_users = False + if "share" in pool.get("res.users")._all_columns: + nbr_share_users = pool.get("res.users").search(cr, uid, [("share", "=", True)], count=True) + nbr_active_share_users = pool.get("res.users").search(cr, uid, [("share", "=", True), ("date", ">=", limit_date_str)], count=True) + user = pool.get("res.users").browse(cr, uid, uid) + msg = { + "dbuuid": dbuuid, + "nbr_users": nbr_users, + "nbr_active_users": nbr_active_users, + "nbr_share_users": nbr_share_users, + "nbr_active_share_users": nbr_active_share_users, + "dbname": cr.dbname, + "db_create_date": db_create_date, + "version": release.version, + "language": user.lang, + } + msg.update(pool.get("res.company").read(cr,uid,[1],["name","email","phone"])[0]) + + add_arg = {"timeout":30} if sys.version_info >= (2,6) else {} + arguments = {'arg0': msg, "action": "update",} + arguments_raw = urllib.urlencode(arguments) + + url = config.get("publisher_warranty_url") + uo = urllib2.urlopen(url, arguments_raw, **add_arg) + result = {} + try: + submit_result = uo.read() + result = safe_eval(submit_result) + finally: + uo.close() + return result + +class publisher_warranty_contract(osv.osv): + _name = "publisher_warranty.contract" + + def update_notification(self, cr, uid, ids, cron_mode=True, context=None): + """ + Send a message to OpenERP's publisher warranty server to check the + validity of the contracts, get notifications, etc... + + @param cron_mode: If true, catch all exceptions (appropriate for usage in a cron). + @type cron_mode: boolean + """ + try: + try: + result = get_sys_logs(cr, uid) + except Exception: + if cron_mode: # we don't want to see any stack trace in cron + return False + _logger.debug("Exception while sending a get logs messages", exc_info=1) + raise osv.except_osv(_("Error"), _("Error during communication with the publisher warranty server.")) + limit_date = (datetime.datetime.now() - _PREVIOUS_LOG_CHECK).strftime(misc.DEFAULT_SERVER_DATETIME_FORMAT) + # old behavior based on res.log; now on mail.message, that is not necessarily installed + proxy = self.pool.get('mail.message') + + model, res_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'mail', 'group_all_employees') + + for message in result["messages"]: + values = { + 'body' : message, + 'model' : 'mail.group', + 'res_id' : res_id, + 'user_id' : False, + } + proxy.create(cr, uid, values, context=context) + except Exception: + if cron_mode: + return False # we don't want to see any stack trace in cron + else: + raise + return True + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + From 5562530ea513164ba6dc9caa8f2019c110057aa9 Mon Sep 17 00:00:00 2001 From: Vishmita Date: Thu, 4 Oct 2012 19:02:46 +0530 Subject: [PATCH 04/26] [IMP]Remove add_last for on_write_completed bzr revid: vja@tinyerp.com-20121004133246-4atym1p9ib59kgk4 --- addons/web/static/src/js/view_form.js | 9 +++------ addons/web_gantt/static/src/js/gantt.js | 4 +--- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 1c32d5ef63e..b6ccc196afd 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2893,7 +2893,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc title: _t("Open: ") + self.string } ); - pop.on_write_completed.add_last(function() { + pop.on('on_write_complete',self,function(){ self.display_value = {}; self.render_value(); self.focus(); @@ -4038,9 +4038,7 @@ instance.web.form.Many2ManyListView = instance.web.ListView.extend(/** @lends in title: _t("Open: ") + this.m2m_field.string, readonly: this.getParent().get("effective_readonly") }); - pop.on_write_completed.add_last(function() { - self.reload_content(); - }); + pop.on('on_write_complete',self,self.reload_content); } }); @@ -4287,7 +4285,7 @@ instance.web.form.AbstractFormPopup = instance.web.Widget.extend({ }; this.dataset.write_function = function(id, data, options, sup) { var fct = self.options.write_function || sup; - return fct.call(this, id, data, options).then(self.on_write_completed); + return fct.call(this, id, data, options).then(function(){self.trigger('on_write_complete',self)}); }; this.dataset.parent_view = this.options.parent_view; this.dataset.child_name = this.options.child_name; @@ -4307,7 +4305,6 @@ instance.web.form.AbstractFormPopup = instance.web.Widget.extend({ this.$buttonpane = dialog.$el.dialog("widget").find(".ui-dialog-buttonpane").html(""); this.start(); }, - on_write_completed: function() {}, setup_form_view: function() { var self = this; if (this.row_id) { diff --git a/addons/web_gantt/static/src/js/gantt.js b/addons/web_gantt/static/src/js/gantt.js index 00e057258f1..0d600712d4a 100644 --- a/addons/web_gantt/static/src/js/gantt.js +++ b/addons/web_gantt/static/src/js/gantt.js @@ -211,9 +211,7 @@ instance.web_gantt.GanttView = instance.web.View.extend({ on_task_display: function(task) { var self = this; var pop = new instance.web.form.FormOpenPopup(self); - pop.on_write_completed.add_last(function() { - self.reload(); - }); + pop.on('on_write_complete',self,self.reload); pop.show_element( self.dataset.model, task.id, From 1a84478f61f5fa5a04cfcd6a785e4207f355f9ac Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 4 Oct 2012 16:38:41 +0200 Subject: [PATCH 05/26] [IMP] remove whitespaces bzr revid: abo@openerp.com-20121004143841-h1vjvn87nsvfvxnt --- addons/base_calendar/crm_meeting.py | 2 -- addons/base_calendar/crm_meeting_view.xml | 4 ++-- addons/event/event_view.xml | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/addons/base_calendar/crm_meeting.py b/addons/base_calendar/crm_meeting.py index b87114f3a66..80c8f54d52b 100644 --- a/addons/base_calendar/crm_meeting.py +++ b/addons/base_calendar/crm_meeting.py @@ -115,5 +115,3 @@ class crm_meeting(base_state, osv.Model): def case_close_send_note(self, cr, uid, ids, context=None): return self.message_post(cr, uid, ids, body=_("Meeting completed."), context=context) - - diff --git a/addons/base_calendar/crm_meeting_view.xml b/addons/base_calendar/crm_meeting_view.xml index adcfc23a520..aff3aa2d6cb 100644 --- a/addons/base_calendar/crm_meeting_view.xml +++ b/addons/base_calendar/crm_meeting_view.xml @@ -73,7 +73,7 @@
-

@@ -299,7 +299,7 @@ {"calendar_default_user_id": uid}

- Click to schedule a new meeting. + Click to schedule a new meeting.

The calendar is shared between employees and fully integrated with other applications such as the employee holidays or the business diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 6ad8fb20467..508bbb12bc5 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -1,7 +1,7 @@ - + event.registration form From ec563e56da3ab5f2168f43c65dcd336b310ebc23 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 4 Oct 2012 16:40:15 +0200 Subject: [PATCH 06/26] [IMP] meeting form view bzr revid: abo@openerp.com-20121004144015-17nkeu5akjy3l31a --- addons/base_calendar/crm_meeting_view.xml | 84 ++++++++++++----------- 1 file changed, 43 insertions(+), 41 deletions(-) diff --git a/addons/base_calendar/crm_meeting_view.xml b/addons/base_calendar/crm_meeting_view.xml index aff3aa2d6cb..140f49cdcfc 100644 --- a/addons/base_calendar/crm_meeting_view.xml +++ b/addons/base_calendar/crm_meeting_view.xml @@ -116,9 +116,49 @@ - - + + + + + +

+ + +
+
- - + calendar.attendee.tree calendar.attendee @@ -73,8 +71,7 @@
- - + calendar.attendee.search calendar.attendee @@ -110,18 +107,16 @@ {'default_sent_by_uid': uid} - + - - - + res.alarm.form res.alarm @@ -140,8 +135,7 @@ - - + res.alarm.tree res.alarm @@ -171,15 +165,13 @@ - - + - - + Event Form calendar.event @@ -334,8 +326,7 @@ - - + Event Tree calendar.event @@ -352,8 +343,7 @@ - - + Events Calendar calendar.event @@ -367,8 +357,7 @@ - - + Calendar Events Search calendar.event @@ -393,8 +382,7 @@ - - + Events ir.actions.act_window @@ -404,8 +392,7 @@ - - + diff --git a/addons/base_calendar/crm_meeting.py b/addons/base_calendar/crm_meeting.py index 80c8f54d52b..9ceaea671ca 100644 --- a/addons/base_calendar/crm_meeting.py +++ b/addons/base_calendar/crm_meeting.py @@ -43,14 +43,14 @@ class crm_meeting(base_state, osv.Model): _name = 'crm.meeting' _description = "Meeting" _order = "id desc" - _inherit = ["calendar.event", "mail.thread", 'ir.needaction_mixin'] + _inherit = ["calendar.event", "mail.thread", "ir.needaction_mixin"] _columns = { # base_state required fields 'create_date': fields.datetime('Creation Date', readonly=True), 'write_date': fields.datetime('Write Date', readonly=True), 'date_open': fields.datetime('Confirmed', readonly=True), 'date_closed': fields.datetime('Closed', readonly=True), - 'partner_ids': fields.many2many('res.partner', 'crm_meeting_partner_rel', 'meeting_id','partner_id', + 'partner_ids': fields.many2many('res.partner', 'crm_meeting_partner_rel', 'meeting_id', 'partner_id', string='Attendees', states={'done': [('readonly', True)]}), 'state': fields.selection( [('draft', 'Unconfirmed'), ('open', 'Confirmed')], From a280aa6d81288bed3bf7756c20826153a3a4c69f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20van=20der=20Essen?= Date: Fri, 5 Oct 2012 16:08:31 +0200 Subject: [PATCH 08/26] [FIX] removed blue background for readonly fields, fixed css errors as reported by firefox bzr revid: fva@openerp.com-20121005140831-ssp03115gu7zy1ge --- addons/web/static/src/css/base.css | 2 +- addons/web/static/src/css/base.sass | 2 +- addons/web_calendar/static/src/css/web_calendar.css | 1 - addons/web_diagram/static/src/css/base_diagram.css | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 165c893933c..14496fe3522 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -2246,7 +2246,7 @@ .openerp .oe_form .oe_datepicker_root { display: inline-block; } -.openerp .oe_form .oe_form_required input:not([disabled]), .openerp .oe_form .oe_form_required select:not([disabled]), .openerp .oe_form .oe_form_required textarea:not([disabled]) { +.openerp .oe_form .oe_form_required input:not([disabled]):not([readonly]), .openerp .oe_form .oe_form_required select:not([disabled]):not([readonly]), .openerp .oe_form .oe_form_required textarea:not([disabled]):not([readonly]) { background-color: #d2d2ff !important; } .openerp .oe_form .oe_form_invalid input, .openerp .oe_form .oe_form_invalid select, .openerp .oe_form .oe_form_invalid textarea { diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index 68446cf777b..784f93d94cf 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -1780,7 +1780,7 @@ $sheet-max-width: 860px .oe_datepicker_root display: inline-block .oe_form_required - input:not([disabled]), select:not([disabled]), textarea:not([disabled]) + input:not([disabled]):not([readonly]), select:not([disabled]):not([readonly]), textarea:not([disabled]):not([readonly]) background-color: #D2D2FF !important .oe_form_invalid input, select, textarea diff --git a/addons/web_calendar/static/src/css/web_calendar.css b/addons/web_calendar/static/src/css/web_calendar.css index 52ea63e787e..9cfc2f777bd 100644 --- a/addons/web_calendar/static/src/css/web_calendar.css +++ b/addons/web_calendar/static/src/css/web_calendar.css @@ -997,7 +997,6 @@ div.openerp .dhx_cal_editor textarea { } .openerp .dhx_cal_event_selected{ background-color: #757575; - color: ffffff; } /* Agenda week end */ .openerp .dhx_scale_bar_header { diff --git a/addons/web_diagram/static/src/css/base_diagram.css b/addons/web_diagram/static/src/css/base_diagram.css index 8d0a418f52e..6de8b5deb8a 100644 --- a/addons/web_diagram/static/src/css/base_diagram.css +++ b/addons/web_diagram/static/src/css/base_diagram.css @@ -49,5 +49,5 @@ -ms-user-select: none; -o-user-select: none; user-select: none; -}; +} From def9d0dabfbcb72c97ceed06265adc86f6ff9c5c Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Fri, 5 Oct 2012 16:54:13 +0200 Subject: [PATCH 09/26] [IMP] meeting form view: when 'recurrency' is checked, the recurrency options are required bzr revid: abo@openerp.com-20121005145413-7yyc3rr6ecx3ofu5 --- addons/base_calendar/crm_meeting_view.xml | 69 +++++++++++------------ 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/addons/base_calendar/crm_meeting_view.xml b/addons/base_calendar/crm_meeting_view.xml index 140f49cdcfc..37797a012aa 100644 --- a/addons/base_calendar/crm_meeting_view.xml +++ b/addons/base_calendar/crm_meeting_view.xml @@ -15,9 +15,9 @@ action_crm_meeting_read - + action - + crm.meeting client_action_multi @@ -33,9 +33,9 @@ action_crm_meeting_unread - + action - + crm.meeting client_action_multi @@ -124,38 +124,38 @@