Compare commits

...

33 Commits

Author SHA1 Message Date
Syed Sarmad Sabih
79a6413dfe Update deploy.rst
Fix typo db_filter to the correct usage dbfilter

X-original-commit: 0fbf9995f0
2024-03-27 17:32:02 +01:00
Jess Rogers (jero)
adf649f6e4 [ADD] crm: quality leads report doc
closes odoo/documentation#8359

X-original-commit: c63dda1e5f
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
Co-authored-by: Antoine Vandevenne (anv) <anv@odoo.com>
2024-03-27 14:02:47 +00:00
masi-odoo
6766c70169 [IMP] accounting/l10n_cl: electronic purchase invoice
Google Drive image folder: https://drive.google.com/drive/folders/12OaeDvzn-u5Nf_AjhIzrWaZWEb7smlTL?usp=drive_link

closes odoo/documentation#8268

X-original-commit: 39910d1e7b
Signed-off-by: Marco Antonio Iribe Sepulveda (masi) <masi@odoo.com>
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2024-03-27 10:41:50 +00:00
Lara Martini (larm)
e39ccf8de0 [IMP] payroll: updating new reporting for 17
closes odoo/documentation#8357

X-original-commit: e4057858a1
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Lara Martini (larm) <larm@odoo.com>
2024-03-26 04:58:55 +00:00
Lara Martini (larm)
48640eff5a [IMP] payroll: updating payslips info and pics for 17
closes odoo/documentation#8342

X-original-commit: 735097850c
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Lara Martini (larm) <larm@odoo.com>
2024-03-25 23:46:56 +00:00
Felicious
4813419d4e [IMP] inventory: remove rescheduling
closes odoo/documentation#8290

X-original-commit: 8ad53481d1
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: brse-odoo <brse@odoo.com>
2024-03-25 23:46:55 +00:00
Rémy Voet (ryv)
5f2a5d318e [IMP] orm: add 'any' and 'not any' operators
- Add descriptions of the 'any' and 'not any' operators
- Simplify the example for searching partners
- Add an example using the 'any' operator for the sale.order model

closes odoo/documentation#8349

Closes: #7620
X-original-commit: 7353d7b2cc
Signed-off-by: Rémy Voet (ryv) <ryv@odoo.com>
2024-03-25 12:54:14 +00:00
Zachary Straub (ZST)
c2c47456c7 [FIX] crm: unattended leads example
closes odoo/documentation#8228

X-original-commit: d43cc3e466
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2024-03-23 17:16:39 +00:00
Jess Rogers (jero)
6a6077b306 [ADD] crm: expected revenue report doc
closes odoo/documentation#8346

X-original-commit: 4a28f69400
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
2024-03-22 19:30:00 +00:00
Brandon Seltenrich (BRSE)
53763fd099 [ADD] inventory: add before date res doc
closes odoo/documentation#8343

X-original-commit: 3d82c7671c
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Brandon Seltenrich (brse) <brse@odoo.com>
2024-03-22 19:29:58 +00:00
KC (ksc)
c9ba286471 [IMP] email marketing: updated unsubscription/blacklist doc for 17
closes odoo/documentation#8341

X-original-commit: 3e4463c978
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
2024-03-22 19:29:57 +00:00
KC (ksc)
a7b8901bdd [ADD] subscriptions: add scheduled actions doc
closes odoo/documentation#8340

X-original-commit: d8494b2c4b
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
2024-03-22 19:29:56 +00:00
Brandon Seltenrich (BRSE)
8e5ee9ec2c [IMP] purchase: update blanket orders doc
closes odoo/documentation#8339

X-original-commit: 9a5074848c
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Brandon Seltenrich (brse) <brse@odoo.com>
2024-03-22 19:29:55 +00:00
Paolo Gatti (pgi)
6a8158c657 [IMP] finance/fiscal_localizations: Internal Reverse Charge
Many updates are due because of all the changes that have happened in
the last version. Internal Reverse Charge section has been added. The
configuration section has been reordered and information no longer valid
(like invoices being automatically sent) are removed. The flow is
described in a little more detail.

closes odoo/documentation#8324

X-original-commit: d7595e5eb8
Signed-off-by: Paolo Gatti (pgi) <pgi@odoo.com>
2024-03-22 18:05:06 +00:00
Tom Aarab (toaa)
632be997c8 [IMP] accounting: add extra taxes
Extra taxes (ecotax, luxury, etc) are currently missing from doc

taskid-3794931

closes odoo/documentation#8321

X-original-commit: 0b6bef6516
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2024-03-22 14:57:19 +00:00
tiku-odoo
b32aab35a0 [IMP] essentials: import export rewrite
closes odoo/documentation#8317

X-original-commit: c635baa0a2
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Timothy Kukulka (tiku) <tiku@odoo.com>
2024-03-22 14:57:17 +00:00
Jonathan Castillo (jcs)
c2add27bd5 [FIX] website: anchors in analytics hyperlinks
Custom anchors can be used as hyperlinks to target a specific
heading on the page. However, the google analytics one didn't
work well because of the capital letters used.

closes odoo/documentation#8309

X-original-commit: 3a18276d4a
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2024-03-22 13:01:32 +00:00
tiku-odoo
4234a68d25 [IMP] iot: flash card update section
closes odoo/documentation#8305

X-original-commit: 1f89b5f4b2
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Timothy Kukulka (tiku) <tiku@odoo.com>
2024-03-22 13:01:29 +00:00
Mohamed Alkobrosli
47edb88436 [FW][FIX] dev/assets: typo
the "py" letter should be "by" to make the syntax correct and understood.

closes odoo/documentation#8302

Forward-port-of: odoo/documentation#8276
Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com>
2024-03-22 07:27:11 +00:00
tiku-odoo
bb8e72fb60 [IMP] email comms: feedback loop edit
closes odoo/documentation#8283

X-original-commit: 2fad56f841
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Timothy Kukulka (tiku) <tiku@odoo.com>
2024-03-22 06:04:11 +00:00
Ray Carnes
ac92c70b91 [IMP] upgrade: ready to upgrade image
Screenshot taken from Odoo 16 database with the option to upgrade to Odoo 17

closes odoo/documentation#8274

X-original-commit: b07ea8d014
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2024-03-22 06:04:07 +00:00
Donatienne (dopi)
765b61eff3 [ADD] Website: Structure blocks
task-3733822

closes odoo/documentation#8273

X-original-commit: 158a1dee79
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2024-03-22 06:04:06 +00:00
Martin Trigaux (mat)
2058488eaa [I18N] conf: add more language codes
closes odoo/documentation#8251

X-original-commit: 88fa5d6e0a
Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2024-03-22 06:03:59 +00:00
glovebx
3e4b026979 [FW][FIX] dev/view_architectures: domain attribute of search view fields
The domain in the `field` component cannot accept user-provided values or access self variables.
This commit removes the misleading sentence about it from the documentation.

closes odoo/documentation#8229

Forward-port-of: odoo/documentation#8193
Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com>
2024-03-22 03:08:58 +00:00
Felicious
d6cd27bc9d [ADD]inventory: product type
closes odoo/documentation#8260

X-original-commit: bfcb1fa443
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: brse-odoo <brse@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>
2024-03-21 07:48:58 +00:00
tiku-odoo
0001bbaec4 [IMP] hosting: add admonition block on subscription
closes odoo/documentation#8256

X-original-commit: 9df807a532
Signed-off-by: Timothy Kukulka (tiku) <tiku@odoo.com>
2024-03-20 20:02:09 +00:00
tiku-odoo
cbe068e3ab [IMP] developer: external api add admonition block
closes odoo/documentation#8240

X-original-commit: d6f5e74971
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Timothy Kukulka (tiku) <tiku@odoo.com>
2024-03-20 16:31:57 +00:00
tiku-odoo
c411a9f924 [REM] voip: onsip scrub per onsip
closes odoo/documentation#8239

X-original-commit: 7b728a22f4
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Timothy Kukulka (tiku) <tiku@odoo.com>
2024-03-20 16:31:56 +00:00
Bastien Fafchamps (bafa)
df1f1dd6b6 [FIX] web: adapted Dropdown component documentation to new api
This commit adapts the documentation to reflect changes made to the Dropdown
component after its refactor, namely:
- Adapted props list
- Adapted code snippets
- Added DropdownGroup component documentation
- More consise examples

closes odoo/documentation#8156

Task-id: 3266145
Signed-off-by: Bastien Fafchamps (bafa) <bafa@odoo.com>
2024-03-20 16:31:55 +00:00
Xavier (XPL)
379798b35c [FIX] website: domain names
closes odoo/documentation#8236

X-original-commit: b7ffab804b
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2024-03-20 14:25:03 +00:00
Felicious
b3d06500ef [DEL] remove usage; contains packages + packagings
closes odoo/documentation#8226

X-original-commit: 281d3976da
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
2024-03-20 12:09:38 +00:00
Louis (loti)
5bb97c3fcb [IMP] payment: render /payment/status entirely from the server
Previously, /payment/status would render a template on the server-side, and a JS widget would render subtemplates on the client-side and insert them in the server-side rendered template.

However, mixing server-side and client-side templates causes issues because the context is not properly communicated between client and server. It also makes the code more complex.

This change assumes that no new information returned by /payment/status is worth re-rendering part of the template. If the transaction moves from a pending ('draft', 'pending') state to a final state, the customer should be redirected to the final route that will display the updated information on the transaction.

task-3340354

closes odoo/documentation#8198

Related: odoo/upgrade#5829
Related: odoo/odoo#149821
Related: odoo/enterprise#58822
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2024-03-20 12:09:27 +00:00
Colu
fbbce69f56 [IMP] database management: update on-premise page
task-3627193

closes odoo/documentation#8181

X-original-commit: 739309b258
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2024-03-19 14:13:52 +00:00
205 changed files with 3350 additions and 1876 deletions

View File

