Compare commits

..

82 Commits

Author SHA1 Message Date
Géry Debongnie a4f3d6475d [IMP] Rework the JavaScript tutorials
This commit rework the entire JavaScript tutorial series with the
following improvements:

-   Each chapter is now designed to be independent, allowing learners to
    follow any chapter without the necessity of completing previous ones.
-   Each chapter has been transformed into a standalone module, enabling
    learners to create small projects from scratch within each chapter.
-   The screenshots/text/code have been updated for Odoo 17.

Currently we have 5 chapters:
- Discover Chapter 1 - Owl Components: This chapter allows to learn the
  Owl framework in the `awesome_owl` module.
- Discover Chapter 2 - Build a dashboard: This chapter allows to grasp
  the basic of the web framework by building a dashboard in the
  `awesome_dashboard` module.
- Master Chapter 1 - Build a clicker game: This chapter allows to grasp
  the web framework by building a clicker game in the `awesome_clicker`
  module.
- Master Chapter 2 - Create a gallery view: This chapter allows to learn
  how to create a new view type. The new view is a gallery of records
  pictures. It can be done in the `awesome_gallery` module.
- Master Chapter 3 - Customize a kanban view: This chapter allows to
  learn to customize a kanban view by implementing a list of customer in
  the side of a kanban view. This can be done in the `awesome_kanban`
  module.

The chapter on creating and customizing fields is deleted for now and
will be completely rewritten in a near future.
The chapter on testing is deleted, how-to guides will be written to
cover this subject.

The solutions for all exercises has been done for v17, the goal by
merging the new tutorial is to have this new branch structure in
`odoo/tutorials`:
- 16.0
- 16.0-solutions
- 17.0
- 17.0-discover-js-framework-solutions
- 17.0-master-odoo-web-framework-solutions
-   master <-- default branch, starting point for all addons
-   master-discover-js-framework-solutions
-   master-master-odoo-web-framework-solutions

task-id: 3623595
2023-12-07 14:52:20 +01:00
“Chiara 0c162ecf18 [IMP] accounting: followup screenshot
taskid-3614885

closes odoo/documentation#6794

X-original-commit: 27a307cb0c
Signed-off-by: Chiara Prattico (chpr) <chpr@odoo.com>
2023-12-06 13:03:48 +00:00
Donatienne (dopi) 922f540fa6 [IMP] Website: Unsplash documentation updated
task-3498880

closes odoo/documentation#6770

X-original-commit: 88f546f2a9
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-12-06 09:46:53 +00:00
william-andre 1defbf7383 [FIX] install: do not create superuser for postgres
The preferred/safe way of running Odoo is with a standard user, with
only the right to create a database.
See https://github.com/odoo/odoo/commit/b6b73551dbbb3079f043920f21554b945fa4870e

closes odoo/documentation#6772

X-original-commit: df8114e591
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: William André (wan) <wan@odoo.com>
2023-12-06 08:16:48 +00:00
Jess Rogers (jero) fd3f3ca5cf [IMP] crm: update plan activities
closes odoo/documentation#6777

X-original-commit: e4aee350b8
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Co-authored-by: Timothy Kukulka <91896312+tiku-odoo@users.noreply.github.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
2023-12-06 03:43:40 +00:00
Loredana Perazzo f10dcbdaf6 [IMP] pos: remove duplicate of set customer and update sections accordingly
task-3366190

closes odoo/documentation#6668

X-original-commit: 4118cb9bf9
Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
2023-12-04 11:28:51 +00:00
Julien Castiaux 883442e483 [IMP] developer/reference/cli: --proxy-mode
Many customers struggle with their web server configuration, notably
regarding the `--proxy-mode` option and the way `X-Forwarded-*` HTTP
request headers are interpreted within Odoo.

The `--proxy-mode` section has been updated to cover the most common
misunderstandings and to give guidances on how to setup a web server.

Odoo always only takes the last entry of the `X-Forwarded-*` request
header because there are situations where it is not possible to
determine which last n-th entry to use. Employees might access their
odoo database via the internal network: connecting directly to nginx,
while customers might access the database via an additional proxy such
as cloudflare. The real IP of employees would be the last inside the
`X-Forwarded-For` chain, while the real IP of customers would be the
*second* last entry inside the chain. It would be incorrect to always
take the same nth last entry inside the chain. The cloudflare's own IP
address must be discarded from the chain. Web servers usually feature
a way to ignore trusted IP from the chain, a way so that the real IP
of the user is always the last entry inside the chain. Odoo relies on
such feature to be active and configured.

Prior discussions about `X-Forwarded-For`:
* odoo/odoo#104947
* odoo/odoo#118629
* odoo/odoo#139536

All `X-Forwarded-*` headers are ignored in case the `X-Forwarded-Host`
header is missing (even with `--proxy-mode`). System admin might be
tempted to not set this header and to set `Host` instead, this is
broken as this a user-agent would be able to spoof `X-Forwarded-Host`
and Odoo would use that instead of the correct `Host`.

Prior discussions about `X-Forwarded-Host`:
* odoo/odoo#63277
* odoo/odoo#70117

closes odoo/documentation#6744

X-original-commit: 3d91c57b57
Signed-off-by: Julien Castiaux (juc) <juc@odoo.com>
2023-12-03 08:26:12 +00:00
Tom Aarab (toaa) 41442270a3 [IMP] accounting: checks
Update screenshots for 16.4 and up. Forward to master.

taskid-3614814

closes odoo/documentation#6711

X-original-commit: 639a56fc5c
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2023-12-01 17:37:37 +00:00
Martin Trigaux 58d246b8f4 [I18N] *: export 17.0 translations
closes odoo/documentation#6730

X-original-commit: 8ba87a67ce
Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2023-12-01 13:30:01 +00:00
Martin Trigaux eb0c42803d [FIX] applications: fix typo
X-original-commit: 1a44524ab5
Part-of: odoo/documentation#6730
2023-12-01 13:30:01 +00:00
Raphael Collet 2b8a578c9b [IMP] core: add SQL wrapper
This completes https://github.com/odoo/odoo/pull/134677.

closes odoo/documentation#6724

X-original-commit: 2662fa5437
Signed-off-by: Raphael Collet <rco@odoo.com>
2023-12-01 11:54:08 +00:00
Marion (masp) c27c6f8928 [FIX] Website: pages.rst menu bug
fixes bug introduced with https://github.com/odoo/documentation/pull/5307

closes odoo/documentation#6721

X-original-commit: 53cc4aacb5
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-11-29 19:59:01 +00:00
“Audrey 0a2b5e76e1 [ADD] website: mail groups
task-2845181

closes odoo/documentation#6706

X-original-commit: 25bc655cfa
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2023-11-29 08:18:41 +00:00
John Holton (hojo) 37af135d31 [ADD] Quality: Take a Picture Check
closes odoo/documentation#6716

X-original-commit: 2e605c9ec8
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-29 03:20:24 +00:00
Samuel Degueldre b093bdc871 [FIX] developer: remove confusing section about starting services
When writing the documentation page for standalone Owl apps, it was
originally required to create the env and start the services manually,
and then mount the application by giving it a bunch of configuration
parameters. During review, it was noted that this was error prone and
confusing, and as such a corresponding PR added a helper to mount the
application without needing to do much by hand. While the code was
adapted in the documentation that was merged, the text still referred to
starting the services and creating the environment which is no longer
necessary.

This commit removes references to those things, and because the
resulting section is very small and not very interesting it has been
merged into the previous section.

closes odoo/documentation#6692

X-original-commit: 8e3008f06a
Signed-off-by: Samuel Degueldre (sad) <sad@odoo.com>
2023-11-28 05:50:46 +00:00
Sam Lieber (sali) 392d99c2fb [IMP] accounting/l10n_co: additional context
closes odoo/documentation#6691

X-original-commit: 6045a60dd5
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Co-authored-by: dade-odoo <87431108+dade-odoo@users.noreply.github.com>
Co-authored-by: larm-odoo <121518652+larm-odoo@users.noreply.github.com>
2023-11-27 23:12:05 +00:00
Jess Rogers (jero) 38f66dd0f9 [IMP] crm: update manage lost opps
closes odoo/documentation#6682

X-original-commit: 21f0ad60f8
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: brse-odoo <brse@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2023-11-27 20:57:49 +00:00
Marion (masp) 688285086b [IMP] Contributing: typo seealso admonition
closes odoo/documentation#6643

X-original-commit: 70d5a55909
Signed-off-by: Marion Spindler (masp) <masp@odoo.com>
2023-11-27 19:37:10 +00:00
Felicious 5264899901 [IMP] barcode: add zebra scanner section
add more figures

closes odoo/documentation#6603

X-original-commit: 56cda37610
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: hojo-odoo <123424465+hojo-odoo@users.noreply.github.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
2023-11-27 19:37:09 +00:00
Donatienne (dopi) 70a99d8f87 [IMP] documents: new features
task-3433587

closes odoo/documentation#6673

X-original-commit: 2ba79f54a5
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-11-27 13:31:14 +00:00
Donatienne (dopi) d5f2bf3b8c [IMP] sign: update for 16.0
task-3433578

closes odoo/documentation#6662

X-original-commit: 71446b0668
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-11-27 12:09:16 +00:00
Xavier (XPL) 9be26ea17a [IMP] reporting: improve grammar and remove image centering
closes odoo/documentation#6654

X-original-commit: 3ead6e0f99
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-11-24 13:17:41 +00:00
“Chiara 48321d0e6b [IMP] accounting: branch management in main page
taskid-3609491

closes odoo/documentation#6648

X-original-commit: eafe834cf4
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-11-24 11:53:00 +00:00
“Chiara 8e548bf770 [IMP] accounting: peppol changes
taskid-3450738

closes odoo/documentation#6635

X-original-commit: 4728e6db23
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-11-24 03:35:01 +00:00
Claire Bretton (clbr) 6fd7446ad9 [FIX] getting_started: remove useless lambda
The lambda function here is useless and makes newdooers think
they need to use it everytime.
`default=fields.Date.add(fields.Date.today(), months=3))`
should do the trick, no lambda involved.

closes odoo/documentation#6632

X-original-commit: 620508fb29
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Claire Bretton (clbr) <clbr@odoo.com>
2023-11-24 03:35:00 +00:00
Claire Bretton (clbr) 0dd8974ca1 [FIX] getting_started: invalid addons-path
The "../technical-training-sandbox" is added too early in the path since
its still empty, and results into an "invalid addons-path" error.

X-original-commit: 8707609b38
Part-of: odoo/documentation#6632
2023-11-24 03:35:00 +00:00
Xavier (XPL) 4cad0e2f82 [IMP] outlook: remove note about multi-user sync spam
task-3575806

closes odoo/documentation#6626

X-original-commit: b4302e4023
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-11-24 03:34:59 +00:00
Xavier (XPL) 1a412b334a [FIX] accounting: update link to getting started video tutorial
task-3608613

closes odoo/documentation#6615

X-original-commit: c0653112a1
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-11-24 03:34:58 +00:00
Felicious e96721a308 [IMP] inventory: update delivery methods from 12 to 16
closes odoo/documentation#6604

X-original-commit: 4e2b634a50
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: hojo-odoo <123424465+hojo-odoo@users.noreply.github.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
2023-11-24 03:34:56 +00:00
Felicious 829eb7b851 [ADD] inventory: cluster picking
closes odoo/documentation#6592

X-original-commit: 32900efbb9
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: hojo-odoo <123424465+hojo-odoo@users.noreply.github.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: meng-odoo <101904966+meng-odoo@users.noreply.github.com>
2023-11-24 03:34:55 +00:00
KC (ksc) d0af3f6bd1 [IMP] sales: updated deadline doc for 16
closes odoo/documentation#6585

X-original-commit: 75c24e7e88
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-24 02:10:56 +00:00
John Holton (hojo) b2a37a0129 [ADD] Quality: Measure quality check
closes odoo/documentation#6579

X-original-commit: 78713f1637
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-24 02:10:55 +00:00
Xavier (XPL) a7e8e9724a [IMP] paypal: add note about supported currencies
task-3608056

closes odoo/documentation#6572

X-original-commit: 5f1881a88a
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-11-24 02:10:49 +00:00
Xavier (XPL) a70258c823 [IMP] upgrade: add note on bank synch neutralization
task-3605690

closes odoo/documentation#6563

X-original-commit: dc48273e7e
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-11-23 16:22:49 +00:00
Samuel Degueldre 16e10c53db [IMP] developer: document how to create standalone owl apps
Since we've introduced Owl, developers want more and more to create
standalone Owl applications outside of the webclient. This commit
introduces a How-to for doing just that.

task-3580007

closes odoo/documentation#6553

X-original-commit: 1fc36ffa82
Related: odoo/odoo#143073
Signed-off-by: Samuel Degueldre (sad) <sad@odoo.com>
2023-11-22 15:52:49 +00:00
Jonathan Castillo (jcs) 4219829976 [IMP] sales: add link to OQT - PDF quote video
This commit adds a seealso section in the intro of the PDF quote builder
doc, with a link to the related Odoo Quick Tips video.

closes odoo/documentation#6554

X-original-commit: 386a3a9e10
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-11-22 10:24:17 +00:00
Donatienne (dopi) c2190a438c [IMP] website: use plausible.io servers and account
This addition explains how to create and connect an existing plausible.io account in Odoo.

task-3540753

closes odoo/documentation#6546

X-original-commit: cd11937f43
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-11-22 07:58:21 +00:00
John Holton (hojo) 5b44376e52 [ADD] Quality: Pass - Fail quality checks
closes odoo/documentation#6552

X-original-commit: 1a11e3c35c
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-22 03:49:07 +00:00
Rémy Voet (ryv) 7067cf372a [FIX] performance: change example with the new _read_group
closes odoo/documentation#6540

X-original-commit: 01625aa661
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Rémy Voet (ryv) <ryv@odoo.com>
2023-11-21 19:58:05 +00:00
Jess Rogers (jero) ebbd736540 [REM] crm: google spreadsheet integration
closes odoo/documentation#6538

X-original-commit: a11fa7e5b2
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
2023-11-21 18:44:18 +00:00
Xavier (XPL) 4fe046b9d0 [FIX] payroll: add missing show-content metadata
Without the :show-content: metadata markup, it is not possible to open the
page by navigating from the toctree.

closes odoo/documentation#6535

X-original-commit: 16e339a7a3
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-11-21 18:44:12 +00:00
Mathieu (mano) 07c50eae7a [IMP] odoo_theme: toctrees-l1,l2 design improvement
Issue 1:
========
The toctrees in the documentation are visually inconsistent because of
the content. Sometimes we have titles that are also links and visually
collides with the rest of the toc making it hard to read. This applies
to toctree-l1 and toctree-l2.

Fix 1:
========
When we have a link and title toctree-l2 in a list containing other
nested toc, we apply another styling displaying it with the same color
as a title, but with an icon and hover behavior indicating that it is a
link. (This commit also changes the direction of the i-link icon to make
it standard).

