Mailing : actions #42

Open
youssef wants to merge 33 commits from youssef/GOLEM:Mailing_actions into master
25 changed files with 1019 additions and 0 deletions

18
golem_mail/__init__.py Normal file
View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
from . import wizard

View File

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
{
'name': 'GOLEM Mail',
'summary': 'GOLEM Mail',
'description': ''' GOLEM Mail ''',
'version': '10.0.0.0.1',
'category': 'GOLEM',
'author': 'Youssef El Ouahby, Fabien Bourgeois',
'license': 'AGPL-3',
'application': True,
'installable': True,
'auto_install': True,
'depends': ['mail', 'contacts'],
'data': ['wizard/golem_mail_presend_wizard_views.xml']
}

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
from . import golem_mail_presend_wizard, golem_mail_recipient, mail_compose_message

View File

@ -0,0 +1,53 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
""" GOLEM Mail Presend Wizard """
import logging
from odoo import models, fields, api, _
_LOGGER = logging.getLogger(__name__)
class GolemMailPresendWizard(models.TransientModel):
""" GOLEM Mail Presend Wizard """
_name = 'golem.mail.presend.wizard'
recipient_ids = fields.One2many('golem.mail.recipient', 'presend_wizard_id')
@api.multi
def edit_email(self):
""" Call mail_compose_message wizard """
self.ensure_one()
wizard = self[0]
emails = wizard.recipient_ids.filtered(lambda r: not r.partner_id).mapped('email')
semails = list(set([item.strip() for item in emails]))
partners = wizard.recipient_ids.filtered(lambda r: not r.opt_out).mapped('partner_id').ids
return {
'name' : _('Search results'),
'type' : 'ir.actions.act_window',
'res_model' : 'mail.compose.message',
'context' : {
'default_composition_mode': 'mass_mail',
'default_partner_to': "\\",
'default_use_template': True,
'default_template_id': self.env.ref('mail.email_template_partner').id,
'default_no_auto_thread': False,
'default_from_presend_wizard': True,
'partners_from_wizard': partners,
'emails_from_wizard': semails},
'view_mode': 'form',
'target': 'new'
}

View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
-->
<odoo>
<data>
<record model="ir.ui.view" id="golem_mail_presend_wizard_form">
<field name="name">GOLEM Mail Presend Wizard Form</field>
<field name="model">golem.mail.presend.wizard</field>
<field name="arch" type="xml">
<form>
<field name="recipient_ids">
<tree editable="bottom" colors="red: opt_out == True;">
<field name="partner_id" readonly="1"/>
<field name="firstname" readonly="1"/>
<field name="lastname" readonly="1"/>
<field name="phone" readonly="1"/>
<field name="email"/>
<field name="opt_out" readonly="1"/>
</tree>
</field>
<footer>
<button name="edit_email" string="Next"
type="object" class="oe_highlight"/>
<button string="Close" special="cancel" />
</footer>
</form>
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
""" GOLEM Mail Recipient Management """
import logging
from odoo import models, fields, api, _
_LOGGER = logging.getLogger(__name__)
class GolemMailRecipient(models.TransientModel):
""" GOLEM Mail Recipient """
_name = 'golem.mail.recipient'
partner_id = fields.Many2one('res.partner')
email = fields.Char()
firstname = fields.Char()
lastname = fields.Char()
phone = fields.Char()
opt_out = fields.Boolean()
presend_wizard_id = fields.Many2one('golem.mail.presend.wizard')
@api.multi
@api.constrains('partner_id')
def fill_related_fields(self):
""" fill related fields from partner_id """
for recipient in self:
if recipient.partner_id:
recipient.email = recipient.partner_id.email
recipient.firstname = recipient.partner_id.firstname
recipient.lastname = recipient.partner_id.lastname
recipient.phone = recipient.partner_id.phone
recipient.opt_out = recipient.partner_id.opt_out

View File

