diff --git a/openerp/addons/base/currency_data.xml b/openerp/addons/base/currency_data.xml index 8a3661f5fd2..7173b8492ab 100644 --- a/openerp/addons/base/currency_data.xml +++ b/openerp/addons/base/currency_data.xml @@ -1969,6 +1969,7 @@ £ 0.01 4 + before diff --git a/openerp/addons/base/ir/ir_attachment.py b/openerp/addons/base/ir/ir_attachment.py index 5f54b4aca8e..26dbe93a661 100644 --- a/openerp/addons/base/ir/ir_attachment.py +++ b/openerp/addons/base/ir/ir_attachment.py @@ -107,6 +107,8 @@ class ir_attachment(osv.osv): full_path = self._full_path(cr, uid, location, fname) try: os.unlink(full_path) + except OSError: + _logger.error("_file_delete could not unlink %s",full_path) except IOError: # Harmless and needed for race conditions _logger.error("_file_delete could not unlink %s",full_path) diff --git a/openerp/addons/base/ir/ir_cron_view.xml b/openerp/addons/base/ir/ir_cron_view.xml index 6a7cef3f1a8..edbc2d74b86 100644 --- a/openerp/addons/base/ir/ir_cron_view.xml +++ b/openerp/addons/base/ir/ir_cron_view.xml @@ -40,7 +40,7 @@ ir.cron - + @@ -48,6 +48,7 @@ + diff --git a/openerp/addons/base/ir/ir_mail_server.py b/openerp/addons/base/ir/ir_mail_server.py index e19742869ca..5a3c40552f0 100644 --- a/openerp/addons/base/ir/ir_mail_server.py +++ b/openerp/addons/base/ir/ir_mail_server.py @@ -370,7 +370,7 @@ class ir_mail_server(osv.osv): return msg def send_email(self, cr, uid, message, mail_server_id=None, smtp_server=None, smtp_port=None, - smtp_user=None, smtp_password=None, smtp_encryption='none', smtp_debug=False, + smtp_user=None, smtp_password=None, smtp_encryption=None, smtp_debug=False, context=None): """Sends an email directly (no queuing). @@ -388,7 +388,7 @@ class ir_mail_server(osv.osv): extracted from the combined list of ``To``, ``CC`` and ``BCC`` headers. :param mail_server_id: optional id of ir.mail_server to use for sending. overrides other smtp_* arguments. :param smtp_server: optional hostname of SMTP server to use - :param smtp_encryption: one of 'none', 'starttls' or 'ssl' (see ir.mail_server fields for explanation) + :param smtp_encryption: optional TLS mode, one of 'none', 'starttls' or 'ssl' (see ir.mail_server fields for explanation) :param smtp_port: optional SMTP port, if mail_server_id is not passed :param smtp_user: optional SMTP user, if mail_server_id is not passed :param smtp_password: optional SMTP password to use, if mail_server_id is not passed @@ -422,12 +422,6 @@ class ir_mail_server(osv.osv): mail_server_ids = self.search(cr, uid, [], order='sequence', limit=1) if mail_server_ids: mail_server = self.browse(cr, uid, mail_server_ids[0]) - else: - # we were passed an explicit smtp_server or nothing at all - smtp_server = smtp_server or tools.config.get('smtp_server') - smtp_port = tools.config.get('smtp_port', 25) if smtp_port is None else smtp_port - smtp_user = smtp_user or tools.config.get('smtp_user') - smtp_password = smtp_password or tools.config.get('smtp_password') if mail_server: smtp_server = mail_server.smtp_host @@ -436,6 +430,14 @@ class ir_mail_server(osv.osv): smtp_port = mail_server.smtp_port smtp_encryption = mail_server.smtp_encryption smtp_debug = smtp_debug or mail_server.smtp_debug + else: + # we were passed an explicit smtp_server or nothing at all + smtp_server = smtp_server or tools.config.get('smtp_server') + smtp_port = tools.config.get('smtp_port', 25) if smtp_port is None else smtp_port + smtp_user = smtp_user or tools.config.get('smtp_user') + smtp_password = smtp_password or tools.config.get('smtp_password') + if smtp_encryption is None and tools.config.get('smtp_ssl'): + smtp_encryption = 'starttls' # STARTTLS is the new meaning of the smtp_ssl flag as of v7.0 if not smtp_server: raise osv.except_osv( @@ -454,7 +456,7 @@ class ir_mail_server(osv.osv): return message_id try: - smtp = self.connect(smtp_server, smtp_port, smtp_user, smtp_password, smtp_encryption, smtp_debug) + smtp = self.connect(smtp_server, smtp_port, smtp_user, smtp_password, smtp_encryption or False, smtp_debug) smtp.sendmail(smtp_from, smtp_to_list, message.as_string()) finally: try: diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml index c9215763c3e..d3f204e102a 100644 --- a/openerp/addons/base/res/res_partner_view.xml +++ b/openerp/addons/base/res/res_partner_view.xml @@ -212,12 +212,15 @@ - + + + + - + - + diff --git a/openerp/addons/base/static/src/js/apps.js b/openerp/addons/base/static/src/js/apps.js index 397f028c1fd..a55c89a0483 100644 --- a/openerp/addons/base/static/src/js/apps.js +++ b/openerp/addons/base/static/src/js/apps.js @@ -2,6 +2,8 @@ openerp.base = function(instance) { instance.base.apps_remote = null; instance.base.apps_client = null; + + var _t = instance.web._t; instance.base.Apps = instance.web.Widget.extend({ template: 'EmptyComponent', @@ -98,7 +100,7 @@ openerp.base = function(instance) { }); }). fail(function(client) { - self.do_warn('Apps Server not reachable.', 'Showing local modules.', true); + self.do_warn(_t('OpenERP Apps Unreachable'), _t('Showing locally available modules'), true); self.rpc('/web/action/load', {action_id: self.failback_action_id}).done(function(action) { self.do_action(action); instance.webclient.menu.open_action(action.id); diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py index bcbdad081ad..34968a662fb 100644 --- a/openerp/osv/fields.py +++ b/openerp/osv/fields.py @@ -289,8 +289,8 @@ class date(_column): This method may be passed as value to initialize _defaults. :param Model model: model (osv) for which the date value is being - computed - technical field, currently ignored, - automatically passed when used in _defaults. + computed - automatically passed when used in + _defaults. :param datetime timestamp: optional datetime value to use instead of the current date and time (must be a datetime, regular dates can't be converted @@ -303,9 +303,13 @@ class date(_column): today = timestamp or DT.datetime.now() context_today = None if context and context.get('tz'): + tz_name = context['tz'] + else: + tz_name = model.pool.get('res.users').read(cr, SUPERUSER_ID, uid, ['tz'])['tz'] + if tz_name: try: utc = pytz.timezone('UTC') - context_tz = pytz.timezone(context['tz']) + context_tz = pytz.timezone(tz_name) utc_today = utc.localize(today, is_dst=False) # UTC = no DST context_today = utc_today.astimezone(context_tz) except Exception: @@ -346,9 +350,14 @@ class datetime(_column): """ assert isinstance(timestamp, DT.datetime), 'Datetime instance expected' if context and context.get('tz'): + tz_name = context['tz'] + else: + registry = openerp.modules.registry.RegistryManager.get(cr.dbname) + tz_name = registry.get('res.users').read(cr, SUPERUSER_ID, uid, ['tz'])['tz'] + if tz_name: try: utc = pytz.timezone('UTC') - context_tz = pytz.timezone(context['tz']) + context_tz = pytz.timezone(tz_name) utc_timestamp = utc.localize(timestamp, is_dst=False) # UTC = no DST return utc_timestamp.astimezone(context_tz) except Exception: diff --git a/openerp/service/__init__.py b/openerp/service/__init__.py index 307ee4a6526..c95e35d8252 100644 --- a/openerp/service/__init__.py +++ b/openerp/service/__init__.py @@ -130,7 +130,7 @@ def start_services_workers(): def _reexec(): """reexecute openerp-server process with (nearly) the same arguments""" if openerp.tools.osutil.is_running_as_nt_service(): - subprocess.call('sc stop {0} && sc start {0}'.format(nt_service_name), shell=True) + subprocess.call('net stop {0} && net start {0}'.format(nt_service_name), shell=True) exe = os.path.basename(sys.executable) strip_args = ['-d', '-u'] a = sys.argv[:] diff --git a/openerp/tools/config.py b/openerp/tools/config.py index ad8f5c73b4b..71d1d015d91 100644 --- a/openerp/tools/config.py +++ b/openerp/tools/config.py @@ -205,7 +205,7 @@ class configmanager(object): group.add_option('--smtp-port', dest='smtp_port', my_default=25, help='specify the SMTP port', type="int") group.add_option('--smtp-ssl', dest='smtp_ssl', action='store_true', my_default=False, - help='specify the SMTP server support SSL or not') + help='if passed, SMTP connections will be encrypted with SSL (STARTTLS)') group.add_option('--smtp-user', dest='smtp_user', my_default=False, help='specify the SMTP username for sending email') group.add_option('--smtp-password', dest='smtp_password', my_default=False, diff --git a/openerp/tools/translate.py b/openerp/tools/translate.py index 405566e37e7..41113b8ccd9 100644 --- a/openerp/tools/translate.py +++ b/openerp/tools/translate.py @@ -886,8 +886,9 @@ def trans_generate(lang, modules, cr): for root, dummy, files in osutil.walksymlinks(path): for fname in fnmatch.filter(files, '*.py'): babel_extract_terms(fname, path, root) + # mako provides a babel extractor: http://docs.makotemplates.org/en/latest/usage.html#babel for fname in fnmatch.filter(files, '*.mako'): - babel_extract_terms(fname, path, root, trans_type='report') + babel_extract_terms(fname, path, root, 'mako', trans_type='report') # Javascript source files in the static/src/js directory, rest is ignored (libs) if fnmatch.fnmatch(root, '*/static/src/js*'): for fname in fnmatch.filter(files, '*.js'):