Issue 2:
========
When we have only have toctree-l1 links without nested toc the toctree
is uselessly taking a lot of space.

Fix: 2
========

In these scenario we add a class to the toctree wrapper to replace the
toctree-l1 style with a toctree-l2.

task-3138525
task-3138563

part of

task-3059178

closes odoo/documentation#6512

X-original-commit: c62bf21987
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-11-21 12:58:53 +00:00
Rémi Rahir (rar) 671cca36a6 [FIX] dev/reference: Fix external reference
The tour utils were red and moved in Odoo (odoo/odoo#107618).

closes odoo/documentation#6521

X-original-commit: 9be2b43adb
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Rémi Rahir (rar) <rar@odoo.com>
2023-11-21 09:36:04 +00:00
Felicious 246450c957 [IMP] barcode: split docs + hone in on language
closes odoo/documentation#6520

X-original-commit: 9081e45aab
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
Co-authored-by: brse-odoo <brse@odoo.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
2023-11-20 01:16:42 +00:00
oco-odoo cc37e41de0 [IMP] accounting: new tag selector for custom reports
https://github.com/odoo/enterprise/commit/0c0cf8ebc943a8dc2d9bdd952dc7b5c2dabbd60a
added a new way to select accounts in the account_codes engine. This
commit adds some explanation in the doc on how to use this new syntax.

closes odoo/documentation#6509

X-original-commit: 1a32165180
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-11-20 01:16:38 +00:00
John Holton (hojo) 6cff316d86 [ADD] MRP: Three-step manufacturing
closes odoo/documentation#5163

closes odoo/documentation#6490

X-original-commit: 5689f7cf22
Signed-off-by: John Holton (hojo) <hojo@odoo.com>
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-17 17:58:55 +00:00
tiku-odoo 03c9226547 [IMP] Productivity: Outlook Plugin edits
closes odoo/documentation#6484

X-original-commit: 71aabb2618
Signed-off-by: Timothy Kukulka (tiku) <tiku@odoo.com>
2023-11-16 05:19:10 +00:00
Felicious d87112ddef [IMP] inventory: expand on accounting and math
closes odoo/documentation#6483

X-original-commit: 9761eb44dc
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: toaa <104567387+toaa-odoo@users.noreply.github.com>
Co-authored-by: meng-odoo <101904966+meng-odoo@users.noreply.github.com>
2023-11-16 05:19:09 +00:00
John Holton (hojo) 6605ec1988 [ADD] MRP: One-step manufacturing
closes odoo/documentation#6470

X-original-commit: 9c0982371a
Signed-off-by: John Holton (hojo) <hojo@odoo.com>
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-16 05:19:07 +00:00
Rémy Voet (ryv) d105f614af [IMP] orm: update changelog
closes odoo/documentation#6465

X-original-commit: f1960a250c
Signed-off-by: Rémy Voet (ryv) <ryv@odoo.com>
2023-11-15 12:35:34 +00:00
Yaroslav Soroko (yaso) 10f936247a [IMP] Pos: iot six module part added to the six doc
This PR adds the documentation for a new Pos IoT Six module which will
soon replace the old Six module.

task-3555605

closes odoo/documentation#6440

X-original-commit: bc98b8c491
Signed-off-by: Yaroslav Soroko (yaso) <yaso@odoo.com>
Co-authored-by: Yaroslav Soroko (yaso) <yaso@odoo.com>
Co-authored-by: Loredana Perazzo <lrpz@odoo.com>
2023-11-14 17:07:14 +00:00
John Holton (hojo) 6a198ad1ce [ADD] Quality: Instructions quality check
closes odoo/documentation#6454

X-original-commit: f0b895fdb2
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-14 02:36:02 +00:00
Felicious 7dc0dc37d2 [IMP] inventory: fwport removal strategy
closes odoo/documentation#6450

X-original-commit: ba34f754ce
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-14 02:36:01 +00:00
Sam Lieber (sali) 09e0b8affc [IMP] tests: make review UX and resource files
closes odoo/documentation#6434

X-original-commit: 25e204adcd
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Co-authored-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-11-14 02:35:55 +00:00
John Holton (hojo) f3a6cc6779 [ADD] MRP: Two-step manufacturing
closes odoo/documentation#6402

X-original-commit: 0241c9dd05
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-13 23:36:22 +00:00
John Holton (hojo) 36b20ff16c [ADD] Inventory: Use locations to manage inventory
closes odoo/documentation#6423

X-original-commit: 889e95037d
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-11 18:47:03 +00:00
KC (ksc) 068020901c [IMP] sales: complete rewrite for pricing doc
closes odoo/documentation#6415

X-original-commit: a113d83fea
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-11 03:32:55 +00:00
Loredana Perazzo 6da7dcccea [IMP] pos: add warning to not buy a terminal from amazon
closes odoo/documentation#6391

Taskid: 3284737
X-original-commit: f0495a9bc9
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-11-09 12:53:09 +00:00
Sam Lieber (sali) 48679b52e9 [FW][ADD] MRP: Shop Floor Overview
closes odoo/documentation#6381

X-original-commit: 17885d893e
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: hojo-odoo <hojo@odoo.com>
2023-11-09 04:38:41 +00:00
John Holton (hojo) f85a667236 [ADD] MRP: Work order dependencies
closes odoo/documentation#6380

X-original-commit: a1e7445ae3
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-09 03:40:04 +00:00
Felicious 44f202cff9 [IMP] inventory: rewrite lead times, add images
closes odoo/documentation#6360

X-original-commit: 3d5badcc82
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: brse-odoo <brse@odoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
2023-11-09 01:54:18 +00:00
John Holton (hojo) 4b1b3db6f2 [ADD] Inventory: Add Scrap inventory
closes odoo/documentation#6375

X-original-commit: 0e6576cc3d
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-09 00:35:02 +00:00
Martin Trigaux db2ee387a9 [I18N] *: export 17.0 translations
closes odoo/documentation#6361

X-original-commit: f13d8b52fc
Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2023-11-08 12:17:46 +00:00
tiku-odoo f7cb830798 [ADD] IoT: OPC-UA Protocol
closes odoo/documentation#6351

X-original-commit: 4d2a3101ad
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-08 10:00:45 +00:00
KC (ksc) 86bd83705d [IMP] sales: minor adjustment to dynamic text portion of PDF builder
closes odoo/documentation#6349

X-original-commit: 03cf50013a
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-08 10:00:44 +00:00
John Holton (hojo) b4eaf1c223 [ADD] MRP: Add Split and merge manufacturing orders
closes odoo/documentation#6341

X-original-commit: 83873dbd71
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-08 10:00:43 +00:00
Louis Baudoux 5ec7aff3c5 [IMP] iap: move from first-person to second-person writing
For some reason, the first-person was used throughout the IAP
documentation, and quite inconsistently.
As the rest of the documentation is using second-person writing, IAP
should be no exception.

closes odoo/documentation#6328

X-original-commit: df474342ba
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Louis Baudoux (lba) <lba@odoo.com>
2023-11-07 18:17:37 +00:00
Louis Baudoux 49ad6221a8 [IMP] iap: remove documentation related to IAP services creation
It has been decided to remove the possibility for our users to create
their own IAP services.
This decision was motivated by the fact that, in the 5 years of
existence of IAP, very few non-Odoo services have been created and
actively used by our customers.

X-original-commit: 282f041ed1
Part-of: odoo/documentation#6328
2023-11-07 18:17:37 +00:00
Nathan Marotte (nama) 32441c88fc [IMP] upgrade: overhaul upgrade doc
closes odoo/documentation#6321

X-original-commit: 41aebc3b05
Signed-off-by: Nathan Marotte (nama) <nama@odoo.com>
2023-11-07 17:10:24 +00:00
Antoine Vandevenne (anv) 89539f7379 [IMP] supported_versions: release 17.0
closes odoo/documentation#6314

X-original-commit: 2c805d9813
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-11-07 17:10:19 +00:00
Felicious 4d88c4ec20 [ADD] PLM: ECO approvals doc
closes odoo/documentation#6304

X-original-commit: 907e1ba854
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: hojo-odoo <123424465+hojo-odoo@users.noreply.github.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-07 15:50:37 +00:00
Audric Onockx (auon) 66b08cd4fd [IMP] developer: add "widget" attr to cohort field tag
Related PR: https://github.com/odoo/enterprise/pull/46693

task-3475463

closes odoo/documentation#6284

Related: odoo/enterprise#46693
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-11-07 13:03:52 +00:00
KC (ksc) 4e6983c135 [ADD] sales: adding pdf quote builder doc for 16/17
closes odoo/documentation#6295

Author:    KC (ksc) <ksc@odoo.com>
Date:      Thu Oct 5 11:29:37 2023 -0700
X-original-commit: 4fdfda7ddb
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: meng-odoo <meng@odoo.com>
Co-authored-by: Felicious <feku@odoo.com>
Co-authored-by: Demesmaeker <edm@odoo.com>
Co-authored-by: dalaOdoo <dala@odoo.com>
Co-authored-by: StraubCreative <zst@odoo.com>
2023-11-04 13:03:21 +00:00
Felicious f53aca7b32 [ADD] PLM: version control
closes odoo/documentation#6294

Author:    Felicious <feku@odoo.com>
X-original-commit: 6a5c340a26
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-11-04 11:57:54 +00:00
Louis Baudoux cdc510295c [IMP] extract_api: document the new API version
We have introduced a second version of the Extract API that adds the IAP
account token to the `get_result` and `validate` routes.

There are also other changes in this commit:
 - The deprecated stuff has been removed as it's been deprecated for a
   while and won't be supported anymore in the future.
 - The `status` table of the `get_result` route has been added as it was
   missing for some reason.
 - The documentation regarding the `/validate` routes have been removed
   for security reasons.

closes odoo/documentation#6283

X-original-commit: a8c6272899
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Louis Baudoux (lba) <lba@odoo.com>
2023-11-03 16:55:58 +00:00
Jess Rogers (jero) 86207443b1 [IMP] live chat: update ratings doc
closes odoo/documentation#6264

X-original-commit: 7a307320c3
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: larm-odoo <121518652+larm-odoo@users.noreply.github.com>
2023-11-03 16:55:47 +00:00
Sam Lieber (sali) d25eecbe13 [IMP] l10n: Chile new features
closes odoo/documentation#6257

X-original-commit: eff8e9d915
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Co-authored-by: masi-odoo <masi@odoo.com>
Co-authored-by: StraubCreative <zst@odoo.com>
Co-authored-by: larm-odoo <121518652+larm-odoo@users.noreply.github.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
2023-11-03 15:12:14 +00:00
Felicious dd6bf8b6c7 [ADD] PLM: engineering change order
closes odoo/documentation#6273

X-original-commit: fc9bbb7d22
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: hojo-odoo <123424465+hojo-odoo@users.noreply.github.com>
Co-authored-by: Sho Ketchum <96748231+odoo-shke@users.noreply.github.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
2023-11-02 21:33:18 +00:00
Rémy Voet (ryv) d53c676288 [FIX] developer: fix bad documentation of --unaccent
In the CLI, `--unaccent` try to enable PostgreSQL unaccent extention
when odoo is responsible to create new database(s).

closes odoo/documentation#6246

X-original-commit: 1639d22efd
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Rémy Voet (ryv) <ryv@odoo.com>
2023-10-31 08:06:49 +00:00
Martin Trigaux dbb82d83e2 [IMP] *: export translations
closes odoo/documentation#6249

X-original-commit: bb4210cdbd
Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2023-10-30 08:53:41 +00:00
Tom Aarab (toaa) a8ef31f215 [IMP] accounting: reconciliation
Updated screenshots and typos for 16.3

Forward to 16.4:
- Change: Dashboard links are improved, and audit features can be found
  in the journal items view.

closes odoo/documentation#6234

X-original-commit: a31bcec3ba
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-10-27 13:42:50 +00:00
Tom Aarab (toaa) a3e1378919 [IMP] silverfin: API key
Added a note to make it clearer that for fiduciaries, a single API key
is valid for all databases linked to the user.

taskid-3570700

closes odoo/documentation#6231

X-original-commit: 323d3563c9
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2023-10-27 13:42:49 +00:00
1573 changed files with 266302 additions and 2384006 deletions
+1 -1
View File
@@ -26,7 +26,7 @@ SOURCE_DIR = content
HTML_BUILD_DIR = $(BUILD_DIR)/html
ifdef VERSIONS
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/17.0
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/master
endif
ifneq ($(CURRENT_LANG),en)
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/$(CURRENT_LANG)
+1 -17
View File
@@ -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 = '17.0'
version = release = 'master'
# `current_branch` is the technical name of the current branch.
# E.g., saas-15.4 -> saas-15.4; 12.0 -> 12.0, master -> master (*).
@@ -478,24 +478,8 @@ def _generate_alternate_urls(app, pagename, templatename, context, doctree):
_version = _version or app.config.version
_lang = _lang or app.config.language or 'en'
_canonical_page = f'{pagename}.html'
# legal translations have different URLs schemes as they are not managed on transifex
# e.g. FR translation of /terms/enterprise => /fr/terms/enterprise_fr
if pagename.startswith('legal/terms/'):
if _lang in legal_translations and not pagename.endswith(f"_{_lang}"):
# remove language code for current translation, set target one
_page = re.sub("_[a-z]{2}$", "", pagename)
if 'terms/i18n' not in _page:
_page = _page.replace("/terms/", "/terms/i18n/")
_canonical_page = f'{_page}_{_lang}.html'
elif _lang == 'en' and pagename.endswith(tuple(f"_{l}" for l in legal_translations)):
# remove language code for current translation, link to original EN one
_page = re.sub("_[a-z]{2}$", "", pagename)
_canonical_page = f'{_page.replace("/i18n/", "/")}.html'
if app.config.is_remote_build:
_canonical_page = _canonical_page.replace('index.html', '')
return f'{_root}' \
f'{f"/{_version}" if app.config.versions else ""}' \
f'{f"/{_lang}" if _lang != "en" else ""}' \
-1
View File
@@ -47,4 +47,3 @@ functionalities, including functional support, upgrades, and hosting. `Pricing
install/deploy
install/cdn
install/email_gateway
install/geo_ip
+36 -56
View File
@@ -330,7 +330,7 @@ in ``/etc/nginx/sites-enabled/odoo.conf`` set:
proxy_pass http://odoochat;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
@@ -339,7 +339,7 @@ in ``/etc/nginx/sites-enabled/odoo.conf`` set:
# Redirect requests to odoo backend server
location / {
# Add Headers for odoo proxy mode
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
@@ -439,71 +439,51 @@ Odoo static files are located in each module's :file:`static/` folder, so static
by intercepting all requests to :samp:`/{MODULE}/static/{FILE}`, and looking up the right module
(and file) in the various addons paths.
It is recommended to set the ``Content-Security-Policy: default-src 'none'`` header on all images
delivered by the web server. It is not strictly necessary as users cannot modify/inject content
inside of modules' :file:`static/` folder and existing images are final (they do not fetch new
resources by themselves). However, it is good practice.
.. example::
Say Odoo has been installed via the **debian packages** for Community and Enterprise and the
:option:`--addons-path <odoo-bin --addons-path>` is ``'/usr/lib/python3/dist-packages/odoo/addons'``.
Using the above NGINX (https) configuration, the following ``map`` and ``location`` blocks should be
added to serve static files via NGINX.
Using the above NGINX (https) configuration, the following location block should be added to
serve static files via NGINX.
.. code-block:: nginx
.. code-block:: nginx
map $sent_http_content_type $content_type_csp {
default "";
~image/ "default-src 'none'";
}
location @odoo {
# copy-paste the content of the / location block
}
server {
# the rest of the configuration
location @odoo {
# copy-paste the content of the / location block
}
# Serve static files right away
location ~ ^/[^/]+/static/.+$ {
# root and try_files both depend on your addons paths
root ...;
try_files ... @odoo;
expires 24h;
add_header Content-Security-Policy $content_type_csp;
}
}
The actual ``root`` and ``try_files`` directives are dependant on your installation, specifically on
your :option:`--addons-path <odoo-bin --addons-path>`.
# Serve static files right away
location ~ ^/[^/]+/static/.+$ {
root /usr/lib/python3/dist-packages/odoo/addons;
try_files $uri @odoo;
expires 24h;
}
.. example::
Say Odoo has been installed via the **source**. The two git repositories for Community and
Enterprise have been cloned in :file:`/opt/odoo/community` and :file:`/opt/odoo/enterprise`
respectively and the :option:`--addons-path <odoo-bin --addons-path>` is
``'/opt/odoo/community/odoo/addons,/opt/odoo/community/addons,/opt/odoo/enterprise'``.
.. tabs::
Using the above NGINX (https) configuration, the following location block should be added to
serve static files via NGINX.
.. group-tab:: Debian package
.. code-block:: nginx
Say Odoo has been installed via the **debian packages** for Community and Enterprise, and
that the :option:`--addons-path <odoo-bin --addons-path>` is
``'/usr/lib/python3/dist-packages/odoo/addons'``.
location @odoo {
# copy-paste the content of the / location block
}
The ``root`` and ``try_files`` should be:
# Serve static files right away
location ~ ^/[^/]+/static/.+$ {
root /opt/odoo;
try_files /community/odoo/addons$uri /community/addons$uri /enterprise$uri @odoo;
expires 24h;
}
.. code-block:: nginx
root /usr/lib/python3/dist-packages/odoo/addons;
try_files $uri @odoo;
.. group-tab:: Git sources
Say Odoo has been installed via the **sources**, that both the Community and Enterprise git
repositories were cloned in :file:`/opt/odoo/community` and :file:`/opt/odoo/enterprise`
respectively, and that the :option:`--addons-path <odoo-bin --addons-path>` is
``'/opt/odoo/community/odoo/addons,/opt/odoo/community/addons,/opt/odoo/enterprise'``.
The ``root`` and ``try_files`` should be:
.. code-block:: nginx
root /opt/odoo;
try_files /community/odoo/addons$uri /community/addons$uri /enterprise$uri @odoo;
.. warning::
The actual NGINX configuration you need is highly dependent on your own installation. The two
above snippets only highlight two possible configurations and may not be used as-is.
Serving attachments
-------------------
+4 -4
View File
@@ -54,10 +54,10 @@ Odoo needs a `PostgreSQL <https://www.postgresql.org/>`_ server to run properly.
$ sudo systemctl start postgresql
.. warning::
`wkhtmltopdf` is not installed through **pip** and must be installed manually in `version 0.12.6
<https://github.com/wkhtmltopdf/packaging/releases/tag/0.12.6.1-3>`_ 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.
`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
----------
+4 -4
View File
@@ -413,10 +413,10 @@ Dependencies
$ sudo npm install -g rtlcss
.. warning::
`wkhtmltopdf` is not installed through **pip** and must be installed manually in `version 0.12.6
<https://github.com/wkhtmltopdf/packaging/releases/tag/0.12.6.1-3>`_ 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.
`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:
@@ -52,7 +52,7 @@ able to read (IMAP) and send (SMTP) emails in the Microsoft 365 setup. First, cl
Add a Permission` button and select :guilabel:`Microsoft Graph` under :guilabel:`Commonly Used
Microsoft APIs`. After, select the :guilabel:`Delegated Permissions` option.
In the search bar, search for the following :guilabel:`Delegated permissions` and click
In the search bar, search for the following :guilabel:`Deregulated permissions` and click
:guilabel:`Add permissions` for each one:
- :guilabel:`SMTP.Send`
@@ -129,5 +129,6 @@ users, click :guilabel:`Add more users`.
To remove users, select them and click :guilabel:`Remove`.
.. seealso::
- :doc:`/applications/general/users/manage_users`
- :doc:`/applications/general/users/odoo_account`
- :doc:`../../applications/general/users/manage_users`
- :doc:`../../applications/general/users/delete_account`
+26 -23
View File
@@ -39,11 +39,10 @@ An upgrade does not cover:
- Migrating from another ERP to Odoo
.. warning::
If your database contains custom modules, it cannot be upgraded until a version of your custom
modules is available for the target version of Odoo. For customers maintaining their own custom
modules, we recommend to parallelize the process by :ref:`requesting an upgraded database
<upgrade/request-test-database>` while also :doc:`upgrading the source code of your custom
modules </developer/howtos/upgrade_custom_db>`.
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>`
Upgrading in a nutshell
@@ -52,15 +51,15 @@ Upgrading in a nutshell
#. Request an upgraded test database (see :ref:`obtaining an upgraded test database
<upgrade/request-test-database>`).
#. If applicable, upgrade the source code of your custom module to be compatible with the new
version of Odoo (see :doc:`/developer/howtos/upgrade_custom_db`).
#. Thoroughly test the upgraded database (see :ref:`testing the new version of the database
<upgrade/test_your_db>`).
#. Report any issue encountered during the testing to Odoo via the `support page
<https://odoo.com/help?stage=migration>`__.
#. (If applicable) : upgrade the source code of your custom module to be compatible with the new
version of Odoo.
#. 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.
@@ -70,6 +69,9 @@ Upgrading in a nutshell
#. Report any issue encountered during the upgrade to Odoo via the `support page
<https://odoo.com/help?stage=post_upgrade>`__.
.. TODOUPG: Once the page for developers is published, put this at 4)
.. (see :ref:`upgrading customizations <upgrade/upgrading_customizations>`).
.. _upgrade/request-test-database:
Obtaining an upgraded test database
@@ -134,13 +136,18 @@ project <https://odoo.sh/project>`_.
file of the upgrade process can be found in your newly upgraded staging build by going to
:file:`~/logs/upgrade.log`.
.. important::
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.
.. 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.
Check out the :doc:`/developer/howtos/upgrade_custom_db` page for more information.
.. 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
@@ -160,11 +167,6 @@ project <https://odoo.sh/project>`_.
An upgraded test database can also be requested via the `Upgrade page
<https://upgrade.odoo.com/>`_.
.. important::
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. Check out the
:doc:`/developer/howtos/upgrade_custom_db` page for more information.
.. 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
@@ -289,8 +291,8 @@ 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.**
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:
@@ -335,8 +337,9 @@ exceptions.
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. More information on how to upgrade your custom modules can be found on
:doc:`/developer/howtos/upgrade_custom_db`.
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
+2 -3
View File
@@ -209,7 +209,8 @@ available methods are standard price, average price, :abbr:`LIFO (Last-In, First
:abbr:`FIFO (First-In, First-Out).`
.. seealso::
:doc:`../inventory_and_mrp/inventory/warehouses_storage/inventory_valuation/inventory_valuation_config`
:doc:`View the impact of the valuation methods on transactions
<../inventory_and_mrp/inventory/management/reporting/inventory_valuation_config>`
Retained earnings
=================
@@ -221,8 +222,6 @@ and loss balance is automatically reported on the balance sheet report.
.. seealso::
:doc:`Accounting Cheat Sheet <accounting/get_started/cheat_sheet>`
.. _fiduciaries:
Fiduciaries
===========
@@ -107,9 +107,9 @@ If your connection with the proxy is disconnected, you can reconnect with the pr
:guilabel:`Fetch Account` button.
.. note::
If you are unable to reconnect using the :guilabel:`Reconnect` button, please contact the
`support <https://www.odoo.com/help>`_ directly with your client id or the reference of the error
listed in the chatter.
This disconnection can be caused by the Odoo support. In this case, please contact the `support
<https://www.odoo.com/help>`_ directly with your client id or the reference of the error listed
in the chatter.
.. _MigrationOnlineSync:
@@ -21,8 +21,6 @@ vendors because of modifications to confirmed customer invoices or vendor bills.
:doc:`return </applications/sales/sales/products_prices/returns>` if a storable product is
returned.
.. _accounting/issue-credit-note:
Issue a credit note
===================
@@ -74,8 +72,6 @@ prefilled with the same details from the original invoice.
This is the option to **modify** the content of a *validated* invoice.
.. _accounting/issue-debit-note:
Issue a debit note
==================
@@ -2,175 +2,194 @@
Deferred revenues
=================
**Deferred revenues**, or **unearned revenues**, are invoices addressed to customers
for goods yet to be delivered or services yet to be rendered.
**Deferred revenues**, or **unearned revenue**, are payments made in advance by customers for
products yet to deliver or services yet to render.
The company cannot report them on the current **profit and loss statement**, or *income statement*,
since the goods and services will be effectively delivered/rendered in the future.
Such payments are a **liability** for the company that receives them since it still owes its
customers these products or services. The company cannot report them on the current **Profit and
Loss statement**, or *Income Statement*, since the payments will be effectively earned in the future.
These future revenues must be deferred on the company's balance sheet among the current liabilities
until they can be **recognized**, at once or over a defined period, on the profit and loss
statement.
These future revenues must be deferred on the company's balance sheet until the moment in time they
can be **recognized**, at once or over a defined period, on the Profit and Loss statement.
For example, let's say a business sells a software license of $1200 for 1 year. They immediately
invoice it to the customer but can't consider it earned yet, as the future months of licensing have
not yet been delivered. Therefore, they post this new revenue in a deferred revenue account and
recognize it on a monthly basis. Each month, for the next 12 months, $100 will be recognized as
revenue.
For example, let's say we sell a five-year extended warranty for $ 350. We already receive the money
now but haven't earned it yet. Therefore, we post this new income in a deferred revenue account and
decide to recognize it on a yearly basis. Each year, for the next 5 years, $ 70 will be recognized
as revenue.
Odoo Accounting handles deferred revenues by spreading them in multiple entries that are posted
periodically.
Odoo Accounting handles deferred revenues by spreading them in multiple entries that are
automatically created in *draft mode* and then posted periodically.
.. note::
The server checks once a day if an entry must be posted. It might then take up to 24 hours before
you see a change from :guilabel:`Draft` to :guilabel:`Posted`.
you see a change from *draft* to *posted*.
Configuration
Prerequisites
=============
Make sure the default settings are correctly configured for your business. To do so, go to
:menuselection:`Accounting --> Configuration --> Settings`. The following options are available:
Such transactions must be posted on a **Deferred Revenue Account** rather than on the default income
account.
Journal
The deferral entries are posted in this journal.
Deferred Expense Account
Expenses are deferred on this Current Asset account until they are recognized.
Deferred Revenue Account
Revenues are deferred on this Current Liability account until they are recognized.
Generate Entries
By default, Odoo :ref:`automatically generates <customer_invoices/deferred/generate_on_validation>`
the deferral entries when you post a customer invoice. However, you can also choose to
:ref:`generate them manually <customer_invoices/deferred/generate_manually>` by selecting the
:guilabel:`Manually & Grouped` option instead.
Amount Computation
Suppose an invoice of $1200 must be deferred over 12 months. The :guilabel:`Equal per month`
computation accounts for $100 each month, while the :guilabel:`Based on days` computation
accounts for different amounts depending on the number of days in each month.
Configure a Deferred Revenue Account
------------------------------------
.. _customer_invoices/deferred/generate_on_validation:
To configure your account in the **Chart of Accounts**, go to :menuselection:`Accounting -->
Configuration --> Chart of Accounts`, click on *Create*, and fill out the form.
Generate deferral entries on validation
=======================================
.. tip::
Make sure the :guilabel:`Start Date` and :guilabel:`End Date` fields are visible in the
:guilabel:`Invoice Lines` tab. In most cases, the :guilabel:`Start Date` should be in the same
month as the :guilabel:`Invoice Date`.
For each line of the invoice that should be deferred, specify the start and end dates of the
deferral period.
If the :guilabel:`Generate Entries` field in the **Settings** is set to :guilabel:`On invoice/bill
validation`, Odoo automatically generates the deferral entries when the invoice is validated. Click
the :guilabel:`Deferred Entries` smart button to see them.
One entry, dated on the same day as the invoice, moves the invoice amounts from the income account
to the deferred account. The other entries are deferral entries which, month after month, move
the invoice amounts from the deferred account to the income account to recognize the revenue.
.. example::
You can defer a January invoice of $1200 over 12 months by specifying a start date of 01/01/2023
and an end date of 12/31/2023. At the end of August, $800 is recognized as an income,
whereas $400 remains on the deferred account.
Reporting
=========
The deferred revenue report computes an overview of the necessary deferral entries for each account.
To access it, go to :menuselection:`Accounting --> Reporting --> Deferred Revenue`.
To view the journal items of each account, click on the account name and then :guilabel:`Journal
Items`.
.. image:: deferred_revenues/deferred_revenue_report.png
:alt: Deferred revenue report
.. image:: deferred_revenues/deferred_revenues01.png
:align: center
:alt: Configuration of a Deferred Revenue Account in Odoo Accounting
.. note::
Only invoices whose accounting date is before the end of the period of the report
are taken into account.
This account's type must be either *Current Liabilities* or *Non-current Liabilities*
.. _customer_invoices/deferred/generate_manually:
Post an income to the right account
-----------------------------------
Generate grouped deferral entries manually
==========================================
Select the account on a draft invoice
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If you have a lot of deferred revenues and wish to reduce the number of journal entries created, you
can generate deferral entries manually. To do so, set the :guilabel:`Generate Entries` field in the
**Settings** to :guilabel:`Manually & Grouped`. Odoo then aggregates the deferred amounts in a
single entry.
On a draft invoice, select the right account for all the products of which the incomes must be
deferred.
At the end of each month, go to :menuselection:`Accounting --> Reporting --> Deferred Revenue` and
click the :guilabel:`Generate Entries` button. This generates two deferral entries:
.. image:: deferred_revenues/deferred_revenues02.png
:align: center
:alt: Selection of a Deferred Revenue Account on a draft invoice in Odoo Accounting
- One dated at the end of the month which aggregates, for each account, all the deferred amounts
of that month. This means that a part of the deferred revenue is recognized at the end of that
period.
- The reversal of this created entry, dated on the following day (i.e., the first day of the
next month) to cancel the previous entry.
Choose a different Income Account for specific products
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. example::
There are two invoices:
Start editing the product, go to the *Accounting* tab, select the right **Income Account**, and
save.
- Invoice A: $1200 to be deferred from 01/01/2023 to 12/31/2023
- Invoice B: $600 to be deferred from 01/01/2023 to 12/31/2023
.. image:: deferred_revenues/deferred_revenues03.png
:align: center
:alt: Change of the Income Account for a product in Odoo
In January
At the end of January, after clicking the :guilabel:`Generate Entries` button, there are the
following entries:
.. tip::
It is possible to automate the creation of revenue entries for these products (see:
`Automate the Deferred Revenues`_).
- Entry 1 dated on the 31st January:
Change the account of a posted journal item
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Line 1: Expense account -1200 -600 = **-1800** (cancelling the total of both invoices)
- Line 2: Expense account 100 + 50 = **150** (recognizing 1/12 of invoice A and invoice B)
- Line 3: Deferred account 1800 - 150 = **1650** (amount that has yet to be deferred later
on)
To do so, open your Sales Journal by going to
:menuselection:`Accounting --> Accounting --> Sales`, select the journal item you
want to modify, click on the account, and select the right one.
- Entry 2 dated on the 1st February, the reversal of the previous entry:
.. image:: deferred_revenues/deferred_revenues04.png
:align: center
:alt: Modification of a posted journal item's account in Odoo Accounting
- Line 1: Expense account **1800**
- Line 2: Deferred account **-150**
- Line 3: Expense account **-1650**
Deferred Revenues entries
=========================
In February
At the end of February, after clicking the :guilabel:`Generate Entries` button, there are the
following entries:
Create a new entry
------------------
- Entry 1 dated on the 28th February:
A **Deferred Revenues entry** automatically generates all journal entries in *draft mode*. They are
then posted one by one at the right time until the full amount of the income is recognized.
- Line 1: Expense account -1200 -600 = **-1800** (cancelling the total of both invoices)
- Line 2: Expense account 200 + 100 = **300** (recognizing 2/12 of invoice A and invoice B)
- Line 3: Deferred account 1800 - 300 = **1500** (amount that has yet to be deferred later
on)
To create a new entry, go to :menuselection:`Accounting --> Accounting --> Deferred Revenues`, click
on *Create*, and fill out the form.
- Entry 2 dated on the 1st March, the reversal of the previous entry.
Click on **select related purchases** to link an existing journal item to this new entry. Some
fields are then automatically filled out, and the journal item is now listed under the **Related
Sales** tab.
From March to October
The same computation is done for each month until October.
.. image:: deferred_revenues/deferred_revenues05.png
:align: center
:alt: Deferred Revenue entry in Odoo Accounting
In November
At the end of November, after clicking the :guilabel:`Generate Entries` button, there are the
following entries:
Once done, you can click on *Compute Revenue* (next to the *Confirm* button) to generate all the
values of the **Revenue Board**. This board shows you all the entries that Odoo will post to
recognize your revenue, and at which date.
- Entry 1 dated on the 30th November:
.. image:: deferred_revenues/deferred_revenues06.png
:align: center
:alt: Revenue Board in Odoo Accounting
- Line 1: Expense account -1200 -600 = **-1800** (cancelling the total of both invoices)
- Line 2: Expense account 1100 + 550 = **1650** (recognizing 11/12 of invoice A and invoice
B)
- Line 3: Deferred account 1800 - 1650 = **150** (amount that has yet to be deferred later
on)
What does "Prorata Temporis" mean?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Entry 2 dated on the 1st December, the reversal of the previous entry.
The **Prorata Temporis** feature is useful to recognize your revenue the most accurately possible.
In December
There is no need to generate entries in December. Indeed, if we do the computation for
December, we have an amount of 0 to be deferred.
With this feature, the first entry on the Revenue Board is computed based on the time left between
the *Prorata Date* and the *First Recognition Date* rather than the default amount of time between
recognitions.
In total
If we aggregate everything, we would have:
For example, the Revenue Board above has its first revenue with an amount of $ 4.22 rather than
$ 70.00. Consequently, the last entry is also lower and has an amount of $ 65.78.
- invoice A and invoice B
- two entries (one for the deferral and one for the reversal) for each month from January to
November
Deferred Entry from the Sales Journal
-------------------------------------
Therefore, at the end of December, invoices A and B are fully recognized as income
only once in spite of all the created entries thanks to the reversal mechanism.
You can create a deferred entry from a specific journal item in your **Sales Journal**.
To do so, open your Sales Journal by going to
:menuselection:`Accounting --> Accounting --> Sales`, and select the journal item you want to defer.
Make sure that it is posted in the right account (see:
`Change the account of a posted journal item`_).
Then, click on *Action*, select **Create Deferred Entry**, and fill out the form the same way you
would do to `create a new entry`_.
.. image:: deferred_revenues/deferred_revenues07.png
:align: center
:alt: Create Deferred Entry from a journal item in Odoo Accounting
Deferred Revenue Models
=======================
You can create **Deferred Revenue Models** to create your Deferred Revenue entries faster.
To create a model, go to :menuselection:`Accounting --> Configuration --> Deferred Revenue Models`,
click on *Create*, and fill out the form the same way you would do to create a new entry.
.. tip::
You can also convert a *confirmed Deferred Revenue entry* into a model by
opening it from :menuselection:`Accounting --> Accounting --> Deferred
Revenues` and then, by clicking on the button *Save Model*.
Apply a Deferred Revenue Model to a new entry
---------------------------------------------
When you create a new Deferred Revenue entry, fill out the **Deferred Revenue Account** with the
right recognition account.
New buttons with all the models linked to that account appear at the top of the form. Clicking on a
model button fills out the form according to that model.
.. image:: deferred_revenues/deferred_revenues08.png
:align: center
:alt: Deferred Revenue model button in Odoo Accounting
.. _deferred-revenues-automation:
Automate the Deferred Revenues
==============================
When you create or edit an account of which the type is either *Current Liabilities* or *Non-current
Liabilities*, you can configure it to defer the revenues that are credited on it automatically.
You have three choices for the **Automate Deferred Revenue** field:
#. **No:** this is the default value. Nothing happens.
#. **Create in draft:** whenever a transaction is posted on the account, a draft *Deferred Revenues
entry* is created, but not validated. You must first fill out the form in
:menuselection:`Accounting --> Accounting --> Deferred Revenues`.
#. **Create and validate:** you must also select a Deferred Revenue Model (see:
`Deferred Revenue Models`_). Whenever a transaction is posted on the account, a *Deferred
Revenues entry* is created and immediately validated.
.. image:: deferred_revenues/deferred_revenues09.png
:align: center
:alt: Automate Deferred Revenue on an account in Odoo Accounting
.. tip::
You can, for example, select this account as the default **Income Account** of a product to fully
automate its sale. (see: `Choose a different Income Account for specific products`_).
.. seealso::
* :doc:`../get_started/chart_of_accounts`
* `Odoo Academy: Deferred Revenues (Recognition) <https://www.odoo.com/r/EWO>`_
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

