Compare commits

...

91 Commits

Author SHA1 Message Date
Michael (mcm) dc7681af00 [IMP] web: update documentation of patch function
This commit updates the documentation of the patch function
with the changes done in https://github.com/odoo/odoo/pull/125716.
2023-08-03 12:38:53 +02:00
tiku-odoo 7e29da60b9 [IMP] Misc: Oauth Azure
closes odoo/documentation#5041

closes odoo/documentation#5255

X-original-commit: 66b2a3d50e
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
2023-08-03 00:33:44 +02:00
John Holton (hojo) 8edb63948c [IMP] Inventory: Update Multi-package shipments doc
closes odoo/documentation#5246

X-original-commit: 7df2d749a8
Signed-off-by: John Holton (hojo) <hojo@odoo.com>
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-08-02 11:16:53 +02:00
“Chiara 76c781226d [ADD] l10n: saudi arabia e-invoicing
task-3422500

closes odoo/documentation#5233

X-original-commit: 24ff6624bb
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-28 23:16:34 +02:00
Martin Trigaux fd4065b3c6 [I18N] *: export translations
closes odoo/documentation#5223

X-original-commit: 013da823cc
Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2023-07-28 10:33:22 +02:00
Xavier (XPL) b755d0330e [IMP] payments: update ACH section content to match 16.0
closes odoo/documentation#5216

X-original-commit: 992fc9f4d6
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-27 03:50:48 +02:00
Xavier (XPL) b5dbf4779a [IMP] accounting: year-end closing
task-2823858

closes odoo/documentation#5211

X-original-commit: 8c03442791
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-26 16:11:49 +02:00
Victor Feyens db05d69be6 [IMP] accounting: new behavior of the sepa provider
Sepa mandates are not automatically confirmed anymore,
customers have to make one successful bank transfer
matching the expected payment details to confirm
their mandate.

See https://github.com/odoo/odoo/commit/fd2fb212c50952ca5a8e162ba5d82ce433cd5989
See https://github.com/odoo/enterprise/commit/9b729b157b6978e10fbbed45052226f150e5559f

closes odoo/documentation#5201

X-original-commit: bc1cf93455
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-07-26 13:22:07 +02:00
Donatienne Pirlot c795231f1c [ADD] elearning: creating a new elearning doc page
To add updated information related to the elearning app

closes odoo/documentation#5155

Id: 3251391
X-original-commit: 2e9c99c941
Signed-off-by: Donatienne Pirlot (dopi) <dopi@odoo.com>
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-26 08:08:02 +02:00
Xavier (XPL) 5114140efe [IMP] payments: add section about ACH payments
task-3303591

closes odoo/documentation#5198

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

closes odoo/documentation#5184

X-original-commit: a7743d513b
Signed-off-by: Levi Siuzdak (sile) <sile@odoo.com>
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-07-24 23:04:05 +02:00
Tom Aarab (toaa) 32cb0d8244 [IMP] accounting: multicurrency
Changed the "bank statement" section to "bank transactions"

taskid-3433653

closes odoo/documentation#5171

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

closes odoo/documentation#5175

X-original-commit: 26c4c01889
Signed-off-by: Dallas Dean (dade) <dade@odoo.com>
2023-07-20 14:23:33 +02:00
tong-odoo 421e760581 [ADD] accounting: add Vietnam localisations
Impacted Version:

- 16.4 and above

This commit improve below features:

- Vietnam accounting documentation
- Vietnamese QR banking code documentation

task-3344654

closes odoo/documentation#5043

Related: odoo/odoo#127689
Signed-off-by: Tommy Ng (tong) <tong@odoo.com>
2023-07-20 06:40:45 +02:00
Valentin Chevalier 3bd570ae64 [IMP] Stripe: update doc to match the new flow
Stripe now implements a direct flow instead a redirect.

This commit focuses on updating the documentation to match the changes.

task-3322020

closes odoo/documentation#4719

Related: odoo/upgrade#4748
Related: odoo/enterprise#42196
Related: odoo/odoo#123573
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-07-19 13:13:04 +02:00
Xavier (XPL) 3e199d9825 [IMP] general: add screenshot of stacked line chart in reporting
task-3375264

closes odoo/documentation#5156

X-original-commit: 5ee932e14b
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-19 10:24:02 +02:00
Demesmaeker ca475f8ad5 [IMP] sale_amazon: support stock synchronization from Odoo
task-2864098

closes odoo/documentation#4773

Related: odoo/enterprise#40720
Related: odoo/upgrade#4810
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-07-18 19:27:41 +02:00
Louis Wicket ae0c4d809d [FIX] incoterms: fix typo: DPA → DAP
closes odoo/documentation#5146

X-original-commit: 1227c9cf79
Signed-off-by: Louis Wicket (wil) <wil@odoo.com>
2023-07-18 18:18:23 +02:00
chyde-clearwater 3758cd5899 [IMP] tutorials/getting_started: disambiguate example model name
I removed the dot notation in the  "_name" variable for the example
model. AKA, "test.model" is now named "test_model".

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

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

closes odoo/documentation#5141

X-original-commit: f36c612d13
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-07-18 13:07:47 +02:00
Henrique Dias 9514d7df55 [FW][ADD] rpc: Go examples
Examples rely on `kolo/xmlrpc` as well as on the standard library package `log` to panic on error, matching snippets in other languages (which tend to raise exceptions).

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

closes odoo/documentation#5129

Forward-port-of: odoo/documentation#5064
Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
2023-07-15 12:00:28 +02:00
John Holton (hojo) f704ee9cc1 [DEL] MRP: Delete Alternative Work Centers 16.0
closes odoo/documentation#5123

X-original-commit: a67a69beae
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-07-15 12:00:01 +02:00
Martin Trigaux 0031e37c63 [FIX] developer: document changes of message_post API
closes odoo/documentation#5119

X-original-commit: 8bf2d026b7
Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2023-07-15 10:54:41 +02:00
Lara Martini (larm) 89b550252a [IMP] Inventory: update for 16
closes odoo/documentation#5104

X-original-commit: 29db8bf1e6
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-07-13 20:37:30 +02:00
Jess Rogers (jero) 27d8dc2acd [IMP] live chat: add note for 16.3 command changes
closes odoo/documentation#5103

X-original-commit: a187b7cde4
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-07-13 20:37:27 +02:00
Loredana Perazzo 4367502c08 [IMP] pos: move part of the intro into generate tab
task-3372676

closes odoo/documentation#5115

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

closes odoo/documentation#5109

X-original-commit: c85031b3fc
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-07-13 19:28:18 +02:00
Odoo's Mergebot 665bf423ec [FW][FIX] install: remove duplicate note
The notes displayed before and after the tabs under the Git paragraph in `install.rst` were identical, except for one sentence. Added the sentence to the post-tabs note and removed the pre-tabs one.

closes odoo/documentation#5092

Forward-port-of: odoo/documentation#5087
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-13 08:28:26 +02:00
Aymen Sellami 8bf5772a97 Remove duplicate note
The notes displayed before and after the tabs under the Git paragraph in install.rst were identical, except for one sentence. Added the sentence to the post-tabs note and removed the pre-tabs one.

X-original-commit: 481a867a05
Part-of: odoo/documentation#5092
2023-07-13 08:28:25 +02:00
Leonardo Pavan Rocha 6462ed0112 [IMP] web: merge quick_add with quick_create_form_view id in views
https://github.com/odoo/odoo/pull/114827 added a new attribute
quick_create_form_view_id to the calendar view that would allow showing a form
view when clicking on quick_create. This attribute was only used in calendar,
however it could be useful for other modules as well. It was decided to merge
this new attribute with the quick_add attribute, as they are related. Now, the
quick_add attribute accepts either a boolean or a form view id. This commit
changes the documentation of this attribute.

task-3286969

closes odoo/documentation#4707

Related: odoo/odoo#122923
Signed-off-by: Arnaud Joset (arj) <arj@odoo.com>
2023-07-12 20:33:53 +02:00
Xavier (XPL) 1c2ce72416 [IMP] payments: clarify authorize.net statement import steps
task-2382237

closes odoo/documentation#5077

X-original-commit: 22d45407c4
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-11 04:52:41 +02:00
Martin Trigaux fb681d1305 [I18N] *: export translations
closes odoo/documentation#5069

X-original-commit: 921b483e2e
Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2023-07-10 16:59:30 +02:00
Tom Aarab (toaa) e005fa9896 [IMP] authorize.net statement import
taskid-2382237

closes odoo/documentation#5063

X-original-commit: ca38752795
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-07 17:58:09 +02:00
Antoine Vandevenne (anv) 7d70725925 [FIX] odoo_theme/switchers: fallback to the original target URL
Attempting to switch from one version to another when navigating
<old_version>/applications/hr/employees.html led to the user being
redirected to /applications/documentation/<new_version>/hr/employees.html
because `hr` was interpreted as a version string, and thus the generated
target URLs of the version switcher were all wrong.

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

closes odoo/documentation#5059

X-original-commit: c81a91db9c
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-07-07 17:58:06 +02:00
Zuzanna Luczynska 4590a4c25a [ADD] project: recurring tasks, FW port edit 16.2
closes odoo/documentation#5049

Id: 3255317
X-original-commit: c2d174fb4e
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-07 17:57:52 +02:00
tong-odoo 057a1c11d2 [FIX] accounting: AU rebrands Keypay to Employment Hero
task-3250954

closes odoo/documentation#5035

X-original-commit: d252a96747
Related: odoo/enterprise#43735
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
Signed-off-by: Tommy Ng (tong) <tong@odoo.com>
2023-07-06 19:46:32 +02:00
Xavier (XPL) 7d01392c9a [IMP] accounting: l10n chile deliver guides warning
task-3410367

closes odoo/documentation#5030

X-original-commit: b729d05e57
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-05 15:58:34 +02:00
Julien Mougenot 35aae86dbd [IMP] web: Owl DateTimePicker
This commit introduces a date picker OWL component meant to handle the
following use-cases:
- date picker
- date & time picker
- date range picker
- date & time range picker

Basically, this component is the union of the two previous third-party
libraries handling these cases: TempusDominus and DateRangePicker.

New components introduced:

* The main addition of this commit is the `DateTimePicker` itself which
handles the display and interactions of the calendar and time pickers.
> see @web/core/datetime/datetime_picker

* The picker can then be coupled to an input using the
`useDateTimePicker` hook. The purpose of this hook is to handle events
on a given input element and syncronize its value to a date picker it
will spawn in a popover.
> see @web/core/datetime/datetime_hook

* Lastly, a simple `DateTimeInput` component will render an input and
call the hook mentioned above to handle it. This component is
effectively replacing the previous DatePicker and DateTimePicker
components (note that it does not handle range values).
> see @web/core/datetime/datetime_input

Another noticeable change of this commit is the definition of daterange
fields in views:

- Previously, the arch would have to define both fields
and bind them via their options, while also adding an arrow between
inputs or other forms of connection.

- In the new implementation, only the start date field must be declared,
and a date range can be spawned by providing an `end_date_field` in its
options.

Example:
```xml
<field
    name="start_datetime"
    widget="daterange"
    options="{'end_date_field': 'end_datetime'}"
/>
```

warning Added limitations:

- this new way of declaring date ranges means that templates have been
revised to declare one field tag instead of two. This means that list
views using date ranges have lost the ability to be sorted on their end
date fields.

> Justification: the current use cases have been reviewed and it has
been decided that it was not needed to sort on the end date on the
affected list views.

> Workaround: drop the date range and declare both fields as simple date
pickers (i.e. without the end_date_field option).

- all modifiers applied to a field using a date range will be copied and
applied to the end date field. There is no way to define modifiers
specific to one field or the other.

> Justification: there was no use case where one of the two fields
needed specific modifiers.

> Workaround: same as the previous point: split the range into 2 simple
date picker fields.

Additional notes:

- the widget="daterange" is not mandatory in form views, but is required
in list views because only fields with explicit widgets will not be
rendered as simple <span> elements. The date range feature will be
available as soon as an end_date_field is specified.

- as the end date field is not explicitly defined in the view anymore,
any modifier depending on it need to have it defined as invisible
somewhere in the arch.

Task ID: 3121497

closes odoo/documentation#5013

Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Julien Mougenot (jum) <jum@odoo.com>
2023-07-04 12:47:02 +02:00
Julien Mougenot a9c82ebb94 [REF] web: update JS fields documentation
This commit updates the documentation of JS fields:

- style and notation have been adapted to keep in line with the current
documentation writing guidelines;

- some outdated bits have been updated or removed (this is rather a
correction of misleading information than a proper update as no new
information has been added).

Part-of: odoo/documentation#5013
2023-07-04 12:47:01 +02:00
Brandon Seltenrich (BRSE) 453284ba8e [IMP] purchase: update manage vendor bills
closes odoo/documentation#5012

X-original-commit: 688220bb51
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Brandon Seltenrich (brse) <brse@odoo.com>
2023-07-04 07:55:31 +02:00
Xavier 42115759bc [IMP] maintain: odoo online database management
task-2995394

closes odoo/documentation#5006

X-original-commit: c6e6401e36
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-04 07:55:29 +02:00
tong-odoo 94a6a0b204 [IMP] localization: AU rebrands Keypay to Employment Hero
task-3250954

closes odoo/documentation#4998

X-original-commit: 35fc637ed4
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-07-04 07:55:26 +02:00
AMZIL Ayoub f51b991fd4 [DOC] cleanup of pec server documentation
PEC Server is removed from 16 (onwards)

closes odoo/documentation#4991

X-original-commit: f3e3490ba4
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-07-04 00:51:48 +02:00
John Holton (hojo) c76f97777a [ADD] Inventory: Add Replenish on order (MTO)
closes odoo/documentation#4984

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

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

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

X-original-commit: 729881c7b1
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-07-01 18:05:18 +02:00
Lara Martini (larm) 137e58719b [IMP] Inventory: updated images and removed edit and save directions
closes odoo/documentation#4959

X-original-commit: 710c373354
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-07-01 04:44:58 +02:00
John Holton (hojo) 9cac3b3d1a [IMP] Administration: Rewrite Upgrade Odoo SaaS
closes odoo/documentation#4951

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

closes odoo/documentation#4942

X-original-commit: 5b78ee96af
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2023-06-29 11:59:51 +02:00
Xavier b0a042b928 [FIX] accounting: remove fullscreen property from tutorial link
task-3389168

closes odoo/documentation#4936

X-original-commit: 88da0a9256
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-06-28 19:08:51 +02:00
Jess Rogers (jero) facb3f184e [IMP] livechat: update commands and canned responses
closes odoo/documentation#4931

X-original-commit: e8aaefd283
Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
2023-06-28 17:41:59 +02:00
Rémy Voet (ryv) 13544bca17 [IMP] orm: name_get into display_name
odoo/odoo#122085
odoo/enterprise#42599
odoo/upgrade#4780

closes odoo/documentation#4639

Signed-off-by: Rémy Voet (ryv) <ryv@odoo.com>
2023-06-28 17:41:15 +02:00
Xavier 9e54525d61 [ADD] website: reCAPTCHA
task-3336129

closes odoo/documentation#4920

X-original-commit: 329f6dd8d5
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-06-27 22:40:15 +02:00
Timothy Kukulka (tiku) 1ed317ebd7 [IMP] IoT: edits to all IoT docs
closes odoo/documentation#4927

X-original-commit: e7457c992b
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-27 21:27:56 +02:00
Benoit Socias 0df9068892 [FIX] howto/rdtraining: ch.13 adapt reference to salesperson field
In chapter 13 the `property_ids` field is defined as the inverse of a
`user_id` field. But in chapter 8 when the salesperson field is added,
no such name is given to it.

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

task-3381757

closes odoo/documentation#4913

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

This commit describes this `optional` attribute.

task-3380953

closes odoo/documentation#4912

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

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

X-original-commit: 49029eda37
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Brandon Seltenrich (brse) <brse@odoo.com>
2023-06-26 23:23:09 +02:00
Jess Rogers (jero) 5cfd1623ae [IMP] live chat:update getting started doc
closes odoo/documentation#4883

X-original-commit: c24f4b237e
Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
2023-06-26 23:23:01 +02:00
Lara Martini (larm) 432d9bb10b [ADD] Employees: anning a new employee
closes odoo/documentation#4858

X-original-commit: 547ad6fca5
Signed-off-by: Lara Martini (larm) <larm@odoo.com>
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-26 21:09:52 +02:00
Donatienne Pirlot 1be31fda81 [ADD] localization: belgian accounting
closes odoo/documentation#4842

Id: 3143421
X-original-commit: 4d477a598f
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-06-26 20:01:07 +02:00
Lara Martini (larm) 4d61833e46 [IMP] inventory: update strategies second person and images
closes odoo/documentation#4869

X-original-commit: 6201ee8760
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-24 04:41:55 +02:00
Jess Rogers (jero) 46d85d4f00 [IMP] helpdesk: update help center documentation
closes odoo/documentation#4875

X-original-commit: bafe824f38
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-24 01:03:01 +02:00
Xavier 5720cd2802 [ADD] Spreadsheet: templates
task-3235170

closes odoo/documentation#4863

X-original-commit: 1853f226e7
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Co-authored-by: Xavier <xpl@odoo.com>
Co-authored-by: Loredana <lrpz@odoo.com>
2023-06-23 10:27:55 +02:00
“Audrey 9fc59e3237 [IMP] Payment providers - Stripe: Add missing webhook events
task-3373642

closes odoo/documentation#4780

X-original-commit: c04399c0b3
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2023-06-23 09:20:53 +02:00
Lara Martini (larm) 5b04581623 [IMP] Expenses: updating for new 16 design
closes odoo/documentation#4850

X-original-commit: 0433e84a0c
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-22 03:20:29 +02:00
Felicious 5c82ba7762 [IMP] inventory: adjust manual val for v.16
closes odoo/documentation#4846

X-original-commit: 4c750d1bb7
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
2023-06-22 02:02:47 +02:00
Jonathan b7316e2e2e [IMP] accounting: add tutorials links to chart of accounts
closes odoo/documentation#4836

X-original-commit: a85e064ffc
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2023-06-21 22:40:59 +02:00
Jonathan 4e61b3585e [FIX] discuss: broken link in ice_servers.rst
closes odoo/documentation#4827

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

X-original-commit: e074580ffb
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-21 20:10:20 +02:00
Loredana Perazzo 3d0a19f329 [IMP] pos: write content on the Payment Terminals page
task-3358474

closes odoo/documentation#4798

X-original-commit: 2a5a45d6a4
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
2023-06-21 13:46:03 +02:00
Martin Trigaux 89bccb44ff [I18N] *: export 16.0 source terms
closes odoo/documentation#4801

X-original-commit: ad7b636275
Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2023-06-20 22:03:07 +02:00
Christophe Monniez 899ee1c4c1 [FIX] deploy: reference the config parameter
The deploy documentation is assuming that `/etc/odoo.conf` is the
default config file, which is not the case.

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

closes odoo/documentation#4808

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

X-original-commit: f03b4ca649
Part-of: odoo/documentation#4808
2023-06-20 18:01:59 +02:00
Antoine Vandevenne (anv) 9f65cba6dc [FIX] legal: fix broken PDF link
Apply the fix of e6aa5dd0 to `terms_of_sale.rst` and
`terms_of_sale_fr.rst` that were forgotten.

closes odoo/documentation#4791

X-original-commit: 8cffb57dae
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-06-20 00:24:01 +02:00
“Dallas” 3b50c7a565 [MOV] accounting: update/move customer addresses to accounting
task-3304975

closes odoo/documentation#4778

X-original-commit: cf5a3276c9
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-16 23:01:31 +02:00
Xavier 4af52da507 [IMP] accounting/sales: default terms and conditions + quotation templates
task-3304938

closes odoo/documentation#4766

X-original-commit: 7ddbeb9223
Signed-off-by: Platteau Xavier (xpl) <xpl@odoo.com>
2023-06-16 12:19:00 +02:00
Tom Aarab (toaa) a7bb89ce47 [IMP] payment providers: PayPal
taskid-3184602.

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

Took the opportunity to redo the whole page.

closes odoo/documentation#4735

X-original-commit: ede03aa87b
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2023-06-16 10:52:45 +02:00
KC (ksc) 532b6be429 [IMP] sales: updated pro-forma invoice doc
closes odoo/documentation#4762

X-original-commit: 3e4e8acfed
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-16 01:40:21 +02:00
Sam Lieber (sali) 80e8576263 [IMP] marketing: workflow_activities.rst - Format fixes
closes odoo/documentation#4754

X-original-commit: a09ca7bd0f
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-16 01:40:13 +02:00
Sam Lieber (sali) 75fd5255eb [IMP] marketing: testing_running.rst format fixes
closes odoo/documentation#4755

X-original-commit: 4b327417b0
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-16 00:30:01 +02:00
Sam Lieber (sali) 070ffa86c0 [IMP] Update rst for target_audiences.rst (v14)
closes odoo/documentation#4741

X-original-commit: 89c1c1b357
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-15 19:59:31 +02:00
tong-odoo 7b5ce24bba [IMP] accounting: update Hong Kong FPS content
Impacted versions:

- saas-16.4 or above

tast-3130633

closes odoo/documentation#4565

Related: odoo/odoo#122802
Related: odoo/upgrade#4727
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-15 17:36:11 +02:00
tong-odoo 05a09da86a [ADD] accounting: add Singapore localisations
Impacted versions:

- saas-16.4 or above

This commit improve below features:

- Singapore accounting documentation
- PayNow QR code documentation

task-3130633

Part-of: odoo/documentation#4565
2023-06-15 17:36:11 +02:00
“Audrey d0ca9fbafe [FIX] Adyen: Fix live/test URLs
closes odoo/documentation#4729

X-original-commit: 1f2f11c42b
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
Signed-off-by: auva-odoo <auva@odoo.com>
2023-06-15 09:05:22 +02:00
“Audrey c7713b218f [IMP] Website: Multiple websites
task-3190493

closes odoo/documentation#4715

X-original-commit: 1042ba86fb
Signed-off-by: auva-odoo <auva@odoo.com>
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-13 12:49:43 +02:00
Tom Aarab (toaa) 978bebf93c [IMP] accounting: OSS report
Added a section on where to find OSS reports and how to export them

task-3305037

closes odoo/documentation#4716

X-original-commit: 0494082a55
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2023-06-13 08:44:23 +02:00
Loredana Perazzo 388003e6f1 [IMP] pos: update the register customers section
task-3357882

closes odoo/documentation#4706

X-original-commit: ee4b279e7c
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
Signed-off-by: Perazzo Loredana (lrpz) <lrpz@odoo.com>
2023-06-12 12:41:57 +02:00
Tom Aarab (toaa) 7a41103958 [IMP] accounting: follow-up reports
task-3316301.

closes odoo/documentation#4700

X-original-commit: 256ddb30ab
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2023-06-12 12:41:29 +02:00
Morfosys 63a9962742 [IMP] l10n: update links in mexico.rst
Update the link for Smarter Web to the appropriate landing page for
Odoo.

closes odoo/documentation#4690

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

closes odoo/documentation#4689

