Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
a87f325
[IMP] fs_attachment: improve attachment storage handling of files wit…
CRogos Apr 21, 2026
7de5622
[IMP] microsoft_drive_account : improve Readme / Configuration
nithwith Jan 28, 2026
45e7560
[FIX] microsoft_drive_account: Fix title levels into configuration
lmignon May 26, 2026
c335b3b
Merge PR #609 into 18.0
OCA-git-bot May 26, 2026
216ab9a
[BOT] post-merge updates
OCA-git-bot May 26, 2026
79c52ec
Merge PR #594 into 18.0
OCA-git-bot May 26, 2026
325957e
[BOT] post-merge updates
OCA-git-bot May 26, 2026
091f6d6
[ADD] fs_image_thumbnail: A drop-in replacement of storage_thumbnail
lmignon Sep 18, 2023
b2a5006
[BOT] post-merge updates
OCA-git-bot Sep 25, 2023
0e8d5f1
[FIX] fs_image_thumbnail: Keep images order in result of get_or_creat…
lmignon Oct 4, 2023
53c847d
[BOT] post-merge updates
OCA-git-bot Oct 4, 2023
c02783d
Added translation using Weblate (Spanish)
Ivorra78 Oct 27, 2023
7cbb0c4
Translated using Weblate (Spanish)
Ivorra78 Oct 27, 2023
ca5dc50
Added translation using Weblate (Italian)
mymage Nov 28, 2023
d073b33
Translated using Weblate (Italian)
mymage Nov 28, 2023
a093527
Translated using Weblate (Italian)
mymage Dec 12, 2023
4a9b771
[FIX] delete FsImageThumbnail on attachment delete
sbejaoui Feb 19, 2024
a6e01ec
[BOT] post-merge updates
OCA-git-bot Feb 20, 2024
d9954d7
[IMP] fs_image_thumbnail: pre-commit auto fixes
nguyenminhchien Feb 28, 2024
aad32e8
[MIG] fs_image_thumbnail: Migration to 17.0
nguyenminhchien Feb 28, 2024
6f99214
[BOT] post-merge updates
OCA-git-bot May 31, 2024
ca1b3d7
[IMP] fs_image_thumbnail: pre-commit auto fixes
xaviedoanhduy Apr 17, 2025
c5322b6
[MIG] fs_image_thumbnail: Migration to 18.0
xaviedoanhduy Apr 17, 2025
12e3e79
Merge PR #617 into 18.0
OCA-git-bot May 27, 2026
f462bef
[UPD] Update fs_image_thumbnail.pot
May 27, 2026
2019577
[BOT] post-merge updates
OCA-git-bot May 27, 2026
4919308
[IMP] fs_attachment_s3: Allow to use a prefix path and bucket in the …
JosDeGraeve May 27, 2026
d2e0f70
[IMP] fs_attachment_s3: Improves code readability
lmignon May 27, 2026
462ecec
Merge PR #620 into 18.0
OCA-git-bot May 27, 2026
9a031c8
[BOT] post-merge updates
OCA-git-bot May 27, 2026
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
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,19 @@ Available addons
----------------
addon | version | maintainers | summary
--- | --- | --- | ---
[fs_attachment](fs_attachment/) | 18.0.2.2.1 | <a href='https://github.com/lmignon'><img src='https://github.com/lmignon.png' width='32' height='32' style='border-radius:50%;' alt='lmignon'/></a> | Store attachments on external object store
[fs_attachment_s3](fs_attachment_s3/) | 18.0.1.2.0 | <a href='https://github.com/lmignon'><img src='https://github.com/lmignon.png' width='32' height='32' style='border-radius:50%;' alt='lmignon'/></a> | Store attachments into S3 complient filesystem
[fs_attachment](fs_attachment/) | 18.0.2.2.2 | <a href='https://github.com/lmignon'><img src='https://github.com/lmignon.png' width='32' height='32' style='border-radius:50%;' alt='lmignon'/></a> | Store attachments on external object store
[fs_attachment_s3](fs_attachment_s3/) | 18.0.1.2.1 | <a href='https://github.com/lmignon'><img src='https://github.com/lmignon.png' width='32' height='32' style='border-radius:50%;' alt='lmignon'/></a> | Store attachments into S3 complient filesystem
[fs_file](fs_file/) | 18.0.1.0.0 | <a href='https://github.com/lmignon'><img src='https://github.com/lmignon.png' width='32' height='32' style='border-radius:50%;' alt='lmignon'/></a> | Field to store files into filesystem storages
[fs_folder](fs_folder/) | 18.0.2.0.0 | <a href='https://github.com/lmignon'><img src='https://github.com/lmignon.png' width='32' height='32' style='border-radius:50%;' alt='lmignon'/></a> | A module to link to Odoo records and manage from record forms forlders from external file systems
[fs_folder_demo](fs_folder_demo/) | 18.0.1.0.0 | | Demo for fs_folder addon
[fs_folder_ms_drive](fs_folder_ms_drive/) | 18.0.2.0.0 | <a href='https://github.com/lmignon'><img src='https://github.com/lmignon.png' width='32' height='32' style='border-radius:50%;' alt='lmignon'/></a> | Display and manage your files from Microsoft drives from within Odoo
[fs_folder_webdav](fs_folder_webdav/) | 18.0.1.0.0 | <a href='https://github.com/jguenat'><img src='https://github.com/jguenat.png' width='32' height='32' style='border-radius:50%;' alt='jguenat'/></a> | UI improvement when managing WebDAV folder
[fs_image](fs_image/) | 18.0.1.0.0 | <a href='https://github.com/lmignon'><img src='https://github.com/lmignon.png' width='32' height='32' style='border-radius:50%;' alt='lmignon'/></a> | Field to store images into filesystem storages
[fs_image_thumbnail](fs_image_thumbnail/) | 18.0.1.0.0 | <a href='https://github.com/lmignon'><img src='https://github.com/lmignon.png' width='32' height='32' style='border-radius:50%;' alt='lmignon'/></a> | Generate and store thumbnail for images
[fs_storage](fs_storage/) | 18.0.2.1.2 | | Implement the concept of Storage with amazon S3, sftp...
[fs_storage_ms_drive](fs_storage_ms_drive/) | 18.0.2.0.0 | <a href='https://github.com/lmignon'><img src='https://github.com/lmignon.png' width='32' height='32' style='border-radius:50%;' alt='lmignon'/></a> | Add the microsoft drives (OneDrive, Sharepoint) as a storage backend
[image_tag](image_tag/) | 18.0.1.0.0 | | Image tag model
[microsoft_drive_account](microsoft_drive_account/) | 18.0.2.0.0 | <a href='https://github.com/lmignon'><img src='https://github.com/lmignon.png' width='32' height='32' style='border-radius:50%;' alt='lmignon'/></a> | Link user with Microsoft
[microsoft_drive_account](microsoft_drive_account/) | 18.0.2.0.1 | <a href='https://github.com/lmignon'><img src='https://github.com/lmignon.png' width='32' height='32' style='border-radius:50%;' alt='lmignon'/></a> | Link user with Microsoft
[storage_backend](storage_backend/) | 18.0.1.0.0 | | Implement the concept of Storage with amazon S3, sftp...
[storage_backend_ftp](storage_backend_ftp/) | 18.0.1.0.0 | | Implement FTP Storage
[storage_backend_s3](storage_backend_s3/) | 18.0.1.1.0 | | Implement amazon S3 Storage
Expand Down
2 changes: 1 addition & 1 deletion fs_attachment/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Base Attachment Object Store
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:ae07154d0c96f19cbe1f6760cb690b0eefdea57af89985620fac1eef5d52f5fb
!! source digest: sha256:2247c3bace615168d55c67d0dffed04dda62c77a89434b15d04934e8a1f78184
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
Expand Down
2 changes: 1 addition & 1 deletion fs_attachment/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
{
"name": "Base Attachment Object Store",
"summary": "Store attachments on external object store",
"version": "18.0.2.2.1",
"version": "18.0.2.2.2",
"author": "Camptocamp, ACSONE SA/NV, Odoo Community Association (OCA)",
"license": "AGPL-3",
"development_status": "Beta",
Expand Down
19 changes: 16 additions & 3 deletions fs_attachment/models/ir_attachment.py
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,18 @@ def _storage(self):
storage = super()._storage()
return storage

@api.depends("store_fname", "db_datas")
def _compute_raw(self):
"""Always expose raw payload as bytes.

Some callers (e.g. account EDI helpers) slice the value returned by
``raw`` and crash when it is ``False`` for 0-byte attachments.
"""
res = super()._compute_raw()
false_attachments = self.filtered(lambda att: not att.raw)
false_attachments.raw = b""
return res

@api.model_create_multi
def create(self, vals_list):
"""
Expand Down Expand Up @@ -697,9 +709,10 @@ def _move_attachment_to_store(self):
self.ensure_one()
_logger.info("inspecting attachment %s (%d)", self.name, self.id)
fname = self.store_fname
storage = fname.partition("://")[0]
if self._is_storage_disabled(storage):
fname = False
if fname:
storage = fname.partition("://")[0]
if self._is_storage_disabled(storage):
fname = False
if fname:
# migrating from filesystem filestore
# or from the old 'store_fname' without the bucket name
Expand Down
2 changes: 1 addition & 1 deletion fs_attachment/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@ <h1>Base Attachment Object Store</h1>
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:ae07154d0c96f19cbe1f6760cb690b0eefdea57af89985620fac1eef5d52f5fb
!! source digest: sha256:2247c3bace615168d55c67d0dffed04dda62c77a89434b15d04934e8a1f78184
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/storage/tree/18.0/fs_attachment"><img alt="OCA/storage" src="https://img.shields.io/badge/github-OCA%2Fstorage-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/storage-18-0/storage-18-0-fs_attachment"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/storage&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>In some cases, you need to store attachment in another system that the
Expand Down
6 changes: 6 additions & 0 deletions fs_attachment/tests/test_fs_attachment.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,12 @@ def test_create_attachment_with_meaningful_name(self):
with attachment.open("rb") as f:
self.assertEqual(f.read(), new_content)

def test_create_attachment_with_no_payload_has_bytes_raw(self):
attachment = self.ir_attachment_model.create({"name": "empty.txt"})

self.assertEqual(attachment.raw, b"")
self.assertEqual(attachment.file_size, 0)

def test_open_attachment_in_db(self):
self.env["ir.config_parameter"].sudo().set_param("ir_attachment.location", "db")
content = b"This is a test attachment in db"
Expand Down
13 changes: 12 additions & 1 deletion fs_attachment_s3/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Fs Attachment S3
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:bf3d6979d1fa1dfe833a4b2663355ad392483c090177a137920f33ebb47ff224
!! source digest: sha256:1ba96137af8042fcf51cd02e691f65ee0f3f9b910bb61aed0f341bf5f027b034
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
Expand Down Expand Up @@ -123,6 +123,17 @@ directory name as bucket name, and the file path.
Changelog
=========

18.0.1.2.1 (2026-05-27)
-----------------------

Bugfixes
~~~~~~~~

- Allow to use a prefix path and bucket in the directory_path on
fs.storage When the directory_path parameter is configured as / the
presigned url generation failed with a botocore error: "Invalid bucket
name". (`#b17de9 <https://github.com/OCA/storage/issues/b17de9>`__)

18.0.1.2.0 (2025-10-20)
-----------------------

Expand Down
2 changes: 1 addition & 1 deletion fs_attachment_s3/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
{
"name": "Fs Attachment S3",
"summary": """Store attachments into S3 complient filesystem""",
"version": "18.0.1.2.0",
"version": "18.0.1.2.1",
"license": "AGPL-3",
"author": "ACSONE SA/NV,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/storage",
Expand Down
10 changes: 7 additions & 3 deletions fs_attachment_s3/models/ir_attachment.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,18 +59,22 @@ def _get_s3_x_sendfile_path(self):
storage = self.env["fs.storage"].sudo().get_by_code(storage_code)
root_fs = storage._get_root_filesystem(fs)
s3_client = root_fs.s3
bucket_name = storage.get_directory_path().strip("/").rstrip("/")
# The directory path might contain the bucket and a prefix
# the part before the first "/" is the bucket
# the rest is the prefix
bucket_name, *prefix_parts = storage.get_directory_path().strip("/").split("/")
s3_key = "/".join(prefix_parts + [file_path.lstrip("/")])
if storage.s3_uses_signed_url_for_x_sendfile:
file_url = storage._s3_call_generate_presigned_url(
s3_client,
"get_object",
Params={"Bucket": bucket_name, "Key": file_path},
Params={"Bucket": bucket_name, "Key": s3_key},
ExpiresIn=storage.s3_signed_url_expiration,
)
else:
file_url = (
f"{s3_client.meta.endpoint_url.rstrip('/')}/"
f"{bucket_name}/{file_path.lstrip('/')}"
f"{bucket_name}/{s3_key.lstrip('/')}"
)

parsed_url = urlparse(file_url)
Expand Down
9 changes: 9 additions & 0 deletions fs_attachment_s3/readme/HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
## 18.0.1.2.1 (2026-05-27)

### Bugfixes

- Allow to use a prefix path and bucket in the directory_path on fs.storage
When the directory_path parameter is configured as <bucketname>/<someprefix>
the presigned url generation failed with a botocore error: "Invalid bucket name". ([#b17de9](https://github.com/OCA/storage/issues/b17de9))


## 18.0.1.2.0 (2025-10-20)

### Features
Expand Down
Empty file.
50 changes: 33 additions & 17 deletions fs_attachment_s3/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@ <h1>Fs Attachment S3</h1>
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:bf3d6979d1fa1dfe833a4b2663355ad392483c090177a137920f33ebb47ff224
!! source digest: sha256:1ba96137af8042fcf51cd02e691f65ee0f3f9b910bb61aed0f341bf5f027b034
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/storage/tree/18.0/fs_attachment_s3"><img alt="OCA/storage" src="https://img.shields.io/badge/github-OCA%2Fstorage-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/storage-18-0/storage-18-0-fs_attachment_s3"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/storage&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module extends the functionality of
Expand All @@ -390,18 +390,22 @@ <h1>Fs Attachment S3</h1>
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
<li><a class="reference internal" href="#changelog" id="toc-entry-2">Changelog</a><ul>
<li><a class="reference internal" href="#section-1" id="toc-entry-3">18.0.1.2.0 (2025-10-20)</a><ul>
<li><a class="reference internal" href="#features" id="toc-entry-4">Features</a></li>
<li><a class="reference internal" href="#section-1" id="toc-entry-3">18.0.1.2.1 (2026-05-27)</a><ul>
<li><a class="reference internal" href="#bugfixes" id="toc-entry-4">Bugfixes</a></li>
</ul>
</li>
<li><a class="reference internal" href="#section-2" id="toc-entry-5">18.0.1.2.0 (2025-10-20)</a><ul>
<li><a class="reference internal" href="#features" id="toc-entry-6">Features</a></li>
</ul>
</li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-5">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-6">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-7">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-8">Contributors</a></li>
<li><a class="reference internal" href="#other-credits" id="toc-entry-9">Other credits</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-10">Maintainers</a></li>
</ul>
</li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-7">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-8">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-9">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-10">Contributors</a></li>
<li><a class="reference internal" href="#other-credits" id="toc-entry-11">Other credits</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-12">Maintainers</a></li>
</ul>
</li>
</ul>
Expand Down Expand Up @@ -474,9 +478,21 @@ <h2><a class="toc-backref" href="#toc-entry-1">Configuration</a></h2>
<div class="section" id="changelog">
<h2><a class="toc-backref" href="#toc-entry-2">Changelog</a></h2>
<div class="section" id="section-1">
<h3><a class="toc-backref" href="#toc-entry-3">18.0.1.2.0 (2025-10-20)</a></h3>
<h3><a class="toc-backref" href="#toc-entry-3">18.0.1.2.1 (2026-05-27)</a></h3>
<div class="section" id="bugfixes">
<h4><a class="toc-backref" href="#toc-entry-4">Bugfixes</a></h4>
<ul class="simple">
<li>Allow to use a prefix path and bucket in the directory_path on
fs.storage When the directory_path parameter is configured as / the
presigned url generation failed with a botocore error: “Invalid bucket
name”. (<a class="reference external" href="https://github.com/OCA/storage/issues/b17de9">#b17de9</a>)</li>
</ul>
</div>
</div>
<div class="section" id="section-2">
<h3><a class="toc-backref" href="#toc-entry-5">18.0.1.2.0 (2025-10-20)</a></h3>
<div class="section" id="features">
<h4><a class="toc-backref" href="#toc-entry-4">Features</a></h4>
<h4><a class="toc-backref" href="#toc-entry-6">Features</a></h4>
<ul class="simple">
<li>Adapt to handle {db_name} in directory_path.
(<a class="reference external" href="https://github.com/OCA/storage/issues/db_name">#db_name</a>)</li>
Expand All @@ -485,38 +501,38 @@ <h4><a class="toc-backref" href="#toc-entry-4">Features</a></h4>
</div>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#toc-entry-5">Bug Tracker</a></h2>
<h2><a class="toc-backref" href="#toc-entry-7">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/storage/issues">GitHub Issues</a>.
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
<a class="reference external" href="https://github.com/OCA/storage/issues/new?body=module:%20fs_attachment_s3%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h2><a class="toc-backref" href="#toc-entry-6">Credits</a></h2>
<h2><a class="toc-backref" href="#toc-entry-8">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#toc-entry-7">Authors</a></h3>
<h3><a class="toc-backref" href="#toc-entry-9">Authors</a></h3>
<ul class="simple">
<li>ACSONE SA/NV</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#toc-entry-8">Contributors</a></h3>
<h3><a class="toc-backref" href="#toc-entry-10">Contributors</a></h3>
<ul class="simple">
<li>Laurent Mignon <a class="reference external" href="mailto:laurent.mignon&#64;acsone.eu">laurent.mignon&#64;acsone.eu</a> (<a class="reference external" href="https://www.acsone.eu">https://www.acsone.eu</a>)</li>
<li>Stéphane Bidoul <a class="reference external" href="mailto:stephane.bidoul&#64;acsone.eu">stephane.bidoul&#64;acsone.eu</a> (<a class="reference external" href="https://www.acsone.eu">https://www.acsone.eu</a>)</li>
</ul>
</div>
<div class="section" id="other-credits">
<h3><a class="toc-backref" href="#toc-entry-9">Other credits</a></h3>
<h3><a class="toc-backref" href="#toc-entry-11">Other credits</a></h3>
<p>The development of this module has been financially supported by:</p>
<ul class="simple">
<li>ACSONE SA/NV (<a class="reference external" href="https://www.acsone.eu">https://www.acsone.eu</a>)</li>
<li>Alcyon Belux</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#toc-entry-10">Maintainers</a></h3>
<h3><a class="toc-backref" href="#toc-entry-12">Maintainers</a></h3>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
Expand Down
Loading
Loading