@@ -102,176 +102,37 @@ The `Peppol <https://peppol.org/about/>`_ network ensures the exchange of docume
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.
Odoo is an **access point** and an :abbr:`SMP (Service Metadata Publisher)`, enabling electronic
invoicing transactions without the need to send invoices and bills by email or post.
Configuration
-------------
If not done yet, :ref:`install <general/install>` the :guilabel:`Peppol` module (`account_peppol`).
First, :ref:`install <general/install>` the :guilabel:`Peppol` module (`account_peppol`).
.. important::
- Peppol registration is **free** and available in Odoo Community
- You can send **Customer Invoices** and **Credit Notes** and receive **Vendor Bills** and
**Refunds** via Peppol.
- You can send in one of the following supported document formats: **BIS Billing 3.0, XRechnung
CIUS, NLCIUS**.
- | The following **countries** are eligible for **Peppol registration in Odoo**:
| Andorra, Albania, Austria, Bosnia and Herzegovina, Belgium, Bulgaria, Switzerland, Cyprus,
Czech Republic, Germany, Denmark, Estonia, Spain, Finland, France, United Kingdom, Greece,
Croatia, Hungary, Ireland, Iceland, Italy, Liechtenstein, Lithuania, Luxembourg, Latvia,
Monaco, Montenegro, North Macedonia, Malta, Netherlands, Norway, Poland, Portugal, Romania,
Serbia, Sweden, Slovenia, Slovakia, San Marino, Turkey, Holy See (Vatican City State)
.. image:: electronic_invoicing/peppol-module.png
:alt: Peppol module install
Registration
------------
Then, go to :menuselection:`Accounting --> Configuration --> Settings`, tick the
:guilabel:`Use PEPPOL Invoicing`, and fill in the following information:
Go to :menuselection:`Accounting --> Configuration --> Settings`. If you do not have the
Peppol module installed, first tick the :guilabel:`Enable PEPPOL` checkbox and then **manually
save**.
.. image:: electronic_invoicing/peppol-install.png
:alt: Peppol module installation
Fill in the following information:
- :guilabel:`Peppol EAS`. This is the Peppol Electronic Address Scheme and usually depends on your
company's country. Odoo often prefills this with the most commonly used EAS code in your country.
For example, the preferred EAS code for most companies in Belgium is 0208.
- :guilabel:`Peppol Endpoint`. This is usually a Company Registry number or a VAT number.
- `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`
.. seealso::
- `Peppol EAS - European Commision <https://ec.europa.eu/digital-building-blocks/wikis/display/DIGITAL/Code+lists/>`_
- `Peppol Endpoint - OpenPeppol eDEC Code Lists <https://docs.peppol.eu/edelivery/codelists/>`_
(open the "Participant Identifier Schemes" as HTML page)
If you are migrating from another access point, insert the :guilabel:`Migration key` from the
previous provider.
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 :guilabel:`Validate registration`. If you want to explore or demo Peppol, you can
choose to register in :guilabel:`Demo` mode. Otherwise, select :guilabel:`Live`.
Finally, click on :guilabel:`Validate registration`.
.. image:: electronic_invoicing/peppol-demo-mode.png
:alt: Peppol demo mode selection
.. note::
When testing Peppol, the system parameter `account_peppol.edi.mode` can be changed to `test`.
Then, a radio button appears with the option to register on the test server.
.. image:: electronic_invoicing/peppol-system-parameter.png
:alt: Peppol test mode parameter
.. image:: electronic_invoicing/peppol-test-mode-settings.png
:alt: Peppol test mode selection
Now, you can request a verification code to be sent to you by clicking :guilabel:`Verify phone
number`.
.. image:: electronic_invoicing/peppol-registration-verify.png
:alt: phone validation request verification
A text message containing a code is sent to the phone number provided to finalize the verification
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
Once you enter the code and click :guilabel:`Confirm`, you can see that your registration is pending
activation. From this point onwards, the default journal for receiving Vendor Bills can be set.
.. image:: electronic_invoicing/peppol-registration-pending.png
:alt: pending application
It should be automatically activated within a day.
.. tip::
It is also possible to manually trigger the cron that checks the registration status by going to
:menuselection:`Settings --> Technical --> Scheduled Actions --> PEPPOL\: update participant
status`.
Your application status should be updated soon after you are registered on the Peppol network.
.. image:: electronic_invoicing/peppol-registration-active.png
:alt: active application
All invoices and vendor bills can now be sent directly using the Peppol network.
Contact verification
--------------------
Before sending an invoice to a contact using the Peppol network, it is necessary to verify that they
are also registered as a Peppol participant.
To do so, go to :menuselection:`Accounting --> Customers --> Customers` and open the customer's
form. Then go to :menuselection:`Accounting tab --> Electronic Invoicing`, select the correct
format, and make sure their :guilabel:`Peppol EAS code` and the :guilabel:`Endpoint` are filled in.
Then, click :guilabel:`Verify`. If the contact exists on the network, their Peppol endpoint validity
is set to Valid.
.. image:: electronic_invoicing/peppol-contact-verify.png
:alt: verify contact registration
.. important::
While Odoo prefills both the EAS code and the Endpoint number based on the information available
for a contact, it is better to confirm these details directly with the contact.
It is possible to verify the Peppol participant status of several customers at once.
To do so, go to :menuselection:`Accounting --> Customers --> Customers` and switch to the list view.
Select the customers you want to verify and then click :menuselection:`Actions --> Verify Peppol`.
Send invoices
-------------
Once ready to send an invoice via the Peppol network, simply click :guilabel:`Send & Print` on the
invoice form. To queue multiple invoices, select them in the list view and click
:menuselection:`Actions --> Send & Print`; they will be sent in a batch later on. Both
:guilabel:`BIS Billing 3.0` and :guilabel:`Send via PEPPOL` checkboxes need to be ticked.
.. image:: electronic_invoicing/peppol-send-print.png
:alt: Send peppol invoice
Posted invoices that can be sent via Peppol are marked as :guilabel:`Peppol Ready`.
To display them, use the :guilabel:`Peppol Ready` filter or access the Accounting dashboard and
click :guilabel:`Peppol ready invoices` on the corresponding sales journal.
.. image:: electronic_invoicing/peppol-ready-invoices.png
:alt: Filter Peppol ready invoices
Once the invoices are sent via Peppol, the status is changed to :guilabel:`Processing`. The
status is changed to `Done` after they have been successfully delivered to the contact's Access
Point.
.. image:: electronic_invoicing/peppol-message-processing.png
:alt: Peppol message status
.. tip::
By default, the Peppol status column is hidden on the Invoices list view. You can choose to have
it displayed by selecting it from the optional columns, accessible from the top right corner of
the Invoices list view.
A cron runs regularly to check the status of these invoices. It is possible to check the status
before the cron runs by clicking :guilabel:`Fetch Peppol invoice status` in the corresponding
sales journal on the Accounting dashboard.
.. image:: electronic_invoicing/peppol-fetch-message-status.png
:alt: Fetch invoice Peppol status
Receive vendor bills
--------------------
Once a day, a cron checks whether any new documents have been sent to you via the Peppol network.
These documents are imported, and the corresponding vendor bills are created automatically as
drafts.
.. image:: electronic_invoicing/peppol-receive-bills.png
:alt: peppol receive bills
If you want to retrieve incoming Peppol documents before the cron runs, you can do so from the
Accounting dashboard on the main Peppol purchase journal that you set up in the settings. Just click
:guilabel:`Fetch from Peppol`.
.. image:: electronic_invoicing/peppol-fetch-bills.png
:alt: Fetch bills from Peppol
All invoices and vendor bills are now sent directly using the Peppol network.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