@ -0,0 +1,144 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
""" Mail Compose Message Adaptations """
from odoo import _, api, fields, models, SUPERUSER_ID, tools
from odoo.tools.safe_eval import safe_eval
class MailComposer(models.TransientModel):
""" Mail Compose Message Adaptations """
_inherit = 'mail.compose.message'
from_presend_wizard = fields.Boolean()
@api.multi
def send_mail(self, auto_commit=False):
""" Process the wizard content and proceed with sending the related
email(s), rendering any template patterns on the fly if needed. """
for wizard in self:
# Duplicate attachments linked to the email.template.
# Indeed, basic mail.compose.message wizard duplicates attachments in mass
# mailing mode. But in 'single post' mode, attachments of an email template
# also have to be duplicated to avoid changing their ownership.
if wizard.attachment_ids and wizard.composition_mode != 'mass_mail' and wizard.template_id:
new_attachment_ids = []
for attachment in wizard.attachment_ids:
if attachment in wizard.template_id.attachment_ids:
new_attachment_ids.append(attachment.copy({'res_model': 'mail.compose.message', 'res_id': wizard.id}).id)
else:
new_attachment_ids.append(attachment.id)
wizard.write({'attachment_ids': [(6, 0, new_attachment_ids)]})
# Mass Mailing
mass_mode = wizard.composition_mode in ('mass_mail', 'mass_post')
Mail = self.env['mail.mail']
ActiveModel = self.env[wizard.model if wizard.model else 'mail.thread']
if wizard.template_id:
# template user_signature is added when generating body_html
# mass mailing: use template auto_delete value -> note, for emails mass mailing only
Mail = Mail.with_context(mail_notify_user_signature=False)
ActiveModel = ActiveModel.with_context(mail_notify_user_signature=False, mail_auto_delete=wizard.template_id.auto_delete)
if not hasattr(ActiveModel, 'message_post'):
ActiveModel = self.env['mail.thread'].with_context(thread_model=wizard.model)
if wizard.composition_mode == 'mass_post':
# do not send emails directly but use the queue instead
# add context key to avoid subscribing the author
ActiveModel = ActiveModel.with_context(mail_notify_force_send=False, mail_create_nosubscribe=True)
# wizard works in batch mode: [res_id] or active_ids or active_domain
if mass_mode and wizard.use_active_domain and wizard.model:
res_ids = self.env[wizard.model].search(safe_eval(wizard.active_domain)).ids
elif mass_mode and wizard.model and self._context.get('active_ids'):
if wizard.from_presend_wizard:
res_ids = self._context['partners_from_wizard']
else:
res_ids = self._context['active_ids']
else:
res_ids = [wizard.res_id]
batch_size = int(self.env['ir.config_parameter'].sudo().get_param('mail.batch_size')) or self._batch_size
sliced_res_ids = [res_ids[i:i + batch_size] for i in range(0, len(res_ids), batch_size)]
if wizard.composition_mode == 'mass_mail' or wizard.is_log or (wizard.composition_mode == 'mass_post' and not wizard.notify): # log a note: subtype is False
subtype_id = False
elif wizard.subtype_id:
subtype_id = wizard.subtype_id.id
else:
subtype_id = self.sudo().env.ref('mail.mt_comment', raise_if_not_found=False).id
batch_mails = Mail
for res_ids in sliced_res_ids:
all_mail_values = wizard.get_mail_values(res_ids)
for res_id, mail_values in all_mail_values.iteritems():
if wizard.composition_mode == 'mass_mail':
batch_mails |= Mail.create(mail_values)
else:
ActiveModel.browse(res_id).message_post(
message_type=wizard.message_type,
subtype_id=subtype_id,
**mail_values)
if self.env.context.get('emails_from_wizard', False):
mails = self._context['emails_from_wizard']
emails_values = wizard.get_mail_values_from_mails(mails)
for email_val in emails_values:
batch_mails |= Mail.create(email_val)
if wizard.composition_mode == 'mass_mail':
batch_mails.send(auto_commit=auto_commit)
return {'type': 'ir.actions.act_window_close'}
@api.multi
def get_mail_values_from_mails(self, mails):
self.ensure_one()
mail_values = {
'subject': self.subject,
'body': self.body or '',
'parent_id': self.parent_id and self.parent_id.id,
'partner_ids': [partner.id for partner in self.partner_ids],
'attachment_ids': [attach.id for attach in self.attachment_ids],
'author_id': self.author_id.id,
'email_from': self.email_from,
'record_name': self.record_name,
'no_auto_thread': self.no_auto_thread,
'mail_server_id': self.mail_server_id.id,
}
mail_values.update(notification=not self.auto_delete_message,
model=self.model,
record_name=False)
# auto deletion of mail_mail
if self.auto_delete or self.template_id.auto_delete:
mail_values['auto_delete'] = True
mail_values['reply_to'] = mail_values['email_from']
mail_values['body_html'] = mail_values.get('body', '')
attachment_ids = []
for attach_id in mail_values.pop('attachment_ids'):
new_attach_id = self.env['ir.attachment'].browse(attach_id).copy({
'res_model': self._name,
'res_id': self.id
})
attachment_ids.append(new_attach_id.id)
mail_values['attachment_ids'] = self.env['mail.thread']._message_preprocess_attachments(
mail_values.pop('attachments', []),
attachment_ids, 'mail.message', 0)
emails_result = []
for email in mails:
mail_values['email_to'] = email
emails_result.append(dict(mail_values))
return emails_result

