diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index bf9b6533b4a..1f24c371acd 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -79,6 +79,7 @@ class crm_lead(format_address, osv.osv): 'crm.mt_lead_lost': lambda self, cr, uid, obj, ctx=None: obj.probability == 0 and obj.stage_id and obj.stage_id.fold and obj.stage_id.sequence > 1, }, } + _mail_mass_mailing = _('Leads / Opportunities') def get_empty_list_help(self, cr, uid, help, context=None): if context.get('default_type') == 'lead': diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index ac11ef5e81d..fa51f58d696 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -80,6 +80,7 @@ class hr_applicant(osv.Model): _description = "Applicant" _order = "id desc" _inherit = ['mail.thread', 'ir.needaction_mixin'] + _track = { 'stage_id': { # this is only an heuristics; depending on your particular stage configuration it may not match all 'new' stages @@ -87,6 +88,7 @@ class hr_applicant(osv.Model): 'hr_recruitment.mt_applicant_stage_changed': lambda self, cr, uid, obj, ctx=None: obj.stage_id and obj.stage_id.sequence > 1, }, } + _mail_mass_mailing = _('Applicants') def _get_default_department_id(self, cr, uid, context=None): """ Gives default department by checking if present in the context """ diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 53e4017951c..8ea28cbbf75 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -96,6 +96,9 @@ class mail_thread(osv.AbstractModel): # :param function lambda: returns whether the tracking should record using this subtype _track = {} + # Mass mailing feature + _mail_mass_mailing = False + def get_empty_list_help(self, cr, uid, help, context=None): """ Override of BaseModel.get_empty_list_help() to generate an help message that adds alias information. """ diff --git a/addons/mail/res_partner.py b/addons/mail/res_partner.py index 9b0d01db836..8b8f0d3c145 100644 --- a/addons/mail/res_partner.py +++ b/addons/mail/res_partner.py @@ -28,6 +28,7 @@ class res_partner_mail(osv.Model): _name = "res.partner" _inherit = ['res.partner', 'mail.thread'] _mail_flat_thread = False + _mail_mass_mailing = _('Customers') _columns = { 'notification_email_send': fields.selection([ diff --git a/addons/mass_mailing/controllers/main.py b/addons/mass_mailing/controllers/main.py index 5feb142694b..7396c02d453 100644 --- a/addons/mass_mailing/controllers/main.py +++ b/addons/mass_mailing/controllers/main.py @@ -30,6 +30,13 @@ class MassMailController(http.Controller): record_ids = request.registry[mailing.mailing_model].search(cr, SUPERUSER_ID, [('list_id', 'in', list_ids), ('id', '=', res_id), ('email', 'ilike', email)], context=context) request.registry[mailing.mailing_model].write(cr, SUPERUSER_ID, record_ids, {'opt_out': True}, context=context) else: - record_ids = request.registry[mailing.mailing_model].search(cr, SUPERUSER_ID, [('id', '=', res_id), ('email', 'ilike', email)], context=context) - request.registry[mailing.mailing_model].write(cr, SUPERUSER_ID, record_ids, {'opt_out': True}, context=context) + email_fname = None + if 'email_from' in request.registry[mailing.mailing_model]._all_columns: + email_fname = 'email_from' + elif 'email' in request.registry[mailing.mailing_model]._all_columns: + email_fname = 'email' + if email_fname: + record_ids = request.registry[mailing.mailing_model].search(cr, SUPERUSER_ID, [('id', '=', res_id), (email_fname, 'ilike', email)], context=context) + if 'opt_out' in request.registry[mailing.mailing_model]._all_columns: + request.registry[mailing.mailing_model].write(cr, SUPERUSER_ID, record_ids, {'opt_out': True}, context=context) return 'OK' diff --git a/addons/mass_mailing/models/mass_mailing.py b/addons/mass_mailing/models/mass_mailing.py index 1174938628e..cb94001be49 100644 --- a/addons/mass_mailing/models/mass_mailing.py +++ b/addons/mass_mailing/models/mass_mailing.py @@ -299,10 +299,13 @@ class MassMailing(osv.Model): return results def _get_mailing_model(self, cr, uid, context=None): - return [ - ('res.partner', _('Customers')), - ('mail.mass_mailing.contact', _('Mailing List')) - ] + res = [] + for model_name in self.pool: + model = self.pool[model_name] + if hasattr(model, '_mail_mass_mailing') and getattr(model, '_mail_mass_mailing'): + res.append((model._name, getattr(model, '_mail_mass_mailing'))) + res.append(('mail.mass_mailing.contact', _('Mailing List'))) + return res # indirections for inheritance _mailing_model = lambda self, *args, **kwargs: self._get_mailing_model(*args, **kwargs) diff --git a/addons/mass_mailing_applicant/__init__.py b/addons/mass_mailing_applicant/__init__.py deleted file mode 100644 index 8ec00dbffc7..00000000000 --- a/addons/mass_mailing_applicant/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2014-TODAY OpenERP SA (http://www.openerp.com) -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import models -import controllers diff --git a/addons/mass_mailing_applicant/__openerp__.py b/addons/mass_mailing_applicant/__openerp__.py deleted file mode 100644 index 14080f610ac..00000000000 --- a/addons/mass_mailing_applicant/__openerp__.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- - -{ - 'name': 'Mass Mailing with Recruitment', - 'version': '1.0', - 'depends': ['mass_mailing', 'hr_recruitment'], - 'author': 'OpenERP SA', - 'category': 'Hidden/Dependency', - 'description': """ -Bridge module between Mass Mailing and HR Recruitment - """, - 'website': 'http://www.openerp.com', - 'data': [], - 'demo': [], - 'installable': True, - 'auto_install': True, -} diff --git a/addons/mass_mailing_applicant/controllers/__init__.py b/addons/mass_mailing_applicant/controllers/__init__.py deleted file mode 100644 index 039d9715fab..00000000000 --- a/addons/mass_mailing_applicant/controllers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -import main \ No newline at end of file diff --git a/addons/mass_mailing_applicant/controllers/main.py b/addons/mass_mailing_applicant/controllers/main.py deleted file mode 100644 index ada86f76886..00000000000 --- a/addons/mass_mailing_applicant/controllers/main.py +++ /dev/null @@ -1,21 +0,0 @@ - -from openerp import http, SUPERUSER_ID -from openerp.addons.mass_mailing.controllers import main -from openerp.http import request - - -class MassMailController(main.MassMailController): - - @http.route(['/mail/mailing//unsubscribe'], type='http', auth='none') - def mailing(self, mailing_id, email=None, res_id=None, **post): - cr, uid, context = request.cr, request.uid, request.context - MassMailing = request.registry['mail.mass_mailing'] - mailing_ids = MassMailing.exists(cr, SUPERUSER_ID, [mailing_id], context=context) - if not mailing_ids: - return super(MassMailController, self).mailing(mailing_id, email=email, res_id=res_id, **post) - mailing = MassMailing.browse(cr, SUPERUSER_ID, mailing_ids[0], context=context) - if mailing.mailing_model == 'hr.applicant': - record_ids = request.registry[mailing.mailing_model].search(cr, SUPERUSER_ID, [('id', '=', res_id), ('email_from', 'ilike', email)], context=context) - # request.registry[mailing.mailing_model].write(cr, SUPERUSER_ID, record_ids, {'opt_out': True}, context=context) - return 'OK' - return super(MassMailController, self).mailing(mailing_id, email=email, res_id=res_id, **post) diff --git a/addons/mass_mailing_applicant/models/__init__.py b/addons/mass_mailing_applicant/models/__init__.py deleted file mode 100644 index 623f552ca3b..00000000000 --- a/addons/mass_mailing_applicant/models/__init__.py +++ /dev/null @@ -1 +0,0 @@ -import mass_mailing \ No newline at end of file diff --git a/addons/mass_mailing_applicant/models/mass_mailing.py b/addons/mass_mailing_applicant/models/mass_mailing.py deleted file mode 100644 index f96269373d0..00000000000 --- a/addons/mass_mailing_applicant/models/mass_mailing.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- - -from openerp.osv import osv - - -class MassMailing(osv.Model): - """Inherit to add hr.applicant objects available for mass mailing """ - _name = 'mail.mass_mailing' - _inherit = 'mail.mass_mailing' - - def _get_mailing_model(self, cr, uid, context=None): - res = super(MassMailing, self)._get_mailing_model(cr, uid, context=context) - res.append(('hr.applicant', 'Applicants')) - return res diff --git a/addons/mass_mailing_crm/__init__.py b/addons/mass_mailing_crm/__init__.py deleted file mode 100644 index 8ec00dbffc7..00000000000 --- a/addons/mass_mailing_crm/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2014-TODAY OpenERP SA (http://www.openerp.com) -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import models -import controllers diff --git a/addons/mass_mailing_crm/__openerp__.py b/addons/mass_mailing_crm/__openerp__.py deleted file mode 100644 index 8463d649c3f..00000000000 --- a/addons/mass_mailing_crm/__openerp__.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- - -{ - 'name': 'Mass Mailing with CRM', - 'version': '1.0', - 'depends': ['mass_mailing', 'crm'], - 'author': 'OpenERP SA', - 'category': 'Hidden/Dependency', - 'description': """ -Bridge module between Mass Mailing and CRM - """, - 'website': 'http://www.openerp.com', - 'data': [], - 'demo': [], - 'installable': True, - 'auto_install': True, -} diff --git a/addons/mass_mailing_crm/controllers/__init__.py b/addons/mass_mailing_crm/controllers/__init__.py deleted file mode 100644 index 8ee9bae18d9..00000000000 --- a/addons/mass_mailing_crm/controllers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -import main diff --git a/addons/mass_mailing_crm/controllers/main.py b/addons/mass_mailing_crm/controllers/main.py deleted file mode 100644 index b189e5a4209..00000000000 --- a/addons/mass_mailing_crm/controllers/main.py +++ /dev/null @@ -1,21 +0,0 @@ - -from openerp import http, SUPERUSER_ID -from openerp.addons.mass_mailing.controllers import main -from openerp.http import request - - -class MassMailController(main.MassMailController): - - @http.route(['/mail/mailing//unsubscribe'], type='http', auth='none') - def mailing(self, mailing_id, email=None, res_id=None, **post): - cr, uid, context = request.cr, request.uid, request.context - MassMailing = request.registry['mail.mass_mailing'] - mailing_ids = MassMailing.exists(cr, SUPERUSER_ID, [mailing_id], context=context) - if not mailing_ids: - return super(MassMailController, self).mailing(mailing_id, email=email, res_id=res_id, **post) - mailing = MassMailing.browse(cr, SUPERUSER_ID, mailing_ids[0], context=context) - if mailing.mailing_model == 'crm.lead': - record_ids = request.registry[mailing.mailing_model].search(cr, SUPERUSER_ID, [('id', '=', res_id), ('email_from', 'ilike', email)], context=context) - request.registry[mailing.mailing_model].write(cr, SUPERUSER_ID, record_ids, {'opt_out': True}, context=context) - return 'OK' - return super(MassMailController, self).mailing(mailing_id, email=email, res_id=res_id, **post) diff --git a/addons/mass_mailing_crm/models/__init__.py b/addons/mass_mailing_crm/models/__init__.py deleted file mode 100644 index e32a6e2bcb3..00000000000 --- a/addons/mass_mailing_crm/models/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - -import mass_mailing diff --git a/addons/mass_mailing_crm/models/mass_mailing.py b/addons/mass_mailing_crm/models/mass_mailing.py deleted file mode 100644 index e5fcf1e7736..00000000000 --- a/addons/mass_mailing_crm/models/mass_mailing.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- - -from openerp.osv import osv - - -class MassMailing(osv.Model): - """Inherit to add crm.lead objects available for mass mailing """ - _name = 'mail.mass_mailing' - _inherit = 'mail.mass_mailing' - - def _get_mailing_model(self, cr, uid, context=None): - res = super(MassMailing, self)._get_mailing_model(cr, uid, context=context) - res.append(('crm.lead', 'Leads / Opportunities')) - return res