@@ -25,9 +25,7 @@ transportation, insurance, customs clearance, and other relevant aspects of the
- **DDP**: Delivered duty paid
.. seealso::
- :doc:`../reporting/intrastat`
- :doc:`../customer_invoices`
- :doc:`../vendor_bills`
:doc:`../reporting/intrastat`
.. _incoterms/invoices:
@@ -37,16 +35,6 @@ Define an Incoterm
To define an Incoterm manually, create an invoice or bill, click the :guilabel:`Other Info` tab, and
select the :guilabel:`Incoterm`.
Incoterm location
-----------------
A location relevant to the chosen Incoterm can be added to the invoice or bill under
:guilabel:`Other Info` in the :guilabel:`Incoterm Location` field.
.. example::
If the chosen Incoterm code is `CIF` (Cost, Insurance, Freight), the associated location might be
the destination port where the goods will be delivered.
.. _incoterms/default:
Default Incoterm configuration
@@ -3,6 +3,7 @@ Average price on returned goods
===============================
.. |AVCO| replace:: :abbr:`AVCO (Average Cost Valuation)`
.. _inventory/avg_cost/definition:
*Average cost valuation* (AVCO) is an inventory valuation method that evaluates cost based on the
@@ -3,39 +3,48 @@ Chart of accounts
=================
The **chart of accounts (COA)** is the list of all the accounts used to record financial
transactions in the general ledger of an organization. The chart of accounts can be found under
:menuselection:`Accounting --> Configuration --> Chart of Accounts`.
transactions in the general ledger of an organization.
When browsing your chart of accounts, you can sort the accounts by :guilabel:`Code`,
:guilabel:`Account Name`, or :guilabel:`Type`, but other options are available in the drop-down menu
The accounts are usually listed in the order of appearance in the financial reports. Most of the
time, they are listed as follows :
.. image:: chart_of_accounts/drop-down.png
:alt: Drop-down toggle button
- Balance Sheet accounts:
.. image:: chart_of_accounts/chart-of-accounts-sort.png
- Assets
- Liabilities
- Equity
- Profit & Loss:
- Income
- Expense
When browsing your chart of accounts, you can filter the accounts by number, in the left column, and
also group them by :guilabel:`Account Type`.
.. image:: chart_of_accounts/chart-of-accounts.png
:align: center
:alt: Group the accounts by type in Odoo Accounting
Configuration of an account
===========================
The country you select during the creation of your database (or additional company in your database)
determines which :doc:`fiscal localization package <../../fiscal_localizations>` is installed by
default. This package includes a standard chart of accounts already configured according to the
country's regulations. You can use it directly or set it according to your company's needs.
To create a new account, go to :menuselection:`Accounting --> Configuration --> Chart of Accounts`,
click :guilabel:`Create`, and fill in (at the minimum) the required fields
(:guilabel:`Code, Account Name, Type`).
The country you select at the creation of your database (or additional company on your database)
determines which **fiscal localization package** is installed by default. This package includes a
standard chart of accounts already configured according to the country's regulations. You can use
it directly or set it according to your company's needs.
.. warning::
It is not possible to modify the **fiscal localization** of a company once a journal entry has
been posted.
To create a new account, go to :menuselection:`Accounting --> Configuration --> Chart of Accounts`,
click on :guilabel:`Create`, and fill out the form.
Code and name
-------------
Each account is identified by its :guilabel:`Code` and :guilabel:`Name`, which also indicate the
account's purpose.
Each account is identified by its **code** and **name**, which also indicates the account's purpose.
.. _chart-of-account/type:
@@ -50,7 +59,7 @@ Correctly configuring the **account type** is critical as it serves multiple pur
- Generate opening entries
To configure an account type, open the :guilabel:`Type` field's drop-down selector and select the
corresponding type from the following list:
right type among the following list:
+---------------+--------------+-------------------------+
| Report | Category | Account Types |
@@ -92,33 +101,32 @@ corresponding type from the following list:
|Other | Other | Off-Balance Sheet |
+---------------+--------------+-------------------------+
Assets
~~~~~~
Assets, deferred expenses, and deferred revenues automation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Some **account types** can **automate** the creation of :ref:`asset <assets-automation>` entries.
To **automate** entries, click :guilabel:`View` on an account line and go to the
:guilabel:`Automation` tab.
Some **account types** display a new field **to automate** the creation of :ref:`assets
<assets-automation>` entries, :ref:`deferred expenses <deferred-expenses-automation>` entries,
and :ref:`deferred revenues <deferred-revenues-automation>` entries.
You have three choices for the :guilabel:`Automation` tab:
You have three choices for the :guilabel:`Automation` field:
#. :guilabel:`No`: this is the default value. Nothing happens.
#. :guilabel:`Create in draft`: whenever a transaction is posted on the account, a draft entry is
created but not validated. You must first fill out the corresponding form.
#. :guilabel:`Create and validate`: you must also select a :guilabel:`Deferred Expense Model`.
Whenever a transaction is posted on the account, an entry is created and immediately validated.
created, but not validated. You must first fill out the corresponding form.
#. :guilabel:`Create and validate`: you must also select a **model**. Whenever a transaction is
posted on the account, an entry is created and immediately validated.
Default taxes
-------------
In the :guilabel:`View` menu of an account, select a **default tax** to be applied when this
account is chosen for a product sale or purchase.
Select a **default tax** that will be applied when this account is chosen for a product sale or
purchase.
Tags
----
Some accounting reports require **tags** to be set on the relevant accounts. To add a tag, under
:guilabel:`View`, click the :guilabel:`Tags` field and select an existing tag or :guilabel:`Create`
a new one.
Some accounting reports require **tags** to be set on the relevant accounts. By default, you can
choose among the tags that are used by the *Cash Flow Statement*.
Account groups
--------------
@@ -126,29 +134,31 @@ Account groups
**Account groups** are useful to list multiple accounts as *sub-accounts* of a bigger account and
thus consolidate reports such as the **Trial Balance**. By default, groups are handled automatically
based on the code of the group. For example, a new account `131200` is going to be part of the group
`131000`. You can attribute a specific group to an account in the :guilabel:`Group` field under
:guilabel:`View`.
`131000`.
Create account groups manually
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
------------------------------
.. note::
Regular users should not need to create account groups manually. The following section is only
intended for rare and advanced use cases.
To create a new account group, activate :ref:`developer mode <developer-mode>` and head to
:menuselection:`Accounting --> Configuration --> Account Groups`. Here, create a new group and enter
the :guilabel:`name, code prefix, and company` to which that group account should be available. Note
that you must enter the same code prefix in both :guilabel:`From` and :guilabel:`to` fields.
To create a new account group, :ref:`developer mode <developer-mode>` and head to
:menuselection:`Accounting app --> Configuration --> Account Groups`. Here, create a new group and
enter the :guilabel:`name, code prefix, and company` to which that group account should be
available. Note that you must enter the same code prefix in both :guilabel:`From` and :guilabel:`to`
fields.
.. image:: chart_of_accounts/account-groups.png
:align: center
:alt: Account groups creation.
To display your **Trial Balance** report with your account groups, go to
:menuselection:`Accounting --> Reporting --> Trial Balance`, then open the :guilabel:`Options` menu
and select :guilabel:`Hierarchy and Subtotals`.
To display your **Trial Balance** report with your account groups, go to :menuselection:`Accounting
app-->Reporting-->Trial Balance`, then open the :guilabel:`Options` menu and select
:guilabel:`Hierarchy and Subtotals`.
.. image:: chart_of_accounts/chart-of-accounts-groups.png
.. image:: chart_of_accounts/trial-balance.png
:align: center
:alt: Account Groups in the Trial Balance in Odoo Accounting
Allow reconciliation
@@ -161,18 +171,15 @@ For example, an invoice paid with a credit card can be marked as :guilabel:`paid
its payment. Therefore, the account used to record credit card payments needs to be configured as
**allowing reconciliation**.
To do so, check the :guilabel:`Allow Reconciliation` box in the account's settings, and
:guilabel:`Save`; or enable the button from the chart of accounts view.
.. image:: chart_of_accounts/chart-of-accounts-reconciliation.png
:alt: Allow reconciliation for accounts in Odoo Accounting
To do so, check the :guilabel:`Allow Reconciliation` box in the account's settings, and save.
Deprecated
----------
It is not possible to delete an account once a transaction has been recorded on it. You can make
them unusable by using the **Deprecated** feature: check the :guilabel:`Deprecated` box in the
account's settings, and :guilabel:`Save`.
them unusable by using the **Deprecated** feature.
To do so, check the :guilabel:`Deprecated` box in the account's settings, and save.
.. seealso::
* :doc:`cheat_sheet`
Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 461 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

@@ -4,15 +4,15 @@
Payments
========
In Odoo, payments can either be automatically linked to an invoice or bill or be stand-alone records
for use at a later date:
In Odoo, payments can either be linked automatically to an invoice or bill or be stand-alone records
for use at a later date.
- If a payment is **linked to an invoice or bill**, it reduces/settles the amount due of the
invoice. You can have multiple payments related to the same invoice.
If a payment is **linked to an invoice or bill**, it reduces the amount due of the invoice. You can
have multiple payments related to the same invoice.
- If a payment is **not linked to an invoice or bill**, the customer has an outstanding credit with
your company, or your company has an outstanding debit with a vendor. You can use those
outstanding amounts to reduce/settle unpaid invoices/bills.
If a payment is **not linked to an invoice or bill**, the customer has an outstanding credit with
your company, or your company has an outstanding debit with a vendor. You can use those outstanding
amounts to reduce unpaid invoices/bills.
.. seealso::
- :doc:`Internal transfers <payments/internal_transfers>`
@@ -23,54 +23,59 @@ for use at a later date:
Registering payment from an invoice or bill
===========================================
When clicking :guilabel:`Register payment` in a customer invoice or vendor bill, it generates a new
journal entry and changes the amount due according to the payment amount. The counterpart is
reflected in an :ref:`outstanding <bank/outstanding-accounts>` **receipts** or **payments** account.
At this point, the customer invoice or vendor bill is marked as :guilabel:`In payment`. Then, when
the outstanding account is reconciled with a bank statement line, the invoice or vendor bill changes
to the :guilabel:`Paid` status.
When clicking on :guilabel:`Register payment` in a customer invoice or vendor bill, it generates a
new journal entry and changes the amount due according to the amount of the payment. The counterpart
is reflected in an outstanding receipts or payments account. At this point, the customer invoice or
vendor bill is marked as :guilabel:`In payment`. Then, when the outstanding account is reconciled
with a bank statement line, the invoice or vendor bill changes to the :guilabel:`Paid` status.
The information icon near the payment line displays more information about the payment. You can
access additional information, such as the related journal, by clicking :guilabel:`View`.
access additional information, such as the related journal, by clicking on :guilabel:`View`.
.. image:: payments/information-icon.png
:alt: See detailed information of a payment.
:alt: See detailed information of a payment
.. note::
- The customer invoice or vendor bill must be in the :guilabel:`Posted` status to register the
- The customer invoice or vendor bill should be in the status :guilabel:`Posted` to register the
payment.
- If you unreconcile a payment, it still appears in your books but is no longer linked to the
- When clicking on :guilabel:`Register payment`, you can select the amount to pay and make a
partial or full payment.
- If your main bank account is set as :ref:`outstanding account
<bank/outstanding-accounts>`, and the payment is made in Odoo (not related to a
bank statement), invoices and bills are directly registered in the status :guilabel:`Paid`.
- If you unreconciled a payment, it still appears in your books but is no longer linked to the
invoice.
- If you (un)reconcile a payment in a different currency, a journal entry is automatically
created to post the currency exchange gains/losses (reversal) amount.
- If you (un)reconcile a payment and an invoice having cash basis taxes, a journal entry is
automatically created to post the cash basis tax (reversal) amount.
.. tip::
- If your main bank account is set as an :ref:`outstanding account
<bank/outstanding-accounts>`, and the payment is registered in Odoo (not through a related
bank statement), invoices and bills are directly registered as :guilabel:`Paid`.
.. seealso::
- :doc:`bank/reconciliation`
Registering payments not tied to an invoice or bill
===================================================
When a new payment is registered via :menuselection:`Customers / Vendors --> Payments` menu, it is
not directly linked to an invoice or bill. Instead, the account receivable or the account payable is
matched with the **outstanding account** until it is manually matched with its related invoice or
bill.
When a new payment is registered via the menu :menuselection:`Customers / Vendors --> Payments`, it
is not directly linked to an invoice or bill. Instead, the account receivable or the account payable
are matched with the outstanding account until they are manually matched with their related invoice
or bill.
Matching invoices and bills with payments
-----------------------------------------
A blue banner appears when you validate a new invoice/bill and an **outstanding payment** exists for
this specific customer or vendor. It can easily be matched from the invoice or bill by clicking
:guilabel:`ADD` under :guilabel:`Outstanding Credits` or :guilabel:`Outstanding Debits`.
A blue banner appears when you validate a new invoice or bill and there is an outstanding payment
for this specific customer or vendor. It can easily be matched from the invoice or the bill by
clicking on :guilabel:`ADD` under :guilabel:`Outstanding Credits` or :guilabel:`Outstanding Debits`.
.. image:: payments/add-option.png
:alt: Shows the ADD option to reconcile an invoice or a bill with a payment.
:alt: Shows the ADD option to reconcile an invoice or a bill with a payment
The invoice or bill is now marked as :guilabel:`In payment` until it is reconciled with its
corresponding bank statement.
The invoice or bill is now marked as :guilabel:`In payment` until it is reconciled with the bank
statement.
.. seealso::
- :doc:`bank/reconciliation`
.. _payments/batch-payments:
@@ -78,11 +83,11 @@ Batch payment
-------------
Batch payments allow you to group different payments to ease :doc:`reconciliation
<bank/reconciliation>`. They are also useful when you deposit :doc:`checks <payments/checks>` to the
bank or for :doc:`SEPA payments <payments/pay_sepa>`. To do so, go to :menuselection:`Accounting -->
Customers --> Batch Payments` or :menuselection:`Accounting --> Vendors --> Batch Payments`. In the
list view of payments, you can select and group several payments in a batch by clicking
:menuselection:`Action --> Create Batch Payment`.
<bank/reconciliation>`. They are also useful when you deposit checks to the bank or
for SEPA Payments. To do so, go to :menuselection:`Accounting --> Customers --> Batch Payments` or
:menuselection:`Accounting --> Vendors --> Batch Payments`. In the list view of payments, you can
select several payments and group them in a batch by clicking on :menuselection:`Action --> Create
Batch Payment`.
.. seealso::
- :doc:`payments/batch`
@@ -94,50 +99,36 @@ Payments matching
-----------------
The :guilabel:`Payments matching` tool opens all unreconciled customer invoices or vendor bills and
allows you to process them individually, matching all payments and invoices in one place. You can
reach this tool from the :menuselection:`Accounting Dashboard --> Customer Invoices / Vendor Bills`,
click the drop-down menu button (:guilabel:`⋮`), and select :guilabel:`Payments Matching`, or go to
:menuselection:`Accounting --> Accounting --> Reconciliation`.
.. image:: payments/payments-journal.png
:alt: Payments matching menu in the drop-down menu.
gives you the opportunity to process them all one by one, doing the matching of all their payments
and invoices at once. You can reach this tool from the :menuselection:`Accounting Dashboard -->
Customer Invoices / Vendor Bills`, and click on :guilabel:`` and select :guilabel:`Payments
Matching`, or by going to :menuselection:`Accounting --> Reconciliation`.
.. note::
During the :doc:`reconciliation <bank/reconciliation>`, if the sum of the debits and credits does
not match, there is a remaining balance. This either needs to be reconciled at a later date or
needs to be written off directly.
During the :doc:`reconciliation <bank/reconciliation>`, if the sum of the debits
and credits does not match, there is a remaining balance. This either needs to be reconciled at a
later date or needs to be written off directly.
Batch payments matching
-----------------------
You can use the **batch reconciliation feature** to reconcile several outstanding payments or
invoices simultaneously for a specific customer or vendor. Go to your **Accounting Dashboard** and
open your **bank journal**. In the **bank reconciliation** view, select a **transaction**, and click
the :guilabel:`Batch Payments` tab. From here, you can reconcile your
:doc:`batch payments <payments/batch>` with your outstanding payments or invoices.
To reconcile several outstanding payments or invoices at once, for a specific customer or vendor,
the batch reconciliation feature can be used. Go to :menuselection:`Accounting --> Reporting -->
Aged Receivable / Aged Payable`. You now see all transactions that have not been reconciled yet, and
when you select a customer or vendor, the :guilabel:`Reconcile` option is displayed.
.. image:: payments/reconcile-option.png
:alt: The batch payment reconcile option.
Registering a partial payment
=============================
To register a **partial payment**, click :guilabel:`Register payment` from the related invoice or
bill, and enter the amount received or paid. Upon entering the amount, a prompt appears to decide
whether to :guilabel:`Keep open` the invoice or bill, or :guilabel:`Mark as fully paid`. Select
:guilabel:`Keep open` and click :guilabel:`Create payment`. The invoice or bill is now marked as
:guilabel:`Partial`. Select :guilabel:`Mark as fully paid` if you wish to settle the invoice or bill
with a difference in the amount.
.. image:: payments/payment-difference.png
:alt: Partial payment of an invoice or bill.
:alt: See the reconcile option
Reconciling payments with bank statements
=========================================
Once a payment has been registered, the status of the invoice or bill is :guilabel:`In payment`. The
next step is :doc:`reconciling <bank/reconciliation>` it with the related bank statement line to
have the transaction finalized and the invoice or bill marked as :guilabel:`Paid`.
next step is to reconcile it with the related bank statement line to have the transaction finalized
and the invoice or bill marked as :guilabel:`Paid`.
.. seealso::
- :doc:`bank/reconciliation`
.. toctree::
:titlesonly:
@@ -150,5 +141,6 @@ have the transaction finalized and the invoice or bill marked as :guilabel:`Paid
payments/internal_transfers
payments/pay_sepa
payments/pay_checks
payments/multiple
payments/forecast
payments/trusted_accounts
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

@@ -25,6 +25,7 @@ window, select the :guilabel:`Journal` linked to your bank account and :guilabel
the :guilabel:`Payment Method`, and click :guilabel:`Create Payment`.
.. image:: batch/batch-payments.png
:align: center
:alt: Registering a customer payment as part of a batch deposit
Add payments to a batch deposit
@@ -35,12 +36,14 @@ Payments`, and click :guilabel:`New`. Next, select the :guilabel:`Bank` and choo
Deposit` as the :guilabel:`Payment Method`.
.. image:: batch/batch-customer-payment.png
:align: center
:alt: Filling out a new inbound batch payment form
Click :guilabel:`Add a line`. In the pop-up window, tick all payments to include in the batch
deposit, then click :guilabel:`Select`.
.. image:: batch/batch-lines-selection.png
:align: center
:alt: Selecting all payments to include in the batch deposit
Once done, click :guilabel:`Validate` to finalize the batch deposit.
@@ -57,6 +60,7 @@ Items` on the related bank account. Go to the :guilabel:`Batch Payments` tab to
batch and click :guilabel:`Validate` to finalize the process.
.. image:: batch/batch-reconciliation.png
:align: center
:alt: Reconciling the batch payment with all its transactions
.. note::
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 17 KiB

