odoo-addon-base-sequence-template 18.0.1.0.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- odoo/addons/base_sequence_template/README.rst +118 -0
- odoo/addons/base_sequence_template/__init__.py +5 -0
- odoo/addons/base_sequence_template/__manifest__.py +20 -0
- odoo/addons/base_sequence_template/i18n/base_sequence_template.pot +248 -0
- odoo/addons/base_sequence_template/models/__init__.py +5 -0
- odoo/addons/base_sequence_template/models/ir_sequence.py +10 -0
- odoo/addons/base_sequence_template/models/ir_sequence_template.py +62 -0
- odoo/addons/base_sequence_template/readme/CONTRIBUTORS.md +1 -0
- odoo/addons/base_sequence_template/readme/DESCRIPTION.md +12 -0
- odoo/addons/base_sequence_template/readme/USAGE.md +19 -0
- odoo/addons/base_sequence_template/security/ir.model.access.csv +4 -0
- odoo/addons/base_sequence_template/static/description/icon.png +0 -0
- odoo/addons/base_sequence_template/static/description/index.html +467 -0
- odoo/addons/base_sequence_template/tests/__init__.py +4 -0
- odoo/addons/base_sequence_template/tests/test_base_sequence_template.py +117 -0
- odoo/addons/base_sequence_template/views/ir_sequence_template_views.xml +162 -0
- odoo/addons/base_sequence_template/wizard/__init__.py +4 -0
- odoo/addons/base_sequence_template/wizard/generate_company_sequences.py +102 -0
- odoo/addons/base_sequence_template/wizard/generate_company_sequences.xml +48 -0
- odoo_addon_base_sequence_template-18.0.1.0.0.2.dist-info/METADATA +134 -0
- odoo_addon_base_sequence_template-18.0.1.0.0.2.dist-info/RECORD +23 -0
- odoo_addon_base_sequence_template-18.0.1.0.0.2.dist-info/WHEEL +5 -0
- odoo_addon_base_sequence_template-18.0.1.0.0.2.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
.. image:: https://odoo-community.org/readme-banner-image
|
|
2
|
+
:target: https://odoo-community.org/get-involved?utm_source=readme
|
|
3
|
+
:alt: Odoo Community Association
|
|
4
|
+
|
|
5
|
+
======================
|
|
6
|
+
Base Sequence Template
|
|
7
|
+
======================
|
|
8
|
+
|
|
9
|
+
..
|
|
10
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
11
|
+
!! This file is generated by oca-gen-addon-readme !!
|
|
12
|
+
!! changes will be overwritten. !!
|
|
13
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
14
|
+
!! source digest: sha256:cd5023e71f0bc95e21bcc08e79b8656f4a07fe1111ffc9e4bdb8954c10318593
|
|
15
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
16
|
+
|
|
17
|
+
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
|
18
|
+
:target: https://odoo-community.org/page/development-status
|
|
19
|
+
:alt: Beta
|
|
20
|
+
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
|
|
21
|
+
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
|
22
|
+
:alt: License: AGPL-3
|
|
23
|
+
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github
|
|
24
|
+
:target: https://github.com/OCA/server-tools/tree/18.0/base_sequence_template
|
|
25
|
+
:alt: OCA/server-tools
|
|
26
|
+
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
|
27
|
+
:target: https://translation.odoo-community.org/projects/server-tools-18-0/server-tools-18-0-base_sequence_template
|
|
28
|
+
:alt: Translate me on Weblate
|
|
29
|
+
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
|
|
30
|
+
:target: https://runboat.odoo-community.org/builds?repo=OCA/server-tools&target_branch=18.0
|
|
31
|
+
:alt: Try me on Runboat
|
|
32
|
+
|
|
33
|
+
|badge1| |badge2| |badge3| |badge4| |badge5|
|
|
34
|
+
|
|
35
|
+
This module provides a wizard to generate company-specific sequences
|
|
36
|
+
from reusable sequence templates. It is designed for multi-company
|
|
37
|
+
environments where each company requires its own ``ir.sequence`` records
|
|
38
|
+
but shares a common configuration pattern. The wizard allows defining
|
|
39
|
+
sequence templates that include dynamic placeholders referencing company
|
|
40
|
+
fields.
|
|
41
|
+
|
|
42
|
+
During generation, placeholders of the form ``%(company_id.<field>)s``
|
|
43
|
+
are automatically replaced with the corresponding values from each
|
|
44
|
+
company. Other placeholders (for example ``%(year)s``) are preserved and
|
|
45
|
+
evaluated later by the standard sequence engine. The module also
|
|
46
|
+
validates that all referenced company fields exist and checks that
|
|
47
|
+
required company values are not empty.
|
|
48
|
+
|
|
49
|
+
**Table of contents**
|
|
50
|
+
|
|
51
|
+
.. contents::
|
|
52
|
+
:local:
|
|
53
|
+
|
|
54
|
+
Usage
|
|
55
|
+
=====
|
|
56
|
+
|
|
57
|
+
To use this module, follow these steps:
|
|
58
|
+
|
|
59
|
+
1. Create one or more sequence templates and define the desired prefix
|
|
60
|
+
and suffix, with company placeholders if desired. You can use
|
|
61
|
+
placeholders like:
|
|
62
|
+
|
|
63
|
+
- ``%(company_id.id)s``
|
|
64
|
+
- ``%(company_id.name)s``
|
|
65
|
+
- ``%(company_id.vat)s``
|
|
66
|
+
|
|
67
|
+
2. Select the templates you want to use.
|
|
68
|
+
3. Trigger the server action that opens the wizard to generate sequences
|
|
69
|
+
for companies.
|
|
70
|
+
4. In the wizard, select the target companies.
|
|
71
|
+
5. Confirm to generate the sequences.
|
|
72
|
+
|
|
73
|
+
The wizard will:
|
|
74
|
+
|
|
75
|
+
- Read the required company fields used in the templates.
|
|
76
|
+
- Validate that those fields exist and are not empty.
|
|
77
|
+
- Create one ``ir.sequence`` per selected company and template with the
|
|
78
|
+
resolved values.
|
|
79
|
+
|
|
80
|
+
Bug Tracker
|
|
81
|
+
===========
|
|
82
|
+
|
|
83
|
+
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-tools/issues>`_.
|
|
84
|
+
In case of trouble, please check there if your issue has already been reported.
|
|
85
|
+
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
|
86
|
+
`feedback <https://github.com/OCA/server-tools/issues/new?body=module:%20base_sequence_template%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
|
87
|
+
|
|
88
|
+
Do not contact contributors directly about support or help with technical issues.
|
|
89
|
+
|
|
90
|
+
Credits
|
|
91
|
+
=======
|
|
92
|
+
|
|
93
|
+
Authors
|
|
94
|
+
-------
|
|
95
|
+
|
|
96
|
+
* ForgeFlow
|
|
97
|
+
|
|
98
|
+
Contributors
|
|
99
|
+
------------
|
|
100
|
+
|
|
101
|
+
- Laura Cazorla <laura.cazorla@forgeflow.com>
|
|
102
|
+
|
|
103
|
+
Maintainers
|
|
104
|
+
-----------
|
|
105
|
+
|
|
106
|
+
This module is maintained by the OCA.
|
|
107
|
+
|
|
108
|
+
.. image:: https://odoo-community.org/logo.png
|
|
109
|
+
:alt: Odoo Community Association
|
|
110
|
+
:target: https://odoo-community.org
|
|
111
|
+
|
|
112
|
+
OCA, or the Odoo Community Association, is a nonprofit organization whose
|
|
113
|
+
mission is to support the collaborative development of Odoo features and
|
|
114
|
+
promote its widespread use.
|
|
115
|
+
|
|
116
|
+
This module is part of the `OCA/server-tools <https://github.com/OCA/server-tools/tree/18.0/base_sequence_template>`_ project on GitHub.
|
|
117
|
+
|
|
118
|
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Copyright 2026 ForgeFlow S.L. (https://www.forgeflow.com)
|
|
2
|
+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
3
|
+
|
|
4
|
+
{
|
|
5
|
+
"name": "Base Sequence Template",
|
|
6
|
+
"summary": "Create a sequence template that can generate sequences for companies",
|
|
7
|
+
"category": "Tools",
|
|
8
|
+
"version": "18.0.1.0.0",
|
|
9
|
+
"website": "https://github.com/OCA/server-tools",
|
|
10
|
+
"author": "ForgeFlow, Odoo Community Association (OCA)",
|
|
11
|
+
"license": "AGPL-3",
|
|
12
|
+
"depends": ["base_setup"],
|
|
13
|
+
"data": [
|
|
14
|
+
"views/ir_sequence_template_views.xml",
|
|
15
|
+
"wizard/generate_company_sequences.xml",
|
|
16
|
+
"security/ir.model.access.csv",
|
|
17
|
+
],
|
|
18
|
+
"installable": True,
|
|
19
|
+
"auto_install": False,
|
|
20
|
+
}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# Translation of Odoo Server.
|
|
2
|
+
# This file contains the translation of the following modules:
|
|
3
|
+
# * base_sequence_template
|
|
4
|
+
#
|
|
5
|
+
msgid ""
|
|
6
|
+
msgstr ""
|
|
7
|
+
"Project-Id-Version: Odoo Server 18.0\n"
|
|
8
|
+
"Report-Msgid-Bugs-To: \n"
|
|
9
|
+
"Last-Translator: \n"
|
|
10
|
+
"Language-Team: \n"
|
|
11
|
+
"MIME-Version: 1.0\n"
|
|
12
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
13
|
+
"Content-Transfer-Encoding: \n"
|
|
14
|
+
"Plural-Forms: \n"
|
|
15
|
+
|
|
16
|
+
#. module: base_sequence_template
|
|
17
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_ir_sequence_template_form
|
|
18
|
+
msgid ""
|
|
19
|
+
"<span colspan=\"2\">Current Year with Century: %(year)s</span>\n"
|
|
20
|
+
" <span colspan=\"2\">Current Year without Century: %(y)s</span>\n"
|
|
21
|
+
" <span colspan=\"2\">Month: %(month)s</span>\n"
|
|
22
|
+
" <span colspan=\"2\">Day: %(day)s</span>"
|
|
23
|
+
msgstr ""
|
|
24
|
+
|
|
25
|
+
#. module: base_sequence_template
|
|
26
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_ir_sequence_template_form
|
|
27
|
+
msgid ""
|
|
28
|
+
"<span colspan=\"2\">Day of the Year: %(doy)s</span>\n"
|
|
29
|
+
" <span colspan=\"2\">Week of the Year: %(woy)s</span>\n"
|
|
30
|
+
" <span colspan=\"2\">Day of the Week (0:Monday): %(weekday)s</span>"
|
|
31
|
+
msgstr ""
|
|
32
|
+
|
|
33
|
+
#. module: base_sequence_template
|
|
34
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_ir_sequence_template_form
|
|
35
|
+
msgid ""
|
|
36
|
+
"<span colspan=\"2\">Hour 00->24: %(h24)s</span>\n"
|
|
37
|
+
" <span colspan=\"2\">Hour 00->12: %(h12)s</span>\n"
|
|
38
|
+
" <span colspan=\"2\">Minute: %(min)s</span>\n"
|
|
39
|
+
" <span colspan=\"2\">Second: %(sec)s</span>"
|
|
40
|
+
msgstr ""
|
|
41
|
+
|
|
42
|
+
#. module: base_sequence_template
|
|
43
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_ir_sequence_template_form
|
|
44
|
+
msgid ""
|
|
45
|
+
"<span colspan=\"4\">\n"
|
|
46
|
+
" <strong>Company Fields</strong>\n"
|
|
47
|
+
" </span>\n"
|
|
48
|
+
" <span colspan=\"4\">You can use any company flat field in your prefix or suffix</span>"
|
|
49
|
+
msgstr ""
|
|
50
|
+
|
|
51
|
+
#. module: base_sequence_template
|
|
52
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_ir_sequence_template_form
|
|
53
|
+
msgid ""
|
|
54
|
+
"<span colspan=\"4\">Company ID: %(company_id.id)s</span>\n"
|
|
55
|
+
" <span colspan=\"4\">Company Name: %(company_id.name)s</span>\n"
|
|
56
|
+
" <span colspan=\"4\">Company Registry: %(company_id.company_registry)s</span>"
|
|
57
|
+
msgstr ""
|
|
58
|
+
|
|
59
|
+
#. module: base_sequence_template
|
|
60
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_generate_company_sequences_wizard_form
|
|
61
|
+
msgid ""
|
|
62
|
+
"<strong>Warning:</strong>\n"
|
|
63
|
+
" Be careful! Generating sequences may override or duplicate\n"
|
|
64
|
+
" the currently configured sequences for the selected companies.\n"
|
|
65
|
+
" Only proceed if you know what you are doing."
|
|
66
|
+
msgstr ""
|
|
67
|
+
|
|
68
|
+
#. module: base_sequence_template
|
|
69
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__active
|
|
70
|
+
msgid "Active"
|
|
71
|
+
msgstr ""
|
|
72
|
+
|
|
73
|
+
#. module: base_sequence_template
|
|
74
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_generate_company_sequences_wizard_form
|
|
75
|
+
msgid "Cancel"
|
|
76
|
+
msgstr ""
|
|
77
|
+
|
|
78
|
+
#. module: base_sequence_template
|
|
79
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_generate_company_sequences_wizard__company_ids
|
|
80
|
+
msgid "Companies"
|
|
81
|
+
msgstr ""
|
|
82
|
+
|
|
83
|
+
#. module: base_sequence_template
|
|
84
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_ir_sequence_template_form
|
|
85
|
+
msgid "Company legend (for prefix, suffix)"
|
|
86
|
+
msgstr ""
|
|
87
|
+
|
|
88
|
+
#. module: base_sequence_template
|
|
89
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_generate_company_sequences_wizard_form
|
|
90
|
+
msgid "Confirm"
|
|
91
|
+
msgstr ""
|
|
92
|
+
|
|
93
|
+
#. module: base_sequence_template
|
|
94
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_generate_company_sequences_wizard__create_uid
|
|
95
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__create_uid
|
|
96
|
+
msgid "Created by"
|
|
97
|
+
msgstr ""
|
|
98
|
+
|
|
99
|
+
#. module: base_sequence_template
|
|
100
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_generate_company_sequences_wizard__create_date
|
|
101
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__create_date
|
|
102
|
+
msgid "Created on"
|
|
103
|
+
msgstr ""
|
|
104
|
+
|
|
105
|
+
#. module: base_sequence_template
|
|
106
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_generate_company_sequences_wizard__display_name
|
|
107
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__display_name
|
|
108
|
+
msgid "Display Name"
|
|
109
|
+
msgstr ""
|
|
110
|
+
|
|
111
|
+
#. module: base_sequence_template
|
|
112
|
+
#: model:ir.actions.act_window,name:base_sequence_template.action_generate_company_sequences_wizard
|
|
113
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_generate_company_sequences_wizard_form
|
|
114
|
+
msgid "Generate Company Sequences"
|
|
115
|
+
msgstr ""
|
|
116
|
+
|
|
117
|
+
#. module: base_sequence_template
|
|
118
|
+
#: model:ir.actions.server,name:base_sequence_template.action_open_generate_sequences_wizard
|
|
119
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_ir_sequence_template_form
|
|
120
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_ir_sequence_template_tree
|
|
121
|
+
msgid "Generate Sequences"
|
|
122
|
+
msgstr ""
|
|
123
|
+
|
|
124
|
+
#. module: base_sequence_template
|
|
125
|
+
#: model:ir.model,name:base_sequence_template.model_generate_company_sequences_wizard
|
|
126
|
+
msgid "Generate Sequences for Company"
|
|
127
|
+
msgstr ""
|
|
128
|
+
|
|
129
|
+
#. module: base_sequence_template
|
|
130
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_generate_company_sequences_wizard__id
|
|
131
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__id
|
|
132
|
+
msgid "ID"
|
|
133
|
+
msgstr ""
|
|
134
|
+
|
|
135
|
+
#. module: base_sequence_template
|
|
136
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__implementation
|
|
137
|
+
msgid "Implementation"
|
|
138
|
+
msgstr ""
|
|
139
|
+
|
|
140
|
+
#. module: base_sequence_template
|
|
141
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_generate_company_sequences_wizard__write_uid
|
|
142
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__write_uid
|
|
143
|
+
msgid "Last Updated by"
|
|
144
|
+
msgstr ""
|
|
145
|
+
|
|
146
|
+
#. module: base_sequence_template
|
|
147
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_generate_company_sequences_wizard__write_date
|
|
148
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__write_date
|
|
149
|
+
msgid "Last Updated on"
|
|
150
|
+
msgstr ""
|
|
151
|
+
|
|
152
|
+
#. module: base_sequence_template
|
|
153
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_ir_sequence_template_form
|
|
154
|
+
msgid "Legend (for prefix, suffix)"
|
|
155
|
+
msgstr ""
|
|
156
|
+
|
|
157
|
+
#. module: base_sequence_template
|
|
158
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__name
|
|
159
|
+
msgid "Name"
|
|
160
|
+
msgstr ""
|
|
161
|
+
|
|
162
|
+
#. module: base_sequence_template
|
|
163
|
+
#: model:ir.model.fields.selection,name:base_sequence_template.selection__ir_sequence_template__implementation__no_gap
|
|
164
|
+
msgid "No gap"
|
|
165
|
+
msgstr ""
|
|
166
|
+
|
|
167
|
+
#. module: base_sequence_template
|
|
168
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__prefix
|
|
169
|
+
msgid "Prefix"
|
|
170
|
+
msgstr ""
|
|
171
|
+
|
|
172
|
+
#. module: base_sequence_template
|
|
173
|
+
#: model:ir.model.fields,help:base_sequence_template.field_ir_sequence_template__prefix
|
|
174
|
+
msgid "Prefix value of the record for the sequence"
|
|
175
|
+
msgstr ""
|
|
176
|
+
|
|
177
|
+
#. module: base_sequence_template
|
|
178
|
+
#: model:ir.model,name:base_sequence_template.model_ir_sequence
|
|
179
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__sequence_ids
|
|
180
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_ir_sequence_template_form
|
|
181
|
+
msgid "Sequence"
|
|
182
|
+
msgstr ""
|
|
183
|
+
|
|
184
|
+
#. module: base_sequence_template
|
|
185
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__code
|
|
186
|
+
msgid "Sequence Code"
|
|
187
|
+
msgstr ""
|
|
188
|
+
|
|
189
|
+
#. module: base_sequence_template
|
|
190
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__sequence_count
|
|
191
|
+
msgid "Sequence Count"
|
|
192
|
+
msgstr ""
|
|
193
|
+
|
|
194
|
+
#. module: base_sequence_template
|
|
195
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__padding
|
|
196
|
+
msgid "Sequence Size"
|
|
197
|
+
msgstr ""
|
|
198
|
+
|
|
199
|
+
#. module: base_sequence_template
|
|
200
|
+
#: model:ir.model,name:base_sequence_template.model_ir_sequence_template
|
|
201
|
+
msgid "Sequence Template"
|
|
202
|
+
msgstr ""
|
|
203
|
+
|
|
204
|
+
#. module: base_sequence_template
|
|
205
|
+
#: model:ir.actions.act_window,name:base_sequence_template.action_ir_sequence_template
|
|
206
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_generate_company_sequences_wizard__template_ids
|
|
207
|
+
#: model:ir.ui.menu,name:base_sequence_template.menu_ir_sequence_template
|
|
208
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_ir_sequence_template_form
|
|
209
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_ir_sequence_template_tree
|
|
210
|
+
msgid "Sequence Templates"
|
|
211
|
+
msgstr ""
|
|
212
|
+
|
|
213
|
+
#. module: base_sequence_template
|
|
214
|
+
#: model_terms:ir.ui.view,arch_db:base_sequence_template.view_ir_sequence_template_form
|
|
215
|
+
msgid "Sequences"
|
|
216
|
+
msgstr ""
|
|
217
|
+
|
|
218
|
+
#. module: base_sequence_template
|
|
219
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_generate_company_sequences_wizard__smart_search
|
|
220
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence__smart_search
|
|
221
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__smart_search
|
|
222
|
+
msgid "Smart Search"
|
|
223
|
+
msgstr ""
|
|
224
|
+
|
|
225
|
+
#. module: base_sequence_template
|
|
226
|
+
#: model:ir.model.fields.selection,name:base_sequence_template.selection__ir_sequence_template__implementation__standard
|
|
227
|
+
msgid "Standard"
|
|
228
|
+
msgstr ""
|
|
229
|
+
|
|
230
|
+
#. module: base_sequence_template
|
|
231
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__number_increment
|
|
232
|
+
msgid "Step"
|
|
233
|
+
msgstr ""
|
|
234
|
+
|
|
235
|
+
#. module: base_sequence_template
|
|
236
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence_template__suffix
|
|
237
|
+
msgid "Suffix"
|
|
238
|
+
msgstr ""
|
|
239
|
+
|
|
240
|
+
#. module: base_sequence_template
|
|
241
|
+
#: model:ir.model.fields,help:base_sequence_template.field_ir_sequence_template__suffix
|
|
242
|
+
msgid "Suffix value of the record for the sequence"
|
|
243
|
+
msgstr ""
|
|
244
|
+
|
|
245
|
+
#. module: base_sequence_template
|
|
246
|
+
#: model:ir.model.fields,field_description:base_sequence_template.field_ir_sequence__template_id
|
|
247
|
+
msgid "Template"
|
|
248
|
+
msgstr ""
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Copyright 2026 ForgeFlow S.L. (https://www.forgeflow.com)
|
|
2
|
+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
3
|
+
|
|
4
|
+
from odoo import fields, models
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class IrSequence(models.Model):
|
|
8
|
+
_inherit = "ir.sequence"
|
|
9
|
+
|
|
10
|
+
template_id = fields.Many2one("ir.sequence.template", ondelete="set null")
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Copyright 2026 ForgeFlow S.L. (https://www.forgeflow.com)
|
|
2
|
+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
3
|
+
|
|
4
|
+
from odoo import api, fields, models
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class IrSequenceTemplate(models.Model):
|
|
8
|
+
_name = "ir.sequence.template"
|
|
9
|
+
_description = "Sequence Template"
|
|
10
|
+
_order = "name"
|
|
11
|
+
_allow_sudo_commands = False
|
|
12
|
+
|
|
13
|
+
active = fields.Boolean(default=True)
|
|
14
|
+
|
|
15
|
+
name = fields.Char(required=True)
|
|
16
|
+
code = fields.Char(string="Sequence Code")
|
|
17
|
+
implementation = fields.Selection(
|
|
18
|
+
[("standard", "Standard"), ("no_gap", "No gap")],
|
|
19
|
+
required=True,
|
|
20
|
+
default="standard",
|
|
21
|
+
)
|
|
22
|
+
prefix = fields.Char(help="Prefix value of the record for the sequence", trim=False)
|
|
23
|
+
suffix = fields.Char(help="Suffix value of the record for the sequence", trim=False)
|
|
24
|
+
number_increment = fields.Integer(string="Step", required=True, default=1)
|
|
25
|
+
padding = fields.Integer(string="Sequence Size", required=True, default=0)
|
|
26
|
+
|
|
27
|
+
sequence_ids = fields.One2many("ir.sequence", "template_id")
|
|
28
|
+
sequence_count = fields.Integer(compute="_compute_sequence_count")
|
|
29
|
+
|
|
30
|
+
@api.depends("sequence_ids")
|
|
31
|
+
def _compute_sequence_count(self):
|
|
32
|
+
for record in self:
|
|
33
|
+
record.sequence_count = len(record.sequence_ids)
|
|
34
|
+
|
|
35
|
+
def action_view_sequences(self):
|
|
36
|
+
self.ensure_one()
|
|
37
|
+
return {
|
|
38
|
+
"name": "Sequences",
|
|
39
|
+
"type": "ir.actions.act_window",
|
|
40
|
+
"res_model": "ir.sequence",
|
|
41
|
+
"view_mode": "list,form",
|
|
42
|
+
"domain": [("template_id", "=", self.id)],
|
|
43
|
+
"context": {"default_template_id": self.id},
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
def action_generate_sequences(self):
|
|
47
|
+
return self.open_generate_sequences_wizard()
|
|
48
|
+
|
|
49
|
+
def open_generate_sequences_wizard(self):
|
|
50
|
+
return {
|
|
51
|
+
"name": "Generate Sequences",
|
|
52
|
+
"type": "ir.actions.act_window",
|
|
53
|
+
"view_mode": "form",
|
|
54
|
+
"res_model": "generate.company.sequences.wizard",
|
|
55
|
+
"target": "new",
|
|
56
|
+
"view_id": self.env.ref(
|
|
57
|
+
"base_sequence_template.view_generate_company_sequences_wizard_form"
|
|
58
|
+
).id,
|
|
59
|
+
"context": {
|
|
60
|
+
"default_template_ids": self.ids,
|
|
61
|
+
},
|
|
62
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
- Laura Cazorla \<<laura.cazorla@forgeflow.com>\>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
This module provides a wizard to generate company-specific sequences from
|
|
2
|
+
reusable sequence templates. It is designed for multi-company environments
|
|
3
|
+
where each company requires its own `ir.sequence` records but shares a common
|
|
4
|
+
configuration pattern. The wizard allows defining sequence templates that
|
|
5
|
+
include dynamic placeholders referencing company fields.
|
|
6
|
+
|
|
7
|
+
During generation, placeholders of the form `%(company_id.<field>)s` are
|
|
8
|
+
automatically replaced with the corresponding values from each company. Other
|
|
9
|
+
placeholders (for example `%(year)s`) are preserved and evaluated later by the
|
|
10
|
+
standard sequence engine. The module also validates that all referenced company
|
|
11
|
+
fields exist and checks that required company values are not empty.
|
|
12
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
To use this module, follow these steps:
|
|
2
|
+
|
|
3
|
+
1. Create one or more sequence templates and define the desired prefix and
|
|
4
|
+
suffix, with company placeholders if desired. You can use placeholders like:
|
|
5
|
+
* `%(company_id.id)s`
|
|
6
|
+
* `%(company_id.name)s`
|
|
7
|
+
* `%(company_id.vat)s`
|
|
8
|
+
2. Select the templates you want to use.
|
|
9
|
+
3. Trigger the server action that opens the wizard to generate sequences for
|
|
10
|
+
companies.
|
|
11
|
+
4. In the wizard, select the target companies.
|
|
12
|
+
5. Confirm to generate the sequences.
|
|
13
|
+
|
|
14
|
+
The wizard will:
|
|
15
|
+
- Read the required company fields used in the templates.
|
|
16
|
+
- Validate that those fields exist and are not empty.
|
|
17
|
+
- Create one `ir.sequence` per selected company and template with the resolved
|
|
18
|
+
values.
|
|
19
|
+
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
|
2
|
+
access_ir_sequence_template,access_ir_sequence_template,model_ir_sequence_template,base.group_user,1,0,0,0
|
|
3
|
+
access_ir_sequence_template_system,access_ir_sequence_template_system,model_ir_sequence_template,base.group_system,1,1,1,1
|
|
4
|
+
access_generate_company_sequences_wizard,access_generate_company_sequences_wizard,model_generate_company_sequences_wizard,base.group_system,1,1,1,1
|
|
Binary file
|