@@ -233,6 +233,7 @@ languages_names = {
'es': 'ES',
'fr': 'FR',
'it': 'IT',
'ko': 'KO',
'nl': 'NL',
'pt_BR': 'PT',
'ro': 'RO',

View File

@@ -20,7 +20,7 @@ To Odoo Online
- Odoo Online is *not* compatible with **non-standard apps**.
- The database's current version must be :doc:`supported <supported_versions>`.
#. Create a :ref:`duplicate <duplicate_premise>` of the database.
#. Create a :ref:`duplicate of the database <on-premise/duplicate>`.
#. In this duplicate, uninstall all **non-standard apps**.
#. Use the database manager to grab a *dump with filestore*.
#. `Submit a support ticket <https://www.odoo.com/help>`_ including the following:
@@ -59,6 +59,11 @@ Transferring an Odoo Online database
Click the gear icon (:guilabel:`⚙`) next to the database name on the `Odoo Online database
manager <https://www.odoo.com/my/databases/>`_ to display its version number.
.. warning::
If there is an active Odoo subscription linked to the database being migrated, reach out to
the Customer Service Manager or `submit a support ticket <https://www.odoo.com/help>`_ to
complete the subscription transfer.
To on-premise
-------------

View File

@@ -7,159 +7,110 @@ On-premise
Register a database
===================
To register your database, you just need to enter your Subscription Code in the
banner in the App Switcher. Make sure you do not add extra spaces before or after
your subscription code. If the registration is successful, it will turn green and
will provide you with the Expiration Date of your freshly-registered database. You
can check this Expiration Date in the About menu (Odoo 9) or in the Settings Dashboard
(Odoo 10).
To register your database, enter your subscription code in the banner in the app dashboard. If the
registration is successful, the banner will turn green and display the database expiration date.
Registration Error Message
--------------------------
.. tip::
The expiration date is also displayed at the bottom of the Settings page.
If you are unable to register your database, you will likely encounter this
message:
.. image:: on_premise/error_message_sub_code.png
:alt: Something went wrong while registering your database, you can try again or contact Odoo
Help
Solutions
~~~~~~~~~
* Do you have a valid Enterprise subscription?
* Check if your subscription details get the tag "In Progress" on
your `Odoo Account
<https://accounts.odoo.com/my/subscription>`__ or with your Account Manager
* Have you already linked a database with your subscription reference?
* You can link only one database per subscription.
(Need a test or a development database? `Find a partner
<https://www.odoo.com/partners>`__)
* You can unlink the old database yourself on your `Odoo Contract
<https://accounts.odoo.com/my/subscription>`__ with the button "Unlink database"
.. image:: on_premise/unlink_single_db.png
A confirmation message will appear; make sure this is the correct database as
it will be deactivated shortly:
.. image:: on_premise/unlink_confirm_enterprise_edition.png
* Do you have the updated version of Odoo 9?
* From July 2016 onward, Odoo 9 now automatically change the uuid of a
duplicated database; a manual operation is no longer required.
* If it's not the case, you may have multiple databases sharing the same
UUID. Please check on your `Odoo Contract
<https://accounts.odoo.com/my/subscription>`__, a short message will appear
specifying which database is problematic:
.. image:: on_premise/unlink_db_name_collision.png
In this case, you need to change the UUID on your test databases to solve this
issue. You will find more information about this in :ref:`this section <duplicate_premise>`.
For your information, we identify database with UUID. Therefore, each database
should have a distinct UUID to ensure that registration and invoicing proceed
effortlessly for your and for us.
* Check your network and firewall settings
* The Update notification must be able to reach Odoo's subscription
validation servers. In other words, make sure that the Odoo server is able
to open outgoing connections towards:
* services.odoo.com on port 443 (or 80)
* services.openerp.com on port 443 (or 80) for older deployments
* Once you activated your database, you must keep these ports open, as the
Update notification runs once a week.
Error message due to too many users
-----------------------------------
If you have more users in your local database than provisionned in your
Odoo Enterprise subscription, you may encounter this message:
.. image:: on_premise/add_more_users.png
:alt: This database will expire in X days, you have more users than your subscription allows
When the message appears you have 30 days before the expiration.
The countdown is updated everyday.
Solutions
~~~~~~~~~
- **Add more users** on your subscription: follow the link and Validate
the upsell quotation and pay for the extra users.
- **Deactivate users** as explained in this `documentation <documentation.html#deactivating-users>`_
and **Reject** the upsell quotation.
Once your database has the correct number of users, the expiration message
will disappear automatically after a few days, when the next verification occurs.
We understand that it can be a bit frightening to see the countdown,
so you can :ref:`force an Update Notification <force_ping>` to make the message disappear
right away.
Database expired error message
------------------------------
If your database reaches its expiration date before your renew your subscription,
you will encounter this message:
.. image:: on_premise/database_expired.png
:alt: This database has expired.
This **blocking** message appears after a non-blocking message that lasts 30 days.
If you fail to take action before the end of the countdown, the database is expired.
Solutions
~~~~~~~~~
* Renew your subscription: follow the link and renew your subscription - note that
if you wish to pay by Wire Transfer, your subscription will effectively be renewed
only when the payment arrives, which can take a few days. Credit card payments are
processed immediately.
* Contact our `Support <https://www.odoo.com/help>`__
None of those solutions worked for you? Please contact our
`Support <https://www.odoo.com/help>`__
.. _force_ping:
.. _duplicate_premise:
.. _on-premise/duplicate:
Duplicate a database
====================
You can duplicate your database by accessing the database manager on your
server (<odoo-server>/web/database/manager). In this page, you can easily
duplicate your database (among other things).
Duplicate a database by accessing the database manager on your server
(`<odoo-server>/web/database/manager`). Typically, you want to duplicate your production database
into a neutralized testing database. It can be done by checking the neutralize box when prompted,
which executes all :file:`neutralize.sql` scripts for every installed module.
.. image:: on_premise/db_manager.gif
Common error messages and solutions
===================================
When you duplicate a local database, it is **strongly** advised to change
the duplicated database's uuid (Unniversally Unique Identifier), since this
uuid is how your database identifies itself with our servers. Having two
databases with the same uuid could result in invoicing problems or registration
problems down the line.
Registration error
------------------
.. note::
From July 2016 onward, Odoo 9 now automatically change the uuid of a duplicated database; a
manual operation is no longer required.
In case of a registration error, the following message should be displayed.
The database uuid is currently accessible from the menu :menuselection:`Settings --> Technical -->
System Parameters`, we advise you to use a `uuid generator <https://www.uuidtools.com>`_ or to
use the unix command ``uuidgen`` to generate a new uuid. You can then simply replace it like any
other record by clicking on it and using the edit button.
.. image:: on_premise/error-message-sub-code.png
:alt: Database registration error message
.. image:: on_premise/db_uuid.png
To resolve the issue:
- Check the **validity of your Odoo Enterprise subscription** by verifying if your subscription
details have the tag :guilabel:`In Progress` on your `Odoo Account
<https://accounts.odoo.com/my/subscription>`_ or contact your Account Manager.
- Ensure that **no other database is linked** to the subscription code, as only one database can be
linked per subscription.
.. tip::
If a test or a development database is needed, you can :ref:`duplicate a database
<on-premise/duplicate>`.
- Verify that **no databases share the same UUID** (Universally Unique Identifier) by opening your
`Odoo Contract <https://accounts.odoo.com/my/subscription>`_. If two or more databases share the
same UUID, their name will be displayed.
.. image:: on_premise/unlink-db-name-collision.png
:alt: Database UUID error message
If that is the case, manually change the database(s) UUID or `send a support ticket
<https://www.odoo.com/help>`_.
- As the update notification must be able to reach Odoo's subscription validation servers, ensure
your **network and firewall settings** allow the Odoo server to open outgoing connections
towards:
- `services.odoo.com` on port `443` (or `80`)
- for older deployments, `services.openerp.com` on port `443` (or `80`)
These ports must be kept open even after registering a database, as the update notification runs
once a week.
Too many users error
--------------------
If you have more users in a local database than provisioned in your Odoo Enterprise subscription,
the following message should be displayed.
.. image:: on_premise/add-more-users.png
:alt: Too many users on a database error message
When the message appears, you have 30 days to act before the database expires. The countdown is
updated every day.
To resolve the issue, either:
- **Add more users** to your subscription by clicking the :guilabel:`Upgrade your subscription` link
displayed in the message to validate the upsell quotation and pay for the extra users.
- :ref:`Deactivate users <users/deactivate>` and **reject** the upsell quotation.
.. important::
If you are on a monthly subscription plan, the database will automatically update to reflect the
added user(s). If you are on a yearly or multi-year plan, an expiration banner will appear in the
database. You can create the upsell quotation by clicking the banner to update the subscription
or `send a support ticket <https://www.odoo.com/help>`_ to resolve the issue.
Once your database has the correct number of users, the expiration message disappears automatically
after a few days, when the next verification occurs.
Database expired error
----------------------
If your database expires before you renew your subscription, the following message should be
displayed.
.. image:: on_premise/database-expired.png
:alt: Database expired error message
This message appears if you fail to act before the end of the 30-day countdown.
To resolve the issue, either:
- Click the :guilabel:`Renew your subscription` link displayed in the message and complete the
process. If you pay by wire transfer, your subscription will be renewed when the payment arrives
which can take a few days. Credit card payments are processed immediately.
- `Send a support ticket <https://www.odoo.com/help>`_.
.. toctree::

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -9,7 +9,7 @@ internet.
.. warning:: If you are setting up a public server, be sure to check our :ref:`security` recommendations!
.. _db_filter:
.. _dbfilter:
dbfilter
========
@@ -573,12 +573,12 @@ security-related topics:
- Use appropriate database filters ( :option:`--db-filter <odoo-bin --db-filter>`)
to restrict the visibility of your databases according to the hostname.
See :ref:`db_filter`.
See :ref:`dbfilter`.
You may also use :option:`-d <odoo-bin -d>` to provide your own (comma-separated)
list of available databases to filter from, instead of letting the system fetch
them all from the database backend.
- Once your ``db_name`` and ``db_filter`` are configured and only match a single database
- Once your ``db_name`` and ``dbfilter`` are configured and only match a single database
per hostname, you should set ``list_db`` configuration option to ``False``, to prevent
listing databases entirely, and to block access to the database management screens
(this is also exposed as the :option:`--no-database-list <odoo-bin --no-database-list>`
@@ -722,7 +722,7 @@ management screens.
the system administrator, including provisioning of new databases and automated backups.
Be sure to setup an appropriate ``db_name`` parameter
(and optionally, ``db_filter`` too) so that the system can determine the target database
(and optionally, ``dbfilter`` too) so that the system can determine the target database
for each request, otherwise users will be blocked as they won't be allowed to choose the
database themselves.

View File

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -2,166 +2,245 @@
Export and import data
======================
In Odoo, it is sometimes necessary to export or import data for running reports, or for data
modification. This document covers the export and import of data into and out of Odoo.
.. important::
Sometimes, users run into a 'time out' error, or a record does not process, due to its size. This
can occur with large exports, or in cases where the import file is too large. To circumvent this
limitation surrounding the size of the records, process exports or imports in smaller batches.
.. _export-data:
Export data from Odoo
=====================
When working with a database, it sometimes is necessary to export your data in a distinct file.
Doing so can help to do reporting over your activities (even if Odoo offers a precise and easy
reporting tool with each available application).
When working with a database, it is sometimes necessary to export data in a distinct file. Doing so
can aid in reporting on activities, although, Odoo provides a precise and easy reporting tool with
each available application.
With Odoo, you can export the values from any field in any record. To do so,
activate the list view on the items that need to be exported, click on *Action*, and, then,
on *Export*.
With Odoo, the values can be exported from any field in any record. To do so, activate the list view
(:guilabel:`☰ (three horizontal lines)` icon), on the items that need to be exported, and then
select the records that should be exported. To select a record, tick the checkbox next to the
corresponding record. Finally, click on :guilabel:`⚙️ Action`, and then :guilabel:`Export`.
.. image:: export_import_data/list-view-export.png
:align: center
:alt: view of the different things to enable/click to export data
:alt: View of the different things to enable/click to export data.
Pretty simple, this action still comes with some specificities. In fact,
when clicking on *Export*, a pop-up window appears with several
options for the data to export:
When clicking on :guilabel:`Export`, an :guilabel:`Export Data` pop-over window appears, with
several options for the data to export:
.. image:: export_import_data/export-data-overview.png
:align: center
:alt: overview of all the options to take into account when exporting data in Odoo
:alt: Overview of options to consider when exporting data in Odoo..
#. With the *I want to update data* option ticked, the system only
shows the fields which can be imported. This is very helpful in
case you want to update existing records. Basically, this works
like a filter. Leaving the box unticked gives way more field
options because it shows all the fields, not just the ones which
can be imported.
#. When exporting, you can choose between two formats: .csv and .xls.
With .csv, items are separated with a comma, while .xls holds information about all the
worksheets in a file, including both content and formatting.
#. Those are the items you may want to export. Use the arrows to display
more sub-field options. Of course, you can use the search bar to
find specific fields more easily. To use the search option more
efficiently, display all the fields by clicking on all the
arrows!
#. The + button is there to add fields to the "to export" list.
#. The "handles" next to the selected fields allow you to move the fields up and down to
change the order in which they must be displayed in the exported
file.
#. The trashcan is there if you need to remove fields.
#. For recurring reports, it might be interesting to save export presets.
Select all the needed ones and click on the template bar.
There, click on *New template* and give a name to yours. The
next time you need to export the same list, simply select the
related template.
#. With the :guilabel:`I want to update data (import-compatable export)` option ticked, the system
only shows the fields that can be imported. This is helpful in the case where the existing
records need to be updated. This works like a filter. Leaving the box unticked, gives many more
field options because it shows all the fields, not just the ones that can be imported.
#. When exporting, there is the option to export in two formats: `.csv` and `.xls`. With `.csv`,
items are separated by a comma, while `.xls` holds information about all the worksheets in a
file, including both content and formatting.
#. These are the items that can be exported. Use the :guilabel:`> (right arrow)` icon to display
more sub-field options. Use the :guilabel:`Search` bar to find specific fields. To use the
:guilabel:`Search` option more efficiently, click on all the :guilabel:`> (right arrows)` to
display all fields.
#. The :guilabel:`+ (plus sign)` icon button is present to add fields to the :guilabel:`Fields to
export` list.
#. The :guilabel:`↕️ (up-down arrow)` to the left of the selected fields can be used to move the
fields up and down, to change the order in which they are displayed in the exported file.
Drag-and-drop using the :guilabel:`↕️ (up-down arrow)` icon.
#. The :guilabel:`🗑️ (trash can)` icon is used to remove fields. Click on the :guilabel:`🗑️ (trash
can)` icon to remove the field.
#. For recurring reports, it is helpful to save export presets. Select all the needed fields, and
click on the template drop-down menu. Once there, click on :guilabel:`New template`, and give a
unique name to the export just created. The next time the same list needs to be exported, select
the related template that was previously saved from the drop-down menu.
.. tip::
Its good to keep the fields external identifier in mind. For example,
*Related Company* is equal to *parent_id*. Doing so helps export
only what you would like to import next.
It is helpful to know the field's external identifier. For example, :guilabel:`Related Company`
in the export user interface is equal to *parent_id* (external identifier). This is helpful
because then, the only data exported is what should be modified and re-imported.
.. _import-data:
Import data into Odoo
=====================
How to start
------------
Importing data into Odoo is extremely helpful during implementation, or in times where data needs to
be updated in bulk. The following documentation covers how to import data into an Odoo database.
You can import data on any Odoo's business object using either Excel
(.xlsx) or CSV (.csv) formats:
contacts, products, bank statements, journal entries and even orders!
.. warning::
Imports are permanent and **cannot** be undone. However, it is possible to use filters (`created
on` or `last modified`) to identify records changed or created by the import.
Open the view of the object you want to populate and click on :menuselection:`Favorites --> Import
records`.
.. tip::
Activating :ref:`developer mode <developer-mode>` changes the visible import settings in the left
menu. Doing so reveals an :menuselection:`Advanced` menu. Included in this advanced menu are two
options: :guilabel:`Track history during import` and :guilabel:`Allow matching with subfields`.
.. image:: export_import_data/import_button.png
.. image:: export_import_data/advanced-import.png
:align: center
:alt: Advanced import options when developer mode is activated.
If the model uses openchatter, the :guilabel:`Track history during import` option sets up
subscriptions and sends notifications during the import, but leads to a slower import.
Should the :guilabel:`Allow matching with subfields` option be selected, then all subfields
within a field are used to match under the :guilabel:`Odoo Field` while importing.
Get started
-----------
Data can be imported on any Odoo business object using either Excel (`.xlsx`) or :abbr:`CSV
(Comma-separated Values)` (`.csv`) formats. This includes: contacts, products, bank statements,
journal entries, and orders.
Open the view of the object to which the data should be imported/populated, and click on
:menuselection:`⭐ Favorites --> Import records`.
.. image:: export_import_data/import-button.png
:align: center
:alt: Favorites menu revealed with the import records option highlighted.
There you are provided with templates you can easily populate
with your own data. Such templates can be imported in one click;
The data mapping is already done.
After clicking :guilabel:`Import records`, Odoo reveals a separate page with templates that can be
downloaded and populated with the company's own data. Such templates can be imported in one click,
since the data mapping is already done. To download a template click :guilabel:`Import Template for
Customers` at the center of the page.
How to adapt the template
-------------------------
.. important::
When importing a :abbr:`CSV (Comma-separated Values)` file, Odoo provides :guilabel:`Formatting`
options. These options do **not** appear when importing the proprietary Excel file type (`.xls`,
`.xlsx`).
* Add, remove and sort columns to fit at best your data structure.
* We advise to not remove the **ID** one (see why in the next section).
* Set a unique ID to every single record by dragging down the ID sequencing.
.. image:: export_import_data/formatting.png
:align: center
:alt: Formatting options presented when a CVS file is imported in Odoo.
Make necessary adjustments to the *Formatting* options, and ensure all columns in the
:guilabel:`Odoo field` and :guilabel:`File Column` are free of errors. Finally, click
:guilabel:`Import` to import the data.
Adapt a template
----------------
Import templates are provided in the import tool of the most common data to import (contacts,
products, bank statements, etc.). Open them with any spreadsheet software (*Microsoft Office*,
*OpenOffice*, *Google Drive*, etc.).
Once the template is downloaded, proceed to follow these steps:
- Add, remove, and sort columns to best fit the data structure.
- It is strongly advised to **not** remove the :guilabel:`External ID` (ID) column (see why in the
next section).
- Set a unique ID to every record by dragging down the ID sequencing in the :guilabel:`External ID`
(ID) column.
.. image:: export_import_data/dragdown.gif
:align: center
:alt: An animation of the mouse dragging down the ID column, so each record has a unique ID.
* When you add a new column, Odoo might not be able to map it automatically if its
label doesn't fit any field in Odoo. Don't worry! You can map
new columns manually when you test the import. Search the list for the
corresponding field.
.. note::
When a new column is added, Odoo may not be able to map it automatically, if its label does not
fit any field within Odoo. However, new columns can be mapped manually when the import is tested.
Search the drop-down menu for the corresponding field.
.. image:: export_import_data/field_list.png
:align: center
.. image:: export_import_data/field_list.png
:align: center
:alt: Drop-down menu expanded in the initial import screen on Odoo.
Then, use this field's label in your file in order to make it work
straight on the very next time.
Then, use this field's label in the import file to ensure future imports are successful.
How to import from another application
--------------------------------------
.. tip::
Another useful way to find out the proper column names to import is to export a sample file
using the fields that should be imported. This way, if there is not a sample import template,
the names are accurate.
In order to re-create relationships between different records,
you should use the unique identifier from the original application
and map it to the **ID** (External ID) column in Odoo.
When you import another record that links to the first one,
use **XXX/ID** (XXX/External ID) to the original unique identifier.
You can also find this record using its name but you will be stuck
if at least 2 records have the same name.
Import from another application
-------------------------------
The **ID** will also be used to update the original import
if you need to re-import modified data later,
it's thus good practice to specify it whenever possible.
The :guilabel:`External ID` (ID) is a unique identifier for the line item. Feel free to use one
from previous software to facilitate the transition to Odoo.
Setting an ID is not mandatory when importing, but it helps in many cases:
I cannot find the field I want to map my column to
--------------------------------------------------
- Update imports: import the same file several times without creating duplicates.
- :ref:`Import relation fields <export_import_data/relation-fields>`.
Odoo tries to find with some heuristic, based on the first ten lines of
the files, the type of field for each column inside your file.
For example if you have a column only containing numbers,
only the fields that are of type *Integer* will be displayed for you
to choose from.
While this behavior might be good and easy for most cases,
it is also possible that it goes wrong or that you want to
map your column to a field that is not proposed by default.
To recreate relationships between different records, the unique identifier from the original
application should be used to map it to the :guilabel:`External ID` (ID) column in Odoo.
If that happens, you just have to check the
** Show fields of relation fields (advanced)** option,
you will then be able to choose from the complete list of fields for each column.
When another record is imported that links to the first one, use **XXX/ID** (XXX/External ID) for
the original unique identifier. This record can also be found using its name.
.. warning::
It should be noted that there will be a conflict if two or more records have the same name.
The :guilabel:`External ID` (ID) can also be used to update the original import, if modified data
needs to be re-imported later, therefore, it is a good practice to specify it whenever possible.
Field missing to map column
---------------------------
Odoo heuristically tries to find the type of field for each column inside the imported file, based
on the first ten lines of the files.
For example, if there is a column only containing numbers, only the fields with the *integer* type
are presented as options.
While this behavior might be beneficial in most cases, it is also possible that it could fail, or
the column may be mapped to a field that is not proposed by default.
If this happens, check the :guilabel:`Show fields of relation fields (advanced) option`, then a
complete list of fields becomes available for each column.
.. image:: export_import_data/field_list.png
:align: center
:alt: Searching for the field to match the tax column.
Where can I change the date import format?
------------------------------------------
Odoo can automatically detect if a column is a date, and it will try to guess the date format from a
set of most commonly used date formats. While this process can work for many date formats, some date
formats will not be recognized. This can cause confusion due to day-month inversions; it is
difficult to guess which part of a date format is the day and which part is the month in a date such
as '01-03-2016'.
To view which date format Odoo has found from your file you can check the **Date Format** that is
shown when clicking on **Options** under the file selector. If this format is incorrect you can
change it to your liking using the *ISO 8601* to define the format.
Change data import format
-------------------------
.. note::
If you are importing an excel (.xls, .xlsx) file, you can use date cells to store dates as the
display of dates in excel is different from the way it is stored. That way you will be sure that
the date format is correct in Odoo whatever your locale date format is.
Odoo can automatically detect if a column is a date, and tries to guess the date format from a
set of most commonly used date formats. While this process can work for many date formats, some
date formats are not recognizable. This can cause confusion, due to day-month inversions; it is
difficult to guess which part of a date format is the day, and which part is the month, in a
date, such as `01-03-2016`.
Can I import numbers with currency sign (e.g.: $32.00)?
-------------------------------------------------------
When importing a :abbr:`CSV (Comma-separated Values)` file, Odoo provides :guilabel:`Formatting`
options.
Yes, we fully support numbers with parenthesis to represent negative sign as well as numbers with
currency sign attached to them. Odoo also automatically detect which thousand/decimal separator you
use (you can change those under **options**). If you use a currency symbol that is not known to
Odoo, it might not be recognized as a number though and it will crash.
To view which date format Odoo has found from the file, check the :guilabel:`Date Format` that is
shown when clicking on options under the file selector. If this format is incorrect, change it to
the preferred format using *ISO 8601* to define the format.
Examples of supported numbers (using thirty-two thousands as an example):
.. important::
*ISO 8601* is an international standard, covering the worldwide exchange, along with the
communication of date and time-related data. For example, the date format should be `YYYY-MM-DD`.
So, in the case of July 24th 1981, it should be written as `1981-07-24`.
.. tip::
When importing Excel files (`.xls`, `.xlsx`), consider using *date cells* to store dates. This
maintains locale date formats for display, regardless of how the date is formatted in Odoo. When
importing a :abbr:`CSV (Comma-separated Values)` file, use Odoo's :guilabel:`Formatting` section
to select the date format columns to import.
Import numbers with currency signs
----------------------------------
Odoo fully supports numbers with parenthesis to represent negative signs, as well as numbers with
currency signs attached to them. Odoo also automatically detects which thousand/decimal separator is
used. If a currency symbol unknown to Odoo is used, it might not be recognized as a number, and the
import crashes.
.. note::
When importing a :abbr:`CSV (Comma-separated Values)` file, the :guilabel:`Formatting` menu
appears on the left-hand column. Under these options, the :guilabel:`Thousands Separator` can be
changed.
Examples of supported numbers (using 'thirty-two thousand' as the figure):
- 32.000,00
- 32000,00
@@ -176,156 +255,191 @@ Example that will not work:
- ABC 32.000,00
- $ (32.000,00)
What can I do when the Import preview table isn't displayed correctly?
----------------------------------------------------------------------
.. important::
A :guilabel:`() (parenthesis)` around the number indicates that the number is a negative value.
The currency symbol **must** be placed within the parenthesis for Odoo to recognize it as a
negative currency value.
By default the Import preview is set on commas as field separators and quotation marks as text
delimiters. If your csv file does not have these settings, you can modify the File Format Options
(displayed under the Browse CSV file bar after you select your file).
Import preview table not displayed correctly
--------------------------------------------
Note that if your CSV file has a tabulation as separator, Odoo will not detect the separations. You
will need to change the file format options in your spreadsheet application. See the following
question.
By default, the import preview is set on commas as field separators, and quotation marks as text
delimiters. If the :abbr:`CSV (Comma-separated Values)` file does not have these settings, modify
the :guilabel:`Formatting` options (displayed under the :guilabel:`Import` :abbr:`CSV
(Comma-separated Values)` file bar after selecting the :abbr:`CSV (Comma-separated Values)` file).
How can I change the CSV file format options when saving in my spreadsheet application?
---------------------------------------------------------------------------------------
.. important::
If the :abbr:`CSV (Comma-separated Values)` file has a tabulation as a separator, Odoo does
**not** detect the separations. The file format options need to be modified in the spreadsheet
application. See the following :ref:`Change CSV file format <export_import_data/change-csv>`
section.
If you edit and save CSV files in spreadsheet applications, your computer's regional settings will
be applied for the separator and delimiter. We suggest you use OpenOffice or LibreOffice Calc as
they will allow you to modify all three options (in :menuselection:`'Save As' dialog box --> Check the
box 'Edit filter settings' --> Save`).
.. _export_import_data/change-csv:
Microsoft Excel will allow you to modify only the encoding when saving (in :menuselection:`'Save As'
dialog box --> click 'Tools' dropdown list --> Encoding tab`).
Change CSV file format in spreadsheet application
-------------------------------------------------
What's the difference between Database ID and External ID?
----------------------------------------------------------
When editing and saving :abbr:`CSV (Comma-separated Values)` files in spreadsheet applications, the
computer's regional settings are applied for the separator and delimiter. Odoo suggests using
*OpenOffice* or *LibreOffice*, as both applications allow modifications of all three options (from
*LibreOffice* application, go to :menuselection:`'Save As' dialog box --> Check the box 'Edit filter
settings' --> Save`).
Microsoft Excel can modify the encoding when saving (:menuselection:`'Save As' dialog box -->
'Tools' drop-down menu --> Encoding tab`).
Difference between Database ID and External ID
----------------------------------------------
Some fields define a relationship with another object. For example, the country of a contact is a
link to a record of the 'Country' object. When you want to import such fields, Odoo will have to
recreate links between the different records. To help you import such fields, Odoo provides three
mechanisms. You must use one and only one mechanism per field you want to import.
link to a record of the 'Country' object. When such fields are imported, Odoo has to recreate links
between the different records. To help import such fields, Odoo provides three mechanisms.
For example, to reference the country of a contact, Odoo proposes you 3 different fields to import:
.. important::
**Only one** mechanism should be used per field that is imported.
- Country: the name or code of the country
- Country/Database ID: the unique Odoo ID for a record, defined by the ID postgresql column
- Country/External ID: the ID of this record referenced in another application (or the .XML file
that imported it)
For example, to reference the country of a contact, Odoo proposes three different fields to import:
For the country Belgium, you can use one of these 3 ways to import:
- :guilabel:`Country`: the name or code of the country
- :guilabel:`Country/Database ID`: the unique Odoo ID for a record, defined by the ID PostgreSQL
column
- :guilabel:`Country/External ID`: the ID of this record referenced in another application (or the
`.XML` file that imported it)
- Country: Belgium
- Country/Database ID: 21
- Country/External ID: base.be
For the country of Belgium, for example, use one of these three ways to import:
According to your need, you should use one of these 3 ways to reference records in relations. Here
is when you should use one or the other, according to your need:
- :guilabel:`Country`: `Belgium`
- :guilabel:`Country/Database ID`: `21`
- :guilabel:`Country/External ID`: `base.be`
- Use Country: This is the easiest way when your data come from CSV files that have been created
manually.
- Use Country/Database ID: You should rarely use this notation. It's mostly used by developers as
it's main advantage is to never have conflicts (you may have several records with the same name,
According to the company's need, use one of these three ways to reference records in relations. Here
is an example when one or the other should be used, according to the need:
- Use :guilabel:`Country`: this is the easiest way when data comes from :abbr:`CSV (Comma-separated
Values)` files that have been created manually.
- Use :guilabel:`Country/Database ID`: this should rarely be used. It is mostly used by developers
as the main advantage is to never have conflicts (there may be several records with the same name,
but they always have a unique Database ID)
- Use Country/External ID: Use External ID when you import data from a third party application.
- Use :guilabel:`Country/External ID`: use *External ID* when importing data from a third-party
application.
When you use External IDs, you can import CSV files with the "External ID" column to define the
External ID of each record you import. Then, you will be able to make a reference to that record
with columns like "Field/External ID". The following two CSV files give you an example for Products
and their Categories.
When *External IDs* are used, import :abbr:`CSV (Comma-separated Values)` files with the
:guilabel:`External ID` (ID) column defining the *External ID* of each record that is imported.
Then, a reference can be made to that record with columns, like `Field/External ID`. The following
two :abbr:`CSV (Comma-separated Values)` files provide an example for products and their categories.
:download:`CSV file for categories
<export_import_data/External_id_3rd_party_application_product_categories.csv>`.
- :download:`CSV file for categories
<export_import_data/External_id_3rd_party_application_product_categories.csv>`
- :download:`CSV file for Products
<export_import_data/External_id_3rd_party_application_products.csv>`
:download:`CSV file for Products
<export_import_data/External_id_3rd_party_application_products.csv>`.
.. _export_import_data/relation-fields:
What can I do if I have multiple matches for a field?
-----------------------------------------------------
Import relation fields
----------------------
If for example you have two product categories with the child name "Sellable" (ie. "Misc.
Products/Sellable" & "Other Products/Sellable"), your validation is halted but you may still import
your data. However, we recommend you do not import the data because they will all be linked to the
first 'Sellable' category found in the Product Category list ("Misc. Products/Sellable"). We
recommend you modify one of the duplicates' values or your product category hierarchy.
An Odoo object is always related to many other objects (e.g. a product is linked to product
categories, attributes, vendors, etc.). To import those relations, the records of the related object
need to be imported first, from their own list menu.
However if you do not wish to change your configuration of product categories, we recommend you use
make use of the external ID for this field 'Category'.
This can be achieved by using either the name of the related record, or its ID, depending on the
circumstances. The ID is expected when two records have the same name. In such a case add `/ ID`
at the end of the column title (e.g. for product attributes: `Product Attributes / Attribute / ID`).
How can I import a many2many relationship field (e.g. a customer that has multiple tags)?
-----------------------------------------------------------------------------------------
Options for multiple matches on fields
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The tags should be separated by a comma without any spacing. For example, if you want your customer
to be linked to both tags 'Manufacturer' and 'Retailer' then you will encode "Manufacturer,Retailer"
in the same column of your CSV file.
If, for example, there are two product categories with the child name `Sellable` (e.g. `Misc.
Products/Sellable` & `Other Products/Sellable`), the validation is halted, but the data may still be
imported. However, Odoo recommends that the data is not imported because it will all be linked to
the first `Sellable` category found in the *Product Category* list (`Misc. Products/Sellable`).
Odoo, instead, recommends modifying one of the duplicate's values, or the product category
hierarchy.
:download:`CSV file for Manufacturer, Retailer <export_import_data/m2m_customers_tags.csv>`
However, if the company does not wish to change the configuration of product categories, Odoo
recommends making use of the *External ID* for this field, 'Category'.
Import many2many relationship fields
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
How can I import a one2many relationship (e.g. several Order Lines of a Sales Order)?
-------------------------------------------------------------------------------------
The tags should be separated by a comma, without any spacing. For example, if a customer needs to be
linked to both tags: `Manufacturer` and `Retailer` then 'Manufacturer,Retailer' needs to be encoded
in the same column of the :abbr:`CSV (Comma-separated Values)` file.
If you want to import sales order having several order lines; for each order line, you need to
reserve a specific row in the CSV file. The first order line will be imported on the same row as the
information relative to order. Any additional lines will need an additional row that does not have
any information in the fields relative to the order. As an example, here is
``purchase.order_functional_error_line_cant_adpat.CSV`` file of some quotations you can import,
based on demo data.
- :download:`CSV file for Manufacturer, Retailer <export_import_data/m2m_customers_tags.csv>`
:download:`File for some Quotations <export_import_data/purchase.order_functional_error_line_cant_adpat.csv>`.
Import one2many relationships
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following CSV file shows how to import purchase orders with their respective purchase order
lines:
If a company wants to import a sales order with several order lines, a specific row **must** be
reserved in the :abbr:`CSV (Comma-separated Values)` file for each order line. The first order line
is imported on the same row as the information relative to order. Any additional lines need an
additional row that does not have any information in the fields relative to the order.
:download:`Purchase orders with their respective purchase order lines <export_import_data/o2m_purchase_order_lines.csv>`.
As an example, here is a :abbr:`CSV (Comma-separated Values)` file of some quotations that can be
imported, based on demo data:
The following CSV file shows how to import customers and their respective contacts:
- :download:`File for some Quotations
<export_import_data/purchase.order_functional_error_line_cant_adpat.csv>`
:download:`Customers and their respective contacts <export_import_data/o2m_customers_contacts.csv>`.
The following :abbr:`CSV (Comma-separated Values)` file shows how to import purchase orders with
their respective purchase order lines:
Can I import several times the same record?
-------------------------------------------
- :download:`Purchase orders with their respective purchase order lines
<export_import_data/o2m_purchase_order_lines.csv>`
If you import a file that contains one of the column "External ID" or "Database ID", records that
have already been imported will be modified instead of being created. This is very useful as it
allows you to import several times the same CSV file while having made some changes in between two
imports. Odoo will take care of creating or modifying each record depending if it's new or not.
The following :abbr:`CSV (Comma-separated Values)` file shows how to import customers and their
respective contacts:
This feature allows you to use the Import/Export tool of Odoo to modify a batch of records in your
favorite spreadsheet application.
- :download:`Customers and their respective contacts
<export_import_data/o2m_customers_contacts.csv>`
What happens if I do not provide a value for a specific field?
Import records several times
----------------------------
If an imported file contains one of the columns: :guilabel:`External ID` or :guilabel:`Database ID`,
records that have already been imported are modified, instead of being created. This is extremely
useful as it allows users to import the same :abbr:`CSV (Comma-separated Values)` file several
times, while having made some changes in between two imports.
Odoo takes care of creating or modifying each record, depending if it is new or not.
This feature allows a company to use the *Import/Export tool* in Odoo to modify a batch of records
in a spreadsheet application.
Value not provided for a specific field
---------------------------------------
If all fields are not set in the CSV file, Odoo assigns the default value for every non-defined
field. But, if fields are set with empty values in the :abbr:`CSV (Comma-separated Values)` file,
Odoo sets the empty value in the field, instead of assigning the default value.
Export/import different tables from an SQL application to Odoo
--------------------------------------------------------------
If you do not set all fields in your CSV file, Odoo will assign the default value for every non
defined fields. But if you set fields with empty values in your CSV file, Odoo will set the EMPTY
value in the field, instead of assigning the default value.
If data needs to be imported from different tables, relations need to be recreated between records
belonging to different tables. For instance, if companies and people are imported, the link between
each person and the company they work for needs to be recreated.
How to export/import different tables from an SQL application to Odoo?
----------------------------------------------------------------------
To manage relations between tables, use the `External ID` facilities of Odoo. The `External ID` of a
record is the unique identifier of this record in another application. The `External ID` must be
unique across all records of all objects. It is a good practice to prefix this `External ID` with
the name of the application or table. (like, 'company_1', 'person_1' - instead of '1')
If you need to import data from different tables, you will have to recreate relations between
records belonging to different tables. (e.g. if you import companies and persons, you will have to
recreate the link between each person and the company they work for).
As an example, suppose there is an SQL database with two tables that are to be imported: companies
and people. Each person belongs to one company, so the link between a person and the company they
work for must be recreated.
To manage relations between tables, you can use the "External ID" facilities of Odoo. The "External
ID" of a record is the unique identifier of this record in another application. This "External ID"
must be unique across all the records of all objects, so it's a good practice to prefix this
"External ID" with the name of the application or table. (like 'company_1', 'person_1' instead of
'1')
Test this example, with a :download:`sample of a PostgreSQL database
<export_import_data/database_import_test.sql>`.
As an example, suppose you have a SQL database with two tables you want to import: companies and
persons. Each person belong to one company, so you will have to recreate the link between a person
and the company he work for. (If you want to test this example, here is a :download:`dump of such a
PostgreSQL database <export_import_data/database_import_test.sql>`)
We will first export all companies and their "External ID". In PSQL, write the following command:
First, export all companies and their *External ID*. In PSQL, write the following command:
.. code-block:: sh
> copy (select 'company_'||id as "External ID",company_name as "Name",'True' as "Is a Company" from companies) TO '/tmp/company.csv' with CSV HEADER;
This SQL command will create the following CSV file:
This SQL command creates the following :abbr:`CSV (Comma-separated Values)` file:
.. code-block:: text
@@ -334,13 +448,14 @@ This SQL command will create the following CSV file:
company_2,Organi,True
company_3,Boum,True
To create the CSV file for persons, linked to companies, we will use the following SQL command in PSQL:
To create the :abbr:`CSV (Comma-separated Values)` file for people linked to companies, use the
following SQL command in PSQL:
.. code-block:: sh
> copy (select 'person_'||id as "External ID",person_name as "Name",'False' as "Is a Company",'company_'||company_id as "Related Company/External ID" from persons) TO '/tmp/person.csv' with CSV
It will produce the following CSV file:
It produces the following :abbr:`CSV (Comma-separated Values)` file:
.. code-block:: text
@@ -350,62 +465,13 @@ It will produce the following CSV file:
person_3,Eric,False,company_2
person_4,Ramsy,False,company_3
As you can see in this file, Fabien and Laurence are working for the Bigees company (company_1) and
Eric is working for the Organi company. The relation between persons and companies is done using the
External ID of the companies. We had to prefix the "External ID" by the name of the table to avoid a
conflict of ID between persons and companies (person_1 and company_1 who shared the same ID 1 in the
original database).
In this file, Fabien and Laurence are working for the Bigees company (`company_1`), and Eric is
working for the Organi company. The relation between people and companies is done using the
*External ID* of the companies. The *External ID* is prefixed by the name of the table to avoid a
conflict of ID between people and companies (`person_1` and `company_1`, who shared the same ID 1 in
the original database).
The two files produced are ready to be imported in Odoo without any modifications. After having
imported these two CSV files, you will have 4 contacts and 3 companies. (the firsts two contacts are
linked to the first company). You must first import the companies and then the persons.
How to adapt an import template
===============================
Import templates are provided in the import tool of the most common data to
import (contacts, products, bank statements, etc.).
You can open them with any spreadsheets software (Microsoft Office,
OpenOffice, Google Drive, etc.).
How to customize the file
=========================
* Remove columns you don't need. We advise to not remove the *ID* one (see
why here below).
* Set a unique ID to every single record by dragging down the ID sequencing.
.. image:: export_import_data/dragdown.gif
:align: center
* When you add a new column, Odoo might not be able to map it automatically if its
label doesn't fit any field of the system.
If so, find the corresponding field using the search.
.. image:: export_import_data/field_list.png
:align: center
Then, use the label you found in your import template in order to make it work
straight away the very next time you try to import.
Why an “ID” column
==================
The **ID** (External ID) is an unique identifier for the line item.
Feel free to use the one of your previous software to ease the transition to Odoo.
Setting an ID is not mandatory when importing but it helps in many cases:
* Update imports: you can import the same file several times without creating duplicates;
* Import relation fields (see here below).
How to import relation fields
=============================
An Odoo object is always related to many other objects (e.g. a product is linked
to product categories, attributes, vendors, etc.). To import those relations you need to
import the records of the related object first from their own list menu.
You can do it using either the name of the related record or its ID. The ID is expected when
two records have the same name. In such a case add " / ID" at the end of the column title
(e.g. for product attributes: Product Attributes / Attribute / ID).
imported these two :abbr:`CSV (Comma-separated Values)` files, there are four contacts and three
companies (the first two contacts are linked to the first company). Keep in mind to first import
the companies, and then the people.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -307,6 +307,32 @@ directly to a product line.
.. image:: taxes/list-sequence.png
:alt: The taxes' sequence in Odoo determines which tax is applied first
Extra taxes
===========
"Extra taxes" is a broad term referring to additional taxes beyond the standard or basic taxes
imposed by governments. These extra taxes can be **luxury** taxes, **environmental** taxes,
**import** or **export duties** taxes, etc.
.. note::
The method to compute these taxes varies across different countries. We recommend consulting your
country's regulations to understand how to calculate them for your business.
To compute an extra tax in Odoo, :ref:`create a tax <taxes/configuration>`, enter a tax name, select
a :ref:`Tax Computation <taxes/configuration>`, set an :guilabel:`Amount`, and in the
:guilabel:`Advanced Options` tab, check :guilabel:`Affect Base of Subsequent Taxes`. Then, drag and
drop the taxes in the :ref:`order they should be computed <taxes/base-subsequent>`.
.. example::
- In Belgium, the formula to compute an environmental tax is: `(product price + environmental
tax) x sales tax`. Therefore, our environmental tax has to come *before* the sales tax in the
computation sequence.
- In our case, we created a 5% environmental tax (Ecotax) and put it *before* the Belgian base
tax of 21%.
.. image:: taxes/ecotax.png
:alt: Environmental tax sequence in Belgium.
.. seealso::
- :doc:`taxes/fiscal_positions`
- :doc:`taxes/B2B_B2C`

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@@ -745,6 +745,55 @@ If you claim a vendor bill, the status changes from :guilabel:`Draft` to :guilab
automatically. Considering this as best practice, all the claimed documents should be canceled as
they won't be valid for your accounting records.
Electronic purchase invoice
---------------------------
The *electronic purchase invoice* is a feature included in the `l10n_cl_edi` module.
Once all configurations have been made for :ref:`electronic invoices <chile/electronic-invoice>`
(e.g., uploading a valid company certificate, setting up master data, etc.), the electronic
purchase invoices need their own :abbr:`CAFs (Folio Authorization Code)`. Please refer to the
:ref:`CAF documentation <chile/caf-documentation>` to check the details on how to acquire the
:abbr:`CAFs (Folio Authorization Code)` for electronic purchase invoices.
Electronic purchase invoices are useful when vendors are not obligated to expedite an electronic
vendor bill for your purchase. Still, your obligations require a document to be sent to the
:abbr:`SII (Servicio de Impuestos Internos)` as proof of purchase.
Configuration
~~~~~~~~~~~~~
To generate an electronic purchase invoice from a vendor bill, the bill must be created in a
purchase journal with the *Use Documents* feature enabled. It is possible to modify an existing
purchase journal or create a new one in the following process.
To modify the existing purchase journal, or create a new purchase journal, navigate to
:menuselection:`Accounting --> Configuration --> Journals`. Then, click the :guilabel:`New` button,
and fill in the following required information:
- :guilabel:`Type`: select :guilabel:`Purchase` from the drop-down menu for vendor bill journals.
- :guilabel:`Use Documents`: check this field so the journal can generate electronic documents (in
this case the electronic purchase invoice).
Generate an electronic purchase invoice
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To generate this type of document, it is necessary to create a vendor bill in Odoo. To do so,
navigate to :menuselection:`Accounting --> Vendors --> Bills`, and click the :guilabel:`New` button.
When all of the electronic purchase invoice information is filled, select the option :guilabel:`(46)
Electronic Purchase Invoice` in the :guilabel:`Document Type` field:
After the vendor bill is posted:
- The :abbr:`DTE (Documentos Tributarios Electrónicos)` file (Electronic Tax Document) is
automatically created and added to the chatter.
- The :guilabel:`DTE SII Status` is set as :guilabel:`Pending to be sent`.
Odoo automatically updates the *DTE Status* every night using a scheduled action. To get a response
from the :abbr:`SII (Servicio de Impuestos Internos)` immediately, click the :guilabel:`Send now to
SII` button.
Delivery guide
--------------

View File

@@ -22,10 +22,10 @@ localization:
- Default :ref:`fiscal localization package <fiscal_localizations/packages>`
* - Italy - E-invoicing
- `l10n_it_edi`
- e-invoice implementation
* - Italy - E-invoicing
- E-invoice implementation
* - Italy - E-invoicing (Withholding)
- `l10n_it_edi_withholding`
- e-invoice withholding
- E-invoice withholding
* - Italy - Accounting Reports
- `l10n_it_reports`
- Country-specific reports
@@ -33,10 +33,6 @@ localization:
- `l10n_it_stock_ddt`
- Transport documents - Documento di Trasporto (DDT)
.. image:: italy/italy-modules.png
:align: center
:alt: Italian localization modules
Company information
-------------------
@@ -49,70 +45,149 @@ section, click :guilabel:`Update info`. From here, fill out the fields:
- :guilabel:`Codice Fiscale`: the fiscal code of the company;
- :guilabel:`Tax System`: the tax system under which the company falls;
.. image:: italy/italy-company.png
:align: center
:alt: Company information to provide
.. image:: italy/company.png
:alt: Company information to be provided
Taxes configuration
-------------------
Many of the e-invoicing features are implemented using Odoo's tax system. As such, taxes must be
properly configured to generate invoices correctly and handle other billing use cases.
The **Italian** localization contains predefined **examples** of taxes for various purposes.
.. _italy/tax-exemption:
Tax exemption
~~~~~~~~~~~~~
The use of sale taxes that amount to **zero percent** (0%) is required by Italian authorities to
keep track of the exact :guilabel:`Tax Exemption Kind (Natura)` and :guilabel:`Law Reference` that
justify the exemption operated on an invoice line.
.. example::
The export tax in the EU can be used as reference (`0% EU`, invoice label `00eu`). It can be
found under :menuselection:`Accounting --> Configuration --> Taxes`. Exports are exempt from VAT,
and therefore, they require :guilabel:`Exoneration` kind and :guilabel:`Law Reference` filled in.
.. image:: italy/tax-exemption.png
:alt: Tax Exemption Settings
.. seealso::
There are many :guilabel:`Tax Exemption Kind (Natura)` and :guilabel:`Law Reference` codes. Make
sure you check the latest version available to get the latest information on:
- `Italian authorities documentation <https://www.agenziaentrate.gov.it/portale/web/guest/aree-tematiche/fatturazione-elettronica>`_
- `Official guide on Tax exemption <https://www.agenziaentrate.gov.it/portale/documents/20143/451259/Guida_compilazione-FE-Esterometro-V_1.9_2024-03-05.pdf/67fe4c2d-1174-e8de-f1ee-cea77b7f5203>`_
.. note::
If you need to use a different kind of exoneration, go to :menuselection:`Accounting -->
Configuration --> Taxes`, select a similar tax, then click on the cog icon and select
:guilabel:`Duplicate`. In the :guilabel:`Advanced Options` tab, add the :guilabel:`Exoneration`
and :guilabel:`Law Reference`. To confirm click on :guilabel:`Save`.
.. tip::
**Rename** your taxes in the :guilabel:`Name` field according to their :guilabel:`Exoneration` to
differentiate them easily.
.. _italy/reverse-charge:
Reverse charge
==============
The **reverse charge** mechanism is a VAT rule that shifts the liability to pay VAT from the
supplier to the customer. The customers pay the VAT *themselves* to the :abbr:`AdE (Agenzia delle
Entrate)` instead. There are different types:
- | :guilabel:`Internal Reverse Charge` (for domestic sales)
| The VAT responsibility is shifted to the buyer for certain categories of products and services.
- | :guilabel:`External Reverse Charge` (for intra-EU sales)
| VAT is due in the country of the delivery or in the country where the service is performed. When
the buyer is itself an Italian business, then the EU offers a mechanism that allows the seller
to transfer his responsibility to the buyer.
Invoices
--------
**Reverse-charged** customer invoices show no VAT amount, but the :abbr:`AdE (Agenzia delle
Entrate)` requires the seller to specify the :guilabel:`Tax Exemption` reason and the :guilabel:`Law
Reference` that enable the reverse-charge mechanism. Odoo provides a set of special 0% taxes that
can be assigned to each reverse-charged invoice lines, representing the most commonly used
configurations.
Vendor bills
------------
Italian companies subjected to Reverse Charge must send the information in the bill received to the
:abbr:`AdE (Agenzia delle Entrate)`.
.. note::
Self-reported VAT XML files must be issued and sent to the :abbr:`AdE (Agenzia Delle Entrate)`
for reverse charged bills.
When creating a vendor bill, **reverse charge** taxes are available to be added in the
:guilabel:`Taxes` field. You can check which taxes are available by going to
:menuselection:`Accounting --> Configuration --> Taxes`, you can see that the 10% Goods and 22%
Services taxes are activated, among others. Due to the automated configuration of the Italian fiscal
position, these are automatically activated in the tax list.
.. _italy/grids:
Tax grids
---------
The Italian localization has a specific :ref:`tax grid <tax-returns/tax-grids>` section for
**reverse charge** taxes. These tax grids are identifiable by the :ref:`VJ <italy/grids>` tag, and
can be found by going to :menuselection:`Accounting --> Reporting --> Audit Reports: Tax Report`.
.. image:: italy/grids.png
:alt: Reverse charge tax grid from the VJ section of the Tax Declaration
.. _italy/e-invoicing:
E-invoicing
-----------
===========
The :abbr:`SdI (Sistema di Interscambio)` is the electronic invoicing system used in Italy. It
enables to send and receive electronic invoices to and from customers. The documents must be in XML
format and formally validated by the system before being delivered.
The :abbr:`SdI (Sistema di Interscambio)` is the :doc:`electronic invoicing
<../accounting/customer_invoices/electronic_invoicing>` system used in Italy. It enables the sending
and receiving of electronic invoices to and from customers. The documents must be in an XML
:abbr:`EDI (Electronic Data Interchange)` format called **FatturaPA** and formally validated by the
system before being delivered.
To be able to receive invoices and notifications, the :abbr:`SdI (Sistema di Interscambio)` service
must be notified that the user's files are to be sent to **Odoo** and processed on their behalf. To
so, you must set up Odoo's :guilabel:`Codice Destinatario` on the **Agenzia Delle Entrate**
portal.
must be notified that the user's files need to be sent to Odoo and processed on their behalf. To do
so, you must set up Odoo's :guilabel:`Destination Code` on the :abbr:`AdE (Agenzia Delle
Entrate)` portal.
#. Go to https://ivaservizi.agenziaentrate.gov.it/portale/ and authenticate;
#. Go to `Italian authorities portal <https://ivaservizi.agenziaentrate.gov.it/portale>`_ and
authenticate;
#. Go to section :menuselection:`Fatture e Corrispettivi`;
#. Set the user as Legal Party for the VAT number you wish to configure the electronic address;
#. In :menuselection:`Servizi Disponibili --> Fatturazione Elettronica --> Registrazione
dellindirizzo telematico dove ricevere tutte le fatture elettroniche`, insert Odoo's
:guilabel:`Codice Destinatario` `K95IV18`, and confirm.
:guilabel:`Destination Code` `K95IV18`, and confirm.
Electronic Data Interchange (EDI)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Odoo uses the **FatturaPA** :abbr:`EDI (Electronic Data Interchange)` format for the Italian
localization and is enabled on the default journals when installed. When the **file processing
authorization** has been set, all **invoices** and **bills** are automatically sent.
.. note::
You can :ref:`enable electronic invoicing for other sales and purchase journals
<e-invoicing/configuration>` than the default ones.
You can check the current status of an invoice by the :guilabel:`Electronic invoicing` field. The
XML file can be found in the **chatter** of the invoice.
.. image:: italy/italy-test.png
:align: center
:alt: Electronic invoicing status (waiting for confirmation)
.. seealso::
:doc:`../accounting/customer_invoices/electronic_invoicing`
File processing authorization (Odoo)
------------------------------------
EDI Mode and authorization
--------------------------
Since the files are transmitted through Odoo's server before being sent to the :abbr:`SdI (Sistema
di Interscambio)` or received by your database, you need to authorize Odoo to process your files
from your database. To do so, go to :menuselection:`Accounting --> Configuration --> Settings -->
Electronic Document Invoicing`.
There are **three** modes available:
There are three modes available:
:guilabel:`Demo`
This mode simulates an environment in which invoices are sent to the government. In this mode,
invoices need to be *manually* downloaded as XML files and uploaded to the **Agenzia delle
Entrate**'s website.
:guilabel:`Test (experimental)`
This mode sends invoices to a non-production (i.e., test) service made available by the **Agenzia
delle Entrate**. Saving this change directs all companies on the database to use this
configuration.
:guilabel:`Official`
This is a production mode that sends your invoices directly to the **Agenzia delle Entrate**.
- | :guilabel:`Demo`
| This mode simulates an environment in which invoices are sent to the government. In this mode,
invoices need to be *manually* downloaded as XML files and uploaded to the :abbr:`AdE
(Agenzia delle Entrate)`'s website.
- | :guilabel:`Test (experimental)`
| This mode sends invoices to a non-production (i.e., test) service made available by the
:abbr:`AdE (Agenzia delle Entrate)`. Saving this change directs all companies on the database to
use this configuration.
- | :guilabel:`Official`
| This is a production mode that sends your invoices directly to the :abbr:`AdE (Agenzia delle
Entrate)`.
Once a mode is selected, you need to accept the **terms and conditions** by ticking :guilabel:`Allow
Odoo to process invoices`, and then :guilabel:`Save`. You can now record your transactions in Odoo
@@ -120,340 +195,436 @@ Accounting.
.. warning::
Selecting either :guilabel:`Test (experimental)` or :guilabel:`Official` is **irreversible**.
Once in :guilabel:`Official` mode, it is not possible to select :guilabel:`Test (experimental)`
or :guilabel:`Demo`, and same for :guilabel:`Test (experimental)`. We recommend creating a
separate database for testing purposes only.
For example, once in :guilabel:`Official` mode, it is not possible to select :guilabel:`Test
(experimental)` or :guilabel:`Demo`. We recommend creating a **separate database** for testing
purposes only.
.. note::
When in :guilabel:`Test (Experimental)` mode, all invoices sent *must* have a partner using one
of the following fake :guilabel:`Codice Destinatario` given by the **Agenzia Delle Entrate**:
`0803HR0` - `N8MIMM9` - `X9XX79Z`. Any real production :guilabel:`Codice Destinario` of your
customers will not be recognized as valid by the test service.
of the following fake :guilabel:`Destination Code` given by the :abbr:`AdE (Agenzia Delle
Entrate)`: `0803HR0` - `N8MIMM9` - `X9XX79Z`. Any real production :guilabel:`Codice Destinario`
of your customers will not be recognized as valid by the test service.
.. image:: italy/italy-edi.png
:align: center
:alt: Italy's electronic document invoicing options
.. image:: italy/edi.png
:alt: Electronic document invoicing settings
Taxes configuration
===================
.. _italy/e-invoicing-process:
Many of the e-invoicing features are implemented using Odoo's tax system. As such, it is very
important that taxes are properly configured in order to generate invoices correctly and handle
other billing use cases. For example, specific configurations are required for the **reverse
charge** type of taxes. In case of a **reverse charge** tax, the seller does *not* charge the
customer for the VAT but, instead, the customer pays the VAT *themselves* to their government. There
are **two** main types:
Process
-------
- :ref:`external reverse charge <italy/external-reverse>`;
- :ref:`internal reverse charge <italy/internal-reverse>`.
.. _italy/external-reverse:
External reverse charge
-----------------------
Invoices
~~~~~~~~
To make an export invoice, make sure that the invoice lines all use a tax configured for **reverse
charge**. The **Italian** localization contains an **example** of a reverse charge tax for export in
the EU to be used as reference (`0% EU`, invoice label `00eu`), which can be found under
:menuselection:`Accounting --> Configuration --> Taxes`. Exports are exempt from VAT, and therefore
**reverse charge** taxes require the :guilabel:`Has exoneration of tax (Italy)` option ticked, with
both the :guilabel:`Exoneration` kind and :guilabel:`Law Reference` filled in.
.. image:: italy/italy-tax.png
:align: center
:alt: External reverse charge settings
The submission of invoices to the :abbr:`SdI (Sistema di Interscambio)` for Italy is an electronic
process used for the mandatory transmission of tax documents in XML format between companies and the
:abbr:`AdE (Agenzia delle Entrate)` to reduce errors and verify the correctness of operations.
.. note::
If you need to use a different kind of :guilabel:`Exoneration`, click :menuselection:`Action -->
Duplicate` within the tax menu to create a copy of an existing similar tax. Then, select another
:guilabel:`Exoneration`, and :guilabel:`Save`. Repeat this process as many times as you need
different kind of :guilabel:`Exoneration` taxes.
You can check the current status of an invoice by the :guilabel:`SdI State` field. The XML file
is attached to the invoice.
.. tip::
**Rename** your taxes in the :guilabel:`Name` field according to their :guilabel:`Exoneration` to
differentiate them easily.
.. image:: italy/edi-process.png
:alt: EDI system architecture
On your invoice, select the corresponding tax you need in the :guilabel:`Taxes` field. You can find
the following **additional info** by opening the **XML** file of the issued invoice:
XML Documents creation
~~~~~~~~~~~~~~~~~~~~~~
- :guilabel:`SdI address (Codice Destinatario)`: must be filled for both **EU** or **non-EU**;
- :guilabel:`Country Id`: must contain the country of the foreign seller in the two-letter ISO
(Alpha-2) code (ex., `IT` for 'Italy');
- :guilabel:`CAP`: must be filled with `00000`;
- :guilabel:`Partita Iva` (**VAT number**): must contain the **VAT** number for **EU businesses**
and `OO99999999999` (double 'O' **letter**, not 'zero') for **non-EU businesses**. In case of
private customers without **VAT** number, use `0000000`;
- :guilabel:`Fiscal Code`: for foreign entities without an actual **Codice Fiscale**, any
recognizable identifier is valid.
Odoo generates the required XML files as attachments to invoices in the `FatturaPA` format required
by the :abbr:`AdE (Agenzia delle Entrate)`. Once the invoices needed are selected, go to
:guilabel:`Action` and click on :guilabel:`Send and Print`.
.. note::
Odoo does not support sending user-modified XML files.
.. image:: italy/edi-menu.png
:alt: Send and Print menu
For **invoices**, multiple configurations are technically identified by a :guilabel:`Tipo Documento`
code:
When the pop-up window opens there is a selection of actions that can be taken. :guilabel:`Generate
XML File` generates the attachments.
- `TD02` - Down payments;
- `TDO7` - Simplified invoice;
- `TD08` - Simplified credit note;
- `TD09` - Simplified debit note;
- `TD24` - Deferred invoice.
.. image:: italy/edi-send-and-print.png
:alt: Send and Print dialog
.. tabs::
The XML file as well as the PDF once can be found attached to the invoice.
.. tab:: `TD02`
.. image:: italy/edi-attachments.png
:alt: EDI Attachments
Down payments.
Submission to SDI
~~~~~~~~~~~~~~~~~
**Down payment** invoices are imported/exported with a different :guilabel:`Tipo Documento`
code `TDO2` than regular invoices. Upon import of the invoice, it creates a regular vendor
bill.
The :guilabel:`Send to Tax Agency` option in the :guilabel:`Send and Print` dialog sends the
attachment to the :guilabel:`Proxy Server`, which gathers all requests and then forwards them via a
WebServices channel to the :abbr:`SdI (Sistema di Interscambio)`. Check the sending status of the
invoice through the :guilabel:`Check Sending` button at the top of the invoice's view.
Odoo exports moves as `TD02` if the following conditions are met:
Processing by SDI
~~~~~~~~~~~~~~~~~
- Is an invoice;
- All invoice lines are related to **sales order lines** that have the flag `is_downpayment`
set as `True`.
The :abbr:`SdI (Sistema di Interscambio)` receives the document and verifies for any errors. At this
stage, the invoice is in the :guilabel:`SdI Processing` state, as shown on the invoice. The invoice
also gets assigned a :guilabel:`FatturaPA Transaction` number that is shown in the
:guilabel:`Electronic Invoicing` tab. The checks may take variable time, ranging from a few seconds
up to a day, depending on the queue of invoices sent throughout Italy.
.. tab:: `TD07`, `TD08`, and `TD09`
.. image:: italy/edi-processing.png
:alt: Check Sending button and Sdi Processing state
Simplified invoices, and credit/debit notes.
Acceptance
~~~~~~~~~~
Simplified invoices and credit notes can be used to certify **domestic transactions** under
**400 EUR** (VAT included). Its status is the same as a regular invoice, but with fewer
information requirements.
For a **simplified** invoice to be established, it must include:
- :guilabel:`Customer Invoice` reference: **unique** numbering sequence with **no gaps**;
- :guilabel:`Invoice Date`: issue **date** of the invoice;
- :guilabel:`Company Info`: the **seller**'s full credentials (VAT/TIN number, name, full
address) under :menuselection:`General Settings --> Companies (section)`;
- :guilabel:`VAT`: the **buyer**'s VAT/TIN number (on their profile card);
- :guilabel:`Total`: the total **amount** (VAT included) of the invoice.
In the :abbr:`EDI (Electronic Data Interchange)`, Odoo exports invoices as simplified if:
- It is a **domestic** transaction (i.e., the partner is from Italy);
- The buyer's data is **insufficient** for a regular invoice;
- The **required fields** for a regular invoice (address, ZIP code, city, country) are
provided;
- The total amount VAT included is **less** than **400 EUR**.
.. note::
The 400 EUR threshold was defined in `the decree of the 10th of May 2019 in the Gazzetta
Ufficiale <https://www.gazzettaufficiale.it/eli/id/2019/05/24/19A03271/sg>`_. We advise you
to check the current official value.
.. tab:: `TD24`
Deferred invoices.
The **deferred invoice** is an invoice that is **issued at a later time** than the sale of
goods or the provision of services. A **deferred invoice** has to be issued at the latest
within the **15th day** of the month following the delivery covered by the document.
It usually is a **summary invoice** containing a list of multiple sales of goods or services,
carried out in the month. The business is allowed to **group** the sales into **one invoice**,
generally issued at the **end of the month** for accounting purposes. Deferred invoices are
default for **wholesaler** having recurrent clients.
If the goods are transported by a **carrier**, every delivery has an associated **Documento di
Transporto (DDT)**, or **Transport Document**. The deferred invoice **must** indicate the
details of all the **DDTs** information for better tracing.
.. note::
E-invoicing of deferred invoices requires the `l10n_it_stock_ddt`
:ref:`module <italy/modules>`. In this case, a dedicated :guilabel:`Tipo Documento` `TD24`
is used in the e-invoice.
Odoo exports moves as `TD24` if the following conditions are met:
- Is an invoice;
- Is associated to deliveries whose **DDTs** have a **different** date than the issuance date
of the invoice.
Vendor bills
~~~~~~~~~~~~
Italian companies buying goods or services from EU countries (or services from non-EU countries)
must send the information contained within the bill received to the **Agenzia delle Entrate**. This
allows you to complete tax-related information on your bill, and to send it. The seller must be set
as :guilabel:`Cedente/Prestatore`, and the buyer as :guilabel:`Cessionario/Committente`. Contained
within the **XML** document for the vendor bill, the vendor's credentials show as
:guilabel:`Cedente/Prestatore`, and your company's credentials as
:guilabel:`Cessionario/Committente`.
.. note::
Self-billing invoices or VAT invoice integrations must be issued and sent to the tax agency.
When inputting taxes in a vendor bill, it is possible to select **reverse charge** taxes. These are
automatically activated in the Italian fiscal position. By going to :menuselection:`Accounting -->
Configuration --> Taxes`, the `10%` and `22%` :guilabel:`Goods` and :guilabel:`Services` tax scopes
are activated and preconfigured with the correct tax grids. These are set up automatically to ensure
the correct booking of accounting entries and display of the tax report.
For **vendor bills**, **three** types of configurations are technically identified by a code called
:guilabel:`Tipo Documento`:
- `TD17` - Buying services from **EU** and **non-EU** countries;
- `TD18` - Buying **goods** from **EU**;
- `TD19` - Buying **goods** from a **foreign** vendor, but the **goods** are already in **Italy**
in a **VAT deposit**.
.. tabs::
.. tab:: `TD17`
Buying **services** from **EU** and **non-EU** countries:
The foreign *seller* invoices a service with a **VAT-excluded** price, as it is not
taxable in Italy. The VAT is paid by the *buyer* in Italy;
- Within EU: the *buyer* integrates the invoice received with the **VAT information**
due in Italy (i.e., **vendor bill tax integration**);
- Non-EU: the *buyer* sends themselves an invoice (i.e., **self-billing**).
Odoo exports a transaction as `TD17` if the following conditions are met:
- Is a vendor bill;
- At least one tax on the invoice lines targets the tax grids :ref:`VJ <italy/grids>`;
- All invoice lines either have :guilabel:`Services` as **products**, or a tax with the
:guilabel:`Services` as **tax scope**.
.. tab:: `TD18`
Buying **goods** from **EU**:
Invoices issued within the EU follow a **standard format**, therefore only an integration of
the existing invoice is required.
Odoo exports a transaction as `TD18` if the following conditions are met:
- Is a vendor bill;
- At least one tax on the invoice lines targets the tax grids :ref:`VJ <italy/grids>`;
- All invoice lines either have :guilabel:`Consumable` as **products**, or a tax with the
:guilabel:`Goods` as **tax scope**.
.. tab:: `TD19`
Buying **goods** from a **foreign** vendor, but the **goods** are already in **Italy** in a
**VAT deposit**:
- From EU: the *buyer* integrates the invoice received with the **VAT information** due in
Italy (i.e., **vendor bill tax integration**);
- Non-EU: the *buyer* sends an invoice to *themselves* (i.e., **self-billing**).
Odoo exports a move as a `TD19` if the following conditions are met:
- Is a vendor bill;
- At least one tax on the invoice lines targets the tax grid :ref:`VJ3 <italy/grids>`;
- All invoice lines either have :guilabel:`Consumable` products, or a tax with
:guilabel:`Goods` as tax scope.
If the document is valid, it is recorded and considered fiscally valid by the :abbr:`AdE (Agenzia
delle Entrate)`, which will proceed with archiving in :guilabel:`Substitute Storage (Conservazione
Sostitutiva)` if explicitly requested on the Agency's portal.
.. warning::
Odoo does not offer the
`Conservazione Sostitutiva <https://www.agid.gov.it/index.php/it/piattaforme/conservazione>`_
requirements. Other providers and **Agenzia delle Entrate** supply free and certified storage to
meet the requested conditions.
Odoo does not offer the `Conservazione Sostitutiva
<https://www.agid.gov.it/index.php/it/piattaforme/conservazione>`_ requirements. Other providers
and :abbr:`AdE (Agenzia delle Entrate)` supply free and certified storage to meet the
specifications requested by law.
.. _italy/internal-reverse:
The :abbr:`SdI (Sistema di Interscambio)` :guilabel:`Destination Code` attempts to forward the
invoice to the customer at the provided address, whether it is a `PEC` email address or a
:abbr:`SdI (Sistema di Interscambio)` :guilabel:`Destination Code` for their ERP's WebServices
channels. A maximum of 6 attempts are made every 12 hours, so even if unsuccessful, this process can
take up to three days. The invoice status is :guilabel:`Accepted by SDI, Forwarding to Partner`.
Internal reverse charge
-----------------------
Possible Rejection
~~~~~~~~~~~~~~~~~~
.. warning::
Odoo currently does not support domestic **internal reverse charge** processes.
The :abbr:`SdI (Sistema di Interscambio)` may find inaccuracies in the compilation, possibly even
formal ones. In this case, the invoice is in the :guilabel:`SDI Rejected` state. The :abbr:`SdI
(Sistema di Interscambio)`'s observations are inserted at the top of the Invoice tab. To resolve the
issue, it is sufficient to delete the attachments of the invoice, return the invoice to
:guilabel:`Draft`, and fix the errors. Once the invoice is ready, it can be resent.
.. _italy/grids:
.. note::
To regenerate the XML, both the XML attachment and the PDF report must be deleted, so that they
are then regenerated together. This ensures that both always contain the same data.
'Reverse Charge' tax grids
--------------------------
.. image:: italy/edi-rejected.png
:alt: EDI Rejected State
The Italian localization has a specific **tax grid** section for **reverse charge** taxes. These
tax grids are identifiable by the :ref:`VJ <italy/grids>` tag, and can be found under
:menuselection:`Accounting --> Reporting --> Audit Reports: Tax Report`.
Forwarding Completed
~~~~~~~~~~~~~~~~~~~~
.. image:: italy/italy-grids.png
:align: center
:alt: Italian reverse charge tax grids
The invoice has been delivered to the customer; however, you can still send a copy to the customer
in PDF via email or post. Its status is :guilabel:`Accepted by SDI, Delivered to Partner`.
San Marino
==========
If the :abbr:`SdI (Sistema di Interscambio)` cannot contact your customer, they may not be
registered on the :abbr:`AdE (Agenzia delle Entrate)` portal. In this case, just make sure to send
the invoice in PDF via email or by mail. The invoice is then in the :guilabel:`Accepted by SDI,
Partner Delivery Failed` state.
Tax Integration
---------------
When you receive a vendor bill, either from :abbr:`SdI (Sistema di Interscambio)`, from paper or
from an imported XML file, the Tax Agency might request that you send some tax information
integration back to the :abbr:`SdI (Sistema di Interscambio)`. It happens when a transaction that
was tax exempt becomes taxable for any reason.
.. example::
Here is a non-exhaustive list:
- | :ref:`italy/reverse-charge`
| As a buyer, you have to pay taxes on what you buy and integrate tax information.
:guilabel:`Reverse Charge` taxes.
- | :ref:`italy/split-payment`
| As a :abbr:`PA (Public Administration)` business buyer, you have to pay taxes and integrate
tax information. Be sure that you replace the :guilabel:`0% Sale Taxes` on the vendor bill
you received with the correct :guilabel:`Split Payment` taxes.
- | :guilabel:`Self Consumption`
| When, as a business owner, you use an asset that you bought for business for personal reasons
instead, you have to pay those taxes you originally deducted as a business cost for it.
Odoo may detect that your vendor bill can be interpreted as a document of a type that needs tax
integration, as detailed in the :ref:`italy/document-types` section.
.. important::
Be sure that you replace the :guilabel:`0% Sale Taxes` on the vendor bill you received with the
ones you're supposed to pay to the :abbr:`AdE (Agenzia delle Entrate)`. A button then appears on
the top of the single vendor bill form to send them.
When clicking on the :guilabel:`Send Tax Integration` button, an XML file of the appropriate
:guilabel:`Document Type` is generated, attached to the bill, and sent as for invoices.
.. image:: italy/edi-tax-integration-button.png
:alt: EDI Send Tax Integration button
.. _italy/document-types:
Document Types
--------------
The :abbr:`SdI (Sistema di Interscambio)` requires businesses to send customer invoices and other
documents through the :abbr:`EDI (Electronic Data Interchange)`.
The following :guilabel:`Document Type` codes all technically identify different business use cases.
TD01 - Invoices
~~~~~~~~~~~~~~~
This represents the standard **domestic** scenario for all invoices exchanged through the :abbr:`SdI
(Sistema di Interscambio)`. Any invoice that doesn't fall into one of the specific special cases
is categorized as a regular invoice, identified by the :guilabel:`Document Type` `TD01`.
TD02 - Down payments
~~~~~~~~~~~~~~~~~~~~
**Down payment** invoices are imported/exported with a different :guilabel:`Document Type` code
`TDO2` than regular invoices. Upon import of the invoice, a regular vendor bill is created.
Odoo exports transactions as `TD02` if the following conditions are met:
#. It is an invoice;
#. All invoice lines are related to down payment sales order lines.
TD04 - Credit notes
~~~~~~~~~~~~~~~~~~~
It is the standard scenario for all **credit notes** issued to **domestic** clients, when we need to
formally acknowledge that the seller is reducing or canceling a previously issued invoice, for
example, in case of overbilling, incorrect items, or overpayment. Just like invoices, they must be
sent to the :abbr:`SdI (Sistema di Interscambio)`, their :guilabel:`Document Type` `TD04`
TD07, TD08, TD09 - Simplified Invoicing
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Simplified invoices (`TD07`), credit notes (`TD08`), and debit notes (`TD09`) can be used to certify
domestic transactions under 400 EUR (VAT included). Its status is the same as that of a regular
invoice, but with fewer information requirements.
For a simplified invoice to be established, it must include:
#. :guilabel:`Customer Invoice` reference: **unique** numbering sequence with **no gaps**;
#. :guilabel:`Invoice Date`: issue **date** of the invoice;
#. :guilabel:`Company Info`: the **seller**'s full credentials (VAT/TIN number, name, full address)
under :menuselection:`General Settings --> Companies (section)`;
#. :guilabel:`VAT`: the **buyer**'s VAT/TIN number (on the partner form);
#. :guilabel:`Total`: the total **amount** (VAT included) of the invoice.
In the :abbr:`EDI (Electronic Data Interchange)`, Odoo exports invoices as simplified if:
#. It is a domestic transaction (i.e., the partner is from Italy);
#. Your company's **required fields** (:guilabel:`VAT Number` or :guilabel:`Codice Fiscale`,
:guilabel:`Fiscal Regime`, and full **address**) are provided;
#. The partner's address is not fully specified (i.e., it misses the City or the ZipCode);
#. The total amount of VAT included is **less** than **400 EUR**.
.. note::
The 400 EUR threshold was defined in `the decree of the 10th of May 2019 in the Gazzetta
Ufficiale <https://www.gazzettaufficiale.it/eli/id/2019/05/24/19A03271/sg>`_. We advise you to
check the current official value.
TD16 - Internal Reverse Charge
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Internal reverse charge transactions (see :ref:`italy/tax-exemption` and
:ref:`italy/reverse-charge`) are exported as `TD16` if the following conditions are met:
- It is a vendor bill;
- It has at least **one tax** on the invoice lines that targets one of these :ref:`tax grids
<italy/grids>`: `VJ6`, `VJ7`, `VJ8`, `VJ12`, `VJ13`, `VJ14`, `VJ15`, `VJ16`, `VJ17`
TD17 - Buying services from abroad
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When buying **services** from **EU** and **non-EU** countries, the foreign *seller* invoices a
service with a **VAT-excluded** price, as it is not taxable in Italy. The VAT is paid by the *buyer*
in Italy.
- Within the EU: the *buyer* integrates the invoice received with the **VAT information** due in
Italy (i.e., **vendor bill tax integration**);
- Non-EU: the *buyer* sends themselves an invoice (i.e., **self-billing**).
Odoo exports a transaction as `TD17` if the following conditions are met:
- It is a vendor bill;
- It has at least **one tax** on the invoice lines that targets the tax grid :ref:`VJ3
<italy/grids>`;
- All invoice lines either have :guilabel:`Services` as **products**, or a tax with the
:guilabel:`Services` as **tax scope**.
TD18 - Buying goods from EU
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Invoices issued within the EU follow a **standard format**, therefore only an integration of the
existing invoice is required.
Odoo exports a transaction as `TD18` if the following conditions are met:
- It is a vendor bill;
- The **partner** is from an **EU** country;
- It has at least one tax on the invoice lines that targets the tax grid :ref:`VJ9 <italy/grids>`;
- All invoice lines either have :guilabel:`Consumable` as **products**, or a tax with
:guilabel:`Goods` as **tax scope**.
TD19 - Buying goods from VAT deposit
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Buying **goods** from a **foreign** vendor, but the **goods** are already in **Italy** in a **VAT
deposit**.
- From the EU: the *buyer* integrates the invoice received with the **VAT information** due in
Italy (i.e., **vendor bill tax integration**);
- Non-EU: the *buyer* sends an invoice to *themselves* (i.e., **self-billing**).
Odoo exports a transaction as a `TD19` if the following conditions are met:
- It is a vendor bill;
- It has at least one tax on the invoice lines that targets the tax grid :ref:`VJ3 <italy/grids>`;
- All invoice lines either have :guilabel:`Consumables` as products, or a tax with
:guilabel:`Goods` as **tax scope**.
TD24 - Deferred invoices
~~~~~~~~~~~~~~~~~~~~~~~~
The **deferred invoice** is an invoice that is **issued at a later time** than the sale of goods or
the provision of services. A **deferred invoice** has to be issued at the latest within the **15th
day** of the month following the delivery covered by the document.
It usually is a **summary invoice** containing a list of multiple sales of goods or services carried
out in the month. The business is allowed to **group** the sales into **one invoice**, generally
issued at the **end of the month** for accounting purposes. Deferred invoices are default for
**wholesalers** having recurrent clients.
If the goods are transported by a **carrier**, every delivery has an associated **Documento di
Transporto (DDT)**, or **Transport Document**. The deferred invoice **must** indicate the details of
all the **DDTs** information for better tracing.
.. note::
E-invoicing of deferred invoices requires the `l10n_it_stock_ddt` :ref:`module <italy/modules>`.
In this case, a dedicated :guilabel:`Document Type` `TD24` is used in the e-invoice.
Odoo exports transactions as `TD24` if the following conditions are met:
#. It is an invoice;
#. It is associated with deliveries whose **DDTs** have a **different** date than the issue date of
the invoice.
TD28 - San Marino
~~~~~~~~~~~~~~~~~
Invoices
--------
********
San Marino and Italy have special agreements on e-invoicing operations. As such, **invoices** follow
the regular **reverse charge** rules. Additional requirements are not enforced by Odoo, however, the
user is requested by the **State** to:
the regular **reverse charge** rules. You can use the proper :guilabel:`Document Type` depending on
the invoice type: `TD01`, `TD04`, `TD05`, `TD24`, `TD25`. Additional requirements are not enforced
by Odoo. However, the user is requested by the **State** to:
- Select a tax with the option :guilabel:`Has exoneration of tax (Italy)` ticked, and the
:guilabel:`Exoneration` set to `N3.3`;
- Use the generic :abbr:`SdI (Sistema di Interscambio)` :guilabel:`Codice Destinatario` `2R4GT08`.
The invoice is then routed by a dedicated office in San Marino to the correct business.
- Select a tax with the :guilabel:`Tax Exemption Kind` set to `N3.3`;
- Use the generic :abbr:`SdI (Sistema di Interscambio)` :guilabel:`Destination Code` `2R4GT08`.
Bills
-----
The invoice is then routed by a dedicated office in San Marino to the correct business.
Vendor Bills
************
When a **paper bill** is received from San Marino, any Italian company **must** submit that invoice
to the **Agenzia delle Entrate** by indicating the e-invoice's :guilabel:`Tipo Documento` field with
the special value `TD28`.
to the :abbr:`AdE (Agenzia delle Entrate)` by indicating the e-invoice's :guilabel:`Document Type`
field with the special value `TD28`.
.. tabs::
Odoo exports a transaction as `TD28` if the following conditions are met:
.. tab:: `TD28`
#. It is a vendor bill;
#. It has at least one tax on the invoice lines that targets the tax grids :ref:`VJ <italy/grids>`;
#. The **country** of the partner is **San Marino**.
Odoo exports a move as `TD28` if the following conditions are met:
Public Administration Businesses (B2G)
======================================
- Is a vendor bill;
- At least one tax on the invoice lines targets the tax grids :ref:`VJ <italy/grids>`;
- The **country** of the partner is **San Marino**.
:abbr:`PA (Public Administration)` businesses are subjected to more control than private businesses
as they handle public money coming from taxpayers. The :abbr:`EDI (Electronic Data Interchange)`
process adds some steps to the :ref:`regular one <italy/e-invoicing-process>`, as :abbr:`PA (Public
Administration)` businesses can **accept** or **refuse** invoices.
Pubblica amministrazione (B2G)
==============================
.. note::
:abbr:`PA (Public Administration)` businesses have a 6-digit long :guilabel:`Destination Code`,
also called :abbr:`CUU (Codice Univoco Ufficio)`, that is **mandatory**, **PEC** address cannot
be used in this case.
.. warning::
Odoo does **not** send invoices directly to the government as they need to be signed. If we see
that the codice destinatario is 6 digits, then it is not sent to the PA automatically, but you
can download the XML, sign it with an external program and send it through the portal.
Digital qualified signature
---------------------------
For invoices and bills intended to the **Pubblica Amministrazione (B2G)**, a **Digital Qualified
Signature** is required for all files sent through the :abbr:`SdI (Sistema di Interscambio)`. The
**XML** file must be certified using a certificate that is either:
- a **smart card**;
- a **USB token**;
- a **Hardware Security Module (HSM)**.
.. seealso::
`Complete list of businesses that belong to the Public Administration along with their
Destination Code <https://www.agenziaentrate.gov.it/portale/web/guest/aree-tematiche/fatturazione-elettronica>`_
CIG, CUP, DatiOrdineAcquisto
----------------------------
To ensure the effective traceability of payments by public administrations, electronic invoices
issued to the public administrations must contain:
issued to public administrations must contain:
- The :abbr:`CIG (Codice Identificativo Gara)`, except in cases of exclusion from traceability
obligations provided by law n. 136 of August 13, 2010;
- The :abbr:`CUP (Codice Unico di Progetto)`, in case of invoices related to public works.
If the **XML** file requires it, the **Agenzia Delle Entrate** can *only* proceed payments of
electronic invoices when the **XML** file contains a :abbr:`CIG (Codice Identificativo Gara)` and
:abbr:`CUP (Codice Unico di Progetto)`. For each electronic invoice, it is **necessary** to indicate
the :abbr:`CUU (Codice Univoco Ufficio)`, which represents the unique identifier code that allows
the :abbr:`SdI (Sistema di Interscambio)` to correctly deliver the electronic invoice to the
recipient office.
If the XML file requires it, the :abbr:`AdE (Agenzia Delle Entrate)` can *only* proceed payments of
electronic invoices when the XML file contains a :abbr:`CIG (Codice Identificativo Gara)` and
:abbr:`CUP (Codice Unico di Progetto)`.
.. note::
- The :abbr:`Codice Unico di Progetto)` and the :abbr:`CIG (Codice Identificativo Gara)` must be
included in one of the **2.1.2** (DatiOrdineAcquisto), **2.1.3** (Dati Contratto), **2.1.4**
(DatiConvenzione), **2.1.5** (Date Ricezione), or **2.1.6** (Dati Fatture Collegate)
information blocks. These correspond to the elements named :guilabel:`CodiceCUP` and
:guilabel:`CodiceCIG` of the electronic invoice **XML** file, whose table can be found on the
government `website <http://www.fatturapa.gov.it/>`_.
- The :abbr:`CUU (Codice Univoco Ufficio)` must be included in the electronic invoice
corresponding to the element **1.1.4** (:guilabel:`CodiceDestinario`).
The :abbr:`CUP (Codice Unico di Progetto)` and the :abbr:`CIG (Codice Identificativo Gara)` must
be included in one of the `DatiOrdineAcquisto`, `DatiContratto`, `DatiConvenzione`,
`DateRicezione`, or `DatiFattureCollegate` XML tags.
These correspond to the elements named :guilabel:`CodiceCUP` and :guilabel:`CodiceCIG` of the
electronic invoice XML file, whose table can be found on the government `website
<http://www.fatturapa.gov.it/>`_.
.. _italy/split-payment:
Split Payment
-------------
The :guilabel:`Split Payment` mechanism behaves much like :ref:`italy/reverse-charge`.
.. example::
When an Italian company bills a :abbr:`PA (Public Administration)` business - for example,
cleaning services for a public building - the :abbr:`PA (Public Administration)` business
self-reports the VAT to the Tax Agency themselves, and the vendor just has to select the
appropriate tax with the right :guilabel:`Tax Exemption` for their invoice lines.
The specific :guilabel:`Scissione dei Pagamenti` fiscal position is available to deal with partners
belonging to the :abbr:`PA (Public Administration)`.
Process
-------
.. _italy/digital-signature:
Digital qualified signature
~~~~~~~~~~~~~~~~~~~~~~~~~~~
For invoices and bills intended for the :abbr:`PA (Public Administration)`, a **Digital Qualified
Signature** is required for all files sent through the :abbr:`SdI (Sistema di Interscambio)`. The
XML file must be certified using a certificate that is either:
- a **smart card**;
- a **USB token**;
- an :abbr:`HSM (Hardware Security Module)`.
.. warning::
Odoo **cannot** digitally sign documents for you. When a 6-digit long :guilabel:`Codice
Destinatario` is detected, then the :abbr:`EDI (Electronic Data Interchange)` process stops, and
the invoice is set on the :guilabel:`Requires user signature` state. You can download the
document in XML, sign it with any :guilabel:`Digital Qualified Signature` provider's external
program and send it through the :abbr:`AdE (Agenzia Delle Entrate)` portal.
Acceptance or Refusal
~~~~~~~~~~~~~~~~~~~~~
.. warning::
As Odoo does not handle sending signed invoices to :abbr:`PA (Public Administration)` businesses,
these states cannot be directly triggered by Odoo. When you upload the invoice on the :abbr:`AdE
(Agenzia Delle Entrate)` portal, Odoo receives notifications about it, putting the correct
:guilabel:`SdI State` on the invoice.
After receiving the invoice through the :abbr:`SdI (Sistema di Interscambio)`, the :abbr:`PA (Public
Administration)` business has 15 days to accept the invoice. If it does, then the process ends here.
If the :abbr:`PA (Public Administration)` business refuses the invoice, it is still considered valid
once it is accepted by the :abbr:`SdI (Sistema di Interscambio)`. You then have to issue a credit
note to compensate and send it to the :abbr:`SdI (Sistema di Interscambio)`.
Expired Terms
~~~~~~~~~~~~~
If the :abbr:`PA (Public Administration)` business doesn't reply within 15 days, you need to contact
the :abbr:`PA (Public Administration)` business directly, sending them both the invoice and the
received deadline notification by email. You can make an arrangement with them and manually set the
correct :guilabel:`SdI State` on your invoice.

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