X-original-commit: 98207740d5
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-09 13:50:17 +02:00
523 changed files with 49334 additions and 7370 deletions
+5 -5
View File
@@ -43,7 +43,7 @@ Configuration samples
* Show only databases with names beginning with 'mycompany'
in ``/etc/odoo.conf`` set:
in :ref:`the configuration file <reference/cmdline/config_file>` set:
.. code-block:: ini
@@ -55,7 +55,7 @@ in ``/etc/odoo.conf`` set:
was sent to ``www.mycompany.com`` or ``mycompany.co.uk``, but not
for ``www2.mycompany.com`` or ``helpdesk.mycompany.com``.
in ``/etc/odoo.conf`` set:
in :ref:`the configuration file <reference/cmdline/config_file>` set:
.. code-block:: ini
@@ -150,7 +150,7 @@ Configuration sample
* with 'pwd' as a password
* filtering only db with a name beginning with 'mycompany'
in ``/etc/odoo.conf`` set:
in :ref:`the configuration file <reference/cmdline/config_file>` set:
.. code-block:: ini
@@ -238,7 +238,7 @@ Configuration sample
* We'll use 8 workers + 1 for cron. We'll also use a monitoring system to measure cpu load, and check if it's between 7 and 7.5 .
* RAM = 9 * ((0.8*150) + (0.2*1024)) ~= 3Go RAM for Odoo
in ``/etc/odoo.conf``:
in :ref:`the configuration file <reference/cmdline/config_file>`:
.. code-block:: ini
@@ -273,7 +273,7 @@ Configuration sample
* Redirect http requests to https
* Proxy requests to odoo
in ``/etc/odoo.conf`` set:
in :ref:`the configuration file <reference/cmdline/config_file>` set:
.. code-block:: ini
+2 -9
View File
@@ -282,14 +282,6 @@ SSH. If you do not know the difference between the two, the best option is most
are following the :doc:`Getting started </developer/tutorials/getting_started>` developer tutorial,
or plan on contributing to Odoo source code, choose SSH.
.. note::
**The Enterprise Git repository does not contain the full Odoo source code**. It is only a
collection of extra add-ons. The main server code is in the Community version. Running the
Enterprise version actually means running the server from the Community version with the
addons-path option set to the folder with the Enterprise version. You need to clone both the
Community and Enterprise repository to have a working Odoo Enterprise installation. See
:ref:`setup/install/editions` to get access to the Enterprise repository.
.. tabs::
.. group-tab:: Windows
@@ -351,7 +343,8 @@ or plan on contributing to Odoo source code, choose SSH.
collection of extra add-ons. The main server code is in the Community version. Running the
Enterprise version actually means running the server from the Community version with the
addons-path option set to the folder with the Enterprise version. You need to clone both the
Community and Enterprise repository to have a working Odoo Enterprise installation.
Community and Enterprise repository to have a working Odoo Enterprise installation. See
:ref:`setup/install/editions` to get access to the Enterprise repository.
.. _setup/install/source/prepare:
@@ -1,9 +1,9 @@
.. _setup/enterprise:
===============================
Upgrade Community to Enterprise
===============================
===================================
Switch from Community to Enterprise
===================================
Depending on your current installation, there are multiple ways to upgrade
your community version.
@@ -98,7 +98,7 @@ On Windows
.. code-block:: console
$ odoo.exe -d <database_name> -i web_enterprise --stop-after-init
$ ..\python\python.exe odoo-bin -d <database_name> -i web_enterprise --stop-after-init
* No need to manually launch the server, the service is running.
You should be able to connect to your Odoo Enterprise instance using your usual
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 39 KiB

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

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

@@ -45,41 +45,101 @@ these databases if they have one, using their regular credentials.
In addition, they cannot use the webshell nor have access to the server logs.
+---------------------+-----------------+-----------+-----------+
| | | User | Admin |
+=====================+=================+===========+===========+
|Development | History | X | X |
+---------------------+-----------------+-----------+-----------+
| | 1-click connect | X | X |
+---------------------+-----------------+-----------+-----------+
| | Logs | X | X |
+---------------------+-----------------+-----------+-----------+
| | Shell/SSH | X | X |
+---------------------+-----------------+-----------+-----------+
| | Mails | X | X |
+---------------------+-----------------+-----------+-----------+
| | Settings | X | X |
+---------------------+-----------------+-----------+-----------+
|Production & Staging | History | X | X |
+---------------------+-----------------+-----------+-----------+
| | 1-click connect | | X |
+---------------------+-----------------+-----------+-----------+
| | Logs | | X |
+---------------------+-----------------+-----------+-----------+
| | Shell/SSH | | X |
+---------------------+-----------------+-----------+-----------+
| | Mails | | X |
+---------------------+-----------------+-----------+-----------+
| | Monitoring | | X |
+---------------------+-----------------+-----------+-----------+
| | Backups | | X |
+---------------------+-----------------+-----------+-----------+
| | Settings | X | X |
+---------------------+-----------------+-----------+-----------+
|Status | | X | X |
+---------------------+-----------------+-----------+-----------+
|Settings | | | X |
+---------------------+-----------------+-----------+-----------+
.. list-table::
:header-rows: 1
:widths: auto
* -
-
- User
- Admin
* - Development
- History
- |green|
- |green|
* -
- 1-click connect
- |green|
- |green|
* -
- Logs
- |green|
- |green|
* -
- Shell/SSH
- |green|
- |green|
* -
- Mails
- |green|
- |green|
* -
- Upgrade
- |green|
- |green|
* -
- Settings
- |green|
- |green|
* - Production & Staging
- History
- |green|
- |green|
* -
- 1-click connect
-
- |green|
* -
- Logs
-
- |green|
* -
- Shell/SSH
-
- |green|
* -
- Mails
-
- |green|
* -
- Monitoring
-
- |green|
* -
- Backups
-
- |green|
* -
- Upgrade
-
- |green|
* -
- Settings
- |green|\*
- |green|
* - Status
-
- |green|
- |green|
* - Settings
-
-
- |green|
.. note::
\* Only in staging branches
.. |green| raw:: html
<span class="text-success" style="font-size: 32px; line-height: 0.5">●</span>
.. |orange| raw:: html
<span class="text-warning" style="font-size: 32px; line-height: 0.5">●</span>
.. |red| raw:: html
<span class="text-danger" style="font-size: 32px; line-height: 0.5">●</span>
Public Access
=============
+80 -18
View File
@@ -2,29 +2,91 @@
Odoo Online
===========
Requesting a test upgrade
=========================
Odoo databases can be manually upgraded directly from the main Odoo website. To upgrade an Odoo
database, navigate to the `database manager <https://www.odoo.com/my/databases>`_ page and sign in.
#. Go to your `database manager <https://www.odoo.com/my/databases/>`_
#. Click on your profile icon and select *My Databases*.
The database manager page displays all of the Odoo databases associated with the user's account. Any
databases that are not already on the most recent version of Odoo display an **arrow in a circle**
icon next to the database name, indicating that the database can be upgraded.
.. image:: odoo_online/accessing-my-databases.png
:alt: Selecting My Databases under my profile
.. image:: odoo_online/databases-page.png
:align: center
:alt: The database manager page with an upgrade button next to the name of a database.
#. Click on the up arrow button next to your main database name to proceed to the test upgrade.
.. important::
- If the database's version is **lower** than the latest major release: the database must be
upgraded within two months. After these two months, an automatic upgrade is initiated.
- If the database's version is **equal** to or **higher** than the latest major release:
you can disregard the invitation to upgrade, as the database probably would not benefit from
new features every two months.
.. image:: odoo_online/upgrade-option.png
:alt: Selecting the action settings icon
If a database is *not* on the latest online version, its administrator should receive an invitation
to upgrade on the database's dashboard, displayed as an **arrow in a circle**.
#. In the pop-up message that appears, select the target version and then :guilabel:`Test` as
purpose.
.. image:: odoo_online/database-notification.png
:alt: Invitation to upgrade on the database dashboard.
.. note::
The :guilabel:`Production` purpose doesn't appear if you didn't test your upgraded database at
least once.
.. note::
Versions that are not supported anymore become deprecated and must be updated to avoid
security issues. It is recommended to initiate the upgrade yourself and not wait for the
automatic upgrade, as the former method allows you to request a test upgrade of the database to
check for any discrepancies.
#. This triggers the automated upgrade process. A confirmation email is then sent to you with the
the link to the upgraded database or to provide information if the upgrade failed.
Test database
=============
.. note::
You can also see and access your test database from your *My Databases* page.
Click on the **arrow in a circle** icon to start the upgrade process. On the :guilabel:`Upgrade your
database` pop-up, select the version of Odoo that the platform will be upgraded to. In the
:guilabel:`Email to notify` field, enter an email address that will receive email notifications
about the database upgrade.
There is also a :guilabel:`Purpose` section on the pop-up that is used to specify the reason for the
upgrade. However, at this stage of the process, the only selectable option is :guilabel:`Test`, as
Odoo requires users to create a test copy of the upgraded database before converting the actual
database.
.. image:: odoo_online/upgrade-pop-up.png
:align: center
:alt: The "Upgrade your database" pop-up.
After filling out the form, click the :guilabel:`Upgrade` button. The pop-up disappears and the
database being upgraded shows a red :guilabel:`Upgrade in progress` tag next to its name. An email
confirming that the upgrade is in progress is also sent to the email address specified on the
pop-up.
.. image:: odoo_online/upgrade-in-progress.png
:align: center
:alt: The "Upgrade in progress" tag next to the database name.
Once the upgrade is complete, a new test database appears on the `database manager
<https://www.odoo.com/my/databases>`_ page. To access the test database, click the drop-down arrow
(:guilabel:`⯆`) to the left of the main database's name. Doing so makes the test version appear
below it. Finally, click the green :guilabel:`Connect` button on the right side of the test
version's row to go to the database.
.. image:: odoo_online/test-database.png
:align: center
:alt: A test database on the database manager page.
Except for being on the newer version of Odoo, the test database is an exact copy of the one being
upgraded. It is important to do extensive testing in this database to ensure that the upgrade has
not altered or corrupted any data, and that all workflows still proceed as expected.
Production database
===================
After confirming the integrity of the new version, return to the `database manager
<https://www.odoo.com/my/databases>`_ page. Once again, click on the **arrow in a circle** icon next
to the database being upgraded. The :guilabel:`Upgrade your database` pop-up appears as before,
except that there is now a :guilabel:`Production` option under the :guilabel:`Purpose` section.
Select the :guilabel:`Production` option and then click :guilabel:`Upgrade` to begin the upgrade
process. As before, a notification email is sent to the email address provided and a red
:guilabel:`Upgrade in progress` tag appears next to the name of the database.
The production database is then taken offline and will be upgraded automatically. The time it takes
to upgrade the production database should be similar to the time that was necessary to upgrade the
test database. Make sure to inform database users of the scheduled downtime.
After the upgrade is finished, the :guilabel:`Upgrade in progress` tag disappears and the database
is upgraded to the version specified.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

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

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 22 KiB

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

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

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

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 11 KiB

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

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

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

Before

Width:  |  Height:  |  Size: 3.6 KiB

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

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

