Skip to content

Commit

Permalink
Merge PR #845 into 17.0
Browse files Browse the repository at this point in the history
Signed-off-by HviorForgeFlow
OCA-git-bot committed Jan 6, 2025
2 parents a616edd + 63bf592 commit a90a66d
Showing 19 changed files with 1,264 additions and 0 deletions.
100 changes: 100 additions & 0 deletions sql_export_mail/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
===============
SQL Export Mail
===============

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:7545ca6358f23ee0f98d8fa0d2610030bdce7d1dc9a2b1e241be5443612fcf1e
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting--engine-lightgray.png?logo=github
:target: https://github.com/OCA/reporting-engine/tree/17.0/sql_export_mail
:alt: OCA/reporting-engine
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/reporting-engine-17-0/reporting-engine-17-0-sql_export_mail
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/reporting-engine&target_branch=17.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

Allow to send the result of a query (made with the module sql_export) by
mail.

**Table of contents**

.. contents::
:local:

Configuration
=============

To configure this module, you need to:

1. Go to the sql query for which you want users to be notified by
e-mail.
2. Add users to be notified in the field Users Notified by e-mail.
3. Click on the button create a cron and then configure the cron to run
when you want to. If you already have created a cron for another
query, you can use it again for other queries

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/reporting-engine/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/reporting-engine/issues/new?body=module:%20sql_export_mail%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* Akretion
* GRAP

Contributors
------------

- Florian da Costa <florian.dacosta@akretion.com>
- Helly kapatel <helly.kapatel@initos.com>
- Sander Lienaerts <sander.lienaerts@codeforward.nl>

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

.. |maintainer-legalsylvain| image:: https://github.com/legalsylvain.png?size=40px
:target: https://github.com/legalsylvain
:alt: legalsylvain

Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-legalsylvain|