@@ -2,72 +2,146 @@
Internal transfers
==================
Internal money transfers can be handled in Odoo. At least two bank accounts are needed to make
internal transfers.
.. seealso::
:doc:`How to add an additional bank account <../bank>`
In Odoo, internal money transfers can be made in a few clicks. You need at least either two bank
accounts, two cash journals, or one bank account and one cash journal.
Configuration
=============
An internal transfer account is automatically created on your database based on your company's
localization and depending on your countrys legislation. To modify the default :guilabel:`Internal
transfer account`, go to :menuselection:`Accounting --> Configuration --> Settings` and scroll down
to the :guilabel:`Default Accounts` section.
localization and depending on your countrys legislation. If needed, the default :guilabel:`Internal
transfer account` can be modified by going to :menuselection:`Accounting app --> Configuration -->
Settings` and then under the :guilabel:`Default Accounts` section.
.. note::
At least two bank accounts are needed to make internal transfers. Refer to
:doc:`Bank and cash accounts section <../bank>` to see how to add an additional bank
account to your database.
Register an internal transfer from one bank to another
======================================================
If you want to transfer money from one bank to another, access the Accounting Dashboard, click the
drop-down selection button (:guilabel:`⋮`) on the bank from which you want to make the transfer,
then click :guilabel:`Payments`. Select or create a payment, tick the :guilabel:`Internal Transfer`
checkbox, and select a :guilabel:`Destination Journal` before you :guilabel:`Confirm` the internal
transfer.
Let's say you have two bank accounts registered on your database and you want to transfer 1,000 USD
from Bank A to Bank B.
The money is now booked in the transfer account and another payment is automatically created in the
destination journal.
Log an internal transfer
------------------------
.. example::
From the Accounting Dashboard, click on the drop-down selection button (:guilabel:`⋮`) on one of
your banks. In the :guilabel:`New` column click on :guilabel:`Internal Transfer` and enter the
information related to the transfer.
- Bank journal (Bank A)
.. image:: internal_transfers/internal_transfer.png
:align: center
:alt: Fill in the information related to your internal transfer
.. list-table::
:header-rows: 1
:stub-columns: 1
.. note::
Fill in the :guilabel:`Memo` field for automatic reconciliation.
* - **Account**
- **Debit**
- **Credit**
* - Outstanding Payments account
-
- $1,000
* - **Internal transfer account**
- **$1,000**
-
:guilabel:`Save` and :guilabel:`Confirm` to register your internal transfer. The money is now booked
in the transfer account and another payment is **automatically** created in the destination journal
(Bank B).
- Bank journal (Bank B)
Bank journal (Bank A)
~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
:stub-columns: 1
.. list-table::
:header-rows: 1
:stub-columns: 1
* - **Account**
- **Debit**
- **Credit**
* - Outstanding Payments account
-
- $1,000
* - **Internal transfer account**
- **$1,000**
-
* - **Account**
- **Debit**
- **Credit**
* - Outstanding Receipts account
- $1,000
-
* - **Internal transfer account**
-
- **$1,000**
Automated booking - Bank journal (BANK B)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
There is **one outstanding payment** and **one outstanding receipt** pending in your two bank
account journals because the bank statement confirming the sending and receiving of the money
has not been booked yet.
.. list-table::
:header-rows: 1
:stub-columns: 1
Once this is done, you can book and reconcile your bank statement lines as usual.
* - **Account**
- **Debit**
- **Credit**
* - Outstanding Receipts account
- $1,000
-
* - **Internal transfer account**
-
- **$1,000**
.. note::
There are one outstanding payment and one outstanding receipt pending in your two bank account
journals, because the bank statement confirming the sending and receiving of the money has not
been booked yet.
.. image:: internal_transfers/outstanding-payments-receipts.png
:align: center
:alt: Outstanding Payments/Receipts pending bank statement booking
.. _interbank/import-and-reconcile:
Manage and reconcile bank statements
------------------------------------
The next step is to book the bank statements to finalize the transaction by creating,
:doc:`importing <../bank/transactions>`, or :doc:`synchronizing <../bank/bank_synchronization>` your
:guilabel:`Transactions lines`. Fill in the :guilabel:`Ending balance` and click on the
:guilabel:`Reconcile` button.
.. image:: internal_transfers/transactions-line.png
:align: center
:alt: Transaction lines to be filled in prior to reconciliation
.. seealso::
:doc:`../bank/reconciliation`
In the next window, choose counterparts for the payment - in this example, the outstanding payment
account - then click :guilabel:`Validate`.
.. image:: internal_transfers/bank-reconciliation.png
:align: center
:alt: Reconcile your payment
Bank journal entry
~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
:stub-columns: 1
* - **Account**
- **Debit**
- **Credit**
* - Outstanding Payment
- $1,000
-
* - Bank Account (BANK A)
-
- **$1,000**
The same steps must be repeated once you receive the bank statement related to Bank B. Book and
reconcile your bank statement lines.
Bank journal entry
~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
:stub-columns: 1
* - **Account**
- **Debit**
- **Credit**
* - Outstanding Receipt
-
- $1,000
* - Bank Account (BANK B)
- **$1,000**
-
Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

