Compare commits

...

95 Commits

Author SHA1 Message Date
4be6903e8f update edit repository 2025-02-28 16:04:04 +07:00
680f763c50 update website.md 2025-02-28 15:07:16 +07:00
7df4811b76 add sphinx design 2025-02-28 14:27:01 +07:00
d606713b6b update 2025-02-28 12:28:07 +07:00
e460e4553a update 2025-02-28 12:16:22 +07:00
21637a5c25 update 2025-02-28 12:03:14 +07:00
ec733fcc15 update 2025-02-28 11:11:57 +07:00
0e357b4ef8 update 2025-02-28 11:05:29 +07:00
5e3590e329 update 2025-02-28 10:49:44 +07:00
4a20dde950 update 2025-02-28 10:44:29 +07:00
44d23b4aba update script 2025-02-28 10:39:52 +07:00
52ff35cc22 update 2025-02-28 10:22:52 +07:00
dd90f6bd9f update 2025-02-28 10:14:34 +07:00
ebc2396ce2 add fix link/ref script 2025-02-28 09:46:43 +07:00
71c1aeb355 update 2025-02-28 08:38:23 +07:00
507ec45616 update 2025-02-28 03:47:22 +07:00
fb158c3b6d update 2025-02-28 02:54:43 +07:00
6b0c648c8e update 2025-02-28 02:35:19 +07:00
d9cb9d975f update replace rst-class to container 2025-02-28 00:37:20 +07:00
fb57c796ee update package and add myst extensions , update convert2md script 2025-02-28 00:14:45 +07:00
637a4dd9fd convert rst to markdown 2025-02-27 18:56:07 +07:00
ef68fdc2d9 update pip packages 2025-02-27 17:51:31 +07:00
a0a0927d44 update 2025-02-27 17:49:19 +07:00
3b5a2fe97d update 2025-02-27 12:01:27 +07:00
8135ed831d update Makefile add watch static, locale, redirects 2025-02-25 11:55:56 +07:00
060548df53 update Makefile 2025-02-25 11:26:52 +07:00
181c51c9ed add hot reload feature 2025-02-25 11:05:33 +07:00
a94d72c241 add hot reload feature 2025-02-25 11:03:58 +07:00
33819509a4 update 2025-02-24 15:40:47 +07:00
Odoo Translation Bot
19cb93e6b5 [I18N] *: fetch 18.0 translations 2025-02-23 08:02:15 +00:00
dikd-odoo
a9c2961ded [ADD] sales: discounts
Apply suggestions from LARM review

edits

Apply suggestions from FEKU review

edits

edits2

edits3

Apply suggestions from SALI review

edits

closes 

Signed-off-by: Dina Klarisse Dugar (dikd) <dikd@odoo.com>
Co-authored-by: larm-odoo <121518652+larm-odoo@users.noreply.github.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2025-02-21 23:35:00 +00:00
samueljlieber
7fbf533363 [IMP] contributing: documentation macOS make install
closes 

X-original-commit: d4ed263fa2
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-02-21 21:06:17 +00:00
xpl-odoo
009dd70bd3 [MOV] accounting: invoice sequence section on a separate page
closes 

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2025-02-21 14:27:26 +00:00
jero-odoo
035e0ec1e8 [IMP] Purchase: Reordering Rules Update
closes 

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: Dina Klarisse Dugar <dikd@odoo.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2025-02-21 12:55:55 +00:00
jero-odoo
1262245b53 [IMP] inventory: view empty locations
closes 

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Co-authored-by: larm-odoo <121518652+larm-odoo@users.noreply.github.com>
2025-02-20 23:31:42 +00:00
Tiffany Chang (tic)
aad8aa1314 [I18N] *: re-export pot files
As per usual, leave off developer.pot and contributing.pot since we
don't translate them (not useful, can't really contribute to/dev in
Odoo without knowing English)

closes 

Signed-off-by: Tiffany Chang (tic) <tic@odoo.com>
2025-02-20 23:31:36 +00:00
dikd-odoo
e32f4ec766 [IMP] sales: gelato feedback
Apply suggestions from JERO review

edits

closes 

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: Jess Rogers <104637850+jero-odoo@users.noreply.github.com>
2025-02-20 08:03:59 +00:00
Odoo Translation Bot
85d4e6a167 [I18N] *: fetch 18.0 translations 2025-02-20 08:01:37 +00:00
Charles Mutabazi
0ae856bcf6 [FIX] Use <chatter> instead of <div class="oe_chatter">
closes 

Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2025-02-19 08:56:10 +00:00
jero-odoo
5bb043bd3b [ADD] Purchase: Templates
closes 

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: dikd-odoo <dikd@odoo.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2025-02-18 18:21:57 +00:00
xpl-odoo
d2c610179a [IMP] accounting: clarify invoice sequence format
task-4564980

closes 

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2025-02-18 11:12:47 +00:00
“Dallas”
35f2768359 [IMP] accounting/transactions: view/edit/print statements
Explains how to view, edit, and print statements from both kanban and list views of transactions.

task-4320158

closes 

X-original-commit: f1f547ca58
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Dallas Dean (dade) <dade@odoo.com>
2025-02-17 11:09:30 +00:00
Odoo Translation Bot
7529565384 [I18N] *: fetch 18.0 translations 2025-02-17 08:01:34 +00:00
Odoo Translation Bot
1e412a8780 [I18N] Update translation terms from Transifex 2025-02-16 02:42:22 +01:00
samueljlieber
77d4d6e359 [IMP] data cleaning: content improvements
closes 

X-original-commit: a762cabbb3
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Co-authored-by: dikd-odoo <dikd@odoo.com>
2025-02-15 21:45:43 +00:00
dikd-odoo
c0dd6b7d1c [ADD] sales: gelato integration
edit image sizes

edits

Apply suggestions from FEKU review

edits

Apply suggestions from FEKU review

edits

Apply suggestions from FEKU review

edits

Update content/applications/sales/sales/gelato.rst

edits

Apply suggestions from ZST review

edits

edits

sales file

Apply suggestions from SALI review

Apply suggestions from SALI review2

images

Edits

closes 

Signed-off-by: Dina Klarisse Dugar (dikd) <dikd@odoo.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2025-02-15 02:00:37 +00:00
dikd-odoo
cd2e27084d [IMP] sales: subscription products in ecommerce
closes 

X-original-commit: 710854226d
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Dina Klarisse Dugar (dikd) <dikd@odoo.com>
2025-02-14 23:13:12 +00:00
maad-odoo
a00a6f5583 [FIX] developer/mixins: chatter integration instructions in form view
Previously, the chatter integration instructions described an outdated method using fields and widgets. However, the integration approach has changed, requiring only the `<chatter/ >` element in the form view with configurable options. This commit updates the instructions accordingly.

See odoo/odoo@351b047c37

closes 

Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com>
2025-02-14 19:01:27 +00:00
jbelloc2
84051ad9de [ADD] sale_shopee: Shopee Connector
Documentation on the benefits of the new shopee connector and guidelines for odoo users.

tasks-3623720