@@ -284,8 +284,8 @@ in the *System Parameters*. To override the following defaults they need to be a
The two system parameters are as follows:
- `mail.incoming.limit.period` (60 minutes by default)
- `mail.incoming.limit.alias` (5 by default)
- `mail.gateway.loop.minutes` (120 minutes by default)
- `mail.gateway.loop.threshold` (20 by default)
Add these fields in Odoo by first enabling :ref:`developer mode <developer-mode>`, and then
navigating to :menuselection:`Settings --> Technical Menu --> Parameters --> System Parameters`.
@@ -293,13 +293,13 @@ Change the value of these parameters, as needed.
When an email is received in the Odoo database on the catchall email address or on any alias, Odoo
looks at the mail received for the given period of time defined in the system parameter
`mail.incoming.limit.period`. If the received email was sent to an alias then Odoo will reference
the `mail.incoming.limit.alias` system parameter and determine the value as the number of records
this alias is allowed to create in the given period of time (value of `mail.incoming.limit.period`).
`mail.gateway.loop.minutes`. If the received email was sent to an alias then Odoo will reference the
`mail.gateway.loop.threshold` system parameter and determine the value as the number of records this
alias is allowed to create in the given period of time (value of `mail.gateway.loop.minutes`).
In addition, when email is received to the catchall email address, Odoo will reference the emails
received to the database during the set period of time (as stated by the value in the system
parameter: `mail.incoming.limit.period`). Odoo will then determine whether any of the emails
parameter: `mail.gateway.loop.minutes`). Odoo will then determine whether any of the emails
received match that of the email(s) being received during the specified time-frame, and will prevent
a feedback loop from occurring if a duplicate email is detected.