@@ -0,0 +1,53 @@
=========================
Pay several bills at once
=========================
Odoo offers the possibility of grouping multiple bills' payments into one, facilitating the
reconciliation process.
.. seealso::
- :doc:`/applications/inventory_and_mrp/purchase/manage_deals/manage`
- :doc:`/applications/finance/accounting/bank/reconciliation`
Group payments
==============
To register the payment of multiple bills at once, go to :menuselection:`Accounting app -->
Vendors --> Bills`. Then, select the bills you wish to register a payment for by **ticking** the
boxes next to the bills. When done, either click :guilabel:`Register Payment` or
:menuselection:`Action --> Register Payment`.
.. image:: multiple/register-payment-button.png
:align: center
:alt: Register payment button.
.. note::
Payments can only be registered for :guilabel:`posted` bills.
When registering the payments, a **pop-up window** appears. From here, you can either create
**separate payments** for each bill all at once by clicking :guilabel:`Create Payment`, *or* create
one payment by combining **all** bills' payments. To **combine** all payments, tick the
:guilabel:`Group Payments` box.
.. note::
The :guilabel:`Group Payments` option only appears when selecting two or more bills.
.. image:: multiple/multiple-group-payments.png
:align: center
:alt: Group payments options when registering a payment.
When selecting :guilabel:`Group Payments`, the :guilabel:`amount, currency, date and memo` are all
set automatically, but you can modify them according to your needs.
Partial group payments with cash discounts
------------------------------------------
In case of **partial group payments with cash discounts**, you can follow the steps found on the
:doc:`cash discount documentation page
</applications/finance/accounting/customer_invoices/cash_discounts>`. Make sure to
apply the :doc:`payment terms
</applications/finance/accounting/customer_invoices/payment_terms>` to the **bills**
*instead* of the invoices.
.. seealso::
:doc:`/applications/finance/accounting/customer_invoices/payment_terms`
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

