Compare commits
33 Commits
saas-17.2-
...
master-pat
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
79a6413dfe | ||
|
|
adf649f6e4 | ||
|
|
6766c70169 | ||
|
|
e39ccf8de0 | ||
|
|
48640eff5a | ||
|
|
4813419d4e | ||
|
|
5f2a5d318e | ||
|
|
c2c47456c7 | ||
|
|
6a6077b306 | ||
|
|
53763fd099 | ||
|
|
c9ba286471 | ||
|
|
a7b8901bdd | ||
|
|
8e5ee9ec2c | ||
|
|
6a8158c657 | ||
|
|
632be997c8 | ||
|
|
b32aab35a0 | ||
|
|
c2add27bd5 | ||
|
|
4234a68d25 | ||
|
|
47edb88436 | ||
|
|
bb8e72fb60 | ||
|
|
ac92c70b91 | ||
|
|
765b61eff3 | ||
|
|
2058488eaa | ||
|
|
3e4b026979 | ||
|
|
d6cd27bc9d | ||
|
|
0001bbaec4 | ||
|
|
cbe068e3ab | ||
|
|
c411a9f924 | ||
|
|
df1f1dd6b6 | ||
|
|
379798b35c | ||
|
|
b3d06500ef | ||
|
|
5bb97c3fcb | ||
|
|
fbbce69f56 |
1
conf.py
@@ -233,6 +233,7 @@ languages_names = {
|
||||
'es': 'ES',
|
||||
'fr': 'FR',
|
||||
'it': 'IT',
|
||||
'ko': 'KO',
|
||||
'nl': 'NL',
|
||||
'pt_BR': 'PT',
|
||||
'ro': 'RO',
|
||||
|
||||
@@ -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
|
||||
-------------
|
||||
|
||||
|
||||
@@ -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::
|
||||
|
||||
|
||||
BIN
content/administration/on_premise/add-more-users.png
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 17 KiB |
@@ -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.
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 22 KiB |
@@ -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::
|
||||
It’s good to keep the field’s 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.
|
||||
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 36 KiB |
@@ -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`
|
||||
|
||||
BIN
content/applications/finance/accounting/taxes/ecotax.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
@@ -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
|
||||
--------------
|
||||
|
||||
|
||||
@@ -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
|
||||
dell’indirizzo 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.
|
||||
|
||||
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
BIN
content/applications/finance/fiscal_localizations/italy/edi.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
@@ -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.
|
||||
|
||||
|
||||
@@ -11,6 +11,6 @@ Configuration
|
||||
config/connect
|
||||
config/pos
|
||||
config/https_certificate_iot
|
||||
config/flash_sdcard
|
||||
config/updating_iot
|
||||
config/troubleshooting
|
||||
config/windows_iot
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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/>`_.
|
||||
@@ -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.
|
||||
|
||||
|
||||
137
content/applications/general/iot/config/updating_iot.rst
Normal 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`.
|
||||
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
@@ -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:
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 24 KiB |
BIN
content/applications/hr/payroll/payslips/batch-confirmed.png
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
BIN
content/applications/hr/payroll/payslips/batch-done.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
content/applications/hr/payroll/payslips/batch-new.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
content/applications/hr/payroll/payslips/batch-paid-2.png
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 7.7 KiB |
BIN
content/applications/hr/payroll/payslips/export-select.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 13 KiB |
BIN
content/applications/hr/payroll/payslips/other-info-tab.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 14 KiB |
BIN
content/applications/hr/payroll/payslips/salary-comp-tab.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
content/applications/hr/payroll/payslips/warnings.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
content/applications/hr/payroll/payslips/worked-days-tab.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
@@ -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.
|
||||
|
||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.7 KiB |
BIN
content/applications/hr/payroll/reporting/pivot.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 35 KiB |