From 1902a158215a4965f89b6076f729213d95ff3e46 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Mon, 6 Aug 2012 03:27:17 +0200 Subject: [PATCH] [IMP] mail alias review - work in progress bzr revid: odo@openerp.com-20120806012717-k5rtz4i78o4m198b --- addons/crm/crm.py | 2 +- addons/hr_recruitment/hr_recruitment.py | 41 +++++++++++++++---- addons/hr_recruitment/hr_recruitment_view.xml | 8 ++-- addons/mail/mail_alias.py | 2 +- addons/mail/res_config.py | 6 +-- addons/mail/res_config_view.xml | 6 ++- addons/mail/res_users.py | 8 ++-- addons/project/project.py | 4 +- addons/project/project_view.xml | 1 + 9 files changed, 53 insertions(+), 25 deletions(-) diff --git a/addons/crm/crm.py b/addons/crm/crm.py index 81d2c632266..a02155f8f19 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -164,7 +164,7 @@ class crm_case_section(osv.osv): def create(self, cr, uid, vals, context=None): alias_pool = self.pool.get('mail.alias') if not vals.get('alias_id'): - name = vals.get('alias_name') or vals['name'] + name = vals.pop('alias_name', None) or vals['name'] alias_id = alias_pool.create_unique_alias(cr, uid, {'alias_name': name}, model_name="crm.lead", diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index c2112c9ad84..b33f98cabe9 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -19,16 +19,19 @@ # ############################################################################## -from base_status.base_stage import base_stage +import logging import time -from datetime import datetime, timedelta -from lxml import etree -from osv import fields, osv +from datetime import datetime + import tools -import collections -import binascii +from osv import fields, osv +from openerp.modules.registry import RegistryManager +from openerp import SUPERUSER_ID +from base_status.base_stage import base_stage from tools.translate import _ +_logger = logging.getLogger(__name__) + AVAILABLE_STATES = [ ('draft', 'New'), ('cancel', 'Refused'), @@ -511,14 +514,34 @@ class hr_job(osv.osv): _columns = { 'survey_id': fields.many2one('survey', 'Interview Form', help="Choose an interview form for this job position and you will be able to print/answer this interview from all applicants who apply for this job"), 'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", required=True, - help="The email address associated with this job position. New emails received will automatically " - "create new applicants for this job."), + help="Email alias for this job position. New emails will automatically " + "create new applicants for this job position."), } + + def init(self, cr): + # Installation hook to create aliases for all jobs, right after _auto_init + registry = RegistryManager.get(cr.dbname) + mail_alias = registry.get('mail.alias') + hr_job = registry.get('hr.job') + jobs_no_alias = hr_job.search(cr, SUPERUSER_ID, [('alias_id', '=', False)]) + # Use read() not browse(), to avoid prefetching uninitialized inherited fields + for job_data in hr_job.read(cr, SUPERUSER_ID, jobs_no_alias, ['name']): + alias_id = mail_alias.create_unique_alias(cr, SUPERUSER_ID, {'alias_name': 'job_'+job_data['name'], + 'alias_force_id': job_data['id']}, + model_name=self._name) + hr_job.write(cr, SUPERUSER_ID, job_data['id'], {'alias_id': alias_id}) + _logger.info('Mail alias created for hr.job %s (uid %s)', job_data['login'], job_data['id']) + + # Finally attempt to reinstate the missing constraint + try: + cr.execute('ALTER TABLE hr_job ALTER COLUMN alias_id SET NOT NULL') + except Exception: + pass def create(self, cr, uid, vals, context=None): alias_pool = self.pool.get('mail.alias') if not vals.get('alias_id'): - name = vals.get('alias_name') or vals['name'] + name = vals.pop('alias_name', None) or vals['name'] alias_id = alias_pool.create_unique_alias(cr, uid, {'alias_name': "job_"+name}, model_name="hr.applicant", diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index 222341041d3..06e9ac93857 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -348,11 +348,13 @@ attrs="{'invisible':[('survey_id','=',False)]}"/> - +
- @ + +
-
+ diff --git a/addons/mail/mail_alias.py b/addons/mail/mail_alias.py index 9aefd5a94d4..807ed5dbe61 100644 --- a/addons/mail/mail_alias.py +++ b/addons/mail/mail_alias.py @@ -80,7 +80,7 @@ class mail_alias(osv.Model): } _sql_constraints = [ - ('mailbox_uniq', 'UNIQUE(alias_name)', 'Unfortunately this mail alias is already used, please choose a unique one') + ('alias_unique', 'UNIQUE(alias_name)', 'Unfortunately this email alias is already used, please choose a unique one') ] def _check_alias_defaults(self, cr, uid, ids, context=None): diff --git a/addons/mail/res_config.py b/addons/mail/res_config.py index 3670ddf1f82..ce2f75687ba 100644 --- a/addons/mail/res_config.py +++ b/addons/mail/res_config.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2010-Today OpenERP SA () +# Copyright (C) 2012-Today OpenERP SA () # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,8 +25,8 @@ class project_configuration(osv.TransientModel): _inherit = 'base.config.settings' _columns = { - 'alias_domain' : fields.char('Alias Domain', size=None, - help="If you have setup a catch-all mail domain redirected to " + 'alias_domain' : fields.char('Alias Domain', + help="If you have setup a catch-all email domain redirected to " "the OpenERP server, enter the domain name here."), } diff --git a/addons/mail/res_config_view.xml b/addons/mail/res_config_view.xml index 6dec5ec9583..a17a1f22a80 100644 --- a/addons/mail/res_config_view.xml +++ b/addons/mail/res_config_view.xml @@ -7,8 +7,10 @@ form - - + +
+
diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index cad2734d672..f0b987b369f 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -73,13 +73,13 @@ class res_users(osv.osv): mail_alias = registry.get('mail.alias') res_users = registry.get('res.users') users_no_alias = res_users.search(cr, SUPERUSER_ID, [('alias_id', '=', False)]) - # User read() not browse(), to avoid prefetching uninitialized inherited fields + # Use read() not browse(), to avoid prefetching uninitialized inherited fields for user_data in res_users.read(cr, SUPERUSER_ID, users_no_alias, ['login']): alias_id = mail_alias.create_unique_alias(cr, SUPERUSER_ID, {'alias_name': user_data['login'], - 'alias_model_id': self._name, - 'alias_force_id': user_data['id']}) + 'alias_force_id': user_data['id']}, + model_name=self._name) res_users.write(cr, SUPERUSER_ID, user_data['id'], {'alias_id': alias_id}) - _logger.info('Mail alias created for user_data %s (uid %s)', user_data['login'], user_data['id']) + _logger.info('Mail alias created for user %s (uid %s)', user_data['login'], user_data['id']) # Finally attempt to reinstate the missing constraint try: diff --git a/addons/project/project.py b/addons/project/project.py index e2a9a49e9ed..0af02cdf6b9 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -58,8 +58,8 @@ def short_name(name): but distinctive""" if not name: return name # keep 7 chars + end of the last word - hardcut_tokens = name[:7].split() - return ' '.join(name.split()[:len(hardcut_tokens)]) + keep_words = name[:7].strip().split() + return ' '.join(name.split()[:len(keep_words)]) class project(osv.osv): _name = "project.project" diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 3711c84f135..09a6bf20631 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -82,6 +82,7 @@
+ @