This module is part of the `OCA/reporting-engine <https://github.com/OCA/reporting-engine/tree/17.0/sql_export_mail>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions sql_export_mail/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
20 changes: 20 additions & 0 deletions sql_export_mail/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
"name": "SQL Export Mail",
"version": "17.0.1.0.0",
"category": "Generic Modules",
"summary": "Send csv file generated by sql query by mail.",
"author": "Akretion,GRAP,Odoo Community Association (OCA)",
"maintainers": ["legalsylvain"],
"website": "https://github.com/OCA/reporting-engine",
"depends": [
"mail",
"sql_export",
],
"license": "AGPL-3",
"data": [
"views/sql_export_view.xml",
"data/mail_template.xml",
],
"installable": True,
}
25 changes: 25 additions & 0 deletions sql_export_mail/data/mail_template.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">

<!-- Error Email template -->
<record id="sql_export_mailer" model="mail.template">
<field name="name">SQL Export</field>
<field name="email_from">admin@example.com</field>
<field name="email_to">{{object.get_email_address_for_template()}}</field>
<field name="subject">{{object.name or ''}}</field>
<field name="model_id" ref="sql_export.model_sql_export" />
<field name="auto_delete" eval="True" />
<field name="body_html" type="html">
<div
style="font-family: 'Lucida Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; "
>

<p>You will find the report <t
t-out="object.name or ''"
/> as an attachment of the mail.</p>

</div>
</field>
</record>

</odoo>
102 changes: 102 additions & 0 deletions sql_export_mail/i18n/ca.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sql_export_mail
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"

#. module: sql_export_mail
#: model:mail.template,body_html:sql_export_mail.sql_export_mailer
msgid ""
"<div style=\"font-family: 'Lucida Grande', Ubuntu, Arial, Verdana, sans-"
"serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; \">\n"
"\n"
" <p>You will find the report <t t-out=\"object.name or ''\"></t> as an "
"attachment of the mail.</p>\n"
"\n"
"</div>\n"
" "
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields,help:sql_export_mail.field_sql_export__mail_user_ids
msgid ""
"Add the users who want to receive the report by e-mail. You need to link the "
"sql query with a cron to send mail automatically"
msgstr ""

#. module: sql_export_mail
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Create Cron"
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields,field_description:sql_export_mail.field_sql_export__cron_ids
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Crons"
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields.selection,name:sql_export_mail.selection__sql_export__mail_condition__not_empty
msgid "File Not Empty"
msgstr ""

#. module: sql_export_mail
#. odoo-python
#: code:addons/sql_export_mail/models/sql_export.py:0
#, python-format
msgid ""
"It is not possible to execute and send a query automatically by mail if "
"there are parameters to fill"
msgstr ""

#. module: sql_export_mail
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Mail"
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields,field_description:sql_export_mail.field_sql_export__mail_condition
msgid "Mail Condition"
msgstr ""

#. module: sql_export_mail
#: model:mail.template,name:sql_export_mail.sql_export_mailer
msgid "SQL Export"
msgstr ""

#. module: sql_export_mail
#: model:ir.model,name:sql_export_mail.model_sql_export
msgid "SQL export"
msgstr ""

#. module: sql_export_mail
#. odoo-python
#: code:addons/sql_export_mail/models/sql_export.py:0
#, python-format
msgid "The user does not have any e-mail address."
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields,field_description:sql_export_mail.field_sql_export__mail_user_ids
msgid "User to notify"
msgstr ""

#. module: sql_export_mail
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Users Notified by e-mail"
msgstr ""

#. module: sql_export_mail
#: model:mail.template,subject:sql_export_mail.sql_export_mailer
msgid "{{object.name or ''}}"
msgstr ""
136 changes: 136 additions & 0 deletions sql_export_mail/i18n/fr.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sql_export_mail
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-18 13:15+0000\n"
"PO-Revision-Date: 2017-07-18 13:15+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: sql_export_mail
#: model:mail.template,body_html:sql_export_mail.sql_export_mailer
msgid ""
"<div style=\"font-family: 'Lucida Grande', Ubuntu, Arial, Verdana, sans-"
"serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; \">\n"
"\n"
" <p>You will find the report <t t-out=\"object.name or ''\"></t> as an "
"attachment of the mail.</p>\n"
"\n"
"</div>\n"
" "
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields,help:sql_export_mail.field_sql_export__mail_user_ids
msgid ""
"Add the users who want to receive the report by e-mail. You need to link the "
"sql query with a cron to send mail automatically"
msgstr ""
"Ajoutez les utilisateurs voulant recevoir le rapport par mail. Vous devez "
"ensuite créer une tâche planifiée pour envoyer le mail automatiquement."

#. module: sql_export_mail
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Create Cron"
msgstr "Créer une tâche planfiée"

#. module: sql_export_mail
#: model:ir.model.fields,field_description:sql_export_mail.field_sql_export__cron_ids
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Crons"
msgstr "Tâches planifiées"

#. module: sql_export_mail
#: model:ir.model.fields.selection,name:sql_export_mail.selection__sql_export__mail_condition__not_empty
msgid "File Not Empty"
msgstr "Fichier non vide."

#. module: sql_export_mail
#. odoo-python
#: code:addons/sql_export_mail/models/sql_export.py:0
#, python-format
msgid ""
"It is not possible to execute and send a query automatically by mail if "
"there are parameters to fill"
msgstr ""
"Il n'est pas possible d'exécuter en envoyer le résultat d'une requête par "
"mail si celle-ci contient des paramètres."

#. module: sql_export_mail
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Mail"
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields,field_description:sql_export_mail.field_sql_export__mail_condition
#, fuzzy
msgid "Mail Condition"
msgstr "Condition d'envoi par mail"

#. module: sql_export_mail
#: model:mail.template,name:sql_export_mail.sql_export_mailer
msgid "SQL Export"
msgstr ""

#. module: sql_export_mail
#: model:ir.model,name:sql_export_mail.model_sql_export
msgid "SQL export"
msgstr "Export SQL"

#. module: sql_export_mail
#. odoo-python
#: code:addons/sql_export_mail/models/sql_export.py:0
#, python-format
msgid "The user does not have any e-mail address."
msgstr "L'utilisateur selectionné n'a pas d'addresse mail."

#. module: sql_export_mail
#: model:ir.model.fields,field_description:sql_export_mail.field_sql_export__mail_user_ids
msgid "User to notify"
msgstr "Utilisateurs à notifier par mail"

#. module: sql_export_mail
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Users Notified by e-mail"
msgstr "Utilisateurs notifiés par mail"

#. module: sql_export_mail
#: model:mail.template,subject:sql_export_mail.sql_export_mailer
msgid "{{object.name or ''}}"
msgstr ""

#, fuzzy
#~ msgid ""
#~ "\n"
#~ "<div style=\"font-family: 'Lucida Grande', Ubuntu, Arial, Verdana, sans-"
#~ "serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; "
#~ "\">\n"
#~ "\n"
#~ "<p>You will find the report ${object.name or ''} as an attachment of the "
#~ "mail.</p>\n"
#~ "\n"
#~ "</div>\n"
#~ " "
#~ msgstr ""
#~ "\n"
#~ "<div style=\"font-family: 'Lucida Grande', Ubuntu, Arial, Verdana, sans-"
#~ "serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; "
#~ "\">\n"
#~ "\n"
#~ "<p>Vous trouverez le rapport ${object.name or ''} en pièce jointe de ce "
#~ "mail.</p>\n"
#~ "\n"
#~ "</div>\n"
#~ " "

#~ msgid "${object.name or ''}"
#~ msgstr "${object.name or ''}"
100 changes: 100 additions & 0 deletions sql_export_mail/i18n/it.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sql_export_mail
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"

#. module: sql_export_mail
#: model:mail.template,body_html:sql_export_mail.sql_export_mailer
msgid ""
"<div style=\"font-family: 'Lucida Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; \">\n"
"\n"
" <p>You will find the report <t t-out=\"object.name or ''\"></t> as an attachment of the mail.</p>\n"
"\n"
"</div>\n"
" "
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields,help:sql_export_mail.field_sql_export__mail_user_ids
msgid ""
"Add the users who want to receive the report by e-mail. You need to link the"
" sql query with a cron to send mail automatically"
msgstr ""

#. module: sql_export_mail
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Create Cron"
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields,field_description:sql_export_mail.field_sql_export__cron_ids
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Crons"
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields.selection,name:sql_export_mail.selection__sql_export__mail_condition__not_empty
msgid "File Not Empty"
msgstr ""

#. module: sql_export_mail
#. odoo-python
#: code:addons/sql_export_mail/models/sql_export.py:0
#, python-format
msgid ""
"It is not possible to execute and send a query automatically by mail if "
"there are parameters to fill"
msgstr ""

#. module: sql_export_mail
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Mail"
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields,field_description:sql_export_mail.field_sql_export__mail_condition
msgid "Mail Condition"
msgstr ""

#. module: sql_export_mail
#: model:mail.template,name:sql_export_mail.sql_export_mailer
msgid "SQL Export"
msgstr ""

#. module: sql_export_mail
#: model:ir.model,name:sql_export_mail.model_sql_export
msgid "SQL export"
msgstr ""

#. module: sql_export_mail
#. odoo-python
#: code:addons/sql_export_mail/models/sql_export.py:0
#, python-format
msgid "The user does not have any e-mail address."
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields,field_description:sql_export_mail.field_sql_export__mail_user_ids
msgid "User to notify"
msgstr ""

#. module: sql_export_mail
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Users Notified by e-mail"
msgstr ""

#. module: sql_export_mail
#: model:mail.template,subject:sql_export_mail.sql_export_mailer
msgid "{{object.name or ''}}"
msgstr ""
99 changes: 99 additions & 0 deletions sql_export_mail/i18n/sql_export_mail.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sql_export_mail
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: sql_export_mail
#: model:mail.template,body_html:sql_export_mail.sql_export_mailer
msgid ""
"<div style=\"font-family: 'Lucida Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; \">\n"
"\n"
" <p>You will find the report <t t-out=\"object.name or ''\"></t> as an attachment of the mail.</p>\n"
"\n"
"</div>\n"
" "
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields,help:sql_export_mail.field_sql_export__mail_user_ids
msgid ""
"Add the users who want to receive the report by e-mail. You need to link the"
" sql query with a cron to send mail automatically"
msgstr ""

#. module: sql_export_mail
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Create Cron"
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields,field_description:sql_export_mail.field_sql_export__cron_ids
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Crons"
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields.selection,name:sql_export_mail.selection__sql_export__mail_condition__not_empty
msgid "File Not Empty"
msgstr ""

#. module: sql_export_mail
#. odoo-python
#: code:addons/sql_export_mail/models/sql_export.py:0
#, python-format
msgid ""
"It is not possible to execute and send a query automatically by mail if "
"there are parameters to fill"
msgstr ""

#. module: sql_export_mail
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Mail"
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields,field_description:sql_export_mail.field_sql_export__mail_condition
msgid "Mail Condition"
msgstr ""

#. module: sql_export_mail
#: model:mail.template,name:sql_export_mail.sql_export_mailer
msgid "SQL Export"
msgstr ""

#. module: sql_export_mail
#: model:ir.model,name:sql_export_mail.model_sql_export
msgid "SQL export"
msgstr ""

#. module: sql_export_mail
#. odoo-python
#: code:addons/sql_export_mail/models/sql_export.py:0
#, python-format
msgid "The user does not have any e-mail address."
msgstr ""

#. module: sql_export_mail
#: model:ir.model.fields,field_description:sql_export_mail.field_sql_export__mail_user_ids
msgid "User to notify"
msgstr ""

#. module: sql_export_mail
#: model_terms:ir.ui.view,arch_db:sql_export_mail.sql_export_mail_view_form
msgid "Users Notified by e-mail"
msgstr ""

#. module: sql_export_mail
#: model:mail.template,subject:sql_export_mail.sql_export_mailer
msgid "{{object.name or ''}}"
msgstr ""
1 change: 1 addition & 0 deletions sql_export_mail/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import sql_export
148 changes: 148 additions & 0 deletions sql_export_mail/models/sql_export.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
# Copyright 2019 Akretion
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).

from datetime import datetime, timedelta

from odoo import SUPERUSER_ID, _, api, fields, models
from odoo.exceptions import UserError


class SqlExport(models.Model):
_inherit = "sql.export"

mail_user_ids = fields.Many2many(
"res.users",
"mail_user_sqlquery_rel",
"sql_id",
"user_id",
"User to notify",
help="Add the users who want to receive the report by e-mail. You "
"need to link the sql query with a cron to send mail automatically",
)
cron_ids = fields.Many2many(
"ir.cron",
"cron_sqlquery_rel",
"sql_id",
"cron_id",
"Crons",
groups="base.group_system",
)
# We could implement other conditions, that is why it is a selection field
mail_condition = fields.Selection(
[("not_empty", "File Not Empty")], default="not_empty"
)

def _prepare_cron_mail(self):
self.ensure_one()
return {
"active": True,
"model_id": self.env.ref("sql_export.model_sql_export").id,
"state": "code",
"code": "model._run_all_sql_export_for_cron()",
"name": "SQL Export : %s" % self.name,
"nextcall": datetime.now() + timedelta(hours=2),
"doall": False,
"numbercall": -1,
"user_id": SUPERUSER_ID,
}

def create_cron(self):
self.ensure_one()
cron = self.env["ir.cron"].create(self._prepare_cron_mail())
# We need to pass cron_id in the cron args because a cron is not
# aware of itself in the end method and we need it to find all
# linked sql exports
write_vals = {"code": "model._run_all_sql_export_for_cron([%s])" % cron.id}
cron.write(write_vals)
self.write({"cron_ids": [(4, cron.id)]})

def send_mail(self, params=None):
self.ensure_one()
params = params or {}
mail_template = self.env.ref("sql_export_mail.sql_export_mailer")
attach_obj = self.env["ir.attachment"]
if self.mail_condition == "not_empty":
res = self._execute_sql_request(params=params, mode="fetchone")
if not res:
return

wizard = self.env["sql.file.wizard"].create(
{
"sql_export_id": self.id,
}
)
if "user_id" in params:
wizard = wizard.with_context(force_user=params["user_id"])
if "company_id" in params:
wizard = wizard.with_context(force_company=params["company_id"])

wizard.export_sql()
binary = wizard.binary_file
filename = wizard.file_name
msg_id = mail_template.send_mail(self.id, force_send=False)
mail = self.env["mail.mail"].browse(msg_id)
attach_vals = {
"name": filename,
"datas": binary,
"res_model": "mail.mail",
"res_id": mail.id,
}
attachment = attach_obj.create(attach_vals)
mail.write({"attachment_ids": [(4, attachment.id)]})

@api.model
def _run_all_sql_export_for_cron(self, cron_ids):
exports = self.search([("cron_ids", "in", cron_ids)])
for export in exports:
if "%(company_id)s" in export.query and "%(user_id)s" not in export.query:
variable_dict = {}
companies = self.env["res.company"].search([])
for company in companies:
users = export.mail_user_ids.filtered(
lambda user, company=company: user.company_id == company
)
if users:
variable_dict["company_id"] = users[0].company_id.id
export.with_context(mail_to=users.ids).send_mail(
params=variable_dict
)
elif "%(user_id)s" in export.query:
variable_dict = {}
for user in export.mail_user_ids:
variable_dict["user_id"] = user.id
if "%(company_id)s" in export.query:
variable_dict["company_id"] = user.company_id.id
export.with_context(mail_to=[user.id]).send_mail(
params=variable_dict
)
else:
export.send_mail()

@api.constrains("query_properties_definition", "mail_user_ids")
def check_no_parameter_if_sent_by_mail(self):
for export in self:
if export.query_properties_definition and export.mail_user_ids:
raise UserError(
_(
"It is not possible to execute and send a query "
"automatically by mail if there are parameters to fill"
)
)

@api.constrains("mail_user_ids")
def check_mail_user(self):
for export in self:
for user in export.mail_user_ids:
if not user.email:
raise UserError(_("The user does not have any e-mail address."))

def get_email_address_for_template(self):
"""
Called from mail template
"""
self.ensure_one()
if self.env.context.get("mail_to"):
mail_users = self.env["res.users"].browse(self.env.context.get("mail_to"))
else:
mail_users = self.mail_user_ids
return ",".join([x.email for x in mail_users if x.email])
3 changes: 3 additions & 0 deletions sql_export_mail/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"
8 changes: 8 additions & 0 deletions sql_export_mail/readme/CONFIGURE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
To configure this module, you need to:

1. Go to the sql query for which you want users to be notified by
e-mail.
2. Add users to be notified in the field Users Notified by e-mail.
3. Click on the button create a cron and then configure the cron to run
when you want to. If you already have created a cron for another
query, you can use it again for other queries
3 changes: 3 additions & 0 deletions sql_export_mail/readme/CONTRIBUTORS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
- Florian da Costa \<<florian.dacosta@akretion.com>\>
- Helly kapatel \<<helly.kapatel@initos.com>\>
- Sander Lienaerts \<<sander.lienaerts@codeforward.nl>\>
2 changes: 2 additions & 0 deletions sql_export_mail/readme/DESCRIPTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Allow to send the result of a query (made with the module sql_export) by
mail.
Binary file added sql_export_mail/static/description/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
442 changes: 442 additions & 0 deletions sql_export_mail/static/description/index.html

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions sql_export_mail/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import test_sql_query_mail
29 changes: 29 additions & 0 deletions sql_export_mail/tests/test_sql_query_mail.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Copyright (C) 2019 Akretion (<http://www.akretion.com>)
# @author: Florian da Costa
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from odoo import SUPERUSER_ID, Command
from odoo.tests.common import TransactionCase


class TestExportSqlQueryMail(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.sql_report_demo = cls.env.ref("sql_export.sql_export_partner")
cls.sql_report_demo.mail_user_ids = [Command.link(SUPERUSER_ID)]

def test_sql_query_mail(self):
mail_obj = self.env["mail.mail"]
mails = mail_obj.search(
[("model", "=", "sql.export"), ("res_id", "=", self.sql_report_demo.id)]
)
self.assertFalse(mails)
self.sql_report_demo.create_cron()
self.assertTrue(self.sql_report_demo.cron_ids)
self.sql_report_demo.cron_ids.method_direct_trigger()
mails = mail_obj.search(
[("model", "=", "sql.export"), ("res_id", "=", self.sql_report_demo.id)]
)
self.assertTrue(mails)
self.assertTrue(mails.attachment_ids)
44 changes: 44 additions & 0 deletions sql_export_mail/views/sql_export_view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="sql_export_mail_view_form" model="ir.ui.view">
<field name="model">sql.export</field>
<field name="inherit_id" ref="sql_export.sql_export_view_form" />
<field name="arch" type="xml">
<button name="export_sql_query" position="after">
<button
name="create_cron"
string="Create Cron"
type="object"
invisible="state == 'draft' or not mail_user_ids"
/>
</button>
<field name="copy_options" position="after">
<field
name="mail_condition"
invisible="not cron_ids"
groups="base.group_system"
/>
</field>
<page name="page_sql" position="after">
<page name="page_mail" string="Mail">
<group string="Users Notified by e-mail">
<field
name="mail_user_ids"
nolabel="1"
widget="many2many_tags"
colspan="2"
/>
</group>
<group string="Crons" groups="base.group_system">
<field
name="cron_ids"
nolabel="1"
colspan="2"
domain="[('model_id', '=', 'sql.export')]"
/>
</group>
</page>
</page>
</field>
</record>
</odoo>

0 comments on commit a90a66d

Please sign in to comment.