@@ -20,11 +20,11 @@ method, making the payment process much easier.
Configuration
=============
Make sure your :doc:`payment providers are correctly configured <../../payment_providers>`.
Make sure your :ref:`Payment Providers are correctly configured <payment_providers/configuration>`.
.. note::
By default, ":doc:`Wire Transfer </applications/finance/payment_providers/wire_transfer>`" is the
only payment provider activated, but you still have to fill out the payment details.
By default, ":doc:`Wire Transfer </applications/finance/payment_providers/wire_transfer>`" is the only
Payment Provider activated, but you still have to fill out the payment details.
To activate the Invoice Online Payment, go to :menuselection:`Accounting --> Configuration -->
Settings --> Customer Payments`, enable **Invoice Online Payment**, and click on *Save*.
@@ -13,15 +13,14 @@ Activate checks payment methods
-------------------------------
To activate the checks payment method, go to :menuselection:`Accounting --> Configuration -->
Settings`, and scroll down to the :guilabel:`Vendor Payments` section. There, you can activate the
payment method as well as set up the :guilabel:`Check Layout`.
Checks`, there you can activate the payment method as well as set up the :guilabel:`Check Layout`.
Once activated the :guilabel:`Checks` setting, the feature is automatically setup for your
:guilabel:`Outgoing Payments`.
.. note::
- Once the :guilabel:`Checks` setting is activated, the **Checks** payment method is
automatically set up in the :guilabel:`Outgoing Payments` tabs of **bank** journals.
- Some countries require specific modules to print checks; such modules may be installed by
default. For instance, the :guilabel:`U.S. Checks Layout` module is required to print U.S.
checks.
Some countries require specific modules to print checks; such modules may be installed by
default. For instance, the :guilabel:`U.S. Checks Layout` module is required to print U.S.
checks.
Compatible check stationery for printing checks
===============================================
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

+119 -134
View File
@@ -13,34 +13,36 @@ supports all kinds of uses and computations.
Default taxes
=============
**Default taxes** define which taxes are automatically selected when creating a new product. They
**Default Taxes** define which taxes are automatically selected when creating a new product. They
are also used to prefill the :guilabel:`Taxes` field when adding a new line on an invoice in
:ref:`Accounting Firms <fiduciaries>` mode.
**Accounting Firms** mode.
.. image:: taxes/default-configuration.png
.. image:: taxes/default-taxes-product.png
:alt: Odoo fills out the Tax field automatically according to the Default Taxes
To change your **default taxes**, go to :menuselection:`Accounting --> Configuration --> Settings
--> Taxes --> Default Taxes`, select the appropriate taxes for your default sales tax and purchase
tax, and click on :guilabel:`Save`.
To change your **Default Taxes**, go to :menuselection:`Accounting --> Configuration --> Settings
--> Taxes --> Default Taxes`, select the appropriate taxes for your default **Sales Tax** and
**Purchase Tax**, and click on *Save*.
.. image:: taxes/default-taxes.png
.. image:: taxes/default-configuration.png
:alt: Define which taxes to use by default on Odoo
.. note::
**Default taxes** are automatically set up according to the country selected at the creation of
**Default Taxes** are automatically set up according to the country selected at the creation of
your database, or when you set up a :ref:`fiscal localization package
<fiscal_localizations/packages>` for your company.
.. _taxes/list_activation:
Activate sales taxes from the list view
Activate Sales Taxes from the List view
=======================================
As part of your :ref:`fiscal localization package <fiscal_localizations/packages>`, most of your
country's sales taxes are already preconfigured on your database. However, only a few taxes are
activated by default. To activate taxes relevant to your business, go to :menuselection:`Accounting
--> Configuration --> Taxes` and enable the toggle button under the :guilabel:`Active` column.
country's sales taxes are already preconfigured on your database. However, only a few of them are
activated by default, so that you can activate only the ones relevant for your business.
To activate Sale Taxes, go to :menuselection:`Accounting --> Configuration --> Taxes` and use the
*Activate* toggle button to activate or deactivate a tax.
.. image:: taxes/list.png
:alt: Activate pre-configured taxes in Odoo Accounting
@@ -50,32 +52,46 @@ activated by default. To activate taxes relevant to your business, go to :menuse
Configuration
=============
To edit or create a **tax**, go to :menuselection:`Accounting --> Configuration --> Taxes` and open
a tax or click on :guilabel:`New`.
To edit or create a **Tax**, go to :menuselection:`Accounting --> Configuration --> Taxes` and open
a tax or click on *Create*.
.. image:: taxes/edit.png
:alt: Edition of a tax in Odoo Accounting
Basic options
.. _taxes/labels:
.. important::
Taxes have three different labels, each one having a specific use. Refer to the following table to
see where they are displayed.
+------------------+-------------------------+-------------------------+
| :ref:`Tax Name | :ref:`Label on Invoice | :ref:`Tax Group |
| <taxes/name>` | <taxes/label-invoices>` | <taxes/tax-group>` |
+==================+=========================+=========================+
| Back end | *Taxes* column on | Above the *Total* line |
| | exported invoices | on exported invoices |
+------------------+-------------------------+-------------------------+
Basic Options
-------------
.. _taxes/name:
Tax name
Tax Name
~~~~~~~~
The **tax name** is displayed for backend users in the :guilabel:`Taxes` field in
:doc:`sales orders <../../sales/sales>`, :doc:`invoices <customer_invoices>`, product forms, etc.
The **Tax Name** as you want to display it for backend users. This is the :ref:`label
<taxes/labels>` you see while editing Sales Orders, Invoices, Products, etc.
.. _taxes/computation:
Tax computation
Tax Computation
~~~~~~~~~~~~~~~
- **Group of Taxes**
The tax is a combination of multiple sub-taxes. You can add as many taxes as you want, in the
order you want them to be applied.
The tax is a combination of multiple sub-taxes. You can add as many taxes you want, in the order
you want them to be applied.
.. important::
Make sure that the tax sequence is correct, as the order in which they are may impact the
@@ -85,93 +101,75 @@ Tax computation
- **Fixed**
The tax has a fixed amount in the default currency. The amount remains the same, regardless of the
sales price.
Sales Price.
.. example::
A product has a sales price of $1000, and we apply a $10 *fixed* tax. We then have:
For example, a product has a Sales Price of $1000, and we apply a *$10 fixed* tax. We then have:
+-------------+-------------+----------+----------+
| Product | Price | Tax | Total |
| sales price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 1,000 | 10 | 1,010.00 |
+-------------+-------------+----------+----------+
+-------------+-------------+----------+----------+
| Product's | Price | Tax | Total |
| Sales Price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 1,000 | 10 | 1,010.00 |
+-------------+-------------+----------+----------+
- **Percentage of price**
- **Percentage of Price**
The *sales price* is the taxable basis: the tax amount is computed by multiplying the sales price
by the tax percentage.
The *Sales Price* is the taxable basis: the tax's amount is computed by multiplying the Sales
Price by the tax's percentage.
.. example::
A product has a sales price of $1000, and we apply a *10% of Price* tax. We then have:
For example, a product has a Sales Price of $1000, and we apply a *10% of Price* tax. We then
have:
+-------------+-------------+----------+----------+
| Product | Price | Tax | Total |
| sales price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 1,000 | 100 | 1,100.00 |
+-------------+-------------+----------+----------+
+-------------+-------------+----------+----------+
| Product's | Price | Tax | Total |
| Sales Price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 1,000 | 100 | 1,100.00 |
+-------------+-------------+----------+----------+
- **Percentage of Price Tax Included**
The **total** is the taxable basis: the tax amount is a percentage of the total.
The *Total* is the taxable basis: the tax's amount is a percentage of the Total.
.. example::
A product has a Sales Price of $1000, and we apply a *10% of Price Tax Included* tax. We then
have:
For example, a product has a Sales Price of $1000, and we apply a *10% of Price Tax Included* tax.
We then have:
+-------------+-------------+----------+----------+
| Product | Price | Tax | Total |
| sales price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 1,000 | 111.11 | 1,111.11 |
+-------------+-------------+----------+----------+
- **Python code**
A tax defined as **Python code** consists of two snippets of Python code that are executed in a
local environment containing data such as the unit price, product or partner.
:guilabel:`Python Code` defines the amount of the tax, and :guilabel:`Applicable Code` defines if
the tax is to be applied. The formula is found at the bottom of the :guilabel:`Definition` tab.
.. example::
:guilabel:`Python Code`: `result = price_unit * 0.10`
:guilabel:`Applicable Code`: `result = true`
+-------------+-------------+----------+----------+
| Product's | Price | Tax | Total |
| Sales Price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 1,000 | 111.11 | 1,111.11 |
+-------------+-------------+----------+----------+
.. _taxes/active:
Active
~~~~~~
Only **active** taxes can be added to new documents.
Only **Active** taxes can be added to new documents.
.. important::
It is not possible to delete taxes that have already been used. Instead, you can deactivate them
to prevent future use.
.. note::
This field can be modified from the :ref:`list view <taxes/list_activation>`.
This field can be modified from the *List View*. See :ref:`above <taxes/list_activation>` for
more information.
.. _taxes/scope:
Tax type
~~~~~~~~
Tax Scope
~~~~~~~~~
The :guilabel:`Tax Type` determines the tax application, which also restricts where it is displayed.
The **Tax Scope** determines the tax's application, which also restricts where it is displayed.
- **Sales**: Customer invoices, product customer taxes, etc.
- **Purchase**: Vendor bills, product vendor taxes, etc.
- **Sales**: Customer Invoices, Product's Customer Taxes, etc.
- **Purchase**: Vendor Bills, Product's Vendor Taxes, etc.
- **None**
.. tip::
You can use :guilabel:`None` for taxes that you want to include in a :ref:`Group of Taxes
<taxes/computation>` but that you do not want to list along with other sales or purchase taxes.
Tax scope
~~~~~~~~~
The :guilabel:`Tax Scope` restricts the use of taxes to a type of product, either **goods** or
**services**.
You can use **None** for taxes that you want to include in a :ref:`Group of Taxes
<taxes/computation>` but that you don't want to list along with other Sales or Purchase taxes.
.. _taxes/definition-tab:
@@ -179,118 +177,105 @@ Definition tab
--------------
Allocate with precision the amount of the taxable basis or percentages of the computed tax to
multiple accounts and tax grids.
multiple accounts and Tax Grids.
.. image:: taxes/definition.png
:alt: Allocate tax amounts to the right accounts and tax grids
- **Based On**:
- :guilabel:`Base`: the price on the invoice line
- :guilabel:`% of tax`: a percentage of the computed tax.
- Base: the price on the invoice line
- % of tax: a percentage of the computed tax.
- **Account**: if defined, an additional journal item is recorded.
- **Tax Grids**: used to generate :doc:`tax reports <reporting/tax_returns>`
- **Account**: if defined, an additional Journal Item is recorded.
- **Tax Grids**: used to generate :doc:`Tax Reports <reporting/tax_returns>`
automatically, according to your country's regulations.
.. _taxes/advanced-tab:
Advanced options tab
Advanced Options tab
--------------------
.. _taxes/label-invoices:
Label on invoices
Label on Invoices
~~~~~~~~~~~~~~~~~
The tax label is displayed on each invoice line in the :guilabel:`Taxes` column. This is visible to
*front-end* users on exported invoices, in customer portals, etc.
The label of the tax, as displayed on each invoice line in the **Taxes** column. This is the
:ref:`label <taxes/labels>` visible to *front end* users, on exported invoices, on their Customer
Portals, etc.
.. image:: taxes/invoice-label.png
:alt: The label on invoices is displayed on each invoice line
:alt: The Label on Invoices is displayed on each invoice line
.. _taxes/tax-group:
Tax group
Tax Group
~~~~~~~~~
Select which **tax group** the tax belongs to. The tax group name is the displayed above the
**total** line on exported invoices and in customer portals.
Select to which **Tax Group** the tax belongs. The Tax Group name is the :ref:`label
<taxes/labels>` displayed above the *Total* line on exported invoices, and the Customer Portals.
Tax groups include different iterations of the same tax. This can be useful when you must record
the same tax differently according to :doc:`fiscal positions <taxes/fiscal_positions>`.
differently the same tax according to :doc:`Fiscal Positions <taxes/fiscal_positions>`.
.. example::
.. image:: taxes/invoice-tax-group.png
:alt: The Tax Group name is different from the Label on Invoices
.. image:: taxes/invoice-tax-group.png
:alt: The Tax Group name is different from the Label on Invoices
In the example above, the :guilabel:`0% EU S` tax for intra-community customers in Europe records
the amount on specific accounts and tax grids. However, it remains a 0% tax to the customer. This
is why the label indicates :guilabel:`0% EU S`, and the tax group name above the
:guilabel:`Total` line indicates :guilabel:`VAT 0%`.
.. important::
Taxes have three different labels, each one having a specific use. Refer to the following table
to see where they are displayed.
+------------------+-------------------------+-------------------------+
| :ref:`Tax Name | :ref:`Label on Invoice | :ref:`Tax Group |
| <taxes/name>` | <taxes/label-invoices>` | <taxes/tax-group>` |
+==================+=========================+=========================+
| Backend | :guilabel:`Taxes` column| Above the |
| | on exported invoices | :guilabel:`Total` line |
| | | on exported invoices |
+------------------+-------------------------+-------------------------+
In the example above, we see a 0% tax for Intra-Community customers in Europe. It records amounts on
specific accounts and with specific tax grids. Still, to the customer, it is a 0% tax. That's why
the :ref:`Label on the Invoice <taxes/label-invoices>` indicates *0% EU*, and the Tax Group name,
above the *Total* line, indicates *0%*.
.. _taxes/analytic-cost:
Include in analytic cost
Include in Analytic Cost
~~~~~~~~~~~~~~~~~~~~~~~~
With this option activated, the tax amount is assigned to the same **analytic account** as the
With this option activated, the tax's amount is assigned to the same **Analytic Account** as the
invoice line.
.. _taxes/included-in-price:
Included in price
Included in Price
~~~~~~~~~~~~~~~~~
With this option activated, the total (including the tax) equals the **sales price**.
With this option activated, the total (including the tax) equals the **Sales Price**.
`Total = Sales Price = Computed Tax-Excluded price + Tax`
:dfn:`Total = Sales Price = Computed Tax-Excluded price + Tax`
.. example::
A product has a sales price of $1000, and we apply a *10% of Price* tax, which is *included in
the price*. We then have:
For example, a product has a Sales Price of $1000, and we apply a *10% of Price* tax, which is
*included in the price*. We then have:
+-------------+-------------+----------+----------+
| Product | Price | Tax | Total |
| sales price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 900.10 | 90.9 | 1,000.00 |
+-------------+-------------+----------+----------+
+-------------+-------------+----------+----------+
| Product's | Price | Tax | Total |
| Sales Price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 900.10 | 90.9 | 1,000.00 |
+-------------+-------------+----------+----------+
.. note::
If you need to define prices accurately, both tax-included and tax-excluded, please refer to the
following documentation: :doc:`taxes/B2B_B2C`.
.. note::
By default, only the :guilabel:`Tax excluded` column is displayed on invoices. To display the
:guilabel:`Tax included` column, click the **dropdown toggle** button and check
:guilabel:`Tax incl.`.
.. image:: taxes/toggle-button.png
- **Invoices**: By default, the Line Subtotals displayed on your invoices are *Tax-Excluded*. To
display *Tax-Included* Line Subtotals, go to :menuselection:`Accounting --> Configuration -->
Settings --> Customer Invoices`, and select *Tax-Included* in the **Line Subtotals Tax
Display** field, then click on *Save*.
- **eCommerce**: By default, the prices displayed on your eCommerce website are *Tax-Excluded*.
To display *Tax-Included* prices, go to :menuselection:`Website --> Configuration --> Settings
--> Pricing`, and select *Tax-Included* in the **Product Prices** field, then click on *Save*.
.. _taxes/base-subsequent:
Affect base of subsequent taxes
Affect Base of Subsequent Taxes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
With this option, the total tax-included becomes the taxable basis for the other taxes applied to
the same product.
You can configure a new :ref:`group of taxes <taxes/computation>` to include this tax or add it
You can configure a new :ref:`Group of Taxes <taxes/computation>` to include this tax, or add it
directly to a product line.
.. image:: taxes/subsequent-line.png
@@ -308,9 +293,9 @@ directly to a product line.
:alt: The taxes' sequence in Odoo determines which tax is applied first
.. seealso::
- :doc:`taxes/fiscal_positions`
- :doc:`taxes/B2B_B2C`
- :doc:`taxes/taxcloud`
- :doc:`reporting/tax_returns`
.. toctree::
Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

@@ -2,41 +2,69 @@
Withholding taxes
=================
A **withholding tax**, also known as retention tax, mandates the payer of a customer invoice to
deduct a tax from the payment and remit it to the government. Typically, a tax is included in the
subtotal to calculate the total amount paid, while withholding taxes are directly subtracted from
the payment.
A withholding tax, also called a retention tax, is a government
requirement for the payer of a customer invoice to withhold or deduct
tax from the payment, and pay that tax to the government. In most
jurisdictions, withholding tax applies to employment income.
With normal taxes, the tax is added to the subtotal to give you the
total to pay. As opposed to normal taxes, withholding taxes are deducted
from the amount to pay, as the tax will be paid by the customer.
As, an example, in Colombia you may have the following invoice:
.. image:: retention/retention03.png
:align: center
In this example, the **company** who sent the invoice owes $20 of taxes to
the **government** and the **customer** owes $10 of taxes to the **government**.
Configuration
=============
In Odoo, a withholding tax is defined by creating a negative tax. To create one, go
to :menuselection:`Accounting --> Configuration --> Taxes` and, in the :guilabel:`Amount` field,
enter a negative amount.
In Odoo, a withholding tax is defined by creating a negative tax. For a
retention of 10%, you would configure the following tax (accessible
through :menuselection:`Configuration --> Taxes`):
.. image:: retention/negative-amount.png
:alt: negative tax amount in field
.. image:: retention/retention04.png
:align: center
Then, go to the :menuselection:`Advanced Options` tab and create a retention :guilabel:`Tax Group`.
In order to make it appear as a retention on the invoice, you should set
a specific tax group **Retention** on your tax, in the **Advanced Options**
tab.
.. image:: retention/tax-group.png
:alt: tax group for retention tax.
.. image:: retention/retention02.png
:align: center
Once the tax is defined, you can use it in your products, sales order or
invoices.
.. tip::
If the retention is a percentage of a regular tax, create a :guilabel:`Tax` with a
:guilabel:`Tax Computation` as a :guilabel:`Group of Taxes`. Then, set both the regular tax and
the retention one in the :guilabel:`Definition` tab.
If the retention is a percentage of a regular tax, create a Tax with a
**Tax Computation** as a **Tax Group** and set the two taxes in this group
(normal tax and retention).
Retention taxes on invoices
===========================
Applying retention taxes on invoices
====================================
Once the retention tax has been created, it can be used on customer forms, sales orders, and
customer invoices.
Several taxes can be applied on a single customer invoice line.
Once your tax is created, you can use it on customer forms, sales order
or customer invoices. You can apply several taxes on a single customer
invoice line.
.. image:: retention/invoice-tax.png
:alt: invoice lines with taxes
.. image:: retention/retention01.png
:align: center
.. note::
When you see the customer invoice on the screen, you get only a
**Taxes line** summarizing all the taxes (normal taxes & retentions).
But when you print or send the invoice, Odoo does the correct
grouping amongst all the taxes.
The printed invoice will show the different amounts in each tax group.
.. image:: retention/retention03.png
:align: center
.. seealso::
:doc:`../taxes`
* :doc:`../taxes`
Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

@@ -3,12 +3,9 @@ TaxCloud integration
====================
.. warning::
The out-of-the-box Odoo TaxCloud integration has begun its decommissioning. Starting in Odoo 17,
new installations are prohibited, and in Odoo 18 the TaxCloud module(s) won't exist at all. Odoo
recommends the use of the Avatax platform.
If you are hosted on-premise or on Odoo.SH and you wish to use Taxcloud, you can contact them
directly `here <https://taxcloud.com/blog/odoo-integration/>`_.
The Odoo TaxCloud integration has begun its decommissioning, starting in Odoo 17. New
installations are prohibited in Odoo 17, and in Odoo 18, the TaxCloud module(s) won't exist at
all. Odoo recommends the use of the Avatax platform.
.. seealso::
:doc:`avatax`
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

