diff --git a/README.md b/README.md index ed6afef02ac..2f3896dd66e 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ Available addons ---------------- addon | version | maintainers | summary --- | --- | --- | --- +[access_limit_records_number](access_limit_records_number/) | 18.0.1.0.0 | | Limit the number of records in a model, for example, limit the number of users that it's possible to create [attachment_unindex_content](attachment_unindex_content/) | 18.0.1.0.0 | moylop260 ebirbe luisg123v | Disable indexing of attachments [auditlog](auditlog/) | 18.0.2.0.0 | | Audit Log [auto_backup](auto_backup/) | 18.0.1.0.1 | | Backups database @@ -55,6 +56,7 @@ addon | version | maintainers | summary [scheduler_error_mailer](scheduler_error_mailer/) | 18.0.1.0.0 | | Scheduler Error Mailer [sentry](sentry/) | 18.0.1.0.3 | barsi naglis versada moylop260 fernandahf | Report Odoo errors to Sentry [session_db](session_db/) | 18.0.1.0.1 | sbidoul | Store sessions in DB +[test_access_limit_records_number](test_access_limit_records_number/) | 18.0.1.0.0 | | Test Base model to handle a limit in the number of records in an Odoo model [test_base_time_window](test_base_time_window/) | 18.0.1.0.0 | | Test Base model to handle time windows [tracking_manager](tracking_manager/) | 18.0.1.1.0 | Kev-Roche sebastienbeau | This module tracks all fields of a model, including one2many and many2many ones. [tracking_manager_domain](tracking_manager_domain/) | 18.0.1.0.0 | CRogos | This module extends the tracking manager to allow to define a domain on fields to track changes only when certain conditions apply. diff --git a/access_limit_records_number/README.rst b/access_limit_records_number/README.rst new file mode 100644 index 00000000000..9e7d9b297f0 --- /dev/null +++ b/access_limit_records_number/README.rst @@ -0,0 +1,116 @@ +======================= +Limit number of records +======================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:98a2b66afe6c0b4569992c03550e1290799f7f56cdd635b5aa3748a415eed57b + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/18.0/access_limit_records_number + :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-18-0/server-tools-18-0-access_limit_records_number + :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=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +With this module you can limit number of records for any model in +specified domain. For example, you can restrict number of vehicles in +fleet_vehicle, say by three. If users try to create more then three +vehicles then exception occurs. + +This module uses base.action.rule to restrict number of records. And +also there is new model base.limit.records_number to store the settings. + +To do new settings to restrict number of records in any model the user +should be a member of ``Control limits on records number`` security +group. + +This project is based on this other project: +https://apps.odoo.com/apps/modules/11.0/access_limit_records_number/ + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +- In debug mode open ``Settings / Users / Groups`` +- Find there ``Limit records number / Control limits on records number`` + group and add your user in the group. +- Open ``Settings / Technical / Security / Records Number Limits`` menu +- Create new record. For example: + + - Model: Information on a vehicle + - Domain: [] + - Maximum Records: 3 + +- Save the record +- Try to create more than three vehicles from + ``Fleet / Vehicles / Vehicles``. When you try to create more than + three vehicles then you see an exception message. The system doesn't + allow you create more than three records. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Ivan Yelizariev +* Pavel Romanchenko +* IT Projects Labs +* Miguel Martinez Lopez + +Contributors +------------ + +- Miguel Martinez Lopez @odoodevelopment on tiktok +- Ivan Yelizariev + <`https://it-projects.info/team/yelizariev\\> >`__ +- Pavel Romanchenko +- IT Projects Labs + <`https://www.it-projects.info\\> >`__ + +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. + +This module is part of the `OCA/server-tools `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/access_limit_records_number/__init__.py b/access_limit_records_number/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/access_limit_records_number/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/access_limit_records_number/__manifest__.py b/access_limit_records_number/__manifest__.py new file mode 100644 index 00000000000..6e918762824 --- /dev/null +++ b/access_limit_records_number/__manifest__.py @@ -0,0 +1,18 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +{ + "name": """Limit number of records""", + "category": "Extra tools", + "version": "18.0.1.0.0", + "author": "Ivan Yelizariev, Pavel Romanchenko, IT Projects Labs, " + "Miguel Martinez Lopez, Odoo Community Association (OCA)", + "license": "AGPL-3", + "website": "https://github.com/OCA/server-tools", + "depends": ["base_automation"], + "data": [ + "security/security.xml", + "security/ir.model.access.csv", + "views/base_limit_records_number.xml", + ], + "installable": True, + "auto_install": False, +} diff --git a/access_limit_records_number/i18n/access_limit_records_number.pot b/access_limit_records_number/i18n/access_limit_records_number.pot new file mode 100644 index 00000000000..775bb92939e --- /dev/null +++ b/access_limit_records_number/i18n/access_limit_records_number.pot @@ -0,0 +1,421 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * access_limit_records_number +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__help +msgid "Action Description" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__name +msgid "Action Name" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__state +msgid "Action To Do" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__type +msgid "Action Type" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__active +msgid "Active" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_type_id +msgid "Activity" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_user_type +msgid "Activity User Type" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__channel_ids +msgid "Add Channels" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__partner_ids +msgid "Add Followers" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__filter_domain +msgid "Apply on" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__action_rule_id +msgid "Base Automation" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__filter_pre_domain +msgid "Before Update Domain" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__binding_model_id +msgid "Binding Model" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__binding_type +msgid "Binding Type" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__child_ids +msgid "Child Actions" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__child_ids +msgid "Child server actions that will be executed. Note that the last return returned action value will be used as global return value." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__on_change_fields +msgid "Comma-separated list of field names that triggers the onchange." +msgstr "" + +#. module: access_limit_records_number +#: model:res.groups,name:access_limit_records_number.group_control_limits_on_records_number +msgid "Control limits on records number" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__crud_model_id +msgid "Create/Write Target Model" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__create_uid +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__create_uid +msgid "Created by" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__create_date +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__create_date +msgid "Created on" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__trg_date_range +msgid "Delay after the trigger date.\n" +" You can put a negative number if you need a delay before the\n" +" trigger date, like sending a reminder 15 minutes before a meeting." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_range +msgid "Delay after trigger date" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_range_type +msgid "Delay type" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__display_name +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__display_name +msgid "Display Name" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__domain +msgid "Domain" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_date_deadline_range +msgid "Due Date In" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_date_deadline_range_type +msgid "Due type" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__template_id +msgid "Email Template" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__xml_id +msgid "External ID" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__id +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__id +msgid "ID" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__filter_domain +msgid "If present, this condition must be satisfied before executing the action rule." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__filter_pre_domain +msgid "If present, this condition must be satisfied before the update of the record." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number____last_update +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test____last_update +msgid "Last Modified on" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__last_run +msgid "Last Run" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__write_uid +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__write_date +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__write_date +msgid "Last Updated on" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.module.category,name:access_limit_records_number.module_access_limit_records_number_category +msgid "Limit records number" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__link_field_id +msgid "Link using field" +msgstr "" + +#. module: access_limit_records_number +#: code:addons/access_limit_records_number/models.py:33 +#, python-format +msgid "Maximimum allowed records in table \"%(model_name)s\" is %(max_records)s, while after this update you would have %(records_count)s" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__max_records +msgid "Maximum Records" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__model_id +msgid "Model" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__model_name +msgid "Model Name" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__crud_model_id +msgid "Model for record creation / update. Set this field only to specify a different model than the base model." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__model_id +msgid "Model on which the server action runs." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__name +msgid "Name" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_note +msgid "Note" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__on_change_fields +msgid "On Change Fields Trigger" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__help +msgid "Optional help text for the users with a description of the target view, such as its usage and purpose." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__link_field_id +msgid "Provide the field used to link the newly created record on the record on used by the server action." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__code +msgid "Python Code" +msgstr "" + +#. module: access_limit_records_number +#: model_terms:ir.ui.view,arch_db:access_limit_records_number.base_limit_view_form +#: model_terms:ir.ui.view,arch_db:access_limit_records_number.base_limit_view_search +msgid "Records Number" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.actions.act_window,name:access_limit_records_number.base_limit_act +#: model:ir.ui.menu,name:access_limit_records_number.menu_base_limit_act +msgid "Records Number Limits" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_user_id +msgid "Responsible" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model,name:access_limit_records_number.model_base_limit_records_number +msgid "Restrictions for number of records" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__sequence +msgid "Sequence" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__action_server_id +msgid "Server Actions" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__binding_model_id +msgid "Setting a value makes this action available in the sidebar for the given model." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_summary +msgid "Summary" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__crud_model_name +msgid "Target Model" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__activity_user_field_name +msgid "Technical name of the user on the record" +msgstr "" + +#. module: access_limit_records_number +#: model:base.automation,name:access_limit_records_number.test_rule_base_automation +#: model:base.limit.records_number,name:access_limit_records_number.test_rule +msgid "Test Rule" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model,name:access_limit_records_number.model_base_limit_records_number_test +msgid "Test model to test access" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trigger +msgid "Trigger Condition" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_id +msgid "Trigger Date" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__state +msgid "Type of server action. The following values are available:\n" +"- 'Execute Python Code': a block of python code that will be executed\n" +"- 'Create': create a new record with new values\n" +"- 'Update a Record': update the values of a record\n" +"- 'Execute several actions': define an action that triggers several other server actions\n" +"- 'Send Email': automatically send an email (Discuss)\n" +"- 'Add Followers': add followers to a record (Discuss)\n" +"- 'Create Next Activity': create an activity (Discuss)" +msgstr "" + +#. module: access_limit_records_number +#: model_terms:ir.ui.view,arch_db:access_limit_records_number.base_limit_view_search +msgid "Unlimited Table" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__usage +msgid "Usage" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__activity_user_type +msgid "Use 'Specific User' to always assign the same user on the next activity. Use 'Generic User From Record' to specify the field name of the user to choose on the record." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_calendar_id +msgid "Use Calendar" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_user_field_name +msgid "User field name" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__fields_lines +msgid "Value Mapping" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__trg_date_calendar_id +msgid "When calculating a day-based timed condition, it is possible to use a calendar to compute the date based on working days." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__sequence +msgid "When dealing with multiple actions, the execution order is based on the sequence. Low number means high priority." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__trg_date_id +msgid "When should the condition be triggered.\n" +" If present, will be checked by the scheduler. If empty, will be checked at creation and update." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__active +msgid "When unchecked, the rule is hidden and will not be executed." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__code +msgid "Write Python code that the action will execute. Some variables are available for use; help about python expression is given in the help tab." +msgstr "" + diff --git a/access_limit_records_number/i18n/de.po b/access_limit_records_number/i18n/de.po new file mode 100644 index 00000000000..289a00bdc92 --- /dev/null +++ b/access_limit_records_number/i18n/de.po @@ -0,0 +1,459 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * access_limit_records_number +# +# Translators: +# Sergej Briesin <20bs18@gmail.com>, 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-21 00:17+0000\n" +"PO-Revision-Date: 2018-04-21 00:17+0000\n" +"Last-Translator: Sergej Briesin <20bs18@gmail.com>, 2018\n" +"Language-Team: German (https://www.transifex.com/it-projects-llc/teams/76080/" +"de/)\n" +"Language: de\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" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__help +msgid "Action Description" +msgstr "Aktion Beschreibung" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__name +msgid "Action Name" +msgstr "Aktion Name" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__state +msgid "Action To Do" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__type +msgid "Action Type" +msgstr "Aktionstyp" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__active +msgid "Active" +msgstr "Aktiv" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_type_id +#, fuzzy +msgid "Activity" +msgstr "Aktiv" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_user_type +#, fuzzy +msgid "Activity User Type" +msgstr "Aktionstyp" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__channel_ids +msgid "Add Channels" +msgstr "Kanäle hinzufügen" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__partner_ids +msgid "Add Followers" +msgstr "Anhang hinzufügen" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__filter_domain +msgid "Apply on" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__action_rule_id +msgid "Base Automation" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__filter_pre_domain +msgid "Before Update Domain" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__binding_model_id +msgid "Binding Model" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__binding_type +msgid "Binding Type" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__child_ids +msgid "Child Actions" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__child_ids +msgid "" +"Child server actions that will be executed. Note that the last return " +"returned action value will be used as global return value." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__on_change_fields +msgid "Comma-separated list of field names that triggers the onchange." +msgstr "" + +#. module: access_limit_records_number +#: model:res.groups,name:access_limit_records_number.group_control_limits_on_records_number +msgid "Control limits on records number" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__crud_model_id +msgid "Create/Write Target Model" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__create_uid +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__create_uid +msgid "Created by" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__create_date +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__create_date +msgid "Created on" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__trg_date_range +msgid "" +"Delay after the trigger date.\n" +" You can put a negative number if you " +"need a delay before the\n" +" trigger date, like sending a reminder 15 " +"minutes before a meeting." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_range +msgid "Delay after trigger date" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_range_type +msgid "Delay type" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__display_name +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__display_name +msgid "Display Name" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__domain +msgid "Domain" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_date_deadline_range +msgid "Due Date In" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_date_deadline_range_type +msgid "Due type" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__template_id +msgid "Email Template" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__xml_id +msgid "External ID" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__id +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__id +msgid "ID" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__filter_domain +msgid "" +"If present, this condition must be satisfied before executing the action " +"rule." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__filter_pre_domain +msgid "" +"If present, this condition must be satisfied before the update of the record." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number____last_update +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test____last_update +msgid "Last Modified on" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__last_run +msgid "Last Run" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__write_uid +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__write_date +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__write_date +msgid "Last Updated on" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.module.category,name:access_limit_records_number.module_access_limit_records_number_category +msgid "Limit records number" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__link_field_id +msgid "Link using field" +msgstr "" + +#. module: access_limit_records_number +#: code:addons/access_limit_records_number/models.py:32 +#, python-format +msgid "" +"Maximimum allowed records in table \"%(model_name)s\" is %(max_records)s, " +"while after this update you would have %(records_count)s" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__max_records +msgid "Maximum Records" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__model_id +msgid "Model" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__model_name +msgid "Model Name" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__crud_model_id +msgid "" +"Model for record creation / update. Set this field only to specify a " +"different model than the base model." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__model_id +msgid "Model on which the server action runs." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__name +msgid "Name" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_note +msgid "Note" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__on_change_fields +msgid "On Change Fields Trigger" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__help +msgid "" +"Optional help text for the users with a description of the target view, such " +"as its usage and purpose." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__link_field_id +msgid "" +"Provide the field used to link the newly created record on the record on " +"used by the server action." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__code +msgid "Python Code" +msgstr "" + +#. module: access_limit_records_number +#: model_terms:ir.ui.view,arch_db:access_limit_records_number.base_limit_view_form +#: model_terms:ir.ui.view,arch_db:access_limit_records_number.base_limit_view_search +msgid "Records Number" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.actions.act_window,name:access_limit_records_number.base_limit_act +#: model:ir.ui.menu,name:access_limit_records_number.menu_base_limit_act +msgid "Records Number Limits" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_user_id +msgid "Responsible" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model,name:access_limit_records_number.model_base_limit_records_number +msgid "Restrictions for number of records" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__sequence +msgid "Sequence" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__action_server_id +msgid "Server Actions" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__binding_model_id +msgid "" +"Setting a value makes this action available in the sidebar for the given " +"model." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_summary +msgid "Summary" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__crud_model_name +msgid "Target Model" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__activity_user_field_name +msgid "Technical name of the user on the record" +msgstr "" + +#. module: access_limit_records_number +#: model:base.automation,name:access_limit_records_number.test_rule_base_automation +#: model:base.limit.records_number,name:access_limit_records_number.test_rule +msgid "Test Rule" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model,name:access_limit_records_number.model_base_limit_records_number_test +msgid "Test model to test access" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trigger +msgid "Trigger Condition" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_id +msgid "Trigger Date" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__state +msgid "" +"Type of server action. The following values are available:\n" +"- 'Execute Python Code': a block of python code that will be executed\n" +"- 'Create or Copy a new Record': create a new record with new values, or " +"copy an existing record in your database\n" +"- 'Write on a Record': update the values of a record\n" +"- 'Execute several actions': define an action that triggers several other " +"server actions\n" +"- 'Add Followers': add followers to a record (available in Discuss)\n" +"- 'Send Email': automatically send an email (available in email_template)" +msgstr "" + +#. module: access_limit_records_number +#: model_terms:ir.ui.view,arch_db:access_limit_records_number.base_limit_view_search +msgid "Unlimited Table" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__usage +msgid "Usage" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__activity_user_type +msgid "" +"Use 'Specific User' to always assign the same user on the next activity. Use " +"'Generic User From Record' to specify the field name of the user to choose " +"on the record." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_calendar_id +msgid "Use Calendar" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_user_field_name +msgid "User field name" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__fields_lines +msgid "Value Mapping" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__trg_date_calendar_id +msgid "" +"When calculating a day-based timed condition, it is possible to use a " +"calendar to compute the date based on working days." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__sequence +msgid "" +"When dealing with multiple actions, the execution order is based on the " +"sequence. Low number means high priority." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__trg_date_id +msgid "" +"When should the condition be triggered.\n" +" If present, will be checked by the " +"scheduler. If empty, will be checked at creation and update." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__active +msgid "When unchecked, the rule is hidden and will not be executed." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__code +msgid "" +"Write Python code that the action will execute. Some variables are available " +"for use; help about python expression is given in the help tab." +msgstr "" diff --git a/access_limit_records_number/i18n/es.po b/access_limit_records_number/i18n/es.po new file mode 100644 index 00000000000..9d15e4f2bd1 --- /dev/null +++ b/access_limit_records_number/i18n/es.po @@ -0,0 +1,490 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * access_limit_records_number +# +# Translators: +# charles paul requena palomino , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-26 19:17+0000\n" +"PO-Revision-Date: 2018-04-26 19:17+0000\n" +"Last-Translator: charles paul requena palomino , 2018\n" +"Language-Team: Spanish (https://www.transifex.com/it-projects-llc/" +"teams/76080/es/)\n" +"Language: es\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" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__help +msgid "Action Description" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__name +msgid "Action Name" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__state +msgid "Action To Do" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__type +msgid "Action Type" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__active +msgid "Active" +msgstr "Activo" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_type_id +#, fuzzy +msgid "Activity" +msgstr "Activo" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_user_type +msgid "Activity User Type" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__channel_ids +msgid "Add Channels" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__partner_ids +msgid "Add Followers" +msgstr "Añadir seguidores" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__filter_domain +msgid "Apply on" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__action_rule_id +#, fuzzy +msgid "Base Automation" +msgstr "Regla de acción base" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__filter_pre_domain +msgid "Before Update Domain" +msgstr "Antes de actualizar el dominio" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__binding_model_id +msgid "Binding Model" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__binding_type +msgid "Binding Type" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__child_ids +msgid "Child Actions" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__child_ids +msgid "" +"Child server actions that will be executed. Note that the last return " +"returned action value will be used as global return value." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__on_change_fields +msgid "Comma-separated list of field names that triggers the onchange." +msgstr "" +"Lista de nombres de campo separados por comas que desencadena el cambio." + +#. module: access_limit_records_number +#: model:res.groups,name:access_limit_records_number.group_control_limits_on_records_number +msgid "Control limits on records number" +msgstr "Límites de control en el número de registros." + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__crud_model_id +msgid "Create/Write Target Model" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__create_uid +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__create_date +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__trg_date_range +msgid "" +"Delay after the trigger date.\n" +" You can put a negative number if you " +"need a delay before the\n" +" trigger date, like sending a reminder 15 " +"minutes before a meeting." +msgstr "" +"Retraso después de la fecha de activación\n" +"Puede poner un número negativo si necesita un retraso antes del\n" +"fecha de activación, como enviar un recordatorio 15 minutos antes de una " +"reunión." + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_range +msgid "Delay after trigger date" +msgstr "Retraso después de la fecha de activación" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_range_type +msgid "Delay type" +msgstr "Tipo de retraso" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__display_name +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__display_name +msgid "Display Name" +msgstr "Nombre para mostrar" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__domain +msgid "Domain" +msgstr "Dominio" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_date_deadline_range +msgid "Due Date In" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_date_deadline_range_type +#, fuzzy +msgid "Due type" +msgstr "Tipo de retraso" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__template_id +msgid "Email Template" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__xml_id +msgid "External ID" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__id +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__id +msgid "ID" +msgstr "ID" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__filter_domain +msgid "" +"If present, this condition must be satisfied before executing the action " +"rule." +msgstr "" +"Si está presente, esta condición debe cumplirse antes de ejecutar la regla " +"de acción." + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__filter_pre_domain +msgid "" +"If present, this condition must be satisfied before the update of the record." +msgstr "" +"Si está presente, esta condición debe cumplirse antes de la actualización " +"del registro." + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number____last_update +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test____last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__last_run +#, fuzzy +msgid "Last Run" +msgstr "Última Ejecución " + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__write_uid +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__write_date +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__write_date +msgid "Last Updated on" +msgstr "Ultima actualizacion en" + +#. module: access_limit_records_number +#: model:ir.module.category,name:access_limit_records_number.module_access_limit_records_number_category +msgid "Limit records number" +msgstr "Número de límite registro" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__link_field_id +msgid "Link using field" +msgstr "" + +#. module: access_limit_records_number +#: code:addons/access_limit_records_number/models.py:32 +#, python-format +msgid "" +"Maximimum allowed records in table \"%(model_name)s\" is %(max_records)s, " +"while after this update you would have %(records_count)s" +msgstr "" +"Maximimum allowed records in table \"%(model_name)s\" is%(max_records)s , " +"while after this update you would have %(records_count)s" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__max_records +msgid "Maximum Records" +msgstr "Registros máximos" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__model_id +msgid "Model" +msgstr "Modelo" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__model_name +#, fuzzy +msgid "Model Name" +msgstr "Modelo" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__crud_model_id +msgid "" +"Model for record creation / update. Set this field only to specify a " +"different model than the base model." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__model_id +msgid "Model on which the server action runs." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__name +msgid "Name" +msgstr "Nombre" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_note +msgid "Note" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__on_change_fields +msgid "On Change Fields Trigger" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__help +msgid "" +"Optional help text for the users with a description of the target view, such " +"as its usage and purpose." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__link_field_id +msgid "" +"Provide the field used to link the newly created record on the record on " +"used by the server action." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__code +msgid "Python Code" +msgstr "" + +#. module: access_limit_records_number +#: model_terms:ir.ui.view,arch_db:access_limit_records_number.base_limit_view_form +#: model_terms:ir.ui.view,arch_db:access_limit_records_number.base_limit_view_search +msgid "Records Number" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.actions.act_window,name:access_limit_records_number.base_limit_act +#: model:ir.ui.menu,name:access_limit_records_number.menu_base_limit_act +msgid "Records Number Limits" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_user_id +msgid "Responsible" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model,name:access_limit_records_number.model_base_limit_records_number +msgid "Restrictions for number of records" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__sequence +msgid "Sequence" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__action_server_id +msgid "Server Actions" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__binding_model_id +msgid "" +"Setting a value makes this action available in the sidebar for the given " +"model." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_summary +msgid "Summary" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__crud_model_name +msgid "Target Model" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__activity_user_field_name +msgid "Technical name of the user on the record" +msgstr "" + +#. module: access_limit_records_number +#: model:base.automation,name:access_limit_records_number.test_rule_base_automation +#: model:base.limit.records_number,name:access_limit_records_number.test_rule +msgid "Test Rule" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model,name:access_limit_records_number.model_base_limit_records_number_test +msgid "Test model to test access" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trigger +msgid "Trigger Condition" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_id +msgid "Trigger Date" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__state +msgid "" +"Type of server action. The following values are available:\n" +"- 'Execute Python Code': a block of python code that will be executed\n" +"- 'Create or Copy a new Record': create a new record with new values, or " +"copy an existing record in your database\n" +"- 'Write on a Record': update the values of a record\n" +"- 'Execute several actions': define an action that triggers several other " +"server actions\n" +"- 'Add Followers': add followers to a record (available in Discuss)\n" +"- 'Send Email': automatically send an email (available in email_template)" +msgstr "" + +#. module: access_limit_records_number +#: model_terms:ir.ui.view,arch_db:access_limit_records_number.base_limit_view_search +msgid "Unlimited Table" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__usage +msgid "Usage" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__activity_user_type +msgid "" +"Use 'Specific User' to always assign the same user on the next activity. Use " +"'Generic User From Record' to specify the field name of the user to choose " +"on the record." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_calendar_id +msgid "Use Calendar" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_user_field_name +msgid "User field name" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__fields_lines +msgid "Value Mapping" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__trg_date_calendar_id +msgid "" +"When calculating a day-based timed condition, it is possible to use a " +"calendar to compute the date based on working days." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__sequence +msgid "" +"When dealing with multiple actions, the execution order is based on the " +"sequence. Low number means high priority." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__trg_date_id +msgid "" +"When should the condition be triggered.\n" +" If present, will be checked by the " +"scheduler. If empty, will be checked at creation and update." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__active +msgid "When unchecked, the rule is hidden and will not be executed." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__code +msgid "" +"Write Python code that the action will execute. Some variables are available " +"for use; help about python expression is given in the help tab." +msgstr "" + +#~ msgid "Before Update Filter" +#~ msgstr "Antes de actualizar el filtro" + +#~ msgid "Check Records Number" +#~ msgstr "Compruebe el número de registros" + +#~ msgid "Examples: email reminders, call object service, etc." +#~ msgstr "" +#~ "Ejemplos: recordatorios de correo electrónico, servicio de objeto de " +#~ "llamada, etc." + +#~ msgid "Filter" +#~ msgstr "Filtrar" + +#~ msgid "Gives the sequence order when displaying a list of rules." +#~ msgstr "Da el orden de secuencia al mostrar una lista de reglas." diff --git a/access_limit_records_number/i18n/es_CR.po b/access_limit_records_number/i18n/es_CR.po new file mode 100644 index 00000000000..47df5b98d7e --- /dev/null +++ b/access_limit_records_number/i18n/es_CR.po @@ -0,0 +1,515 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * access_limit_records_number +# +# Translators: +# Randall , 2018 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-21 00:17+0000\n" +"PO-Revision-Date: 2017-11-28 13:02+0000\n" +"Last-Translator: Randall , 2018\n" +"Language-Team: Spanish (Costa Rica) (https://www.transifex.com/it-projects-" +"llc/teams/76080/es_CR/)\n" +"Language: es_CR\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" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__help +msgid "Action Description" +msgstr "Descripción de acción" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__name +msgid "Action Name" +msgstr "Nombre Acción" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__state +msgid "Action To Do" +msgstr "Acción To Do" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__type +msgid "Action Type" +msgstr "Tipo Acción" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__active +msgid "Active" +msgstr "Activo" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_type_id +#, fuzzy +msgid "Activity" +msgstr "Activo" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_user_type +#, fuzzy +msgid "Activity User Type" +msgstr "Tipo Acción" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__channel_ids +msgid "Add Channels" +msgstr "Agragar Canales" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__partner_ids +msgid "Add Followers" +msgstr "Agregar Seguidores" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__filter_domain +msgid "Apply on" +msgstr "Aplicar en" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__action_rule_id +msgid "Base Automation" +msgstr "Automatización Base" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__filter_pre_domain +msgid "Before Update Domain" +msgstr "Antes Actualizar Dominio" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__binding_model_id +msgid "Binding Model" +msgstr "Enlazar Modelo" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__binding_type +msgid "Binding Type" +msgstr "Enlazar Tipo" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__child_ids +msgid "Child Actions" +msgstr "Acciones Hijas" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__child_ids +msgid "" +"Child server actions that will be executed. Note that the last return " +"returned action value will be used as global return value." +msgstr "" +"Acciones hijas del servidor que se ejecutarán. Tenga en cuenta que el último " +"valor de acción devuelto, se usará como valor devuelto global." + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__on_change_fields +msgid "Comma-separated list of field names that triggers the onchange." +msgstr "" +"Lista separada por comas de nombres de campos que desencadena el onchange." + +#. module: access_limit_records_number +#: model:res.groups,name:access_limit_records_number.group_control_limits_on_records_number +msgid "Control limits on records number" +msgstr "Límites de control del número de registros" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__crud_model_id +msgid "Create/Write Target Model" +msgstr "Crear/Escribir Modelo Destino" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__create_uid +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__create_date +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__trg_date_range +msgid "" +"Delay after the trigger date.\n" +" You can put a negative number if you " +"need a delay before the\n" +" trigger date, like sending a reminder 15 " +"minutes before a meeting." +msgstr "" +"Demora después de la fecha de activación. Puede poner un número negativo si " +"necesita un retraso antes de la fecha de activación , como enviar un " +"recordatorio 15 minutos antes de una reunión." + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_range +msgid "Delay after trigger date" +msgstr "Demora después de la fecha de activación" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_range_type +msgid "Delay type" +msgstr "Tipo de demora" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__display_name +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__domain +msgid "Domain" +msgstr "Dominio" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_date_deadline_range +msgid "Due Date In" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_date_deadline_range_type +#, fuzzy +msgid "Due type" +msgstr "Tipo de demora" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__template_id +msgid "Email Template" +msgstr "Plantilla Email" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__xml_id +msgid "External ID" +msgstr "ID Externo" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__id +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__id +msgid "ID" +msgstr "ID" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__filter_domain +msgid "" +"If present, this condition must be satisfied before executing the action " +"rule." +msgstr "" +"Si está presente, esta condición debe cumplirse antes de ejecutar la regla " +"de acción." + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__filter_pre_domain +msgid "" +"If present, this condition must be satisfied before the update of the record." +msgstr "" +"Si está presente, esta condición debe cumplirse antes de actualizar el " +"registro." + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number____last_update +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test____last_update +msgid "Last Modified on" +msgstr "Última modificación el" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__last_run +msgid "Last Run" +msgstr "Última ejecución" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__write_uid +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__write_date +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__write_date +msgid "Last Updated on" +msgstr "Última actualización en " + +#. module: access_limit_records_number +#: model:ir.module.category,name:access_limit_records_number.module_access_limit_records_number_category +msgid "Limit records number" +msgstr "Número límite de registros" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__link_field_id +msgid "Link using field" +msgstr "Vincular usando un campo" + +#. module: access_limit_records_number +#: code:addons/access_limit_records_number/models.py:32 +#, python-format +msgid "" +"Maximimum allowed records in table \"%(model_name)s\" is %(max_records)s, " +"while after this update you would have %(records_count)s" +msgstr "" +"Máximo de registros permitidos en la tabla \"%(model_name)s\" es " +"%(max_records)s, mientras que después de esta actualización tendría " +"%(records_count)s" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__max_records +msgid "Maximum Records" +msgstr "Máximo Registros" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__model_id +msgid "Model" +msgstr "Modelo" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__model_name +#, fuzzy +msgid "Model Name" +msgstr "Modelo" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__crud_model_id +msgid "" +"Model for record creation / update. Set this field only to specify a " +"different model than the base model." +msgstr "" +"Modelo para la creación / actualización de registros. Establezca este campo " +"sólo para especificar un modelo diferente al modelo base." + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__model_id +msgid "Model on which the server action runs." +msgstr "Modelo en el que se ejecuta la acción del servidor." + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number_test__name +msgid "Name" +msgstr "Nombre" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_note +msgid "Note" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__on_change_fields +msgid "On Change Fields Trigger" +msgstr "Lanzador de campos onchange" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__help +msgid "" +"Optional help text for the users with a description of the target view, such " +"as its usage and purpose." +msgstr "" +"Texto de ayuda opcional para los usuarios con una descripción de la vista de " +"destino, como su uso y propósito." + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__link_field_id +msgid "" +"Provide the field used to link the newly created record on the record on " +"used by the server action." +msgstr "" +"Proporcione el campo utilizado para vincular el registro recién creado en el " +"registro utilizado por la acción del servidor." + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__code +msgid "Python Code" +msgstr "Código Python" + +#. module: access_limit_records_number +#: model_terms:ir.ui.view,arch_db:access_limit_records_number.base_limit_view_form +#: model_terms:ir.ui.view,arch_db:access_limit_records_number.base_limit_view_search +msgid "Records Number" +msgstr "Número de Registros" + +#. module: access_limit_records_number +#: model:ir.actions.act_window,name:access_limit_records_number.base_limit_act +#: model:ir.ui.menu,name:access_limit_records_number.menu_base_limit_act +msgid "Records Number Limits" +msgstr "Número Límite de Registros" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_user_id +msgid "Responsible" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model,name:access_limit_records_number.model_base_limit_records_number +msgid "Restrictions for number of records" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__action_server_id +msgid "Server Actions" +msgstr "Acciones de Servidor" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__binding_model_id +msgid "" +"Setting a value makes this action available in the sidebar for the given " +"model." +msgstr "" +"Establecer un valor hace que esta acción esté disponible en la barra lateral " +"para el modelo dado." + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_summary +msgid "Summary" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__crud_model_name +#, fuzzy +msgid "Target Model" +msgstr "Crear/Escribir Modelo Destino" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__activity_user_field_name +msgid "Technical name of the user on the record" +msgstr "" + +#. module: access_limit_records_number +#: model:base.automation,name:access_limit_records_number.test_rule_base_automation +#: model:base.limit.records_number,name:access_limit_records_number.test_rule +msgid "Test Rule" +msgstr "Probar Regla" + +#. module: access_limit_records_number +#: model:ir.model,name:access_limit_records_number.model_base_limit_records_number_test +msgid "Test model to test access" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trigger +msgid "Trigger Condition" +msgstr "Condición Lanzador" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_id +msgid "Trigger Date" +msgstr "Fecha Lanzador" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__state +msgid "" +"Type of server action. The following values are available:\n" +"- 'Execute Python Code': a block of python code that will be executed\n" +"- 'Create or Copy a new Record': create a new record with new values, or " +"copy an existing record in your database\n" +"- 'Write on a Record': update the values of a record\n" +"- 'Execute several actions': define an action that triggers several other " +"server actions\n" +"- 'Add Followers': add followers to a record (available in Discuss)\n" +"- 'Send Email': automatically send an email (available in email_template)" +msgstr "" +"Tipo de acción del servidor. Están disponibles los siguientes valores:\n" +"-' Ejecutar código Python ': un bloque de código Python que se ejecutará\n" +"-' Crear o copiar un nuevo registro ': crear un nuevo registro con nuevos " +"valores o copiar un registro existente en la base de datos\n" +"-' Escribir en un registro ': actualizar los valores de un registro\n" +"-' Ejecutar varias acciones ': definir una acción que desencadena varias " +"otras acciones del servidor\n" +"-' Añadir seguidores ': Añadir seguidores a un registro (disponible en " +"discutir)\n" +"-' Enviar correo electrónico ': enviar automáticamente un correo electrónico " +"(disponible en email_template)" + +#. module: access_limit_records_number +#: model_terms:ir.ui.view,arch_db:access_limit_records_number.base_limit_view_search +msgid "Unlimited Table" +msgstr "Tabla Ilimitada" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__usage +msgid "Usage" +msgstr "Uso" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__activity_user_type +msgid "" +"Use 'Specific User' to always assign the same user on the next activity. Use " +"'Generic User From Record' to specify the field name of the user to choose " +"on the record." +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__trg_date_calendar_id +msgid "Use Calendar" +msgstr "Usar Calendario" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__activity_user_field_name +msgid "User field name" +msgstr "" + +#. module: access_limit_records_number +#: model:ir.model.fields,field_description:access_limit_records_number.field_base_limit_records_number__fields_lines +msgid "Value Mapping" +msgstr "Mapear Valor" + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__trg_date_calendar_id +msgid "" +"When calculating a day-based timed condition, it is possible to use a " +"calendar to compute the date based on working days." +msgstr "" +"Al calcular una condición de tiempo basada en el día, es posible utilizar un " +"calendario para calcular la fecha en función de los días laborables." + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__sequence +msgid "" +"When dealing with multiple actions, the execution order is based on the " +"sequence. Low number means high priority." +msgstr "" +"Cuando se trata de varias acciones, el orden de ejecución se basa en la " +"secuencia. El número bajo significa alta prioridad." + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__trg_date_id +msgid "" +"When should the condition be triggered.\n" +" If present, will be checked by the " +"scheduler. If empty, will be checked at creation and update." +msgstr "" +"¿Cuándo debe activarse la condición?\n" +"Si está presente, será comprobado por el programador. Si está vacía, se " +"comprobará en la creación y actualización." + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__active +msgid "When unchecked, the rule is hidden and will not be executed." +msgstr "Cuando está desactivada, la regla se oculta y no se ejecutará." + +#. module: access_limit_records_number +#: model:ir.model.fields,help:access_limit_records_number.field_base_limit_records_number__code +#, fuzzy +msgid "" +"Write Python code that the action will execute. Some variables are available " +"for use; help about python expression is given in the help tab." +msgstr "" +"Escriba el código de Python que ejecutará la acción. Algunas variables están " +"disponibles para su uso; la ayuda sobre la expresión de Pyhon se da en la " +"pestaña de ayuda." + +#~ msgid "Model Description" +#~ msgstr "Descripción Modelo" + +#~ msgid "base.limit.records_number" +#~ msgstr "base.limit.records_number" + +#~ msgid "base.limit.records_number.test" +#~ msgstr "base.limit.records_number.test" diff --git a/access_limit_records_number/models.py b/access_limit_records_number/models.py new file mode 100644 index 00000000000..62ee53a9d65 --- /dev/null +++ b/access_limit_records_number/models.py @@ -0,0 +1,83 @@ +from odoo import api, exceptions, fields, models +from odoo.tools.safe_eval import safe_eval +from odoo.tools.translate import _ + + +class BaseLimitRecordsNumber(models.Model): + _name = "base.limit.records_number" + _description = "Restrictions for number of records" + _inherits = {"base.automation": "base_automation_id"} + + base_automation_id = fields.Many2one( + "base.automation", "Base Automation", required=True, ondelete="cascade" + ) + max_records = fields.Integer(string="Maximum Records", required=True) + domain = fields.Char(default="[]") + + @api.constrains("max_records") + def _check_max_records_is_positive_or_false(self): + for record in self: + if record.max_records <= 0: + raise exceptions.ValidationError( + _("'max_records' can not be negative or zero") + ) + + @api.model + def _clean_domain(self, vals): + if "domain" in vals and vals["domain"].replace(" ", "") == "[]": + vals["domain"] = False + + def create(self, vals_list): + for vals in vals_list: + self._clean_domain(vals) + + automations = super().create(vals_list) + + for automation in automations: + action = { + "name": "Restrict number of records", + "usage": "base_automation", + "model_id": automation.model_id, + "base_automation_id": automation.id, + "state": "code", + "code": "env['base.limit.records_number'].verify_table()", + } + automation.write({"action_server_ids": [fields.Command.create(action)]}) + + return automations + + def write(self, vals): + self._clean_domain(vals) + + return super().write(vals) + + @api.model + def default_get(self, default_fields): + res = super().default_get(default_fields) + res["trigger"] = "on_create_or_write" + return res + + @api.model + def verify_table(self): + """Get parameters and verify. Raise exception if limit""" + model_name = self.env.context["active_model"] + for automation in self.search([("model_id.model", "=", model_name)]): + if automation.domain: + domain = safe_eval(automation.domain) + else: + domain = [] + + records_count = self.env[model_name].search_count(domain) + if records_count > automation.max_records: + raise exceptions.UserError( + _( + 'Maximimum allowed records in table "%(model_name)s"' + " is %(max_records)s, while after this update you would" + " have %(records_count)s" + ) + % { + "model_name": automation.model_id.name, + "max_records": automation.max_records, + "records_count": records_count, + } + ) diff --git a/access_limit_records_number/pyproject.toml b/access_limit_records_number/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/access_limit_records_number/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/access_limit_records_number/readme/CONTRIBUTORS.md b/access_limit_records_number/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..63dabb52a59 --- /dev/null +++ b/access_limit_records_number/readme/CONTRIBUTORS.md @@ -0,0 +1,4 @@ +- Miguel Martinez Lopez @odoodevelopment on tiktok +- Ivan Yelizariev \ +- Pavel Romanchenko \ +- IT Projects Labs \ diff --git a/access_limit_records_number/readme/DESCRIPTION.md b/access_limit_records_number/readme/DESCRIPTION.md new file mode 100644 index 00000000000..eb6cb07dfb6 --- /dev/null +++ b/access_limit_records_number/readme/DESCRIPTION.md @@ -0,0 +1,13 @@ +With this module you can limit number of records for any model in +specified domain. For example, you can restrict number of vehicles in +fleet_vehicle, say by three. If users try to create more then three +vehicles then exception occurs. + +This module uses base.action.rule to restrict number of records. And +also there is new model base.limit.records_number to store the settings. + +To do new settings to restrict number of records in any model the user +should be a member of `Control limits on records number` security group. + +This project is based on this other project: + diff --git a/access_limit_records_number/readme/USAGE.md b/access_limit_records_number/readme/USAGE.md new file mode 100644 index 00000000000..09bef8f3e12 --- /dev/null +++ b/access_limit_records_number/readme/USAGE.md @@ -0,0 +1,13 @@ +- In debug mode open `Settings / Users / Groups` +- Find there `Limit records number / Control limits on records number` + group and add your user in the group. +- Open `Settings / Technical / Security / Records Number Limits` menu +- Create new record. For example: + - Model: Information on a vehicle + - Domain: \[\] + - Maximum Records: 3 +- Save the record +- Try to create more than three vehicles from + `Fleet / Vehicles / Vehicles`. When you try to create more than three + vehicles then you see an exception message. The system doesn't allow + you create more than three records. diff --git a/access_limit_records_number/security/ir.model.access.csv b/access_limit_records_number/security/ir.model.access.csv new file mode 100644 index 00000000000..44645bab804 --- /dev/null +++ b/access_limit_records_number/security/ir.model.access.csv @@ -0,0 +1,4 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_limit_records_number_model_access_right_admin,access_limit_records_number_model_access_right_admin,model_base_limit_records_number,group_control_limits_on_records_number,1,1,1,1 +access_limit_records_number_read_group_user,access_limit_records_number_read_group_user,model_base_limit_records_number,base.group_user,1,0,0,0 +access_limit_records_number_read_public_user,access_limit_records_number_read_group_public,model_base_limit_records_number,base.group_public,1,0,0,0 diff --git a/access_limit_records_number/security/security.xml b/access_limit_records_number/security/security.xml new file mode 100644 index 00000000000..9d6489519cf --- /dev/null +++ b/access_limit_records_number/security/security.xml @@ -0,0 +1,19 @@ + + + + Limit records number + 17 + + + Control limits on records number + + + + + + + + diff --git a/access_limit_records_number/static/description/access_limit_number_app_page.png b/access_limit_records_number/static/description/access_limit_number_app_page.png new file mode 100644 index 00000000000..4e810529029 Binary files /dev/null and b/access_limit_records_number/static/description/access_limit_number_app_page.png differ diff --git a/access_limit_records_number/static/description/icon.png b/access_limit_records_number/static/description/icon.png new file mode 100644 index 00000000000..bbcc220146b Binary files /dev/null and b/access_limit_records_number/static/description/icon.png differ diff --git a/access_limit_records_number/static/description/index.html b/access_limit_records_number/static/description/index.html new file mode 100644 index 00000000000..808eb834eb0 --- /dev/null +++ b/access_limit_records_number/static/description/index.html @@ -0,0 +1,49 @@ +
+
+
+