View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
from . import models

View File

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
{
'name': 'GOLEM Mail Activity Registration',
'summary': 'GOLEM Mail Activity Registration',
'description': ''' GOLEM Mail Activity Registration ''',
'version': '10.0.0.0.1',
'category': 'GOLEM',
'author': 'Youssef El Ouahby, Fabien Bourgeois',
'license': 'AGPL-3',
'application': True,
'installable': True,
'auto_install': True,
'depends': ['golem_activity_registration'],
'data': ['views/golem_mail_activity_views.xml']
}

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
from . import golem_activity

View File

@ -0,0 +1,57 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
""" GOLEM Activity adaptations """
from odoo import models, fields, api
class GolemActivity(models.Model):
""" GOLEM Activity adaptations """
_inherit = 'golem.activity'
@api.multi
def activity_members_mass_mailing(self):
return self.get_mass_mailing_action('members')
@api.multi
def get_mass_mailing_action(self, action_type):
""" Call activity mass mailing presend wizard """
presend_wizard = self.env['golem.mail.presend.wizard'].create({})
if action_type == 'animators':
partners = self.mapped('animator_id').ids
for partner in partners:
self.env['golem.mail.recipient'].create({'partner_id': partner,
'presend_wizard_id': presend_wizard.id})
act_name = 'Activity animators mass mailing'
elif action_type == 'members':
partner_ids = self.mapped('activity_registration_ids').mapped(
'member_id').mapped('partner_id').ids
for partner in partner_ids:
self.env['golem.mail.recipient'].create({'partner_id': partner,
'presend_wizard_id': presend_wizard.id})
act_name = 'Activity members mass mailing'
return {
'type': 'ir.actions.act_window',
'name': act_name,
'res_model': 'golem.mail.presend.wizard',
'res_id': presend_wizard.id,
'view_mode': 'form',
'view_type': 'form',
'target': 'new'
}

View File

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
-->
<odoo>
<data>
<!-- golem activity form adaptations -->
<record id="golem_activity_form_inherit_golem_mail_activity_registration"
model="ir.ui.view">
<field name="name">Golem Activity form adaptations golem mail activity registration</field>
<field name="model">golem.activity</field>
<field name="inherit_id" ref="golem_activity.golem_activity_form"/>
<field name="arch" type="xml">
<sheet position="before">
<header>
<button name="activity_members_mass_mailing" string="Activity members mass mailing"
type="object" class="oe_highlight"/>
</header>
</sheet>
</field>
</record>
<!-- Activity members mass mailing action-->
<record id="action_activity_members_mass_mailing" model="ir.actions.server">
<field name="name">Activity members mass mailing</field>
<field name="model_id" ref="golem_activity.model_golem_activity"/>
<field name="state">code</field>
<field name="code">
action = records.get_mass_mailing_action('members')
</field>
</record>
<record id="ir_activity_members_mass_mailing" model="ir.values">
<field name="key2" eval="'client_action_multi'" />
<field name="model" eval="'golem.activity'" />
<field name="name">Family Members mass mailing</field>
<field name="value"
eval="'ir.actions.server,%d'%action_activity_members_mass_mailing" />
</record>
<!-- Activity animators mass mailing action-->
<record id="action_activity_animators_mass_mailing" model="ir.actions.server">
<field name="name">Activity animators mass mailing</field>
<field name="model_id" ref="golem_activity.model_golem_activity"/>
<field name="state">code</field>
<field name="code">
action = records.get_mass_mailing_action('animators')
</field>
</record>
<record id="ir_activity_animators_mass_mailing" model="ir.values">
<field name="key2" eval="'client_action_multi'" />
<field name="model" eval="'golem.activity'" />
<field name="name">Activity animators mass mailing</field>
<field name="value"
eval="'ir.actions.server,%d'%action_activity_animators_mass_mailing" />
</record>
</data>
</odoo>