@@ -1,176 +1,195 @@
=================
Deferred expenses
=================
=================================
Deferred expenses and prepayments
=================================
**Deferred expenses** and **prepayments** (also known as **prepaid expenses**) are both costs that
have already occurred for products or services yet to be received.
**Deferred expenses** and **prepayments** (also known as **prepaid expense**), are both costs that
have already occurred for unconsumed products or services yet to receive.
Such costs are **assets** for the company that pays them since it already paid for products and
services but has either not yet received them or not yet used them. The company cannot report them
on the current **profit and loss statement**, or *income statement*, since the payments will be
effectively expensed in the future.
services still to receive or that are yet to be used. The company cannot report them on the current
**Profit and Loss statement**, or *Income Statement*, since the payments will be effectively
expensed in the future.
These future expenses must be deferred on the company's balance sheet until the moment in time they
can be **recognized**, at once or over a defined period, on the profit and loss statement.
can be **recognized**, at once or over a defined period, on the Profit and Loss statement.
For example, let's say we pay $1200 at once for one year of insurance. We already pay the cost now
For example, let's say we pay $ 1200 at once for one year of insurance. We already pay the cost now
but haven't used the service yet. Therefore, we post this new expense in a *prepayment account* and
decide to recognize it on a monthly basis. Each month, for the next 12 months, $100 will be
decide to recognize it on a monthly basis. Each month, for the next 12 months, $ 100 will be
recognized as an expense.
Odoo Accounting handles deferred expenses by spreading them across multiple entries that are
posted periodically.
Odoo Accounting handles deferred expenses and prepayments by spreading them in multiple entries that
are automatically created in *draft mode* and then posted periodically.
.. note::
The server checks once a day if an entry must be posted. It might then take up to 24 hours before
you see a change from :guilabel:`Draft` to :guilabel:`Posted`.
you see a change from *draft* to *posted*.
Configuration
Prerequisites
=============
Make sure the default settings are correctly configured for your business. To do so, go to
:menuselection:`Accounting --> Configuration --> Settings`. The following options are available:
Such transactions must be posted on a **Deferred Expense Account** rather than on the default
expense account.
Journal
The deferral entries are posted in this journal.
Deferred Expense Account
Expenses are deferred on this Current Asset account until they are recognized.
Deferred Revenue Account
Revenues are deferred on this Current Liability account until they are recognized.
Generate Entries
By default, Odoo :ref:`automatically generates <vendor_bills/deferred/generate_on_validation>`
the deferral entries when you post a vendor bill. However, you can also choose to
:ref:`generate them manually <vendor_bills/deferred/generate_manually>` by selecting the
:guilabel:`Manually & Grouped` option instead.
Amount Computation
Suppose a bill of $1200 must be deferred over 12 months. The :guilabel:`Equal per month`
computation recognizes $100 each month, while the :guilabel:`Based on days` computation recognizes
different amounts depending on the number of days in each month.
Configure a Deferred Expense Account
------------------------------------
.. _vendor_bills/deferred/generate_on_validation:
To configure your account in the **Chart of Accounts**, go to :menuselection:`Accounting -->
Configuration --> Chart of Accounts`, click on *Create*, and fill out the form.
Generate deferral entries on validation
=======================================
.. tip::
Make sure the :guilabel:`Start Date` and :guilabel:`End Date` fields are visible in the
:guilabel:`Invoice Lines` tab. In most cases, the :guilabel:`Start Date` should be in the same
month as the :guilabel:`Bill Date`.
For each line of the bill that should be deferred, specify the start and end dates of the deferral
period.
If the :guilabel:`Generate Entries` field is set to :guilabel:`On invoice/bill validation`, Odoo
automatically generates the deferral entries when the bill is validated. Click on the
:guilabel:`Deferred Entries` smart button to see them.
One entry, dated on the same day as the bill, moves the bill amounts from the expense account to
the deferred account. The other entries are deferral entries which will, month after month, move the
bill amounts from the deferred account to the expense account to recognize the expense.
.. example::
You can defer a January bill of $1200 over 12 months by specifying a start date of 01/01/2023
and an end date of 12/31/2023. At the end of August, $800 is recognized as an expense,
whereas $400 remains on the deferred account.
Reporting
=========
The deferred expense report computes an overview of the necessary deferral entries for each account.
To access it, go to :menuselection:`Accounting --> Reporting --> Deferred Expense`.
To view the journal items of each account, click on the account name and then :guilabel:`Journal
Items`.
.. image:: deferred_expenses/deferred_expense_report.png
:alt: Deferred expense report
.. image:: deferred_expenses/deferred_expenses01.png
:align: center
:alt: Configuration of a Deferred Expense Account in Odoo Accounting
.. note::
Only bills whose accounting date is before the end of the period of the report
are taken into account.
This account's type must be either *Current Assets* or *Prepayments*
.. _vendor_bills/deferred/generate_manually:
Post an expense to the right account
------------------------------------
Generate grouped deferral entries manually
==========================================
Select the account on a draft bill
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If you have a lot of deferred revenues and wish to reduce the number of journal entries created, you
can generate deferral entries manually. To do so, set the :guilabel:`Generate Entries` field in the
**Settings** to :guilabel:`Manually & Grouped`. Odoo then aggregates the deferred amounts in a
single entry.
On a draft bill, select the right account for all the products of which the expenses must be
deferred.
At the end of each month, go to the Deferred Expenses report and click the
:guilabel:`Generate Entries` button. This generates two deferral entries:
.. image:: deferred_expenses/deferred_expenses02.png
:align: center
:alt: Selection of a Deferred Expense Account on a draft bill in Odoo Accounting
- One dated at the end of the month which aggregates, for each account, all the deferred amounts
of that month. This means that at the end of that period, a part of the deferred expense is
recognized.
- The reversal of this created entry, dated on the following day (i.e., the first day of the
next month) to cancel the previous entry.
Choose a different Expense Account for specific products
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. example::
Start editing the product, go to the *Accounting* tab, select the right **Expense Account**, and
save.
There are two bills:
.. image:: deferred_expenses/deferred_expenses03.png
:align: center
:alt: Change of the Expense Account for a product in Odoo
- Bill A: $1200 to be deferred from 01/01/2023 to 12/31/2023
- Bill B: $600 to be deferred from 01/01/2023 to 12/31/2023
.. tip::
It is possible to automate the creation of expense entries for these products (see:
`Automate the Deferred Expenses`_).
In January
At the end of January, after clicking the :guilabel:`Generate Entries` button,
there are the following entries:
Change the account of a posted journal item
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Entry 1 dated on the 31st January:
To do so, open your Purchases Journal by going to :menuselection:`Accounting --> Accounting -->
Purchases`, select the journal item you want to modify, click on the account, and select the right
one.
- Line 1: Expense account -1200 -600 = **-1800** (cancelling the total of both bills)
- Line 2: Expense account 100 + 50 = **150** (recognizing 1/12 of bill A and bill B)
- Line 3: Deferred account 1800 - 150 = **1650** (amount that has yet to be deferred later
on)
.. image:: deferred_expenses/deferred_expenses04.png
:align: center
:alt: Modification of a posted journal item's account in Odoo Accounting
- Entry 2 dated on the 1st February, the reversal of the previous entry:
Deferred Expenses entries
=========================
- Line 1: Expense account **1800**
- Line 2: Deferred account **-150**
- Line 3: Expense account **-1650**
Create a new entry
------------------
In February
At the end of February, after clicking the :guilabel:`Generate Entries` button,
there are the following entries:
A **Deferred Expense entry** automatically generates all journal entries in *draft mode*. They are
then posted one by one at the right time until the full amount of the expense is recognized.
- Entry 1 dated on the 28th February:
To create a new entry, go to :menuselection:`Accounting --> Accounting --> Deferred Expense`, click
on *Create*, and fill out the form.
- Line 1: Expense account -1200 -600 = **-1800** (cancelling the total of both bills)
- Line 2: Expense account 200 + 100 = **300** (recognizing 2/12 of bill A and bill B)
- Line 3: Deferred account 1800 - 300 = **1500** (amount that has yet to be deferred later
on)
Click on **select related purchases** to link an existing journal item to this new entry. Some
fields are then automatically filled out, and the journal item is now listed under the **Related
Expenses** tab.
- Entry 2 dated on the 1st March, the reversal of the previous entry.
.. image:: deferred_expenses/deferred_expenses05.png
:align: center
:alt: Deferred Expense entry in Odoo Accounting
From March to October
The same computation is done for each month until October.
Once done, you can click on *Compute Deferral* (next to the *Confirm* button) to generate all the
values of the **Expense Board**. This board shows you all the entries that Odoo will post to
recognize your expense, and at which date.
In November
At the end of November, after clicking the :guilabel:`Generate Entries` button,
there are the following entries:
.. image:: deferred_expenses/deferred_expenses06.png
:align: center
:alt: Expense Board in Odoo Accounting
- Entry 1 dated on the 30th November:
What does "Prorata Temporis" mean?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Line 1: Expense account -1200 -600 = **-1800** (cancelling the total of both bills)
- Line 2: Expense account 1100 + 550 = **1650** (recognizing 11/12 of bill A and bill B)
- Line 3: Deferred account 1800 - 1650 = **150** (amount that has yet to be deferred later
on)
The **Prorata Temporis** feature is useful to recognize your expense the most accurately possible.
- Entry 2 dated on the 1st December, the reversal of the previous entry.
With this feature, the first entry on the Expense Board is computed based on the time left between
the *Prorata Date* and the *First Recognition Date* rather than the default amount of time between
recognitions.
In December
There is no need to generate entries in December. Indeed, if we do the computation for
December, we will have an amount of 0 to be deferred.
For example, the Expense Board above has its first expense with an amount of $ 70.97 rather than
$ 100.00. Consequently, the last entry is also lower and has an amount of $ 29.03.
In total
If we aggregate everything, we would have:
Deferred Entry from the Purchases Journal
-----------------------------------------
- bill A and bill B
- two entries (one for the deferral and one for the reversal) for each month from January to
November
You can create a deferred entry from a specific journal item in your **Purchases Journal**.
Therefore, at the end of December, bills A and B are fully recognized as expense only once in
spite of all the created entries thanks to the reversal mechanism.
To do so, open your Purchases Journal by going to :menuselection:`Accounting --> Accounting -->
Purchases`, and select the journal item you want to defer. Make sure that it is posted in the right
account (see: `Change the account of a posted journal item`_).
Then, click on *Action*, select **Create Deferred Entry**, and fill out the form the same way you
would do to `create a new entry`_.
.. image:: deferred_expenses/deferred_expenses07.png
:align: center
:alt: Create Deferred Entry from a journal item in Odoo Accounting
Deferred Expense Models
=======================
You can create **Deferred Expense Models** to create your Deferred Expense entries faster.
To create a model, go to :menuselection:`Accounting --> Configuration --> Deferred Expense Models`,
click on *Create*, and fill out the form the same way you would do to create a new entry.
.. tip::
You can also convert a *confirmed Deferred Expense entry* into a model by opening it from
:menuselection:`Accounting --> Accounting --> Deferred Expenses` and then, by clicking on the
button *Save Model*.
Apply a Deferred Expense Model to a new entry
---------------------------------------------
When you create a new Deferred Expense entry, fill out the **Deferred Expense Account** with the
right recognition account.
New buttons with all the models linked to that account appear at the top of the form. Clicking on a
model button fills out the form according to that model.
.. image:: deferred_expenses/deferred_expenses08.png
:align: center
:alt: Deferred Expense model button in Odoo Accounting
.. _deferred-expenses-automation:
Automate the Deferred Expenses
==============================
When you create or edit an account of which the type is either *Current Assets* or *Prepayments*,
you can configure it to defer the expenses that are credited on it automatically.
You have three choices for the **Automate Deferred Expense** field:
#. **No:** this is the default value. Nothing happens.
#. **Create in draft:** whenever a transaction is posted on the account, a draft *Deferred Expenses
entry* is created, but not validated. You must first fill out the form in
:menuselection:`Accounting --> Accounting --> Deferred Expenses`.
#. **Create and validate:** you must also select a Deferred Expense Model (see: `Deferred Expense
Models`_). Whenever a transaction is posted on the account, a *Deferred Expenses entry* is
created and immediately validated.
.. image:: deferred_expenses/deferred_expenses09.png
:align: center
:alt: Automate Deferred Expense on an account in Odoo Accounting
.. tip::
You can, for example, select this account as the default **Expense Account** of a product to
fully automate its purchase. (see: `Choose a different Expense Account for specific
products`_).
.. seealso::
* :doc:`../get_started/chart_of_accounts`
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

+3 -2
View File
@@ -40,8 +40,9 @@ drop-down menu (most products will be set to :guilabel:`Units`).
The *Sales* app is where specification on the units of measure are created and edited (e.g.
units, miles, nights, etc.). Go to :menuselection:`Sales app --> Configuration --> Settings` and
ensure `Units of Measure` is enabled in the `Product Catalog` section. Click on the
:guilabel:`Units of Measure` internal link to :doc:`view, create, and edit the units of measure
<../inventory_and_mrp/inventory/product_management/product_replenishment/uom>`.
:guilabel:`Units of Measure` internal link to view, create, and edit the units of measure. Refer
to :doc:`this document </applications/inventory_and_mrp/inventory/management/products/uom>` to
learn more about units of measure and how to configure them.
.. image:: expenses/new-expense-product.png
:align: center

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