Initial commit: OCA Technical packages (595 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:03 +02:00
commit 2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions

View file

@ -0,0 +1,47 @@
# Restrict Deletion of Attachments
Odoo addon: attachment_delete_restrict
## Installation
```bash
pip install odoo-bringout-oca-server-tools-attachment_delete_restrict
```
## Dependencies
This addon depends on:
- base
- base_setup
## Manifest Information
- **Name**: Restrict Deletion of Attachments
- **Version**: 16.0.1.0.0
- **Category**: Tools
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/server-tools](https://github.com/OCA/server-tools) branch 16.0, addon `attachment_delete_restrict`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -0,0 +1,120 @@
================================
Restrict Deletion of Attachments
================================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:f29bf33d2719e11ecbc0e7a7341f424b412b08c775dd2d391818da5f939ff65d
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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%2Fserver--tools-lightgray.png?logo=github
:target: https://github.com/OCA/server-tools/tree/16.0/attachment_delete_restrict
:alt: OCA/server-tools
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/server-tools-16-0/server-tools-16-0-attachment_delete_restrict
: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/server-tools&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module provides the ability to restrict the deletion of the attachments at different levels.
**Table of contents**
.. contents::
:local:
Configuration
=============
Select level:
=============
#. Go to *Settings > General Settings> Permission section*.
#. Choose the level of *Restrict Delete Attachment* for all models by default or for models with "default" restriction level.
Five levels:
=============
* Default : Use global configuration
* Owner : Owner and admins only
* Custom : Certain groups or users per related model.
* Owner + Strict : Owner, admins and Certain groups or users per related model.
* None : all users can delete them
Only Owner and Custom + Strict need specific configuration on models.
For Custom and Owner + Strict levels:
======================================
#. Go to *Settings > Technical > Database Structure > Models*.
#. Open a model for which attachment deletion should be restricted.
#. Select 'Restrict Attachment Deletion', and assign 'Attachment Deletion Groups' and/or
'Attachment Deletion Users' as necessary (if no assignment, no one can delete the
attachments of this model).
For assigning 'Attachment Deletion Groups'/'Attachment Deletion Users' to the model,
you can alternatively add the model in the 'Attachment Deletion Models' tab in the
respective group/user form.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-tools/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/server-tools/issues/new?body=module:%20attachment_delete_restrict%0Aversion:%2016.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
~~~~~~~
* Quartile Limited
* Akretion
Contributors
~~~~~~~~~~~~
* Yoshi Tashiro <tashiro@quartile.co>
* Kévin Roche <kevin.roche@akretion.com>
* Sébastien BEAU <sebastien.beau@akretion.com>
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-yostashiro| image:: https://github.com/yostashiro.png?size=40px
:target: https://github.com/yostashiro
:alt: yostashiro
.. |maintainer-Kev-Roche| image:: https://github.com/Kev-Roche.png?size=40px
:target: https://github.com/Kev-Roche
:alt: Kev-Roche
Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-yostashiro| |maintainer-Kev-Roche|
This module is part of the `OCA/server-tools <https://github.com/OCA/server-tools/tree/16.0/attachment_delete_restrict>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,22 @@
# Copyright 2021 Quartile Limited
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Restrict Deletion of Attachments",
"version": "16.0.1.0.0",
"depends": [
"base",
"base_setup",
],
"website": "https://github.com/OCA/server-tools",
"author": "Quartile Limited, Akretion, Odoo Community Association (OCA)",
"category": "Tools",
"license": "AGPL-3",
"maintainers": ["yostashiro", "Kev-Roche"],
"data": [
"views/ir_model_views.xml",
"views/res_groups_views.xml",
"views/res_users_views.xml",
"views/res_config_setting_views.xml",
],
"installable": True,
}

View file

@ -0,0 +1,272 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * attachment_delete_restrict
#
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: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_groups
msgid "Access Groups"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_ir_attachment
msgid "Attachment"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__delete_attachment_group_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_group_ids
msgid "Attachment Deletion Groups"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__delete_attachment_model_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__delete_attachment_model_ids
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.view_groups_form
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.view_users_form
msgid "Attachment Deletion Models"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__delete_attachment_user_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_user_ids
msgid "Attachment Deletion Users"
msgstr ""
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Authorized Groups:"
msgstr ""
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Authorized Users:"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__changeset_change_ids
msgid "Changeset Changes"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__changeset_ids
msgid "Changesets"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__count_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__count_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__count_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__count_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__count_changesets
msgid "Count Changesets"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__count_pending_changeset_changes
msgid "Count Pending Changeset Changes"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__count_pending_changesets
msgid "Count Pending Changesets"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__custom
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__custom
msgid "Custom: For each model, selected groups and users can delete them"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_restrict_delete_attachment
msgid "Define a default value for Attachments Deletion"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_ir_model
msgid "Models"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__none
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__none
msgid "No restriction: All users / groups can delete them"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__owner_custom
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__owner_custom
msgid ""
"Owner + Custom: Creator and admin can delete them + for each model, selected"
" groups and users can delete them"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__owner
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__owner
msgid "Owner: Only creator and admin can delete them"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__restrict_delete_attachment
msgid "Restrict Attachment Deletion"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_restrict_delete_attachment
msgid "Restrict Delete Attachments"
msgstr ""
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Restrict Deletion on attachment"
msgstr ""
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Select default level of delete restriction on attachments"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__smart_search
msgid "Smart Search"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_attachment__count_pending_changeset_changes
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__count_pending_changeset_changes
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__count_pending_changeset_changes
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_groups__count_pending_changeset_changes
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_users__count_pending_changeset_changes
msgid "The number of pending changes of this record"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_attachment__count_pending_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__count_pending_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__count_pending_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_groups__count_pending_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_users__count_pending_changesets
msgid "The number of pending changesets of this record"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_attachment__count_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__count_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__count_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_groups__count_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_users__count_changesets
msgid "The overall number of changesets of this record"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_users__delete_attachment_model_ids
msgid ""
"The user can delete the attachments related to the models assigned here. "
"Restrict Attachment Deletion must be'Custom' or 'Owner + Custom' for the "
"model to be selected here."
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_group_ids
msgid "The users in the groups selected here can delete all the attachments."
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__delete_attachment_group_ids
msgid ""
"The users in the groups selected here can delete the attachments related to "
"this model."
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_groups__delete_attachment_model_ids
msgid ""
"The users of the group can delete the attachments related to the models "
"assigned here. Restrict Attachment Deletion must be'Custom' or 'Owner + "
"Custom' for the model to be selected here."
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_user_ids
msgid "The users selected here can delete all the attachments"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__delete_attachment_user_ids
msgid ""
"The users selected here can delete the attachments related to this model."
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__default
msgid "Use global configuration"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_users
msgid "User"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__user_can_see_changeset
msgid "User Can See Changeset"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__restrict_delete_attachment
msgid ""
"When selected, the deletion of the attachments related to this model is "
"restricted to certain users."
msgstr ""
#. module: attachment_delete_restrict
#. odoo-python
#: code:addons/attachment_delete_restrict/models/ir_attachment.py:0
#, python-format
msgid ""
"You are not allowed to delete this attachment.\n"
"\n"
"Users with the delete permission:\n"
"%s"
msgstr ""

View file

@ -0,0 +1,272 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * attachment_delete_restrict
#
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: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_groups
msgid "Access Groups"
msgstr "Pristupne grupe"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_ir_attachment
msgid "Attachment"
msgstr "Prilog"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__delete_attachment_group_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_group_ids
msgid "Attachment Deletion Groups"
msgstr "Grupe za brisanje priloga"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__delete_attachment_model_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__delete_attachment_model_ids
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.view_groups_form
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.view_users_form
msgid "Attachment Deletion Models"
msgstr "Modeli brisanja priloga"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__delete_attachment_user_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_user_ids
msgid "Attachment Deletion Users"
msgstr "Korisnici za brisanje priloga"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Authorized Groups:"
msgstr "Ovlašćene grupe:"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Authorized Users:"
msgstr "Ovlašćeni korisnici:"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__changeset_change_ids
msgid "Changeset Changes"
msgstr "Promene skupa izmena"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__changeset_ids
msgid "Changesets"
msgstr "Skupovi izmena"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_config_settings
msgid "Config Settings"
msgstr "Postavke"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__count_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__count_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__count_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__count_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__count_changesets
msgid "Count Changesets"
msgstr "Broj skupova izmena"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__count_pending_changeset_changes
msgid "Count Pending Changeset Changes"
msgstr "Broj promena skupa izmena na čekanju"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__count_pending_changesets
msgid "Count Pending Changesets"
msgstr "Broj skupova izmena na čekanju"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__custom
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__custom
msgid "Custom: For each model, selected groups and users can delete them"
msgstr "Prilagođeno: Za svaki model, odabrane grupe i korisnici mogu da ih brišu"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_restrict_delete_attachment
msgid "Define a default value for Attachments Deletion"
msgstr "Definiši zadatu vrednost za brisanje priloga"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_ir_model
msgid "Models"
msgstr "Modeli"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__none
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__none
msgid "No restriction: All users / groups can delete them"
msgstr "Nema ograničenja: Svi korisnici / grupe mogu da ih brišu"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__owner_custom
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__owner_custom
msgid ""
"Owner + Custom: Creator and admin can delete them + for each model, selected"
" groups and users can delete them"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__owner
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__owner
msgid "Owner: Only creator and admin can delete them"
msgstr "Vlasnik: Samo kreator i admin mogu da ih brišu"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__restrict_delete_attachment
msgid "Restrict Attachment Deletion"
msgstr "Ograniči brisanje priloga"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_restrict_delete_attachment
msgid "Restrict Delete Attachments"
msgstr "Ograniči brisanje priloga"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Restrict Deletion on attachment"
msgstr "Ograniči brisanje priloga"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Select default level of delete restriction on attachments"
msgstr "Izaberite zadati nivo ograničenja brisanja priloga"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__smart_search
msgid "Smart Search"
msgstr "Pametna pretraga"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_attachment__count_pending_changeset_changes
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__count_pending_changeset_changes
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__count_pending_changeset_changes
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_groups__count_pending_changeset_changes
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_users__count_pending_changeset_changes
msgid "The number of pending changes of this record"
msgstr "Broj promena na čekanju ovog zapisa"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_attachment__count_pending_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__count_pending_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__count_pending_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_groups__count_pending_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_users__count_pending_changesets
msgid "The number of pending changesets of this record"
msgstr "Broj skupova izmena na čekanju ovog zapisa"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_attachment__count_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__count_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__count_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_groups__count_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_users__count_changesets
msgid "The overall number of changesets of this record"
msgstr "Ukupan broj skupova izmena ovog zapisa"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_users__delete_attachment_model_ids
msgid ""
"The user can delete the attachments related to the models assigned here. "
"Restrict Attachment Deletion must be'Custom' or 'Owner + Custom' for the "
"model to be selected here."
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_group_ids
msgid "The users in the groups selected here can delete all the attachments."
msgstr "Korisnici u grupama odabranim ovde mogu brisati sve priloge."
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__delete_attachment_group_ids
msgid ""
"The users in the groups selected here can delete the attachments related to "
"this model."
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_groups__delete_attachment_model_ids
msgid ""
"The users of the group can delete the attachments related to the models "
"assigned here. Restrict Attachment Deletion must be'Custom' or 'Owner + "
"Custom' for the model to be selected here."
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_user_ids
msgid "The users selected here can delete all the attachments"
msgstr "Korisnici odabrani ovde mogu brisati sve priloge"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__delete_attachment_user_ids
msgid ""
"The users selected here can delete the attachments related to this model."
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__default
msgid "Use global configuration"
msgstr "Koristi globalnu konfiguraciju"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_users
msgid "User"
msgstr "Korisnik"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__user_can_see_changeset
msgid "User Can See Changeset"
msgstr "Korisnik može videti skup izmena"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__restrict_delete_attachment
msgid ""
"When selected, the deletion of the attachments related to this model is "
"restricted to certain users."
msgstr ""
#. module: attachment_delete_restrict
#. odoo-python
#: code:addons/attachment_delete_restrict/models/ir_attachment.py:0
#, python-format
msgid ""
"You are not allowed to delete this attachment.\n"
"\n"
"Users with the delete permission:\n"
"%s"
msgstr ""

View file

@ -0,0 +1,290 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * attachment_delete_restrict
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2022-09-04 06:07+0000\n"
"Last-Translator: Ignacio Buioli <ibuioli@gmail.com>\n"
"Language-Team: none\n"
"Language: es_AR\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"
"X-Generator: Weblate 4.3.2\n"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_groups
msgid "Access Groups"
msgstr "Grupos de Acceso"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_ir_attachment
msgid "Attachment"
msgstr "Adjunto"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__delete_attachment_group_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_group_ids
msgid "Attachment Deletion Groups"
msgstr "Grupos de Eliminación de Adjuntos"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__delete_attachment_model_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__delete_attachment_model_ids
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.view_groups_form
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.view_users_form
msgid "Attachment Deletion Models"
msgstr "Modelo de Eliminación de Adjuntos"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__delete_attachment_user_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_user_ids
msgid "Attachment Deletion Users"
msgstr "Usuarios de Eliminación de Adjuntos"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Authorized Groups:"
msgstr "Grupos Autorizados:"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Authorized Users:"
msgstr "Usuarios Autorizados:"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__changeset_change_ids
msgid "Changeset Changes"
msgstr "Cambios del Conjunto de Cambios"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__changeset_ids
msgid "Changesets"
msgstr "Conjunto de Cambios"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_config_settings
msgid "Config Settings"
msgstr "Ajustes Configuración"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__count_pending_changeset_changes
msgid "Count Pending Changeset Changes"
msgstr "Cuenta de los Cambios Pendientes de los Conjuntos de Cambios"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__count_pending_changesets
msgid "Count Pending Changesets"
msgstr "Cuenta de los Conjuntos de Cambios Pendientes"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__custom
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__custom
msgid "Custom: For each model, selected groups and users can delete them"
msgstr ""
"Personalizado: Para cada modelo, los grupos y usuarios seleccionados pueden "
"eliminarlos"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_restrict_delete_attachment
msgid "Define a default value for Attachments Deletion"
msgstr "Define un valor preterminado para la Eliminación de Adjuntos"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__display_name
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__display_name
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__display_name
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__display_name
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__display_name
msgid "Display Name"
msgstr "Mostrar Nombre"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__id
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__id
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__id
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__id
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__id
msgid "ID"
msgstr "ID"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment____last_update
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model____last_update
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings____last_update
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups____last_update
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users____last_update
msgid "Last Modified on"
msgstr "Última modificación en"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_ir_model
msgid "Models"
msgstr "Modelos"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__none
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__none
msgid "No restriction: All users / groups can delete them"
msgstr "No hay resitricción: Todos los usuarios / grupos pueden eliminarlos"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__owner_custom
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__owner_custom
msgid ""
"Owner + Custom: Creator and admin can delete them + for each model, selected"
" groups and users can delete them"
msgstr ""
"Propietario + Personalizado: El creador y administrador puede eliminarlos + "
"para cada modelo, los grupos y usuarios seleccionados pueden eliminarlos"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__owner
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__owner
msgid "Owner: Only creator and admin can delete them"
msgstr "Propietario: Solo el creador y el administrador puede eliminarlos"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__restrict_delete_attachment
msgid "Restrict Attachment Deletion"
msgstr "Restringir Eliminación de Adjuntos"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_restrict_delete_attachment
msgid "Restrict Delete Attachments"
msgstr "Restringir Eliminar Adjuntos"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Restrict Deletion on attachment"
msgstr "Restringir la Eliminación en adjunto"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Select default level of delete restriction on attachments"
msgstr ""
"Seleccione el nivel predeterminado de restricción de eliminación de archivos "
"adjuntos"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__smart_search
msgid "Smart Search"
msgstr "Búsqueda Inteligente"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_users__delete_attachment_model_ids
msgid ""
"The user can delete the attachments related to the models assigned here. In "
"general settings, 'Restrict Delete Attachment' must be set as 'custom' to "
"activate this setting."
msgstr ""
"El usuario puede eliminar los archivos adjuntos relacionados con los modelos "
"asignados aquí. En la configuración general, 'Restringir eliminar adjunto' "
"debe configurarse como 'Personalizado' para activar esta configuración."
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_group_ids
msgid "The users in the groups selected here can delete all the attachments."
msgstr ""
"Los usuarios en los grupos seleccionados acá pueden eliminar todos los "
"adjuntos."
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__delete_attachment_group_ids
msgid ""
"The users in the groups selected here can delete the attachments related to "
"this model."
msgstr ""
"Los usuarios en los grupos seleccionados acá pueden eliminar los adjuntos "
"relacionados a este modelo."
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_groups__delete_attachment_model_ids
msgid ""
"The users of the group can delete the attachments related to the models "
"assigned here. In general settings, 'Restrict Delete Attachment' must be set"
" as 'custom' to activate this setting."
msgstr ""
"Los usuarios del grupo pueden eliminar los archivos adjuntos relacionados "
"con los modelos asignados acá. En la configuración general, 'Restringir "
"eliminar adjuntos' debe configurarse como 'Personalizado' para activar esta "
"configuración."
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_user_ids
msgid "The users selected here can delete all the attachments"
msgstr "Los usuarios seleccionados acá pueden eliminar todos los adjuntos"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__delete_attachment_user_ids
msgid ""
"The users selected here can delete the attachments related to this model."
msgstr ""
"Los usuarios seleccionados acá pueden eliminar los adjuntos relacionados a "
"este modelo."
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__default
msgid "Use global configuration"
msgstr "Usar configuración global"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__user_can_see_changeset
msgid "User Can See Changeset"
msgstr "El Usuario Puede ver Conjuntos de Cambios"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_users
msgid "Users"
msgstr "Usuarios"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__restrict_delete_attachment
msgid ""
"When selected, the deletion of the attachments related to this model is "
"restricted to certain users."
msgstr ""
"Cuando se selecciona, la eliminación de los archivos adjuntos relacionados "
"con este modelo está restringida a ciertos usuarios."
#. module: attachment_delete_restrict
#: code:addons/attachment_delete_restrict/models/ir_attachment.py:0
#, python-format
msgid ""
"You are not allowed to delete this attachment.\n"
"\n"
"Users with the delete permission:\n"
"%s"
msgstr ""
"No tiene permitido eliminar este archivo adjunto\n"
"\n"
"Usuarios con permisos de eliminación:\n"
"%s"

View file

@ -0,0 +1,287 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * attachment_delete_restrict
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-11 14:14+0000\n"
"PO-Revision-Date: 2022-07-11 16:16+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: \n"
"X-Generator: Poedit 3.1.1\n"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_groups
msgid "Access Groups"
msgstr "Groupes d'accès"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_ir_attachment
msgid "Attachment"
msgstr "Pièce jointe"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__delete_attachment_group_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_group_ids
msgid "Attachment Deletion Groups"
msgstr "Groupe avec droit de suppression de PJ"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__delete_attachment_model_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__delete_attachment_model_ids
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.view_groups_form
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.view_users_form
msgid "Attachment Deletion Models"
msgstr "Modèle avec restrictions de suppression de PJ"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__delete_attachment_user_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_user_ids
msgid "Attachment Deletion Users"
msgstr "Utilisateurs avec droit de suppression de PJ"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Authorized Groups:"
msgstr "Groupes autorisés:"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Authorized Users:"
msgstr "Utilisateurs autorisés:"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__changeset_change_ids
msgid "Changeset Changes"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__changeset_ids
msgid "Changesets"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_config_settings
msgid "Config Settings"
msgstr "Paramètres de config"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__count_pending_changeset_changes
msgid "Count Pending Changeset Changes"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__count_pending_changesets
msgid "Count Pending Changesets"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__custom
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__custom
msgid "Custom: For each model, selected groups and users can delete them"
msgstr ""
"Personnalisé: Pour chaque modèle, sélectionner les groupes et/ou "
"utilisateurs ayant le droit"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_restrict_delete_attachment
msgid "Define a default value for Attachments Deletion"
msgstr "Définir une valeur par défaut pour la suppression des pièces jointes"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__display_name
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__display_name
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__display_name
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__display_name
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__id
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__id
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__id
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__id
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__id
msgid "ID"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment____last_update
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model____last_update
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings____last_update
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups____last_update
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users____last_update
msgid "Last Modified on"
msgstr "Dernière modification le"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_ir_model
msgid "Models"
msgstr "Modèles"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__none
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__none
msgid "No restriction: All users / groups can delete them"
msgstr "Aucune restrictions: Tous les utilisateurs / groupes peuvent supprimer"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__owner_custom
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__owner_custom
msgid ""
"Owner + Custom: Creator and admin can delete them + for each model, selected "
"groups and users can delete them"
msgstr ""
"Propriétaire + Personnalisé : Le créateur et l'administrateur peuvent les "
"supprimer + pour chaque modèle, les groupes et utilisateurs sélectionnés "
"peuvent les supprimer"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__owner
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__owner
msgid "Owner: Only creator and admin can delete them"
msgstr ""
"Propriétaire : Seuls le créateur et l'administrateur peuvent les supprimer"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__restrict_delete_attachment
msgid "Restrict Attachment Deletion"
msgstr "Suppression de PJs Limitée"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_restrict_delete_attachment
msgid "Restrict Delete Attachments"
msgstr "Suppression de PJs Limitée"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Restrict Deletion on attachment"
msgstr "Restreindre la suppression de PJs"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Select default level of delete restriction on attachments"
msgstr "Sélectionner le niveau de restriction sur les pièces jointes"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__smart_search
msgid "Smart Search"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_users__delete_attachment_model_ids
msgid ""
"The user can delete the attachments related to the models assigned here. In "
"general settings, 'Restrict Delete Attachment' must be set as 'custom' to "
"activate this setting."
msgstr ""
"L'utilisateur peut supprimer les pièces jointes reliées au modèle assigné "
"ici. Dans la configuration générale, \"Restreindre la suppression de PJs\" "
"doit être à \"Personnalisé\" pour que cela s'active."
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_group_ids
msgid "The users in the groups selected here can delete all the attachments."
msgstr ""
"Les utilisateurs de ce groupe peuvent supprimer toutes les pièces jointes."
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__delete_attachment_group_ids
msgid ""
"The users in the groups selected here can delete the attachments related to "
"this model."
msgstr ""
"Les utilisateurs de ces groupes peuvent supprimer les pièces jointes de ce "
"modèle."
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_groups__delete_attachment_model_ids
msgid ""
"The users of the group can delete the attachments related to the models "
"assigned here. In general settings, 'Restrict Delete Attachment' must be set "
"as 'custom' to activate this setting."
msgstr ""
"Les utilisateurs de ce groupe peuvent supprimer les pièces jointes reliées "
"au modèle assigné ici. Dans la configuration générale, \"Restreindre la "
"suppression de PJs\" doit être à \"Personnalisé\" pour que cela s'active."
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_user_ids
msgid "The users selected here can delete all the attachments"
msgstr "Ces utilisateurs peuvent supprimer toutes les pièces jointes"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__delete_attachment_user_ids
msgid ""
"The users selected here can delete the attachments related to this model."
msgstr "Ces utilisateurs peuvent supprimer les pièces jointes de ce modèle."
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__default
msgid "Use global configuration"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__user_can_see_changeset
msgid "User Can See Changeset"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_users
msgid "Users"
msgstr "Utilisateurs"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__restrict_delete_attachment
msgid ""
"When selected, the deletion of the attachments related to this model is "
"restricted to certain users."
msgstr ""
"Une fois sélectionné, la suppression de pièces jointes de ce modèle est "
"restreinte à certains utilisateurs."
#. module: attachment_delete_restrict
#: code:addons/attachment_delete_restrict/models/ir_attachment.py:0
#, python-format
msgid ""
"You are not allowed to delete this attachment.\n"
"\n"
"Users with the delete permission:\n"
"%s"
msgstr ""
"Vous n'êtes pas autorisé à supprimer cette pièce jointe.\n"
"\n"
"Utilisateurs ayant la permission:\n"
"%s"

View file

@ -0,0 +1,299 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * attachment_delete_restrict
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-06-04 16:26+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\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"
"X-Generator: Weblate 5.10.4\n"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_groups
msgid "Access Groups"
msgstr "Gruppi di accesso"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_ir_attachment
msgid "Attachment"
msgstr "Allegato"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__delete_attachment_group_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_group_ids
msgid "Attachment Deletion Groups"
msgstr "Gruppi cancellazione allegato"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__delete_attachment_model_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__delete_attachment_model_ids
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.view_groups_form
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.view_users_form
msgid "Attachment Deletion Models"
msgstr "Modelli cancellazione allegato"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__delete_attachment_user_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_user_ids
msgid "Attachment Deletion Users"
msgstr "Utenti cancellazione allegato"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Authorized Groups:"
msgstr "Gruppi autorizzati:"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Authorized Users:"
msgstr "Utenti autorizzati:"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__changeset_change_ids
msgid "Changeset Changes"
msgstr "Modifiche dell'insieme di modifiche"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__changeset_ids
msgid "Changesets"
msgstr "Insiemi di modifiche"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_config_settings
msgid "Config Settings"
msgstr "Impostazioni configurazione"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__count_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__count_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__count_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__count_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__count_changesets
msgid "Count Changesets"
msgstr "Conteggio insieme di modifiche"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__count_pending_changeset_changes
msgid "Count Pending Changeset Changes"
msgstr "Conteggio modifiche dell'insieme di modifiche in attesa"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__count_pending_changesets
msgid "Count Pending Changesets"
msgstr "Conteggio insieme di modifiche in attesa"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__custom
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__custom
msgid "Custom: For each model, selected groups and users can delete them"
msgstr ""
"Personalizzato: per ogni modello, gruppi e utenti selezionati lo possono "
"cancellare"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_restrict_delete_attachment
msgid "Define a default value for Attachments Deletion"
msgstr "Definire un valore predefinito per la cancellazione allegati"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_ir_model
msgid "Models"
msgstr "Modelli"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__none
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__none
msgid "No restriction: All users / groups can delete them"
msgstr "Nessuna restrizione: tutti gli utenti / gruppi li possono cancellare"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__owner_custom
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__owner_custom
msgid ""
"Owner + Custom: Creator and admin can delete them + for each model, selected"
" groups and users can delete them"
msgstr ""
"Proprietario + personalizzato: il creatore e l'amministratore li possono "
"cancellare + per ogni modello, gruppi e utenti selezionati"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__owner
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__owner
msgid "Owner: Only creator and admin can delete them"
msgstr "Proprietario: solo il creatore e l'amministratore li possono cancellare"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__restrict_delete_attachment
msgid "Restrict Attachment Deletion"
msgstr "Limita cancellazione allegato"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_restrict_delete_attachment
msgid "Restrict Delete Attachments"
msgstr "Limita cancellazione allegati"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Restrict Deletion on attachment"
msgstr "Limita la cancellazione sugli allegati"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Select default level of delete restriction on attachments"
msgstr ""
"Selezionare il livello predefinito della limitazione di cancellazione sugli "
"allegati"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__smart_search
msgid "Smart Search"
msgstr "Ricerca intelligente"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_attachment__count_pending_changeset_changes
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__count_pending_changeset_changes
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__count_pending_changeset_changes
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_groups__count_pending_changeset_changes
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_users__count_pending_changeset_changes
msgid "The number of pending changes of this record"
msgstr "Numero di modifiche di questo record in attesa"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_attachment__count_pending_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__count_pending_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__count_pending_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_groups__count_pending_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_users__count_pending_changesets
msgid "The number of pending changesets of this record"
msgstr "Numero di insiemi di modifiche in attesa di questo record"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_attachment__count_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__count_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__count_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_groups__count_changesets
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_users__count_changesets
msgid "The overall number of changesets of this record"
msgstr "Numero totale di insiemi di modifiche di questo record"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_users__delete_attachment_model_ids
msgid ""
"The user can delete the attachments related to the models assigned here. "
"Restrict Attachment Deletion must be'Custom' or 'Owner + Custom' for the "
"model to be selected here."
msgstr ""
"L'utente può eliminare gli allegati relativi ai modelli assegnati qui. "
"L'opzione \"Limita eliminazione allegati\" deve essere \"Personalizzata\" o "
"\"Proprietario + personalizzata\" affinché il modello venga selezionato qui."
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_group_ids
msgid "The users in the groups selected here can delete all the attachments."
msgstr ""
"Gli utenti nei gruppi selezionati qui possono eliminare tutti gli allegati."
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__delete_attachment_group_ids
msgid ""
"The users in the groups selected here can delete the attachments related to "
"this model."
msgstr ""
"Gli utenti nei gruppi selezionati qui possono eliminare gli allegati "
"relativi a questo modello."
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_groups__delete_attachment_model_ids
msgid ""
"The users of the group can delete the attachments related to the models "
"assigned here. Restrict Attachment Deletion must be'Custom' or 'Owner + "
"Custom' for the model to be selected here."
msgstr ""
"Gli utenti del gruppo possono eliminare gli allegati relativi ai modelli "
"assegnati qui. L'opzione \"Limita eliminazione allegati\" deve essere "
"\"Personalizzata\" o \"Proprietario + personalizzata\" affinché il modello "
"venga selezionato qui."
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_user_ids
msgid "The users selected here can delete all the attachments"
msgstr "Gli utenti selezionati qui possono eliminare tutti gli allegati"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__delete_attachment_user_ids
msgid ""
"The users selected here can delete the attachments related to this model."
msgstr ""
"Gli utenti selezionati qui possono eliminare gli allegati relativi a questo "
"modello."
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__default
msgid "Use global configuration"
msgstr "Usa configurazione globale"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_users
msgid "User"
msgstr "Utente"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__user_can_see_changeset
msgid "User Can See Changeset"
msgstr "L'utente può vedere l'insieme delle modifiche"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__restrict_delete_attachment
msgid ""
"When selected, the deletion of the attachments related to this model is "
"restricted to certain users."
msgstr ""
"Quando selezionata, la cancellazione degli allegati relativi a questo "
"modello è limitata ad alcuni utenti."
#. module: attachment_delete_restrict
#. odoo-python
#: code:addons/attachment_delete_restrict/models/ir_attachment.py:0
#, python-format
msgid ""
"You are not allowed to delete this attachment.\n"
"\n"
"Users with the delete permission:\n"
"%s"
msgstr ""
"Non si è autorizzati ad eliminare questo allegato.\n"
"\n"
"Utenti con permesso di cancellazione:\n"
"%s"

View file

@ -0,0 +1,288 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * attachment_delete_restrict
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-08-29 14:47+0000\n"
"PO-Revision-Date: 2021-08-29 14:47+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: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_groups
msgid "Access Groups"
msgstr "アクセスグループ"
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_ir_attachment
msgid "Attachment"
msgstr "添付"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__delete_attachment_group_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_group_ids
msgid "Attachment Deletion Groups"
msgstr "添付削除グループ"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__delete_attachment_model_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__delete_attachment_model_ids
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.view_groups_form
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.view_users_form
msgid "Attachment Deletion Models"
msgstr "添付削除モデル"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__delete_attachment_user_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_user_ids
msgid "Attachment Deletion Users"
msgstr "添付削除ユーザ"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Authorized Groups:"
msgstr ""
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Authorized Users:"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__changeset_change_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__changeset_change_ids
msgid "Changeset Changes"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__changeset_ids
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__changeset_ids
msgid "Changesets"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__count_pending_changeset_changes
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__count_pending_changeset_changes
msgid "Count Pending Changeset Changes"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__count_pending_changesets
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__count_pending_changesets
msgid "Count Pending Changesets"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__custom
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__custom
msgid "Custom: For each model, selected groups and users can delete them"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_restrict_delete_attachment
#, fuzzy
msgid "Define a default value for Attachments Deletion"
msgstr "添付削除を制限"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__display_name
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__display_name
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__display_name
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__display_name
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__display_name
msgid "Display Name"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__id
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__id
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__id
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__id
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__id
msgid "ID"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment____last_update
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model____last_update
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings____last_update
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups____last_update
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users____last_update
msgid "Last Modified on"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_ir_model
msgid "Models"
msgstr "モデル"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__none
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__none
msgid "No restriction: All users / groups can delete them"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__owner_custom
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__owner_custom
msgid ""
"Owner + Custom: Creator and admin can delete them + for each model, selected "
"groups and users can delete them"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__owner
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__res_config_settings__global_restrict_delete_attachment__owner
msgid "Owner: Only creator and admin can delete them"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__restrict_delete_attachment
msgid "Restrict Attachment Deletion"
msgstr "添付削除を制限"
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__global_restrict_delete_attachment
#, fuzzy
msgid "Restrict Delete Attachments"
msgstr "添付削除を制限"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
#, fuzzy
msgid "Restrict Deletion on attachment"
msgstr "添付削除を制限"
#. module: attachment_delete_restrict
#: model_terms:ir.ui.view,arch_db:attachment_delete_restrict.res_config_settings_view_form
msgid "Select default level of delete restriction on attachments"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__smart_search
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__smart_search
msgid "Smart Search"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_users__delete_attachment_model_ids
msgid ""
"The user can delete the attachments related to the models assigned here. In "
"general settings, 'Restrict Delete Attachment' must be set as 'custom' to "
"activate this setting."
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_group_ids
#, fuzzy
msgid "The users in the groups selected here can delete all the attachments."
msgstr ""
"ここで選択されたグループのユーザはこのモデルに関連する添付を削除することがで"
"きます。"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__delete_attachment_group_ids
msgid ""
"The users in the groups selected here can delete the attachments related to "
"this model."
msgstr ""
"ここで選択されたグループのユーザはこのモデルに関連する添付を削除することがで"
"きます。"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_groups__delete_attachment_model_ids
#, fuzzy
msgid ""
"The users of the group can delete the attachments related to the models "
"assigned here. In general settings, 'Restrict Delete Attachment' must be set "
"as 'custom' to activate this setting."
msgstr ""
"グループのユーザはここで割り当てられたモデルの添付を削除することができます。"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_res_config_settings__global_delete_attachment_user_ids
#, fuzzy
msgid "The users selected here can delete all the attachments"
msgstr ""
"ここで選択されたユーザはこのモデルに関連する添付を削除することができます。"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__delete_attachment_user_ids
msgid ""
"The users selected here can delete the attachments related to this model."
msgstr ""
"ここで選択されたユーザはこのモデルに関連する添付を削除することができます。"
#. module: attachment_delete_restrict
#: model:ir.model.fields.selection,name:attachment_delete_restrict.selection__ir_model__restrict_delete_attachment__default
msgid "Use global configuration"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_attachment__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_ir_model__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_config_settings__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_groups__user_can_see_changeset
#: model:ir.model.fields,field_description:attachment_delete_restrict.field_res_users__user_can_see_changeset
msgid "User Can See Changeset"
msgstr ""
#. module: attachment_delete_restrict
#: model:ir.model,name:attachment_delete_restrict.model_res_users
msgid "Users"
msgstr "ユーザ"
#. module: attachment_delete_restrict
#: model:ir.model.fields,help:attachment_delete_restrict.field_ir_model__restrict_delete_attachment
msgid ""
"When selected, the deletion of the attachments related to this model is "
"restricted to certain users."
msgstr ""
"選択された場合、このモデルに関連する添付の削除は許可されたユーザのみに制限さ"
"れます。"
#. module: attachment_delete_restrict
#: code:addons/attachment_delete_restrict/models/ir_attachment.py:0
#, python-format
msgid ""
"You are not allowed to delete this attachment.\n"
"\n"
"Users with the delete permission:\n"
"%s"
msgstr ""
"この添付の削除権限がありません。\n"
"\n"
"削除権限を持つユーザ:\n"
"%s"
#~ msgid ""
#~ "The user can delete the attachments related to the models assigned here."
#~ msgstr "ユーザはここで割り当てられたモデルの添付を削除することができます。"

View file

@ -0,0 +1,5 @@
from . import ir_attachment
from . import ir_model
from . import res_groups
from . import res_users
from . import res_config

View file

@ -0,0 +1,80 @@
# Copyright 2021 Quartile Limited
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, models
from odoo.exceptions import ValidationError
class IrAttachment(models.Model):
_inherit = "ir.attachment"
def _check_delete_attachment(self, model=None):
if model:
restrict = model.restrict_delete_attachment
else:
restrict = (
self.env["ir.config_parameter"]
.sudo()
.get_param(
"attachment_delete_restrict.global_restrict_delete_attachment"
)
)
if restrict == "owner":
self._check_owner_delete_attachment()
elif restrict == "custom":
self._check_custom_delete_attachment(model)
elif restrict == "owner_custom":
self._check_custom_delete_attachment(model, allow_owner_and_admin=True)
def _raise_delete_attachment_error(self, allowed_users):
raise ValidationError(
_(
"You are not allowed to delete this attachment.\n\nUsers with "
"the delete permission:\n%s"
)
% ("\n".join(allowed_users.mapped("name")) or "None")
)
def _check_owner_delete_attachment(self):
if not (
self.create_uid == self.env.user
or self.user_has_groups("base.group_system")
):
return self._raise_delete_attachment_error(
self.create_uid | self.env.ref("base.group_system").users
)
def _check_custom_delete_attachment(self, model=None, allow_owner_and_admin=False):
if model:
groups = model.delete_attachment_group_ids
users = model.delete_attachment_user_ids
else:
groups = self.env[
"res.config.settings"
]._get_global_delete_attachment_groups()
users = self.env[
"res.config.settings"
]._get_global_delete_attachment_users()
if allow_owner_and_admin:
users += self.create_uid
groups += self.env.ref("base.group_system")
allowed_users = groups.users | users
if self.env.user not in allowed_users:
return self._raise_delete_attachment_error(allowed_users)
def unlink(self):
if self.env.su:
return super().unlink()
res_models = list(set(self.filtered("res_model").mapped("res_model")))
if res_models:
models = self.env["ir.model"].sudo().search([("model", "in", res_models)])
name2models = {m.model: m for m in models}
for rec in self:
if rec.res_model:
model = name2models[rec.res_model]
if model.restrict_delete_attachment == "default":
rec.sudo()._check_delete_attachment()
else:
rec.sudo()._check_delete_attachment(model)
return super().unlink()

View file

@ -0,0 +1,49 @@
# Copyright 2021 Quartile Limited
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
RESTRICT_DELETE_ATTACH = [
("default", "Use global configuration"),
("owner", "Owner: Only creator and admin can delete them"),
("custom", "Custom: For each model, selected groups and users can delete them"),
(
"owner_custom",
"Owner + Custom: Creator and admin can delete them + for "
"each model, selected groups and users can delete them",
),
("none", "No restriction: All users / groups can delete them"),
]
class IrModel(models.Model):
_inherit = "ir.model"
restrict_delete_attachment = fields.Selection(
selection=RESTRICT_DELETE_ATTACH,
string="Restrict Attachment Deletion",
help="When selected, the deletion of the attachments related to this model is "
"restricted to certain users.",
default="default",
)
delete_attachment_group_ids = fields.Many2many(
"res.groups",
string="Attachment Deletion Groups",
relation="delete_attachment_group_rel",
help="The users in the groups selected here can delete the attachments related "
"to this model.",
)
delete_attachment_user_ids = fields.Many2many(
"res.users",
string="Attachment Deletion Users",
relation="delete_attachment_user_rel",
help="The users selected here can delete the attachments related to this "
"model.",
)
def _onchange_restrict_delete_attachment(self):
if self.restrict_delete_attachment not in ["custom", "owner_custom"]:
self.delete_attachment_group_ids = False
self.delete_attachment_user_ids = False

View file

@ -0,0 +1,88 @@
# Copyright (C) 2022 Akretion (<http://www.akretion.com>).
# @author Kévin Roche <kevin.roche@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from ast import literal_eval
from odoo import api, fields, models
from .ir_model import RESTRICT_DELETE_ATTACH
class ResConfigSettings(models.TransientModel):
_inherit = "res.config.settings"
global_restrict_delete_attachment = fields.Selection(
selection=RESTRICT_DELETE_ATTACH[1:],
config_parameter="attachment_delete_restrict.global_restrict_delete_attachment",
readonly=False,
required=True,
default="none",
string="Restrict Delete Attachments",
help="Define a default value for Attachments Deletion",
)
global_delete_attachment_group_ids = fields.Many2many(
"res.groups",
string="Attachment Deletion Groups",
help="The users in the groups selected here can delete all the attachments.",
readonly=False,
compute_sudo=True,
compute="_compute_global_delete_attachment_group_ids",
inverse="_inverse_global_delete_attachment_group_ids",
)
global_delete_attachment_user_ids = fields.Many2many(
"res.users",
string="Attachment Deletion Users",
help="The users selected here can delete all the attachments",
readonly=False,
compute_sudo=True,
compute="_compute_global_delete_attachment_user_ids",
inverse="_inverse_global_delete_attachment_user_ids",
)
def _get_global_delete_attachment_groups(self):
str_group_ids = self.env["ir.config_parameter"].get_param(
"attachment_delete_restrict.global_delete_attachment_group_ids"
)
groups_ids = literal_eval(str_group_ids or "[]")
return self.env["res.groups"].search([("id", "in", groups_ids)])
@api.depends("global_restrict_delete_attachment")
def _compute_global_delete_attachment_group_ids(self):
groups = self._get_global_delete_attachment_groups()
for setting in self:
if "custom" in setting.global_restrict_delete_attachment:
setting.global_delete_attachment_group_ids = groups
else:
setting.global_delete_attachment_group_ids = None
def _inverse_global_delete_attachment_group_ids(self):
for setting in self:
self.env["ir.config_parameter"].set_param(
"attachment_delete_restrict.global_delete_attachment_group_ids",
str(setting.global_delete_attachment_group_ids.ids),
)
def _get_global_delete_attachment_users(self):
str_user_ids = self.env["ir.config_parameter"].get_param(
"attachment_delete_restrict.global_delete_attachment_user_ids"
)
user_ids = literal_eval(str_user_ids or "[]")
return self.env["res.users"].search([("id", "in", user_ids)])
@api.depends("global_restrict_delete_attachment")
def _compute_global_delete_attachment_user_ids(self):
users = self._get_global_delete_attachment_users()
for setting in self:
if "custom" in setting.global_restrict_delete_attachment:
setting.global_delete_attachment_user_ids = users
else:
setting.global_delete_attachment_user_ids = None
def _inverse_global_delete_attachment_user_ids(self):
for setting in self:
self.env["ir.config_parameter"].set_param(
"attachment_delete_restrict.global_delete_attachment_user_ids",
str(setting.global_delete_attachment_user_ids.ids),
)

View file

@ -0,0 +1,17 @@
# Copyright 2021 Quartile Limited
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class ResGroups(models.Model):
_inherit = "res.groups"
delete_attachment_model_ids = fields.Many2many(
"ir.model",
relation="delete_attachment_group_rel",
string="Attachment Deletion Models",
help="The users of the group can delete the attachments related to "
"the models assigned here. Restrict Attachment Deletion must be"
"'Custom' or 'Owner + Custom' for the model to be selected here.",
)

View file

@ -0,0 +1,17 @@
# Copyright 2021 Quartile Limited
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class ResUsers(models.Model):
_inherit = "res.users"
delete_attachment_model_ids = fields.Many2many(
"ir.model",
relation="delete_attachment_user_rel",
string="Attachment Deletion Models",
help="The user can delete the attachments related to the models "
"assigned here. Restrict Attachment Deletion must be"
"'Custom' or 'Owner + Custom' for the model to be selected here.",
)

View file

@ -0,0 +1,26 @@
Select level:
=============
#. Go to *Settings > General Settings> Permission section*.
#. Choose the level of *Restrict Delete Attachment* for all models by default or for models with "default" restriction level.
Five levels:
=============
* Default : Use global configuration
* Owner : Owner and admins only
* Custom : Certain groups or users per related model.
* Owner + Strict : Owner, admins and Certain groups or users per related model.
* None : all users can delete them
Only Owner and Custom + Strict need specific configuration on models.
For Custom and Owner + Strict levels:
======================================
#. Go to *Settings > Technical > Database Structure > Models*.
#. Open a model for which attachment deletion should be restricted.
#. Select 'Restrict Attachment Deletion', and assign 'Attachment Deletion Groups' and/or
'Attachment Deletion Users' as necessary (if no assignment, no one can delete the
attachments of this model).
For assigning 'Attachment Deletion Groups'/'Attachment Deletion Users' to the model,
you can alternatively add the model in the 'Attachment Deletion Models' tab in the
respective group/user form.

View file

@ -0,0 +1,3 @@
* Yoshi Tashiro <tashiro@quartile.co>
* Kévin Roche <kevin.roche@akretion.com>
* Sébastien BEAU <sebastien.beau@akretion.com>

View file

@ -0,0 +1 @@
This module provides the ability to restrict the deletion of the attachments at different levels.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,466 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Restrict Deletion of Attachments</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="restrict-deletion-of-attachments">
<h1 class="title">Restrict Deletion of Attachments</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:f29bf33d2719e11ecbc0e7a7341f424b412b08c775dd2d391818da5f939ff65d
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<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/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/server-tools/tree/16.0/attachment_delete_restrict"><img alt="OCA/server-tools" src="https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/server-tools-16-0/server-tools-16-0-attachment_delete_restrict"><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/server-tools&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module provides the ability to restrict the deletion of the attachments at different levels.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
<li><a class="reference internal" href="#select-level" id="toc-entry-2">Select level:</a></li>
<li><a class="reference internal" href="#five-levels" id="toc-entry-3">Five levels:</a></li>
<li><a class="reference internal" href="#for-custom-and-owner-strict-levels" id="toc-entry-4">For Custom and Owner + Strict levels:</a></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="#maintainers" id="toc-entry-9">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
</div>
<div class="section" id="select-level">
<h1><a class="toc-backref" href="#toc-entry-2">Select level:</a></h1>
<ol class="arabic simple">
<li>Go to <em>Settings &gt; General Settings&gt; Permission section</em>.</li>
<li>Choose the level of <em>Restrict Delete Attachment</em> for all models by default or for models with “default” restriction level.</li>
</ol>
</div>
<div class="section" id="five-levels">
<h1><a class="toc-backref" href="#toc-entry-3">Five levels:</a></h1>
<ul class="simple">
<li>Default : Use global configuration</li>
<li>Owner : Owner and admins only</li>
<li>Custom : Certain groups or users per related model.</li>
<li>Owner + Strict : Owner, admins and Certain groups or users per related model.</li>
<li>None : all users can delete them</li>
</ul>
<p>Only Owner and Custom + Strict need specific configuration on models.</p>
</div>
<div class="section" id="for-custom-and-owner-strict-levels">
<h1><a class="toc-backref" href="#toc-entry-4">For Custom and Owner + Strict levels:</a></h1>
<ol class="arabic simple">
<li>Go to <em>Settings &gt; Technical &gt; Database Structure &gt; Models</em>.</li>
<li>Open a model for which attachment deletion should be restricted.</li>
<li>Select Restrict Attachment Deletion, and assign Attachment Deletion Groups and/or
Attachment Deletion Users as necessary (if no assignment, no one can delete the
attachments of this model).</li>
</ol>
<p>For assigning Attachment Deletion Groups/Attachment Deletion Users to the model,
you can alternatively add the model in the Attachment Deletion Models tab in the
respective group/user form.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-5">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/server-tools/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/server-tools/issues/new?body=module:%20attachment_delete_restrict%0Aversion:%2016.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">
<h1><a class="toc-backref" href="#toc-entry-6">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-7">Authors</a></h2>
<ul class="simple">
<li>Quartile Limited</li>
<li>Akretion</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-8">Contributors</a></h2>
<ul class="simple">
<li>Yoshi Tashiro &lt;<a class="reference external" href="mailto:tashiro&#64;quartile.co">tashiro&#64;quartile.co</a>&gt;</li>
<li>Kévin Roche &lt;<a class="reference external" href="mailto:kevin.roche&#64;akretion.com">kevin.roche&#64;akretion.com</a>&gt;</li>
<li>Sébastien BEAU &lt;<a class="reference external" href="mailto:sebastien.beau&#64;akretion.com">sebastien.beau&#64;akretion.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-9">Maintainers</a></h2>
<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" />
</a>
<p>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.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainers</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/yostashiro"><img alt="yostashiro" src="https://github.com/yostashiro.png?size=40px" /></a> <a class="reference external image-reference" href="https://github.com/Kev-Roche"><img alt="Kev-Roche" src="https://github.com/Kev-Roche.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/server-tools/tree/16.0/attachment_delete_restrict">OCA/server-tools</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1 @@
from . import test_attachment_delete_restrict

View file

@ -0,0 +1,181 @@
# Copyright 2021 Quartile Limited
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.exceptions import ValidationError
from odoo.tests import TransactionCase, tagged
class AbstractCase:
def test_restrict_none(self):
self._set_restrict_mode("none")
self.attachment.with_user(self.user).unlink()
def test_restrict_custom_user(self):
self._set_restrict_mode("custom")
with self.assertRaises(ValidationError):
self.attachment.with_user(self.user).unlink()
self._allow_user()
self.attachment.with_user(self.user).unlink()
def test_restrict_custom_user_with_sudo(self):
self._set_restrict_mode("custom")
self.attachment.with_user(self.user).sudo().unlink()
def test_restrict_custom_group(self):
self._set_restrict_mode("custom")
with self.assertRaises(ValidationError):
self.attachment.with_user(self.user).unlink()
self._allow_group()
self.attachment.with_user(self.user).unlink()
def test_restrict_owner(self):
self._set_restrict_mode("owner")
with self.assertRaises(ValidationError):
self.attachment.with_user(self.user).unlink()
self.attachment.with_user(self.user_owner).unlink()
def test_restrict_owner_admin(self):
self._set_restrict_mode("owner")
self.attachment.with_user(self.user_admin).unlink()
def test_restrict_owner_and_custom_user_forbiden(self):
self._set_restrict_mode("owner_custom")
with self.assertRaises(ValidationError):
self.attachment.with_user(self.user).unlink()
def test_restrict_owner_and_custom_user_owner(self):
self._set_restrict_mode("owner_custom")
self.attachment.with_user(self.user_owner).unlink()
def test_restrict_owner_and_custom_user_admin(self):
self._set_restrict_mode("owner_custom")
self.attachment.with_user(self.user_admin).unlink()
def test_restrict_owner_and_custom_user(self):
self._set_restrict_mode("owner_custom")
with self.assertRaises(ValidationError):
self.attachment.with_user(self.user).unlink()
self._allow_user()
self.attachment.with_user(self.user).unlink()
def test_restrict_owner_and_custom_user_group(self):
self._set_restrict_mode("owner_custom")
with self.assertRaises(ValidationError):
self.attachment.with_user(self.user).unlink()
self._allow_group()
self.attachment.with_user(self.user).unlink()
@tagged("post_install", "-at_install")
class TestAttachmentDeleteAbstract(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.param = cls.env["ir.config_parameter"]
cls.param.set_param(
"attachment_delete_restrict.global_restrict_delete_attachment", "none"
)
cls.partner_model = cls.env["ir.model"].search([("model", "=", "res.partner")])
cls.partner_1 = cls.env["res.partner"].create({"name": "partner_1"})
cls.group = cls.env.ref("base.group_user")
cls.user_owner = cls.env["res.users"].create(
{
"name": "test owner user",
"login": "test-owner@example.com",
"groups_id": [
(
6,
0,
(
cls.env.ref("base.group_user").id,
cls.env.ref("base.group_partner_manager").id,
),
)
],
}
)
cls.user = cls.env["res.users"].create(
{
"name": "test user",
"login": "test2@example.com",
"groups_id": [
(
6,
0,
(
cls.env.ref("base.group_user").id,
cls.env.ref("base.group_partner_manager").id,
),
)
],
}
)
cls.user_admin = cls.env["res.users"].create(
{
"name": "User admin",
"login": "admin@example.com",
"groups_id": [
(
6,
0,
(
cls.env.ref("base.group_system").id,
cls.env.ref("base.group_user").id,
cls.env.ref("base.group_partner_manager").id,
),
)
],
}
)
cls.attachment = (
cls.env["ir.attachment"]
.with_user(cls.user_owner)
.create(
{
"name": "test attachment 2",
"type": "binary",
"res_model": "res.partner",
"res_id": cls.partner_1.id,
}
)
)
def _set_restrict_mode(self, restrict_mode):
raise NotImplementedError
def _allow_user(self):
raise NotImplementedError
def _allow_group(self):
raise NotImplementedError
class TestAttachmentDeleteGlobal(TestAttachmentDeleteAbstract, AbstractCase):
def _set_restrict_mode(self, restrict_mode):
self.param.set_param(
"attachment_delete_restrict.global_restrict_delete_attachment",
restrict_mode,
)
def _allow_user(self):
self.param.set_param(
"attachment_delete_restrict.global_delete_attachment_user_ids",
self.user.ids,
)
def _allow_group(self):
self.param.set_param(
"attachment_delete_restrict.global_delete_attachment_group_ids",
self.group.ids,
)
class TestAttachmentDeleteModel(TestAttachmentDeleteAbstract, AbstractCase):
def _set_restrict_mode(self, restrict_mode):
self.partner_model.write({"restrict_delete_attachment": restrict_mode})
def _allow_user(self):
self.partner_model.write({"delete_attachment_user_ids": [(4, self.user.id)]})
def _allow_group(self):
self.partner_model.write({"delete_attachment_group_ids": [(4, self.group.id)]})

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_model_form" model="ir.ui.view">
<field name="name">ir.model form</field>
<field name="model">ir.model</field>
<field name="inherit_id" ref="base.view_model_form" />
<field name="arch" type="xml">
<xpath expr="//sheet/group[1]" position="after">
<group name="delete_attachment_restriction">
<group>
<field name="restrict_delete_attachment" />
</group>
<group
attrs="{'invisible': [('restrict_delete_attachment','not in',['custom', 'owner_custom'])]}"
>
<field
name="delete_attachment_group_ids"
widget="many2many_tags"
/>
<field
name="delete_attachment_user_ids"
widget="many2many_tags"
/>
</group>
</group>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">res.config.settings.attachment.delete.restrict</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="base_setup.res_config_settings_view_form" />
<field name="arch" type="xml">
<xpath expr="//div[@id='user_default_rights']" position="inside">
<div
class="col-12 col-lg-6 o_setting_box"
id="global_restrict_delete_attachment"
title="Restrict Deletion on attachment"
>
<div class="o_setting_right_pane">
<label for="global_restrict_delete_attachment" />
<div class="text-muted">
Select default level of delete restriction on attachments
</div>
<div class="mt8">
<field
name="global_restrict_delete_attachment"
class="o_light_label"
/>
</div>
</div>
<div
class="o_setting_right_pane"
attrs="{'invisible': [('global_restrict_delete_attachment','not in',['custom', 'owner_custom'])]}"
>
<div>
Authorized Groups:
</div>
<div class="mt8">
<field
name="global_delete_attachment_group_ids"
class="o_light_label"
nolabel="1"
widget="many2many_tags"
options="{'no_create': True}"
/>
</div>
<div>
Authorized Users:
</div>
<div class="mt8">
<field
name="global_delete_attachment_user_ids"
nolabel="1"
widget="many2many_tags"
options="{'no_create': True}"
/>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_groups_form" model="ir.ui.view">
<field name="name">res.groups.form</field>
<field name="model">res.groups</field>
<field name="inherit_id" ref="base.view_groups_form" />
<field name="arch" type="xml">
<xpath expr="//notebook" position="inside">
<page
name="attachment_deletion_models"
string="Attachment Deletion Models"
>
<group>
<field
name="delete_attachment_model_ids"
domain="[('restrict_delete_attachment', 'in', ['custom', 'owner_custom'])]"
widget="many2many_tags"
/>
</group>
</page>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_users_form" model="ir.ui.view">
<field name="name">res.users.form</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form" />
<field name="arch" type="xml">
<xpath expr="//notebook" position="inside">
<page
name="attachment_deletion_models"
string="Attachment Deletion Models"
>
<group>
<field
name="delete_attachment_model_ids"
domain="[('restrict_delete_attachment', 'in', ['custom', 'owner_custom'])]"
widget="many2many_tags"
/>
</group>
</page>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,32 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Attachment_delete_restrict Module - attachment_delete_restrict
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -0,0 +1,3 @@
# Configuration
Refer to Odoo settings for attachment_delete_restrict. Configure related models, access rights, and options as needed.

View file

@ -0,0 +1,3 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -0,0 +1,6 @@
# Dependencies
This addon depends on:
- base
- [base_setup](../../odoo-bringout-oca-ocb-base_setup)

View file

@ -0,0 +1,4 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon attachment_delete_restrict or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-server-tools-attachment_delete_restrict"
# or
uv pip install odoo-bringout-oca-server-tools-attachment_delete_restrict"
```

View file

@ -0,0 +1,16 @@
# Models
Detected core models and extensions in attachment_delete_restrict.
```mermaid
classDiagram
class ir_attachment
class ir_model
class res_config_settings
class res_groups
class res_users
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -0,0 +1,6 @@
# Overview
Packaged Odoo addon: attachment_delete_restrict. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon attachment_delete_restrict
- License: LGPL-3

View file

@ -0,0 +1,3 @@
# Reports
This module does not define custom reports.

View file

@ -0,0 +1,8 @@
# Security
This module does not define custom security rules or access controls beyond Odoo defaults.
Default Odoo security applies:
- Base user access through standard groups
- Model access inherited from dependencies
- No custom row-level security rules

View file

@ -0,0 +1,5 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -0,0 +1,7 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon attachment_delete_restrict
```

View file

@ -0,0 +1,3 @@
# Wizards
This module does not include UI wizards.

View file

@ -0,0 +1,43 @@
[project]
name = "odoo-bringout-oca-server-tools-attachment_delete_restrict"
version = "16.0.0"
description = "Restrict Deletion of Attachments - Odoo addon"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-base>=16.0.0",
"odoo-bringout-oca-ocb-base_setup>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["attachment_delete_restrict"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]