View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
from . import models

View File

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
{
'name': 'GOLEM Mail Family',
'summary': 'GOLEM Mail Family',
'description': ''' GOLEM Mail Family ''',
'version': '10.0.0.0.1',
'category': 'GOLEM',
'author': 'Youssef El Ouahby, Fabien Bourgeois',
'license': 'AGPL-3',
'application': True,
'installable': True,
'depends': ['golem_family'],
'data': ['views/golem_mail_family_views.xml']
}

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
from . import golem_family

View File

@ -0,0 +1,55 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
""" GOLEM Family adaptations """
from odoo import models, fields, api
class GolemFamily(models.Model):
""" GOLEM Family adaptations """
_inherit = 'golem.family'
@api.multi
def family_members_mass_mailing(self):
return self.get_mass_mailing_action('members')
@api.multi
def get_mass_mailing_action(self, action_type):
""" Call family mass mailing presend wizard """
presend_wizard = self.env['golem.mail.presend.wizard'].create({})
if action_type == 'family':
emails = self.mapped('email')
for email in emails:
self.env['golem.mail.recipient'].create({'email': email,
'presend_wizard_id': presend_wizard.id})
act_name = 'Family mass mailing'
elif action_type == 'members':
partner_ids = self.mapped('member_ids').ids
for partner in partner_ids:
self.env['golem.mail.recipient'].create({'partner_id': partner,
'presend_wizard_id': presend_wizard.id})
act_name = 'Family members mass mailing'
return {
'type': 'ir.actions.act_window',
'name': act_name,
'res_model': 'golem.mail.presend.wizard',
'res_id': presend_wizard.id,
'view_mode': 'form',
'view_type': 'form',
'target': 'new'
}

View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
-->
<odoo>
<data>
<!-- golem family form adaptations -->
<record id="golem_family_form_inherit_golem_mail_family"
model="ir.ui.view">
<field name="name">Golem Family form adaptations golem mail family</field>
<field name="model">golem.family</field>
<field name="inherit_id" ref="golem_family.golem_family_form"/>
<field name="arch" type="xml">
<sheet position="before">
<header>
<button name="family_members_mass_mailing" string="Family members mass mailing"
type="object" class="oe_highlight"
attrs="{'invisible': [('member_ids', '=', False)]}"/>
</header>
</sheet>
</field>
</record>
<!-- Family member mass mailing action-->
<record id="action_family_members_mass_mailing" model="ir.actions.server">
<field name="name">Family members mass mailing</field>
<field name="model_id" ref="golem_family.model_golem_family"/>
<field name="state">code</field>
<field name="code">
action = records.get_mass_mailing_action('members')
</field>
</record>
<record id="ir_family_members_mass_mailing" model="ir.values">
<field name="key2" eval="'client_action_multi'" />
<field name="model" eval="'golem.family'" />
<field name="name">Family Members mass mailing</field>
<field name="value"
eval="'ir.actions.server,%d'%action_family_members_mass_mailing" />
</record>
<!-- Family mass mailing action-->
<record id="action_family_mass_mailing" model="ir.actions.server">
<field name="name">Family mass mailing</field>
<field name="model_id" ref="golem_family.model_golem_family"/>
<field name="state">code</field>
<field name="code">
action = records.get_mass_mailing_action('family')
</field>
</record>
<record id="ir_family_mass_mailing" model="ir.values">
<field name="key2" eval="'client_action_multi'" />
<field name="model" eval="'golem.family'" />
<field name="name">Family mass mailing</field>
<field name="value"
eval="'ir.actions.server,%d'%action_family_mass_mailing" />
</record>
</data>
</odoo>

View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
from . import models

View File

