Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[13.0] [ADD] cmis_mail: store mail composer attachments in CMIS #156

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cmis_mail/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import wizards
29 changes: 29 additions & 0 deletions cmis_mail/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Copyright 2022 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

{
"name": "Cmis Mail",
"description": """
This module allows to store attachments with CMIS from the mail
composer if the source model has at least one CMIS folder.
When attachments are added on the mail composer, a checkbox allows to
enable the CMIS storage. If the source model has more than one CMIS
folder, it is possible to specify in which one the attachments must be
stored.""",
'category': 'Document Management',
"version": "13.0.1.0.0",
"license": "AGPL-3",
"author": "ACSONE SA/NV",
'website': 'http://alfodoo.org/',
"depends": [
"mail",
"cmis_field",
],
"data": [
"wizards/mail_compose_message.xml",
],
'installable': True,
'images': [
'static/description/main_icon.png',
],
}
39 changes: 39 additions & 0 deletions cmis_mail/i18n/cmis_mail.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cmis_mail
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.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: cmis_mail
#: model:ir.model.fields,field_description:cmis_mail.field_mail_compose_message__allowed_cmis_folder_field_ids
msgid "Allowed Cmis Folder Field"
msgstr ""

#. module: cmis_mail
#: model:ir.model,name:cmis_mail.model_mail_compose_message
msgid "Email composition wizard"
msgstr ""

#. module: cmis_mail
#: model:ir.model.fields,field_description:cmis_mail.field_mail_compose_message__is_multiple_cmis_fields
msgid "Is Multiple Cmis Fields"
msgstr ""

#. module: cmis_mail
#: model:ir.model.fields,field_description:cmis_mail.field_mail_compose_message__cmis_folder_field_id
msgid "Save attachments into"
msgstr ""

#. module: cmis_mail
#: model:ir.model.fields,field_description:cmis_mail.field_mail_compose_message__is_save_in_cmis_enabled
msgid "Store attachments in CMIS"
msgstr ""
39 changes: 39 additions & 0 deletions cmis_mail/i18n/fr.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cmis_mail
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.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: cmis_mail
#: model:ir.model.fields,field_description:cmis_mail.field_mail_compose_message__allowed_cmis_folder_field_ids
msgid "Allowed Cmis Folder Field"
msgstr "Dossiers CMIS autorisés"

#. module: cmis_mail
#: model:ir.model,name:cmis_mail.model_mail_compose_message
msgid "Email composition wizard"
msgstr ""

#. module: cmis_mail
#: model:ir.model.fields,field_description:cmis_mail.field_mail_compose_message__is_multiple_cmis_fields
msgid "Is Multiple Cmis Fields"
msgstr ""

#. module: cmis_mail
#: model:ir.model.fields,field_description:cmis_mail.field_mail_compose_message__cmis_folder_field_id
msgid "Save attachments into"
msgstr "Sauvegarder les pièces-jointes dans"

#. module: cmis_mail
#: model:ir.model.fields,field_description:cmis_mail.field_mail_compose_message__is_save_in_cmis_enabled
msgid "Store attachments in CMIS"
msgstr "Sauvegarder les pièces-jointes dans CMIS"
Binary file added cmis_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.
38 changes: 38 additions & 0 deletions cmis_mail/static/description/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<section class="s_text_block">
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description doesn't describe the current addon 😏

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now it does 👌 Thanks for the review.

<div class="container">
<h2 class="oe_slogan text-center">Alfodoo, the Odoo-Alfresco connector<br/></h2>
<h3 class="oe_slogan text-center text-muted" style="color: rgb(165, 74, 123);">
<b>Streamline your business processes by managing your documents in their context within any Odoo apps.</b>
</h3>
<div class="row">
<div class="col-md-12 mb16 mt16" style="font-size: 18px;">
<p>
<br/>
</p>
<p>
Alfodoo provides a unique solution to seamlessly integrate the open-source ECM Alfresco with Odoo and let the user manages his documents in Alfresco without leaving his Odoo work environment.
</p>
<p>
<br/>
<b>Benefits from the Alfodoo connector:</b>
</p>
<ul>
<li>
<p>Manage your content/documents linked to your Odoo processes;</p>
</li>
<li>
<p>Make classification and indexing of content/documents easier and more qualitative;</p>
</li>
<li>
<p>Enrich documents with Odoo business record information to exploit the powerful Alfresco document management capabilities.</p>
</li>
</ul>
<p>
This module allows to store attachments with CMIS from the mail composer if the source model has at least one CMIS folder.
When attachments are added on the mail composer, a checkbox allows to enable the CMIS storage. If the source model has more than one CMIS folder,
it is possible to specify in which one the attachments must be stored.
</p>
</div>
</div>
</div>
</section>
Binary file added cmis_mail/static/description/main_icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions cmis_mail/wizards/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import mail_compose_message
88 changes: 88 additions & 0 deletions cmis_mail/wizards/mail_compose_message.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Copyright 2022 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