View File

@@ -11,6 +11,6 @@ Configuration
config/connect
config/pos
config/https_certificate_iot
config/flash_sdcard
config/updating_iot
config/troubleshooting
config/windows_iot

View File

@@ -37,8 +37,8 @@ via :ref:`WiFi <iot_connect/wifi>`.
.. important::
The disk image that the :abbr:`IoT (Internet of Things)` box SD card is formatted with is unique
to the version of the Odoo database that the :abbr:`IoT (Internet of Things)` box is running on.
Ensure that the :abbr:`IoT (Internet of Things)` box is :doc:`flashed <flash_sdcard>` with the
most up-to-date disk image.
Ensure that the :abbr:`IoT (Internet of Things)` box is :ref:`flashed <iot/config/flash>` with
the most up-to-date disk image.
.. _iot_connect/ethernet:

View File

@@ -1,68 +0,0 @@
====================
Flashing the SD card
====================
In some circumstances, the :abbr:`IoT (Internet of Things)` box's micro SD Card may need to be
re-flashed to benefit from Odoo's latest :abbr:`IoT (Internet of Things)` image update. This means
that the Odoo :abbr:`IoT (Internet of Things)` box software may need to be updated.
Upgrade from the IoT box home page
==================================
Go to the :abbr:`IoT (Internet of Things)` box homepage by navigating to :menuselection:`IoT app -->
IoT Boxes` and clicking on the :guilabel:`IP address` of the :abbr:`IoT (Internet of Things)` box.
Then click on :guilabel:`Update` (next to the version number).
If a new version of the :abbr:`IoT (Internet of Things)` Box image is available, an
:guilabel:`Upgrade to _xx.xx_` button will appear at the bottom of the page. Click this button to
upgrade the unit and the :abbr:`IoT (Internet of Things)` box will then flash itself to the new
version. All of the previous configurations will be saved.
.. note::
This process can take more than 30 minutes. Do not turn off or unplug the :abbr:`IoT (Internet of
Things)` box as it would leave it in an inconsistent state. This means that the :abbr:`IoT
(Internet of Things)` box will need to be re-flashed with a new image. See
:ref:`flash_sdcard/etcher`.
.. image:: flash_sdcard/flash-upgrade.png
:align: center
:alt: IoT box software upgrade in the IoT Box Home Page.
.. _flash_sdcard/etcher:
Upgrade with Etcher Software
============================
.. note::
A computer with a micro SD card reader/adapter is required in order to re-flash the micro SD
card.
Navigate to Balena's website and download `Etcher <https://www.balena.io/>`_. It's a free and
open-source utility used for burning image files onto drives. Click to `download
<https://www.balena.io/etcher#download-etcher>`_. Install and launch the program on the computer.
Then download the version-specific :abbr:`IoT (Internet of Things)` image from `nightly
<http://nightly.odoo.com/master/iotbox/>`_.
The following are image versions on the `nightly <http://nightly.odoo.com/master/iotbox/>`_ website
with their corresponding Odoo database version:
- Odoo V16 --> iotbox-latest.zip
- Odoo V15 --> iotboxv21_10.zip
- Odoo V14 --> iotboxv21_04.zip
- Odoo V13 --> iotboxv20_10.zip
The images should be downloaded and extracted to a convenient file location.
After this step is complete, insert the :abbr:`IoT (Internet of Things)` box's micro SD card into
the computer or reader. Open *Etcher* and select :guilabel:`Flash from file`, then find and select
the image just downloaded and extracted. Next, select the drive the image should be burned to.
Lastly, click on :guilabel:`Flash` and wait for the process to finish.
.. image:: flash_sdcard/etcher-app.png
:align: center
:alt: Balena's Etcher software dashboard.
.. note::
An alternative software for flashing the micro SD card is *Raspberry Pi Imager*. Download the
*Raspberry Pi* software `here <https://www.raspberrypi.com/software/>`_.