Limit number of records

+

e.g. allow to create maximum 10 users. Similar restriction can be applied to any table.

+
+
+
+ +
+
+
+

+ For example, you can restrict number of vehicles by three. +

+
+
+ +
+
+
+ +
+
+
+

+ If users try to create more then three vehicles then exception occurs. +

+
+
+ +
+
+
+ +
+
+
+

Need our service?

+

Contact us by email or fill out request form

+ +
+
+
diff --git a/access_limit_records_number/static/description/vehicle_limit_number_of_records.png b/access_limit_records_number/static/description/vehicle_limit_number_of_records.png new file mode 100644 index 00000000000..8541f4e6b0b Binary files /dev/null and b/access_limit_records_number/static/description/vehicle_limit_number_of_records.png differ diff --git a/access_limit_records_number/views/base_limit_records_number.xml b/access_limit_records_number/views/base_limit_records_number.xml new file mode 100644 index 00000000000..f5fc9991e9c --- /dev/null +++ b/access_limit_records_number/views/base_limit_records_number.xml @@ -0,0 +1,55 @@ + + + + base.limit.records_number + + + + + + + + + + + base.limit.records_number + +
+ + + + + + + + +
+
+
+ + base.limit.records_number + + + + + + + + + + Records Number Limits + base.limit.records_number + records-number-limits + list,form,search + + +
diff --git a/base_remote/README.rst b/base_remote/README.rst index bfe7dcac2b3..e05ac877ed6 100644 --- a/base_remote/README.rst +++ b/base_remote/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - =========== Remote Base =========== @@ -17,7 +13,7 @@ Remote Base .. |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/license-AGPL--3-blue.png +.. |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 @@ -36,6 +32,10 @@ This module allows to store all the connected remotes (external ip addresses) to Odoo. It should be used with other modules in order to check remote's configurations. +For example, it allows to create maximum 10 users. + +Similar restriction can be applied to any table. + **Table of contents** .. contents:: diff --git a/base_remote/readme/DESCRIPTION.md b/base_remote/readme/DESCRIPTION.md index 7173963ace6..62a48f2a139 100644 --- a/base_remote/readme/DESCRIPTION.md +++ b/base_remote/readme/DESCRIPTION.md @@ -1,3 +1,7 @@ This module allows to store all the connected remotes (external ip addresses) to Odoo. It should be used with other modules in order to check remote's configurations. + +For example, it allows to create maximum 10 users. + +Similar restriction can be applied to any table. \ No newline at end of file diff --git a/base_remote/static/description/index.html b/base_remote/static/description/index.html index 3622d298c0d..b94b846d10f 100644 --- a/base_remote/static/description/index.html +++ b/base_remote/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +Remote Base -
+
+