closes 

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-02-14 17:44:25 +00:00
jero-odoo
5fbab9eba4 [IMP] inventory: add a delivery
closes 

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: dikd-odoo <dikd@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2025-02-14 15:58:02 +00:00
jero-odoo
01cf1d3dd7 [IMP] inventory: notifs for expiration dates
closes 

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: larm-odoo <121518652+larm-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2025-02-14 15:58:01 +00:00
samueljlieber
a55fdb6313 [FIX] resource folder match
closes 

Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-02-14 15:57:59 +00:00
samueljlieber
a4b841afce [FIX] clean unused resource files
Part-of: 
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-02-14 15:57:59 +00:00
samueljlieber
3f1f02200b [IMP] tests: check resource file referenced
Part-of: 
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-02-14 15:57:59 +00:00
bhra-odoo
faca8a4bda [ADD] l10n_in: add TDS/TCS threshold alert (India)
This PR is backporting of this commit:
4452b60b5c

This commit introduces TDS/TCS Alert documentation for Indian localization.

closes 

Signed-off-by: Raj Bhuva (bhra) <bhra@odoo.com>
2025-02-14 11:18:18 +00:00
jero-odoo
c9fca6c3b6 [ADD] Barcode: Processing a transfer
closes 

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
2025-02-13 17:11:57 +00:00
samueljlieber
3941e55043 [IMP] marketing automation: content improvements
closes 

X-original-commit: 8f1d5d428c
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-02-13 15:51:16 +00:00
mcsi-odoo
4b6e34efc5 [IMP] studio: automation rules correction
Task-3761784

closes 

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-02-13 12:22:26 +00:00
Odoo Translation Bot
7368ad782b [I18N] *: fetch 18.0 translations 2025-02-13 09:33:25 +00:00
xpl-odoo
c4bfeb9cae [IMP] website: remove slash in redirect rule expression
task-4113085

closes 

X-original-commit: a00b6cf990
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2025-02-12 14:25:17 +00:00
Sam Lieber (sali)
f4c16bc722 [IMP] data cleaning: field cleaning
closes 

X-original-commit: 98b765babe
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-02-12 14:25:16 +00:00
jero-odoo
aa5d9911b3 [IMP] Inventory: Adjustments edit
closes 

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-02-11 21:14:38 +00:00
mcsi-odoo
5c72ee6f63 [IMP] studio: adding link about accessing studio
Task-3761784

closes 

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Siobhan McGonigle (mcsi) <mcsi@odoo.com>
2025-02-11 15:32:36 +00:00
jero-odoo
123ea24f91 [IMP] Calendar: Outlook calendar configuration
closes 

X-original-commit: f1030c6e9f
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
2025-02-10 20:29:33 +00:00
Paolo Gatti
8495357d6e [IMP] fiscal_localizations: Documentation for l10n_it_riba
Since the feature was released, lots of partners ask for
information/documentation about the RIBA feature.  Add a concise
documentation explaining what users should know.

Ref: 

task-4497749

closes 

X-original-commit: e8305bad12
Related: 
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Paolo Gatti (pgi) <pgi@odoo.com>
2025-02-10 16:24:03 +00:00
afma-odoo
52d8565f02 [IMP] accounting: update payment matching feature
task-3518648

closes 

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-02-10 16:23:53 +00:00
afma-odoo
b6e6515fbf [IMP] accounting: Update customer invoices page for 18.0
task-3416326

closes 

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-02-10 14:51:30 +00:00
Zuzanna Luczynska
49b75e3213 [IMP] project: project dashboard minor corrections
closes 

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-02-10 14:51:27 +00:00
Meet Jivani [MEJI]
bb69f01e71 [IMP] pos_urban_piper: clarify combo product handling
In this commit:
- Added a note explaining that UrbanPiper does not support combo products.
- Users need to create a new product and add combo items as variants to use them
with UrbanPiper.

task-4546712

closes 

Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
2025-02-10 14:51:12 +00:00
Odoo Translation Bot
c7fb228d91 [I18N] Update translation terms from Transifex 2025-02-09 02:41:57 +01:00
Felicious
75f0258d19 [IMP] inventory: CRL - replenishment & visibility days
closes 

X-original-commit: 26f226c51b
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
Co-authored-by: Liz Bender <92882399+benderliz@users.noreply.github.com>
2025-02-08 16:58:49 +00:00
jero-odoo
7e375cfd54 [IMP] Inventory: Adjustments 18.0
closes 

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: larm-odoo <121518652+larm-odoo@users.noreply.github.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
2025-02-08 02:21:02 +00:00
Harsh Modi
853583b0ce [FIX] coding_guidelines: fix the alphabetic orders for the import
In odoo, as we suggest everyone to follow an alphebetic order.

The translator(`_`), ASCII is 95 and `a` ASCII value is 97
which '_' < 'a', the translator should be defined first in the
import before the `api` not at the end of the import

This commits adds an example to import static class `Command`
with a Capital alphabet with a ASCII value of `C` as 67
which will be before than the `_`
'C' < '_' < 'a'

This order of import should be followed while the import

closes 

X-original-commit: c7a6b67a87
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Harsh Modi (hamo) <hamo@odoo.com>
2025-02-07 15:28:27 +00:00
Nicolas Viseur (vin)
d7c0cdddbf [IMP] l10n_vn: SInvoice documentation
Recently, a new module released to support integration of Odoo with SInvoice to support e-invoicing for Vietnam.

task - 3631616

closes 

X-original-commit: 4b123b8464
Signed-off-by: Anne-Françoise Marcq (afma) <afma@odoo.com>
Signed-off-by: Kim Dohyun (kido) <kido@odoo.com>
2025-02-07 03:58:47 +00:00
benderliz
be14393043 [IMP] Inventory: Merged cycle count docs and updated for 17.0
closes 

X-original-commit: 6852e4b980
Signed-off-by: Liz Bender (beli) <benderliz@users.noreply.github.com>
2025-02-06 21:12:24 +00:00
Anita (anko)
6ad97e2fea [IMP] applications/sales: prepare files for future Gelato documentation
task-3935688

closes 

Related: 
Related: 
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2025-02-06 19:56:54 +00:00
evtf-odoo
27acb59d79 [IMP] accounting/l10n_ar: purchase withholding automation
Add new section Withholding Management
Content based on v18

closes 

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Co-authored-by: Liz Bender (beli) <beli@odoo.com>
Co-authored-by: samueljlieber <sali@odoo.com>
Co-authored-by: dade-odoo <87431108+dade-odoo@users.noreply.github.com>
2025-02-06 17:59:33 +00:00
dikd-odoo
a94c8ed498 [IMP] sales: down payment intro
edits from FEKU

SALI edits

remove image

closes 

Signed-off-by: Dina Klarisse Dugar (dikd) <dikd@odoo.com>
2025-02-06 06:30:20 +00:00
jero-odoo
b9e82b8c29 [IMP] Calendar: Google integration update
closes 

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: pabr-odoo <pabr@odoo.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2025-02-06 06:30:18 +00:00
“Chiara
7d4f6dc77a [ADD] accounting: einvoicing for america
closes 

Signed-off-by: Chiara Prattico (chpr) <chpr@odoo.com>
2025-02-05 11:19:47 +00:00
Merel Geens (mege)
44db5c84b3 [FIX] administration: correct Fedora version
The Odoo 17 and 18 RPM builds target Fedora 38 instead of 36:

16: https://github.com/odoo/odoo/blob/16.0/setup/package.dffedora#L3
17: https://github.com/odoo/odoo/blob/17.0/setup/package.dffedora#L3
18: https://github.com/odoo/odoo/blob/18.0/setup/package.dffedora#L3

Note that both Fedora 36 and 38 are EOL:
https://docs.fedoraproject.org/en-US/releases/eol/

closes 

X-original-commit: 24966a91c8
Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com>
2025-02-03 17:46:26 +00:00
mcsi-odoo
a57baa8d09 [IMP] spreadsheet: remove default templates
task-4278043

closes 

X-original-commit: 5cb47dcc92
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Siobhan McGonigle (mcsi) <mcsi@odoo.com>
2025-02-03 11:42:29 +00:00
jero-odoo
968ca03d70 [IMP] inventory: Delivery Methods
closes 

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2025-02-03 10:18:16 +00:00
benderliz
4aca6cd71e [IMP] Inventory: Consignment typo in 16.0
closes 

X-original-commit: 38640aeb0e
Signed-off-by: Liz Bender (beli) <beli@odoo.com>
2025-02-03 10:18:13 +00:00
Odoo Translation Bot
4d3fafe972 [I18N] Update translation terms from Transifex 2025-02-02 02:44:15 +01:00
mcsi-odoo
66022fbb57 [IMP] studio: automated action send whatsapp
task-4442904

closes 

X-original-commit: cafe8b3f4b
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Siobhan McGonigle (mcsi) <mcsi@odoo.com>
2025-01-31 17:51:01 +00:00
Audrey (auva)
7f711c6ef2 [IMP] iot: refactor and update configuration documentation
Restructure and update the iot documentation

closes 

X-original-commit: a6dbcd0a9f
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-01-31 17:50:51 +00:00
Donatienne (dopi)
6bf147384b [IMP] ecommerce: checkout
taskid-4392415

closes 

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-01-31 09:12:40 +00:00
dikd-odoo
2f050805bb [IMP] sales: pricelists tabs
closes 

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-01-30 23:40:12 +00:00
jero-odoo
00eb919fb4 [IMP] General: Email Server Subdomain Limitation
closes 

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2025-01-30 02:09:47 +00:00
Tanya Bouman
b8f2514f93 [FIX] mobile: SS0 -> SSO typo
closes 

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2025-01-29 16:56:15 +00:00
samueljlieber
68d7b8ccc1 [IMP] sales: update simplified pricelist settings
closes 

X-original-commit: a0c8570226
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Dina Klarisse Dugar (dikd) <dikd@odoo.com>
2025-01-29 13:44:02 +00:00
John Holton (hojo)
0fc08e02f8 [ADD] Manufacturing: Lots and serial numbers
closes 

Signed-off-by: John Holton (hojo) <hojo@odoo.com>
2025-01-29 13:43:42 +00:00
Tiffany Chang (tic)
4fc13ed595 [I18N] *: export latest terms
As per usual, leave off developer.pot and contributing.pot since we
don't translate them (not useful, can't really contribute to/dev in
Odoo without knowing English)

closes 

Signed-off-by: Tiffany Chang (tic) <tic@odoo.com>
2025-01-29 07:11:45 +00:00
sjai-odoo
eee06ac7c4 [ADD] integration: barcodelookup documentation
Task-4464181

closes 

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-01-29 05:49:18 +00:00
6275 changed files with 1111393 additions and 312819 deletions
.gitignoreMakefileREADME.mdconf.pyconfig.yaml
content-rst
administration.rst
administration
hosting.rstmobile.rstneutralized_database.rstodoo_accounts.rst
odoo_accounts
odoo_online.rst
odoo_online
odoo_sh.rst
odoo_sh
advanced.rst
advanced
getting_started.rst
getting_started
branches.rst
branches
builds.rst
builds
create.rst
create
first_module.rst
first_module
online-editor.rst
online-editor
settings.rst
settings
status.rst
status
overview.rst
overview
on_premise.rst

1
.gitignore vendored
View File

@ -8,3 +8,4 @@ _build/
# Dependencies
odoo
venv/

View File

