Compare commits

...

154 Commits

Author SHA1 Message Date
Armin FalDiS 92ccfc5bef Fix broken links in Discover JS Framework Ch2-P2 2023-09-01 11:55:01 +03:30
Zachary Straub (ZST) ff0eee15c3 [FIX] voip: update broken links, light markup cleaning
closes odoo/documentation#5692

X-original-commit: 2fff805029
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-08-30 23:01:51 +00:00
Andrea Tasselli 44ef78b391 [FIX] developer/tutorials/discover_js_framework: add missing this
closes odoo/documentation#5677

Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-08-30 12:03:28 +00:00
Nur Muhammad Naufaldo cae0edcc83 [FIX] inventory: fix typo
closes odoo/documentation#5593

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-08-30 12:03:25 +00:00
Donatienne Pirlot c60ec48c9d [ADD] forum: create the forum documentation
This PR adds a page describing how to create, use and moderate a forum.
It creates references in the elearning page as karma features are shared.
It removes redundant information from the helpdesk/overview/help_center
page and links back to the more detailed forum page.

task-3283274

closes odoo/documentation#4245

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-08-29 10:12:47 +00:00
arsi 4f677d9d3f [FIX] localizations: guide to tax report to re-connect to HMRC
In the multi-company HMRC submission section, the documentation mentions
that you can connect to HMRC from the user form, after having reset the
credentials.
This is not true, you have to go back to the tax report and click the
"Connect to HMRC" button.

opw-3449939

closes odoo/documentation#5665

X-original-commit: 39c0515208
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Arnaud Sibille (arsi) <arsi@odoo.com>
2023-08-29 08:02:26 +00:00
Odoo Translation Bot 5c4d88a1f0 [I18N] Update translation terms from Transifex 2023-08-27 00:40:46 +02:00
KC (ksc) 5b51f9077a [IMP] fixed duplicate content in the Group By section
closes odoo/documentation#5656

X-original-commit: 575f6040a0
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-08-26 18:09:52 +02:00
“Audrey 4a42a9c327 [IMP] payment_providers/buckaroo: review doc page structure and fix small mistake
task-3382228

closes odoo/documentation#5602

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2023-08-25 17:07:16 +02:00
Tom Aarab (toaa) ac6d78f4d4 [FIX] Stripe: screenshot update
Updated an outdated screenshot from V14 to V15

Forward to master.

taskid-3467638

closes odoo/documentation#5612

X-original-commit: 1c5a9bcb73
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-08-25 09:37:35 +02:00
tiku-odoo ea03bcd579 [IMP] Discuss Team Communication edits
closes odoo/documentation#5634

X-original-commit: b6a3be322c
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-08-25 06:16:58 +02:00
Brandon Seltenrich (BRSE) 46e435dfd3 [FIX] mrp: fix kits note
closes odoo/documentation#5626

X-original-commit: a02022e2fd
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Brandon Seltenrich (brse) <brse@odoo.com>
2023-08-24 22:27:26 +02:00
“Audrey b9cb5ffa1c [FIX] ecommerce: broken link to cross-selling and upselling doc
task-3416686

closes odoo/documentation#5607

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-08-24 20:39:28 +02:00
Tom Aarab (toaa) f74e9568c0 [FIX] PayPal: documentation dead link fix
Fixed a dead URL

taskid-3454286

closes odoo/documentation#5605

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-08-24 19:43:08 +02:00
“tap-odoo”~ 7287989ea4 [ADD] Thailand localisation Documentation
- Added Thailand localisation documentation as it not exist before.
Features were pushed to Odoo 16 already

closes odoo/documentation#5483

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-08-24 17:25:51 +02:00
Antoine (anso) 7ea55ea650 [FIX] odoo_theme: fix logo colors
Before this commit, the Odoo logos used in the documentation were
using the old purple color.

This commit updates all these old logos with the latest version that
can be found on the Odoo brand-asset page

https://www.odoo.com/page/brand-assets

task-3328677

closes odoo/documentation#5598

X-original-commit: 4bec9a6e09
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-08-24 14:55:44 +02:00
Loredana Perazzo ac53c6f12e [FIX] pos: typo in note (stripe)
task-3472802

closes odoo/documentation#5583

Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-08-23 15:58:21 +02:00
Jonathan Castillo (jcs) b559f00948 [REM] support: what_can_i_expect
This page used to be hosted as an "orphan" page in the documentation
repository. It now is displayed on the support form page at
www.odoo.com/help making this page redundant. This commit deletes that
page and a redirection pointing to the support form has been set.

task-3027584

closes odoo/documentation#5577

X-original-commit: fd2c0b8010
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-08-23 14:48:13 +02:00
Felicious c926e34635 [ADD] barcode: GS1 nomenclature
closes odoo/documentation#5567

X-original-commit: 3b2c2376c0
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: meng-odoo <101904966+meng-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2023-08-22 01:18:25 +02:00
Erwin Zoer 7eb22a3737 Update stock_warehouses.rst
closes odoo/documentation#5557

Spelling: whe > the on line 168
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-08-21 22:14:00 +02:00
Odoo Translation Bot 7c050622ed [I18N] Update translation terms from Transifex 2023-08-20 00:40:50 +02:00
Xavier (XPL) 32b92f5959 [FIX] install: fix reference and redirect
closes odoo/documentation#5547

X-original-commit: f1db43b3ac
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-08-19 00:14:55 +02:00
ksc-odoo c0131223e9 [IMP] Sales - Update optional_products.rst
closes odoo/documentation#5412

X-original-commit: 4d95afe86c
Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-08-18 23:14:49 +02:00
Xavier (XPL) da2a48b9fd [REF] install: move intro to main install page and split by install type
This PR moves the introduction about the different installation methods and editions found on the
install/install.rst page directly under the main install/ page. It creates three pages, one per
installation method documented on the install/install.rst page (Docker being documented on
docker.com and maintained by us), and moves the related content there. In addition, it fixes various
typos/grammar issues and improves the content according to the documentation guidelines. Various
references and links across the documentation had to be fixed accordingly.

task-3459070

closes odoo/documentation#5526

X-original-commit: 42a8f492e7
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-08-18 09:50:42 +02:00
KC (ksc) e4ebe9f277 [IMP] sales: updated different addresses doc for RST
closes odoo/documentation#5518

X-original-commit: 84b38b8b09
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2023-08-17 23:43:51 +02:00
Antoine Vandevenne (anv) bb04b18e7f [FIX] tutorials/getting_started: fix typos in example model name
Commit f36c612d13 changed the model name
in Chapter 4 without updating the other occurences.

closes odoo/documentation#5505

X-original-commit: b6f923d111
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-08-17 19:13:24 +02:00
Martin Trigaux 2b6c17eebf [I18N] *: export translations
closes odoo/documentation#5487

X-original-commit: b1b8e0a7ad
Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2023-08-17 16:09:08 +02:00
Jonathan cf4a7a94a1 [IMP] email com: update daily limit
The current default daily limit for one-app free
is 20 mails only. This commit updates the value.

closes odoo/documentation#5504

X-original-commit: c0ca09cdde
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-08-16 18:48:40 +02:00
masi-odoo 98d0d59188 [IMP] accounting/loca: AR add check management section
closes odoo/documentation#4944

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2023-08-14 15:21:03 +02:00
Odoo Translation Bot 8b8c11efa9 [I18N] Update translation terms from Transifex 2023-08-13 00:40:39 +02:00
Sam Lieber (sali) e52d8f172f [REF] l10n: PoC doc restructure for CO
closes odoo/documentation#5472