Remote Base

- - -Odoo Community Association - -
-

Remote Base

-

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

This module allows to store all the connected remotes (external ip addresses) to Odoo. It should be used with other modules in order to check remote’s configurations.

+

For example, it allows to create maximum 10 users.

+

Similar restriction can be applied to any table.

Table of contents

    @@ -392,13 +389,13 @@

    Remote Base

-

Usage

+

Usage

When installed, all remotes will be stored by hostname on res.remote. They can be viewed on Settings / Remotes. The last IP of the remote will be stored.

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub 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 @@ -406,15 +403,15 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-
diff --git a/test_access_limit_records_number/README.rst b/test_access_limit_records_number/README.rst new file mode 100644 index 00000000000..652ff0eb4b2 --- /dev/null +++ b/test_access_limit_records_number/README.rst @@ -0,0 +1,84 @@ +=================================== +Test limit number of records module +=================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:657d1710139202382f3b5fa3cf36fca851808a67f332276bf370dd9619936e6f + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/18.0/test_access_limit_records_number + :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-18-0/server-tools-18-0-test_access_limit_records_number + :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=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module provides unittests for module access_limit_records_number. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Ivan Yelizariev +* Pavel Romanchenko +* IT Projects Labs +* Miguel Martinez Lopez + +Contributors +------------ + +- Miguel Martinez Lopez @odoodevelopment on tiktok +- Ivan Yelizariev + <`https://it-projects.info/team/yelizariev\\> >`__ +- Pavel Romanchenko +- IT Projects Labs + <`https://www.it-projects.info\\> >`__ + +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. + +This module is part of the `OCA/server-tools `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/test_access_limit_records_number/__init__.py b/test_access_limit_records_number/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/test_access_limit_records_number/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/test_access_limit_records_number/__manifest__.py b/test_access_limit_records_number/__manifest__.py new file mode 100644 index 00000000000..9b32de014c7 --- /dev/null +++ b/test_access_limit_records_number/__manifest__.py @@ -0,0 +1,14 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +{ + "name": """Test limit number of records module""", + "category": "Extra tools", + "version": "18.0.1.0.0", + "author": "Ivan Yelizariev, Pavel Romanchenko, IT Projects Labs, " + "Miguel Martinez Lopez, Odoo Community Association (OCA)", + "license": "AGPL-3", + "website": "https://github.com/OCA/server-tools", + "depends": ["access_limit_records_number"], + "data": ["security/ir.model.access.csv"], + "installable": True, + "auto_install": False, +} diff --git a/test_access_limit_records_number/models.py b/test_access_limit_records_number/models.py new file mode 100644 index 00000000000..63127532888 --- /dev/null +++ b/test_access_limit_records_number/models.py @@ -0,0 +1,8 @@ +from odoo import fields, models + + +class BaseLimitRecordsNumber(models.Model): + _name = "base.limit.records_number.test" + _description = "Test model to test access" + + name = fields.Char() diff --git a/test_access_limit_records_number/pyproject.toml b/test_access_limit_records_number/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/test_access_limit_records_number/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/test_access_limit_records_number/readme/CONTRIBUTORS.md b/test_access_limit_records_number/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..63dabb52a59 --- /dev/null +++ b/test_access_limit_records_number/readme/CONTRIBUTORS.md @@ -0,0 +1,4 @@ +- Miguel Martinez Lopez @odoodevelopment on tiktok +- Ivan Yelizariev \ +- Pavel Romanchenko \ +- IT Projects Labs \ diff --git a/test_access_limit_records_number/readme/DESCRIPTION.md b/test_access_limit_records_number/readme/DESCRIPTION.md new file mode 100644 index 00000000000..cee499f7a3a --- /dev/null +++ b/test_access_limit_records_number/readme/DESCRIPTION.md @@ -0,0 +1 @@ +This module provides unittests for module access_limit_records_number. diff --git a/test_access_limit_records_number/security/ir.model.access.csv b/test_access_limit_records_number/security/ir.model.access.csv new file mode 100644 index 00000000000..039da34b697 --- /dev/null +++ b/test_access_limit_records_number/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +test_access_limit_records_number.access_base_limit_records_number_test,access_base_limit_records_number_test,test_access_limit_records_number.model_base_limit_records_number_test,base.group_user,1,1,1,1 diff --git a/test_access_limit_records_number/static/description/index.html b/test_access_limit_records_number/static/description/index.html new file mode 100644 index 00000000000..e02583ed1e5 --- /dev/null +++ b/test_access_limit_records_number/static/description/index.html @@ -0,0 +1,431 @@ + + + + + +Test limit number of records module + + + +
+