View File

@@ -19,10 +19,10 @@ The pairing code does not show under the following circumstances:
It is automatically removed from connected displays when this time has expired.
- The version of the :abbr:`IoT (Internet of Things)` box image is too old. If the :abbr:`IoT
(Internet of Things)` box image is from an earlier version, then the SD card of the :abbr:`IoT
(Internet of Things)` box will need to be re-flashed to update the image (see :doc:`Flashing the
SD Card <flash_sdcard>`).
(Internet of Things)` box needs to be re-flashed to update the image (see :ref:`Flashing the SD
Card <iot/config/flash>`).
If none of the cases listed above correct the issue, then make sure that the :abbr:`IoT (Internet of
If none of the cases listed above correct the issue, then make sure the :abbr:`IoT (Internet of
Things)` box has correctly started, by checking that a fixed green LED is showing next to the power
port.

View File

@@ -0,0 +1,137 @@
==============
Updating (IoT)
==============
Due to the complexity of the :abbr:`IoT (Internet of Things)` box, and virtual Windows :abbr:`IoT
(Internet of Things)` box, the term 'updating' can mean several different things.
The actual drivers can be updated, the core code on the :abbr:`IoT (Internet of Things)` box can be
updated, or a new image can be flashed (using a physical :abbr:`IoT (Internet of Things)` box).
This document explores the various ways to update :abbr:`IoT (Internet of Things)` boxes to ensure
smooth operation of :abbr:`IoT (Internet of Things)` box processes and devices.
.. _iot/config/flash:
Flashing the SD card on IoT box
===============================
.. important::
This update does **not** apply to the Windows :abbr:`IoT (Internet of Things)` box (Odoo 16 and
higher).
To update the Windows :abbr:`IoT (Internet of Things)`, first, uninstall the previous version of
the Odoo Windows program, and then reinstall it using the most up-to-date installation package.
To begin the installation, navigate to the Odoo 16 (or higher) installation package for
Enterprise or Community - Windows edition, at `Odoo's download page
<https://odoo.com/download>`_.
In some circumstances, the :abbr:`IoT (Internet of Things)` box's micro SD Card may need to be
re-flashed with *Etcher* software to benefit from Odoo's latest :abbr:`IoT (Internet of Things)`
image update. This means the Odoo :abbr:`IoT (Internet of Things)` box software may need to be
updated in instances of a new :abbr:`IoT (Internet of Things)` box, or when a handler's update, or
an update from the :abbr:`IoT (Internet of Things)` box home page, does not resolve issues.
.. note::
- It is often necessary to re-flash the :abbr:`IoT (Internet of Things)` box's image after
upgrading the Odoo database to a new version.
- A computer with a micro SD card reader/adapter is **required** to re-flash the micro SD card.
First, begin by downloading `Etcher <https://www.balena.io/etcher#download-etcher>`_. It is a free,
open-source utility, used for burning image files onto drives. After the download completes, install
and launch the program on the computer.
Then, download the latest :abbr:`IoT (Internet of Things)` image from `nightly
<http://nightly.odoo.com/master/iotbox>`_, which will be labeled as `iotbox-latest.zip`. This
particular image is compatible with *all* supported versions of Odoo.
After this step is complete, insert the :abbr:`IoT (Internet of Things)` box's micro SD card into
the computer or reader. Open *Etcher*, and select :guilabel:`Flash from file`, then find and select
the `iotbox-latest.zip` image and extract it. Next, select the drive the image should be burned to.
Lastly, click :guilabel:`Flash`, and wait for the process to finish.
.. image:: updating_iot/etcher-app.png
:align: center
:alt: Balena's Etcher software dashboard.
.. tip::
Balena's *Etcher* software also allows for the administrator to flash the :abbr:`SD (Secure
Digital)` card from a :abbr:`URL (Uniform Resource Locator)`. To flash from a :abbr:`URL (Uniform
Resource Locator)`, simply click :guilabel:`Flash from URL`, instead of :guilabel:`Flash from
file`.
Then, enter the following: `http://nightly.odoo.com/master/iotbox/iotbox-latest.zip`.
.. image:: updating_iot/url-flash.png
:align: center
:alt: A view of Balena's Etcher software, with the flash from URL option highlighted.
.. note::
An alternative software for flashing the micro SD card is `Raspberry Pi Imager
<https://www.raspberrypi.com/software/>`_.
.. _iot/config/homepage-upgrade:
Update from the IoT box home page
=================================
In the background, the :abbr:`IoT (Internet of Things)` box uses a version of Odoo code to run and
connect to the Odoo database. This code may need to be updated in order for the :abbr:`IoT (Internet
of Things)` box to operate effectively. This operation should be completed on a routine basis, to
ensure the :abbr:`IoT (Internet of Things)` system, and its processes, stay up-to-date.
Go to the :abbr:`IoT (Internet of Things)` box home page by navigating to :menuselection:`IoT app
--> IoT Boxes`, and clicking on the :guilabel:`IP address` of the :abbr:`IoT (Internet of Things)`
box. Then, click on :guilabel:`Update` (next to the version number).
If a new version of the :abbr:`IoT (Internet of Things)` box image is available, an
:guilabel:`Upgrade to _xx.xx_` button appears at the bottom of the page. Click this button to
upgrade the unit, at which point the :abbr:`IoT (Internet of Things)` box flashes itself to the
newer version. All of the previous configurations are then saved.
.. important::
This process can take more than 30 minutes. Do **not** turn off, or unplug, the :abbr:`IoT
(Internet of Things)` box, as it would leave it in an inconsistent state. This means the
:abbr:`IoT (Internet of Things)` box needs to be :ref:`re-flashed <iot/config/flash>` with a new
image.
.. image:: updating_iot/flash-upgrade.png
:align: center
:alt: IoT box software upgrade in the IoT Box Home Page.
Handler (driver) update
=======================
There may be some instances where drivers or interfaces need to be updated for individual devices
(e.g. scales, measurement tools, etc.). The IoT handler's (drivers and interfaces) code can be
modified by syncing them with the configured server handler's code.
This can be helpful in instances where :abbr:`IoT (Internet of Things)` devices (e.g. scales,
measurement tools, etc.) are not working properly with the :abbr:`IoT (Internet of Things)` box.
For both the Windows :abbr:`IoT (Internet of Things)` (Odoo 16 and higher) and physical :abbr:`IoT
(Internet of Things)` box, this process can be performed manually from the :abbr:`IoT (Internet of
Things)` box home page. Go to the :abbr:`IoT (Internet of Things)` box home page by navigating to
:menuselection:`IoT app --> IoT Boxes`, and clicking on the :guilabel:`IP address` of the :abbr:`IoT
(Internet of Things)` box.
Next, click :guilabel:`Handlers list`, and then select :guilabel:`Load Handlers` at the bottom of
the page.
.. image:: updating_iot/load-handlers.png
:align: center
:alt: Handlers list on an IoT box with the load handlers button highlighted.
.. important::
Handler's code is fetched from the configured server, and it needs to be up-to-date to have the
latest fixes and patches.
.. note::
A handler update is also performed automatically each time the :abbr:`IoT (Internet of Things)`
box is restarted. The only exception to this process is if the *Automatic drivers update* is
unchecked in the form view of the :abbr:`IoT (Internet of Things)` box on the Odoo server. This
setting can be reached by going to :menuselection:`IoT App --> Select the IoT box --> Automatic
drivers update`.

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -1,6 +1,6 @@
====================
Create new employees
====================
=============
New employees
=============
When a new employee is hired, the first step is to create a new employee record. This record is a
centralized place where all important information about the employee is stored, including
@@ -347,15 +347,43 @@ information for the new employee:
the :guilabel:`Default Role` fields. If the :guilabel:`Default Role` is selected as a role, it is
automatically added to the list of :guilabel:`Roles`.
.. important::
The :guilabel:`Planning` section affects the *Planning* application and **only** appears if the
*Planning* application is installed.
.. important::
The users that appear in the drop-down menu for the :guilabel:`Approvers` section **must** have
*Administrator* rights set for the corresponding human resources role.
If an employee has assigned :guilabel:`Roles`, they are **only** assigned to shifts for these
roles.
To check who has these rights, go to :menuselection:`Settings app --> Users --> → Manage Users`.
Click on an employee, and check the :guilabel:`Human Resources` section of the :guilabel:`Access
Rights` tab.
If this field is blank, they are assigned shifts, regardless of the role. The
:guilabel:`Default Role` has precedence over the other roles when assigning shifts.
- In order for the user to appear as an approver for :guilabel:`Expenses`, they **must** have
either :guilabel:`Team Approver`, :guilabel:`All Approver`, or :guilabel:`Administrator` set
for the :guilabel:`Expenses` role.
- In order for the user to appear as an approver for :guilabel:`Time Off`, they **must** have
either :guilabel:`Officer` or :guilabel:`Administrator` set for the :guilabel:`Time Off` role.
- In order for the user to appear as an approver for :guilabel:`Timesheets`, they **must** have
either :guilabel:`Manager`, :guilabel:`Officer`, or :guilabel:`Administrator` set for the
:guilabel:`Payroll` role.
.. note::
:guilabel:`Working Hours` are related to a company's working times, and an employee **cannot**
have working hours that are outside of a company's working times.
Each individual working time is company-specific. So, for multi-company databases, each company
**must** have its own working hours set.
If an employee's working hours are not configured as a working time for the company, new working
times can be added, or existing working times can be modified.
To add or modify a working time, go to the :menuselection:`Payroll app --> Configuration -->
Working Schedules`. Then, either add a new working time by clicking :guilabel:`New`, or edit an
existing one by selecting a :guilabel:`Working Time` from the list to modify it.
Refer to the :ref:`Working schedules <payroll/working-times>` section of the payroll
documentation for specific details on creating and editing working schedules.
After the new working time is created, or an existing one is modified, the :guilabel:`Working
Hours` can be set on the employee form. In the :guilabel:`Schedule` section of the
:guilabel:`Work Information` tab, select the employee's working hours using the drop-down menu.
.. _employees/private-info:

View File

@@ -946,15 +946,15 @@ Refer to the :doc:`../hr/recruitment/new_job` documentation for more details on
form.
.. seealso::
- :doc:`payroll/reporting`
- :doc:`payroll/contracts`
- :doc:`payroll/payslips`
- :doc:`payroll/work_entries`
- :doc:`payroll/reporting`
.. toctree::
:titlesonly:
payroll/reporting
payroll/contracts
payroll/payslips
payroll/work_entries
payroll/reporting

View File

@@ -2,7 +2,7 @@
Payslips
========
Payslips are created either by the employees themselves or their managers, and are approved by
*Payslips* are created either by the employees themselves or their managers, and are approved by
authorized employees (typically managers). Then, once payslips are approved, employees are issued
payslips and are paid either by check or direct deposit, depending on how their employee profile is
configured.
@@ -17,6 +17,8 @@ individual payslips, a batch of payslips, or commission payslips.
:align: center
:alt: Payslips menu selection in Payroll.
.. _payroll/to-pay:
To pay
======
@@ -28,159 +30,233 @@ from this dashboard.
:align: center
:alt: View all payslips that need to be paid on the Payslips To Pay page.
Each payslip will list the :guilabel:`Reference` number for the individual payslip, the
:guilabel:`Employee` name, :guilabel:`Batch Name`, the :guilabel:`From` and :guilabel:`To` date
range, the :guilabel:`Company`, the :guilabel:`Basic Wage`, :guilabel:`Net Wage`, and the
:guilabel:`Status` of the payslip.
Each payslip lists the :guilabel:`Reference` number for the individual payslip, the
:guilabel:`Employee` name, the :guilabel:`Batch Name`, the :guilabel:`Company`, the :guilabel:`Basic
Wage`, :guilabel:`Gross Wage`, :guilabel:`Net Wage`, and the :guilabel:`Status` of the payslip.
Clicking on an individual payslip entry will show the details for the individual payslip.
Click on an individual payslip entry to view the details for that individual payslip.
.. _payroll/new-payslip:
Create new payslip
------------------
Create a new payslip
--------------------
A new payslip can be created from the :guilabel:`Payslips To Pay` page (:menuselection:`Payroll app
--> Payslips --> To Pay`) or the :guilabel:`Employee Payslips` page (:menuselection:`Payroll app
--> Payslips --> All Payslips`), by clicking the :guilabel:`Create` button in the top-left corner.
A new payslip can be created from either the :ref:`Payslips To Pay <payroll/to-pay>` page or the
:ref:`Employee Payslips <payroll/all-payslips>` page.
Clicking :guilabel:`Create` reveals a blank payslip form, wherein the necessary payslip information
can be entered.
Create a new payslip by clicking the :guilabel:`New` button in the top-left corner.
Required fields
~~~~~~~~~~~~~~~
A blank payslip form is loaded, where the necessary payslip information can be entered.
On the blank payslip form, a number of fields are required to be filled in with the necessary
information. These required fields are represented by **bold** lines.
Payslip form
~~~~~~~~~~~~
On the blank payslip form, several fields are required. Most of the required fields auto-populate
after an employee is selected.
Fill out the following information on the payslip form:
- :guilabel:`Employee`: type in the name of an employee, or select the desired employee from the
drop-down list in this field. This field is **required**.
.. note::
It is recommended to **only** create payslips for employees that are already in the database.
If there is no current employee record (and therefore no employee contract) it is recommended
to create the new employee in the *Employees* application **before** creating payslips for that
employee. Refer to the :doc:`new employee <../employees/new_employee>` documentation for
instructions on how to add an employee.
- :guilabel:`Period`: the first day to the last day of the *current* month auto-populates the
:guilabel:`Period` fields by default. The dates can be changed, if desired.
To change the start date, click on the first date in the :guilabel:`Period` field to reveal a
pop-up calendar. On this calendar, use the :guilabel:`< (less-than)` and :guilabel:`>
(greater-than)` icons to select the desired month. Then, click on the desired day to select that
specific date.
Repeat this process to modify the end date for the payslip. These fields are **required**.
- :guilabel:`Contract`: using the drop-down menu, select the desired contract for the employee. Only
the available corresponding contracts for the selected employee appear as options. This field is
**required**.
- :guilabel:`Batch`: using the drop-down menu in this field, select the batch of payslips this new
payslip should be added to.
- :guilabel:`Structure`: using the drop-down menu, select the salary structure type. Only the
corresponding structures associated with the selected contract for the employee appear as options.
If no employee and/or no contract is selected yet, all available :guilabel:`Structures` appear in
the list. Once an employee and/or contract is selected, any unavailable :guilabel:`Structures` set
for that employee and/or contract do not appear. This field is **required**.
.. image:: payslips/new-payslip.png
:align: center
:alt: The necessary fields for a new payslip.
- :guilabel:`Employee`: Type in the name of an employee, or select the desired employee from the
drop-down list. Upon selecting an employee, several other fields on the payslip form may
auto-populate. Typically, after making a selection in the :guilabel:`Employee` field, Odoo
auto-populates the :guilabel:`Contract`, :guilabel:`Structure`, and :guilabel:`Payslip Name`
fields, but **only** if that information is already on that employee's form in the *Employees*
app.
- :guilabel:`Period`: Click the default date to reveal a pop-up calendar. On this calendar, use the
:guilabel:`< (less-than)` and :guilabel:`> (greater than)` icons to select the desired month, and
click on the desired day to select that specific date as the start date for the payslip. Repeat
this process to add an end date for the payslip in the field below.
- :guilabel:`Contract`: Using the drop-down menu, select the desired contract for the employee. Only
the available corresponding contracts for the selected employee appear as options.
- :guilabel:`Structure`: Using the drop-down menu, select the salary structure type. Only the
available corresponding structures for the selected contract for that specific employee appear as
options.
- :guilabel:`Payslip Name`: In the blank field, type in the name for the payslip. The name should be
short and descriptive, such as `April 2023`.
- :guilabel:`Company`: In the :guilabel:`Accounting Information` tab, select the company the payslip
applies to from the :guilabel:`Company` drop-down menu.
- :guilabel:`Salary Journal`: In the :guilabel:`Accounting Information` tab, enter the salary
journal in which the payment will be reflected, and found in the *Accounting* application.
.. image:: payslips/new-payslip-tab.png
:align: center
:alt: The necessary fields for a new payslip in the Accounting Information tab.
.. important::
It is recommended to check with the accounting department to ensure every entry that affects the
*Accounting* application is correct.
Optional fields
~~~~~~~~~~~~~~~
- :guilabel:`Reference`: Any note or reference message for the new entry can be entered here.
- :guilabel:`Company Car`: If applicable, select the company car from the drop-down.
- :guilabel:`Worked Days`: In the :guilabel:`Worked Days \& Inputs` tab, the entries under
:guilabel:`Worked Days` (including the :guilabel:`Type`, :guilabel:`Description`,
:guilabel:`Number of Days`, :guilabel:`Number of Hours`, and :guilabel:`Amount`) are automatically
filled in, based on what was entered for the :guilabel:`Period`, :guilabel:`Contract`, and
:guilabel:`Structure` fields of the payslip form.
- :guilabel:`Salary Computation`: The :guilabel:`Salary Computation` tab is automatically filled in
after the :guilabel:`Compute Sheet` button is clicked. Doing so displays all the wages,
deductions, taxes, etc. for the entry.
- :guilabel:`Batch Name`: Located in the :guilabel:`Accounting Information` tab, select the payslip
batch this new payslip should be added to from the drop-down menu.
- :guilabel:`Date Account`: Located in the :guilabel:`Accounting Information` tab, enter the date on
which the payslip should be posted, by clicking on the drop-down menu, and navigating to the
correct month and year using the :guilabel:`< > (less-than/greater-than)` icons in the calendar
pop-up window. Then, click on the desired date.
- :guilabel:`Salary Journal`: This field, located in the :guilabel:`Accounting Information` tab,
represents the journal that the payslip will be logged in, and is automatically selected when the
:guilabel:`Contract` and :guilabel:`Structure` are entered in the payslip form.
- :guilabel:`Accounting Entry`: This field, located in the :guilabel:`Accounting Information` tab,
is automatically filled in once the payslip is confirmed.
Save and process new payslip
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When all the necessary information on the payslip is entered, click :guilabel:`Save` to save the
data, or click :guilabel:`Discard` to delete the entry.
:alt: The top fields for a new payslip all filled out for a February payslip.
.. note::
Saving the entry is not required in order to compute the sheet, although it is considered best
practice to do so. The :guilabel:`Compute Sheet` button can be clicked without first saving the
payslip. Doing so will save the entry *and* compute the sheet.
Typically, after making a selection in the :guilabel:`Employee` field, Odoo auto-populates all
other required fields (besides the :guilabel:`Period` field), but **only** if that information is
already on that employee's form in the *Employees* app.
Click the :guilabel:`Compute Sheet` button to register all the
information, and have the :guilabel:`Salary Computation` tab populated. If any modifications need to
be made, click the :guilabel:`Edit` button, make the desired changes, then click the
:guilabel:`Recompute Worked Days` button to have the changes reflected in the :guilabel:`Worked
Days` and :guilabel:`Salary Computation` tabs.
.. important::
If modifications to auto-populated fields are made, it is recommended to check with the
accounting department to ensure every entry that affects the *Accounting* application is correct.
To print the payslip, click the :guilabel:`Print` button. To cancel the payslip, click the
:guilabel:`Cancel Payslip` button.
Worked days & inputs tab
************************
- :guilabel:`Worked Days`: the entries under :guilabel:`Worked Days` (including the
:guilabel:`Type`, :guilabel:`Description`, :guilabel:`Number of Days`, :guilabel:`Number of
Hours`, and :guilabel:`Amount`) are automatically filled in, based on what was entered for the
:guilabel:`Period`, :guilabel:`Contract`, and :guilabel:`Structure` fields of the payslip form.
- :guilabel:`Other Inputs`: additional inputs affecting the payslip can be entered in this section,
such as deductions, reimbursements, and expenses.
Click :guilabel:`Add a line` to create an entry in the :guilabel:`Other Inputs` section.
Using the drop-down menu in the :guilabel:`Type` column, select a :guilabel:`Type` for the input.
Next, enter a :guilabel:`Description`, if desired. Lastly, enter the amount in the
:guilabel:`Count` field.
.. image:: payslips/worked-days-tab.png
:align: center
:alt: The fields filled out in the worked days and inputs tab.
Salary computation tab
**********************
- :guilabel:`Salary Computation`: the :guilabel:`Salary Computation` tab is automatically filled in
after the :guilabel:`Compute Sheet` button is clicked. Doing so displays the wages, deductions,
taxes, etc. for the entry.
- :guilabel:`Has Negative Net To Report`: click the checkbox if the employee has a negative net
amount for this payslip. This **only** appears if the employee's payslip has a negative balance.
.. image:: payslips/salary-comp-tab.png
:align: center
:alt: The fields filled out in the salary computation tab.
Other info tab
**************
- :guilabel:`Payslip Name`: type in a name for the payslip in this field. The name should be short
and descriptive, such as `(Employee Name) April 2023`. This field is **required**.
- :guilabel:`Company`: select the company the payslip applies to using the drop-down menu in this
field. This field is **required**.
- :guilabel:`Close Date`: enter the date that the payment is made to the employee in this field.
Click in the field to reveal a calendar pop-up window. Using the :guilabel:`< >
(less-than/greater-than)` icons, navigate to the desired month and year.
Then, click on the desired date to select it.
- :guilabel:`Date Account`: enter the date on which the payslip should be posted in this field.
- :guilabel:`Salary Journal`: this field auto-populates after selecting an existing
:guilabel:`Employee`. This field **cannot** be edited, as it is linked to the *Accounting*
application. This field is **required**.
- :guilabel:`Accounting Entry`: if applicable, this field is automatically populated once the
payslip is confirmed. This field **cannot** be modified.
- :guilabel:`Add an Internal Note...`: any note or reference message for the new entry can be typed
in this field.
.. image:: payslips/other-info-tab.png
:align: center
:alt: The fields filled out in the other info tab.
Process the new payslip
~~~~~~~~~~~~~~~~~~~~~~~
When all the necessary information on the payslip is entered, click the :guilabel:`Compute Sheet`
button. Upon doing so, all the information on the payslip is saved, and the :guilabel:`Salary
Computation` tab auto-populates, based on the information on the employee's contract or attendance
records.
If any modifications need to be made, first click the :guilabel:`Cancel` button, then click the
:guilabel:`Set to Draft` button. Make any desired changes, then click the :guilabel:`Compute Sheet`
button once again, and the changes are reflected in the :guilabel:`Worked Days` and
:guilabel:`Salary Computation` tabs.
Once everything on the payslip form is correct, click the :guilabel:`Create Draft Entry` button to
create the payslip. The chatter is automatically updated to show the email sent to the employee,
along with a PDF copy of the payslip.
create the payslip.
Then, a confirmation pop-up window appears, asking :guilabel:`Are you sure you want to proceed?`.
Click :guilabel:`OK` to confirm.
The chatter is automatically updated to show the email sent to the employee, along with a PDF copy
of the payslip.
.. note::
The database may need to be refreshed for the payslip and email to appear.
To print the payslip, click the :guilabel:`Print` button. To cancel the payslip, click the
:guilabel:`Cancel` button.
.. image:: payslips/payslip-chatter.png
:align: center
:alt: The new payslip is emailed to the employee and the email appears in the chatter.
Next, the payment must be sent to the employee. To do this, click the :guilabel:`Make Payment`
Next, the payment must be sent to the employee. To do this, click the :guilabel:`Register Payment`
button. Doing so reveals a pop-up form, in which the desired :guilabel:`Bank Journal` that the
payment should be made against must be selected from a drop-down menu. Then, click the
:guilabel:`Confirm` button to confirm the journal, and return to the payslip.
.. image:: payslips/make-payment.png
:align: center
:alt: Click Make Payment to send the payment to the employee.
If a payment needs to be cancelled or refunded, click the corresponding :guilabel:`Refund` or
:guilabel:`Cancel Payslip` button, located at the top of the payslip form.
.. important::
In order for a payslip to be paid, the employee *must* have a bank account entered in their
contact information. If there is no bank information, a payslip cannot be paid, and an error will
appear when the :guilabel:`Make Payment` button is clicked. Banking information can be found in
the :guilabel:`Private Information` tab on the employee's card. Edit the employee card, and add
banking information, if it is missing.
contact information. If there is no bank information, a payslip cannot be paid, and an error
appears when the :guilabel:`Make Payment` button is clicked. Banking information can be found in
the :ref:`Private Information <employees/private-info>` tab on the employee's card in the
*Employees* app. Edit the employee card, and add banking information, if it is missing.
.. image:: payslips/banking.png
:align: center
:alt: Banking information can be entered in an employee's card.
Odoo automatically checks bank account information. If there is an error with the employee's listed
bank account, an error appears in a pop-up window, stating, *The employee bank account is
untrusted.* If this error appears, update the employee's bank account information on their
:ref:`Employee Form <employees/private-info>`.
If a payment needs to be canceled or refunded, click the corresponding :guilabel:`Cancel` or
:guilabel:`Refund` button, located at the top-left of the screen.
.. tip::
Before processing payslips, it is best practice to check the *Warnings* section of the *Payroll*
app dashboard. Here, all possible issues concerning payroll appear.
To view the warnings, navigate to :menuselection:`Payroll app --> Dashboard`. The warnings appear
in the top-left corner of the dashboard.
.. image:: payslips/warnings.png
:align: center
:alt: The dashboard view of the Payroll app, with the warnings box highlighted.
Warnings are grouped by type, such as `Employees Without Running Contracts` or `Employees Without
Bank account Number`. Click on a warning to view all entries associated with that specific issue.
If the warnings are not resolved, at any point in the payslip processing process, an error may
occur. Errors appear in a pop-up window, and provide details for the error, and how to resolve
them.
Payslips **cannot** be completed if there are any warnings or issues associated with the payslip.
.. _payroll/all-payslips:
All payslips
============
To view all payslips regardless of status, go to :menuselection:`Payroll app --> Payslips --> All
Payslips`. Here, all payslips are organized by batch (in a default list view).
To view all payslips, regardless of status, go to :menuselection:`Payroll app --> Payslips --> All
Payslips`. The :guilabel:`Employee Payslips` page loads, displaying all payslips, organized by
batch, in a default nested list view.
Click on the :guilabel:`▶ (arrow)` next to the individual batch name to view all the payslips in
that particular batch, along with all the payslip details. The number of payslips in the batch is
written in parenthesis after the batch name. The :guilabel:`Status` for each individual payslip
appears on the far-right side, indicating if it is in :guilabel:`Draft Mode`, :guilabel:`Waiting`,
or if it is :guilabel:`Done`.
Click on the :guilabel:`▶ (right arrow)` next to an individual batch name to view all the payslips
in that particular batch, along with all the payslip details.
.. note::
- :guilabel:`Draft` indicates the payslip is created, and there is still time to make edits,
since the amounts are not calculated.
- `Waiting` indicates the payslip has been calculated and the salary details can be found in the
*Salary Computation* tab.
- `Done` indicates the payslip is calculated and ready to be paid.
The number of payslips in the batch is written in parenthesis after the batch name. The
:guilabel:`Status` for each individual payslip appears on the far-right side, indicating one of the
following status options:
- :guilabel:`Draft`: the payslip is created, and there is still time to make edits, since the
amounts are not calculated.
- :guilabel:`Waiting`: the payslip has been calculated, and the salary details can be found in the
*Salary Computation* tab.
- :guilabel:`Done`: the payslip is calculated and ready to be paid.
- :guilabel:`Paid`: the employee has been paid.
.. image:: payslips/all-payslips.png
:align: center
@@ -190,27 +266,35 @@ Click on an individual payslip to view the details for that payslip on a separat
breadcrumb menu, click :guilabel:`Employee Payslips` to go back to the list view of all payslips.
A new payslip can be created from the :guilabel:`Employee Payslips` page, by clicking the
:guilabel:`Create` button in the upper-left corner. Doing so reveals a separate blank payslip form
:guilabel:`New` button in the upper-left corner. Doing so reveals a separate blank payslip form
page. On that blank payslip form page, enter all the necessary information, as described in the
:ref:`Create a new payslip <payroll/new-payslip>` section.
:ref:`Create new payslips <payroll/new-payslip>` section.
To print PDF versions of payslips from the :guilabel:`Payslips to Pay` or :guilabel:`Employee
Payslips` pages, first select the desired payslips by clicking on the individual checkbox next to
each payslip to be printed. Or, click the box next to :guilabel:`Reference`, which selects all
visible payslips on the page. Then, click the :guilabel:`Print` button to print the payslips.
To print PDF versions of payslips from the *Payslips to Pay* or :guilabel:`Employee Payslips` pages,
first select the desired payslips by clicking on the individual checkbox to the left of each payslip
to be printed. Or, click the box to the left of the :guilabel:`Reference` column title, which
selects all visible payslips on the page. Then, click the :guilabel:`Print` button to print the
payslips.
.. image:: payslips/print.png
:align: center
:alt: Click on the Print smart button to print payslips to a PDF.
Payslips can also be exported to an Excel spreadsheet. When exporting, all payslips are exported
regardless of whether some are selected or not. Click on the :guilabel:`Export All` button (download
icon) to export all payslips to an Excel spreadsheet.
Payslips can also be exported to an Excel spreadsheet. To export **all** payslips, click on the
:guilabel:`⚙️ (gear)` icon at the end of the words :guilabel:`Employee Payslips` in the top-left
corner. This reveals a drop-down menu. Click :guilabel:`Export All` to export all payslips to a
spreadsheet.
.. image:: payslips/export.png
:align: center
:alt: Click on the Export All smart button to export all payslips to an Excel payslip.
To export only select payslips, first select the payslips to be exported from the list. Then, click
the checkbox to the left of each individual payslip to select it. As payslips are selected, a smart
button appears in the top-center of the page, indicating the number of selected payslips. Then,
click the :guilabel:`⚙️ (gear) Actions` icon in the top-center of the page, and click
:guilabel:`Export`.
.. image:: payslips/export-select.png
:align: center
:alt: The individual list of employee ayslips with three selected to be exported.
.. note::
Both *To Pay* and *All Payslips* display all the detailed information for each payslip.
@@ -221,147 +305,145 @@ To view payslips in batches, navigate to :menuselection:`Payroll app --> Payslip
display all the payslip batches that have been created. These payslip batches are displayed in a
list view, by default.
Each batch displays the :guilabel:`Name`, :guilabel:`Date From` and :guilabel:`Date To` dates,
whether it was a :guilabel:`Credit note`, its :guilabel:`Status`, and the :guilabel:`Company`.
Each batch displays the :guilabel:`Name`, :guilabel:`Date From` and :guilabel:`Date To` dates, its
:guilabel:`Status`, the number of payslips in the batch (:guilabel:`Payslips Count`), and the
:guilabel:`Company`.
.. image:: payslips/batches.png
:align: center
:alt: View displaying all batches created.
Click on an individual batch to view the details for that batch on a separate page. On this batch
detail page, modifications can be made. To make any modifications to a batch, click the
:guilabel:`Edit` button. Then, proceed to make any necessary changes.
When all desired changes have been made, click either :guilabel:`Save` to save the changes, or
:guilabel:`Discard` to revert back to the original data.
After modifications have been saved, click the :guilabel:`Generate Payslips` button to reveal a
:guilabel:`Generate Payslips` pop-up form, in which payslips affected by the changes can be created
or modified.
All payslips associated with the batch are displayed in the employees section of the
:guilabel:`Generate Payslips` pop-up. To filter the results by either the :guilabel:`Salary
Structure` and/or the :guilabel:`Department`, select a salary structure and/or department from the
respective drop-down menus.
Only employees that match the selected :guilabel:`Salary Structure` and/or :guilabel:`Department`
appear in the employees list. Click the :guilabel:`Generate` button at the bottom of the
:guilabel:`Generate Payslips` pop-up window to generate the modified payslips, and close the pop-up
window.
.. image:: payslips/generate-payslips-batch.png
:align: center
:alt: Generate payslips from the edited batch.
Back on the batch details page, click the :guilabel:`Create Draft Entry` smart button to create a
draft of the payslips.
.. image:: payslips/draft-from-batch.png
:align: center
:alt: Generate payslips from the edited batch.
Once the draft payslips are created, the button changes to say :guilabel:`Make Payment`. Click the
:guilabel:`Make Payment` button. A pop-up window appears, in which the bank journal information must
be entered. Select the :guilabel:`Bank Journal` from the drop-down list, and click
:guilabel:`Confirm` to process the payslips, and pay the employees.
On the batch detail page, the number of payslips in the batch is accessible via the
:guilabel:`Payslips` smart button, located in the top-right corner. Individual payslips for the
batch can be viewed by clicking the :guilabel:`Payslips` smart button in the top-right corner.
Use the breadcrumb menu to navigate back to the individual batch detail page, or back to the list of
all batches.
.. image:: payslips/payslip-batches.png
:align: center
:alt: Click the Payslips smart button to view the individual payslips in the batch.
Create a new batch
------------------
To create a new batch of payslips from the :guilabel:`Payslips Batches` page
(:menuselection:`Payroll app --> Payslips --> Batches`), click the :guilabel:`Create` button in the
upper-left corner. Doing so reveals a blank payslip batch form on a separate page.
(:menuselection:`Payroll app --> Payslips --> Batches`), click the :guilabel:`New` button in the
top-left corner. Doing so reveals a blank payslip batch form on a separate page.
On the new payslip batch form, enter the :guilabel:`Name` for the batch, and select the date range
to which the batch applies, by clicking the :guilabel:`▼ (drop-down arrow)` icon in the
:guilabel:`Period` fields, which reveals a calendar pop-up window. From this calendar pop-up window,
navigate to the correct month, and click on the corresponding day for both the start and end dates.
On the new payslip batch form, enter the :guilabel:`Batch Name`.
Next, select the date range to which the batch applies. Click into one of the :guilabel:`Period`
fields, and a calendar pop-up window appears. From this calendar pop-up window, navigate to the
correct month, and click on the corresponding day for both the start and end dates of the batch.
The current company populates the :guilabel:`Company` field. If operating in a multi-company
environment, it is **not** possible to modify the :guilabel:`Company` from the form. The batch
**must** be created while in the database for the desired company.
.. image:: payslips/new-batch-details.png
:align: center
:alt: Enter the details for the new batch.
If the batch is a credit note, check the box next to :guilabel:`Credit Note`. Then, in the
:guilabel:`Generation Date` field, select the date the payslips should be generated from a calendar
pop-up window. This generated date is reflected in the accounting journal entries.
.. _payroll/batch-process:
Lastly, in the :guilabel:`Company` field, select the company these payslips are written against.
Process a batch
---------------
When all the information on the payslip batch form is correct, click the :guilabel:`Save` button to
save the information. To delete the entry, click the :guilabel:`Discard` button.
Click on an individual batch to view the details for that batch on a separate page. On this batch
detail page, different options (buttons) appear at the top, depending on the status of the batch:
To create the payslips for the newly-created batch, click the :guilabel:`Generate Payslips` button
at the top of the form.
- :guilabel:`New` status: batches without any payslips added to them have a status of
:guilabel:`New`. The following button options appear for these batches:
When clicked, a pop-up window appears showing all the payslips that will be created. To remove any
individual payslips, click the black :guilabel:`✖ (x mark)` icon at the far right of the payslip
line.
.. image:: payslips/batch-new.png
:align: center
:alt: A batch with a status of new, with the available buttons highlighted.
If a specific :guilabel:`Salary Structure` or :guilabel:`Department` needs to be specified for the
batch, select them from the corresponding drop-down menus.
- :guilabel:`Add Payslips`: click the :guilabel:`Add Payslips` button to add payslips to the
batch, and an :guilabel:`Add Payslips` pop-up window appears. Only payslips that can be added
to the batch (payslips not currently part of a batch) appear on the list.
Click the :guilabel:`Generate` button at the bottom of the pop-up window to create the payslips for
the batch.
Select the desired payslips by clicking the checkbox to the left of each payslip name, then
click the :guilabel:`Select` button to add them to the batch. Once payslips are selected and
added to the batch, the status changes to :guilabel:`Confirmed`.
.. image:: payslips/generate-payslips.png
:align: center
:alt: Generate payslips for the new batch.
- :guilabel:`Generate Payslips`: after payslips have been added to the batch, click the
:guilabel:`Generate Payslips` button to process the payslips and create individual payslips in
the database.
.. note::
On the :guilabel:`Generate Payslips` pop-up window, selecting a :guilabel:`Department` and/or
:guilabel:`Salary Structure` only displays payslips that apply to those specifically-selected
parameters.
A :guilabel:`Generate Payslips` pop-up window appears. If only a specific :guilabel:`Salary
Structure` and/or specific :guilabel:`Department` is desired to make payslips for, select them
from the corresponding drop-down menus. If no selections are made, then all payslips listed in
the pop-up window are processed as usual.
If there are any errors or issues preventing the payslips from being generated, an error message
appears in the top-right section. This error box disappears on its own after several seconds, or the
:guilabel:`✖ (x mark)` icon can be clicked to close the alert.
Click the :guilabel:`Generate` button to create the payslips. The :guilabel:`Generate Payslips`
button changes to a :guilabel:`Create Draft Entry` button, and the status changes to
:guilabel:`Confirmed`.
To remedy the issue, make any necessary modifications (e.g. removing any payslip lines that cannot
be processed), then click the :guilabel:`Generate` button again.
- :guilabel:`Confirmed` status: batches that have been created and have payslips in them, but the
payslips have *not* been processed, have a status of :guilabel:`Confirmed`. The following two
button options appear for these batches:
Once the payslips have been successfully generated, the screen returns to the payslip batch form.
.. image:: payslips/batch-confirmed.png
:align: center
:alt: A batch with a status of confirmed, with the available buttons highlighted.
From here, click the :guilabel:`Generate Draft Entry` button to change the payslips' status from
:guilabel:`Draft` to :guilabel:`Done`.
- :guilabel:`Create Draft Entry`: click the :guilabel:`Create Draft Entry` button to confirm the
individual payslips (and the batch), and create a draft of the payslips. The batch now has a
status of :guilabel:`Done`.
- :guilabel:`Set to Draft`: if at any point the batch needs to be reverted back to a status of
:guilabel:`New`, click the :guilabel:`Set to Draft` button. This action does **not** remove any
payslips that have already been added to the batch.
Once payslips have been generated, click the :guilabel:`Make Payment` button to process the
payments. Doing so reveals a pop-up window, in which the proper banking information must be entered.
In this pop-up window, select the appropriate :guilabel:`Bank Journal` from the drop-down menu, and
enter the appropriate file name.
- :guilabel:`Done` status: batches with confirmed payslips in them have a status of
:guilabel:`Done`. The following button options appear for these batches:
When done, click the :guilabel:`Confirm` button to confirm the information, or click
:guilabel:`Cancel` to discard.
.. image:: payslips/batch-done.png
:align: center
:alt: A batch with a status of done, with the available buttons highlighted.
Generate commission payslips
----------------------------
- :guilabel:`Create Payment Report`: click the :guilabel:`Create Payment Report` button, and a
:guilabel:`Select a bank journal` pop-up window appears. Select the correct bank journal from
the drop-down menu.
Commission payslips can be generated directly from the :guilabel:`Payslips Batches` page
(:menuselection:`Payroll app --> Payslips --> Batches`). To generate commission payslips from this
page, click on the desired batch (or batches) to create commissions payslips for, then click the
:guilabel:`Generate Commission Payslips` button.
The batch name appears in the :guilabel:`File name` field, but this can be modified, if desired.
Finally, click :guilabel:`Confirm` to process the payslips, and pay the employees.
- :guilabel:`Mark as paid`: after the payments have been created via the :guilabel:`Create Payment
Report` button, the payslips need to be marked as paid in the database.
Doing so reveals a :guilabel:`Generate Commission Payslip` pop-up window, in which the necessary
Click the :guilabel:`Mark as paid` button, and the status of the batch changes to
:guilabel:`Paid`.
- :guilabel:`Set to Draft`: if at any point the batch needs to be reverted back to a status of
:guilabel:`New`, click the :guilabel:`Set to Draft` button. This action does **not** remove any
payslips that have already been added to the batch.
- :guilabel:`Paid` status: batches that have been completed have a status of :guilabel:`Paid`. No
other button options appear for this status.
.. image:: payslips/batch-paid-2.png
:align: center
:alt: A batch with a status of paid, with the available buttons highlighted.
On the batch detail page, the individual payslips in the batch are accessible, via the
:guilabel:`Payslips` smart button, located above the batch information, in the center. Click the
:guilabel:`Payslips` smart button to view a list of all the individual payslips.
Use the breadcrumb menu to navigate back to the individual batch detail page, or back to the list of
all batches.
Generate warrant payslips
-------------------------
Commissions are paid to employees in Odoo using *warrant payslips*.
Warrant payslips can be generated directly from the :guilabel:`Payslips Batches` page
(:menuselection:`Payroll app --> Payslips --> Batches`).
First, select the desired batches by clicking the box to the left of each batch for which commission
payslips should be created. Next, click the :guilabel:`Generate Warrant Payslips` button at the top
of the page.
Doing so reveals a :guilabel:`Generate Warrant Payslips` pop-up window, in which the necessary
information **must** be filled out.
.. image:: payslips/commission-details.png
:align: center
:alt: Enter the commission details.
On this pop-up window, click on the drop-down menus, located beside the :guilabel:`Period` field, to
In this pop-up window, click on the drop-down menus, located beside the :guilabel:`Period` field, to
reveal calendar pop-up windows. On these calendar pop-up windows, select the desired period for
which the payslips are being generated. Using the :guilabel:`< (left)` and :guilabel:`> (right)`
arrows, navigate to the correct month, and click on the date to select it.
arrow icons, navigate to the correct month, and click on the date to select it.
In the :guilabel:`Department` field, select the desired department from the drop-down menu.
@@ -369,18 +451,17 @@ When a department is selected, the employees listed for that department appear i
:guilabel:`Employee` section.
Under the :guilabel:`Employee` section, enter the :guilabel:`Commission Amount` for each employee in
the appropriate column. To remove an employee, click the :guilabel:`🗑️ (trash)` icon to remove the
the far-right column. To remove an employee, click the :guilabel:`🗑️ (trash)` icon to remove the
line.
Add a new entry by clicking :guilabel:`Add a Line`, and entering the :guilabel:`Employee` and the
appropriate :guilabel:`Commission Amount`.
Click the :guilabel:`Upload Your File` button to add a file, if necessary. Any file type is
Click the :guilabel:`Upload your file` button to add a file, if necessary. Any file type is
accepted.
Using the drop-down menu beside the :guilabel:`Commission Type` field, select either
:guilabel:`Classic Commission` or :guilabel:`Warrant`. :guilabel:`Classic` is the most typical of
commission, while :guilabel:`Warrant` is primarily used for Belgium companies.
Once all the commissions are properly entered, click the :guilabel:`Generate Payslips` button to
create the commission payslips.
create the warrant payslips in a batch.
:ref:`Process the batch <payroll/batch-process>` in the same way as a typical batch to complete the
payment process.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 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: 13 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -2,218 +2,314 @@
Reporting
=========
The :guilabel:`Reporting` section of the *Payroll* app offers a variety of reports to choose from.
The :guilabel:`Payroll`, :guilabel:`Meal Vouchers`, :guilabel:`Attachment of Salary`, and
:guilabel:`DMFA` reports are universal and available for all companies regardless of location. The
:guilabel:`Paid Time Off Allocation`, :guilabel:`273S Sheet`, and :guilabel:`274.XX Sheets` reports
are specific to Belgian companies only.
The *Reporting* section of the *Payroll* app offers a variety of reports to choose from, organized
by location.
To view a report, go to :menuselection:`Payroll --> Reporting` and click on the specific report.
The *Payroll* report, *Work Entry Analysis* report, and *Salary Attachment Report* are default
reports in the *Payroll* app, and are available for all companies, regardless of location.
Beneath the three default reports are all localization-based reports, organized by country, in
alphabetical order. These reports contain all the various information for the offered benefits and
local tax laws.
To view all the available reports for the database, including all the localization-specific ones,
navigate to :menuselection:`Payroll app --> Reporting` to view the available reports in a drop-down
menu. Click on a specific report to view it.
.. image:: reporting/reports.png
:align: center
:alt: Report dashboard view.
:alt: Report dashboard view showing extra reports for Belgium databases.
If a report is unavailable to a company, a user error pops up, stating `You must be logged in to a
Belgian company to use this feature.`
If a report is unavailable to a user, an :guilabel:`Invalid Operation` pop-up window appears,
stating: :guilabel:`You must be logged in to a (country) company to use this feature`, where
"(country)" is the specific country the company is configured for.
At the top of each report, click on :guilabel:`Filters` to display the optional filters for the
specific report. Filters show information that matches the specific filter parameters. For example,
when selecting the :guilabel:`Last 365 Day Payslip` filter, only payslips for the last 365 days
appear. All reports have the option to add a custom filter, and each have different default custom
filter options. Select the parameters, then click the :guilabel:`Apply` button.
.. image:: reporting/custom-filter.png
:align: center
:alt: Report dashboard view.
Clicking on :guilabel:`Favorites` displays three options: :guilabel:`Save the current search`,
:guilabel:`Add the search to the dashboard`, or :guilabel:`Insert the search to a Google
spreadsheet`.
.. image:: reporting/favorites.png
:align: center
:alt: Favorite options for reports.
Default reports
===============
Payroll
-------
Click on :menuselection:`Payroll --> Reporting --> Payroll` to display the :guilabel:`Payroll
Analysis` report.
Click on :menuselection:`Payroll app --> Reporting --> Payroll` to display the :guilabel:`Payroll
Analysis` report. This report shows all the payslips generated in the last 365 days, due to the
default :ref:`filter <payroll/filters>`: `Last 365 Days Payslip`.
.. image:: reporting/payroll-report.png
:align: center
:alt: Report dashboard view.
:alt: Payroll overview report showing payroll for the last 365 days.
This shows all the payslips generated in the last 365 days. The report can display metrics for a
variety of parameters. Click the :guilabel:`Measures` box to view a drop-down menu with the various
options to display. The options available include: :guilabel:`# Payslip`, :guilabel:`Basic Wage`,
:guilabel:`Basic Wage for Time Off`, :guilabel:`Days of Paid Time Off`, :guilabel:`Days of
Unforeseen Absence`, :guilabel:`Days of Unpaid Time Off`, :guilabel:`Gross Wage`, :guilabel:`Net
Wage`, :guilabel:`Number of Days`, :guilabel:`Number of Hours`, :guilabel:`Work Days`,
:guilabel:`Work Hours`, and :guilabel:`Count`.
The report can display metrics for a variety of parameters. Click the :guilabel:`Measures` box to
view a drop-down menu with the various metric options to display. The default options available
include:
- :guilabel:`# Payslip`
- :guilabel:`Basic Wage`
- :guilabel:`Basic Wage for Time Off`
- :guilabel:`Days of Paid Time Off`
- :guilabel:`Days of Unforeseen Absence`
- :guilabel:`Days of Unpaid Time Off`
- :guilabel:`Gross Wage`
- :guilabel:`Net Wage`
- :guilabel:`Number of Days`
- :guilabel:`Number of Hours`
- :guilabel:`Work Days`
- :guilabel:`Work Hours`
- :guilabel:`Count`
:guilabel:`Net Wage` is the default metric for the :guilabel:`Payroll` report.
.. image:: reporting/measures.png
:align: center
:alt: Report dashboard view.
:alt: The various measures available to display for the Payroll Analysis report.
Line chart
~~~~~~~~~~
A line chart is the default view for the *Payroll Analysis* report. If a different view was
selected, click on the :guilabel:`Line Chart` icon (middle icon) in the menu bar to change the view
back to a line chart. An option to display the line chart in ascending or descending order appears
at the end of the options.
A line chart is the default view for the *Payroll* report. If a different view is selected, click
the :guilabel:`Line Chart` button (represented by a :guilabel:`📈 (chart increasing)` icon) in the
menu bar to change the view back to a line chart.
Several options are available for the line chart. Click the corresponding button to activate the
selection, and change the way the data is presented. These icons appear at the end of the chart
options. The various options are:
.. _payroll/stacked:
- :guilabel:`Stacked`: data is presented with each metric in its own line, "stacked" on top of each
other. This helps visualize the distribution and variances between different categories.
.. _payroll/cumulative:
- :guilabel:`Cumulative`: data is presented with each metric on an individual line, with the total
amount calculated by combining all the lines. This provides a comprehensive view of the cumulative
data.
.. _payroll/descending:
- :guilabel:`Descending`: data is shown with the largest values on the left side of the chart,
gradually decreasing towards the smallest values on the right side, along the x-axis. This
arrangement helps emphasize trends or outliers at the extremes.
.. _payroll/ascending:
- :guilabel:`Ascending`: data is presented with the smallest values on the left side of the chart,
increasing towards the largest values on the right side, along the x-axis. This arrangement can be
useful for highlighting progressive growth or trends.
.. note::
These options can be combined to create a variety of views.
.. image:: reporting/line-chart.png
:align: center
:alt: Report dashboard view.
:alt: Menu buttons with the line chart called out, along with the other option buttons.
Bar chart
~~~~~~~~~
To display the data in a bar chart, click on the :guilabel:`Bar Chart` icon (first icon) in the menu
bar.
To display the data in a bar chart, click on the :guilabel:`Bar Chart` button (represented by a
:guilabel:`📊 (bar chart)` icon) in the menu bar.
Click the :ref:`Stacked <payroll/stacked>` icon to view the bar chart in a stacked format (where
multiple values appear in each column). :ref:`Cumulative <payroll/cumulative>` bar charts are useful
for visualizing the progression over time or other categories.
An option to display the columns in :ref:`Descending <payroll/descending>` or :ref:`Ascending
<payroll/ascending>` order appears at the end of the options.
.. image:: reporting/bar-chart.png
:align: center
:alt: Report dashboard view.
Click the :guilabel:`Stacked` icon to view the bar chart in a stacked format (where multiple values
appear in each column). An option to display the columns in ascending or descending order appears at
the end of the options.
:alt: Menu buttons with the bar chart called out, along with the other option buttons.
.. tip::
Clicking an option enables it. To disable the option, click it again. When the option is enabled
it appears grey. When it is inactive, it appears white.
Clicking an option enables it. To turn off the option, click it again. When the option is enabled
the icon appears lighter, with a turquoise outline. When it is inactive, it appears gray, with no
outline.
Pie chart
~~~~~~~~~
To display the data in a pie chart, click on the :guilabel:`Pie Chart` icon (last icon) in the menu
bar. There are no additional options available in this view.
To display the data in a pie chart, click on the :guilabel:`Pie Chart` button (represented by a
:guilabel:`(pie chart)` icon) in the menu bar. There are no additional options available in this
view.
.. image:: reporting/pie-chart.png
:align: center
:alt: Report dashboard view.
:alt: Menu buttons with the pie chart called out.
Pivot table
~~~~~~~~~~~
The bottom half of the :guilabel:`Payroll Analysis` dashboard presents a pivot table no matter which
type of chart is selected for the top of the dashboard. The default information displayed is the
number of payslips, net wage, gross wage, days of paid time off, and days of unpaid time off. The
information is divided by department. To display more information on the report, select the
:guilabel:`Measures` drop-down menu, then click on any other items to display.
To display the data in a pivot table, click on the :guilabel:`Pivot` button (represented by a
:guilabel:`(pivot)` icon) located in the far-right side of the top menu bar.
.. image:: reporting/measures-bottom.png
The default information displayed includes the number of payslips (:guilabel:`# Payslip`), the
:guilabel:`Net Wage`, the :guilabel:`Gross Wage`, the number of :guilabel:`Days of Paid Time Off`,
and the number of :guilabel:`Days of Unpaid Time Off`. The information is organized by department.
To display more information on the report, click the :guilabel:`Measures` button to reveal a
drop-down menu. Then, click on any other metric to display it on the pivot table.
.. image:: reporting/pivot.png
:align: center
:alt: Report dashboard view.
:alt: Pivot table view with the various metrics called out.
To sort the entries by a specific column, such as :guilabel:`Net Wage`, click on the column name
twice. The first click selects the column, and the second click sorts the information in descending
order.
.. image:: reporting/net-wage.png
To export the data in an XLSX format, click the :guilabel:`Download xlsx` button, represented by a
:guilabel:`⬇️ (down arrow above a horizontal bar)` icon, located at the far-right of the available
icons. The information is then downloaded into a spreadsheet.
.. image:: reporting/xlsx.png
:align: center
:alt: To sort information by descending order, click the column head twice.
:alt: The menu options with the download button highlighted.
To export the data in an XLSX format, click the :guilabel:`Download xlsx` icon. The information will
be downloaded into an Excel spreadsheet.
.. image:: reporting/export.png
:align: center
:alt: Download an Excel spreadsheet of the data by clicking the download button.
The data can be inserted into a spreadsheet by clicking the :guilabel:`Insert in Spreadsheet`
button. A pop-up appears asking which spreadsheet to place the information in. Select an existing
spreadsheet or enter the name for a new spreadsheet. Click the :guilabel:`Confirm` button to move to
a spreadsheet view with all the information populated.
Any report can be inserted into a spreadsheet by clicking the :guilabel:`Insert in Spreadsheet`
button. A :guilabel:`Select a spreadsheet to insert your (type of report)` pop-up window appears,
asking which spreadsheet to place the information in. Select an existing spreadsheet or dashboard,
or select a new :guilabel:`Blank spreadsheet`. Click the :guilabel:`Confirm` button to move to a
spreadsheet view with the report added to it.
.. image:: reporting/spreadsheet.png
:align: center
:alt: Send the data to a spreadsheet.
:alt: The view of data sent to a spreadsheet.
Once in the spreadsheet view, click on :guilabel:`File`, then select :guilabel:`Save` to save the
data, or :guilabel:`Save as Template` to save the setting as a template to use in the future.
.. _payroll/doc-storage:
.. note::
The *Documents* application must be installed in order to use the :guilabel:`Insert in
Spreadsheet` option.
If the *Documents* app is **not** installed, the :guilabel:`Insert in Spreadsheet` option places
the newly-created spreadsheet in the *Dashboards* app.
If the *Documents* application **is** installed, the spreadsheet has the option to be stored in
either the *Dashboards* app or *Documents* app.
Meal Vouchers
-------------
Work entry analysis
-------------------
:guilabel:`Meal Vouchers` provides an overview of the meal vouchers used by employees, and can be
shown by :guilabel:`Day`, :guilabel:`Week`, :guilabel:`Month`, :guilabel:`Quarter`, or
:guilabel:`Year`. The default view is by month.
The default :guilabel:`Work entry analysis` report provides an overview of the validated work
entries for the current month. To view this report, navigate to :menuselection:`Payroll app -->
Reporting --> Work Entry Analysis`.
.. image:: reporting/meal-vouchers.png
The work entries appear in a pivot table, with the default filters of `Current month: (Month)(Year)`
and `Validated`. The various types of :doc:`work_entries` are listed on the left-hand side (x-axis),
while the :guilabel:`Total` values appear along the top (the y-axis).
To change the displayed view, click the :guilabel:` (plus)` icon next to the word
:guilabel:`Total`, then click on one of the grouping options. The available options are
:guilabel:`Work Entry Type`, :guilabel:`Employee`, and :guilabel:`Department`. If in a multi-company
database, a :guilabel:`Company` option also appears.
To add a new group to sort the data, click :guilabel:`Add Custom Group`, then click one of the
presented options.
.. tip::
Wherever a :guilabel:` (plus)` icon appears on a pivot table, the information can be further
grouped. Click on a :guilabel:` (plus)` icon to reveal the available grouping options.
Click on a :guilabel:` (minus)` icon anywhere on the pivot table to remove that respective
grouping.
It is possible to compare the current :guilabel:`Work entry analysis` report to the previous month
or the previous year. To view these comparisons, click the :guilabel:`⬇️ (down arrow)` icon in the
search bar to reveal the various :ref:`filter <payroll/filters>` and grouping options.
In the section titled :guilabel:`Comparison`, click on either :guilabel:`Current Month: Previous
Period` or :guilabel:`Current Month: Previous Year`. The report updates and displays the previous
time period values, as well as the :guilabel:`Variation` between the two.
.. image:: reporting/work-entry-comparison.png
:align: center
:alt: Meal voucher
:alt: A pivot table comparing the work entries of the current month and the previous month.
To change the displayed view, click on :guilabel:`Total`. The data collapses, showing only the count
column. Click on :guilabel:`Total` again, then hover over :guilabel:`Day`, then click on one of the
other time-period options available.
To export the data in an XLSX format, click the :guilabel:`Download xlsx` button, represented by a
:guilabel:`⬇️ (down arrow above a horizontal bar)` icon, located at the far-right of the available
icons. The information is then downloaded into a spreadsheet.
.. image:: reporting/voucher-day.png
:align: center
:alt: Meal voucher
It is possible to compare the current meal voucher report to the one for the previous time period or
the previous year. To view these comparisons, click on the :guilabel:`Comparison` drop-down menu at
the top, then select either :guilabel:`Date: Previous Period` or :guilabel:`Date: Previous Year`.
.. image:: reporting/meal-comparison.png
:align: center
:alt: Meal voucher
To export the data in an XLSX format, click the :guilabel:`Download xlsx` icon. The information will
be downloaded into an Excel spreadsheet.
.. image:: reporting/voucher-download.png
:align: center
:alt: Download an Excel spreadsheet of the data by clicking the download button.
The data can be inserted into a spreadsheet by clicking the :guilabel:`Insert in Spreadsheet`
button. A pop-up appears asking which spreadsheet to place the information in. Select an existing
spreadsheet or enter the name for a new spreadsheet. Click the :guilabel:`Confirm` button to move to
a spreadsheet view with all the information populated.
Once in the spreadsheet view, click on :guilabel:`File`, then select :guilabel:`Save` to save the
data, or :guilabel:`Save as Template` to save the settings as a template to use in the future.
The data can also be inserted into a spreadsheet. Click the :guilabel:`Insert in Spreadsheet` button
and a :guilabel:`Select a spreadsheet to insert your (type of report)` pop-up window appears, asking
which spreadsheet to place the information in. Select an existing spreadsheet or dashboard, or
select a new :guilabel:`Blank spreadsheet`. Click the :guilabel:`Confirm` button to move to a
spreadsheet view with the report added to it.
.. note::
The *Documents* application must be installed in order to use the :guilabel:`Insert in
Spreadsheet` option.
The work entry analysis spreadsheet is :ref:`stored in the same locations <payroll/doc-storage>`
as a pivot table.
Attachment of Salary
--------------------
Salary attachment report
------------------------
The :guilabel:`Attachment of Salary` report shows all deductions or allocations per employee, such
as child support payments and wage garnishments.
The :guilabel:`Salary Attachment Report` shows all deductions or allocations per employee, such as
child support payments and wage garnishments. To view this report, navigate to
:menuselection:`Payroll app --> Reporting --> Salary Attachment Report`.
.. image:: reporting/attachment-of-salary.png
:align: center
:alt: View the Attachment of Salary report that shows all salary garnishments.
The employees are listed in the left-side column, while the different deductions are listed in the
top row, organized by month.
top row, organized by deduction and monthly individual payslips.
The report can be exported as a XLSX file, or inserted into a spreadsheet, using the corresponding
The report can be exported as an XLSX file, or inserted into a spreadsheet, using the corresponding
buttons at the top.
Clicking on the :guilabel:`Measures` button shows options for how the data is displayed.
Click the :guilabel:`Measures` button to reveal the options of what data can be displayed.
:guilabel:`Assignment of salary`, :guilabel:`Attachment of salary`, :guilabel:`Child support`, and
:guilabel:`Count`, can all be selected or deselected by clicking on the item. If an item has a check
mark, it is displayed.
:guilabel:`Count` can all be selected or deselected by clicking on the item. If an item has a
checkmark next to it, that information is displayed.
.. image:: reporting/attachment-measures.png
:align: center
:alt: Select the options that be displayed in the report.
:alt: Select the options to be displayed in the Salary Attachment Report.
The salary attachment report can be compared to the one for the previous time period or the previous
year. To view these comparisons, click on the on the :guilabel:`Comparison` drop-down menu at the
top, then select either :guilabel:`Payslip End Date: Previous Period` or :guilabel:`Payslip End
Date: Previous Year`.
The :guilabel:`Salary Attachment Report` can be compared to the report for the previous time period
or the previous year. To view these comparisons, click the :guilabel:`⬇️ (down arrow)` icon in the
search bar to reveal the various :ref:`filter <payroll/filters>` and grouping options.
In the section titled :guilabel:`Comparison`, click on either :guilabel:`Payslip End Date: Previous
Period` or :guilabel:`Payslip End Date: Previous Year`. The report updates and displays the
previous time period values, as well as the :guilabel:`Variation` between the two.
.. _payroll/filters:
Filters
=======
At the top of each report, the default filters are shown inside the :guilabel:`Search...` box.
Click the :guilabel:`⬇️ (down arrow)` icon in the search bar to display the available
:guilabel:`Filters`. Filters show information that match the specific filter parameters.
.. example::
The :guilabel:`Work Entries Analysis` report has two default filters, the `Current month:(Month)
(Year)` filter, and the `Validated` filter.
.. image:: reporting/custom-filter.png
:align: center
:alt: Filters enabled for the Work Entries Analysis report.
The :guilabel:`Payroll` report has only one default filter, the `Last 365 Days Payslip` filter.
The :guilabel:`Salary Attachment Report` has only one default filter, the `Payslip End Date:
(Year)` filter.
All reports can include custom filters, or group information, by different metrics (employee,
department, company, etc.).
Some reports have the option to compare the current report to the previous time period or year (a
:guilabel:`Comparison` option).
Click on a parameter to select it and activate it. The report is immediately updated with the new
parameters.
The updated report can be set as a *favorite* report, meaning the parameters are stored for quick
access in the future. To do that, click :guilabel:`Save the current search`, under the
:guilabel:`Favorites` section, located in the search bar drop-down mega menu of filter options.
Doing so reveals two options and a :guilabel:`Save` button.
To set the current report as the default configuration when the report is accessed, check the box
next to :guilabel:`Default filter`. If the current report should be accessible to everyone in the
database, check the box next to :guilabel:`Share`.
Finally, click :guilabel:`Save`, which saves the currently configured report. Then, it appears
beneath the :guilabel:`Favorites` in the search bar drop-down mega menu of filter options.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 35 KiB

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