Compare commits
274 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2003341358 | |||
| bba721e170 | |||
| 7fba97b264 | |||
| 984f971689 | |||
| 03e756d85d | |||
| eafe834cf4 | |||
| f5c8237016 | |||
| 7917da126c | |||
| 29e75ec988 | |||
| f02f5ade87 | |||
| 4728e6db23 | |||
| 39fb142163 | |||
| 994caa3865 | |||
| e168d499b1 | |||
| 5cf786983e | |||
| 5d0c6666aa | |||
| 2ab3c957e3 | |||
| 3664f1594c | |||
| 3bf97db95a | |||
| a7e755acde | |||
| b8b11fe537 | |||
| 34a1f37aa5 | |||
| 5c08c2a755 | |||
| b7bbbfe15b | |||
| 4fc941c97b | |||
| cb5c85eb6f | |||
| 4472a1774a | |||
| 10721ae7a9 | |||
| c544781acc | |||
| b8d53f4bbe | |||
| 30445eef67 | |||
| 421ac00f0c | |||
| 2bdf8ada96 | |||
| 186617e5c5 | |||
| 3f005dc9eb | |||
| a8db5128c2 | |||
| e8a8eb09f9 | |||
| 583017300c | |||
| 75cabd736e | |||
| 7971f001f8 | |||
| 6ae06ebfb8 | |||
| 5e5d076e31 | |||
| 47af5ceffc | |||
| 739bb5f429 | |||
| cd9c11cd83 | |||
| b5fd3c90ea | |||
| f00cb82586 | |||
| 28e50d6d14 | |||
| 2d80064140 | |||
| 414beb1bfd | |||
| ac9ba89824 | |||
| ccf51aaeb4 | |||
| 36f9ef3487 | |||
| f2d3ff1b97 | |||
| 9b737c3676 | |||
| 440acea734 | |||
| c1beaf8ba3 | |||
| 6a915736e1 | |||
| d52d845112 | |||
| 0c5e1f836b | |||
| 558758fd8a | |||
| 90d3e58a93 | |||
| b471945701 | |||
| 344a61934a | |||
| 5d91a59aef | |||
| c23c532775 | |||
| 22d7346609 | |||
| 70a246daca | |||
| 7c22841b8d | |||
| 1bca9a709e | |||
| 28c8444964 | |||
| 38ac54998b | |||
| 45379d5633 | |||
| 72bd2fa269 | |||
| f779e2cb9a | |||
| ea870ddf41 | |||
| cebbde0426 | |||
| 054ec3487f | |||
| 24af06f0dd | |||
| a505df902e | |||
| 0e9102724a | |||
| 9ce0ede7c3 | |||
| d978d7be3b | |||
| f108aed2ed | |||
| ece89b15df | |||
| c1b4a7aa56 | |||
| eeea61e698 | |||
| 8bd727ff79 | |||
| 186fc1b5ed | |||
| a5ce378859 | |||
| ccc00a6fa4 | |||
| 932dc85f76 | |||
| d9ffc39a15 | |||
| 8991e0fe79 | |||
| 16d51b2277 | |||
| b9b243b0ae | |||
| de75ab8e0f | |||
| b2dee64b0a | |||
| 9956b2563c | |||
| 50c8653eef | |||
| 1fbcfc05a1 | |||
| 1b251dbd1f | |||
| c661dad1f8 | |||
| 8edebda803 | |||
| 30920fbbee | |||
| 7bdb8dd4c0 | |||
| 86a2699c6a | |||
| d2cac3363d | |||
| 0662d1d7ce | |||
| 488470514f | |||
| c9be95b35d | |||
| 4b7d4ca24a | |||
| 19d55a0c41 | |||
| 6636d62d4c | |||
| 858f4de2ca | |||
| 8b7ba0cb85 | |||
| e3cfbec625 | |||
| 1afb6b593e | |||
| 683c1b7d1e | |||
| 4790003816 | |||
| 2ce5394200 | |||
| 4d05d5e3a0 | |||
| bf1c08c447 | |||
| 2672fd26c2 | |||
| 3324366190 | |||
| f1ee1176bf | |||
| 7008db004e | |||
| 5769d319cc | |||
| 9962611f30 | |||
| 3d6cbb47bb | |||
| b5faf1baa8 | |||
| aefc1d20df | |||
| c2288063d2 | |||
| 850e35e8d2 | |||
| 0151054619 | |||
| b34c4b4421 | |||
| 2f0bee7ddc | |||
| 46fd7906f8 | |||
| d633932db2 | |||
| 3901c5faa9 | |||
| 5a1e9d95b0 | |||
| 70d73f67b0 | |||
| afcb008caf | |||
| 4f4adc1b6f | |||
| 9bc17f4088 | |||
| 28f00d7c34 | |||
| cf4d0c391a | |||
| 6510bedb2e | |||
| 0b7334516b | |||
| 08a2959dd8 | |||
| 9c1c788908 | |||
| 441b01930a | |||
| 604047961f | |||
| 9c6b9ebd01 | |||
| 90fc06bdf5 | |||
| 96e25290c8 | |||
| 139e991301 | |||
| 36f9f0f663 | |||
| 707757abc1 | |||
| fa90e27c4e | |||
| c027f041bd | |||
| fa0aa392d5 | |||
| 23667b380d | |||
| 8b50d53f1c | |||
| f129743401 | |||
| 8227eb646c | |||
| 6f168f5b8e | |||
| 04b678bfc6 | |||
| c4317a344b | |||
| 8fc7979e1a | |||
| 8f4c80f93c | |||
| a47b0056db | |||
| 7d3e5ceb13 | |||
| db480dcb35 | |||
| 1013064871 | |||
| 1d2f410c82 | |||
| 68751c4c02 | |||
| 083c136a69 | |||
| f1db8bfcad | |||
| 359d2c5068 | |||
| 24ff6624bb | |||
| 7cb993c2aa | |||
| 862e960861 | |||
| 69e89db713 | |||
| fe08261781 | |||
| 1da3a8e608 | |||
| bc1cf93455 | |||
| 7fa293200c | |||
| 762e0b0841 | |||
| 32cb0d8244 | |||
| 80b4cd05d3 | |||
| 421e760581 | |||
| 3bd570ae64 | |||
| 3e199d9825 | |||
| ca475f8ad5 | |||
| ae0c4d809d | |||
| 3758cd5899 | |||
| 9514d7df55 | |||
| f704ee9cc1 | |||
| 0031e37c63 | |||
| 89b550252a | |||
| 27d8dc2acd | |||
| 4367502c08 | |||
| 9988d0b214 | |||
| 665bf423ec | |||
| 8bf5772a97 | |||
| 6462ed0112 | |||
| 1c2ce72416 | |||
| fb681d1305 | |||
| e005fa9896 | |||
| 7d70725925 | |||
| 4590a4c25a | |||
| 057a1c11d2 | |||
| 7d01392c9a | |||
| 35aae86dbd | |||
| a9c82ebb94 | |||
| 453284ba8e | |||
| 42115759bc | |||
| 94a6a0b204 | |||
| f51b991fd4 | |||
| c76f97777a | |||
| e80d7ae220 | |||
| f27df8f077 | |||
| 06d5e0b096 | |||
| 137e58719b | |||
| 9cac3b3d1a | |||
| 7dfd6421db | |||
| b0a042b928 | |||
| facb3f184e | |||
| 13544bca17 | |||
| 9e54525d61 | |||
| 1ed317ebd7 | |||
| 0df9068892 | |||
| 2161dd5acf | |||
| 9989131931 | |||
| f1d048fdff | |||
| 5cfd1623ae | |||
| 432d9bb10b | |||
| 1be31fda81 | |||
| 4d61833e46 | |||
| 46d85d4f00 | |||
| 5720cd2802 | |||
| 9fc59e3237 | |||
| 5b04581623 | |||
| 5c82ba7762 | |||
| b7316e2e2e | |||
| 4e61b3585e | |||
| 11401af3dd | |||
| 3d0a19f329 | |||
| 89bccb44ff | |||
| 899ee1c4c1 | |||
| ab4cfb431f | |||
| 9f65cba6dc | |||
| 3b50c7a565 | |||
| 4af52da507 | |||
| a7bb89ce47 | |||
| 532b6be429 | |||
| 80e8576263 | |||
| 75fd5255eb | |||
| 070ffa86c0 | |||
| 7b5ce24bba | |||
| 05a09da86a | |||
| d0ca9fbafe | |||
| c7713b218f | |||
| 978bebf93c | |||
| 388003e6f1 | |||
| 7a41103958 | |||
| 63a9962742 | |||
| 414bae03ec | |||
| bbd5b4da50 | |||
| 2954463d6e | |||
| 18280ab5da | |||
| 1fb6059a90 | |||
| ae506cb484 |
@@ -0,0 +1,13 @@
|
||||
Most of the files are
|
||||
|
||||
Copyright (c) 2004-2023 Odoo S.A.
|
||||
|
||||
Some files may also contain contributions from third
|
||||
parties. In this case the original copyright of
|
||||
the contributions can be traced through the
|
||||
history of the source version control system.
|
||||
|
||||
When that is not the case, the files contain a prominent
|
||||
notice stating the original copyright and applicable
|
||||
license, or come with their own dedicated COPYRIGHT
|
||||
and/or LICENSE file.
|
||||
@@ -0,0 +1,428 @@
|
||||
Attribution-ShareAlike 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International Public
|
||||
License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution-ShareAlike 4.0 International Public License ("Public
|
||||
License"). To the extent this Public License may be interpreted as a
|
||||
contract, You are granted the Licensed Rights in consideration of Your
|
||||
acceptance of these terms and conditions, and the Licensor grants You
|
||||
such rights in consideration of benefits the Licensor receives from
|
||||
making the Licensed Material available under these terms and
|
||||
conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-SA Compatible License means a license listed at
|
||||
creativecommons.org/compatiblelicenses, approved by Creative
|
||||
Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name
|
||||
of a Creative Commons Public License. The License Elements of this
|
||||
Public License are Attribution and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
k. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
l. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
m. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. Additional offer from the Licensor -- Adapted Material.
|
||||
Every recipient of Adapted Material from You
|
||||
automatically receives an offer from the Licensor to
|
||||
exercise the Licensed Rights in the Adapted Material
|
||||
under the conditions of the Adapter's License You apply.
|
||||
|
||||
c. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
b. ShareAlike.
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share
|
||||
Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter's License You apply must be a Creative Commons
|
||||
license with the same License Elements, this version or
|
||||
later, or a BY-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the
|
||||
Adapter's License You apply. You may satisfy this condition
|
||||
in any reasonable manner based on the medium, means, and
|
||||
context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms
|
||||
or conditions on, or apply any Effective Technological
|
||||
Measures to, Adapted Material that restrict exercise of the
|
||||
rights granted under the Adapter's License You apply.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material,
|
||||
including for purposes of Section 3(b); and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
|
||||
@@ -26,7 +26,7 @@ SOURCE_DIR = content
|
||||
|
||||
HTML_BUILD_DIR = $(BUILD_DIR)/html
|
||||
ifdef VERSIONS
|
||||
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/master
|
||||
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/saas-16.4
|
||||
endif
|
||||
ifneq ($(CURRENT_LANG),en)
|
||||
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/$(CURRENT_LANG)
|
||||
@@ -84,5 +84,15 @@ 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
|
||||
@python tests/main.py $(SOURCE_DIR)/administration $(SOURCE_DIR)/applications $(SOURCE_DIR)/contributing $(SOURCE_DIR)/developer redirects
|
||||
|
||||
# Similar as `test`, but called only manually by content reviewers to trigger extra checks.
|
||||
review:
|
||||
@read -p "Enter relative 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 echo $$path | grep -q 'content/'; then path=`echo $$path | sed 's|content/||'`; 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
|
||||
|
||||
@@ -22,7 +22,7 @@ copyright = 'Odoo S.A.'
|
||||
# `version` is the version info for the project being documented, acts as replacement for |version|,
|
||||
# also used in various other places throughout the built documents.
|
||||
# `release` is the full version, including alpha/beta/rc tags. Acts as replacement for |release|.
|
||||
version = release = 'master'
|
||||
version = release = 'saas-16.4'
|
||||
|
||||
# `current_branch` is the technical name of the current branch.
|
||||
# E.g., saas-15.4 -> saas-15.4; 12.0 -> 12.0, master -> master (*).
|
||||
@@ -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",
|
||||
'17.0': "Odoo 17",
|
||||
'saas-16.4': "Odoo Online",
|
||||
'saas-16.3': "Odoo Online",
|
||||
'saas-16.2': "Odoo Online",
|
||||
'saas-16.1': "Odoo Online",
|
||||
@@ -220,7 +222,6 @@ versions_names = {
|
||||
'saas-15.2': "Odoo Online",
|
||||
'15.0': "Odoo 15",
|
||||
'14.0': "Odoo 14",
|
||||
'13.0': "Odoo 13",
|
||||
}
|
||||
|
||||
# The language names that should be shown in the language switcher, if the config option `languages`
|
||||
@@ -313,11 +314,15 @@ latex_documents = [
|
||||
|
||||
('legal/terms/i18n/enterprise_tex_de', 'odoo_enterprise_agreement_de.tex',
|
||||
'Odoo Enterprise Subscription Agreement (DE)', '', 'howto'),
|
||||
('legal/terms/i18n/terms_of_sale_de', 'terms_of_sale_de.tex',
|
||||
'Allgemeine Verkaufsbedingungen Odoo', '', 'howto'),
|
||||
|
||||
('legal/terms/i18n/enterprise_tex_es', 'odoo_enterprise_agreement_es.tex',
|
||||
'Odoo Enterprise Subscription Agreement (ES)', '', 'howto'),
|
||||
('legal/terms/i18n/partnership_tex_es',
|
||||
'odoo_partnership_agreement_es.tex', 'Odoo Partnership Agreement (ES)', '', 'howto'),
|
||||
('legal/terms/i18n/terms_of_sale_es', 'terms_of_sale_es.tex',
|
||||
'Términos Generales de Venta Odoo', '', 'howto'),
|
||||
|
||||
('legal/terms/i18n/enterprise_tex_pt_BR', 'odoo_enterprise_agreement_pt_BR.tex',
|
||||
'Odoo Enterprise Subscription Agreement (PT)', '', 'howto'),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -179,21 +179,31 @@ or 'verify-full'
|
||||
Builtin server
|
||||
==============
|
||||
|
||||
Odoo includes built-in HTTP servers, using either multithreading or
|
||||
multiprocessing.
|
||||
Odoo includes built-in HTTP, cron, and live-chat servers, using either multi-threading or
|
||||
multi-processing.
|
||||
|
||||
For production use, it is recommended to use the multiprocessing server as it
|
||||
increases stability, makes somewhat better use of computing resources and can
|
||||
be better monitored and resource-restricted.
|
||||
The **multi-threaded** server is a simpler server primarily used for development, demonstrations,
|
||||
and its compatibility with various operating systems (including Windows). A new thread is spawned
|
||||
for every new HTTP request, even for long-lived connections such as websocket. Extra daemonic cron
|
||||
threads are spawned too. Due to a Python limitation (GIL), it doesn't make the best use of the
|
||||
hardware.
|
||||
|
||||
* Multiprocessing is enabled by configuring :option:`a non-zero number of
|
||||
worker processes <odoo-bin --workers>`, the number of workers should be based
|
||||
on the number of cores in the machine (possibly with some room for cron
|
||||
workers depending on how much cron work is predicted)
|
||||
* Worker limits can be configured based on the hardware configuration to avoid
|
||||
resources exhaustion
|
||||
The multi-threaded server is the default server, also for docker containers. It is selected by
|
||||
leaving the :option:`--workers <odoo-bin --workers>` option out or setting it to ``0``.
|
||||
|
||||
.. warning:: multiprocessing mode currently isn't available on Windows
|
||||
The **multi-processing** server is a full-blown server primarily used for production. It is not
|
||||
liable to the same Python limitation (GIL) on resource usage and hence makes the best use of the
|
||||
hardware. A pool of workers is created upon server startup. New HTTP requests are queued by the OS
|
||||
until there are workers ready to process them. An extra event-driven HTTP worker for the live chat
|
||||
is spawned on an alternative port. Extra cron workers are spawned too. A configurable process
|
||||
reaper monitors resource usage and can kill/restart failed workers.
|
||||
|
||||
The multi-processing server is opt-in. It is selected by setting the :option:`--workers
|
||||
<odoo-bin --workers>` option to a non-null integer.
|
||||
|
||||
.. note::
|
||||
Because it is highly customized for Linux servers, the multi-processing server is not available
|
||||
on Windows.
|
||||
|
||||
Worker number calculation
|
||||
-------------------------
|
||||
@@ -214,18 +224,12 @@ Needed RAM = #worker * ( (light_worker_ratio * light_worker_ram_estimation) + (h
|
||||
LiveChat
|
||||
--------
|
||||
|
||||
In multiprocessing, a dedicated LiveChat worker is automatically started and
|
||||
listening on :option:`the gevent port <odoo-bin --gevent-port>` but
|
||||
the client will not connect to it.
|
||||
|
||||
Instead you must have a proxy redirecting requests whose URL starts with
|
||||
``/websocket/`` to the gevent port. Other request should be proxied to
|
||||
the :option:`normal HTTP port <odoo-bin --http-port>`
|
||||
|
||||
To achieve such a thing, you'll need to deploy a reverse proxy in front of Odoo,
|
||||
like nginx or apache. When doing so, you'll need to forward some more http Headers
|
||||
to Odoo, and activate the proxy_mode in Odoo configuration to have Odoo read those
|
||||
headers.
|
||||
In multi-processing, a dedicated LiveChat worker is automatically started and listens on
|
||||
the :option:`--gevent-port <odoo-bin --gevent-port>`. By default, the HTTP requests will keep
|
||||
accessing the normal HTTP workers instead of the LiveChat one. You must deploy a proxy in front of
|
||||
Odoo and redirect incoming requests whose path starts with ``/websocket/`` to the LiveChat worker.
|
||||
You must also start Odoo in :option:`--proxy-mode <odoo-bin --proxy-mode>` so it uses the real
|
||||
client headers (such as hostname, scheme, and IP) instead of the proxy ones.
|
||||
|
||||
Configuration sample
|
||||
--------------------
|
||||
@@ -238,7 +242,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 +277,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
|
||||
|
||||
@@ -341,6 +345,11 @@ in ``/etc/nginx/sites-enabled/odoo.conf`` set:
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_redirect off;
|
||||
proxy_pass http://odoo;
|
||||
|
||||
# Enable HSTS
|
||||
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
|
||||
# requires nginx 1.19.8
|
||||
proxy_cookie_flags session_id samesite=lax secure;
|
||||
}
|
||||
|
||||
# common gzip
|
||||
@@ -348,6 +357,31 @@ in ``/etc/nginx/sites-enabled/odoo.conf`` set:
|
||||
gzip on;
|
||||
}
|
||||
|
||||
HTTPS Hardening
|
||||
---------------
|
||||
|
||||
Add the `Strict-Transport-Security` header to all requests, in order to prevent
|
||||
browsers from ever sending a plain HTTP request to this domain. You will need
|
||||
to maintain a working HTTPS service with a valid certificate on this domain at
|
||||
all times, otherwise your users will see security alerts or be entirely unable
|
||||
to access it.
|
||||
|
||||
Force HTTPS connections during a year for every visitor in NGINX with the line:
|
||||
|
||||
.. code-block:: nginx
|
||||
|
||||
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
|
||||
|
||||
Additional configuration can be defined for the `session_id` cookie. The `Secure`
|
||||
flag can be added to ensure it is never transmitted over HTTP and `SameSite=Lax`
|
||||
to prevent authenticated `CSRF`_.
|
||||
|
||||
.. code-block:: nginx
|
||||
|
||||
# requires nginx 1.19.8
|
||||
proxy_cookie_flags session_id samesite=lax secure;
|
||||
|
||||
|
||||
Odoo as a WSGI Application
|
||||
==========================
|
||||
|
||||
@@ -364,38 +398,30 @@ of workers anymore it can not setup cron or livechat workers
|
||||
Cron Workers
|
||||
------------
|
||||
|
||||
To run cron jobs for an Odoo deployment as a WSGI application requires
|
||||
Starting one of the built-in Odoo servers next to the WSGI server is required to process cron jobs.
|
||||
That server must be configured to only process crons and not HTTP requests using the
|
||||
:option:`--no-http <odoo-bin --no-http>` cli option or the ``http_enable = False`` configuration
|
||||
file setting.
|
||||
|
||||
* A classical Odoo (run via ``odoo-bin``)
|
||||
* Connected to the database in which cron jobs have to be run (via
|
||||
:option:`odoo-bin -d`)
|
||||
* Which should not be exposed to the network. To ensure cron runners are not
|
||||
network-accessible, it is possible to disable the built-in HTTP server
|
||||
entirely with :option:`odoo-bin --no-http` or setting ``http_enable = False``
|
||||
in the configuration file
|
||||
On Linux-like systems, using the multi-processing server over the multi-threading one is recommended
|
||||
to benefit from better hardware usage and increased stability, i.e., using
|
||||
the :option:`--workers=-1 <odoo-bin --workers>` and :option:`--max-cron-threads=n
|
||||
<odoo-bin --max-cron-threads>` cli options.
|
||||
|
||||
LiveChat
|
||||
--------
|
||||
|
||||
The second problematic subsystem for WSGI deployments is the LiveChat: where
|
||||
most HTTP connections are relatively short and quickly free up their worker
|
||||
process for the next request, LiveChat require a long-lived connection for
|
||||
each client in order to implement near-real-time notifications.
|
||||
Using a gevent-compatible WSGI server is required for the correct operation of the live chat
|
||||
feature. That server should be able to handle many simultaneous long-lived connections but doesn't
|
||||
need a lot of processing power. All requests whose path starts with ``/websocket/`` should be
|
||||
directed to that server. A regular (thread/process-based) WSGI server should be used for all other
|
||||
requests.
|
||||
|
||||
This is in conflict with the process-based worker model, as it will tie
|
||||
up worker processes and prevent new users from accessing the system. However,
|
||||
those long-lived connections do very little and mostly stay parked waiting for
|
||||
notifications.
|
||||
|
||||
The solutions to support livechat/motifications in a WSGI application are:
|
||||
|
||||
* Deploy a threaded version of Odoo (instead of a process-based preforking
|
||||
one) and redirect only requests to URLs starting with ``/websocket/`` to
|
||||
that Odoo, this is the simplest and the websocket URL can double up as the cron
|
||||
instance.
|
||||
* Deploy an evented Odoo via ``odoo-gevent`` and proxy requests starting
|
||||
with ``/websocket/`` to
|
||||
:option:`the gevent port <odoo-bin --gevent-port>`.
|
||||
The Odoo cron server can also be used to serve the live chat requests. Just drop
|
||||
the :option:`--no-http <odoo-bin --no-http>` cli option from the cron server and make sure requests
|
||||
whose path starts with ``/websocket/`` are directed to this server, either on
|
||||
the :option:`--http-port <odoo-bin --http-port>` (multi-threading server) or on
|
||||
the :option:`--gevent-port <odoo-bin --gevent-port>` (multi-processing server).
|
||||
|
||||
.. _deploy/streaming:
|
||||
|
||||
@@ -602,6 +628,10 @@ security-related topics:
|
||||
- Setup daily backups of your databases and filestore data, and copy them to a remote
|
||||
archiving server that is not accessible from the server itself.
|
||||
|
||||
- Deploying Odoo on Linux is strongly recommended over Windows. Should you choose nevertheless
|
||||
to deploy on a Windows platform, a thorough security hardening review of the server should be
|
||||
conducted and is outside of the scope of this guide.
|
||||
|
||||
|
||||
.. _login_brute_force:
|
||||
|
||||
@@ -727,6 +757,7 @@ Here are the supported browsers:
|
||||
environment than over the internet.
|
||||
|
||||
.. _regular expression: https://docs.python.org/3/library/re.html
|
||||
.. _CSRF: https://en.wikipedia.org/wiki/Cross-site_request_forgery
|
||||
.. _ARP spoofing: https://en.wikipedia.org/wiki/ARP_spoofing
|
||||
.. _Nginx termination example:
|
||||
https://nginx.com/resources/admin-guide/nginx-ssl-termination/
|
||||
|
||||
@@ -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.8 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.8 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.8 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/
|
||||
@@ -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.
|
||||
@@ -0,0 +1,167 @@
|
||||
===================
|
||||
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
|
||||
=======
|
||||
|
||||
.. warning::
|
||||
Windows packaging is offered for the convenience of testing or running single-user local
|
||||
instances but production deployment is discouraged due to a number of limitations and risks
|
||||
associated with deploying Odoo on a Windows platform.
|
||||
|
||||
#. 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.
|
||||
@@ -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>`
|
||||
@@ -25,13 +25,13 @@ To get started, go to `Microsoft's Azure Portal <https://portal.azure.com/>`_. L
|
||||
:guilabel:`Microsoft Outlook Office 365` account if there is one, otherwise log in with the
|
||||
personal :guilabel:`Microsoft account`. A user with administrative access to the Azure Settings
|
||||
will need to connect and perform the following configuration. Next, navigate to the section
|
||||
labeled :guilabel:`Manage Azure Active Directory`.
|
||||
labeled :guilabel:`Manage Microsoft Entra ID` (formally *Azure Active Directory*).
|
||||
|
||||
Now, click on :guilabel:`Add (+)`, located in the top menu, and then select :guilabel:`App
|
||||
registration`. On the :guilabel:`Register an application` screen, rename the :guilabel:`Name` to
|
||||
`Odoo` or something recognizable. Under the :guilabel:`Supported account types` section select
|
||||
:guilabel:`Accounts in any organizational directory (Any Azure AD directory - Multitenant) and
|
||||
personal Microsoft accounts (e.g. Skype, Xbox)`.
|
||||
:guilabel:`Accounts in any organizational directory (Any Microsoft Entra ID directory - Multitenant)
|
||||
and personal Microsoft accounts (e.g. Skype, Xbox)`.
|
||||
|
||||
Under the :guilabel:`Redirect URL` section, select :guilabel:`Web` as the platform, and then input
|
||||
`https://<odoo base url>/microsoft_outlook/confirm` in the :guilabel:`URL` field. The Odoo base URL
|
||||
@@ -188,23 +188,96 @@ configuration automatically loads the :guilabel:`token` in Odoo, and a tag stati
|
||||
Finally, click :guilabel:`Test Connection`. A confirmation message should appear. The Odoo database
|
||||
can now send safe, secure emails through Microsoft Outlook using OAuth authentication.
|
||||
|
||||
Multiple user configuration
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
.. _azure_oauth/notifications:
|
||||
|
||||
Each user should have a separate server set up. The :guilabel:`from-filter` should be set so that
|
||||
only the user's email is sent from that server. In other words, only a user with an email address
|
||||
that matches the set :guilabel:`from-filter` is able to use this server.
|
||||
Configuration with a single outgoing mail server
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
After setting the :guilabel:`from-filter`, set up a fallback email account to allow for the sending
|
||||
of :guilabel:`notifications`. The fallback email must be configured as a :guilabel:`general
|
||||
transactional server`. The :guilabel:`mail.default.from` system parameter must be set to the
|
||||
:guilabel:`username` of the general transactional server account. For more information see
|
||||
:ref:`Use a default email address <email_communication/default>`.
|
||||
Configuring a single outgoing server is the simplest configuration available for Microsoft Azure
|
||||
and it doesn't require extensive access rights for the users in the database.
|
||||
|
||||
A generic email address would be used to send emails for all users within the database. For example
|
||||
it could be structured with a `notifications` alias (`notifications@example.com`) or `contact` alias
|
||||
(`contact@example.com`). This address must be set as the :guilabel:`FROM Filtering` on the server.
|
||||
This address must also match the `{mail.default.from}@{mail.catchall.domain}` key combination in the
|
||||
system parameters.
|
||||
|
||||
.. seealso::
|
||||
For more information on the from filter visit: :ref:`email_communication/default`.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`System Parameters` can be accessed by activating
|
||||
:doc:`../../applications/general/developer_mode` in the :menuselection:`Settings --> Technical
|
||||
--> Parameters --> System Parameters` menu.
|
||||
The :guilabel:`System Parameters` can be accessed by activating :ref:`developer-mode` in the
|
||||
:menuselection:`Settings --> Technical --> Parameters --> System Parameters` menu.
|
||||
|
||||
When using this configuration, every email that is sent from the database will use the address of
|
||||
the configured `notification` mailbox. However it should be noted that the name of the sender will
|
||||
appear but their email address will change:
|
||||
|
||||
.. image:: azure_oauth/from-name-remain.png
|
||||
:align: center
|
||||
:alt: Name from real sender with static email.
|
||||
|
||||
.. example::
|
||||
Single outgoing mail server configuration:
|
||||
|
||||
- Outgoing mail server **username** (login) = `notifications@example.com`
|
||||
- Outgoing mail server :guilabel:`FROM Filtering` = `notifications@example.com`
|
||||
- `mail.catchall.domain` in system parameters = `example.com`
|
||||
- `mail.default.from` in system parameters = `notifications`
|
||||
|
||||
User-specific (multiple user) configuration
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In addition to a generic email server, individual email servers can be set up for users in a
|
||||
database. These email addresses must be set as the :guilabel:`FROM Filtering` on each individual
|
||||
server for this configuration to work.
|
||||
|
||||
This configuration is the more difficult of the two Microsoft Azure configurations, in that it
|
||||
requires all users configured with email servers to have access rights to settings in order to
|
||||
establish a connection to the email server.
|
||||
|
||||
Setup
|
||||
*****
|
||||
|
||||
Each user should have a separate email server set up. The :guilabel:`FROM Filtering` should be set
|
||||
so that only the user's email is sent from that server. In other words, only a user with an email
|
||||
address that matches the set :guilabel:`FROM Filtering` is able to use this server.
|
||||
|
||||
.. seealso::
|
||||
For more information on the from filter visit: :ref:`email_communication/default`.
|
||||
|
||||
A :ref:`fallback server <azure_oauth/notifications>` must be setup to allow for the sending of
|
||||
:guilabel:`notifications`. The :guilabel:`FROM Filtering` for this server should have the value of
|
||||
the `{mail.default.from}@{mail.catchall.domain}`.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`System Parameters` can be accessed by activating :ref:`developer-mode` in the
|
||||
:menuselection:`Settings --> Technical --> Parameters --> System Parameters` menu.
|
||||
|
||||
.. important::
|
||||
The configuration for this transactional email server can work alongside an outgoing mass-mailing
|
||||
email server. The :guilabel:`FROM Filtering` for the mass-mailing email server can remain empty,
|
||||
but it's require to be added in the settings of the *Email Marketing* application.
|
||||
|
||||
.. seealso::
|
||||
For more information on setting the mass-mailing email server visit
|
||||
:ref:`email_communication/mass_mails`.
|
||||
|
||||
.. example::
|
||||
Multiple user outgoing mail server configuration:
|
||||
|
||||
- User #1 mailbox
|
||||
- Outgoing mail server #1 **username** (login) = `john@example.com`
|
||||
- Outgoing mail server #1 :guilabel:`FROM Filtering` = `john@example.com`
|
||||
- User #2 mailbox
|
||||
- Outgoing mail server #2 **username** (login) = `jane@example.com`
|
||||
- Outgoing mail server #2 :guilabel:`FROM Filtering` = `jane@example.com`
|
||||
- Notifications mailbox
|
||||
- Outgoing mail server #3 **username** (login) = `notifications@example.com`
|
||||
- Outgoing mail server #3 :guilabel:`FROM Filtering` = `notifications@example.com`
|
||||
- System Parameters
|
||||
- `mail.catchall.domain` in system parameters = `example.com`
|
||||
- `mail.default.from` in system parameters = `notifications`
|
||||
|
||||
Configure incoming email server
|
||||
-------------------------------
|
||||
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
@@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 39 KiB |
@@ -1,87 +1,111 @@
|
||||
|
||||
.. _db_management/hosting_changes:
|
||||
|
||||
=======================
|
||||
Change hosting solution
|
||||
=======================
|
||||
|
||||
You may want to move your Odoo database from one hosting solution to another.
|
||||
Depending on the platforms, you have to do it by yourself or contact our support team first.
|
||||
The instructions to change the hosting type of a database depend on the current solution used and to
|
||||
which solution the database should be moved.
|
||||
|
||||
From on-premises to Odoo Online
|
||||
===============================
|
||||
Transferring an on-premise database
|
||||
===================================
|
||||
|
||||
1. Create a :ref:`duplicate <duplicate_premise>` of your database: in this duplicate, uninstall all the **non-standard apps**.
|
||||
2. Grab a "dump with filestore" of your database by using the Database Manager.
|
||||
3. **If you have time constraints, contact us earlier to schedule the transfer.**
|
||||
4. `Create a support ticket <https://www.odoo.com/help>`_ and attach the dump (if the file is too large, use any file transfer service and attach the link to your ticket). Also include your subscription number and the URL you want to use for your database (e.g.: my-company.odoo.com).
|
||||
5. We will make sure your database is compatible and upload it to our cloud. In case of technical issues, we will get in touch with you.
|
||||
6. It's done!
|
||||
To Odoo Online
|
||||
--------------
|
||||
|
||||
.. important::
|
||||
- Odoo Online is not compatible with **non-standard apps**.
|
||||
- The database you are moving to Odoo Online must be in a :doc:`supported version
|
||||
<supported_versions>`.
|
||||
- Odoo Online is *not* compatible with **non-standard apps**.
|
||||
- The database's current version must be :doc:`supported <supported_versions>`.
|
||||
|
||||
From on-premises to Odoo.sh
|
||||
===========================
|
||||
#. Create a :ref:`duplicate <duplicate_premise>` of the database.
|
||||
#. In this duplicate, uninstall all **non-standard apps**.
|
||||
#. Use the database manager to grab a *dump with filestore*.
|
||||
#. `Submit a support ticket <https://www.odoo.com/help>`_ including the following:
|
||||
|
||||
1. Follow the :ref:`Import your database section of the Odoo.sh documentation <odoo_sh_import_your_database>`.
|
||||
2. ...and voilà!
|
||||
- your **subscription number**,
|
||||
- the **URL** you want to use for the database (e.g., `company.odoo.com`), and
|
||||
- the **dump** as an attachment or as a link to the file (required for 60 MB+ files).
|
||||
|
||||
From Odoo Online to on-premises
|
||||
===============================
|
||||
|
||||
1. Log into `your Odoo Online user portal <https://accounts.odoo.com/my/databases/manage>`_ and look for the version number of your database.
|
||||
2. If your database does not run a :ref:`major version <supported_versions>` of Odoo, you cannot host it on-premises yet, you have to upgrade it first to a new major version. (*e.g.: If your database runs Odoo 12.3 which is not a major version, you have to upgrade it first to Odoo 13.0 or 14.0.*)
|
||||
3. Download a backup of your database by clicking on the "Gear" icon next to your database name then :menuselection:`Download` (if the download fails due to your backup file being too large, contact `our support <https://www.odoo.com/help>`_)
|
||||
4. Restore it from the database manager on your local server.
|
||||
|
||||
From Odoo Online to Odoo.sh
|
||||
===========================
|
||||
|
||||
1. Log into `your Odoo Online user portal <https://accounts.odoo.com/my/databases/manage>`_ and look for the version number of your database.
|
||||
2. If your database does not run a :ref:`major version <supported_versions>` of Odoo, you cannot host it on Odoo.sh yet, you have to upgrade it first to a new major version. (*e.g.: If your database runs Odoo 12.3 which is not a major version, you have to upgrade it first to Odoo 13.0 or 14.0.*)
|
||||
3. Download a backup of your database by clicking on the "Gear" icon next to your database name then :menuselection:`Download` (if the download fails due to your backup file being too large, contact `our support <https://www.odoo.com/help>`_)
|
||||
4. Follow the :ref:`Import your database section of the Odoo.sh documentation <odoo_sh_import_your_database>`.
|
||||
|
||||
From Odoo.sh to Odoo Online
|
||||
===========================
|
||||
|
||||
#. Uninstall all the **non-standard apps**.
|
||||
#. `Create a support ticket <https://www.odoo.com/help>`_ and include the following:
|
||||
|
||||
- Your subscription number
|
||||
- The URL you want to use for your database (e.g., `example.odoo.com`)
|
||||
- Which branch you want to migrate
|
||||
- In which region you want to be hosted:
|
||||
|
||||
- Americas
|
||||
- Europe
|
||||
- Asia
|
||||
|
||||
- Which user(s) will be the administrator(s)
|
||||
- When (and in which timezone) you want the database to be up and running
|
||||
|
||||
#. We will make sure your database is compatible and upload it to our cloud. In case of technical
|
||||
issues, we will get in touch with you.
|
||||
#. All done!
|
||||
|
||||
.. important::
|
||||
- Odoo Online is not compatible with **non-standard apps**.
|
||||
- Make sure to uninstall all the **non-standard apps** in a staging build before doing it in your
|
||||
production build.
|
||||
#. Odoo then makes sure the database is compatible before putting it online. In case of technical
|
||||
issues during the process, Odoo might contact you.
|
||||
|
||||
.. note::
|
||||
- Make sure you select the **region** that is closest to your users to reduce latency.
|
||||
- The future **administrator(s)** must have an odoo.com account.
|
||||
- The specific **date and time** at which you want the database to be up and running are mainly
|
||||
helpful to organize the switch from the odoo.sh server to the Odoo Online servers.
|
||||
If you have time constraints, `submit a support ticket <https://www.odoo.com/help>`_ as soon as
|
||||
possible to schedule the transfer.
|
||||
|
||||
To Odoo.sh
|
||||
----------
|
||||
|
||||
Follow the instructions found in :ref:`the Import your database section
|
||||
<odoo_sh_import_your_database>` of the Odoo.sh *Create your project* documentation.
|
||||
|
||||
Transferring an Odoo Online database
|
||||
====================================
|
||||
|
||||
.. important::
|
||||
Odoo Online's :ref:`intermediary versions <supported_versions>` cannot be hosted on-premise as
|
||||
that type of hosting does not support those versions. Therefore, if the database to transfer
|
||||
is running an intermediary version, it must be upgraded first to the next :ref:`major version
|
||||
<supported_versions>`, waiting for its release if necessary.
|
||||
|
||||
.. example::
|
||||
Transferring an online database running on Odoo 16.3 would require first upgrading it to Odoo
|
||||
17.0.
|
||||
|
||||
.. tip::
|
||||
Click the gear icon (:guilabel:`⚙`) next to the database name on the `Odoo Online database
|
||||
manager <https://www.odoo.com/my/databases/>`_ to display its version number.
|
||||
|
||||
To on-premise
|
||||
-------------
|
||||
|
||||
#. Sign in to `the Odoo Online database manager <https://www.odoo.com/my/databases/>`_ and click the
|
||||
gear icon (:guilabel:`⚙`) next to the database name to :guilabel:`Download` a backup. If the
|
||||
download fails due to the file being too large, `contact Odoo support
|
||||
<https://www.odoo.com/help>`_.
|
||||
#. Restore the database from the database manager on your local server using the backup.
|
||||
|
||||
To Odoo.sh
|
||||
----------
|
||||
|
||||
#. Sign in to `the Odoo Online database manager <https://www.odoo.com/my/databases/>`_ and click the
|
||||
gear icon (:guilabel:`⚙`) next to the database name to :guilabel:`Download` a backup. If the
|
||||
download fails due to the file being too large, `contact Odoo support
|
||||
<https://www.odoo.com/help>`_.
|
||||
#. Follow the instructions found in :ref:`the Import your database section
|
||||
<odoo_sh_import_your_database>` of the Odoo.sh *Create your project* documentation.
|
||||
|
||||
Transferring an Odoo.sh database
|
||||
================================
|
||||
|
||||
To Odoo Online
|
||||
--------------
|
||||
|
||||
.. important::
|
||||
Odoo Online is *not* compatible with **non-standard apps**.
|
||||
|
||||
#. Uninstall all **non-standard apps** in a staging build before doing it in the production build.
|
||||
#. `Create a support ticket <https://www.odoo.com/help>`_ including the following:
|
||||
|
||||
- your **subscription number**,
|
||||
- the **URL** you want to use for the database (e.g., `company.odoo.com`),
|
||||
- which **branch** should be migrated,
|
||||
- in which **region** you want the database to be hosted (Americas, Europe, or Asia),
|
||||
- which user(s) will be the **administrator(s)**, and
|
||||
- **when** (and in which timezone) you want the database to be up and running.
|
||||
|
||||
#. Odoo then makes sure the database is compatible before putting it online. In case of technical
|
||||
issues during the process, Odoo might contact you.
|
||||
|
||||
.. note::
|
||||
- If you have time constraints, `submit a support ticket <https://www.odoo.com/help>`_ as soon as
|
||||
possible to schedule the transfer.
|
||||
- Select the **region** closest to most of your users to reduce latency.
|
||||
- Future **administrator(s)** must have an Odoo.com account.
|
||||
- The **date and time** you want the database to be up and running are helpful to organize the
|
||||
switch from the Odoo.sh server to the Odoo Online servers.
|
||||
- Databases are **not reachable** during their migration.
|
||||
- **If you have time constraints, contact us earlier to schedule the transfer**.
|
||||
|
||||
From Odoo.sh to on-premises
|
||||
===========================
|
||||
To on-premise
|
||||
-------------
|
||||
|
||||
1. Grab a :ref:`backup of your Odoo.sh production database <odoo_sh_branches_backups>`.
|
||||
2. Restore it from the database manager on your local server.
|
||||
#. Download a :ref:`backup of your Odoo.sh production database <odoo_sh_branches_backups>`.
|
||||
#. Restore the database from the database manager on your local server using the backup.
|
||||
|
||||
@@ -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 :ref:`Odoo Online upgrade
|
||||
documentation <upgrade/request-test-database>`.
|
||||
|
||||
.. _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`
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 9.6 KiB |
@@ -1,3 +1,4 @@
|
||||
:hide-page-toc:
|
||||
|
||||
.. _supported_versions:
|
||||
|
||||
@@ -16,9 +17,6 @@ Odoo provides support and bug fixing **for the 3 last major versions** of Odoo.
|
||||
- Online versions are *not* released for Odoo.sh and On-Premise installations.
|
||||
- Online versions are listed below as *SaaS*.
|
||||
|
||||
What's the support status of my Odoo?
|
||||
=====================================
|
||||
|
||||
This matrix shows the support status of every version.
|
||||
|
||||
**Major releases are in bold type.**
|
||||
@@ -33,30 +31,42 @@ This matrix shows the support status of every version.
|
||||
- On-Premise
|
||||
- Release date
|
||||
- End of support
|
||||
* - Odoo saas~16.3
|
||||
* - **Odoo 17.0**
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
- November 2023
|
||||
- November 2026 (planned)
|
||||
* - Odoo saas~16.4
|
||||
- |green|
|
||||
- N/A
|
||||
- N/A
|
||||
- August 2023
|
||||
-
|
||||
* - Odoo saas~16.3
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- June 2023
|
||||
- September 2023 (planned)
|
||||
-
|
||||
* - Odoo saas~16.2
|
||||
- |green|
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- March 2023
|
||||
- July 2023 (planned)
|
||||
-
|
||||
* - Odoo saas~16.1
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- February 2023
|
||||
- April 2023
|
||||
-
|
||||
* - **Odoo 16.0**
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
- October 2022
|
||||
- October 2025 (planned)
|
||||
- November 2025 (planned)
|
||||
* - Odoo saas~15.2
|
||||
- |red|
|
||||
- N/A
|
||||
@@ -74,87 +84,27 @@ This matrix shows the support status of every version.
|
||||
- |green|
|
||||
- |green|
|
||||
- October 2021
|
||||
- October 2024 (planned)
|
||||
- November 2024 (planned)
|
||||
* - **Odoo 14.0**
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
- |red|
|
||||
- |red|
|
||||
- |red|
|
||||
- October 2020
|
||||
- October 2023 (planned)
|
||||
- November 2023
|
||||
* - **Odoo 13.0**
|
||||
- |red|
|
||||
- |red|
|
||||
- |red|
|
||||
- October 2019
|
||||
- October 2022
|
||||
* - Odoo saas~12.3
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- August 2019
|
||||
-
|
||||
* - **Odoo 12.0**
|
||||
* - Older versions
|
||||
- |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
|
||||
- Before 2019
|
||||
- Before 2022
|
||||
|
||||
.. note::
|
||||
.. admonition:: Legend
|
||||
|
||||
|green| Supported version
|
||||
|
||||
@@ -162,7 +112,9 @@ This matrix shows the support status of every version.
|
||||
|
||||
N/A Never released for this platform
|
||||
|
||||
🏁 Future version, not released yet
|
||||
.. important::
|
||||
Even though we don't support older versions, you can always `upgrade from any version
|
||||
<https://upgrade.odoo.com/>`_.
|
||||
|
||||
.. |green| raw:: html
|
||||
|
||||
@@ -171,12 +123,3 @@ This matrix shows the support status of every version.
|
||||
.. |red| raw:: html
|
||||
|
||||
<span class="text-danger" style="font-size: 32px; line-height: 0.5">●</span>
|
||||
|
||||
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.
|
||||
|
||||
TinyERP 4.0, 3.0, 2.0 and 1.0 is 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/>`_.
|
||||
|
||||
@@ -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,
|
||||
@@ -110,7 +110,7 @@ to replace the installation directory with a newer version. First download the l
|
||||
from Odoo.com. They are updated daily and include the latest security fixes (see step #1)
|
||||
After downloading the package, extract it to a temporary location on your server.
|
||||
|
||||
You will get a folder labelled with the version of the source code, for example "odoo-13.0+e.20190719",
|
||||
You will get a folder labeled with the version of the source code, for example "odoo-13.0+e.20190719",
|
||||
that contains a folder "odoo.egg-info" and the actual source code folder named "odoo" (for Odoo 10
|
||||
and later) or "openerp" for older versions.
|
||||
You can ignore the odoo.egg-info folder. Locate the folder where your current installation is deployed,
|
||||
|
||||
@@ -99,7 +99,7 @@ disable the tests or allow specific tests to be run with custom tags in the :ref
|
||||
<odoosh-gettingstarted-branches-tabs-settings>`.
|
||||
|
||||
Similar to staging branches, the emails are not sent but are intercepted by a mailcatcher and
|
||||
scheduled actions are not triggered as often is the database is not in use.
|
||||
scheduled actions are not triggered as long as the database is not in use.
|
||||
|
||||
The databases created for development branches are meant to live around three days.
|
||||
After that, they can be automatically garbage collected to make room for new databases without prior notice.
|
||||
@@ -295,7 +295,7 @@ Upgrade
|
||||
Available for production and staging branches for valid projects.
|
||||
|
||||
.. seealso::
|
||||
:doc:`Upgrade - Odoo.sh <../../upgrade/odoo_sh>`
|
||||
:doc:`Upgrade documentation <../../upgrade>`
|
||||
|
||||
.. _odoosh-gettingstarted-branches-tabs-settings:
|
||||
|
||||
|
||||
@@ -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
|
||||
=============
|
||||
|
||||
@@ -1,226 +1,375 @@
|
||||
:show-content:
|
||||
|
||||
.. |assistance-contact| replace::
|
||||
If you need Odoo assistance on this matter, please get in touch with your Odoo Account Manager or
|
||||
our `Sales department`_.
|
||||
.. _Sales department: mailto:sales@odoo.com
|
||||
|
||||
=======
|
||||
Upgrade
|
||||
=======
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
.. _administration/upgrade:
|
||||
|
||||
upgrade/odoo_online
|
||||
upgrade/odoo_sh
|
||||
upgrade/on_premise
|
||||
upgrade/faq
|
||||
An upgrade is the process of moving your database from an older version to a newer :doc:`supported
|
||||
version <maintain/supported_versions>` (e.g., Odoo 14.0 to Odoo 16.0). Frequently upgrading is
|
||||
essential as each version comes with new and improved features, bug fixes, and security patches.
|
||||
|
||||
An upgrade is switching to a newer version of Odoo (e.g., Odoo 14.0 to Odoo 15.0).
|
||||
.. _upgrade_faq/rolling_release:
|
||||
|
||||
.. spoiler:: Automatic upgrades: Odoo Online's Rolling Release process
|
||||
|
||||
The Rolling Release process allows Odoo Online customers to upgrade their database directly from
|
||||
a message prompt sent to the database administrator as soon as a new version is released. The
|
||||
invitation to upgrade is only sent if no issues are detected during the automatic tests.
|
||||
|
||||
.. image:: upgrade/rr-upgrade-message.png
|
||||
:alt: The upgrade message prompt on the top right of the database
|
||||
|
||||
It is strongly recommended to manually :ref:`test the upgrade first <upgrade/test_your_db>`.
|
||||
Clicking :guilabel:`I want to test first` redirects to `the database manager
|
||||
<https://www.odoo.com/my/databases/>`_, where it is possible to request an upgraded test database
|
||||
and check it for any discrepancies.
|
||||
|
||||
It is **not** recommended to click :guilabel:`Upgrade Now` without testing first, as it
|
||||
immediately triggers the live production database upgrade.
|
||||
|
||||
If the Rolling Release process detects an issue with the upgrade, it will be deactivated until
|
||||
the issue is resolved.
|
||||
|
||||
An upgrade does not cover:
|
||||
|
||||
* Changing :ref:`editions <upgrade-faq/editions-change>` (i.e., Community to Enterprise edition)
|
||||
* Switching :ref:`hosting type <upgrade-faq/hosting-types-switch>` (i.e., On-Premise to Odoo Online
|
||||
or Odoo.sh)
|
||||
* Migration from another ERP to Odoo
|
||||
- Downgrading to a previous version of Odoo
|
||||
- :doc:`Switching editions <maintain/enterprise>` (e.g., from Community to Enterprise)
|
||||
- :doc:`Changing hosting type </administration/maintain/hosting_changes>` (e.g., from on-premise
|
||||
to Odoo Online)
|
||||
- Migrating from another ERP to Odoo
|
||||
|
||||
.. note:: |assistance-contact|
|
||||
.. warning::
|
||||
If your database contains a **custom module**, you must first upgrade its source code to be
|
||||
compatible with the new version of Odoo **before upgrading**.
|
||||
.. TODOUPG : once the page for developers is published, uncomment and link
|
||||
.. :doc:`first upgrade its source code </developer/reference/upgrade>`
|
||||
|
||||
.. seealso::
|
||||
- :ref:`upgrade/sla`
|
||||
|
||||
.. _upgrade/process-workflow:
|
||||
Upgrading in a nutshell
|
||||
-----------------------
|
||||
|
||||
Process workflow
|
||||
================
|
||||
#. Request an upgraded test database (see :ref:`obtaining an upgraded test database
|
||||
<upgrade/request-test-database>`).
|
||||
|
||||
The upgrade process in a nutshell:
|
||||
#. Thoroughly test the upgraded database (see :ref:`testing the new version of the database
|
||||
<upgrade/test_your_db>`).
|
||||
|
||||
#. You create a test upgrade request.
|
||||
#. Odoo processes the request automatically by running the database through an upgrade script, which
|
||||
takes between 20 and 120 minutes.
|
||||
#. Odoo delivers a test database.
|
||||
#. You test your database for possible discrepancies (see :ref:`upgrade/test-guidance`).
|
||||
#. If there are any discrepancies, you report them to the Upgrade support team via the help portal
|
||||
(see :ref:`upgrade/test-assistance`).
|
||||
#. We fix the issues and send you a new test database.
|
||||
#. Once you have completed the testing and are happy with the result, you decide on a date and time
|
||||
when you stop users from accessing Odoo, freeze all data entries, and create an upgrade request
|
||||
for the production upgrade.
|
||||
#. Odoo delivers the production database through the automated process.
|
||||
#. You restore it in your Production environment a few short hours later and continue working on the
|
||||
newly upgraded database (this is done automatically on Odoo Online).
|
||||
#. Report any issue encountered during the testing to Odoo via the `support page
|
||||
<https://odoo.com/help?stage=migration>`__.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`Upgrade process for Odoo Online <upgrade/odoo_online>`
|
||||
- :doc:`Upgrade process for Odoo.sh <upgrade/odoo_sh>`
|
||||
- :doc:`Upgrade process for On-Premise <upgrade/on_premise>`
|
||||
#. (If applicable) : upgrade the source code of your custom module to be compatible with the new
|
||||
version of Odoo.
|
||||
|
||||
.. _upgrade/testing-phase:
|
||||
#. Once all issues are resolved and you are confident that the upgraded database can be used as
|
||||
your main database without any issues, plan the upgrade of your production database.
|
||||
|
||||
Testing
|
||||
=======
|
||||
#. Request the upgrade for the production database, rendering it unavailable for the time it takes
|
||||
to complete the process (see :ref:`upgrading the production database <upgrade/upgrade-prod>`).
|
||||
|
||||
This phase allows you to review an upgraded version of your database without affecting your
|
||||
production database in any way. We suggest that you run the test upgrade process at least once, but
|
||||
you can do it as many times as you need (one at a time).
|
||||
#. Report any issue encountered during the upgrade to Odoo via the `support page
|
||||
<https://odoo.com/help?stage=post_upgrade>`__.
|
||||
|
||||
Once you receive your upgraded test database, check that all data, processes, and functionality are
|
||||
still correct and working as expected.
|
||||
.. TODOUPG: Once the page for developers is published, put this at 4)
|
||||
.. (see :ref:`upgrading customizations <upgrade/upgrading_customizations>`).
|
||||
|
||||
If you do find discrepancies, :ref:`report your issues <upgrade/test-assistance>` and :ref:`request
|
||||
a new test database <upgrade/test-db-request>` when the reported issues are fixed in the upgrade
|
||||
script.
|
||||
.. _upgrade/request-test-database:
|
||||
|
||||
If you do not find any discrepancies, you can move on to the upgrade of your production database.
|
||||
|
||||
.. important::
|
||||
A test database is only intended for testing and remains completely unrelated to your present or
|
||||
future production database. Any data you add, or changes you make, will not be reflected in your
|
||||
upgraded production database.
|
||||
|
||||
.. note::
|
||||
Test databases are neutered and features are disabled to prevent them from having an impact on
|
||||
the production database:
|
||||
|
||||
#. The serial number of the database is modified (to prevent it from sending information as if it
|
||||
was the production database).
|
||||
#. The :ref:`base URL of the database <domain-name/web-base-url>` is reset to
|
||||
``http://localhost:8069`` and the email domain to ``localhost``.
|
||||
#. Scheduled actions are disabled (the calendar synchronization, the bank statement
|
||||
synchronization, the planned automated actions, the fetching of incoming mail servers, etc.).
|
||||
#. Outgoing mail servers are disabled by archiving the existing ones and adding a
|
||||
fake/non-working one.
|
||||
#. Payment providers and delivery carriers are reset to test environment.
|
||||
#. Accounting localization Electronic Data Interchange (EDI) services are disabled.
|
||||
#. A system parameter is set to tell the database has been neutered.
|
||||
|
||||
.. _upgrade/test-db-request:
|
||||
|
||||
Request a test database
|
||||
=======================
|
||||
|
||||
Follow the instructions available per hosting type on the `website form
|
||||
<https://upgrade.odoo.com>`_ and select *Testing* purpose.
|
||||
|
||||
.. image:: upgrade/test-purpose.png
|
||||
:align: center
|
||||
:alt: Selection of the "Testing" purpose in the upgrade form on Odoo
|
||||
|
||||
.. _upgrade/test-guidance:
|
||||
|
||||
Test guidance
|
||||
=============
|
||||
|
||||
Every business and organization has its own operational needs and has to test its specific Odoo
|
||||
database individually. We recommend you look at `the test scenario
|
||||
<https://docs.google.com/document/d/1ypNs7JKPOsjNbKpdiKFH7Al6g6whZ9jr7f7duAQ5E1w/>`_ for further
|
||||
information.
|
||||
|
||||
.. todo:: change link "test scenario" once the related doc is published
|
||||
|
||||
.. _upgrade/test-assistance:
|
||||
|
||||
Assistance
|
||||
----------
|
||||
|
||||
If you encounter an issue in the **test database**, please get in touch with Odoo Upgrade Support
|
||||
via the `Odoo Support page <https://www.odoo.com/help>`_.
|
||||
|
||||
Under the *Ticket Description* section, select *An issue related to my upgrade* ticket type.
|
||||
|
||||
.. image:: upgrade/test-assistance.png
|
||||
:align: center
|
||||
:alt: Selection of "An issue related to my upgrade" as Ticket Type in the support form on Odoo
|
||||
|
||||
.. warning::
|
||||
If you choose another *Ticket Description* type, the request will be redirected to another
|
||||
team. This will slow down the processing and response time.
|
||||
|
||||
Please provide as much detail as you can (i.e., videos and screenshots to illustrate your issue).
|
||||
This will avoid clarifying questions and speed up the resolution process significantly.
|
||||
|
||||
.. note::
|
||||
* The purpose of the test phase is not to correct existing data or configurations in your
|
||||
database.
|
||||
* |assistance-contact|
|
||||
|
||||
.. _upgrade/steps-production:
|
||||
|
||||
The production launch
|
||||
=====================
|
||||
|
||||
The production upgrade request is when you decide to upgrade your current database with all your
|
||||
production data (invoices, VAT returns, inventories, current orders) to a new version of your
|
||||
choice.
|
||||
|
||||
After your :ref:`tests <upgrade/testing-phase>` are completed to your satisfaction, submit the
|
||||
request to upgrade your production database via our `website form <https://upgrade.odoo.com>`_.
|
||||
Select *Production* purpose.
|
||||
|
||||
.. important::
|
||||
Going into production without first testing may lead to:
|
||||
|
||||
- business interruptions (e.g., no longer having the possibility to validate an action)
|
||||
- poor customer experiences (e.g., an eCommerce website that does not work correctly)
|
||||
|
||||
.. _upgrade/production-assistance:
|
||||
|
||||
Assistance
|
||||
----------
|
||||
|
||||
If you encounter issues or problems in the **production database**, please get in touch with **Odoo
|
||||
Support**:
|
||||
|
||||
#. Connect to our `Odoo Support page <https://www.odoo.com/help>`_.
|
||||
#. Under the *Ticket Description* section, select the appropriate type related to your issue but
|
||||
**do not select** the option *An issue related to my upgrade*.
|
||||
|
||||
.. note::
|
||||
After upgrading to production, the support will be provided by the Support team instead of the
|
||||
Upgrade team.
|
||||
|
||||
#. Please provide as much detail as you can (i.e., videos and screenshots to illustrate your issue).
|
||||
This will avoid clarifying questions and speed up the resolution process significantly.
|
||||
|
||||
.. warning::
|
||||
If you choose *An issue related to my upgrade* as ticket type, the request will be redirected
|
||||
to another team than the support one and will slow down the processing and response time.
|
||||
|
||||
.. _upgrade/assistance:
|
||||
|
||||
Help
|
||||
====
|
||||
|
||||
.. _upgrade/contact:
|
||||
|
||||
Contact our upgrade service support
|
||||
Obtaining an upgraded test database
|
||||
-----------------------------------
|
||||
|
||||
Should you have any more questions about the upgrade, do not hesitate to send a message to `Odoo
|
||||
Upgrade Team <mailto:upgrade@odoo.com>`_. We will be happy to answer it as soon as possible.
|
||||
The `Upgrade page <https://upgrade.odoo.com/>`_ is the main platform for requesting an upgraded
|
||||
database. However, depending on the hosting type, you can upgrade from the command line
|
||||
(on-premise), the `Odoo Online database manager <https://odoo.com/my/databases>`_, or your `Odoo.sh
|
||||
project <https://odoo.sh/project>`_.
|
||||
|
||||
.. _upgrade/supported-versions:
|
||||
.. note::
|
||||
The Upgrade platform follows the same `Privacy Policy <https://www.odoo.com/privacy>`_ as the
|
||||
other Odoo.com services. Visit the `General Data Protection Regulation page
|
||||
<https://www.odoo.com/gdpr>`_ to learn more about how Odoo handles your data and privacy.
|
||||
|
||||
Supported versions
|
||||
------------------
|
||||
.. tabs::
|
||||
|
||||
Please note that Odoo provides support and bug fixing only for the three last major versions of
|
||||
Odoo.
|
||||
.. group-tab:: Odoo Online
|
||||
|
||||
This is a factor to take into consideration before upgrading. If you are on an older version, we
|
||||
suggest you to prefer the most recent version to benefit from longer support (before having to
|
||||
upgrade again).
|
||||
Odoo Online databases can be manually upgraded via the `database manager
|
||||
<https://odoo.com/my/databases>`_.
|
||||
|
||||
The database manager displays all databases associated with the user's account. Databases
|
||||
not on the most recent version of Odoo display an arrow in a circle icon next to their name,
|
||||
indicating that they can be upgraded.
|
||||
|
||||
.. image:: upgrade/databases-page.png
|
||||
:alt: The database manager with an upgrade button next to the name of a database.
|
||||
|
||||
Click the **arrow in a circle** icon to start the upgrade process. In the popup, fill in:
|
||||
|
||||
- The **version** of Odoo you want to upgrade to, usually the latest version
|
||||
- The **email** address that should receive the link to the upgraded database
|
||||
- The :guilabel:`Purpose` of the upgrade, which is automatically set to :guilabel:`Test` for
|
||||
your first upgrade request
|
||||
|
||||
.. image:: upgrade/upgrade-popup.png
|
||||
:alt: The "Upgrade your database" popup.
|
||||
|
||||
The :guilabel:`Upgrade in progress` tag is displayed next to the database name until
|
||||
completion. Once the process succeeds, an email containing a link to the upgraded test
|
||||
database is sent to the address provided. The database can also be accessed from the database
|
||||
manager by clicking the dropdown arrow before the database name.
|
||||
|
||||
.. image:: upgrade/access-upgraded-db.png
|
||||
:alt: Clicking the menu arrow displays the upgraded test database.
|
||||
|
||||
.. group-tab:: Odoo.sh
|
||||
|
||||
Odoo.sh is integrated with the upgrade platform to simplify the upgrade process.
|
||||
|
||||
.. image:: upgrade/odoo-sh-staging.png
|
||||
:alt: Odoo.sh project and tabs
|
||||
|
||||
The **latest production daily automatic backup** is then sent to the `upgrade platform
|
||||
<https://upgrade.odoo.com>`_.
|
||||
|
||||
Once the upgrade platform is done upgrading the backup and uploading it on the branch, it is
|
||||
put in a **special mode**: each time a **commit is pushed** on the branch, a **restore
|
||||
operation** of the upgraded backup and an **update of all the custom modules** occur. This
|
||||
allows you to test your custom modules on a pristine copy of the upgraded database. The log
|
||||
file of the upgrade process can be found in your newly upgraded staging build by going to
|
||||
:file:`~/logs/upgrade.log`.
|
||||
|
||||
.. note::
|
||||
In databases where custom modules are installed, their source code
|
||||
must be up-to-date with the target version of Odoo before the upgrade
|
||||
can be performed. If there are none, the "update on commit" mode is
|
||||
skipped, the upgraded database is built as soon as it is transferred from the upgrade
|
||||
platform, and the upgrade mode is exited.
|
||||
|
||||
.. TODOUPG : once the page for developers is published, uncomment
|
||||
.. Check out the :doc:`upgrade for developers'
|
||||
.. documentation </developer/reference/upgrade>` for more information. In
|
||||
.. addition, if a module is not needed after an upgrade, :ref:`you can
|
||||
.. remove customizations <upgrade/remove_customizations>`.
|
||||
|
||||
.. group-tab:: On-premise
|
||||
|
||||
The standard upgrade process can be initiated by entering the following command line on the
|
||||
machine where the database is hosted:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python <(curl -s https://upgrade.odoo.com/upgrade) test -d <your db name> -t <target version>
|
||||
|
||||
The following command can be used to display the general help and the main commands:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python <(curl -s https://upgrade.odoo.com/upgrade) --help
|
||||
|
||||
An upgraded test database can also be requested via the `Upgrade page
|
||||
<https://upgrade.odoo.com/>`_.
|
||||
|
||||
.. note::
|
||||
- For security reasons, only the person who submitted the upgrade request can download it.
|
||||
- For storage reasons, the database's copy is submitted without a filestore to the upgrade
|
||||
server. Therefore, the upgraded database does not contain the production filestore.
|
||||
- Before restoring the upgraded database, its filestore must be merged with the production
|
||||
filestore to be able to perform tests in the same conditions as it would be in the new
|
||||
version.
|
||||
- The upgraded database contains:
|
||||
|
||||
- A `dump.sql` file containing the upgraded database
|
||||
- A `filestore` folder containing files extracted from in-database records into
|
||||
attachments (if there are any) and new standard Odoo files from the targeted Odoo
|
||||
version (e.g., new images, icons, payment provider's logos, etc.).
|
||||
This is the folder that should be merged with the production filestore
|
||||
in order to get the full upgraded filestore.
|
||||
|
||||
.. note::
|
||||
You can request multiple test databases if you wish to test an upgrade more than once.
|
||||
|
||||
.. _upgrade/upgrade_report:
|
||||
|
||||
.. note::
|
||||
When an upgrade request is completed, an upgrade report is attached to the successful upgrade
|
||||
email, and it becomes available in the Discuss app for users who are part of the "Administration
|
||||
/ Settings" group. This report provides important information about the changes introduced by
|
||||
the new version.
|
||||
|
||||
.. _upgrade/test_your_db:
|
||||
|
||||
Testing the new version of the database
|
||||
---------------------------------------
|
||||
|
||||
It is essential to spend some time testing the upgraded test database to ensure that you are not
|
||||
stuck in your day-to-day activities by a change in views, behavior, or an error message once the
|
||||
upgrade goes live.
|
||||
|
||||
.. note::
|
||||
Test databases are neutralized, and some features are disabled to prevent them from impacting the
|
||||
production database:
|
||||
|
||||
#. Scheduled actions are disabled.
|
||||
#. Outgoing mail servers are disabled by archiving the existing ones and adding a fake one.
|
||||
#. Payment providers and delivery carriers are reset to the test environment.
|
||||
#. Bank synchronization is disabled. Should you want to test the synchronization, contact your
|
||||
bank synchronization provider to get sandbox credentials.
|
||||
|
||||
Testing as many of your business flows as possible is strongly recommended to ensure they are
|
||||
working correctly and to get more familiar with the new version.
|
||||
|
||||
.. admonition:: Basic test checklist
|
||||
|
||||
- Are there views that are deactivated in your test database but active in your production
|
||||
database?
|
||||
- Are your usual views still displayed correctly?
|
||||
- Are your reports (invoice, sales order, etc.) correctly generated?
|
||||
- Are your website pages working correctly?
|
||||
- Are you able to create and modify records? (sales orders, invoices, purchases, users, contacts,
|
||||
companies, etc.)
|
||||
- Are there any issues with your mail templates?
|
||||
- Are there any issues with saved translations?
|
||||
- Are your search filters still present?
|
||||
- Can you export your data?
|
||||
|
||||
.. spoiler:: Example of end-to-end testing
|
||||
|
||||
- Checking a random product in your product catalog and comparing its test and production data to
|
||||
verify everything is the same (product category, selling price, cost price, vendor, accounts,
|
||||
routes, etc.).
|
||||
- Buying this product (Purchase app).
|
||||
- Confirming the reception of this product (Inventory app).
|
||||
- Checking if the route to receive this product is the same in your production database
|
||||
(Inventory app).
|
||||
- Selling this product (Sales app) to a random customer.
|
||||
- Opening your customer database (Contacts app), selecting a customer (or company), and checking
|
||||
its data.
|
||||
- Shipping this product (Inventory app).
|
||||
- Checking if the route to ship this product is the same as in your production database
|
||||
(Inventory app).
|
||||
- Validating a customer invoice (Invoicing or Accounting app).
|
||||
- Crediting the invoice (issuing a credit note) and checking if it behaves as in your production
|
||||
database.
|
||||
- Checking your reports' results (Accounting app).
|
||||
- Randomly checking your taxes, currencies, bank accounts, and fiscal year (Accounting app).
|
||||
- Making an online order (Website apps) from the product selection in your shop until the
|
||||
checkout process and checking if everything behaves as in your production database.
|
||||
|
||||
This list is **not** exhaustive. Extend the example to your other apps based on your use of Odoo.
|
||||
|
||||
If you face an issue while testing your upgraded test database, you can request the assistance of
|
||||
Odoo via the `support page <https://odoo.com/help?stage=migration>`__ by selecting the option
|
||||
related to testing the upgrade. In any case, it is essential to report any
|
||||
problem encountered during the testing to fix it before upgrading your production database.
|
||||
|
||||
You might encounter significant differences with standard views, features, fields, and models during
|
||||
testing. Those changes cannot be reverted on a case-by-case basis. However, if a change introduced
|
||||
by a new version breaks a customization, it is the responsibility of the maintainer of your custom
|
||||
module to make it compatible with the new version of Odoo.
|
||||
|
||||
.. tip::
|
||||
Do not forget to test:
|
||||
|
||||
- Integrations with external software (EDI, APIs, etc.)
|
||||
- Workflows between different apps (online sales with eCommerce, converting a lead all the way to
|
||||
a sales order, delivery of products, etc.)
|
||||
- Data exports
|
||||
- Automated actions
|
||||
- Server actions in the action menu on form views, as well as by selecting multiple records on
|
||||
list views
|
||||
|
||||
.. _upgrade/upgrade-prod:
|
||||
|
||||
Upgrading the production database
|
||||
---------------------------------
|
||||
|
||||
Once the :ref:`tests <upgrade/test_your_db>` are completed and you are confident that the upgraded
|
||||
database can be used as your main database without any issues, it is time to plan the go-live day. It
|
||||
can be planned in coordination with Odoo's upgrade support analysts, reachable via the `support page
|
||||
<https://odoo.com/help>`__.
|
||||
|
||||
Your production database will be unavailable during its upgrade. Therefore, we recommend planning
|
||||
the upgrade at a time when the use of the database is minimal.
|
||||
|
||||
As the standard upgrade scripts and your database are constantly evolving, it is also recommended
|
||||
to frequently request another upgraded test database to ensure that the upgrade process is
|
||||
still successful, especially if it takes a long time to finish. Fully rehearsing the upgrade
|
||||
process the day before upgrading the production database is also recommended.
|
||||
|
||||
.. important::
|
||||
- Going into production without first testing may lead to:
|
||||
|
||||
- Users failing to adjust to the changes and new features
|
||||
- Business interruptions (e.g., no longer having the possibility to validate an action)
|
||||
- Poor customer experience (e.g., an eCommerce website that does not work correctly)
|
||||
|
||||
The process of upgrading a production database is similar to upgrading a test database with a few
|
||||
exceptions.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Odoo Online
|
||||
|
||||
The process is similar to :ref:`obtaining an upgraded test database
|
||||
<upgrade/request-test-database>`, except for the purpose option, which must be set to
|
||||
:guilabel:`Production` instead of :guilabel:`Test`.
|
||||
|
||||
.. warning::
|
||||
Once the upgrade is requested, the database will be unavailable until the upgrade is
|
||||
finished. Once the process is completed, it is impossible to revert to the previous
|
||||
version.
|
||||
|
||||
.. group-tab:: Odoo.sh
|
||||
|
||||
The process is similar to :ref:`obtaining an upgraded test database
|
||||
<upgrade/request-test-database>` on the :guilabel:`Production` branch.
|
||||
|
||||
.. image:: upgrade/odoo-sh-prod.png
|
||||
:alt: View from the upgrade tab
|
||||
|
||||
The process is **triggered as soon as a new commit is made** on the branch. This
|
||||
allows the upgrade process to be synchronized with the deployment of the custom modules'
|
||||
upgraded source code.
|
||||
If there are no custom modules, the upgrade process is triggered immediately.
|
||||
|
||||
.. important::
|
||||
The database is unavailable throughout the process. If anything goes wrong, the platform
|
||||
automatically reverts the upgrade, as it would be for a regular update. In case of success,
|
||||
a backup of the database before the upgrade is created.
|
||||
|
||||
The update of your custom modules must be successful to complete the entire upgrade process.
|
||||
Make sure the status of your staging upgrade is :guilabel:`successful` before trying it in
|
||||
production.
|
||||
.. TODOUPG : once the page for developers is published, uncomment
|
||||
.. More information on how to upgrade your custom modules can be found in the :ref:`upgrading customizations documentation <upgrade/upgrading_customizations>`.
|
||||
|
||||
.. group-tab:: On-premise
|
||||
|
||||
The command to upgrade a database to production is similar to the one of upgrading a test
|
||||
database except for the argument `test`, which must be replaced by `production`:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python <(curl -s https://upgrade.odoo.com/upgrade) production -d <your db name> -t <target version>
|
||||
|
||||
An upgraded production database can also be requested via the `Upgrade page
|
||||
<https://upgrade.odoo.com/>`_.
|
||||
Once the database is uploaded, any modification to your production database will **not** be
|
||||
present on your upgraded database. This is why we recommend not using it during the upgrade
|
||||
process.
|
||||
|
||||
.. important::
|
||||
When requesting an upgraded database for production purposes, the copy is submitted without
|
||||
a filestore. Therefore, the upgraded database filestore must be merged with the production
|
||||
filestore before deploying the new version.
|
||||
|
||||
In case of an issue with your production database, you can request the assistance of Odoo via the
|
||||
`support page <https://odoo.com/help?stage=post_upgrade>`__ by selecting the option related to
|
||||
the upgrade in production.
|
||||
|
||||
.. seealso::
|
||||
:doc:`maintain/supported_versions`
|
||||
|
||||
.. _upgrade/sla:
|
||||
|
||||
Service-level agreement (SLA)
|
||||
=============================
|
||||
-----------------------------
|
||||
|
||||
With Odoo Enterprise, upgrading a database to the most recent version of Odoo is **free**, including
|
||||
any support required to rectify potential discrepancies in the upgraded database.
|
||||
@@ -230,7 +379,7 @@ Information about the upgrade services included in the Enterprise Licence is ava
|
||||
upgrade services you can expect.
|
||||
|
||||
Upgrade services covered by the SLA
|
||||
-----------------------------------
|
||||
===================================
|
||||
|
||||
Databases hosted on Odoo's cloud platforms (Odoo Online and Odoo.sh) or self-hosted (On-Premise) can
|
||||
benefit from upgrade services at all times for:
|
||||
@@ -245,7 +394,7 @@ Upgrade services are limited to the technical conversion and adaptation of a dat
|
||||
modules and data) to make it compatible with the version targeted by the upgrade.
|
||||
|
||||
Upgrade services not covered by the SLA
|
||||
---------------------------------------
|
||||
=======================================
|
||||
|
||||
The following upgrade-related services are **not** included:
|
||||
|
||||
@@ -256,9 +405,6 @@ The following upgrade-related services are **not** included:
|
||||
<studio/automated-actions/action>`; and
|
||||
- **training** on using the upgraded version's features and workflows.
|
||||
|
||||
.. note:: |assistance-contact|
|
||||
|
||||
.. seealso::
|
||||
- :doc:`Upgrade FAQ <upgrade/faq>`
|
||||
- :doc:`Odoo.sh documentation <odoo_sh>`
|
||||
- :doc:`Supported Odoo versions <maintain/supported_versions>`
|
||||
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
@@ -1,228 +0,0 @@
|
||||
.. |assistance-contact| replace::
|
||||
If you need Odoo assistance on this matter, please get in touch with your Odoo Account Manager or
|
||||
our `Sales department`_.
|
||||
.. _Sales department: mailto:sales@odoo.com
|
||||
|
||||
===
|
||||
FAQ
|
||||
===
|
||||
|
||||
.. _upgrade-faq/why:
|
||||
|
||||
Why upgrade
|
||||
===========
|
||||
|
||||
* You benefit from the latest features of the :ref:`new major version
|
||||
<upgrade-faq/release-notes>` released by Odoo.
|
||||
* If you are in an :ref:`unsupported version <upgrade/supported-versions>`, you get a new version
|
||||
with support.
|
||||
|
||||
.. _upgrade-faq/when:
|
||||
|
||||
When to upgrade
|
||||
===============
|
||||
|
||||
Whenever you want. You can make your upgrade request as soon as a new version is released or when
|
||||
your version turns unsupported, and you still wish to enjoy support.
|
||||
|
||||
.. _upgrade-faq/availability:
|
||||
|
||||
Availability of the new version
|
||||
===============================
|
||||
|
||||
As soon as Odoo announces the release of a new major version, you can create a test upgrade request
|
||||
to try the latest version. Please note that at this point, the upgrade scripts will only have been
|
||||
tested with demo data. Please report any issue you might encounter while testing via the `Odoo
|
||||
Support page <https://www.odoo.com/help>`_ and make sure to be happy with your test version before
|
||||
requesting the upgrade of your database in production.
|
||||
|
||||
.. _upgrade-faq/duration:
|
||||
|
||||
Duration of the upgrade
|
||||
=======================
|
||||
|
||||
It is impossible to give time estimates for every upgrade request.
|
||||
|
||||
In general, the "smaller" the database, the quickest the upgrade request is completed. A single-user
|
||||
database that uses only CRM will be processed faster than a multi-company, multi-user database that
|
||||
uses Accounting, Sales, Purchase, and Manufacturing.
|
||||
|
||||
You can expect the time it takes for the platform to upgrade the test database to be similar to the
|
||||
production upgrade.
|
||||
|
||||
.. _upgrade-faq/project:
|
||||
|
||||
Duration of the upgrade project
|
||||
-------------------------------
|
||||
|
||||
It depends on the user involvement (the time spent on testing, reporting problems, etc.) and the
|
||||
issues encountered that might need to be addressed by our technical team.
|
||||
|
||||
So, in a nutshell, what can impact your upgrade lead time?
|
||||
|
||||
* Source & targeted versions
|
||||
* Installed apps
|
||||
* Volume of data
|
||||
* Amount of customization (models, fields, methods, workflows, reports, website, etc.)
|
||||
* Installation of new apps or configuration changes after the start of the test phase
|
||||
* User commitment
|
||||
|
||||
.. _upgrade-faq/custom-modules:
|
||||
|
||||
Upgrade of the custom modules
|
||||
=============================
|
||||
|
||||
As stated in our :doc:`/legal/terms/enterprise`, section :ref:`charges_standard`, this optional
|
||||
service is subject to additional fees.
|
||||
|
||||
Depending on your situation, the custom code could be upgraded by our services, by one of our
|
||||
partners, or you can do it yourself.
|
||||
|
||||
.. note:: |assistance-contact|
|
||||
|
||||
.. _upgrade-faq/upgrade-or-migration:
|
||||
|
||||
Upgrade or Migration
|
||||
====================
|
||||
|
||||
An upgrade is switching to a newer version of Odoo, while a migration reflects the change of
|
||||
:ref:`editions <upgrade-faq/editions-change>` or change of :ref:`hosting type
|
||||
<upgrade-faq/hosting-types-switch>`.
|
||||
|
||||
.. note:: |assistance-contact|
|
||||
|
||||
.. _upgrade-faq/editions-change:
|
||||
|
||||
Editions change (from Community to Enterprise)
|
||||
==============================================
|
||||
|
||||
The upgrade always returns an Enterprise edition of Odoo, whether the database you sent was a
|
||||
community or enterprise edition. It is required to have an enterprise subscription to upgrade.
|
||||
|
||||
.. note::
|
||||
If you need assistance on this matter, please contact us via the `Odoo Support page
|
||||
<https://www.odoo.com/help>`_.
|
||||
|
||||
.. seealso::
|
||||
- `Editions <https://www.odoo.com/page/editions>`_
|
||||
|
||||
.. _upgrade-faq/hosting-types-switch:
|
||||
|
||||
Switching the hosting types (On-premise vs. Odoo Online vs. Odoo.sh)
|
||||
====================================================================
|
||||
|
||||
An upgrade does not cover a change of `Hosting types <https://www.odoo.com/page/hosting-types>`_.
|
||||
|
||||
Open the following link to get :doc:`more information about how to change your hosting type
|
||||
<../maintain/hosting_changes>`.
|
||||
|
||||
.. note:: |assistance-contact|
|
||||
|
||||
.. _upgrade-faq/upgrade-report:
|
||||
|
||||
The Upgrade Report
|
||||
==================
|
||||
|
||||
When an upgrade request completes successfully (test or production), you receive an email
|
||||
notification about it that includes an 'Upgrade Report'. This report is also sent to you via the
|
||||
Discuss app. It contains valuable information regarding changes that occurred during the upgrade.
|
||||
While it serves as a guide to possible issues to look out for, it is not an exhaustive list. It
|
||||
remains imperative that you test the upgraded database thoroughly and report any discrepancies you
|
||||
might find, before you decide to upgrade your production database.
|
||||
|
||||
.. _upgrade-faq/custom-views:
|
||||
|
||||
Custom views
|
||||
============
|
||||
|
||||
During the upgrade, some custom views might get disabled for technical reasons. Therefore they might
|
||||
have to be fixed after the upgrade. The :ref:`Upgrade Report <upgrade-faq/upgrade-report>` that is
|
||||
generated after the upgrade is available in the Discuss app, and lists all the custom views that
|
||||
might be impacted by this.
|
||||
|
||||
.. _upgrade-faq/release-notes:
|
||||
|
||||
Release Notes by version
|
||||
========================
|
||||
|
||||
Open our `Release Note <https://www.odoo.com/page/release-notes>`_ page to get a summary of the new
|
||||
features and improvements made in each version.
|
||||
|
||||
How long is my test available for
|
||||
=================================
|
||||
|
||||
An Odoo Online test database is available for one month by default. We can extend this trial period
|
||||
upon request. For Odoo.sh or on-premise, there is no restriction.
|
||||
|
||||
How many tests to perform before upgrading to production?
|
||||
=========================================================
|
||||
|
||||
As many as needed. When you are comfortable with the database, run a last test upgrade 48 hours
|
||||
before requesting your production upgrade and test your workflows one last time.
|
||||
|
||||
How to/Where to report upgrade issues?
|
||||
======================================
|
||||
|
||||
If you encounter issues during the upgrade process, please contact the Odoo Support through the
|
||||
`Odoo Support page <https://www.odoo.com/help>`_.
|
||||
|
||||
- To report an issue discovered during the testing phase, please select **An issue related to my
|
||||
upgrade (test phase)**.
|
||||
- To report an issue discovered post-upgrade, please select **An issue related to my upgrade
|
||||
(production)**.
|
||||
|
||||
Upgrading to production
|
||||
=======================
|
||||
|
||||
Once you have completed testing and are happy with the result, you decide on a date and time when
|
||||
you stop users from accessing Odoo, freeze all data entries, and create an upgrade request for the
|
||||
production upgrade.
|
||||
|
||||
How is my data handled in the Upgrade Platform?
|
||||
===============================================
|
||||
|
||||
The Odoo Upgrade platform uses the same Privacy Policy as the rest of Odoo.com services.
|
||||
|
||||
Your data is hosted on servers that follow our security guidelines, namely:
|
||||
|
||||
- SSL - All web connections to client instances are protected with 256-bit SSL encryption
|
||||
(HTTPS with a 2048-bit modulus SSL certificate), and running behind Grade A SSL stacks. All our
|
||||
certificate chains are using SHA-2 already.
|
||||
- Safe System - Our servers are running recent Linux distribution with up-to-date security patches,
|
||||
with firewall and intrusion countermeasures (not disclosed for obvious reasons).
|
||||
|
||||
Servers are located at the same locations as our Cloud providers with the following services:
|
||||
|
||||
- Restricted perimeter, physically accessed by authorized data center employees only
|
||||
- Physical access control with security badges or biometrical security
|
||||
- Security cameras monitoring the data center locations 24/7
|
||||
- Security personnel on-site 24/7
|
||||
|
||||
The uploaded and migrated databases uploaded to the Upgrade platform are kept for up to 3 months and
|
||||
are permanently deleted following that period.
|
||||
|
||||
You can learn more about privacy and data handling at Odoo by visiting our `General Data Protection
|
||||
Regulation page <https://www.odoo.com/gdpr>`_.
|
||||
|
||||
Rolling Release (applicable to Odoo Online databases)
|
||||
=====================================================
|
||||
|
||||
This feature allows customers to upgrade their database directly from a message prompt sent to the
|
||||
database administrator as soon as the new version is released. Odoo first tests the upgrade to the
|
||||
next version. The rolling release upgrade option is displayed if the automated tests are successful.
|
||||
The message offers two options:
|
||||
|
||||
#. To 'Upgrade Now', which immediately triggers the upgrade of your live production database.
|
||||
|
||||
#. To take you to your `database manager <https://www.odoo.com/my/databases/>`_ where you can
|
||||
`request an upgraded test database <https://upgrade.odoo.com/#online/>`_ and check the upgraded
|
||||
test database for any discrepancies.
|
||||
|
||||
When you choose to proceed with the production upgrade directly, make sure all users have saved
|
||||
their work and are logged out. The upgrade takes approximately 15 minutes. During this time your
|
||||
database is unreachable. If you notice any problem after the upgrade, please report it via the `Odoo
|
||||
Support page <https://www.odoo.com/help>`_.
|
||||
|
||||
.. note::
|
||||
If you are using the Website or Studio app, we recommend you always do a test upgrade before
|
||||
upgrading your production instance.
|
||||
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 24 KiB |
@@ -1,30 +0,0 @@
|
||||
===========
|
||||
Odoo Online
|
||||
===========
|
||||
|
||||
Requesting a test upgrade
|
||||
=========================
|
||||
|
||||
#. Go to your `database manager <https://www.odoo.com/my/databases/>`_
|
||||
#. Click on your profile icon and select *My Databases*.
|
||||
|
||||
.. image:: odoo_online/accessing-my-databases.png
|
||||
:alt: Selecting My Databases under my profile
|
||||
|
||||
#. Click on the up arrow button next to your main database name to proceed to the test upgrade.
|
||||
|
||||
.. image:: odoo_online/upgrade-option.png
|
||||
:alt: Selecting the action settings icon
|
||||
|
||||
#. In the pop-up message that appears, select the target version and then :guilabel:`Test` as
|
||||
purpose.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Production` purpose doesn't appear if you didn't test your upgraded database at
|
||||
least once.
|
||||
|
||||
#. 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.
|
||||
|
||||
.. note::
|
||||
You can also see and access your test database from your *My Databases* page.
|
||||
|
Before Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 5.1 KiB |
@@ -1,132 +0,0 @@
|
||||
=======
|
||||
Odoo.sh
|
||||
=======
|
||||
|
||||
.. _upgrade/odoo_sh/overview:
|
||||
|
||||
Overview
|
||||
========
|
||||
|
||||
Odoo.sh is integrated with the upgrade platform to make the upgrade process easier.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Upgrade` tab is available in the branches view. It is only available for valid
|
||||
projects with a valid production build.
|
||||
|
||||
.. image:: odoo_sh/odoo-sh-menu.png
|
||||
:align: center
|
||||
:alt: Click on the upgrade menu
|
||||
|
||||
The suggested upgrade steps on Odoo.sh are:
|
||||
|
||||
#. On a :guilabel:`Development` branch, upgrade your custom modules to keep them compatible with the
|
||||
new version and thoroughly **test them**.
|
||||
#. Switch that branch to the :guilabel:`Staging` branch, **upgrade** the last daily production
|
||||
backup and **test it**. Write upgrade scripts if necessary.
|
||||
#. Trigger the production upgrade from your :guilabel:`Production` branch and sit tight.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../../administration/upgrade`
|
||||
- :doc:`Upgrade FAQ <../upgrade/faq>`
|
||||
- :doc:`Introduction to Odoo.sh <../odoo_sh/overview/introduction>`
|
||||
|
||||
.. _upgrade/odoo_sh/custom-modules:
|
||||
|
||||
Upgrade your custom modules
|
||||
===========================
|
||||
|
||||
The first step is to upgrade your custom modules to keep them compatible with the new version. Fork
|
||||
your :guilabel:`Production` branch in the :guilabel:`Development` stage, then go to the settings of
|
||||
your :guilabel:`Development` branch and select the Odoo version you target. If needed, modify your
|
||||
code to be compatible with the new version. Make sure to **test** your features are still working
|
||||
correctly.
|
||||
|
||||
.. note::
|
||||
Depending on your contract, the upgrade of your custom modules can be done by yourself, by your
|
||||
Partner or by Odoo (if you hold a subscription including maintenance of customizations).
|
||||
|
||||
.. _upgrade/odoo_sh/testing-phase:
|
||||
|
||||
Upgrade your database on a staging branch
|
||||
=========================================
|
||||
|
||||
Take the upgraded development branch and drag & drop it to :guilabel:`Staging`.
|
||||
|
||||
Go to the :guilabel:`Upgrade` tab and select the :guilabel:`target version`. Then, click on
|
||||
:guilabel:`Test Upgrade`.
|
||||
|
||||
.. image:: odoo_sh/odoo-sh-staging.png
|
||||
:align: center
|
||||
:alt: Odoo.sh project and tabs
|
||||
|
||||
The **latest production daily automatic backup** is sent to the
|
||||
`upgrade platform <https://www.upgrade.odoo.com>`_ to start the upgrade test process.
|
||||
|
||||
.. note::
|
||||
You can follow the upgrade process by going to the :guilabel:`Upgrade` menu of your
|
||||
:guilabel:`Production` branch.
|
||||
|
||||
When the upgraded backup is ready on the `upgrade platform <https://www.upgrade.odoo.com>`_, it is
|
||||
automatically downloaded back to your project.
|
||||
|
||||
The branch is now in a **special mode**: each time a **commit is pushed** on the branch, a
|
||||
**restore operation** of the upgraded backup occurs, and an **update of all the custom modules**
|
||||
happens. This allows you to quickly iterate on your custom modules upgrade scripts. The log file of
|
||||
the upgrade process can be found at :file:`~/logs/upgrade.log` in your newly upgraded staging build.
|
||||
|
||||
.. note::
|
||||
- The **special upgrade mode** is automatically closed after 30 days.
|
||||
- It may happen that custom modules are no longer needed after an upgrade. Custom modules in the
|
||||
upgraded database are set to be updated. If the modules are missing in the code, the update
|
||||
fails, thus failing the whole process. An empty module with a manifest and possibly some custom
|
||||
upgrade script are necessary to clean up the database. The complete removal of the module has
|
||||
to be handled afterwards.
|
||||
|
||||
Functionally test your upgraded database
|
||||
========================================
|
||||
|
||||
Now that the test upgraded database is available on your staging branch, **thoroughly test it** and
|
||||
make sure everything runs as it's supposed to. Once you are satisfied with the result, you are ready
|
||||
to upgrade your production database.
|
||||
|
||||
Production upgrade
|
||||
==================
|
||||
|
||||
Once you are happy with your testing, you can start the process on the :guilabel:`Production`
|
||||
branch.
|
||||
|
||||
On your :guilabel:`Production` branch, go to the :guilabel:`Upgrade` tab, select the
|
||||
:guilabel:`targeted version` and click on the :guilabel:`start Upgrade` button.
|
||||
|
||||
.. image:: odoo_sh/odoo-sh-prod.png
|
||||
:align: center
|
||||
:alt: View from the upgrade tab
|
||||
|
||||
The actual process is **triggered as soon as you push a new commit** in your branch. Make sure you
|
||||
are pushing code that is compatible with the new version. For example by merging the code from your
|
||||
upgraded staging branch.
|
||||
|
||||
.. note::
|
||||
You can see the progress of the upgrade by going to the :guilabel:`Upgrade` tab of the main
|
||||
branch.
|
||||
|
||||
.. image:: odoo_sh/odoo-sh-progress.png
|
||||
:align: center
|
||||
:alt: View showing the progress of the upgrade
|
||||
|
||||
.. important::
|
||||
Your database is unavailable throughout the process.
|
||||
|
||||
.. note::
|
||||
If anything goes wrong, the platform automatically reverts the upgrade, the same as it would be
|
||||
for a regular update. In case of success, a backup is always made.
|
||||
|
||||
The update of your custom modules must be successful to complete the entire upgrade process. Make
|
||||
sure the status of your staging upgrade is :guilabel:`successful` before trying it in production.
|
||||
|
||||
.. note::
|
||||
It may happen that custom modules are no longer needed after an upgrade. Custom modules in the
|
||||
upgraded database are set to be updated. If the modules are missing in the code, the update
|
||||
fails, thus failing the whole process. An empty module with a manifest and possibly some custom
|
||||
upgrade script are necessary to clean up the database. The complete removal of the module has to
|
||||
be handled afterwards.
|
||||
|
Before Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 31 KiB |
@@ -1,59 +0,0 @@
|
||||
==========
|
||||
On-Premise
|
||||
==========
|
||||
|
||||
Test upgrade request
|
||||
====================
|
||||
|
||||
There are two ways to create your upgrade request.
|
||||
|
||||
Upgrade request via command line
|
||||
--------------------------------
|
||||
|
||||
For technically-advanced users and partners, the upgrade process can be initiated via the following
|
||||
command line on the server where the database is hosted:
|
||||
|
||||
:command:`python <(curl -s https://upgrade.odoo.com/upgrade) test -d <your db name> -t
|
||||
<target version>`
|
||||
|
||||
The above command creates the database dump, sends it to the upgrade platform, and initiates the
|
||||
automated upgrade process. During the upgrade, you can follow the live logs on your screen.
|
||||
Once the upgrade process is completed successfully, the upgraded database is restored onto the
|
||||
server (as a duplicate test database).
|
||||
|
||||
Upgrade request via the Odoo Upgrade Portal
|
||||
-------------------------------------------
|
||||
|
||||
#. Download a recent copy of your database and select the option :guilabel:`pg_dump custom format
|
||||
(without filestore)`.
|
||||
#. Upload this dump file at https://upgrade.odoo.com and select *Testing* as the aim.
|
||||
Odoo performs the automated upgrade process. Once it is completed, you receive an email with a
|
||||
link to download the upgrade database dump file.
|
||||
#. Import the upgraded database into your on-premise environment and manually test all processes and
|
||||
workflows.
|
||||
|
||||
.. note::
|
||||
- For security reasons, only the person who submitted the upgrade request is able to download it.
|
||||
- Any problem found during testing should be reported via the `helpdesk
|
||||
<https://odoo.com/help>`_.
|
||||
|
||||
Upgrade your production database
|
||||
================================
|
||||
|
||||
Once you have completed the testing successfully, you can proceed to upgrade your live database in
|
||||
production. Download your upgraded database from the link in the email and import it onto your live
|
||||
environment.
|
||||
|
||||
Custom modules (if applicable)
|
||||
==============================
|
||||
|
||||
The upgrade of a database that contains custom modules is a two-step process.
|
||||
|
||||
#. The standard upgrade is done when your upgrade request is completed.
|
||||
#. Your custom modules also need to be upgraded to keep them compatible with the new version.
|
||||
|
||||
Depending on your contract, the upgrade of your custom modules can be done
|
||||
|
||||
#. by yourself.
|
||||
#. by your Partner.
|
||||
#. by Odoo (if you hold a subscription to 'Maintenance of Customizations').
|
||||
|
After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 17 KiB |
@@ -96,6 +96,12 @@ gains and losses after reconciling the journal items.
|
||||
.. seealso::
|
||||
:doc:`Manage a bank in a foreign currency <accounting/bank/foreign_currency>`
|
||||
|
||||
Branch management
|
||||
=================
|
||||
|
||||
Multiple branches can be managed thanks to multi-company hierarchies. This allows to post journal
|
||||
entries on each branch as well as setting up a common lock date managed by the main company.
|
||||
|
||||
International standards
|
||||
=======================
|
||||
|
||||
|
||||
@@ -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
|
||||
----------------
|
||||
|
||||
|
||||
@@ -51,19 +51,20 @@ Now you can search for your bank institution. Select it and follow the steps to
|
||||
web browser doesn't block pop-ups and that your ad-blocker is disabled.
|
||||
|
||||
.. important::
|
||||
When choosing the date for the first bank statement synchronization, pick the date when you
|
||||
start recording accounting transaction on your Odoo accounting database. For example, if you
|
||||
import your closing balance in Odoo on the 31/12/2022 and you start recording accounting
|
||||
transactions on the 01/01/2023, your synchronization date should be 01/01/2023.
|
||||
When setting up the bank statement synchronization, Odoo automatically starts recording the
|
||||
accounting transactions from the last transaction’s date +1 day (if the last transaction day is
|
||||
31/12/2022, the recording starts on 01/01/2023). If the journal contains no transaction, Odoo
|
||||
retrieves transactions as far back as possible. You can limit how far back Odoo retrieves
|
||||
transactions by opening the Accounting app, going to :menuselection:`Accounting --> Lock Dates`,
|
||||
and setting a date in the :guilabel:`Journal Entries Lock Date` field.
|
||||
|
||||
You must provide a phone number during your first synchronization to secure your account. We ask for
|
||||
such information because we don't want your data falling into the wrong hands. Therefore, if we
|
||||
detect suspicious activities on your account, we block all requests coming from your account, and
|
||||
you need to reactivate it using that phone number.
|
||||
|
||||
The third-party provider may request more information in order to connect with your
|
||||
bank institution.
|
||||
This information is not stored on Odoo's servers.
|
||||
The third-party provider may request more information in order to connect with your bank
|
||||
institution. This information is not stored on Odoo's servers.
|
||||
|
||||
By default, transactions fetched from an online source are grouped inside the same statement, and
|
||||
one bank statement is created per month. You can change the bank statement creation periodicity
|
||||
|
||||
@@ -2,94 +2,138 @@
|
||||
Bank reconciliation
|
||||
===================
|
||||
|
||||
Overview
|
||||
========
|
||||
**Bank reconciliation** is the process of matching your :doc:`bank transactions <transactions>` with
|
||||
your business records, such as :doc:`customer invoices <../customer_invoices>`, :doc:`vendor bills
|
||||
<../vendor_bills>`, and :doc:`payments <../payments>`. Not only is this compulsory for most
|
||||
businesses, but it also offers several benefits, such as reduced risk of errors in financial
|
||||
reports, detection of fraudulent activities, and improved cash flow management.
|
||||
|
||||
Matching your bank statements with your accounting records can be a tedious task. You need to find the corresponding invoices, compare the amounts and partners' details with those in the bank statement. These steps can take a lot of time. Luckily, with Odoo you can very easily match your invoices or any other payment document with your bank statements.
|
||||
|
||||
Two options of the reconciliation process exist in Odoo.
|
||||
|
||||
1. We can directly specify the payment on the invoice
|
||||
2. We can reconcile open invoices with bank statements
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
No special configuration is necessary to record invoices. All we need
|
||||
to do is to install the accounting app.
|
||||
|
||||
.. image:: reconciliation/use01.png
|
||||
|
||||
Use cases
|
||||
=========
|
||||
|
||||
Case 1: Payments registration
|
||||
-----------------------------
|
||||
|
||||
We received the proof of payment of our invoice in the amount of 2100 euros issued to
|
||||
Smith & Co.
|
||||
|
||||
We start at our issued Invoice of 2100 euros for Smith & Co. Because the
|
||||
sold product is a service we demand an immediate payment. Our accountant
|
||||
only handles bank statements at the end of week, so we have to mark
|
||||
this invoice as paid immediately in order to indicate that we can start rendering services to our
|
||||
customer.
|
||||
|
||||
Our customer send us a payment confirmation. We can thus register a
|
||||
payment and mark the invoice as paid.
|
||||
|
||||
.. image:: reconciliation/use02.png
|
||||
|
||||
By clicking on **register payment,** we are telling Odoo that our
|
||||
customer has paid the Invoice. We thus have to specify the amount and the
|
||||
payment method.
|
||||
|
||||
.. image:: reconciliation/use03.png
|
||||
|
||||
Now we can always find the payment details in the Invoice by clicking on the
|
||||
:menuselection:`Info --> Open Payment`.
|
||||
|
||||
.. image:: reconciliation/use04.png
|
||||
|
||||
The invoice has been paid and **the reconciliation has been done
|
||||
automatically.**
|
||||
|
||||
Case 2: Bank statements reconciliations
|
||||
---------------------------------------
|
||||
|
||||
We start at our issued Invoice of 3000 euros for Smith & Co. Let's also
|
||||
assume that other Invoices are open for different customers.
|
||||
|
||||
.. image:: reconciliation/use05.png
|
||||
|
||||
We receive our bank statement and find that not only the invoice issued to Smith & Co has
|
||||
been paid, but the one to Buzz of 92 euros as well.
|
||||
|
||||
**Import** or **Create** the bank statements. Please refer to the
|
||||
documents from the Bank Feeds section.
|
||||
|
||||
.. image:: reconciliation/use06.png
|
||||
|
||||
On the dashboard, click on **Reconcile # Items**
|
||||
|
||||
.. image:: reconciliation/use07.png
|
||||
|
||||
If everything was right (correct partner name, right amount) odoo will
|
||||
do the reconciliations **automatically**.
|
||||
|
||||
.. image:: reconciliation/use08.png
|
||||
|
||||
If some issues are found, you will need to take **manual actions**.
|
||||
|
||||
For example, if the partner is missing from your bank statement, just
|
||||
fill it in :
|
||||
|
||||
.. image:: reconciliation/use09.png
|
||||
|
||||
If the payment is done with a down payment, just check if it is all
|
||||
right and validate all related payments :
|
||||
|
||||
.. image:: reconciliation/use10.png
|
||||
Thanks to the bank :doc:`reconciliation models <reconciliation_models>`, Odoo pre-selects the
|
||||
matching entries automatically.
|
||||
|
||||
.. seealso::
|
||||
:doc:`bank_synchronization`
|
||||
- `Odoo Tutorials: Bank reconciliation
|
||||
<https://www.odoo.com/slides/slide/bank-reconciliation-2724>`_
|
||||
- :doc:`bank_synchronization`
|
||||
- :doc:`transactions`
|
||||
|
||||
Bank reconciliation view
|
||||
========================
|
||||
|
||||
To access a bank journal's **reconciliation view**, go to your :guilabel:`Accounting Dashboard` and
|
||||
either:
|
||||
|
||||
- click the journal name (e.g., :guilabel:`Bank`) to display all transactions, including those
|
||||
previously reconciled or
|
||||
- click the :guilabel:`Reconcile items` button to display all transactions Odoo pre-selected for
|
||||
reconciliation. You can remove the :guilabel:`Not Matched` filter from the search bar to include
|
||||
previously reconciled transactions.
|
||||
|
||||
.. image:: reconciliation/bank-card.png
|
||||
:alt: Reaching the bank reconciliation tool from your accounting dashboard
|
||||
|
||||
The bank reconciliation view is structured into three distinct sections: transactions, counterpart
|
||||
entries, and resulting entry.
|
||||
|
||||
.. image:: reconciliation/user-interface.png
|
||||
:alt: The user interface of the reconciliation view of a bank journal.
|
||||
|
||||
Transactions
|
||||
The transactions section on the left shows all bank transactions, with the newest displayed
|
||||
first. Click a transaction to select it.
|
||||
|
||||
Counterpart entries
|
||||
The counterpart entries section on the bottom right displays the options to match the selected
|
||||
bank transaction. Multiple tabs are available, including
|
||||
:ref:`reconciliation/existing-entries`, :ref:`reconciliation/batch-payments`,
|
||||
:ref:`reconciliation/manual-operations`, and :guilabel:`Discuss`, which contains the chatter for
|
||||
the selected bank transaction.
|
||||
|
||||
Resulting entry
|
||||
The resulting entry section on the top right displays the selected bank transaction matched with
|
||||
the counterpart entries and includes any remaining debits or credits. In this section, you can
|
||||
validate the reconciliation or mark it as :guilabel:`To Check`. Any :ref:`reconciliation model
|
||||
buttons <reconciliation_models_button>` are also available in the resulting entry section.
|
||||
|
||||
Reconcile transactions
|
||||
======================
|
||||
|
||||
Transactions can be matched automatically with the use of :doc:`reconciliation models
|
||||
<reconciliation_models>`, or they can be matched with :ref:`existing entries
|
||||
<reconciliation/existing-entries>`, :ref:`batch payments <reconciliation/batch-payments>`,
|
||||
:ref:`manual operations <reconciliation/manual-operations>`, and :ref:`reconciliation model buttons
|
||||
<reconciliation_models_button>`.
|
||||
|
||||
#. Select a transaction among unmatched bank transactions.
|
||||
#. Define the counterpart. There are several options for defining a counterpart, including
|
||||
:ref:`matching existing entries <reconciliation/existing-entries>`, :ref:`manual operations
|
||||
<reconciliation/manual-operations>`, :ref:`batch payments <reconciliation/batch-payments>`, and
|
||||
:ref:`reconciliation model buttons <reconciliation_models_button>`.
|
||||
#. If the resulting entry is not fully balanced, balance it by adding another existing counterpart
|
||||
entry or writing it off with a :ref:`manual operation <reconciliation/manual-operations>`.
|
||||
#. Click the :guilabel:`Validate` button to confirm the reconciliation and move to the next
|
||||
transaction.
|
||||
|
||||
.. tip::
|
||||
If you are not sure how to reconcile a particular transaction and would like to deal with it
|
||||
later, use the :guilabel:`To Check` button instead. All transactions marked as :guilabel:`To
|
||||
Check` can be displayed using the :guilabel:`To Check` filter.
|
||||
|
||||
.. note::
|
||||
Bank transactions are posted on the **journal's suspense account** until reconciliation. At this
|
||||
point, reconciliation modifies the transaction journal entry by replacing the bank suspense
|
||||
account with the corresponding receivable, payable, or outstanding account.
|
||||
|
||||
.. _reconciliation/existing-entries:
|
||||
|
||||
Match existing entries
|
||||
----------------------
|
||||
|
||||
This tab contains matching entries Odoo automatically pre-selects according to the reconciliation
|
||||
models. The entry order is based on :ref:`reconciliation models <reconciliation_models_suggestion>`,
|
||||
with suggested entries appearing first.
|
||||
|
||||
.. tip::
|
||||
The search bar within the :guilabel:`Match Existing Entries` tab allows you to search for
|
||||
specific journal items.
|
||||
|
||||
.. _reconciliation/batch-payments:
|
||||
|
||||
Batch payments
|
||||
--------------
|
||||
|
||||
`Batch payments <payments/batch-payments>`_ allow you to group different payments to ease
|
||||
reconciliation. Use the :guilabel:`Batch Payments` tab to find batch payments for customers and
|
||||
vendors. Similarly to the :guilabel:`Match Existing Entries` tab, the :guilabel:`Batch Payments` tab
|
||||
has a search bar that allows you to search for specific batch payments.
|
||||
|
||||
.. _reconciliation/manual-operations:
|
||||
|
||||
Manual operations
|
||||
-----------------
|
||||
|
||||
If there is not an existing entry to match the selected transaction, you may instead wish to
|
||||
reconcile the transaction manually by choosing the correct account and amount. Then, complete any
|
||||
of the relevant optional fields.
|
||||
|
||||
.. tip::
|
||||
You can use the :guilabel:`fully paid` option to reconcile a payment, even in cases where only a
|
||||
partial payment is received. A new line appears in the resulting entry section to reflect the
|
||||
open balance registered on the Account Receivable by default. You can choose another
|
||||
account by clicking on the new line in the resulting entry section and selecting the
|
||||
:guilabel:`Account` to record the open balance.
|
||||
|
||||
.. note::
|
||||
Lines are silently reconciled unless a write-off entry is required, which launches a
|
||||
reconciliation wizard.
|
||||
|
||||
.. image:: reconciliation/fully-paid.png
|
||||
:alt: Click on fully paid to manually set an invoice as entirely paid.
|
||||
|
||||
|
||||
Reconciliation model buttons
|
||||
----------------------------
|
||||
|
||||
Use a :ref:`reconciliation model button <reconciliation_models_button>` for manual operations that
|
||||
are frequently used. These custom buttons allow you to quickly reconcile bank transactions manually
|
||||
and can also be used in combination with existing entries.
|
||||
|
||||
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 67 KiB |
@@ -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
|
||||
|
||||
@@ -5,7 +5,7 @@ Cash discounts and tax reduction
|
||||
**Cash discounts** are reductions in the amount a customer must pay for goods or services offered as
|
||||
an incentive for paying their invoice promptly. These discounts are typically a percentage of the
|
||||
total invoice amount and are applied if the customer pays within a specified time. Cash discounts
|
||||
can help the company maintain a steady cash flow.
|
||||
can help a company maintain a steady cash flow.
|
||||
|
||||
.. example::
|
||||
You issue a €100 invoice on the 1st of January. The full payment is due within 30 days, and you
|
||||
@@ -17,15 +17,46 @@ can help the company maintain a steady cash flow.
|
||||
A :ref:`tax reduction <cash-discounts/tax-reductions>` can also be applied depending on the country
|
||||
or region.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`payment_terms`
|
||||
- :doc:`../payments`
|
||||
|
||||
.. _cash-discounts/configuration:
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
To grant cash discounts to customers, you must first set up the :ref:`type of tax reduction
|
||||
<cash-discounts/tax-reductions>`, verify the :ref:`gain and loss accounts
|
||||
<cash-discounts/gain-loss-accounts>`, and configure new :ref:`payment terms
|
||||
<cash-discounts/payment-terms>`.
|
||||
To grant cash discounts to customers, you must first verify the :ref:`gain and loss accounts
|
||||
<cash-discounts/gain-loss-accounts>`. Then, configure :ref:`payment terms
|
||||
<cash-discounts/payment-terms>` and add a cash discount by checking the :guilabel:`Early Discount`
|
||||
checkbox and filling in the discount percentage, discount days, and :ref:`tax
|
||||
reduction <cash-discounts/tax-reductions>` fields.
|
||||
|
||||
.. _cash-discounts/gain-loss-accounts:
|
||||
|
||||
Cash discount gain/loss accounts
|
||||
--------------------------------
|
||||
|
||||
With a cash discount, the amount you earn depends on whether the customer benefits from the cash
|
||||
discount or not. This inevitably leads to gains and losses, which are recorded on default accounts.
|
||||
|
||||
To modify these accounts, go to :menuselection:`Accounting --> Configuration --> Settings`, and, in
|
||||
the :guilabel:`Default Accounts` section, select the accounts you want to use for the
|
||||
:guilabel:`Cash Discount Gain account` and :guilabel:`Cash Discount Loss account`.
|
||||
|
||||
.. _cash-discounts/payment-terms:
|
||||
|
||||
Payment terms
|
||||
-------------
|
||||
|
||||
Cash discounts are defined on :doc:`payment terms <payment_terms>`. Configure them to your liking by
|
||||
going to :menuselection:`Accounting --> Configuration --> Payment Terms`, and make sure to fill out
|
||||
the discount percentage, discount days, and :ref:`tax reduction <cash-discounts/tax-reductions>`
|
||||
fields.
|
||||
|
||||
.. image:: cash_discounts/payment-terms.png
|
||||
:alt: Configuration of payment terms named "2/7 Net 30". The field "Description on Invoices"
|
||||
reads: "Payment terms: 30 Days, 2% Early Payment Discount under 7 days".
|
||||
|
||||
.. _cash-discounts/tax-reductions:
|
||||
|
||||
@@ -33,24 +64,24 @@ Tax reductions
|
||||
--------------
|
||||
|
||||
Depending on the country or region, the base amount used to compute the tax can vary, which can lead
|
||||
to a **tax reduction**.
|
||||
to a **tax reduction**. Since tax reductions are set on individual payment terms, each term can use
|
||||
a specific tax reduction.
|
||||
|
||||
To configure how the tax reduction is applied, go to :menuselection:`Accounting --> Configuration
|
||||
--> Settings`, and in the :guilabel:`Taxes` section, in the :guilabel:`Cash Discount Tax Reduction`
|
||||
feature, select one of the three following options:
|
||||
To configure how the tax reduction is applied, go to a payment term with the :guilabel:`Early
|
||||
Discount` checkbox enabled, and select one of the three following options:
|
||||
|
||||
Always (upon invoice)
|
||||
The tax is always reduced. The base amount used to compute the tax is the discounted amount,
|
||||
whether the customer benefits from the discount or not.
|
||||
- Always (upon invoice)
|
||||
The tax is always reduced. The base amount used to compute the tax is the discounted amount,
|
||||
whether the customer benefits from the discount or not.
|
||||
|
||||
On early payment
|
||||
The tax is reduced only if the customer pays early. The base amount used to compute the tax is the
|
||||
same as the sale: if the customer benefits from the reduction, then the tax is reduced. This means
|
||||
that, depending on the customer, the tax amount can vary after the invoice is issued.
|
||||
- On early payment
|
||||
The tax is reduced only if the customer pays early. The base amount used to compute the tax is the
|
||||
same as the sale: if the customer benefits from the reduction, then the tax is reduced. This means
|
||||
that, depending on the customer, the tax amount can vary after the invoice is issued.
|
||||
|
||||
Never
|
||||
The tax is never reduced. The base amount used to compute the tax is the full amount, whether the
|
||||
customer benefits from the discount or not.
|
||||
- Never
|
||||
The tax is never reduced. The base amount used to compute the tax is the full amount, whether the
|
||||
customer benefits from the discount or not.
|
||||
|
||||
.. example::
|
||||
|
||||
@@ -70,10 +101,10 @@ Never
|
||||
- Computation
|
||||
* - 8th of January
|
||||
- €118.58
|
||||
- (€98 + (21% of €98))
|
||||
- €98 + (21% of €98)
|
||||
* - 31st of January
|
||||
- €120.58
|
||||
- (€100 + (21% of €98))
|
||||
- €100 + (21% of €98)
|
||||
|
||||
.. tab:: On early payment
|
||||
|
||||
@@ -85,10 +116,10 @@ Never
|
||||
- Computation
|
||||
* - 8th of January
|
||||
- €118.58
|
||||
- (€98 + (21% of €98))
|
||||
- €98 + (21% of €98)
|
||||
* - 31st of January
|
||||
- €121.00
|
||||
- (€100 + (21% of €100))
|
||||
- €100 + (21% of €100)
|
||||
|
||||
.. tab:: Never
|
||||
|
||||
@@ -100,10 +131,10 @@ Never
|
||||
- Computation
|
||||
* - 8th of January
|
||||
- €119.00
|
||||
- (€98 + (21% of €100))
|
||||
- €98 + (21% of €100)
|
||||
* - 31st of January
|
||||
- €121.00
|
||||
- (€100 + (21% of €100))
|
||||
- €100 + (21% of €100)
|
||||
|
||||
.. note::
|
||||
- :ref:`Tax grids <tax-returns/tax-grids>`, which are used for the tax report, are correctly
|
||||
@@ -112,41 +143,12 @@ Never
|
||||
- The **type of cash discount tax reduction** may be correctly pre-configured, depending on your
|
||||
:ref:`fiscal localization package <fiscal_localizations/packages>`.
|
||||
|
||||
.. _cash-discounts/gain-loss-accounts:
|
||||
|
||||
Cash discount gain/loss accounts
|
||||
--------------------------------
|
||||
|
||||
With a cash discount, the amount you earn depends on whether the customer benefits from the cash
|
||||
discount or not. This inevitably leads to gains and losses, which are recorded on default accounts.
|
||||
|
||||
To modify these accounts, go to :menuselection:`Accounting --> Configuration --> Settings`, and in
|
||||
the :guilabel:`Default Accounts` section, select the accounts you want to use for the
|
||||
:guilabel:`Cash Discount Gain account` and :guilabel:`Cash Discount Loss account`.
|
||||
|
||||
.. _cash-discounts/payment-terms:
|
||||
|
||||
Payment terms
|
||||
-------------
|
||||
|
||||
Cash discounts are defined on :doc:`payment terms <payment_terms>`. Configure them to your liking by
|
||||
going to :menuselection:`Accounting --> Configuration --> Payment Terms`, and make sure to fill out
|
||||
the fields :guilabel:`Discount %` and :guilabel:`Discount Days`.
|
||||
|
||||
.. image:: cash_discounts/payment-terms.png
|
||||
:align: center
|
||||
:alt: Configuration of payment terms named "2/7 Net 30". The field "Description on Invoices"
|
||||
reads: "Payment terms: 30 Days, 2% Early Payment Discount under 7 days".
|
||||
|
||||
.. seealso::
|
||||
:doc:`payment_terms`
|
||||
|
||||
.. _cash-discounts/customer-invoice:
|
||||
|
||||
Apply a cash discount to a customer invoice
|
||||
===========================================
|
||||
|
||||
Apply a cash discount to a customer invoice by selecting the :ref:`payment terms you created
|
||||
On a customer invoice, apply a cash discount by selecting the :ref:`payment terms you created
|
||||
<cash-discounts/payment-terms>`. Odoo automatically computes the correct amounts, tax amounts, due
|
||||
dates, and accounting records.
|
||||
|
||||
@@ -154,26 +156,23 @@ Under the :guilabel:`Journal Items` tab, you can display the discount details by
|
||||
"toggle" button and adding the :guilabel:`Discount Date` and :guilabel:`Discount Amount` columns.
|
||||
|
||||
.. image:: cash_discounts/invoice-journal-entry.png
|
||||
:align: center
|
||||
:alt: An invoice of €100.00 with "2/7 Net 30" selected as payment terms. The "Journal Items" tab
|
||||
is open, and the "Discount Date" and "Discount Amount" columns are displayed.
|
||||
|
||||
The discount amount and due date are also displayed on the generated invoice sent to the customer.
|
||||
The discount amount and due date are also displayed on the generated invoice report sent to the
|
||||
customer if the :guilabel:`Show installment dates` option is checked on the payment terms.
|
||||
|
||||
.. image:: cash_discounts/invoice-print.png
|
||||
:align: center
|
||||
:alt: An invoice of €100.00 with the following text added to the terms and conditions: "30 Days,
|
||||
2% Early Payment Discount under 7 days. 118.58 € due if paid before 01/08/2023."
|
||||
:alt: An invoice of €100.00 with the following text added to the terms and conditions: "30
|
||||
Days, 2% Early Payment Discount under 7 days. 118.58 € due if paid before 01/08/2023."
|
||||
|
||||
Payment reconciliation
|
||||
----------------------
|
||||
|
||||
When you record a payment or reconcile your bank statements, Odoo takes the customer payment's date
|
||||
into account to define if they can benefit from the cash discount or not.
|
||||
When you record a :doc:`payment <../payments>` or :doc:`reconcile your bank transactions
|
||||
<../bank/reconciliation>`, Odoo takes the customer payment's date into account to determine if the
|
||||
customer can benefit from the cash discount or not.
|
||||
|
||||
.. note::
|
||||
If your customer pays the discount amount *after* the discount date, you can always decide
|
||||
whether to mark the invoice as fully paid with a write-off or as partially paid.
|
||||
|
||||
.. seealso::
|
||||
:doc:`../payments`
|
||||
If your customer pays the discount amount *after* the discount date, you can always decide to
|
||||
mark the invoice as fully paid with a write-off or as partially paid.
|
||||
|
||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 16 KiB |
@@ -2,102 +2,117 @@
|
||||
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. Don’t 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 Note’s form
|
||||
works the same way as the Invoice’s 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:`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:`Cog icon (⚙) --> Debit Note`, fill in the information, and click
|
||||
:guilabel:`Create Debit Note`.
|
||||
|
||||
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:`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:`Cog icon (⚙) --> 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 invoice’s journal entry:
|
||||
|
||||
.. image:: credit_notes/credit_notes03.png
|
||||
:align: center
|
||||
.. example::
|
||||
The journal invoice of an entry:
|
||||
|
||||
And here is the credit note’s 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 note’s 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.
|
||||
|
||||
|
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.
|
||||
@@ -72,33 +72,6 @@ You can define a specific e-invoicing format for each customer. To do so, go to
|
||||
.. image:: electronic_invoicing/customer-form.png
|
||||
:alt: Select an EDI format for a specific customer
|
||||
|
||||
Peppol formats
|
||||
--------------
|
||||
|
||||
Use the fields :guilabel:`Peppol e-address (EAS)` and :guilabel:`Peppol Endpoint` to identify the
|
||||
recipient in the Peppol Network.
|
||||
|
||||
.. seealso::
|
||||
`Peppol BIS Billing 3.0 - Electronic Address Scheme (EAS) code list
|
||||
<https://docs.peppol.eu/poacc/billing/3.0/codelist/eas/>`_
|
||||
|
||||
.. example::
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
|
||||
* - Partner's country
|
||||
- Peppol e-address (EAS)
|
||||
- Peppol Endpoint
|
||||
* - Luxembourg
|
||||
- 9938 - Luxemburg VAT number
|
||||
- a valid Luxemburgish VAT number
|
||||
* - Netherlands
|
||||
- 0190 - Dutch Originator's Identification Number
|
||||
- a valid OIN number
|
||||
* - Belgium
|
||||
- 9925 - Belgium VAT number
|
||||
- a valid Belgian VAT number
|
||||
|
||||
National electronic invoicing
|
||||
-----------------------------
|
||||
|
||||
@@ -121,3 +94,45 @@ e-invoicing option to generate and attach the e-invoice file.
|
||||
|
||||
.. image:: electronic_invoicing/send-window.png
|
||||
:alt: The Peppol option is checked and an e-invoicing XML file is attached to the email.
|
||||
|
||||
Peppol
|
||||
======
|
||||
|
||||
The `Peppol <https://peppol.org/about/>`_ network ensures the exchange of documents and information
|
||||
between enterprises and governmental authorities. It is primarily used for electronic invoicing, and
|
||||
its access points (connectors to the Peppol network) allow enterprises to exchange electronic
|
||||
documents.
|
||||
Odoo is now an **access point** enabling electronic invoicing transactions without the need to send
|
||||
invoices and bills by email or post.
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
First, :ref:`install <general/install>` the :guilabel:`Peppol` module (`account_peppol`).
|
||||
|
||||
.. image:: electronic_invoicing/peppol-module.png
|
||||
:alt: Peppol module install
|
||||
|
||||
Then, go to :menuselection:`Accounting --> Configuration --> Settings`, tick the
|
||||
:guilabel:`Use PEPPOL Invoicing`, and fill in the following information:
|
||||
|
||||
- `PEPPOL EAS <https://ec.europa.eu/digital-building-blocks/wikis/display/DIGITAL/Code+lists/>`_
|
||||
- :guilabel:`Peppol Endpoint`
|
||||
- :guilabel:`Phone Number`, including the country code (e.g., `+32` in Belgium)
|
||||
- :guilabel:`Primary contact email`
|
||||
|
||||
If you are migrating from another access point, insert the :guilabel:`Migration key` from
|
||||
the previous provider.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-settings.png
|
||||
:alt: Configuration for peppol
|
||||
|
||||
Finally, click on :guilabel:`Validate registration`.
|
||||
|
||||
A text message containing a code is sent to the phone number provided to finalize the registration
|
||||
process.
|
||||
|
||||
.. image:: electronic_invoicing/phone-registration.png
|
||||
:alt: phone validation
|
||||
|
||||
All invoices and vendor bills are now sent directly using the Peppol network.
|
||||
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
@@ -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,139 @@
|
||||
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 both
|
||||
internally and on sales orders.
|
||||
#. Tick the :guilabel:`Early Discount` checkbox and fill out the discount percentage, discount days,
|
||||
and :ref:`tax reduction <cash-discounts/tax-reductions>` fields to add a :doc:`cash discount
|
||||
<cash_discounts>`, if desired.
|
||||
#. In the :guilabel:`Due 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 the discount's value and type in the
|
||||
:guilabel:`Due` fields, then fill out the :guilabel:`After` fields to determine the due date.
|
||||
#. Enter the text to be displayed on the document (sales order, invoice, etc.) in the gray textbox
|
||||
in the :guilabel:`Preview` column.
|
||||
#. Tick the :guilabel:`Show installment dates` checkbox to display a breakdown of each payment and
|
||||
its due date on the invoice report, if desired.
|
||||
|
||||
.. 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:`After` field.
|
||||
|
||||
Payment Terms can be defined with the **Payment Terms** field on:
|
||||
To test that your payment terms are configured correctly, enter an invoice date on the
|
||||
:guilabel:`Example` line 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 contact’s *Form View*, under the *Sales & Purchase* tab.
|
||||
.. important::
|
||||
Terms are computed in the order of their due dates.
|
||||
|
||||
Journal Entries
|
||||
.. example::
|
||||
In the following example, 30% is due on the day of issuance, and the remaining 70% is due at the
|
||||
end of the following month.
|
||||
|
||||
.. image:: payment_terms/configuration.png
|
||||
:alt: Example of Payment Terms. The first line is the 30% due immediately. The second line is
|
||||
the remaining 70% due at the end 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 remaining 70% 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.
|
||||
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 5.0 KiB |
|
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
|
||||
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 12 KiB |
@@ -187,7 +187,8 @@ Send yourself a sample invoice by email to make sure everything is correctly con
|
||||
* :doc:`get_started/chart_of_accounts`
|
||||
* :doc:`bank/bank_synchronization`
|
||||
* :doc:`../fiscal_localizations`
|
||||
* `Odoo Tutorials: Accounting Basics <https://www.odoo.com/r/lsZ>`_
|
||||
* `Odoo Tutorials: Accounting and Invoicing - Getting started [video]
|
||||
<https://www.odoo.com/slides/slide/getting-started-1692>`_
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
@@ -1,167 +1,440 @@
|
||||
=================================
|
||||
Inventory average price valuation
|
||||
=================================
|
||||
===============================
|
||||
Average price on returned goods
|
||||
===============================
|
||||
|
||||
As stated in the :doc:`inventory valuation page
|
||||
</applications/inventory_and_mrp/inventory/management/reporting/inventory_valuation_config>`,
|
||||
one of the possible costing method you can use in perpetual stock
|
||||
valuation, is the average cost.
|
||||
.. |AVCO| replace:: :abbr:`AVCO (Average Cost Valuation)`
|
||||
|
||||
This document answers to one recurrent question for companies using that
|
||||
method to make their stock valuation: how does a shipping returned to
|
||||
its supplier impact the average cost and the accounting entries? This
|
||||
document is **only** for the specific use case of a perpetual valuation (as
|
||||
opposed to the periodic one) and in average price costing method (as
|
||||
opposed to standard of FIFO).
|
||||
.. _inventory/avg_cost/definition:
|
||||
|
||||
Definition of average cost
|
||||
==========================
|
||||
*Average cost valuation* (AVCO) is an inventory valuation method that evaluates cost based on the
|
||||
total cost of goods bought or produced during a period, divided by the total number of items
|
||||
on-hand. Inventory valuation is used to:
|
||||
|
||||
The average cost method calculates the cost of ending inventory and cost
|
||||
of goods sold on the basis of weighted average cost per unit of
|
||||
inventory.
|
||||
- reflect the value of a company's assets;
|
||||
- keep track of the amount of unsold goods;
|
||||
- account for monetary value in goods that have yet to generate profit;
|
||||
- report on flow of goods throughout the quarter.
|
||||
|
||||
The weighted average cost per unit is calculated using the following
|
||||
formula:
|
||||
Because |AVCO| uses the weighted average to evaluate the cost, it is a good fit for companies that
|
||||
sell only a few different products in large quantities. In Odoo, this costing analysis is
|
||||
*automatically updated* each time products are received.
|
||||
|
||||
- When new products arrive in a warehouse, the new average cost is
|
||||
recomputed as:
|
||||
Thus, when shipments are returned to their supplier, Odoo automatically generates accounting entries
|
||||
to reflect the change in inventory valuation. However, Odoo does **not** automatically update the
|
||||
|AVCO| calculation, because :ref:`this can potentially create inconsistencies with inventory
|
||||
valuation <inventory/avg_price/leaving_inventory>`.
|
||||
|
||||
.. image:: avg_price_valuation/avg01.png
|
||||
.. note::
|
||||
This document addresses a specific use case for theoretical purposes. Navigate :ref:`here
|
||||
<inventory/management/inventory_valuation_config>` for instructions on how to set up and use
|
||||
|AVCO| in Odoo.
|
||||
|
||||
.. seealso::
|
||||
- :ref:`Using inventory valuation <inventory/reporting/using_inventory_val>`
|
||||
- :ref:`Other inventory valuation methods <inventory/inventory_valuation_config/costing_methods>`
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
To use average cost inventory valuation on a product, navigate to :menuselection:`Inventory -->
|
||||
Configuration --> Product Categories` and select the category that will be using |AVCO|. On the
|
||||
product category page, set :guilabel:`Costing Method` to `Average Cost (AVCO)` and
|
||||
:guilabel:`Inventory Valuation` to `Automated`.
|
||||
|
||||
.. seealso::
|
||||
:ref:`Inventory valuation configuration <inventory/management/inventory_valuation_config>`
|
||||
|
||||
Using average cost valuation
|
||||
============================
|
||||
|
||||
The average cost method adjusts the inventory valuation when products are received in the warehouse.
|
||||
This section explains how it works, but if the explanation is unnecessary, skip to the :ref:`return
|
||||
to supplier use case <inventory/avg_cost/return>` section.
|
||||
|
||||
.. _inventory/avg_cost/formula:
|
||||
|
||||
Formula
|
||||
-------
|
||||
|
||||
When new products arrive, the new average cost for each product is recomputed using the formula:
|
||||
|
||||
.. math::
|
||||
Avg~Cost = \frac{(Old~Qty \times Old~Avg~Cost) + (Incoming~Qty \times Purchase~Price)}{Final~Qty}
|
||||
|
||||
- **Old Qty**: product count in stock before receiving the new shipment;
|
||||
- **Old Avg Cost**: calculated average cost for a single product from the previous inventory
|
||||
valuation;
|
||||
- **Incoming Qty**: count of products arriving in the new shipment;
|
||||
- **Purchase Price**: estimated price of products at the reception of products (since vendor bills
|
||||
may arrive later). The amount includes not only the price for the products, but also added costs,
|
||||
such as shipping, taxes, and :ref:`landed costs <inventory/reporting/landed_costs>`. At reception
|
||||
of the vendor bill, this price is adjusted;
|
||||
- **Final Qty**: quantity of on-hand stock after the stock move.
|
||||
|
||||
.. _inventory/avg_cost/definite_rule:
|
||||
|
||||
.. important::
|
||||
When products leave the warehouse, the average cost **does not** change. Read about why the
|
||||
average cost valuation is **not** adjusted :ref:`here <inventory/avg_price/leaving_inventory>`.
|
||||
|
||||
.. _inventory/avg_cost/math_table:
|
||||
|
||||
Compute average cost
|
||||
--------------------
|
||||
|
||||
To understand how the average cost of a product changes with each shipment, consider the following
|
||||
table of warehouse operations and stock moves. Each is a different example of how the average cost
|
||||
valuation is affected.
|
||||
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Operation | Incoming Value| Inventory Value | Qty On Hand | Avg Cost |
|
||||
+================================+===============+===================+===============+============+
|
||||
| | | $0 | 0 | $0 |
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Receive 8 tables at $10/unit | 8 * $10 | $80 | 8 | $10 |
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Receive 4 tables at $16/unit | 4 * $16 | $144 | 12 | $12 |
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Deliver 10 tables | -10 * $12 | $24 | 2 | $12 |
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
|
||||
.. _inventory/avg_cost/ex-1:
|
||||
|
||||
.. exercise::
|
||||
Ensure comprehension of the above computations by reviewing the "Receive 8 tables at $10/unit"
|
||||
example.
|
||||
|
||||
Initially, the product stock is 0, so all values are $0.
|
||||
|
||||
In the first warehouse operation, `8` tables are received at `$10` each. The average cost is
|
||||
calculated using the :ref:`formula <inventory/avg_cost/formula>`:
|
||||
|
||||
.. math::
|
||||
Avg~Cost = \frac{0 + 8 \times $10}{8} = \frac{$80}{8} = $10
|
||||
|
||||
- Since the *incoming quantity* of tables is `8` and the *purchase price* for each is `$10`,
|
||||
- The inventory value in the numerator is evaluated to `$80`;
|
||||
- `$80` is divided by the total amount of tables to store, `8`;
|
||||
- `$10` is the average cost of a single table from the first shipment.
|
||||
|
||||
To verify this in Odoo, in the *Purchase* app, order `8` quantities of a new product, `Table`,
|
||||
with no previous stock moves, for `$10` each.
|
||||
|
||||
In the table's :guilabel:`Product Category` field in the :guilabel:`General Information` tab of
|
||||
the product form, click the :guilabel:`➡️ (arrow)` icon, to open an :guilabel:`External Link` to
|
||||
edit the product category. Set the :guilabel:`Costing Method` to `Average Cost (AVCO)` and
|
||||
:guilabel:`Inventory Valuation` to `Automated`.
|
||||
|
||||
Then, return to the purchase order. Click :guilabel:`Confirm Order`, and click :guilabel:`Receive
|
||||
Products` to confirm receipt.
|
||||
|
||||
Next, check the inventory valuation record generated by the product reception by navigating to
|
||||
:menuselection:`Inventory --> Reporting --> Inventory Valuation`. Select the drop-down for
|
||||
`Table`, and view the :guilabel:`Total Value` column for the *valuation layer* (:dfn:`inventory
|
||||
valuation at a specific point in time = on-hand quantity * unit price`). The 8 tables in-stock
|
||||
are worth $80.
|
||||
|
||||
.. image:: avg_price_valuation/inventory-val-8-tables.png
|
||||
:align: center
|
||||
:alt: Show inventory valuation of 8 tables in Odoo.
|
||||
|
||||
.. tip::
|
||||
When the product category's :guilabel:`Costing Method` is set to :guilabel:`AVCO`, then the
|
||||
average cost of a product is also displayed on the :guilabel:`Cost` field, under the
|
||||
:guilabel:`General Information` tab, on the product page itself.
|
||||
|
||||
Product delivery (use case)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
For outgoing shipments, :ref:`outbound products have no effect on the average cost valuation
|
||||
<inventory/avg_cost/definite_rule>`. Although the average cost valuation is not recalculated, the
|
||||
inventory value still decreases because the product is removed from stock and delivered to the
|
||||
customer location.
|
||||
|
||||
.. exercise::
|
||||
To demonstrate that the average cost valuation is not recalculated, examine the "Deliver 10
|
||||
tables" example.
|
||||
|
||||
.. math::
|
||||
Avg~Cost = \frac{12 \times $12 + (-10) \times $12}{12-10} = \frac{24}{2} = $12
|
||||
|
||||
#. Because 10 tables are being sent out to customers, the *incoming quantity* is `-10`. The
|
||||
previous average cost (`$12`) is used in lieu of a vendor's *purchase price*;
|
||||
#. The *incoming inventory value* is `-10 * $12 = -$120`;
|
||||
#. The old *inventory value* (`$144`) is added to the *incoming inventory value* (`-$120`), so
|
||||
`$144 + -$120 = $24`;
|
||||
#. Only `2` tables remain after shipping out `10` tables from `12`. So the current *inventory
|
||||
value* (`$24`) is divided by the on-hand quantity (`2`);
|
||||
#. `$24 / 2 = $12`, which is the same average cost as the previous operation.
|
||||
|
||||
To verify this in Odoo, sell `10` tables in the *Sales* app, validate the delivery, and then
|
||||
review the inventory valuation record by going to in :menuselection:`Inventory --> Reporting -->
|
||||
Inventory Valuation`. In the topmost valuation layer, delivering `10` tables reduces the
|
||||
product's value by `-$120`.
|
||||
|
||||
**Note**: What is not represented in this stock valuation record is the revenue made from this
|
||||
sale, so this decrease is not a loss to the company.
|
||||
|
||||
.. image:: avg_price_valuation/inventory-val-send-10-tables.png
|
||||
:align: center
|
||||
:alt: Show how deliveries decrease inventory valuation.
|
||||
|
||||
.. _inventory/avg_cost/return:
|
||||
|
||||
Return items to supplier (use case)
|
||||
===================================
|
||||
|
||||
Because the price paid to suppliers can differ from the price the product is valued at with the
|
||||
|AVCO| method, Odoo handles returned items in a specific way.
|
||||
|
||||
#. Products are returned to suppliers at the original purchase price, but;
|
||||
#. The internal cost valuation remains unchanged.
|
||||
|
||||
The above :ref:`example table <inventory/avg_cost/math_table>` is updated as follows:
|
||||
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Operation | Qty*Avg Cost | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+================================+===============+===================+===============+============+
|
||||
| | | $24 | 2 | $12 |
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Return 1 table bought at $10 | -1 * $12 | $12 | 1 | $12 |
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
|
||||
In other words, returns to vendors are perceived by Odoo as another form of a product exiting the
|
||||
warehouse. To Odoo, because the table is valued at $12 per unit, the inventory value is reduced by
|
||||
`$12` when the product is returned; the initial purchase price of `$10` is unrelated to the table's
|
||||
average cost.
|
||||
|
||||
.. example::
|
||||
To return a single table that was purchased for `$10`, navigate to the receipt in the *Inventory*
|
||||
app for the :ref:`8 tables purchased in Exercise 1 <inventory/avg_cost/ex-1>` by going to the
|
||||
:guilabel:`Inventory Overview`, clicking on :guilabel:`Receipts`, and selecting the desired
|
||||
receipt.
|
||||
|
||||
Then, click :guilabel:`Return` on the validated delivery order, and modify the quantity to `1` in
|
||||
the reverse transfer window. This creates an outgoing shipment for the table. Select
|
||||
:guilabel:`Validate` to confirm the outgoing shipment.
|
||||
|
||||
Return to :menuselection:`Inventory --> Reporting --> Inventory Valuation` to see how the
|
||||
outgoing shipment decreases the inventory value by $12.
|
||||
|
||||
.. image:: avg_price_valuation/inventory-valuation-return.png
|
||||
:align: center
|
||||
:alt: Inventory valuation for return.
|
||||
|
||||
.. _inventory/avg_price/leaving_inventory:
|
||||
|
||||
Eliminate stock valuation errors in outgoing products
|
||||
-----------------------------------------------------
|
||||
|
||||
Inconsistencies can occur in a company's inventory when the average cost valuation is recalculated
|
||||
on outgoing shipments.
|
||||
|
||||
To demonstrate this error, the table below displays a scenario in which 1 table is shipped to a
|
||||
customer and another is returned to a supplier at the purchased price.
|
||||
|
||||
+------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Operation | Qty*Price | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+==========================================+===============+===================+===============+============+
|
||||
| | | $24 | 2 | $12 |
|
||||
+------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Ship 1 product to customer | -1 \* $12 | $12 | 1 | $12 |
|
||||
+------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Return 1 product initially bought at $10 | -1 \* $10 | **$2** | **0** | $12 |
|
||||
+------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
|
||||
In the final operation above, the final inventory valuation for the table is `$2` even though there
|
||||
are `0` tables left in stock.
|
||||
|
||||
.. admonition:: Correct method
|
||||
|
||||
Use the average cost to value the return. This does not mean the company gets $12 back for a $10
|
||||
purchase; the item returned for $10 is valued internally at $12. The inventory value change
|
||||
represents a product worth $12 no longer being accounted for in company assets.
|
||||
|
||||
Anglo-Saxon accounting
|
||||
======================
|
||||
|
||||
In addition to using |AVCO|, companies that use **Anglo-Saxon accounting** also keep a holding
|
||||
account that tracks the amount to be paid to vendors. Once a vendor delivers an order, **inventory
|
||||
value** increases based on the vendor price of the products that have entered the stock. The holding
|
||||
account (called **stock input**) is credited and only reconciled once the vendor bill is received.
|
||||
|
||||
.. seealso::
|
||||
- :ref:`Anglo-Saxon vs. Continental <inventory/inventory_valuation_config/accounting>`
|
||||
|
||||
The table below reflects journal entries and accounts. The *stock input* account stores the money
|
||||
intended to pay vendors when the vendor bill has not yet been received. To balance accounts when
|
||||
returning products that have a price difference between the price the product is **valued at** and
|
||||
the price it was bought for, a *price difference* account is created.
|
||||
|
||||
.. _inventory/avg_price/price-table:
|
||||
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Operation | Stock Input | Price Diff | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+=========================================+===============+==============+===================+===============+============+
|
||||
| | | | $0 | 0 | $0 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive 8 tables at $10 | ($80) | | $80 | 8 | $10 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive vendor bill $80 | $0 | | $80 | 8 | $10 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive 4 tables at $16 | ($64) | | $144 | 12 | $12 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive vendor bill $64 | $0 | | $144 | 12 | $12 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Deliver 10 tables to customer | $0 | | $24 | 2 | $12 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Return 1 table initially bought at $10 | **$10** | **$2** | **$12** | 1 | $12 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive vendor refund $10 | $0 | $2 | $12 | 1 | $12 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
|
||||
Product reception
|
||||
-----------------
|
||||
|
||||
Summary
|
||||
~~~~~~~
|
||||
|
||||
At product reception, Odoo ensures companies can pay for goods that were purchased by preemptively
|
||||
moving an amount matching the price of received goods into the :doc:`liability account
|
||||
</applications/finance/accounting/get_started/cheat_sheet>`, **Stock Input**. Then, once the bill
|
||||
has been received, the amount in the holding account is transferred to *Accounts Payable*. Transfers
|
||||
into this account means the bill has been paid. **Stock Input** is reconciled once the vendor bill
|
||||
is received.
|
||||
|
||||
Inventory valuation is a method of calculating how much each in-stock product is worth internally.
|
||||
Since there is a difference between the price the product is **valuated at** and the price the
|
||||
product was actually **purchased for**, the **Inventory Valuation** account is unrelated to the
|
||||
crediting and debiting operations of the **Stock Input** account.
|
||||
|
||||
To conceptualize all this, follow the breakdown below.
|
||||
|
||||
Accounts balanced at received products
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In this example, a company starts with zero units of a product, `table`, in stock. Then, 8 tables
|
||||
are received from the vendor:
|
||||
|
||||
#. The **Stock Input** account stores `$80` of credit owed to the vendor. The amount in this account
|
||||
is unrelated to the inventory value.
|
||||
#. `$80` worth of tables came **in** (**debit** the *Inventory Value* account `$80`), and
|
||||
#. `$80` must be paid **out** for received goods (**credit** the *Stock Input* account `$80`).
|
||||
|
||||
In Odoo
|
||||
*******
|
||||
|
||||
Odoo generates an accounting journal entry when shipments that use |AVCO| costing method are
|
||||
received. Configure a :guilabel:`Price Difference Account` by selecting the :guilabel:`➡️ (arrow)`
|
||||
icon next to the :guilabel:`Product Category` field on the product page.
|
||||
|
||||
Under :guilabel:`Account Properties`, create a new :guilabel:`Price Difference Account` by typing in
|
||||
the name of the account and clicking :guilabel:`Create and Edit`. Then set the account
|
||||
:guilabel:`Type` as `Expenses`, and click :guilabel:`Save`.
|
||||
|
||||
.. image:: avg_price_valuation/create-price-difference.png
|
||||
:align: center
|
||||
:alt: Create price difference account.
|
||||
|
||||
- When products leave the warehouse: the average cost **does not** change
|
||||
Then, receive the shipment in the *Purchase* app or *Inventory* app, and navigate to the
|
||||
:menuselection:`Accounting app --> Accounting --> Journal Entries`. In the list, find the
|
||||
:guilabel:`Reference` that matches the warehouse reception operation for the relevant product.
|
||||
|
||||
Defining the purchase price
|
||||
---------------------------
|
||||
.. image:: avg_price_valuation/search-for-entry-of-tables.png
|
||||
:align: center
|
||||
:alt: Show accounting entry of 8 tables from the list.
|
||||
|
||||
The purchase price is estimated at the reception of the products (you
|
||||
might not have received the vendor bill yet) and reevaluated at the
|
||||
reception of the vendor bill. The purchase price includes the cost you
|
||||
pay for the products, but it may also includes additional costs, like
|
||||
landed costs.
|
||||
Click on the line for 8 tables. This accounting journal entry shows that when the 8 tables were
|
||||
received, the `Stock Valuation` account increased by `$80`. Conversely, the **Stock Input** account
|
||||
(set as `Stock Interim (Received)` account by default) is credited `$80`.
|
||||
|
||||
Average cost example
|
||||
====================
|
||||
.. image:: avg_price_valuation/accounting-entry-8-tables.png
|
||||
:align: center
|
||||
:alt: Debit stock valuation and credit stock input 80 dollars.
|
||||
|
||||
+-----------------------------+---------------+-------------------+---------------+------------+
|
||||
| Operation | Delta Value | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+=============================+===============+===================+===============+============+
|
||||
| | | $0 | 0 | $0 |
|
||||
+-----------------------------+---------------+-------------------+---------------+------------+
|
||||
| Receive 8 Products at $10 | +8\*$10 | $80 | 8 | $10 |
|
||||
+-----------------------------+---------------+-------------------+---------------+------------+
|
||||
| Receive 4 Products at $16 | +4\*$16 | $144 | 12 | $12 |
|
||||
+-----------------------------+---------------+-------------------+---------------+------------+
|
||||
| Deliver 10 Products | -10\*$12 | $24 | 2 | $12 |
|
||||
+-----------------------------+---------------+-------------------+---------------+------------+
|
||||
+-----------------------------+---------------+-------------------+---------------+------------+
|
||||
Accounts balanced at received vendor bill
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
At the beginning, the Avg Cost is set to 0 set as there is no product in
|
||||
the inventory. When the first reception is made, the average cost
|
||||
becomes logically the purchase price.
|
||||
In this example, a company starts with zero units of a product, table, in stock. Then, 8 tables are
|
||||
received from the vendor. When the bill is received from vendor for 8 tables:
|
||||
|
||||
At the second reception, the average cost is updated because the total
|
||||
inventory value is now ``$80 + 4*$16 = $144``. As we have 12 units on
|
||||
hand, the average price per unit is ``$144 / 12 = $12``.
|
||||
#. Use `$80` in the **Stock Input** account to pay the bill. This cancels out and the account now
|
||||
holds `$0`.
|
||||
#. Debit **Stock Input** `$80` (to reconcile this account).
|
||||
#. Credit **Accounts payable** `$80`. This account stores the amount the company owes others, so
|
||||
accountants use the amount to write checks to vendors.
|
||||
|
||||
By definition, the delivery of 10 products does not change the average
|
||||
cost. Indeed, the inventory value is now $24 as we have only 2 units
|
||||
remaining of each ``$24 / 2 = $12``.
|
||||
In Odoo
|
||||
*******
|
||||
|
||||
Purchase return use case
|
||||
========================
|
||||
Once the vendor requests payment, navigate to the :menuselection:`Purchase app --> Orders -->
|
||||
Purchase` and select the :abbr:`PO (Purchase Order)` for 8 tables. Inside the :abbr:`PO (Purchase
|
||||
Order)`, select :guilabel:`Create Bill`.
|
||||
|
||||
In case of a product returned to its supplier after reception, the
|
||||
inventory value is reduced using the average cost formulae (not at the
|
||||
initial price of these products!).
|
||||
Switch to the :guilabel:`Journal Items` tab to view how `$80` is transferred from the holding
|
||||
account, `Stock Interim (Received)` to `Accounts Payable`. :guilabel:`Confirm` the bill to record
|
||||
the payment to the vendor.
|
||||
|
||||
Which means that the above table will be updated as follow:
|
||||
.. image:: avg_price_valuation/receive-8-table-bill.png
|
||||
:align: center
|
||||
:alt: Show bill linked to the purchase order for 8 tables.
|
||||
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Operation | Delta Value | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+===============================================+===============+===================+===============+============+
|
||||
| | | $24 | 2 | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Return of 1 Product initially bought at $10 | -1\*$12 | $12 | 1 | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
On product delivery
|
||||
-------------------
|
||||
|
||||
Explanation: counter example
|
||||
----------------------------
|
||||
In the :ref:`above example table <inventory/avg_price/price-table>`, when 10 products are delivered
|
||||
to a customer, the **Stock Input** account is untouched because there are no new products coming in.
|
||||
To put it simply:
|
||||
|
||||
Remember the definition of **Average Cost**, saying that we do not update
|
||||
the average cost of a product leaving the inventory. If you break this
|
||||
rule, you may lead to inconsistencies in your inventory.
|
||||
#. **Inventory valuation** is credited `$120`. Subtracting from inventory valuation represents
|
||||
`$120` worth of products exiting the company.
|
||||
#. Debit **Accounts Receivable** to record revenue from the sale.
|
||||
|
||||
As an example, here is the scenario when you deliver one piece to the
|
||||
customer and return the other one to your supplier (at the cost you
|
||||
purchased it). Here is the operation:
|
||||
.. image:: avg_price_valuation/sell-10-tables.png
|
||||
:align: center
|
||||
:alt: Show journal items linked to sale order.
|
||||
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Operation | Delta Value | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+===============================================+===============+===================+===============+============+
|
||||
| | | $24 | 2 | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Customer Shipping 1 product | -1\*$12 | $12 | 1 | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Return of 1 Product initially bought at $10 | -1\*$10 | **$2** | **0** | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
.. spoiler:: Understand Anglo-Saxon expensing
|
||||
|
||||
As you can see in this example, this is not correct: an inventory
|
||||
valuation of $2 for 0 pieces in the warehouse.
|
||||
In the accounting journal entry invoicing a customer for 10 tables, the accounts **Product
|
||||
Sales**, **Tax Received**, and **Accounts Receivable** all pertain to the sale of the product.
|
||||
**Accounts Receivable** is the account where the customer payment will be received.
|
||||
|
||||
The correct scenario should be to return the goods at the current
|
||||
average cost:
|
||||
Anglo-Saxon accounting recognizes the cost of goods sold (COGS) once the sale is made. So, up
|
||||
until the product is sold, scrapped, or returned, costs of keeping the product in stock are not
|
||||
accounted for. The **Expense** account is debited `$120` to log the costs of storing 10 tables
|
||||
during this period of time.
|
||||
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Operation | Delta Value | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+===============================================+===============+===================+===============+============+
|
||||
| | | $24 | 2 | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Customer Shipping 1 product | -1\*$12 | $12 | 1 | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Return of 1 Product initially bought at $10 | -1\*$12 | **$0** | **0** | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
On product return
|
||||
-----------------
|
||||
|
||||
On the other hand, using the average cost to value the return ensure a
|
||||
correct inventory value at all times.
|
||||
In the :ref:`above example table <inventory/avg_price/price-table>`, when returning 1 product to a
|
||||
vendor purchased at `$10`, a company expects `$10` in the **Accounts Payable** account from the
|
||||
vendor. However, **Stock Input** account must be debited `$12` because the average cost is `$12` at
|
||||
the time of the return. The missing `$2` is accounted for in the :guilabel:`Price Difference
|
||||
Account`, which is set up in the product's :guilabel:`Product Category`.
|
||||
|
||||
Further thoughts on anglo saxon mode
|
||||
------------------------------------
|
||||
.. note::
|
||||
Behavior of *price difference accounts* varies from localization. In this case, the account is
|
||||
intended to store differences between vendor price and *automated* inventory valuation methods.
|
||||
|
||||
For people in using the **anglo saxon accounting** principles, there is
|
||||
another concept to take into account: the stock input account of the
|
||||
product, which is intended to hold at any time the value of vendor bills
|
||||
to receive. So the stock input account will increase on reception of
|
||||
incoming shipments and will decrease when receiving the related vendor
|
||||
bills.
|
||||
Summary:
|
||||
|
||||
Back to our example, we see that when the return is valued at the
|
||||
average price, the amount booked in the stock input account is the
|
||||
original purchase price:
|
||||
#. Debit **Stock Input** account `$10` to move the table from stock to stock input. This move is to
|
||||
indicate that the table is to be processed for an outgoing shipment.
|
||||
#. Debit **Stock Input** an additional `$2` to account for the **Price Difference**.
|
||||
#. Credit **Stock Valuation** `$12` because the item is leaving the stock.
|
||||
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Operation | stock input | price diff | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+===============================================+===============+==============+===================+===============+============+
|
||||
| | | | $0 | 0 | $0 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive 8 Products at $10 | ($80) | | $80 | 8 | $10 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive vendor bill $80 | $0 | | $80 | 8 | $10 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive 4 Products at $16 | ($64) | | $144 | 12 | $12 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive vendor bill $64 | $0 | | $144 | 12 | $12 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Deliver 10 Products | $0 | | $24 | 2 | $12 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Return of 1 Product initially bought at $10 | **$10** | **$2** | **$12** | 1 | $12 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive vendor refund $10 | $0 | $2 | $12 | 1 | $12 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
.. image:: avg_price_valuation/expensing-price-difference-account.png
|
||||
:align: center
|
||||
:alt: 2 dollar difference expensed in Price Difference account.
|
||||
|
||||
This is because the vendor refund will be made using the original
|
||||
purchase price, so to zero out the effect of the return in the stock
|
||||
input in last operation, we need to reuse the original price. The price
|
||||
difference account located on the product category is used to book the
|
||||
difference between the average cost and the original purchase price.
|
||||
Once the vendor's refund is received,
|
||||
|
||||
#. Credit **Stock Input** account `$10` to reconcile the price of the table.
|
||||
#. Debit **Accounts Payable** `$10` to have the accountants collect and register the payment in
|
||||
their journal.
|
||||
|
||||
.. image:: avg_price_valuation/return-credit-note.png
|
||||
:align: center
|
||||
:alt: Return to get 10 dollars back.
|
||||
|
||||
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 33 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
|
||||
|
||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
@@ -77,6 +77,8 @@ statement.
|
||||
.. seealso::
|
||||
- :doc:`bank/reconciliation`
|
||||
|
||||
.. _payments/batch-payments:
|
||||
|
||||
Batch payment
|
||||
-------------
|
||||
|
||||
@@ -91,7 +93,7 @@ Batch Payment`.
|
||||
- :doc:`payments/batch`
|
||||
- :doc:`payments/batch_sdd`
|
||||
|
||||
.. _payments-matching:
|
||||
.. _payments/matching:
|
||||
|
||||
Payments matching
|
||||
-----------------
|
||||
|
||||
@@ -50,17 +50,16 @@ SEPA Direct Debit as a payment method
|
||||
-------------------------------------
|
||||
|
||||
SDD can be used as a payment method both on your **eCommerce** or on the **Customer Portal** by
|
||||
activating SDD as a **Payment Provider**. With this method, your customers can create and sign their
|
||||
mandates themselves.
|
||||
activating SDD as a **Payment Provider**. With this method, your customers can create their mandates.
|
||||
To ensure the validity of the information given by the customer, they will have to confirm each
|
||||
mandate with one successful bank transfer of the expected amount.
|
||||
|
||||
To do so, go to :menuselection:`Accounting --> Configuration --> Payment Providers`, click on *SEPA
|
||||
Direct Debit*, and set it up according to your needs.
|
||||
To do so, go to :menuselection:`Accounting app --> Configuration --> Payment Acquirers`, click on
|
||||
To do so, go to :menuselection:`Accounting app --> Configuration --> Payment Providers`, click on
|
||||
:guilabel:`SEPA Direct Debit`.
|
||||
|
||||
.. important::
|
||||
Make sure to change the :guilabel:`State` field to :guilabel:`Enabled`, and to check
|
||||
:guilabel:`Online Signature`, as this is necessary to let your customers sign their mandates.
|
||||
Make sure to change the :guilabel:`State` field to :guilabel:`Enabled` and set the provider as
|
||||
"Published" so that it is available for your customers.
|
||||
|
||||
Customers using SDD as payment method get prompted to add their IBAN, email address, and to sign
|
||||
their SEPA Direct Debit mandate.
|
||||
|
||||
@@ -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`, and enter `Checks` as name.
|
||||
|
||||
- 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
|
||||
|
||||
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 12 KiB |