Compare commits
78 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e328ef3b9f | |||
| cf46224fda | |||
| 41a8050f34 | |||
| 45d88420e8 | |||
| cb30a15eb9 | |||
| c987e2e98e | |||
| 980b6ad41b | |||
| b8607a24a8 | |||
| c1d5ddc361 | |||
| 9dc985ef47 | |||
| f78570e908 | |||
| 469e8b6f17 | |||
| 36d2b66f59 | |||
| 3256aa02bd | |||
| ad0619e7fe | |||
| 6aca6f83d3 | |||
| 00077597d2 | |||
| c9c5af7045 | |||
| c36ad6720b | |||
| 3d04daa3f7 | |||
| a9febaea2d | |||
| f1090218e8 | |||
| 3cce09c199 | |||
| 9e8a7f54e3 | |||
| 66b2a2380c | |||
| b17e44ea59 | |||
| 730eb3086d | |||
| f200abf259 | |||
| 84017e77a5 | |||
| d811aef87c | |||
| 4f40ebd78f | |||
| 7797ce1fe2 | |||
| be3a6f6f54 | |||
| 9a549510be | |||
| b6372019d6 | |||
| fccd4e5d88 | |||
| 196553ca1e | |||
| 5b427ac874 | |||
| 3badb434e1 | |||
| 55ec59ba24 | |||
| 7e3309b922 | |||
| 6f74248de1 | |||
| be0b5e65d5 | |||
| 83b6895deb | |||
| 16537bb9c5 | |||
| 71e2a50d40 | |||
| 514c175824 | |||
| 65e7f1b3c5 | |||
| d362d4ebdb | |||
| 1aee294219 | |||
| d8cd13b659 | |||
| 2f5e130179 | |||
| d5fd2f1c66 | |||
| 92c5c3db31 | |||
| bed068f95a | |||
| 7212fc98cd | |||
| 3b40e6c1ec | |||
| d2497d2b14 | |||
| 5965bad8ea | |||
| ee8aed02c8 | |||
| 17787e62c3 | |||
| 7ecaf74124 | |||
| afbc491940 | |||
| b3e2b51a6a | |||
| acf8d5e4a7 | |||
| 916b185065 | |||
| 93a0f41756 | |||
| bf9bbff058 | |||
| 32976cdd84 | |||
| 00e96e5635 | |||
| c4fd10f94e | |||
| 10a92e66cf | |||
| 634a5af824 | |||
| 53f8dcd991 | |||
| a535d2fe9d | |||
| cb51299cf1 | |||
| a42a88bf7c | |||
| 8cea31c24d |
@@ -402,9 +402,9 @@ we are considering the feature if there is enough demand.
|
||||
|
||||
In case the domain of your users email addresses use SPF (Sender Policy Framework) or DKIM
|
||||
(DomainKeys Identified Mail), don't forget to authorize Odoo as a sending host in your domain name
|
||||
settings to increase the deliverability of your outgoing emails.
|
||||
The configuration steps are explained in the documentation about :ref:`SPF
|
||||
<email_communication/spf_compliant>` and :ref:`DKIM <email_communication/dkim_compliant>`.
|
||||
settings to increase the deliverability of your outgoing emails. The configuration steps are
|
||||
explained in the documentation about :ref:`SPF <email-domain-spf>` and :ref:`DKIM
|
||||
<email-domain-dkim>`.
|
||||
|
||||
.. Warning::
|
||||
Forgetting to configure your SPF or DKIM to authorize Odoo as a sending host can lead to the
|
||||
|
||||
@@ -33,7 +33,6 @@ In you alias config (:file:`/etc/aliases`):
|
||||
- `Postfix aliases <http://www.postfix.org/aliases.5.html>`_
|
||||
- `Postfix virtual <http://www.postfix.org/virtual.8.html>`_
|
||||
|
||||
|
||||
For Exim
|
||||
--------
|
||||
|
||||
@@ -47,5 +46,5 @@ For Exim
|
||||
- `Exim <https://www.exim.org/docs.html>`_
|
||||
|
||||
.. tip::
|
||||
If you don't have access/manage your email server, use :ref:`inbound messages
|
||||
<email_communication/inbound_messages>`.
|
||||
If you do not have access/manage your email server, use :ref:`incoming mail servers
|
||||
<email-inbound-custom-domain-incoming-server>`.
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
Export and import data
|
||||
======================
|
||||
|
||||
.. |list| replace:: :icon:`oi-view-list` :guilabel:`(list)` icon
|
||||
.. |actions| replace:: :icon:`fa-cog` :guilabel:`Actions`
|
||||
|
||||
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.
|
||||
|
||||
@@ -20,9 +23,9 @@ can aid in reporting on activities, although, Odoo provides a precise and easy r
|
||||
each available application.
|
||||
|
||||
With Odoo, the values can be exported from any field in any record. To do so, activate the list view
|
||||
(:guilabel:`≣ (four 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`.
|
||||
(|list|), on the items that need to be exported, then select the records that should be exported. To
|
||||
select a record, tick the checkbox next to the corresponding record. Finally, click on |actions|,
|
||||
then :guilabel:`Export`.
|
||||
|
||||
.. image:: export_import_data/list-view-export.png
|
||||
:align: center
|
||||
@@ -36,9 +39,10 @@ several options for the data to export:
|
||||
:alt: Overview of options to consider when exporting data in Odoo..
|
||||
|
||||
#. 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.
|
||||
only shows the fields that can be imported. This is helpful in the case where the :ref:`existing
|
||||
records need to be updated <essentials/update-data>`. 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.
|
||||
@@ -70,7 +74,8 @@ Import data into Odoo
|
||||
=====================
|
||||
|
||||
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.
|
||||
be :ref:`updated in bulk <essentials/update-data>`. The following documentation covers how to import
|
||||
data into an Odoo database.
|
||||
|
||||
.. warning::
|
||||
Imports are permanent and **cannot** be undone. However, it is possible to use filters (`created
|
||||
@@ -158,6 +163,9 @@ Once the template is downloaded, proceed to follow these steps:
|
||||
using the fields that should be imported. This way, if there is not a sample import template,
|
||||
the names are accurate.
|
||||
|
||||
|
||||
.. _essentials/external-id:
|
||||
|
||||
Import from another application
|
||||
-------------------------------
|
||||
|
||||
@@ -166,7 +174,8 @@ from previous software to facilitate the transition to Odoo.
|
||||
|
||||
Setting an ID is not mandatory when importing, but it helps in many cases:
|
||||
|
||||
- Update imports: import the same file several times without creating duplicates.
|
||||
- :ref:`Update imports <essentials/update-data>`: import the same file several times without
|
||||
creating duplicates.
|
||||
- :ref:`Import relation fields <export_import_data/relation-fields>`.
|
||||
|
||||
To recreate relationships between different records, the unique identifier from the original
|
||||
@@ -176,10 +185,7 @@ When another record is imported that links to the first one, use **XXX/ID** (XXX
|
||||
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.
|
||||
It should be noted that conflicts occur if two (or more) records have the same *External ID*.
|
||||
|
||||
Field missing to map column
|
||||
---------------------------
|
||||
@@ -476,3 +482,43 @@ The two files produced are ready to be imported in Odoo without any modification
|
||||
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.
|
||||
|
||||
.. _essentials/update-data:
|
||||
|
||||
Update data in Odoo
|
||||
===================
|
||||
|
||||
Existing data can be updated in bulk through a data import, as long as the :ref:`External ID
|
||||
<essentials/external-id>` remains consistent.
|
||||
|
||||
Prepare data export
|
||||
-------------------
|
||||
|
||||
To update data through an import, first navigate to the data to be updated, and select the |list| to
|
||||
activate list view. On the far-left side of the list, tick the checkbox for any record to be
|
||||
updated. Then, click |actions|, and select :icon:`fa-upload` :guilabel:`Export` from the drop-down
|
||||
menu.
|
||||
|
||||
On the resulting :guilabel:`Export Data` pop-up window, tick the checkbox labeled, :guilabel:`I want
|
||||
to update data (import-compatible export)`. This automatically includes the *External ID* in the
|
||||
export. Additionally, it limits the :guilabel:`Fields to export` list to **only** include fields
|
||||
that are able to be imported.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`External ID` field does **not** appear in the :guilabel:`Fields to export` list
|
||||
unless it is manually added, but it is still included in the export. However, if the :guilabel:`I
|
||||
want to update data (import-compatible export)` checkbox is ticked, it is included in the export.
|
||||
|
||||
Select the required fields to be included in the export using the :ref:`options <export-data>` on
|
||||
the pop-up window, then click :guilabel:`Export`.
|
||||
|
||||
Import updated data
|
||||
-------------------
|
||||
|
||||
After exporting, make any necessary changes to the data file. When the file is ready, it can be
|
||||
:ref:`imported <import-data>` by following the same process as a normal data import.
|
||||
|
||||
.. danger::
|
||||
When updating data, it is extremely important that the *External ID* remain consistent, as
|
||||
this is how the system identifies a record. If an ID is altered, or removed, the system may add a
|
||||
duplicate record, instead of updating the existing one.
|
||||
|
||||
@@ -89,7 +89,7 @@ settings. To use a service, simply interact with it wherever it appears in the d
|
||||
- :doc:`Lead mining <../sales/crm/acquire_leads/lead_mining>`
|
||||
- :doc:`Enrich your contacts base with Partner Autocomplete
|
||||
<../sales/crm/optimize/partner_autocomplete>`
|
||||
- :doc:`SMS essentials <../marketing/sms_marketing/essentials/sms_essentials>`
|
||||
- :doc:`SMS Marketing <../marketing/sms_marketing>`
|
||||
|
||||
.. _in_app_purchase/credits:
|
||||
|
||||
@@ -119,7 +119,7 @@ Credits are purchased in *Packs* from the `Odoo IAP Catalog
|
||||
The number of credits consumed depends on the length of the SMS and the country of destination.
|
||||
|
||||
For more information, refer to the :doc:`SMS Pricing and FAQ
|
||||
<../marketing/sms_marketing/pricing/pricing_and_faq>` documentation.
|
||||
<../marketing/sms_marketing/pricing_and_faq>` documentation.
|
||||
|
||||
.. _iap/buying_credits:
|
||||
|
||||
|
||||
@@ -181,6 +181,75 @@ It is possible to *customize groups* by using a field present on the model. To d
|
||||
cluster, the next one that is added further divides the main group's categories, and so on.
|
||||
Furthermore, filters and groups can be used together to refine the view even more.
|
||||
|
||||
.. _search/comparison:
|
||||
|
||||
Comparison
|
||||
==========
|
||||
|
||||
Certain reporting dashboards include a :guilabel:`Comparison` section in the drop-down menus of
|
||||
their :guilabel:`Search...` bars. This includes the :doc:`Overall Equipment Effectiveness
|
||||
<../inventory_and_mrp/manufacturing/reporting/oee>` report for the *Manufacturing* app, and the
|
||||
:doc:`Purchase <../inventory_and_mrp/purchase/advanced/analyze>` report for the *Purchase* app,
|
||||
among others.
|
||||
|
||||
The options in the :icon:`fa-adjust` :guilabel:`Comparison` section are used to compare data from
|
||||
two different time periods. There are two comparison options to choose from: :guilabel:`(Time
|
||||
Filter): Previous Period` and :guilabel:`(Time Filter): Previous Year`.
|
||||
|
||||
.. important::
|
||||
For some reports, the :guilabel:`Comparison` section **only** appears in the
|
||||
:guilabel:`Search...` bar drop-down menu if one (or more) time periods have been selected in the
|
||||
:guilabel:`Filters` column. This is because, if no time period is specified, there is nothing to
|
||||
compare.
|
||||
|
||||
Additionally, some reports only allow use of the :guilabel:`Comparison` feature when the
|
||||
:icon:`fa-pie-chart` :guilabel:`(pie chart)` graph type, or the :icon:`oi-view-pivot`
|
||||
:guilabel:`(pivot)` view, is selected. A :guilabel:`Comparison` option can be selected even if
|
||||
another view is enabled, but doing so does **not** change the way data is displayed on the
|
||||
report.
|
||||
|
||||
.. image:: search/comparison-section.png
|
||||
:align: center
|
||||
:alt: The Search... bar for the production analysis report.
|
||||
|
||||
To view data using one of the two comparisons, begin by selecting a time period in the
|
||||
:guilabel:`Filters` column of the :guilabel:`Search...` bar drop-down menu. Then, select either
|
||||
:guilabel:`(Time Filter): Previous Period` or :guilabel:`(Time Filter): Previous Year` in the
|
||||
:guilabel:`Comparison` section.
|
||||
|
||||
With one of the :guilabel:`Comparison` options enabled, the report compares the data for the
|
||||
selected period, with the data for the same unit of time (month, quarter, year), one period or year
|
||||
prior. The way the data is displayed depends on the selected view:
|
||||
|
||||
- The :icon:`fa-bar-chart` :guilabel:`(bar chart)` shows two bars, side-by-side, for each unit of
|
||||
time for the selected time period. The left bar represents the selected time period, while the
|
||||
right bar represents the previous time period.
|
||||
- The :icon:`fa-line-chart` :guilabel:`(line chart)` is displayed with two lines, one representing
|
||||
the selected time period, and the other representing the previous time period.
|
||||
- The :icon:`fa-pie-chart` :guilabel:`(pie chart)` appears as a large circle with a smaller circle
|
||||
inside. The larger circle represents the selected time period, while the smaller circle represents
|
||||
the previous time period.
|
||||
- The :icon:`oi-view-pivot` :guilabel:`(pivot table)` is displayed with each column split into two
|
||||
smaller columns. The right column represents the selected time period, while the left column
|
||||
represents the previous time period.
|
||||
|
||||
.. example::
|
||||
In the :guilabel:`Production Analysis` report of the :menuselection:`Manufacturing` app, data for
|
||||
the second quarter of 2024 is compared to data for the second quarter of 2023. :guilabel:`Q2` is
|
||||
selected in the :guilabel:`End Date` filter section of the :guilabel:`Search...` bar drop-down
|
||||
menu. In the :guilabel:`Comparison` section, :guilabel:`End Date: Previous Year` is selected.
|
||||
|
||||
The current year is 2024, so the larger circle shows data for the second quarter (Q2) of 2024.
|
||||
The smaller circle shows data for the second quarter (Q2) of 2023, which is the same time period,
|
||||
but one *year* prior.
|
||||
|
||||
If :guilabel:`End Date: Previous Period` is selected instead, the smaller circle shows data for
|
||||
the first quarter (Q1) of 2024, which is the same time period, but one *period* prior.
|
||||
|
||||
.. image:: search/comparison.png
|
||||
:align: center
|
||||
:alt: The comparison view of the Production Analysis report.
|
||||
|
||||
.. _search/favorites:
|
||||
|
||||
Favorites
|
||||
|
||||
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 31 KiB |
@@ -36,6 +36,8 @@ follow the instructions.
|
||||
.. seealso::
|
||||
:doc:`bank/bank_synchronization`
|
||||
|
||||
.. _bank_accounts/create:
|
||||
|
||||
Create a bank account
|
||||
---------------------
|
||||
|
||||
|
||||
@@ -18,8 +18,13 @@ To specify a sales order's invoice and delivery addresses, first go to :menusele
|
||||
|
||||
On quotations and sales orders, there are now fields for :guilabel:`Invoice Address` and
|
||||
:guilabel:`Delivery Address`. If the customer has an invoice or delivery address listed on their
|
||||
contact record, the corresponding field will use that address by default, but any contact's address
|
||||
can be used instead.
|
||||
:ref:`contact record <sales/send_quotations/contact-form-config>`, the corresponding field uses that
|
||||
address, by default, but any contact's address can be used instead.
|
||||
|
||||
.. seealso::
|
||||
For more information, refer to the documentation on :ref:`Contact Form Configuration
|
||||
<sales/send_quotations/contact-form-config>`.
|
||||
|
||||
|
||||
Invoice and deliver to different addresses
|
||||
==========================================
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
Get started
|
||||
===========
|
||||
|
||||
When you first open your Odoo Accounting app, the *Accounting Overview* page welcomes you with a
|
||||
step-by-step onboarding banner, a wizard that helps you get started. This onboarding banner is
|
||||
When you first open your Odoo Accounting app, the :guilabel:`Accounting Dashboard` welcomes you with
|
||||
a step-by-step onboarding banner, a wizard that helps you get started. This onboarding banner is
|
||||
displayed until you choose to close it.
|
||||
|
||||
The settings visible in the onboarding banner can still be modified later by going to
|
||||
@@ -22,69 +22,22 @@ Accounting onboarding banner
|
||||
|
||||
The step-by-step Accounting onboarding banner is composed of four steps:
|
||||
|
||||
.. image:: get_started/setup_accounting_onboarding.png
|
||||
.. image:: get_started/setup-accounting-onboarding.png
|
||||
:alt: Step-by-step onboarding banner in Odoo Accounting
|
||||
|
||||
#. :ref:`accounting-setup-company`
|
||||
#. :ref:`accounting-setup-bank`
|
||||
#. :ref:`accounting-setup-periods`
|
||||
#. :ref:`accounting-setup-bank`
|
||||
#. :ref:`accounting-setup-taxes`
|
||||
#. :ref:`accounting-setup-chart`
|
||||
|
||||
.. _accounting-setup-company:
|
||||
|
||||
Company Data
|
||||
------------
|
||||
|
||||
This menu allows you to add your company’s details such as the name, address, logo, website, phone
|
||||
number, email address, and Tax ID, or VAT number. These details are then displayed on your documents,
|
||||
such as on invoices.
|
||||
|
||||
.. image:: get_started/setup_company.png
|
||||
:alt: Add your company's details in Odoo Accounting and Odoo Invoicing
|
||||
|
||||
.. note::
|
||||
You can also change these settings by going to :menuselection:`Settings --> General Settings -->
|
||||
Settings --> Companies` and clicking on **Update Info**.
|
||||
|
||||
.. _accounting-setup-bank:
|
||||
|
||||
Bank Account
|
||||
------------
|
||||
|
||||
Connect your bank account to your database and have your bank statements synced automatically. To do
|
||||
so, find your bank in the list, click on *Connect*, and follow the instructions on-screen.
|
||||
|
||||
.. note::
|
||||
:doc:`Click here <bank/bank_synchronization>` for more information about this feature.
|
||||
|
||||
If your Bank Institution can’t be synchronized automatically, or if you prefer not to sync it with
|
||||
your database, you may also configure your bank account manually by clicking on *Create it*, and
|
||||
filling out the form.
|
||||
|
||||
- **Name**: the bank account's name, as displayed on Odoo.
|
||||
- **Account Number**: your bank account number (IBAN in Europe).
|
||||
- **Bank**: click on *Create and Edit* to configure the bank's details. Add the bank institution's
|
||||
name and its Identifier Code (BIC or SWIFT).
|
||||
- **Code**: this code is your Journal's *Short Code*, as displayed on Odoo. By default, Odoo creates
|
||||
a new Journal with this Short Code.
|
||||
- **Journal**: This field is displayed if you have an existing Bank Journal that is not linked yet
|
||||
to a bank account. If so, then select the *Journal* you want to use to record the financial
|
||||
transactions linked to this bank account or create a new one by clicking on *Create and Edit*.
|
||||
|
||||
.. note::
|
||||
- You can add as many bank accounts as needed with this tool by going to :menuselection:`Accounting
|
||||
--> Configuration`, and clicking on *Add a Bank Account*.
|
||||
- :doc:`Click here <bank>` for more information about Bank
|
||||
Accounts.
|
||||
|
||||
.. _accounting-setup-periods:
|
||||
|
||||
Accounting Periods
|
||||
------------------
|
||||
|
||||
Define here your **Fiscal Years**’ opening and closing dates, which are used to generate reports
|
||||
automatically, and your **Tax Return Periodicity**, along with a reminder to never miss a tax return
|
||||
deadline.
|
||||
Define the **Fiscal Years**’ opening and closing dates, which are used to generate reports
|
||||
automatically, and set your **Tax Return Periodicity**, along with a reminder to never miss a tax
|
||||
return deadline.
|
||||
|
||||
By default, the opening date is set on the 1st of January and the closing date on the 31st of
|
||||
December, as this is the most common use.
|
||||
@@ -93,6 +46,49 @@ December, as this is the most common use.
|
||||
You can also change these settings by going to :menuselection:`Accounting --> Configuration -->
|
||||
Settings --> Fiscal Periods` and updating the values.
|
||||
|
||||
.. _accounting-setup-bank:
|
||||
|
||||
Bank Account
|
||||
------------
|
||||
|
||||
Connect your bank account to your database and have your bank statements synced automatically. To do
|
||||
so, find your bank in the list, click :guilabel:`Connect`, and follow the instructions on-screen.
|
||||
|
||||
.. note::
|
||||
:doc:`Click here <bank/bank_synchronization>` for more information about this feature.
|
||||
|
||||
If your Bank Institution can’t be synchronized automatically, or if you prefer not to sync it with
|
||||
your database, you can also configure your bank account manually by typing its name, clicking
|
||||
:guilabel:`Create your Bank Account`, and filling out the form.
|
||||
|
||||
- :guilabel:`Name`: the bank account's name, as displayed in Odoo.
|
||||
- :guilabel:`Account Number`: your bank account number (IBAN in Europe).
|
||||
- :guilabel:`Bank`: click :guilabel:`Create and edit` to configure the bank's details. Add the
|
||||
bank institution's :guilabel:`Name` and its :guilabel:`Identifier Code` (BIC or SWIFT).
|
||||
- :guilabel:`Code`: this code is your Journal's :guilabel:`Short Code`, as displayed in Odoo.
|
||||
By default, Odoo creates a new Journal with this short code.
|
||||
- :guilabel:`Journal`: This field is displayed if you have an existing bank journal that is not
|
||||
linked yet to a bank account. If so, then select the :guilabel:`Journal` you want to use to record
|
||||
the financial transactions linked to this bank account or create a new one by clicking
|
||||
:guilabel:`Create and Edit`.
|
||||
|
||||
.. note::
|
||||
- You can add as many bank accounts as needed with this tool by going to
|
||||
:menuselection:`Accounting --> Configuration --> Add a Bank Account`.
|
||||
- :doc:`Click here <bank>` for more information about Bank Accounts.
|
||||
|
||||
.. _accounting-setup-taxes:
|
||||
|
||||
Taxes
|
||||
-----
|
||||
|
||||
This menu allows you to create new taxes, (de)activate, or modify existing taxes. Depending on the
|
||||
:doc:`localization package <../fiscal_localizations>` installed on your database, taxes required for
|
||||
your country are already configured.
|
||||
|
||||
.. note::
|
||||
:doc:`Click here <taxes>` for more information about taxes.
|
||||
|
||||
.. _accounting-setup-chart:
|
||||
|
||||
Chart of Accounts
|
||||
@@ -102,20 +98,20 @@ With this menu, you can add accounts to your **Chart of Accounts** and indicate
|
||||
opening balances.
|
||||
|
||||
Basic settings are displayed on this page to help you review your Chart of Accounts. To access all
|
||||
the settings of an account, click on the *double arrow button* at the end of the line.
|
||||
the settings of an account, click on the :guilabel:`Setup` button at the end of the line.
|
||||
|
||||
.. image:: get_started/setup_chart_of_accounts.png
|
||||
:alt: Setup of the Chart of Accounts and their opening balances in Odoo Accounting
|
||||
|
||||
.. note::
|
||||
:doc:`Click here <get_started/chart_of_accounts>` for more information on how to configure your Chart of
|
||||
Accounts.
|
||||
:doc:`Click here <get_started/chart_of_accounts>` for more information on how to configure your
|
||||
Chart of Accounts.
|
||||
|
||||
Invoicing onboarding banner
|
||||
===========================
|
||||
|
||||
There is another step-by-step onboarding banner that helps you take advantage of your Odoo Invoicing
|
||||
and Accounting apps. The *Invoicing onboarding banner* is the one that welcomes you if you use the
|
||||
and Accounting apps. The Invoicing onboarding banner is the one that welcomes you if you use the
|
||||
Invoicing app rather than the Accounting app.
|
||||
|
||||
If you have Odoo Accounting installed on your database, you can reach it by going to
|
||||
@@ -123,65 +119,67 @@ If you have Odoo Accounting installed on your database, you can reach it by goin
|
||||
|
||||
The Invoicing onboarding banner is composed of four main steps:
|
||||
|
||||
.. image:: get_started/setup_invoicing_onboarding.png
|
||||
.. image:: get_started/setup-invoicing-onboarding.png
|
||||
:alt: Step-by-step onboarding banner in Odoo Invoicing
|
||||
|
||||
#. :ref:`invoicing-setup-company`
|
||||
#. :ref:`invoicing-setup-bank`
|
||||
#. :ref:`invoicing-setup-layout`
|
||||
#. :ref:`invoicing-setup-payment`
|
||||
#. :ref:`invoicing-setup-sample`
|
||||
#. :ref:`invoicing-setup-invoice`
|
||||
|
||||
.. _invoicing-setup-company:
|
||||
|
||||
Company Data
|
||||
------------
|
||||
|
||||
This form is the same as :ref:`the one presented in the Accounting onboarding banner
|
||||
<accounting-setup-company>`.
|
||||
This form allows you to add your company’s details, such as the name, address, logo, website, phone
|
||||
number, email address, and Tax ID or VAT number. These details are then displayed on your
|
||||
documents, such as invoices.
|
||||
|
||||
.. image:: get_started/setup_company.png
|
||||
:alt: Add your company's details in Odoo Accounting and Odoo Invoicing
|
||||
|
||||
.. note::
|
||||
You can also change the company's details by going to :menuselection:`Settings --> General
|
||||
Settings`, scrolling down to the :guilabel:`Companies` section, and :guilabel:`Update Info`.
|
||||
|
||||
.. _invoicing-setup-bank:
|
||||
|
||||
Bank Account
|
||||
------------
|
||||
|
||||
Use this button to create and link a bank account in Odoo. To add additional bank accounts, go to
|
||||
:guilabel:`Invoicing --> Configuration --> Add a Bank Account` and :ref:`configure the fields
|
||||
<bank_accounts/create>`.
|
||||
|
||||
.. tip::
|
||||
:doc:`Synchronize <bank/bank_synchronization>` your bank account(s) with your Odoo database to
|
||||
automatically update your bank transactions.
|
||||
|
||||
.. _invoicing-setup-layout:
|
||||
|
||||
Invoice Layout
|
||||
--------------
|
||||
|
||||
With this tool, you can design the appearance of your documents by selecting which layout template,
|
||||
paper format, colors, font, and logo you want to use.
|
||||
Use this button to customize the :ref:`default invoice layout <studio/pdf-reports/default-layout>`.
|
||||
|
||||
You can also add your *Company Tagline* and the content of the documents’ *footer*. Note that Odoo
|
||||
automatically adds the company's phone number, email, website URL, and Tax ID (or VAT number) to the
|
||||
footer, according to the values you previously configured in the :ref:`Company Data
|
||||
<accounting-setup-company>`.
|
||||
.. note::
|
||||
You can also change the invoice layout by going to :menuselection:`Settings --> General
|
||||
Settings`, scrolling down to the :guilabel:`Companies` section, and clicking :guilabel:`Configure
|
||||
Document Layout`.
|
||||
|
||||
.. image:: get_started/setup_document_layout.png
|
||||
:alt: Document layout configuration in Odoo Invoicing
|
||||
.. _invoicing-setup-invoice:
|
||||
|
||||
Invoice Creation
|
||||
----------------
|
||||
|
||||
This button takes you to the invoice creation view, where you can create your first invoice.
|
||||
|
||||
.. tip::
|
||||
Add your **bank account number** and a link to your **General Terms & Condition** in the footer.
|
||||
This way, your contacts can find the full content of your GT&C online without having to print
|
||||
them on the invoices you issue.
|
||||
|
||||
.. note::
|
||||
These settings can also be modified by going to :menuselection:`Settings --> General Settings`,
|
||||
under the *Business Documents* section.
|
||||
|
||||
.. _invoicing-setup-payment:
|
||||
|
||||
Payment Method
|
||||
--------------
|
||||
|
||||
This menu helps you configure the payment methods with which your customers can pay you.
|
||||
|
||||
.. important::
|
||||
Configuring a *Payment Provider* with this tool also activates the *Invoice Online Payment*
|
||||
option automatically. With this, users can directly pay online, from their Customer Portal.
|
||||
|
||||
.. _invoicing-setup-sample:
|
||||
|
||||
Sample Invoice
|
||||
--------------
|
||||
|
||||
Send yourself a sample invoice by email to make sure everything is correctly configured.
|
||||
|
||||
.. seealso::
|
||||
* :doc:`bank`
|
||||
* :doc:`get_started/chart_of_accounts`
|
||||
@@ -197,4 +195,4 @@ Send yourself a sample invoice by email to make sure everything is correctly con
|
||||
get_started/chart_of_accounts
|
||||
get_started/multi_currency
|
||||
get_started/avg_price_valuation
|
||||
get_started/vat_units
|
||||
get_started/tax_units
|
||||
|
||||
|
After Width: | Height: | Size: 129 KiB |
|
After Width: | Height: | Size: 167 KiB |
|
Before Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 71 KiB |
@@ -1,50 +1,35 @@
|
||||
=========
|
||||
VAT units
|
||||
Tax units
|
||||
=========
|
||||
|
||||
.. important::
|
||||
This is only applicable to multi-company environments.
|
||||
|
||||
A **VAT unit** is a group of VAT-taxable enterprises that are legally independent of each other but
|
||||
A **tax unit** is a group of VAT-taxable enterprises that are legally independent of each other but
|
||||
are closely linked financially, organizationally, and economically and therefore considered the same
|
||||
VAT-taxable enterprise. **VAT units** are not mandatory, but if created, constituent companies of
|
||||
VAT-taxable enterprise. **Tax units** are not mandatory, but if created, constituent companies of
|
||||
the unit must belong to the same **country**, use the same **currency**, and one company must be
|
||||
designated as the **representative** company of the **VAT unit**. **VAT units** receive a specific
|
||||
designated as the **representative** company of the **tax unit**. **Tax units** receive a specific
|
||||
**tax ID** intended only for **tax returns**. **Constituent** companies keep their **tax ID** used
|
||||
for **commercial purposes**.
|
||||
|
||||
.. example::
|
||||
Enterprise **A** owes €300.000,00 of VAT taxes and enterprise **B** can recover €280.000,00 of
|
||||
VAT taxes. They form up as a **VAT unit** so that the two amounts balance out and must conjointly
|
||||
VAT taxes. They form up as a **tax unit** so that the two amounts balance out and must conjointly
|
||||
only pay €20.000,00 of VAT taxes.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
To configure a **VAT unit**, go to :menuselection:`Settings --> General Settings`, scroll down to
|
||||
the :guilabel:`Companies` section, and click :guilabel:`Manage Companies`. Select the company to
|
||||
serve the **representative** role, and in the :guilabel:`General Information` tab, fill in the
|
||||
mandatory fields for the .XML export when exporting the **tax report**: :guilabel:`Company Name`,
|
||||
:guilabel:`Address`, :guilabel:`VAT`, :guilabel:`Currency`, :guilabel:`Phone`, and
|
||||
:guilabel:`Email`.
|
||||
|
||||
.. image:: vat_units/general.png
|
||||
:align: center
|
||||
:alt: General information tab
|
||||
|
||||
Then, click on the :guilabel:`VAT Units` tab, :guilabel:`Add a line`, and either select an existing
|
||||
**VAT unit**, or create a new one. Enter a **name** for the unit, :guilabel:`Country` of the
|
||||
constituent companies and tax report, the :guilabel:`Companies`, the :guilabel:`Main Company` that
|
||||
serves the **representative** role, and the :guilabel:`Tax ID` of the **VAT unit**.
|
||||
|
||||
.. image:: vat_units/vat-unit.png
|
||||
:align: center
|
||||
:alt: VAT units tab
|
||||
To create a **tax unit**, go to :menuselection:`Accounting --> Configuration --> Tax Units`, and
|
||||
click :guilabel:`New`. Enter a **name** for the unit, select a :guilabel:`Country`, the
|
||||
:guilabel:`Companies` to incorporate in the unit, the :guilabel:`Main Company`, and the
|
||||
:guilabel:`Tax ID` of the **constituent** company of that tax unit.
|
||||
|
||||
Fiscal position
|
||||
---------------
|
||||
|
||||
As transactions between constituents of the same **VAT unit** are not subject to VAT, it is possible
|
||||
As transactions between constituents of the same **tax unit** are not subject to VAT, it is possible
|
||||
to create a :doc:`tax mapping (fiscal position) <../taxes/fiscal_positions>` to avoid the
|
||||
application of VAT on inter-constituent transactions.
|
||||
|
||||
@@ -61,13 +46,12 @@ Do the same for the :guilabel:`Account Mapping` tab if required, and repeat this
|
||||
Depending on your :doc:`localization package </applications/finance/fiscal_localizations>`, taxes
|
||||
may vary from the screenshot displayed.
|
||||
|
||||
.. image:: vat_units/fiscal-positions.png
|
||||
:align: center
|
||||
:alt: Tax mapping of fiscal position for VAT unit
|
||||
.. image:: tax_units/fiscal-positions.png
|
||||
:alt: Tax mapping of fiscal position for tax unit
|
||||
|
||||
Then, assign the fiscal position by opening the **Contacts** app. Search for a **constituent**
|
||||
company, and open the contact's **card**. Click the :guilabel:`Sales & Purchase` tab, and in the
|
||||
:guilabel:`Fiscal Position` field, input the **fiscal position** created for the **VAT unit**.
|
||||
:guilabel:`Fiscal Position` field, input the **fiscal position** created for the **tax unit**.
|
||||
Repeat the process for each **constituent** company card form, on each company database.
|
||||
|
||||
.. seealso::
|
||||
@@ -76,11 +60,10 @@ Repeat the process for each **constituent** company card form, on each company d
|
||||
Tax report
|
||||
==========
|
||||
|
||||
The **representative** company can access the aggregated tax report of the **VAT unit** by going to
|
||||
:menuselection:`Accounting --> Reporting --> Tax Report`, and selecting the **VAT unit** in
|
||||
The **representative** company can access the aggregated tax report of the **tax unit** by going to
|
||||
:menuselection:`Accounting --> Reporting --> Tax Report`, and selecting the **tax unit** in
|
||||
:guilabel:`Tax Unit`. This report contains the aggregated transactions of all **constituents** and
|
||||
the .XML export contains the name and VAT number of the **main** company.
|
||||
|
||||
.. image:: vat_units/report.png
|
||||
:align: center
|
||||
:alt: VAT unit tax report
|
||||
.. image:: tax_units/report.png
|
||||
:alt: tax unit tax report
|
||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 10 KiB |
@@ -16,6 +16,8 @@ Go to :menuselection:`Accounting --> Configuration --> Settings --> Customer Pay
|
||||
Deposit multiple payments in batch
|
||||
==================================
|
||||
|
||||
.. _batch-payments/register-payments:
|
||||
|
||||
Register payments
|
||||
-----------------
|
||||
|
||||
|
||||
@@ -91,5 +91,5 @@ select :guilabel:`Process follow-ups`.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`/applications/essentials/in_app_purchase`
|
||||
- :doc:`/applications/marketing/sms_marketing/pricing/pricing_and_faq`
|
||||
- :doc:`/applications/marketing/sms_marketing/pricing_and_faq`
|
||||
- :doc:`../customer_invoices/snailmail`
|
||||
|
||||
@@ -30,8 +30,9 @@ Non-EEA territories:
|
||||
- Jersey;
|
||||
- Isle of Man.
|
||||
|
||||
When paying a bill in Odoo, you can select SEPA mandates as a payment option. At the day's end,
|
||||
you can generate the SEPA file containing all bank wire transfers and send it to the bank.
|
||||
When paying a bill in Odoo, you can select SEPA mandates as a payment option. At the end of the day,
|
||||
you can generate the SEPA file containing all bank wire transfers and upload it to your online
|
||||
banking interface to process the payments.
|
||||
|
||||
By default, the file follows the SEPA Credit Transfer **'pain.001.001.03'** specifications. This is
|
||||
a well-defined standard among banks. However, for Swiss and German companies, other formats are used
|
||||
@@ -69,7 +70,7 @@ the BIC (bank identifier code) in the :guilabel:`Journal Entries` tab.
|
||||
Registering payments
|
||||
--------------------
|
||||
|
||||
You can register and vendor payments made with SEPA. To do so, go to :menuselection:`Accounting -->
|
||||
You can register any vendor payments made with SEPA. To do so, go to :menuselection:`Accounting -->
|
||||
Vendors --> Payments`. When creating your payment, select :guilabel:`SEPA Credit Transfer` as the
|
||||
:guilabel:`Payment Method`.
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ inalterable**, meaning that once an entry has been posted, it can no longer be c
|
||||
|
||||
To do so, Odoo can use the **SHA-256 algorithm** to create a unique fingerprint for each posted
|
||||
entry. This fingerprint is called a hash. The hash is generated by taking an entry's essential data
|
||||
(the values of the `date`, `journal_id`, `company_id`, `debit`, `credit`, `account_id`, and
|
||||
(the values of the `name`, `date`, `journal_id`, `company_id`, `debit`, `credit`, `account_id`, and
|
||||
`partner_id` fields), concatenating it, and inputting it to the SHA-256 hash function, which then
|
||||
outputs a fixed size (256-bit) string of characters. The hash function is deterministic (:dfn:`the
|
||||
same input always creates the same output`): any minor modification to the original data would
|
||||
|
||||
@@ -5,8 +5,8 @@ Expenses
|
||||
========
|
||||
|
||||
Odoo **Expenses** streamlines the management of expenses. After an employee submits their expenses
|
||||
in Odoo, the expenses are reviewed by management and accounting teams. Once approved, payments can
|
||||
then be processed and disbursed back to the employee for reimbursement(s).
|
||||
in Odoo, they are reviewed by management and accounting teams. Once approved, payments can then be
|
||||
processed, and disbursed back to the employee for reimbursement.
|
||||
|
||||
.. seealso::
|
||||
`Odoo Expenses: product page <https://www.odoo.com/app/expenses>`_
|
||||
@@ -62,16 +62,16 @@ report the actual cost when submitting an expense report.
|
||||
Here are some examples for when to set a specific :guilabel:`Cost` on a product vs. leaving the
|
||||
:guilabel:`Cost` at `0.00`:
|
||||
|
||||
- **Meals**: Set the :guilabel:`Cost` to `0.00`. When an employee logs an expense for a meal,
|
||||
- **Meals**: set the :guilabel:`Cost` to `0.00`. When an employee logs an expense for a meal,
|
||||
they enter the actual amount of the bill and will be reimbursed for that amount. An expense for
|
||||
a meal costing $95.23 would equal a reimbursement for $95.23.
|
||||
- **Mileage**: Set the :guilabel:`Cost` to `0.30`. When an employee logs an expense for
|
||||
- **Mileage**: set the :guilabel:`Cost` to `0.30`. When an employee logs an expense for
|
||||
"mileage", they enter the number of miles driven in the :guilabel:`Quantity` field, and are
|
||||
reimbursed 0.30 per mile they entered. An expense for 100 miles would equal a reimbursement for
|
||||
$30.00.
|
||||
- **Monthly Parking**: Set the :guilabel:`Cost` to `75.00`. When an employee logs an expense for
|
||||
- **Monthly Parking**: set the :guilabel:`Cost` to `75.00`. When an employee logs an expense for
|
||||
"monthly parking", the reimbursement would be for $75.00.
|
||||
- **Expenses**: Set the :guilabel:`Cost` to `0.00`. When an employee logs an expense that is not
|
||||
- **Expenses**: set the :guilabel:`Cost` to `0.00`. When an employee logs an expense that is not
|
||||
a meal, mileage, or monthly parking, they use the generic :guilabel:`Expenses` product. An
|
||||
expense for a laptop costing $350.00 would be logged as an :guilabel:`Expenses` product, and
|
||||
the reimbursement would be for $350.00.
|
||||
@@ -84,570 +84,20 @@ Set a tax on each product in the :guilabel:`Vendor Taxes` and :guilabel:`Custome
|
||||
applicable. It is considered good practice to use a tax that is configured with :ref:`Tax Included
|
||||
in Price <taxes/included-in-price>`. Taxes will be automatically configured if this is set.
|
||||
|
||||
.. _expenses/new:
|
||||
|
||||
Record expenses
|
||||
===============
|
||||
|
||||
Manually create a new expense
|
||||
-----------------------------
|
||||
|
||||
To record a new expense, begin in the main :menuselection:`Expenses` app dashboard, which presents
|
||||
the default :guilabel:`My Expenses` view. This view can also be accessed from
|
||||
:menuselection:`Expenses app --> My Expenses --> My Expenses`.
|
||||
|
||||
First, click :guilabel:`New`, and then fill out the various fields on the form.
|
||||
|
||||
- :guilabel:`Description`: Enter a short description for the expense in the :guilabel:`Description`
|
||||
field. This should be short and informative, such as `lunch with client` or `hotel for
|
||||
conference`.
|
||||
- :guilabel:`Category`: Select the expense category from the drop-down menu that most closely
|
||||
corresponds to the expense. For example, an airplane ticket would be appropriate for an expense
|
||||
:guilabel:`Category` named :guilabel:`Air Travel`.
|
||||
- :guilabel:`Total`: Enter the total amount paid for the expense in one of two ways:
|
||||
|
||||
#. If the expense is for one single item/expense, and the category selected was for a single item,
|
||||
enter the cost in the :guilabel:`Total` field (the :guilabel:`Quantity` field is hidden).
|
||||
#. If the expense is for multiples of the same item/expense with a fixed price, the
|
||||
:guilabel:`Unit Price` is displayed. Enter the quantity in the :guilabel:`Quantity` field, and
|
||||
the total cost is automatically updated with the correct total (the :guilabel:`Unit Price` x
|
||||
the :guilabel:`Quantity` = the total). Be advised, the word "total" does not appear, the total
|
||||
cost simply appears below the :guilabel:`Quantity`.
|
||||
|
||||
.. example::
|
||||
For example, in the case of mileage driven, the :guilabel:`Unit Price` is populated as the
|
||||
cost *per mile*. Set the :guilabel:`Quantity` to the *number of miles* driven, and the total
|
||||
is calculated.
|
||||
|
||||
- :guilabel:`Included Taxes`: If taxes were configured on the expense category, the tax percentage
|
||||
and amount appear automatically after entering either the :guilabel:`Total` or the
|
||||
:guilabel:`Quantity`.
|
||||
|
||||
.. note::
|
||||
When a tax is configured on an expense category, the :guilabel:`Included Taxes` value will
|
||||
update in real time as the :guilabel:`Total` or :guilabel:`Quantity` is updated.
|
||||
|
||||
- :guilabel:`Employee`: Using the drop-down menu, select the employee this expense is for.
|
||||
- :guilabel:`Paid By`: Click the radio button to indicate who paid for the expense and should be
|
||||
reimbursed. If the employee paid for the expense (and should be reimbursed) select
|
||||
:guilabel:`Employee (to reimburse)`. If the company paid directly instead (e.g. if the company
|
||||
credit card was used to pay for the expense) select :guilabel:`Company`. Depending on the expense
|
||||
category selected, this field may not appear.
|
||||
- :guilabel:`Bill Reference`: If there is any reference text that should be included for the
|
||||
expense, enter it in this field.
|
||||
- :guilabel:`Expense Date`: Using the calendar module, enter the date the expense was incurred. Use
|
||||
the :guilabel:`< (left)` and :guilabel:`> (right)` arrows to navigate to the correct month, then
|
||||
click on the specific day to enter the selection.
|
||||
- :guilabel:`Account`: Select the expense account that this expense should be logged on from the
|
||||
drop-down menu.
|
||||
- :guilabel:`Customer to Reinvoice`: If the expense is something that should be paid for by a
|
||||
customer, select the :abbr:`SO (Sales Order)` and customer that will be invoiced for this expense
|
||||
from the drop-down menu. All sales orders in the drop-down menu list both the :abbr:`SO (Sales
|
||||
Order)` as well as the company the sales order is written for, but after the expense is saved, the
|
||||
customer name disappears and only the :abbr:`SO (Sales Order)` is visible on the expense.
|
||||
|
||||
.. example::
|
||||
A customer wishes to have an on-site meeting for a custom garden (design and installation) and
|
||||
agrees to pay for the expenses associated with it (such as travel, hotel, meals, etc.). All
|
||||
expenses tied to that meeting would indicate the sales order for the custom garden (which also
|
||||
references the customer) as the :guilabel:`Customer to Reinvoice`.
|
||||
|
||||
- :guilabel:`Analytic Distribution`: Select the account(s) the expense should be written against
|
||||
from the drop-down menu for either :guilabel:`Projects`, :guilabel:`Departments`, or both.
|
||||
Multiple accounts can be listed for each category if needed. Adjust the percentage for each
|
||||
analytic account by typing in the percentage value next to the account.
|
||||
- :guilabel:`Company`: If multiple companies are set up, select the company this expense should be
|
||||
filed for from the drop-down menu. The current company will automatically populate this field.
|
||||
- :guilabel:`Notes...`: If any notes are needed in order to clarify the expense, enter them in the
|
||||
notes field.
|
||||
|
||||
.. image:: expenses/expense-filled-in.png
|
||||
:align: center
|
||||
:alt: A filled in expense form for a client lunch.
|
||||
|
||||
Attach a receipt
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
After the expense is created, the next step is to attach a receipt. Click the :guilabel:`Attach
|
||||
Receipt` button, and a file explorer appears. Navigate to the receipt to be attached, and click
|
||||
:guilabel:`Open`. The new receipt is recorded in the chatter, and the number of receipts will appear
|
||||
next to the :guilabel:`📎 (paperclip)` icon beneath the expense form. More than one receipt can be
|
||||
attached to an individual expense, as needed. The number of receipts attached to the expense will be
|
||||
noted on the paperclip icon.
|
||||
|
||||
.. image:: expenses/receipt-icon.png
|
||||
:align: center
|
||||
:alt: Attach a receipt and it appears in the chatter.
|
||||
|
||||
Create new expenses from a scanned receipt
|
||||
------------------------------------------
|
||||
|
||||
Rather than manually inputting all of the information for an expense, expenses can be created by
|
||||
scanning a PDF receipt.
|
||||
|
||||
First, in the main :guilabel:`Expenses` app dashboard view (this view can also be accessed from
|
||||
:menuselection:`Expenses app --> My Expenses --> My Expenses`), click :guilabel:`Scan`, and a file
|
||||
explorer pops up. Navigate to the receipt to be uploaded, click on it to select it, and then click
|
||||
:guilabel:`Open`.
|
||||
|
||||
.. image:: expenses/scan.png
|
||||
:align: center
|
||||
:alt: Create an expense by scanning a receipt. Click Scan at the top of the Expenses dashboard
|
||||
view.
|
||||
|
||||
The receipt is scanned, and a new entry is created with today's date as the :guilabel:`Expense
|
||||
Date`, and any other fields it can populate based on the scanned data, such as the total. Click on
|
||||
the new entry to open the individual expense form, and make any changes needed. The scanned receipt
|
||||
appears in the chatter.
|
||||
|
||||
Automatically create new expenses from an email
|
||||
-----------------------------------------------
|
||||
|
||||
Instead of individually creating each expense in the *Expenses* app, expenses can be automatically
|
||||
created by sending an email to an email alias.
|
||||
|
||||
To do so, first, an email alias needs to be configured. Go to :menuselection:`Expenses app -->
|
||||
Configuration --> Settings`. Ensure :guilabel:`Incoming Emails` is enabled.
|
||||
|
||||
.. image:: expenses/email-alias.png
|
||||
:align: center
|
||||
:alt: Create the domain alias by clicking the link.
|
||||
|
||||
.. note::
|
||||
If the domain alias needs to be set up, :guilabel:`Setup your domain alias` will appear beneath
|
||||
the incoming emails check box instead of the email address field. Refer to this documentation for
|
||||
setup instructions and more information:
|
||||
:doc:`/applications/websites/website/configuration/domain_names`. Once the domain alias is
|
||||
configured, the email address field will be visible beneath the incoming emails section.
|
||||
|
||||
Next, enter the email address to be used in the email field, and then click :guilabel:`Save`. Now
|
||||
that the email address has been entered, emails can be sent to that alias to create new expenses
|
||||
without having to be in the Odoo database.
|
||||
|
||||
To submit an expense via email, create a new email and enter the product's *internal reference* code
|
||||
(if available) and the amount of the expense in the email subject. Next, attach the receipt to the
|
||||
email. Odoo creates the expense by taking the information in the email subject and combining it with
|
||||
the receipt.
|
||||
|
||||
To check an expense categories internal reference, go to :menuselection:`Expenses app -->
|
||||
Configuration --> Expense Categories`. If an internal reference is listed on the expense category,
|
||||
it is listed in the :guilabel:`Internal Reference` column.
|
||||
|
||||
.. image:: expenses/ref.png
|
||||
:align: center
|
||||
:alt: Internal reference numbers are listed in the main Expense Categories view.
|
||||
|
||||
To add an internal reference on an expense category, click on the category to open the form. Enter
|
||||
the internal reference in the field. Beneath the :guilabel:`Internal Reference` field, this sentence
|
||||
appears: :guilabel:`Use this reference as a subject prefix when submitting by email.`
|
||||
|
||||
.. image:: expenses/mileage-internal-reference.png
|
||||
:align: center
|
||||
:alt: Internal reference numbers are listed in the main Expense Products view.
|
||||
|
||||
.. note::
|
||||
For security purposes, only authenticated employee emails are accepted by Odoo when creating an
|
||||
expense from an email. To confirm an authenticated employee email address, go to the employee
|
||||
card in the :menuselection:`Employees` app, and refer to the :guilabel:`Work Email`
|
||||
|
||||
.. image:: expenses/authenticated-email-address.png
|
||||
:align: center
|
||||
:alt: Create the domain alias by clicking the link.
|
||||
|
||||
.. example::
|
||||
If submitting an expense via email for a $25.00 meal during a work trip, the email subject would
|
||||
be `FOOD $25.00`.
|
||||
|
||||
Explanation:
|
||||
|
||||
- The :guilabel:`Internal Reference` for the expense category `Meals` is `FOOD`
|
||||
- The :guilabel:`Cost` for the expense is `$25.00`
|
||||
|
||||
.. _expenses/report:
|
||||
|
||||
Create an expense report
|
||||
========================
|
||||
|
||||
When expenses are ready to submit (such as at the end of a business trip, or once a month), an
|
||||
*expense report* needs to be created. Go to the main :menuselection:`Expenses` app dashboard, which
|
||||
displays a default :guilabel:`My Expenses` view, or go to :menuselection:`Expenses app --> My
|
||||
Expenses --> My Expenses`.
|
||||
|
||||
Expenses are color coded by status. Any expense with a status of :guilabel:`To Report` (expenses
|
||||
that still need to be added to an expense report) the text appears in blue. All other statuses
|
||||
(:guilabel:`To Submit`, :guilabel:`Submitted`, and :guilabel:`Approved`) the text appears in black.
|
||||
|
||||
First, select each individual expense for the report by clicking the check box next to each entry,
|
||||
or quickly select all the expenses in the list by clicking the check box next to :guilabel:`Expense
|
||||
Date`.
|
||||
|
||||
Another way to quickly add all expenses that are not on an expense report is to click
|
||||
:guilabel:`Create Report` without selecting any expenses, and Odoo will select all expenses with a
|
||||
status of :guilabel:`To Submit` that are not already on a report.
|
||||
|
||||
.. image:: expenses/create-report.png
|
||||
:align: center
|
||||
:alt: Select the expenses to submit, then create the report.
|
||||
|
||||
.. note::
|
||||
Any expense can be selected from the :guilabel:`My Expenses` list, regardless of status. The
|
||||
:guilabel:`Create Report` button is visible as long as there is a minimum of 1 expense with a
|
||||
status of :guilabel:`To Report` selected. When the :guilabel:`Create Report` button is clicked,
|
||||
only expenses with a status of :guilabel:`To Submit` that are *not* currently on another expense
|
||||
report will appear in the newly created expense report.
|
||||
|
||||
Once the expenses have been selected, click the :guilabel:`Create Report` button. The new report
|
||||
appears with all the expenses listed in the :guilabel:`Expense` tab. If there is a receipt attached
|
||||
to an individual expense, a :guilabel:`📎 (paperclip)` icon appears next to the :guilabel:`Customer
|
||||
to Reinvoice` and :guilabel:`Analytic Distribution` columns.
|
||||
|
||||
When the report is created, the date range for the expenses appears in the :guilabel:`Expense Report
|
||||
Summary` field by default. It is recommended to edit this field with a short summary for each report
|
||||
to help keep expenses organized. Enter a short description for the expense report (such as `Client
|
||||
Trip NYC`, or `Repairs for Company Car`) in the :guilabel:`Expense Report Summary` field. Next,
|
||||
select a :guilabel:`Manager` from the drop-down menu to assign a manager to review the report. If
|
||||
needed, the :guilabel:`Journal` can be changed. Use the drop-down menu to select a different
|
||||
:guilabel:`Journal`.
|
||||
|
||||
.. image:: expenses/expense-report-summary.png
|
||||
:align: center
|
||||
:alt: Enter a short description and select a manager for the report.
|
||||
|
||||
If some expenses are not on the report that should be, they can still be added. Click :guilabel:`Add
|
||||
a line` at the bottom of the :guilabel:`Expense` tab. A pop up appears with all the available
|
||||
expenses that can be added to the report (with a status of :guilabel:`To Submit`). Click the check
|
||||
box next to each expense to add, then click :guilabel:`Select`. The items now appear on the report
|
||||
that was just created. If a new expense needs to be added that does *not* appear on the list, click
|
||||
:guilabel:`New` to create a new expense and add it to the report.
|
||||
|
||||
.. image:: expenses/add-an-expense-line.png
|
||||
:align: center
|
||||
:alt: Add more expenses to the report before submitting.
|
||||
|
||||
.. note::
|
||||
Expense reports can be created in one of three places:
|
||||
|
||||
#. Go to the main :menuselection:`Expenses` app dashboard (also accessed by going to
|
||||
:menuselection:`Expenses app --> My Expenses --> My Expenses`)
|
||||
#. Go to :menuselection:`Expenses app --> My Expenses --> My Reports`
|
||||
#. Go to :menuselection:`Expenses app --> Expense Reports`
|
||||
|
||||
In any of these views, click :guilabel:`New` to create a new expense report.
|
||||
|
||||
.. _expenses/submit:
|
||||
|
||||
Submit an expense report
|
||||
------------------------
|
||||
|
||||
When an expense report is completed, the next step is to submit the report to a manager for
|
||||
approval. Reports must be individually submitted, and cannot be submitted in batches. Open the
|
||||
specific report from the list of expense reports (if the report is not already open). To view all
|
||||
expense reports, go to :menuselection:`Expenses app --> My Expenses --> My Reports`.
|
||||
|
||||
If the list is large, grouping the results by status may be helpful since only reports that have a
|
||||
:guilabel:`To Submit` status need to be submitted, reports with an :guilabel:`Approved` or
|
||||
:guilabel:`Submitted` status do not.
|
||||
|
||||
The :guilabel:`To Submit` expenses are easily identifiable not just from the :guilabel:`To Submit`
|
||||
status, but the text appears in blue, while the other expenses text appears in black.
|
||||
|
||||
.. image:: expenses/expense-status.png
|
||||
:align: center
|
||||
:alt: Submit the report to the manager.
|
||||
|
||||
.. note::
|
||||
The status of each report is shown in the :guilabel:`Status` column on the right. If the
|
||||
:guilabel:`Status` column is not visible, click the :guilabel:`Additional Options (two dots)`
|
||||
icon at the end of the row, and enable :guilabel:`Status`.
|
||||
|
||||
Click on a report to open it, then click :guilabel:`Submit To Manager`. After submitting a report,
|
||||
the next step is to wait for the manager to approve it.
|
||||
|
||||
.. important::
|
||||
The :ref:`expenses/approve`, :ref:`expenses/post`, and :ref:`expenses/reimburse` sections are
|
||||
**only** for users with the *necessary rights*.
|
||||
|
||||
.. _expenses/approve:
|
||||
|
||||
Approve expenses
|
||||
================
|
||||
|
||||
In Odoo, not just anyone can approve expense reports— only users with the necessary rights (or
|
||||
permissions) can. This means that a user must have at least *Team Approver* rights for the
|
||||
*Expenses* app. Employees with the necessary rights can review expense reports, approve or reject
|
||||
them, and provide feedback thanks to the integrated communication tool.
|
||||
|
||||
To see who has rights to approve, go to the main :menuselection:`Settings` app and click on
|
||||
:guilabel:`Manage Users`.
|
||||
|
||||
.. note::
|
||||
If the *Settings* app is not available, then certain rights are not set on the account. Check the
|
||||
:guilabel:`Access Rights` tab of a user's card in the :menuselection:`Settings` app. the
|
||||
:guilabel:`Administration` section (bottom right of the :guilabel:`Access Rights` tab) is set to
|
||||
one of three options:
|
||||
|
||||
- :guilabel:`None (blank)`: The user cannot access the *Settings* app at all.
|
||||
- :guilabel:`Access Rights`: The user can only view the :guilabel:`User's & Companies` section of
|
||||
the *Settings* app.
|
||||
- :guilabel:`Settings`: The user has access to the entire *Settings* app with no restrictions.
|
||||
|
||||
Please refer to :doc:`this document </applications/general/users>` to learn more about managing
|
||||
users and their access rights.
|
||||
|
||||
Click on an individual to view their card, which displays the :guilabel:`Access Rights` tab in the
|
||||
default view. Scroll down to the :guilabel:`Human Resources` section. Under :guilabel:`Expenses`,
|
||||
there are four options:
|
||||
|
||||
- :guilabel:`None (blank)`: A blank field means the user has no rights to view or approve expense
|
||||
reports, and can only view their own.
|
||||
- :guilabel:`Team Approver`: The user can only view and approve expense reports for their own
|
||||
specific team.
|
||||
- :guilabel:`All Approver`: The user can view and approve any expense report.
|
||||
- :guilabel:`Administrator`: The user can view and approve any expense report, as well as access the
|
||||
reporting and configuration menus in the *Expenses* app.
|
||||
|
||||
Users who are able to approve expense reports (typically managers) can easily view all expense
|
||||
reports they have access rights to. Go to :menuselection:`Expenses app --> Expense Reports`, and a
|
||||
list appears with all expense reports that have a status of either :guilabel:`To Submit`,
|
||||
:guilabel:`Submitted`, :guilabel:`Approved`, :guilabel:`Posted`, or :guilabel:`Done`. Expense
|
||||
reports with a status of :guilabel:`Refused` are hidden in the default view.
|
||||
|
||||
.. image:: expenses/expense-reports-list.png
|
||||
:align: center
|
||||
:alt: Reports to validate are found on the Reports to Approve page.
|
||||
|
||||
When viewing expense reports, there is a panel of filters that can be enabled or disabled on the
|
||||
left side. The three categories that filters can be applied on are :guilabel:`Status`,
|
||||
:guilabel:`Employee`, and :guilabel:`Company`. To view only expense reports with a particular
|
||||
status, enable the specific status filter to display the expense reports with only that status.
|
||||
Disable the specific status filter to hide the reports with that status. To view expense reports for
|
||||
a particular employee and/or company, enable the specific employee name filter and/or company filter
|
||||
in the :guilabel:`Employee` and :guilabel:`Company` sections.
|
||||
|
||||
Reports can be approved in two ways (individually or several at once) and refused only one way. To
|
||||
approve multiple expense reports at once, remain in the list view. First, select the reports to
|
||||
approve by clicking the check box next to each report, or click the box next to :guilabel:`Employee`
|
||||
to select all the reports in the list.
|
||||
|
||||
.. important::
|
||||
Only reports with a status of :guilabel:`Submitted` can be approved. It is recommended to only
|
||||
display the submitted reports by adjusting the status filter on the left side by only having the
|
||||
:guilabel:`Submitted` filter enabled.
|
||||
|
||||
If a report is selected that is unable to be approved, the :guilabel:`Approve Report` button
|
||||
**will not appear**, indicating there is a problem with the selected report(s).
|
||||
|
||||
Next, click the :guilabel:`Approve Report` button.
|
||||
|
||||
.. image:: expenses/approve-report.png
|
||||
:align: center
|
||||
:alt: Approve multiple reports by clicking the checkboxes next to each report.
|
||||
|
||||
To approve an individual report, click on a report to go to a detailed view of that report. In this
|
||||
view, several options are presented: :guilabel:`Approve`, :guilabel:`Report in Next Payslip`,
|
||||
:guilabel:`Refuse`, or :guilabel:`Reset to draft`. Click :guilabel:`Approve` to approve the report.
|
||||
|
||||
If :guilabel:`Refuse` is clicked, a pop-up window appears. Enter a brief explanation for the refusal
|
||||
in the :guilabel:`Reason to Refuse Expense` field, and then click :guilabel:`Refuse`.
|
||||
|
||||
.. image:: expenses/refuse-expense.png
|
||||
:align: center
|
||||
:alt: Send messages in the chatter.
|
||||
|
||||
Team managers can easily view all the expense reports for their team members. While in the
|
||||
:guilabel:`Expense Reports` view, click the drop-down arrow in the right-side of the search box, and
|
||||
click on :guilabel:`My Team` in the :guilabel:`Filters` section. This presents all the reports for
|
||||
the manager's team.
|
||||
|
||||
.. image:: expenses/my-team-filter.png
|
||||
:align: center
|
||||
:alt: Select the My Team filter.
|
||||
|
||||
.. tip::
|
||||
If more information is needed, such as a missing receipt, communication is easy from the chatter.
|
||||
In an individual report, simply click :guilabel:`Send message` to open the message text box. Type
|
||||
in a message, tagging the proper person (if needed), and post it to the chatter by clicking
|
||||
:guilabel:`Send`. The message is posted in the chatter, and the person tagged will be notified
|
||||
via email of the message, as well as any followers.
|
||||
|
||||
The only people that can be tagged in a message are *followers*. To see who is a follower, click
|
||||
on the :guilabel:`👤 (person)` icon to display the followers of the expense.
|
||||
|
||||
.. image:: expenses/chatter.png
|
||||
:align: center
|
||||
:alt: Send messages in the chatter.
|
||||
|
||||
.. _expenses/post:
|
||||
|
||||
Post expenses in accounting
|
||||
===========================
|
||||
|
||||
Once an expense report is approved, the next step is to post the report to the accounting journal.
|
||||
To view all expense reports, go to :menuselection:`Expenses app --> Expense Reports`. To view only the
|
||||
expense reports that have been approved and need to be posted, adjust the filters on the left side
|
||||
so that only the :guilabel:`Approved` status is enabled.
|
||||
|
||||
.. image:: expenses/post-reports.png
|
||||
:align: center
|
||||
:alt: View reports to post by clicking on expense reports, then reports to post.
|
||||
|
||||
Just like approvals, expense reports can be posted in two ways (individually or several at once). To
|
||||
post multiple expense reports at once, remain in the list view. First, select the reports to post by
|
||||
clicking the check box next to each report, or click the box next to :guilabel:`Employee` to select
|
||||
all the reports in the list. Next, click :guilabel:`Post Entries`.
|
||||
|
||||
.. image:: expenses/post-entries.png
|
||||
:align: center
|
||||
:alt: Post multiple reports at a time from the Expense Reports view, with the Approved filter.
|
||||
|
||||
To post an individual report, click on a report to go to the detailed view of that report. In this
|
||||
view, several options are presented: :guilabel:`Post Journal Entries`, :guilabel:`Report In Next
|
||||
Payslip`, :guilabel:`Refuse`, or :guilabel:`Reset to Draft`. Click :guilabel:`Post Journal Entries`
|
||||
to post the report.
|
||||
|
||||
If :guilabel:`Refuse` is clicked, a pop-up window appears. Enter a brief explanation for the refusal
|
||||
in the :guilabel:`Reason to Refuse Expense` field, and then click :guilabel:`Refuse`. Refused
|
||||
reports can be viewed by going to :menuselection:`Expenses app --> Expense Reports`, then adjusting
|
||||
the filters on the left so that only :guilabel:`Refused` is selected. This will only show the
|
||||
refused expense reports.
|
||||
|
||||
.. important::
|
||||
To post expense reports to an accounting journal, the user must have following access rights:
|
||||
|
||||
- Accounting: Accountant or Adviser
|
||||
- Expenses: Manager
|
||||
|
||||
.. _expenses/reimburse:
|
||||
|
||||
Reimburse employees
|
||||
===================
|
||||
|
||||
After an expense report is posted to an accounting journal, the next step is to reimburse the
|
||||
employee. To view all the expense reports to pay, go to :menuselection:`Expenses app --> Expense
|
||||
Reports --> Reports To Pay`.
|
||||
|
||||
.. image:: expenses/reports-to-pay.png
|
||||
:align: center
|
||||
:alt: View reports to pay by clicking on expense reports, then reports to pay.
|
||||
|
||||
Just like approvals and posting, expense reports can be paid in two ways (individually or several at
|
||||
once). To pay multiple expense reports at once, remain in the list view. First, select the reports
|
||||
to pay by clicking the check box next to each report, or click the box next to :guilabel:`Employee`
|
||||
to select all the reports in the list. Next, click :guilabel:`Register Payment`.
|
||||
|
||||
.. image:: expenses/register-payment.png
|
||||
:align: center
|
||||
:alt: Post multiple reports by selecting them, clicking the gear, and then post the entries.
|
||||
|
||||
To pay an individual report, click on a report to go to a detailed view of that report. Click
|
||||
:guilabel:`Register Payment` to pay the employee.
|
||||
|
||||
A :guilabel:`Register Payment` pop-up appears, and the :guilabel:`Journal`, :guilabel:`Payment
|
||||
Method`, and :guilabel:`Payment Date` can be modified, if needed. When the selections are correct,
|
||||
click :guilabel:`Create Payment` to send the payment to the employee.
|
||||
|
||||
To pay an individual report, click on a report in the list view to go to a detailed view of that
|
||||
report. Click :guilabel:`Register Payment` to pay the employee. A :guilabel:`Register Payment`
|
||||
pop-up appears, but when paying an individual expense report instead of several at once, more
|
||||
options appear in the pop-up. In addition to the :guilabel:`Journal`, :guilabel:`Payment Method`,
|
||||
and :guilabel:`Payment Date` fields, a :guilabel:`Recipient Bank Account`, :guilabel:`Amount`, and
|
||||
:guilabel:`Memo` field appear. Select the employee's bank account from the drop-down menu to
|
||||
directly deposit the payment to their account. When all other selections are correct, click
|
||||
:guilabel:`Create Payment` to send the payment to the employee.
|
||||
|
||||
.. image:: expenses/two-payment-posting-options.png
|
||||
:align: center
|
||||
:alt: Different options appear when registering an individual expense report versus multiple
|
||||
expense reports at once.
|
||||
|
||||
Re-invoice expenses to customers
|
||||
================================
|
||||
|
||||
If expenses are tracked on customer projects, expenses can be automatically charged back to the
|
||||
customer. This is done by creating an expense, referencing the :abbr:`SO (Sales Order)` the expense
|
||||
should be added to, and then creating the expense report. Next, managers approve the expense report,
|
||||
and the accounting department posts the journal entries. Finally, once the expense report is posted
|
||||
to a journal, the expense(s) appears on the :abbr:`SO (Sales Order)` that was referenced. The sales
|
||||
order can then be invoiced, thus invoicing the customer for the expense.
|
||||
|
||||
Setup
|
||||
-----
|
||||
|
||||
First, specify the invoicing policy for each expense category. Go to :menuselection:`Expenses app
|
||||
--> Configuration --> Expense Categories`. Click on the expense category to open the expense
|
||||
category form. Under the :guilabel:`Invoicing` section, click the radio button next to the desired
|
||||
selection for :guilabel:`Re-Invoicing Expenses`. Options are :guilabel:`None`, :guilabel:`At cost`,
|
||||
and :guilabel:`Sales price`.
|
||||
|
||||
:guilabel:`Re-Invoicing Expenses`:
|
||||
|
||||
- :guilabel:`None`: Expense category will not be re-invoiced.
|
||||
- :guilabel:`At cost`: Expense category will invoice expenses at their real cost.
|
||||
- :guilabel:`At sales price`: Expense category will invoice the price set on the sale order.
|
||||
|
||||
Create an expense
|
||||
-----------------
|
||||
|
||||
First, when :ref:`creating a new expense <expenses/new>`, the correct information needs to be
|
||||
entered in order to re-invoice a customer. Select the *sales order* the expense will appear on in
|
||||
the :guilabel:`Customer to Reinvoice` section, from the drop-down menu. Next, select the
|
||||
:guilabel:`Analytic Account` the expense will be posted to. After the expense(s) are created, the
|
||||
expense report needs to be :ref:`created <expenses/report>` and :ref:`submitted <expenses/submit>`
|
||||
as usual.
|
||||
|
||||
.. image:: expenses/reinvoice-expense.png
|
||||
:align: center
|
||||
:alt: Ensure the customer to be invoiced is called out on the expense.
|
||||
|
||||
.. important::
|
||||
Selecting a :guilabel:`Customer to Reinvoice` when creating an expense is critical, since this is
|
||||
what causes the expenses to be automatically invoiced after an expense report is approved.
|
||||
|
||||
The :guilabel:`Customer to Reinvoice` field can be modified *until an expense report is*
|
||||
**approved**, then the field is no longer able to be modified.
|
||||
|
||||
Validate and post expenses
|
||||
--------------------------
|
||||
|
||||
Only employees with permissions (typically managers or supervisors) can :ref:`approve expenses
|
||||
<expenses/approve>`. Before approving an expense report, ensure the :guilabel:`Analytic
|
||||
Distribution` is set on every expense line of a report. If an :guilabel:`Analytic Distribution` is
|
||||
missing, assign the correct account(s) from the drop-down menu, and then click :guilabel:`Approve`
|
||||
or :guilabel:`Refuse`.
|
||||
|
||||
The accounting department is typically responsible for :ref:`posting journal entries
|
||||
<expenses/post>`. Once an expense report is approved, it can then be posted. The :abbr:`SO (Sales
|
||||
Order)` is **only** updated *after the journal entries are posted*. One the journal entries are
|
||||
posted, the expenses now appear on the referenced :abbr:`SO (Sales Order)`.
|
||||
|
||||
Invoice expenses
|
||||
----------------
|
||||
|
||||
Once the :abbr:`SO (Sales Order)` has been updated, it is time to invoice the customer. After the
|
||||
expense report has been approved and the journal entries have been posted, click the
|
||||
:guilabel:`Sales Orders` smart button to open the :abbr:`SO (Sales Order)`. The expenses to be
|
||||
re-invoiced are now on the :abbr:`SO (Sales Order)`.
|
||||
|
||||
.. image:: expenses/sales-order.png
|
||||
:align: center
|
||||
:alt: After the expense report is posted to the journal entry, the sales order can be called up
|
||||
by clicking on the sales order number.
|
||||
|
||||
.. note::
|
||||
More than one :abbr:`SO (Sales Order)` can be referenced on an expense report. If more than one
|
||||
:abbr:`SO (Sales Order)` is referenced, the :guilabel:`Sales Orders` smart button will list the
|
||||
number of :abbr:`SO (Sales Order)`'s. If multiple :abbr:`SO (Sales Order)`'s are listed, the
|
||||
:guilabel:`Sales Orders` smart button opens a list view of all the :abbr:`SO (Sales Order)`'s on
|
||||
the expense report. Click on a :abbr:`SO (Sales Order)` to open the individual :abbr:`SO (Sales
|
||||
Order)`.
|
||||
|
||||
The expenses are listed in the :abbr:`SO (Sales Order)` :guilabel:`Order Lines` tab.
|
||||
|
||||
.. image:: expenses/so-details.png
|
||||
:align: center
|
||||
:alt: See the expenses listed on the sales order after clicking into it.
|
||||
|
||||
Next, click :guilabel:`Create Invoice`, and select if the invoice is for a :guilabel:`Regular
|
||||
invoice`, a :guilabel:`Down payment (percentage)`, or a :guilabel:`Down payment (fixed amount)` by
|
||||
clicking the radio button next to it. Then, click :guilabel:`Create Invoice`. The customer has now
|
||||
been invoiced for the expenses.
|
||||
.. seealso::
|
||||
- :doc:`expenses/log_expenses`
|
||||
- :doc:`expenses/expense_reports`
|
||||
- :doc:`expenses/post_expenses`
|
||||
- :doc:`expenses/reimburse`
|
||||
- :doc:`expenses/reinvoice_expenses`
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
|
||||
expenses/approve_expenses
|
||||
expenses/log_expenses
|
||||
expenses/expense_reports
|
||||
expenses/post_expenses
|
||||
expenses/reimburse
|
||||
expenses/reinvoice_expenses
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
================
|
||||
Approve expenses
|
||||
================
|
||||
|
||||
In Odoo, not just anyone can approve expense reports, only users with the necessary rights (or
|
||||
permissions) can. This means that a user **must** have at least *Team Approver* rights for the
|
||||
*Expenses* app. Employees with the necessary rights can review expense reports, approve or reject
|
||||
them, and provide feedback thanks to the integrated communication tool.
|
||||
|
||||
Please refer to the :doc:`access rights documentation </applications/general/users>` to learn more
|
||||
about managing users and their access rights.
|
||||
|
||||
View expense reports
|
||||
====================
|
||||
|
||||
Users who are able to approve expense reports, typically managers, can easily view all expense
|
||||
reports they have access rights to. Go to :menuselection:`Expenses app --> Expense Reports`, to view
|
||||
the :guilabel:`All Reports` dashboard.
|
||||
|
||||
A list of all expense reports with a status of either :guilabel:`To Submit`, :guilabel:`Submitted`,
|
||||
:guilabel:`Approved`, :guilabel:`Posted`, or :guilabel:`Done` appears. Expense reports with a status
|
||||
of :guilabel:`Refused` are hidden, by default.
|
||||
|
||||
.. image:: approve_expenses/expense-reports-list.png
|
||||
:align: center
|
||||
:alt: Reports to validate are found on the Reports to Approve page.
|
||||
|
||||
Approve expense reports
|
||||
=======================
|
||||
|
||||
Expense reports can be approved in two ways: :ref:`individually <expenses/individual>` or :ref:`in
|
||||
bulk <expenses/multiple>`.
|
||||
|
||||
.. important::
|
||||
Only reports with a status of :guilabel:`Submitted` can be approved.
|
||||
|
||||
It is recommended to display only :guilabel:`Submitted` reports by ticking the checkbox beside
|
||||
the :guilabel:`Submitted` filter, in the left column, under the :guilabel:`Status` section.
|
||||
|
||||
If a report is **not** able to be approved, the :guilabel:`Approve Report` button **does not**
|
||||
appear on the :guilabel:`All Reports` page.
|
||||
|
||||
.. _expenses/individual:
|
||||
|
||||
Approve individual reports
|
||||
--------------------------
|
||||
|
||||
To approve an individual report, navigate to :menuselection:`Expenses app --> Expense Reports`, and
|
||||
click on an individual report to view the report form.
|
||||
|
||||
From here, several options are presented: :guilabel:`Approve`, :guilabel:`Refuse`, and
|
||||
:guilabel:`Reset to draft`.
|
||||
|
||||
Click :guilabel:`Approve` to approve the report.
|
||||
|
||||
.. _expenses/multiple:
|
||||
|
||||
Approve multiple reports
|
||||
------------------------
|
||||
|
||||
To approve multiple expense reports at once, first navigate to :menuselection:`Expenses app -->
|
||||
Expense Reports` to view a list of expense reports. Next, select the reports to approve by ticking
|
||||
the checkbox next to each report being approved, or tick the checkbox next to the
|
||||
:guilabel:`Employee` column title to select all the reports in the list.
|
||||
|
||||
Next, click the :guilabel:`Approve Report` button.
|
||||
|
||||
.. image:: approve_expenses/approve-report.png
|
||||
:align: center
|
||||
:alt: Approve multiple reports by clicking the checkboxes next to each report.
|
||||
|
||||
.. tip::
|
||||
It is possible for team managers to view all the expense reports for just their team members.
|
||||
|
||||
To do so, while on the :guilabel:`All Reports` page, click the :icon:`fa-caret-down`
|
||||
:guilabel:`(down arrow)` to the right of the search bar, then click :guilabel:`My Team` in the
|
||||
:icon:`fa-filter` :guilabel:`Filters` section.
|
||||
|
||||
This presents all the reports for only the manager's team.
|
||||
|
||||
.. image:: approve_expenses/my-team-filter.png
|
||||
:align: center
|
||||
:alt: Select the My Team filter.
|
||||
|
||||
Refuse expense reports
|
||||
======================
|
||||
|
||||
Expense reports can **only** be refused on the individual expense report, and **not** from the
|
||||
:guilabel:`All Reports` dashboard. To open an individual expense report, navigate to
|
||||
:menuselection:`Expenses app --> Expense Reports`, then click on an individual expense report to
|
||||
view the report form.
|
||||
|
||||
If more information is needed, such as a missing receipt, communicate any necessary information
|
||||
requests in the *chatter* of the report form. On the individual expense report, click
|
||||
:guilabel:`Send message` to open a message text box.
|
||||
|
||||
Type in a message, tagging the proper people, and post it to the *chatter* by clicking
|
||||
:guilabel:`Send`. The message is posted in the chatter, and the tagged people are notified, via
|
||||
email.
|
||||
|
||||
.. note::
|
||||
The only people that can be tagged in a message are *followers* of the specific report. To see
|
||||
who is a follower, click the :icon:`fa-user-o` :guilabel:`(user)` icon to display the followers
|
||||
of the expense report.
|
||||
|
||||
.. image:: approve_expenses/chatter.png
|
||||
:align: center
|
||||
:alt: Send messages in the chatter.
|
||||
|
||||
To refuse an expense report, click :guilabel:`Refuse`, and a :guilabel:`Refuse Expense` pop-up
|
||||
window appears. Enter a brief explanation for the refusal beneath the :guilabel:`REASON TO REFUSE
|
||||
EXPENSE` field, then click :guilabel:`Refuse`.
|
||||
|
||||
.. image:: approve_expenses/refuse-expense.png
|
||||
:align: center
|
||||
:alt: Send messages in the chatter.
|
||||
|
||||
Once the expense report is refused, the status changes to :guilabel:`Refused`, and the only button
|
||||
that appears in the top-left is :guilabel:`Reset to Draft`.
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,129 @@
|
||||
===============
|
||||
Expense reports
|
||||
===============
|
||||
|
||||
When expenses are ready to submit (such as, at the end of a business trip, or once a month), an
|
||||
*expense report* needs to be created. Open the main :menuselection:`Expenses app` dashboard, which
|
||||
displays the :guilabel:`My Expenses` dashboard, by default. Alternatively, navigate to
|
||||
:menuselection:`Expenses app --> My Expenses --> My Expenses`.
|
||||
|
||||
Expenses are color-coded by status. Any expense with a status of :guilabel:`To Report` (expenses
|
||||
that still need to be added to an expense report) is shown in blue text. All other statuses
|
||||
(:guilabel:`To Submit`, :guilabel:`Submitted`, and :guilabel:`Approved`) the text appears in black.
|
||||
|
||||
.. _expenses/create_report:
|
||||
|
||||
Create expense reports
|
||||
======================
|
||||
|
||||
First, select each desired expense to be added to the report on the :guilabel:`My Expenses`
|
||||
dashboard, by ticking the checkbox next to each entry, or quickly select all the expenses in the
|
||||
list by ticking the checkbox next to the :guilabel:`Expense Date` column title, if needed.
|
||||
|
||||
Another way to quickly add all expenses that are not on a expense report, is to click the
|
||||
:guilabel:`Create Report` button, *without* selecting any expenses, and Odoo automatically selects
|
||||
all expenses with a status of :guilabel:`To Submit` that are not already on a report.
|
||||
|
||||
.. image:: expense_reports/create-report.png
|
||||
:align: center
|
||||
:alt: Select the expenses to submit, then create the report.
|
||||
|
||||
.. note::
|
||||
Any expense can be selected from the :guilabel:`My Expenses` list, except for expenses with a
|
||||
status of :guilabel:`Approved`.
|
||||
|
||||
The :guilabel:`Create Report` button is visible as long as there is a minimum of one expense on
|
||||
the list with a status of either :guilabel:`To Report` or :guilabel:`To Submit`.
|
||||
|
||||
When the :guilabel:`Create Report` button is clicked, all expenses with a status of :guilabel:`To
|
||||
Submit` that are *not* currently on another expense report appears in the newly-created expense
|
||||
report.
|
||||
|
||||
If all expenses on the :guilabel:`My Expenses` report are already associated with another expense
|
||||
report, an :guilabel:`Invalid Operation` pop-up window appears, stating :guilabel:`You have no
|
||||
expenses to report.`
|
||||
|
||||
Once the expenses have been selected, click the :guilabel:`Create Report` button. The new report
|
||||
appears with all the expenses listed in the :guilabel:`Expense` tab. If there is a receipt attached
|
||||
to an individual expense, a :icon:`fa-paperclip` :guilabel:`(paperclip)` icon appears between the
|
||||
:guilabel:`Customer to Reinvoice` and :guilabel:`Analytic Distribution` columns.
|
||||
|
||||
When the report is created, the date range for the expenses appears in the :guilabel:`Expense Report
|
||||
Summary` field, by default. It is recommended to edit this field with a short summary for each
|
||||
report to help keep expenses organized. Enter a description for the expense report, such as `Client
|
||||
Trip NYC`, or `Office Supplies for Presentation`, in the :guilabel:`Expense Report Summary` field.
|
||||
|
||||
The :guilabel:`Employee`, :guilabel:`Paid By`, and :guilabel:`Company` fields autopoulate with the
|
||||
information listed on the individual expenses.
|
||||
|
||||
Next, select a :guilabel:`Manager` from the drop-down menu to assign a manager to review the report.
|
||||
If needed, update the :guilabel:`Journal` field, using the drop-down menu.
|
||||
|
||||
.. image:: expense_reports/expense-report-summary.png
|
||||
:align: center
|
||||
:alt: Enter a short description and select a manager for the report.
|
||||
|
||||
If some expenses are missing from the report, they can still be added from this report form. To do
|
||||
so, click :guilabel:`Add a line` at the bottom of the :guilabel:`Expense` tab.
|
||||
|
||||
An :guilabel:`Add: Expense Lines` pop-up window appears, displaying all the available expenses (with
|
||||
a :guilabel:`To Submit` status) that can be added to the report.
|
||||
|
||||
If a new expense needs to be added that does **not** appear on the list, click :guilabel:`New` to
|
||||
:doc:`create a new expense <../expenses/log_expenses>` and add it to the report.
|
||||
|
||||
Tick the checkbox next to each expense being added, then click :guilabel:`Select`.
|
||||
|
||||
Doing so removes the pop-up window, and the items now appear on the report.
|
||||
|
||||
.. image:: expense_reports/add-an-expense-line.png
|
||||
:align: center
|
||||
:alt: Add more expenses to the report before submitting.
|
||||
|
||||
.. note::
|
||||
Expense reports can be created in one of three places:
|
||||
|
||||
#. Navigate to the main :menuselection:`Expenses app` dashboard (also accessible, via
|
||||
:menuselection:`Expenses app --> My Expenses --> My Expenses`)
|
||||
#. Navigate to :menuselection:`Expenses app --> My Expenses --> My Reports`
|
||||
#. Navigate to :menuselection:`Expenses app --> Expense Reports`
|
||||
|
||||
In any of these views, click :guilabel:`New` to create a new expense report.
|
||||
|
||||
.. _expenses/submit:
|
||||
|
||||
Submit expense reports
|
||||
======================
|
||||
|
||||
When an expense report is completed, the next step is to submit the report to a manager for
|
||||
approval. To view all expense reports, navigate to :menuselection:`Expenses app --> My Expenses -->
|
||||
My Reports`. Open the specific report from the list of expense reports.
|
||||
|
||||
.. note::
|
||||
Reports must be individually submitted, and **cannot** be submitted in batches.
|
||||
|
||||
If the list is large, grouping the results by status may be helpful, since only reports with a
|
||||
:guilabel:`To Submit` status need to be submitted; reports with an :guilabel:`Approved` or
|
||||
:guilabel:`Submitted` status do not.
|
||||
|
||||
The :guilabel:`To Submit` expenses are identifiable by the :guilabel:`To Submit` status, and by the
|
||||
blue text, while all other expense text appears in black.
|
||||
|
||||
.. image:: expense_reports/expense-status.png
|
||||
:align: center
|
||||
:alt: Submit the report to the manager.
|
||||
|
||||
.. note::
|
||||
The status of each report is shown in the :guilabel:`Status` column. If the :guilabel:`Status`
|
||||
column is not visible, click the :icon:`oi-settings-adjust` :guilabel:`(additional options)` icon
|
||||
at the end of the row, and tick the checkbox beside :guilabel:`Status` from the resulting
|
||||
drop-down menu.
|
||||
|
||||
Click on a report to open it, then click :guilabel:`Submit To Manager`. After submitting a report,
|
||||
the next step is to wait for the manager to approve it.
|
||||
|
||||
.. important::
|
||||
:doc:`Approving <../expenses/approve_expenses>` expenses, :doc:`posting
|
||||
<../expenses/post_expenses>` expenses, and :doc:`reimbursing <../expenses/reimburse>` expenses
|
||||
are **only** for users with the appropriate :doc:`access rights documentation
|
||||
</applications/general/users>`.
|
||||
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 29 KiB |
@@ -0,0 +1,230 @@
|
||||
============
|
||||
Log expenses
|
||||
============
|
||||
|
||||
Before expenses can be reimbursed, each individual expense needs to be logged in the database.
|
||||
Expense records can be created in three different ways: :ref:`manually enter an expense record
|
||||
<expenses/manual_expense>`, :ref:`upload a receipt <expenses/upload_receipt>`, or :ref:`email a
|
||||
receipt <expenses/email_expense>` to a preconfigured email address.
|
||||
|
||||
.. _expenses/manual_expense:
|
||||
|
||||
Manually enter expenses
|
||||
=======================
|
||||
|
||||
To record a new expense, open the :menuselection:`Expenses app`, which displays the :guilabel:`My
|
||||
Expenses` page, by default.
|
||||
|
||||
.. tip::
|
||||
This view can also be accessed from :menuselection:`Expenses app --> My Expenses --> My
|
||||
Expenses`.
|
||||
|
||||
Then, click :guilabel:`New`, and then fill out the following fields on the form that appears:
|
||||
|
||||
- :guilabel:`Description`: Enter a short description for the expense. This should be concise and
|
||||
informative, such as `lunch with client` or `hotel for conference`.
|
||||
- :guilabel:`Category`: Select the expense category from the drop-down menu that most closely
|
||||
corresponds to the expense.
|
||||
- :guilabel:`Total`: Enter the total amount paid for the expense in one of two ways:
|
||||
|
||||
#. If the expense is for a single item/expense, and the category selected was for a single item,
|
||||
enter the cost in the :guilabel:`Total` field (the :guilabel:`Quantity` field is hidden).
|
||||
#. If the expense is for multiples of the same item/expense with a fixed price, the
|
||||
:guilabel:`Unit Price` is displayed. Enter the quantity in the :guilabel:`Quantity` field, and
|
||||
the total cost is automatically updated with the correct total. The total cost appears below
|
||||
the :guilabel:`Quantity`.
|
||||
|
||||
.. example::
|
||||
In the case of mileage driven, the :guilabel:`Unit Price` is populated as the cost *per
|
||||
mile*. Set the :guilabel:`Quantity` to the *number of miles driven*, and the total is
|
||||
calculated.
|
||||
|
||||
- :guilabel:`Included Taxes`: If taxes were configured on the expense category, the tax percentage
|
||||
and amount appear automatically after entering either the :guilabel:`Total` or the
|
||||
:guilabel:`Quantity`.
|
||||
|
||||
.. note::
|
||||
When a tax is configured on an expense category, the :guilabel:`Included Taxes` value updates
|
||||
in real time, as the :guilabel:`Total` or :guilabel:`Quantity` is updated.
|
||||
|
||||
- :guilabel:`Employee`: Using the drop-down menu, select the employee this expense is for.
|
||||
- :guilabel:`Paid By`: Click the radio button to indicate who paid for the expense, and should be
|
||||
reimbursed. Select either :guilabel:`Employee (to reimburse)` or :guilabel:`Company`. Depending on
|
||||
the expense category selected, this field may not appear.
|
||||
- :guilabel:`Expense Date`: Using the calendar popover window that appears when this field is
|
||||
clicked, enter the date the expense was incurred.
|
||||
- :guilabel:`Account`: Using the drop-down menu, select the expense account the expense should be
|
||||
logged in.
|
||||
- :guilabel:`Customer to Reinvoice`: If the expense is something that should be paid for by a
|
||||
customer, select the :abbr:`SO (Sales Order)` and customer that should be invoiced for this
|
||||
expense from the drop-down menu. All sales orders in the drop-down menu list both the :abbr:`SO
|
||||
(Sales Order)`, as well as the company the sales order is written for. After the expense is saved,
|
||||
the customer name disappears, and only the :abbr:`SO (Sales Order)` is visible on the expense.
|
||||
|
||||
.. example::
|
||||
A customer wishes to have an on-site meeting for the design and installation of a custom
|
||||
garden, and agrees to pay for the expenses associated with it (such as travel, hotel, meals,
|
||||
etc). All expenses tied to that meeting would indicate the sales order for the custom garden
|
||||
(which also references the customer) as the :guilabel:`Customer to Reinvoice`.
|
||||
|
||||
- :guilabel:`Analytic Distribution`: Select the account the expense should be written against from
|
||||
the drop-down menu for either :guilabel:`Projects`, :guilabel:`Departments`, or both. Multiple
|
||||
accounts can be listed for each category, if needed. Adjust the percentage for each analytic
|
||||
account by typing in the percentage value next to each account.
|
||||
- :guilabel:`Company`: If multiple companies are set up, select the company the expense should be
|
||||
filed for from the drop-down menu. The current company automatically populates this field.
|
||||
- :guilabel:`Notes...`: If any notes are needed to clarify the expense, enter them in the notes
|
||||
field.
|
||||
|
||||
.. image:: log_expenses/expense-filled-in.png
|
||||
:align: center
|
||||
:alt: A filled in expense form for a client lunch.
|
||||
|
||||
Attach receipts
|
||||
---------------
|
||||
|
||||
After the expense record is created, the next step is to attach a receipt. Click the
|
||||
:guilabel:`Attach Receipt` button, and a file explorer appears. Navigate to the receipt to be
|
||||
attached, and click :guilabel:`Open`.
|
||||
|
||||
The new receipt is recorded in the *chatter*, and the number of receipts appears next to the
|
||||
:icon:`fa-paperclip` :guilabel:`(paperclip)` icon. Multiple receipts can be attached to an
|
||||
individual expense record, as needed.
|
||||
|
||||
.. image:: log_expenses/receipt-icon.png
|
||||
:align: center
|
||||
:alt: Attach a receipt and it appears in the chatter.
|
||||
|
||||
.. _expenses/upload_receipt:
|
||||
|
||||
Upload expenses
|
||||
===============
|
||||
|
||||
It is possible to have expense records created automatically, by uploading a PDF receipt. This
|
||||
feature requires the enabling of a setting, and the purchasing of :abbr:`IAP (in-app purchases)`
|
||||
credits.
|
||||
|
||||
Digitalization settings
|
||||
-----------------------
|
||||
|
||||
To enable receipt scanning, navigate to :menuselection:`Expenses app --> Configuration -->
|
||||
Settings`, and tick the checkbox beside the :guilabel:`Expense Digitization (OCR)` option. Then,
|
||||
click :guilabel:`Save`. When enabled, additional options appear. Click on the corresponding radio
|
||||
button to select one of the following options:
|
||||
|
||||
- :guilabel:`Do not digitize`: turns off receipt digitization.
|
||||
- :guilabel:`Digitize on demand only`: only digitizes receipts when requested. A
|
||||
:guilabel:`Digitize document` button appears on expense records. When clicked, the receipt is
|
||||
scanned and the expense record is updated.
|
||||
- :guilabel:`Digitize automatically`: automatically digitizes all receipts when they are uploaded.
|
||||
|
||||
Beneath these options are two additional links. Click the :icon:`fa-arrow-right` :guilabel:`Buy
|
||||
credits` link to purchase credits for receipt digitization. Click the :icon:`fa-arrow-right`
|
||||
:guilabel:`View My Services` link to view a list of all current services, and their remaining credit
|
||||
balances.
|
||||
|
||||
For more information on document digitization and :abbr:`IAPs (in-app purchases)`, refer to the
|
||||
:doc:`In-app purchase (IAP) <../../essentials/in_app_purchase>` documentation.
|
||||
|
||||
.. note::
|
||||
When the :guilabel:`Expense Digitization (OCR)` option is enabled, a necessary module is
|
||||
installed, so receipts can be scanned. Disabling this option uninstalls the module.
|
||||
|
||||
If, at some point, there is a desire to temporarily stop digitizing receipts, select the
|
||||
:guilabel:`Do not digitize` option. The reason this option is available is so the module is not
|
||||
uninstalled, allowing for digitization to be enabled in the future by selecting one of the other
|
||||
two options.
|
||||
|
||||
Upload receipts
|
||||
---------------
|
||||
|
||||
Open the :guilabel:`Expenses app`, and from the :guilabel:`My Expenses` dashboard, click
|
||||
:guilabel:`Upload`, and a file explorer appears. Navigate to the desired receipt, select it, then
|
||||
click :guilabel:`Open`.
|
||||
|
||||
.. image:: log_expenses/upload.png
|
||||
:align: center
|
||||
:alt: Create an expense by scanning a receipt. Click Scan at the top of the Expenses dashboard
|
||||
view.
|
||||
|
||||
The receipt is scanned, and a new expense record is created. The :guilabel:`Expense Date` field is
|
||||
populated with today's date, along with any other fields based on the scanned data, such as the
|
||||
:guilabel:`Total`.
|
||||
|
||||
Click on the new entry to open the individual expense form, and make any changes, if needed. The
|
||||
scanned receipt appears in the *chatter*.
|
||||
|
||||
.. _expenses/email_expense:
|
||||
|
||||
Email expenses
|
||||
==============
|
||||
|
||||
Instead of individually creating each expense in the **Expenses** app, expenses can be automatically
|
||||
created by sending an email to an email alias.
|
||||
|
||||
To do so, an email alias must first be configured. Navigate to :menuselection:`Expenses app -->
|
||||
Configuration --> Settings`. Ensure the checkbox beside :guilabel:`Incoming Emails` is ticked. The
|
||||
default email alias is *expense@(domain).com*. Change the email alias by entering the desired email
|
||||
in the field to the right of :guilabel:`Alias`. Then, click :guilabel:`Save`.
|
||||
|
||||
.. image:: log_expenses/alias-email.png
|
||||
:align: center
|
||||
:alt: Te default email that populates the expenses email alias.
|
||||
|
||||
.. note::
|
||||
If the domain alias needs to be set up, :icon:`fa-arrow-right` :guilabel:`Setup your domain
|
||||
alias` appears beneath the :guilabel:`Incoming Emails` checkbox, instead of the email address
|
||||
field.
|
||||
|
||||
.. image:: log_expenses/email-alias.png
|
||||
:align: center
|
||||
:alt: Create the domain alias by clicking the link.
|
||||
|
||||
Refer to the :doc:`/applications/websites/website/configuration/domain_names` documentation for
|
||||
setup instructions and more information.
|
||||
|
||||
Once the domain alias is configured, the email address field is visible beneath the
|
||||
:guilabel:`Incoming Emails` feature on the :guilabel:`Settings` page in the **Expenses** app.
|
||||
|
||||
Once the email address has been entered, emails can be sent to that alias to create new expenses,
|
||||
without having to be in the Odoo database.
|
||||
|
||||
To submit an expense via email, create a new email, and enter the product's *internal reference*
|
||||
code (if available) and the amount of the expense as the subject of the email. Next, attach the
|
||||
receipt to the email. Odoo creates the expense by taking the information in the email subject, and
|
||||
combining it with the receipt.
|
||||
|
||||
To check an expense category's internal reference, go to :menuselection:`Expenses app -->
|
||||
Configuration --> Expense Categories`. If an internal reference is listed on the expense category,
|
||||
it is listed in the :guilabel:`Internal Reference` column.
|
||||
|
||||
.. image:: log_expenses/ref.png
|
||||
:align: center
|
||||
:alt: Internal reference numbers are listed in the main Expense Categories view.
|
||||
|
||||
To add an internal reference on an expense category, click on the category to open the expense
|
||||
category form. Enter the :guilabel:`Internal Reference` in the corresponding field. Beneath the
|
||||
:guilabel:`Internal Reference` field, this sentence appears: :guilabel:`Use this reference as a
|
||||
subject prefix when submitting by email.`
|
||||
|
||||
.. image:: log_expenses/mileage-internal-reference.png
|
||||
:align: center
|
||||
:alt: Internal reference numbers are listed in the main Expense Products view.
|
||||
|
||||
.. example::
|
||||
If submitting an expense, via email, for a $25.00 meal during a work trip, the email subject
|
||||
would be `FOOD $25.00`.
|
||||
|
||||
Explanation:
|
||||
|
||||
- The :guilabel:`Internal Reference` for the expense category `Meals` is `FOOD`
|
||||
- The :guilabel:`Cost` for the expense is `$25.00`
|
||||
|
||||
.. note::
|
||||
For security purposes, only authenticated employee emails are accepted by Odoo when creating an
|
||||
expense from an email. To confirm an authenticated employee email address, go to the employee
|
||||
card in the :menuselection:`Employees app`, and refer to the :guilabel:`Work Email` field.
|
||||
|
||||
.. image:: log_expenses/authenticated-email-address.png
|
||||
:align: center
|
||||
:alt: Create the domain alias by clicking the link.
|
||||
|
After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,75 @@
|
||||
=============
|
||||
Post expenses
|
||||
=============
|
||||
|
||||
Once an expense report is :doc:`approved <../expenses/approve_expenses>`, the next step is to post
|
||||
the expense report to the proper accounting journal.
|
||||
|
||||
.. important::
|
||||
To post expense reports to an accounting journal, the user **must** have the following
|
||||
:doc:`access rights <../../general/users/access_rights>`:
|
||||
|
||||
- Accounting: *Accountant* or *Adviser*
|
||||
- Expenses: *Manager*
|
||||
|
||||
Only expense reports with an *Approved* status can post the expenses to a journal. To view all
|
||||
expense reports, navigate to :menuselection:`Expenses app --> Expense Reports`. Next, to view
|
||||
**only** approved expense reports that need to be posted, adjust the filters on the left side, so
|
||||
only the :guilabel:`Approved` checkbox is ticked.
|
||||
|
||||
.. image:: post_expenses/post-reports.png
|
||||
:align: center
|
||||
:alt: View reports to post by clicking on expense reports, then reports to post.
|
||||
|
||||
.. note::
|
||||
The default :guilabel:`All Reports` dashboard displays all expense reports, except reports with a
|
||||
status of :guilabel:`Refused`.
|
||||
|
||||
Expense reports can be posted to accounting journals in two ways: :ref:`individually
|
||||
<expenses/individual-reports>` or :ref:`in bulk <expenses/multiple-reports>`.
|
||||
|
||||
.. _expenses/individual-reports:
|
||||
|
||||
Post individual reports
|
||||
-----------------------
|
||||
|
||||
To post an individual report, navigate to :menuselection:`Expenses app --> Expense Reports`, and
|
||||
click on an individual report with a :guilabel:`Status` of :guilabel:`Approved`, to view the report
|
||||
form. In this view, several options are presented: :guilabel:`Post Journal Entries`,
|
||||
:guilabel:`Report In Next Payslip`, :guilabel:`Refuse`, or :guilabel:`Reset to Draft`.
|
||||
|
||||
Click :guilabel:`Post Journal Entries` to post the report.
|
||||
|
||||
The accounting journal the expenses are posted to is listed in the :guilabel:`Journal` field of the
|
||||
expense report.
|
||||
|
||||
After posting the expenses to an accounting journal, a :guilabel:`Journal Entry` smart button
|
||||
appears at the top of the screen. Click the :guilabel:`Journal Entry` smart button, and the details
|
||||
for the journal entry appear, with a status of :guilabel:`Posted`.
|
||||
|
||||
.. _expenses/multiple-reports:
|
||||
|
||||
Post multiple reports
|
||||
---------------------
|
||||
|
||||
To post multiple expense reports at once, navigate to :menuselection:`Expenses app --> Expense
|
||||
Reports` to view a list of expense reports. Next, select the reports to approve by ticking the
|
||||
checkbox next to each report being approved.
|
||||
|
||||
.. note::
|
||||
Only expense reports with a status of :guilabel:`Approved` are able to post the expenses to an
|
||||
accounting journal. If an expense report is selected that **cannot** be posted, such as an
|
||||
unapproved report, or the report has already been posted to a journal, the :guilabel:`Post
|
||||
Entries` button is **not** visible.
|
||||
|
||||
.. tip::
|
||||
To select **only** approved expense reports, adjust the filters on the left side, so that only
|
||||
the :guilabel:`Approved` checkbox is ticked. Next, tick the checkbox next to the
|
||||
:guilabel:`Employee` column title to select **all** the :guilabel:`Approved` reports in the list
|
||||
at once.
|
||||
|
||||
Next, click the :guilabel:`Post Entries` button.
|
||||
|
||||
.. image:: post_expenses/post-entries.png
|
||||
:align: center
|
||||
:alt: Post multiple reports at a time from the Expense Reports view, with the Approved filter.
|
||||
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 13 KiB |
@@ -0,0 +1,140 @@
|
||||
===================
|
||||
Reimburse employees
|
||||
===================
|
||||
|
||||
After an expense report is :doc:`posted to an accounting journal <../expenses/post_expenses>`, the
|
||||
next step is to reimburse the employee. Just like approving and posting expenses, employees can be
|
||||
reimbursed in two ways: with cash, check, or direct deposit (:ref:`individually
|
||||
<expenses/reimburse-single>` or :ref:`in bulk <expenses/reimburse-bulk>`), or :ref:`reimbursed in a
|
||||
payslip <expenses/reimburse-payslip>`.
|
||||
|
||||
Settings
|
||||
========
|
||||
|
||||
Reimbursements can be paid via paycheck, check, cash, or bank transfer. To set up payment options,
|
||||
first configure the various settings by navigating to :menuselection:`Expenses app -->
|
||||
Configuration --> Settings`.
|
||||
|
||||
To reimburse employees for expenses :ref:`in their paychecks <expenses/reimburse-payslip>`, tick the
|
||||
checkbox beside the :guilabel:`Reimburse in Payslip` option in the :guilabel:`Expenses` section.
|
||||
|
||||
Next, set how payments are made in the :guilabel:`Accounting` section. Click the drop-down menu
|
||||
under :guilabel:`Payment Methods`, and select the desired payment option. Default options include
|
||||
paying by :guilabel:`Manual (Cash)`, :guilabel:`Checks (Bank)`, :guilabel:`NACHA (Bank)`, and
|
||||
others. Leaving this field blank allows for **all** available payment options to be used.
|
||||
|
||||
When all desired configurations are complete, click :guilabel:`Save` to activate the settings.
|
||||
|
||||
.. _expenses/reimburse-single:
|
||||
|
||||
Reimburse individually
|
||||
======================
|
||||
|
||||
To reimburse an individual expense report, first navigate to :menuselection:`Expenses app -->
|
||||
Expense Reports`. All expense reports are presented in a default list view. Click on the expense
|
||||
report being reimbursed to view the report details.
|
||||
|
||||
.. important::
|
||||
**Only** expense reports with a status of :guilabel:`Posted` can be reimbursed.
|
||||
|
||||
Click the :guilabel:`Register Payment` button in the top-left corner of the expense report, and a
|
||||
:guilabel:`Register Payment` pop-up window appears. Enter the following information in the pop-up
|
||||
window:
|
||||
|
||||
- :guilabel:`Journal`: Select the accounting journal to post the payment to using the drop-down
|
||||
menu. The default options are :guilabel:`Bank` or :guilabel:`Cash`.
|
||||
- :guilabel:`Payment Method`: Select how the payment is made using the drop-down menu. If
|
||||
:guilabel:`Cash` is selected for the :guilabel:`Journal`, the only option available is
|
||||
:guilabel:`Manual`. If :guilabel:`Bank` is selected for the :guilabel:`Journal`, the default
|
||||
options are :guilabel:`Manual` or :guilabel:`Checks`.
|
||||
- :guilabel:`Recipient Bank Account`: Select the employee's bank account the payment is being sent
|
||||
to. If the employee has a bank account on file in the :ref:`Private Information tab
|
||||
<employees/private-info>` of their employee form in the **Employees** app, that bank account
|
||||
populates this field, by default.
|
||||
- :guilabel:`Amount`: The total amount being reimbursed populates this field, by default. The
|
||||
currency, located to the right of the field, can be modified using the drop-down menu.
|
||||
- :guilabel:`Payment Date`: Enter the date the payments are issued in this field. The current date
|
||||
populates this field, by default.
|
||||
- :guilabel:`Memo`: The text entered in the :doc:`Expense Report Summary
|
||||
<../expenses/expense_reports>` field of the expense report populates this field, by default.
|
||||
|
||||
.. image:: reimburse/payment.png
|
||||
:align: center
|
||||
:alt: The Register Payment pop-up window filled out for an individual expense report
|
||||
reimbursement.
|
||||
|
||||
When the fields of the pop-up window are completed, click the :guilabel:`Create Payment` button to
|
||||
register the payment, and reimburse the employee.
|
||||
|
||||
.. _expenses/reimburse-bulk:
|
||||
|
||||
Reimburse in bulk
|
||||
=================
|
||||
|
||||
To reimburse multiple expense reports at once, navigate to :menuselection:`Expenses app --> Expense
|
||||
Reports` to view all expense reports in a list view. Next, adjust the :guilabel:`STATUS` filters on
|
||||
the left side to only present expense reports with a status of :guilabel:`Posted`.
|
||||
|
||||
.. tip::
|
||||
Adjusting the :guilabel:`STATUS` filters to only show :guilabel:`Posted` expense reports is not
|
||||
necessary, but removes the step of selecting each individual report in the list.
|
||||
|
||||
Tick the checkbox next to the :guilabel:`Employee` column title to select all the reports in the
|
||||
list. Once ticked, the number of selected expense reports appears at the top of the page
|
||||
(:guilabel:`(#) Selected`). Additionally, a :guilabel:`Register Payment` button also appears in the
|
||||
upper-left corner.
|
||||
|
||||
.. image:: reimburse/multiple-reports.png
|
||||
:align: center
|
||||
:alt: Expense reports filtered by the status Posted, making the Register Payment button visible.
|
||||
|
||||
Click the :guilabel:`Register Payment` button, and a :guilabel:`Register Payment` pop-up window
|
||||
appears. Enter the following information in the pop-up window:
|
||||
|
||||
- :guilabel:`Journal`: Select the accounting journal the payment should be posted to, using the
|
||||
drop-down menu. The default options are :guilabel:`Bank` or :guilabel:`Cash`.
|
||||
- :guilabel:`Payment Method`: Select how the payment is made using the drop-down menu. If
|
||||
:guilabel:`Cash` is selected for the :guilabel:`Journal`, the only option available is
|
||||
:guilabel:`Manual`. If :guilabel:`Bank` is selected for the :guilabel:`Journal`, the default
|
||||
options are :guilabel:`Manual` or :guilabel:`Checks`.
|
||||
- :guilabel:`Group Payments`: When multiple expense reports are selected for the same employee, this
|
||||
option appears. Tick the checkbox to have only one payment made, rather than issuing multiple
|
||||
payments to the same employee.
|
||||
- :guilabel:`Payment Date`: Enter the date the payments are issued. The current date populates this
|
||||
field, by default.
|
||||
|
||||
.. image:: reimburse/register.png
|
||||
:align: center
|
||||
:alt: The Register Payment pop-up window filled out.
|
||||
|
||||
When the fields on the pop-up window are completed, click the :guilabel:`Create Payments` button to
|
||||
register the payments, and reimburse the employees.
|
||||
|
||||
.. _expenses/reimburse-payslip:
|
||||
|
||||
Report in next payslip
|
||||
======================
|
||||
|
||||
If the *Reimburse in Payslip* option is activated on the *Settings* page, payments can be added to
|
||||
their next payslip, instead of issued manually.
|
||||
|
||||
.. important::
|
||||
Reimbursing expenses on payslips can **only** be done individually, on an expense report with a
|
||||
status of *Approved*. Once an expense report has a status of *Posted*, the option to reimburse in
|
||||
the following payslip does **not** appear.
|
||||
|
||||
Navigate to :menuselection:`Expenses app --> Expense Reports`, and click on the individual expense
|
||||
report being reimbursed on the following paycheck. Click the :guilabel:`Report in Next Payslip`
|
||||
smart button, and the expenses are added to the next payslip issued for that employee. Additionally,
|
||||
a message is logged in the chatter stating the expense is added to the following payslip.
|
||||
|
||||
.. image:: reimburse/pay-via-payslip.png
|
||||
:align: center
|
||||
:alt: The Report in Next Payslip button, visible with an expense report status of Approved.
|
||||
|
||||
The status for the expense report remains :guilabel:`Approved`. The status only changes to
|
||||
:guilabel:`Posted` (and then :guilabel:`Done`), when the paycheck is processed.
|
||||
|
||||
.. seealso::
|
||||
Refer to the :doc:`Payslips <../../hr/payroll/payslips>` documentation for more information about
|
||||
processing paychecks.
|
||||
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,151 @@
|
||||
===================
|
||||
Re-invoice expenses
|
||||
===================
|
||||
|
||||
If expenses are tracked on customer projects, they can be automatically charged back to the
|
||||
customer. This is done by :ref:`creating an expense <expenses/reinvoice-create>`, referencing the
|
||||
sales order the expense is added to, and then :ref:`creating an expense report
|
||||
<expenses/reinvoice-report>`.
|
||||
|
||||
Next, managers :ref:`approve the expense report <expenses/reinvoice-approve>`, before the accounting
|
||||
department :ref:`posts the journal entries <expenses/reinvoice-approve>`.
|
||||
|
||||
Finally, once the expense report is posted to a journal, the expenses appears on the specified
|
||||
:abbr:`SO (Sales Order)`. The :abbr:`SO (Sales Order)` is then :ref:`invoiced <expenses/reinvoice>`,
|
||||
thus charging the customer for the expenses.
|
||||
|
||||
.. important::
|
||||
Approving expenses, posting expenses to accounting, and reinvoicing expenses on :abbr:`SOs (Sales
|
||||
Orders)` is **only** possible for users with the appropriate :doc:`access rights
|
||||
<../../general/users/access_rights>`.
|
||||
|
||||
.. seealso::
|
||||
This document provides lower-level instructions for the creation, submission, approval, and
|
||||
posting of expenses. For fully-detailed instructions for any of these steps, refer to the
|
||||
following documentation:
|
||||
|
||||
- :doc:`Log expenses <../expenses/log_expenses>`
|
||||
- :doc:`Expense reports <../expenses/expense_reports>`
|
||||
- :doc:`Approving expenses <../expenses/approve_expenses>`
|
||||
- :doc:`Posting expenses in accounting <../expenses/post_expenses>`
|
||||
|
||||
Setup
|
||||
=====
|
||||
|
||||
First, specify the invoicing policy for each expense category. Navigate to :menuselection:`Expenses
|
||||
app --> Configuration --> Expense Categories`. Click on an expense category to view the expense
|
||||
category form. Under the :guilabel:`INVOICING` section, click the radio button next to the desired
|
||||
selection for :guilabel:`Re-Invoice Expenses`:
|
||||
|
||||
- :guilabel:`No`: The expense category cannot be re-invoiced.
|
||||
- :guilabel:`At cost`: The expense category invoices expenses at the cost set on the expense
|
||||
category form.
|
||||
- :guilabel:`Sales price`: The expense category invoices at the sales price set on the expense form.
|
||||
|
||||
.. _expenses/reinvoice-create:
|
||||
|
||||
Create an expense
|
||||
=================
|
||||
|
||||
First, when :doc:`creating a new expense <../expenses/log_expenses>`, the correct information needs
|
||||
to be entered to re-invoice the expense to a customer. Using the drop-down menu, select the
|
||||
:abbr:`SO (Sales Order)` to add the expense to in the :guilabel:`Customer to Reinvoice` field.
|
||||
|
||||
Next, select the :guilabel:`Analytic Distribution` the expense is posted to. Multiple accounts can
|
||||
be selected, if desired.
|
||||
|
||||
To add another :guilabel:`Analytic Distribution`, click on the line to reveal the
|
||||
:guilabel:`Analytic` pop-over window. Click :guilabel:`Add a line`, then select the desired
|
||||
:guilabel:`Analytic Distribution` from the drop-down field. If selecting more than one
|
||||
:guilabel:`Analytic Distribution`, the :guilabel:`Percentage` fields **must** be modified. By
|
||||
default, both fields are populated with `100%`. Adjust the percentages for all the fields, so the
|
||||
total of all selected accounts equals `100%`.
|
||||
|
||||
.. example::
|
||||
A painting company agrees to paint an office building that houses two different companies. During
|
||||
the estimate, a meeting is held at the office location to discuss the project.
|
||||
|
||||
Both companies agree to pay for the travel expenses for the painting company employees. When
|
||||
creating the expenses for the mileage and hotels, **both companies** are listed in the
|
||||
:guilabel:`Analytic Distribution` line, for 50% each.
|
||||
|
||||
.. _expenses/reinvoice-report:
|
||||
|
||||
Create an expense report
|
||||
========================
|
||||
|
||||
After the expenses are created, the expense report must be :ref:`created <expenses/create_report>`
|
||||
and :ref:`submitted <expenses/submit>`, in the same manner as all other expenses.
|
||||
|
||||
Once the expense report is submitted, a :icon:`fa-money` :guilabel:`Sales Orders` smart button
|
||||
appears at the top-center of both the expense report, and each individual expense record being
|
||||
reinvoiced.
|
||||
|
||||
.. image:: reinvoice_expenses/reinvoice-expense.png
|
||||
:align: center
|
||||
:alt: Ensure the customer to be invoiced is called out on the expense.
|
||||
|
||||
.. important::
|
||||
Selecting the proper :abbr:`SO (Sales Order)` in the :guilabel:`Customer to Reinvoice` field is
|
||||
**critical**, since this is how expenses are automatically invoiced after an expense report is
|
||||
approved.
|
||||
|
||||
The :guilabel:`Customer to Reinvoice` field can be modified *only* until an expense report is
|
||||
**approved**. After an expense report is approved, the :guilabel:`Customer to Reinvoice` field is
|
||||
no longer able to be modified.
|
||||
|
||||
.. _expenses/reinvoice-approve:
|
||||
|
||||
Approve and post expenses
|
||||
=========================
|
||||
|
||||
Before :doc:`approving an expense report <../expenses/approve_expenses>`, ensure the
|
||||
:guilabel:`Analytic Distribution` section is populated for every expense line.
|
||||
|
||||
If an :guilabel:`Analytic Distribution` entry is missing, assign the correct accounts from the
|
||||
drop-down menu, then click :guilabel:`Approve`.
|
||||
|
||||
.. image:: reinvoice_expenses/analytic-dist.png
|
||||
:align: center
|
||||
:alt: The expense report with all the Analytic Distribution lines populated.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Approve` button **only** appears after an expense report has been :ref:`submitted
|
||||
<expenses/submit>`.
|
||||
|
||||
The accounting department is typically responsible for :doc:`posting journal entries
|
||||
<../expenses/post_expenses>`. To post expenses to an accounting journal, click :guilabel:`Post
|
||||
Journal Entries`. Once an expense report is approved, it can then be posted.
|
||||
|
||||
The :abbr:`SO (Sales Order)` is **only** updated *after* the journal entries are posted. Once the
|
||||
journal entries are posted, the expenses now appear on the referenced :abbr:`SO (Sales Order)`.
|
||||
|
||||
.. _expenses/reinvoice:
|
||||
|
||||
Invoice expenses
|
||||
================
|
||||
|
||||
After the expense report has been approved, and the journal entries have been posted, the :abbr:`SO
|
||||
(Sales Order)` is updated, and the customer can be invoiced.
|
||||
|
||||
Select the expense report, and click the :icon:`fa-money` :guilabel:`Sales Orders` smart button to
|
||||
open the :abbr:`SO (Sales Order)`. The expenses to be re-invoiced now appear on the :abbr:`SO (Sales
|
||||
Order)`.
|
||||
|
||||
.. note::
|
||||
More than one :abbr:`SO (Sales Order)` can be referenced on an expense report. If more than one
|
||||
:abbr:`SO (Sales Order)` is referenced, clicking the :guilabel:`Sales Orders` smart button opens
|
||||
a list displaying all the :abbr:`SOs (Sales Order)` associated with that expense report. Click on
|
||||
a :abbr:`SO (Sales Order)` to open the individual :abbr:`SO (Sales Order)` details.
|
||||
|
||||
The expenses are listed in the :abbr:`SO (Sales Order)` :guilabel:`Order Lines` tab.
|
||||
|
||||
.. image:: reinvoice_expenses/so-details.png
|
||||
:align: center
|
||||
:alt: See the expenses listed on the sales order after clicking into it.
|
||||
|
||||
Next, click :guilabel:`Create Invoice`, and a :guilabel:`Create invoices` pop-up window appears.
|
||||
Select if the invoice is a :guilabel:`Regular invoice`, a :guilabel:`Down payment (percentage)`, or
|
||||
a :guilabel:`Down payment (fixed amount)`. Then, click :guilabel:`Create Draft Invoice`. Doing so
|
||||
creates a draft invoice for the customer. Click :guilabel:`Confirm` to confirm the invoice, and the
|
||||
customer is invoiced for the expenses.
|
||||
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
@@ -1018,69 +1018,37 @@ specific product.
|
||||
Reports
|
||||
=======
|
||||
|
||||
As part of the localization installation, financial reporting for Argentina was added to the
|
||||
:guilabel:`Accounting` dashboard. Access these reports by navigating to :menuselection:`Accounting
|
||||
--> Reporting --> Argentinean Reports`
|
||||
As part of the localization installation, financial reporting for Argentina is available in the
|
||||
:guilabel:`Accounting` dashboard. To access these reports, navigate to :menuselection:`Accounting
|
||||
--> Reporting --> Argentinean Statements`.
|
||||
|
||||
.. image:: argentina/argentinian-reports.png
|
||||
:align: center
|
||||
:alt: Argentinean reports.
|
||||
To access the VAT book report, go to :menuselection:`Accounting --> Reporting --> Tax Report`, click
|
||||
the :icon:`fa-book` (:guilabel:`book`), and select :guilabel:`Argentinean VAT book (AR)`.
|
||||
|
||||
VAT reports
|
||||
-----------
|
||||
|
||||
Sales VAT book
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
This report records all the sales, which are taken as the basis for the accounting records
|
||||
to determine the VAT (Tax Debit). The :guilabel:`Sales VAT` book report can be exported as a `.zip`
|
||||
file using the :guilabel:`VAT BOOK (ZIP)` button at the top left, containing `.txt` files to upload
|
||||
to the AFIP portal.
|
||||
|
||||
.. image:: argentina/sales-vat-book.png
|
||||
:align: center
|
||||
:alt: Sales VAT book.
|
||||
|
||||
Purchases VAT book
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The :guilabel:`Purchases VAT` book report can be exported as a `.zip` file using the
|
||||
:guilabel:`VAT BOOK (ZIP)` button at the top left, which contains `.txt` files to upload to the AFIP
|
||||
portal.
|
||||
|
||||
.. image:: argentina/purchases-vat-book.png
|
||||
:align: center
|
||||
:alt: Purchases VAT book.
|
||||
.. note::
|
||||
The VAT book report can be exported as a `.zip` file by selecting it in the dropdown menu in the
|
||||
top-left corner.
|
||||
|
||||
VAT summary
|
||||
~~~~~~~~~~~
|
||||
-----------
|
||||
|
||||
Pivot table designed to check the monthly VAT totals. This report is for internal use and is not
|
||||
sent to the AFIP.
|
||||
|
||||
.. image:: argentina/vat-summary.png
|
||||
:align: center
|
||||
:alt: VAT Summary.
|
||||
|
||||
IIBB - Reports
|
||||
--------------
|
||||
This pivot table is designed to check the monthly VAT totals. This report is for internal use and is
|
||||
not sent to the AFIP.
|
||||
|
||||
IIBB - Sales by jurisdiction
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
----------------------------
|
||||
|
||||
Pivot table where you can validate the gross income in each jurisdiction. Affidavit for the
|
||||
corresponding taxes to pay; and therefore, it is not sent to the AFIP.
|
||||
This pivot table allows you to validate the gross income in each jurisdiction. It serves as an
|
||||
affidavit for the corresponding taxes due but is not submitted to the AFIP.
|
||||
|
||||
.. image:: argentina/iibb-sales-jurisdiction.png
|
||||
:align: center
|
||||
:alt: IIBB Sales by jurisdiction.
|
||||
|
||||
IIBB - Purchases by jurisdiction
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
--------------------------------
|
||||
|
||||
Pivot table where you can validate the gross purchases in each jurisdiction. Affidavit for the
|
||||
corresponding taxes to pay; and therefore, it is not sent to the AFIP.
|
||||
This pivot table allows you to validate the gross purchases in each jurisdiction. It serves as an
|
||||
affidavit for the corresponding taxes due but is not submitted to the AFIP.
|
||||
|
||||
.. image:: argentina/iibb-purchases-jurisdiction.png
|
||||
:align: center
|
||||
:alt: IIBB Purchases by jurisdiction.
|
||||
|
||||
|
Before Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 56 KiB |
@@ -152,7 +152,7 @@ Electrónicos)` incoming email server.
|
||||
.. important::
|
||||
In order to receive your SII documents, it's necessary to set up your own email server. More
|
||||
information on how to do this can be found in this documentation:
|
||||
:doc:`../../general/email_communication/email_servers`
|
||||
:doc:`../../general/email_communication`
|
||||
|
||||
Begin by clicking :guilabel:`Configure DTE Incoming Email`, then click :guilabel:`New` to add a
|
||||
server and fill in the following fields:
|
||||
@@ -511,9 +511,8 @@ Once the invoice is accepted and validated by the :abbr:`SII (Servicio de Impues
|
||||
the PDF is printed, it includes the fiscal elements that indicate that the document is fiscally
|
||||
valid.
|
||||
|
||||
.. image:: chile/sii-validation-elements.png
|
||||
:alt: SII Validation fiscal elements.
|
||||
:align: center
|
||||
.. image:: chile/accepted-invoice-fiscal-information.png
|
||||
:alt: Fiscal elements and barcode printed in accepted invoices.
|
||||
|
||||
.. important::
|
||||
If you are hosted in Odoo SH or On-Premise, you should manually install the `pdf417gen
|
||||
@@ -1232,6 +1231,10 @@ taxpayers, and that replaces the *Purchase and Sales Books*. This report is inte
|
||||
Register (CR) and the Sales Register (RV). Its purpose is to support the transactions related to
|
||||
VAT, improving its control and declaration.
|
||||
|
||||
.. important::
|
||||
The *Propuesta F29 (CL)* report in Odoo covers the basic legal requirements as a first proposal
|
||||
for your final tax declaration.
|
||||
|
||||
This record is supplied by the electronic tax documents (DTE's) that have been received by the
|
||||
:abbr:`SII (Servicio de Impuestos Internos)`.
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 26 KiB |
@@ -33,6 +33,8 @@ Here are some terms that are essential on the Ecuadorian localization:
|
||||
Configuration
|
||||
=============
|
||||
|
||||
.. _l10n_ec/module-installation:
|
||||
|
||||
Modules installation
|
||||
--------------------
|
||||
|
||||
@@ -75,7 +77,7 @@ localization:
|
||||
* - :guilabel:`Ecuadorian Point of Sale`
|
||||
- `l10n_ec_edi_pos`
|
||||
- Includes all the technical and functional requirements to generate automatic electronic
|
||||
invoices from a PoS sale.
|
||||
invoices from a POS sale.
|
||||
|
||||
.. note::
|
||||
When you install a database from scratch selecting `Ecuador` as the country, Odoo automatically
|
||||
@@ -631,7 +633,7 @@ time.
|
||||
eCommerce workflow
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Type and identification number
|
||||
Identification type and number
|
||||
******************************
|
||||
|
||||
The client who is making a purchase will have the option to indicate their identification type and
|
||||
@@ -639,18 +641,74 @@ number during the checkout process. This information is required to correctly ge
|
||||
electronic invoice after the checkout is completed.
|
||||
|
||||
.. image:: ecuador/website-checkout-form.png
|
||||
:align: center
|
||||
:alt: Website checkout form.
|
||||
|
||||
.. note::
|
||||
Verification is done to ensure the *Identification Number* field is completed and has the correct
|
||||
number of digits. For RUC identification, 13 digits are required. For Cédula, 9 digits are
|
||||
required.
|
||||
Verification is done to ensure the :guilabel:`Identification Number` field is completed and has
|
||||
the correct number of digits. For RUC identification, 13 digits are required. For Cédula,
|
||||
9 digits are required.
|
||||
|
||||
After finishing the checkout process, a confirmed invoice is generated, ready to be sent manually or
|
||||
asynchronously to the SRI.
|
||||
|
||||
Financial Reports
|
||||
Point of Sale electronic invoicing
|
||||
----------------------------------
|
||||
|
||||
Make sure the *Ecuadorian module for Point of Sale* (`l10n_ec_edi_pos`) is :ref:`installed
|
||||
<l10n_ec/module-installation>` to enable the following features and configurations:
|
||||
|
||||
- Choose the SRI payment method in each payment method configuration.
|
||||
- Manually input the customer's identification type and identification number when creating a
|
||||
new contact on *POS*.
|
||||
- Automatically generate a valid electronic invoice for Ecuador at the end of the checkout process.
|
||||
|
||||
Payment method configuration
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To :doc:`create a payment method for a point of sale <../../sales/point_of_sale/payment_methods>`,
|
||||
go to :menuselection:`Point of Sale --> Configuration --> Payment Methods`. Then, set the
|
||||
:guilabel:`SRI Payment Method` in the payment method form.
|
||||
|
||||
Invoicing flows
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Identification type and number
|
||||
******************************
|
||||
|
||||
The POS cashier can :ref:`create a new contact for a customer <pos/customers>` who requests an
|
||||
invoice from an open POS session.
|
||||
|
||||
The *Ecuadorian Module for Point of Sale* adds two new fields to the contact creation form:
|
||||
:guilabel:`Identification Type` and :guilabel:`Tax ID`.
|
||||
|
||||
.. note::
|
||||
As the identification number length differs depending on the identification type, Odoo
|
||||
automatically checks the :guilabel:`Tax ID` field upon saving the contact form. To manually
|
||||
ensure the length is correct, know that the :guilabel:`RUC` and :guilabel:`Citizenship` types
|
||||
require 13 and 10 digits, respectively.
|
||||
|
||||
Electronic invoice: anonymous end consumer
|
||||
******************************************
|
||||
|
||||
When clients do not request an electronic invoice for their purchase, Odoo automatically sets the
|
||||
customer as :guilabel:`Consumidor Final` and generates an electronic invoice anyway.
|
||||
|
||||
.. note::
|
||||
If the client requests a credit note due to a return of this type of purchase, the credit note
|
||||
should be made using the client's real contact information. Credit notes cannot be created to
|
||||
*Consumidor Final* and can be managed :ref:`directly from the POS session <pos/refund>`.
|
||||
|
||||
Electronic invoice: specific customer
|
||||
*************************************
|
||||
|
||||
If a customer requests an invoice for their purchase, it is possible to select or create a contact
|
||||
with their fiscal information. This ensures the invoice is generated with accurate customer details.
|
||||
|
||||
.. note::
|
||||
If the client requests a credit note due to a return of this type of purchase, the credit note
|
||||
and return process can be managed :ref:`directly from the POS session <pos/refund>`.
|
||||
|
||||
Financial reports
|
||||
=================
|
||||
|
||||
In Ecuador, there are fiscal reports that the company presents to SRI. Odoo supports two of the main
|
||||
|
||||
@@ -58,7 +58,10 @@ checkbox.
|
||||
:alt: FPS bank account configuration.
|
||||
|
||||
.. important::
|
||||
The account holder's country **must** be set to `Hong Kong` on their contact form.
|
||||
- The account holder's country must be set to `Hong Kong` on its contact form.
|
||||
- The account holder's city is mandatory.
|
||||
- You could also include the invoice number in the QR code by checking the :guilabel:`Include
|
||||
Reference` checkbox.
|
||||
|
||||
.. seealso::
|
||||
:doc:`../accounting/bank`
|
||||
|
||||
@@ -370,9 +370,8 @@ Payment complements
|
||||
Payment policy
|
||||
**************
|
||||
|
||||
One addition of the Mexican localization is the :guilabel:`Payment Policy` field . `According to
|
||||
the SAT documentation <https://www.sat.gob.mx/consultas/92764/comprobante-de-recepcion-de-pagos>`_,
|
||||
there may be 2 types of payments:
|
||||
One addition of the Mexican localization is the :guilabel:`Payment Policy` field. According to
|
||||
the SAT documentation, there are two types of payments:
|
||||
|
||||
- `PUE` (Pago en una Sola Exhibición/Payment in a Single Exhibition)
|
||||
- `PPD` (Pago en Parcialidades o Diferido/Payment in Installements or Deferred)
|
||||
|
||||
@@ -22,7 +22,8 @@ which you want to activate PayNow. Set the :guilabel:`Proxy Type` and fill in th
|
||||
Value` field depending on the type you chose.
|
||||
|
||||
.. important::
|
||||
- The account holder's country must be set to Singapore on its contact form.
|
||||
- The account holder's country must be set to `Singapore` on its contact form.
|
||||
- The account holder's city is mandatory.
|
||||
- You could also include the invoice number in the QR code by checking the :guilabel:`Include
|
||||
Reference` checkbox.
|
||||
|
||||
|
||||
@@ -48,6 +48,7 @@ Here is the list of Spanish-specific statement reports available:
|
||||
- EC Sales List;
|
||||
- Tax Report (Modelo 111);
|
||||
- Tax Report (Modelo 115);
|
||||
- Tax Report (Modelo 130);
|
||||
- Tax Report (Modelo 303);
|
||||
- Tax Report (Modelo 347);
|
||||
- Tax Report (Modelo 349);
|
||||
@@ -59,6 +60,38 @@ selecting its Spain-specific version: :guilabel:`(ES)`.
|
||||
.. image:: spain/modelo-reports.png
|
||||
:alt: Spain-specific tax reports.
|
||||
|
||||
Modelo 130
|
||||
----------
|
||||
|
||||
Change the percentage
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If you wish to change the percentage computation of the box :guilabel:`[04]` under the :guilabel:`I`
|
||||
section and/or of the box :guilabel:`[09]` under the :guilabel:`II` section:
|
||||
|
||||
#. Activate the :ref:`developer mode <developer-mode>`, go to :menuselection:`Accounting -->
|
||||
Reporting --> Tax Report`, and select the report :guilabel:`Tax report (Modelo 130)`.
|
||||
#. Click the :icon:`fa-cogs` (:guilabel:`cogs`) icon to the right of :guilabel:`Report: Tax Report
|
||||
(Mod 130) (ES)`.
|
||||
#. Click the box you wish to change, and in the pop-up window, click on the :guilabel:`percentage`
|
||||
line. In the new pop-up window, change the value in the :guilabel:`Formula` field to the
|
||||
percentage you wish to apply.
|
||||
Repeat this action if you wish to modify the other box as well.
|
||||
|
||||
Report agriculture activity
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If you wish to have any amount input in the :guilabel:`II` section (from boxes :guilabel:`[08]` to
|
||||
:guilabel:`[11]`), you must change the **industry** of the corresponding contact to
|
||||
:guilabel:`Agriculture`:
|
||||
|
||||
#. Go to the contact form (:menuselection:`Accounting --> Customers --> Customers`
|
||||
or :menuselection:`Accounting --> Vendors --> Vendors`, for example), and select a contact.
|
||||
#. In the :guilabel:`Sales & Purchase` tab, set the :guilabel:`Industry` field to
|
||||
:guilabel:`Agriculture`.
|
||||
|
||||
Repeat this operation for all contacts related to the **agriculture** industry.
|
||||
|
||||
TicketBAI
|
||||
=========
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 8.9 KiB |
@@ -135,6 +135,7 @@ which you want to activate PromptPay QR. Set the :guilabel:`Proxy Type` and fill
|
||||
:guilabel:`Proxy Value` field depending on the chosen type.
|
||||
|
||||
.. important::
|
||||
- The account holder's city is mandatory.
|
||||
- The :guilabel:`Include Reference` checkbox doesn't work for PromptPay QR codes.
|
||||
|
||||
.. image:: thailand/qr-promptpay-bank.png
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
United Kingdom
|
||||
==============
|
||||
|
||||
.. _united-kingdom/modules:
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
@@ -23,10 +25,9 @@ Reports` modules to get all the features of the UK localization.
|
||||
- `l10n_uk_reports`
|
||||
- - Accounting reports for the UK
|
||||
- Allows sending the tax report via the MTD-VAT API to HMRC.
|
||||
|
||||
.. image:: united_kingdom/uk.png
|
||||
:align: center
|
||||
:alt: Odoo uk packages
|
||||
* - :guilabel:`UK BACS Payment Files`
|
||||
- `account_bacs`
|
||||
- Allows generating :ref:`united-kingdom/BACS-files` for bill and invoice payments
|
||||
|
||||
.. note::
|
||||
- Only UK-based companies can submit reports to HMRC.
|
||||
@@ -122,3 +123,95 @@ each submission:
|
||||
.. note::
|
||||
During this process, the :guilabel:`Connect to HMRC` button no longer appears for other UK-based
|
||||
companies.
|
||||
|
||||
.. _united-kingdom/BACS-files:
|
||||
|
||||
Bacs files
|
||||
==========
|
||||
|
||||
:abbr:`Bacs (Bankers' Automated Clearing Services)` files are electronic files used in the UK to
|
||||
process payments and transfers between bank accounts.
|
||||
|
||||
To enable the use of Bacs files, make sure the :ref:`UK BACS Payment Files <united-kingdom/modules>`
|
||||
module is installed, then:
|
||||
|
||||
#. Configure your Bacs Service User Number:
|
||||
|
||||
#. Go to :menuselection:`Accounting --> Configuration --> Settings` and scroll down to the
|
||||
:guilabel:`Customer Payments` section.
|
||||
#. Enter your :guilabel:`Service User Number` under :guilabel:`BACS` and manually save.
|
||||
|
||||
#. Configure your **bank** journal:
|
||||
|
||||
#. Go to :menuselection:`Accounting --> Configuration --> Journals` and select your **bank**
|
||||
journal.
|
||||
#. In the :guilabel:`Journal Entries` tab, configure the :guilabel:`Account Number` and
|
||||
:guilabel:`Bank` fields.
|
||||
#. In the :guilabel:`Incoming Payments` and :guilabel:`Outgoing Payments` tabs, make sure the
|
||||
:guilabel:`BACS Direct Debit` payment method is enabled.
|
||||
|
||||
#. Configure the contacts for whom you wish to use Bacs files: Access the contact form and, in
|
||||
the :guilabel:`Accounting` tab, click :guilabel:`Add a line` and fill in the
|
||||
:guilabel:`Account Number` and :guilabel:`Bank` fields.
|
||||
|
||||
Bill payments
|
||||
-------------
|
||||
|
||||
To generate Bacs files for bill payments, set the :guilabel:`Payment Method` to
|
||||
:guilabel:`BACS Direct Debit` when :ref:`registering vendor payments <batch-payments/register-payments>`.
|
||||
|
||||
Then, create a vendor batch payment:
|
||||
|
||||
#. Go to :menuselection:`Accounting --> Vendors --> Batch Payments`, and click :guilabel:`New`.
|
||||
#. Select the bank journal in the :guilabel:`Bank` field, set the :guilabel:`Payment Method` to
|
||||
:guilabel:`BACS Direct Credit`, and select a :guilabel:`BACS Processing Date`.
|
||||
#. Optionally, you can also:
|
||||
|
||||
- select a :guilabel:`BACS Expiry Date`;
|
||||
- enable :guilabel:`BACS Multi Mode` to process the payments on their individual date.
|
||||
|
||||
#. Click :guilabel:`Add a line`, select the payments you want to include, click :guilabel:`Select`,
|
||||
then :guilabel:`Validate`.
|
||||
|
||||
Once validated, the Bacs file is available in the chatter. You can also :guilabel:`Re-generate
|
||||
Export File` if you need a new Bacs file for that batch payment.
|
||||
|
||||
.. image:: united_kingdom/bacs-files.png
|
||||
:alt: Vendor Batch Payment view with generated BACS file.
|
||||
|
||||
Invoice payments
|
||||
----------------
|
||||
|
||||
Before generating Bacs files for invoice payments, you must first create a **BACS Direct Debit
|
||||
Instruction**: Go to :menuselection:`Accounting --> Customers --> BACS Direct Debit Instructions`
|
||||
and click :guilabel:`New`. Select a :guilabel:`Customer`, their :guilabel:`IBAN`, and the
|
||||
:guilabel:`Journal` you wish to use.
|
||||
|
||||
To generate Bacs files for invoice payments, set the :guilabel:`Payment Method` to
|
||||
:guilabel:`BACS Direct Debit` when :ref:`registering invoice payments <batch-payments/register-payments>`.
|
||||
|
||||
.. tip::
|
||||
If you register the payment for an invoice linked to a subscription or via
|
||||
:menuselection:`Accounting --> Customers --> Payments`, you can select the :guilabel:`BACS
|
||||
Payment Type`:
|
||||
|
||||
- :guilabel:`Direct debit-first collection of a series`;
|
||||
- :guilabel:`Direct debit single collection`;
|
||||
- :guilabel:`Direct debit repeating collection in a series`;
|
||||
- :guilabel:`Direct debit-final collection of a series`.
|
||||
|
||||
Then, create a customer batch payment:
|
||||
|
||||
#. Go to :menuselection:`Accounting --> Customers --> Batch Payments`, and click :guilabel:`New`.
|
||||
#. Select the bank journal in the :guilabel:`Bank` field, set the :guilabel:`Payment Method` to
|
||||
:guilabel:`BACS Direct Credit`, and select a :guilabel:`BACS Processing Date`.
|
||||
#. Optionally, you can also:
|
||||
|
||||
- select a :guilabel:`BACS Expiry Date`;
|
||||
- enable :guilabel:`BACS Multi Mode` to process the payments on their individual date.
|
||||
|
||||
#. Click :guilabel:`Add a line`, select the payments you want to include, click :guilabel:`Select`,
|
||||
then :guilabel:`Validate`.
|
||||
|
||||
Once validated, the Bacs file is available in the chatter. You can also :guilabel:`Re-generate
|
||||
Export File` if you need a new Bacs file for that batch payment.
|
||||
|
||||
|
After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 12 KiB |
@@ -23,7 +23,8 @@ bank. Then set the :guilabel:`Proxy Type` and fill in the :guilabel:`Proxy Value
|
||||
the type you chose.
|
||||
|
||||
.. important::
|
||||
- The account holder's country must be set to Vietnam on its contact form.
|
||||
- The account holder's country must be set to `Vietnam` on its contact form.
|
||||
- The account holder's city is mandatory.
|
||||
- You could also include the invoice number in the QR code by checking the :guilabel:`Include
|
||||
Reference` checkbox.
|
||||
|
||||
|
||||
@@ -65,8 +65,8 @@ company to edit it.
|
||||
|
||||
.. tip::
|
||||
Activate the :ref:`developer mode <developer-mode>` to set social media accounts and
|
||||
company-specific email system parameters. See this documentation on
|
||||
:doc:`../marketing/social_marketing` and :ref:`email_servers/outbound`.
|
||||
company-specific email parameters. See this documentation on
|
||||
:doc:`../marketing/social_marketing` and :doc:`email_communication`.
|
||||
|
||||
Companies also have a :guilabel:`Parent Company` set on the company form in :ref:`developer mode
|
||||
<developer-mode>`.
|
||||
@@ -119,7 +119,7 @@ appears.
|
||||
.. tip::
|
||||
Activate the :ref:`developer mode <developer-mode>` to set social media accounts and
|
||||
company-specific email system parameters. See this documentation on
|
||||
:doc:`../marketing/social_marketing` and :ref:`email_servers/outbound`.
|
||||
:doc:`../marketing/social_marketing` and :doc:`email_communication`.
|
||||
|
||||
Branches also have a :guilabel:`Parent Company` set on the branch form in :ref:`developer mode
|
||||
<developer-mode>`. Accounting and fiscal localizations for the branch are set on the
|
||||
@@ -127,9 +127,10 @@ appears.
|
||||
menu, and go to :menuselection:`Settings app --> Accounting --> Fiscal Localization`.
|
||||
|
||||
.. danger::
|
||||
Adding a branch to a company triggers an upsell, should the database be in the *Standard* or
|
||||
*One App Free* pricing plans. Adding one or more branches constitutes a multi-company database,
|
||||
and needs to be moved to the *Custom* pricing plan.
|
||||
If the database is on the standard *Paid* pricing plan, adding a branch to a company triggers an
|
||||
upsell. Since adding one or more branches turns the database into a multi-company setup, it
|
||||
will need to switch to the *Custom* pricing plan. This does not affect databases on the *One-app
|
||||
free* plan.
|
||||
|
||||
For more information on pricing, see `Odoo's pricing <https://www.odoo.com/pricing-plan>`_ page.
|
||||
|
||||
|
||||
@@ -1,13 +1,110 @@
|
||||
:nosearch:
|
||||
:show-content:
|
||||
|
||||
===================
|
||||
Email communication
|
||||
===================
|
||||
==============================
|
||||
Communication in Odoo by email
|
||||
==============================
|
||||
|
||||
Communication in Odoo related to records such as CRM opportunities, sales orders, invoices, ...
|
||||
have a discussion thread called **chatter**, often displayed on the right side of the record.
|
||||
|
||||
On the chatter, you can send direct emails or Odoo notifications to the followers of a document
|
||||
(depending on their notification preferences), log internal notes, send WhatsApp messages or SMSes,
|
||||
and schedule activities.
|
||||
|
||||
If a follower replies to a message, the reply updates the chatter, and Odoo relays it to the
|
||||
followers as a notification. All emails - outgoing and incoming - appear in the same chatter.
|
||||
|
||||
.. _email-online-sh:
|
||||
|
||||
Odoo Online and Odoo.sh users
|
||||
=============================
|
||||
|
||||
On Odoo Online and Odoo.sh, outgoing and incoming emails work out of the box, **nothing needs to be
|
||||
done**. Everything is already configured on your subdomain.
|
||||
|
||||
By default, outgoing emails use the following :ref:`notification email address
|
||||
<email-outbound-notifications>` `notifications@company-name.odoo.com`.
|
||||
|
||||
.. _email-online-sh-domain:
|
||||
|
||||
Using another domain
|
||||
--------------------
|
||||
|
||||
If you prefer not to have outgoing emails sent from Odoo's subdomain `@company-name.odoo.com` but
|
||||
instead :ref:`from your own domain <email-outbound-custom-domain>`, **additional configuration will
|
||||
be necessary** on the domain and within Odoo. This introduces an extra layer of complexity and
|
||||
necessitates technical knowledge (mainly regarding DNS and mail protocols).
|
||||
|
||||
By adding a domain and configuring the administration access rights, you can also access the
|
||||
:ref:`new domain alias <email-outbound-alias-domain>` page to configure the alias of your companies.
|
||||
If only one domain is configured, this domain will be shared by all companies on the database.
|
||||
|
||||
If you want to keep using Odoo's mail server, you will have to :ref:`configure the SPF and DKIM
|
||||
<email-domain-spf>`.
|
||||
|
||||
If :ref:`you want to use your own mail server <email-outbound-custom-domain-smtp-server>`, you will
|
||||
have to follow the mail server provider's specific documentation.
|
||||
|
||||
For incoming emails, after adding your own domain, :ref:`replies from customers will come back to
|
||||
your domain <email-inbound-custom-domain>`, and you will need to use one of the three possible ways
|
||||
to get the emails back into Odoo (using either :ref:`incoming mail server
|
||||
<email-inbound-custom-domain-incoming-server>`, :ref:`redirection/forwarding
|
||||
<email-inbound-custom-domain-redirections>` or :ref:`DNS MX record
|
||||
<email-inbound-custom-domain-mx>`). Everything is covered in the :doc:`Manage inbound messages
|
||||
documentation <email_communication/email_servers_inbound>`.
|
||||
|
||||
.. _email-on-premise:
|
||||
|
||||
On-premise users
|
||||
================
|
||||
|
||||
If you are on-premise, you will have to completely configure your outgoing and incoming emails:
|
||||
|
||||
- For outgoing emails, you will need :ref:`to use an SMTP server and a custom domain
|
||||
<email-outbound-custom-domain-odoo-server>`.
|
||||
- For incoming emails, set the frequency at which you fetch new emails low enough for responsiveness
|
||||
but high enough in order not to stress your system or provider. Due to this reason and the
|
||||
simplicity of this configuration, we usually advise on using incoming mail servers. To use an SMTP
|
||||
server, check out the :ref:`"Use a custom domain for inbound messages" documentation
|
||||
<email-inbound-custom-domain>`.
|
||||
|
||||
.. _email-third-party-server:
|
||||
|
||||
Using a third-party provider's mail server
|
||||
==========================================
|
||||
|
||||
Odoo's documentation also covers several popular mail servers. As they require specific
|
||||
authorizations and configuration, they add a layer of complexity. For this reason, using Odoo's
|
||||
outgoing mail server is recommended.
|
||||
|
||||
- :doc:`Outlook documentation <email_communication/azure_oauth>`
|
||||
- :doc:`Gmail documentation <email_communication/google_oauth>`
|
||||
- :doc:`Mailjet documentation <email_communication/mailjet_api>`
|
||||
|
||||
.. note::
|
||||
Every provider has its own limitations. Research the desired provider *before* configuring it.
|
||||
For example, Outlook and Gmail might not be suitable for large marketing campaigns.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`Activities <../essentials/activities>`
|
||||
- :doc:`Discuss app <../productivity/discuss>`
|
||||
- :doc:`Digest emails <companies/digest_emails>`
|
||||
- :doc:`Email Marketing app <../marketing/email_marketing>`
|
||||
- :doc:`Email templates <companies/email_template>`
|
||||
- :ref:`Expense creation using an email alias <expenses/email_expense>`
|
||||
- :ref:`Helpdesk ticket creation using an email alias <helpdesk/receiving_tickets/email-alias>`
|
||||
- :ref:`Lead creation using an email alias <crm/configure_email_alias>`
|
||||
- :ref:`Project task creation using an email alias <task_creation/email_alias>`
|
||||
- :doc:`Technical mail getaway for on-premise users
|
||||
<../../administration/on_premise/email_gateway>`
|
||||
- :ref:`Technical start of Odoo database with an outgoing mail server configured from the
|
||||
command-line interface <reference/cmdline/server/emails>`
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
email_communication/email_servers
|
||||
email_communication/email_servers_inbound
|
||||
email_communication/email_servers_outbound
|
||||
email_communication/email_domain
|
||||
email_communication/azure_oauth
|
||||
email_communication/google_oauth
|
||||
|
||||
@@ -34,14 +34,14 @@ registration`. On the :guilabel:`Register an application` screen, rename the :gu
|
||||
and personal Microsoft accounts (e.g. Skype, Xbox)`.
|
||||
|
||||
Under the :guilabel:`Redirect URL` section, select :guilabel:`Web` as the platform, and then input
|
||||
`https://<odoo base url>/microsoft_outlook/confirm` in the :guilabel:`URL` field. The Odoo base URL
|
||||
is the canonical domain at which your Odoo instance can be reached in the URL field.
|
||||
`https://<web base url>/microsoft_outlook/confirm` in the :guilabel:`URL` field. The `web.base.url`
|
||||
is subject to change depending on the URL used to log in to the database.
|
||||
|
||||
.. example::
|
||||
*mydatabase.odoo.com*, where *mydatabase* is the actual prefix of the database's subdomain,
|
||||
assuming it's hosted on Odoo.com
|
||||
.. note::
|
||||
The documentation about the :ref:`web.base.url <domain-name/web-base-url>` explains how to freeze
|
||||
a unique URL. It is also possible to add different redirect URLs on the Microsoft app.
|
||||
|
||||
After the URL has been added to the field, :guilabel:`Register` the application so it is created.
|
||||
After the URL has been added to the field, :guilabel:`Register` the application, so it is created.
|
||||
|
||||
API permissions
|
||||
---------------
|
||||
@@ -165,7 +165,7 @@ Then, create a new email server and check the box for :guilabel:`Outlook`. Next,
|
||||
:guilabel:`Name` (it can be anything) and the Microsoft Outlook email :guilabel:`Username`.
|
||||
|
||||
If the :guilabel:`From Filter` field is empty, enter either a :ref:`domain or email address
|
||||
<email_communication/default>`.
|
||||
<email-outbound-unique-address>`.
|
||||
|
||||
Then, click on :guilabel:`Connect your Outlook account`.
|
||||
|
||||
@@ -203,7 +203,8 @@ This address must also match the `{mail.default.from}@{mail.catchall.domain}` ke
|
||||
system parameters.
|
||||
|
||||
.. seealso::
|
||||
For more information on the from filter visit: :ref:`email_communication/default`.
|
||||
Visit the :ref:`From Filtering documentation <email-outbound-different-servers-personalized-from-filtering>` for more
|
||||
information.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`System Parameters` can be accessed by activating :ref:`developer-mode` in the
|
||||
@@ -244,7 +245,8 @@ so that only the user's email is sent from that server. In other words, only a u
|
||||
address that matches the set :guilabel:`FROM Filtering` is able to use this server.
|
||||
|
||||
.. seealso::
|
||||
For more information on the from filter visit: :ref:`email_communication/default`.
|
||||
Visit the :ref:`From Filtering documentation <email-outbound-different-servers-personalized-from-filtering>` for more
|
||||
information.
|
||||
|
||||
A :ref:`fallback server <azure_oauth/notifications>` must be setup to allow for the sending of
|
||||
:guilabel:`notifications`. The :guilabel:`FROM Filtering` for this server should have the value of
|
||||
@@ -261,7 +263,7 @@ the `{mail.default.from}@{mail.catchall.domain}`.
|
||||
|
||||
.. seealso::
|
||||
For more information on setting the mass-mailing email server visit
|
||||
:ref:`email_communication/mass_mails`.
|
||||
:ref:`email-outbound-custom-domain-smtp-server`.
|
||||
|
||||
.. example::
|
||||
Multiple user outgoing mail server configuration:
|
||||
@@ -288,6 +290,3 @@ new configuration. Check or Select the button next to :guilabel:`Outlook Oauth A
|
||||
enter the :guilabel:`Microsoft Outlook username`. Click on :guilabel:`Connect your Outlook
|
||||
account`. Odoo will state: :guilabel:`Outlook Token Valid` Now :guilabel:`Test and Confirm` the
|
||||
account. The account should be ready to receive email to the Odoo database.
|
||||
|
||||
.. seealso::
|
||||
:doc:`email_servers`
|
||||
|
||||
@@ -2,204 +2,144 @@
|
||||
Configure DNS records to send emails in Odoo
|
||||
============================================
|
||||
|
||||
SPAM labels overview
|
||||
====================
|
||||
This documentation presents three complementary authentication protocols (SPF, DKIM, and DMARC) used
|
||||
to prove the legitimacy of an email sender. Not complying with these protocols will greatly reduce
|
||||
chances of your emails to reach their destination.
|
||||
|
||||
Sometimes, emails from Odoo are misclassified by the different email providers and end up in spam
|
||||
folders. At the moment, some settings are out of Odoo's control, notably the way the different email
|
||||
providers classify Odoo's emails according to their own restriction policy and/or limitations.
|
||||
**Odoo Online** and **Odoo.sh** databases using the **default Odoo subdomain address** (e.g.,
|
||||
`\@company-name.odoo.com`) are pre-configured to **send authenticated emails** compliant with the
|
||||
SPF, DKIM, and DMARC protocols.
|
||||
|
||||
It is standard in Odoo that emails are received from ``"name of the author"
|
||||
<notifications@mycompany.odoo.com>``. In other words this can be translated to: ``"name of the
|
||||
author" <{ICP.mail.from.filter}@{mail.catchall.domain}>``. In this case ICP stands for
|
||||
`ir.config_parameter`, which are the System Parameters. Deliverability is greatly improved with the
|
||||
:ref:`notifications configuration <email_servers/notifications>`.
|
||||
If choosing to use a **custom domain** instead, **configuring SPF and DKIM records correctly is
|
||||
essential** to prevent emails from being quarantined as spam or not being delivered to recipients.
|
||||
|
||||
In order for servers to accept emails from Odoo on a more regular basis, one of the solutions is
|
||||
for customers to create rules within their own mailbox. A filter can be added to the email inbox so
|
||||
that when email is received from Odoo (`notifications@mycompany.odoo.com`) it is moved to the
|
||||
inbox. It is also possible to add the Odoo database domain onto a safe senders list or whitelist
|
||||
on the receiving domain.
|
||||
|
||||
If an Odoo email server appears on a blacklist, notify Odoo via a `new help ticket
|
||||
<https://www.odoo.com/help>`_ and the support team will work to get the servers removed from the
|
||||
blacklist.
|
||||
|
||||
Should the Odoo database be using a custom domain for sending emails from Odoo there are three
|
||||
records that should be implemented on the custom domain's DNS to ensure deliverability of email.
|
||||
This includes setting records for :abbr:`SPF (Sender Policy Framework)`,
|
||||
:abbr:`DKIM (DomainKeys Identified Mail)` and
|
||||
:abbr:`DMARC (Domain-based Message Authentication, Reporting, & Conformance)`. Ultimately though,
|
||||
it is up to the discretion of the final receiving mailbox.
|
||||
|
||||
.. _email_communication/spf_compliant:
|
||||
|
||||
Be SPF compliant
|
||||
================
|
||||
|
||||
The Sender Policy Framework (SPF) protocol allows the owner of a domain name to specify which
|
||||
servers are allowed to send emails from that domain. When a server receives an incoming email,
|
||||
it checks whether the IP address of the sending server is on the list of allowed IPs according to
|
||||
the sender's :abbr:`SPF (Sender Policy Framework)` record.
|
||||
If using :ref:`the default Odoo email server to send emails from a custom domain
|
||||
<email-outbound-custom-domain-odoo-server>`, the SPF and DKIM records must be configured as
|
||||
presented below. If using an outgoing email server, it is required to use the SPF and DKIM records
|
||||
specific to that email service and a custom domain.
|
||||
|
||||
.. note::
|
||||
The :abbr:`SPF (Sender Policy Framework)` verification is performed on the domain mentioned in
|
||||
the `Return-Path` field of the email. In the case of an email sent by Odoo, this domain
|
||||
corresponds to the value of the `mail.catchall.domain` key in the database system parameters.
|
||||
Email service providers apply different rules to incoming emails. An email may be classified as
|
||||
spam even if it passes the SPF and DKIM checks.
|
||||
|
||||
The :abbr:`SPF (Sender Policy Framework)` policy of a domain is set using a TXT record. The way to
|
||||
create or modify a TXT record depends on the provider hosting the :abbr:`DNS (Domain Name System)`
|
||||
zone of the domain name. In order for the verification to work properly, each domain can only have
|
||||
one :abbr:`SPF (Sender Policy Framework)` record.
|
||||
.. _email-domain-spf:
|
||||
|
||||
If the domain name does not yet have a :abbr:`SPF (Sender Policy Framework)` record, create one
|
||||
using the following input: `v=spf1 include:_spf.odoo.com ~all`
|
||||
SPF (Sender Policy Framework)
|
||||
=============================
|
||||
|
||||
If the domain name already has a :abbr:`SPF (Sender Policy Framework)` record, the record must be
|
||||
updated (and do not create a new one).
|
||||
The Sender Policy Framework (SPF) protocol allows the owner of a domain name to specify which
|
||||
servers are allowed to send emails from that domain. When a server receives an incoming email, it
|
||||
checks whether the IP address of the sending server is on the list of allowed IPs according to the
|
||||
sender's :abbr:`SPF (Sender Policy Framework)` record.
|
||||
|
||||
In Odoo, the **SPF test is performed on the bounce address** defined under the :guilabel:`Alias
|
||||
Domain` field found under the database's :guilabel:`General Settings`. If using a custom domain as
|
||||
:guilabel:`Alias Domain`, it is necessary to configure it to be SPF-compliant.
|
||||
|
||||
The SPF policy of a domain is set using a TXT record. The way to create or modify this record
|
||||
depends on the provider hosting the :abbr:`DNS (Domain Name System)` zone of the domain name.
|
||||
|
||||
If the domain name does not yet have an SPF record, create one using the following input:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
v=spf1 include:_spf.odoo.com ~all
|
||||
|
||||
If the domain name **already has an SPF record, the record must be updated**. Do not create a new
|
||||
one, as a domain must have only one SPF record.
|
||||
|
||||
.. example::
|
||||
|
||||
If the TXT record is `v=spf1 include:_spf.google.com ~all`, edit it to add
|
||||
`include:_spf.odoo.com`: `v=spf1 include:_spf.odoo.com include:_spf.google.com ~all`
|
||||
|
||||
Check if the :abbr:`SPF (Sender Policy Framework)` record is valid with a free tool like `MXToolbox
|
||||
SPF <https://mxtoolbox.com/spf.aspx>`_.
|
||||
Check the SPF record using a tool like `MXToolbox SPF Record Check
|
||||
<https://mxtoolbox.com/spf.aspx>`_. The process to create or modify an SPF record depends on the
|
||||
provider hosting the DNS zone of the domain name. The :ref:`most common providers
|
||||
<email-domain-providers-documentation>` and their documentation are listed below.
|
||||
|
||||
.. _email_communication/DKIM_compliant:
|
||||
.. _email-domain-dkim:
|
||||
|
||||
Enable DKIM
|
||||
===========
|
||||
DKIM (DomainKeys Identified Mail)
|
||||
=================================
|
||||
|
||||
The DomainKeys Identified Mail (DKIM) allows a user to authenticate emails with a digital
|
||||
signature.
|
||||
The DomainKeys Identified Mail (DKIM) allows a user to authenticate emails with a digital signature.
|
||||
|
||||
When sending an email, the Odoo server includes a unique :abbr:`DKIM (DomainKeys Identified Mail)`
|
||||
signature in the headers. The recipient's server decrypts this signature using the :abbr:`DKIM
|
||||
(DomainKeys Identified Mail)` record in the database's domain name. If the signature and the key
|
||||
contained in the record match, this guarantees that the message is authentic and has not been
|
||||
altered during transport.
|
||||
When sending an email, the Odoo email server includes a unique :abbr:`DKIM (DomainKeys Identified
|
||||
Mail)` signature in the headers. The recipient's server decrypts this signature using the DKIM
|
||||
record in the database's domain name. If the signature and the key contained in the record match, it
|
||||
proves the message is authentic and has not been altered during transport.
|
||||
|
||||
To enable :abbr:`DKIM (DomainKeys Identified Mail)`, add a :abbr:`CNAME (Canonical Name)` record to
|
||||
the :abbr:`DNS (Domain Name System)` zone of the domain name:
|
||||
Enabling DKIM is **required** when sending emails **from a custom domain** using the Odoo email
|
||||
server.
|
||||
|
||||
`odoo._domainkey IN CNAME odoo._domainkey.odoo.com.`
|
||||
To enable DKIM, add a :abbr:`CNAME (Canonical Name)` record to the :abbr:`DNS (Domain Name System)`
|
||||
zone of the domain name:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
odoo._domainkey IN CNAME odoo._domainkey.odoo.com.
|
||||
|
||||
.. tip::
|
||||
If the domain name is `mycompany.com`, make sure to create a subdomain
|
||||
`odoo._domainkey.mycompany.com` whose canonical name is `odoo._domainkey.odoo.com.`.
|
||||
If the domain name is `company-name.com`, make sure to create a subdomain
|
||||
`odoo._domainkey.company-name.com` whose canonical name is `odoo._domainkey.odoo.com.`.
|
||||
|
||||
The way to create or modify a :abbr:`CNAME (Canonical Name)` record depends on the provider hosting
|
||||
the :abbr:`DNS (Domain Name System)` zone of the domain name. The most common providers are
|
||||
:ref:`listed below <email_communication/SPFDKIM_common_providers>`.
|
||||
The way to create or modify a CNAME record depends on the provider hosting the DNS zone of the
|
||||
domain name. The :ref:`most common providers <email-domain-providers-documentation>` and their
|
||||
documentation are listed below.
|
||||
|
||||
Check if the :abbr:`DKIM (DomainKeys Identified Mail)` record is valid with a free tool like `DKIM
|
||||
Core <https://dkimcore.org/tools/>`_. If a selector is asked, enter `odoo`.
|
||||
Check if the DKIM record is valid using a tool like `MXToolbox DKIM Record Lookup
|
||||
<https://mxtoolbox.com/dkim.aspx>`_. Enter `example.com:odoo` in the DKIM lookup tool, specifying
|
||||
that the selector being tested is `odoo` for the custom domain `example.com`.
|
||||
|
||||
.. _email_communication/DMARC_compliant:
|
||||
.. _email-domain-dmarc:
|
||||
|
||||
Check the DMARC policy
|
||||
======================
|
||||
DMARC (Domain-based Message Authentication, Reporting and Conformance)
|
||||
======================================================================
|
||||
|
||||
The Domain-based Message Authentication, Reporting, & Conformance (DMARC) record is a protocol that
|
||||
unifies :abbr:`SPF (Sender Policy Framework)` and :abbr:`DKIM (DomainKeys Identified Mail)`. The
|
||||
instructions contained in the :abbr:`DMARC (Domain-based Message Authentication, Reporting, &
|
||||
Conformance)` record of a domain name tell the destination server what to do with an incoming email
|
||||
that fails the :abbr:`SPF (Sender Policy Framework)` and/or :abbr:`DKIM (DomainKeys Identified
|
||||
Mail)` check.
|
||||
The :abbr:`DMARC (Domain-based Message Authentication, Reporting, & Conformance)` record is a
|
||||
protocol that unifies :abbr:`SPF (Sender Policy Framework)` and :abbr:`DKIM (DomainKeys Identified
|
||||
Mail)`. The instructions contained in the DMARC record of a domain name tell the destination server
|
||||
what to do with an incoming email that fails the SPF and/or DKIM check.
|
||||
|
||||
.. example::
|
||||
DMARC: TXT record
|
||||
.. note::
|
||||
The aim of this documentation is to help **understand the impact DMARC has on the deliverability
|
||||
of emails**, rather than give precise instructions for creating a DMARC record. Refer to a
|
||||
resource like `DMARC.org <https://dmarc.org/>`_ to set the DMARC record.
|
||||
|
||||
`v=DMARC1; p=none;`
|
||||
|
||||
There are three :abbr:`DMARC (Domain-based Message Authentication, Reporting, & Conformance)`
|
||||
policies:
|
||||
There are three DMARC policies:
|
||||
|
||||
- `p=none`
|
||||
- `p=quarantine`
|
||||
- `p=reject`
|
||||
|
||||
`p=quarantine` and `p=reject` instruct the server that receives an email to quarantine that email or
|
||||
ignore it if the :abbr:`SPF (Sender Policy Framework)` and/or :abbr:`DKIM (DomainKeys Identified
|
||||
Mail)` check fails.
|
||||
ignore it if the SPF or DKIM check fails.
|
||||
|
||||
If the domain name uses :abbr:`DMARC (Domain-based Message Authentication, Reporting, &
|
||||
Conformance)` and has defined one of these policies, the domain must be :abbr:`SPF (Sender Policy
|
||||
Framework)` compliant or enable :abbr:`DKIM (DomainKeys Identified Mail)`.
|
||||
.. note::
|
||||
**For the DMARC to pass, the DKIM or SPF check needs to pass** and the domains must be in
|
||||
alignment. If the hosting type is Odoo Online, DKIM configuration on the sending domain is
|
||||
required to pass the DMARC.
|
||||
|
||||
.. warning::
|
||||
Yahoo or AOL are examples of email providers with a :abbr:`DMARC (Domain-based Message
|
||||
Authentication, Reporting, & Conformance)` policy set to `p=reject`. Odoo strongly advises
|
||||
against using an *@yahoo.com* or *@aol.com* address for the database users. These emails will
|
||||
never reach their recipient.
|
||||
Passing DMARC generally means that the email will be successfully delivered. However, it's important
|
||||
to note that **other factors like spam filters can still reject or quarantine a message**.
|
||||
|
||||
`p=none` is used for the domain owner to receive reports about entities using their domain. It
|
||||
should not impact the deliverability if the :abbr:`DMARC (Domain-based Message Authentication,
|
||||
Reporting, & Conformance)` check fails.
|
||||
should not impact the deliverability.
|
||||
|
||||
:abbr:`DMARC (Domain-based Message Authentication, Reporting, & Conformance)` records are comprised
|
||||
of tags in the form of :abbr:`DNS (Domain Name System)` records. These tags/parameters allow for
|
||||
reporting, such as :abbr:`RUA (Reporting URI of aggregate reports)` and :abbr:`RUF (Reporting URI
|
||||
for forensic reports)`, along with more precise specification like :abbr:`PCT (Percentage of
|
||||
messages subjected to filtering)`, :abbr:`P (Policy for organizational domain)`, :abbr:`SP (Policy
|
||||
for subdomains of the OD)` :abbr:`ADKIM (Alignment mode for DKIM)` & :abbr:`ASPF (Alignment mode for
|
||||
SPF)`. For best practice, the the :abbr:`DMARC (Domain-based Message Authentication, Reporting, &
|
||||
Conformance)` policy should not start out being too restrictive.
|
||||
.. example::
|
||||
:literal:`_dmarc IN TXT “v=DMARC1; p=none; rua=mailto:postmaster@example.com”` means that
|
||||
aggregate DMARC reports will be sent to `postmaster\@example.com`.
|
||||
|
||||
The following chart displays available tags:
|
||||
.. _email_domain/mail_config_common_providers:
|
||||
.. _email-domain-providers-documentation:
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 15 50 35
|
||||
|
||||
* - Tag Name
|
||||
- Purpose
|
||||
- Example
|
||||
* - v
|
||||
- Protocol version
|
||||
- `v=DMARC1`
|
||||
* - pct
|
||||
- Percentage of messages subjected to filtering
|
||||
- `pct=20`
|
||||
* - ruf
|
||||
- Reporting URI for forensic reports
|
||||
- `ruf=mailto:authfail@example.com`
|
||||
* - rua
|
||||
- Reporting URI of aggregate reports
|
||||
- `rua=mailto:aggrep@example.com`
|
||||
* - p
|
||||
- Policy for organizational domain
|
||||
- `p=quarantine`
|
||||
* - sp
|
||||
- Policy for subdomains of the OD
|
||||
- `sp=reject`
|
||||
* - adkim
|
||||
- Alignment mode for DKIM
|
||||
- `adkim=s`
|
||||
* - aspf
|
||||
- Alignment mode for SPF
|
||||
- `aspf=r`
|
||||
|
||||
Check the :abbr:`DMARC (Domain-based Message Authentication, Reporting, & Conformance)` record of a
|
||||
domain name with a tool like `MXToolbox DMARC <https://mxtoolbox.com/DMARC.aspx>`_.
|
||||
|
||||
.. seealso::
|
||||
`DMARC.org is another great resource to learn about DMARC records.
|
||||
<https://dmarc.org/overview/>`_
|
||||
|
||||
.. _email_communication/SPFDKIM_common_providers:
|
||||
|
||||
SPF, DKIM & DMARC documentation of common providers
|
||||
===================================================
|
||||
SPF, DKIM and DMARC documentation of common providers
|
||||
=====================================================
|
||||
|
||||
- `OVH DNS <https://docs.ovh.com/us/en/domains/web_hosting_how_to_edit_my_dns_zone/>`_
|
||||
- `OVH SPF <https://docs.ovh.com/us/en/domains/web_hosting_the_spf_record/>`_
|
||||
- `GoDaddy TXT record <https://www.godaddy.com/help/add-a-txt-record-19232>`_
|
||||
- `GoDaddy SPF <https://www.godaddy.com/help/add-an-spf-record-19218>`_
|
||||
- `GoDaddy DKIM <https://www.godaddy.com/help/add-a-cname-record-19236>`_
|
||||
- `NameCheap <https://www.namecheap.com/support/knowledgebase/article.aspx/317/2237/how-do-i-add-
|
||||
txtspfdkimdmarc-records-for-my-domain/>`_
|
||||
- `GoDaddy CNAME record <https://www.godaddy.com/help/add-a-cname-record-19236>`_
|
||||
- `NameCheap <https://www.namecheap.com/support/knowledgebase/article.aspx/317/2237/how-do-i-add-txtspfdkimdmarc-records-for-my-domain/>`_
|
||||
- `CloudFlare DNS <https://support.cloudflare.com/hc/en-us/articles/360019093151>`_
|
||||
- `Google Domains <https://support.google.com/domains/answer/3290350?hl=en>`_
|
||||
- `Azure DNS <https://docs.microsoft.com/en-us/azure/dns/dns-getstarted-portal>`_
|
||||
|
||||
@@ -1,345 +0,0 @@
|
||||
.. _communication/emails_servers:
|
||||
|
||||
====================================================
|
||||
Send and receive emails in Odoo with an email server
|
||||
====================================================
|
||||
|
||||
Odoo Online or Odoo.sh users
|
||||
============================
|
||||
|
||||
Since **Odoo sets up its own mail servers for the database**, outgoing and incoming emails already
|
||||
work out-of-the-box. So for **Odoo Online** and **Odoo.sh** customers, nothing needs to be
|
||||
configured!
|
||||
|
||||
Unless an external mail server is required to send large batches of mass emails, simply use the
|
||||
standard online Odoo database normally since it has already been pre-configured to send email.
|
||||
|
||||
.. important::
|
||||
The Odoo server is subject to a daily email limit to prevent abuse. The default limit is 200
|
||||
emails sent per day for databases with an **Enterprise** subscription. This limit can be
|
||||
increased under certain conditions. See the :doc:`FAQ <faq>` or contact support for more
|
||||
information.
|
||||
|
||||
Scope of this documentation
|
||||
===========================
|
||||
|
||||
This document is **mainly dedicated to Odoo on-premise databases** that do not benefit from an
|
||||
out-of-the-box solution to send and receive emails in Odoo, unlike `Odoo Online <https://www.odoo.
|
||||
com/trial>`_ and `Odoo.sh <https://www.odoo.sh>`_. Incoming and outgoing servers must be configured
|
||||
for on-premise databases.
|
||||
|
||||
The following sections below contain information on how to integrate an external email server with
|
||||
Odoo.
|
||||
|
||||
.. warning::
|
||||
If no one in the company is employed to manage email servers, Odoo Online and Odoo.sh are
|
||||
strongly recommended. In these Odoo hosting types email sending and receiving works instantly
|
||||
and is monitored by professionals. Nevertheless, a company can use their own email server if
|
||||
they want to manage the email server's reputation themselves. For more information see
|
||||
:doc:`Configure DNS records to send emails in Odoo <email_domain>`
|
||||
|
||||
.. _email_servers/notifications:
|
||||
|
||||
Default notifications system
|
||||
============================
|
||||
|
||||
Documents in Odoo (such as a CRM opportunity, a sales order, an invoice, etc.) have a discussion
|
||||
thread, called *chatter*.
|
||||
|
||||
When a database user posts a message in the chatter, this message is sent by email to the followers
|
||||
of the document as a notification (except to the sender). If a follower replies to the message,
|
||||
the reply updates the chatter, and Odoo relays another reply to the followers as a notification.
|
||||
Messages sent back to the chatter from users or external users will appear in the chatter from
|
||||
their respective email, or as the name listed in their *Contacts* record.
|
||||
|
||||
These notifications are sent using a default from address. For more information see
|
||||
:ref:`Use a default email address <email_communication/default>`.
|
||||
|
||||
.. _email_servers/outbound:
|
||||
|
||||
Manage outbound messages
|
||||
========================
|
||||
|
||||
As a system administrator, go to :menuselection:`Settings --> General Settings --> Discuss` in Odoo,
|
||||
and enable the :guilabel:`Custom Email Servers` option. Then, click :guilabel:`Save`. Next, click
|
||||
:guilabel:`Outgoing Email Servers` and click :guilabel:`Create` to create a new outgoing mail server
|
||||
record in Odoo. Reference the SMTP data of the external email server. Once all the information has
|
||||
been filled out, click :guilabel:`Test Connection`.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`google_oauth`
|
||||
- :doc:`azure_oauth`
|
||||
|
||||
.. note::
|
||||
Ensuring the outgoing domain has :abbr:`SPF (Sender Policy Framework)`, :abbr:`DKIM (DomainKeys
|
||||
Identified Mail)` and :abbr:`DMARC (Domain-based Message Authentication, Reporting, &
|
||||
Conformance)` set up on the :abbr:`DNS (Domain Name System)` will improve deliverability. For
|
||||
more information see :doc:`email_domain`.
|
||||
|
||||
.. _email_servers/restriction:
|
||||
|
||||
Port restriction
|
||||
----------------
|
||||
|
||||
Note that port 25 is blocked for security reasons on the Odoo Online and Odoo.sh platforms. Try
|
||||
using ports 465, 587, or 2525 instead.
|
||||
|
||||
.. _email_communication/default:
|
||||
|
||||
Use a default "From" email address
|
||||
----------------------------------
|
||||
|
||||
Sometimes, an email's "From" (outgoing) address can belong to a different domain, and that can be a
|
||||
problem.
|
||||
|
||||
For example, if a customer with the email address `mary\@customer.example.com` responds to a
|
||||
message, Odoo will try to redistribute that same email to the other subscribers in the thread.
|
||||
However, if the domain `customer.example.com` forbids that kind of usage for security, the email
|
||||
that Odoo is trying to redistribute would get rejected by some recipients' email servers.
|
||||
|
||||
To avoid that problem, Odoo sends all emails using a "From" address from the same authorized
|
||||
domain.
|
||||
|
||||
Access the :guilabel:`System Parameters` by activating :ref:`developer mode <developer-mode>` and
|
||||
going to :menuselection:`Settings --> Technical --> Parameters --> System Parameters` menu.
|
||||
|
||||
To force the email address from which emails are sent, a combination of the following keys needs to
|
||||
be set in the system parameters of the database:
|
||||
|
||||
- `mail.default.from`: accepts the local part or a complete email address as value
|
||||
- `mail.default.from_filter`: accepts a domain name or a full email address as value
|
||||
|
||||
.. note::
|
||||
The `mail.default.from_filter` works only for `odoo-bin` configurations or the default Odoo email
|
||||
server, otherwise this parameter can be set using the `from_filter` field on `ir.mail_server`.
|
||||
|
||||
The field can be a domain name or an entire email address, or it can remain empty. If the sender's
|
||||
email address does not match this set filter, then the email will be encapsulated using a
|
||||
combination of the two system parameters: `mail.default.from` and `mail.catchall.domain`.
|
||||
|
||||
.. example::
|
||||
In the following example, the from email address is replaced with the combination of the the two
|
||||
system parameters (`mail.default.from` and `mail.catchall.domain`). This is the default \
|
||||
notifications configuration in Odoo: ``“Admin” <admin@example.com>`` => ``“Admin”
|
||||
<notifications@mycompany.com>``.
|
||||
|
||||
In other words if the email address of the author does not match `mail.default.from_filter`, the
|
||||
email address is replaced by `mail.default.from` (if it contains a full email address) or a
|
||||
combination of `mail.default.from` and `mail.catchall.domain`.
|
||||
|
||||
If the `from_filter` contains a full email address, and if the `mail.default.from` is the same as
|
||||
this address, then all of the email addresses that are different from `mail.default.from` will be
|
||||
encapsulated in `mail.default.from`.
|
||||
|
||||
.. _email_communication/from_filter:
|
||||
|
||||
Utilizing the "From" filter on an outgoing email server
|
||||
-------------------------------------------------------
|
||||
|
||||
The :guilabel:`FROM Filtering` field allows for the use of a specific outgoing email server
|
||||
depending on the :guilabel:`From` email address or domain that Odoo is sending on behalf of. This
|
||||
setting can be used to improve the deliverability or sending success rate of emails sent from the
|
||||
database. Setting the :guilabel:`FROM Filtering` field can also be used to send from different
|
||||
domains in a multi-company environment. Access this field in Odoo by navigating to
|
||||
:menuselection:`Settings --> Discuss --> Custom Mail Servers --> Outgoing Mail Servers --> New`.
|
||||
|
||||
.. image:: email_servers/from-filter-setting.png
|
||||
:align: center
|
||||
:alt: Outgoing email server settings and the FROM filter settings.
|
||||
|
||||
When an email is sent from Odoo while the :guilabel:`FROM Filtering` field is set, an email server
|
||||
is chosen in the following sequence:
|
||||
|
||||
#. First, Odoo searches for an email server that has the same :guilabel:`FROM Filtering` value as
|
||||
the :guilabel:`From` value (email address) defined in the outgoing email. For example, if the
|
||||
:guilabel:`From` value (email address) is `test\@example.com`, only the email servers that have
|
||||
the :guilabel:`FROM Filtering` value equal to `test\@example.com` are returned.
|
||||
#. However, if no email servers are found that use the :guilabel:`From` value, then Odoo searches
|
||||
for an email server that has the same *domain* as the :guilabel:`From` value (email address)
|
||||
defined in the outgoing email. For example, if the :guilabel:`From` email address is
|
||||
`test\@example.com`, only the email servers that have the :guilabel:`FROM Filtering` value equal
|
||||
to `example.com` are returned.
|
||||
|
||||
If no email servers are found after checking for the domain, then Odoo returns all email servers
|
||||
that do not have any :guilabel:`FROM Filtering` value(s) set.
|
||||
|
||||
Should this query return no results, then Odoo performs a search for an email server using the
|
||||
system parameter: `mail.default.from`. First, the email address listed attempts to match an email
|
||||
server, and then the domain attempts to find a match. If no email server is found, Odoo returns the
|
||||
first outgoing email server (sorted by priority).
|
||||
|
||||
.. note::
|
||||
If several email servers are found, then Odoo uses the first one according to its priority. For
|
||||
example, if there are two email servers, one with a priority of `10` and the other with a
|
||||
priority of `20`, then the email server with a priority of `10` is used first.
|
||||
|
||||
.. _email_communication/mass_mails:
|
||||
|
||||
Set up different dedicated servers for transactional and mass emails
|
||||
--------------------------------------------------------------------
|
||||
|
||||
In Odoo a separate email server can be used for transactional emails and mass
|
||||
mailings. Example: Use Postmark or SendinBlue for transactional emails, and Amazon SES, Mailgun,
|
||||
Sendgrid or :doc:`Mailjet <mailjet_api>` for mass mailings.
|
||||
|
||||
.. important::
|
||||
A default outgoing email server is already configured. Do not create an alternative one unless a
|
||||
specific external outgoing email server is needed for technical reasons.
|
||||
|
||||
To do this, first activate the :ref:`developer mode <developer-mode>`, and then go to
|
||||
:menuselection:`Settings --> Technical --> Outgoing` email servers. There, create two outgoing email
|
||||
server settings; one for the transactional emails and one for the mass mailing server. Make sure to
|
||||
give priority to the transactional server over the mass mailing server by providing a lower priority
|
||||
number for the transactional email server.
|
||||
|
||||
Now, go to :menuselection:`Email Marketing --> Settings` and enable :guilabel:`Dedicated Server`.
|
||||
Choose the appropriate email server. With these settings, Odoo uses the server with the lower
|
||||
priority for transactional emails, and the server here selected for mass mails. Note that in this
|
||||
case, the domain's Sender Policy Framework (SPF) records must be set to include both transactional
|
||||
and mass mail servers.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`email_domain`
|
||||
|
||||
.. _email_communication/inbound_messages:
|
||||
|
||||
Manage inbound messages
|
||||
=======================
|
||||
|
||||
Odoo relies on generic email aliases to fetch incoming messages.
|
||||
|
||||
* **Reply messages** of messages sent from Odoo are routed to their original discussion thread (and
|
||||
to the inbox of all its followers) by the alias of the model if there is any or by the catchall
|
||||
alias (**catchall@**). Replies to messages of models that do not have a custom alias will use the
|
||||
catchall alias (`catchall@mycompany.odoo.com`). The catchall address, however, does not have
|
||||
another action attached to it like other aliases might, it is only used to collect replies.
|
||||
* **Bounced messages** are used as a Return-Path. One example this is especially
|
||||
useful for is in `Odoo Email Marketing <https://www.odoo.com/page/email-marketing>`__. In this
|
||||
case bounces are opt-out based on if the email bounced too many times (5) in the last month and
|
||||
the bounces are separated by one week. This is done to avoid blacklisting someone because of a
|
||||
mail server error. If these circumstances are met then the email is considered invalid and is
|
||||
blacklisted. A log note is added on the contact under :guilabel:`Blacklisted Email Addresses` on
|
||||
the :guilabel:`Email Marketing Configuration Menu`.
|
||||
|
||||
Messages that bounce in the chatter (outside of Email Marketing) will populate a red envelope
|
||||
indicating the failed delivery. This can be helpful to know that a Sales Order or an Invoice did
|
||||
not reach its final destination.
|
||||
* **Original messages**: several business objects have their own alias to create new records in Odoo
|
||||
from incoming emails:
|
||||
|
||||
* Sales channel (to create *Leads* or *Opportunities* in `Odoo CRM <https://www.odoo.com/page/
|
||||
crm>`_)
|
||||
* Support channel (to create *Tickets* in `Odoo Helpdesk <https://www.odoo.com/page/helpdesk>`_)
|
||||
* Projects (to create new *Tasks* in `Odoo Project <https://www.odoo.com/page
|
||||
/project-management>`_)
|
||||
* Job positions (to create *Applicants* in `Odoo Recruitment <https://www.odoo.com/page
|
||||
/recruitment>`_)
|
||||
|
||||
Depending on the mail server, there might be several methods to fetch emails. The easiest and most
|
||||
recommended method is to manage one email address per Odoo alias in the mail server.
|
||||
|
||||
* Create the corresponding email addresses in the mail server (**catchall@**, **bounce@**,
|
||||
**sales@**, etc.).
|
||||
* Set the :guilabel:`Alias Domain` name in :menuselection:`Settings --> General Settings -->
|
||||
Discuss`. Changing the :guilabel:`Alias Domain` will change the catchall's domain for the
|
||||
database.
|
||||
* If the database's hosting type is Odoo on-premise, create an :guilabel:`Incoming Mail Server` in
|
||||
Odoo for each alias. To create a new incoming server go to: :menuselection:`Settings --> Discuss
|
||||
--> Custom Mail Servers --> Incoming Mail Servers --> New` Fill out the form according to the
|
||||
email provider's settings. Leave the :guilabel:`Actions to Perform on Incoming Mails` field blank.
|
||||
Once all the information has been filled out, click on :guilabel:`TEST & CONFIRM`.
|
||||
|
||||
.. image:: email_servers/incoming-server.png
|
||||
:align: center
|
||||
:alt: Incoming mail server configuration on Odoo.
|
||||
|
||||
* If the database's hosting type is Odoo Online or Odoo.sh, redirecting or forwarding incoming
|
||||
messages to Odoo's domain name instead of the external email server is recommended. That way,
|
||||
incoming messages can be received without delay. Redirections for all email addresses should be
|
||||
set to Odoo's domain name in the email server (e.g. `catchall\@mydomain.ext` to
|
||||
`catchall\@mycompany.odoo.com`).
|
||||
|
||||
All the aliases are customizable in Odoo. Object aliases can be edited from their respective
|
||||
configuration view by navigating to :menuselection:`Settings --> Technical Menu --> Email -->
|
||||
Aliases`.
|
||||
|
||||
To edit catchall and bounce aliases, first activate the :ref:`developer mode <developer-mode>`.
|
||||
Then, go to :menuselection:`Settings --> Technical --> Parameters --> System Parameters` to
|
||||
customize the aliases (`mail.catchall.alias` & `mail.bounce.alias`). These types of changes should
|
||||
be completed prior to the database going live. If a customer replies after a change is made then the
|
||||
system will not recognize the old alias, and the reply will not be received.
|
||||
|
||||
By default, inbound messages are fetched every 5 minutes for on-premise databases.
|
||||
|
||||
.. note::
|
||||
This value can be changed in :ref:`developer mode <developer-mode>`. Go to
|
||||
:menuselection:`Settings --> Technical --> Automation --> Scheduled Actions` and look for
|
||||
:guilabel:`Mail: Fetchmail Service`.
|
||||
|
||||
System parameters that prevent feedback loops
|
||||
---------------------------------------------
|
||||
|
||||
There are two system parameters that help prevent email loops from occurring in Odoo. These
|
||||
parameters were introduced in Odoo 16 to prevent aliases from creating too many records and to
|
||||
prevent feedback loops on the catchall reply-to email address. They are present in database but not
|
||||
in the *System Parameters*. To override the following defaults they need to be added in.
|
||||
|
||||
The two system parameters are as follows:
|
||||
|
||||
- `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`.
|
||||
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.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.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.
|
||||
|
||||
Allow alias domain system parameter
|
||||
-----------------------------------
|
||||
|
||||
Incoming aliases are set in the Odoo database to create records by receiving incoming emails. To
|
||||
view aliases set in the Odoo database, first activate the :ref:`developer mode <developer-mode>`.
|
||||
Then, go to :menuselection:`Settings app --> Technical --> Email section --> Aliases`.
|
||||
|
||||
The following system parameter, `mail.catchall.domain.allowed`, set with allowed alias domain
|
||||
values, separated by commas, filters out correctly addressed emails to aliases. Setting the
|
||||
domain(s) for which the alias can create a ticket, lead, opportunity, etc., eliminates false
|
||||
positives where email addresses with only the prefix alias (not the domain) are present.
|
||||
|
||||
In some instances, matches have been made in the Odoo database when an email is received with the
|
||||
same alias prefix and a different domain on the incoming email address. This is true in the sender,
|
||||
recipient, and :abbr:`CC (Carbon Copy)` email addresses of an incoming email.
|
||||
|
||||
.. example::
|
||||
When Odoo receives emails that have the name `commercial` prefix alias in the sender, recipient,
|
||||
or :abbr:`CC (Carbon Copy)` email address(es) (e.g. commercial@gmail.com, commercial@odoo.net),
|
||||
the database falsely treats the email as the full `commercial` alias (with a different domain),
|
||||
and therefore, creates a ticket/lead/opportunity/etc.
|
||||
|
||||
.. important::
|
||||
This alias mismatch issue has been resolved in Odoo 17, however, the
|
||||
`mail.catchall.domain.allowed` system parameter is still used in Odoo 17 for backward
|
||||
compatibility.
|
||||
|
||||
To add the `mail.catchall.domain.allowed` system parameter, first, activate the :ref:`developer mode
|
||||
<developer-mode>`. Then, go to :menuselection:`Settings app --> Technical --> Parameters section -->
|
||||
System Parameters`. Click :guilabel:`Create`. Then, type in `mail.catchall.domain.allowed` for the
|
||||
:guilabel:`Key` field.
|
||||
|
||||
Next, for the :guilabel:`Value` field, add the domain(s) separated by comma(s) (if plural domains).
|
||||
Manually :guilabel:`Save`, and the system parameter takes immediate effect.
|
||||
|
||||
.. image:: email_servers/allowed-domain.png
|
||||
:align: center
|
||||
:alt: mail.catchall.domain.allowed system parameter set with key and value highlighted.
|
||||
|
Before Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 36 KiB |