import base64
import mimetypes
from io import BytesIO

from odoo import api, fields, models


class MailComposeMessage(models.TransientModel):
_inherit = "mail.compose.message"

is_save_in_cmis_enabled = fields.Boolean(
string="Store attachments in CMIS",
default=False,
)
allowed_cmis_folder_field_ids = fields.Many2many(
comodel_name="ir.model.fields",
readonly=True,
)
is_multiple_cmis_fields = fields.Boolean(
readonly=True,
)
cmis_folder_field_id = fields.Many2one(
string="Save attachments into",
comodel_name="ir.model.fields",
domain="[('id', 'in', allowed_cmis_folder_field_ids.ids)]",
)

@api.model
def default_get(self, fields): # pylint:disable=redefined-outer-name
res = super().default_get(fields)
related_model = res.get("model")
if not related_model:
return res
cmis_fields = self.env["ir.model.fields"].search(
[("model", "=", related_model), ("ttype", "=", "cmis_folder")]
)
if cmis_fields:
res.update(
{
"allowed_cmis_folder_field_ids": [(6, 0, cmis_fields.ids)],
"cmis_folder_field_id": cmis_fields[0].id,
"is_multiple_cmis_fields": len(cmis_fields) > 1,
}
)
return res

def _get_cmis_parent_folder(self):
self.ensure_one()
field_name = self.cmis_folder_field_id.name
related_record = self.env[self.model].browse(self.res_id)
field = related_record._fields[field_name]
cmis_backend = field.get_backend(self.env)
root_objectId = related_record[field_name]
if not root_objectId:
field.create_value(related_record)
root_objectId = related_record[field_name]
return cmis_backend.get_cmis_repository().getObject(root_objectId)

@api.model
def get_mimetype(self, file_name):
return mimetypes.guess_type(file_name)[0]

def _save_attachments_in_cmis(self):
self.ensure_one()
if not self.model or not self.res_id:
return
for attachment in self.attachment_ids:
props = {
"cmis:name": attachment.name,
}
mimetype = self.get_mimetype(attachment.name)
cmis_parent_folder = self._get_cmis_parent_folder()
cmis_parent_folder.createDocument(
attachment.name,
properties=props,
contentFile=BytesIO(base64.b64decode(attachment.datas)),
contentType=mimetype,
)

def send_mail(self, auto_commit=False):
res = super().send_mail(auto_commit=auto_commit)
for rec in self:
if rec.is_save_in_cmis_enabled:
rec._save_attachments_in_cmis()
return res
21 changes: 21 additions & 0 deletions cmis_mail/wizards/mail_compose_message.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2022 ACSONE SA/NV
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record model="ir.ui.view" id="mail_compose_message_form_view">
<field name="name">mail.compose.message.form (in cmis_mail)</field>
<field name="model">mail.compose.message</field>
<field name="inherit_id" ref="mail.email_compose_message_wizard_form" />
<field name="arch" type="xml">
<field name="template_id" position="after">
<field name="allowed_cmis_folder_field_ids" invisible="1" />
<field name="is_multiple_cmis_fields" invisible="1" />
<field name="is_save_in_cmis_enabled" attrs="{'invisible': [('attachment_ids', '=', [])]}" />
<newline />
<field name="cmis_folder_field_id"
domain="[('model', '=', model), ('ttype', '=', 'cmis_folder')]"
attrs="{'invisible': ['|', '|', ('is_save_in_cmis_enabled', '=', False), ('attachment_ids', '=', []), ('is_multiple_cmis_fields', '=', False)]}" />
</field>
</field>
</record>
</odoo>
1 change: 1 addition & 0 deletions setup/cmis_mail/odoo/addons/cmis_mail
6 changes: 6 additions & 0 deletions setup/cmis_mail/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import setuptools

setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
Loading