Skip to content

Commit

Permalink
[ADD] cmis_mail: store mail composer attachments in CMIS
Browse files Browse the repository at this point in the history
  • Loading branch information
ThomasBinsfeld committed May 31, 2022
1 parent 7351b8a commit 691725f
Show file tree
Hide file tree
Showing 12 changed files with 263 additions and 0 deletions.
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 attachment 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 attachment 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">
<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 attachment 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 attachment 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,
)

0 comments on commit 691725f

Please sign in to comment.