X-original-commit: c540115eba
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-08-11 18:01:02 +02:00
imanie383 56eed9771e [FIX] reference/owl_components: fix typo
Making edits for Owl Components Doc : [Link](https://www.odoo.com/documentation/16.0/developer/reference/frontend/owl_components.html#example-multi-level-dropdown-nested)

![image](https://github.com/odoo/documentation/assets/35231827/b2dd4b87-941c-4241-b0f5-e91ca69b3633)

closes odoo/documentation#5459

Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-08-11 14:43:56 +02:00
Sam Lieber (sali) 4081ec3f17 [ADD] accounting: l10n_br avalara implementation
closes odoo/documentation#5199

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-08-11 11:01:18 +02:00
tiku-odoo 7babf06b44 [IMP] Misc Oauth Azure Clarification
closes odoo/documentation#5442

X-original-commit: b41d69ae82
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-08-10 00:44:29 +02:00
Lara Martini (larm) 8b1875d5e2 [IMP] Inventory: updating second person and images, add clarity
feku-review-add-headings-and-extra-reference

closes odoo/documentation#5450

X-original-commit: 6cb2ed8abc
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
2023-08-09 22:33:10 +02:00
John Holton (hojo) 4b726b044d [ADD] MRP: Add Scrap during manufacturing
closes odoo/documentation#5372

X-original-commit: 72ba26414b
Signed-off-by: John Holton (hojo) <hojo@odoo.com>
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-08-09 18:46:22 +02:00
Antoine Dupuis (andu) ffa15c6b76 [ADD] l10n_ro_saft: Romanian D.406 monthly/quarterly declaration doc
Since January 1, 2023, Romanian businesses are required to report their
accounting data on a monthly/quarterly basis, in the D.406 declaration.

This is an XML following the SAF-T 2.0 standard, with Romanian-specific
customizations. The new module l10n_ro_saft lets you generate this
declaration from the General Ledger report.

Here's some documentation about how to use this new module! Yay!

closes odoo/documentation#4916

Task-id: 3172198
Related: odoo/odoo#126563
Related: odoo/enterprise#43241
Signed-off-by: Antoine Dupuis (andu) <andu@odoo.com>
2023-08-09 17:46:46 +02:00
Lara Martini (larm) efb7162ca0 [MOV] Payroll: moved configuration doc to main payroll so there is less clicking for users
closes odoo/documentation#5428

X-original-commit: 4fd1f56b33
Signed-off-by: Lara Martini (larm) <larm@odoo.com>
2023-08-09 16:47:56 +02:00
Brandon Seltenrich (BRSE) 943f6b1e7a [IMP] inventory: update inventory adjustments
closes odoo/documentation#5410

X-original-commit: 3da457a501
Signed-off-by: Brandon Seltenrich (brse) <brse@odoo.com>
2023-08-09 15:27:28 +02:00
Victor Feyens e54d5065c8 [ADD] tests: image compression and resource file name checkers
task-2801043

closes odoo/documentation#5362

X-original-commit: f76c28867d
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Co-authored-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-08-09 10:00:41 +02:00
Sam Lieber (sali) 5cd8f80b53 [IMP] marketing: RST upgrades for metrics doc
closes odoo/documentation#5395

X-original-commit: 6f02a0af04
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
2023-08-08 21:59:55 +02:00
Xavier (XPL) 90797b5740 [IMP] sales: correct amazon invoicing and payment registration info
task-2203035

closes odoo/documentation#5371

X-original-commit: bd50b39abf
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-08-08 21:59:51 +02:00
ksc-odoo fdb16b8132 [IMP] Sales - updated Deadline.rst (v14)
closes odoo/documentation#5396

X-original-commit: 5f2725160d
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
2023-08-08 21:01:04 +02:00
Sam Lieber (sali) 29d884c548 [ADD] email marketing: essentials, mailing lists, unsubscriptions
closes odoo/documentation#5385

X-original-commit: 56a291831a
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-08-08 21:01:00 +02:00
Sam Lieber (sali) b1cad7ec29 [IMP] test/rst_style, Makefile: add optional review checkers
task-2801043

closes odoo/documentation#5353

X-original-commit: 8eec0e7634
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-08-08 14:09:36 +02:00
Xavier (XPL) ec33990d21 [IMP] maintain: change info about domain names approval time
Original commit: 4fd1b73013
Original PR: https://github.com/odoo/documentation/pull/5272

closes odoo/documentation#5335

X-original-commit: 45a2d970b7
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-08-08 10:03:28 +02:00
Tom Aarab (toaa) df9adf6d59 [IMP] accounting/credit and debit notes
Forward to master.

Change 16.3 onwards (screenshots)

Improved the doc and added some info on debit notes (was missing).

taskid-3439169

closes odoo/documentation#5265

X-original-commit: 7f75d16f1b
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2023-08-08 09:05:33 +02:00
KC (ksc) acc2c7994a [IMP] sales: invoicing policy doc for RST reasons
closes odoo/documentation#4465

Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
2023-08-07 20:49:50 +02:00
Jonathan d80403e23f [FIX] iot: broken link in troubleshooting.rst
closes odoo/documentation#5314

X-original-commit: 020200abbe
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-08-07 17:13:06 +02:00
Antoine Vandevenne (anv) 22c811b698 [IMP] supported_versions: release saas-16.4
This commit also moves all versions from 8.0 to 12.0 from the table to
the "older versions" section.

closes odoo/documentation#5322

X-original-commit: 6225ef9e32
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-08-07 16:06:02 +02:00
“ralo-odoo” 465e7e70c4 [ADD] localization: philippines-l10n_ph
Adding Philippines localization documentation from PR #5179

closes odoo/documentation#5187

Signed-off-by: Dallas Dean (dade) <dade@odoo.com>
2023-08-07 14:23:05 +02:00
Tom Aarab (toaa) e314289fc4 [IMP] website: "pages" page
Adding a documentation on "pages" within the already existing "page"
toctree

task-3383323

closes odoo/documentation#4871

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Co-authored-by: Toaa <toaa@odoo.com>
Co-authored-by: Auva <auva@odoo.com>
2023-08-07 09:46:16 +02:00
KC (ksc) e807298fbb [IMP] sales: updated get siganture for validation doc for RST formatting
closes odoo/documentation#5298

X-original-commit: 6c38992016
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-08-06 08:51:23 +02:00
Odoo Translation Bot 51406e3d42 [I18N] Update translation terms from Transifex 2023-08-06 00:40:38 +02:00
Lara Martini (larm) 5211a71e44 [ADD] Payroll: adding new configuration doc
closes odoo/documentation#5290

X-original-commit: 8a88ec1dd0
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-08-05 03:02:30 +02:00
Sam Lieber (sali) f93c0a6490 [IMP] marketing: RST format upgrades for marketing automation v14
closes odoo/documentation#5277

X-original-commit: b5bde9186e
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-08-05 03:02:27 +02:00
Lara Martini (larm) 5a2e7b0512 [IMP] Inventory: updated text for 16 and fixed rst errors
closes odoo/documentation#4378

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-08-04 22:28:46 +02:00
tiku-odoo 91895e7f86 [IMP] Misc: Oauth Azure
closes odoo/documentation#5041

closes odoo/documentation#5250

X-original-commit: 66b2a3d50e
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
2023-08-02 23:09:57 +02:00
John Holton (hojo) 7c1bcbfc1b [IMP] Inventory: Update Multi-package shipments doc
closes odoo/documentation#5241

X-original-commit: 7df2d749a8
Signed-off-by: John Holton (hojo) <hojo@odoo.com>
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-08-02 04:09:20 +02:00
Odoo Translation Bot e3c5cc2784 [I18N] Update translation terms from Transifex 2023-07-30 00:40:41 +02:00
“Chiara 8d25366adb [ADD] l10n: saudi arabia e-invoicing
task-3422500

closes odoo/documentation#5228

X-original-commit: fd2a9431ce
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-28 16:11:59 +02:00
Xavier (XPL) 4cb7b3af3d [IMP] payments: update ACH section content to match 16.0
closes odoo/documentation#5209

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-26 15:15:42 +02:00
Xavier (XPL) 8c03442791 [IMP] accounting: year-end closing
task-2823858

closes odoo/documentation#5203

X-original-commit: 7ba101ffd5
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-26 12:53:17 +02:00
Martin Trigaux 223bfaee7c [I18N] *: export translations
closes odoo/documentation#5194

X-original-commit: ac3e48eb2b
Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2023-07-25 17:30:12 +02:00
Xavier (XPL) 6ed928ac55 [IMP] payments: add section about ACH payments
task-3303591

closes odoo/documentation#5192

X-original-commit: 0155844ef5
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-25 17:30:09 +02:00
Levi Siuzdak (sile) a7743d513b [IMP] developer: add notes on entity references & fix illegal XML
Using `<` inside XML elements will result in a parsing error,
an entity reference should be used instead: `&lt;`.

closes odoo/documentation#5159

Signed-off-by: Levi Siuzdak (sile) <sile@odoo.com>
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-07-24 14:37:53 +02:00
Odoo Translation Bot 471d68e186 [I18N] Update translation terms from Transifex 2023-07-23 00:40:49 +02:00
Tom Aarab (toaa) c2ff2671ff [IMP] accounting: multicurrency
Changed the "bank statement" section to "bank transactions"

taskid-3433653

closes odoo/documentation#5167

X-original-commit: eff6743924
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2023-07-20 15:47:45 +02:00
“Dallas” 26c4c01889 [IMP] accounting: update payment terms
task-3211595

closes odoo/documentation#5016

Signed-off-by: Dallas Dean (dade) <dade@odoo.com>
2023-07-20 11:55:35 +02:00
Xavier (XPL) 5ee932e14b [IMP] general: add screenshot of stacked line chart in reporting
task-3375264

closes odoo/documentation#5147

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-18 16:39:40 +02:00
Donatienne Pirlot 2e9c99c941 [ADD] elearning: creating a new elearning doc page
To add updated information related to the elearning app

closes odoo/documentation#4153

Id: 3251391
Signed-off-by: Donatienne Pirlot (dopi) <dopi@odoo.com>
2023-07-18 16:39:21 +02:00
chyde-clearwater bd434b0528 [IMP] tutorials/getting_started: disambiguate example model name
I removed the dot notation in the  "_name" variable for the example
model. AKA, "test.model" is now named "test_model".

Dot notation implies a data structure relationship between a <model> and
it's parent (or class etc) <test> (like test.model() or Test.model).
There is no relationship like this between a <test> and <model> - it's
just one thing: a <test model>.

The seeming "benefit" of the ORM translating dots to underscores doesn't
justify this naming convention.  Yes, I know it's a string, but still,
this seems confusing for newbies and adds unnecessary complexity (why
name the same thing differently in different places?)

closes odoo/documentation#5137

X-original-commit: f36c612d13
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-07-18 12:53:34 +02:00
Louis Wicket 1227c9cf79 [FIX] incoterms: fix typo: DPA → DAP
closes odoo/documentation#5134

Signed-off-by: Louis Wicket (wil) <wil@odoo.com>
2023-07-18 11:37:32 +02:00
Odoo Translation Bot 10e6f02841 [I18N] Update translation terms from Transifex 2023-07-16 00:40:48 +02:00
Henrique Dias 0a65b0872d [ADD] rpc: Go examples
Examples rely on `kolo/xmlrpc` as well as on the standard library package `log` to panic on error, matching snippets in other languages (which tend to raise exceptions).

As with other languages, only the RPC interaction is spelled out.

closes odoo/documentation#5064

Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
2023-07-14 10:11:48 +02:00
Loredana Perazzo 7ce5a5afe4 [IMP] pos: move part of the intro into generate tab
task-3372676

closes odoo/documentation#5111

X-original-commit: d5466bea0d
Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
2023-07-13 14:11:34 +02:00
Marc Durepos c85031b3fc [FIX] Remove reference to assets_qweb in assets.rst
Reflects the fact that assets_qweb bundle is no longer used in 16.0

closes odoo/documentation#5094

Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-07-13 10:40:51 +02:00
Jess Rogers (jero) a187b7cde4 [IMP] live chat: add note for 16.3 command changes
closes odoo/documentation#5086

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-07-13 05:02:55 +02:00
Lara Martini (larm) 29db8bf1e6 [IMP] Inventory: update for 16
closes odoo/documentation#4377

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-07-13 05:02:53 +02:00
John Holton (hojo) 222fd67d7f [DEL] MRP: Delete Alternative Work Centers 16.0
closes odoo/documentation#4838

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-07-13 03:54:39 +02:00
Odoo's Mergebot 7d8072ea29 [FIX] install: remove duplicate note
The notes displayed before and after the tabs under the Git paragraph in `install.rst` were identical, except for one sentence. Added the sentence to the post-tabs note and removed the pre-tabs one.

closes odoo/documentation#5087

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-12 18:08:15 +02:00
Aymen Sellami 481a867a05 Remove duplicate note
The notes displayed before and after the tabs under the Git paragraph in install.rst were identical, except for one sentence. Added the sentence to the post-tabs note and removed the pre-tabs one.

Part-of: odoo/documentation#5087
2023-07-12 18:08:14 +02:00
Xavier (XPL) 22d45407c4 [IMP] payments: clarify authorize.net statement import steps
task-2382237

closes odoo/documentation#5073

X-original-commit: cd2bc63b22
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-10 20:44:28 +02:00
Martin Trigaux b82d36c174 [I18N] *: export translations
closes odoo/documentation#5046

X-original-commit: 640b9f46e8
Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2023-07-10 08:10:56 +02:00
Odoo Translation Bot bbe9d4ba93 [I18N] Update translation terms from Transifex 2023-07-09 00:40:45 +02:00
Antoine Vandevenne (anv) 9db7381ea4 [FIX] odoo_theme/switchers: fallback to the original target URL
Attempting to switch from one version to another when navigating
<old_version>/applications/hr/employees.html led to the user being
redirected to /applications/documentation/<new_version>/hr/employees.html
because `hr` was interpreted as a version string, and thus the generated
target URLs of the version switcher were all wrong.

This commit ensures the redirection now falls back onto the original
target URL when all the generated ones point to a 404.

closes odoo/documentation#5055

X-original-commit: c81a91db9c
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-07-07 16:59:08 +02:00
Tom Aarab (toaa) ca38752795 [IMP] authorize.net statement import
taskid-2382237

closes odoo/documentation#5052

X-original-commit: 087f8c096d
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2023-07-07 15:51:47 +02:00
Zuzanna Luczynska dd268b543c [ADD] project: recurring tasks
closes odoo/documentation#4260

Id: 3255317
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-07 11:19:54 +02:00
Xavier (XPL) bc0da5c27d [IMP] accounting: l10n chile deliver guides warning
task-3410367

closes odoo/documentation#5026

X-original-commit: b729d05e57
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-05 16:33:17 +02:00
tong-odoo 35989e4bec [FIX] accounting: AU rebrands Keypay to Employment Hero
task-3250954

closes odoo/documentation#5020

X-original-commit: ee3634d623
Related: odoo/enterprise#43656
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
Signed-off-by: Tommy Ng (tong) <tong@odoo.com>
2023-07-05 09:48:04 +02:00
Brandon Seltenrich (BRSE) dc9e98d48d [IMP] purchase: update manage vendor bills
closes odoo/documentation#5008

X-original-commit: 688220bb51
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Brandon Seltenrich (brse) <brse@odoo.com>
2023-07-03 20:21:52 +02:00
Xavier 5af98b20de [IMP] maintain: odoo online database management
task-2995394

closes odoo/documentation#5002

X-original-commit: c6e6401e36
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-03 20:21:49 +02:00
tong-odoo 1844ad5e47 [IMP] localization: AU rebrands Keypay to Employment Hero
task-3250954

closes odoo/documentation#4994

X-original-commit: 35fc637ed4
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-07-03 20:21:44 +02:00
Martin Trigaux 11d8c153e2 [I18N] *: export source terms
closes odoo/documentation#4986

Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2023-07-03 12:16:11 +02:00
AMZIL Ayoub f3e3490ba4 [DOC] cleanup of pec server documentation
PEC Server is removed from 16 (onwards)

closes odoo/documentation#4953

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-03 12:16:08 +02:00
Odoo Translation Bot 9c9e78246e [I18N] Update translation terms from Transifex 2023-07-02 00:40:29 +02:00
John Holton (hojo) 22f71172d5 [ADD] Inventory: Add Replenish on order (MTO)
closes odoo/documentation#4980

X-original-commit: d9ece7b353
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-07-01 19:09:23 +02:00
John Holton (hojo) 18e5f34ed6 [ADD] Inventory: Add reordering rules
closes odoo/documentation#4973

X-original-commit: eb347c2681
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-07-01 18:06:16 +02:00
John Holton (hojo) da31abfba5 [ADD] MRP: Work center time off
closes odoo/documentation#4962

X-original-commit: 18a9b88a11
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-07-01 18:06:14 +02:00
Jess Rogers (jero) 729881c7b1 [ADD] livechat: added chatbot doc
closes odoo/documentation#4297

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-07-01 04:31:47 +02:00
Lara Martini (larm) 710c373354 [IMP] Inventory: updated images and removed edit and save directions
closes odoo/documentation#4879

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-30 21:31:44 +02:00
John Holton (hojo) 6c15190f38 [IMP] Administration: Rewrite Upgrade Odoo SaaS
closes odoo/documentation#4947

X-original-commit: 45b1a62782
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-06-30 10:20:50 +02:00
Tom Aarab (toaa) ba3a60adf7 [IMP] accounting: checks
task-2979887

closes odoo/documentation#4938

X-original-commit: 6e0d01771b
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2023-06-29 12:12:50 +02:00
Xavier 88da0a9256 [FIX] accounting: remove fullscreen property from tutorial link
task-3389168

closes odoo/documentation#4932

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-06-28 13:05:03 +02:00
Xavier 2e90b83b0e [ADD] website: reCAPTCHA
task-3336129

closes odoo/documentation#4915

X-original-commit: eb8a257049
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-06-28 10:06:47 +02:00
Timothy Kukulka (tiku) e6372144cf [IMP] IoT: edits to all IoT docs
closes odoo/documentation#4923

X-original-commit: e7457c992b
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-28 09:03:01 +02:00
Jess Rogers (jero) e8aaefd283 [IMP] livechat: update commands and canned responses
closes odoo/documentation#4059

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
2023-06-28 04:11:43 +02:00
Benoit Socias 1c98265c95 [FIX] howto/rdtraining: ch.13 adapt reference to salesperson field
In chapter 13 the `property_ids` field is defined as the inverse of a
`user_id` field. But in chapter 8 when the salesperson field is added,
no such name is given to it.

This commit adapts the description to reference the general concept of
the field used to link to the salesperson instead of an actual field
identifier.

task-3381757

closes odoo/documentation#4905

X-original-commit: 3a131c829a
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-06-27 16:07:02 +02:00
Benoit Socias 77fe26c390 [IMP] developer/views: add optional attribute for fields of list views
The attributes of fields of list views do not mention the `optional`
attribute while it is used by chapter 12 of the R&D Training.

This commit describes this `optional` attribute.

task-3380953

closes odoo/documentation#4904

X-original-commit: 5a446f5c59
Signed-off-by: Benoit Socias (bso) <bso@odoo.com>
2023-06-27 16:07:00 +02:00
KC (ksc) 023e03549a [IMP] sales: updated down payment doc for RST and image reasons
closes odoo/documentation#4893

X-original-commit: 802dc467de
Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-27 00:52:47 +02:00
Brandon Seltenrich (BRSE) 7a53850477 [IMP] inventory: update expiration dates doc
closes odoo/documentation#4886

X-original-commit: 49029eda37
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Brandon Seltenrich (brse) <brse@odoo.com>
2023-06-26 23:00:01 +02:00
Lara Martini (larm) 1e201095b3 [ADD] Employees: anning a new employee
closes odoo/documentation#4854

X-original-commit: 547ad6fca5
Signed-off-by: Lara Martini (larm) <larm@odoo.com>
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-26 20:03:51 +02:00
Jess Rogers (jero) c24f4b237e [IMP] live chat:update getting started doc
closes odoo/documentation#4024

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
2023-06-26 17:19:28 +02:00
Odoo Translation Bot b19ba95d0e [I18N] Update translation terms from Transifex 2023-06-25 00:40:30 +02:00
Lara Martini (larm) 0e128b803d [IMP] inventory: update strategies second person and images
closes odoo/documentation#4865

X-original-commit: 6201ee8760
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-24 03:48:14 +02:00
Jess Rogers (jero) bafe824f38 [IMP] helpdesk: update help center documentation
closes odoo/documentation#3864

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-23 22:43:37 +02:00
Xavier 1853f226e7 [ADD] Spreadsheet: templates
task-3235170

closes odoo/documentation#3985

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Co-authored-by: Xavier <xpl@odoo.com>
Co-authored-by: Loredana <lrpz@odoo.com>
2023-06-22 22:56:47 +02:00
Lara Martini (larm) 0433e84a0c [IMP] Expenses: updating for new 16 design
closes odoo/documentation#4702

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-22 00:48:28 +02:00
Felicious 4c750d1bb7 [IMP] inventory: adjust manual val for v.16
closes odoo/documentation#4091

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
2023-06-21 23:38:51 +02:00
Jonathan 1a5952ee95 [IMP] accounting: add tutorials links to chart of accounts
closes odoo/documentation#4831

X-original-commit: a85e064ffc
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-06-21 22:29:41 +02:00
John Holton (hojo) 19b1a49436 [DEL] MRP: Delete Quality Control doc
closes odoo/documentation#4810

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2023-06-21 21:20:22 +02:00
Donatienne Pirlot 242c13bfc0 [ADD] localization: belgian accounting
closes odoo/documentation#3442

Id: 3143421
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-06-21 18:41:45 +02:00
Jonathan 3ba81b3394 [FIX] discuss: broken link in ice_servers.rst
closes odoo/documentation#4821

X-original-commit: 8efbe3ef84
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-06-21 17:29:06 +02:00
Lara Martini (larm) e074580ffb [IMP] Inventory: Updating for 16.0 no save button
closes odoo/documentation#4573

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-20 23:16:15 +02:00
Christophe Monniez eb6c567ee2 [FIX] deploy: reference the config parameter
The deploy documentation is assuming that `/etc/odoo.conf` is the
default config file, which is not the case.

With this commit, the configuration file references the cli
documentation.

closes odoo/documentation#4804

X-original-commit: 8aed7988ba
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Christophe Monniez (moc) <moc@odoo.com>
2023-06-20 15:42:14 +02:00
Christophe Monniez 9f8bf0a307 [IMP] maintain: switch to enterprise windows
* Update the title as `Upgrade Community to Enterprise` is confusing.
* Update 9.0 screenshots to more recent ones
* As the windows installer uses a real python interpreter, the install
  command is updated accordingly.

X-original-commit: f03b4ca649
Part-of: odoo/documentation#4804
2023-06-20 15:42:14 +02:00
Loredana Perazzo b745bd9fef [IMP] pos: write content on the Payment Terminals page
task-3358474

closes odoo/documentation#4793

X-original-commit: 573d201361
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
Signed-off-by: Perazzo Loredana (lrpz) <lrpz@odoo.com>
2023-06-20 10:45:40 +02:00
Antoine Vandevenne (anv) 35deec4c3d [FIX] legal: fix broken PDF link
Apply the fix of e6aa5dd0 to `terms_of_sale.rst` and
`terms_of_sale_fr.rst` that were forgotten.

closes odoo/documentation#4787

X-original-commit: 8cffb57dae
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-06-19 18:22:52 +02:00
Odoo Translation Bot d084c105d9 [I18N] Update translation terms from Transifex 2023-06-18 00:40:40 +02:00
“Dallas” cf5a3276c9 [MOV] accounting: update/move customer addresses to accounting
task-3304975

closes odoo/documentation#4772

Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-16 19:02:46 +02:00
KC (ksc) 5c3e8d5919 [IMP] sales: updated pro-forma invoice doc
closes odoo/documentation#4758

X-original-commit: 3e4e8acfed
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-16 16:25:55 +02:00
Sam Lieber (sali) e57ca4dbf7 [IMP] marketing: testing_running.rst format fixes
closes odoo/documentation#4747

X-original-commit: 4b327417b0
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-16 16:25:52 +02:00
Sam Lieber (sali) a26d370017 [IMP] marketing: workflow_activities.rst - Format fixes
closes odoo/documentation#4746

X-original-commit: a09ca7bd0f
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-16 16:25:49 +02:00
Sam Lieber (sali) 1bc87e1486 [IMP] Update rst for target_audiences.rst (v14)
closes odoo/documentation#4737

X-original-commit: 89c1c1b357
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-16 09:18:57 +02:00
“Audrey 394246d043 [IMP] Payment providers - Stripe: Add missing webhook events
task-3373642

closes odoo/documentation#4732

Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-06-16 09:18:49 +02:00
Martin Trigaux eb68fc18d5 [I18N] *: export 16.0 source terms
closes odoo/documentation#4731

Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2023-06-16 09:18:46 +02:00
Xavier 7ddbeb9223 [IMP] accounting/sales: default terms and conditions + quotation templates
task-3304938

closes odoo/documentation#4442

Signed-off-by: Platteau Xavier (xpl) <xpl@odoo.com>
2023-06-15 20:46:24 +02:00
“Audrey 1f2f11c42b [FIX] Adyen: Fix live/test URLs
closes odoo/documentation#4722

X-original-commit: 52bf00663e
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
Signed-off-by: auva-odoo <auva@odoo.com>
2023-06-15 01:29:04 +02:00
Tom Aarab (toaa) a7bd0be69c [IMP] payment providers: PayPal
taskid-3184602.

16.0 -> Change extra fees category to :ref: main page payment provider
16.2 -> Remove Odoo credentials section
        Remove PDT identity token
        Remove merchant ID note
        Remove test mode section on environment test

Took the opportunity to redo the whole page.

closes odoo/documentation#4718

X-original-commit: bf327d9200
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2023-06-14 23:12:11 +02:00
Tom Aarab (toaa) 0494082a55 [IMP] accounting: OSS report
Added a section on where to find OSS reports and how to export them

task-3305037

closes odoo/documentation#4696

X-original-commit: b675584730
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2023-06-12 18:06:56 +02:00
“Audrey 9e453285d0 [IMP] Website: Multiple websites
task-3190493

closes odoo/documentation#4509

Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-12 18:06:28 +02:00
Loredana Perazzo ee4b279e7c [IMP] pos: update the register customers section
task-3357882

closes odoo/documentation#4693

Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
Signed-off-by: Perazzo Loredana (lrpz) <lrpz@odoo.com>
2023-06-12 09:54:10 +02:00
Odoo Translation Bot 22fe8f41b3 [I18N] Update translation terms from Transifex 2023-06-11 00:40:38 +02:00
Tom Aarab (toaa) 256ddb30ab [IMP] accounting: follow-up reports
task-3316301.

closes odoo/documentation#4497

X-original-commit: 48f3417b7c
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-09 19:19:39 +02:00
Morfosys d7bb5af3cd [IMP] l10n: update links in mexico.rst
Update the link for Smarter Web to the appropriate landing page for
Odoo.

closes odoo/documentation#4682

X-original-commit: 7510b4bb23
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-09 15:26:34 +02:00
Benjamin Hanquin 83806263df [IMP] odoo.sh: settings collaborators access matrix
Add the Upgrade submenu, Fix the Settings submenu to User only in
staging branches and improve the style in order to be similar to
supported versions matrix
(https://www.odoo.com/documentation/16.0/administration/maintain/supported_versions.html)

closes odoo/documentation#4681

X-original-commit: 98207740d5
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-09 15:26:31 +02:00
Xavier-Do 2520f589d5 [FIX] werkzeug version
https://werkzeug.palletsprojects.com/en/1.0.x/objects.inv now returns a
404.
2023-06-09 01:22:23 +02:00
Lara Martini (larm) 8274035b88 [IMP] Expenses: updaitng out of date information and images
closes odoo/documentation#4553

closes odoo/documentation#4665

X-original-commit: 01f40f24ba
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-08 22:39:46 +02:00
“Audrey 35d355f624 [IMP] Adyen: Update directions for setting the URLs
task-3338125

closes odoo/documentation#4644

X-original-commit: e3379e2856
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: auva-odoo <auva@odoo.com>
2023-06-08 09:26:42 +02:00
Loredana Perazzo e3665393c3 [IMP] pos: update multi employees management
task-3005118

closes odoo/documentation#4558

Signed-off-by: Perazzo Loredana (lrpz) <lrpz@odoo.com>
2023-06-08 07:20:40 +02:00
Brandon Seltenrich (BRSE) 0cfa38785d [FIX] inventory: fix two step doc
closes odoo/documentation#4648

X-original-commit: c9dcbf6d01
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Brandon Seltenrich (brse) <brse@odoo.com>
2023-06-07 21:35:24 +02:00
Jonathan Castillo (jcs) 65929330ba [MOV] accounting: rename VAT verification filename and title
closes odoo/documentation#4636

X-original-commit: 5c578d627a
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-06 20:01:21 +02:00
Antoine Vandevenne (anv) 5d7ccb0616 [IMP] supported_versions: release saas-16.3
"September" didn't fit in the current table, so this commit also
replaces the previous implementation of the table by a `list-table`
directive... The real reason is that it was long due to ease future
updates of the table.

closes odoo/documentation#4625

X-original-commit: 3d1293757a
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-06-06 10:55:25 +02:00
Odoo Translation Bot daf5ef7a43 [I18N] Update translation terms from Transifex 2023-06-04 00:40:43 +02:00
1004 changed files with 543205 additions and 158976 deletions
+9
View File
@@ -84,5 +84,14 @@ static: $(HTML_BUILD_DIR)/_static/style.css
cp -r extensions/odoo_theme/static/* $(HTML_BUILD_DIR)/_static/
cp -r static/* $(HTML_BUILD_DIR)/_static/
# Called by runbot for the ci/documentation_guideline check.
test:
@python tests/main.py $(SOURCE_DIR)/administration $(SOURCE_DIR)/applications $(SOURCE_DIR)/contributing $(SOURCE_DIR)/developer $(SOURCE_DIR)/services redirects
# Similar as `test`, but called only manually by content reviewers to trigger extra checks.
review:
@read -p "Enter content path: " path; read -p "Enter max line length (default: 100): " line_length; \
if [ -z "$$path" ]; then echo "Error: Path cannot be empty"; exit 1; fi; \
if [ -z "$$line_length" ]; then line_length=100; fi; \
export REVIEW=1; \
python tests/main.py --max-line-length=$$line_length $(SOURCE_DIR)/$$path
+3 -1
View File
@@ -195,7 +195,7 @@ 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/1.0.x/', None),
'werkzeug': ('https://werkzeug.palletsprojects.com/en/2.3.x/', None),
}
github_user = 'odoo'
@@ -213,6 +213,8 @@ sphinx.transforms.i18n.docname_to_domain = (
# is populated. If a version is passed to `versions` but is not listed here, it will not be shown.
versions_names = {
'master': "Master",
'saas-16.4': "Odoo Online",
'saas-16.3': "Odoo Online",
'saas-16.2': "Odoo Online",
'saas-16.1': "Odoo Online",
'16.0': "Odoo 16",
+41 -6
View File
@@ -1,14 +1,49 @@
:nosearch:
:show-content:
=======
Install
=======
.. If you add content on this page, remove the redirect rule 'install -> install/install'
Depending on the intended use case, there are multiple ways to install Odoo - or not install it at
all.
- :doc:`Online <install/online>` is the easiest way to use Odoo in production or to try it.
- :doc:`Packaged installers <install/packages>` are suitable for testing Odoo and developing
modules. They can be used for long-term production with additional deployment and maintenance
work.
- :doc:`Source install <install/source>` provides greater flexibility, as it allows, for example,
running multiple Odoo versions on the same system. It is adequate to develop modules and can be
used as a base for production deployment.
- A `Docker <https://hub.docker.com/_/odoo/>`_ base image is available for development or
deployment.
.. _install/editions:
Editions
========
There are two different editions.
**Odoo Community** is the free and open-source version of the software, licensed under the `GNU
LGPLv3 <https://github.com/odoo/odoo/blob/master/LICENSE>`_. It is the core upon which Odoo
Enterprise is built.
**Odoo Enterprise** is the shared source version of the software, giving access to more
functionalities, including functional support, upgrades, and hosting. `Pricing
<https://www.odoo.com/pricing-plan>`_ starts from one app free.
.. tip::
:doc:`Switch from Community to Enterprise <maintain/enterprise>` at any time (except for the
source install).
.. toctree::
install/install
install/deploy
install/cdn
install/email_gateway
install/online
install/packages
install/source
install/deploy
install/cdn
install/email_gateway
+7 -7
View File
@@ -3,7 +3,7 @@ System configuration
====================
This document describes basic steps to set up Odoo in production or on an
internet-facing server. It follows :ref:`installation <setup/install>`, and is
internet-facing server. It follows :doc:`installation <../install>`, and is
not generally necessary for a development systems that is not exposed on the
internet.
@@ -43,7 +43,7 @@ Configuration samples
* Show only databases with names beginning with 'mycompany'
in ``/etc/odoo.conf`` set:
in :ref:`the configuration file <reference/cmdline/config_file>` set:
.. code-block:: ini
@@ -55,7 +55,7 @@ in ``/etc/odoo.conf`` set:
was sent to ``www.mycompany.com`` or ``mycompany.co.uk``, but not
for ``www2.mycompany.com`` or ``helpdesk.mycompany.com``.
in ``/etc/odoo.conf`` set:
in :ref:`the configuration file <reference/cmdline/config_file>` set:
.. code-block:: ini
@@ -123,7 +123,7 @@ Out of the box, Odoo connects to a local postgres over UNIX socket via port
<reference/cmdline/server/database>` when your Postgres deployment is not
local and/or does not use the installation defaults.
The :ref:`packaged installers <setup/install/packaged>` will automatically
The :doc:`packaged installers <packages>` will automatically
create a new user (``odoo``) and set it as the database user.
* The database management screens are protected by the ``admin_passwd``
@@ -150,7 +150,7 @@ Configuration sample
* with 'pwd' as a password
* filtering only db with a name beginning with 'mycompany'
in ``/etc/odoo.conf`` set:
in :ref:`the configuration file <reference/cmdline/config_file>` set:
.. code-block:: ini
@@ -238,7 +238,7 @@ Configuration sample
* We'll use 8 workers + 1 for cron. We'll also use a monitoring system to measure cpu load, and check if it's between 7 and 7.5 .
* RAM = 9 * ((0.8*150) + (0.2*1024)) ~= 3Go RAM for Odoo
in ``/etc/odoo.conf``:
in :ref:`the configuration file <reference/cmdline/config_file>`:
.. code-block:: ini
@@ -273,7 +273,7 @@ Configuration sample
* Redirect http requests to https
* Proxy requests to odoo
in ``/etc/odoo.conf`` set:
in :ref:`the configuration file <reference/cmdline/config_file>` set:
.. code-block:: ini
-752
View File
@@ -1,752 +0,0 @@
.. _setup/install:
===============
Installing Odoo
===============
There are multiple ways to install Odoo, or not install it at all, depending
on the intended use case.
This documents attempts to describe most of the installation options.
:ref:`setup/install/online`
The easiest way to use Odoo in production or to try it.
:ref:`setup/install/packaged`
Suitable for testing Odoo, developing modules and can be used for
long-term production use with additional deployment and maintenance work.
:ref:`setup/install/source`
Provides greater flexibility: e.g. allow multiple running Odoo versions on
the same system. Good for developing modules, can be used as base for
production deployment.
:ref:`setup/install/docker`
If you usually use docker_ for development or deployment, an official
docker_ base image is available.
.. _setup/install/editions:
Editions
========
There are two different Editions_ of Odoo: the Community and Enterprise versions.
Using the Enterprise version is possible on `Odoo Online`_ and accessing the code is
restricted to Enterprise customers and partners. The Community version is freely
available to anyone.
If you already use the Community version and wish to upgrade to Enterprise, please
refer to :ref:`setup/enterprise` (except for :ref:`setup/install/source`).
.. _setup/install/online:
Online
======
Demo
----
To simply get a quick idea of Odoo, demo_ instances are available. They are
shared instances which only live for a few hours, and can be used to browse
around and try things out with no commitment.
Demo_ instances require no local installation, just a web browser.
Odoo Online
-----------
Trivial to start with, fully managed and migrated by Odoo S.A., `Odoo Online`_
provides private instances and starts out free. It can be used to discover and
test Odoo and do non-code customizations (i.e. incompatible with custom modules
or the Odoo Apps Store) without having to install it locally.
Can be used for both testing Odoo and long-term production use.
Like demo_ instances, `Odoo Online`_ instances require no local installation, a web
browser is sufficient.
.. _setup/install/packaged:
Packaged installers
===================
Odoo provides packaged installers for Windows, deb-based distributions
(Debian, Ubuntu, …) and RPM-based distributions (Fedora, CentOS, RHEL, …) for
both the Community and Enterprise versions.
These packages automatically set up all dependencies (for the Community version),
but may be difficult to keep up-to-date.
Official Community packages with all relevant dependency requirements are
available on our nightly_ server. Both Community and Enterprise packages can
be downloaded from our download_ page (you must to be logged in as a paying
customer or partner to download the Enterprise packages).
Windows
-------
#. Download the installer from our nightly_ server (Community only) or the Windows installer from
the download_ page (any edition).
#. Execute the downloaded file.
.. warning::
| On Windows 8 and later you may see a warning titled "Windows protected your PC".
| Click on **More Info** and then on **Run anyway**.
#. Accept the UAC_ prompt.
#. Go through the various installation steps.
Odoo will automatically be started at the end of the installation.
Linux
-----
Prepare
~~~~~~~
.. tabs::
.. group-tab:: Debian/Ubuntu
Odoo needs a `PostgreSQL`_ server to run properly. The default configuration for
the Odoo 'deb' package is to use the PostgreSQL server on the same host as your
Odoo instance. Execute the following command in order to install the PostgreSQL server:
.. code-block:: console
$ sudo apt install postgresql -y
.. group-tab:: Fedora
Odoo needs a `PostgreSQL`_ server to run properly. Make sure that the `sudo` command is
available and well configured and, only then, execute the following command in order to
install the PostgreSQL server:
.. code-block:: console
$ sudo dnf install -y postgresql-server
$ sudo postgresql-setup --initdb --unit postgresql
$ sudo systemctl enable postgresql
$ sudo systemctl start postgresql
.. warning::
`wkhtmltopdf` is not installed through **pip** and must be installed manually in version `0.12.5
<the wkhtmltopdf download page_>`_ for it to support headers and footers. See our `wiki
<https://github.com/odoo/odoo/wiki/Wkhtmltopdf>`_ for more details on the various versions.
Repository
~~~~~~~~~~
.. tabs::
.. group-tab:: Debian/Ubuntu
Odoo S.A. provides a repository that can be used with Debian and Ubuntu distributions. It can
be used to install *Odoo Community Edition* by executing the following commands:
.. code-block:: console
$ wget -q -O - https://nightly.odoo.com/odoo.key | sudo gpg --dearmor -o /usr/share/keyrings/odoo-archive-keyring.gpg
$ echo 'deb [signed-by=/usr/share/keyrings/odoo-archive-keyring.gpg] https://nightly.odoo.com/{CURRENT_MAJOR_BRANCH}/nightly/deb/ ./' | sudo tee /etc/apt/sources.list.d/odoo.list
$ sudo apt-get update && sudo apt-get install odoo
You can then use the usual `apt-get upgrade` command to keep your installation up-to-date.
.. group-tab:: Fedora
Odoo S.A. provides a repository that can be used with the Fedora distributions. It can be used
to install *Odoo Community Edition* by executing the following commands:
.. code-block:: console
$ sudo dnf config-manager --add-repo=https://nightly.odoo.com/{CURRENT_MAJOR_BRANCH}/nightly/rpm/odoo.repo
$ sudo dnf install -y odoo
$ sudo systemctl enable odoo
$ sudo systemctl start odoo
.. note::
At this moment, there is no nightly repository for the Enterprise Edition.
Distribution package
~~~~~~~~~~~~~~~~~~~~
.. tabs::
.. group-tab:: Debian/Ubuntu
Instead of using the repository as described above, the 'deb' packages for both the
*Community* and *Enterprise* editions can be downloaded from the `official download page
<download_>`_.
.. note::
Odoo {CURRENT_MAJOR_VERSION} 'deb' package currently supports `Debian 11 (Bullseye)`_,
`Ubuntu 22.04 (Jammy)`_ or above.
Next, execute the following commands **as root**:
.. code-block:: console
# dpkg -i <path_to_installation_package> # this probably fails with missing dependencies
# apt-get install -f # should install the missing dependencies
# dpkg -i <path_to_installation_package>
This will install Odoo as a service, create the necessary PostgreSQL_ user
and automatically start the server.
.. warning::
- The `python3-xlwt` Debian package does not exists in Debian Buster nor Ubuntu 18.04. This
python module is needed to export into xls format.
If you need the feature, you can install it manually with:
.. code-block:: console
$ sudo pip3 install xlwt
- The `num2words` python package does not exists in Debian Buster nor Ubuntu 18.04. Textual
amounts will not be rendered by Odoo and this could cause problems with the `l10n_mx_edi`
module.
If you need this feature, you can install manually with:
.. code-block:: console
$ sudo pip3 install num2words
.. group-tab:: Fedora
Instead of using the repository as described above, the 'rpm' packages for both the
*Community* and *Enterprise* editions can be downloaded from the `official download page
<download_>`_.
.. note::
Odoo {CURRENT_MAJOR_VERSION} 'rpm' package supports Fedora 36.
Once downloaded, the package can be installed using the 'dnf' package manager:
.. code-block:: console
$ sudo dnf localinstall odoo_{CURRENT_MAJOR_BRANCH}.latest.noarch.rpm
$ sudo systemctl enable odoo
$ sudo systemctl start odoo
.. _setup/install/source:
Source install
==============
The source "installation" is really about not installing Odoo, and running it directly from source
instead.
It can be more convenient for module developers as the Odoo source is more easily accessible than
using packaged installation.
It also makes starting and stopping Odoo more flexible and explicit than the services set up by the
packaged installations, and allows overriding settings using
:ref:`command-line parameters <reference/cmdline>` without needing to edit a configuration file.
Finally it provides greater control over the system's set up, and allows to more easily keep
(and run) multiple versions of Odoo side-by-side.
Fetch the sources
-----------------
There are two ways to obtain the source code of Odoo: as a zip **archive** or through **git**.
Archive
~~~~~~~
Community Edition:
* `Official download page <download_>`_
* `GitHub repository <community-repository_>`_
* `Nightly server <nightly_>`_
Enterprise Edition:
* `Official download page <download_>`_
* `GitHub repository <enterprise-repository_>`_
.. _setup/install/source/git:
Git
~~~
The following requires `Git <git_>`_ to be installed on your machine and that you have basic
knowledge of Git commands. To clone a Git repository, you must choose between cloning with HTTPS or
SSH. If you do not know the difference between the two, the best option is most likely HTTPS. If you
are following the :doc:`Getting started </developer/tutorials/getting_started>` developer tutorial,
or plan on contributing to Odoo source code, choose SSH.
.. note::
**The Enterprise Git repository does not contain the full Odoo source code**. It is only a
collection of extra add-ons. The main server code is in the Community version. Running the
Enterprise version actually means running the server from the Community version with the
addons-path option set to the folder with the Enterprise version. You need to clone both the
Community and Enterprise repository to have a working Odoo Enterprise installation. See
:ref:`setup/install/editions` to get access to the Enterprise repository.
.. tabs::
.. group-tab:: Windows
.. tabs::
.. tab:: Clone with HTTPS
.. code-block:: doscon
C:\> git clone https://github.com/odoo/odoo.git
C:\> git clone https://github.com/odoo/enterprise.git
.. tab:: Clone with SSH
.. code-block:: doscon
C:\> git clone git@github.com:odoo/odoo.git
C:\> git clone git@github.com:odoo/enterprise.git
.. group-tab:: Linux
.. tabs::
.. tab:: Clone with HTTPS
.. code-block:: console
$ git clone https://github.com/odoo/odoo.git
$ git clone https://github.com/odoo/enterprise.git
.. tab:: Clone with SSH
.. code-block:: console
$ git clone git@github.com:odoo/odoo.git
$ git clone git@github.com:odoo/enterprise.git
.. group-tab:: Mac OS
.. tabs::
.. tab:: Clone with HTTPS
.. code-block:: console
$ git clone https://github.com/odoo/odoo.git
$ git clone https://github.com/odoo/enterprise.git
.. tab:: Clone with SSH
.. code-block:: console
$ git clone git@github.com:odoo/odoo.git
$ git clone git@github.com:odoo/enterprise.git
.. note::
**The Enterprise git repository does not contain the full Odoo source code**. It is only a
collection of extra add-ons. The main server code is in the Community version. Running the
Enterprise version actually means running the server from the Community version with the
addons-path option set to the folder with the Enterprise version. You need to clone both the
Community and Enterprise repository to have a working Odoo Enterprise installation.
.. _setup/install/source/prepare:
Prepare
-------
Python
~~~~~~
.. tabs::
.. group-tab:: Windows
Odoo requires Python 3.7 or later to run. Visit `Python's download page <https://www.python.org/downloads/windows/>`_
to download and install the latest version of Python 3 on your machine.
During installation, check **Add Python 3 to PATH**, then click **Customize Installation** and make
sure that **pip** is checked.
.. note::
If Python 3 is already installed, make sure that the version is 3.7 or above, as previous
versions are not compatible with Odoo.
.. code-block:: doscon
C:\> python --version
Verify also that pip_ is installed for this version.
.. code-block:: doscon
C:\> pip --version
.. group-tab:: Linux
Odoo requires Python 3.7 or later to run. Use your package manager to download and install Python 3
on your machine if it is not already done.
.. note::
If Python 3 is already installed, make sure that the version is 3.7 or above, as previous
versions are not compatible with Odoo.
.. code-block:: console
$ python3 --version
Verify also that pip_ is installed for this version.
.. code-block:: console
$ pip3 --version
.. group-tab:: Mac OS
Odoo requires Python 3.7 or later to run. Use your preferred package manager (homebrew_, macports_)
to download and install Python 3 on your machine if it is not already done.
.. note::
If Python 3 is already installed, make sure that the version is 3.7 or above, as previous
versions are not compatible with Odoo.
.. code-block:: console
$ python3 --version
Verify also that pip_ is installed for this version.
.. code-block:: console
$ pip3 --version
PostgreSQL
~~~~~~~~~~
.. tabs::
.. group-tab:: Windows
Odoo uses PostgreSQL as database management system. `Download and install PostgreSQL
<https://www.postgresql.org/download/windows/>`_ (supported version: 12.0 and later).
By default, the only user is `postgres` but Odoo forbids connecting as `postgres`, so you need
to create a new PostgreSQL user:
#. Add PostgreSQL's `bin` directory (by default:
:file:`C:\\Program Files\\PostgreSQL\\<version>\\bin`) to your `PATH`.
#. Create a postgres user with a password using the pg admin gui:
1. Open **pgAdmin**.
2. Double-click the server to create a connection.
3. Select :menuselection:`Object --> Create --> Login/Group Role`.
4. Enter the username in the **Role Name** field (e.g. `odoo`).
5. Open the **Definition** tab and enter the password (e.g. `odoo`), then click **Save**.
6. Open the **Privileges** tab and switch **Can login?** to `Yes` and **Create database?**
to `Yes`.
.. group-tab:: Linux
Odoo uses PostgreSQL as database management system. Use your package manager to download and
install PostgreSQL (supported version: 12.0 and later).
It can be achieved by executing the following:
.. code-block:: console
$ sudo apt install postgresql postgresql-client
By default, the only user is `postgres` but Odoo forbids connecting as `postgres`, so you need
to create a new PostgreSQL user:
.. code-block:: console
$ sudo -u postgres createuser -s $USER
$ createdb $USER
.. note::
Because your PostgreSQL user has the same name as your Unix login, you will be able to
connect to the database without password.
.. group-tab:: Mac OS
Odoo uses PostgreSQL as database management system. Use `postgres.app
<https://postgresapp.com>`_ to download and install PostgreSQL (supported version: 12.0 and
later).
.. tip::
To make the command line tools bundled with `postgres.app` available, make sure to setup your
`$PATH` variable by following the `Postgres.app CLI Tools Instructions
<https://postgresapp.com/documentation/cli-tools.html>`_.
By default, the only user is `postgres` but Odoo forbids connecting as `postgres`, so you need
to create a new PostgreSQL user:
.. code-block:: console
$ sudo -u postgres createuser -s $USER
$ createdb $USER
.. note::
Because your PostgreSQL user has the same name as your Unix login, you will be able to
connect to the database without password.
.. _install/dependencies:
Dependencies
~~~~~~~~~~~~
.. tabs::
.. group-tab:: Windows
Before installing the dependencies, you must download and install the `Build Tools for Visual
Studio <https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019>`_.
When prompted, select **C++ build tools** in the **Workloads** tab and install them.
Odoo dependencies are listed in the `requirements.txt` file located at the root of the Odoo
community directory.
.. tip::
It can be preferable to not mix python modules packages between different instances of Odoo
or with your system. You can use virtualenv_ to create isolated Python environments.
Navigate to the path of your Odoo Community installation (`CommunityPath`) and run **pip** on
the requirements file in a terminal **with Administrator privileges**:
.. code-block:: doscon
C:\> cd \CommunityPath
C:\> pip install setuptools wheel
C:\> pip install -r requirements.txt
For languages with right-to-left interface (such as Arabic or Hebrew), the package `rtlcss`
is needed:
#. Download and install `nodejs <https://nodejs.org/en/download/>`_.
#. Install `rtlcss`:
.. code-block:: doscon
C:\> npm install -g rtlcss
#. Edit the System Environment's variable `PATH` to add the folder where `rtlcss.cmd` is
located (typically: :file:`C:\\Users\\<user>\\AppData\\Roaming\\npm\\`).
.. group-tab:: Linux
Using your **distribution packages** is the preferred way of installing dependencies.
Alternatively, you can install the python dependencies with **pip**.
.. tabs::
.. tab:: Debian/Ubuntu
For Debian-based systems, the packages are listed in the `debian/control
<{GITHUB_PATH}/debian/control>`_ file of the Odoo sources.
On Debian/Ubuntu, the following commands should install the required packages:
.. code-block:: console
$ cd /CommunityPath
$ sed -n -e '/^Depends:/,/^Pre/ s/ python3-\(.*\),/python3-\1/p' debian/control | sudo xargs apt-get install -y
.. tab:: Install with pip
As some of the python packages need a compilation step, they require system libraries to
be installed.
On Debian/Ubuntu-based systems, the following command should install these required
libraries:
.. code-block:: console
$ sudo apt install python3-pip libldap2-dev libpq-dev libsasl2-dev
Odoo dependencies are listed in the :file:`requirements.txt` file located at the root of
the Odoo community directory.
.. note::
| The python packages in :file:`requirements.txt` are based on their stable/LTS
Debian/Ubuntu corresponding version at the moment of the Odoo release.
| E.g., for Odoo 15.0, the `python3-babel` package version is 2.8.0 in Debian
Bullseye and 2.6.0 in Ubuntu Focal. The lowest version is then chosen in the
:file:`requirements.txt`.
.. tip::
It can be preferable to not mix python modules packages between different instances
of Odoo or with your system. You can use virtualenv_ to create isolated Python
environments.
Navigate to the path of your Odoo Community installation (:file:`CommunityPath`) and run
**pip** on the requirements file to install the requirements for the current user.
.. code-block:: console
$ cd /CommunityPath
$ pip install -r requirements.txt
For languages with right-to-left interface (such as Arabic or Hebrew), the package `rtlcss` is
needed:
#. Download and install **nodejs** and **npm** with your package manager.
#. Install `rtlcss`:
.. code-block:: console
$ sudo npm install -g rtlcss
.. group-tab:: Mac OS
Odoo dependencies are listed in the `requirements.txt` file located at the root of the Odoo
community directory.
.. tip::
It can be preferable to not mix python modules packages between different instances of Odoo
or with your system. You can use virtualenv_ to create isolated Python environments.
Navigate to the path of your Odoo Community installation (`CommunityPath`) and run **pip** on
the requirements file:
.. code-block:: console
$ cd /CommunityPath
$ pip3 install setuptools wheel
$ pip3 install -r requirements.txt
.. warning::
Non-Python dependencies need to be installed with a package manager:
#. Download and install the **Command Line Tools**:
.. code-block:: console
$ xcode-select --install
#. Download and install the package manager of your choice (homebrew_, macports_).
#. Install non-python dependencies.
For languages with right-to-left interface (such as Arabic or Hebrew), the package `rtlcss` is
needed:
#. Download and install **nodejs** with your preferred package manager (homebrew_, macports_).
#. Install `rtlcss`:
.. code-block:: console
$ sudo npm install -g rtlcss
.. important::
`wkhtmltopdf` is not installed through **pip** and must be installed manually in version `0.12.5
<the wkhtmltopdf download page_>`_ for it to support headers and footers. See our `wiki
<https://github.com/odoo/odoo/wiki/Wkhtmltopdf>`_ for more details on the various versions.
.. _setup/install/source/running_odoo:
Running Odoo
------------
Once all dependencies are set up, Odoo can be launched by running `odoo-bin`, the
command-line interface of the server. It is located at the root of the Odoo Community directory.
To configure the server, you can either specify :ref:`command-line arguments
<reference/cmdline/server>` or a :ref:`configuration file <reference/cmdline/config>`.
.. tip::
For the Enterprise edition, you must add the path to the `enterprise` addons to the `addons-path`
argument. Note that it must come before the other paths in `addons-path` for addons to be loaded
correctly.
Common necessary configurations are:
- PostgreSQL user and password.
- Custom addon paths beyond the defaults, to load your own modules.
A typical way to run the server would be:
.. tabs::
.. group-tab:: Windows
.. code-block:: doscon
C:\> cd CommunityPath/
C:\> python odoo-bin -r dbuser -w dbpassword --addons-path=addons -d mydb
Where `CommunityPath` is the path of the Odoo Community installation, `dbuser` is the
PostgreSQL login, `dbpassword` is the PostgreSQL password, and `mydb` is the name of the
PostgreSQL database.
.. group-tab:: Linux
.. code-block:: console
$ cd /CommunityPath
$ python3 odoo-bin --addons-path=addons -d mydb
Where `CommunityPath` is the path of the Odoo Community installation, and `mydb` is the name
of the PostgreSQL database.
.. group-tab:: Mac OS
.. code-block:: console
$ cd /CommunityPath
$ python3 odoo-bin --addons-path=addons -d mydb
Where `CommunityPath` is the path of the Odoo Community installation, and `mydb` is the name
of the PostgreSQL database.
After the server has started (the INFO log `odoo.modules.loading: Modules loaded.` is printed), open
http://localhost:8069 in your web browser and log in with the base administrator account: Use
`admin` for the :guilabel:`Email` and, again, `admin` for the :guilabel:`Password`. That's it, you
just logged into your own Odoo database!
.. tip::
- From there, you can create and manage new :doc:`users
</applications/general/users/manage_users>`.
- The user account you use to log into Odoo's web interface differs from the :option:`--db_user
<odoo-bin -r>` CLI argument.
.. seealso::
:doc:`The exhaustive list of CLI arguments for odoo-bin </developer/reference/cli>`.
.. _setup/install/docker:
Docker
======
The full documentation on how to use Odoo with Docker can be found on the
official Odoo `docker image <https://hub.docker.com/_/odoo/>`_ page.
.. _Debian 11 (Bullseye): https://www.debian.org/releases/bullseye/
.. _demo: https://demo.odoo.com
.. _docker: https://www.docker.com
.. _download: https://www.odoo.com/page/download
.. _Ubuntu 22.04 (Jammy): https://releases.ubuntu.com/22.04/
.. _EPEL: https://fedoraproject.org/wiki/EPEL
.. _PostgreSQL: https://www.postgresql.org
.. _the official installer:
.. _install pip:
https://pip.pypa.io/en/latest/installing.html#install-pip
.. _Quilt: https://en.wikipedia.org/wiki/Quilt_(software)
.. _Odoo Online: https://www.odoo.com/page/start
.. _the wkhtmltopdf download page: https://github.com/wkhtmltopdf/wkhtmltopdf/releases/tag/0.12.5
.. _UAC: https://en.wikipedia.org/wiki/User_Account_Control
.. _wkhtmltopdf: https://wkhtmltopdf.org
.. _pip: https://pip.pypa.io
.. _macports: https://www.macports.org
.. _homebrew: https://brew.sh
.. _wheels: https://wheel.readthedocs.org/en/latest/
.. _virtualenv: https://pypi.python.org/pypi/virtualenv
.. _virtualenvwrapper: https://virtualenvwrapper.readthedocs.io/en/latest/
.. _pywin32: https://sourceforge.net/projects/pywin32/files/pywin32/
.. _community-repository: https://github.com/odoo/odoo
.. _enterprise-repository: https://github.com/odoo/enterprise
.. _Editions: https://www.odoo.com/pricing#pricing_table_features
.. _nightly: https://nightly.odoo.com/
.. _extra: https://nightly.odoo.com/extra/
+21
View File
@@ -0,0 +1,21 @@
======
Online
======
Online instances are accessed using any web browser and do not require a local installation.
Demo
----
To quickly try out Odoo, shared `demo <https://demo.odoo.com>`_ instances are available. No
registration is required, but each instance only lives for a few hours.
Odoo Online
-----------
`Odoo Online <https://www.odoo.com/trial>`_ provides private instances which are fully managed and
hosted by Odoo. It can be used for long-term production or to test Odoo thoroughly, including
customizations that don't require code.
.. note::
Odoo Online is incompatible with custom modules or the Odoo App Store.
+162
View File
@@ -0,0 +1,162 @@
===================
Packaged installers
===================
Odoo provides packaged installers for Debian-based Linux distributions (Debian, Ubuntu, etc.),
RPM-based Linux distributions (Fedora, CentOS, RHEL, etc.), and Windows for the Community and
Enterprise editions.
Official **Community** nightly packages with all relevant dependency requirements are available on
the `nightly server <https://nightly.odoo.com>`_.
.. note::
Nightly packages may be difficult to keep up to date.
Official **Community** and **Enterprise** packages can be downloaded from the `Odoo download page
<https://www.odoo.com/page/download>`_.
.. note::
It is required to be logged in as a paying customer or partner to download the Enterprise
packages.
.. _install/packages/linux:
Linux
=====
Prepare
-------
Odoo needs a `PostgreSQL <https://www.postgresql.org/>`_ server to run properly.
.. tabs::
.. group-tab:: Debian/Ubuntu
The default configuration for the Odoo 'deb' package is to use the PostgreSQL server on the
same host as the Odoo instance. Execute the following command to install the PostgreSQL
server:
.. code-block:: console
$ sudo apt install postgresql -y
.. group-tab:: Fedora
Make sure that the `sudo` command is available and well configured and, only then, execute the
following command to install the PostgreSQL server:
.. code-block:: console
$ sudo dnf install -y postgresql-server
$ sudo postgresql-setup --initdb --unit postgresql
$ sudo systemctl enable postgresql
$ sudo systemctl start postgresql
.. warning::
`wkhtmltopdf` is not installed through **pip** and must be installed manually in `version 0.12.5
<https://github.com/wkhtmltopdf/wkhtmltopdf/releases/tag/0.12.5>`_ for it to support headers and
footers. Check out the `wkhtmltopdf wiki <https://github.com/odoo/odoo/wiki/Wkhtmltopdf>`_ for
more details on the various versions.
Repository
----------
Odoo S.A. provides a repository that can be used to install the **Community** edition by executing
the following commands:
.. tabs::
.. group-tab:: Debian/Ubuntu
.. code-block:: console
$ wget -q -O - https://nightly.odoo.com/odoo.key | sudo gpg --dearmor -o /usr/share/keyrings/odoo-archive-keyring.gpg
$ echo 'deb [signed-by=/usr/share/keyrings/odoo-archive-keyring.gpg] https://nightly.odoo.com/{CURRENT_MAJOR_BRANCH}/nightly/deb/ ./' | sudo tee /etc/apt/sources.list.d/odoo.list
$ sudo apt-get update && sudo apt-get install odoo
Use the usual `apt-get upgrade` command to keep the installation up-to-date.
.. group-tab:: Fedora
.. code-block:: console
$ sudo dnf config-manager --add-repo=https://nightly.odoo.com/{CURRENT_MAJOR_BRANCH}/nightly/rpm/odoo.repo
$ sudo dnf install -y odoo
$ sudo systemctl enable odoo
$ sudo systemctl start odoo
.. note::
Currently, there is no nightly repository for the Enterprise edition.
Distribution package
--------------------
Instead of using the repository, packages for both the **Community** and **Enterprise** editions can
be downloaded from the `Odoo download page <https://www.odoo.com/page/download>`_.
.. tabs::
.. group-tab:: Debian/Ubuntu
.. note::
Odoo {CURRENT_MAJOR_VERSION} 'deb' package currently supports `Debian Buster
<https://www.debian.org/releases/buster/>`_ and `Ubuntu 18.04
<https://releases.ubuntu.com/18.04>`_ or above.
Once downloaded, execute the following commands **as root** to install Odoo as a service,
create the necessary PostgreSQL user, and automatically start the server:
.. code-block:: console
# dpkg -i <path_to_installation_package> # this probably fails with missing dependencies
# apt-get install -f # should install the missing dependencies
# dpkg -i <path_to_installation_package>
.. warning::
- The `python3-xlwt` Debian package, needed to export into the XLS format, does not exist
in Debian Buster nor Ubuntu 18.04. If needed, install it manually with the following:
.. code-block:: console
$ sudo pip3 install xlwt
- The `num2words` Python package - needed to render textual amounts - does not exist in
Debian Buster nor Ubuntu 18.04, which could cause problems with the `l10n_mx_edi` module.
If needed, install it manually with the following:
.. code-block:: console
$ sudo pip3 install num2words
.. group-tab:: Fedora
.. note::
Odoo {CURRENT_MAJOR_VERSION} 'rpm' package supports Fedora 36.
Once downloaded, the package can be installed using the 'dnf' package manager:
.. code-block:: console
$ sudo dnf localinstall odoo_{CURRENT_MAJOR_BRANCH}.latest.noarch.rpm
$ sudo systemctl enable odoo
$ sudo systemctl start odoo
.. _install/packages/windows:
Windows
=======
#. Download the installer from the `nightly server <https://nightly.odoo.com>`_ (Community only) or
the Windows installer from the `Odoo download page <https://www.odoo.com/page/download>`_ (any
edition.
#. Execute the downloaded file.
.. warning::
On Windows 8 and later, a warning titled *Windows protected your PC* may be displayed. Click
**More Info** and then **Run anyway** to proceed.
#. Accept the `UAC <https://en.wikipedia.org/wiki/User_Account_Control>`_ prompt.
#. Go through the installation steps.
Odoo launches automatically at the end of the installation.
+483
View File
@@ -0,0 +1,483 @@
======
Source
======
The source 'installation' is not about installing Odoo but running it directly from the source
instead.
Using the Odoo source can be more convenient for module developers as it is more easily accessible
than using packaged installers.
It makes starting and stopping Odoo more flexible and explicit than the services set up by the
packaged installers. Also, it allows overriding settings using :ref:`command-line parameters
<reference/cmdline>` without needing to edit a configuration file.
Finally, it provides greater control over the system's setup and allows to more easily keep (and
run) multiple versions of Odoo side-by-side.
Fetch the sources
-----------------
There are two ways to obtain the source code of Odoo: as a ZIP **archive** or through **Git**.
Archive
~~~~~~~
Community edition:
- `Odoo download page <https://www.odoo.com/page/download>`_
- `GitHub Community repository <https://github.com/odoo/odoo>`_
- `Nightly server <https://nightly.odoo.com>`_
Enterprise edition:
- `Odoo download page <https://www.odoo.com/page/download>`_
- `GitHub Enterprise repository <https://github.com/odoo/enterprise>`_
.. _install/source/git:
Git
~~~
.. note::
It is required to have `Git <https://git-scm.com/>`_ installed, and it is recommended to have a
basic knowledge of Git commands to proceed.
To clone a Git repository, choose between cloning with HTTPS or SSH. In most cases, the best option
is HTTPS. However, choose SSH to contribute to Odoo source code or when following the :doc:`Getting
Started developer tutorial </developer/tutorials/getting_started>`.
.. tabs::
.. group-tab:: Linux
.. tabs::
.. tab:: Clone with HTTPS
.. code-block:: console
$ git clone https://github.com/odoo/odoo.git
$ git clone https://github.com/odoo/enterprise.git
.. tab:: Clone with SSH
.. code-block:: console
$ git clone git@github.com:odoo/odoo.git
$ git clone git@github.com:odoo/enterprise.git
.. group-tab:: Windows
.. tabs::
.. tab:: Clone with HTTPS
.. code-block:: doscon
C:\> git clone https://github.com/odoo/odoo.git
C:\> git clone https://github.com/odoo/enterprise.git
.. tab:: Clone with SSH
.. code-block:: doscon
C:\> git clone git@github.com:odoo/odoo.git
C:\> git clone git@github.com:odoo/enterprise.git
.. group-tab:: Mac OS
.. tabs::
.. tab:: Clone with HTTPS
.. code-block:: console
$ git clone https://github.com/odoo/odoo.git
$ git clone https://github.com/odoo/enterprise.git
.. tab:: Clone with SSH
.. code-block:: console
$ git clone git@github.com:odoo/odoo.git
$ git clone git@github.com:odoo/enterprise.git
.. note::
**The Enterprise git repository does not contain the full Odoo source code**. It is only a
collection of extra add-ons. The main server code is in the Community edition. Running the
Enterprise version means running the server from the Community version with the `addons-path`
option set to the folder with the Enterprise edition. It is required to clone both the Community
and Enterprise repositories to have a working Odoo Enterprise installation.
.. _install/source/prepare:
Prepare
-------
Python
~~~~~~
Odoo requires **Python 3.7** or later to run.
.. tabs::
.. group-tab:: Linux
Use a package manager to download and install Python 3 if needed.
.. group-tab:: Windows
`Download the latest version of Python 3 <https://www.python.org/downloads/windows/>`_ and
install it.
During installation, check **Add Python 3 to PATH**, then click **Customize Installation** and
make sure that **pip** is checked.
.. group-tab:: Mac OS
Use a package manager (`Homebrew <https://brew.sh/>`_, `MacPorts <https://www.macports.org>`_)
to download and install Python 3 if needed.
.. note::
If Python 3 is already installed, make sure that the version is 3.7 or above, as previous
versions are not compatible with Odoo.
.. tabs::
.. group-tab:: Linux
.. code-block:: console
$ python3 --version
.. group-tab:: Windows
.. code-block:: doscon
C:\> python --version
.. group-tab:: Mac OS
.. code-block:: console
$ python3 --version
Verify that `pip <https://pip.pypa.io>`_ is also installed for this version.
.. tabs::
.. group-tab:: Linux
.. code-block:: console
$ pip3 --version
.. group-tab:: Windows
.. code-block:: doscon
C:\> pip --version
.. group-tab:: Mac OS
.. code-block:: console
$ pip3 --version
PostgreSQL
~~~~~~~~~~
Odoo uses PostgreSQL as its database management system.
.. tabs::
.. group-tab:: Linux
Use a package manager to download and install PostgreSQL (supported versions: 12.0 or above).
It can be achieved by executing the following:
.. code-block:: console
$ sudo apt install postgresql postgresql-client
.. group-tab:: Windows
`Download PostgreSQL <https://www.postgresql.org/download/windows>`_ (supported versions: 12.0
or above) and install it.
.. group-tab:: Mac OS
Use `Postgres.app <https://postgresapp.com>`_ to download and install PostgreSQL (supported
version: 12.0 or above).
.. tip::
To make the command line tools bundled with Postgres.app available, make sure to set up the
`$PATH` variable by following the `Postgres.app CLI tools instructions
<https://postgresapp.com/documentation/cli-tools.html>`_.
By default, the only user is `postgres`. As Odoo forbids connecting as `postgres`, create a new
PostgreSQL user.
.. tabs::
.. group-tab:: Linux
.. code-block:: console
$ sudo -u postgres createuser -s $USER
$ createdb $USER
.. note::
Because the PostgreSQL user has the same name as the Unix login, it is possible to connect
to the database without a password.
.. group-tab:: Windows
#. Add PostgreSQL's `bin` directory (by default:
:file:`C:\\Program Files\\PostgreSQL\\<version>\\bin`) to the `PATH`.
#. Create a postgres user with a password using the pg admin gui:
#. Open **pgAdmin**.
#. Double-click the server to create a connection.
#. Select :menuselection:`Object --> Create --> Login/Group Role`.
#. Enter the username in the **Role Name** field (e.g., `odoo`).
#. Open the **Definition** tab, enter a password (e.g., `odoo`), and click **Save**.
#. Open the **Privileges** tab and switch **Can login?** to `Yes` and **Create database?**
to `Yes`.
.. group-tab:: Mac OS
.. code-block:: console
$ sudo -u postgres createuser -s $USER
$ createdb $USER
.. note::
Because the PostgreSQL user has the same name as the Unix login, it is possible to connect
to the database without a password.
.. _install/dependencies:
Dependencies
~~~~~~~~~~~~
.. tabs::
.. group-tab:: Linux
Using **distribution packages** is the preferred way of installing dependencies.
Alternatively, install the Python dependencies with **pip**.
.. tabs::
.. tab:: Debian/Ubuntu
For Debian-based systems, the packages are listed in the `debian/control
<{GITHUB_PATH}/debian/control>`_ file of the Odoo sources.
On Debian/Ubuntu, the following commands should install the required packages:
.. code-block:: console
$ cd /CommunityPath
$ sed -n -e '/^Depends:/,/^Pre/ s/ python3-\(.*\),/python3-\1/p' debian/control | sudo xargs apt-get install -y
.. tab:: Install with pip
As some of the Python packages need a compilation step, they require system libraries to
be installed.
On Debian/Ubuntu, the following command should install these required libraries:
.. code-block:: console
$ sudo apt install python3-pip libldap2-dev libpq-dev libsasl2-dev
Odoo dependencies are listed in the :file:`requirements.txt` file located at the root of
the Odoo Community directory.
.. note::
The Python packages in :file:`requirements.txt` are based on their stable/LTS
Debian/Ubuntu corresponding version at the moment of the Odoo release. For example,
for Odoo 15.0, the `python3-babel` package version is 2.8.0 in Debian Bullseye and
2.6.0 in Ubuntu Focal. The lowest version is then chosen in the
:file:`requirements.txt`.
.. tip::
It can be preferable not to mix Python module packages between different instances of
Odoo or with the system. However, it is possible to use `virtualenv
<https://pypi.org/project/virtualenv/>`_ to create isolated Python environments.
Navigate to the path of the Odoo Community installation (:file:`CommunityPath`) and run
**pip** on the requirements file to install the requirements for the current user.
.. code-block:: console
$ cd /CommunityPath
$ pip install -r requirements.txt
.. group-tab:: Windows
Before installing the dependencies, download and install the `Build Tools for Visual
Studio <https://visualstudio.microsoft.com/downloads/>`_. Select **C++ build tools** in the
**Workloads** tab and install them when prompted.
Odoo dependencies are listed in the `requirements.txt` file located at the root of the Odoo
Community directory.
.. tip::
It can be preferable not to mix Python module packages between different instances of
Odoo or with the system. However, it is possible to use `virtualenv
<https://pypi.org/project/virtualenv/>`_ to create isolated Python environments.
Navigate to the path of the Odoo Community installation (`CommunityPath`) and run **pip** on
the requirements file in a terminal **with Administrator privileges**:
.. code-block:: doscon
C:\> cd \CommunityPath
C:\> pip install setuptools wheel
C:\> pip install -r requirements.txt
.. group-tab:: Mac OS
Odoo dependencies are listed in the `requirements.txt` file located at the root of the Odoo
Community directory.
.. tip::
It can be preferable not to mix Python module packages between different instances of
Odoo or with the system. However, it is possible to use `virtualenv
<https://pypi.org/project/virtualenv/>`_ to create isolated Python environments.
Navigate to the path of the Odoo Community installation (`CommunityPath`) and run **pip** on
the requirements file:
.. code-block:: console
$ cd /CommunityPath
$ pip3 install setuptools wheel
$ pip3 install -r requirements.txt
.. warning::
Non-Python dependencies must be installed with a package manager (`Homebrew
<https://brew.sh/>`_, `MacPorts <https://www.macports.org>`_).
#. Download and install the **Command Line Tools**:
.. code-block:: console
$ xcode-select --install
#. Use the package manager to install non-Python dependencies.
.. note::
For languages using a **right-to-left interface** (such as Arabic or Hebrew), the `rtlcss`
package is required.
.. tabs::
.. group-tab:: Linux
#. Download and install **nodejs** and **npm** with a package manager.
#. Install `rtlcss`:
.. code-block:: console
$ sudo npm install -g rtlcss
.. group-tab:: Windows
#. Download and install `nodejs <https://nodejs.org/en/download>`_.
#. Install `rtlcss`:
.. code-block:: doscon
C:\> npm install -g rtlcss
#. Edit the system environment's variable `PATH` to add the folder where `rtlcss.cmd` is
located (typically: :file:`C:\\Users\\<user>\\AppData\\Roaming\\npm\\`).
.. group-tab:: Mac OS
#. Download and install **nodejs** with a package manager (`Homebrew <https://brew.sh/>`_,
`MacPorts <https://www.macports.org>`_).
#. Install `rtlcss`:
.. code-block:: console
$ sudo npm install -g rtlcss
.. warning::
`wkhtmltopdf` is not installed through **pip** and must be installed manually in `version 0.12.5
<https://github.com/wkhtmltopdf/wkhtmltopdf/releases/tag/0.12.5>`_ for it to support headers and
footers. Check out the `wkhtmltopdf wiki <https://github.com/odoo/odoo/wiki/Wkhtmltopdf>`_ for
more details on the various versions.
.. _install/source/running_odoo:
Running Odoo
------------
Once all dependencies are set up, Odoo can be launched by running `odoo-bin`, the command-line
interface of the server. It is located at the root of the Odoo Community directory.
To configure the server, either specify :ref:`command-line arguments <reference/cmdline/server>` or
a :ref:`configuration file <reference/cmdline/config>`.
.. tip::
For the Enterprise edition, add the path to the `enterprise` add-ons to the `addons-path`
argument. Note that it must come before the other paths in `addons-path` for add-ons to be loaded
correctly.
Common necessary configurations are:
- PostgreSQL user and password.
- Custom addon paths beyond the defaults to load custom modules.
A typical way to run the server would be:
.. tabs::
.. group-tab:: Linux
.. code-block:: console
$ cd /CommunityPath
$ python3 odoo-bin --addons-path=addons -d mydb
Where `CommunityPath` is the path of the Odoo Community installation, and `mydb` is the name
of the PostgreSQL database.
.. group-tab:: Windows
.. code-block:: doscon
C:\> cd CommunityPath/
C:\> python odoo-bin -r dbuser -w dbpassword --addons-path=addons -d mydb
Where `CommunityPath` is the path of the Odoo Community installation, `dbuser` is the
PostgreSQL login, `dbpassword` is the PostgreSQL password, and `mydb` is the name of the
PostgreSQL database.
.. group-tab:: Mac OS
.. code-block:: console
$ cd /CommunityPath
$ python3 odoo-bin --addons-path=addons -d mydb
Where `CommunityPath` is the path of the Odoo Community installation, and `mydb` is the name
of the PostgreSQL database.
After the server has started (the INFO log `odoo.modules.loading: Modules loaded.` is printed), open
http://localhost:8069 in a web browser and log into the Odoo database with the base administrator
account: use `admin` as the email and, again, `admin` as the password.
.. tip::
- From there, create and manage new :doc:`users <../../applications/general/users/manage_users>`.
- The user account used to log into Odoo's web interface differs from the :option:`--db_user
<odoo-bin -r>` CLI argument.
.. seealso::
:doc:`The list of CLI arguments for odoo-bin </developer/reference/cli>`
@@ -115,7 +115,7 @@ name with your website <domain-name/website-map>`.
.. note::
- Free domain names are also available for free Odoo Online databases (if you installed one app
only, for example). In this case, Odoo reviews your request and your website to avoid abuse.
This process may take up to three days.
This process can take several days due to the success of the offer.
- This is not available for Odoo.sh databases yet.
.. _domain-name/odoo-manage:
@@ -1,9 +1,9 @@
.. _setup/enterprise:
===============================
Upgrade Community to Enterprise
===============================
===================================
Switch from Community to Enterprise
===================================
Depending on your current installation, there are multiple ways to upgrade
your community version.
@@ -61,7 +61,7 @@ have your own favourite. You may need to adapt sections to your usual workflow.
* Shutdown your server
* Backup your community database
* Update the ``--addons-path`` parameter of your launch command (see :ref:`setup/install/source`)
* Update the ``--addons-path`` parameter of your launch command (see :doc:`../install/source`)
* Install the web_enterprise module by using
.. code-block:: console
@@ -98,7 +98,7 @@ On Windows
.. code-block:: console
$ odoo.exe -d <database_name> -i web_enterprise --stop-after-init
$ ..\python\python.exe odoo-bin -d <database_name> -i web_enterprise --stop-after-init
* No need to manually launch the server, the service is running.
You should be able to connect to your Odoo Enterprise instance using your usual
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 39 KiB

+45 -68
View File
@@ -2,25 +2,15 @@
Odoo Online database management
===============================
To manage a database, sign in to https://www.odoo.com and access the `database management page
<https://www.odoo.com/my/databases>`_ by clicking on the user icon, then on
:guilabel:`My Databases`.
To manage a database, go to the `database manager <https://www.odoo.com/my/databases>`_ and sign in
as the database administrator.
.. image:: odoo_online/my-databases.png
:align: center
:alt: Clicking on the user icon opens a drop-down menu. "My databases" button is highlighted.
All the main database management options are available by clicking the database name, except the
upgrade option, which can be accessed by clicking the **arrow in a circle** icon next to the
database name. It is only displayed if an upgrade is available.
.. note::
Make sure to connect as the administrator of the database that changes will be made on.
.. image:: odoo_online/dropdown-menu.png
:align: right
:alt: Clicking on the gear icon opens the drop-down menu.
Open the drop-down menu next to the database that changes will be made on by clicking on the gear
icon.
Several actions are available:
.. image:: odoo_online/database-manager.png
:alt: Accessing the database management options
- :ref:`odoo_online/upgrade`
- :ref:`odoo_online/duplicate`
@@ -37,39 +27,24 @@ Several actions are available:
Upgrade
=======
If the database is *not* on the latest **Online version**, the administrator should receive an
invitation to :doc:`upgrade <../upgrade>` the database. A :guilabel:`Rolling Release`` button on the
database's main screen proposes an upgrade to the latest version (e.g., 14.0 to 16.1).
.. important::
- | **If the Odoo database's version is lower than the latest major release:**
| The database must be upgraded within two months. After these two months, an automatic
upgrade is initiated.
- | **If the Odoo database's version is equal to or higher than the latest major release:**
| Disregard the invitation to upgrade as the database probably wouldn't benefit from new
features every two months.
.. note::
Versions that are not supported anymore become deprecated and need to be updated to avoid
security issues. Odoo recommends that the company initiate the upgrade, as this method allows for
the company to request a test upgrade of the database to check for any discrepancies.
Trigger a database upgrade.
.. seealso::
- :doc:`../upgrade`
- :doc:`supported_versions`
For more information about the upgrade process, check out the :doc:`Odoo Online upgrade
documentation <../upgrade/odoo_online>`.
.. _odoo_online/duplicate:
Duplicate
=========
This allows to make an exact copy of the database to be able to perform testing without compromising
the daily operations.
Create an exact copy of the database, which can be used to perform testing without compromising
daily operations.
.. important::
- By checking :guilabel:`For testing purposes`, all external communication (emails, payments,
delivery orders, etc.) are disabled by default on the duplicated database.
- Duplicate databases expire automatically after 15 days.
- By checking :guilabel:`For testing purposes`, all external actions (emails, payments, delivery
orders, etc.) are disabled by default on the duplicated database.
- Duplicated databases expire automatically after 15 days.
.. _odoo_online/rename:
@@ -83,28 +58,31 @@ Rename the database and its URL.
Download
========
Instantly download a ZIP file with a backup of the database.
Download a ZIP file containing a backup of the database.
.. note::
Databases are backed up daily according to the `Odoo Cloud SLA
Databases are backed up daily as per the `Odoo Cloud Hosting SLA
<https://www.odoo.com/cloud-sla>`_.
.. _odoo_online/domains:
Domains
=======
Domain names
============
Configure custom domains to access the database via another URL.
Use a custom :doc:`domain name <domain_names>` to access the database via another URL.
.. seealso::
- :doc:`domain_names`
.. tip::
You can :ref:`register a domain name for free <domain-name/odoo-register>`.
.. _odoo_online/tags:
Tags
====
Add tags to sort your databases out. You can search the tags in the search bar.
Add tags to easily identify and sort your databases.
.. tip::
You can search for tags in the search bar.
.. _odoo_online/delete:
@@ -114,44 +92,43 @@ Delete
Delete a database instantly.
.. danger::
Deleting a database means that all data is permanently lost. The deletion is instant and for all
users. It is recommended to create a backup of the database before deleting it.
Deleting a database means that all data is permanently lost. The deletion is instant and applies
to all users. It is recommended to create a backup of the database before deleting it.
Carefully read the warning message that pops up and proceed only if the implications of deleting a
database are fully understood:
Carefully read the warning message and only proceed if the implications of deleting a database are
fully understood.
.. image:: odoo_online/delete.png
:align: center
:alt: A warning message is prompted before deleting a database.
:alt: The warning message displayed before deleting a database
.. note::
- Only an administrator can delete a database.
- The database name is immediately available for a new database.
- It is not possible to delete a database if it is expired or linked to a subscription. If
needed, please get in touch with `Odoo Support <https://www.odoo.com/help>`_.
- The database name is immediately made available to anyone.
- Deleting a database if it has expired or is linked to a subscription is impossible. In that
case, contact `Odoo Support <https://www.odoo.com/help>`_.
.. _odoo_online/contact-support:
Contact Support
===============
Contact us
==========
Access the Odoo `support page <https://www.odoo.com/help>`_ with your database's details already
Access the `Odoo.com support page <https://www.odoo.com/help>`_ with the database's details already
pre-filled.
.. _odoo_online/users:
Invite / Remove Users
Invite / remove users
=====================
To invite users, fill out the email address of the new user and click on :guilabel:`Invite`. To add
multiple users, click on :guilabel:`Add more users`.
To invite users, fill out the new user's email address and click :guilabel:`Invite`. To add multiple
users, click :guilabel:`Add more users`.
.. image:: odoo_online/invite-users.png
:align: center
:alt: Clicking on "Add more users" adds additional email fields.
:alt: Inviting a user on a database
To remove users, select the users to remove and click on :guilabel:`Remove`.
To remove users, select them and click :guilabel:`Remove`.
.. seealso::
- :doc:`/applications/general/users/manage_users`
- :doc:`/applications/general/users/delete_account`
- :doc:`../../applications/general/users/manage_users`
- :doc:`../../applications/general/users/delete_account`
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

@@ -23,47 +23,76 @@ This matrix shows the support status of every version.
**Major releases are in bold type.**
+-----------------+-------------+----------+-------------+----------------+------------------------+
| | Odoo Online | Odoo.sh | On-Premise | Release date | End of support |
+=================+=============+==========+=============+================+========================+
| Odoo saas~16.2 | |green| | N/A | N/A | March 2023 | June 2023 (planned) |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo saas~16.1 | |green| | N/A | N/A | February 2023 | April 2023 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 16.0** | |green| | |green| | |green| | October 2022 | October 2025 (planned) |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo saas~15.2 | |red| | N/A | N/A | March 2022 | January 2023 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo saas~15.1 | |red| | N/A | N/A | February 2022 | July 2022 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 15.0** | |green| | |green| | |green| | October 2021 | October 2024 (planned) |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 14.0** | |green| | |green| | |green| | October 2020 | October 2023 (planned) |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 13.0** | |red| | |red| | |red| | October 2019 | October 2022 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo saas~12.3 | |red| | N/A | N/A | August 2019 | |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 12.0** | |red| | |red| | |red| | October 2018 | October 2021 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo saas~11.3 | |red| | N/A | N/A | April 2018 | |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 11.0** | |red| | |red| | |red| | October 2017 | October 2020 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo 10.saas~15 | |red| | N/A | N/A | March 2017 | |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo 10.saas~14 | |red| | N/A | N/A | January 2017 | |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 10.0** | |red| | |red| | |red| | October 2016 | October 2019 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo 9.saas~11 | |red| | N/A | N/A | May 2016 | |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 9.0** | |red| | N/A | |red| | October 2015 | October 2018 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo 8.saas~6 | |red| | N/A | N/A | February 2015 | |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 8.0** | |red| | N/A | |red| | September 2014 | October 2017 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
.. list-table::
:header-rows: 1
:widths: auto
* -
- Odoo Online
- Odoo.sh
- On-Premise
- Release date
- End of support
* - Odoo saas~16.4
- |green|
- N/A
- N/A
- August 2023
-
* - Odoo saas~16.3
- |red|
- N/A
- N/A
- June 2023
-
* - Odoo saas~16.2
- |red|
- N/A
- N/A
- March 2023
-
* - Odoo saas~16.1
- |red|
- N/A
- N/A
- February 2023
-
* - **Odoo 16.0**
- |green|
- |green|
- |green|
- October 2022
- October 2025 (planned)
* - Odoo saas~15.2
- |red|
- N/A
- N/A
- March 2022
- January 2023
* - Odoo saas~15.1
- |red|
- N/A
- N/A
- February 2022
- July 2022
* - **Odoo 15.0**
- |green|
- |green|
- |green|
- October 2021
- October 2024 (planned)
* - **Odoo 14.0**
- |green|
- |green|
- |green|
- October 2020
- November 2023 (planned)
* - **Odoo 13.0**
- |red|
- |red|
- |red|
- October 2019
- October 2022
.. note::
@@ -86,8 +115,10 @@ This matrix shows the support status of every version.
I run an older version of Odoo/OpenERP/TinyERP
==============================================
OpenERP 7.0, 6.1, 6.0 and 5.0 is not supported anymore, on any platform.
Odoo 12.0, 11.0, 10.0, 9.0, and 8.0 are not supported anymore, on any platform.
TinyERP 4.0, 3.0, 2.0 and 1.0 is not supported anymore, on any platform.
OpenERP 7.0, 6.1, 6.0 and 5.0 are not supported anymore, on any platform.
TinyERP 4.0, 3.0, 2.0 and 1.0 are not supported anymore, on any platform.
Even though we don't support older versions, you can always `upgrade from any version <https://upgrade.odoo.com/>`_.
+1 -1
View File
@@ -46,7 +46,7 @@ Updating Odoo is accomplished by simply reinstalling the latest version of your
Edition on top of your current installation. This will preserve your data without any alteration,
as long as you do not uninstall PostgreSQL (the database engine that comes with Odoo).
The main reference for updating is logically our :ref:`installation guide <setup/install>`,
The main reference for updating is logically our :doc:`installation guide <../install>`,
which explains the common installation methods.
Updating is also most appropriately accomplished by the person who deployed Odoo initially,
@@ -85,7 +85,7 @@ From the Odoo.sh editor, in a terminal:
$ odoo-bin scaffold my_module ~/src/user/
Or, from your computer, if you have an :ref:`installation of Odoo <setup/install/source>`:
Or, from your computer, if you have an :doc:`installation of Odoo <../../install/source>`:
.. code-block:: bash
@@ -45,41 +45,101 @@ these databases if they have one, using their regular credentials.
In addition, they cannot use the webshell nor have access to the server logs.
+---------------------+-----------------+-----------+-----------+
| | | User | Admin |
+=====================+=================+===========+===========+
|Development | History | X | X |
+---------------------+-----------------+-----------+-----------+
| | 1-click connect | X | X |
+---------------------+-----------------+-----------+-----------+
| | Logs | X | X |
+---------------------+-----------------+-----------+-----------+
| | Shell/SSH | X | X |
+---------------------+-----------------+-----------+-----------+
| | Mails | X | X |
+---------------------+-----------------+-----------+-----------+
| | Settings | X | X |
+---------------------+-----------------+-----------+-----------+
|Production & Staging | History | X | X |
+---------------------+-----------------+-----------+-----------+
| | 1-click connect | | X |
+---------------------+-----------------+-----------+-----------+
| | Logs | | X |
+---------------------+-----------------+-----------+-----------+
| | Shell/SSH | | X |
+---------------------+-----------------+-----------+-----------+
| | Mails | | X |
+---------------------+-----------------+-----------+-----------+
| | Monitoring | | X |
+---------------------+-----------------+-----------+-----------+
| | Backups | | X |
+---------------------+-----------------+-----------+-----------+
| | Settings | X | X |
+---------------------+-----------------+-----------+-----------+
|Status | | X | X |
+---------------------+-----------------+-----------+-----------+
|Settings | | | X |
+---------------------+-----------------+-----------+-----------+
.. list-table::
:header-rows: 1
:widths: auto
* -
-
- User
- Admin
* - Development
- History
- |green|
- |green|
* -
- 1-click connect
- |green|
- |green|
* -
- Logs
- |green|
- |green|
* -
- Shell/SSH
- |green|
- |green|
* -
- Mails
- |green|
- |green|
* -
- Upgrade
- |green|
- |green|
* -
- Settings
- |green|
- |green|
* - Production & Staging
- History
- |green|
- |green|
* -
- 1-click connect
-
- |green|
* -
- Logs
-
- |green|
* -
- Shell/SSH
-
- |green|
* -
- Mails
-
- |green|
* -
- Monitoring
-
- |green|
* -
- Backups
-
- |green|
* -
- Upgrade
-
- |green|
* -
- Settings
- |green|\*
- |green|
* - Status
-
- |green|
- |green|
* - Settings
-
-
- |green|
.. note::
\* Only in staging branches
.. |green| raw:: html
<span class="text-success" style="font-size: 32px; line-height: 0.5">●</span>
.. |orange| raw:: html
<span class="text-warning" style="font-size: 32px; line-height: 0.5">●</span>
.. |red| raw:: html
<span class="text-danger" style="font-size: 32px; line-height: 0.5">●</span>
Public Access
=============
+80 -18
View File
@@ -2,29 +2,91 @@
Odoo Online
===========
Requesting a test upgrade
=========================
Odoo databases can be manually upgraded directly from the main Odoo website. To upgrade an Odoo
database, navigate to the `database manager <https://www.odoo.com/my/databases>`_ page and sign in.
#. Go to your `database manager <https://www.odoo.com/my/databases/>`_
#. Click on your profile icon and select *My Databases*.
The database manager page displays all of the Odoo databases associated with the user's account. Any
databases that are not already on the most recent version of Odoo display an **arrow in a circle**
icon next to the database name, indicating that the database can be upgraded.
.. image:: odoo_online/accessing-my-databases.png
:alt: Selecting My Databases under my profile
.. image:: odoo_online/databases-page.png
:align: center
:alt: The database manager page with an upgrade button next to the name of a database.
#. Click on the up arrow button next to your main database name to proceed to the test upgrade.
.. important::
- If the database's version is **lower** than the latest major release: the database must be
upgraded within two months. After these two months, an automatic upgrade is initiated.
- If the database's version is **equal** to or **higher** than the latest major release:
you can disregard the invitation to upgrade, as the database probably would not benefit from
new features every two months.
.. image:: odoo_online/upgrade-option.png
:alt: Selecting the action settings icon
If a database is *not* on the latest online version, its administrator should receive an invitation
to upgrade on the database's dashboard, displayed as an **arrow in a circle**.
#. In the pop-up message that appears, select the target version and then :guilabel:`Test` as
purpose.
.. image:: odoo_online/database-notification.png
:alt: Invitation to upgrade on the database dashboard.
.. note::
The :guilabel:`Production` purpose doesn't appear if you didn't test your upgraded database at
least once.
.. note::
Versions that are not supported anymore become deprecated and must be updated to avoid
security issues. It is recommended to initiate the upgrade yourself and not wait for the
automatic upgrade, as the former method allows you to request a test upgrade of the database to
check for any discrepancies.
#. This triggers the automated upgrade process. A confirmation email is then sent to you with the
the link to the upgraded database or to provide information if the upgrade failed.
Test database
=============
.. note::
You can also see and access your test database from your *My Databases* page.
Click on the **arrow in a circle** icon to start the upgrade process. On the :guilabel:`Upgrade your
database` pop-up, select the version of Odoo that the platform will be upgraded to. In the
:guilabel:`Email to notify` field, enter an email address that will receive email notifications
about the database upgrade.
There is also a :guilabel:`Purpose` section on the pop-up that is used to specify the reason for the
upgrade. However, at this stage of the process, the only selectable option is :guilabel:`Test`, as
Odoo requires users to create a test copy of the upgraded database before converting the actual
database.
.. image:: odoo_online/upgrade-pop-up.png
:align: center
:alt: The "Upgrade your database" pop-up.
After filling out the form, click the :guilabel:`Upgrade` button. The pop-up disappears and the
database being upgraded shows a red :guilabel:`Upgrade in progress` tag next to its name. An email
confirming that the upgrade is in progress is also sent to the email address specified on the
pop-up.
.. image:: odoo_online/upgrade-in-progress.png
:align: center
:alt: The "Upgrade in progress" tag next to the database name.
Once the upgrade is complete, a new test database appears on the `database manager
<https://www.odoo.com/my/databases>`_ page. To access the test database, click the drop-down arrow
(:guilabel:`⯆`) to the left of the main database's name. Doing so makes the test version appear
below it. Finally, click the green :guilabel:`Connect` button on the right side of the test
version's row to go to the database.
.. image:: odoo_online/test-database.png
:align: center
:alt: A test database on the database manager page.
Except for being on the newer version of Odoo, the test database is an exact copy of the one being
upgraded. It is important to do extensive testing in this database to ensure that the upgrade has
not altered or corrupted any data, and that all workflows still proceed as expected.
Production database
===================
After confirming the integrity of the new version, return to the `database manager
<https://www.odoo.com/my/databases>`_ page. Once again, click on the **arrow in a circle** icon next
to the database being upgraded. The :guilabel:`Upgrade your database` pop-up appears as before,
except that there is now a :guilabel:`Production` option under the :guilabel:`Purpose` section.
Select the :guilabel:`Production` option and then click :guilabel:`Upgrade` to begin the upgrade
process. As before, a notification email is sent to the email address provided and a red
:guilabel:`Upgrade in progress` tag appears next to the name of the database.
The production database is then taken offline and will be upgraded automatically. The time it takes
to upgrade the production database should be similar to the time that was necessary to upgrade the
test database. Make sure to inform database users of the scheduled downtime.
After the upgrade is finished, the :guilabel:`Upgrade in progress` tag disappears and the database
is upgraded to the version specified.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@@ -85,6 +85,8 @@ You can edit the accounting information and bank account number according to you
- :doc:`get_started/multi_currency`
- :doc:`bank/transactions`
.. _bank_accounts/suspense:
Suspense account
----------------
@@ -188,6 +188,8 @@ you will see the follow-up message and all overdue invoices.
.. image:: customer_invoices/invoice12.png
.. _customer-invoices/aging-report:
Customer aging report:
~~~~~~~~~~~~~~~~~~~~~~
@@ -228,7 +230,9 @@ the material has been shipped to the customer.
:titlesonly:
customer_invoices/overview
customer_invoices/customer_addresses
customer_invoices/payment_terms
customer_invoices/terms_conditions
customer_invoices/cash_discounts
customer_invoices/credit_notes
customer_invoices/cash_rounding
@@ -2,102 +2,116 @@
Credit notes and refunds
========================
A **credit note**, or **credit memo**, is a document issued
to a customer that notifies them that they have been credited
a certain amount.
A **credit/debit note**, or **credit/debit memo**, is a document issued to a customer that notifies
them that they have been *credited/debited* a certain amount.
There are several reasons that can lead to a credit note, such as:
* a mistake in the invoice
* a return of the goods, or a rejection of the services
* the goods delivered are damaged
Several use cases can lead to a credit note, such as:
- a mistake in the invoice
- a return of the goods, or a rejection of the services
- the goods delivered are damaged
Debit notes are less common but are most frequently used to track debts owed by customers or to
vendors because of modifications to confirmed customer invoices or vendor bills.
.. note::
Issuing a credit note is the only legal way to cancel,
refund or modify a validated invoice. Dont forget to
*register the payment* afterward if you need to send money
back to your customer.
Issuing a credit/debit note is the only legal way to cancel, refund, or modify a validated
invoice. Do not forget to **register the payment** afterward if you need to send money back to
your customer and/or validate the
:doc:`return </applications/sales/sales/products_prices/returns>` if a storable product is
returned.
Issue a Credit Note
Issue a credit note
===================
You can create a credit note from scratch by going to
:menuselection:`Accounting --> Customers --> Credit Notes`,
and by clicking on *Create*. Filling the Credit Notes form
works the same way as the Invoices form.
You can create a credit note from scratch by going to :menuselection:`Accounting --> Customers -->
Credit Notes`, and by clicking on :guilabel:`Create`. Filling out a credit note form works the same
way as an invoice form.
However, most of the time, credit notes are generated directly
from the invoices they are related to.
To do so, open the *Customer Invoice*, and click on *Add Credit Note*.
.. image:: credit_notes/credit_notes01.png
:align: center
However, most of the time, credit notes are generated directly from the related invoices. To do so,
go to :menuselection:`Accounting --> Customers --> Invoices`, open the related **customer invoice**,
and click on :guilabel:`Add Credit Note`.
You can choose between three options:
- Partial Refund
- Full Refund
- Full refund and new draft invoice
- :guilabel:`Partial Refund`
- :guilabel:`Full Refund`
- :guilabel:`Full refund and new draft invoice`
.. note::
Credit Notes numbers start with “R” and are followed by the
number of the document they are related to (e.g., RINV/2019/0004).
A credit note sequence starts with `R` and is followed by the number of the related document
(e.g., RINV/2019/0004 is related to the invoice INV/2019/0004).
Partial Refund
Partial refund
--------------
Odoo creates a draft credit note already prefilled with all the
necessary information from the original invoice.
This is the option to choose to do a partial refund, or if you
want to modify any detail on the credit note.
When selecting the :guilabel:`Partial Refund` option, Odoo creates a draft credit note already
prefilled with all the necessary information from the original invoice. This is the option to choose
if you wish to do a partial refund or if you want to modify any detail of the credit note.
.. note::
This is the only option available for invoices that are already marked as *Paid*.
This is the only option for invoices marked as *in payment* or *paid*.
Full Refund
Full refund
-----------
Odoo creates a credit note, automatically validates it, and
reconciles the original invoice with it.
When selecting the :guilabel:`Full Refund` option, Odoo creates a credit note, automatically
validates it, and reconciles it with the related invoice.
.. image:: credit_notes/credit_notes02.png
:align: center
:alt: Full refund credit note.
This is the option to choose to do a full refund or cancel
a validated invoice.
This is the option to choose for a full refund or to **cancel** a *validated* invoice.
Full refund and new draft invoice
---------------------------------
Odoo creates a credit note, automatically validates it, reconciles
the original invoice with it, and open a new draft invoice
When selecting the :guilabel:`Full refund and new draft invoice` option, Odoo creates a credit note,
automatically validates it, reconciles it with the related invoice, and opens a new draft invoice
prefilled with the same details from the original invoice.
This is the option to choose to modify the content of a validated invoice.
This is the option to **modify** the content of a *validated* invoice.
Record a Vendor Refund
Issue a debit note
==================
You can create a debit note from scratch by going to :menuselection:`Accounting --> Customers -->
Invoices` or by clicking on the related invoice you wish to issue a debit note for. On the invoice
form view, click :guilabel:`Add debit note`, fill in the information, and click :guilabel:`Create`.
Record a vendor refund
======================
**Vendor Refunds** are recorded the same way you would do with invoices credit notes:
**Vendor refunds** are recorded the same way as credit notes:
You can either create a credit note from scratch by going
to :menuselection:`Accounting --> Vendors --> Refund`, and
by clicking on *Create*, or by opening the validated *Vendor Bill*,
and clicking on *Add Credit Note*.
You can either create a credit note from scratch by going to :menuselection:`Accounting --> Vendors
--> Refund`, and by clicking on :guilabel:`Create`; or by opening the related **vendor bill**, and
clicking on :guilabel:`Add Credit Note`.
Journal Entries
Record a debit note
===================
**Debit notes** from vendors are recorded in a similar way to how they are issued to customers:
Go to :menuselection:`Accounting --> Vendors --> Bills`, open the related bill you wish to record a
debit note for, and click :guilabel:`Add debit note`. Fill in the information, and click
:guilabel:`Create debit note`.
Journal entries
===============
Issuing a credit note from an invoice creates a **reverse entry**
that zeroes out the journal items generated by the original invoice.
Issuing a credit/debit note from an invoice/bill creates a **reverse entry** that zeroes out the
journal items generated by the original invoice.
Here is an example of an invoices journal entry:
.. image:: credit_notes/credit_notes03.png
:align: center
.. example::
The journal invoice of an entry:
And here is the credit notes journal entry generated to reverse
the original invoice above:
.. image:: credit_notes/credit_notes03.png
:alt: Invoice journal entry.
.. image:: credit_notes/credit_notes04.png
:align: center
And here is the credit notes journal entry generated to reverse
the original invoice above:
.. image:: credit_notes/credit_notes04.png
:alt: Credit note journal entry reverses the invoice journal entry.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

@@ -0,0 +1,39 @@
==============================
Delivery and invoice addresses
==============================
Companies often have multiple locations, and it is common that a customer invoice should be sent to
one address and the delivery should be sent to another. Odoo's **Customer Addresses** feature is
designed to handle this scenario by making it easy to specify which address to use for each case.
.. seealso::
:doc:`overview`
Configuration
=============
To specify a sales order's invoice and delivery addresses, first go to :menuselection:`Accounting
--> Configuration --> Settings`. In the :guilabel:`Customer Invoices` section, enable
:guilabel:`Customer Addresses` and click :guilabel:`Save`.
On quotations and sales orders, there are now fields for :guilabel:`Invoice Address` and
:guilabel:`Delivery Address`. If the customer has an invoice or delivery address listed on their
contact record, the corresponding field will use that address by default, but any contact's address
can be used instead.
Invoice and deliver to different addresses
==========================================
Delivery orders and their delivery slip reports use the address set as the :guilabel:`Delivery
Address` on the sales order. By default, invoice reports show both the shipping address and the
invoice address to assure the customer that the delivery is going to the correct location.
Emails also go to different addresses. The quotation and sales order are sent to the main contact's
email, as usual, but the invoice is sent to the email of the address set as the
:guilabel:`Invoice Address` on the sales order.
.. note::
- Reports, such as the delivery slip and invoice report, can be :doc:`customized using Studio
</applications/productivity/studio/pdf_reports>`.
- If :doc:`Send by Post <snailmail>` is checked when you click :guilabel:`Send & Print`, the
invoice will be mailed to the invoice address.
@@ -21,7 +21,7 @@ transportation, insurance, customs clearance, and other relevant aspects of the
- **CPT**: Carriage paid to
- **CIP**: Carriage and insurance paid to
- **DPU**: Delivered at place unloaded
- **DPA**: Delivered at place
- **DAP**: Delivered at place
- **DDP**: Delivered duty paid
.. seealso::
@@ -2,120 +2,141 @@
Payment terms and installment plans
===================================
**Payment Terms** specify all the conditions under which a sale is paid, mostly to ensure customers
pay their invoices correctly and on time.
**Payment terms** specify all the conditions of a sale's payment to help ensure customers pay their
invoices correctly and on time.
Payment Terms can be applied to sales orders, customer invoices, supplier bills, and contacts. These
conditions cover:
Payment terms are generally defined on documents such as sales orders, customer invoices, and
vendor bills. Payment terms cover:
- The due date
- Some discounts
- Any other condition on the payment
Defining Payment Terms automatically calculates the payments' due dates. This is particularly
helpful for managing installment plans.
- The due date(s)
- Early payment discounts
- Any other conditions on the payment
An **installment plan** allows the customers to pay an invoice in parts, with the amounts and
payment dates defined beforehand by the seller.
**Examples of Payment Terms:**
- | **Immediate Payment**
| The full payment is due on the day of the invoice's issuance.
- | **15 Days** (or **Net 15**)
| The full payment is due 15 days after the invoice date.
- | **21 MFI**
| The full payment is due by the 21st of the month following the invoice date.
- | **2% 10, Net 30 EOM**
| 2% :doc:`cash discount <cash_discounts>` if the payment is received within ten days. Otherwise,
the full payment is due at the end of the month following the invoice date.
.. example::
Immediate Payment
The full payment is due on the day of the invoice's issuance.
15 Days (or Net 15)
The full payment is due 15 days after the invoice date.
21 MFI
The full payment is due by the 21st of the month following the invoice date.
30% Advance End of Following Month
30% is due on the day of the invoice's issuance. The remaining balance is due at the end of the
following month.
2% 10, Net 30 EOM
A 2% :doc:`cash discount <cash_discounts>` if the payment is received within ten days.
Otherwise, the full payment is due at the end of the month following the invoice date.
.. note::
Payment terms are not to be confused with down payment invoices. If, for a specific order, you
issue several invoices to your customer, that is neither a payment term nor an installment plan,
but an invoicing policy.
.. note::
This document is about the *Payment Terms* feature, not *Terms & Conditions*.
- Payment terms are not to be confused with :doc:`down payment invoices
</applications/sales/sales/invoicing/down_payment>`. If, for a specific order, you issue
multiple invoices to your customer, that is neither a payment term nor an installment plan but
an invoicing policy.
- This page is about the *payment terms* feature, not :doc:`terms & conditions
<terms_conditions>`, which can be used to declare contractual obligations regarding content
use, return policies, and other policies surrounding the sale of goods and services.
.. seealso::
- `Odoo Tutorials: payment terms <https://www.odoo.com/slides/slide/payment-terms-1679>`_
- :doc:`cash_discounts`
- `Odoo Tutorials: Payment Terms <https://www.odoo.com/slides/slide/payment-terms-1679>`_
Configuration
=============
Go to :menuselection:`Accounting --> Configuration --> Payment Terms` and click on *Create*.
To create new payment terms, follow these steps:
The **Description on the Invoice** is the text displayed on the document (sale order, invoice,
etc.).
#. Go to :menuselection:`Accounting --> Configuration --> Payment Terms` and click on
:guilabel:`New`.
#. Enter a name in the :guilabel:`Payment Terms` field. This field is the name displayed in the
database and is not customer-facing.
#. Enter the text to be displayed on the document (sales order, invoice, etc.) in the
:guilabel:`Description on the Invoice` field.
#. Tick the :guilabel:`Display terms on invoice` checkbox to display a breakdown of each payment and
its due date on the invoice report, if desired.
#. In the :guilabel:`Terms` section, add a set of rules (terms) to define what needs to be paid and
by which due date(s). Defining terms automatically calculates the payments' due date(s). This is
particularly helpful for managing **installment plans** (:dfn:`payment terms with multiple
terms`).
In the **Terms** section, you can add a set of rules, called *terms*, to define what needs to be
paid and by which due date.
To add a term, click on *Add a line*, and define its *Type*, *Value*, and *Due Date Computation*.
.. important::
- Terms are computed in the order they are set up.
- The **balance** should always be used for the last line.
In the following example, 30% is due on the day of issuance, and the balance is due at the end of
the following month.
.. image:: payment_terms/configuration.png
:align: center
:alt: Example of Payment Terms. The last line is the balance due on the 31st of the following
month.
Using Payment Terms
===================
Payment Terms can be defined in the **Due Date** field, with the **Terms** drop-down list, on:
- | **Quotations**
| To set specific payment terms automatically on all invoices generated from a quotation.
- | **Customer Invoices**
| To set specific payment terms on an invoice.
- | **Vendor Bills**
| To set specific payment terms on a bill. This is mostly useful when you need to manage vendor
terms with several installments. Otherwise, setting the *Due Date* is enough.
To add a term, click on :guilabel:`Add a line`, define its :guilabel:`Due Type` and
:guilabel:`Value`, and fill out the appropriate fields to define when the term is due, including
any :doc:`discounts <cash_discounts>`. Due dates are calculated by taking the invoice/bill date,
first adding the :guilabel:`Months`, and then adding the :guilabel:`Days`. If the :guilabel:`End
of month` toggle is enabled, the due date will then be the end of that month, plus any
:guilabel:`Days after End of month`.
.. tip::
You can also define a **Due Date** manually. If Payment Terms are already defined, empty the
field so you can select a date.
To instead specify a number of days *before the end of the month*, use a negative value in the
:guilabel:`Days after End of month` field.
Payment Terms can be defined with the **Payment Terms** field on:
To test that your payment terms are configured correctly, enter an invoice amount and invoice date
in the :guilabel:`Example` section to generate the payments that would be due and their due dates
using these payment terms.
- | **Contacts**
| To set specific payment terms automatically on new sales orders, invoices, and bills of a
contact. This can be modified in the contacts *Form View*, under the *Sales & Purchase* tab.
.. important::
- Terms are computed in the order of their due dates.
- The **balance** should always be used for the last line.
Journal Entries
.. example::
In the following example, 30% is due on the day of issuance, and the balance is due at the end of
the following month.
.. image:: payment_terms/configuration.png
:alt: Example of Payment Terms. The last line is the balance due on the 31st of the following
month.
Using payment terms
===================
Payment terms can be defined using the :guilabel:`Payment Terms` field on:
- **Contacts:** To automatically set default payment terms on a contact's new sales orders,
invoices, and bills. This can be modified in the contact form, under the :guilabel:`Sales &
Purchase` tab.
- **Quotations/Sales Orders:** To set specific payment terms automatically on all invoices generated
from a quotation or sales order.
Payment terms can be defined using the :guilabel:`Due Date` field, with the :guilabel:`Terms`
drop-down list on:
- **Customer invoices:** To set specific payment terms on an invoice.
- **Vendor bills:** To set specific payment terms on a bill.
.. tip::
Setting payment terms on a vendor bill is mostly useful for managing vendor terms with multiple
installments or cash discounts. Otherwise, manually setting the **due date** is enough. If
payment terms are already defined, empty the field to select a date.
Journal entries
===============
Invoices with specific Payment Terms generate different *Journal Entries*, with one *Journal Item*
for every computed *Due Date*.
Invoices with specific payment terms generate different *journal entries*, with one *journal item*
for every computed *due date*.
This makes for easier *Follow-ups* and *Reconciliation* since Odoo takes each due date into account,
rather than just the balance due date. It also helps to get an accurate *Aged Receivable report*.
This makes for easier :doc:`follow-ups </applications/finance/accounting/payments/follow_up>` and
:doc:`reconciliation </applications/finance/accounting/bank/reconciliation>` since Odoo takes each
due date into account, rather than just the balance due date. It also helps to get an accurate
:ref:`aged receivable report <customer-invoices/aging-report>`.
.. image:: payment_terms/journal-entry.png
:align: center
:alt: The amount debited on the Account Receivable is split into two Journal Items with distinct
Due Dates
.. example::
.. image:: payment_terms/journal-entry.png
:alt: The amount debited to the account receivable is split into two journal items with
distinct due dates
In this example, an invoice of $1000 has been issued with the following payment terms: *30% is due
on the day of issuance, and the balance is due at the end of the following month.*
In this example, an invoice of $1000 has been issued with the following payment terms: *30% is
due on the day of issuance, and the balance is due at the end of the following month.*
+----------------------+-------------+---------+---------+
| Account | Due date | Debit | Credit |
+======================+=============+=========+=========+
| Account Receivable | February 21 | 300 | |
+----------------------+-------------+---------+---------+
| Account Receivable | March 31 | 700 | |
+----------------------+-------------+---------+---------+
| Product Sales | | | 1000 |
+----------------------+-------------+---------+---------+
+----------------------+-------------+---------+---------+
| Account | Due date | Debit | Credit |
+======================+=============+=========+=========+
| Account Receivable | February 21 | 300 | |
+----------------------+-------------+---------+---------+
| Account Receivable | March 31 | 700 | |
+----------------------+-------------+---------+---------+
| Product Sales | | | 1000 |
+----------------------+-------------+---------+---------+
The $1000 debited on the Account Receivable is split into two distinct *Journal Items*. Both of
them have their own **Due Date**.
The $1000 debited to the account receivable is split into two distinct journal items. Both of
them have their own due date.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 22 KiB

@@ -0,0 +1,39 @@
==================================
Default terms and conditions (T&C)
==================================
Specifying terms and conditions is essential to establish important contractual points, such as
return and refunds, warranty, and after-sale services.
You can add default terms and conditions at the bottom of all customer invoices, sales orders, and
quotations, either as text or a link to a web page.
.. seealso::
`Odoo Tutorial: Terms & Conditions <https://www.odoo.com/slides/slide/terms-conditions-1680>`_
Configuration
=============
Go to :menuselection:`Accounting --> Configuration --> Settings`. Under the :guilabel:`Customer
Invoices`, enable :guilabel:`Default Terms & Conditions`. By default, the :guilabel:`Add a Note`
option is selected, and the terms and conditions are displayed at the bottom of the document. Enter
the terms and conditions in the text box below.
.. image:: terms_conditions/terms-note.png
:alt: Example of terms and conditions as a note
.. tip::
You can also add a PDF version of your terms and conditions as an attachment when sending the
document via email. Edit the email templates if you want to include them by default.
Alternatively, to display the terms and conditions on a web page, select the :guilabel:`Add a link
to a Web Page` option and click :guilabel:`Save`. Click :guilabel:`Update Terms`, edit the
content, and click :guilabel:`Save`. The link to that page is then added as a note in your document.
.. note::
You can edit the layout and content of the page using the :doc:`Website
</applications/websites/website>` app. If the Website app is activated, the :guilabel:`Edit in
Website Builder` option then replaces :guilabel:`Update Terms`.
.. image:: terms_conditions/terms-webpage.png
:alt: Example of terms and conditions as a web page
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@@ -187,3 +187,6 @@ To do so, check the :guilabel:`Deprecated` box in the account's settings, and sa
* :doc:`../vendor_bills/deferred_expenses`
* :doc:`../customer_invoices/deferred_revenues`
* :doc:`../../fiscal_localizations`
* `Odoo Tutorials: Chart of accounts <https://www.odoo.com/slides/slide/chart-of-accounts-1630>`_
* `Odoo Tutorials: Update your chart of accounts
<https://www.odoo.com/slides/slide/update-your-chart-of-accounts-1658>`_
@@ -101,8 +101,7 @@ Journals
If a currency is set on a **journal**, that journal only handles transactions in that currency.
To do so, go to :menuselection:`Accounting --> Configuration --> Journals`, open the journal you
want to edit, and select a currency in the field :guilabel:`Currency`. If left empty, all active
currencies are handled instead of just one.
want to edit, and select a currency in the field :guilabel:`Currency`.
.. image:: multi_currency/journal-currency.png
:align: center
@@ -118,7 +117,8 @@ Multi-currency accounting
Invoices, bills, and other documents
------------------------------------
For all documents, you can select the currency and journal to use for the transaction.
For all documents, you can select the currency and journal to use for the transaction on the
document itself.
.. image:: multi_currency/currency-field.png
:align: center
@@ -139,13 +139,13 @@ To register a payment in a currency other than your company's main currency, cli
.. _multi-currency/mca-statements:
Bank statements
---------------
Bank transactions
-----------------
When creating or importing bank statements, the amount is in the company's main currency. To see
additional fields related to foreign currencies, click on the **columns dropdown button**
(:guilabel:`⋮`) next to :guilabel:`Amount`, and check :guilabel:`Amount Currency` and
:guilabel:`Foreign Currency`.
When creating or importing bank transactions, the amount is in the company's main currency. To input
a **foreign currency**, select a currency in the :guilabel:`Foreign Currency`. Once selected, enter
the :guilabel:`Amount` in your main currency for it to automatically get converted in the foreign
currency in the :guilabel:`Amount in Currency field`.
.. image:: multi_currency/foreign-fields.png
:align: center
Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 11 KiB

@@ -91,7 +91,7 @@ Batch Payment`.
- :doc:`payments/batch`
- :doc:`payments/batch_sdd`
.. _payments-matching:
.. _payments/matching:
Payments matching
-----------------
@@ -2,128 +2,122 @@
Checks
======
There are two ways to handle payments received by checks. Odoo support
both approaches so that you can use the one that better fits your
habits.
There are two ways to handle payments received by checks in Odoo, either by using :ref:`outstanding
accounts <checks/outstanding-account>` or by :ref:`bypassing the reconciliation process
<checks/reconciliation-bypass>`.
1. **Undeposited Funds:**
once you receive the check, you record a payment
by check on the invoice. (using a Check journal and posted on the
Undeposited Fund account) Then, once the check arrives in your
bank account, move money from Undeposited Funds to your bank
account.
**Using outstanding accounts is recommended**, as your bank account balance stays accurate by taking
into account checks yet to be cashed.
2. **One journal entry only:**
once your receive the check, you record a
payment on your bank, paid by check, without going through the
**Undeposited Funds**. Once you process your bank statement, you do
the matching with your bank feed and the check payment, without
creating a dedicated journal entry.
.. note::
Both methods produce the same data in your accounting at the end of the process. But if you
have checks that have not been cashed in, the **Outstanding Account** method reports these
checks in the **Outstanding Receipts** account. However, funds appear in your bank account
whether or not they are reconciled, as the bank value is reflected at the moment of the bank
statement.
We recommend the first approach as it is more accurate (your bank
account balance is accurate, taking into accounts checks that have not
been cashed yet). Both approaches require the same effort.
.. seealso::
* :ref:`Outstanding accounts <bank/outstanding-accounts>`
* :ref:`Bank reconciliation <accounting/reconciliation>`
Even if the first method is cleaner, Odoo support the second approach
because some accountants are used to it (quickbooks and peachtree
users).
.. _checks/outstanding-account:
.. Note::
You may have a look at the *Deposit Ticket feature* if you deposit
several checks to your bank accounts in batch.
Method 1: Outstanding account
=============================
Option 1: Undeposited Funds
===========================
When you receive a check, you :doc:`record a payment <../bank/reconciliation>` by check on the
invoice. Then, when your bank account is credited with the check's amount, you reconcile the payment
and statement to move the amount from the **Outstanding Receipt** account to the **Bank** account.
Configuration
-------------
.. tip::
You can create a new payment method named *Checks* if you would like to identify such payments
quickly. To do so, go to :menuselection:`Accounting --> Configuration --> Journals --> Bank`,
click the :guilabel:`Incoming Payments` tab, and :guilabel:`Add a line`. As :guilabel:`Payment
Method`, select :guilabel:`Manual`, enter `Checks` as name, and :guilabel:`Save`.
- Create a journal **Checks**
.. _checks/reconciliation-bypass:
- Set **Undeposited Checks** as a default credit/debit account
Method 2: Reconciliation bypass
===============================
- Set the bank account related to this journal as **Allow Reconciliation**
When you receive a check, you :doc:`record a payment <../bank/reconciliation>` on the related
invoice. The amount is then moved from the **Account Receivable** to the **Bank** account, bypassing
the reconciliation and creating only **one journal entry**.
From check payments to bank statements
--------------------------------------
To do so, you *must* follow the following setup. Go to :menuselection:`Accounting --> Configuration
--> Journals --> Bank`. Click the :guilabel:`Incoming Payments` tab and then :guilabel:`Add a line`,
select :guilabel:`Manual` as :guilabel:`Payment Method`, and enter `Checks` as :guilabel:`Name`.
Click the toggle menu button, tick :guilabel:`Outstanding Receipts accounts`, and in the
:guilabel:`Outstanding Receipts accounts` column, and set the :guilabel:`Bank` account for the
**Checks** payment method.
The first way to handle checks is to create a check journal. Thus,
checks become a payment method in itself and you will record two
transactions.
.. image:: checks/outstanding-payment-accounts.png
:alt: Bypass the Outstanding Receipts account using the Bank account.
Once you receive a customer check, go to the related invoice and click
on **Register Payment**. Fill in the information about the payment:
Payment registration
====================
- Payment method: Check Journal (that you configured with the debit and
credit default accounts as **Undeposited Funds**)
.. note::
By default, there are two ways to register payments made by check:
- Memo: write the Check number
- **Manual**: for single checks;
- **Batch**: for multiple checks at once.
.. image:: checks/check02.png
This documentation focuses on **single-check** payments. For **batch deposits**, see :doc:`the
batch payments documentation <batch>`.
This operation will produce the following journal entry:
Once you receive a customer check, go to the related invoice (:menuselection:`Accounting -->
Customer --> Invoices)`, and click :guilabel:`Register Payment`. Fill in the payment information:
- :guilabel:`Journal: Bank`;
- :guilabel:`Payment method`: :guilabel:`Manual` (or **Checks** if you have created a specific
payment method);
- :guilabel:`Memo`: enter the check number;
- Click :guilabel:`Create Payment`.
.. image:: checks/payment-checks.png
:alt: Check payment info
The generated journal entries are different depending on the payment registration method chosen.
Journal entries
===============
Outstanding account
-------------------
The invoice is marked as :guilabel:`In Payment` as soon as you record the payment. This operation
produces the following **journal entry**:
+----------------------+-------------------+----------+----------+
| Account | Statement Match | Debit | Credit |
+======================+===================+==========+==========+
| Account Receivable | | | 100.00 |
+----------------------+-------------------+----------+----------+
| Undeposited Funds | | 100.00 | |
| Outstanding Receipts | | 100.00 | |
+----------------------+-------------------+----------+----------+
The invoice is marked as paid as soon as you record the check.
Then, once you get the bank statements, you will match this statement
with the check that is in Undeposited Funds.
Then, once you receive the bank statements, match this statement with the check of the **Outstanding
Receipts** account. This produces the following **journal entry**:
+---------------------+-------------------+----------+----------+
| Account | Statement Match | Debit | Credit |
+=====================+===================+==========+==========+
| Undeposited Funds | X | | 100.00 |
| Outstanding Receipts| X | | 100.00 |
+---------------------+-------------------+----------+----------+
| Bank | | 100.00 | |
+---------------------+-------------------+----------+----------+
If you use this approach to manage received checks, you get the list of checks that have not been
cashed in the **Outstanding Receipt** account (accessible, for example, from the general ledger).
If you use this approach to manage received checks, you get the list of
checks that have not been cashed in the **Undeposit Funds** account
(accessible, for example, from the general ledger).
Reconciliation bypass
---------------------
.. Note::
Both methods will produce the same data in your accounting at the
end of the process. But, if you have checks that have not been cashed,
this one is cleaner because those checks have not been reported yet on
your bank account.
The invoice is marked as :guilabel:`Paid` as soon as you record the check.
Option 2: One journal entry only
================================
Configuration
-------------
These is nothing to configure if you plan to manage your checks using
this method.
From check payments to bank statements
--------------------------------------
Once you receive a customer check, go to the related invoice and click
on **Register Payment**. Fill in the information about the payment:
- **Payment method:** the bank that will be used for the deposit
- Memo: write the check number
.. image:: checks/check03.png
The invoice is marked as paid as soon as you record the check.
Once you will receive the bank statements, you will do the matching with
the statement and this actual payment. (technically: point this payment
and relate it to the statement line)
With this approach, you will get the following journal entry in your
books:
With this approach, you bypass the use of **outstanding accounts**, effectively getting only one
journal entry in your books and bypassing the reconciliation:
+----------------------+-------------------+----------+----------+
| Account | Statement Match | Debit | Credit |
@@ -132,17 +126,3 @@ books:
+----------------------+-------------------+----------+----------+
| Bank | | 100.00 | |
+----------------------+-------------------+----------+----------+
.. tip::
You may also record the payment directly without going on the
customer invoice, using the menu :menuselection:`Sales --> Payments`. This method may
be more convenient if you have a lot of checks to record in a batch but
you will have to reconcile entries afterwards (matching payments with
invoices)
If you use this approach to manage received checks, you can use the
report **Bank Reconciliation Report** to verify which checks have been
received or paid by the bank. (this report is available from the **More**
option from the Accounting dashboard on the related bank account).
.. image:: checks/check01.png
Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

@@ -3,9 +3,9 @@ Follow-up on invoices
=====================
A follow-up message can be sent to customers when a payment is overdue. Odoo helps you identify late
payments and allows you to schedule and send the appropriate reminders, using **follow-up actions**
that trigger automatically one or more actions according to the number of overdue days. You can send
your follow-ups via different means such as email, post, or SMS.
payments and allows you to schedule and send the appropriate reminders using **follow-up actions**
that automatically trigger one or more actions according to the number of overdue days. You can send
your follow-ups via different means, such as email, post, or SMS.
.. seealso::
- `Odoo Tutorials: Payment Follow-up <https://www.odoo.com/slides/slide/payment-follow-up-1682>`_
@@ -14,47 +14,63 @@ Configuration
=============
To configure a :guilabel:`Follow-Up Action`, go to :menuselection:`Accounting --> Configuration -->
Follow-up Levels`. Several follow-up actions are available by default, and you can customize them
any way you want or create new ones to trigger the following actions:
Follow-up Levels`, and select or create (a) new follow-up level(s). Several follow-up actions are
available by default under the :guilabel:`Notification` tab, and the **name** as well as the
**number of days** can be changed. The follow-up :guilabel:`Actions` available are:
- Send an email;
- :ref:`Send an SMS message <pricing/pricing_and_faq>`;
- Print a letter;
- :ref:`Send a letter <customer_invoices/snailmail>`;
- Manual action (creates a task).
- :guilabel:`Send Email`;
- :ref:`Send a Letter <customer_invoices/snailmail>`;
- :ref:`Send an SMS message <pricing/pricing_and_faq>`.
It is also possible to automatically send a reminder by enabling the :guilabel:`Auto Execute`
option, within a specific :guilabel:`Follow-Up Action`.
You can use a pre-filled template for your messages by selecting a :guilabel:`Content Template`. To
change the template used, hover over the field and click the :guilabel:`-->`. If enabled, SMS
messages have a specific :guilabel:`Sms Template` field.
It is possible to automatically send a reminder by enabling the :guilabel:`Automatic` option, and
attaching the *open* invoice(s) by enabling :guilabel:`Attach Invoices`, within a specific follow-up
action.
By clicking on the :guilabel:`Activity` tab, scheduling activities (tasks) is possible. That way,
an activity is automatically scheduled when the follow-up is triggered. To do so, enable
:guilabel:`Schedule Activity`, and select a :guilabel:`Responsible` person for the task. Choose an
:guilabel:`Activity Type`, and enter a :guilabel:`Summary` on how to handle the activity, if
desired.
.. tip::
To send a reminder before the actual due date is reached, set a negative number of due days.
Set a negative number of days to send a reminder before the actual due date.
Follow-up reports
=================
The overdue invoices you need to follow up on are available in :menuselection:`Accounting -->
Customers --> Follow-up Reports`. From there, you can identify all the customers that have late
unpaid invoices.
Overdue invoices you need to follow up on are available in :menuselection:`Accounting --> Customers
--> Follow-up Reports`. By default, Odoo filters by :guilabel:`Overdue Invoices`, but you can also
filter by :guilabel:`In need of action` in the :guilabel:`Filters` menu.
When you open a customer, you see all their unpaid invoices (overdue or not). The due dates of the
late invoices appear in red. Select the invoices that are not late yet in the :guilabel:`Excluded`
column to exclude them from the reminder you send.
When selecting an invoice, you can see all of the customer's unpaid invoices (overdue or not), with
the due dates of late invoices appearing in red. You can exclude invoices from a reminder by
clicking :guilabel:`Exclude from Follow-ups`. You can set either :guilabel:`Automatic` or
:guilabel:`Manual` reminders as well as a :guilabel:`Responsible` person for that customer.
It is up to you to decide how to remind your customer. You can select :guilabel:`Print Letter`,
:guilabel:`Send By Email`, :guilabel:`Send By Post`, :guilabel:`Send By SMS`. Then, click on
:guilabel:`Done` to view the next follow-up that needs your attention.
To send reminders, click on :guilabel:`Follow up`, and select the action(s) you want to perform
from:
- :guilabel:`Print`;
- :guilabel:`Email`;
- :guilabel:`Sms`;
- :guilabel:`By post`.
You can :guilabel:`Attach Invoices` and change the content templates from this view. When done,
click :guilabel:`Send` or :guilabel:`Send & Print`.
.. note::
- The contact information available on the invoice or on the contact form is used to send the
reminder.
- The contact information on the invoice or the contact form is used to send the reminder.
- When the reminder is sent, it is documented in the chatter of the invoice.
- If it is not the right time for a reminder, you can specify the :guilabel:`Next Reminder Date`
and click on :guilabel:`Remind me later`. You will get the next report according to the next
reminder date set on the statement.
- If it is not the right time for a reminder, you can specify the :guilabel:`Next Reminder` date.
You will get the next report according to the next reminder date set.
.. tip::
Reconcile your bank statements right before launching your follow-up process to avoid sending a
reminder to a customer that has already paid you.
Reconcile all bank statements right before launching the follow-up process to avoid sending a
reminder to a customer that has already paid.
Debtor's trust level
--------------------
@@ -30,6 +30,8 @@ you want to compare the chosen time period with. You can choose up to 12
periods back from the date of the report if you don't want to use the
default **Previous 1 Period** option.
.. _reporting/balance-sheet:
Balance Sheet
-------------
@@ -103,6 +105,8 @@ occurred during a certain period of time.
.. image:: reporting/main_reports05.png
.. _reporting/aged-payable:
Aged Payable
------------
@@ -112,6 +116,8 @@ have gone unpaid.
.. image:: reporting/main_reports02.png
.. _reporting/aged-receivable:
Aged Receivable
---------------
@@ -129,6 +135,8 @@ operating, investing and financing activities.
.. image:: reporting/main_reports03.png
.. _reporting/tax-report:
Tax Report
----------
@@ -2,115 +2,111 @@
Year-end closing
================
Before going ahead with closing a fiscal year, there are a few steps one
should typically take to ensure that your accounting is correct, up to
date, and accurate:
- Make sure you have fully reconciled your **bank account(s)** up to
year end and confirm that your ending book balances agree with
your bank statement balances.
- Verify that all **customer invoices** have been entered and approved.
- Confirm that you have entered and agreed all **vendor bills**.
- Validate all **expenses**, ensuring their accuracy.
- Corroborate that all **received payments** have been entered and
recorded accurately.
Year-end closing is vital for maintaining financial accuracy, complying with regulations, making
informed decisions, and ensuring transparency in reporting.
.. _year-end/fiscal-years:
Manage fiscal years
===================
Fiscal years
============
In most cases, the fiscal years last 12 months. If it is your case, you
just have to define what is the last day of your fiscal year in the
accounting settings. By default, it is set on the 31st December.
By default, the fiscal year is set to last 12 months and end on December 31st. However, its duration
and end date can vary due to cultural, administrative, and economic considerations.
However, there might be some exceptions. For example, if it is the first
fiscal year of your business, it could last more or less than 12 months.
In this case, some additional configuration is required.
To modify these values, go to :menuselection:`Accounting --> Configuration --> Settings`. Under the
:guilabel:`Fiscal Periods` section, change the :guilabel:`Last Day` field if necessary.
Go to :menuselection:`accounting --> configuration --> settings` and activate
the fiscal years.
You can then configure your fiscal years in
:menuselection:`accounting --> configuration --> fiscal years`.
If the period lasts *more* than or *less* than 12 months, enable :guilabel:`Fiscal Years` and
:guilabel:`Save`. Go back to the :guilabel:`Fiscal Periods` section and click :guilabel:`➜ Fiscal
Years`. From there, click :guilabel:`Create`, give it a :guilabel:`Name`, and both a
:guilabel:`Start Date` and :guilabel:`End Date`.
.. note::
You only have to create fiscal years if they last more or less
than 12 months.
Once the set fiscal period is over, Odoo automatically reverts to the default periodicity, taking
into account the value specified in the :guilabel:`Last Day` field.
.. _year-end/checklist:
Year-end checklist
==================
- Run a **Tax report**, and verify that your tax information is correct.
Before closure
--------------
- Reconcile all accounts on your **Balance Sheet**:
Before closing a fiscal year, ensure first everything is accurate and up-to-date:
- Agree your bank balances in Odoo against your actual bank balances
on your statements. Utilize the **Bank Reconciliation** report to
assist with this.
- Make sure all bank accounts are fully :doc:`reconciled <../bank/reconciliation>` up to year-end,
and confirm that the ending book balances match the bank statement balances.
- Verify that all :doc:`customer invoices <../customer_invoices>` have been entered and
approved and that there are no draft invoices.
- Confirm that all :doc:`vendor bills <../vendor_bills>` have been entered and agreed upon.
- Validate all :doc:`expenses <../../expenses>`, ensuring their accuracy.
- Corroborate that all :doc:`received payments <../payments>` have been encoded and recorded
accurately.
- Close all :ref:`suspense accounts <bank_accounts/suspense>`.
- Book all :doc:`depreciation <../vendor_bills/assets>` and :doc:`deferred revenue
<../customer_invoices/deferred_revenues>` entries.
- Reconcile all transactions in your cash and bank accounts by
running your **Aged Receivables** and **Aged Payables** reports.
Closing a fiscal year
---------------------
- Audit your accounts, being sure to fully understand the
transactions affecting them and the nature of the
transactions, making sure to include loans and fixed assets.
Then, to close the fiscal year:
- Run the optional **Payments Matching** feature, under the **More**
dropdown on the dashboard, validating any open **Vendor Bills** and
**Customer Invoices** with their payments. This step is optional,
however it may assist the year-end process if all outstanding
payments and invoices are reconciled, and could lead finding
errors or mistakes in the system.
- Run a :ref:`tax report <reporting/tax-report>`, and verify that all tax information is correct.
- Reconcile all accounts on the :ref:`balance sheet <reporting/balance-sheet>`:
- Your accountant/bookkeeper will likely verify your balance sheet
items and book entries for:
- Update the bank balances in Odoo according to the actual balances found on the bank statements.
- Reconcile all transactions in the cash and bank accounts by running the :ref:`aged receivables
<reporting/aged-receivable>` and :ref:`aged payables <reporting/aged-payable>` reports.
- Audit all accounts, being sure to fully understand all transactions and their nature, making
sure to include loans and fixed assets.
- Optionally, run :ref:`payments matching <payments/matching>` to validate any open vendor bills
and customer invoices with their payments. While this step is optional, it could assist the
year-end closing process if all outstanding payments and invoices are reconciled, potentially
finding errors or mistakes in the system.
- Year-end manual adjustments, using the **Adviser Journal Entries**
menu (For example, the **Current Year Earnings** and **Retained
Earnings** reports).
Next, the accountant likely verifies balance sheet items and book entries for:
- **Work in Progress**.
- year-end manual adjustments,
- work in progress,
- depreciation journal entries,
- loans,
- tax adjustments,
- etc.
- **Depreciation Journal Entries**.
If the accountant is going through the year-end audit, they may want to have paper copies of all
balance sheet items (such as loans, bank accounts, prepayments, sales tax statements, etc.) to
compare these with the balances in Odoo.
- **Loans**.
.. tip::
During this process, it is good practice to set a :guilabel:`Journal Entries Lock Date` to the
last day (inclusive) of the preceding fiscal year by going to :menuselection:`Accounting -->
Accounting --> Lock Dates`. This way, the accountant can be confident that nobody changes the
transactions while auditing the books. Users from the *accountant* access group can still create
and modify entries.
- **Tax adjustments**.
Current year's earnings
~~~~~~~~~~~~~~~~~~~~~~~
If your accountant/bookkeeper is going through end of the year auditing,
they may want to have paper copies of all balance sheet items (such as
loans, bank accounts, prepayments, sales tax statements, etc...) to
agree these against your Odoo balances.
Odoo uses a unique account type called **current year's earnings** to display the amount difference
between the **income** and **expenses** accounts.
During this process, it is good practice to set the **Lock date for
Non-Advisers** to the last day of the preceding financial year, which is
set under the accounting configuration. This way, the accountant can be
confident that nobody is changing the previous year transactions
while auditing the books.
.. note::
The chart of accounts can only contain one account of this type. By default, it is a 999999
account named :guilabel:`Undistributed Profits/Losses`.
.. image:: year_end/close_fiscal_year01.png
To allocate the current year's earnings, create a miscellaneous entry to book them to any equity
account. Once done, confirm whether or not the current year's earnings in the **balance sheet** is
correctly reporting a balance of zero. If that is the case, set an :guilabel:`All Users Lock Date`
to the last day of the fiscal year by going to :menuselection:`Accounting --> Accounting --> Lock
Dates`.
.. _year-end/closing:
.. warning::
Setting an :guilabel:`All Users Lock Date` is **irreversible** and cannot be removed.
Closing the fiscal year
=======================
In Odoo there is no need to do a specific year end closing entry in order to
close out income statement accounts. The reports are created in
real-time, meaning that the **Income statement** corresponds directly with
the year-end date you specify in Odoo. Therefore, any time you generate
the **Income Statement**, the beginning date will correspond with the
beginning of the **Fiscal Year** and the account balances will all be 0.
Once the accountant/bookkeeper has created the journal entry to allocate
the **Current Year Earnings**, you should set the **Lock Date** to the last day
of the fiscal year. Making sure that before doing so, you confirm
whether or not the current year earnings in the **Balance Sheet** is
correctly reporting a 0 balance.
.. note::
A specific year-end closing entry is **optional** in order to close out the **profit and loss
statement**. The reports are created in real-time, meaning that the profit and loss statement
corresponds directly with the year-end date specified in Odoo. Therefore, any time the **income
statement** is generated, the beginning date corresponds with the beginning of the **fiscal
year** and all account balances should equal zero.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

@@ -304,7 +304,7 @@ directly to a product line.
taxes/cash_basis
taxes/retention
taxes/vat_validation
taxes/vat_verification
taxes/fiscal_positions
taxes/avatax
taxes/taxcloud
@@ -2,61 +2,64 @@
EU intra-community distance selling
===================================
**Distance sales within the European Union** include cross-border sales of goods and services to a
private consumer (B2C) in another EU Member State when the seller doesn't meet face-to-face with the
customer. Organizations must ensure that the VAT on distance sales is paid to the Member State in
which the goods or services are delivered.
EU intra-community distance selling involves the cross-border trade of goods and services from
vendors registered for VAT purposes to individuals (B2C) located in a European Union member state.
The transaction is conducted remotely, typically through online platforms, mail orders, telephone,
or other means of communication.
EU intra-community distance selling is subject to specific VAT rules and regulations. The vendor
must charge VAT per the VAT rate applicable in the buyer's country.
.. note::
This remains true even if your organization is located outside of the European Union.
While this regulation mainly applies to :doc:`eCommerce <../../../websites/ecommerce>` sales to
private EU consumers, it is also valid for mail order sales and telesales.
The Union **One-Stop Shop (OSS)** is an online portal where businesses can register for the OSS and
declare their intra-community distance sales. Each EU member state integrates an online OSS portal.
The **EU intra-community Distance Selling** feature helps your organization comply with this
regulation by creating and configuring new :doc:`fiscal positions <fiscal_positions>` and
:doc:`taxes <../taxes>` based on your company's country.
.. seealso::
- `European Commission: OSS | Taxation and Customs Union
<https://ec.europa.eu/taxation_customs/business/vat/oss_en>`_
.. _eu_distance_selling/configuration:
This remains applicable even if the vendor is located outside of the European Union.
Configuration
=============
Go to :menuselection:`Accounting/Invoicing --> Settings --> Taxes` and enable **EU intra-community
Distance Selling**.
The **EU Intra-community Distance Selling** feature helps you comply with this regulation by
creating and configuring new **fiscal positions** and **taxes** based on your company's country. To
enable it, go to :menuselection:`Accounting --> Configuration --> Settings --> Taxes`, tick
:guilabel:`EU Intra-community Distance Selling`, and :guilabel:`Save`.
.. image:: eu_distance_selling/enable-feature.png
:align: center
:alt: EU intra-community Distance Selling feature in Odoo Accounting settings
.. _eu_distance_selling/taxes:
.. tip::
Whenever you add or modify taxes, you can automatically update your fiscal positions. To do so,
go to :menuselection:`Accounting/Invoicing --> Settings --> Taxes --> EU Intra-community Distance
Selling` and click on the :guilabel:`Refresh tax mapping`.
Fiscal Positions and Taxes
==========================
Once enabled, the feature automatically creates all the necessary taxes and fiscal positions needed
for each EU member state, based on your company's country.
We highly recommend checking that the proposed mapping is suitable for the products and services you
sell before using it.
.. _eu_distance_selling/refresh-mapping:
Refresh tax mapping
-------------------
Whenever you add or modify taxes, you can update automatically your fiscal positions.
To do so, go to :menuselection:`Accounting/Invoicing --> Settings --> Taxes --> EU intra-community
Distance Selling` and click on the *Refresh tax mapping* button.
.. note::
We highly recommend checking that the proposed mapping is suitable for the products and services
you sell before using it.
.. seealso::
- :doc:`fiscal_positions`
- :doc:`../taxes`
- :doc:`../../fiscal_localizations`
- :doc:`fiscal_positions`
One-Stop Shop (OSS)
===================
The :abbr:`OSS (One-Stop Shop)` system introduced by the European Union simplifies VAT collection
for **cross-border** sales of goods and services. It primarily applies to business-to-consumer
**(B2C)** cases. With the OSS, businesses can register for VAT in their home country and use a
single online portal to handle VAT obligations for their sales within the EU. There are **two
primary schemes**: the **Union OSS** scheme for cross-border services and the **Import OSS** scheme
for goods valued at or below €150.
Reports
-------
To generate **OSS sales** or **OSS imports** reports and submit them onto the OSS portal, go to
:menuselection:`Accounting --> Reporting --> Tax Report`, click :guilabel:`Report: Generic Tax
report`, and select either :guilabel:`OSS Sales` or :guilabel:`OSS Imports`. Once selected, click on
:guilabel:`PDF`, :guilabel:`XLSX`, or :guilabel:`XML` in the top-left corner. This generates the
currently-opened report in the selected format. Once generated, log into the platform of your
competent federal authority to submit it onto the OSS portal.
.. image:: eu_distance_selling/oss-report.png
:alt: OSS reports view
.. seealso::
- `European Commission: OSS | Taxation and Customs Union <https://ec.europa.eu/taxation_customs/business/vat/oss_en>`_
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

@@ -1,6 +1,6 @@
===========================
VIES VAT numbers validation
===========================
===============================
VAT numbers verification (VIES)
===============================
**VAT Information Exchange System** - abbreviated **VIES** - is a tool provided by the European
Commission that allows you to check the validity of VAT numbers of companies registered in the
@@ -15,7 +15,7 @@ Configuration
To enable this feature, go to :menuselection:`Accounting --> Configuration --> Settings --> Taxes`,
enable the **Verify VAT Numbers** feature, and click on *Save*.
.. image:: vat_validation/vat-validation-configuration.png
.. image:: vat_verification/vat-validation-configuration.png
:align: center
:alt: Enable "Verify VAT Numbers" in Odoo Accounting
@@ -24,14 +24,14 @@ VAT Number validation
Whenever you create or modify a contact, make sure to fill out the **Country** and **VAT** fields.
.. image:: vat_validation/vat-validation-contact-form.png
.. image:: vat_verification/vat-validation-contact-form.png
:align: center
:alt: Fill out the contact form with the country and VAT number before clicking on *Save*
When you click on *Save*, Odoo runs a VIES VAT number check, and displays an error message if the
VAT number is invalid.
.. image:: vat_validation/vat-validation-error.png
.. image:: vat_verification/vat-validation-error.png
:align: center
:alt: Odoo displays an error message instead of saving when the VAT number is invalid
@@ -37,7 +37,7 @@ appropriately completed:
- :guilabel:`Vendor`: Odoo automatically fills some information based on the vendor's registered
information, previous purchase orders, or bills.
- :guilabel:`Bill Reference`: add the sales order reference provided by the vendor and is used to do
the :ref:`matching <payments-matching>` when you receive the products.
the :ref:`matching <payments/matching>` when you receive the products.
- :guilabel:`Auto-Complete`: select a past bill/purchase order to automatically complete the
document. The :guilabel:`Vendor` field should be completed prior to completing this field.
- :guilabel:`Bill Date`: is the issuance date of the document.
+611 -191
View File
@@ -4,231 +4,651 @@
Expenses
========
**Odoo Expenses** streamlines the management of expenses. Employees can submit their expenses;
managers can approve them; accountants can record them and process the payments.
Odoo **Expenses** streamlines the management of expenses. After an employee submits their expenses
in Odoo, the expenses are reviewed by management and accounting teams. Once approved, payments can
then be processed and disbursed back to the employee for reimbursement(s).
.. seealso::
- `Odoo Expenses: product page <https://www.odoo.com/app/expenses>`_
`Odoo Expenses: product page <https://www.odoo.com/app/expenses>`_
How to set expense types
========================
The first step to track expenses is to configure the expense types (managed as products in Odoo)
that your company allows, from the *Configuration* menu.
When a specific expense is reimbursed at a fixed price, set a cost on the product.
Otherwise keep the cost at 0.0 and employees will report the real cost per expense.
.. image:: expenses/product.png
:align: center
Here are some examples:
* Restaurant:
* Cost: 0.00 (the cost of the ticket will be recorded on every expense)
* Travel with Personal Car:
* Cost: 0.30 (the price per mile reimbursed by the company is fixed)
* Hotel:
* Cost: 0.00 (the cost of the ticket will be recorded on every expense)
* Others:
* Cost: 0.0
Don't forget to set an expense tax on each expense type
(and an account if you use Odoo Accounting).
It's usually a good practice to use a tax that is configured
with :ref:`Tax Included in Price <taxes/included-in-price>`.
That way, employees report expenses with
prices including taxes, which is usually the expected behaviour.
.. tip::
The *Sales* app allows you to specify units of measure for your
expense types (units, miles, nights, etc.).
Go to :menuselection:`Sales --> Configuration --> Settings` and check
*Some products may be sold/purchased in different units of measure (advanced)*.
How to record expenses
Set expense categories
======================
Manually
--------
The first step to track expenses is to configure the different types of expenses for the company
(managed as *expense categories* in Odoo). Each category can be as specific or generalized as
needed. Go to :menuselection:`Expenses app --> Configuration --> Expense Categories` to view the
current expensable categories in a default list view.
As an employee (Employee in user access rights), you can record
expenses from :menuselection:`My Expenses --> Expenses to Submit`.
.. image:: expenses/submit_01.png
.. image:: expenses/categories.png
:align: center
:alt: Set expense costs on products.
1. Select the related product and enter either the total amount
you paid (with Quantity = 1) or the unit price if Quantity is
countable (e.g. number of hotel nights).
2. Enter the expense date.
3. Choose if you paid the bill on your own (and expect to be reimbursed)
or if the company paid directly (e.g. if you used a company's credit card).
4. Set the bill reference, add some notes if requested and attach a
photo/scan of the receipt from the discussion thread.
That will help the manager and the accountant validate it.
.. image:: expenses/submit_02.png
:align: center
In one click from emails
------------------------
Let your employees record their expenses from a simple email.
Make a snapshot of the receipt and send it by email, or simply forward a bill!
The only thing to do is setting up an email alias in
:menuselection:`Expenses --> Configuration --> Settings` (e.g. *expenses* @mycompany.odoo.com).
For security purposes, only authenticated employee emails
(cfr. *Work Email* in employee detail form) are accepted.
.. tip::
The expense product is set automatically if the mail subject contains
the product's internal reference in first position.
Type the expense amount in the mail subject to set it on the expense too (e.g. Ref001 Food 100€).
How to submit expenses to managers
==================================
When you are ready to submit your expenses to your manager
(e.g. at the end of a business trip, or once a month),
go to the menu :menuselection:`My Expenses --> Expenses to Submit`. Select all expenses
from the list view and click on :menuselection:`Action --> Submit to Manager`.
Save the newly created expense report (i.e. set of expenses),
and wait for your manager to approve it.
.. image:: expenses/submit_03.png
:align: center
You can also submit expenses one by one from the *Submit to Manager*
button on the form view of an expense.
All your submitted expense reports can be found in
:menuselection:`Expenses --> My Expenses --> Expense Reports`.
How to approve expenses
=======================
HR and team managers get an overview of all expense reports to
validate from the top menu :menuselection:`To Approve --> Expense Reports to Approve`.
Such users must have at least *Officers* access rights for *Expenses*.
.. image:: expenses/approval_01.png
:align: center
They can review expense reports, approve or reject them, as well as providing
feedback thanks to the integrated communication tool.
.. image:: expenses/approval_02.png
:align: center
As a team manager you can easily find the expense reports of your team members.
You need to be set as manager in the detail form of those employees.
.. image:: expenses/approval_03.png
:align: center
How to post expenses in accounting
==================================
Once expense reports approved by managers, the accounting department
goes to :menuselection:`Expenses --> Accountant --> Expense Reports To Post` to check
accounts, products and taxes. They can click *Post Journal Entries*
to post related journal entries into your books.
To do so, the user must have following access rights:
* Accounting: Accountant or Adviser
* Expenses: Manager
To create a new expense category, click :guilabel:`New`. A product form will appear, with the
description field labeled :guilabel:`Product Name`.
.. note::
To post an expense, a *Home Address* must be set on the employee.
If you get a related blocking message when posting, click the employee,
go to *Personal Information* tab and select/create the contact of your employee
in the address book.
A contact has been automatically created if this person is using Odoo.
Expense categories are managed like products in Odoo. The expense category form follows the
standard product form in Odoo, and the information entered is similar. Expense products will be
referred to as expense categories throughout this document since the main menu refers to these as
:guilabel:`Expense Categories`.
How to reimburse employees
==========================
Only two fields are required, the :guilabel:`Product Name` and the :guilabel:`Unit of Measure`.
Enter the :guilabel:`Product Name` in the field, and select the :guilabel:`Unit of Measure` from the
drop-down menu (most products will be set to :guilabel:`Units`).
You can now see all the expense reports to reimburse in
:menuselection:`Expenses --> Accountant --> Expense Reports To Pay`.
To record the payment or pay by check, click *Register a Payment*.
.. tip::
The *Sales* app is where specification on the units of measure are created and edited (e.g.
units, miles, nights, etc.). Go to :menuselection:`Sales app --> Configuration --> Settings` and
ensure `Units of Measure` is enabled in the `Product Catalog` section. Click on the
:guilabel:`Units of Measure` internal link to view, create, and edit the units of measure. Refer
to :doc:`this document </applications/inventory_and_mrp/inventory/management/products/uom>` to
learn more about units of measure and how to configure them.
See how you can easily manage the payment process in Odoo:
.. image:: expenses/new-expense-product.png
:align: center
:alt: Set expense costs on products.
* :doc:`accounting/payments/pay_checks`
* :doc:`accounting/payments/pay_sepa`
The :guilabel:`Cost` field on the product form is populated with a value of `0.00` by default. When
a specific expense should always be reimbursed for a particular price, enter that amount in the
:guilabel:`Cost` field. Otherwise, leave the :guilabel:`Cost` set to `0.00`, and employees will
report the actual cost when submitting an expense report.
.. note::
The :guilabel:`Cost` field is always visible on the expense category form, but the
:guilabel:`Sales Price` field is *only* visible if the :guilabel:`Sales Price` is selected under
the :guilabel:`Re-Invoice Expenses` section. Otherwise, the :guilabel:`Sales Price` field is
hidden.
How to re-invoice expenses to your customers
============================================
.. example::
Here are some examples for when to set a specific :guilabel:`Cost` on a product vs. leaving the
:guilabel:`Cost` at `0.00`:
If you track expenses on customer projects, you can charge them back to
your customers automatically.
- **Meals**: Set the :guilabel:`Cost` to `0.00`. When an employee logs an expense for a meal,
they enter the actual amount of the bill and will be reimbursed for that amount. An expense for
a meal costing $95.23 would equal a reimbursement for $95.23.
- **Mileage**: Set the :guilabel:`Cost` to `0.30`. When an employee logs an expense for
"mileage", they enter the number of miles driven in the :guilabel:`Quantity` field, and are
reimbursed 0.30 per mile they entered. An expense for 100 miles would equal a reimbursement for
$30.00.
- **Monthly Parking**: Set the :guilabel:`Cost` to `75.00`. When an employee logs an expense for
"monthly parking", the reimbursement would be for $75.00.
- **Expenses**: Set the :guilabel:`Cost` to `0.00`. When an employee logs an expense that is not
a meal, mileage, or monthly parking, they use the generic :guilabel:`Expenses` product. An
expense for a laptop costing $350.00 would be logged as an :guilabel:`Expenses` product, and
the reimbursement would be for $350.00.
Select an :guilabel:`Expense Account` if using the Odoo *Accounting* app. It is recommended to check
with the accounting department to determine the correct account to reference in this field as it
will affect reports.
Set a tax on each product in the :guilabel:`Vendor Taxes` and :guilabel:`Customer Taxes` fields, if
applicable. It is considered good practice to use a tax that is configured with :ref:`Tax Included
in Price <taxes/included-in-price>`. Taxes will be automatically configured if this is set.
.. _expenses/new:
Record expenses
===============
Manually create a new expense
-----------------------------
To record a new expense, begin in the main :menuselection:`Expenses` app dashboard, which presents
the default :guilabel:`My Expenses` view. This view can also be accessed from
:menuselection:`Expenses app --> My Expenses --> My Expenses`.
First, click :guilabel:`New`, and then fill out the various fields on the form.
- :guilabel:`Description`: Enter a short description for the expense in the :guilabel:`Description`
field. This should be short and informative, such as `lunch with client` or `hotel for
conference`.
- :guilabel:`Category`: Select the expense category from the drop-down menu that most closely
corresponds to the expense. For example, an airplane ticket would be appropriate for an expense
:guilabel:`Category` named :guilabel:`Air Travel`.
- :guilabel:`Total`: Enter the total amount paid for the expense in one of two ways:
#. If the expense is for one single item/expense, and the category selected was for a single item,
enter the cost in the :guilabel:`Total` field (the :guilabel:`Quantity` field is hidden).
#. If the expense is for multiples of the same item/expense with a fixed price, the
:guilabel:`Unit Price` is displayed. Enter the quantity in the :guilabel:`Quantity` field, and
the total cost is automatically updated with the correct total (the :guilabel:`Unit Price` x
the :guilabel:`Quantity` = the total). Be advised, the word "total" does not appear, the total
cost simply appears below the :guilabel:`Quantity`.
.. example::
For example, in the case of mileage driven, the :guilabel:`Unit Price` is populated as the
cost *per mile*. Set the :guilabel:`Quantity` to the *number of miles* driven, and the total
is calculated.
- :guilabel:`Included Taxes`: If taxes were configured on the expense category, the tax percentage
and amount appear automatically after entering either the :guilabel:`Total` or the
:guilabel:`Quantity`.
.. note::
When a tax is configured on an expense category, the :guilabel:`Included Taxes` value will
update in real time as the :guilabel:`Total` or :guilabel:`Quantity` is updated.
- :guilabel:`Employee`: Using the drop-down menu, select the employee this expense is for.
- :guilabel:`Paid By`: Click the radio button to indicate who paid for the expense and should be
reimbursed. If the employee paid for the expense (and should be reimbursed) select
:guilabel:`Employee (to reimburse)`. If the company paid directly instead (e.g. if the company
credit card was used to pay for the expense) select :guilabel:`Company`. Depending on the expense
category selected, this field may not appear.
- :guilabel:`Bill Reference`: If there is any reference text that should be included for the
expense, enter it in this field.
- :guilabel:`Expense Date`: Using the calendar module, enter the date the expense was incurred. Use
the :guilabel:`< (left)` and :guilabel:`> (right)` arrows to navigate to the correct month, then
click on the specific day to enter the selection.
- :guilabel:`Account`: Select the expense account that this expense should be logged on from the
drop-down menu.
- :guilabel:`Customer to Reinvoice`: If the expense is something that should be paid for by a
customer, select the :abbr:`SO (Sales Order)` and customer that will be invoiced for this expense
from the drop-down menu. All sales orders in the drop-down menu list both the :abbr:`SO (Sales
Order)` as well as the company the sales order is written for, but after the expense is saved, the
customer name disappears and only the :abbr:`SO (Sales Order)` is visible on the expense.
.. example::
A customer wishes to have an on-site meeting for a custom garden (design and installation) and
agrees to pay for the expenses associated with it (such as travel, hotel, meals, etc.). All
expenses tied to that meeting would indicate the sales order for the custom garden (which also
references the customer) as the :guilabel:`Customer to Reinvoice`.
- :guilabel:`Analytic Distribution`: Select the account(s) the expense should be written against
from the drop-down menu for either :guilabel:`Projects`, :guilabel:`Departments`, or both.
Multiple accounts can be listed for each category if needed. Adjust the percentage for each
analytic account by typing in the percentage value next to the account.
- :guilabel:`Company`: If multiple companies are set up, select the company this expense should be
filed for from the drop-down menu. The current company will automatically populate this field.
- :guilabel:`Notes...`: If any notes are needed in order to clarify the expense, enter them in the
notes field.
.. image:: expenses/expense-filled-in.png
:align: center
:alt: A filled in expense form for a client lunch.
Attach a receipt
~~~~~~~~~~~~~~~~
After the expense is created, the next step is to attach a receipt. Click the :guilabel:`Attach
Receipt` button, and a file explorer appears. Navigate to the receipt to be attached, and click
:guilabel:`Open`. The new receipt is recorded in the chatter, and the number of receipts will appear
next to the :guilabel:`📎 (paperclip)` icon beneath the expense form. More than one receipt can be
attached to an individual expense, as needed. The number of receipts attached to the expense will be
noted on the paperclip icon.
.. image:: expenses/receipt-icon.png
:align: center
:alt: Attach a receipt and it appears in the chatter.
Create new expenses from a scanned receipt
------------------------------------------
Rather than manually inputting all of the information for an expense, expenses can be created by
scanning a PDF receipt.
First, in the main :guilabel:`Expenses` app dashboard view (this view can also be accessed from
:menuselection:`Expenses app --> My Expenses --> My Expenses`), click :guilabel:`Scan`, and a file
explorer pops up. Navigate to the receipt to be uploaded, click on it to select it, and then click
:guilabel:`Open`.
.. image:: expenses/scan.png
:align: center
:alt: Create an expense by scanning a receipt. Click Scan at the top of the Expenses dashboard
view.
The receipt is scanned, and a new entry is created with today's date as the :guilabel:`Expense
Date`, and any other fields it can populate based on the scanned data, such as the total. Click on
the new entry to open the individual expense form, and make any changes needed. The scanned receipt
appears in the chatter.
Automatically create new expenses from an email
-----------------------------------------------
Instead of individually creating each expense in the *Expenses* app, expenses can be automatically
created by sending an email to an email alias.
To do so, first, an email alias needs to be configured. Go to :menuselection:`Expenses app -->
Configuration --> Settings`. Ensure :guilabel:`Incoming Emails` is enabled.
.. image:: expenses/email-alias.png
:align: center
:alt: Create the domain alias by clicking the link.
.. note::
If the domain alias needs to be set up, :guilabel:`Setup your domain alias` will appear beneath
the incoming emails check box instead of the email address field. Refer to this documentation for
setup instructions and more information: :doc:`/administration/maintain/domain_names`. Once the
domain alias is configured, the email address field will be visible beneath the incoming emails
section.
Next, enter the email address to be used in the email field, and then click :guilabel:`Save`. Now
that the email address has been entered, emails can be sent to that alias to create new expenses
without having to be in the Odoo database.
To submit an expense via email, create a new email and enter the product's *internal reference* code
(if available) and the amount of the expense in the email subject. Next, attach the receipt to the
email. Odoo creates the expense by taking the information in the email subject and combining it with
the receipt.
To check an expense categories internal reference, go to :menuselection:`Expenses app -->
Configuration --> Expense Categories`. If an internal reference is listed on the expense category,
it is listed in the :guilabel:`Internal Reference` column.
.. image:: expenses/ref.png
:align: center
:alt: Internal reference numbers are listed in the main Expense Categories view.
To add an internal reference on an expense category, click on the category to open the form. Enter
the internal reference in the field. Beneath the :guilabel:`Internal Reference` field, this sentence
appears: :guilabel:`Use this reference as a subject prefix when submitting by email.`
.. image:: expenses/mileage-internal-reference.png
:align: center
:alt: Internal reference numbers are listed in the main Expense Products view.
.. note::
For security purposes, only authenticated employee emails are accepted by Odoo when creating an
expense from an email. To confirm an authenticated employee email address, go to the employee
card in the :menuselection:`Employees` app, and refer to the :guilabel:`Work Email`
.. image:: expenses/authenticated-email-address.png
:align: center
:alt: Create the domain alias by clicking the link.
.. example::
If submitting an expense via email for a $25.00 meal during a work trip, the email subject would
be `FOOD $25.00`.
Explanation:
- The :guilabel:`Internal Reference` for the expense category `Meals` is `FOOD`
- The :guilabel:`Cost` for the expense is `$25.00`
.. _expenses/report:
Create an expense report
========================
When expenses are ready to submit (such as at the end of a business trip, or once a month), an
*expense report* needs to be created. Go to the main :menuselection:`Expenses` app dashboard, which
displays a default :guilabel:`My Expenses` view, or go to :menuselection:`Expenses app --> My
Expenses --> My Expenses`.
Expenses are color coded by status. Any expense with a status of :guilabel:`To Report` (expenses
that still need to be added to an expense report) the text appears in blue. All other statuses
(:guilabel:`To Submit`, :guilabel:`Submitted`, and :guilabel:`Approved`) the text appears in black.
First, select each individual expense for the report by clicking the check box next to each entry,
or quickly select all the expenses in the list by clicking the check box next to :guilabel:`Expense
Date`.
Another way to quickly add all expenses that are not on an expense report is to click
:guilabel:`Create Report` without selecting any expenses, and Odoo will select all expenses with a
status of :guilabel:`To Submit` that are not already on a report.
.. image:: expenses/create-report.png
:align: center
:alt: Select the expenses to submit, then create the report.
.. note::
Any expense can be selected from the :guilabel:`My Expenses` list, regardless of status. The
:guilabel:`Create Report` button is visible as long as there is a minimum of 1 expense with a
status of :guilabel:`To Report` selected. When the :guilabel:`Create Report` button is clicked,
only expenses with a status of :guilabel:`To Submit` that are *not* currently on another expense
report will appear in the newly created expense report.
Once the expenses have been selected, click the :guilabel:`Create Report` button. The new report
appears with all the expenses listed in the :guilabel:`Expense` tab. If there is a receipt attached
to an individual expense, a :guilabel:`📎 (paperclip)` icon appears next to the :guilabel:`Customer
to Reinvoice` and :guilabel:`Analytic Distribution` columns.
When the report is created, the date range for the expenses appears in the :guilabel:`Expense Report
Summary` field by default. It is recommended to edit this field with a short summary for each report
to help keep expenses organized. Enter a short description for the expense report (such as `Client
Trip NYC`, or `Repairs for Company Car`) in the :guilabel:`Expense Report Summary` field. Next,
select a :guilabel:`Manager` from the drop-down menu to assign a manager to review the report. If
needed, the :guilabel:`Journal` can be changed. Use the drop-down menu to select a different
:guilabel:`Journal`.
.. image:: expenses/expense-report-summary.png
:align: center
:alt: Enter a short description and select a manager for the report.
If some expenses are not on the report that should be, they can still be added. Click :guilabel:`Add
a line` at the bottom of the :guilabel:`Expense` tab. A pop up appears with all the available
expenses that can be added to the report (with a status of :guilabel:`To Submit`). Click the check
box next to each expense to add, then click :guilabel:`Select`. The items now appear on the report
that was just created. If a new expense needs to be added that does *not* appear on the list, click
:guilabel:`New` to create a new expense and add it to the report.
.. image:: expenses/add-an-expense-line.png
:align: center
:alt: Add more expenses to the report before submitting.
.. note::
Expense reports can be created in one of three places:
#. Go to the main :menuselection:`Expenses` app dashboard (also accessed by going to
:menuselection:`Expenses app --> My Expenses --> My Expenses`)
#. Go to :menuselection:`Expenses app --> My Expenses --> My Reports`
#. Go to :menuselection:`Expenses app --> Expense Reports`
In any of these views, click :guilabel:`New` to create a new expense report.
.. _expenses/submit:
Submit an expense report
------------------------
When an expense report is completed, the next step is to submit the report to a manager for
approval. Reports must be individually submitted, and cannot be submitted in batches. Open the
specific report from the list of expense reports (if the report is not already open). To view all
expense reports, go to :menuselection:`Expenses app --> My Expenses --> My Reports`.
If the list is large, grouping the results by status may be helpful since only reports that have a
:guilabel:`To Submit` status need to be submitted, reports with an :guilabel:`Approved` or
:guilabel:`Submitted` status do not.
The :guilabel:`To Submit` expenses are easily identifiable not just from the :guilabel:`To Submit`
status, but the text appears in blue, while the other expenses text appears in black.
.. image:: expenses/expense-status.png
:align: center
:alt: Submit the report to the manager.
.. note::
The status of each report is shown in the :guilabel:`Status` column on the right. If the
:guilabel:`Status` column is not visible, click the :guilabel:`Additional Options (two dots)`
icon at the end of the row, and enable :guilabel:`Status`.
Click on a report to open it, then click :guilabel:`Submit To Manager`. After submitting a report,
the next step is to wait for the manager to approve it.
.. important::
The :ref:`expenses/approve`, :ref:`expenses/post`, and :ref:`expenses/reimburse` sections are
**only** for users with the *necessary rights*.
.. _expenses/approve:
Approve expenses
================
In Odoo, not just anyone can approve expense reports— only users with the necessary rights (or
permissions) can. This means that a user must have at least *Team Approver* rights for the
*Expenses* app. Employees with the necessary rights can review expense reports, approve or reject
them, and provide feedback thanks to the integrated communication tool.
To see who has rights to approve, go to the main :menuselection:`Settings` app and click on
:guilabel:`Manage Users`.
.. note::
If the *Settings* app is not available, then certain rights are not set on the account. Check the
:guilabel:`Access Rights` tab of a user's card in the :menuselection:`Settings` app. the
:guilabel:`Administration` section (bottom right of the :guilabel:`Access Rights` tab) is set to
one of three options:
- :guilabel:`None (blank)`: The user cannot access the *Settings* app at all.
- :guilabel:`Access Rights`: The user can only view the :guilabel:`User's & Companies` section of
the *Settings* app.
- :guilabel:`Settings`: The user has access to the entire *Settings* app with no restrictions.
Please refer to :doc:`this document </applications/general/users/manage_users>` to learn more
about managing users and their access rights.
Click on an individual to view their card, which displays the :guilabel:`Access Rights` tab in the
default view. Scroll down to the :guilabel:`Human Resources` section. Under :guilabel:`Expenses`,
there are four options:
- :guilabel:`None (blank)`: A blank field means the user has no rights to view or approve expense
reports, and can only view their own.
- :guilabel:`Team Approver`: The user can only view and approve expense reports for their own
specific team.
- :guilabel:`All Approver`: The user can view and approve any expense report.
- :guilabel:`Administrator`: The user can view and approve any expense report, as well as access the
reporting and configuration menus in the *Expenses* app.
Users who are able to approve expense reports (typically managers) can easily view all expense
reports they have access rights to. Go to :menuselection:`Expenses app --> Expense Reports`, and a
list appears with all expense reports that have a status of either :guilabel:`To Submit`,
:guilabel:`Submitted`, :guilabel:`Approved`, :guilabel:`Posted`, or :guilabel:`Done`. Expense
reports with a status of :guilabel:`Refused` are hidden in the default view.
.. image:: expenses/expense-reports-list.png
:align: center
:alt: Reports to validate are found on the Reports to Approve page.
When viewing expense reports, there is a panel of filters that can be enabled or disabled on the
left side. The three categories that filters can be applied on are :guilabel:`Status`,
:guilabel:`Employee`, and :guilabel:`Company`. To view only expense reports with a particular
status, enable the specific status filter to display the expense reports with only that status.
Disable the specific status filter to hide the reports with that status. To view expense reports for
a particular employee and/or company, enable the specific employee name filter and/or company filter
in the :guilabel:`Employee` and :guilabel:`Company` sections.
Reports can be approved in two ways (individually or several at once) and refused only one way. To
approve multiple expense reports at once, remain in the list view. First, select the reports to
approve by clicking the check box next to each report, or click the box next to :guilabel:`Employee`
to select all the reports in the list.
.. important::
Only reports with a status of :guilabel:`Submitted` can be approved. It is recommended to only
display the submitted reports by adjusting the status filter on the left side by only having the
:guilabel:`Submitted` filter enabled.
If a report is selected that is unable to be approved, the :guilabel:`Approve Report` button
**will not appear**, indicating there is a problem with the selected report(s).
Next, click the :guilabel:`Approve Report` button.
.. image:: expenses/approve-report.png
:align: center
:alt: Approve multiple reports by clicking the checkboxes next to each report.
To approve an individual report, click on a report to go to a detailed view of that report. In this
view, several options are presented: :guilabel:`Approve`, :guilabel:`Report in Next Payslip`,
:guilabel:`Refuse`, or :guilabel:`Reset to draft`. Click :guilabel:`Approve` to approve the report.
If :guilabel:`Refuse` is clicked, a pop-up window appears. Enter a brief explanation for the refusal
in the :guilabel:`Reason to Refuse Expense` field, and then click :guilabel:`Refuse`.
.. image:: expenses/refuse-expense.png
:align: center
:alt: Send messages in the chatter.
Team managers can easily view all the expense reports for their team members. While in the
:guilabel:`Expense Reports` view, click the drop-down arrow in the right-side of the search box, and
click on :guilabel:`My Team` in the :guilabel:`Filters` section. This presents all the reports for
the manager's team.
.. image:: expenses/my-team-filter.png
:align: center
:alt: Select the My Team filter.
.. tip::
If more information is needed, such as a missing receipt, communication is easy from the chatter.
In an individual report, simply click :guilabel:`Send message` to open the message text box. Type
in a message, tagging the proper person (if needed), and post it to the chatter by clicking
:guilabel:`Send`. The message is posted in the chatter, and the person tagged will be notified
via email of the message, as well as any followers.
The only people that can be tagged in a message are *followers*. To see who is a follower, click
on the :guilabel:`👤 (person)` icon to display the followers of the expense.
.. image:: expenses/chatter.png
:align: center
:alt: Send messages in the chatter.
.. _expenses/post:
Post expenses in accounting
===========================
Once an expense report is approved, the next step is to post the report to the accounting journal.
To view all expense reports, go to :menuselection:`Expenses app --> Expense Reports`. To view only the
expense reports that have been approved and need to be posted, adjust the filters on the left side
so that only the :guilabel:`Approved` status is enabled.
.. image:: expenses/post-reports.png
:align: center
:alt: View reports to post by clicking on expense reports, then reports to post.
Just like approvals, expense reports can be posted in two ways (individually or several at once). To
post multiple expense reports at once, remain in the list view. First, select the reports to post by
clicking the check box next to each report, or click the box next to :guilabel:`Employee` to select
all the reports in the list. Next, click :guilabel:`Post Entries`.
.. image:: expenses/post-entries.png
:align: center
:alt: Post multiple reports at a time from the Expense Reports view, with the Approved filter.
To post an individual report, click on a report to go to the detailed view of that report. In this
view, several options are presented: :guilabel:`Post Journal Entries`, :guilabel:`Report In Next
Payslip`, :guilabel:`Refuse`, or :guilabel:`Reset to Draft`. Click :guilabel:`Post Journal Entries`
to post the report.
If :guilabel:`Refuse` is clicked, a pop-up window appears. Enter a brief explanation for the refusal
in the :guilabel:`Reason to Refuse Expense` field, and then click :guilabel:`Refuse`. Refused
reports can be viewed by going to :menuselection:`Expenses app --> Expense Reports`, then adjusting
the filters on the left so that only :guilabel:`Refused` is selected. This will only show the
refused expense reports.
.. important::
To post expense reports to an accounting journal, the user must have following access rights:
- Accounting: Accountant or Adviser
- Expenses: Manager
.. _expenses/reimburse:
Reimburse employees
===================
After an expense report is posted to an accounting journal, the next step is to reimburse the
employee. To view all the expense reports to pay, go to :menuselection:`Expenses app --> Expense
Reports --> Reports To Pay`.
.. image:: expenses/reports-to-pay.png
:align: center
:alt: View reports to pay by clicking on expense reports, then reports to pay.
Just like approvals and posting, expense reports can be paid in two ways (individually or several at
once). To pay multiple expense reports at once, remain in the list view. First, select the reports
to pay by clicking the check box next to each report, or click the box next to :guilabel:`Employee`
to select all the reports in the list. Next, click :guilabel:`Register Payment`.
.. image:: expenses/register-payment.png
:align: center
:alt: Post multiple reports by selecting them, clicking the gear, and then post the entries.
To pay an individual report, click on a report to go to a detailed view of that report. Click
:guilabel:`Register Payment` to pay the employee.
A :guilabel:`Register Payment` pop-up appears, and the :guilabel:`Journal`, :guilabel:`Payment
Method`, and :guilabel:`Payment Date` can be modified, if needed. When the selections are correct,
click :guilabel:`Create Payment` to send the payment to the employee.
To pay an individual report, click on a report in the list view to go to a detailed view of that
report. Click :guilabel:`Register Payment` to pay the employee. A :guilabel:`Register Payment`
pop-up appears, but when paying an individual expense report instead of several at once, more
options appear in the pop-up. In addition to the :guilabel:`Journal`, :guilabel:`Payment Method`,
and :guilabel:`Payment Date` fields, a :guilabel:`Recipient Bank Account`, :guilabel:`Amount`, and
:guilabel:`Memo` field appear. Select the employee's bank account from the drop-down menu to
directly deposit the payment to their account. When all other selections are correct, click
:guilabel:`Create Payment` to send the payment to the employee.
.. image:: expenses/two-payment-posting-options.png
:align: center
:alt: Different options appear when registering an individual expense report versus multiple
expense reports at once.
Re-invoice expenses to customers
================================
If expenses are tracked on customer projects, expenses can be automatically charged back to the
customer. This is done by creating an expense, referencing the :abbr:`SO (Sales Order)` the expense
should be added to, and then creating the expense report. Next, managers approve the expense report,
and the accounting department posts the journal entries. Finally, once the expense report is posted
to a journal, the expense(s) appears on the :abbr:`SO (Sales Order)` that was referenced. The sales
order can then be invoiced, thus invoicing the customer for the expense.
Setup
-----
- Enable **Customer Billing** in the Expenses settings
First, specify the invoicing policy for each expense category. Go to :menuselection:`Expenses app
--> Configuration --> Expense Categories`. Click on the expense category to open the expense
category form. Under the :guilabel:`Invoicing` section, click the radio button next to the desired
selection for :guilabel:`Re-Invoicing Expenses`. Options are :guilabel:`None`, :guilabel:`At cost`,
and :guilabel:`Sales price`.
- Go to the product configuration menu and set the invoicing method on
all your Expense types:
:guilabel:`Re-Invoicing Expenses`:
- Ordered quantities: it will invoice expenses based on the ordered
quantity
- :guilabel:`None`: Expense category will not be re-invoiced.
- :guilabel:`At cost`: Expense category will invoice expenses at their real cost.
- :guilabel:`At sales price`: Expense category will invoice the price set on the sale order.
- Delivered quantities: it will invoice expenses based on the
expenses quantity
Create an expense
-----------------
- At cost: will invoice expenses at their real cost.
First, when :ref:`creating a new expense <expenses/new>`, the correct information needs to be
entered in order to re-invoice a customer. Select the *sales order* the expense will appear on in
the :guilabel:`Customer to Reinvoice` section, from the drop-down menu. Next, select the
:guilabel:`Analytic Account` the expense will be posted to. After the expense(s) are created, the
expense report needs to be :ref:`created <expenses/report>` and :ref:`submitted <expenses/submit>`
as usual.
- At sales price: will invoice based on a fixed sales price set on
the sale order.
.. image:: expenses/reinvoice-expense.png
:align: center
:alt: Ensure the customer to be invoiced is called out on the expense.
.. image:: expenses/invoicing_01.png
:align: center
.. important::
Selecting a :guilabel:`Customer to Reinvoice` when creating an expense is critical, since this is
what causes the expenses to be automatically invoiced after an expense report is approved.
Create an order
---------------
The :guilabel:`Customer to Reinvoice` field can be modified *until an expense report is*
**approved**, then the field is no longer able to be modified.
- As a salesman, create and confirm a Sales Order for the services
delivered to your customer. If you don't put any expense in the
order, it will be added automatically once posted by the
accountant.
Validate and post expenses
--------------------------
- Link the expense to the Sale Order.
Only employees with permissions (typically managers or supervisors) can :ref:`approve expenses
<expenses/approve>`. Before approving an expense report, ensure the :guilabel:`Analytic
Distribution` is set on every expense line of a report. If an :guilabel:`Analytic Distribution` is
missing, assign the correct account(s) from the drop-down menu, and then click :guilabel:`Approve`
or :guilabel:`Refuse`.
.. image:: expenses/invoicing_02.png
:align: center
Submit, validate and post expenses
----------------------------------
- As a manager, make sure the analytic account is set on every expense
line on approving expenses reports. Click the line to add one if
missing. Employees are already able to set one when submitting.
.. image:: expenses/invoicing_03.png
:align: center
- As an accountant, post journal entries.
The accounting department is typically responsible for :ref:`posting journal entries
<expenses/post>`. Once an expense report is approved, it can then be posted. The :abbr:`SO (Sales
Order)` is **only** updated *after the journal entries are posted*. One the journal entries are
posted, the expenses now appear on the referenced :abbr:`SO (Sales Order)`.
Invoice expenses
----------------
Now you can invoice the order. It shows up in
:menuselection:`Sales --> Invoicing --> Sales`
to Invoice. The expenses have been added automatically in the order
lines. Such items show up in blue (i.e. to invoice).
Once the :abbr:`SO (Sales Order)` has been updated, it is time to invoice the customer. After the
expense report has been approved and the journal entries have been posted, click the
:guilabel:`Sales Orders` smart button to open the :abbr:`SO (Sales Order)`. The expenses to be
re-invoiced are now on the :abbr:`SO (Sales Order)`.
.. image:: expenses/invoicing_04.png
:align: center
.. image:: expenses/sales-order.png
:align: center
:alt: After the expense report is posted to the journal entry, the sales order can be called up
by clicking on the sales order number.
e (i.e. to invoice).
.. note::
More than one :abbr:`SO (Sales Order)` can be referenced on an expense report. If more than one
:abbr:`SO (Sales Order)` is referenced, the :guilabel:`Sales Orders` smart button will list the
number of :abbr:`SO (Sales Order)`'s. If multiple :abbr:`SO (Sales Order)`'s are listed, the
:guilabel:`Sales Orders` smart button opens a list view of all the :abbr:`SO (Sales Order)`'s on
the expense report. Click on a :abbr:`SO (Sales Order)` to open the individual :abbr:`SO (Sales
Order)`.
The expenses are listed in the :abbr:`SO (Sales Order)` :guilabel:`Order Lines` tab.
.. image:: expenses/so-details.png
:align: center
:alt: See the expenses listed on the sales order after clicking into it.
Next, click :guilabel:`Create Invoice`, and select if the invoice is for a :guilabel:`Regular
invoice`, a :guilabel:`Down payment (percentage)`, or a :guilabel:`Down payment (fixed amount)` by
clicking the radio button next to it. Then, click :guilabel:`Create Invoice`. The customer has now
been invoiced for the expenses.
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

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