Test limit number of records module

+ + +

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

+

This module provides unittests for module access_limit_records_number.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Ivan Yelizariev
  • +
  • Pavel Romanchenko
  • +
  • IT Projects Labs
  • +
  • Miguel Martinez Lopez
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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.

+

This module is part of the OCA/server-tools project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/test_access_limit_records_number/tests/__init__.py b/test_access_limit_records_number/tests/__init__.py new file mode 100644 index 00000000000..02bd456e848 --- /dev/null +++ b/test_access_limit_records_number/tests/__init__.py @@ -0,0 +1 @@ +from . import test_base diff --git a/test_access_limit_records_number/tests/test_base.py b/test_access_limit_records_number/tests/test_base.py new file mode 100644 index 00000000000..76b88a70a09 --- /dev/null +++ b/test_access_limit_records_number/tests/test_base.py @@ -0,0 +1,28 @@ +# Copyright 2018 Ivan Yelizariev +# Copyright 2025 Miguel Martinez Lopez +# License MIT (https://opensource.org/licenses/MIT). +from odoo import exceptions +from odoo.tests import common + + +@common.tagged("post_install", "-at_install") +class TestBase(common.TransactionCase): + def test_num_records_limit(self): + model_id = self.env["ir.model"]._get("base.limit.records_number.test").id + + self.env["base.limit.records_number"].sudo().create( + {"name": "Test Rule", "model_id": model_id, "max_records": 1} + ) + + admin_user = self.env.ref("base.user_admin") + + # ok + self.env["base.limit.records_number.test"].with_user(admin_user).create( + {"name": "r1"} + ) + + # limit 1 is reached + with self.assertRaises(exceptions.UserError): + self.env["base.limit.records_number.test"].with_user(admin_user).create( + {"name": "r2"} + )