@ -14,6 +14,7 @@ ifndef CURRENT_LANG
endif
SPHINX_BUILD = sphinx-build
SPHINX_AUTO_BUILD = sphinx-autobuild
CONFIG_DIR = .
SPHINXOPTS = -D project_root=$(ROOT) -D canonical_version=$(CANONICAL_VERSION) \
-D versions=$(VERSIONS) -D languages=$(LANGUAGES) -D language=$(CURRENT_LANG) \
@ -24,7 +25,18 @@ SPHINXOPTS = -D project_root=$(ROOT) -D canonical_version=$(CANONICAL_VERSIO
-A plausible_domain=$(PLAUSIBLE_DOMAIN) \
-j $(WORKERS)
SOURCE_DIR = content
THEME = extensions/odoo_theme
THEME_STATIC = extensions/odoo_theme/static
LOCALE = locale
STATIC = static
REDIRECTS = redirects
SERVER_IP := $(shell ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
# Get all listening ports
LISTENING_PORTS := $(shell ss -tuln | awk 'NR>1 {print $$4}' | awk -F: '{print $$NF}' | sort -n | uniq)
LOGFILE := $(BUILD_DIR)/live_server.log
# Default port
OPEN_PORTS := $(shell ss -tuln | awk 'NR>1 {print $$4}' | awk -F: '{print $$NF}' | sort -n | uniq)
SELECTED_PORT := $(shell echo "$(OPEN_PORTS)" | awk 'NR==1')
HTML_BUILD_DIR = $(BUILD_DIR)/html
ifdef VERSIONS
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/18.0
@ -52,8 +64,24 @@ clean:
html: $(HTML_BUILD_DIR)/_static/style.css
@echo "Starting build..."
$(SPHINX_BUILD) -c $(CONFIG_DIR) -b html $(SPHINXOPTS) $(SOURCE_DIR) $(HTML_BUILD_DIR)
$(SPHINX_BUILD) -q -c $(CONFIG_DIR) -b html $(SPHINXOPTS) $(SOURCE_DIR) $(HTML_BUILD_DIR)
@echo "Build finished."
html_log: SPHINXOPTS += -A collapse_menu=True
html_log: $(HTML_BUILD_DIR)/_static/style.css
@echo "Starting build..."
$(SPHINX_BUILD) -q -c $(CONFIG_DIR) -b html $(SPHINXOPTS) $(SOURCE_DIR) $(HTML_BUILD_DIR) > $(LOGFILE) 2>&1
@echo "Build finished."
live: SPHINXOPTS += -A collapse_menu=True
live:
@echo "Starting Live Server..."
$(SPHINX_AUTO_BUILD) $(SOURCE_DIR) $(HTML_BUILD_DIR) \
--port 8000 --host $(SERVER_IP) \
--watch $(THEME) --watch $(LOCALE) --watch $(STATIC) --watch $(REDIRECTS) --watch $(THEME_STATIC) --watch . \
--pre-build "sh -c 'mkdir -p $(HTML_BUILD_DIR)/_static && python3 -m pysassc $(THEME)/static/style.scss $(HTML_BUILD_DIR)/_static/style.css'" \
$(SPHINXOPTS) -c $(CONFIG_DIR) -b html
# To call *after* `make html`
# Binary dependencies (Debian): texlive-fonts-recommended texlive-latex-extra
@ -79,7 +107,7 @@ $(HTML_BUILD_DIR)/_static/style.css: extensions/odoo_theme/static/style.scss ext
#=== Development and debugging rules ===#
fast: SPHINXOPTS += -A collapse_menu=True
fast: html
fast: hmlt
static: $(HTML_BUILD_DIR)/_static/style.css
cp -r extensions/odoo_theme/static/* $(HTML_BUILD_DIR)/_static/

View File

@ -1,4 +1,4 @@
# Odoo documentation
# Documentation
## Build the documentation locally

526
conf.py
View File

@ -13,86 +13,92 @@ from sphinx.util import logging
_logger = logging.getLogger(__name__)
#=== General configuration ===#
# === General configuration ===#
# General information about the project.
project = 'Odoo'
copyright = 'Odoo S.A.'
project = "Odoo"
copyright = "Odoo S.A."
# `version` is the version info for the project being documented, acts as replacement for |version|,
# also used in various other places throughout the built documents.
# `release` is the full version, including alpha/beta/rc tags. Acts as replacement for |release|.
version = release = '18.0'
version = release = "18.0"
# `current_branch` is the technical name of the current branch.
# E.g., saas-15.4 -> saas-15.4; 12.0 -> 12.0, master -> master (*).
current_branch = version
# `current_version` is the Odoo version linked to the current branch.
# E.g., saas-15.4 -> 15.4; 12.0 -> 12; master -> master (*).
current_version = current_branch.replace('saas-', '').replace('.0', '')
current_version = current_branch.replace("saas-", "").replace(".0", "")
# `current_major_branch` is the technical name of the major branch before the current branch.
# E.g., saas-15.4 -> 15.0; 12.0 -> 12.0; master -> master (*).
current_major_branch = re.sub(r'\.\d', '.0', current_branch.replace('saas-', ''))
current_major_branch = re.sub(r"\.\d", ".0", current_branch.replace("saas-", ""))
# `current_major_version` is the Odoo version linked to the current major branch.
# E.g., saas-15.4 -> 15; 12.0 -> 12; master -> master (*).
current_major_version = current_major_branch.replace('.0', '')
current_major_version = current_major_branch.replace(".0", "")
# (*): We don't care for master.
# The minimal Sphinx version required to build the documentation.
needs_sphinx = '3.0.0'
needs_sphinx = "3.0.0"
# The default language in which the documentation is written. It is set to `None` because Sphinx
# considers that no language means 'en'.
language = None
# The suffix of source filenames.
source_suffix = '.rst'
source_suffix = {
".md": "markdown",
".rst": "restructuredtext",
}
# The master toctree document.
master_doc = 'index'
master_doc = "index"
# List of patterns, relative to source directory, that match files and directories to ignore when
# looking for source files.
exclude_patterns = [
'locale',
'README.*',
'bin', 'include', 'lib',
'odoo',
"locale",
"README.*",
"bin",
"include",
"lib",
"odoo",
]
# The RST text role to use when the role is not specified. E.g.: `example`.
# We use 'literal' as default role for markdown compatibility: `foo` behaves like ``foo``.
# See https://docutils.sourceforge.io/docs/ref/rst/roles.html#standard-roles for other roles.
default_role = 'literal'
default_role = "literal"
html_copy_source = False
# Whether scaled down images should be be wrapped in a `<a/>` tag linking to the image file or not.
html_scaled_image_link = False
# If true, '()' will be appended to :func: etc. cross-reference text
add_function_parentheses = True
#=== Extensions configuration ===#
# === Extensions configuration ===#
source_read_replace_vals = {
'BRANCH': current_branch,
'CURRENT_BRANCH': current_branch,
'CURRENT_VERSION': current_version,
'CURRENT_MAJOR_BRANCH': current_major_branch,
'CURRENT_MAJOR_VERSION': current_major_version,
'GITHUB_PATH': f'https://github.com/odoo/odoo/blob/{version}',
'GITHUB_ENT_PATH': f'https://github.com/odoo/enterprise/blob/{version}',
'OWL_PATH': f'https://github.com/odoo/owl/blob/master',
"BRANCH": current_branch,
"CURRENT_BRANCH": current_branch,
"CURRENT_VERSION": current_version,
"CURRENT_MAJOR_BRANCH": current_major_branch,
"CURRENT_MAJOR_VERSION": current_major_version,
"GITHUB_PATH": f"https://github.com/odoo/odoo/blob/{version}",
"GITHUB_ENT_PATH": f"https://github.com/odoo/enterprise/blob/{version}",
"OWL_PATH": f"https://github.com/odoo/owl/blob/master",
}
# Add extensions directory to PYTHONPATH
extension_dir = Path('extensions')
extension_dir = Path("extensions")
sys.path.insert(0, str(extension_dir.absolute()))
# Search for the directory of odoo sources to know whether autodoc should be used on the dev doc
odoo_sources_candidate_dirs = (Path('odoo'), Path('../odoo'))
odoo_sources_candidate_dirs = (Path("Odoo18"), Path("../Odoo18"))
# odoo_sources_candidate_dirs = (Path('odoo'), Path('../odoo'))
odoo_sources_dirs = [
d for d in odoo_sources_candidate_dirs if d.is_dir() and (d / 'odoo-bin').exists()
d for d in odoo_sources_candidate_dirs if d.is_dir() and (d / "odoo-bin").exists()
]
odoo_dir_in_path = False
@ -103,20 +109,30 @@ if not odoo_sources_dirs:
"The 'Developer' documentation will be built but autodoc directives will be skipped.\n"
"In order to fully build the 'Developer' documentation, clone the repository with "
"`git clone https://github.com/odoo/odoo` or create a symbolic link.",
{'dir_list': '\n'.join([f'\t- {d.resolve()}' for d in odoo_sources_candidate_dirs])},
{
"dir_list": "\n".join(
[f"\t- {d.resolve()}" for d in odoo_sources_candidate_dirs]
)
},
)
else:
if (3, 6) < sys.version_info < (3, 7):
# Running odoo needs python 3.7 min but monkey patch version_info to be compatible with 3.6.
sys.version_info = (3, 7, 0)
odoo_dir = odoo_sources_dirs[0].resolve()
source_read_replace_vals['ODOO_RELPATH'] = '/../' + str(odoo_sources_dirs[0])
source_read_replace_vals["ODOO_RELPATH"] = "/../" + str(odoo_sources_dirs[0])
sys.path.insert(0, str(odoo_dir))
import odoo.addons
odoo.addons.__path__.append(str(odoo_dir) + '/addons')
from odoo import release as odoo_release # Don't collide with Sphinx's 'release' config option
odoo_version = '.'.join(str(s) for s in odoo_release.version_info[:2]).replace('~', '-') # Change saas~XX.Y to saas-XX.Y
odoo_version = 'master' if 'alpha' in odoo_release.version else odoo_version
odoo.addons.__path__.append(str(odoo_dir) + "/addons")
from odoo import (
release as odoo_release,
) # Don't collide with Sphinx's 'release' config option
odoo_version = ".".join(str(s) for s in odoo_release.version_info[:2]).replace(
"~", "-"
) # Change saas~XX.Y to saas-XX.Y
odoo_version = "master" if "alpha" in odoo_release.version else odoo_version
if release != odoo_version:
_logger.warning(
"Found Odoo sources in %(directory)s but with version '%(odoo_version)s' incompatible "
@ -124,17 +140,23 @@ else:
"The 'Developer' documentation will be built but autodoc directives will be skipped.\n"
"In order to fully build the 'Developer' documentation, checkout the matching branch"
" with `cd odoo && git checkout %(doc_version)s`.",
{'directory': odoo_dir, 'odoo_version': odoo_version, 'doc_version': version},
{
"directory": odoo_dir,
"odoo_version": odoo_version,
"doc_version": version,
},
)
else:
_logger.info(
"Found Odoo sources in %(directory)s matching documentation version '%(version)s'.",
{'directory': odoo_dir, 'version': release},
{"directory": odoo_dir, "version": release},
)
odoo_dir_in_path = True
if odoo_dir_in_path:
upgrade_util_dir = next(filter(Path.exists, [Path('upgrade-util'), Path('../upgrade-util')]), None)
upgrade_util_dir = next(
filter(Path.exists, [Path("upgrade-util"), Path("../upgrade-util")]), None
)
if not upgrade_util_dir:
_logger.warning(
"Could not find Upgrade Utils sources directory in `upgrade_util`.\n"
@ -146,151 +168,165 @@ if odoo_dir_in_path:
else:
_logger.info(
"Found Upgrade Util sources in %(directory)s",
{'directory': upgrade_util_dir.resolve()},
{"directory": upgrade_util_dir.resolve()},
)
from odoo import upgrade
upgrade.__path__.append(str((upgrade_util_dir / 'src').resolve()))
upgrade.__path__.append(str((upgrade_util_dir / "src").resolve()))
# Mapping between odoo models related to master data and the declaration of the
# data. This is used to point users to available xml_ids when giving values for
# a field with the autodoc_field extension.
model_references = {
'account.account.type': 'addons/account/data/data_account_type.xml',
'res.country': 'odoo/addons/base/data/res_country_data.xml',
'res.currency': 'odoo/addons/base/data/res_currency_data.xml',
"account.account.type": "addons/account/data/data_account_type.xml",
"res.country": "odoo/addons/base/data/res_country_data.xml",
"res.currency": "odoo/addons/base/data/res_currency_data.xml",
}
# The Sphinx extensions to use, as module names.
# They can be extensions coming with Sphinx (named 'sphinx.ext.*') or custom ones.
extensions = [
# Link sources in other projects (used to build the reference doc)
'sphinx.ext.intersphinx',
"sphinx.ext.intersphinx",
# Support the specialized to-do directives
'sphinx.ext.todo',
"sphinx.ext.todo",
# Custom Odoo theme
'odoo_theme',
"odoo_theme",
# Youtube and Vimeo videos integration (youtube, vimeo directives)
'embedded_video',
'custom_admonitions',
"embedded_video",
"custom_admonitions",
# Redirection generator
'redirects',
"redirects",
# Content tabs
'sphinx_tabs.tabs',
"sphinx_tabs.tabs",
# Cards
'cards',
# "cards",
# Spoilers
'spoilers',
"spoilers",
# Strange html domain logic used in memento pages
'html_domain',
"html_domain",
"myst_parser",
"sphinx_design",
]
myst_enable_extensions = [
"amsmath",
"colon_fence",
"deflist",
"dollarmath",
"fieldlist",
"html_admonition",
"html_image",
"replacements",
"smartquotes",
"strikethrough",
"substitution",
"tasklist",
]
if odoo_dir_in_path:
# GitHub links generation
extensions += [
'sphinx.ext.linkcode',
'github_link',
"sphinx.ext.linkcode",
"github_link",
# Parse Python docstrings (autodoc, automodule, autoattribute directives)
'sphinx.ext.autodoc',
'autodoc_field',
"sphinx.ext.autodoc",
"autodoc_field",
]
else:
extensions += [
'autodoc_placeholder',
"autodoc_placeholder",
]
extensions.append('sphinx.ext.graphviz' if shutil.which('dot') else 'graphviz_placeholder')
extensions.append(
"sphinx.ext.graphviz" if shutil.which("dot") else "graphviz_placeholder"
)
todo_include_todos = False
intersphinx_mapping = {
'pillow': ('https://pillow.readthedocs.io/en/stable/', None),
'python': ('https://docs.python.org/3/', None),
'werkzeug': ('https://werkzeug.palletsprojects.com/en/2.3.x/', None),
"pillow": ("https://pillow.readthedocs.io/en/stable/", None),
"python": ("https://docs.python.org/3/", None),
"werkzeug": ("https://werkzeug.palletsprojects.com/en/2.3.x/", None),
}
github_user = 'odoo'
github_project = 'documentation'
github_user = "NextERP"
github_project = "documentation"
locale_dirs = ['../locale/']
templates_path = ['../extensions']
locale_dirs = ["../locale/"]
templates_path = ["../extensions"]
# custom docname_to_domain to divide the translations of applications in subdirectories
sphinx.transforms.i18n.docname_to_domain = (
sphinx.util.i18n.docname_to_domain
) = lambda docname, compact: docname.split('/')[1 if docname.startswith('applications/') else 0]
sphinx.transforms.i18n.docname_to_domain = sphinx.util.i18n.docname_to_domain = (
lambda docname, compact: docname.split("/")[
1 if docname.startswith("applications/") else 0
]
)
# The version names that should be shown in the version switcher, if the config option `versions`
# is populated. If a version is passed to `versions` but is not listed here, it will not be shown.
versions_names = {
'master': "Master",
'saas-18.1': "Odoo Online",
'18.0': "Odoo 18",
'saas-17.4': "Odoo Online",
'saas-17.2': "Odoo Online",
'17.0': "Odoo 17",
'16.0': "Odoo 16",
'15.0': "Odoo 15",
"master": "Master",
"saas-18.1": "Odoo Online",
"18.0": "18.0",
"saas-17.4": "Odoo Online",
"saas-17.2": "Odoo Online",
"17.0": "Odoo 17",
"16.0": "Odoo 16",
"15.0": "Odoo 15",
}
# The language names that should be shown in the language switcher, if the config option `languages`
# is populated. If a language is passed to `languages` but is not listed here, it will not be shown.
languages_names = {
'de': 'DE',
'en': 'EN',
'es': 'ES',
'es_419': 'ES (LATAM)',
'fr': 'FR',
'id': 'ID',
'it': 'IT',
'ja': 'JA',
'ko': 'KR',
'nl': 'NL',
'pt_BR': 'PT',
'ro': 'RO',
'sv': 'SV',
'th': 'TH',
'uk': 'UA',
'vi': 'VI',
'zh_CN': 'ZH (CN)',
'zh_TW': 'ZH (TW)'
"de": "DE",
"en": "EN",
"es": "ES",
"es_419": "ES (LATAM)",
"fr": "FR",
"id": "ID",
"it": "IT",
"ja": "JA",
"ko": "KR",
"nl": "NL",
"pt_BR": "PT",
"ro": "RO",
"sv": "SV",
"th": "TH",
"uk": "UA",
"vi": "VI",
"zh_CN": "ZH (CN)",
"zh_TW": "ZH (TW)",
}
# The directory in which files holding redirect rules used by the 'redirects' extension are listed.
redirects_dir = 'redirects/'
redirects_dir = "redirects/"
sphinx_tabs_disable_tab_closing = True
sphinx_tabs_disable_css_loading = True
# Autodoc ordering
autodoc_member_order = 'bysource'
autodoc_member_order = "bysource"
#=== Options for HTML output ===#
# === Options for HTML output ===#
html_theme = 'odoo_theme'
html_theme = "odoo_theme"
# The name of the Pygments (syntax highlighting) style to use.
# See extensions/odoo_theme/pygments_override.py
pygments_style = 'odoo'
pygments_style = "odoo"
# The paths that contain custom themes, relative to this directory.
html_theme_path = ['extensions']
html_theme_path = ["extensions"]
# The name of an image file (within the static path) to use as favicon of the docs.
# This file should be a Windows icon file (.ico) being 16x16 or 32x32 pixels large.
html_favicon = os.path.join(html_theme_path[0], html_theme, 'static', 'img', 'favicon.ico')
html_favicon = os.path.join(
html_theme_path[0], html_theme, "static", "img", "favicon.ico"
)
# The paths that contain custom static files, relative to this directory.
# They are copied after the builtin static files, so a file named "default.css" will overwrite the
# builtin "default.css".
html_static_path = ['static']
html_static_path = ["static"]
html_permalinks = True
# Additional JS & CSS files that can be imported with the 'custom-js' and 'custom-css' metadata.
@ -300,72 +336,131 @@ html_css_files = []
# PHP lexer option to not require <?php
highlight_options = {
'php': {'startinline': True},
"php": {"startinline": True},
}
#=== Options for LaTeX output ===#
# === Options for LaTeX output ===#
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
'papersize': 'a4paper',
"papersize": "a4paper",
# Additional stuff for the LaTeX preamble.
'preamble': r'\usepackage{odoo}',
'tableofcontents': '', # no TOC
"preamble": r"\usepackage{odoo}",
"tableofcontents": "", # no TOC
# Output manually in latex docs
'releasename': release,
"releasename": release,
}
latex_additional_files = ['static/latex/odoo.sty']
latex_additional_files = ["static/latex/odoo.sty"]
# Grouping the document tree into LaTeX files. List of tuples:
# (source start file, target name, title, author, documentclass [howto, manual, or own class]).
latex_documents = [
('legal/terms/enterprise_tex', 'odoo_enterprise_agreement.tex',
'Odoo Enterprise Subscription Agreement', '', 'howto'),
('legal/terms/partnership_tex',
'odoo_partnership_agreement.tex', 'Odoo Partnership Agreement', '', 'howto'),
('legal/terms/terms_of_sale',
'terms_of_sale.tex', 'Odoo Terms of Sale', '', 'howto'),
('legal/terms/i18n/enterprise_tex_fr', 'odoo_enterprise_agreement_fr.tex',
'Odoo Enterprise Subscription Agreement (FR)', '', 'howto'),
('legal/terms/i18n/partnership_tex_fr',
'odoo_partnership_agreement_fr.tex', 'Odoo Partnership Agreement (FR)', '', 'howto'),
('legal/terms/i18n/terms_of_sale_fr', 'terms_of_sale_fr.tex',
'Conditions Générales de Vente Odoo', '', 'howto'),
('legal/terms/i18n/enterprise_tex_nl', 'odoo_enterprise_agreement_nl.tex',
'Odoo Enterprise Subscription Agreement (NL)', '', 'howto'),
('legal/terms/i18n/enterprise_tex_de', 'odoo_enterprise_agreement_de.tex',
'Odoo Enterprise Subscription Agreement (DE)', '', 'howto'),
('legal/terms/i18n/terms_of_sale_de', 'terms_of_sale_de.tex',
'Allgemeine Verkaufsbedingungen Odoo', '', 'howto'),
('legal/terms/i18n/enterprise_tex_es', 'odoo_enterprise_agreement_es.tex',
'Odoo Enterprise Subscription Agreement (ES)', '', 'howto'),
('legal/terms/i18n/partnership_tex_es',
'odoo_partnership_agreement_es.tex', 'Odoo Partnership Agreement (ES)', '', 'howto'),
('legal/terms/i18n/terms_of_sale_es', 'terms_of_sale_es.tex',
'Términos Generales de Venta Odoo', '', 'howto'),
('legal/terms/i18n/enterprise_tex_pt_BR', 'odoo_enterprise_agreement_pt_BR.tex',
'Odoo Enterprise Subscription Agreement (PT)', '', 'howto'),
(
"legal/terms/enterprise_tex",
"odoo_enterprise_agreement.tex",
"Odoo Enterprise Subscription Agreement",
"",
"howto",
),
(
"legal/terms/partnership_tex",
"odoo_partnership_agreement.tex",
"Odoo Partnership Agreement",
"",
"howto",
),
(
"legal/terms/terms_of_sale",
"terms_of_sale.tex",
"Odoo Terms of Sale",
"",
"howto",
),
(
"legal/terms/i18n/enterprise_tex_fr",
"odoo_enterprise_agreement_fr.tex",
"Odoo Enterprise Subscription Agreement (FR)",
"",
"howto",
),
(
"legal/terms/i18n/partnership_tex_fr",
"odoo_partnership_agreement_fr.tex",
"Odoo Partnership Agreement (FR)",
"",
"howto",
),
(
"legal/terms/i18n/terms_of_sale_fr",
"terms_of_sale_fr.tex",
"Conditions Générales de Vente Odoo",
"",
"howto",
),
(
"legal/terms/i18n/enterprise_tex_nl",
"odoo_enterprise_agreement_nl.tex",
"Odoo Enterprise Subscription Agreement (NL)",
"",
"howto",
),
(
"legal/terms/i18n/enterprise_tex_de",
"odoo_enterprise_agreement_de.tex",
"Odoo Enterprise Subscription Agreement (DE)",
"",
"howto",
),
(
"legal/terms/i18n/terms_of_sale_de",
"terms_of_sale_de.tex",
"Allgemeine Verkaufsbedingungen Odoo",
"",
"howto",
),
(
"legal/terms/i18n/enterprise_tex_es",
"odoo_enterprise_agreement_es.tex",
"Odoo Enterprise Subscription Agreement (ES)",
"",
"howto",
),
(
"legal/terms/i18n/partnership_tex_es",
"odoo_partnership_agreement_es.tex",
"Odoo Partnership Agreement (ES)",
"",
"howto",
),
(
"legal/terms/i18n/terms_of_sale_es",
"terms_of_sale_es.tex",
"Términos Generales de Venta Odoo",
"",
"howto",
),
(
"legal/terms/i18n/enterprise_tex_pt_BR",
"odoo_enterprise_agreement_pt_BR.tex",
"Odoo Enterprise Subscription Agreement (PT)",
"",
"howto",
),
]
# List of languages that have legal translations (excluding EN). The keys must be in
# `languages_names`. These translations will have a link to their versions of the legal
# contracts, instead of the default EN one. The main legal documents are not part of the
# translations since they have legal meaning.
legal_translations = ['de', 'es', 'fr', 'nl', 'pt_BR']
legal_translations = ["de", "es", "fr", "nl", "pt_BR"]
# The name of an image file (relative to this directory) to place at the top of the title page.
latex_logo = 'static/img/odoo_logo.png'
latex_logo = "static/img/odoo_logo.png"
# If true, show URL addresses after external links.
latex_show_urls = 'True'
latex_show_urls = "True"
# https://github.com/sphinx-doc/sphinx/issues/4054#issuecomment-329097229
def source_read_replace(app, docname, source):
@ -383,36 +478,42 @@ def source_read_replace(app, docname, source):
result = result.replace(f"{{{key}}}", app.config.source_read_replace_vals[key])
source[0] = result
def setup(app):
# Generate all alternate URLs for each document
app.add_config_value('project_root', None, 'env')
app.add_config_value('canonical_version', None, 'env')
app.add_config_value('versions', None, 'env')
app.add_config_value('languages', None, 'env')
app.add_config_value('is_remote_build', None, 'env') # Whether the build is remotely deployed
app.add_config_value('source_read_replace_vals', {}, 'env')
app.connect('source-read', source_read_replace)
app.add_config_value("project_root", None, "env")
app.add_config_value("canonical_version", None, "env")
app.add_config_value("versions", None, "env")
app.add_config_value("languages", None, "env")
app.add_config_value(
"is_remote_build", None, "env"
) # Whether the build is remotely deployed
app.add_config_value("source_read_replace_vals", {}, "env")
app.connect("source-read", source_read_replace)
# TODO uncomment after moving to >= v7.2.5 to also substitute placeholders in included files.
# See https://github.com/sphinx-doc/sphinx/commit/ff1831
# app.connect('include-read', source_read_replace)
app.add_lexer('json', JsonLexer)
app.add_lexer('xml', XmlLexer)
app.add_lexer("json", JsonLexer)
app.add_lexer("xml", XmlLexer)
app.connect('html-page-context', _generate_alternate_urls)
app.connect("html-page-context", _generate_alternate_urls)
# Add a `condition` option on directives to ignore them based on config values
app.add_config_value('odoo_dir_in_path', None, 'env')
app.add_config_value("odoo_dir_in_path", None, "env")
def context_eval(expr):
return eval(expr, {confval.name: confval.value for confval in app.config})
def patch(to_patch):
to_patch.option_spec['condition'] = context_eval
to_patch.option_spec["condition"] = context_eval
original_run = to_patch.run
def new_run(self):
if not self.options.get('condition', True):
if not self.options.get("condition", True):
return []
return original_run(self)
to_patch.run = new_run
for to_patch in (
@ -423,7 +524,7 @@ def setup(app):
def _generate_alternate_urls(app, pagename, templatename, context, doctree):
""" Add keys of required alternate URLs for the current document in the rendering context.
"""Add keys of required alternate URLs for the current document in the rendering context.
Alternate URLS are required for:
- The canonical link tag
@ -432,7 +533,7 @@ def _generate_alternate_urls(app, pagename, templatename, context, doctree):
"""
def _canonicalize():
""" Add the canonical URL for the current document in the rendering context.
"""Add the canonical URL for the current document in the rendering context.
The canonical version is the last released version of the documentation.
For a given language, the canonical root of a page is in the same language so that web
@ -444,92 +545,117 @@ def _generate_alternate_urls(app, pagename, templatename, context, doctree):
"""
# If the canonical version is not set, assume that the project has a single version
_canonical_version = app.config.canonical_version or app.config.version
_canonical_lang = 'en' # Always 'en'. Don't take the value of the config option.
context['canonical'] = _build_url(_version=_canonical_version, _lang=_canonical_lang)
_canonical_lang = (
"en" # Always 'en'. Don't take the value of the config option.
)
context["canonical"] = _build_url(
_version=_canonical_version, _lang=_canonical_lang
)
def _versionize():
""" Add the pairs of (version, url) for the current document in the rendering context.
"""Add the pairs of (version, url) for the current document in the rendering context.
The entry 'version' is added by Sphinx in the rendering context.
"""
context['version_display_name'] = versions_names[version]
context["version_display_name"] = versions_names[version]
# If the list of versions is not set, assume the project has no alternate version
_provided_versions = app.config.versions and app.config.versions.split(',') or []
_provided_versions = (
app.config.versions and app.config.versions.split(",") or []
)
# Map alternate versions to their display names and URLs.
context['alternate_versions'] = []
context["alternate_versions"] = []
for _alternate_version, _display_name in versions_names.items():
if _alternate_version in _provided_versions and _alternate_version != version:
context['alternate_versions'].append(
if (
_alternate_version in _provided_versions
and _alternate_version != version
):
context["alternate_versions"].append(
(_display_name, _build_url(_alternate_version))
)
def _localize():
""" Add the pairs of (lang, code, url) for the current document in the rendering context.
"""Add the pairs of (lang, code, url) for the current document in the rendering context.
E.g.: ('French', 'fr', 'https://.../fr_BE/...')
The entry 'language' is added by Sphinx in the rendering context.
"""
_current_lang = app.config.language or 'en'
_current_lang = app.config.language or "en"
# Replace the context value by its upper-cased value ("FR" instead of "fr")
context['language'] = languages_names.get(_current_lang, _current_lang.upper())
context['language_code'] = _current_lang
context["language"] = languages_names.get(_current_lang, _current_lang.upper())
context["language_code"] = _current_lang
# If the list of languages is not set, assume that the project has no alternate language
_provided_languages = app.config.languages and app.config.languages.split(',') or []
_provided_languages = (
app.config.languages and app.config.languages.split(",") or []
)
# Map alternate languages to their display names and URLs.
context['alternate_languages'] = []
context["alternate_languages"] = []
for _alternate_lang, _display_name in languages_names.items():
if _alternate_lang in _provided_languages and _alternate_lang != _current_lang:
context['alternate_languages'].append(
if (
_alternate_lang in _provided_languages
and _alternate_lang != _current_lang
):
context["alternate_languages"].append(
(
_display_name,
_alternate_lang.split('_')[0] if _alternate_lang != 'en' else 'x-default',
(
_alternate_lang.split("_")[0]
if _alternate_lang != "en"
else "x-default"
),
_build_url(_lang=_alternate_lang),
)
)
# Dynamic generation of localized legal doc links
context['legal_translations'] = legal_translations
context["legal_translations"] = legal_translations
def _build_url(_version=None, _lang=None):
# print(f"###################################{app.config.is_remote_build}")
# print(f"###################################{app.config.project_root}")
if app.config.is_remote_build:
# Project root like https://www.odoo.com/documentation
_root = app.config.project_root
else:
# Project root like .../documentation/_build/html/14.0/fr
_root = re.sub(rf'(/{app.config.version})?(/{app.config.language})?$', '', app.outdir)
_root = re.sub(
rf"(/{app.config.version})?(/{app.config.language})?$", "", app.outdir
)
# If the canonical version is not set, assume that the project has a single version
_canonical_version = app.config.canonical_version or app.config.version
_version = _version or app.config.version
_lang = _lang or app.config.language or 'en'
_canonical_page = f'{pagename}.html'
_lang = _lang or app.config.language or "en"
_canonical_page = f"{pagename}.html"
# legal translations have different URLs schemes as they are not managed on transifex
# e.g. FR translation of /terms/enterprise => /fr/terms/enterprise_fr
if pagename.startswith('legal/terms/'):
if pagename.startswith("legal/terms/"):
if _lang in legal_translations and not pagename.endswith(f"_{_lang}"):
# remove language code for current translation, set target one
_page = re.sub("_[a-z]{2}$", "", pagename)
if 'terms/i18n' not in _page:
if "terms/i18n" not in _page:
_page = _page.replace("/terms/", "/terms/i18n/")
_canonical_page = f'{_page}_{_lang}.html'
elif _lang == 'en' and pagename.endswith(tuple(f"_{l}" for l in legal_translations)):
_canonical_page = f"{_page}_{_lang}.html"
elif _lang == "en" and pagename.endswith(
tuple(f"_{l}" for l in legal_translations)
):
# remove language code for current translation, link to original EN one
_page = re.sub("_[a-z]{2}$", "", pagename)
_canonical_page = f'{_page.replace("/i18n/", "/")}.html'
if app.config.is_remote_build:
_canonical_page = _canonical_page.replace('index.html', '')
_canonical_page = _canonical_page.replace("index.html", "")
return f'{_root}' \
f'{f"/{_version}" if app.config.versions else ""}' \
f'{f"/{_lang}" if _lang != "en" else ""}' \
f'/{_canonical_page}'
return (
f"{_root}"
f'{f"/{_version}" if app.config.versions else ""}'
f'{f"/{_lang}" if _lang != "en" else ""}'
f"/{_canonical_page}"
)
_canonicalize()
_versionize()

42
config.yaml Normal file
View File

@ -0,0 +1,42 @@
# -d, --dry-run Do not write/remove any files
# -R, --replace-files Remove parsed files
# -S, --stop-on-fail Stop on first failure
# -W, --raise-on-warning Raise exception on parsing warning
# -l, --language TEXT Language code for directive names [default:
# en]
# --sphinx / --no-sphinx Load sphinx. [default: sphinx]
# -e, --extensions TEXT A comma-separated list of sphinx extensions
# to load.
# -dd, --default-domain TEXT Default sphinx domain [default: py]
# -dr, --default-role TEXT Default sphinx role [default: convert to
# literal]
# -cp, --cite-prefix TEXT Prefix to add to citation references
# [default: cite]
# --consecutive-numbering / --no-consecutive-numbering
# Apply consecutive numbering to ordered lists
# [default: consecutive-numbering]
# --colon-fences / --no-colon-fences
# Use colon fences for directives with parsed
# content [default: colon-fences]
# --dollar-math / --no-dollar-math
# Convert math (where possible) to dollar-
# delimited math [default: dollar-math]
# -c, --conversions PATH YAML file mapping directives -> conversions
# --encoding TEXT Encoding for read/write [default: utf8]
# --config FILE YAML file to read default configuration from
# -h, --help Show this message and exit.
language: en
sphinx: true
default_conversion: parse_all
conversions:
docutils.parsers.rst.directives.images.image: parse_all
sphinx.directives.patches.ListTable: parse_all # For tables if needed
extensions:
- sphinx.ext.intersphinx
- sphinx.ext.todo
- sphinx_tabs.tabs
- sphinx_design
default_domain: py
consecutive_numbering: true
colon_fences: true
dollar_math: true

View File

@ -64,4 +64,4 @@ The Odoo mobile apps are available for download on the `Google Play Store
.. important::
The iOS app cannot be updated and will be deprecated at some point in the future.
While the store apps support multi-accounts, they are not compatible with SS0 authentication.
While the store apps support multi-accounts, they are not compatible with SSO authentication.

View File

@ -23,7 +23,7 @@ Edit Security Settings --> Delete Account`. It can also be accessed by going to
Upon clicking the :guilabel:`Delete Account` button, a pop-up window appears, requesting
confirmation for the account deletion.
.. image:: odoo_account/delete-account.png
.. image:: odoo_accounts/delete-account.png
:align: center
:alt: Clicking on the Delete Account button will populate a window verifying the change.

Binary file not shown.

After

(image error) Size: 2.8 KiB

Binary file not shown.

After

(image error) Size: 19 KiB

Binary file not shown.

After

(image error) Size: 6.0 KiB

Binary file not shown.

After

(image error) Size: 72 KiB

Binary file not shown.

After

(image error) Size: 6.1 KiB

Binary file not shown.

After

(image error) Size: 13 KiB

Binary file not shown.

After

(image error) Size: 8.4 KiB

Binary file not shown.

After

(image error) Size: 6.1 KiB

Binary file not shown.

After

(image error) Size: 23 KiB

Binary file not shown.

After

(image error) Size: 4.7 KiB

Binary file not shown.

After

(image error) Size: 66 KiB

Binary file not shown.

After

(image error) Size: 33 KiB

Binary file not shown.

After

(image error) Size: 12 KiB

Binary file not shown.

After

(image error) Size: 40 KiB

Binary file not shown.

After

(image error) Size: 27 KiB

Binary file not shown.

After

(image error) Size: 6.4 KiB

Binary file not shown.

After

(image error) Size: 84 KiB

Binary file not shown.

After

(image error) Size: 78 KiB

Binary file not shown.

After

(image error) Size: 8.3 KiB

Binary file not shown.

After

(image error) Size: 5.6 KiB

Binary file not shown.

After

(image error) Size: 33 KiB

Binary file not shown.

After

(image error) Size: 4.4 KiB

Binary file not shown.

After

(image error) Size: 6.9 KiB

Binary file not shown.

After

(image error) Size: 2.5 KiB

Binary file not shown.

After

(image error) Size: 16 KiB

Binary file not shown.

After

(image error) Size: 7.4 KiB

Binary file not shown.

After

(image error) Size: 12 KiB

Binary file not shown.

After

(image error) Size: 18 KiB

Binary file not shown.

After

(image error) Size: 19 KiB

Binary file not shown.

After

(image error) Size: 24 KiB

Binary file not shown.

After

(image error) Size: 29 KiB

Binary file not shown.

After

(image error) Size: 34 KiB

Binary file not shown.

After

(image error) Size: 13 KiB

Binary file not shown.

After

(image error) Size: 6.9 KiB

Binary file not shown.

After

(image error) Size: 5.2 KiB

Binary file not shown.

After

(image error) Size: 2.0 KiB

Binary file not shown.

After

(image error) Size: 10 KiB

Binary file not shown.

After

(image error) Size: 23 KiB

Binary file not shown.

After

(image error) Size: 10 KiB

Binary file not shown.

After

(image error) Size: 4.9 KiB

Binary file not shown.

After

(image error) Size: 2.8 KiB

Binary file not shown.

After

(image error) Size: 17 KiB

Binary file not shown.

After

(image error) Size: 12 KiB

Binary file not shown.

After

(image error) Size: 24 KiB

Binary file not shown.

After

(image error) Size: 18 KiB

Binary file not shown.

After

(image error) Size: 35 KiB

Some files were not shown because too many files have changed in this diff Show More