@@ -37,7 +37,7 @@ appropriately completed:
- :guilabel:`Vendor`: Odoo automatically fills some information based on the vendor's registered
information, previous purchase orders, or bills.
- :guilabel:`Bill Reference`: add the sales order reference provided by the vendor and is used to do
the :ref:`matching <payments-matching>` when you receive the products.
the :ref:`matching <payments/matching>` when you receive the products.
- :guilabel:`Auto-Complete`: select a past bill/purchase order to automatically complete the
document. The :guilabel:`Vendor` field should be completed prior to completing this field.
- :guilabel:`Bill Date`: is the issuance date of the document.
+312 -194
View File
@@ -4,34 +4,42 @@
Expenses
========
Odoo **Expenses** streamlines the management of expenses. After an employee submits their expenses
Odoo **Expenses** streamlines the management of expenses. After an employee submits their expenses
in Odoo, the expenses are reviewed by management and accounting teams. Once approved, payments can
then be processed and disbursed back to the employee for reimbursement(s).
.. seealso::
`Odoo Expenses: product page <https://www.odoo.com/app/expenses>`_
Set expense types
=================
Set expense categories
======================
The first step to track expenses is to configure the different *expense types* for the company
(managed as *products* in Odoo). Each "product" can be as specific or generalized as needed. Go to
:menuselection:`Expenses app --> Configuration --> Expense Products` to view the current expensable
products in a default kanban view.
The first step to track expenses is to configure the different types of expenses for the company
(managed as *expense categories* in Odoo). Each category can be as specific or generalized as
needed. Go to :menuselection:`Expenses app --> Configuration --> Expense Categories` to view the
current expensable categories in a default list view.
.. image:: expenses/products.png
.. image:: expenses/categories.png
:align: center
:alt: Set expense costs on products.
To create a new expense product, click :guilabel:`Create`. A product form will appear. Only two
fields are required, the :guilabel:`Product Name` and the :guilabel:`Unit of Measure`. Enter the
:guilabel:`Product Name` in the field, and select the :guilabel:`Unit of Measure` from the drop-down
menu (most products will be set to :guilabel:`Units`).
To create a new expense category, click :guilabel:`New`. A product form will appear, with the
description field labeled :guilabel:`Product Name`.
.. note::
Expense categories are managed like products in Odoo. The expense category form follows the
standard product form in Odoo, and the information entered is similar. Expense products will be
referred to as expense categories throughout this document since the main menu refers to these as
:guilabel:`Expense Categories`.
Only two fields are required, the :guilabel:`Product Name` and the :guilabel:`Unit of Measure`.
Enter the :guilabel:`Product Name` in the field, and select the :guilabel:`Unit of Measure` from the
drop-down menu (most products will be set to :guilabel:`Units`).
.. tip::
The *Sales* app is where specification on the units of measure are created and edited (e.g.
units, miles, nights, etc.). Go to :menuselection:`Sales app --> Configuration --> Settings` and
ensure `Units of Measure` is checked off in the `Product Catalog` section. Click on the
ensure `Units of Measure` is enabled in the `Product Catalog` section. Click on the
:guilabel:`Units of Measure` internal link to view, create, and edit the units of measure. Refer
to :doc:`this document </applications/inventory_and_mrp/inventory/management/products/uom>` to
learn more about units of measure and how to configure them.
@@ -45,16 +53,23 @@ a specific expense should always be reimbursed for a particular price, enter tha
:guilabel:`Cost` field. Otherwise, leave the :guilabel:`Cost` set to `0.00`, and employees will
report the actual cost when submitting an expense report.
.. note::
The :guilabel:`Cost` field is always visible on the expense category form, but the
:guilabel:`Sales Price` field is *only* visible if the :guilabel:`Sales Price` is selected under
the :guilabel:`Re-Invoice Expenses` section. Otherwise, the :guilabel:`Sales Price` field is
hidden.
.. example::
Here are some examples for when to set a specific :guilabel:`Cost` on a product vs. leaving the
:guilabel:`Cost` at `0.00`:
- **Meals**: Set the :guilabel:`Cost` to `0.00`. When an employee logs an expense for a meal, they
enter the actual amount of the bill and will be reimbursed for that amount. An expense for a
meal costing $95.23 would equal a reimbursement for $95.23.
- **Meals**: Set the :guilabel:`Cost` to `0.00`. When an employee logs an expense for a meal,
they enter the actual amount of the bill and will be reimbursed for that amount. An expense for
a meal costing $95.23 would equal a reimbursement for $95.23.
- **Mileage**: Set the :guilabel:`Cost` to `0.30`. When an employee logs an expense for
"mileage", they enter the number of miles driven, and are reimbursed 0.30 per mile they
entered. An expense for 100 miles would equal a reimbursement for $30.00.
"mileage", they enter the number of miles driven in the :guilabel:`Quantity` field, and are
reimbursed 0.30 per mile they entered. An expense for 100 miles would equal a reimbursement for
$30.00.
- **Monthly Parking**: Set the :guilabel:`Cost` to `75.00`. When an employee logs an expense for
"monthly parking", the reimbursement would be for $75.00.
- **Expenses**: Set the :guilabel:`Cost` to `0.00`. When an employee logs an expense that is not
@@ -66,7 +81,7 @@ Select an :guilabel:`Expense Account` if using the Odoo *Accounting* app. It is
with the accounting department to determine the correct account to reference in this field as it
will affect reports.
Set a tax on each product in the :guilabel:`Vendor Taxes` and :guilabel:`Customer Taxes` fields if
Set a tax on each product in the :guilabel:`Vendor Taxes` and :guilabel:`Customer Taxes` fields, if
applicable. It is considered good practice to use a tax that is configured with :ref:`Tax Included
in Price <taxes/included-in-price>`. Taxes will be automatically configured if this is set.
@@ -79,64 +94,74 @@ Manually create a new expense
-----------------------------
To record a new expense, begin in the main :menuselection:`Expenses` app dashboard, which presents
the default :guilabel:`My Expenses to Report` view. This view can also be accessed from
:menuselection:`Expenses app --> My Expenses --> My Expenses to Report`.
the default :guilabel:`My Expenses` view. This view can also be accessed from
:menuselection:`Expenses app --> My Expenses --> My Expenses`.
First, click :guilabel:`Create`, and then fill out the various fields on the form.
First, click :guilabel:`New`, and then fill out the various fields on the form.
- :guilabel:`Description`: Enter a short description for the expense in the :guilabel:`Description`
field. This should be short and informative, such as `lunch with client` or `hotel for
conference`.
- :guilabel:`Product`: Select the product from the drop-down menu that most closely corresponds to
the expense. For example, an airplane ticket would be appropriate for an expense
:guilabel:`Product` named :guilabel:`Air Travel`.
- :guilabel:`Unit Price`: Enter the total amount paid for the expense in one of two ways:
- :guilabel:`Category`: Select the expense category from the drop-down menu that most closely
corresponds to the expense. For example, an airplane ticket would be appropriate for an expense
:guilabel:`Category` named :guilabel:`Air Travel`.
- :guilabel:`Total`: Enter the total amount paid for the expense in one of two ways:
#. If the expense is for one single item/expense, enter the cost in the :guilabel:`Unit Price`
field, and leave the :guilabel:`Quantity` `1.00`.
#. If the expense is for multiples of the same item/expense, enter the price *per unit* in the
:guilabel:`Unit Price` field, and enter the *quantity of units* in the :guilabel:`Quantity`
field.
#. If the expense is for one single item/expense, and the category selected was for a single item,
enter the cost in the :guilabel:`Total` field (the :guilabel:`Quantity` field is hidden).
#. If the expense is for multiples of the same item/expense with a fixed price, the
:guilabel:`Unit Price` is displayed. Enter the quantity in the :guilabel:`Quantity` field, and
the total cost is automatically updated with the correct total (the :guilabel:`Unit Price` x
the :guilabel:`Quantity` = the total). Be advised, the word "total" does not appear, the total
cost simply appears below the :guilabel:`Quantity`.
.. example::
In the case of a hotel stay, for example, the :guilabel:`Unit Price` would be set as the
cost *per night*, and set the :guilabel:`Quantity` to the *number of nights* stayed.
For example, in the case of mileage driven, the :guilabel:`Unit Price` is populated as the
cost *per mile*. Set the :guilabel:`Quantity` to the *number of miles* driven, and the total
is calculated.
- :guilabel:`Taxes`: If taxes were paid on the expense, select the tax percentage using the
drop-down menu. Tax options are pre-configured based on the localization setting selected when the
database was created. Adding any new taxes should only be done when necessary.
- :guilabel:`Included Taxes`: If taxes were configured on the expense category, the tax percentage
and amount appear automatically after entering either the :guilabel:`Total` or the
:guilabel:`Quantity`.
.. note::
When a tax is selected, the :guilabel:`Total` value will update in real time to show the added
taxes.
When a tax is configured on an expense category, the :guilabel:`Included Taxes` value will
update in real time as the :guilabel:`Total` or :guilabel:`Quantity` is updated.
- :guilabel:`Employee`: Using the drop-down menu, select the employee this expense is for.
- :guilabel:`Paid By`: Click the radio button to indicate who paid for the expense and should be
reimbursed. If the employee paid for the expense (and should be reimbursed) select
:guilabel:`Employee (to reimburse)`. If the company paid directly instead (e.g. if the company
credit card was used to pay for the expense) select :guilabel:`Company`.
credit card was used to pay for the expense) select :guilabel:`Company`. Depending on the expense
category selected, this field may not appear.
- :guilabel:`Bill Reference`: If there is any reference text that should be included for the
expense, enter it in this field.
- :guilabel:`Expense Date`: Using the calendar module, enter the date the expense was incurred. Use
the :guilabel:`< (left)` and :guilabel:`> (right)` arrows to navigate to the correct month, then
click on the specific day to enter the selection.
- :guilabel:`Bill Reference`: If there is any reference text that should be included for the
expense, enter it in this field.
- :guilabel:`Account`: Select the expense account that this expense should be logged on from the
drop-down menu.
- :guilabel:`Employee`: Using the drop-down menu, select the employee this expense is for.
- :guilabel:`Customer to Reinvoice`: If the expense is something that should be paid for by a
customer, select the customer that will be invoiced for this expense from the drop-down menu. For
example, if a customer wishes to have an on-site meeting, and agrees to pay for the expenses
associated with it (such as travel, hotel, meals, etc.), then all expenses tied to that meeting
would indicate that customer as the :guilabel:`Customer to Reinvoice`.
- :guilabel:`Analytic Account`: Select the account the expense should be written against from the
drop-down menu.
- :guilabel:`Company`: If multiple companies are set-up, select the company this expense should be
filed for from the drop-down menu. If there is only one company, this field will be automatically
populated.
customer, select the :abbr:`SO (Sales Order)` and customer that will be invoiced for this expense
from the drop-down menu. All sales orders in the drop-down menu list both the :abbr:`SO (Sales
Order)` as well as the company the sales order is written for, but after the expense is saved, the
customer name disappears and only the :abbr:`SO (Sales Order)` is visible on the expense.
.. example::
A customer wishes to have an on-site meeting for a custom garden (design and installation) and
agrees to pay for the expenses associated with it (such as travel, hotel, meals, etc.). All
expenses tied to that meeting would indicate the sales order for the custom garden (which also
references the customer) as the :guilabel:`Customer to Reinvoice`.
- :guilabel:`Analytic Distribution`: Select the account(s) the expense should be written against
from the drop-down menu for either :guilabel:`Projects`, :guilabel:`Departments`, or both.
Multiple accounts can be listed for each category if needed. Adjust the percentage for each
analytic account by typing in the percentage value next to the account.
- :guilabel:`Company`: If multiple companies are set up, select the company this expense should be
filed for from the drop-down menu. The current company will automatically populate this field.
- :guilabel:`Notes...`: If any notes are needed in order to clarify the expense, enter them in the
notes field.
Once all the fields have been filled out, click :guilabel:`Save`.
.. image:: expenses/expense-filled-in.png
:align: center
:alt: A filled in expense form for a client lunch.
@@ -144,23 +169,37 @@ Once all the fields have been filled out, click :guilabel:`Save`.
Attach a receipt
~~~~~~~~~~~~~~~~
After the expense is saved, the next step is to attach a receipt. A new :guilabel:`Attach Receipt`
button appears after the entry is saved, beneath the former :guilabel:`Save` button (which turns
into an :guilabel:`Edit` button).
After the expense is created, the next step is to attach a receipt. Click the :guilabel:`Attach
Receipt` button, and a file explorer appears. Navigate to the receipt to be attached, and click
:guilabel:`Open`. The new receipt is recorded in the chatter, and the number of receipts will appear
next to the :guilabel:`📎 (paperclip)` icon beneath the expense form. More than one receipt can be
attached to an individual expense, as needed. The number of receipts attached to the expense will be
noted on the paperclip icon.
.. image:: expenses/save-receipt.png
.. image:: expenses/receipt-icon.png
:align: center
:alt: Attach a receipt after saving the record.
:alt: Attach a receipt and it appears in the chatter.
Click the new :guilabel:`Attach Receipt` button, and a file explorer appears. Navigate to the
receipt to be attached, and click :guilabel:`Open`. A new :guilabel:`Receipts` smart button appears
at the top, and the new receipt is recorded in the chatter. More than one receipt can be attached to
an individual expense, as needed. The number of receipts attached to the expense will be noted on
the smart button.
Create new expenses from a scanned receipt
------------------------------------------
.. image:: expenses/receipt-smartbutton.png
Rather than manually inputting all of the information for an expense, expenses can be created by
scanning a PDF receipt.
First, in the main :guilabel:`Expenses` app dashboard view (this view can also be accessed from
:menuselection:`Expenses app --> My Expenses --> My Expenses`), click :guilabel:`Scan`, and a file
explorer pops up. Navigate to the receipt to be uploaded, click on it to select it, and then click
:guilabel:`Open`.
.. image:: expenses/scan.png
:align: center
:alt: Attach a receipt after saving the record.
:alt: Create an expense by scanning a receipt. Click Scan at the top of the Expenses dashboard
view.
The receipt is scanned, and a new entry is created with today's date as the :guilabel:`Expense
Date`, and any other fields it can populate based on the scanned data, such as the total. Click on
the new entry to open the individual expense form, and make any changes needed. The scanned receipt
appears in the chatter.
Automatically create new expenses from an email
-----------------------------------------------
@@ -169,7 +208,7 @@ Instead of individually creating each expense in the *Expenses* app, expenses ca
created by sending an email to an email alias.
To do so, first, an email alias needs to be configured. Go to :menuselection:`Expenses app -->
Configuration --> Settings`. Ensure :guilabel:`Incoming Emails` is checked off.
Configuration --> Settings`. Ensure :guilabel:`Incoming Emails` is enabled.
.. image:: expenses/email-alias.png
:align: center
@@ -182,36 +221,35 @@ Configuration --> Settings`. Ensure :guilabel:`Incoming Emails` is checked off.
domain alias is configured, the email address field will be visible beneath the incoming emails
section.
Next, enter the email address to be used in the email field, then click :guilabel:`Save`. Now that
the email address has been entered, emails can be sent to that alias to create new expenses without
having to be in the Odoo database.
Next, enter the email address to be used in the email field, and then click :guilabel:`Save`. Now
that the email address has been entered, emails can be sent to that alias to create new expenses
without having to be in the Odoo database.
To submit an expense via email, create a new email and enter the product's *internal reference* code
(if available) and the amount of the expense in the email subject. Next, attach the receipt to the
email. Odoo creates the expense by taking the information in the email subject and combining it with
the receipt.
To check an expense product's internal reference, go to :menuselection:`Expenses app -->
Configuration --> Expense Products`. If an internal reference is listed on the product, it is
visible in this view as :guilabel:`(Ref###)`.
To check an expense categories internal reference, go to :menuselection:`Expenses app -->
Configuration --> Expense Categories`. If an internal reference is listed on the expense category,
it is listed in the :guilabel:`Internal Reference` column.
.. image:: expenses/internal-ref-numbers.png
.. image:: expenses/ref.png
:align: center
:alt: Internal reference numbers are listed in the main Expense Products view.
:alt: Internal reference numbers are listed in the main Expense Categories view.
To add an internal reference on an expense product, click on the product, then click
:guilabel:`Edit`. In edit mode, enter the :guilabel:`Internal Reference` in the field. Beneath the
:guilabel:`Internal Reference` field, this sentence appears: :guilabel:`Use this reference as a
subject prefix when submitting by email.`.
To add an internal reference on an expense category, click on the category to open the form. Enter
the internal reference in the field. Beneath the :guilabel:`Internal Reference` field, this sentence
appears: :guilabel:`Use this reference as a subject prefix when submitting by email.`
.. image:: expenses/meals-internal-reference.png
.. image:: expenses/mileage-internal-reference.png
:align: center
:alt: Internal reference numbers are listed in the main Expense Products view.
.. note::
For security purposes, only authenticated employee emails are accepted by Odoo when creating an
expense from an email. To confirm an authenticated employee email address, go to the employee
card in the :guilabel:`Employees` app, and refer to the :guilabel:`Work Email` in the main field.
card in the :menuselection:`Employees` app, and refer to the :guilabel:`Work Email`
.. image:: expenses/authenticated-email-address.png
:align: center
@@ -219,55 +257,85 @@ subject prefix when submitting by email.`.
.. example::
If submitting an expense via email for a $25.00 meal during a work trip, the email subject would
be `Ref005 Meal $25.00`.
be `FOOD $25.00`.
Explanation:
- The :guilabel:`Internal Reference` for the expense product `Meals` is `Ref005`
- The :guilabel:`Internal Reference` for the expense category `Meals` is `FOOD`
- The :guilabel:`Cost` for the expense is `$25.00`
.. _expenses/report:
Create an expense report
========================
When expenses are ready to submit (such as at the end of a business trip, or once a month), an
*expense report* needs to be created. Go to the main :menuselection:`Expenses` app dashboard, which
displays a default :guilabel:`My Expenses` view, or go to :menuselection:`Expenses app --> My
Expenses --> My Expenses to Report`.
Expenses --> My Expenses`.
First, each individual expense for the report must be selected by clicking the check box next to
each entry, or quickly select all the expenses in the list by clicking the check box next to
:guilabel:`Expense Date`.
Expenses are color coded by status. Any expense with a status of :guilabel:`To Report` (expenses
that still need to be added to an expense report) the text appears in blue. All other statuses
(:guilabel:`To Submit`, :guilabel:`Submitted`, and :guilabel:`Approved`) the text appears in black.
First, select each individual expense for the report by clicking the check box next to each entry,
or quickly select all the expenses in the list by clicking the check box next to :guilabel:`Expense
Date`.
Another way to quickly add all expenses that are not on an expense report is to click
:guilabel:`Create Report` without selecting any expenses, and Odoo will select all expenses with a
status of :guilabel:`To Submit` that are not already on a report.
.. image:: expenses/create-report.png
:align: center
:alt: Select the expenses to submit, then create the report.
Once the expenses have been selected, click the :guilabel:`Create Report` button. The new report
appears with all the expenses listed, and the number of documents is visible in the
:guilabel:`Documents` smart button.
.. note::
Any expense can be selected from the :guilabel:`My Expenses` list, regardless of status. The
:guilabel:`Create Report` button is visible as long as there is a minimum of 1 expense with a
status of :guilabel:`To Report` selected. When the :guilabel:`Create Report` button is clicked,
only expenses with a status of :guilabel:`To Submit` that are *not* currently on another expense
report will appear in the newly created expense report.
It is recommended to add a short summary for each report to help keep expenses organized. Click the
:guilabel:`Edit` button, and the :guilabel:`Expense Report Summary` field appears. Enter a short
description for the expense report (such as `Client Trip NYC`, or `Repairs for Company Car`). Next,
select a :guilabel:`Manager` from the drop-down menu to assign a manager to review the report.
Once the expenses have been selected, click the :guilabel:`Create Report` button. The new report
appears with all the expenses listed in the :guilabel:`Expense` tab. If there is a receipt attached
to an individual expense, a :guilabel:`📎 (paperclip)` icon appears next to the :guilabel:`Customer
to Reinvoice` and :guilabel:`Analytic Distribution` columns.
When the report is created, the date range for the expenses appears in the :guilabel:`Expense Report
Summary` field by default. It is recommended to edit this field with a short summary for each report
to help keep expenses organized. Enter a short description for the expense report (such as `Client
Trip NYC`, or `Repairs for Company Car`) in the :guilabel:`Expense Report Summary` field. Next,
select a :guilabel:`Manager` from the drop-down menu to assign a manager to review the report. If
needed, the :guilabel:`Journal` can be changed. Use the drop-down menu to select a different
:guilabel:`Journal`.
.. image:: expenses/expense-report-summary.png
:align: center
:alt: Enter a short description and select a manager for the report.
If some expenses are not on the report that should be, they can still be added. Click :guilabel:`Add
a line` at the bottom of the :guilabel:`Expense` tab. Click the check box next to each expense to
add, then click :guilabel:`Select`. The items now appear on the report that was just created.
a line` at the bottom of the :guilabel:`Expense` tab. A pop up appears with all the available
expenses that can be added to the report (with a status of :guilabel:`To Submit`). Click the check
box next to each expense to add, then click :guilabel:`Select`. The items now appear on the report
that was just created. If a new expense needs to be added that does *not* appear on the list, click
:guilabel:`New` to create a new expense and add it to the report.
.. image:: expenses/add-an-expense-line.png
:align: center
:alt: Add more expenses to the report before submitting.
.. note::
:guilabel:`Add a line` only appears when the document is in edit mode. It does not appear
otherwise.
Expense reports can be created in one of three places:
When all edits have been completed, click :guilabel:`Save`.
#. Go to the main :menuselection:`Expenses` app dashboard (also accessed by going to
:menuselection:`Expenses app --> My Expenses --> My Expenses`)
#. Go to :menuselection:`Expenses app --> My Expenses --> My Reports`
#. Go to :menuselection:`Expenses app --> Expense Reports`
In any of these views, click :guilabel:`New` to create a new expense report.
.. _expenses/submit:
Submit an expense report
------------------------
@@ -277,18 +345,21 @@ approval. Reports must be individually submitted, and cannot be submitted in bat
specific report from the list of expense reports (if the report is not already open). To view all
expense reports, go to :menuselection:`Expenses app --> My Expenses --> My Reports`.
If the list is large, grouping the results by status may be helpful since only reports that are in a
:guilabel:`Draft` mode need to be submitted, reports with an :guilabel:`Approved` or
If the list is large, grouping the results by status may be helpful since only reports that have a
:guilabel:`To Submit` status need to be submitted, reports with an :guilabel:`Approved` or
:guilabel:`Submitted` status do not.
The :guilabel:`To Submit` expenses are easily identifiable not just from the :guilabel:`To Submit`
status, but the text appears in blue, while the other expenses text appears in black.
.. image:: expenses/expense-status.png
:align: center
:alt: Submit the report to the manager.
.. note::
The status of each report is shown in the :guilabel:`Status` column on the far right. If the
:guilabel:`Status` column is not visible, click the :guilabel:`⋮ (additional options)` icon at
the end of the row, and check the box next to :guilabel:`Status`.
The status of each report is shown in the :guilabel:`Status` column on the right. If the
:guilabel:`Status` column is not visible, click the :guilabel:`Additional Options (two dots)`
icon at the end of the row, and enable :guilabel:`Status`.
Click on a report to open it, then click :guilabel:`Submit To Manager`. After submitting a report,
the next step is to wait for the manager to approve it.
@@ -304,16 +375,17 @@ Approve expenses
In Odoo, not just anyone can approve expense reports— only users with the necessary rights (or
permissions) can. This means that a user must have at least *Team Approver* rights for the
*Expenses* app. Employees with the necessary rights can review expense reports, and approve or
reject them, as well as provide feedback thanks to the integrated communication tool.
*Expenses* app. Employees with the necessary rights can review expense reports, approve or reject
them, and provide feedback thanks to the integrated communication tool.
To see who has rights to approve, go to the main :menuselection:`Settings` app and click on
:guilabel:`Manage Users`.
.. note::
If the *Settings* app is not available, then certain rights are not set on the account. In the
:guilabel:`Access Rights` tab of a user's card in the :menuselection:`Settings` app, the
:guilabel:`Administration` section is set to one of three options:
If the *Settings* app is not available, then certain rights are not set on the account. Check the
:guilabel:`Access Rights` tab of a user's card in the :menuselection:`Settings` app. the
:guilabel:`Administration` section (bottom right of the :guilabel:`Access Rights` tab) is set to
one of three options:
- :guilabel:`None (blank)`: The user cannot access the *Settings* app at all.
- :guilabel:`Access Rights`: The user can only view the :guilabel:`User's & Companies` section of
@@ -332,53 +404,75 @@ there are four options:
- :guilabel:`Team Approver`: The user can only view and approve expense reports for their own
specific team.
- :guilabel:`All Approver`: The user can view and approve any expense report.
- :guilabel:`Administrator`: The user can view and approve any expense report as well as access the
- :guilabel:`Administrator`: The user can view and approve any expense report, as well as access the
reporting and configuration menus in the *Expenses* app.
Users who are able to approve expense reports (typically managers) can easily view all expense
reports to validate. Go to :menuselection:`Expenses app --> Expense Reports --> Reports to
Approve`. This view lists all the expense reports that have been submitted but not approved, as
noted by the :guilabel:`Submitted` tag in the status column.
reports they have access rights to. Go to :menuselection:`Expenses app --> Expense Reports`, and a
list appears with all expense reports that have a status of either :guilabel:`To Submit`,
:guilabel:`Submitted`, :guilabel:`Approved`, :guilabel:`Posted`, or :guilabel:`Done`. Expense
reports with a status of :guilabel:`Refused` are hidden in the default view.
.. image:: expenses/reports-to-approve.png
.. image:: expenses/expense-reports-list.png
:align: center
:alt: Reports to validate are found on the Reports to Approve page.
When viewing expense reports, there is a panel of filters that can be enabled or disabled on the
left side. The three categories that filters can be applied on are :guilabel:`Status`,
:guilabel:`Employee`, and :guilabel:`Company`. To view only expense reports with a particular
status, enable the specific status filter to display the expense reports with only that status.
Disable the specific status filter to hide the reports with that status. To view expense reports for
a particular employee and/or company, enable the specific employee name filter and/or company filter
in the :guilabel:`Employee` and :guilabel:`Company` sections.
Reports can be approved in two ways (individually or several at once) and refused only one way. To
approve multiple expense reports at once, remain in the list view. First, select the reports to
approve by clicking the check box next to each report, or click the box next to :guilabel:`Employee`
to select all reports in the list. Next, click on the :guilabel:`⚙️ Action (gear)` icon, then click
:guilabel:`Approve Report`.
to select all the reports in the list.
.. important::
Only reports with a status of :guilabel:`Submitted` can be approved. It is recommended to only
display the submitted reports by adjusting the status filter on the left side by only having the
:guilabel:`Submitted` filter enabled.
If a report is selected that is unable to be approved, the :guilabel:`Approve Report` button
**will not appear**, indicating there is a problem with the selected report(s).
Next, click the :guilabel:`Approve Report` button.
.. image:: expenses/approve-report.png
:align: center
:alt: Approve multiple reports by clicking the checkboxes next to each report.
To approve an individual report, click on a report to go to a detailed view of that report. In this
view, several options are presented: :guilabel:`Approve`, :guilabel:`Refuse`, or :guilabel:`Reset to
draft`. Click :guilabel:`Approve` to approve the report.
view, several options are presented: :guilabel:`Approve`, :guilabel:`Report in Next Payslip`,
:guilabel:`Refuse`, or :guilabel:`Reset to draft`. Click :guilabel:`Approve` to approve the report.
If :guilabel:`Refuse` is clicked, a pop-up window appears. Enter a brief explanation for the refusal
in the :guilabel:`Reason to refuse Expense` field, then click :guilabel:`Refuse`.
in the :guilabel:`Reason to Refuse Expense` field, and then click :guilabel:`Refuse`.
.. image:: expenses/refuse-expense.png
:align: center
:alt: Send messages in the chatter.
Team managers can easily view all the expense reports for their team members. While in the
:guilabel:`Reports to Approve` view, click on :guilabel:`Filters`, then click :guilabel:`My Team`.
This presents all the reports for the manager's team.
:guilabel:`Expense Reports` view, click the drop-down arrow in the right-side of the search box, and
click on :guilabel:`My Team` in the :guilabel:`Filters` section. This presents all the reports for
the manager's team.
.. image:: expenses/my-team-filter.png
:align: center
:alt: Select the My Team filter.
.. note::
If more information is needed, such as a receipt is missing, communication is easy from the
chatter. In an individual report, simply type in a message, tagging the proper person (if
needed), and post it to the chatter by clicking :guilabel:`Send`. The message is posted in the
chatter, and the person tagged will be notified via email of the message, as well as anyone
following.
.. tip::
If more information is needed, such as a missing receipt, communication is easy from the chatter.
In an individual report, simply click :guilabel:`Send message` to open the message text box. Type
in a message, tagging the proper person (if needed), and post it to the chatter by clicking
:guilabel:`Send`. The message is posted in the chatter, and the person tagged will be notified
via email of the message, as well as any followers.
The only people that can be tagged in a message are *followers*. To see who is a follower, click
on the :guilabel:`👤 (person)` icon to display the followers of the expense.
.. image:: expenses/chatter.png
:align: center
@@ -390,8 +484,9 @@ Post expenses in accounting
===========================
Once an expense report is approved, the next step is to post the report to the accounting journal.
To view all expense reports to post, go to :menuselection:`Expenses --> Expense Reports --> Reports
To Post`.
To view all expense reports, go to :menuselection:`Expenses app --> Expense Reports`. To view only the
expense reports that have been approved and need to be posted, adjust the filters on the left side
so that only the :guilabel:`Approved` status is enabled.
.. image:: expenses/post-reports.png
:align: center
@@ -400,23 +495,24 @@ To Post`.
Just like approvals, expense reports can be posted in two ways (individually or several at once). To
post multiple expense reports at once, remain in the list view. First, select the reports to post by
clicking the check box next to each report, or click the box next to :guilabel:`Employee` to select
all reports in the list. Next, click on the :guilabel:`⚙️ Action (gear)` icon, then click
:guilabel:`Post Entries`.
all the reports in the list. Next, click :guilabel:`Post Entries`.
.. image:: expenses/post-entries.png
:align: center
:alt: Post multiple reports from the Post Entries view.
:alt: Post multiple reports at a time from the Expense Reports view, with the Approved filter.
To post an individual report, click on a report to go to the detailed view of that report. In this
view, several options are presented: :guilabel:`Post Journal Entries`, :guilabel:`Report In Next
Payslip`, or :guilabel:`Refuse`. Click :guilabel:`Post Journal Entries` to post the report.
Payslip`, :guilabel:`Refuse`, or :guilabel:`Reset to Draft`. Click :guilabel:`Post Journal Entries`
to post the report.
If :guilabel:`Refuse` is clicked, a pop-up window appears. Enter a brief explanation for the refusal
in the :guilabel:`Reason to refuse Expense` field, then click :guilabel:`Refuse`. Refused reports
can be viewed by going to :menuselection:`Expenses app --> Expense Reports --> All Reports`. This
list shows all reports, including the refused ones.
in the :guilabel:`Reason to Refuse Expense` field, and then click :guilabel:`Refuse`. Refused
reports can be viewed by going to :menuselection:`Expenses app --> Expense Reports`, then adjusting
the filters on the left so that only :guilabel:`Refused` is selected. This will only show the
refused expense reports.
.. note::
.. important::
To post expense reports to an accounting journal, the user must have following access rights:
- Accounting: Accountant or Adviser
@@ -428,8 +524,8 @@ Reimburse employees
===================
After an expense report is posted to an accounting journal, the next step is to reimburse the
employee. To view all expense reports to pay, go to :menuselection:`Expenses --> Expense Reports -->
Reports To Pay`.
employee. To view all the expense reports to pay, go to :menuselection:`Expenses app --> Expense
Reports --> Reports To Pay`.
.. image:: expenses/reports-to-pay.png
:align: center
@@ -438,99 +534,121 @@ Reports To Pay`.
Just like approvals and posting, expense reports can be paid in two ways (individually or several at
once). To pay multiple expense reports at once, remain in the list view. First, select the reports
to pay by clicking the check box next to each report, or click the box next to :guilabel:`Employee`
to select all reports in the list. Next, click on the :guilabel:`⚙️ Action (gear)` icon, then click
:guilabel:`Register Payment`.
to select all the reports in the list. Next, click :guilabel:`Register Payment`.
.. image:: expenses/register-payment.png
:align: center
:alt: Post multiple reports by clicking the checkboxes, clicking the gear, then post the entries.
:alt: Post multiple reports by selecting them, clicking the gear, and then post the entries.
To pay an individual report, click on a report to go to a detailed view of that report. Click
:guilabel:`Register Payment` to pay the employee.
A :guilabel:`Register Payment` pop-up appears, and the :guilabel:`Journal`, :guilabel:`Payment
Method`, and :guilabel:`Payment Date` can be modified, if needed. When the selections are correct,
click :guilabel:`Create Payment` to send the payment to the employee.
To pay an individual report, click on a report in the list view to go to a detailed view of that
report. Click :guilabel:`Register Payment` to pay the employee. A :guilabel:`Register Payment`
pop-up appears, but when paying an individual expense report instead of several at once, more
options appear in the pop-up. In addition to the :guilabel:`Journal`, :guilabel:`Payment Method`,
and :guilabel:`Payment Date` fields, a :guilabel:`Recipient Bank Account`, :guilabel:`Amount`, and
:guilabel:`Memo` field appear. Select the employee's bank account from the drop-down menu to
directly deposit the payment to their account. When all other selections are correct, click
:guilabel:`Create Payment` to send the payment to the employee.
.. image:: expenses/two-payment-posting-options.png
:align: center
:alt: Different options appear when registering an individual expense report versus multiple
expense reports at once.
Re-invoice expenses to customers
================================
If expenses are tracked on customer projects, expenses can be automatically charged back to the
customer. This is done by creating an expense report, then creating a sales order with the expensed
items on it. Then, managers approve the expense report, and the accounting department posts the
journal entries. Finally, the customer is invoiced.
customer. This is done by creating an expense, referencing the :abbr:`SO (Sales Order)` the expense
should be added to, and then creating the expense report. Next, managers approve the expense report,
and the accounting department posts the journal entries. Finally, once the expense report is posted
to a journal, the expense(s) appears on the :abbr:`SO (Sales Order)` that was referenced. The sales
order can then be invoiced, thus invoicing the customer for the expense.
Setup
-----
First, specify the invoicing policy for each expense product. Go to :menuselection:`Expenses app -->
Configuration --> Expense Products`. Click on the expense product to edit, then click
:guilabel:`Edit`. Under the :guilabel:`Invoicing` section, select the :guilabel:`Invoicing Policy`
and :guilabel:`Re-Invoicing Policy` by clicking the radio button next to the desired selection.
First, specify the invoicing policy for each expense category. Go to :menuselection:`Expenses app
--> Configuration --> Expense Categories`. Click on the expense category to open the expense
category form. Under the :guilabel:`Invoicing` section, click the radio button next to the desired
selection for :guilabel:`Re-Invoicing Expenses`. Options are :guilabel:`None`, :guilabel:`At cost`,
and :guilabel:`Sales price`.
:guilabel:`Invoicing Policy`:
:guilabel:`Re-Invoicing Expenses`:
- :guilabel:`Ordered quantities`: Expense product will only invoice expenses based on the ordered
quantity.
- :guilabel:`Delivered quantities`: Expense product will only invoice expenses based on the
delivered quantity.
:guilabel:`Re-Invoicing Policy`:
- :guilabel:`No`: Expense product will not be re-invoiced.
- :guilabel:`At cost`: Expense product will invoice expenses at their real cost.
- :guilabel:`At sales price`: Expense product will invoice the price set on the sale order.
- :guilabel:`None`: Expense category will not be re-invoiced.
- :guilabel:`At cost`: Expense category will invoice expenses at their real cost.
- :guilabel:`At sales price`: Expense category will invoice the price set on the sale order.
Create an expense
-----------------
First, when :ref:`creating a new expense <expenses/new>`, the correct information needs to be
entered in order to re-invoice a customer. Select the :guilabel:`Customer to Reinvoice` from the
drop-down menu. Next, select the :guilabel:`Analytic Account` the expense will be posted to.
entered in order to re-invoice a customer. Select the *sales order* the expense will appear on in
the :guilabel:`Customer to Reinvoice` section, from the drop-down menu. Next, select the
:guilabel:`Analytic Account` the expense will be posted to. After the expense(s) are created, the
expense report needs to be :ref:`created <expenses/report>` and :ref:`submitted <expenses/submit>`
as usual.
.. image:: expenses/reinvoice-expense.png
:align: center
:alt: Ensure the customer to be invoiced is called out on the expense.
Create a quote and sales order
------------------------------
.. important::
Selecting a :guilabel:`Customer to Reinvoice` when creating an expense is critical, since this is
what causes the expenses to be automatically invoiced after an expense report is approved.
In the :menuselection:`Sales` app, create a quote for the customer being invoiced, listing the
expense products. First, click :guilabel:`Create` to create a new quotation. Next, select the
:guilabel:`Customer` being invoiced for the expenses from the drop-down menu.
In the :guilabel:`Order Lines` tab, click :guilabel:`Add a product`. In the :guilabel:`Product`
field, select the first item being invoiced from the drop-down menu, or type in the product name.
Then, update the :guilabel:`Quantity`, the :guilabel:`Delivered` quantity, and the :guilabel:`Unit
Price` if needed. Repeat this for all products being invoiced. When all the products have been added
to the quote, click :guilabel:`Confirm` and the quotation becomes a sales order.
.. image:: expenses/expenses-salesorder.png
:align: center
:alt: Create and confirm the sales order with the expenses listed as products.
Once the quote turns into a sales order, a :guilabel:`Delivered` column appears. The delivered
quantity must be updated for each item. Click on the `0.000` field for each product, and enter the
delivered quantity. When all delivered quantities have been entered, click :guilabel:`Save`.
The :guilabel:`Customer to Reinvoice` field can be modified *until an expense report is*
**approved**, then the field is no longer able to be modified.
Validate and post expenses
--------------------------
Only employees with permissions (typically managers or supervisors) can :ref:`approve expenses
<expenses/approve>`. Before approving an expense report, ensure the :guilabel:`Analytic Account` is
set on every expense line of a report. If an :guilabel:`Analytic Account` is missing, click
:guilabel:`Edit` and select the correct account from the drop-down menu, then click
:guilabel:`Approve` or :guilabel:`Refuse`.
<expenses/approve>`. Before approving an expense report, ensure the :guilabel:`Analytic
Distribution` is set on every expense line of a report. If an :guilabel:`Analytic Distribution` is
missing, assign the correct account(s) from the drop-down menu, and then click :guilabel:`Approve`
or :guilabel:`Refuse`.
The accounting department is typically responsible for :ref:`posting journal entries
<expenses/post>`. Once an expense report is approved, it can then be posted.
<expenses/post>`. Once an expense report is approved, it can then be posted. The :abbr:`SO (Sales
Order)` is **only** updated *after the journal entries are posted*. One the journal entries are
posted, the expenses now appear on the referenced :abbr:`SO (Sales Order)`.
Invoice expenses
----------------
Once the quote has turned into a sales order, and the expense report has been approved, it is time
to invoice the customer. Go to :menuselection:`Sales app --> To Invoice --> Orders to Invoice` to
view the sales orders ready to be invoiced.
Once the :abbr:`SO (Sales Order)` has been updated, it is time to invoice the customer. After the
expense report has been approved and the journal entries have been posted, click the
:guilabel:`Sales Orders` smart button to open the :abbr:`SO (Sales Order)`. The expenses to be
re-invoiced are now on the :abbr:`SO (Sales Order)`.
Next, find the sales order related to the expense report, click into it, and then click
:guilabel:`Create Invoice` and a :guilabel:`Create invoices` pop-up window appears. Select if the
invoice is a :guilabel:`Regular invoice`, :guilabel:`Down payment (percentage)`, or :guilabel:`Down
payment (fixed amount)` by clicking the radio button next to the selection. For either down payment
options, enter the amount (fixed or percentage) in the :guilabel:`Down Payment Amount` field.
Finally, click either :guilabel:`create and view invoice` or :guilabel:`create invoice`.
.. image:: expenses/sales-order.png
:align: center
:alt: After the expense report is posted to the journal entry, the sales order can be called up
by clicking on the sales order number.
.. note::
More than one :abbr:`SO (Sales Order)` can be referenced on an expense report. If more than one
:abbr:`SO (Sales Order)` is referenced, the :guilabel:`Sales Orders` smart button will list the
number of :abbr:`SO (Sales Order)`'s. If multiple :abbr:`SO (Sales Order)`'s are listed, the
:guilabel:`Sales Orders` smart button opens a list view of all the :abbr:`SO (Sales Order)`'s on
the expense report. Click on a :abbr:`SO (Sales Order)` to open the individual :abbr:`SO (Sales
Order)`.
The expenses are listed in the :abbr:`SO (Sales Order)` :guilabel:`Order Lines` tab.
.. image:: expenses/so-details.png
:align: center
:alt: See the expenses listed on the sales order after clicking into it.
Next, click :guilabel:`Create Invoice`, and select if the invoice is for a :guilabel:`Regular
invoice`, a :guilabel:`Down payment (percentage)`, or a :guilabel:`Down payment (fixed amount)` by
clicking the radio button next to it. Then, click :guilabel:`Create Invoice`. The customer has now
been invoiced for the expenses.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

@@ -107,8 +107,8 @@ available on Odoo.
- Poland - Accounting
- Portugal - Accounting
- Romania - Accounting
- Saudi Arabia - Accounting
- Singapore - Accounting
- :doc:`Saudi Arabia - Accounting <fiscal_localizations/saudi_arabia>`
- :doc:`Singapore - Accounting <fiscal_localizations/singapore>`
- Slovak - Accounting
- Slovenian - Accounting
- South Africa - Accounting
@@ -124,7 +124,7 @@ available on Odoo.
- United States - Accounting
- Uruguay - Accounting
- Venezuela - Accounting
- Vietnam - Accounting
- :doc:`Vietnam - Accounting <fiscal_localizations/vietnam>`
.. toctree::
:titlesonly:
@@ -148,7 +148,10 @@ available on Odoo.
fiscal_localizations/mexico
fiscal_localizations/netherlands
fiscal_localizations/peru
fiscal_localizations/saudi_arabia
fiscal_localizations/singapore
fiscal_localizations/spain
fiscal_localizations/switzerland
fiscal_localizations/vietnam
fiscal_localizations/united_arab_emirates
fiscal_localizations/united_kingdom
@@ -2,75 +2,66 @@
Australia
=========
.. _australia/keypay:
.. _australia/employment-hero:
KeyPay Australian Payroll
=========================
Employment Hero Australian Payroll
==================================
The KeyPay Module synchronizes payslip accounting entries (e.g., expenses, social charges,
liabilities, taxes) from KeyPay to Odoo automatically. Payroll administration is still done in
KeyPay. We only record the journal entries in Odoo.
The Employment Hero module synchronizes payslip accounting entries (e.g., expenses, social charges,
liabilities, taxes) from Employment Hero to Odoo automatically. Payroll administration is still done
in Employment Hero. We only record the journal entries in Odoo.
Configuration Steps
-------------------
.. important::
KeyPay was rebranded as **Employment Hero** in March 2023.
#. Create a company located in Australia.
#. Check that the Australian localization module (Australia - Accounting) is installed.
#. Configure the *KeyPay API*.
Configuration
-------------
.. image:: australia/australia-keypay-api.png
:align: center
:alt: Odoo Accounting settings includes a section for the Australian Loclization
#. :ref:`Activate <general/install>` the :guilabel:`Employment Hero Australian Payroll` module
(technical name: `l10n_au_keypay`).
#. Configure the **Employment Hero API** by going to :menuselection:`Accounting --> Configuration -->
Settings`. More fields become visible after clicking on :guilabel:`Enable Employment Hero
Integration`.
#. More fields become visible after clicking on *Enable KeyPay Integration*.
.. image:: australia/employment-hero-integration.png
:alt: Enabling Employment Hero Integration in Odoo Accounting displays new fields in the
settings
.. image:: australia/australia-keypay-integration.png
:align: center
:alt: Enabling KeyPay Integration in Odoo Accounting displays new fields in the settings
- You can find the API Key in the :guilabel:`My Account` section of the Employment Hero platform.
#. You can find the API Key in the *My Account* section of the KeyPay platform.
.. image:: australia/employment-hero-myaccount.png
:alt: "Account Details" section on the Employment Hero dashboard
.. image:: australia/australia-keypay-myaccount.png
:align: center
:alt: "Account Details" section on the KeyPay dashboard
- The **Payroll URL** is pre-filled with `https://keypay.yourpayroll.com.au`. *Please do not
change it.*
- You can find the **Business ID** in the Employment Hero URL. (i.e., `189241`)
#. The **Payroll URL** is pre-filled with ``https://keypay.yourpayroll.com.au``. *Please do not
change it.*
#. You can find the **Business ID** in the KeyPay URL. (i.e., ``189241``)
.. image:: australia/employment-hero-business-id.png
:alt: The Employment Hero "Business ID" number is in the URL
.. image:: australia/australia-keypay-business-id.png
:align: center
:alt: The KeyPay "Business ID" number is in the URL
#. You can choose any Odoo journal to post the payslip entries.
- You can choose any Odoo journal to post the payslip entries.
How does the API work?
----------------------
The API syncs the journal entries from KeyPay to Odoo and leaves them in draft mode. The reference
includes the KeyPay payslip entry ID in brackets for the user to easily retrieve the same record in
KeyPay and Odoo.
The API syncs the journal entries from Employment Hero to Odoo and leaves them in draft mode. The
reference includes the Employment Hero payslip entry ID in brackets for the user to easily retrieve
the same record in Employment Hero and Odoo.
.. image:: australia/australia-keypay-journal-entry.png
:align: center
:alt: Example of a KeyPay Journal Entry in Odoo Accounting (Australia)
.. image:: australia/employment-hero-journal-entry.png
:alt: Example of a Employment Hero Journal Entry in Odoo Accounting (Australia)
.. note::
The API sync is triggered by scheduled actions.
By default, the synchronization happens once per week. You can fetch the records manually by going
to :menuselection:`Accounting --> Configuration --> Settings` and, in the :guilabel:`Enable
Employment Hero Integration` option, click on :guilabel:`Fetch Payruns Manually`.
.. image:: australia/australia-keypay-scheduled-actions.png
:align: center
:alt: Scheduled Actions settings for KeyPay Payroll in Odoo (debug mode)
Employment Hero payslip entries also work based on double-entry bookkeeping.
KeyPay payslip entries also work based on double-entry bookkeeping. Debit must equal credit (like in
Odoo).
The accounts used by Employment Hero are defined in the section :guilabel:`Payroll settings`.
The accounts used by KeyPay are defined in the section **Payroll settings**.
.. image:: australia/employment-hero-chart-of-accounts.png
:alt: Chart of Accounts menu in Employment Hero
.. image:: australia/australia-keypay-chart-of-accounts.png
:align: center
:alt: Chart of Accounts menu in KeyPay
For the API to work, you need to create the same accounts as the default accounts of your KeyPay
business (**same name and same code**) in Odoo. You also need to choose the correct account types in
Odoo to generate accurate financial reports.
For the API to work, you need to create the same accounts as the default accounts of your Employment
Hero business (**same name and same code**) in Odoo. You also need to choose the correct account
types in Odoo to generate accurate financial reports.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

@@ -2,7 +2,274 @@
Belgium
=======
.. _belgium/introduction:
.. _belgium/configuration:
Configuration
=============
Install the :guilabel:`🇧🇪 Belgium` :ref:`fiscal localization package
<fiscal_localizations/packages>` to get all the default accounting features of the Belgian
localization, following the :abbr:`IFRS(International Financial Reporting Standards)` rules.
:ref:`Install <general/install>` the :guilabel:`Belgium - Disallowed Expenses Data` module
(`l10n_be_disallowed_expenses`) to manage :ref:`disallowed expenses <belgium/disallowed-expenses>`.
.. _belgium/coa:
Chart of accounts
=================
You can reach the :guilabel:`Chart of accounts` by going to :menuselection:`Accounting -->
Configuration --> Accounting: Chart of Accounts`.
The Belgian chart of accounts includes pre-configured accounts as described in the :abbr:`PCMN(Plan
Comptable Minimum Normalisé)`. To add a new account, click :guilabel:`New`. A new line appears. Fill
it in, click :guilabel:`Save`, and then :guilabel:`Setup` to configure it further.
.. seealso::
:doc:`../accounting/get_started/chart_of_accounts`
.. _belgium/taxes:
Taxes
=====
Default Belgian taxes are created automatically when the :guilabel:`Belgium - Accounting` and
the :guilabel:`Belgium - Accounting Reports` modules are installed. Each tax impacts the Belgian
:guilabel:`Tax Report`, available by going to :menuselection:`Accounting --> Reporting -->
Statements Reports: Tax Report`.
In Belgium, the standard VAT rate is **21%**, but there are lower rates for some categories of goods
and services. An intermediate rate of **12%** is applied on social housing and food served in
restaurants, while a reduced rate of **6%** applies to most basic goods, such as food, water supply,
books, and medicine. A **0%** rate applies to some exceptional goods and services, such as some
daily and weekly publications, as well as recycled goods.
.. _belgium/non-deductible:
Non-deductible taxes
--------------------
In Belgium, some taxes are not fully deductible, such as taxes on the maintenance of cars. This
means a part of these taxes is considered as an expense.
In Odoo, you can configure non-deductible taxes by creating tax rules for these taxes and linking
them to the corresponding accounts. This way, the system automatically calculates the taxes and
allocates them to the appropriate accounts.
To configure a new non-deductible tax, go to :menuselection:`Accounting --> Configuration -->
Accounting: Taxes`, and click :guilabel:`New`:
#. :guilabel:`Add a line` and select :guilabel:`Base` in the :guilabel:`Based On` column;
#. :guilabel:`Add a line`, then select :guilabel:`on tax` in the :guilabel:`Based on` column and
enter the **non-deductible** percentage in the :guilabel:`%` column;
#. On the :guilabel:`of tax` line, select the :guilabel:`Tax Grid(s)` related to your tax;
#. :guilabel:`Add a line` with the **deductible** percentage in the :guilabel:`%` column;
#. Set :guilabel:`of tax` in :guilabel:`Based On`;
#. Select :guilabel:`411000 VAT recoverable` as account, and select the related tax grid.
Once you have created a non-deductible tax, you can apply it to your transactions by selecting the
appropriate tax during the encoding of bills and credit notes. The system automatically calculates
the tax amount and allocates it to the corresponding accounts based on the tax rules configured.
.. example::
With the Belgian localization, the **21% car** tax is created by default (50% non-deductible).
.. image:: belgium/deductible-tax.png
:alt: Example of not-fully deductible tax
.. seealso::
- :doc:`Taxes <../accounting/taxes>`
- :doc:`../accounting/reporting/tax_returns`
.. _belgium/reports:
Reports
=======
Here is the list of Belgian-specific reports available:
- Balance sheet;
- Profit & loss;
- Tax report;
- Partner VAT Listing;
- EC Sales List;
- Intrastat.
You can access Belgian-specific versions of reports by clicking on the **book** icon when on a
report and selecting its Belgian version: **(BE)**.
.. image:: belgium/belgian-reports.png
:alt: Belgian version of reports
.. seealso::
:doc:`../accounting/reporting`
.. _belgium/disallowed-expenses:
Disallowed expenses report
--------------------------
**Disallowed expenses** are expenses that can be deducted from your accounting result but not from
your fiscal result.
The **disallowed expenses report** is available by going to :menuselection:`Accounting --> Reporting
--> Management: Disallowed Expenses`. It allows financial results in real-time, and periodic
changes. This report is generated based on the **disallowed expenses categories** that you can reach
by going to :menuselection:`Accounting --> Configuration --> Management: Disallowed Expenses
Categories`. Some categories already exist by default but do not have any rates. Click on
:guilabel:`Set Rates` to update a specific category.
.. tip::
- You can add multiple rates for various dates. In that case, the rate used to calculate the
expense depends on the date at which it is calculated, and the rate set for that date.
- If you have the **Fleet** app installed, tick the :guilabel:`Car Category` box when applicable.
This makes the vehicle mandatory while booking a vendor bill.
To link a disallowed expenses category with a specific account, go to :menuselection:`Accounting -->
Configuration --> Acounting: Chart of Accounts`. Find the account you want, and click on
:guilabel:`Setup`. Add the :guilabel:`Disallowed Expense category` in the :guilabel:`Disallowed
Expenses` field. From now, when an expense is created with this account, the disallowed expense is
calculated based on the rate mentioned in the :guilabel:`Disallowed Expense category`.
Let's take an example reflecting **restaurant** and **car expenses**.
.. _belgium/restaurant-expenses:
Restaurant expenses
~~~~~~~~~~~~~~~~~~~
In Belgium, 31% of **restaurant** expenses are non-deductible. Create a new **disallowed expenses
category** and set both :guilabel:`Related Account(s)` and :guilabel:`Current Rate`.
.. image:: belgium/restaurant-expenses.png
:alt: Disallowed expenses categories
.. _belgium/vehicle-split:
Car expenses: vehicle split
~~~~~~~~~~~~~~~~~~~~~~~~~~~
In Belgium, the deductible percentage varies from car to car and, therefore, should be indicated for
each vehicle. To do so, open :menuselection:`Fleet` and select a vehicle. In the :guilabel:`Tax
info` tab, go to the :guilabel:`Disallowed Expenses Rate` section and click on :guilabel:`Add a
line`. Add a :guilabel:`Start Date` and a :guilabel:`%`. The amounts go in the same account for all
car expenses.
When you create a bill for car expenses, you can link each expense to a specific car by filling the
:guilabel:`Vehicle` column, so the right percentage is applied.
.. image:: belgium/car-bill.png
:alt: Disallowed expenses categories
The :guilabel:`vehicle split` option available in the disallowed expenses report allows you to see
the rate and disallowed amount for each car.
.. image:: belgium/vehicle-split.png
:alt: Disallowed expenses categories
.. _belgium/forms:
Fee form 281.50 and form 325
============================
.. _belgium/281.50:
Fee form 281.50
---------------
Annually, a **281.50 fee form** must be reported to the fiscal authorities. To do so, the tag
`281.50` must be added on the **contact form** of the entities concerned by the **281.50** fee. To
add the tag, open :menuselection:`Contacts`, select the person or company you want to create a
**281.50 fee form** for, and add the `281.50` tag in the :guilabel:`Tags` field.
.. image:: belgium/281-50.png
:alt: add the tag 281.50 on a contact form
.. note::
Make sure the **street, zip code, country**, and **VAT number** are also informed on the
**Contact form**.
Then, depending on the nature of the expense, add the corresponding `281.50` tag on the impact
accounts. To do so, go to :menuselection:`Accounting --> Configuration --> Accounting: Chart of
Accounts`, and click on :guilabel:`Setup` to add the corresponding `281.50` tag on the impacted
accounts, i.e., :guilabel:`281.50 - Commissions`, depending on the nature of the expense.
.. _belgium/325:
Form 325
--------
You can create a **325 form** by going to :menuselection:`Accounting --> Reporting --> Belgium:
Create 325 form`. A new page pops up: select the right options and click :guilabel:`Generate 325
form`. To open an already generated **325 form**, go to :menuselection:`Accounting --> Reporting -->
Belgium: Open 325 forms`.
.. image:: belgium/325-form.png
:alt: Add the tag 281-50 on a contact form
.. _belgium/coda-soda:
CODA and SODA statements
========================
.. _belgium/coda:
CODA
----
**CODA** is an electronic XML format used to import Belgian bank statements. You can download CODA
files from your bank and import them directly into Odoo by clicking :guilabel:`Import Statement`
from your :guilabel:`Bank` journal on your dashboard.
.. image:: belgium/coda-import.png
:alt: Import CODA files
.. seealso::
:ref:`Import bank statements files <transactions/import>`
.. _belgium/soda:
SODA
----
**SODA** is an electronic XML format used to import accounting entries related to salaries. SODA
files can be imported into the journal you use to record salaries by going to your Accounting
**dashboard** and clicking :guilabel:`Upload` in the related journal card form.
Once your **SODA** files are imported, the entries are created automatically in your 'salary'
journal.
.. image:: belgium/soda-import.png
:alt: Import SODA files
.. _belgium/einvoicing:
Electronic invoicing
====================
Odoo supports the **Peppol BIS Billing 3.0 (UBL)** electronic invoicing format. To enable it for a
customer, go to :menuselection:`Accounting --> Customers --> Customers`, open their contact form,
and under the :guilabel:`Accounting` tab, select the :guilabel:`Peppol BIS Billing 3.0` format.
.. seealso::
:doc:`../accounting/customer_invoices/electronic_invoicing`
.. _belgium/cash-discount:
Cash discount
=============
In Belgium, if an early payment discount is offered on an invoice, the tax is calculated based on
the discounted total amount, whether the customer benefits from the discount or not.
To apply the right tax amount and report it correctly in your VAT return, set the tax reduction as
:guilabel:`Always (upon invoice)`.
.. seealso::
:doc:`../accounting/customer_invoices/cash_discounts`
.. _belgium/pos-restaurant-certification:
Fiscal certification: POS restaurant
====================================
@@ -12,14 +279,14 @@ use a government-certified **Cash Register System** for their receipts. This app
earnings (excluding VAT, drinks, and take-away food) exceed 25,000 euros.
This government-certified system entails the use of a :ref:`certified POS system
<belgium/certified>`, along with a device called a :ref:`Fiscal Data Module <belgium/fdm>` (or
<belgium/certified-pos>`, along with a device called a :ref:`Fiscal Data Module <belgium/fdm>` (or
**black box**) and a :ref:`VAT Signing Card <belgium/vat>`.
.. important::
Do not forget to register as *foodservice industry manager* on the `Federal Public Service
Finance registration form <https://www.systemedecaisseenregistreuse.be/fr/enregistrement>`_.
.. _belgium/certified:
.. _belgium/certified-pos:
Certified POS system
--------------------
@@ -121,7 +388,6 @@ As a pre-requisite, :ref:`activate <general/install>` the `Belgian Registered Ca
(technical name: `pos_blackbox_be`).
.. image:: belgium/be-modules.png
:align: center
:alt: black box modules for belgian fiscal certification
Once the module is activated, add your VAT number to your company information. To set it up, go to
@@ -131,7 +397,6 @@ so, go to the :guilabel:`Employees` app and open an employee form. There, go to
settings tab --> Attendance/Point of Sale`, and fill in the :guilabel:`INSZ or BIS number` field.
.. image:: belgium/bis-number.png
:align: center
:alt: ISNZ or BIS number field on employee form
.. tip::
@@ -160,7 +425,6 @@ database. To verify that the IoT Box recognizes the FDM, go to the IoT homepage
:guilabel:`IOT Device` section, which should display the FDM.
.. image:: belgium/iot-devices.png
:align: center
:alt: Hardware status page on a registered IoT Box
Then, add the IoT to your POS. To do so, go to :menuselection:`Point of Sale --> Configuration -->
Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

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