
Document Management System (DMS) & Cloud Sync
Document management with folders, per-group access, tags, versions with one-click revert and locking - synced to Nextcloud, ownCloud or S3.
Available for Odoo 16.0, Odoo 17.0, Odoo 18.0, Odoo 19.0. Technical name bambooforge_dms.
Document Management System (DMS) & Cloud Sync
Attachments scattered over chatter are not a filing system. This app gives Odoo folders with per-group access, files with versions and locks — and a sync engine that mirrors every folder to Nextcloud, ownCloud or an S3-compatible bucket and is honest about being two-way.
What syncing actually means here
Most "cloud sync" modules upload and hope. This one keeps a ledger:
Local changes are pushed. Uploading, renaming, moving or editing a file flags it To Push; the next sync run (scheduled every 30 minutes, or the Sync Now button) uploads it and remembers the server's ETag.
Remote edits are detected and pulled — the reconcile pass compares the stored ETag with the server's. A colleague who edited the file straight in Nextcloud does not overwrite anything: the remote copy comes back as a new version on top of the history.
When both sides changed, nothing is guessed. The file is flagged Conflict, an activity is scheduled for its owner, and the form offers two buttons: Keep Odoo Version or Pull Remote Version. Whichever you pick, the losing content is still there as a version.
Nothing is overwritten blind. Before every push the engine re-checks the remote ETag; a remote edit it has not seen yet turns the push into a conflict instead of a lost update.
Deletions wait their turn. Deleting a file in Odoo queues the remote deletion in the sync log; the next run executes it. No network calls ever run inside your database transaction.
Every byte that moves is a line in DMS → Configuration → Sync Log.
Install
Install BambooForge DMS & Cloud Sync (depends on Discuss only).
Give document librarians DMS: Manager — they configure storages and folders and bypass locks. Everyone else gets DMS: User.
The DMS menu appears with Files, Folders, and (for managers) Configuration.
Folders
DMS → Folders → New
Name and parent build the tree; the full path becomes the remote directory when the folder syncs.
Access groups — leave empty and every DMS user sees the folder; pick groups and only their members (plus DMS managers) do. Files, versions and searches all obey the folder's groups.
Storage decides where the files physically live. Sub-folders suggest their parent's storage; renaming or moving a folder re-locates every file under it on the remote server on the next sync.
Files
DMS → Files → New, or just drop a file in.
Every upload is a version; the Versions tab shows who, when, size and checksum, lets you download any of them and revert — which stacks the old content on top as a new version instead of rewriting history.
Lock a file while you work on it; other users cannot modify, move or delete it until you unlock (a manager can always break a lock).
Tags and the folder panel on the left make the Files view a browser.
The Related Record tab links a file to any business document (an invoice, a project task…) and the smart button jumps straight to it.
sha256 checksums are computed on every version — the same fingerprint the sync engine uses to detect changes.
Storages
DMS → Configuration → Storages → New
Odoo filestore is the default: files stay local, nothing syncs.
WebDAV (Nextcloud / ownCloud)
URL is the DAV files endpoint, e.g. https://cloud.example.com/remote.php/dav/files/odoo, plus the login of a dedicated sync user. Test Connection does a real PROPFIND.
Missing remote directories are created automatically (MKCOL) on the first push.
S3-compatible object storage
Works with AWS S3, MinIO, Wasabi and anything that speaks the S3 API. Endpoint, region, bucket and a key pair — that is all.
The Signature V4 signer is built into the module. No boto3, no extra Python packages on your server.
Common options:
Sync root — the remote directory / key prefix everything lives under.
Scheduled sync — untick to keep a storage manual-only.
On remote delete — when a file vanishes on the server, either upload it again (default) or archive it in Odoo and follow the remote's lead.
Day to day
The Files list shows each file's sync badge: To Push, In Sync, Conflict, Error. Filters for each are one click away.
Sync Now on a storage pushes everything pending and reconciles the rest; the same button on a single file does just that file.
The scheduled job DMS: sync cloud storages runs every 30 minutes and works through every storage with scheduled sync enabled. One broken server never starves the others.
Sync log rows older than 90 days are cleaned up automatically — except queued deletions, which are work, not history.
Limits, stated plainly
Sync is per-folder-tree by binding folders to a storage; there is no per-file cherry-picking.
Remote files that never existed in Odoo are not imported automatically — the mirror is Odoo-outward, with remote edits (not remote creations) flowing back.
WebDAV servers that return no ETag get a synthetic one; change detection then relies on push bookkeeping only.
What changed in 1.1
Controlled documents (ISO 9001). Folders can require approval: draft -> in review -> approved -> obsolete, with named approvers, an activity trail, and one honest rule - editing an approved file sends it back to draft, even when the new content arrived from the cloud sync. Review due dates remind the approver a week ahead.
Retention schedules (ISO 15489). A folder keeps its files n years (from upload or from the effective date); expiry flags the file and asks a person to archive or waive. Nothing is ever deleted automatically.
What changed in 1.2
Document codes. Give a folder a prefix (QP, SOP, WI) and every file created there receives a sequential code - QP-001, QP-002 - independent of the filename, searchable, quotable in an audit.
Content search. Plain-text formats are indexed on upload and the Files search gains a Content filter; PDFs are indexed too when pdfminer.six is installed on the server (stated plainly: without it, PDFs are not).
What changed in 1.3
Controlled copies (ISO 9001 7.5.3). One button stamps an approved PDF on every page - document code, revision, who took it, when, and "uncontrolled once printed" - and writes the issue into a register on the document, so an auditor can see which revision is out there on paper. The register prunes itself after two years.
Support
support@bambooforge.dev — answered within two business days. This module is licensed OPL-1; one purchase covers one production database plus its staging copies.
Screens