@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
{
'name': 'GOLEM Mail Member',
'summary': 'GOLEM Mail Member',
'description': ''' GOLEM Mail Member ''',
'version': '10.0.0.0.1',
'category': 'GOLEM',
'author': 'Youssef El Ouahby, Fabien Bourgeois',
'license': 'AGPL-3',
'application': True,
'installable': True,
'depends': ['golem_member'],
'data': ['views/golem_mail_member_views.xml',
'views/golem_mail_res_partner_views.xml',
'data/res_partner_data.xml']
}

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
-->
<odoo>
<data noupdate="1">
<!-- Base Accounting settings call -->
<function model="golem.res.partner.config" name="res_partner_settings" />
</data>
</odoo>

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
from . import golem_member, golem_res_partner_config

View File

@ -0,0 +1,67 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
""" GOLEM Member adaptations """
from odoo import models, fields, api
class GolemMember(models.Model):
""" GOLEM Member adaptations """
_inherit = 'golem.member'
@api.multi
def get_mass_mailing_action(self):
""" Call member mass mailing presend wizard """
partners = self.mapped('partner_id').ids
presend_wizard = self.env['golem.mail.presend.wizard'].create(
{'partner_ids': [(6, 0, partners)]})
for partner in partners:
self.env['golem.mail.recipient'].create({'partner_id': partner,
'presend_wizard_id': presend_wizard.id})
return {
'type': 'ir.actions.act_window',
'name': 'Member mass mailing',
'res_model': 'golem.mail.presend.wizard',
'res_id': presend_wizard.id,
'view_mode': 'form',
'view_type': 'form',
'target': 'new'
}
class ResPartner(models.Model):
""" Res Partner adaptations """
_inherit = 'res.partner'
@api.multi
def get_mass_mailing_action(self):
""" Call res partner mass mailing presend wizard """
partners = self.ids
presend_wizard = self.env['golem.mail.presend.wizard'].create(
{'partner_ids': [(6, 0, partners)]})
for partner in partners:
self.env['golem.mail.recipient'].create({'partner_id': partner,
'presend_wizard_id': presend_wizard.id})
return {
'type': 'ir.actions.act_window',
'name': 'Member mass mailing',
'res_model': 'golem.mail.presend.wizard',
'res_id': presend_wizard.id,
'view_mode': 'form',
'view_type': 'form',
'target': 'new'
}

View File

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
""" GOLEM Res Partner Configuration """
from odoo import models, api, _
class ResPartnerConfig(models.AbstractModel):
""" GOLEM Res Partner Configuration """
_name = 'golem.res.partner.config'
_description = 'GOLEM Res Partner Configuration'
@api.model
def res_partner_settings(self):
""" Res partner mas mailing remove """
if self.env.ref('base.action_partner_mass_mail'):
self.env.ref('base.action_partner_mass_mail').unlink()

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
-->
<odoo>
<data>
<!-- Add action to members list-->
<record id="action_member_mass_mailing" model="ir.actions.server">
<field name="name">Member mass mailing</field>
<field name="model_id" ref="golem_member.model_golem_member"/>
<field name="state">code</field>
<field name="code">
action = records.get_mass_mailing_action()
</field>
</record>
<record id="ir_member_mass_mailing" model="ir.values">
<field name="key2" eval="'client_action_multi'" />
<field name="model" eval="'golem.member'" />
<field name="name">Member mass mailing</field>
<field name="value"
eval="'ir.actions.server,%d'%action_member_mass_mailing" />
</record>
</data>
</odoo>

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
Copyright 2018 Fabien Bourgeois <fabien@yaltik.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 <http://www.gnu.org/licenses/>.
-->
<odoo>
<data>
<!-- Add action to members list-->
<record id="action_golem_res_partner_mass_mailing" model="ir.actions.server">
<field name="name">Partner mass mailing</field>
<field name="model_id" ref="base.model_res_partner"/>
<field name="state">code</field>
<field name="code">
action = records.get_mass_mailing_action()
</field>
</record>
<record id="ir_golem_res_partner_mass_mailing" model="ir.values">
<field name="key2" eval="'client_action_multi'" />
<field name="model" eval="'res.partner'" />
<field name="name">Partner mass mailing</field>
<field name="value"
eval="'ir.actions.server,%d'%action_golem_res_partner_mass_mailing" />
</record>
</data>
</odoo>