parent
4541ace207
commit
164533c1b4
@ -17,7 +17,7 @@ You can use a custom domain name to access your Odoo database and websites:
|
|||||||
``odoo.com`` for both the URL and the emails (e.g., ``https://example.odoo.com``).
|
``odoo.com`` for both the URL and the emails (e.g., ``https://example.odoo.com``).
|
||||||
|
|
||||||
.. important::
|
.. important::
|
||||||
Odoo offers a :ref:`free custom domain name <domain-name/odoo-register>` to all Odoo Online
|
Odoo offers a :ref:`free custom domain name <domain-name/odoo-register>` to all Odoo Online
|
||||||
databases for one year. Visitors can then access your website with an address such as
|
databases for one year. Visitors can then access your website with an address such as
|
||||||
``www.example.com`` rather than the default ``example.odoo.com``.
|
``www.example.com`` rather than the default ``example.odoo.com``.
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ On Linux, using an installer
|
|||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ sudo dpkg -i <path_to_enterprise_deb>
|
$ sudo dpkg -i <path_to_enterprise_deb>
|
||||||
|
|
||||||
* Update your database to the enterprise packages using
|
* Update your database to the enterprise packages using
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
@ -123,7 +123,7 @@ server in Odoo. The configuration automatically loads the token in Odoo, and a t
|
|||||||
:align: center
|
:align: center
|
||||||
:alt: Configure Outgoing Email Servers in Odoo.
|
:alt: Configure Outgoing Email Servers in Odoo.
|
||||||
|
|
||||||
Finally, save the settings and :guilabel:`Test the Connection`. A confirmation message should
|
Finally, save the settings and :guilabel:`Test the Connection`. A confirmation message should
|
||||||
appear. The Odoo database can now send safe, secure emails through Google using OAuth
|
appear. The Odoo database can now send safe, secure emails through Google using OAuth
|
||||||
authentication.
|
authentication.
|
||||||
|
|
||||||
|
@ -259,16 +259,16 @@ This server only keeps one month of backups: 7 daily and 4 weekly backups.
|
|||||||
Dedicated backup servers keep the same backups, as well as 3 additional monthly backups.
|
Dedicated backup servers keep the same backups, as well as 3 additional monthly backups.
|
||||||
To restore or download one of these monthly backups, please `contact us <https://www.odoo.com/help>`_.
|
To restore or download one of these monthly backups, please `contact us <https://www.odoo.com/help>`_.
|
||||||
|
|
||||||
If you merge a commit updating the version of one or several modules (in :file:`__manifest__.py`), or their linked python
|
If you merge a commit updating the version of one or several modules (in :file:`__manifest__.py`), or their linked python
|
||||||
dependencies (in :file:`requirements.txt`), then Odoo.sh performs a backup automatically (flagged with type Update in the list),
|
dependencies (in :file:`requirements.txt`), then Odoo.sh performs a backup automatically (flagged with type Update in the list),
|
||||||
as either the container will be changed by the installation of new pip packages, either the database itself will be
|
as either the container will be changed by the installation of new pip packages, either the database itself will be
|
||||||
changed with the module update triggered afterwards. In these two cases, we are doing a backup as it may potentially
|
changed with the module update triggered afterwards. In these two cases, we are doing a backup as it may potentially
|
||||||
break things.
|
break things.
|
||||||
|
|
||||||
If you merge a commit that only changes some code without the above-mentioned modifications, then no backup is done
|
If you merge a commit that only changes some code without the above-mentioned modifications, then no backup is done
|
||||||
by Odoo.sh, as neither the container nor the database is modified so the platform considers this safe enough. Of course,
|
by Odoo.sh, as neither the container nor the database is modified so the platform considers this safe enough. Of course,
|
||||||
as an extra precaution, you can make a backup manually before making big changes in your production sources in case
|
as an extra precaution, you can make a backup manually before making big changes in your production sources in case
|
||||||
something goes wrong (those manual backups are available for about one week). To avoid abuse, we limit manual backups
|
something goes wrong (those manual backups are available for about one week). To avoid abuse, we limit manual backups
|
||||||
to 5 per day.
|
to 5 per day.
|
||||||
|
|
||||||
The *import database* feature accepts database archives in the format provided by:
|
The *import database* feature accepts database archives in the format provided by:
|
||||||
|
@ -80,12 +80,12 @@ FAQ
|
|||||||
I have an error when I try to delete my synchronization within Odoo
|
I have an error when I try to delete my synchronization within Odoo
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
|
|
||||||
Odoo can't permanently delete the connection you have created with the banking institution. However,
|
Odoo can't permanently delete the connection you have created with the banking institution. However,
|
||||||
it can revoke the consent you gave so that Odoo won't be able to access your account anymore. The
|
it can revoke the consent you gave so that Odoo won't be able to access your account anymore. The
|
||||||
error you are seeing is probably a message telling you that the consent was revoked, but the record
|
error you are seeing is probably a message telling you that the consent was revoked, but the record
|
||||||
could not be deleted as it still exists within Salt edge. If you want to remove the connection
|
could not be deleted as it still exists within Salt edge. If you want to remove the connection
|
||||||
completely, please connect to your `Salt Edge account <https://www.saltedge.com/dashboard>`_
|
completely, please connect to your `Salt Edge account <https://www.saltedge.com/dashboard>`_
|
||||||
and manually delete your synchronization. Once this is done, you can go back to Odoo to delete the
|
and manually delete your synchronization. Once this is done, you can go back to Odoo to delete the
|
||||||
record.
|
record.
|
||||||
|
|
||||||
I have an error saying that I have already synchronized this account
|
I have an error saying that I have already synchronized this account
|
||||||
|
@ -11,7 +11,7 @@ Configuration
|
|||||||
.. image:: manage_cash_register/journal.png
|
.. image:: manage_cash_register/journal.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
1. Configure the Cash journal in :menuselection:`Accounting --> Configuration -->
|
1. Configure the Cash journal in :menuselection:`Accounting --> Configuration -->
|
||||||
Journals`.
|
Journals`.
|
||||||
|
|
||||||
2. In the tab Journal Entries, the Default Debit and Credit Account can be
|
2. In the tab Journal Entries, the Default Debit and Credit Account can be
|
||||||
|
@ -23,9 +23,9 @@ modules are available:
|
|||||||
- **l10n_ar_reports**: Add VAT Book report which is a legal requirement in Argentine and that holds
|
- **l10n_ar_reports**: Add VAT Book report which is a legal requirement in Argentine and that holds
|
||||||
the VAT detail info of sales or purchases recorded on the journal entries. This module includes as
|
the VAT detail info of sales or purchases recorded on the journal entries. This module includes as
|
||||||
well the VAT summary report that is used to analyze the invoice
|
well the VAT summary report that is used to analyze the invoice
|
||||||
|
|
||||||
- **l10n_ar_edi**: This module includes all technical and functional requirements to generate
|
- **l10n_ar_edi**: This module includes all technical and functional requirements to generate
|
||||||
Electronic Invoice via web service, based on the AFIP regulations.
|
Electronic Invoice via web service, based on the AFIP regulations.
|
||||||
|
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
@ -48,7 +48,7 @@ fiscal obligation and structure of the company:
|
|||||||
|
|
||||||
.. image:: argentina/argentina02.png
|
.. image:: argentina/argentina02.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
|
|
||||||
Chart of Account
|
Chart of Account
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
@ -75,9 +75,9 @@ Environment
|
|||||||
|
|
||||||
The AFIP infrastructure is replicated in two separate environments, Testing and Production.
|
The AFIP infrastructure is replicated in two separate environments, Testing and Production.
|
||||||
|
|
||||||
Testing is provided so that the Companies can test their developments until they are ready to move
|
Testing is provided so that the Companies can test their developments until they are ready to move
|
||||||
into the Production environment. As these two environments are completely isolated from each other,
|
into the Production environment. As these two environments are completely isolated from each other,
|
||||||
the digital certificates of one instance are not valid in the other one.
|
the digital certificates of one instance are not valid in the other one.
|
||||||
|
|
||||||
Go to :menuselection:`Accounting --> Settings --> Argentinian Localization` to select the environment:
|
Go to :menuselection:`Accounting --> Settings --> Argentinian Localization` to select the environment:
|
||||||
|
|
||||||
@ -87,10 +87,10 @@ Go to :menuselection:`Accounting --> Settings --> Argentinian Localization` to s
|
|||||||
|
|
||||||
AFIP Certificates
|
AFIP Certificates
|
||||||
*****************
|
*****************
|
||||||
The electronic invoice and other afip services work with WebServices (WS) provided by the AFIP.
|
The electronic invoice and other afip services work with WebServices (WS) provided by the AFIP.
|
||||||
|
|
||||||
In order to enable communication with the AFIP, the first step is to request a Digital Certificate
|
In order to enable communication with the AFIP, the first step is to request a Digital Certificate
|
||||||
if you don’t have one already.
|
if you don’t have one already.
|
||||||
|
|
||||||
#. Generate certificate Sign Request (Odoo). When this option is selected a file with extension
|
#. Generate certificate Sign Request (Odoo). When this option is selected a file with extension
|
||||||
``.csr`` (certificate signing request) is generated to be used the AFIP portal to request the
|
``.csr`` (certificate signing request) is generated to be used the AFIP portal to request the
|
||||||
@ -101,7 +101,7 @@ if you don’t have one already.
|
|||||||
#. Generate Certificate (AFIP). Access the AFIP portal and follow the instructions described in the
|
#. Generate Certificate (AFIP). Access the AFIP portal and follow the instructions described in the
|
||||||
next document in order to get a certificate. `Get AFIP Certificate
|
next document in order to get a certificate. `Get AFIP Certificate
|
||||||
<http://www.afip.gob.ar/ws/WSAA/wsaa_obtener_certificado_produccion.pdf>`_.
|
<http://www.afip.gob.ar/ws/WSAA/wsaa_obtener_certificado_produccion.pdf>`_.
|
||||||
|
|
||||||
#. Upload Certificate and Private Key (Odoo). Once the certificate has been generated, it needs to
|
#. Upload Certificate and Private Key (Odoo). Once the certificate has been generated, it needs to
|
||||||
be uploaded in Odoo, using the pencil next in the field “Certificado” and selecting the
|
be uploaded in Odoo, using the pencil next in the field “Certificado” and selecting the
|
||||||
corresponding file.
|
corresponding file.
|
||||||
@ -109,7 +109,7 @@ if you don’t have one already.
|
|||||||
.. image:: argentina/argentina_edi_03.png
|
.. image:: argentina/argentina_edi_03.png
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
In case you need to configure the Homologation Certificate, please refer to the AFIP official
|
In case you need to configure the Homologation Certificate, please refer to the AFIP official
|
||||||
documentation: `Homologation Certificate
|
documentation: `Homologation Certificate
|
||||||
<http://www.afip.gob.ar/ws/documentacion/certificados.asp>`_.
|
<http://www.afip.gob.ar/ws/documentacion/certificados.asp>`_.
|
||||||
|
|
||||||
@ -244,11 +244,11 @@ defines as well:
|
|||||||
#. The structure and data of the electronic invoice file.
|
#. The structure and data of the electronic invoice file.
|
||||||
|
|
||||||
Web Services
|
Web Services
|
||||||
************
|
************
|
||||||
- ``wsfev1: Electronic Invoice.`` This is the most common service,
|
- ``wsfev1: Electronic Invoice.`` This is the most common service,
|
||||||
is used to generated invoices for document types A, B, C, M with no detail per item.
|
is used to generated invoices for document types A, B, C, M with no detail per item.
|
||||||
- ``wsbfev1: Electronic Fiscal Bond.`` For those who invoice capital goods and wish
|
- ``wsbfev1: Electronic Fiscal Bond.`` For those who invoice capital goods and wish
|
||||||
to access the benefit of the Electronic Tax Bonds granted by the Ministry of Economy. For more
|
to access the benefit of the Electronic Tax Bonds granted by the Ministry of Economy. For more
|
||||||
detail you can refer to the next link: `Fiscal Bond
|
detail you can refer to the next link: `Fiscal Bond
|
||||||
<https://www.argentina.gob.ar/acceder-un-bono-por-fabricar-bienes-de-capital>`_.
|
<https://www.argentina.gob.ar/acceder-un-bono-por-fabricar-bienes-de-capital>`_.
|
||||||
- ``wsfexv1: Electronic Exportation Invoice.`` Used to generate invoices for international customers
|
- ``wsfexv1: Electronic Exportation Invoice.`` Used to generate invoices for international customers
|
||||||
@ -282,8 +282,8 @@ can be used:
|
|||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
When creating the Purchase journals, it's possible to define if they can be related to document
|
When creating the Purchase journals, it's possible to define if they can be related to document
|
||||||
types or not. In case that the option to use documents is selected, there is no need to manually
|
types or not. In case that the option to use documents is selected, there is no need to manually
|
||||||
associate the document type sequences as the document number is provided by the vendor.
|
associate the document type sequences as the document number is provided by the vendor.
|
||||||
|
|
||||||
|
|
||||||
@ -326,22 +326,22 @@ responsibility type but it can be updated manually by the user.
|
|||||||
|
|
||||||
Electronic Invoice elements
|
Electronic Invoice elements
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
When using electronic invoice, if all the information is correct the Invoice is posted in the
|
When using electronic invoice, if all the information is correct the Invoice is posted in the
|
||||||
standard way, in case that something needs to be addressed (check the section common errors for more
|
standard way, in case that something needs to be addressed (check the section common errors for more
|
||||||
detail), an error message is raised indicating the issue/proposed solution and the invoice remains
|
detail), an error message is raised indicating the issue/proposed solution and the invoice remains
|
||||||
in draft until the related data is corrected.
|
in draft until the related data is corrected.
|
||||||
|
|
||||||
Once the invoice is posted, the information related to the AFIP validation and status is displayed
|
Once the invoice is posted, the information related to the AFIP validation and status is displayed
|
||||||
in the AFIP Tab, including:
|
in the AFIP Tab, including:
|
||||||
|
|
||||||
- AFIP Autorisation: CAE number.
|
- AFIP Autorisation: CAE number.
|
||||||
- Expiration date: Deadline to deliver the invoice to the customers. Normally 10 days after the
|
- Expiration date: Deadline to deliver the invoice to the customers. Normally 10 days after the
|
||||||
CAE is generated.
|
CAE is generated.
|
||||||
- Result:
|
- Result:
|
||||||
|
|
||||||
- Aceptado en AFIP.
|
- Aceptado en AFIP.
|
||||||
- Aceptado con Observaciones.
|
- Aceptado con Observaciones.
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_15.png
|
.. image:: argentina/argentina_edi_15.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
@ -378,7 +378,7 @@ Special Use Cases
|
|||||||
Invoices for Services
|
Invoices for Services
|
||||||
*********************
|
*********************
|
||||||
For electronic invoices that include Services, the AFIP requires to report the service starting
|
For electronic invoices that include Services, the AFIP requires to report the service starting
|
||||||
and ending date, this information can be filled in the tab “Other Info”:
|
and ending date, this information can be filled in the tab “Other Info”:
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_06.png
|
.. image:: argentina/argentina_edi_06.png
|
||||||
:align: center
|
:align: center
|
||||||
@ -392,34 +392,34 @@ filled automatically considering the beginning and day of the invoice month:
|
|||||||
|
|
||||||
Exportation Invoices
|
Exportation Invoices
|
||||||
********************
|
********************
|
||||||
The invoices related to Exportation transactions required a Journal that used the AFIP POS
|
The invoices related to Exportation transactions required a Journal that used the AFIP POS
|
||||||
System “Expo Voucher - Web Service” so the proper document type be associated:
|
System “Expo Voucher - Web Service” so the proper document type be associated:
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_08.png
|
.. image:: argentina/argentina_edi_08.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
When the customer selected in the Invoice has set the AFIP responsibility type as “Cliente /
|
When the customer selected in the Invoice has set the AFIP responsibility type as “Cliente /
|
||||||
Proveedor del Exterior” or “IVA Liberado – Ley Nº 19.640”, Odoo automatically assigned:
|
Proveedor del Exterior” or “IVA Liberado – Ley Nº 19.640”, Odoo automatically assigned:
|
||||||
|
|
||||||
- Journal related to the exportation Web Service.
|
- Journal related to the exportation Web Service.
|
||||||
- Exportation document type .
|
- Exportation document type .
|
||||||
- Fiscal position: Compras/Ventas al exterior.
|
- Fiscal position: Compras/Ventas al exterior.
|
||||||
- Concepto AFIP: Products / Definitive export of goods.
|
- Concepto AFIP: Products / Definitive export of goods.
|
||||||
- Exempt Taxes.
|
- Exempt Taxes.
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_09.png
|
.. image:: argentina/argentina_edi_09.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
The Exportation Documents required the Incoterm in :menuselection:`Other Info --> Accounting`:
|
The Exportation Documents required the Incoterm in :menuselection:`Other Info --> Accounting`:
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_13.png
|
.. image:: argentina/argentina_edi_13.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
|
|
||||||
Fiscal Bond
|
Fiscal Bond
|
||||||
***********
|
***********
|
||||||
The Electronic Fiscal bond is used for those who invoice capital goods and wish to access
|
The Electronic Fiscal bond is used for those who invoice capital goods and wish to access
|
||||||
the benefit of the Electronic Tax Bonds granted by the Ministry of Economy.
|
the benefit of the Electronic Tax Bonds granted by the Ministry of Economy.
|
||||||
|
|
||||||
For these transactions it’s important to have into consideration the next requirements:
|
For these transactions it’s important to have into consideration the next requirements:
|
||||||
@ -435,77 +435,77 @@ For these transactions it’s important to have into consideration the next requ
|
|||||||
- Quantity.
|
- Quantity.
|
||||||
- Unit of measurement.
|
- Unit of measurement.
|
||||||
- Bonus.
|
- Bonus.
|
||||||
- VAT rate.
|
- VAT rate.
|
||||||
|
|
||||||
|
|
||||||
Electronic Credit Invoice MiPyme (FCE)
|
Electronic Credit Invoice MiPyme (FCE)
|
||||||
**************************************
|
**************************************
|
||||||
|
|
||||||
**Invoices:** There are several document types classified as Mipyme also known as
|
**Invoices:** There are several document types classified as Mipyme also known as
|
||||||
Electronic Credit Invoice (FCE in spanish), which is used to impulse the SME, its purpose is
|
Electronic Credit Invoice (FCE in spanish), which is used to impulse the SME, its purpose is
|
||||||
to develop a mechanism that improves the financing conditions of these companies and allows
|
to develop a mechanism that improves the financing conditions of these companies and allows
|
||||||
them to increase their productivity, through the early collection of credits and receivables
|
them to increase their productivity, through the early collection of credits and receivables
|
||||||
issued to their clients and / or vendors.
|
issued to their clients and / or vendors.
|
||||||
|
|
||||||
For these transactions it’s important to have into consideration the next requirements:
|
For these transactions it’s important to have into consideration the next requirements:
|
||||||
|
|
||||||
- Specific document types (201, 202, 206, etc).
|
- Specific document types (201, 202, 206, etc).
|
||||||
- The emisor should be eligible by the AFIP to MiPyme transactions.
|
- The emisor should be eligible by the AFIP to MiPyme transactions.
|
||||||
- The amount should be bigger than 100,000 ARS.
|
- The amount should be bigger than 100,000 ARS.
|
||||||
- A bank account type CBU must be related to the emisor, otherwise the invoice can’t
|
- A bank account type CBU must be related to the emisor, otherwise the invoice can’t
|
||||||
be validated, having these errors messages for example:
|
be validated, having these errors messages for example:
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_10.png
|
.. image:: argentina/argentina_edi_10.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
**Credit& Debit Notes:** When creating a Credit/Debit note related to a FCE document, it is
|
**Credit& Debit Notes:** When creating a Credit/Debit note related to a FCE document, it is
|
||||||
important take the next points into consideration:
|
important take the next points into consideration:
|
||||||
|
|
||||||
- Use the Credit and Debit Note buttons, so the correct reference of the originator
|
- Use the Credit and Debit Note buttons, so the correct reference of the originator
|
||||||
document passed to the note.
|
document passed to the note.
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_11.png
|
.. image:: argentina/argentina_edi_11.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
- The document letter should be the same than the originator document (either A or B).
|
- The document letter should be the same than the originator document (either A or B).
|
||||||
- The same currency as the source document must be used. When using a secondary currency
|
- The same currency as the source document must be used. When using a secondary currency
|
||||||
there is an exchange difference if the currency rate is different between the emission day
|
there is an exchange difference if the currency rate is different between the emission day
|
||||||
and the payment date, it’s possible to create a credit/debit note to decrease/increase the
|
and the payment date, it’s possible to create a credit/debit note to decrease/increase the
|
||||||
amount to pay in ARS.
|
amount to pay in ARS.
|
||||||
|
|
||||||
In the workflow we can have two scenarios:
|
In the workflow we can have two scenarios:
|
||||||
|
|
||||||
#. The FCE is rejected so the Credit Note should have the field “FCE, is Cancellation?” as True.
|
#. The FCE is rejected so the Credit Note should have the field “FCE, is Cancellation?” as True.
|
||||||
#. The Credit Note, is created with the negative amount to annulate the FCE document,
|
#. The Credit Note, is created with the negative amount to annulate the FCE document,
|
||||||
in this case the field “FCE, is Cancellation?” must be empty (false).
|
in this case the field “FCE, is Cancellation?” must be empty (false).
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_12.png
|
.. image:: argentina/argentina_edi_12.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Invoice printed report
|
Invoice printed report
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
The PDF report related to electronic invoices that have been validated by the AFIP includes
|
The PDF report related to electronic invoices that have been validated by the AFIP includes
|
||||||
a barcode at the bottom of the format which represent the CAE number, the Expiration Date is
|
a barcode at the bottom of the format which represent the CAE number, the Expiration Date is
|
||||||
also displayed as it’s legal requirement:
|
also displayed as it’s legal requirement:
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_14.png
|
.. image:: argentina/argentina_edi_14.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
|
|
||||||
Troubleshooting and Auditing
|
Troubleshooting and Auditing
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
For auditing and troubleshooting purposes you can get the detailed information of an
|
For auditing and troubleshooting purposes you can get the detailed information of an
|
||||||
invoice number that has been previously sent to the AFIP,
|
invoice number that has been previously sent to the AFIP,
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_23.png
|
.. image:: argentina/argentina_edi_23.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_24.png
|
.. image:: argentina/argentina_edi_24.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
|
|
||||||
You can also get the last number used in AFIP for a specific Document Type and POS Number
|
You can also get the last number used in AFIP for a specific Document Type and POS Number
|
||||||
as support for any possible issues on the sequence synchronization between Odoo and AFIP.
|
as support for any possible issues on the sequence synchronization between Odoo and AFIP.
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_22.png
|
.. image:: argentina/argentina_edi_22.png
|
||||||
:align: center
|
:align: center
|
||||||
@ -514,8 +514,8 @@ as support for any possible issues on the sequence synchronization between Odoo
|
|||||||
Vendor Bills
|
Vendor Bills
|
||||||
------------
|
------------
|
||||||
|
|
||||||
Based on the purchase journal selected for the vendor bill, the document type is now a required field.
|
Based on the purchase journal selected for the vendor bill, the document type is now a required field.
|
||||||
This value is auto populated based on the AFIP Responsibility type of Issuer and Customer, but the
|
This value is auto populated based on the AFIP Responsibility type of Issuer and Customer, but the
|
||||||
value can be switched if necessary.
|
value can be switched if necessary.
|
||||||
|
|
||||||
.. image:: argentina/argentina16.png
|
.. image:: argentina/argentina16.png
|
||||||
@ -528,20 +528,20 @@ expected.
|
|||||||
.. image:: argentina/argentina17.png
|
.. image:: argentina/argentina17.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
The vendor bill number is structured in the same way that the invoices with the difference
|
The vendor bill number is structured in the same way that the invoices with the difference
|
||||||
that the document sequence is input by the user: “Document Prefix - Letter - Document number".
|
that the document sequence is input by the user: “Document Prefix - Letter - Document number".
|
||||||
|
|
||||||
|
|
||||||
Validate Vendor Bill number in AFIP
|
Validate Vendor Bill number in AFIP
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
As most companies have internal controls to verify that the vendor bill is related to an AFIP
|
As most companies have internal controls to verify that the vendor bill is related to an AFIP
|
||||||
valid document, an automatic validation can be set in :menuselection:`Accounting --> Settings -->
|
valid document, an automatic validation can be set in :menuselection:`Accounting --> Settings -->
|
||||||
Argentinian Localization --> Validate document in the AFIP`, considering the following levels:
|
Argentinian Localization --> Validate document in the AFIP`, considering the following levels:
|
||||||
|
|
||||||
- **Not available:** The verification is not done (this is the default value).
|
- **Not available:** The verification is not done (this is the default value).
|
||||||
- **Available:** The verification is done, in case the number is not valid
|
- **Available:** The verification is done, in case the number is not valid
|
||||||
it only raises a warning but it allows you to post the vendor bill.
|
it only raises a warning but it allows you to post the vendor bill.
|
||||||
- **Required:** The verification is done and it doesn't allow the user to
|
- **Required:** The verification is done and it doesn't allow the user to
|
||||||
post the vendor bill if the document number is not valid.
|
post the vendor bill if the document number is not valid.
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_16.png
|
.. image:: argentina/argentina_edi_16.png
|
||||||
@ -549,13 +549,13 @@ Argentinian Localization --> Validate document in the AFIP`, considering the fol
|
|||||||
|
|
||||||
How to use it in Odoo
|
How to use it in Odoo
|
||||||
*********************
|
*********************
|
||||||
This tool incorporates in the vendor bill a new "Verify on AFIP" button located
|
This tool incorporates in the vendor bill a new "Verify on AFIP" button located
|
||||||
next to the AFIP Authorization code.
|
next to the AFIP Authorization code.
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_17.png
|
.. image:: argentina/argentina_edi_17.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
In case it’s not a valid AFIP authorization the value “Rejected” will be
|
In case it’s not a valid AFIP authorization the value “Rejected” will be
|
||||||
displayed and the details of the validation will be added to the chatter.
|
displayed and the details of the validation will be added to the chatter.
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_18.png
|
.. image:: argentina/argentina_edi_18.png
|
||||||
@ -566,8 +566,8 @@ Special Use cases
|
|||||||
~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~
|
||||||
Untaxed Concepts
|
Untaxed Concepts
|
||||||
****************
|
****************
|
||||||
There are some transactions that include items that are not part of the VAT base amount,
|
There are some transactions that include items that are not part of the VAT base amount,
|
||||||
this is commonly used in fuel and gasoline invoices.
|
this is commonly used in fuel and gasoline invoices.
|
||||||
|
|
||||||
The vendor bill will be registered using 1 item for each product that is part of the VAT
|
The vendor bill will be registered using 1 item for each product that is part of the VAT
|
||||||
base amount and an additional item to register the amount of the Exempt concept:
|
base amount and an additional item to register the amount of the Exempt concept:
|
||||||
@ -577,23 +577,23 @@ base amount and an additional item to register the amount of the Exempt concept
|
|||||||
|
|
||||||
Perception Taxes
|
Perception Taxes
|
||||||
****************
|
****************
|
||||||
The vendor bill will be registered using 1 item for each product that is part of the
|
The vendor bill will be registered using 1 item for each product that is part of the
|
||||||
VAT base amount, the perception tax can be added in any of the product lines, as result
|
VAT base amount, the perception tax can be added in any of the product lines, as result
|
||||||
we will have one tax group for the VAT and one for the perception, the perception default
|
we will have one tax group for the VAT and one for the perception, the perception default
|
||||||
value is always 1.00.
|
value is always 1.00.
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_20.png
|
.. image:: argentina/argentina_edi_20.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
You should use the pencil that is the next to the Perception amount to edit it
|
You should use the pencil that is the next to the Perception amount to edit it
|
||||||
and set the correct amount.
|
and set the correct amount.
|
||||||
|
|
||||||
.. image:: argentina/argentina_edi_21.png
|
.. image:: argentina/argentina_edi_21.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
After this is done the invoice can be validated.
|
After this is done the invoice can be validated.
|
||||||
|
|
||||||
|
|
||||||
Reports
|
Reports
|
||||||
=======
|
=======
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ The chart of accounts SKR03 and SKR04 are both supported in Odoo. You can choose
|
|||||||
one you want by going in :menuselection:`Accounting --> Configuration` then choose the
|
one you want by going in :menuselection:`Accounting --> Configuration` then choose the
|
||||||
package you want in the Fiscal Localization section.
|
package you want in the Fiscal Localization section.
|
||||||
|
|
||||||
Be careful, you can only change the accounting package as long as you have not created any accounting entry.
|
Be careful, you can only change the accounting package as long as you have not created any accounting entry.
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ German Accounting Reports
|
|||||||
|
|
||||||
Here is the list of German-specific reports available on Odoo Enterprise:
|
Here is the list of German-specific reports available on Odoo Enterprise:
|
||||||
|
|
||||||
- Balance Sheet
|
- Balance Sheet
|
||||||
- Profit & Loss
|
- Profit & Loss
|
||||||
- Tax Report (Umsatzsteuervoranmeldung)
|
- Tax Report (Umsatzsteuervoranmeldung)
|
||||||
- Partner VAT Intra
|
- Partner VAT Intra
|
||||||
|
@ -37,7 +37,7 @@ Give Odoo permission to process files
|
|||||||
Since the files are transmitted through Odoo's server before being sent to SDICoop or received by
|
Since the files are transmitted through Odoo's server before being sent to SDICoop or received by
|
||||||
your database, you need to authorize Odoo to process your files from your database.
|
your database, you need to authorize Odoo to process your files from your database.
|
||||||
|
|
||||||
To do this, go to :menuselection:`Accounting --> Settings --> Electronic Invoicing` and click on
|
To do this, go to :menuselection:`Accounting --> Settings --> Electronic Invoicing` and click on
|
||||||
*Register*.
|
*Register*.
|
||||||
|
|
||||||
.. image:: italy/register.png
|
.. image:: italy/register.png
|
||||||
|
@ -5,20 +5,20 @@ Peru
|
|||||||
Introduction
|
Introduction
|
||||||
============
|
============
|
||||||
|
|
||||||
The Peruvian localization has been improved and extended, in this version the next modules are
|
The Peruvian localization has been improved and extended, in this version the next modules are
|
||||||
available:
|
available:
|
||||||
|
|
||||||
- **l10n_pe**: Adds accounting features for the Peruvian localization, which represent the minimal
|
- **l10n_pe**: Adds accounting features for the Peruvian localization, which represent the minimal
|
||||||
configuration required for a company to operate in Peru and under the SUNAT regulations and
|
configuration required for a company to operate in Peru and under the SUNAT regulations and
|
||||||
guidelines. The main elements included in this module are: Chart of account, taxes,
|
guidelines. The main elements included in this module are: Chart of account, taxes,
|
||||||
document types.
|
document types.
|
||||||
|
|
||||||
- **l10n_pe_edi**: includes all technical and functional requirements to generate and validate
|
- **l10n_pe_edi**: includes all technical and functional requirements to generate and validate
|
||||||
Electronic Invoice, based on the SUNAT specification to create and process valid electronic
|
Electronic Invoice, based on the SUNAT specification to create and process valid electronic
|
||||||
documents, for more technical detail you can access the
|
documents, for more technical detail you can access the
|
||||||
`SUNAT EDI specifications <https://cpe.sunat.gob.pe/node/88/>`_,
|
`SUNAT EDI specifications <https://cpe.sunat.gob.pe/node/88/>`_,
|
||||||
that keeps track of new changes and updates.
|
that keeps track of new changes and updates.
|
||||||
The features of this module are based on the resolutions published on the
|
The features of this module are based on the resolutions published on the
|
||||||
`SUNAT Legislation <https://www.sunat.gob.pe/legislacion/general/index.html/>`_.
|
`SUNAT Legislation <https://www.sunat.gob.pe/legislacion/general/index.html/>`_.
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
@ -27,24 +27,24 @@ Configuration
|
|||||||
Install the Peruvian localization modules
|
Install the Peruvian localization modules
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
|
|
||||||
Go to *Apps* and search for Peru, then click Install in the module Peru EDI. This module has a
|
Go to *Apps* and search for Peru, then click Install in the module Peru EDI. This module has a
|
||||||
dependency with *Peru - Accounting*. In case this last one is not installed, Odoo installs it
|
dependency with *Peru - Accounting*. In case this last one is not installed, Odoo installs it
|
||||||
automatically within EDI.
|
automatically within EDI.
|
||||||
|
|
||||||
.. image:: peru/peru-modules.png
|
.. image:: peru/peru-modules.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: The "Module" filter is set on "Peru"
|
:alt: The "Module" filter is set on "Peru"
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
When you install a database from scratch selecting Peru as country, Odoo automatically
|
When you install a database from scratch selecting Peru as country, Odoo automatically
|
||||||
installs the base module: Peru - Accounting.
|
installs the base module: Peru - Accounting.
|
||||||
|
|
||||||
Configure your company
|
Configure your company
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
In addition to the basic information in the Company, we need to set Peru as the Country, this is
|
In addition to the basic information in the Company, we need to set Peru as the Country, this is
|
||||||
essential for the Electronic Invoice to work properly. The field **Address Type Code** represents
|
essential for the Electronic Invoice to work properly. The field **Address Type Code** represents
|
||||||
the establishment code assigned by the SUNAT when companies register their RUC (Unique Contributor
|
the establishment code assigned by the SUNAT when companies register their RUC (Unique Contributor
|
||||||
Registration):
|
Registration):
|
||||||
|
|
||||||
.. image:: peru/peru-company.png
|
.. image:: peru/peru-company.png
|
||||||
@ -53,18 +53,18 @@ Registration):
|
|||||||
|
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
In case the Address type code is unknown, you can set it as the default value: 0000. Be aware
|
In case the Address type code is unknown, you can set it as the default value: 0000. Be aware
|
||||||
that if an incorrect value is entered, the Electronic invoice validation might have errors.
|
that if an incorrect value is entered, the Electronic invoice validation might have errors.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
The NIF should be set following the RUC format.
|
The NIF should be set following the RUC format.
|
||||||
|
|
||||||
|
|
||||||
Chart of Account
|
Chart of Account
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The chart of accounts is installed by default as part of the set of data included in the
|
The chart of accounts is installed by default as part of the set of data included in the
|
||||||
localization module, the accounts are mapped automatically in:
|
localization module, the accounts are mapped automatically in:
|
||||||
|
|
||||||
- Taxes
|
- Taxes
|
||||||
- Default Account Payable.
|
- Default Account Payable.
|
||||||
@ -77,20 +77,20 @@ accounting.
|
|||||||
Accounting Settings
|
Accounting Settings
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
Once the modules are installed and the basic information of your company is set, you need to
|
Once the modules are installed and the basic information of your company is set, you need to
|
||||||
configure the elements required for Electronic Invoice. For this, go to :menuselection:`Accounting
|
configure the elements required for Electronic Invoice. For this, go to :menuselection:`Accounting
|
||||||
--> Settings --> Peruvian Localization`.
|
--> Settings --> Peruvian Localization`.
|
||||||
|
|
||||||
Basic Concepts
|
Basic Concepts
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Here are some terms that are essential on the Peruvian localization:
|
Here are some terms that are essential on the Peruvian localization:
|
||||||
|
|
||||||
- **EDI**: Electronic Data Interchange, which in this refers to the Electronic Invoice.
|
- **EDI**: Electronic Data Interchange, which in this refers to the Electronic Invoice.
|
||||||
- **SUNAT**: is the organization that enforces customs and taxation in Peru.
|
- **SUNAT**: is the organization that enforces customs and taxation in Peru.
|
||||||
- **OSE**: Electronic Service Operator, `OSE SUNAT's definition
|
- **OSE**: Electronic Service Operator, `OSE SUNAT's definition
|
||||||
<https://cpe.sunat.gob.pe/aliados/ose#:~:text=El%20Operador%20de%20Servicios%20Electr%C3%B3nicos%20(OSE)%20es%20qui%C3%A9n%20se%20encarga,otro%20documento%20que%20se%20emita>`_.
|
<https://cpe.sunat.gob.pe/aliados/ose#:~:text=El%20Operador%20de%20Servicios%20Electr%C3%B3nicos%20(OSE)%20es%20qui%C3%A9n%20se%20encarga,otro%20documento%20que%20se%20emita>`_.
|
||||||
- **CDR**: Receipt certificate (Constancia de Recepción).
|
- **CDR**: Receipt certificate (Constancia de Recepción).
|
||||||
- **SOL Credentials**: Sunat Operaciones en Línea. User and password are provided by the SUNAT and
|
- **SOL Credentials**: Sunat Operaciones en Línea. User and password are provided by the SUNAT and
|
||||||
grant access to Online Operations systems.
|
grant access to Online Operations systems.
|
||||||
|
|
||||||
@ -112,12 +112,12 @@ IAP (Odoo In-App Purchase)
|
|||||||
**************************
|
**************************
|
||||||
|
|
||||||
This is the default and the suggested option, considering the digital ceritificate is included as
|
This is the default and the suggested option, considering the digital ceritificate is included as
|
||||||
part of the service.
|
part of the service.
|
||||||
|
|
||||||
.. image:: peru/peru-IAP.png
|
.. image:: peru/peru-IAP.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: IAP option as signature providers
|
:alt: IAP option as signature providers
|
||||||
|
|
||||||
What is the IAP?
|
What is the IAP?
|
||||||
^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
@ -146,34 +146,34 @@ Package.
|
|||||||
| 20,000 | 440 |
|
| 20,000 | 440 |
|
||||||
+---------+-----+
|
+---------+-----+
|
||||||
|
|
||||||
The credits are consumed per each document that is sent to the OSE.
|
The credits are consumed per each document that is sent to the OSE.
|
||||||
|
|
||||||
.. important::
|
.. important::
|
||||||
If you have a validation error and the document needs to be sent one more time, one additional
|
If you have a validation error and the document needs to be sent one more time, one additional
|
||||||
credit will be charged. Therefore, it is paramount that you verify all information is correct
|
credit will be charged. Therefore, it is paramount that you verify all information is correct
|
||||||
before sending your document to the OSE.
|
before sending your document to the OSE.
|
||||||
|
|
||||||
What do you need to do?
|
What do you need to do?
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
- In Odoo, once your enterprise contract is activated and you start working in Production, you
|
- In Odoo, once your enterprise contract is activated and you start working in Production, you
|
||||||
need to buy credits once the first 1000 are consumed.
|
need to buy credits once the first 1000 are consumed.
|
||||||
- As Digiflow is the OSE used in the IAP, you need to affiliate it as the official OSE for your
|
- As Digiflow is the OSE used in the IAP, you need to affiliate it as the official OSE for your
|
||||||
company on the SUNAT website. This is a simple process. For more information, please check
|
company on the SUNAT website. This is a simple process. For more information, please check
|
||||||
`OSE Affiliation guide
|
`OSE Affiliation guide
|
||||||
<https://drive.google.com/file/d/1BkrMTZIiJyi5XI0lGMi3rbMzHddOL1pa/view?usp=sharing>`_.
|
<https://drive.google.com/file/d/1BkrMTZIiJyi5XI0lGMi3rbMzHddOL1pa/view?usp=sharing>`_.
|
||||||
- Register Digiflow as the authorized PSE, please check
|
- Register Digiflow as the authorized PSE, please check
|
||||||
`PSE Affiliation guide
|
`PSE Affiliation guide
|
||||||
<https://drive.google.com/file/d/1QZoqWvtQERpS0pqp6LcKmw7EBlm9EroU/view?usp=sharing>`_.
|
<https://drive.google.com/file/d/1QZoqWvtQERpS0pqp6LcKmw7EBlm9EroU/view?usp=sharing>`_.
|
||||||
|
|
||||||
Digiflow
|
Digiflow
|
||||||
********
|
********
|
||||||
|
|
||||||
This option can be used as an alternative, instead of using the IAP services you can send your
|
This option can be used as an alternative, instead of using the IAP services you can send your
|
||||||
document validation directly to Digiflow. In this case you need to consider:
|
document validation directly to Digiflow. In this case you need to consider:
|
||||||
|
|
||||||
- Buy your own digital Certificate: For more detail regarding the official vendor list, and the
|
- Buy your own digital Certificate: For more detail regarding the official vendor list, and the
|
||||||
process to acquire it, please refer to `SUNAT Digital Ceritifcates
|
process to acquire it, please refer to `SUNAT Digital Ceritifcates
|
||||||
<https://cpe.sunat.gob.pe/informacion_general/certificados_digitales/>`_.
|
<https://cpe.sunat.gob.pe/informacion_general/certificados_digitales/>`_.
|
||||||
- Sign a service agreement directly with `Digiflow <https://www.digiflow.pe/>`_.
|
- Sign a service agreement directly with `Digiflow <https://www.digiflow.pe/>`_.
|
||||||
- Provide your SOL credentials.
|
- Provide your SOL credentials.
|
||||||
@ -185,14 +185,14 @@ document validation directly to Digiflow. In this case you need to consider:
|
|||||||
SUNAT
|
SUNAT
|
||||||
*****
|
*****
|
||||||
|
|
||||||
In case your company wants to sign directly with the SUNAT, it is possible to select this option
|
In case your company wants to sign directly with the SUNAT, it is possible to select this option
|
||||||
in your configuration. In this case you need to consider:
|
in your configuration. In this case you need to consider:
|
||||||
- Get the SUNAT Certification process accepted.
|
- Get the SUNAT Certification process accepted.
|
||||||
|
|
||||||
- Buy your own digital Certificate: For more detail regarding the official vendor list, and the
|
- Buy your own digital Certificate: For more detail regarding the official vendor list, and the
|
||||||
process to acquire it, please refer to `SUNAT Digital Ceritifcates
|
process to acquire it, please refer to `SUNAT Digital Ceritifcates
|
||||||
<https://cpe.sunat.gob.pe/informacion_general/certificados_digitales/>`_.
|
<https://cpe.sunat.gob.pe/informacion_general/certificados_digitales/>`_.
|
||||||
|
|
||||||
- Provide you SOL credentials.
|
- Provide you SOL credentials.
|
||||||
|
|
||||||
.. important::
|
.. important::
|
||||||
@ -202,14 +202,14 @@ in your configuration. In this case you need to consider:
|
|||||||
Testing environment
|
Testing environment
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Odoo provides a testing environment that can be activated before your company goes into production.
|
Odoo provides a testing environment that can be activated before your company goes into production.
|
||||||
|
|
||||||
When using the testing environment and the IAP signature, you don’t need to buy testing credits
|
When using the testing environment and the IAP signature, you don’t need to buy testing credits
|
||||||
for your transactions as all of them are validated by default.
|
for your transactions as all of them are validated by default.
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
By default the databases are set to work on production, make sure to enable the testing mode
|
By default the databases are set to work on production, make sure to enable the testing mode
|
||||||
if needed.
|
if needed.
|
||||||
|
|
||||||
Certificate
|
Certificate
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
@ -221,17 +221,17 @@ password.
|
|||||||
.. image:: peru/peru-Certificate.png
|
.. image:: peru/peru-Certificate.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: EDI Certificate wizard
|
:alt: EDI Certificate wizard
|
||||||
|
|
||||||
Multicurrency
|
Multicurrency
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
The official currency exchange rate in Peru is provided by the Bank of Peru. Odoo can connect
|
The official currency exchange rate in Peru is provided by the Bank of Peru. Odoo can connect
|
||||||
directly to its services and get the currency rate either automatically or manually.
|
directly to its services and get the currency rate either automatically or manually.
|
||||||
|
|
||||||
.. image:: peru/peru-multicurrency.png
|
.. image:: peru/peru-multicurrency.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Bank of Peru is displayed in Multicurrency Service option
|
:alt: Bank of Peru is displayed in Multicurrency Service option
|
||||||
|
|
||||||
Please refer to the next section in our documentation for more information about
|
Please refer to the next section in our documentation for more information about
|
||||||
:doc:`multicurrencies <../../others/multi_currency>`.
|
:doc:`multicurrencies <../../others/multi_currency>`.
|
||||||
|
|
||||||
@ -241,7 +241,7 @@ Configure Master data
|
|||||||
Taxes
|
Taxes
|
||||||
~~~~~
|
~~~~~
|
||||||
|
|
||||||
As part of the localization module the taxes are created automatically with their related
|
As part of the localization module the taxes are created automatically with their related
|
||||||
financial account and electronic invoice configuration.
|
financial account and electronic invoice configuration.
|
||||||
|
|
||||||
.. image:: peru/peru-taxes.png
|
.. image:: peru/peru-taxes.png
|
||||||
@ -251,9 +251,9 @@ financial account and electronic invoice configuration.
|
|||||||
EDI Configuration
|
EDI Configuration
|
||||||
*****************
|
*****************
|
||||||
|
|
||||||
As part of the taxes configuration, there are three new fields required for electronic invoice,
|
As part of the taxes configuration, there are three new fields required for electronic invoice,
|
||||||
the taxes created by default have this data included, but in case you create new taxes make
|
the taxes created by default have this data included, but in case you create new taxes make
|
||||||
sure you fill in the fields:
|
sure you fill in the fields:
|
||||||
|
|
||||||
.. image:: peru/peru-taxes-edi.png
|
.. image:: peru/peru-taxes-edi.png
|
||||||
:align: center
|
:align: center
|
||||||
@ -272,15 +272,15 @@ There are two main fiscal positions included by default when you install the Per
|
|||||||
Document Types
|
Document Types
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
In some Latin American countries, including Peru, some accounting transactions like invoices and
|
In some Latin American countries, including Peru, some accounting transactions like invoices and
|
||||||
vendor bills are classified by document types, defined by the government fiscal authorities, in
|
vendor bills are classified by document types, defined by the government fiscal authorities, in
|
||||||
this case by the SUNAT.
|
this case by the SUNAT.
|
||||||
|
|
||||||
Each document type can have a unique sequence per journal where it is assigned. As part of the
|
Each document type can have a unique sequence per journal where it is assigned. As part of the
|
||||||
localization, the Document Type includes the country on which the document is applicable;the data
|
localization, the Document Type includes the country on which the document is applicable;the data
|
||||||
is created automatically when the localization module is installed.
|
is created automatically when the localization module is installed.
|
||||||
|
|
||||||
The information required for the document types is included by default so the user does not need
|
The information required for the document types is included by default so the user does not need
|
||||||
to fill anything on this view:
|
to fill anything on this view:
|
||||||
|
|
||||||
.. image:: peru/peru-document-type.png
|
.. image:: peru/peru-document-type.png
|
||||||
@ -288,7 +288,7 @@ to fill anything on this view:
|
|||||||
:alt: Document Type list
|
:alt: Document Type list
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
Currently the documents supported on customer invoices are: Invoice, Boleta, Debit Note and
|
Currently the documents supported on customer invoices are: Invoice, Boleta, Debit Note and
|
||||||
Credit Note.
|
Credit Note.
|
||||||
|
|
||||||
Journals
|
Journals
|
||||||
@ -297,17 +297,17 @@ Journals
|
|||||||
When creating Sales Journals, the following information must be filled, in addition to the standard
|
When creating Sales Journals, the following information must be filled, in addition to the standard
|
||||||
fields on the Journals:
|
fields on the Journals:
|
||||||
|
|
||||||
Use Documents
|
Use Documents
|
||||||
*************
|
*************
|
||||||
|
|
||||||
This field is used to define if the journal uses Document Types. It is only applicable to
|
This field is used to define if the journal uses Document Types. It is only applicable to
|
||||||
Purchase and Sales journals, which are the ones that can be related to the different set of
|
Purchase and Sales journals, which are the ones that can be related to the different set of
|
||||||
document types available in Peru. By default, all the sales journals created use documents.
|
document types available in Peru. By default, all the sales journals created use documents.
|
||||||
|
|
||||||
Electronic Data Interchange
|
Electronic Data Interchange
|
||||||
***************************
|
***************************
|
||||||
|
|
||||||
This section indicates which EDI workflow is used in the invoice, for Peru we must select
|
This section indicates which EDI workflow is used in the invoice, for Peru we must select
|
||||||
“Peru UBL 2.1”.
|
“Peru UBL 2.1”.
|
||||||
|
|
||||||
.. image:: peru/peru-journal-edi.png
|
.. image:: peru/peru-journal-edi.png
|
||||||
@ -323,8 +323,8 @@ Partner
|
|||||||
Identification Type and VAT
|
Identification Type and VAT
|
||||||
***************************
|
***************************
|
||||||
|
|
||||||
As part of the Peruvian localization, the identification types defined by the SUNAT are now
|
As part of the Peruvian localization, the identification types defined by the SUNAT are now
|
||||||
available on the Partner form, this information is essential for most transactions either on
|
available on the Partner form, this information is essential for most transactions either on
|
||||||
the sender company and in the customer, make sure you fill in this information in your records.
|
the sender company and in the customer, make sure you fill in this information in your records.
|
||||||
|
|
||||||
.. image:: peru/peru-id-type.png
|
.. image:: peru/peru-id-type.png
|
||||||
@ -335,8 +335,8 @@ the sender company and in the customer, make sure you fill in this information i
|
|||||||
Product
|
Product
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
|
|
||||||
Additional to the basic information in your products, for the Peruvian localization, the UNSPC
|
Additional to the basic information in your products, for the Peruvian localization, the UNSPC
|
||||||
Code on the product is a required value to be configured.
|
Code on the product is a required value to be configured.
|
||||||
|
|
||||||
.. image:: peru/peru-unspc-code.png
|
.. image:: peru/peru-unspc-code.png
|
||||||
:align: center
|
:align: center
|
||||||
@ -354,27 +354,27 @@ EDI Elements
|
|||||||
|
|
||||||
Once you have configured your master data, the invoices can be created from your sales order or
|
Once you have configured your master data, the invoices can be created from your sales order or
|
||||||
manually. Additional to the basic invoice information described on :doc:`our page about the
|
manually. Additional to the basic invoice information described on :doc:`our page about the
|
||||||
invoicing process <../../receivables/customer_invoices/overview>`, there are a couple of fields
|
invoicing process <../../receivables/customer_invoices/overview>`, there are a couple of fields
|
||||||
required as part of the Peru EDI:
|
required as part of the Peru EDI:
|
||||||
|
|
||||||
- **Document type**: The default value is “Factura Electronica” but you can manually change the
|
- **Document type**: The default value is “Factura Electronica” but you can manually change the
|
||||||
document type if needed and select Boleta for example.
|
document type if needed and select Boleta for example.
|
||||||
|
|
||||||
.. image:: peru/peru-invoice-document-type.png
|
.. image:: peru/peru-invoice-document-type.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Invoice document type field on invoices
|
:alt: Invoice document type field on invoices
|
||||||
|
|
||||||
- **Operation type**: This value is required for Electronic Invoice and indicates the transaction
|
- **Operation type**: This value is required for Electronic Invoice and indicates the transaction
|
||||||
type, the default value is “Internal Sale” but another value can be selected manually when needed,
|
type, the default value is “Internal Sale” but another value can be selected manually when needed,
|
||||||
for example Export of Goods.
|
for example Export of Goods.
|
||||||
|
|
||||||
.. image:: peru/peru-operation-type.png
|
.. image:: peru/peru-operation-type.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Invoice operation type field on invoices
|
:alt: Invoice operation type field on invoices
|
||||||
|
|
||||||
- **EDI Affectation Reason**: In the invoice lines, additional to the Tax there is a field “EDI
|
- **EDI Affectation Reason**: In the invoice lines, additional to the Tax there is a field “EDI
|
||||||
Affectation Reason” that determines the tax scope based on the SUNAT list that is displayed.
|
Affectation Reason” that determines the tax scope based on the SUNAT list that is displayed.
|
||||||
All the taxes loaded by default are associated with a default EDI affection reason, if needed
|
All the taxes loaded by default are associated with a default EDI affection reason, if needed
|
||||||
you can manually select another one when creating the invoice.
|
you can manually select another one when creating the invoice.
|
||||||
|
|
||||||
.. image:: peru/peru-tax-affectation-reason.png
|
.. image:: peru/peru-tax-affectation-reason.png
|
||||||
@ -385,70 +385,70 @@ Invoice validation
|
|||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Once you check all the information in your invoice is correct, you can proceed to validate it. This
|
Once you check all the information in your invoice is correct, you can proceed to validate it. This
|
||||||
action registers the account move and triggers the Electronic invoice workflow to send it to the
|
action registers the account move and triggers the Electronic invoice workflow to send it to the
|
||||||
OSE and the SUNAT. The following message is displayed at the top of the invoice:
|
OSE and the SUNAT. The following message is displayed at the top of the invoice:
|
||||||
|
|
||||||
.. image:: peru/peru-posted-invoice.png
|
.. image:: peru/peru-posted-invoice.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Sending of EDI Invoice in blue
|
:alt: Sending of EDI Invoice in blue
|
||||||
|
|
||||||
Asynchronous means that the document is not sent automatically after the invoice has been posted.
|
Asynchronous means that the document is not sent automatically after the invoice has been posted.
|
||||||
|
|
||||||
Electronic Invoice Status
|
Electronic Invoice Status
|
||||||
*************************
|
*************************
|
||||||
|
|
||||||
**To be Sent**: To be sent: Indicates the document is ready to be sent to the OSE, this can be
|
**To be Sent**: To be sent: Indicates the document is ready to be sent to the OSE, this can be
|
||||||
done either automatically by Odoo with a *cron* that runs every hour, or the user can send it
|
done either automatically by Odoo with a *cron* that runs every hour, or the user can send it
|
||||||
immediately by clicking on the button “Sent now”.
|
immediately by clicking on the button “Sent now”.
|
||||||
|
|
||||||
.. image:: peru/peru-sent-manual.png
|
.. image:: peru/peru-sent-manual.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Send EDI manually
|
:alt: Send EDI manually
|
||||||
|
|
||||||
**Sent**: Indicates the document was sent to the OSE and was successfully validated. As part of
|
**Sent**: Indicates the document was sent to the OSE and was successfully validated. As part of
|
||||||
the validation a ZIP file is downloaded and a message is logged in the chatter indicating the
|
the validation a ZIP file is downloaded and a message is logged in the chatter indicating the
|
||||||
correct Government validation.
|
correct Government validation.
|
||||||
|
|
||||||
.. image:: peru/peru-invoice-sent.png
|
.. image:: peru/peru-invoice-sent.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Message on chatter when the invoice is valid
|
:alt: Message on chatter when the invoice is valid
|
||||||
|
|
||||||
In case there is a validation error the Electronic Invoice status remains in “To be sent” so the
|
In case there is a validation error the Electronic Invoice status remains in “To be sent” so the
|
||||||
corrections can be made and the invoice can be sent again.
|
corrections can be made and the invoice can be sent again.
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
One credit is consumed each time that you send a document for validation, in this sense if an
|
One credit is consumed each time that you send a document for validation, in this sense if an
|
||||||
error is detected on an invoice and you send it one more time, two credits are consumed in
|
error is detected on an invoice and you send it one more time, two credits are consumed in
|
||||||
total.
|
total.
|
||||||
|
|
||||||
Common Errors
|
Common Errors
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
There are multiple reasons behind a rejection from the OSE or the SUNAT, when this happens Odoo
|
There are multiple reasons behind a rejection from the OSE or the SUNAT, when this happens Odoo
|
||||||
sends a message at the top of the invoice indicating the error details and in the most common
|
sends a message at the top of the invoice indicating the error details and in the most common
|
||||||
cases a hint to fix the issue.
|
cases a hint to fix the issue.
|
||||||
|
|
||||||
If a validation error is received, you have two options:
|
If a validation error is received, you have two options:
|
||||||
|
|
||||||
- In case the error is related to master data on the partner, customer or taxes, you can simply
|
- In case the error is related to master data on the partner, customer or taxes, you can simply
|
||||||
apply the change on the record (example customer identification type) and once it is done click
|
apply the change on the record (example customer identification type) and once it is done click
|
||||||
on the Retry button.
|
on the Retry button.
|
||||||
- If the error is related to some data recorded on the invoice directly (Operation type, missing
|
- If the error is related to some data recorded on the invoice directly (Operation type, missing
|
||||||
data on the invoice lines), the correct solution is to reset the invoice to Draft, apply the
|
data on the invoice lines), the correct solution is to reset the invoice to Draft, apply the
|
||||||
changes, and then send the invoice again to the SUNAT for another validation.
|
changes, and then send the invoice again to the SUNAT for another validation.
|
||||||
|
|
||||||
.. image:: peru/peru-errors.png
|
.. image:: peru/peru-errors.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: List of common errors on invoices
|
:alt: List of common errors on invoices
|
||||||
|
|
||||||
|
|
||||||
For more detail please refert to `Common errors in SUNAT
|
For more detail please refert to `Common errors in SUNAT
|
||||||
<https://www.nubefact.com/codigos-error-sunat/>`_.
|
<https://www.nubefact.com/codigos-error-sunat/>`_.
|
||||||
|
|
||||||
Invoice PDF Report
|
Invoice PDF Report
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
After the invoice is accepted and validated by the SUNAT, the invoice PDF report can be printed.
|
After the invoice is accepted and validated by the SUNAT, the invoice PDF report can be printed.
|
||||||
The report includes a QR code, indicating the invoice is a valid fiscal document.
|
The report includes a QR code, indicating the invoice is a valid fiscal document.
|
||||||
|
|
||||||
.. image:: peru/peru-PDF.png
|
.. image:: peru/peru-PDF.png
|
||||||
@ -458,18 +458,18 @@ The report includes a QR code, indicating the invoice is a valid fiscal document
|
|||||||
IAP Credits
|
IAP Credits
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
|
|
||||||
Odoo’s Electronic IAP offers 1000 credits for free, after these credits are consumed in your
|
Odoo’s Electronic IAP offers 1000 credits for free, after these credits are consumed in your
|
||||||
production database, your company must buy new credits in order to process your transactions.
|
production database, your company must buy new credits in order to process your transactions.
|
||||||
|
|
||||||
Once you run out of credits a red label is displayed at the top of the invoice indicating that
|
Once you run out of credits a red label is displayed at the top of the invoice indicating that
|
||||||
additional credits are required, you can easily buy them by accessing the link provided in
|
additional credits are required, you can easily buy them by accessing the link provided in
|
||||||
the message.
|
the message.
|
||||||
|
|
||||||
.. image:: peru/peru-credits-IAP.png
|
.. image:: peru/peru-credits-IAP.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Buying credits in the IAP
|
:alt: Buying credits in the IAP
|
||||||
|
|
||||||
In the IAP service includes packages with different pricing based on the number of credits.
|
In the IAP service includes packages with different pricing based on the number of credits.
|
||||||
The price list in the IAP is always displayed in EUR.
|
The price list in the IAP is always displayed in EUR.
|
||||||
|
|
||||||
Special Use cases
|
Special Use cases
|
||||||
@ -478,30 +478,30 @@ Special Use cases
|
|||||||
Cancellation process
|
Cancellation process
|
||||||
********************
|
********************
|
||||||
|
|
||||||
Some scenarios require an invoice cancellation, for example, when an invoice was created by mistake.
|
Some scenarios require an invoice cancellation, for example, when an invoice was created by mistake.
|
||||||
If the invoice was already sent and validated by the SUNAT, the correct way to proceed is by
|
If the invoice was already sent and validated by the SUNAT, the correct way to proceed is by
|
||||||
clicking on the button Request Cancellation:
|
clicking on the button Request Cancellation:
|
||||||
|
|
||||||
.. image:: peru/peru-cancellation.png
|
.. image:: peru/peru-cancellation.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Request invoice cancellation button
|
:alt: Request invoice cancellation button
|
||||||
|
|
||||||
In order to cancel an invoice, please provide a cancellation Reason.
|
In order to cancel an invoice, please provide a cancellation Reason.
|
||||||
|
|
||||||
Electronic Invoice Status
|
Electronic Invoice Status
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
**To Cancel**: Indicates the cancellation request is ready to be sent to the OSE, this can be done
|
**To Cancel**: Indicates the cancellation request is ready to be sent to the OSE, this can be done
|
||||||
either automatically by Odoo with a *cron* that runs every hour, or the user can send it
|
either automatically by Odoo with a *cron* that runs every hour, or the user can send it
|
||||||
immediately by clicking on the button “Send now”. Once it is sent, a cancellation ticket is
|
immediately by clicking on the button “Send now”. Once it is sent, a cancellation ticket is
|
||||||
created, as a result the next message and CDR File are logged in the chatter:
|
created, as a result the next message and CDR File are logged in the chatter:
|
||||||
|
|
||||||
.. image:: peru/peru-cancellation-cdr.png
|
.. image:: peru/peru-cancellation-cdr.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Cancellation CDR sent by the SUNAT
|
:alt: Cancellation CDR sent by the SUNAT
|
||||||
|
|
||||||
**Cancelled**: Indicates the cancellation request was sent to the OSE and was successfully
|
**Cancelled**: Indicates the cancellation request was sent to the OSE and was successfully
|
||||||
validated. As part of the validation a ZIP file is downloaded and a message is logged in the
|
validated. As part of the validation a ZIP file is downloaded and a message is logged in the
|
||||||
chatter indicating the correct Government validation.
|
chatter indicating the correct Government validation.
|
||||||
|
|
||||||
.. image:: peru/peru-cancelled.png
|
.. image:: peru/peru-cancelled.png
|
||||||
@ -510,14 +510,14 @@ chatter indicating the correct Government validation.
|
|||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
One credit is consumed on each cancellation request.
|
One credit is consumed on each cancellation request.
|
||||||
|
|
||||||
Cancellation process
|
Cancellation process
|
||||||
********************
|
********************
|
||||||
|
|
||||||
When creating exportation invoices, take into account the next considerations:
|
When creating exportation invoices, take into account the next considerations:
|
||||||
|
|
||||||
- The Identification type on your customer must be Foreign ID.
|
- The Identification type on your customer must be Foreign ID.
|
||||||
- Operation type in your invoice must be an Exportation one.
|
- Operation type in your invoice must be an Exportation one.
|
||||||
- The taxes included in the invoice lines should be EXP taxes.
|
- The taxes included in the invoice lines should be EXP taxes.
|
||||||
|
|
||||||
.. image:: peru/peru-exp-invoice.png
|
.. image:: peru/peru-exp-invoice.png
|
||||||
@ -527,24 +527,24 @@ When creating exportation invoices, take into account the next considerations:
|
|||||||
Advance Payments
|
Advance Payments
|
||||||
****************
|
****************
|
||||||
|
|
||||||
#. Create the advance payment Invoice and apply its related payment.
|
#. Create the advance payment Invoice and apply its related payment.
|
||||||
#. Create the final invoice without considering the advance payment.
|
#. Create the final invoice without considering the advance payment.
|
||||||
#. Create a credit note for the Final invoice with the advance payment amount.
|
#. Create a credit note for the Final invoice with the advance payment amount.
|
||||||
#. Reconcile the Credit note with the final invoice.
|
#. Reconcile the Credit note with the final invoice.
|
||||||
#. The remaining balance on the final invoice should be paid with a regular payment transaction.
|
#. The remaining balance on the final invoice should be paid with a regular payment transaction.
|
||||||
|
|
||||||
|
|
||||||
Detraction Invoices
|
Detraction Invoices
|
||||||
********************
|
********************
|
||||||
|
|
||||||
When creating invoices that is subject to Detractions, take into account the next considerations:
|
When creating invoices that is subject to Detractions, take into account the next considerations:
|
||||||
|
|
||||||
#. All the products included in the invoice must have these fields configured:
|
#. All the products included in the invoice must have these fields configured:
|
||||||
|
|
||||||
.. image:: peru/peru-detraction.png
|
.. image:: peru/peru-detraction.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Detraction fields on products
|
:alt: Detraction fields on products
|
||||||
|
|
||||||
#. Operation type in your invoice must be ``1001``
|
#. Operation type in your invoice must be ``1001``
|
||||||
|
|
||||||
.. image:: peru/peru-detraction-invoice.png
|
.. image:: peru/peru-detraction-invoice.png
|
||||||
@ -554,8 +554,8 @@ When creating invoices that is subject to Detractions, take into account the nex
|
|||||||
Credit Notes
|
Credit Notes
|
||||||
------------
|
------------
|
||||||
|
|
||||||
When a correction or refund is needed over a validated invoice, a credit note must be generated,
|
When a correction or refund is needed over a validated invoice, a credit note must be generated,
|
||||||
for this just click on the button “Add Credit Note”, a part of the Peruvian localization you need
|
for this just click on the button “Add Credit Note”, a part of the Peruvian localization you need
|
||||||
to prove a Credit Reason selecting one of the options in the list.
|
to prove a Credit Reason selecting one of the options in the list.
|
||||||
|
|
||||||
.. image:: peru/peru-credit-note.png
|
.. image:: peru/peru-credit-note.png
|
||||||
@ -563,9 +563,9 @@ to prove a Credit Reason selecting one of the options in the list.
|
|||||||
:alt: Add Credit Note from invoice
|
:alt: Add Credit Note from invoice
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
When creating your first credit Note, select the Credit Method: Partial Refund, this allows you
|
When creating your first credit Note, select the Credit Method: Partial Refund, this allows you
|
||||||
to define the credit note sequence.
|
to define the credit note sequence.
|
||||||
|
|
||||||
By default the Credit Note is set in the document type:
|
By default the Credit Note is set in the document type:
|
||||||
|
|
||||||
.. image:: peru/peru-credit-note-document.png
|
.. image:: peru/peru-credit-note-document.png
|
||||||
@ -576,13 +576,13 @@ To finish the workflow please follow the instructions on :doc:`our page about Cr
|
|||||||
<../../receivables/customer_invoices/credit_notes>`.
|
<../../receivables/customer_invoices/credit_notes>`.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
The EDI workflow for the Credit notes works in the same way as the invoices.
|
The EDI workflow for the Credit notes works in the same way as the invoices.
|
||||||
|
|
||||||
|
|
||||||
Debit Notes
|
Debit Notes
|
||||||
------------
|
------------
|
||||||
|
|
||||||
As part of the Peruvian localization, besides creating credit notes from an existing document
|
As part of the Peruvian localization, besides creating credit notes from an existing document
|
||||||
you can also create debit Notes. For this just use the button “Add Debit Note”.
|
you can also create debit Notes. For this just use the button “Add Debit Note”.
|
||||||
|
|
||||||
By default the Debit Note is set in the document type.
|
By default the Debit Note is set in the document type.
|
||||||
|
@ -9,12 +9,12 @@ In Odoo, there are several Spanish Chart of Accounts that are available by defau
|
|||||||
|
|
||||||
- PGCE PYMEs 2008
|
- PGCE PYMEs 2008
|
||||||
- PGCE Completo 2008
|
- PGCE Completo 2008
|
||||||
- PGCE Entitades
|
- PGCE Entitades
|
||||||
|
|
||||||
You can choose the one you want by going in :menuselection:`Accounting --> Configuration`
|
You can choose the one you want by going in :menuselection:`Accounting --> Configuration`
|
||||||
then choose the package you want in the **Fiscal Localization** section.
|
then choose the package you want in the **Fiscal Localization** section.
|
||||||
|
|
||||||
Be careful, you can only change the accounting package as long as you have not created any accounting entry.
|
Be careful, you can only change the accounting package as long as you have not created any accounting entry.
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
When you create a new Odoo Online database, the PGCE PYMEs 2008 is installed by default.
|
When you create a new Odoo Online database, the PGCE PYMEs 2008 is installed by default.
|
||||||
@ -24,7 +24,7 @@ Spanish Accounting Reports
|
|||||||
|
|
||||||
If the Spanish Accounting Localization is installed, you will have access to accounting reports specific to Spain:
|
If the Spanish Accounting Localization is installed, you will have access to accounting reports specific to Spain:
|
||||||
|
|
||||||
- Balance Sheet
|
- Balance Sheet
|
||||||
- Tax Report (Modelo 111)
|
- Tax Report (Modelo 111)
|
||||||
- Tax Report (Modelo 115)
|
- Tax Report (Modelo 115)
|
||||||
- Tax Report (Modelo 303)
|
- Tax Report (Modelo 303)
|
||||||
|
@ -12,7 +12,7 @@ called *Print ISR*.
|
|||||||
.. image:: switzerland/switzerland00.png
|
.. image:: switzerland/switzerland00.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
The button *Print ISR* only appears there is well a bank account
|
The button *Print ISR* only appears there is well a bank account
|
||||||
defined on the invoice. You can use CH6309000000250097798 as bank
|
defined on the invoice. You can use CH6309000000250097798 as bank
|
||||||
account number and 010391391 as CHF ISR reference.
|
account number and 010391391 as CHF ISR reference.
|
||||||
@ -142,4 +142,4 @@ odoo.com/help.
|
|||||||
.. tip::
|
.. tip::
|
||||||
Don't forget to update your fiscal positions. If you have a version
|
Don't forget to update your fiscal positions. If you have a version
|
||||||
11.1 (or higher), there is nothing to do. Otherwise, you will also
|
11.1 (or higher), there is nothing to do. Otherwise, you will also
|
||||||
have to update your fiscal positions accordingly.
|
have to update your fiscal positions accordingly.
|
||||||
|
@ -17,7 +17,7 @@ From Vendor Bill to Payment
|
|||||||
Record a new vendor bill
|
Record a new vendor bill
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
When a vendor bill is received, you can record it from :menuselection:`Purchases --> Vendor Bills`
|
When a vendor bill is received, you can record it from :menuselection:`Purchases --> Vendor Bills`
|
||||||
in the Accounting application. As a shortcut,
|
in the Accounting application. As a shortcut,
|
||||||
you can also use the **New Bill** feature on the accounting dashboard.
|
you can also use the **New Bill** feature on the accounting dashboard.
|
||||||
|
|
||||||
@ -36,12 +36,12 @@ Save the invoice to update the pre tax and tax amounts at the bottom of
|
|||||||
the screen. You will most likely need to configure the prices of your
|
the screen. You will most likely need to configure the prices of your
|
||||||
products without taxes as Odoo will compute the tax for you.
|
products without taxes as Odoo will compute the tax for you.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
On the bottom left corner, Odoo shows a summary table of all taxes on the vendor bill.
|
On the bottom left corner, Odoo shows a summary table of all taxes on the vendor bill.
|
||||||
In several countries, different methods are accepted to round the totals (round per line,
|
In several countries, different methods are accepted to round the totals (round per line,
|
||||||
or round globally). The default rounding method in Odoo is to round the final prices
|
or round globally). The default rounding method in Odoo is to round the final prices
|
||||||
per line (as you may have different taxes per product. E.g. Alcohol and cigarettes).
|
per line (as you may have different taxes per product. E.g. Alcohol and cigarettes).
|
||||||
However if your vendor has a different tax amount on their bill, you can change the
|
However if your vendor has a different tax amount on their bill, you can change the
|
||||||
amount in the bottom left table to adjust and match.
|
amount in the bottom left table to adjust and match.
|
||||||
|
|
||||||
Validate The Vendor Bill
|
Validate The Vendor Bill
|
||||||
@ -91,8 +91,8 @@ if set it correctly).
|
|||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
You can also register a payment to a vendor directly without applying it to a vendor bill.
|
You can also register a payment to a vendor directly without applying it to a vendor bill.
|
||||||
To do that, :menuselection:`Purchases --> Payments`. Then,
|
To do that, :menuselection:`Purchases --> Payments`. Then,
|
||||||
from the vendor bill you will be able to reconcile this payment with directly.
|
from the vendor bill you will be able to reconcile this payment with directly.
|
||||||
|
|
||||||
Printing vendor Checks
|
Printing vendor Checks
|
||||||
|
@ -7,9 +7,9 @@ Overview
|
|||||||
|
|
||||||
Managing budgets is an essential part of running a business. Budgets help
|
Managing budgets is an essential part of running a business. Budgets help
|
||||||
people become more intentional with the way money is spent and direct people
|
people become more intentional with the way money is spent and direct people
|
||||||
to organize and prioritize their work to meet financial goals. They allows
|
to organize and prioritize their work to meet financial goals. They allows
|
||||||
you to plan your desired financial outcome and then measure your actual
|
you to plan your desired financial outcome and then measure your actual
|
||||||
performance against the plan. Odoo manages budgets using both General and Analytic
|
performance against the plan. Odoo manages budgets using both General and Analytic
|
||||||
Accounts.
|
Accounts.
|
||||||
|
|
||||||
We will use the following example to illustrate. We just started a
|
We will use the following example to illustrate. We just started a
|
||||||
@ -17,7 +17,7 @@ project with Smith&Co and we would like to budget the incomes and
|
|||||||
expenses of that project. We plan to have a revenue of 1000 and we don't
|
expenses of that project. We plan to have a revenue of 1000 and we don't
|
||||||
want to spend more than 700.
|
want to spend more than 700.
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
=============
|
=============
|
||||||
|
|
||||||
First we need to install the relevant apps to use budgeting. The main
|
First we need to install the relevant apps to use budgeting. The main
|
||||||
@ -40,17 +40,17 @@ Budgetary Positions
|
|||||||
Budgetary positions are lists of accounts for which you want to keep
|
Budgetary positions are lists of accounts for which you want to keep
|
||||||
budgets (typically expense or income accounts). They need to be defined
|
budgets (typically expense or income accounts). They need to be defined
|
||||||
so Odoo can know it which accounts he needs to go get the budget
|
so Odoo can know it which accounts he needs to go get the budget
|
||||||
information.
|
information.
|
||||||
|
|
||||||
The budgetary positions act as a type of restriction on what can be recorded
|
The budgetary positions act as a type of restriction on what can be recorded
|
||||||
in the 'practical amount' column in a budget.
|
in the 'practical amount' column in a budget.
|
||||||
|
|
||||||
Each budgetary position can have any number of accounts from the general
|
Each budgetary position can have any number of accounts from the general
|
||||||
ledger (the main chart of accounts) assigned to it, though it must have at least one.
|
ledger (the main chart of accounts) assigned to it, though it must have at least one.
|
||||||
|
|
||||||
If you record a transaction that has an analytic account assigned to it that *is*
|
If you record a transaction that has an analytic account assigned to it that *is*
|
||||||
included in a budget line but one of the general ledger accounts *is not* included
|
included in a budget line but one of the general ledger accounts *is not* included
|
||||||
in the budgetary position for that same budget line, it will not appear within the
|
in the budgetary position for that same budget line, it will not appear within the
|
||||||
'practical amount' column of that budget line.
|
'practical amount' column of that budget line.
|
||||||
|
|
||||||
Some budgetary positions might be already installed with your chart of
|
Some budgetary positions might be already installed with your chart of
|
||||||
|
@ -19,7 +19,7 @@ First, install the three applications necessary to use this
|
|||||||
functionality, namely **Accounting**, **Sales** and **Timesheet**. Enter the apps
|
functionality, namely **Accounting**, **Sales** and **Timesheet**. Enter the apps
|
||||||
module name and install them.
|
module name and install them.
|
||||||
|
|
||||||
.. image:: timesheets/timesheets14.png
|
.. image:: timesheets/timesheets14.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
.. image:: timesheets/timesheets05.png
|
.. image:: timesheets/timesheets05.png
|
||||||
@ -51,14 +51,14 @@ cost of 18 euros / hours. We will thus fill in 18 in this field.
|
|||||||
.. image:: timesheets/timesheets07.png
|
.. image:: timesheets/timesheets07.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
If you want the employee to be able to enter timesheets he
|
If you want the employee to be able to enter timesheets he
|
||||||
needs to be related to a User.
|
needs to be related to a User.
|
||||||
|
|
||||||
Repeat the operation to create the Cedric Digory employee. Don't forget
|
Repeat the operation to create the Cedric Digory employee. Don't forget
|
||||||
to specify its related user and **Timesheet Costs**.
|
to specify its related user and **Timesheet Costs**.
|
||||||
|
|
||||||
Issue a Sales Order
|
Issue a Sales Order
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
We created two employees called Harry Potter and Cedric Diggory in the
|
We created two employees called Harry Potter and Cedric Diggory in the
|
||||||
@ -121,7 +121,7 @@ Without filters
|
|||||||
|
|
||||||
If we pointed all our costs and revenues of the project on the correct
|
If we pointed all our costs and revenues of the project on the correct
|
||||||
analytical account we can easily retrieve the cost and revenues related
|
analytical account we can easily retrieve the cost and revenues related
|
||||||
to this analytical account. Enter the *Accounting* app, select
|
to this analytical account. Enter the *Accounting* app, select
|
||||||
:menuselection:`Adviser --> Analytic Accounts --> Open Charts`.
|
:menuselection:`Adviser --> Analytic Accounts --> Open Charts`.
|
||||||
|
|
||||||
Note : you can specify a period for **Analysis**. If you want to open the
|
Note : you can specify a period for **Analysis**. If you want to open the
|
||||||
|
@ -13,11 +13,11 @@ Iceland, Norway, Switzerland, Andorra, Monaco and San Marino.
|
|||||||
With Odoo, once you decide to pay a vendor, you can select to pay the
|
With Odoo, once you decide to pay a vendor, you can select to pay the
|
||||||
bill with SEPA. Then, at the end of the day, the manager can generate
|
bill with SEPA. Then, at the end of the day, the manager can generate
|
||||||
the SEPA file containing all bank wire transfers and send it to the
|
the SEPA file containing all bank wire transfers and send it to the
|
||||||
bank.
|
bank.
|
||||||
|
|
||||||
By default,the file follows the SEPA Credit Transfer **'pain.001.001.03'**
|
By default,the file follows the SEPA Credit Transfer **'pain.001.001.03'**
|
||||||
specifications. This is a well-defined standard that makes consensus
|
specifications. This is a well-defined standard that makes consensus
|
||||||
among banks. However, according to the country set on your company,
|
among banks. However, according to the country set on your company,
|
||||||
another format can be used : **'pain.001.001.03.ch.02'** for Switzerland
|
another format can be used : **'pain.001.001.03.ch.02'** for Switzerland
|
||||||
and **'pain.001.003.03'** for Germany.
|
and **'pain.001.003.03'** for Germany.
|
||||||
|
|
||||||
|
@ -3,11 +3,11 @@ Cash rounding
|
|||||||
=============
|
=============
|
||||||
|
|
||||||
**Cash rounding** is required when the lowest physical denomination
|
**Cash rounding** is required when the lowest physical denomination
|
||||||
of currency, or the smallest coin, is higher than the minimum unit
|
of currency, or the smallest coin, is higher than the minimum unit
|
||||||
of account.
|
of account.
|
||||||
|
|
||||||
For example, some countries require their companies to round up or
|
For example, some countries require their companies to round up or
|
||||||
down the total amount of an invoice to the nearest five cents, when
|
down the total amount of an invoice to the nearest five cents, when
|
||||||
the payment is made in cash.
|
the payment is made in cash.
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
@ -19,22 +19,22 @@ and enable *Cash Rounding*, then click on *Save*.
|
|||||||
.. image:: cash_rounding/cash_rounding01.png
|
.. image:: cash_rounding/cash_rounding01.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Go to :menuselection:`Accounting --> Configuration --> Cash Roundings`,
|
Go to :menuselection:`Accounting --> Configuration --> Cash Roundings`,
|
||||||
and click on *Create*.
|
and click on *Create*.
|
||||||
|
|
||||||
Define here your *Rounding Precision*, *Rounding Strategy*, and
|
Define here your *Rounding Precision*, *Rounding Strategy*, and
|
||||||
*Rounding Method*.
|
*Rounding Method*.
|
||||||
|
|
||||||
Odoo supports two **rounding strategies**:
|
Odoo supports two **rounding strategies**:
|
||||||
|
|
||||||
1. **Add a rounding line**: a *rounding* line is added on the invoice.
|
1. **Add a rounding line**: a *rounding* line is added on the invoice.
|
||||||
You have to define which account records the cash roundings.
|
You have to define which account records the cash roundings.
|
||||||
|
|
||||||
2. **Modify tax amount**: the rounding is applied in the taxes section.
|
2. **Modify tax amount**: the rounding is applied in the taxes section.
|
||||||
|
|
||||||
Apply roundings
|
Apply roundings
|
||||||
===============
|
===============
|
||||||
|
|
||||||
When editing a draft invoice, open the *Other Info* tab, go to the
|
When editing a draft invoice, open the *Other Info* tab, go to the
|
||||||
*Accounting Information* section, and select the appropriate *Cash
|
*Accounting Information* section, and select the appropriate *Cash
|
||||||
Rounding Method*.
|
Rounding Method*.
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
========================
|
========================
|
||||||
Credit notes and refunds
|
Credit notes and refunds
|
||||||
========================
|
========================
|
||||||
A **credit note**, or **credit memo**, is a document issued
|
A **credit note**, or **credit memo**, is a document issued
|
||||||
to a customer that notifies them that they have been credited
|
to a customer that notifies them that they have been credited
|
||||||
a certain amount.
|
a certain amount.
|
||||||
|
|
||||||
There are several reasons that can lead to a credit note, such as:
|
There are several reasons that can lead to a credit note, such as:
|
||||||
@ -11,19 +11,19 @@ There are several reasons that can lead to a credit note, such as:
|
|||||||
* the goods delivered are damaged
|
* the goods delivered are damaged
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Issuing a credit note is the only legal way to cancel,
|
Issuing a credit note is the only legal way to cancel,
|
||||||
refund or modify a validated invoice. Don’t forget to
|
refund or modify a validated invoice. Don’t forget to
|
||||||
*register the payment* afterward if you need to send money
|
*register the payment* afterward if you need to send money
|
||||||
back to your customer.
|
back to your customer.
|
||||||
|
|
||||||
Issue a Credit Note
|
Issue a Credit Note
|
||||||
===================
|
===================
|
||||||
You can create a credit note from scratch by going to
|
You can create a credit note from scratch by going to
|
||||||
:menuselection:`Accounting --> Customers --> Credit Notes`,
|
:menuselection:`Accounting --> Customers --> Credit Notes`,
|
||||||
and by clicking on *Create*. Filling the Credit Note’s form
|
and by clicking on *Create*. Filling the Credit Note’s form
|
||||||
works the same way as the Invoice’s form.
|
works the same way as the Invoice’s form.
|
||||||
|
|
||||||
However, most of the time, credit notes are generated directly
|
However, most of the time, credit notes are generated directly
|
||||||
from the invoices they are related to.
|
from the invoices they are related to.
|
||||||
|
|
||||||
To do so, open the *Customer Invoice*, and click on *Add Credit Note*.
|
To do so, open the *Customer Invoice*, and click on *Add Credit Note*.
|
||||||
@ -37,15 +37,15 @@ You can choose between three options:
|
|||||||
- Full refund and new draft invoice
|
- Full refund and new draft invoice
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Credit Notes’ numbers start with “R” and are followed by the
|
Credit Notes’ numbers start with “R” and are followed by the
|
||||||
number of the document they are related to (e.g., RINV/2019/0004).
|
number of the document they are related to (e.g., RINV/2019/0004).
|
||||||
|
|
||||||
Partial Refund
|
Partial Refund
|
||||||
--------------
|
--------------
|
||||||
Odoo creates a draft credit note already prefilled with all the
|
Odoo creates a draft credit note already prefilled with all the
|
||||||
necessary information from the original invoice.
|
necessary information from the original invoice.
|
||||||
|
|
||||||
This is the option to choose to do a partial refund, or if you
|
This is the option to choose to do a partial refund, or if you
|
||||||
want to modify any detail on the credit note.
|
want to modify any detail on the credit note.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
@ -53,19 +53,19 @@ want to modify any detail on the credit note.
|
|||||||
|
|
||||||
Full Refund
|
Full Refund
|
||||||
-----------
|
-----------
|
||||||
Odoo creates a credit note, automatically validates it, and
|
Odoo creates a credit note, automatically validates it, and
|
||||||
reconciles the original invoice with it.
|
reconciles the original invoice with it.
|
||||||
|
|
||||||
.. image:: credit_notes/credit_notes02.png
|
.. image:: credit_notes/credit_notes02.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
This is the option to choose to do a full refund or cancel
|
This is the option to choose to do a full refund or cancel
|
||||||
a validated invoice.
|
a validated invoice.
|
||||||
|
|
||||||
Full refund and new draft invoice
|
Full refund and new draft invoice
|
||||||
---------------------------------
|
---------------------------------
|
||||||
Odoo creates a credit note, automatically validates it, reconciles
|
Odoo creates a credit note, automatically validates it, reconciles
|
||||||
the original invoice with it, and open a new draft invoice
|
the original invoice with it, and open a new draft invoice
|
||||||
prefilled with the same details from the original invoice.
|
prefilled with the same details from the original invoice.
|
||||||
|
|
||||||
This is the option to choose to modify the content of a validated invoice.
|
This is the option to choose to modify the content of a validated invoice.
|
||||||
@ -74,22 +74,22 @@ Record a Vendor Refund
|
|||||||
======================
|
======================
|
||||||
**Vendor Refunds** are recorded the same way you would do with invoices’ credit notes:
|
**Vendor Refunds** are recorded the same way you would do with invoices’ credit notes:
|
||||||
|
|
||||||
You can either create a credit note from scratch by going
|
You can either create a credit note from scratch by going
|
||||||
to :menuselection:`Accounting --> Vendors --> Refund`, and
|
to :menuselection:`Accounting --> Vendors --> Refund`, and
|
||||||
by clicking on *Create*, or by opening the validated *Vendor Bill*,
|
by clicking on *Create*, or by opening the validated *Vendor Bill*,
|
||||||
and clicking on *Add Credit Note*.
|
and clicking on *Add Credit Note*.
|
||||||
|
|
||||||
Journal Entries
|
Journal Entries
|
||||||
===============
|
===============
|
||||||
Issuing a credit note from an invoice creates a **reverse entry**
|
Issuing a credit note from an invoice creates a **reverse entry**
|
||||||
that zeroes out the journal items generated by the original invoice.
|
that zeroes out the journal items generated by the original invoice.
|
||||||
|
|
||||||
Here is an example of an invoice’s journal entry:
|
Here is an example of an invoice’s journal entry:
|
||||||
|
|
||||||
.. image:: credit_notes/credit_notes03.png
|
.. image:: credit_notes/credit_notes03.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
And here is the credit note’s journal entry generated to reverse
|
And here is the credit note’s journal entry generated to reverse
|
||||||
the original invoice above:
|
the original invoice above:
|
||||||
|
|
||||||
.. image:: credit_notes/credit_notes04.png
|
.. image:: credit_notes/credit_notes04.png
|
||||||
|
@ -42,7 +42,7 @@ Configuration --> Chart of Accounts`, click on *Create*, and fill out the form.
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
This account's type must be either *Current Liabilities* or *Non-current Liabilities*
|
This account's type must be either *Current Liabilities* or *Non-current Liabilities*
|
||||||
|
|
||||||
Post an income to the right account
|
Post an income to the right account
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
@ -64,7 +64,7 @@ save.
|
|||||||
|
|
||||||
.. image:: deferred_revenues/deferred_revenues03.png
|
.. image:: deferred_revenues/deferred_revenues03.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Change of the Income Account for a product in Odoo
|
:alt: Change of the Income Account for a product in Odoo
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
It is possible to automate the creation of revenue entries for these products (see:
|
It is possible to automate the creation of revenue entries for these products (see:
|
||||||
@ -75,11 +75,11 @@ Change the account of a posted journal item
|
|||||||
|
|
||||||
To do so, open your Sales Journal by going to
|
To do so, open your Sales Journal by going to
|
||||||
:menuselection:`Accounting --> Accounting --> Sales`, select the journal item you
|
:menuselection:`Accounting --> Accounting --> Sales`, select the journal item you
|
||||||
want to modify, click on the account, and select the right one.
|
want to modify, click on the account, and select the right one.
|
||||||
|
|
||||||
.. image:: deferred_revenues/deferred_revenues04.png
|
.. image:: deferred_revenues/deferred_revenues04.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Modification of a posted journal item's account in Odoo Accounting
|
:alt: Modification of a posted journal item's account in Odoo Accounting
|
||||||
|
|
||||||
Deferred Revenues entries
|
Deferred Revenues entries
|
||||||
=========================
|
=========================
|
||||||
@ -107,8 +107,8 @@ recognize your revenue, and at which date.
|
|||||||
|
|
||||||
.. image:: deferred_revenues/deferred_revenues06.png
|
.. image:: deferred_revenues/deferred_revenues06.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Revenue Board in Odoo Accounting
|
:alt: Revenue Board in Odoo Accounting
|
||||||
|
|
||||||
What does "Prorata Temporis" mean?
|
What does "Prorata Temporis" mean?
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@ -126,7 +126,7 @@ Deferred Entry from the Sales Journal
|
|||||||
|
|
||||||
You can create a deferred entry from a specific journal item in your **Sales Journal**.
|
You can create a deferred entry from a specific journal item in your **Sales Journal**.
|
||||||
|
|
||||||
To do so, open your Sales Journal by going to
|
To do so, open your Sales Journal by going to
|
||||||
:menuselection:`Accounting --> Accounting --> Sales`, and select the journal item you want to defer.
|
:menuselection:`Accounting --> Accounting --> Sales`, and select the journal item you want to defer.
|
||||||
Make sure that it is posted in the right account (see:
|
Make sure that it is posted in the right account (see:
|
||||||
`Change the account of a posted journal item`_).
|
`Change the account of a posted journal item`_).
|
||||||
|
@ -1,36 +1,36 @@
|
|||||||
============================
|
============================
|
||||||
Add EPC QR Codes to invoices
|
Add EPC QR Codes to invoices
|
||||||
============================
|
============================
|
||||||
European Payments Council Quick Response Code,
|
European Payments Council Quick Response Code,
|
||||||
or **EPC QR Code**, are two-dimensional barcodes
|
or **EPC QR Code**, are two-dimensional barcodes
|
||||||
that customers can scan with their **mobile banking
|
that customers can scan with their **mobile banking
|
||||||
applications** to initiate a **SEPA Credit Transfer
|
applications** to initiate a **SEPA Credit Transfer
|
||||||
(SCT)**, and pay their invoices instantly.
|
(SCT)**, and pay their invoices instantly.
|
||||||
|
|
||||||
In addition to bringing ease of use and speed,
|
In addition to bringing ease of use and speed,
|
||||||
it greatly reduces typing errors that would potentially
|
it greatly reduces typing errors that would potentially
|
||||||
make for payment issues.
|
make for payment issues.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
This feature is only available in several European
|
This feature is only available in several European
|
||||||
countries such as Austria, Belgium, Finland, Germany,
|
countries such as Austria, Belgium, Finland, Germany,
|
||||||
and The Netherlands.
|
and The Netherlands.
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
=============
|
=============
|
||||||
Go to :menuselection:`Accounting --> Configuration --> Settings`
|
Go to :menuselection:`Accounting --> Configuration --> Settings`
|
||||||
and activate the **SEPA QR Code** feature.
|
and activate the **SEPA QR Code** feature.
|
||||||
|
|
||||||
.. image:: epc_qr_code/epc_qr_code01.png
|
.. image:: epc_qr_code/epc_qr_code01.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Configure your Bank Account’s journal
|
Configure your Bank Account’s journal
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
Make sure that your *Bank Account* is correctly configured
|
Make sure that your *Bank Account* is correctly configured
|
||||||
on Odoo with your IBAN and BIC.
|
on Odoo with your IBAN and BIC.
|
||||||
|
|
||||||
To do so, go to :menuselection:`Accounting --> Configuration
|
To do so, go to :menuselection:`Accounting --> Configuration
|
||||||
--> Journals`, open your *bank journal*, then fill out the
|
--> Journals`, open your *bank journal*, then fill out the
|
||||||
*Bank Account* and *Bank* under the *Bank Account* tab.
|
*Bank Account* and *Bank* under the *Bank Account* tab.
|
||||||
|
|
||||||
.. image:: epc_qr_code/epc_qr_code02.png
|
.. image:: epc_qr_code/epc_qr_code02.png
|
||||||
@ -38,26 +38,26 @@ To do so, go to :menuselection:`Accounting --> Configuration
|
|||||||
|
|
||||||
Issue Invoices with EPC QR Codes
|
Issue Invoices with EPC QR Codes
|
||||||
================================
|
================================
|
||||||
EPC QR Codes are added automatically to your invoices, as
|
EPC QR Codes are added automatically to your invoices, as
|
||||||
long as you issue them to customers that are located in a
|
long as you issue them to customers that are located in a
|
||||||
country where this feature is available.
|
country where this feature is available.
|
||||||
|
|
||||||
Go to :menuselection:`Accounting --> Customers --> Invoices`,
|
Go to :menuselection:`Accounting --> Customers --> Invoices`,
|
||||||
and create a new invoice.
|
and create a new invoice.
|
||||||
|
|
||||||
Before posting it, open the *Other Info* tab. Odoo automatically
|
Before posting it, open the *Other Info* tab. Odoo automatically
|
||||||
fills out the *Bank Account* field with your IBAN.
|
fills out the *Bank Account* field with your IBAN.
|
||||||
|
|
||||||
Make sure that the account indicated is the one you want to use to
|
Make sure that the account indicated is the one you want to use to
|
||||||
receive your customer’s payment as Odoo uses this field to generate
|
receive your customer’s payment as Odoo uses this field to generate
|
||||||
the EPC QR Code.
|
the EPC QR Code.
|
||||||
|
|
||||||
.. image:: epc_qr_code/epc_qr_code03.png
|
.. image:: epc_qr_code/epc_qr_code03.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
If you want to issue an invoice without an EPC QR Code,
|
If you want to issue an invoice without an EPC QR Code,
|
||||||
remove the IBAN indicated in the *Bank Account* field,
|
remove the IBAN indicated in the *Bank Account* field,
|
||||||
under the *Other Info* tab of the invoice.
|
under the *Other Info* tab of the invoice.
|
||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
|
@ -72,7 +72,7 @@ their SEPA Direct Debit mandate.
|
|||||||
.. todo::
|
.. todo::
|
||||||
Add link to future **Payment Acquirer** documentation.
|
Add link to future **Payment Acquirer** documentation.
|
||||||
|
|
||||||
Close or revoke a mandate
|
Close or revoke a mandate
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
Direct Debit mandates are closed automatically after their *End Date*. If this field is left blank,
|
Direct Debit mandates are closed automatically after their *End Date*. If this field is left blank,
|
||||||
@ -95,7 +95,7 @@ included in the next SDD XML file.
|
|||||||
Get paid with SDD Batch Payments
|
Get paid with SDD Batch Payments
|
||||||
================================
|
================================
|
||||||
|
|
||||||
Customer Invoices
|
Customer Invoices
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
You can register SDD payments for invoices issued to customers who have an active SDD mandate.
|
You can register SDD payments for invoices issued to customers who have an active SDD mandate.
|
||||||
|
@ -6,14 +6,14 @@ There are two ways to handle payments received by checks. Odoo support
|
|||||||
both approaches so that you can use the one that better fits your
|
both approaches so that you can use the one that better fits your
|
||||||
habits.
|
habits.
|
||||||
|
|
||||||
1. **Undeposited Funds:**
|
1. **Undeposited Funds:**
|
||||||
once you receive the check, you record a payment
|
once you receive the check, you record a payment
|
||||||
by check on the invoice. (using a Check journal and posted on the
|
by check on the invoice. (using a Check journal and posted on the
|
||||||
Undeposited Fund account) Then, once the check arrives in your
|
Undeposited Fund account) Then, once the check arrives in your
|
||||||
bank account, move money from Undeposited Funds to your bank
|
bank account, move money from Undeposited Funds to your bank
|
||||||
account.
|
account.
|
||||||
|
|
||||||
2. **One journal entry only:**
|
2. **One journal entry only:**
|
||||||
once your receive the check, you record a
|
once your receive the check, you record a
|
||||||
payment on your bank, paid by check, without going through the
|
payment on your bank, paid by check, without going through the
|
||||||
**Undeposited Funds**. Once you process your bank statement, you do
|
**Undeposited Funds**. Once you process your bank statement, you do
|
||||||
@ -28,7 +28,7 @@ Even if the first method is cleaner, Odoo support the second approach
|
|||||||
because some accountants are used to it (quickbooks and peachtree
|
because some accountants are used to it (quickbooks and peachtree
|
||||||
users).
|
users).
|
||||||
|
|
||||||
.. Note::
|
.. Note::
|
||||||
You may have a look at the *Deposit Ticket feature* if you deposit
|
You may have a look at the *Deposit Ticket feature* if you deposit
|
||||||
several checks to your bank accounts in batch.
|
several checks to your bank accounts in batch.
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ If you use this approach to manage received checks, you get the list of
|
|||||||
checks that have not been cashed in the **Undeposit Funds** account
|
checks that have not been cashed in the **Undeposit Funds** account
|
||||||
(accessible, for example, from the general ledger).
|
(accessible, for example, from the general ledger).
|
||||||
|
|
||||||
.. Note::
|
.. Note::
|
||||||
Both methods will produce the same data in your accounting at the
|
Both methods will produce the same data in your accounting at the
|
||||||
end of the process. But, if you have checks that have not been cashed,
|
end of the process. But, if you have checks that have not been cashed,
|
||||||
this one is cleaner because those checks have not been reported yet on
|
this one is cleaner because those checks have not been reported yet on
|
||||||
@ -135,7 +135,7 @@ books:
|
|||||||
| Bank | | 100.00 | |
|
| Bank | | 100.00 | |
|
||||||
+----------------------+-------------------+----------+----------+
|
+----------------------+-------------------+----------+----------+
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
You may also record the payment directly without going on the
|
You may also record the payment directly without going on the
|
||||||
customer invoice, using the menu :menuselection:`Sales --> Payments`. This method may
|
customer invoice, using the menu :menuselection:`Sales --> Payments`. This method may
|
||||||
be more convenient if you have a lot of checks to record in a batch but
|
be more convenient if you have a lot of checks to record in a batch but
|
||||||
|
@ -20,7 +20,7 @@ Make sure your :ref:`Payment Acquirers are correctly configured <payment_acquire
|
|||||||
By default, ":doc:`Wire Transfer </applications/finance/payment_acquirers/wire_transfer>`" is the only
|
By default, ":doc:`Wire Transfer </applications/finance/payment_acquirers/wire_transfer>`" is the only
|
||||||
Payment Acquirer activated, but you still have to fill out the payment details.
|
Payment Acquirer activated, but you still have to fill out the payment details.
|
||||||
|
|
||||||
To activate the Invoice Online Payment, go to :menuselection:`Accounting --> Configuration -->
|
To activate the Invoice Online Payment, go to :menuselection:`Accounting --> Configuration -->
|
||||||
Settings --> Customer Payments`, enable **Invoice Online Payment**, and click on *Save*.
|
Settings --> Customer Payments`, enable **Invoice Online Payment**, and click on *Save*.
|
||||||
|
|
||||||
Customer Portal
|
Customer Portal
|
||||||
|
@ -46,7 +46,7 @@ Add lines in your custom reports
|
|||||||
=================================
|
=================================
|
||||||
|
|
||||||
After you've created the report, you need to fill it with lines. They
|
After you've created the report, you need to fill it with lines. They
|
||||||
all need a **name**, a **code** (that is used to refer to the line), a
|
all need a **name**, a **code** (that is used to refer to the line), a
|
||||||
**sequence number** and a **level** (Used for the line rendering).
|
**sequence number** and a **level** (Used for the line rendering).
|
||||||
|
|
||||||
.. image:: customize/customize04.png
|
.. image:: customize/customize04.png
|
||||||
|
@ -31,7 +31,7 @@ Balance Sheet
|
|||||||
The **Balance Sheet** shows a snapshot of the assets, liabilities and equity
|
The **Balance Sheet** shows a snapshot of the assets, liabilities and equity
|
||||||
of your organisation as at a particular date.
|
of your organisation as at a particular date.
|
||||||
|
|
||||||
.. image:: main_reports/main_reports09.png
|
.. image:: main_reports/main_reports09.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Profit and Loss
|
Profit and Loss
|
||||||
@ -41,7 +41,7 @@ The **Profit and Loss** report (or **Income Statement**) shows your
|
|||||||
organisation's net income, by deducting expenses from revenue for the
|
organisation's net income, by deducting expenses from revenue for the
|
||||||
report period.
|
report period.
|
||||||
|
|
||||||
.. image:: main_reports/main_reports10.png
|
.. image:: main_reports/main_reports10.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Executive Summary
|
Executive Summary
|
||||||
@ -58,36 +58,36 @@ reporting :
|
|||||||
The contribution each individual sale made
|
The contribution each individual sale made
|
||||||
by your business less any direct costs needed to make those sales
|
by your business less any direct costs needed to make those sales
|
||||||
(things like labour, materials, etc).
|
(things like labour, materials, etc).
|
||||||
- **Net profit margin:**
|
- **Net profit margin:**
|
||||||
The contribution each individual sale made by
|
The contribution each individual sale made by
|
||||||
your business less any direct costs needed to make those sales,
|
your business less any direct costs needed to make those sales,
|
||||||
as well as any fixed overheads your company has (things like
|
as well as any fixed overheads your company has (things like
|
||||||
rent, electricity, taxes you need to pay as a result of those
|
rent, electricity, taxes you need to pay as a result of those
|
||||||
sales).
|
sales).
|
||||||
- **Return on investment (p.a.):**
|
- **Return on investment (p.a.):**
|
||||||
The ratio of net profit made, to the
|
The ratio of net profit made, to the
|
||||||
amount of assets the company used to make those profits.
|
amount of assets the company used to make those profits.
|
||||||
- **Position:**
|
- **Position:**
|
||||||
- **Average debtor days:**
|
- **Average debtor days:**
|
||||||
The average number of days it takes your
|
The average number of days it takes your
|
||||||
customers to pay you (fully), across all your customer invoices.
|
customers to pay you (fully), across all your customer invoices.
|
||||||
- **Average creditor days:**
|
- **Average creditor days:**
|
||||||
The average number of days it takes you to
|
The average number of days it takes you to
|
||||||
pay your suppliers (fully) across all your bills.
|
pay your suppliers (fully) across all your bills.
|
||||||
- **Short term cash forecast:**
|
- **Short term cash forecast:**
|
||||||
How much cash is expected in or out of
|
How much cash is expected in or out of
|
||||||
your organisation in the next month i.e. balance of your **Sales
|
your organisation in the next month i.e. balance of your **Sales
|
||||||
account** for the month less the balance of your **Purchases account**
|
account** for the month less the balance of your **Purchases account**
|
||||||
for the month.
|
for the month.
|
||||||
- **Current assets to liabilities:**
|
- **Current assets to liabilities:**
|
||||||
Also referred to as **current ratio**, this is the ratio
|
Also referred to as **current ratio**, this is the ratio
|
||||||
of current assets (assets that could be
|
of current assets (assets that could be
|
||||||
turned into cash within a year) to the current liabilities
|
turned into cash within a year) to the current liabilities
|
||||||
(liabilities which will be due in the next year). This is
|
(liabilities which will be due in the next year). This is
|
||||||
typically used as as a measure of a company's ability to service
|
typically used as as a measure of a company's ability to service
|
||||||
its debt.
|
its debt.
|
||||||
|
|
||||||
.. image:: main_reports/main_reports01.png
|
.. image:: main_reports/main_reports01.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
General Ledger
|
General Ledger
|
||||||
@ -99,7 +99,7 @@ account and from there you can view a detailed transaction report or any
|
|||||||
exceptions. This report is useful for checking every transaction that
|
exceptions. This report is useful for checking every transaction that
|
||||||
occurred during a certain period of time.
|
occurred during a certain period of time.
|
||||||
|
|
||||||
.. image:: main_reports/main_reports05.png
|
.. image:: main_reports/main_reports05.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Aged Payable
|
Aged Payable
|
||||||
@ -109,7 +109,7 @@ Run the **Aged Payable Details** report to display information on individual
|
|||||||
bills, credit notes and overpayments owed by you, and how long these
|
bills, credit notes and overpayments owed by you, and how long these
|
||||||
have gone unpaid.
|
have gone unpaid.
|
||||||
|
|
||||||
.. image:: main_reports/main_reports02.png
|
.. image:: main_reports/main_reports02.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Aged Receivable
|
Aged Receivable
|
||||||
@ -118,7 +118,7 @@ Aged Receivable
|
|||||||
The **Aged Receivables** report shows the sales invoices that were awaiting
|
The **Aged Receivables** report shows the sales invoices that were awaiting
|
||||||
payment during a selected month and several months prior.
|
payment during a selected month and several months prior.
|
||||||
|
|
||||||
.. image:: main_reports/main_reports07.png
|
.. image:: main_reports/main_reports07.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Cash Flow Statement
|
Cash Flow Statement
|
||||||
@ -128,7 +128,7 @@ The **Cash Flow Statement** shows how changes in balance sheet accounts and
|
|||||||
income affect cash and cash equivalents, and breaks the analysis down to
|
income affect cash and cash equivalents, and breaks the analysis down to
|
||||||
operating, investing and financing activities.
|
operating, investing and financing activities.
|
||||||
|
|
||||||
.. image:: main_reports/main_reports03.png
|
.. image:: main_reports/main_reports03.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Tax Report
|
Tax Report
|
||||||
@ -137,11 +137,11 @@ Tax Report
|
|||||||
This report allows you to see the **net** and **tax amounts** for all the taxes
|
This report allows you to see the **net** and **tax amounts** for all the taxes
|
||||||
grouped by type (sale/purchase).
|
grouped by type (sale/purchase).
|
||||||
|
|
||||||
.. image:: main_reports/main_reports04.png
|
.. image:: main_reports/main_reports04.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Bank Reconciliation
|
Bank Reconciliation
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
.. image:: main_reports/main_reports06.png
|
.. image:: main_reports/main_reports06.png
|
||||||
:align: center
|
:align: center
|
||||||
|
@ -29,6 +29,6 @@ You can then configure your fiscal years in
|
|||||||
You only have to create fiscal years if they last more or less
|
You only have to create fiscal years if they last more or less
|
||||||
than 12 months.
|
than 12 months.
|
||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
|
|
||||||
* :doc:`close_fiscal_year`
|
* :doc:`close_fiscal_year`
|
||||||
|
@ -11,7 +11,7 @@ Taxes
|
|||||||
taxes/default_taxes
|
taxes/default_taxes
|
||||||
taxes/fiscal_positions
|
taxes/fiscal_positions
|
||||||
taxes/eu_distance_selling
|
taxes/eu_distance_selling
|
||||||
taxes/avatax
|
taxes/avatax
|
||||||
taxes/taxcloud
|
taxes/taxcloud
|
||||||
taxes/retention
|
taxes/retention
|
||||||
taxes/B2B_B2C
|
taxes/B2B_B2C
|
||||||
|
@ -114,19 +114,19 @@ Setting your products
|
|||||||
|
|
||||||
Your company must be configured with tax excluded by default. This is
|
Your company must be configured with tax excluded by default. This is
|
||||||
usually the default configuration, but you can check your **Default Sale
|
usually the default configuration, but you can check your **Default Sale
|
||||||
Tax** from the menu :menuselection:`Configuration --> Settings`
|
Tax** from the menu :menuselection:`Configuration --> Settings`
|
||||||
of the Accounting application.
|
of the Accounting application.
|
||||||
|
|
||||||
.. image:: B2B_B2C/price_B2C_B2B01.png
|
.. image:: B2B_B2C/price_B2C_B2B01.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Once done, you can create a **B2C** pricelist. You can activate the
|
Once done, you can create a **B2C** pricelist. You can activate the
|
||||||
pricelist feature per customer from the menu:
|
pricelist feature per customer from the menu:
|
||||||
:menuselection:`Configuration --> Settings` of the Sale application.
|
:menuselection:`Configuration --> Settings` of the Sale application.
|
||||||
Choose the option **different prices per customer segment**.
|
Choose the option **different prices per customer segment**.
|
||||||
|
|
||||||
Once done, create a B2C pricelist from the menu
|
Once done, create a B2C pricelist from the menu
|
||||||
:menuselection:`Configuration --> Pricelists`.
|
:menuselection:`Configuration --> Pricelists`.
|
||||||
It's also good to rename the default pricelist into B2B to avoid confusion.
|
It's also good to rename the default pricelist into B2B to avoid confusion.
|
||||||
|
|
||||||
Then, create a product at 8.26€, with a tax of 21% (defined as tax not
|
Then, create a product at 8.26€, with a tax of 21% (defined as tax not
|
||||||
@ -141,8 +141,8 @@ Setting the B2C fiscal position
|
|||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
From the accounting application, create a B2C fiscal position from this
|
From the accounting application, create a B2C fiscal position from this
|
||||||
menu: :menuselection:`Configuration --> Fiscal Positions`.
|
menu: :menuselection:`Configuration --> Fiscal Positions`.
|
||||||
This fiscal position should map the VAT 21% (tax excluded of price)
|
This fiscal position should map the VAT 21% (tax excluded of price)
|
||||||
with a VAT 21% (tax included in price)
|
with a VAT 21% (tax included in price)
|
||||||
|
|
||||||
.. image:: B2B_B2C/price_B2C_B2B03.png
|
.. image:: B2B_B2C/price_B2C_B2B03.png
|
||||||
@ -151,8 +151,8 @@ with a VAT 21% (tax included in price)
|
|||||||
Test by creating a quotation
|
Test by creating a quotation
|
||||||
============================
|
============================
|
||||||
|
|
||||||
Create a quotation from the Sale application, using the
|
Create a quotation from the Sale application, using the
|
||||||
:menuselection:`Sales --> Quotations` menu. You should have the
|
:menuselection:`Sales --> Quotations` menu. You should have the
|
||||||
following result: 8.26€ + 1.73€ = 9.99€.
|
following result: 8.26€ + 1.73€ = 9.99€.
|
||||||
|
|
||||||
.. image:: B2B_B2C/price_B2C_B2B04.png
|
.. image:: B2B_B2C/price_B2C_B2B04.png
|
||||||
|
@ -40,8 +40,8 @@ Once the tax is defined, you can use it in your products, sales order or
|
|||||||
invoices.
|
invoices.
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
If the retention is a percentage of a regular tax, create a Tax with a
|
If the retention is a percentage of a regular tax, create a Tax with a
|
||||||
**Tax Computation** as a **Tax Group** and set the two taxes in this group
|
**Tax Computation** as a **Tax Group** and set the two taxes in this group
|
||||||
(normal tax and retention).
|
(normal tax and retention).
|
||||||
|
|
||||||
Applying retention taxes on invoices
|
Applying retention taxes on invoices
|
||||||
@ -55,9 +55,9 @@ invoice line.
|
|||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
When you see the customer invoice on the screen, you get only a
|
When you see the customer invoice on the screen, you get only a
|
||||||
**Taxes line** summarizing all the taxes (normal taxes & retentions).
|
**Taxes line** summarizing all the taxes (normal taxes & retentions).
|
||||||
But when you print or send the invoice, Odoo does the correct
|
But when you print or send the invoice, Odoo does the correct
|
||||||
grouping amongst all the taxes.
|
grouping amongst all the taxes.
|
||||||
|
|
||||||
The printed invoice will show the different amounts in each tax group.
|
The printed invoice will show the different amounts in each tax group.
|
||||||
|
@ -14,7 +14,7 @@ How to set expense types
|
|||||||
========================
|
========================
|
||||||
|
|
||||||
The first step to track expenses is to configure the expense types (managed as products in Odoo)
|
The first step to track expenses is to configure the expense types (managed as products in Odoo)
|
||||||
that your company allows, from the *Configuration* menu.
|
that your company allows, from the *Configuration* menu.
|
||||||
When a specific expense is reimbursed at a fixed price, set a cost on the product.
|
When a specific expense is reimbursed at a fixed price, set a cost on the product.
|
||||||
Otherwise keep the cost at 0.0 and employees will report the real cost per expense.
|
Otherwise keep the cost at 0.0 and employees will report the real cost per expense.
|
||||||
|
|
||||||
@ -37,16 +37,16 @@ Here are some examples:
|
|||||||
|
|
||||||
* Cost: 0.0
|
* Cost: 0.0
|
||||||
|
|
||||||
Don't forget to set an expense tax on each expense type
|
Don't forget to set an expense tax on each expense type
|
||||||
(and an account if you use Odoo Accounting).
|
(and an account if you use Odoo Accounting).
|
||||||
It's usually a good practice to use a tax that is configured
|
It's usually a good practice to use a tax that is configured
|
||||||
with :ref:`Tax Included in Price <taxes/included-in-price>`.
|
with :ref:`Tax Included in Price <taxes/included-in-price>`.
|
||||||
That way, employees report expenses with
|
That way, employees report expenses with
|
||||||
prices including taxes, which is usually the expected behaviour.
|
prices including taxes, which is usually the expected behaviour.
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
The *Sales* app allows you to specify units of measure for your
|
The *Sales* app allows you to specify units of measure for your
|
||||||
expense types (units, miles, nights, etc.).
|
expense types (units, miles, nights, etc.).
|
||||||
Go to :menuselection:`Sales --> Configuration --> Settings` and check
|
Go to :menuselection:`Sales --> Configuration --> Settings` and check
|
||||||
*Some products may be sold/purchased in different units of measure (advanced)*.
|
*Some products may be sold/purchased in different units of measure (advanced)*.
|
||||||
|
|
||||||
@ -57,20 +57,20 @@ How to record expenses
|
|||||||
Manually
|
Manually
|
||||||
--------
|
--------
|
||||||
|
|
||||||
As an employee (Employee in user access rights), you can record
|
As an employee (Employee in user access rights), you can record
|
||||||
expenses from :menuselection:`My Expenses --> Expenses to Submit`.
|
expenses from :menuselection:`My Expenses --> Expenses to Submit`.
|
||||||
|
|
||||||
.. image:: expenses/submit_01.png
|
.. image:: expenses/submit_01.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
1. Select the related product and enter either the total amount
|
1. Select the related product and enter either the total amount
|
||||||
you paid (with Quantity = 1) or the unit price if Quantity is
|
you paid (with Quantity = 1) or the unit price if Quantity is
|
||||||
countable (e.g. number of hotel nights).
|
countable (e.g. number of hotel nights).
|
||||||
2. Enter the expense date.
|
2. Enter the expense date.
|
||||||
3. Choose if you paid the bill on your own (and expect to be reimbursed)
|
3. Choose if you paid the bill on your own (and expect to be reimbursed)
|
||||||
or if the company paid directly (e.g. if you used a company's credit card).
|
or if the company paid directly (e.g. if you used a company's credit card).
|
||||||
4. Set the bill reference, add some notes if requested and attach a
|
4. Set the bill reference, add some notes if requested and attach a
|
||||||
photo/scan of the receipt from the discussion thread.
|
photo/scan of the receipt from the discussion thread.
|
||||||
That will help the manager and the accountant validate it.
|
That will help the manager and the accountant validate it.
|
||||||
|
|
||||||
.. image:: expenses/submit_02.png
|
.. image:: expenses/submit_02.png
|
||||||
@ -79,56 +79,56 @@ expenses from :menuselection:`My Expenses --> Expenses to Submit`.
|
|||||||
In one click from emails
|
In one click from emails
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
Let your employees record their expenses from a simple email.
|
Let your employees record their expenses from a simple email.
|
||||||
Make a snapshot of the receipt and send it by email, or simply forward a bill!
|
Make a snapshot of the receipt and send it by email, or simply forward a bill!
|
||||||
|
|
||||||
The only thing to do is setting up an email alias in
|
The only thing to do is setting up an email alias in
|
||||||
:menuselection:`Expenses --> Configuration --> Settings` (e.g. *expenses* @mycompany.odoo.com).
|
:menuselection:`Expenses --> Configuration --> Settings` (e.g. *expenses* @mycompany.odoo.com).
|
||||||
For security purposes, only authenticated employee emails
|
For security purposes, only authenticated employee emails
|
||||||
(cfr. *Work Email* in employee detail form) are accepted.
|
(cfr. *Work Email* in employee detail form) are accepted.
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
The expense product is set automatically if the mail subject contains
|
The expense product is set automatically if the mail subject contains
|
||||||
the product's internal reference in first position.
|
the product's internal reference in first position.
|
||||||
Type the expense amount in the mail subject to set it on the expense too (e.g. Ref001 Food 100€).
|
Type the expense amount in the mail subject to set it on the expense too (e.g. Ref001 Food 100€).
|
||||||
|
|
||||||
How to submit expenses to managers
|
How to submit expenses to managers
|
||||||
==================================
|
==================================
|
||||||
|
|
||||||
When you are ready to submit your expenses to your manager
|
When you are ready to submit your expenses to your manager
|
||||||
(e.g. at the end of a business trip, or once a month),
|
(e.g. at the end of a business trip, or once a month),
|
||||||
go to the menu :menuselection:`My Expenses --> Expenses to Submit`. Select all expenses
|
go to the menu :menuselection:`My Expenses --> Expenses to Submit`. Select all expenses
|
||||||
from the list view and click on :menuselection:`Action --> Submit to Manager`.
|
from the list view and click on :menuselection:`Action --> Submit to Manager`.
|
||||||
Save the newly created expense report (i.e. set of expenses),
|
Save the newly created expense report (i.e. set of expenses),
|
||||||
and wait for your manager to approve it.
|
and wait for your manager to approve it.
|
||||||
|
|
||||||
.. image:: expenses/submit_03.png
|
.. image:: expenses/submit_03.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
You can also submit expenses one by one from the *Submit to Manager*
|
You can also submit expenses one by one from the *Submit to Manager*
|
||||||
button on the form view of an expense.
|
button on the form view of an expense.
|
||||||
|
|
||||||
All your submitted expense reports can be found in
|
All your submitted expense reports can be found in
|
||||||
:menuselection:`Expenses --> My Expenses --> Expense Reports`.
|
:menuselection:`Expenses --> My Expenses --> Expense Reports`.
|
||||||
|
|
||||||
|
|
||||||
How to approve expenses
|
How to approve expenses
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
HR and team managers get an overview of all expense reports to
|
HR and team managers get an overview of all expense reports to
|
||||||
validate from the top menu :menuselection:`To Approve --> Expense Reports to Approve`.
|
validate from the top menu :menuselection:`To Approve --> Expense Reports to Approve`.
|
||||||
Such users must have at least *Officers* access rights for *Expenses*.
|
Such users must have at least *Officers* access rights for *Expenses*.
|
||||||
|
|
||||||
.. image:: expenses/approval_01.png
|
.. image:: expenses/approval_01.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
They can review expense reports, approve or reject them, as well as providing
|
They can review expense reports, approve or reject them, as well as providing
|
||||||
feedback thanks to the integrated communication tool.
|
feedback thanks to the integrated communication tool.
|
||||||
|
|
||||||
.. image:: expenses/approval_02.png
|
.. image:: expenses/approval_02.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
As a team manager you can easily find the expense reports of your team members.
|
As a team manager you can easily find the expense reports of your team members.
|
||||||
You need to be set as manager in the detail form of those employees.
|
You need to be set as manager in the detail form of those employees.
|
||||||
|
|
||||||
.. image:: expenses/approval_03.png
|
.. image:: expenses/approval_03.png
|
||||||
@ -138,27 +138,27 @@ You need to be set as manager in the detail form of those employees.
|
|||||||
How to post expenses in accounting
|
How to post expenses in accounting
|
||||||
==================================
|
==================================
|
||||||
|
|
||||||
Once expense reports approved by managers, the accounting department
|
Once expense reports approved by managers, the accounting department
|
||||||
goes to :menuselection:`Expenses --> Accountant --> Expense Reports To Post` to check
|
goes to :menuselection:`Expenses --> Accountant --> Expense Reports To Post` to check
|
||||||
accounts, products and taxes. They can click *Post Journal Entries*
|
accounts, products and taxes. They can click *Post Journal Entries*
|
||||||
to post related journal entries into your books.
|
to post related journal entries into your books.
|
||||||
To do so, the user must have following access rights:
|
To do so, the user must have following access rights:
|
||||||
|
|
||||||
* Accounting: Accountant or Adviser
|
* Accounting: Accountant or Adviser
|
||||||
* Expenses: Manager
|
* Expenses: Manager
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
To post an expense, a *Home Address* must be set on the employee.
|
To post an expense, a *Home Address* must be set on the employee.
|
||||||
If you get a related blocking message when posting, click the employee,
|
If you get a related blocking message when posting, click the employee,
|
||||||
go to *Personal Information* tab and select/create the contact of your employee
|
go to *Personal Information* tab and select/create the contact of your employee
|
||||||
in the address book.
|
in the address book.
|
||||||
A contact has been automatically created if this person is using Odoo.
|
A contact has been automatically created if this person is using Odoo.
|
||||||
|
|
||||||
How to reimburse employees
|
How to reimburse employees
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
You can now see all the expense reports to reimburse in
|
You can now see all the expense reports to reimburse in
|
||||||
:menuselection:`Expenses --> Accountant --> Expense Reports To Pay`.
|
:menuselection:`Expenses --> Accountant --> Expense Reports To Pay`.
|
||||||
To record the payment or pay by check, click *Register a Payment*.
|
To record the payment or pay by check, click *Register a Payment*.
|
||||||
|
|
||||||
See how you can easily manage the payment process in Odoo:
|
See how you can easily manage the payment process in Odoo:
|
||||||
@ -223,7 +223,7 @@ Submit, validate and post expenses
|
|||||||
Invoice expenses
|
Invoice expenses
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
Now you can invoice the order. It shows up in
|
Now you can invoice the order. It shows up in
|
||||||
:menuselection:`Sales --> Invoicing --> Sales`
|
:menuselection:`Sales --> Invoicing --> Sales`
|
||||||
to Invoice. The expenses have been added automatically in the order
|
to Invoice. The expenses have been added automatically in the order
|
||||||
lines. Such items show up in blue (i.e. to invoice).
|
lines. Such items show up in blue (i.e. to invoice).
|
||||||
@ -231,4 +231,4 @@ lines. Such items show up in blue (i.e. to invoice).
|
|||||||
.. image:: expenses/invoicing_04.png
|
.. image:: expenses/invoicing_04.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
e (i.e. to invoice).
|
e (i.e. to invoice).
|
||||||
|
@ -133,7 +133,7 @@ To set it up, enable the :guilabel:`Capture Amount Manually` option on Odoo, as
|
|||||||
payment if unsupported payment methods are selected.
|
payment if unsupported payment methods are selected.
|
||||||
|
|
||||||
.. caution::
|
.. caution::
|
||||||
Odoo doesn't support the partial capture yet. Be aware that a partial capture from Stripe's
|
Odoo doesn't support the partial capture yet. Be aware that a partial capture from Stripe's
|
||||||
interface is still managed as a full capture by Odoo.
|
interface is still managed as a full capture by Odoo.
|
||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
|
@ -14,4 +14,3 @@ Miscellaneous
|
|||||||
general/digest_emails
|
general/digest_emails
|
||||||
general/in_app_purchase
|
general/in_app_purchase
|
||||||
general/developer_mode
|
general/developer_mode
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ Credentials
|
|||||||
|
|
||||||
#. Select **Web Application** as the Application type. Now configure the allowed pages on which you
|
#. Select **Web Application** as the Application type. Now configure the allowed pages on which you
|
||||||
will be redirected.
|
will be redirected.
|
||||||
|
|
||||||
In order to achieve this, in the **Authorized redirect URIs** field, enter your database's domain
|
In order to achieve this, in the **Authorized redirect URIs** field, enter your database's domain
|
||||||
immediately followed by ``/auth_oauth/signin``. For example:
|
immediately followed by ``/auth_oauth/signin``. For example:
|
||||||
``https://mydomain.odoo.com/auth_oauth/signin``, then click on *Create*.
|
``https://mydomain.odoo.com/auth_oauth/signin``, then click on *Create*.
|
||||||
@ -106,7 +106,7 @@ Odoo activation
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
You may have to log in again after this step.
|
You may have to log in again after this step.
|
||||||
|
|
||||||
#. Go back to :menuselection:`General Settings --> Integrations`, activate **Google
|
#. Go back to :menuselection:`General Settings --> Integrations`, activate **Google
|
||||||
Authentication**, then fill out the *Client ID* with the key from the Google API Dashboard, and
|
Authentication**, then fill out the *Client ID* with the key from the Google API Dashboard, and
|
||||||
*Save*.
|
*Save*.
|
||||||
|
@ -38,7 +38,7 @@ Activate through the command palette
|
|||||||
|
|
||||||
The command palette tool has a command to activate the debug mode: open it with
|
The command palette tool has a command to activate the debug mode: open it with
|
||||||
the keyboard shortcut `ctrl+k`, then type `debug`: a command will show up to
|
the keyboard shortcut `ctrl+k`, then type `debug`: a command will show up to
|
||||||
activate the debug mode.
|
activate the debug mode.
|
||||||
|
|
||||||
.. image:: developer_mode/command_palette.png
|
.. image:: developer_mode/command_palette.png
|
||||||
:align: center
|
:align: center
|
||||||
|
@ -54,7 +54,7 @@ Custom digest emails
|
|||||||
To do so, click on **Configure Digest Emails** and then **Create**.
|
To do so, click on **Configure Digest Emails** and then **Create**.
|
||||||
|
|
||||||
From there, give your Digest Email a title, specify periodicity, and choose your desired KPIs and
|
From there, give your Digest Email a title, specify periodicity, and choose your desired KPIs and
|
||||||
recipients fields as needed.
|
recipients fields as needed.
|
||||||
|
|
||||||
After you click **Save**, your new custom Digest Email is available as a selection in the **General
|
After you click **Save**, your new custom Digest Email is available as a selection in the **General
|
||||||
Settings** dropdown menu.
|
Settings** dropdown menu.
|
||||||
@ -111,4 +111,4 @@ Computed values reference table
|
|||||||
| POS Sales | `kpi_pos_total_value` |
|
| POS Sales | `kpi_pos_total_value` |
|
||||||
+-----------------------+-------------------------------------------+
|
+-----------------------+-------------------------------------------+
|
||||||
| New Employees | `kpi_hr_recruitment_new_colleagues_value` |
|
| New Employees | `kpi_hr_recruitment_new_colleagues_value` |
|
||||||
+-----------------------+-------------------------------------------+
|
+-----------------------+-------------------------------------------+
|
||||||
|
@ -20,7 +20,7 @@ If your database is hosted on our cloud (Odoo Online or Odoo.sh), it is not nece
|
|||||||
outgoing email server to send emails from your custom domain. You can enjoy this feature by using
|
outgoing email server to send emails from your custom domain. You can enjoy this feature by using
|
||||||
the default Odoo email server.
|
the default Odoo email server.
|
||||||
|
|
||||||
.. important::
|
.. important::
|
||||||
The Odoo server is subject to a daily email limit to prevent abuse. The default limit is 200
|
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
|
emails sent per day for databases with an Enterprise subscription. This limit can be increased
|
||||||
under certain conditions. See our :doc:`FAQ <faq>` or contact support for more
|
under certain conditions. See our :doc:`FAQ <faq>` or contact support for more
|
||||||
@ -38,19 +38,19 @@ Be SPF compliant
|
|||||||
================
|
================
|
||||||
|
|
||||||
The Sender Policy Framework (SPF) protocol allows the owner of a domain name to specify which
|
The Sender Policy Framework (SPF) protocol allows the owner of a domain name to specify which
|
||||||
servers are allowed to send email from that domain. When a server receives an incoming email,
|
servers are allowed to send email 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
|
it checks whether the IP address of the sending server is on the list of allowed IPs according
|
||||||
to the SPF record of the sender.
|
to the SPF record of the sender.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
The SPF verification is performed on the domain mentioned in the Return-Path field of the email.
|
The SPF 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
|
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.
|
`mail.catchall.domain` key in the database system parameters.
|
||||||
|
|
||||||
See the :ref:`documentation on incoming emails <email_communication/inbound_messages>`.
|
See the :ref:`documentation on incoming emails <email_communication/inbound_messages>`.
|
||||||
|
|
||||||
The SPF policy of a domain is set using a TXT record. How to create or modify a TXT record depends
|
The SPF policy of a domain is set using a TXT record. How to create or modify a TXT record depends
|
||||||
on the provider hosting the DNS zone of your domain name. In order for the verification to work
|
on the provider hosting the DNS zone of your domain name. In order for the verification to work
|
||||||
properly, each domain can only have one SPF record.
|
properly, each domain can only have one SPF record.
|
||||||
|
|
||||||
If your domain name does not yet have an SPF record, the content of the record to create is as
|
If your domain name does not yet have an SPF record, the content of the record to create is as
|
||||||
@ -66,7 +66,7 @@ new one).
|
|||||||
If your TXT record is `v=spf1 include:_spf.google.com ~all`, you need to edit it to add
|
If your TXT record is `v=spf1 include:_spf.google.com ~all`, you need to edit it to add
|
||||||
`include:_spf.odoo.com`: `v=spf1 include:_spf.odoo.com include:_spf.google.com ~all`
|
`include:_spf.odoo.com`: `v=spf1 include:_spf.odoo.com include:_spf.google.com ~all`
|
||||||
|
|
||||||
You can check if your SPF record is valid with a free tool like
|
You can check if your SPF record is valid with a free tool like
|
||||||
`MXToolbox SPF <https://mxtoolbox.com/spf.aspx>`_.
|
`MXToolbox SPF <https://mxtoolbox.com/spf.aspx>`_.
|
||||||
|
|
||||||
.. _email_communication/DKIM_compliant:
|
.. _email_communication/DKIM_compliant:
|
||||||
@ -86,13 +86,13 @@ To enable DKIM, you must add a CNAME record to the DNS zone of your domain name:
|
|||||||
``odoo._domainkey IN CNAME odoo._domainkey.odoo.com.``
|
``odoo._domainkey IN CNAME odoo._domainkey.odoo.com.``
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
If your domain name is `mycompany.com`, you need to create a subdomain
|
If your domain name is `mycompany.com`, you need to create a subdomain
|
||||||
`odoo._domainkey.mycompany.com` whose canonical name is `odoo._domainkey.odoo.com.`.
|
`odoo._domainkey.mycompany.com` whose canonical name is `odoo._domainkey.odoo.com.`.
|
||||||
|
|
||||||
How to create or modify a CNAME record depends on the provider hosting the DNS zone of your domain
|
How to create or modify a CNAME record depends on the provider hosting the DNS zone of your domain
|
||||||
name. The most common providers are list below.
|
name. The most common providers are list below.
|
||||||
|
|
||||||
You can check if your DKIM record is valid with a free tool like
|
You can check if your DKIM record is valid with a free tool like
|
||||||
`DKIM Core <https://dkimcore.org/tools/>`_. If a selector is asked, enter `odoo`.
|
`DKIM Core <https://dkimcore.org/tools/>`_. If a selector is asked, enter `odoo`.
|
||||||
|
|
||||||
Check your DMARC policy
|
Check your DMARC policy
|
||||||
@ -110,7 +110,7 @@ There are three DMARC policies:
|
|||||||
``p=quarantine`` and ``p=reject`` instruct the server that receives an email to quarantine that
|
``p=quarantine`` and ``p=reject`` instruct the server that receives an email to quarantine that
|
||||||
email or ignore it if the SPF and/or DKIM check fails.
|
email or ignore it if the SPF and/or DKIM check fails.
|
||||||
|
|
||||||
If your domain name uses DMARC and has defined one of these policies, it is therefore imperative
|
If your domain name uses DMARC and has defined one of these policies, it is therefore imperative
|
||||||
to be SPF compliant or to enable DKIM.
|
to be SPF compliant or to enable DKIM.
|
||||||
|
|
||||||
.. danger::
|
.. danger::
|
||||||
@ -118,7 +118,7 @@ to be SPF compliant or to enable DKIM.
|
|||||||
strongly advise against using an *@yahoo.com* or *@aol.com* address for your users. These emails
|
strongly advise against using an *@yahoo.com* or *@aol.com* address for your users. These emails
|
||||||
will never reach their recipient.
|
will never reach their recipient.
|
||||||
|
|
||||||
``p=none`` is used for the domain owner to receive reports about entities using their domain. It
|
``p=none`` is used for the domain owner to receive reports about entities using their domain. It
|
||||||
should not impact the deliverability if the DMARC check fails.
|
should not impact the deliverability if the DMARC check fails.
|
||||||
|
|
||||||
You can check the DMARC record of a domain name with a tool like
|
You can check the DMARC record of a domain name with a tool like
|
||||||
@ -127,12 +127,12 @@ You can check the DMARC record of a domain name with a tool like
|
|||||||
If one of your partners, customer or vendor, uses DMARC and has defined one of these policies, the
|
If one of your partners, customer or vendor, uses DMARC and has defined one of these policies, the
|
||||||
Odoo server cannot relay emails from this partner to your users.
|
Odoo server cannot relay emails from this partner to your users.
|
||||||
|
|
||||||
You need to :ref:`handle user notifications in Odoo <discuss_app/notification_preferences>`, or replace the
|
You need to :ref:`handle user notifications in Odoo <discuss_app/notification_preferences>`, or replace the
|
||||||
email address of the partner with a default email address.
|
email address of the partner with a default email address.
|
||||||
|
|
||||||
.. _email_communication/SPFDKIM_common_providers:
|
.. _email_communication/SPFDKIM_common_providers:
|
||||||
|
|
||||||
SPF, DKIM & DMARC documentation of common providers
|
SPF, DKIM & DMARC documentation of common providers
|
||||||
===================================================
|
===================================================
|
||||||
|
|
||||||
- `OVH DNS <https://docs.ovh.com/us/en/domains/web_hosting_how_to_edit_my_dns_zone/>`_
|
- `OVH DNS <https://docs.ovh.com/us/en/domains/web_hosting_how_to_edit_my_dns_zone/>`_
|
||||||
@ -145,8 +145,8 @@ SPF, DKIM & DMARC documentation of common providers
|
|||||||
- `Google Domains <https://support.google.com/domains/answer/3290350?hl=en>`_
|
- `Google Domains <https://support.google.com/domains/answer/3290350?hl=en>`_
|
||||||
- `Azure DNS <https://docs.microsoft.com/en-us/azure/dns/dns-getstarted-portal>`_
|
- `Azure DNS <https://docs.microsoft.com/en-us/azure/dns/dns-getstarted-portal>`_
|
||||||
|
|
||||||
To fully test your configuration, the tool `Mail-Tester <https://www.mail-tester.com/>`_ will give
|
To fully test your configuration, the tool `Mail-Tester <https://www.mail-tester.com/>`_ will give
|
||||||
you a full overview of the content and configuration you have in one email sent! Mail-Tester can
|
you a full overview of the content and configuration you have in one email sent! Mail-Tester can
|
||||||
also be used for other lesser known providers.
|
also be used for other lesser known providers.
|
||||||
|
|
||||||
Use a default email address
|
Use a default email address
|
||||||
@ -156,7 +156,7 @@ To force the email address from which emails are sent, you need to create the fo
|
|||||||
the System Parameters of the database:
|
the System Parameters of the database:
|
||||||
|
|
||||||
- If ``mail.default.from`` is set, and contains a full email address, all outgoing emails are sent
|
- If ``mail.default.from`` is set, and contains a full email address, all outgoing emails are sent
|
||||||
from the given address. This is a requirement to use `Outlook with Odoo
|
from the given address. This is a requirement to use `Outlook with Odoo
|
||||||
<https://docs.microsoft.com/en-us/exchange/mail-flow-best-practices/how-to-set-up-a-multifunction-device-or-application-to-send-email-using-microsoft-365-or-office-365#option-1-authenticate-your-device-or-application-directly-with-a-microsoft-365-or-office-365-mailbox-and-send-mail-using-smtp-auth-client-submission>`_.
|
<https://docs.microsoft.com/en-us/exchange/mail-flow-best-practices/how-to-set-up-a-multifunction-device-or-application-to-send-email-using-microsoft-365-or-office-365#option-1-authenticate-your-device-or-application-directly-with-a-microsoft-365-or-office-365-mailbox-and-send-mail-using-smtp-auth-client-submission>`_.
|
||||||
|
|
||||||
You access the **System Parameters** in :ref:`developer mode <developer-mode>` in the :menuselection:`Settings -->
|
You access the **System Parameters** in :ref:`developer mode <developer-mode>` in the :menuselection:`Settings -->
|
||||||
|
@ -10,15 +10,15 @@ improving their overall experience with the company.
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
The email templates use QWeb. The composer allows you to edit emails in their final rendering,
|
The email templates use QWeb. The composer allows you to edit emails in their final rendering,
|
||||||
making customizations more robust as you don’t have to edit code.
|
making customizations more robust as you don’t have to edit code.
|
||||||
|
|
||||||
Defining a default reply to on your mail template
|
Defining a default reply to on your mail template
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Although the field *reply to* is available within the mail templates, **this field is only used
|
Although the field *reply to* is available within the mail templates, **this field is only used
|
||||||
for mass mailing** mode (this means when sending templates on what we call bulk emailing). You
|
for mass mailing** mode (this means when sending templates on what we call bulk emailing). You
|
||||||
can send emails in bulk in almost every app that has a list view. Select the records you want
|
can send emails in bulk in almost every app that has a list view. Select the records you want
|
||||||
and click on the action button. If you have an option to send an email, you will see a mail
|
and click on the action button. If you have an option to send an email, you will see a mail
|
||||||
composer with possible values to define:
|
composer with possible values to define:
|
||||||
|
|
||||||
.. image:: email_template/composer-mass-mailing-quotations.png
|
.. image:: email_template/composer-mass-mailing-quotations.png
|
||||||
@ -31,12 +31,12 @@ You can also define them by default on the template:
|
|||||||
:align: center
|
:align: center
|
||||||
:alt: Reply-to field on template.
|
:alt: Reply-to field on template.
|
||||||
|
|
||||||
Because of this, setting a value in this field is useless as the value defined will be totally
|
Because of this, setting a value in this field is useless as the value defined will be totally
|
||||||
ignored. The default *reply-to* value is the default catchall email address to ensure a
|
ignored. The default *reply-to* value is the default catchall email address to ensure a
|
||||||
communication between your customer and your Odoo database. For more information about the way
|
communication between your customer and your Odoo database. For more information about the way
|
||||||
the catchall works, please check :ref:`how to manage inbound messages <email_communication/inbound_messages>`.
|
the catchall works, please check :ref:`how to manage inbound messages <email_communication/inbound_messages>`.
|
||||||
|
|
||||||
Transactional emails and corresponding URL for each company
|
Transactional emails and corresponding URL for each company
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
When using Odoo, multiple events trigger the sending of automated emails. These emails are known
|
When using Odoo, multiple events trigger the sending of automated emails. These emails are known
|
||||||
@ -45,36 +45,36 @@ as transactional emails and sometimes contain links pointing to your Odoo databa
|
|||||||
By default, links generated by the database use the dynamic web.base.url key defined in the system
|
By default, links generated by the database use the dynamic web.base.url key defined in the system
|
||||||
parameters. More information about this :ref:`parameter <domain-name/web-base-url>`.
|
parameters. More information about this :ref:`parameter <domain-name/web-base-url>`.
|
||||||
|
|
||||||
If the website application isn't installed, the web.base.url key will always be the default
|
If the website application isn't installed, the web.base.url key will always be the default
|
||||||
parameter used to generate all the links.
|
parameter used to generate all the links.
|
||||||
|
|
||||||
It’s important to know that this key can only have a single value, meaning that in a
|
It’s important to know that this key can only have a single value, meaning that in a
|
||||||
multi-website/company database environment, even if you have a specific domain name for each
|
multi-website/company database environment, even if you have a specific domain name for each
|
||||||
website, the links generated to share a document or within a transactional email might remain the
|
website, the links generated to share a document or within a transactional email might remain the
|
||||||
same, whatever the website/company related to the sending of the email/document.
|
same, whatever the website/company related to the sending of the email/document.
|
||||||
|
|
||||||
This is not always the case as some Odoo applications have a link established in the database with
|
This is not always the case as some Odoo applications have a link established in the database with
|
||||||
the website application, meaning that in this case, if a specific domain is defined for the
|
the website application, meaning that in this case, if a specific domain is defined for the
|
||||||
websites, the URL generated in the email template will use the domain defined on the corresponding
|
websites, the URL generated in the email template will use the domain defined on the corresponding
|
||||||
website of the company.
|
website of the company.
|
||||||
|
|
||||||
.. caution::
|
.. caution::
|
||||||
A document shared using the documents application will always use the web.base.url key, as the
|
A document shared using the documents application will always use the web.base.url key, as the
|
||||||
document shared isn't associated with any particular website. Meaning that the URL will always be
|
document shared isn't associated with any particular website. Meaning that the URL will always be
|
||||||
the same (the web.base.url key value), whatever the company it's shared from, this is a known
|
the same (the web.base.url key value), whatever the company it's shared from, this is a known
|
||||||
limitation!
|
limitation!
|
||||||
|
|
||||||
On the other hand, sales orders made by a customer on one of your Odoo e-commerce websites have a
|
On the other hand, sales orders made by a customer on one of your Odoo e-commerce websites have a
|
||||||
link established with the website from which the order was made. As a result, the e-mail sent for
|
link established with the website from which the order was made. As a result, the e-mail sent for
|
||||||
the sales orders uses the domain name defined for the corresponding website to generate the links.
|
the sales orders uses the domain name defined for the corresponding website to generate the links.
|
||||||
|
|
||||||
For more information about how to configure your domains, we invite you to check :doc:`our domain name
|
For more information about how to configure your domains, we invite you to check :doc:`our domain name
|
||||||
documentation </administration/maintain/domain_names>`.
|
documentation </administration/maintain/domain_names>`.
|
||||||
|
|
||||||
Updating translations within email templates
|
Updating translations within email templates
|
||||||
********************************************
|
********************************************
|
||||||
|
|
||||||
Email templates are automatically translated. Changing the translations shouldn’t be necessary.
|
Email templates are automatically translated. Changing the translations shouldn’t be necessary.
|
||||||
However, if for a specific reason you’d like to change some of the translations, this can be done.
|
However, if for a specific reason you’d like to change some of the translations, this can be done.
|
||||||
|
|
||||||
Like any modification in the code, keep in mind that modifications that aren’t done correctly (for
|
Like any modification in the code, keep in mind that modifications that aren’t done correctly (for
|
||||||
@ -89,7 +89,7 @@ In order to edit your translations, follow these steps from the template.
|
|||||||
:align: left
|
:align: left
|
||||||
:alt: Edit the language of a template
|
:alt: Edit the language of a template
|
||||||
|
|
||||||
#. A pop-up window with the different languages installed on the database will be displayed. From
|
#. A pop-up window with the different languages installed on the database will be displayed. From
|
||||||
here, editing the translations will be possible. Don't forget to hit the save button to preserve
|
here, editing the translations will be possible. Don't forget to hit the save button to preserve
|
||||||
your changes.
|
your changes.
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
===
|
===
|
||||||
FAQ
|
FAQ
|
||||||
===
|
===
|
||||||
|
|
||||||
This document contains an explanation of the most recurring mailing concerns.
|
This document contains an explanation of the most recurring mailing concerns.
|
||||||
|
|
||||||
We will start by addressing issues of outgoing emails (ex: my client has not received my email),
|
We will start by addressing issues of outgoing emails (ex: my client has not received my email),
|
||||||
and then, of incoming emails (ex: I do not receive responses from my customers in the database).
|
and then, of incoming emails (ex: I do not receive responses from my customers in the database).
|
||||||
|
|
||||||
Outgoing emails
|
Outgoing emails
|
||||||
@ -27,15 +27,15 @@ Common error messages
|
|||||||
|
|
||||||
.. _email_communication/daily_limit_mail:
|
.. _email_communication/daily_limit_mail:
|
||||||
|
|
||||||
You reached your daily limit:
|
You reached your daily limit:
|
||||||
*****************************
|
*****************************
|
||||||
|
|
||||||
.. image:: faq/email-limit.png
|
.. image:: faq/email-limit.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Warning in Odoo upon email limit reached
|
:alt: Warning in Odoo upon email limit reached
|
||||||
|
|
||||||
Each email service provider has its own email sending limits. The limits may be daily, hourly,
|
Each email service provider has its own email sending limits. The limits may be daily, hourly,
|
||||||
and sometimes even per minute. This is the same for Odoo, we have to limit our customers to prevent
|
and sometimes even per minute. This is the same for Odoo, we have to limit our customers to prevent
|
||||||
our e-mail servers from being blacklisted.
|
our e-mail servers from being blacklisted.
|
||||||
|
|
||||||
Here are the default limits for new databases:
|
Here are the default limits for new databases:
|
||||||
@ -48,18 +48,18 @@ Here are the default limits for new databases:
|
|||||||
|
|
||||||
In case you hit the limit, you can:
|
In case you hit the limit, you can:
|
||||||
|
|
||||||
- Ask our support team to increase your daily limit. We will analyze the situation of your database
|
- Ask our support team to increase your daily limit. We will analyze the situation of your database
|
||||||
depending on (non-exhaustive list):
|
depending on (non-exhaustive list):
|
||||||
|
|
||||||
- How many users in your database,
|
- How many users in your database,
|
||||||
- Which apps are installed,
|
- Which apps are installed,
|
||||||
- Your bounce rate: the percentage of email addresses that did not receive your emails because
|
- Your bounce rate: the percentage of email addresses that did not receive your emails because
|
||||||
it was returned by a mail server on its way to the final recipient. You can contact the `support
|
it was returned by a mail server on its way to the final recipient. You can contact the `support
|
||||||
<https://www.odoo.com/help>`_.
|
<https://www.odoo.com/help>`_.
|
||||||
|
|
||||||
- Use your own outgoing email server to be independent of Odoo’s mail limit (please refer
|
- Use your own outgoing email server to be independent of Odoo’s mail limit (please refer
|
||||||
to :doc:`the corresponding documentation </applications/general/email_communication/email_servers>`),
|
to :doc:`the corresponding documentation </applications/general/email_communication/email_servers>`),
|
||||||
- Wait until 11pm UTC for the reset and click on the retry button: The :ref:`Developer mode <developer-mode>`
|
- Wait until 11pm UTC for the reset and click on the retry button: The :ref:`Developer mode <developer-mode>`
|
||||||
must be activated. Then, go to :menuselection:`Settings --> Technical --> Emails`
|
must be activated. Then, go to :menuselection:`Settings --> Technical --> Emails`
|
||||||
|
|
||||||
.. image:: faq/email-retry-technical.png
|
.. image:: faq/email-retry-technical.png
|
||||||
@ -70,54 +70,54 @@ In case you hit the limit, you can:
|
|||||||
The daily limit is global to your database and can rise quickly! By default an internal message,
|
The daily limit is global to your database and can rise quickly! By default an internal message,
|
||||||
a notification, a note, etc. counts as an email in your daily limit if it notifies someone.
|
a notification, a note, etc. counts as an email in your daily limit if it notifies someone.
|
||||||
|
|
||||||
You can mitigate this by receiving your :ref:`notifications in Odoo <discuss_app/notification_preferences>`
|
You can mitigate this by receiving your :ref:`notifications in Odoo <discuss_app/notification_preferences>`
|
||||||
instead of by emails.
|
instead of by emails.
|
||||||
|
|
||||||
SMTP Error
|
SMTP Error
|
||||||
**********
|
**********
|
||||||
|
|
||||||
You can find out why an email wasn't transmitted successfully by reviewing the Simple Mail
|
You can find out why an email wasn't transmitted successfully by reviewing the Simple Mail
|
||||||
Transport Protocol (SMTP) error messages. SMTP is a protocol to describe the email structure
|
Transport Protocol (SMTP) error messages. SMTP is a protocol to describe the email structure
|
||||||
and transmit it over the Internet, and the error messages generated by email services are helpful
|
and transmit it over the Internet, and the error messages generated by email services are helpful
|
||||||
tools to diagnose and troubleshoot email problems.
|
tools to diagnose and troubleshoot email problems.
|
||||||
|
|
||||||
No Error
|
No Error
|
||||||
********
|
********
|
||||||
|
|
||||||
Odoo is not always capable of providing information for the reason it failed. The different
|
Odoo is not always capable of providing information for the reason it failed. The different
|
||||||
providers implement a personalized policy of the bounce emails and it is not always possible
|
providers implement a personalized policy of the bounce emails and it is not always possible
|
||||||
for Odoo to interpret it correctly.
|
for Odoo to interpret it correctly.
|
||||||
|
|
||||||
If you have this problem on a recurring basis with the same client or the same domain, please
|
If you have this problem on a recurring basis with the same client or the same domain, please
|
||||||
do not hesitate to contact `Odoo Support <https://www.odoo.com/help>`_ for help in finding a reason.
|
do not hesitate to contact `Odoo Support <https://www.odoo.com/help>`_ for help in finding a reason.
|
||||||
|
|
||||||
Note: in such case, one of the most common reasons is related to :ref:`SPF <email_communication/spf_compliant>`
|
Note: in such case, one of the most common reasons is related to :ref:`SPF <email_communication/spf_compliant>`
|
||||||
and/or :ref:`DKIM <email_communication/DKIM_compliant>` configuration.
|
and/or :ref:`DKIM <email_communication/DKIM_compliant>` configuration.
|
||||||
|
|
||||||
Why is my email sent late?
|
Why is my email sent late?
|
||||||
**************************
|
**************************
|
||||||
|
|
||||||
It may happen that you schedule an email campaign but it is not sent on time. We know that
|
It may happen that you schedule an email campaign but it is not sent on time. We know that
|
||||||
we use a delayed job to send emails that we consider as not urgent (Newsletters concept
|
we use a delayed job to send emails that we consider as not urgent (Newsletters concept
|
||||||
such as mass mailing, marketing automation, events). The system utility **cron** can be used
|
such as mass mailing, marketing automation, events). The system utility **cron** can be used
|
||||||
to schedule programs to run automatically at predetermined intervals. We use that policy in order
|
to schedule programs to run automatically at predetermined intervals. We use that policy in order
|
||||||
to avoid cluttering the mail servers and prioritize the communication.
|
to avoid cluttering the mail servers and prioritize the communication.
|
||||||
|
|
||||||
The emails considered urgent (communication from one person to another one such as
|
The emails considered urgent (communication from one person to another one such as
|
||||||
Sales Orders, Invoices, Purchase Orders, etc.) are sent directly.
|
Sales Orders, Invoices, Purchase Orders, etc.) are sent directly.
|
||||||
|
|
||||||
.. image:: faq/email-scheduled-later.png
|
.. image:: faq/email-scheduled-later.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Email scheduled to be sent later.
|
:alt: Email scheduled to be sent later.
|
||||||
|
|
||||||
By default, the Mass Mailing cron runs every 60 minutes. So, you should wait maximum an hour
|
By default, the Mass Mailing cron runs every 60 minutes. So, you should wait maximum an hour
|
||||||
before the campaign is actually sent.
|
before the campaign is actually sent.
|
||||||
|
|
||||||
Incoming emails
|
Incoming emails
|
||||||
===============
|
===============
|
||||||
|
|
||||||
When you have an issue with incoming emails, there might not be an indication per se in Odoo.
|
When you have an issue with incoming emails, there might not be an indication per se in Odoo.
|
||||||
This is the client who tries to contact a database who will get a bounce (most of the
|
This is the client who tries to contact a database who will get a bounce (most of the
|
||||||
time 550: mailbox unavailable).
|
time 550: mailbox unavailable).
|
||||||
|
|
||||||
Emails are not received
|
Emails are not received
|
||||||
@ -127,22 +127,22 @@ Depending on the platform you are using:
|
|||||||
|
|
||||||
- The **Odoo.sh** users can find their live logs on the folder :file:`~/logs/`.
|
- The **Odoo.sh** users can find their live logs on the folder :file:`~/logs/`.
|
||||||
|
|
||||||
- The folder :file:`~/logs/` (preferably accessed by the command line) of an Odoo.sh contains
|
- The folder :file:`~/logs/` (preferably accessed by the command line) of an Odoo.sh contains
|
||||||
a list of files containing the logs of the database. The log files are created everyday
|
a list of files containing the logs of the database. The log files are created everyday
|
||||||
at 5:00 AM UTC. The two last days are not compressed, while the older ones are, in order
|
at 5:00 AM UTC. The two last days are not compressed, while the older ones are, in order
|
||||||
to gain space. The naming of the files for Today and Yesterday are :file:`odoo.log` and
|
to gain space. The naming of the files for Today and Yesterday are :file:`odoo.log` and
|
||||||
:file:`odoo.log.1`. For the following, they are named with their dates and compressed.
|
:file:`odoo.log.1`. For the following, they are named with their dates and compressed.
|
||||||
See the Odoo.sh documentation about :ref:`logs <odoosh/logs>`. Use the command ``grep`` and
|
See the Odoo.sh documentation about :ref:`logs <odoosh/logs>`. Use the command ``grep`` and
|
||||||
``zgrep`` (for the compressed ones) to search through the files.
|
``zgrep`` (for the compressed ones) to search through the files.
|
||||||
|
|
||||||
- **Odoo Online** users won’t have access to their logs. However you can still contact
|
- **Odoo Online** users won’t have access to their logs. However you can still contact
|
||||||
`Odoo Support <https://www.odoo.com/help>`_ , if you have a recurring issue
|
`Odoo Support <https://www.odoo.com/help>`_ , if you have a recurring issue
|
||||||
with the same client or domain.
|
with the same client or domain.
|
||||||
|
|
||||||
Get help from support
|
Get help from support
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
In order to get helped efficiently, please provide as much information as possible. Here is a list
|
In order to get helped efficiently, please provide as much information as possible. Here is a list
|
||||||
of what can be helpful:
|
of what can be helpful:
|
||||||
|
|
||||||
- The **EML** of the email, stating for *Electronic Mail*, is the file format containing all the
|
- The **EML** of the email, stating for *Electronic Mail*, is the file format containing all the
|
||||||
|
@ -16,7 +16,7 @@ SET default_tablespace = '';
|
|||||||
SET default_with_oids = false;
|
SET default_with_oids = false;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: companies; Type: TABLE; Schema: public; Owner: fp; Tablespace:
|
-- Name: companies; Type: TABLE; Schema: public; Owner: fp; Tablespace:
|
||||||
--
|
--
|
||||||
|
|
||||||
CREATE TABLE companies (
|
CREATE TABLE companies (
|
||||||
@ -56,7 +56,7 @@ SELECT pg_catalog.setval('companies_id_seq', 3, true);
|
|||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: persons; Type: TABLE; Schema: public; Owner: fp; Tablespace:
|
-- Name: persons; Type: TABLE; Schema: public; Owner: fp; Tablespace:
|
||||||
--
|
--
|
||||||
|
|
||||||
CREATE TABLE persons (
|
CREATE TABLE persons (
|
||||||
@ -134,7 +134,7 @@ COPY persons (id, company_id, person_name) FROM stdin;
|
|||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: companies_pkey; Type: CONSTRAINT; Schema: public; Owner: fp; Tablespace:
|
-- Name: companies_pkey; Type: CONSTRAINT; Schema: public; Owner: fp; Tablespace:
|
||||||
--
|
--
|
||||||
|
|
||||||
ALTER TABLE ONLY companies
|
ALTER TABLE ONLY companies
|
||||||
|
@ -29,7 +29,7 @@ Settings --> IAP Account`.
|
|||||||
|
|
||||||
.. image:: in_app_purchase/image2.png
|
.. image:: in_app_purchase/image2.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
IAP Portal
|
IAP Portal
|
||||||
==========
|
==========
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ Different services are available depending on the hosting type of your Database:
|
|||||||
- *Odoo.sh and Odoo Enterprise (on-premise)*: both the services provided by Odoo and by third-party
|
- *Odoo.sh and Odoo Enterprise (on-premise)*: both the services provided by Odoo and by third-party
|
||||||
apps can be used.
|
apps can be used.
|
||||||
|
|
||||||
Offering my own services
|
Offering my own services
|
||||||
========================
|
========================
|
||||||
|
|
||||||
I am more than welcome to offer my own IAP services through Odoo Apps! It is the perfect opportunity
|
I am more than welcome to offer my own IAP services through Odoo Apps! It is the perfect opportunity
|
||||||
|
@ -26,7 +26,7 @@ In order to install libsrtp, follow the instructions below:
|
|||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
cd /usr/local/src/
|
cd /usr/local/src/
|
||||||
wget http://srtp.sourceforge.net/srtp-1.4.2.tgz
|
wget http://srtp.sourceforge.net/srtp-1.4.2.tgz
|
||||||
tar zxvf srtp-1.4.2.tgz
|
tar zxvf srtp-1.4.2.tgz
|
||||||
cd /usr/local/src/srtp
|
cd /usr/local/src/srtp
|
||||||
./configure CFLAGS=-fPIC --prefix=/usr/local/lib
|
./configure CFLAGS=-fPIC --prefix=/usr/local/lib
|
||||||
@ -67,7 +67,7 @@ You also need to install PJSIP, you can download the source `here <http://www.pj
|
|||||||
# ldconfig -p | grep pj
|
# ldconfig -p | grep pj
|
||||||
|
|
||||||
- **The result should be:**
|
- **The result should be:**
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
libpjsua.so (libc6,x86-64) => /usr/lib/libpjsua.so
|
libpjsua.so (libc6,x86-64) => /usr/lib/libpjsua.so
|
||||||
@ -90,7 +90,7 @@ Asterisk
|
|||||||
- Extract Asterisk:
|
- Extract Asterisk:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
tar zxvf asterisk*
|
tar zxvf asterisk*
|
||||||
|
|
||||||
- Enter the Asterisk directory:
|
- Enter the Asterisk directory:
|
||||||
@ -99,7 +99,7 @@ Asterisk
|
|||||||
|
|
||||||
cd ./asterisk*
|
cd ./asterisk*
|
||||||
|
|
||||||
- Run the Asterisk configure script:
|
- Run the Asterisk configure script:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@ -207,14 +207,14 @@ In Odoo, the configuration should be done in the user's preferences.
|
|||||||
.. image:: asterisk/voip_config01.png
|
.. image:: asterisk/voip_config01.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
- The SIP Login/Browser's Extension is the number you configured previously in the sip.conf file (in our example: 1060).
|
- The SIP Login/Browser's Extension is the number you configured previously in the sip.conf file (in our example: 1060).
|
||||||
|
|
||||||
- The SIP Password is the secret you chose in the sip.conf file.
|
- The SIP Password is the secret you chose in the sip.conf file.
|
||||||
|
|
||||||
- The extension of your office's phone is not a required field but it is used if you want to transfer your call from Odoo to an external phone also configured in the sip.conf file.
|
- The extension of your office's phone is not a required field but it is used if you want to transfer your call from Odoo to an external phone also configured in the sip.conf file.
|
||||||
|
|
||||||
|
|
||||||
The configuration should also be done in the General Settings under the "Integrations" section.
|
The configuration should also be done in the General Settings under the "Integrations" section.
|
||||||
|
|
||||||
.. image:: onsip/onsip02.png
|
.. image:: onsip/onsip02.png
|
||||||
:align: center
|
:align: center
|
||||||
|
@ -18,12 +18,12 @@ warehouse.
|
|||||||
Points to be Considered while Implementing Drop-Shipping
|
Points to be Considered while Implementing Drop-Shipping
|
||||||
========================================================
|
========================================================
|
||||||
|
|
||||||
- Use drop-shipping only for the products you can't or don't want to keep in stock.
|
- Use drop-shipping only for the products you can't or don't want to keep in stock.
|
||||||
One reason is that you'll always make smaller
|
One reason is that you'll always make smaller
|
||||||
margins on items that are drop-shipped, so you should keep it
|
margins on items that are drop-shipped, so you should keep it
|
||||||
only for items that take up a lot of space in your warehouse.
|
only for items that take up a lot of space in your warehouse.
|
||||||
|
|
||||||
- Drop-shipping is best for niche products.
|
- Drop-shipping is best for niche products.
|
||||||
Chances are that products that are in high demand are being offered by large suppliers at a
|
Chances are that products that are in high demand are being offered by large suppliers at a
|
||||||
fraction of the price you'll be able to charge, so using a more
|
fraction of the price you'll be able to charge, so using a more
|
||||||
costly shipping method won't be financially rewarding. But if
|
costly shipping method won't be financially rewarding. But if
|
||||||
@ -32,11 +32,11 @@ Points to be Considered while Implementing Drop-Shipping
|
|||||||
- To protect your customers from bad experiences.
|
- To protect your customers from bad experiences.
|
||||||
Test drop-shipping companies for yourself beforehand and list the best ones.
|
Test drop-shipping companies for yourself beforehand and list the best ones.
|
||||||
|
|
||||||
- Make sure time is not against you.
|
- Make sure time is not against you.
|
||||||
Drop-shipping should take a reasonable amount of time and surely not more than it would have taken you to handle it all by yourself. It's also nice to be able
|
Drop-shipping should take a reasonable amount of time and surely not more than it would have taken you to handle it all by yourself. It's also nice to be able
|
||||||
to provide your customers with a tracking number.
|
to provide your customers with a tracking number.
|
||||||
|
|
||||||
- Items have to be available from your supplier.
|
- Items have to be available from your supplier.
|
||||||
It's good to know if
|
It's good to know if
|
||||||
the product you're selling is available upstream. If you don't
|
the product you're selling is available upstream. If you don't
|
||||||
have that information, inform your customers that you don't hold
|
have that information, inform your customers that you don't hold
|
||||||
|
@ -38,7 +38,7 @@ goods in output and then deliver (3 steps)* for *Outgoing Shipments*.
|
|||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Activating this option will lead to the creation of two new locations,
|
Activating this option will lead to the creation of two new locations,
|
||||||
*Output* and *Packing Zone*. If you want to rename it go to :menuselection:`Inventory -->
|
*Output* and *Packing Zone*. If you want to rename it go to :menuselection:`Inventory -->
|
||||||
Configuration --> Locations`, *Select* the one you want to rename and update its name.
|
Configuration --> Locations`, *Select* the one you want to rename and update its name.
|
||||||
|
|
||||||
Create a Sales Order
|
Create a Sales Order
|
||||||
|
@ -19,7 +19,7 @@ provide a mechanism to chain different actions together. In this case,
|
|||||||
we will chain the picking step to the shipping step.
|
we will chain the picking step to the shipping step.
|
||||||
|
|
||||||
To allow *multi-step routes*, go to :menuselection:`Inventory --> Configuration --> Settings` and
|
To allow *multi-step routes*, go to :menuselection:`Inventory --> Configuration --> Settings` and
|
||||||
activate the option. Note that activating *Multi-Step Routes* will also
|
activate the option. Note that activating *Multi-Step Routes* will also
|
||||||
activate *Storage Locations*.
|
activate *Storage Locations*.
|
||||||
|
|
||||||
.. image:: two_steps/two_steps_01.png
|
.. image:: two_steps/two_steps_01.png
|
||||||
@ -28,7 +28,7 @@ activate *Storage Locations*.
|
|||||||
Warehouse configuration
|
Warehouse configuration
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
Once *Multi-Step Routes* has been activated, you can go to :menuselection:`Inventory -->
|
Once *Multi-Step Routes* has been activated, you can go to :menuselection:`Inventory -->
|
||||||
Configuration --> Warehouse` and enter the warehouse which will use
|
Configuration --> Warehouse` and enter the warehouse which will use
|
||||||
delivery in 2 steps. You can then select the option *Send goods in
|
delivery in 2 steps. You can then select the option *Send goods in
|
||||||
output and then deliver (2 steps)* for Outgoing Shipments.
|
output and then deliver (2 steps)* for Outgoing Shipments.
|
||||||
|
@ -43,10 +43,10 @@ on the dashboard, you can click the *1 TO PROCESS* button under the
|
|||||||
|
|
||||||
Now, enter the picking that you want to process. You will be able to
|
Now, enter the picking that you want to process. You will be able to
|
||||||
click on *Validate* to complete the move directly as products coming
|
click on *Validate* to complete the move directly as products coming
|
||||||
from suppliers are considered as being always available.
|
from suppliers are considered as being always available.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
If you have :guilabel:`Storage Locations` activated, you can click the hamburger menu next to
|
If you have :guilabel:`Storage Locations` activated, you can click the hamburger menu next to
|
||||||
the :guilabel:`Done quantity` to specify the location(s) where you are storing the received
|
the :guilabel:`Done quantity` to specify the location(s) where you are storing the received
|
||||||
product(s).
|
product(s).
|
||||||
|
|
||||||
|
@ -7,20 +7,20 @@ chain, it only makes sense that we assess the quality of the products received f
|
|||||||
To do so, we will add a quality control step.
|
To do so, we will add a quality control step.
|
||||||
|
|
||||||
Odoo uses routes to define how to handle the different receipt steps.
|
Odoo uses routes to define how to handle the different receipt steps.
|
||||||
Configuration of those routes is done at the warehouse level. By default, the reception is a
|
Configuration of those routes is done at the warehouse level. By default, the reception is a
|
||||||
one-step process, but it can also be configured to have two-steps or three-steps processes.
|
one-step process, but it can also be configured to have two-steps or three-steps processes.
|
||||||
|
|
||||||
The three-steps flow works as follows: you receive the goods in your receiving area, then transfer
|
The three-steps flow works as follows: you receive the goods in your receiving area, then transfer
|
||||||
them into a quality area for quality control (QC). When the quality check is completed, the goods
|
them into a quality area for quality control (QC). When the quality check is completed, the goods
|
||||||
that match the QC requirements are moved to stock
|
that match the QC requirements are moved to stock
|
||||||
|
|
||||||
Activate Multi-Step Routes
|
Activate Multi-Step Routes
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
The first step is to allow the use of *Multi-Step Routes*. Routes provide a mechanism to chain different
|
The first step is to allow the use of *Multi-Step Routes*. Routes provide a mechanism to chain different
|
||||||
actions together. In this case, we will chain the picking step to the shipping step.
|
actions together. In this case, we will chain the picking step to the shipping step.
|
||||||
|
|
||||||
To enable *Multi-Step Routes*, go to :menuselection:`Inventory --> Configuration --> Settings` and
|
To enable *Multi-Step Routes*, go to :menuselection:`Inventory --> Configuration --> Settings` and
|
||||||
activate the option.
|
activate the option.
|
||||||
|
|
||||||
.. image:: three_steps/three_steps_01.png
|
.. image:: three_steps/three_steps_01.png
|
||||||
@ -34,22 +34,22 @@ activate the option.
|
|||||||
Configure warehouse for receipt in 3-steps
|
Configure warehouse for receipt in 3-steps
|
||||||
==========================================
|
==========================================
|
||||||
|
|
||||||
Once *Multi-Step Routes* has been activated, go to :menuselection:`Inventory --> Configuration -->
|
Once *Multi-Step Routes* has been activated, go to :menuselection:`Inventory --> Configuration -->
|
||||||
Warehouse` and enter the warehouse which should work with the 3-steps reception. Then, select
|
Warehouse` and enter the warehouse which should work with the 3-steps reception. Then, select
|
||||||
*Receive goods in input, then quality and then stock (3 steps)* for *Incoming Shipments*.
|
*Receive goods in input, then quality and then stock (3 steps)* for *Incoming Shipments*.
|
||||||
|
|
||||||
.. image:: three_steps/three_steps_02.png
|
.. image:: three_steps/three_steps_02.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: View of the incoming shipment strategy to choose to receive goods in three steps
|
:alt: View of the incoming shipment strategy to choose to receive goods in three steps
|
||||||
|
|
||||||
Activating this option leads to the creation of two new locations: *Input* and *Quality Control*.
|
Activating this option leads to the creation of two new locations: *Input* and *Quality Control*.
|
||||||
To rename them, go to :menuselection:`Inventory --> Configuration --> Locations` and select
|
To rename them, go to :menuselection:`Inventory --> Configuration --> Locations` and select
|
||||||
the one you want to rename.
|
the one you want to rename.
|
||||||
|
|
||||||
Create a Purchase Order
|
Create a Purchase Order
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
To start the 3-steps reception process, create a *Request for Quotation* from the *Purchase* app,
|
To start the 3-steps reception process, create a *Request for Quotation* from the *Purchase* app,
|
||||||
add some storable products to it and confirm. Then, three pickings are created with your *Purchase
|
add some storable products to it and confirm. Then, three pickings are created with your *Purchase
|
||||||
Order* as the source document:
|
Order* as the source document:
|
||||||
|
|
||||||
@ -68,25 +68,25 @@ Order* as the source document:
|
|||||||
Process the receipt, quality control and entry in stock
|
Process the receipt, quality control and entry in stock
|
||||||
=======================================================
|
=======================================================
|
||||||
|
|
||||||
As the receipt operation is the first one to be processed, it has a *Ready* status while the others
|
As the receipt operation is the first one to be processed, it has a *Ready* status while the others
|
||||||
are *Waiting Another Operation*.
|
are *Waiting Another Operation*.
|
||||||
|
|
||||||
To access the receipt operation, click on the button from the *Purchase Order* or go back to the
|
To access the receipt operation, click on the button from the *Purchase Order* or go back to the
|
||||||
*Inventory* app dashboard and click on *Receipts*.
|
*Inventory* app dashboard and click on *Receipts*.
|
||||||
|
|
||||||
.. image:: three_steps/three_steps_04.png
|
.. image:: three_steps/three_steps_04.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: View of the button to click to see the receipts that need to be processed
|
:alt: View of the button to click to see the receipts that need to be processed
|
||||||
|
|
||||||
In the receipt order, products are always considered available because they come from the supplier.
|
In the receipt order, products are always considered available because they come from the supplier.
|
||||||
Then, the receipt can be validated.
|
Then, the receipt can be validated.
|
||||||
|
|
||||||
.. image:: three_steps/three_steps_05.png
|
.. image:: three_steps/three_steps_05.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: View of the move (internal transfer) from the reception area to the warehouse input area
|
:alt: View of the move (internal transfer) from the reception area to the warehouse input area
|
||||||
|
|
||||||
Once the receipt has been validated, the transfer to quality becomes *Ready*. And, because the documents
|
Once the receipt has been validated, the transfer to quality becomes *Ready*. And, because the documents
|
||||||
are chained to each other, products previously received are automatically reserved on the
|
are chained to each other, products previously received are automatically reserved on the
|
||||||
transfer. Then, the transfer can be directly validated.
|
transfer. Then, the transfer can be directly validated.
|
||||||
|
|
||||||
.. image:: three_steps/three_steps_06.png
|
.. image:: three_steps/three_steps_06.png
|
||||||
@ -97,7 +97,7 @@ transfer. Then, the transfer can be directly validated.
|
|||||||
:align: center
|
:align: center
|
||||||
:alt: View of the move (internal transfer) from the input area to the quality control area
|
:alt: View of the move (internal transfer) from the input area to the quality control area
|
||||||
|
|
||||||
Now, the transfer that enters the products to stock is *Ready*. Here, it is again ready to be
|
Now, the transfer that enters the products to stock is *Ready*. Here, it is again ready to be
|
||||||
validated in order to transfer the products to your stock location.
|
validated in order to transfer the products to your stock location.
|
||||||
|
|
||||||
.. image:: three_steps/three_steps_08.png
|
.. image:: three_steps/three_steps_08.png
|
||||||
|
@ -40,7 +40,7 @@ After that, the different transfers that needed to be included in the batch tran
|
|||||||
to the batch transfer
|
to the batch transfer
|
||||||
|
|
||||||
To see the products to pick for the different transfers, click on
|
To see the products to pick for the different transfers, click on
|
||||||
*Select*. If *Multi-locations* has been activated, the document also shows the locations they have
|
*Select*. If *Multi-locations* has been activated, the document also shows the locations they have
|
||||||
been reserved from.
|
been reserved from.
|
||||||
|
|
||||||
.. image:: batch_transfers/batch_transfers_05.png
|
.. image:: batch_transfers/batch_transfers_05.png
|
||||||
@ -77,12 +77,12 @@ too.
|
|||||||
:align: center
|
:align: center
|
||||||
:alt: View of an in progress batch transfer
|
:alt: View of an in progress batch transfer
|
||||||
|
|
||||||
In case all the products cannot be picked, you can create backorders for each individual transfer
|
In case all the products cannot be picked, you can create backorders for each individual transfer
|
||||||
which couldn’t be completely processed.
|
which couldn’t be completely processed.
|
||||||
|
|
||||||
.. image:: batch_transfers/batch_transfers_09.png
|
.. image:: batch_transfers/batch_transfers_09.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: How to handle batch transfers with unavailable products. Creation of a backorder inside
|
:alt: How to handle batch transfers with unavailable products. Creation of a backorder inside
|
||||||
of a batch transfer
|
of a batch transfer
|
||||||
|
|
||||||
.. image:: batch_transfers/batch_transfers_10.png
|
.. image:: batch_transfers/batch_transfers_10.png
|
||||||
|
@ -25,7 +25,7 @@ options available. Each of them is explained in detail below.
|
|||||||
|
|
||||||
.. rst-class:: alternatives doc-aside
|
.. rst-class:: alternatives doc-aside
|
||||||
|
|
||||||
Standard Price
|
Standard Price
|
||||||
.. rst-class:: values-table
|
.. rst-class:: values-table
|
||||||
|
|
||||||
.. list-table::
|
.. list-table::
|
||||||
@ -110,7 +110,7 @@ Average Price
|
|||||||
- +2*€6
|
- +2*€6
|
||||||
- €36
|
- €36
|
||||||
|
|
||||||
In **AVCO (Average Cost)**, each product has the same value and this
|
In **AVCO (Average Cost)**, each product has the same value and this
|
||||||
value is the average purchase cost of the product. With this costing method, the
|
value is the average purchase cost of the product. With this costing method, the
|
||||||
cost of the product is recomputed as each receipt.
|
cost of the product is recomputed as each receipt.
|
||||||
|
|
||||||
@ -157,14 +157,14 @@ FIFO
|
|||||||
- €44
|
- €44
|
||||||
|
|
||||||
In **FIFO (First In First Out)**, the products are valued at their
|
In **FIFO (First In First Out)**, the products are valued at their
|
||||||
purchase cost. When a product leaves the stock, that’s the “First in,
|
purchase cost. When a product leaves the stock, that’s the “First in,
|
||||||
first out” rule that applies.
|
first out” rule that applies.
|
||||||
|
|
||||||
Pay attention, that this is a financial FIFO. The first value “in”
|
Pay attention, that this is a financial FIFO. The first value “in”
|
||||||
is the first value “out”, no matter the storage location, warehouse
|
is the first value “out”, no matter the storage location, warehouse
|
||||||
or serial number.
|
or serial number.
|
||||||
|
|
||||||
FIFO is advised if you manage all your workflows into Odoo (Sales,
|
FIFO is advised if you manage all your workflows into Odoo (Sales,
|
||||||
Purchases, Inventory). It suits any kind of users.
|
Purchases, Inventory). It suits any kind of users.
|
||||||
|
|
||||||
Inventory Valuation: Manual or Automated
|
Inventory Valuation: Manual or Automated
|
||||||
@ -179,7 +179,7 @@ your accounting mode: it can be continental or anglo-saxon. In
|
|||||||
continental accounting, the cost of a good is taken into account as soon
|
continental accounting, the cost of a good is taken into account as soon
|
||||||
as the product is received in stock. In anglo-saxon accounting, the cost
|
as the product is received in stock. In anglo-saxon accounting, the cost
|
||||||
of a good is only recorded as an expense when this good is invoiced to a
|
of a good is only recorded as an expense when this good is invoiced to a
|
||||||
final customer. In the tables below, you can easily compare those two
|
final customer. In the tables below, you can easily compare those two
|
||||||
accounting modes.
|
accounting modes.
|
||||||
|
|
||||||
Usually, based on your country, the correct accounting mode will be
|
Usually, based on your country, the correct accounting mode will be
|
||||||
@ -195,8 +195,8 @@ on your accounting books. Periodically, you create a manual journal
|
|||||||
entry representing the value of what you have in stock. To know that
|
entry representing the value of what you have in stock. To know that
|
||||||
value, go in :menuselection:`Inventory --> Reporting --> Inventory Valuation`.
|
value, go in :menuselection:`Inventory --> Reporting --> Inventory Valuation`.
|
||||||
|
|
||||||
This is the default configuration in Odoo and it works
|
This is the default configuration in Odoo and it works
|
||||||
out-of-the-box. Check following operations and find out how
|
out-of-the-box. Check following operations and find out how
|
||||||
Odoo is managing the accounting postings.
|
Odoo is managing the accounting postings.
|
||||||
|
|
||||||
Continental Accounting
|
Continental Accounting
|
||||||
@ -248,11 +248,11 @@ Manufacturing Orders
|
|||||||
|
|
||||||
<hr style="float: none; visibility: hidden; margin: 0;">
|
<hr style="float: none; visibility: hidden; margin: 0;">
|
||||||
|
|
||||||
At the end of the month/year, your company does a physical inventory
|
At the end of the month/year, your company does a physical inventory
|
||||||
or just relies on the inventory in Odoo to value the stock into your books.
|
or just relies on the inventory in Odoo to value the stock into your books.
|
||||||
|
|
||||||
Create a journal entry to move the stock variation value from your
|
Create a journal entry to move the stock variation value from your
|
||||||
Profit&Loss section to your assets.
|
Profit&Loss section to your assets.
|
||||||
|
|
||||||
.. h:div:: doc-aside
|
.. h:div:: doc-aside
|
||||||
|
|
||||||
@ -261,13 +261,13 @@ Profit&Loss section to your assets.
|
|||||||
===================================== ===== ======
|
===================================== ===== ======
|
||||||
\ Debit Credit
|
\ Debit Credit
|
||||||
===================================== ===== ======
|
===================================== ===== ======
|
||||||
Assets: Inventory X
|
Assets: Inventory X
|
||||||
Expenses: Inventory Variations X
|
Expenses: Inventory Variations X
|
||||||
===================================== ===== ======
|
===================================== ===== ======
|
||||||
|
|
||||||
If the stock value decreased, the **Inventory** account is credited
|
If the stock value decreased, the **Inventory** account is credited
|
||||||
and the **Inventory Variations** debited.
|
and the **Inventory Variations** debited.
|
||||||
|
|
||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<hr style="float: none; visibility: hidden; margin: 0;">
|
<hr style="float: none; visibility: hidden; margin: 0;">
|
||||||
@ -289,7 +289,7 @@ Vendor Bill
|
|||||||
============================= ===== ======
|
============================= ===== ======
|
||||||
|
|
||||||
Configuration:
|
Configuration:
|
||||||
* Purchased Goods: defined on the product or on the internal category of related product
|
* Purchased Goods: defined on the product or on the internal category of related product
|
||||||
(Expense Account field)
|
(Expense Account field)
|
||||||
* Deferred Tax Assets: defined on the tax used on the purchase order line
|
* Deferred Tax Assets: defined on the tax used on the purchase order line
|
||||||
* Accounts Payable: defined on the vendor related to the bill
|
* Accounts Payable: defined on the vendor related to the bill
|
||||||
@ -307,7 +307,7 @@ Customer Invoice
|
|||||||
===================================== ===== ======
|
===================================== ===== ======
|
||||||
|
|
||||||
Configuration:
|
Configuration:
|
||||||
* Revenues: defined on the product or on the internal category of related
|
* Revenues: defined on the product or on the internal category of related
|
||||||
product (Income Account field)
|
product (Income Account field)
|
||||||
* Deferred Tax Liabilities: defined on the tax used on the invoice line
|
* Deferred Tax Liabilities: defined on the tax used on the invoice line
|
||||||
* Accounts Receivable: defined on the customer (Receivable Account)
|
* Accounts Receivable: defined on the customer (Receivable Account)
|
||||||
@ -322,11 +322,11 @@ Manufacturing Orders
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<hr style="float: none; visibility: hidden; margin: 0;">
|
<hr style="float: none; visibility: hidden; margin: 0;">
|
||||||
|
|
||||||
At the end of the month/year, your company does a physical inventory
|
At the end of the month/year, your company does a physical inventory
|
||||||
or just relies on the inventory in Odoo to value the stock into your books.
|
or just relies on the inventory in Odoo to value the stock into your books.
|
||||||
|
|
||||||
Then you need to break down the purchase balance into both the inventory and
|
Then you need to break down the purchase balance into both the inventory and
|
||||||
the cost of goods sold using the following formula:
|
the cost of goods sold using the following formula:
|
||||||
|
|
||||||
Cost of goods sold (COGS) = Starting inventory value + Purchases – Closing inventory value
|
Cost of goods sold (COGS) = Starting inventory value + Purchases – Closing inventory value
|
||||||
@ -340,10 +340,10 @@ To update the stock valuation in your books, record such an entry:
|
|||||||
===================================== ===== ======
|
===================================== ===== ======
|
||||||
\ Debit Credit
|
\ Debit Credit
|
||||||
===================================== ===== ======
|
===================================== ===== ======
|
||||||
Assets: Inventory (closing value) X
|
Assets: Inventory (closing value) X
|
||||||
Expenses: Cost of Good Sold X
|
Expenses: Cost of Good Sold X
|
||||||
Expenses: Purchased Goods X
|
Expenses: Purchased Goods X
|
||||||
Assets: Inventory (starting value) X
|
Assets: Inventory (starting value) X
|
||||||
===================================== ===== ======
|
===================================== ===== ======
|
||||||
|
|
||||||
Automated Inventory Valuation
|
Automated Inventory Valuation
|
||||||
@ -370,19 +370,19 @@ Continental Accounting
|
|||||||
<hr style="float: none; visibility: hidden; margin: 0;">
|
<hr style="float: none; visibility: hidden; margin: 0;">
|
||||||
|
|
||||||
.. h:div:: doc-aside
|
.. h:div:: doc-aside
|
||||||
|
|
||||||
**Configuration:**
|
**Configuration:**
|
||||||
|
|
||||||
- Accounts Receivable/Payable: defined on the partner (Accounting tab)
|
- Accounts Receivable/Payable: defined on the partner (Accounting tab)
|
||||||
|
|
||||||
- Deferred Tax Assets/Liabilities: defined on the tax used on the invoice line
|
- Deferred Tax Assets/Liabilities: defined on the tax used on the invoice line
|
||||||
|
|
||||||
- Revenues/Expenses: defined by default on product's internal category; can be
|
- Revenues/Expenses: defined by default on product's internal category; can be
|
||||||
also set in product form (Accounting tab) as a replacement value.
|
also set in product form (Accounting tab) as a replacement value.
|
||||||
|
|
||||||
- Inventory Variations: to set as Stock Input/Output Account in product's internal
|
- Inventory Variations: to set as Stock Input/Output Account in product's internal
|
||||||
category
|
category
|
||||||
|
|
||||||
- Inventory: to set as Stock Valuation Account in product's internal category
|
- Inventory: to set as Stock Valuation Account in product's internal category
|
||||||
|
|
||||||
Anglo-Saxon Accounting
|
Anglo-Saxon Accounting
|
||||||
@ -402,7 +402,7 @@ Anglo-Saxon Accounting
|
|||||||
|
|
||||||
- Accounts Receivable/Payable: defined on the partner (Accounting tab)
|
- Accounts Receivable/Payable: defined on the partner (Accounting tab)
|
||||||
|
|
||||||
- Deferred Tax Assets/Liabilities: defined on the tax used on the
|
- Deferred Tax Assets/Liabilities: defined on the tax used on the
|
||||||
invoice line
|
invoice line
|
||||||
|
|
||||||
- Revenues: defined on the product category as a default, or specifically
|
- Revenues: defined on the product category as a default, or specifically
|
||||||
@ -412,13 +412,13 @@ Anglo-Saxon Accounting
|
|||||||
Defined on the product category as a default value, or specifically on
|
Defined on the product category as a default value, or specifically on
|
||||||
the product form.
|
the product form.
|
||||||
|
|
||||||
- Goods Received Not Purchased: to set as Stock Input Account in product's
|
- Goods Received Not Purchased: to set as Stock Input Account in product's
|
||||||
internal category
|
internal category
|
||||||
|
|
||||||
- Goods Issued Not Invoiced: to set as Stock Output Account in product's
|
- Goods Issued Not Invoiced: to set as Stock Output Account in product's
|
||||||
internal category
|
internal category
|
||||||
|
|
||||||
- Inventory: to set as Stock Valuation Account in product's internal category
|
- Inventory: to set as Stock Valuation Account in product's internal category
|
||||||
|
|
||||||
- Price Difference: to set in product's internal category or in product
|
- Price Difference: to set in product's internal category or in product
|
||||||
form as a specific replacement value
|
form as a specific replacement value
|
||||||
|
@ -23,7 +23,7 @@ Now, you have to make sure that the main stock locations of warehouse A and ware
|
|||||||
Sell a product from the virtual warehouse
|
Sell a product from the virtual warehouse
|
||||||
==========================================
|
==========================================
|
||||||
|
|
||||||
Let’s say you have two products, one stored in warehouse A and one stored in warehouse B. Now, you can create a new quotation for one of each product. Go to other information and choose Warehouse A+B in the shipping information.
|
Let’s say you have two products, one stored in warehouse A and one stored in warehouse B. Now, you can create a new quotation for one of each product. Go to other information and choose Warehouse A+B in the shipping information.
|
||||||
|
|
||||||
.. image:: stock_warehouses/ware3.png
|
.. image:: stock_warehouses/ware3.png
|
||||||
:align: center
|
:align: center
|
||||||
|
@ -14,7 +14,7 @@ the destination.
|
|||||||
|
|
||||||
You can easily cancel the request made to the carrier system.
|
You can easily cancel the request made to the carrier system.
|
||||||
|
|
||||||
How to cancel a shipping request?
|
How to cancel a shipping request?
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
- If the delivery order is not **Validated**, then the request hasn't been
|
- If the delivery order is not **Validated**, then the request hasn't been
|
||||||
@ -36,7 +36,7 @@ You will now see that the shipment has been cancelled.
|
|||||||
|
|
||||||
You can now change the carrier if you wish.
|
You can now change the carrier if you wish.
|
||||||
|
|
||||||
How to send a shipping request after cancelling one?
|
How to send a shipping request after cancelling one?
|
||||||
====================================================
|
====================================================
|
||||||
|
|
||||||
After cancelling the shipping request, you can change the carrier you
|
After cancelling the shipping request, you can change the carrier you
|
||||||
|
@ -81,7 +81,7 @@ Open the products you want to ship and set a weight on it.
|
|||||||
Don't forget to do the conversion if you are used to the imperial
|
Don't forget to do the conversion if you are used to the imperial
|
||||||
measurement system.
|
measurement system.
|
||||||
|
|
||||||
How to print shipping labels ?
|
How to print shipping labels ?
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
The delivery order created from the sale order will take the shipping
|
The delivery order created from the sale order will take the shipping
|
||||||
|
@ -13,7 +13,7 @@ Configuration
|
|||||||
=============
|
=============
|
||||||
|
|
||||||
To configure the use of packages, go to the menu
|
To configure the use of packages, go to the menu
|
||||||
:menuselection:`Inventory --> Configuration --> Settings`.
|
:menuselection:`Inventory --> Configuration --> Settings`.
|
||||||
Locate the **Packages** section and tick **Record
|
Locate the **Packages** section and tick **Record
|
||||||
packages used on packing: pallets, boxes,...**
|
packages used on packing: pallets, boxes,...**
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
===============================
|
===============================
|
||||||
How to setup a delivery method?
|
How to setup a delivery method?
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
Overview
|
Overview
|
||||||
@ -33,7 +33,7 @@ order to see it :
|
|||||||
Configure the delivery method
|
Configure the delivery method
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
To configure your delivery methods, go to the **Inventory** module,
|
To configure your delivery methods, go to the **Inventory** module,
|
||||||
click on :menuselection:`Configuration --> Delivery Methods`.
|
click on :menuselection:`Configuration --> Delivery Methods`.
|
||||||
|
|
||||||
First set a name and a transporter company.
|
First set a name and a transporter company.
|
||||||
@ -65,9 +65,9 @@ feature limits the list of countries on your e-commerce.
|
|||||||
.. image:: delivery_method/setup02.png
|
.. image:: delivery_method/setup02.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
You can integrate Odoo with external shippers in order to compute the
|
You can integrate Odoo with external shippers in order to compute the
|
||||||
real price and packagings, and handle the printing the shipping labels.
|
real price and packagings, and handle the printing the shipping labels.
|
||||||
See :doc:`third_party_shipper`
|
See :doc:`third_party_shipper`
|
||||||
|
|
||||||
Delivery process
|
Delivery process
|
||||||
|
@ -16,7 +16,7 @@ Configuration
|
|||||||
Install the shipper company connector module
|
Install the shipper company connector module
|
||||||
--------------------------------------------
|
--------------------------------------------
|
||||||
|
|
||||||
In the inventory module, click on :menuselection:`Configuration --> Settings`.
|
In the inventory module, click on :menuselection:`Configuration --> Settings`.
|
||||||
Under **Shipping Connectors**, flag the transportation companies you want to
|
Under **Shipping Connectors**, flag the transportation companies you want to
|
||||||
integrate :
|
integrate :
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ integrate :
|
|||||||
Then click on **Apply**.
|
Then click on **Apply**.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
If you want to integrate delivery methods in your e-commerce,
|
If you want to integrate delivery methods in your e-commerce,
|
||||||
you'll have to install the **eCommerce Delivery** module.
|
you'll have to install the **eCommerce Delivery** module.
|
||||||
|
|
||||||
Configure the delivery method
|
Configure the delivery method
|
||||||
|
@ -16,15 +16,15 @@ the UPS Developer Kit API Development and Production servers.
|
|||||||
Create a UPS Account
|
Create a UPS Account
|
||||||
=====================
|
=====================
|
||||||
|
|
||||||
Note that only customers located in the US can open a UPS account online.
|
Note that only customers located in the US can open a UPS account online.
|
||||||
If you are located outside the US, you will need to contact UPS Customer
|
If you are located outside the US, you will need to contact UPS Customer
|
||||||
Service in order to to open an account.
|
Service in order to to open an account.
|
||||||
|
|
||||||
You can read additional information about opening a UPS account on the
|
You can read additional information about opening a UPS account on the
|
||||||
their website, on the page,
|
their website, on the page,
|
||||||
`How to Open a UPS Account Online <https://www.ups.com/content/us/en/resources/sri/openaccountonline.html?srch_pos=2&srch_phr=open+ups+account>`_
|
`How to Open a UPS Account Online <https://www.ups.com/content/us/en/resources/sri/openaccountonline.html?srch_pos=2&srch_phr=open+ups+account>`_
|
||||||
|
|
||||||
If you don't already have a UPS account, you can create one along with
|
If you don't already have a UPS account, you can create one along with
|
||||||
your online profile by following these steps:
|
your online profile by following these steps:
|
||||||
|
|
||||||
1. Access the UPS.com web site at
|
1. Access the UPS.com web site at
|
||||||
@ -34,7 +34,7 @@ at the top of the page.
|
|||||||
2. Click the **Register for MyUPS** button, and follow the prompts to
|
2. Click the **Register for MyUPS** button, and follow the prompts to
|
||||||
complete the registration process.
|
complete the registration process.
|
||||||
|
|
||||||
If you already have a UPS account, you can add it to your online profile as follows:
|
If you already have a UPS account, you can add it to your online profile as follows:
|
||||||
|
|
||||||
1. Log in to the `UPS.com website <http://www.ups.com/>`_) using your UPS.com User ID and Password.
|
1. Log in to the `UPS.com website <http://www.ups.com/>`_) using your UPS.com User ID and Password.
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ If you already have a UPS account, you can add it to your online profile as foll
|
|||||||
4. Click the **Add an Existing UPS Account** link in the **UPS Account Details**
|
4. Click the **Add an Existing UPS Account** link in the **UPS Account Details**
|
||||||
section of the page.
|
section of the page.
|
||||||
|
|
||||||
5. In the **Add New Account** screen, enter the **UPS Account Number**,
|
5. In the **Add New Account** screen, enter the **UPS Account Number**,
|
||||||
**Account Name**, and **Postal Code** fields. The country defaults to
|
**Account Name**, and **Postal Code** fields. The country defaults to
|
||||||
United States.q
|
United States.q
|
||||||
|
|
||||||
|
@ -3,17 +3,17 @@ Kits
|
|||||||
=====
|
=====
|
||||||
|
|
||||||
A *kit* is a set of components that are not pre-assembled or mixed. This is useful for
|
A *kit* is a set of components that are not pre-assembled or mixed. This is useful for
|
||||||
selling but also for creating cleaner and more effective *BOMs*. To use kits, you need
|
selling but also for creating cleaner and more effective *BOMs*. To use kits, you need
|
||||||
both the Manufacturing and Inventory apps to be installed.
|
both the Manufacturing and Inventory apps to be installed.
|
||||||
|
|
||||||
Manage Stock of Component Products
|
Manage Stock of Component Products
|
||||||
==================================
|
==================================
|
||||||
|
|
||||||
If you want to assemble kits as they are ordered, managing stock of the kit components only,
|
If you want to assemble kits as they are ordered, managing stock of the kit components only,
|
||||||
you will use a *Kit BoM* Type without any manufacturing operations.
|
you will use a *Kit BoM* Type without any manufacturing operations.
|
||||||
|
|
||||||
A product using a *Kit BoM* will appear as a single line item on a quotation and a sales order,
|
A product using a *Kit BoM* will appear as a single line item on a quotation and a sales order,
|
||||||
but will generate a delivery order with one line item for each of the components of the kit. In
|
but will generate a delivery order with one line item for each of the components of the kit. In
|
||||||
the examples below, the first image shows a sales order for the kit *Custom Computer Kit*,
|
the examples below, the first image shows a sales order for the kit *Custom Computer Kit*,
|
||||||
while the second image shows the corresponding delivery order.
|
while the second image shows the corresponding delivery order.
|
||||||
|
|
||||||
@ -26,16 +26,16 @@ while the second image shows the corresponding delivery order.
|
|||||||
Configuration
|
Configuration
|
||||||
=============
|
=============
|
||||||
|
|
||||||
From the *Products menu* in either the *Inventory* or *Manufacturing* app, create each component
|
From the *Products menu* in either the *Inventory* or *Manufacturing* app, create each component
|
||||||
product (as you would with any other product), then create the top-level, or kit product. Because
|
product (as you would with any other product), then create the top-level, or kit product. Because
|
||||||
you cannot track the stock of kit products, the *Product Type* should be set to *Consumable*.
|
you cannot track the stock of kit products, the *Product Type* should be set to *Consumable*.
|
||||||
However, if you are using Anglo-Saxon accounting, and you would like COGS to be posted when
|
However, if you are using Anglo-Saxon accounting, and you would like COGS to be posted when
|
||||||
invoicing your kits (and only for this reason), the storable product type should selected instead.
|
invoicing your kits (and only for this reason), the storable product type should selected instead.
|
||||||
Because a kit product cannot be purchased, *Can be Purchased* should be unchecked. The route of the
|
Because a kit product cannot be purchased, *Can be Purchased* should be unchecked. The route of the
|
||||||
kit product in the *Inventory* Tab does not really matter, as, for replenishment, only the route of
|
kit product in the *Inventory* Tab does not really matter, as, for replenishment, only the route of
|
||||||
the components that will be taken into account only.
|
the components that will be taken into account only.
|
||||||
|
|
||||||
All other parameters on the kit product may be modified according to your preference. The component
|
All other parameters on the kit product may be modified according to your preference. The component
|
||||||
products require no particular configuration.
|
products require no particular configuration.
|
||||||
|
|
||||||
Once the products are configured, create a *bill of materials* for the kit product. Add each component
|
Once the products are configured, create a *bill of materials* for the kit product. Add each component
|
||||||
@ -47,11 +47,11 @@ and its quantity. Select the *BoM Type* Kit. All other options may be left with
|
|||||||
Manage Stock of Kit Product and Component Products
|
Manage Stock of Kit Product and Component Products
|
||||||
==================================================
|
==================================================
|
||||||
|
|
||||||
If you want to manage the stock of the *top-level kit product*, you will use a standard *BoM Type*
|
If you want to manage the stock of the *top-level kit product*, you will use a standard *BoM Type*
|
||||||
manufacture or subcontracting instead. In this case you will either buy the final product from your
|
manufacture or subcontracting instead. In this case you will either buy the final product from your
|
||||||
subcontractor, or make it yourself through a manufacturing order.
|
subcontractor, or make it yourself through a manufacturing order.
|
||||||
|
|
||||||
In that case the product type will be storable, and the BOM type either 'Manufacture this product'
|
In that case the product type will be storable, and the BOM type either 'Manufacture this product'
|
||||||
or 'Subcontracting' as shown below.
|
or 'Subcontracting' as shown below.
|
||||||
|
|
||||||
.. image:: kit_shipping/kit-storable.png
|
.. image:: kit_shipping/kit-storable.png
|
||||||
@ -59,29 +59,29 @@ or 'Subcontracting' as shown below.
|
|||||||
|
|
||||||
|
|
||||||
Build a cleaner BOM
|
Build a cleaner BOM
|
||||||
====================
|
====================
|
||||||
|
|
||||||
As suggested above, a kit BOM can also simply be used to manage a more complex BOM.
|
As suggested above, a kit BOM can also simply be used to manage a more complex BOM.
|
||||||
|
|
||||||
Imagine the Custom Computer parts above were part of another final product. It would be much
|
Imagine the Custom Computer parts above were part of another final product. It would be much
|
||||||
clearer and simpler if the BOMs were added together (as shown below) instead of adding all
|
clearer and simpler if the BOMs were added together (as shown below) instead of adding all
|
||||||
the individual parts one by one.
|
the individual parts one by one.
|
||||||
|
|
||||||
.. image:: kit_shipping/kit-bom4.png
|
.. image:: kit_shipping/kit-bom4.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
This is even better illustrated when looking at the BOM Structure Report, where it is
|
This is even better illustrated when looking at the BOM Structure Report, where it is
|
||||||
easy to expand and hide specific kit level or sub-assembly type BOMs.
|
easy to expand and hide specific kit level or sub-assembly type BOMs.
|
||||||
|
|
||||||
.. image:: kit_shipping/kit-bom5.png
|
.. image:: kit_shipping/kit-bom5.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
On the creation of the manufacturing order, the BOM will automatically expand to show all
|
On the creation of the manufacturing order, the BOM will automatically expand to show all
|
||||||
top level and kit level components. You can go back to the BOM at any point though as it
|
top level and kit level components. You can go back to the BOM at any point though as it
|
||||||
remains available on the form view of your manufacturing order.
|
remains available on the form view of your manufacturing order.
|
||||||
|
|
||||||
.. image:: kit_shipping/kit-bom6.png
|
.. image:: kit_shipping/kit-bom6.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Finally, note that if there were any Operations in the Kit BOM, these would also simply be added
|
Finally, note that if there were any Operations in the Kit BOM, these would also simply be added
|
||||||
in to the work order list of the main component.
|
in to the work order list of the main component.
|
||||||
|
@ -7,7 +7,7 @@ of your subcontractor, before registering the products into your stock, you can
|
|||||||
rely on Odoo's Quality module.
|
rely on Odoo's Quality module.
|
||||||
|
|
||||||
|
|
||||||
To control the quality of your production, you need to set a *Quality Control Point*
|
To control the quality of your production, you need to set a *Quality Control Point*
|
||||||
on the Manufacturing Operation Type, as shown below. To create it, Go to :menuselection:`Quality
|
on the Manufacturing Operation Type, as shown below. To create it, Go to :menuselection:`Quality
|
||||||
--> Quality Control --> Control Points`, and click **Create**.
|
--> Quality Control --> Control Points`, and click **Create**.
|
||||||
If the check only applies to specific products, or product categories, you can specify these during
|
If the check only applies to specific products, or product categories, you can specify these during
|
||||||
@ -16,13 +16,13 @@ the setup as well.
|
|||||||
.. image:: quality_control/qc_1.png
|
.. image:: quality_control/qc_1.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Regarding the reception of subcontracted products, instead of the Manufacturing Operation Type,
|
Regarding the reception of subcontracted products, instead of the Manufacturing Operation Type,
|
||||||
you need to select the 'Receipts' Operation type. For the rest, the same principles apply.
|
you need to select the 'Receipts' Operation type. For the rest, the same principles apply.
|
||||||
|
|
||||||
.. image:: quality_control/qc_2.png
|
.. image:: quality_control/qc_2.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
By doing so, a quality check is automatically created each time a
|
By doing so, a quality check is automatically created each time a
|
||||||
finished product is made and/or received. Note that several Quality Check
|
finished product is made and/or received. Note that several Quality Check
|
||||||
*Types* can be chosen from the dropdown. Note also that several Quality
|
*Types* can be chosen from the dropdown. Note also that several Quality
|
||||||
Check Points can be set up for the same Operation Type.
|
Check Points can be set up for the same Operation Type.
|
||||||
|
@ -7,17 +7,17 @@ of Materials* or to represent your manufacturing flow more accurately.
|
|||||||
A *semi-finished product* is a manufactured product that is used as a
|
A *semi-finished product* is a manufactured product that is used as a
|
||||||
component in a Bill of Material.
|
component in a Bill of Material.
|
||||||
|
|
||||||
A *BoM* that employs *semi-finished products* is referred to as
|
A *BoM* that employs *semi-finished products* is referred to as
|
||||||
a multi-level BoM, where we distinguish between the *top level Product*
|
a multi-level BoM, where we distinguish between the *top level Product*
|
||||||
and the *sub-assemblies*.
|
and the *sub-assemblies*.
|
||||||
|
|
||||||
Configure a Multi Level BoM
|
Configure a Multi Level BoM
|
||||||
============================
|
============================
|
||||||
|
|
||||||
To configure a *multi-level BoM*, you will need the top-level product
|
To configure a *multi-level BoM*, you will need the top-level product
|
||||||
and its sub-assemblies. Therefore, you must first create the sub-assembly
|
and its sub-assemblies. Therefore, you must first create the sub-assembly
|
||||||
products and their respective Bill of Materials. Please refer to
|
products and their respective Bill of Materials. Please refer to
|
||||||
:doc:`bill_configuration` for more details on how to create a BOM.
|
:doc:`bill_configuration` for more details on how to create a BOM.
|
||||||
|
|
||||||
.. image:: sub_assemblies/sf_1.png
|
.. image:: sub_assemblies/sf_1.png
|
||||||
:align: center
|
:align: center
|
||||||
@ -25,33 +25,33 @@ products and their respective Bill of Materials. Please refer to
|
|||||||
Configure the Main BoM
|
Configure the Main BoM
|
||||||
======================
|
======================
|
||||||
|
|
||||||
Then on the final product form, simply add your semi-finished
|
Then on the final product form, simply add your semi-finished
|
||||||
products to the Bill of Material.
|
products to the Bill of Material.
|
||||||
|
|
||||||
.. image:: sub_assemblies/sf_2.png
|
.. image:: sub_assemblies/sf_2.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Manage your production planning
|
Manage your production planning
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
There are several methods to manage the triggering of the various manufacturing orders.
|
There are several methods to manage the triggering of the various manufacturing orders.
|
||||||
|
|
||||||
If every time a manufacturing order is confirmed for the main product, you'd like one for
|
If every time a manufacturing order is confirmed for the main product, you'd like one for
|
||||||
the semi-finished products as well, you have two options:
|
the semi-finished products as well, you have two options:
|
||||||
|
|
||||||
Option 1 : Create re-ordering rules for the semi-finished products, with both the minimum
|
Option 1 : Create re-ordering rules for the semi-finished products, with both the minimum
|
||||||
and maximum desired stock quantities at 0.
|
and maximum desired stock quantities at 0.
|
||||||
|
|
||||||
.. image:: sub_assemblies/sf_3.png
|
.. image:: sub_assemblies/sf_3.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Option 2 : Use the Replenish on Order (MTO) route on the semi-finished product, as well as
|
Option 2 : Use the Replenish on Order (MTO) route on the semi-finished product, as well as
|
||||||
the manufacturing one.
|
the manufacturing one.
|
||||||
|
|
||||||
Note that Option 1 is usually recommended over Option 2 as it is more flexible. The MTO route
|
Note that Option 1 is usually recommended over Option 2 as it is more flexible. The MTO route
|
||||||
creates a unique link between the semi-finished and the top level product, whereas the
|
creates a unique link between the semi-finished and the top level product, whereas the
|
||||||
re-ordering rule allows you to simply unreserve that production from the top level product
|
re-ordering rule allows you to simply unreserve that production from the top level product
|
||||||
production and redirect it to another, more pressing demand, for example.
|
production and redirect it to another, more pressing demand, for example.
|
||||||
|
|
||||||
In any case, as soon as the semi-finished product is produced, it will become
|
In any case, as soon as the semi-finished product is produced, it will become
|
||||||
available in the manufacturing order of the final product, as shown below.
|
available in the manufacturing order of the final product, as shown below.
|
||||||
|
@ -6,7 +6,7 @@ Outsourcing a portion or all of your company’s manufacturing needs
|
|||||||
is not easy. To make it work correctly, you have to:
|
is not easy. To make it work correctly, you have to:
|
||||||
|
|
||||||
- Manage the inventory of raw materials at your subcontractor
|
- Manage the inventory of raw materials at your subcontractor
|
||||||
- Ship raw material to your subcontractors, at the right time
|
- Ship raw material to your subcontractors, at the right time
|
||||||
- Control incoming goods quality
|
- Control incoming goods quality
|
||||||
- Control subcontractors bills
|
- Control subcontractors bills
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ produced out of raw materials “A” and “B”.
|
|||||||
|
|
||||||
.. image:: subcontracting/subcontracting_01.png
|
.. image:: subcontracting/subcontracting_01.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt:
|
:alt:
|
||||||
|
|
||||||
With its MRP subcontracting feature, Odoo helps you handle this flow easily.
|
With its MRP subcontracting feature, Odoo helps you handle this flow easily.
|
||||||
|
|
||||||
@ -27,12 +27,12 @@ To use the subcontracting feature, go to :menuselection:`Manufacturing
|
|||||||
|
|
||||||
.. image:: subcontracting/sbc_1.png
|
.. image:: subcontracting/sbc_1.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt:
|
:alt:
|
||||||
|
|
||||||
To define if a product must be subcontracted, use a *Bill of Materials
|
To define if a product must be subcontracted, use a *Bill of Materials
|
||||||
(BoM)* of type *Subcontracting*.
|
(BoM)* of type *Subcontracting*.
|
||||||
|
|
||||||
To create a new *BoM*, go to :menuselection:`Manufacturing --> Products -->
|
To create a new *BoM*, go to :menuselection:`Manufacturing --> Products -->
|
||||||
Bill of Materials` and hit create. Then, list the components
|
Bill of Materials` and hit create. Then, list the components
|
||||||
your subcontractor needs to manufacture the product. For costing
|
your subcontractor needs to manufacture the product. For costing
|
||||||
purposes, you might want to register all the components, even the ones
|
purposes, you might want to register all the components, even the ones
|
||||||
@ -43,7 +43,7 @@ several subcontractors.
|
|||||||
|
|
||||||
.. image:: subcontracting/sbc_2.png
|
.. image:: subcontracting/sbc_2.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt:
|
:alt:
|
||||||
|
|
||||||
Basic Subcontracting Flow
|
Basic Subcontracting Flow
|
||||||
=========================
|
=========================
|
||||||
@ -55,7 +55,7 @@ defined as a subcontractor on the *BoM* of these products.
|
|||||||
|
|
||||||
.. image:: subcontracting/subcontracting_04.png
|
.. image:: subcontracting/subcontracting_04.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt:
|
:alt:
|
||||||
|
|
||||||
Once the *PO* is validated (1), a pending receipt is created. When the
|
Once the *PO* is validated (1), a pending receipt is created. When the
|
||||||
products are received, validate the receipt (2), with the actual
|
products are received, validate the receipt (2), with the actual
|
||||||
@ -71,7 +71,7 @@ quantity received. As a result, Odoo does the following things for you:
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
The *PO* is optional. If you create a receipt manually, with the right
|
The *PO* is optional. If you create a receipt manually, with the right
|
||||||
subcontractor, Odoo still performs all the moves. This can be useful if
|
subcontractor, Odoo still performs all the moves. This can be useful if
|
||||||
the subcontractor does not bill a fixed price per item, but rather the time
|
the subcontractor does not bill a fixed price per item, but rather the time
|
||||||
and materials used.
|
and materials used.
|
||||||
|
|
||||||
@ -93,15 +93,15 @@ With:
|
|||||||
|
|
||||||
Sending raw materials to your subcontractors (**A**) does not impact
|
Sending raw materials to your subcontractors (**A**) does not impact
|
||||||
the inventory valuation, as the components are still valued as part of
|
the inventory valuation, as the components are still valued as part of
|
||||||
your stock. This is managed by making the *Subcontracting Location* an
|
your stock. This is managed by making the *Subcontracting Location* an
|
||||||
*Internal Location*.
|
*Internal Location*.
|
||||||
|
|
||||||
Then, the vendor price set on the product C form has to be what has to
|
Then, the vendor price set on the product C form has to be what has to
|
||||||
be paid to the subcontractor for his parts and service time: **B +
|
be paid to the subcontractor for his parts and service time: **B +
|
||||||
s**. The product cost has to be: **A + B + s**, how much the
|
s**. The product cost has to be: **A + B + s**, how much the
|
||||||
product is valued in the accounting.
|
product is valued in the accounting.
|
||||||
|
|
||||||
Finally, the subcontractor bill then matches the purchase order, with
|
Finally, the subcontractor bill then matches the purchase order, with
|
||||||
the proposed price coming from the finished products C.
|
the proposed price coming from the finished products C.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
@ -115,99 +115,99 @@ Traceability
|
|||||||
|
|
||||||
In case the received products from the subcontractor contain tracked
|
In case the received products from the subcontractor contain tracked
|
||||||
components, their serial or lot numbers need to be specified during the
|
components, their serial or lot numbers need to be specified during the
|
||||||
receipt.
|
receipt.
|
||||||
|
|
||||||
In that case, on the receipt of the subcontracted product, a *Record Components*
|
In that case, on the receipt of the subcontracted product, a *Record Components*
|
||||||
button appears. Click on it to open a dialog box and record the serial/lot numbers of
|
button appears. Click on it to open a dialog box and record the serial/lot numbers of
|
||||||
the components. If the finished product is also tracked, its serial/lot number can
|
the components. If the finished product is also tracked, its serial/lot number can
|
||||||
be registered here too.
|
be registered here too.
|
||||||
|
|
||||||
.. image:: subcontracting/sbc_3.png
|
.. image:: subcontracting/sbc_3.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt:
|
:alt:
|
||||||
|
|
||||||
For audit purposes, it is possible to check the lot numbers recorded on
|
For audit purposes, it is possible to check the lot numbers recorded on
|
||||||
a receipt by using the icon on the right of the finished products:
|
a receipt by using the icon on the right of the finished products:
|
||||||
|
|
||||||
.. image:: subcontracting/sbc_4.png
|
.. image:: subcontracting/sbc_4.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt:
|
:alt:
|
||||||
|
|
||||||
Also note that in case flexible consumption has been selected on the subcontracted
|
Also note that in case flexible consumption has been selected on the subcontracted
|
||||||
BOM for a non-tracked product, the record components option will also appear
|
BOM for a non-tracked product, the record components option will also appear
|
||||||
optionally on each move line, if you want to register more or less component consumption
|
optionally on each move line, if you want to register more or less component consumption
|
||||||
at your subcontracting location, when receiving your final product.
|
at your subcontracting location, when receiving your final product.
|
||||||
|
|
||||||
.. image:: subcontracting/sbc_5.png
|
.. image:: subcontracting/sbc_5.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt:
|
:alt:
|
||||||
|
|
||||||
As you can see, the reception of both of these non-tracked products can either be executed
|
As you can see, the reception of both of these non-tracked products can either be executed
|
||||||
by selecting the 'Set Quantities' Option or via the move line hamburger menus.
|
by selecting the 'Set Quantities' Option or via the move line hamburger menus.
|
||||||
|
|
||||||
Automate Replenishment of Subcontractors
|
Automate Replenishment of Subcontractors
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
There are two ways to automate the supply of raw materials to your
|
There are two ways to automate the supply of raw materials to your
|
||||||
subcontractors when purchasing the final product. The chosen method
|
subcontractors when purchasing the final product. The chosen method
|
||||||
depends on whether or not you want the materials to transit through your
|
depends on whether or not you want the materials to transit through your
|
||||||
warehouse. Both of these methods are described as pull style mechanisms as
|
warehouse. Both of these methods are described as pull style mechanisms as
|
||||||
their trigger is the inital PO to the subcontractor, which creates a need
|
their trigger is the inital PO to the subcontractor, which creates a need
|
||||||
at the subcontracting location, for raw material.
|
at the subcontracting location, for raw material.
|
||||||
|
|
||||||
If you are supplying your subcontractor with raw material from your own warehouse,
|
If you are supplying your subcontractor with raw material from your own warehouse,
|
||||||
you must activate the 'Resupply Subcontractor on Order' route as shown
|
you must activate the 'Resupply Subcontractor on Order' route as shown
|
||||||
below. If this is a component that you buy from a vendor, the buy route
|
below. If this is a component that you buy from a vendor, the buy route
|
||||||
should also be activated.
|
should also be activated.
|
||||||
|
|
||||||
|
|
||||||
.. image:: subcontracting/sbc_6.png
|
.. image:: subcontracting/sbc_6.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt:
|
:alt:
|
||||||
|
|
||||||
|
|
||||||
Now, if you want your vendor to resupply your subcontractor directly, you
|
Now, if you want your vendor to resupply your subcontractor directly, you
|
||||||
must choose the 'Dropship Subcontractor on Order' option instead. In order
|
must choose the 'Dropship Subcontractor on Order' option instead. In order
|
||||||
for this option to be active on the product form, you must first activate the
|
for this option to be active on the product form, you must first activate the
|
||||||
dropship option from :menuselection:`Purchase --> Configuration --> Settings -->
|
dropship option from :menuselection:`Purchase --> Configuration --> Settings -->
|
||||||
Dropshipping`.
|
Dropshipping`.
|
||||||
Once the PO to the subcontractor is validated, this route will create a dropship
|
Once the PO to the subcontractor is validated, this route will create a dropship
|
||||||
RFQ from your vendor to that subcontractor. You then just need to review and validate it.
|
RFQ from your vendor to that subcontractor. You then just need to review and validate it.
|
||||||
|
|
||||||
|
|
||||||
.. image:: subcontracting/sbc_7.png
|
.. image:: subcontracting/sbc_7.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt:
|
:alt:
|
||||||
|
|
||||||
Note that the buy route is not selected in this case, as the dropship route is
|
Note that the buy route is not selected in this case, as the dropship route is
|
||||||
a buy route already.
|
a buy route already.
|
||||||
|
|
||||||
Finally, if you want to track the stock of these raw materials at your subcontracting
|
Finally, if you want to track the stock of these raw materials at your subcontracting
|
||||||
location(s), then you must activate *Multi-locations* in :menuselection:`Inventory -->
|
location(s), then you must activate *Multi-locations* in :menuselection:`Inventory -->
|
||||||
Configuration --> Settings --> Storage locations`.
|
Configuration --> Settings --> Storage locations`.
|
||||||
|
|
||||||
From the location form, you are then able to access the Current Stock.
|
From the location form, you are then able to access the Current Stock.
|
||||||
|
|
||||||
.. image:: subcontracting/sbc_8.png
|
.. image:: subcontracting/sbc_8.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt:
|
:alt:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Manual Replenishment
|
Manual Replenishment
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
You can also choose to replenish your subcontractors manually.
|
You can also choose to replenish your subcontractors manually.
|
||||||
|
|
||||||
If you want to send components to your subcontractor at your own convenience,
|
If you want to send components to your subcontractor at your own convenience,
|
||||||
select the 'Resupply Subcontractor' Operation Type from the *Inventory* Module,
|
select the 'Resupply Subcontractor' Operation Type from the *Inventory* Module,
|
||||||
and create a picking, specifying to which subcontractor you are delivering to.
|
and create a picking, specifying to which subcontractor you are delivering to.
|
||||||
|
|
||||||
.. image:: subcontracting/sbc_9.png
|
.. image:: subcontracting/sbc_9.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt:
|
:alt:
|
||||||
|
|
||||||
Alternatively, you can also manually ask your vendor to resupply your subcontractor
|
Alternatively, you can also manually ask your vendor to resupply your subcontractor
|
||||||
by creating a dropship type PO, with your subcontractor set as the delivery address.
|
by creating a dropship type PO, with your subcontractor set as the delivery address.
|
||||||
|
|
||||||
.. image:: subcontracting/sbc_10.png
|
.. image:: subcontracting/sbc_10.png
|
||||||
|
@ -8,11 +8,11 @@ production based on your demand forecast.
|
|||||||
Configuration
|
Configuration
|
||||||
=============
|
=============
|
||||||
|
|
||||||
Go to the :menuselection:`Manufacturing app --> Configuration --> Settings` and
|
Go to the :menuselection:`Manufacturing app --> Configuration --> Settings` and
|
||||||
activate the Master Production Schedule feature before hitting save.
|
activate the Master Production Schedule feature before hitting save.
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
In the MPS settings, you can define the time range of your MPS (month/week/day)
|
In the MPS settings, you can define the time range of your MPS (month/week/day)
|
||||||
and the number of periods you want to display at all times.
|
and the number of periods you want to display at all times.
|
||||||
|
|
||||||
Now, go to :menuselection:`Planning --> Master Production Schedule` and click on *add a
|
Now, go to :menuselection:`Planning --> Master Production Schedule` and click on *add a
|
||||||
@ -24,7 +24,7 @@ maximum quantities that must or can be replenished in each period.
|
|||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
In the MPS view, you can decide which information you would like to display
|
In the MPS view, you can decide which information you would like to display
|
||||||
by clicking on *rows*. For instance, the *Actual demand* will show you which
|
by clicking on *rows*. For instance, the *Actual demand* will show you which
|
||||||
quantity of products has already been ordered for the period, or *Available to Promise*,
|
quantity of products has already been ordered for the period, or *Available to Promise*,
|
||||||
what can still be sold during that same period (what you plan to replenish - what
|
what can still be sold during that same period (what you plan to replenish - what
|
||||||
is already sold during the period). You can also decide to hide rows if you like.
|
is already sold during the period). You can also decide to hide rows if you like.
|
||||||
@ -35,15 +35,15 @@ is already sold during the period). You can also decide to hide rows if you like
|
|||||||
Estimate your demand and launch replenishment
|
Estimate your demand and launch replenishment
|
||||||
=============================================
|
=============================================
|
||||||
|
|
||||||
The next step is to estimate the demand for the chosen period. This is done
|
The next step is to estimate the demand for the chosen period. This is done
|
||||||
in the *Forecasted Demand* Row. You can easily, at any time, compare the demand
|
in the *Forecasted Demand* Row. You can easily, at any time, compare the demand
|
||||||
forecast with the actual demand (= confirmed sales). The demand forecast for a
|
forecast with the actual demand (= confirmed sales). The demand forecast for a
|
||||||
finished product will impact the indirect demand for its components.
|
finished product will impact the indirect demand for its components.
|
||||||
|
|
||||||
.. image:: use_mps/mps_3.png
|
.. image:: use_mps/mps_3.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Once the forecasted demand has been set, the quantity to replenish for the
|
Once the forecasted demand has been set, the quantity to replenish for the
|
||||||
different periods will automatically be computed. The replenishments you are supposed
|
different periods will automatically be computed. The replenishments you are supposed
|
||||||
to launch based on your lead times (vendor lead time or manufacturing lead time)
|
to launch based on your lead times (vendor lead time or manufacturing lead time)
|
||||||
are then displayed in green. You can now launch the replenishment by clicking
|
are then displayed in green. You can now launch the replenishment by clicking
|
||||||
|
@ -16,7 +16,7 @@ will be saved.
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
This process can take more than 30 minutes. Do not turn off or unplug
|
This process can take more than 30 minutes. Do not turn off or unplug
|
||||||
the IoT Box as it would leave it in an inconsistent state.
|
the IoT Box as it would leave it in an inconsistent state.
|
||||||
|
|
||||||
.. image:: flash_sdcard/flash_sdcard01.png
|
.. image:: flash_sdcard/flash_sdcard01.png
|
||||||
:align: center
|
:align: center
|
||||||
|
@ -26,7 +26,7 @@ Before starting, make sure you have the following:
|
|||||||
The list of supported hardware can be found on the `POS Hardware
|
The list of supported hardware can be found on the `POS Hardware
|
||||||
page <https://www.odoo.com/page/point-of-sale-hardware>`__
|
page <https://www.odoo.com/page/point-of-sale-hardware>`__
|
||||||
|
|
||||||
Set Up
|
Set Up
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
|
|
||||||
To connect hardware to the PoS, the first step is to connect an IoT Box
|
To connect hardware to the PoS, the first step is to connect an IoT Box
|
||||||
|
@ -8,7 +8,7 @@ connected, the screen can be used to display a :abbr:`PoS (Point of Sale)` order
|
|||||||
.. image:: screen/screen-pos-client-display.png
|
.. image:: screen/screen-pos-client-display.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: An example of a PoS (point of sale) order on a screen display.
|
:alt: An example of a PoS (point of sale) order on a screen display.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Access the customer display from any other computer by going to the :abbr:`IoT (Internet of Things)`
|
Access the customer display from any other computer by going to the :abbr:`IoT (Internet of Things)`
|
||||||
Box homepage and clicking on the :guilabel:`POS Display` button.
|
Box homepage and clicking on the :guilabel:`POS Display` button.
|
||||||
@ -47,21 +47,21 @@ screen.
|
|||||||
:align: center
|
:align: center
|
||||||
:alt: The default "POS Client Display" screen that appears when a screen display is successfully
|
:alt: The default "POS Client Display" screen that appears when a screen display is successfully
|
||||||
connected to an IoT Box.
|
connected to an IoT Box.
|
||||||
|
|
||||||
The screen should also appear in the list of :guilabel:`Displays` on the :abbr:`IoT (Internet of
|
The screen should also appear in the list of :guilabel:`Displays` on the :abbr:`IoT (Internet of
|
||||||
Things)` Box homepage.
|
Things)` Box homepage.
|
||||||
|
|
||||||
.. image:: screen/screen-screen-name-example.png
|
.. image:: screen/screen-screen-name-example.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: An example of a screen display name shown on the IoT Box homepage.
|
:alt: An example of a screen display name shown on the IoT Box homepage.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
If no screen is detected, a default display named :guilabel:`Distant Display` will be used instead.
|
If no screen is detected, a default display named :guilabel:`Distant Display` will be used instead.
|
||||||
|
|
||||||
.. image:: screen/screen-no-screen.png
|
.. image:: screen/screen-no-screen.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: The "Distant Display" screen name will be used if no screen is detected.
|
:alt: The "Distant Display" screen name will be used if no screen is detected.
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
=====
|
=====
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ Now, select :guilabel:`IoT Box` in the drop-down menu and choose the screen in t
|
|||||||
.. image:: screen/screen-pos-screen-config.png
|
.. image:: screen/screen-pos-screen-config.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: Connect the screen display to the Point of Sale app.
|
:alt: Connect the screen display to the Point of Sale app.
|
||||||
|
|
||||||
The screen is now available for :abbr:`PoS (Point of Sale)` sessions. A "screen" icon will appear
|
The screen is now available for :abbr:`PoS (Point of Sale)` sessions. A "screen" icon will appear
|
||||||
in the top bar to inform the connection status with the screen.
|
in the top bar to inform the connection status with the screen.
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ Convert leads into opportunities
|
|||||||
|
|
||||||
The system can generate leads instead of opportunities, in order to add
|
The system can generate leads instead of opportunities, in order to add
|
||||||
a qualification step before converting a *Lead* into an
|
a qualification step before converting a *Lead* into an
|
||||||
*Opportunity* and assigning to the right sales people.
|
*Opportunity* and assigning to the right sales people.
|
||||||
|
|
||||||
You can activate this mode from the CRM Settings. It applies to all your sales
|
You can activate this mode from the CRM Settings. It applies to all your sales
|
||||||
channels by default. But you can make it specific for specific channels
|
channels by default. But you can make it specific for specific channels
|
||||||
@ -46,7 +46,7 @@ Merge opportunities
|
|||||||
Odoo will also automatically propose to merge opportunities if they have
|
Odoo will also automatically propose to merge opportunities if they have
|
||||||
the same email address. When merging opportunities, Odoo merges the
|
the same email address. When merging opportunities, Odoo merges the
|
||||||
information into the opportunity which was created first, giving
|
information into the opportunity which was created first, giving
|
||||||
priority to the information present on the first opportunity.
|
priority to the information present on the first opportunity.
|
||||||
|
|
||||||
No information is lost: data from the other opportunity is logged in the
|
No information is lost: data from the other opportunity is logged in the
|
||||||
chatter and the information fields for easy access.
|
chatter and the information fields for easy access.
|
||||||
|
@ -8,7 +8,7 @@ Configuration
|
|||||||
==============
|
==============
|
||||||
|
|
||||||
For this feature to work, go to :menuselection:`CRM --> Configuration --> Settings` and activate the **Lead Mining** feature.
|
For this feature to work, go to :menuselection:`CRM --> Configuration --> Settings` and activate the **Lead Mining** feature.
|
||||||
|
|
||||||
.. image:: lead_mining/LM1.png
|
.. image:: lead_mining/LM1.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
@ -31,16 +31,16 @@ From there, click on the **Generate Leads** button, a window where you will be a
|
|||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
|
|
||||||
When choosing to target Companies and their contacts you can choose the contacts you are getting based on Role or Seniority.
|
When choosing to target Companies and their contacts you can choose the contacts you are getting based on Role or Seniority.
|
||||||
When getting contact information make sure to be aware of the latest EU regulation, get more information about General Data Protection Regulation on
|
When getting contact information make sure to be aware of the latest EU regulation, get more information about General Data Protection Regulation on
|
||||||
`Odoo GDPR <http://odoo.com/gdpr>`__,
|
`Odoo GDPR <http://odoo.com/gdpr>`__,
|
||||||
|
|
||||||
|
|
||||||
You can decide to filter the leads you are getting depending on the size (number of employees) of the companies.
|
You can decide to filter the leads you are getting depending on the size (number of employees) of the companies.
|
||||||
You can pick the countries your leads are coming from. It is possible to pick multiple countries.
|
You can pick the countries your leads are coming from. It is possible to pick multiple countries.
|
||||||
You can pick the industries your leads are coming from. It is possible to pick multiple industries.
|
You can pick the industries your leads are coming from. It is possible to pick multiple industries.
|
||||||
|
|
||||||
You can choose the salesperson and the Salesteam the lead will be assigned to.
|
You can choose the salesperson and the Salesteam the lead will be assigned to.
|
||||||
You can also add tags to track your generated leads.
|
You can also add tags to track your generated leads.
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
@ -50,7 +50,7 @@ Pricing
|
|||||||
==================
|
==================
|
||||||
This is an In-App Purchase feature, each generated lead will cost you one credit.
|
This is an In-App Purchase feature, each generated lead will cost you one credit.
|
||||||
If you choose to get contact information each contact will also cost you one additional credit.
|
If you choose to get contact information each contact will also cost you one additional credit.
|
||||||
Here is the pricing for this `feature <https://iap.odoo.com/iap/in-app-services/167?>`__,
|
Here is the pricing for this `feature <https://iap.odoo.com/iap/in-app-services/167?>`__,
|
||||||
To buy credits you can either go to :menuselection:`CRM --> Configuration --> Settings --> Buy
|
To buy credits you can either go to :menuselection:`CRM --> Configuration --> Settings --> Buy
|
||||||
Credits`; or go to :menuselection:`Settings --> Contacts --> Odoo IAP --> View my Services`.
|
Credits`; or go to :menuselection:`Settings --> Contacts --> Odoo IAP --> View my Services`.
|
||||||
|
|
||||||
@ -70,4 +70,3 @@ Credits`; or go to :menuselection:`Settings --> Contacts --> Odoo IAP --> View m
|
|||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
* :doc:`In-App Purchases (IAP) </applications/general/in_app_purchase>`
|
* :doc:`In-App Purchases (IAP) </applications/general/in_app_purchase>`
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
:nosearch:
|
:nosearch:
|
||||||
|
|
||||||
===================
|
===================
|
||||||
Analyze performance
|
Analyze performance
|
||||||
===================
|
===================
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
|
@ -16,15 +16,15 @@ convenient.
|
|||||||
Set up Pricelists
|
Set up Pricelists
|
||||||
=================
|
=================
|
||||||
|
|
||||||
To set up a *Pricelist*, go to :menuselection:`Point of Sale --> Configuration --> Configuration`
|
To set up a *Pricelist*, go to :menuselection:`Point of Sale --> Configuration --> Configuration`
|
||||||
and enable the *Pricelist* feature. Then, go to :menuselection:`Point of Sale --> Configuration
|
and enable the *Pricelist* feature. Then, go to :menuselection:`Point of Sale --> Configuration
|
||||||
--> Point of Sale` and enable *Pricelist* for the *PoS*.
|
--> Point of Sale` and enable *Pricelist* for the *PoS*.
|
||||||
|
|
||||||
.. image:: pricelists/pricelists_01.png
|
.. image:: pricelists/pricelists_01.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Now, you can create *Pricelists* by clicking on the *Pricelists* link.
|
Now, you can create *Pricelists* by clicking on the *Pricelists* link.
|
||||||
Then, set it up by choosing the product category you want to include in your happy hour
|
Then, set it up by choosing the product category you want to include in your happy hour
|
||||||
and the discount.
|
and the discount.
|
||||||
|
|
||||||
.. image:: pricelists/pricelists_02.png
|
.. image:: pricelists/pricelists_02.png
|
||||||
|
@ -6,7 +6,7 @@ When working with a Point of Sale application, employees want a
|
|||||||
simple, and user-friendly solution. A solution that works online or
|
simple, and user-friendly solution. A solution that works online or
|
||||||
offline and with any device.
|
offline and with any device.
|
||||||
|
|
||||||
A Point of Sale system is a fully integrated application that allows any transaction,
|
A Point of Sale system is a fully integrated application that allows any transaction,
|
||||||
automatically registers product moves in your stock, and gives you
|
automatically registers product moves in your stock, and gives you
|
||||||
real-time statistics and consolidations across all shops.
|
real-time statistics and consolidations across all shops.
|
||||||
|
|
||||||
@ -84,10 +84,10 @@ payment.
|
|||||||
Return and refund products
|
Return and refund products
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
Having a well-thought-out return policy is key to keep customers satisfied and make the process
|
Having a well-thought-out return policy is key to keep customers satisfied and make the process
|
||||||
of accepting returns and refunds easy for you.
|
of accepting returns and refunds easy for you.
|
||||||
|
|
||||||
To do that, from the PoS interface, select the product and quantity (with the +/- button) that the
|
To do that, from the PoS interface, select the product and quantity (with the +/- button) that the
|
||||||
customer wants to return. For multiple products, repeat the process individually.
|
customer wants to return. For multiple products, repeat the process individually.
|
||||||
|
|
||||||
.. image:: getting_started/getting_started_06.png
|
.. image:: getting_started/getting_started_06.png
|
||||||
@ -104,7 +104,7 @@ process the payment and validate it.
|
|||||||
Close the PoS session
|
Close the PoS session
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
To close your session at the end of the day, click on the close button on the upper right corner
|
To close your session at the end of the day, click on the close button on the upper right corner
|
||||||
of your screen and confirm. Now, close the session on the dashboard view.
|
of your screen and confirm. Now, close the session on the dashboard view.
|
||||||
|
|
||||||
.. image:: getting_started/getting_started_08.png
|
.. image:: getting_started/getting_started_08.png
|
||||||
@ -114,8 +114,8 @@ of your screen and confirm. Now, close the session on the dashboard view.
|
|||||||
.. tip::
|
.. tip::
|
||||||
It’s strongly advised to close your PoS session at the end of each day.
|
It’s strongly advised to close your PoS session at the end of each day.
|
||||||
|
|
||||||
Once a session is closed, you can see a summary of all transactions per payment method.
|
Once a session is closed, you can see a summary of all transactions per payment method.
|
||||||
Then, click on a line to see all orders that were paid during your PoS session.
|
Then, click on a line to see all orders that were paid during your PoS session.
|
||||||
If everything is correct, validate the session and post the closing entries.
|
If everything is correct, validate the session and post the closing entries.
|
||||||
|
|
||||||
.. image:: getting_started/getting_started_09.png
|
.. image:: getting_started/getting_started_09.png
|
||||||
|
@ -10,7 +10,7 @@ takes away.
|
|||||||
Set up fiscal positions for PoS
|
Set up fiscal positions for PoS
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
To enable this feature, go to :menuselection:`Point of Sale --> Configuration --> Point of Sale`
|
To enable this feature, go to :menuselection:`Point of Sale --> Configuration --> Point of Sale`
|
||||||
and check *Fiscal Position per Order*. Now, you can choose the fiscal positions
|
and check *Fiscal Position per Order*. Now, you can choose the fiscal positions
|
||||||
you want for your *PoS*.
|
you want for your *PoS*.
|
||||||
|
|
||||||
@ -32,8 +32,8 @@ Now, choose the fiscal position you need for the current order.
|
|||||||
Set up a default fiscal position
|
Set up a default fiscal position
|
||||||
================================
|
================================
|
||||||
|
|
||||||
If you want to use a default fiscal position, meaning that a preexisting value is always
|
If you want to use a default fiscal position, meaning that a preexisting value is always
|
||||||
automatically assigned, go to :menuselection:`Point of Sale --> Configuration
|
automatically assigned, go to :menuselection:`Point of Sale --> Configuration
|
||||||
--> Point of Sale` and enable *Fiscal Position*. Now, choose one to set as the default one.
|
--> Point of Sale` and enable *Fiscal Position*. Now, choose one to set as the default one.
|
||||||
|
|
||||||
.. image:: fiscal_position/fiscal_position_03.png
|
.. image:: fiscal_position/fiscal_position_03.png
|
||||||
|
@ -96,7 +96,7 @@ customer.
|
|||||||
|
|
||||||
.. image:: restaurant/restaurant_09.png
|
.. image:: restaurant/restaurant_09.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: View of the pos interface and transfer button. How to transfer customers from one table
|
:alt: View of the pos interface and transfer button. How to transfer customers from one table
|
||||||
to another
|
to another
|
||||||
|
|
||||||
Register an additional order
|
Register an additional order
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
Cash Rounding
|
Cash Rounding
|
||||||
=============
|
=============
|
||||||
|
|
||||||
**Cash rounding** is required when the lowest physical denomination
|
**Cash rounding** is required when the lowest physical denomination
|
||||||
of currency, or the smallest coin, is higher than the minimum unit
|
of currency, or the smallest coin, is higher than the minimum unit
|
||||||
of account.
|
of account.
|
||||||
|
|
||||||
For example, some countries require their companies to round up or
|
For example, some countries require their companies to round up or
|
||||||
down the total amount of an invoice to the nearest five cents, when
|
down the total amount of an invoice to the nearest five cents, when
|
||||||
the payment is made in cash.
|
the payment is made in cash.
|
||||||
|
|
||||||
Each point of sale in Odoo can be configured to apply cash rounding
|
Each point of sale in Odoo can be configured to apply cash rounding
|
||||||
@ -16,20 +16,20 @@ to the totals of its bills or receipts.
|
|||||||
Configuration
|
Configuration
|
||||||
=============
|
=============
|
||||||
|
|
||||||
Go to :menuselection:`Point of Sale --> Configuration --> Settings`
|
Go to :menuselection:`Point of Sale --> Configuration --> Settings`
|
||||||
and enable *Cash Rounding*, then click on *Save*.
|
and enable *Cash Rounding*, then click on *Save*.
|
||||||
|
|
||||||
.. image:: cash_rounding/cash_rounding01.png
|
.. image:: cash_rounding/cash_rounding01.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Go to :menuselection:`Point of Sale --> Configuration --> Point of
|
Go to :menuselection:`Point of Sale --> Configuration --> Point of
|
||||||
Sale`, open the point of sale you want to configure, and enable the
|
Sale`, open the point of sale you want to configure, and enable the
|
||||||
*Cash Rounding* option.
|
*Cash Rounding* option.
|
||||||
|
|
||||||
To define the **Rounding Method**, open the drop-down list and click
|
To define the **Rounding Method**, open the drop-down list and click
|
||||||
on *Create and Edit...*.
|
on *Create and Edit...*.
|
||||||
|
|
||||||
Define here your *Rounding Precision*, *Profit Account*, and
|
Define here your *Rounding Precision*, *Profit Account*, and
|
||||||
*Loss Account*, then save both the Rounding Method and your Point
|
*Loss Account*, then save both the Rounding Method and your Point
|
||||||
of Sale settings.
|
of Sale settings.
|
||||||
|
|
||||||
@ -43,5 +43,5 @@ rounding according to your settings.
|
|||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Odoo Point of Sale only support the *Add a rounding line*
|
Odoo Point of Sale only support the *Add a rounding line*
|
||||||
rounding strategies and *Half-up* rounding methods.
|
rounding strategies and *Half-up* rounding methods.
|
||||||
|
@ -19,14 +19,14 @@ Choose your pricing strategy from :menuselection:`Sales --> Settings`.
|
|||||||
* *Different prices per customer segment :* you will set several prices per products ;
|
* *Different prices per customer segment :* you will set several prices per products ;
|
||||||
* *Advanced pricing based on formula :* will let you apply discounts, margins and roundings.
|
* *Advanced pricing based on formula :* will let you apply discounts, margins and roundings.
|
||||||
|
|
||||||
Several prices per product
|
Several prices per product
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
To apply several prices per product, select *Different prices per customer
|
To apply several prices per product, select *Different prices per customer
|
||||||
segment* in :menuselection:`Sales --> Settings`. Then open the *Sales* tab
|
segment* in :menuselection:`Sales --> Settings`. Then open the *Sales* tab
|
||||||
in the product detail form. You can settle following strategies.
|
in the product detail form. You can settle following strategies.
|
||||||
|
|
||||||
Prices per customer segment
|
Prices per customer segment
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
Create pricelists for your customer segments: e.g. registered, premium, etc.
|
Create pricelists for your customer segments: e.g. registered, premium, etc.
|
||||||
@ -88,10 +88,10 @@ Each pricelist item can be associated to either all products, to a product inter
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
* Once again the system is smart. If a rule is set for a particular item and another one for its category, Odoo will take the rule of the item.
|
* Once again the system is smart. If a rule is set for a particular item and another one for its category, Odoo will take the rule of the item.
|
||||||
|
|
||||||
* Make sure at least one pricelist item covers all your products.
|
* Make sure at least one pricelist item covers all your products.
|
||||||
|
|
||||||
There are 3 modes of computation: fix price, discount & formula.
|
There are 3 modes of computation: fix price, discount & formula.
|
||||||
|
|
||||||
.. image:: pricing/price_computation.png
|
.. image:: pricing/price_computation.png
|
||||||
@ -122,7 +122,7 @@ Any new customer recorded in Odoo gets a default pricelist, i.e. the first one i
|
|||||||
|
|
||||||
The default pricelist can be replaced when creating a sales order.
|
The default pricelist can be replaced when creating a sales order.
|
||||||
|
|
||||||
.. tip:: You can change the pricelists sequence by drag & drop in list view.
|
.. tip:: You can change the pricelists sequence by drag & drop in list view.
|
||||||
|
|
||||||
Compute and show discount % to customers
|
Compute and show discount % to customers
|
||||||
========================================
|
========================================
|
||||||
|
@ -4,7 +4,7 @@ How to import Products with Categories and Variants
|
|||||||
|
|
||||||
Import templates are provided in the **Import Tool** of the most common data to
|
Import templates are provided in the **Import Tool** of the most common data to
|
||||||
import (contacts, products, bank statements, etc.).
|
import (contacts, products, bank statements, etc.).
|
||||||
You can open them with any spreadsheet software (Microsoft Office,
|
You can open them with any spreadsheet software (Microsoft Office,
|
||||||
OpenOffice, Google Drive, etc.).
|
OpenOffice, Google Drive, etc.).
|
||||||
|
|
||||||
How to customize the file
|
How to customize the file
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
Automatically get product images with Google Images
|
Automatically get product images with Google Images
|
||||||
===================================================
|
===================================================
|
||||||
|
|
||||||
The product images are very useful in Odoo, for example, to quickly find a product or check if you
|
The product images are very useful in Odoo, for example, to quickly find a product or check if you
|
||||||
scanned the right one, but it can be a bit painful to set up especially if you have a lot of
|
scanned the right one, but it can be a bit painful to set up especially if you have a lot of
|
||||||
products. **Google Custom Search** allows finding images automatically for your product, based on
|
products. **Google Custom Search** allows finding images automatically for your product, based on
|
||||||
their barcode, keeping your focus on what matters in your business.
|
their barcode, keeping your focus on what matters in your business.
|
||||||
|
|
||||||
.. _product_images/configuration:
|
.. _product_images/configuration:
|
||||||
@ -14,7 +14,7 @@ Configuration
|
|||||||
|
|
||||||
This functionnality requires configuration both on Google and on Odoo.
|
This functionnality requires configuration both on Google and on Odoo.
|
||||||
|
|
||||||
With a free Google account, you can get up to 100 free images per day. If you need a higher rate,
|
With a free Google account, you can get up to 100 free images per day. If you need a higher rate,
|
||||||
you'll have to upgrade to a billing account.
|
you'll have to upgrade to a billing account.
|
||||||
|
|
||||||
.. _product_images/google-api-dashboard:
|
.. _product_images/google-api-dashboard:
|
||||||
@ -25,7 +25,7 @@ Google API dashboard
|
|||||||
#. Go to the `Google Cloud Platform API & Services <https://console.developers.google.com/>`_ page
|
#. Go to the `Google Cloud Platform API & Services <https://console.developers.google.com/>`_ page
|
||||||
to generate Google Custom Search API credentials. Log in with your Google account.
|
to generate Google Custom Search API credentials. Log in with your Google account.
|
||||||
|
|
||||||
#. Select or create an API project to store the credentials. Give it an explicit name
|
#. Select or create an API project to store the credentials. Give it an explicit name
|
||||||
(e.g. Odoo Images).
|
(e.g. Odoo Images).
|
||||||
|
|
||||||
#. In the credentials section, click on **Create Credentials** and select **API Keys**.
|
#. In the credentials section, click on **Create Credentials** and select **API Keys**.
|
||||||
@ -73,11 +73,11 @@ Google Programmable Search dashboard
|
|||||||
that you created (either by clicking on **Control Panel** on the confirmation page or by
|
that you created (either by clicking on **Control Panel** on the confirmation page or by
|
||||||
clicking on the name of your Search Engine on the Home page).
|
clicking on the name of your Search Engine on the Home page).
|
||||||
|
|
||||||
#. In the **basics** tab, make sure to enable **Image search**, **SafeSearch** and
|
#. In the **basics** tab, make sure to enable **Image search**, **SafeSearch** and
|
||||||
**Search the entire web**.
|
**Search the entire web**.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Once **Search the entire web** is enabled, you can safely delete the site that you put at the
|
Once **Search the entire web** is enabled, you can safely delete the site that you put at the
|
||||||
previous step.
|
previous step.
|
||||||
|
|
||||||
#. Save your **Search Engine Id**. You’ll need it for the next step in Odoo!
|
#. Save your **Search Engine Id**. You’ll need it for the next step in Odoo!
|
||||||
@ -101,7 +101,7 @@ Automatically get your product images in Odoo
|
|||||||
The action to automatically get your product images in Odoo appears in any Products or Product
|
The action to automatically get your product images in Odoo appears in any Products or Product
|
||||||
Variants list view. Here is a step-by-step guide from the Inventory app.
|
Variants list view. Here is a step-by-step guide from the Inventory app.
|
||||||
|
|
||||||
#. Go to the Products menu (:menuselection:`Products --> Products` or :menuselection:`Products -->
|
#. Go to the Products menu (:menuselection:`Products --> Products` or :menuselection:`Products -->
|
||||||
Product Variants`) from any application that uses products like Inventory or Sales.
|
Product Variants`) from any application that uses products like Inventory or Sales.
|
||||||
|
|
||||||
#. On the list view, select the products that needs an image.
|
#. On the list view, select the products that needs an image.
|
||||||
@ -114,7 +114,7 @@ Variants list view. Here is a step-by-step guide from the Inventory app.
|
|||||||
- If you select a product that has one or more variants from the Products view, each variant
|
- If you select a product that has one or more variants from the Products view, each variant
|
||||||
matching the previous criteria will be processed.
|
matching the previous criteria will be processed.
|
||||||
|
|
||||||
#. In the action menu, select **Get Pictures from Google Images** and validate by clicking on
|
#. In the action menu, select **Get Pictures from Google Images** and validate by clicking on
|
||||||
**Get picture**.
|
**Get picture**.
|
||||||
|
|
||||||
#. You should see your images appearing incrementally.
|
#. You should see your images appearing incrementally.
|
||||||
@ -124,7 +124,7 @@ Variants list view. Here is a step-by-step guide from the Inventory app.
|
|||||||
be fetched as a background job.
|
be fetched as a background job.
|
||||||
- The background job process about 100 images in a minute. If you reach the quota authorized
|
- The background job process about 100 images in a minute. If you reach the quota authorized
|
||||||
by Google (either with a free or a paid plan), the background job will put itself on hold
|
by Google (either with a free or a paid plan), the background job will put itself on hold
|
||||||
for 24 hours and continue where it stopped the day before.
|
for 24 hours and continue where it stopped the day before.
|
||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
- `Create, modify, or close your Google Cloud Billing account
|
- `Create, modify, or close your Google Cloud Billing account
|
||||||
|
@ -22,7 +22,7 @@ Go to :menuselection:`Accounting --> Configuration --> Settings` and activate
|
|||||||
:align: center
|
:align: center
|
||||||
:class: img-thumbnail
|
:class: img-thumbnail
|
||||||
:alt: How to enable Default Terms & Conditions on Odoo Sales?
|
:alt: How to enable Default Terms & Conditions on Odoo Sales?
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Please note that this feature is activated via the settings of the **Invoicing App** and **not**
|
Please note that this feature is activated via the settings of the **Invoicing App** and **not**
|
||||||
via the settings of the **Sales App**. Moreover, you don't need to install the invoicing
|
via the settings of the **Sales App**. Moreover, you don't need to install the invoicing
|
||||||
@ -55,7 +55,7 @@ templates. This is interesting if you have different terms and conditions within
|
|||||||
.. important::
|
.. important::
|
||||||
Be sure to check out our documentation about quotation templates: :doc:`quote_template`,
|
Be sure to check out our documentation about quotation templates: :doc:`quote_template`,
|
||||||
to master each step of this amazing feature.
|
to master each step of this amazing feature.
|
||||||
|
|
||||||
General Terms & Conditions
|
General Terms & Conditions
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ Run a modern open-source online store with Odoo eCommerce. Learn how to sell onl
|
|||||||
products and increase your average cart sizes.
|
products and increase your average cart sizes.
|
||||||
|
|
||||||
.. important::
|
.. important::
|
||||||
Odoo offers a :ref:`free custom domain name <domain-name/odoo-register>` to all Odoo Online
|
Odoo offers a :ref:`free custom domain name <domain-name/odoo-register>` to all Odoo Online
|
||||||
databases for one year. Visitors can then access your website with an address such as
|
databases for one year. Visitors can then access your website with an address such as
|
||||||
``www.example.com`` rather than the default ``example.odoo.com``.
|
``www.example.com`` rather than the default ``example.odoo.com``.
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
==================================
|
==================================
|
||||||
How to customize my catalog page
|
How to customize my catalog page
|
||||||
==================================
|
==================================
|
||||||
|
|
||||||
Product Catalog
|
Product Catalog
|
||||||
|
@ -15,5 +15,5 @@ If you like to show your products under several angles, you can turn the image i
|
|||||||
.. image:: multi_images/multi_images02.png
|
.. image:: multi_images/multi_images02.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Such extra image are common to all the product variants (if any).
|
Such extra image are common to all the product variants (if any).
|
||||||
|
@ -46,7 +46,7 @@ You can easily moderate by using the chatter, either in the product detail form
|
|||||||
or on the web page.
|
or on the web page.
|
||||||
|
|
||||||
To unpublish the post, open the product web page and click the *Published* button
|
To unpublish the post, open the product web page and click the *Published* button
|
||||||
to turn it red (*Unpublished*).
|
to turn it red (*Unpublished*).
|
||||||
|
|
||||||
.. image:: reviews/comment_unpublish.png
|
.. image:: reviews/comment_unpublish.png
|
||||||
:align: center
|
:align: center
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
How customers can access their customer account
|
How customers can access their customer account
|
||||||
=================================================
|
=================================================
|
||||||
|
|
||||||
It has never been so easy for your customers to access their
|
It has never been so easy for your customers to access their
|
||||||
customer account. Forget endless signup forms,
|
customer account. Forget endless signup forms,
|
||||||
Odoo makes it as easy as ABC.
|
Odoo makes it as easy as ABC.
|
||||||
They are suggested to sign up (name, email, password) when the order
|
They are suggested to sign up (name, email, password) when the order
|
||||||
is placed, and not before.
|
is placed, and not before.
|
||||||
Indeed, nothing is more annoying than going through a signup process
|
Indeed, nothing is more annoying than going through a signup process
|
||||||
before buying something.
|
before buying something.
|
||||||
|
@ -11,7 +11,7 @@ Discover the best **Open-Source Website Builder** and learn how to build beautif
|
|||||||
convert visitors into leads or revenues.
|
convert visitors into leads or revenues.
|
||||||
|
|
||||||
.. important::
|
.. important::
|
||||||
Odoo offers a :ref:`free custom domain name <domain-name/odoo-register>` to all Odoo Online
|
Odoo offers a :ref:`free custom domain name <domain-name/odoo-register>` to all Odoo Online
|
||||||
databases for one year. Visitors can then access your website with an address such as
|
databases for one year. Visitors can then access your website with an address such as
|
||||||
``www.example.com`` rather than the default ``example.odoo.com``.
|
``www.example.com`` rather than the default ``example.odoo.com``.
|
||||||
|
|
||||||
|
@ -4,10 +4,10 @@ How to track your website's traffic in Google Analytics
|
|||||||
|
|
||||||
To follow your website's traffic with Google Analytics:
|
To follow your website's traffic with Google Analytics:
|
||||||
|
|
||||||
- `Create a Google Analytics account <https://www.google.com/analytics/>`__ if
|
- `Create a Google Analytics account <https://www.google.com/analytics/>`__ if
|
||||||
you don't have any.
|
you don't have any.
|
||||||
|
|
||||||
- Go through the creation form and accept the conditions to get the tracking ID.
|
- Go through the creation form and accept the conditions to get the tracking ID.
|
||||||
|
|
||||||
.. image:: google_analytics/google_analytics_account.png
|
.. image:: google_analytics/google_analytics_account.png
|
||||||
:align: center
|
:align: center
|
||||||
|
@ -20,14 +20,14 @@ How to track your website traffic from your Odoo Dashboard
|
|||||||
dashboard on external website until the official end of support `around mid
|
dashboard on external website until the official end of support `around mid
|
||||||
2023 <https://developers.googleblog.com/2022/03/gis-jsweb-authz-migration.html>`_.
|
2023 <https://developers.googleblog.com/2022/03/gis-jsweb-authz-migration.html>`_.
|
||||||
|
|
||||||
You can follow your traffic statistics straight from your Odoo Website
|
You can follow your traffic statistics straight from your Odoo Website
|
||||||
Dashboard thanks to Google Analytics.
|
Dashboard thanks to Google Analytics.
|
||||||
|
|
||||||
- A preliminary step is creating a Google Analytics account and entering the
|
- A preliminary step is creating a Google Analytics account and entering the
|
||||||
tracking ID in your Website's settings (see :doc:`google_analytics`).
|
tracking ID in your Website's settings (see :doc:`google_analytics`).
|
||||||
|
|
||||||
- Go to `Google APIs platform <https://console.developers.google.com>`__
|
- Go to `Google APIs platform <https://console.developers.google.com>`__
|
||||||
to generate Analytics API credentials. Log in with your Google account.
|
to generate Analytics API credentials. Log in with your Google account.
|
||||||
|
|
||||||
- Select Analytics API.
|
- Select Analytics API.
|
||||||
|
|
||||||
@ -50,25 +50,25 @@ Dashboard thanks to Google Analytics.
|
|||||||
.. image:: google_analytics_dashboard/google_analytics_create_credentials.png
|
.. image:: google_analytics_dashboard/google_analytics_create_credentials.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
- Select *Web browser (Javascript)*
|
- Select *Web browser (Javascript)*
|
||||||
as calling source and *User data* as kind of data.
|
as calling source and *User data* as kind of data.
|
||||||
|
|
||||||
.. image:: google_analytics_dashboard/google_analytics_get_credentials.png
|
.. image:: google_analytics_dashboard/google_analytics_get_credentials.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
- Then you can create a Client ID.
|
- Then you can create a Client ID.
|
||||||
Enter the name of the application (e.g. Odoo) and the allowed pages on
|
Enter the name of the application (e.g. Odoo) and the allowed pages on
|
||||||
which you will be redirected. The *Authorized JavaScript origin* is your
|
which you will be redirected. The *Authorized JavaScript origin* is your
|
||||||
Odoo's instance URL. The *Authorized redirect URI* is your Odoo's instance
|
Odoo's instance URL. The *Authorized redirect URI* is your Odoo's instance
|
||||||
URL followed by '/google_account/authentication'.
|
URL followed by '/google_account/authentication'.
|
||||||
|
|
||||||
.. image:: google_analytics_dashboard/google_analytics_authorization.png
|
.. image:: google_analytics_dashboard/google_analytics_authorization.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
|
|
||||||
- Go through the Consent Screen step by entering a product name
|
- Go through the Consent Screen step by entering a product name
|
||||||
(e.g. Google Analytics in Odoo). Feel free to check the customizations options
|
(e.g. Google Analytics in Odoo). Feel free to check the customizations options
|
||||||
but this is not mandatory. The Consent Screen will only show up when you enter
|
but this is not mandatory. The Consent Screen will only show up when you enter
|
||||||
the Client ID in Odoo for the first time.
|
the Client ID in Odoo for the first time.
|
||||||
|
|
||||||
- Finally you are provided with your Client ID. Copy and paste it in Odoo.
|
- Finally you are provided with your Client ID. Copy and paste it in Odoo.
|
||||||
|
@ -29,7 +29,7 @@ Title, Description
|
|||||||
Every web page should define the ``<title>`` and ``<description>`` meta data.
|
Every web page should define the ``<title>`` and ``<description>`` meta data.
|
||||||
These information elements are used by search engines to promote your website.
|
These information elements are used by search engines to promote your website.
|
||||||
They are automatically generated based on page title & content, but you can
|
They are automatically generated based on page title & content, but you can
|
||||||
finetune them. Make sure they fit the content of the page, otherwise you will
|
finetune them. Make sure they fit the content of the page, otherwise you will
|
||||||
be downgraded by search engines.
|
be downgraded by search engines.
|
||||||
|
|
||||||
.. image:: seo/seo01.png
|
.. image:: seo/seo01.png
|
||||||
@ -40,15 +40,15 @@ Keywords
|
|||||||
In order to write quality content and boost your traffic, Odoo provides
|
In order to write quality content and boost your traffic, Odoo provides
|
||||||
a ``<keyword>`` finder. Those keywords are the searches you want to head
|
a ``<keyword>`` finder. Those keywords are the searches you want to head
|
||||||
towards your website. For each keyword, you see how it is used in the content
|
towards your website. For each keyword, you see how it is used in the content
|
||||||
(H1, H2, page title, page description, page content) and what are the related
|
(H1, H2, page title, page description, page content) and what are the related
|
||||||
searches in Google. The more keywords are used the better.
|
searches in Google. The more keywords are used the better.
|
||||||
|
|
||||||
.. image:: seo/seo02.png
|
.. image:: seo/seo02.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
If your website is in multiple languages, you can use the Promote
|
If your website is in multiple languages, you can use the Promote
|
||||||
tool for every language of a single page and set specific title,
|
tool for every language of a single page and set specific title,
|
||||||
description and search tags.
|
description and search tags.
|
||||||
|
|
||||||
Content is King
|
Content is King
|
||||||
@ -80,8 +80,8 @@ modules to help you build your website content:
|
|||||||
Use Social Networks
|
Use Social Networks
|
||||||
===================
|
===================
|
||||||
|
|
||||||
Social media is built for mass sharing. If lots of people share your content
|
Social media is built for mass sharing. If lots of people share your content
|
||||||
on social media, then it's likely more people will link to it,
|
on social media, then it's likely more people will link to it,
|
||||||
and links are a huge factor for SEO ranking.
|
and links are a huge factor for SEO ranking.
|
||||||
|
|
||||||
Odoo embeds several tools to share content through social media:
|
Odoo embeds several tools to share content through social media:
|
||||||
@ -94,7 +94,7 @@ All you have to do is to refer all your accounts in your company settings.
|
|||||||
|
|
||||||
.. image:: seo/seo03.png
|
.. image:: seo/seo03.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Social Share
|
Social Share
|
||||||
------------
|
------------
|
||||||
|
|
||||||
@ -106,17 +106,17 @@ wall.
|
|||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Most social media use a picture of the picture to decorate the share post.
|
Most social media use a picture of the picture to decorate the share post.
|
||||||
Odoo uses the website logo by default but you can choose any other image
|
Odoo uses the website logo by default but you can choose any other image
|
||||||
of your page in the Promote tool.
|
of your page in the Promote tool.
|
||||||
|
|
||||||
.. image:: seo/seo05.png
|
.. image:: seo/seo05.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Facebook Page
|
Facebook Page
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
Drop the building block *Facebook Page* to display a widget of your Facebook
|
Drop the building block *Facebook Page* to display a widget of your Facebook
|
||||||
business page and encourage visitors to follow it.
|
business page and encourage visitors to follow it.
|
||||||
You can display the timeline, the next events and the messages.
|
You can display the timeline, the next events and the messages.
|
||||||
|
|
||||||
Twitter Scroller
|
Twitter Scroller
|
||||||
@ -179,7 +179,7 @@ an example, the following URLs all do a 301 redirect to the above URL:
|
|||||||
product name)
|
product name)
|
||||||
|
|
||||||
Some URLs have several dynamic parts, like this one (a blog category and
|
Some URLs have several dynamic parts, like this one (a blog category and
|
||||||
a post):
|
a post):
|
||||||
|
|
||||||
- https://www.odoo.com/blog/company-news-5/post/the-odoo-story-56
|
- https://www.odoo.com/blog/company-news-5/post/the-odoo-story-56
|
||||||
|
|
||||||
@ -191,7 +191,7 @@ In the above example:
|
|||||||
|
|
||||||
When an Odoo page has a pager, the page number is set directly in the
|
When an Odoo page has a pager, the page number is set directly in the
|
||||||
URL (does not have a GET argument). This allows every page to be indexed
|
URL (does not have a GET argument). This allows every page to be indexed
|
||||||
by search engines. Example:
|
by search engines. Example:
|
||||||
|
|
||||||
- https://www.odoo.com/blog/page/3
|
- https://www.odoo.com/blog/page/3
|
||||||
|
|
||||||
@ -222,7 +222,7 @@ maintaining the SEO link juice.
|
|||||||
HTTPS
|
HTTPS
|
||||||
-----
|
-----
|
||||||
|
|
||||||
Search engines boost ranking of secure HTTPS/SSL websites.
|
Search engines boost ranking of secure HTTPS/SSL websites.
|
||||||
So, by default all Odoo Online instances are fully
|
So, by default all Odoo Online instances are fully
|
||||||
based on HTTPS. If the visitor accesses your website through a non HTTPS
|
based on HTTPS. If the visitor accesses your website through a non HTTPS
|
||||||
url, it gets a 301 redirect to its HTTPS equivalent.
|
url, it gets a 301 redirect to its HTTPS equivalent.
|
||||||
@ -230,7 +230,7 @@ url, it gets a 301 redirect to its HTTPS equivalent.
|
|||||||
Links: Nofollow Strategy
|
Links: Nofollow Strategy
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
The more a page is linked from external and quality websites,
|
The more a page is linked from external and quality websites,
|
||||||
the better it is for your SEO.
|
the better it is for your SEO.
|
||||||
|
|
||||||
Here are Odoo strategies to manage links:
|
Here are Odoo strategies to manage links:
|
||||||
@ -296,7 +296,7 @@ yourwebsite.com/shop), they may automatically be redirected to a
|
|||||||
translated version according to their browser language preference (e.g.
|
translated version according to their browser language preference (e.g.
|
||||||
yourwebsite.com/fr\_FR/shop).
|
yourwebsite.com/fr\_FR/shop).
|
||||||
|
|
||||||
Next time, it keeps a cookie of the current language to
|
Next time, it keeps a cookie of the current language to
|
||||||
avoid any redirection.
|
avoid any redirection.
|
||||||
|
|
||||||
To force a visitor to stick to the default language, you can use the
|
To force a visitor to stick to the default language, you can use the
|
||||||
@ -409,18 +409,18 @@ CSS is shared amongst all pages, when the visitor clicks on another
|
|||||||
page, the browser does not even have to load a new CSS file!
|
page, the browser does not even have to load a new CSS file!
|
||||||
|
|
||||||
================================= =============================================
|
================================= =============================================
|
||||||
**Both files in the <head>** **What the visitor gets (only one file)**
|
**Both files in the <head>** **What the visitor gets (only one file)**
|
||||||
================================= =============================================
|
================================= =============================================
|
||||||
/\* From bootstrap.css \*/ .text-muted {
|
/\* From bootstrap.css \*/ .text-muted {
|
||||||
.text-muted { color: #666;
|
.text-muted { color: #666;
|
||||||
color: #777; background: yellow
|
color: #777; background: yellow
|
||||||
background: yellow; }
|
background: yellow; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/\* From my-theme.css \*/
|
/\* From my-theme.css \*/
|
||||||
.text-muted {
|
.text-muted {
|
||||||
color: #666;
|
color: #666;
|
||||||
}
|
}
|
||||||
================================= =============================================
|
================================= =============================================
|
||||||
|
|
||||||
The CSS sent by Odoo includes all CSS / Less / Sass of all pages /
|
The CSS sent by Odoo includes all CSS / Less / Sass of all pages /
|
||||||
@ -432,28 +432,28 @@ into a second bundle that is loaded only when the page using it is
|
|||||||
requested. An example of this is the backend that is only loaded when
|
requested. An example of this is the backend that is only loaded when
|
||||||
the visitor logs in and accesses the backend (/web).
|
the visitor logs in and accesses the backend (/web).
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
If the CSS file is very big, Odoo will split it into two smaller
|
If the CSS file is very big, Odoo will split it into two smaller
|
||||||
files to avoid the 4095 selectors limit per sheet of Internet Explorer.
|
files to avoid the 4095 selectors limit per sheet of Internet Explorer.
|
||||||
But most themes fit below this limit.
|
But most themes fit below this limit.
|
||||||
|
|
||||||
**Minified:** After being pre-processed and concatenated, the resulting
|
**Minified:** After being pre-processed and concatenated, the resulting
|
||||||
CSS is minified to reduce its size.
|
CSS is minified to reduce its size.
|
||||||
|
|
||||||
============================ ==============================
|
============================ ==============================
|
||||||
**Before minification** **After minification**
|
**Before minification** **After minification**
|
||||||
============================ ==============================
|
============================ ==============================
|
||||||
/\* some comments \*/ .text-muted {color: #666}
|
/\* some comments \*/ .text-muted {color: #666}
|
||||||
.text-muted {
|
.text-muted {
|
||||||
color: #666;
|
color: #666;
|
||||||
}
|
}
|
||||||
============================ ==============================
|
============================ ==============================
|
||||||
|
|
||||||
The final result is then compressed, before being delivered to the
|
The final result is then compressed, before being delivered to the
|
||||||
browser.
|
browser.
|
||||||
|
|
||||||
Then, a cached version is stored server-side (so we do not have
|
Then, a cached version is stored server-side (so we do not have
|
||||||
to pre-process, concatenate, minify at every request) and browser-side
|
to pre-process, concatenate, minify at every request) and browser-side
|
||||||
(so the same visitor will load the CSS only once for all pages they
|
(so the same visitor will load the CSS only once for all pages they
|
||||||
visit).
|
visit).
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ Publish a page in all websites
|
|||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
A new static page is created and only made available in the current
|
A new static page is created and only made available in the current
|
||||||
website. You can duplicate it to other websites from
|
website. You can duplicate it to other websites from
|
||||||
:menuselection:`Website --> Configuration --> Pages`. To do so, leave the *Website* field empty.
|
:menuselection:`Website --> Configuration --> Pages`. To do so, leave the *Website* field empty.
|
||||||
|
|
||||||
If you want to duplicate it in just one other website, duplicate the
|
If you want to duplicate it in just one other website, duplicate the
|
||||||
@ -198,7 +198,7 @@ When you edit the page again, the change only affects the current
|
|||||||
website. A new page is duplicated and tied up to the website.
|
website. A new page is duplicated and tied up to the website.
|
||||||
The original page still being linked to all websites.
|
The original page still being linked to all websites.
|
||||||
|
|
||||||
.. tip::
|
.. tip::
|
||||||
By grouping pages by URL in the page manager, you quickly find
|
By grouping pages by URL in the page manager, you quickly find
|
||||||
the original page behind each edited page.
|
the original page behind each edited page.
|
||||||
|
|
||||||
|
@ -950,7 +950,7 @@ The convention is to organize the code according to the following structure:
|
|||||||
- *static/src/js*
|
- *static/src/js*
|
||||||
|
|
||||||
- *static/src/js/tours*: end user tour files (tutorials, not tests)
|
- *static/src/js/tours*: end user tour files (tutorials, not tests)
|
||||||
|
|
||||||
- *static/src/scss*: scss files
|
- *static/src/scss*: scss files
|
||||||
- *static/src/xml*: all qweb templates that will be rendered in JS
|
- *static/src/xml*: all qweb templates that will be rendered in JS
|
||||||
|
|
||||||
|
@ -239,7 +239,7 @@ An example of a view inheritance extension can be found
|
|||||||
Add the ``property_ids`` field to the ``base.view_users_form`` in a new notebook page.
|
Add the ``property_ids`` field to the ``base.view_users_form`` in a new notebook page.
|
||||||
|
|
||||||
Tip: an example an inheritance of the users' view can be found
|
Tip: an example an inheritance of the users' view can be found
|
||||||
`here <https://github.com/odoo/odoo/blob/691d1f087040f1ec7066e485d19ce3662dfc6501/addons/gamification/views/res_users_views.xml#L5-L14>`__.
|
`here <https://github.com/odoo/odoo/blob/691d1f087040f1ec7066e485d19ce3662dfc6501/addons/gamification/views/res_users_views.xml#L5-L14>`__.
|
||||||
|
|
||||||
Inheritance is extensively used in Odoo due to its modular concept. Do not hesitate to read
|
Inheritance is extensively used in Odoo due to its modular concept. Do not hesitate to read
|
||||||
the corresponding documentation for more info!
|
the corresponding documentation for more info!
|
||||||
|
@ -8,8 +8,8 @@ Every day we hear about data leaks and attacks in the newspapers.
|
|||||||
We expect you to be aware and careful about how to avoid security breaches in your future
|
We expect you to be aware and careful about how to avoid security breaches in your future
|
||||||
developments.
|
developments.
|
||||||
|
|
||||||
You already defined new models in your training. Did you check the access rights and define record
|
You already defined new models in your training. Did you check the access rights and define record
|
||||||
rules on it ? Are you sure your module is not an open door to SQL injections ? Did you use getattr
|
rules on it ? Are you sure your module is not an open door to SQL injections ? Did you use getattr
|
||||||
or t-raw in your code?
|
or t-raw in your code?
|
||||||
|
|
||||||
- No or wrong access rules on models.
|
- No or wrong access rules on models.
|
||||||
|
@ -277,7 +277,7 @@ the template, such as data from additional models:
|
|||||||
|
|
||||||
Custom fonts
|
Custom fonts
|
||||||
============
|
============
|
||||||
If you want to use custom fonts you will need to add your custom font and the related less/CSS to the ``web.reports_assets_common`` assets bundle.
|
If you want to use custom fonts you will need to add your custom font and the related less/CSS to the ``web.reports_assets_common`` assets bundle.
|
||||||
Adding your custom font(s) to ``web.assets_common`` or ``web.assets_backend`` will not make your font available in QWeb reports.
|
Adding your custom font(s) to ``web.assets_common`` or ``web.assets_backend`` will not make your font available in QWeb reports.
|
||||||
|
|
||||||
Example::
|
Example::
|
||||||
|
@ -407,7 +407,7 @@ Calendar
|
|||||||
--------
|
--------
|
||||||
|
|
||||||
Calendar views display records as events in a daily, weekly, monthly or yearly
|
Calendar views display records as events in a daily, weekly, monthly or yearly
|
||||||
calendar.
|
calendar.
|
||||||
|
|
||||||
.. note:: By default the calendar view will be centered around the current date
|
.. note:: By default the calendar view will be centered around the current date
|
||||||
(today). You can pass a specific initial date to the context of the action in
|
(today). You can pass a specific initial date to the context of the action in
|
||||||
|
@ -53,10 +53,10 @@ Bundles
|
|||||||
=======
|
=======
|
||||||
|
|
||||||
Odoo assets are grouped by *bundles*. Each bundle (a *list of file paths*
|
Odoo assets are grouped by *bundles*. Each bundle (a *list of file paths*
|
||||||
of specific types: `xml`, `js`, `css` or `scss`) is listed in the
|
of specific types: `xml`, `js`, `css` or `scss`) is listed in the
|
||||||
:ref:`module manifest <reference/module/manifest>`. Files can be declared using
|
:ref:`module manifest <reference/module/manifest>`. Files can be declared using
|
||||||
`glob <https://en.wikipedia.org/wiki/Glob_(programming)>`_ syntax, meaning that
|
`glob <https://en.wikipedia.org/wiki/Glob_(programming)>`_ syntax, meaning that
|
||||||
you can declare several asset files using a single line.
|
you can declare several asset files using a single line.
|
||||||
|
|
||||||
The bundles are defined in each module's :file:`__manifest__.py`,
|
The bundles are defined in each module's :file:`__manifest__.py`,
|
||||||
with a dedicated `assets` key which contains a dictionary. The dictionary maps
|
with a dedicated `assets` key which contains a dictionary. The dictionary maps
|
||||||
|
@ -44,11 +44,11 @@ on the web client.
|
|||||||
Code structure
|
Code structure
|
||||||
==============
|
==============
|
||||||
|
|
||||||
The ``web/static/src`` folder contains all the ``web/`` javascript (and css and
|
The ``web/static/src`` folder contains all the ``web/`` javascript (and css and
|
||||||
templates) codebase. Here is a list of the most important folders:
|
templates) codebase. Here is a list of the most important folders:
|
||||||
|
|
||||||
- ``core/`` most of the low level features
|
- ``core/`` most of the low level features
|
||||||
- ``fields/`` all field components
|
- ``fields/`` all field components
|
||||||
- ``views/`` all javascript views components (``form``, ``list``, ...)
|
- ``views/`` all javascript views components (``form``, ``list``, ...)
|
||||||
- ``search/`` control panel, search bar, search panel, ...
|
- ``search/`` control panel, search bar, search panel, ...
|
||||||
- ``webclient/`` the web client specific code: navbar, user menu, action service, ...
|
- ``webclient/`` the web client specific code: navbar, user menu, action service, ...
|
||||||
@ -57,7 +57,7 @@ The ``web/static/src`` is the root folder. Everything inside can simply be
|
|||||||
imported by using the ``@web`` prefix. For example, here is how one can import
|
imported by using the ``@web`` prefix. For example, here is how one can import
|
||||||
the ``memoize`` function located in ``web/static/src/core/utils/functions``:
|
the ``memoize`` function located in ``web/static/src/core/utils/functions``:
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
import { memoize } from "@web/core/utils/functions";
|
import { memoize } from "@web/core/utils/functions";
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ all active actions (represented in the breadcrumbs), and coordinates each
|
|||||||
change.
|
change.
|
||||||
|
|
||||||
Another interesting thing to note is the ``MainComponentsContainer``: it is
|
Another interesting thing to note is the ``MainComponentsContainer``: it is
|
||||||
simply a component that displays all components registered in the
|
simply a component that displays all components registered in the
|
||||||
``main_components`` registry. This is how other parts of the system can extend
|
``main_components`` registry. This is how other parts of the system can extend
|
||||||
the web client.
|
the web client.
|
||||||
|
|
||||||
@ -197,14 +197,14 @@ Components and Hooks
|
|||||||
|
|
||||||
:ref:`Components <frontend/components>` and :ref:`hooks <frontend/hooks>` are ideas coming from the
|
:ref:`Components <frontend/components>` and :ref:`hooks <frontend/hooks>` are ideas coming from the
|
||||||
`Owl component system <https://github.com/odoo/owl/blob/master/doc/readme.md>`_.
|
`Owl component system <https://github.com/odoo/owl/blob/master/doc/readme.md>`_.
|
||||||
Odoo components are simply owl components that are part of the web client.
|
Odoo components are simply owl components that are part of the web client.
|
||||||
|
|
||||||
`Hooks <https://github.com/odoo/owl/blob/master/doc/reference/hooks.md>`_ are a
|
`Hooks <https://github.com/odoo/owl/blob/master/doc/reference/hooks.md>`_ are a
|
||||||
way to factorize code, even if it depends on lifecycle. This is a
|
way to factorize code, even if it depends on lifecycle. This is a
|
||||||
composable/functional way to inject a feature in a component. They can be seen
|
composable/functional way to inject a feature in a component. They can be seen
|
||||||
as a kind of mixin.
|
as a kind of mixin.
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
function useCurrentTime() {
|
function useCurrentTime() {
|
||||||
const state = useState({ now: new Date() });
|
const state = useState({ now: new Date() });
|
||||||
@ -222,7 +222,7 @@ An important concept in the Odoo javascript is the *context*: it provides a way
|
|||||||
for code to give more context to a function call or a rpc, so other parts of the
|
for code to give more context to a function call or a rpc, so other parts of the
|
||||||
system can properly react to that information. In some way, it is like a bag of
|
system can properly react to that information. In some way, it is like a bag of
|
||||||
information that is propagated everywhere. It is useful in some situations, such
|
information that is propagated everywhere. It is useful in some situations, such
|
||||||
as letting the Odoo server know that a model rpc comes from a specific form view,
|
as letting the Odoo server know that a model rpc comes from a specific form view,
|
||||||
or activating/disabling some features in a component.
|
or activating/disabling some features in a component.
|
||||||
|
|
||||||
There are two different contexts in the Odoo web client: the *user context* and
|
There are two different contexts in the Odoo web client: the *user context* and
|
||||||
@ -258,7 +258,7 @@ It contains the following information:
|
|||||||
:widths: 20 20 60
|
:widths: 20 20 60
|
||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
|
|
||||||
* - Name
|
* - Name
|
||||||
- Type
|
- Type
|
||||||
- Description
|
- Description
|
||||||
* - `allowed_company_ids`
|
* - `allowed_company_ids`
|
||||||
@ -269,7 +269,7 @@ It contains the following information:
|
|||||||
- the user language code (such as "en_us")
|
- the user language code (such as "en_us")
|
||||||
* - `tz`
|
* - `tz`
|
||||||
- `string`
|
- `string`
|
||||||
- the user current timezone (for example "Europe/Brussels")
|
- the user current timezone (for example "Europe/Brussels")
|
||||||
|
|
||||||
In practice, the `orm` service automatically adds the user context to each of
|
In practice, the `orm` service automatically adds the user context to each of
|
||||||
its requests. This is why it is usually not necessary to import it directly in
|
its requests. This is why it is usually not necessary to import it directly in
|
||||||
@ -405,11 +405,11 @@ class:
|
|||||||
domain.contains({ a: -1, b: 2, c: 3 }); // false
|
domain.contains({ a: -1, b: 2, c: 3 }); // false
|
||||||
|
|
||||||
// next expression returns ["|", ("a", "=", 1), ("b", "<=", 3)]
|
// next expression returns ["|", ("a", "=", 1), ("b", "<=", 3)]
|
||||||
Domain.or([[["a", "=", 1]], "[('b', '<=', 3)]"]).toString();
|
Domain.or([[["a", "=", 1]], "[('b', '<=', 3)]"]).toString();
|
||||||
|
|
||||||
Here is the `Domain` class description:
|
Here is the `Domain` class description:
|
||||||
|
|
||||||
.. js:class:: Domain([descr])
|
.. js:class:: Domain([descr])
|
||||||
|
|
||||||
:param descr: a domain description
|
:param descr: a domain description
|
||||||
:type descr: string | any[] | Domain
|
:type descr: string | any[] | Domain
|
||||||
@ -568,7 +568,7 @@ It is mostly interesting for testing purposes: all code using the browser object
|
|||||||
can be tested easily by mocking the relevant functions for the duration of the
|
can be tested easily by mocking the relevant functions for the duration of the
|
||||||
test.
|
test.
|
||||||
|
|
||||||
It contains the following content:
|
It contains the following content:
|
||||||
|
|
||||||
.. list-table::
|
.. list-table::
|
||||||
|
|
||||||
@ -617,7 +617,7 @@ The `debug` mode current value can be read in the :ref:`environment<frontend/fra
|
|||||||
|
|
||||||
To show menus, fields or view elements only in debug mode, you should target
|
To show menus, fields or view elements only in debug mode, you should target
|
||||||
the group `base.group_no_one`:
|
the group `base.group_no_one`:
|
||||||
|
|
||||||
.. code-block:: xml
|
.. code-block:: xml
|
||||||
|
|
||||||
<field name="fname" groups="base.group_no_one"/>
|
<field name="fname" groups="base.group_no_one"/>
|
||||||
|
@ -6,7 +6,7 @@ Hooks
|
|||||||
|
|
||||||
`Owl hooks <https://github.com/odoo/owl/blob/master/doc/reference/hooks.md>`_ are a
|
`Owl hooks <https://github.com/odoo/owl/blob/master/doc/reference/hooks.md>`_ are a
|
||||||
way to factorize code, even if it depends on some component lifecycle. Most hooks
|
way to factorize code, even if it depends on some component lifecycle. Most hooks
|
||||||
provided by Owl are related to the lifecycle of a component, but some of them (such as
|
provided by Owl are related to the lifecycle of a component, but some of them (such as
|
||||||
`useComponent <https://github.com/odoo/owl/blob/master/doc/reference/hooks.md#usecomponent>`_)
|
`useComponent <https://github.com/odoo/owl/blob/master/doc/reference/hooks.md#usecomponent>`_)
|
||||||
provide a way to build specific hooks.
|
provide a way to build specific hooks.
|
||||||
|
|
||||||
|
@ -37,11 +37,11 @@ Plain javascript files can contain arbitrary content. It is advised to use the
|
|||||||
})();
|
})();
|
||||||
|
|
||||||
The advantages of such files is that we avoid leaking local variables to the
|
The advantages of such files is that we avoid leaking local variables to the
|
||||||
global scope.
|
global scope.
|
||||||
|
|
||||||
Clearly, plain javascript files do not offer the benefits of a module system, so
|
Clearly, plain javascript files do not offer the benefits of a module system, so
|
||||||
one needs to be careful about the order in the bundle (since the browser will
|
one needs to be careful about the order in the bundle (since the browser will
|
||||||
execute them precisely in that order).
|
execute them precisely in that order).
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
In Odoo, all external libraries are loaded as plain javascript files.
|
In Odoo, all external libraries are loaded as plain javascript files.
|
||||||
|
@ -9,7 +9,7 @@ Introduction
|
|||||||
============
|
============
|
||||||
|
|
||||||
In Odoo 10.0 we released a mobile app which allows you to access all **Odoo apps**
|
In Odoo 10.0 we released a mobile app which allows you to access all **Odoo apps**
|
||||||
(even your customized modules).
|
(even your customized modules).
|
||||||
|
|
||||||
The application is a combination of **Odoo Web** and **Native Mobile
|
The application is a combination of **Odoo Web** and **Native Mobile
|
||||||
components**. In other words it is a Odoo Web instance loaded inside a native, mobile, WebView container.
|
components**. In other words it is a Odoo Web instance loaded inside a native, mobile, WebView container.
|
||||||
@ -21,7 +21,7 @@ access all available mobile features.
|
|||||||
|
|
||||||
.. warning:: These features work with **Odoo Enterprise 10.0+** only
|
.. warning:: These features work with **Odoo Enterprise 10.0+** only
|
||||||
|
|
||||||
How does it work?
|
How does it work?
|
||||||
=================
|
=================
|
||||||
|
|
||||||
Internal workings of the mobile application:
|
Internal workings of the mobile application:
|
||||||
@ -53,7 +53,7 @@ Just like the Odoo Web Framework, the Mobile API can be used anywhere by getting
|
|||||||
.. image:: mobile/odoo_mobile_api.png
|
.. image:: mobile/odoo_mobile_api.png
|
||||||
|
|
||||||
The mobile RPC object provides a list of methods that are available (this only works with the mobile
|
The mobile RPC object provides a list of methods that are available (this only works with the mobile
|
||||||
app).
|
app).
|
||||||
|
|
||||||
Check if the method is available and then execute it.
|
Check if the method is available and then execute it.
|
||||||
|
|
||||||
@ -136,7 +136,7 @@ area and the notification drawer are system-controlled areas that the user can
|
|||||||
view at any time.
|
view at any time.
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
mobile.showNotification({'title': 'Simple Notification', 'message': 'This is a test for a simple notification'})
|
mobile.showNotification({'title': 'Simple Notification', 'message': 'This is a test for a simple notification'})
|
||||||
|
|
||||||
.. image:: mobile/mobile_notification.png
|
.. image:: mobile/mobile_notification.png
|
||||||
@ -152,7 +152,7 @@ Create contact in device
|
|||||||
Create a new device contact with the given contact details.
|
Create a new device contact with the given contact details.
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
var contact = {
|
var contact = {
|
||||||
'name': 'Michel Fletcher',
|
'name': 'Michel Fletcher',
|
||||||
'mobile': '9999999999',
|
'mobile': '9999999999',
|
||||||
@ -205,7 +205,7 @@ Switching account in device
|
|||||||
Use switchAccount to switch from one account to another on the device.
|
Use switchAccount to switch from one account to another on the device.
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
mobile.methods.switchAccount();
|
mobile.methods.switchAccount();
|
||||||
|
|
||||||
.. image:: mobile/mobile_switch_account.png
|
.. image:: mobile/mobile_switch_account.png
|
||||||
|
@ -7,7 +7,7 @@ Owl Components
|
|||||||
The Odoo Javascript framework uses a custom component framework called Owl. It
|
The Odoo Javascript framework uses a custom component framework called Owl. It
|
||||||
is a declarative component system, loosely inspired by Vue and React. Components
|
is a declarative component system, loosely inspired by Vue and React. Components
|
||||||
are defined using :doc:`QWeb templates <qweb>`, enriched with some Owl
|
are defined using :doc:`QWeb templates <qweb>`, enriched with some Owl
|
||||||
specific directives. The official
|
specific directives. The official
|
||||||
`Owl documentation <https://github.com/odoo/owl/blob/master/doc/readme.md>`_
|
`Owl documentation <https://github.com/odoo/owl/blob/master/doc/readme.md>`_
|
||||||
contains a complete reference and a tutorial.
|
contains a complete reference and a tutorial.
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ page will only provide Odoo specific information. But first, let us see how we
|
|||||||
can make a simple component in Odoo.
|
can make a simple component in Odoo.
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
const { useState } = owl.hooks;
|
const { useState } = owl.hooks;
|
||||||
const { xml } = owl.tags;
|
const { xml } = owl.tags;
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ loading the javascript/css files, and loading the templates into Owl.
|
|||||||
Here is how the component above should be defined:
|
Here is how the component above should be defined:
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
const { useState } = owl.hooks;
|
const { useState } = owl.hooks;
|
||||||
|
|
||||||
class MyComponent extends Component {
|
class MyComponent extends Component {
|
||||||
@ -133,7 +133,7 @@ in Odoo directly uses the constructor method. Instead, components should use the
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Another good practice is to use a consistent convention for template names:
|
Another good practice is to use a consistent convention for template names:
|
||||||
`addon_name.ComponentName`. This prevents name collision between odoo addons.
|
`addon_name.ComponentName`. This prevents name collision between odoo addons.
|
||||||
|
|
||||||
Reference List
|
Reference List
|
||||||
@ -175,7 +175,7 @@ Description
|
|||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
|
|
||||||
This is a component that can perform actions when an element is swiped
|
This is a component that can perform actions when an element is swiped
|
||||||
horizontally. The swiper is wrapping a target element to add actions to it.
|
horizontally. The swiper is wrapping a target element to add actions to it.
|
||||||
The action is executed once the user has released the swiper passed
|
The action is executed once the user has released the swiper passed
|
||||||
half of its width.
|
half of its width.
|
||||||
|
|
||||||
@ -191,7 +191,7 @@ and would not want to duplicate the template. It is possible to do just that.
|
|||||||
|
|
||||||
If you want to extend the behavior of an existing element, you must place the element
|
If you want to extend the behavior of an existing element, you must place the element
|
||||||
inside, by wrapping it directly. Also, you can conditionnally add props to manage when the
|
inside, by wrapping it directly. Also, you can conditionnally add props to manage when the
|
||||||
element might be swipable or not.
|
element might be swipable or not.
|
||||||
|
|
||||||
You can use the component to interact easily with records, messages, items in lists and much more.
|
You can use the component to interact easily with records, messages, items in lists and much more.
|
||||||
|
|
||||||
@ -200,18 +200,18 @@ You can use the component to interact easily with records, messages, items in li
|
|||||||
:alt: Example of ActionSwiper usage
|
:alt: Example of ActionSwiper usage
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
The following example creates a basic ActionSwiper component.
|
The following example creates a basic ActionSwiper component.
|
||||||
Here, the swipe is enabled in both directions.
|
Here, the swipe is enabled in both directions.
|
||||||
|
|
||||||
.. code-block:: xml
|
.. code-block:: xml
|
||||||
|
|
||||||
<ActionSwiper
|
<ActionSwiper
|
||||||
onRightSwipe="
|
onRightSwipe="
|
||||||
{
|
{
|
||||||
action: '() => Delete item',
|
action: '() => Delete item',
|
||||||
icon: 'fa-delete',
|
icon: 'fa-delete',
|
||||||
bgColor: 'bg-danger',
|
bgColor: 'bg-danger',
|
||||||
}"
|
}"
|
||||||
onLeftSwipe="
|
onLeftSwipe="
|
||||||
{
|
{
|
||||||
action: '() => Star item',
|
action: '() => Star item',
|
||||||
@ -233,7 +233,7 @@ Props
|
|||||||
:widths: 20 20 60
|
:widths: 20 20 60
|
||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
|
|
||||||
* - Name
|
* - Name
|
||||||
- Type
|
- Type
|
||||||
- Description
|
- Description
|
||||||
* - `onLeftSwipe`
|
* - `onLeftSwipe`
|
||||||
@ -246,7 +246,7 @@ Props
|
|||||||
You can use both `onLeftSwipe` and `onRightSwipe` props at the same time.
|
You can use both `onLeftSwipe` and `onRightSwipe` props at the same time.
|
||||||
|
|
||||||
Those `Object`'s must contain:
|
Those `Object`'s must contain:
|
||||||
|
|
||||||
- `action`, which is the callable `Function` serving as a callback.
|
- `action`, which is the callable `Function` serving as a callback.
|
||||||
Once the swipe has been completed in the given direction, that action
|
Once the swipe has been completed in the given direction, that action
|
||||||
is performed.
|
is performed.
|
||||||
@ -258,7 +258,7 @@ Those `Object`'s must contain:
|
|||||||
`info`, `secondary`, `success` or `warning`).
|
`info`, `secondary`, `success` or `warning`).
|
||||||
|
|
||||||
Those values must be given to define the behavior and the visual aspect
|
Those values must be given to define the behavior and the visual aspect
|
||||||
of the swiper.
|
of the swiper.
|
||||||
|
|
||||||
Example: Extending existing components
|
Example: Extending existing components
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@ -268,7 +268,7 @@ in the ActionSwiper component. Here, a swiper has been added to mark
|
|||||||
a message as read in mail.
|
a message as read in mail.
|
||||||
|
|
||||||
.. code-block:: xml
|
.. code-block:: xml
|
||||||
|
|
||||||
<xpath expr="//*[hasclass('o_Message')]" position="after">
|
<xpath expr="//*[hasclass('o_Message')]" position="after">
|
||||||
<ActionSwiper
|
<ActionSwiper
|
||||||
onRightSwipe="messaging.device.isMobile and messageView.message.isNeedaction ?
|
onRightSwipe="messaging.device.isMobile and messageView.message.isNeedaction ?
|
||||||
@ -312,7 +312,7 @@ Props
|
|||||||
:widths: 20 20 60
|
:widths: 20 20 60
|
||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
|
|
||||||
* - Name
|
* - Name
|
||||||
- Type
|
- Type
|
||||||
- Description
|
- Description
|
||||||
* - `value`
|
* - `value`
|
||||||
@ -330,7 +330,7 @@ Dropdown
|
|||||||
Location
|
Location
|
||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
|
|
||||||
`@web/core/dropdown/dropdown` and `@web/core/dropdown/dropdown_item`
|
`@web/core/dropdown/dropdown` and `@web/core/dropdown/dropdown_item`
|
||||||
|
|
||||||
Description
|
Description
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
|
@ -33,7 +33,7 @@ The patch function is located in `@web/core/utils/patch`:
|
|||||||
Most patch operations provide access to the parent value by using the
|
Most patch operations provide access to the parent value by using the
|
||||||
`_super` property (see below in the examples). To do that, the `patch` method
|
`_super` property (see below in the examples). To do that, the `patch` method
|
||||||
wraps each pair key/value in a getter that dynamically binds `_super`.
|
wraps each pair key/value in a getter that dynamically binds `_super`.
|
||||||
|
|
||||||
The only option is `pure (boolean)`. If set to `true`, the patch operation
|
The only option is `pure (boolean)`. If set to `true`, the patch operation
|
||||||
does not bind the `_super` property.
|
does not bind the `_super` property.
|
||||||
|
|
||||||
|
@ -231,7 +231,7 @@ exists in 3 different forms:
|
|||||||
.. tip::
|
.. tip::
|
||||||
There are two equivalent syntaxes for format strings: ``"plain_text {{code}}"`` (aka
|
There are two equivalent syntaxes for format strings: ``"plain_text {{code}}"`` (aka
|
||||||
jinja-style) and ``"plain_text #{code}"`` (aka ruby-style).
|
jinja-style) and ``"plain_text #{code}"`` (aka ruby-style).
|
||||||
|
|
||||||
:samp:`t-att=mapping`
|
:samp:`t-att=mapping`
|
||||||
if the parameter is a mapping, each (key, value) pair generates a new
|
if the parameter is a mapping, each (key, value) pair generates a new
|
||||||
attribute and its value::
|
attribute and its value::
|
||||||
|
@ -10,7 +10,7 @@ into a registry whenever it needs a definition for some object (such as fields,
|
|||||||
views, client actions or services). Customizing the web client is then simply
|
views, client actions or services). Customizing the web client is then simply
|
||||||
done by adding specific values in the correct registry.
|
done by adding specific values in the correct registry.
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
import { Registry } from "@web/core/registry";
|
import { Registry } from "@web/core/registry";
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ obtained by the `category` method. If the sub registry does not exist yet, it
|
|||||||
is created on the fly. All registries used by the web client are obtained
|
is created on the fly. All registries used by the web client are obtained
|
||||||
in such a way from one root registry, exported in `@web/core/registry`.
|
in such a way from one root registry, exported in `@web/core/registry`.
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
import { registry } from "@web/core/registry";
|
import { registry } from "@web/core/registry";
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ Registry API
|
|||||||
also triggers an `UPDATE` event.
|
also triggers an `UPDATE` event.
|
||||||
|
|
||||||
Returns the same registry, so `add` method calls can be chained.
|
Returns the same registry, so `add` method calls can be chained.
|
||||||
|
|
||||||
.. js:method:: get(key[, defaultValue])
|
.. js:method:: get(key[, defaultValue])
|
||||||
|
|
||||||
:param string key: key for the entry
|
:param string key: key for the entry
|
||||||
@ -67,7 +67,7 @@ Registry API
|
|||||||
Returns the value corresponding to the `key` argument. If the registry does
|
Returns the value corresponding to the `key` argument. If the registry does
|
||||||
not contain that key, this method returns `defaultValue` if given, or throws
|
not contain that key, this method returns `defaultValue` if given, or throws
|
||||||
an error otherwise.
|
an error otherwise.
|
||||||
|
|
||||||
.. js:method:: contains(key)
|
.. js:method:: contains(key)
|
||||||
|
|
||||||
:param string key: key for the entry
|
:param string key: key for the entry
|
||||||
@ -78,21 +78,21 @@ Registry API
|
|||||||
.. js:method:: getAll()
|
.. js:method:: getAll()
|
||||||
|
|
||||||
:returns: any[]
|
:returns: any[]
|
||||||
|
|
||||||
Returns the list of all elements in the registry. It is ordered
|
Returns the list of all elements in the registry. It is ordered
|
||||||
according to the sequence numbers.
|
according to the sequence numbers.
|
||||||
|
|
||||||
.. js:method:: remove(key)
|
.. js:method:: remove(key)
|
||||||
|
|
||||||
:param string key: the key for the entry that should be removed
|
:param string key: the key for the entry that should be removed
|
||||||
|
|
||||||
Removes a key/value pair from the registry. This operation triggers an
|
Removes a key/value pair from the registry. This operation triggers an
|
||||||
`UPDATE` event.
|
`UPDATE` event.
|
||||||
|
|
||||||
.. js:method:: category(subcategory)
|
.. js:method:: category(subcategory)
|
||||||
|
|
||||||
:param string subcategory: the name for the sub category
|
:param string subcategory: the name for the sub category
|
||||||
:returns: Registry
|
:returns: Registry
|
||||||
|
|
||||||
Returns the sub registry associated with the `subcategory`. If it does not
|
Returns the sub registry associated with the `subcategory`. If it does not
|
||||||
exist yet, the sub registry is created on the fly.
|
exist yet, the sub registry is created on the fly.
|
||||||
@ -135,7 +135,7 @@ for more details.
|
|||||||
Formatter registry
|
Formatter registry
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
The `formatters` registry contains functions to format values. Each formatter
|
The `formatters` registry contains functions to format values. Each formatter
|
||||||
has the following API:
|
has the following API:
|
||||||
|
|
||||||
.. js:function:: format(value[, options])
|
.. js:function:: format(value[, options])
|
||||||
@ -166,7 +166,7 @@ API
|
|||||||
interface {
|
interface {
|
||||||
Component: Owl Component class
|
Component: Owl Component class
|
||||||
props?: any
|
props?: any
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
For example, the `LoadingIndicator` component can be added in the registry like
|
For example, the `LoadingIndicator` component can be added in the registry like
|
||||||
@ -183,7 +183,7 @@ this:
|
|||||||
Parser registry
|
Parser registry
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
The `parsers` registry contains functions to parse values. Each parser
|
The `parsers` registry contains functions to parse values. Each parser
|
||||||
has the following API:
|
has the following API:
|
||||||
|
|
||||||
.. js:function:: parse(value[, options])
|
.. js:function:: parse(value[, options])
|
||||||
@ -192,7 +192,7 @@ has the following API:
|
|||||||
:param value: a string representing a value
|
:param value: a string representing a value
|
||||||
:type value: string
|
:type value: string
|
||||||
:param Object options: various options (parser specific)
|
:param Object options: various options (parser specific)
|
||||||
:returns: T a valid value
|
:returns: T a valid value
|
||||||
|
|
||||||
Parses a string and returns a value. If the string does not represent a valid
|
Parses a string and returns a value. If the string does not represent a valid
|
||||||
value, parsers can fail and throw errors.
|
value, parsers can fail and throw errors.
|
||||||
|
@ -47,7 +47,7 @@ Defining a service
|
|||||||
A service needs to implement the following interface:
|
A service needs to implement the following interface:
|
||||||
|
|
||||||
.. js:data:: dependencies
|
.. js:data:: dependencies
|
||||||
|
|
||||||
Optional list of strings. It is the list of all dependencies (other services)
|
Optional list of strings. It is the list of all dependencies (other services)
|
||||||
that this service needs
|
that this service needs
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ A service needs to implement the following interface:
|
|||||||
:param Environment env: the application environment
|
:param Environment env: the application environment
|
||||||
:param Object deps: all requested dependencies
|
:param Object deps: all requested dependencies
|
||||||
:returns: value of service or Promise<value of service>
|
:returns: value of service or Promise<value of service>
|
||||||
|
|
||||||
This is the main definition for the service. It can return either a value or
|
This is the main definition for the service. It can return either a value or
|
||||||
a promise. In that case, the service loader simply waits for the promise to
|
a promise. In that case, the service loader simply waits for the promise to
|
||||||
resolve to a value, which is then the value of the service.
|
resolve to a value, which is then the value of the service.
|
||||||
@ -66,7 +66,7 @@ A service needs to implement the following interface:
|
|||||||
set to ``null`` in ``env.services``.
|
set to ``null`` in ``env.services``.
|
||||||
|
|
||||||
.. js:data:: async
|
.. js:data:: async
|
||||||
|
|
||||||
Optional value. If given, it should be `true` or a list of strings.
|
Optional value. If given, it should be `true` or a list of strings.
|
||||||
|
|
||||||
Some services need to provide an asynchronous API. For example, the `rpc`
|
Some services need to provide an asynchronous API. For example, the `rpc`
|
||||||
@ -166,7 +166,7 @@ API
|
|||||||
:param number ttl: optional. the time in seconds before the cookie will be deleted (default=1 year)
|
:param number ttl: optional. the time in seconds before the cookie will be deleted (default=1 year)
|
||||||
|
|
||||||
Sets the cookie `name` to the value `value` with a max age of `ttl`
|
Sets the cookie `name` to the value `value` with a max age of `ttl`
|
||||||
|
|
||||||
.. js:function:: deleteCookie(name)
|
.. js:function:: deleteCookie(name)
|
||||||
|
|
||||||
:param string name: name of the cookie
|
:param string name: name of the cookie
|
||||||
@ -204,7 +204,7 @@ Here's how this can be displayed:
|
|||||||
message: "Boom! Team record for the past 30 days.",
|
message: "Boom! Team record for the past 30 days.",
|
||||||
});
|
});
|
||||||
|
|
||||||
.. warning ::
|
.. warning ::
|
||||||
The hook `useEffect` is not related to the effect service.
|
The hook `useEffect` is not related to the effect service.
|
||||||
|
|
||||||
API
|
API
|
||||||
@ -242,7 +242,7 @@ RainbowMan
|
|||||||
:widths: 20 40 40
|
:widths: 20 40 40
|
||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
|
|
||||||
* - Name
|
* - Name
|
||||||
- Type
|
- Type
|
||||||
- Description
|
- Description
|
||||||
* - `params.Component`
|
* - `params.Component`
|
||||||
@ -274,7 +274,7 @@ RainbowMan
|
|||||||
|
|
||||||
`"fast"` will make rainbowman dissapear quickly.
|
`"fast"` will make rainbowman dissapear quickly.
|
||||||
|
|
||||||
`"medium"` and `"slow"` will wait little longer before disappearing (can be used when `params.message` is longer).
|
`"medium"` and `"slow"` will wait little longer before disappearing (can be used when `params.message` is longer).
|
||||||
|
|
||||||
`"no"` will keep rainbowman on screen until user clicks anywhere outside rainbowman.
|
`"no"` will keep rainbowman on screen until user clicks anywhere outside rainbowman.
|
||||||
|
|
||||||
@ -302,13 +302,13 @@ The function must follow this API:
|
|||||||
|
|
||||||
:returns: `({Component, props} | void)` A component and its props or nothing.
|
:returns: `({Component, props} | void)` A component and its props or nothing.
|
||||||
|
|
||||||
This function must create a component and return it. This component is mounted inside the
|
This function must create a component and return it. This component is mounted inside the
|
||||||
effect component container.
|
effect component container.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
|
|
||||||
Let's say we want to add an effect that add a sepia look at the page.
|
Let's say we want to add an effect that add a sepia look at the page.
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
@ -340,7 +340,7 @@ Let's say we want to add an effect that add a sepia look at the page.
|
|||||||
effectRegistry.add("sepia", sepiaEffectProvider);
|
effectRegistry.add("sepia", sepiaEffectProvider);
|
||||||
|
|
||||||
|
|
||||||
And then, call it somewhere you want and you will see the result.
|
And then, call it somewhere you want and you will see the result.
|
||||||
Here, it is called in webclient.js to make it visible everywhere for the example.
|
Here, it is called in webclient.js to make it visible everywhere for the example.
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
@ -396,7 +396,7 @@ Example
|
|||||||
|
|
||||||
const httpService = useService("http");
|
const httpService = useService("http");
|
||||||
const data = await httpService.get("https://something.com/posts/1");
|
const data = await httpService.get("https://something.com/posts/1");
|
||||||
// ...
|
// ...
|
||||||
await httpService.post("https://something.com/posts/1", { title: "new title", content: "new content" });
|
await httpService.post("https://something.com/posts/1", { title: "new title", content: "new content" });
|
||||||
|
|
||||||
.. _frontend/services/notification:
|
.. _frontend/services/notification:
|
||||||
@ -411,17 +411,17 @@ Overview
|
|||||||
* Dependencies: None
|
* Dependencies: None
|
||||||
|
|
||||||
The `notification` service allows to display notifications on the screen.
|
The `notification` service allows to display notifications on the screen.
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
const notificationService = useService("notification");
|
const notificationService = useService("notification");
|
||||||
notificationService.add("I'm a very simple notification");
|
notificationService.add("I'm a very simple notification");
|
||||||
|
|
||||||
API
|
API
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
.. js:function:: add(message[, options])
|
.. js:function:: add(message[, options])
|
||||||
|
|
||||||
:param string message: the notification message to display
|
:param string message: the notification message to display
|
||||||
:param object options: the options of the notification
|
:param object options: the options of the notification
|
||||||
:returns: a function to close the notification
|
:returns: a function to close the notification
|
||||||
@ -481,7 +481,7 @@ Examples
|
|||||||
A notification for when a sale deal is made with a button to go some kind of commission page.
|
A notification for when a sale deal is made with a button to go some kind of commission page.
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
// in setup
|
// in setup
|
||||||
this.notificationService = useService("notification");
|
this.notificationService = useService("notification");
|
||||||
this.actionService = useService("actionService");
|
this.actionService = useService("actionService");
|
||||||
@ -538,16 +538,16 @@ API
|
|||||||
|
|
||||||
The current route can be accessed with the ``current`` key. It is an object
|
The current route can be accessed with the ``current`` key. It is an object
|
||||||
with the following information:
|
with the following information:
|
||||||
|
|
||||||
* `pathname (string)`: the path for the current location (most likely `/web` )
|
* `pathname (string)`: the path for the current location (most likely `/web` )
|
||||||
* `search (object)`: a dictionary mapping each search keyword (the querystring)
|
* `search (object)`: a dictionary mapping each search keyword (the querystring)
|
||||||
from the url to its value. An empty string is the value if no value was
|
from the url to its value. An empty string is the value if no value was
|
||||||
explicitely given
|
explicitely given
|
||||||
* `hash (object)`: same as above, but for values described in the hash.
|
* `hash (object)`: same as above, but for values described in the hash.
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
// url = /web?debug=assets#action=123&owl&menu_id=174
|
// url = /web?debug=assets#action=123&owl&menu_id=174
|
||||||
const { pathname, search, hash } = env.services.router.current;
|
const { pathname, search, hash } = env.services.router.current;
|
||||||
@ -590,10 +590,10 @@ For example:
|
|||||||
Finally, the `redirect` method will redirect the browser to a specified url:
|
Finally, the `redirect` method will redirect the browser to a specified url:
|
||||||
|
|
||||||
.. js:function:: redirect(url[, wait])
|
.. js:function:: redirect(url[, wait])
|
||||||
|
|
||||||
:param string url: a valid url
|
:param string url: a valid url
|
||||||
:param boolean wait: if true, wait for the server to be ready, and redirect after
|
:param boolean wait: if true, wait for the server to be ready, and redirect after
|
||||||
|
|
||||||
Redirect the browser to `url`. This method reloads the page. The `wait`
|
Redirect the browser to `url`. This method reloads the page. The `wait`
|
||||||
argument is rarely used: it is useful in some cases where we know that the
|
argument is rarely used: it is useful in some cases where we know that the
|
||||||
server will be unavailable for a short duration, typically just after an addon
|
server will be unavailable for a short duration, typically just after an addon
|
||||||
@ -620,14 +620,14 @@ argument and optionally, a ``params`` object can be given as a second argument.
|
|||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
// in setup
|
// in setup
|
||||||
this.rpc = useService("rpc");
|
this.rpc = useService("rpc");
|
||||||
|
|
||||||
// somewhere else, in an async function:
|
// somewhere else, in an async function:
|
||||||
const result = await this.rpc("/my/route", { some: "value" });
|
const result = await this.rpc("/my/route", { some: "value" });
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Note that the ``rpc`` service is considered a low-level service. It should
|
Note that the ``rpc`` service is considered a low-level service. It should
|
||||||
only be used to interact with Odoo controllers. To work with models (which
|
only be used to interact with Odoo controllers. To work with models (which
|
||||||
is by far the most important usecase), one should use the ``orm`` service
|
is by far the most important usecase), one should use the ``orm`` service
|
||||||
@ -641,9 +641,9 @@ API
|
|||||||
:param string route: route targeted by the request
|
:param string route: route targeted by the request
|
||||||
:param Object params: parameters sent to the server
|
:param Object params: parameters sent to the server
|
||||||
:param Object settings (optional): request settings (see below)
|
:param Object settings (optional): request settings (see below)
|
||||||
|
|
||||||
The ``settings`` object can contain:
|
The ``settings`` object can contain:
|
||||||
|
|
||||||
- ``xhr``, which should be a ``XMLHTTPRequest`` object. In that case,
|
- ``xhr``, which should be a ``XMLHTTPRequest`` object. In that case,
|
||||||
the ``rpc`` method will simply use it instead of creating a new one. This
|
the ``rpc`` method will simply use it instead of creating a new one. This
|
||||||
is useful when one accesses advanced features of the `XMLHTTPRequest` API.
|
is useful when one accesses advanced features of the `XMLHTTPRequest` API.
|
||||||
@ -673,7 +673,7 @@ When a rpc fails, then:
|
|||||||
|
|
||||||
* the promise representing the rpc is rejected, so the calling code will crash,
|
* the promise representing the rpc is rejected, so the calling code will crash,
|
||||||
unless it handles the situation
|
unless it handles the situation
|
||||||
*
|
*
|
||||||
an event ``RPC_ERROR`` is triggered on the main application bus. The event payload
|
an event ``RPC_ERROR`` is triggered on the main application bus. The event payload
|
||||||
contains a description of the cause of the error:
|
contains a description of the cause of the error:
|
||||||
|
|
||||||
@ -683,10 +683,10 @@ When a rpc fails, then:
|
|||||||
|
|
||||||
* ``type = 'server'``
|
* ``type = 'server'``
|
||||||
* ``message(string)``
|
* ``message(string)``
|
||||||
*
|
*
|
||||||
``code(number)``
|
``code(number)``
|
||||||
|
|
||||||
*
|
*
|
||||||
``name(string)`` (optional, used by the error service to look for an appropriate
|
``name(string)`` (optional, used by the error service to look for an appropriate
|
||||||
dialog to use when handling the error)
|
dialog to use when handling the error)
|
||||||
|
|
||||||
@ -715,13 +715,13 @@ Whenever the user clicks on an anchor in the web client, this service automatica
|
|||||||
to the target (if appropriate).
|
to the target (if appropriate).
|
||||||
|
|
||||||
The service adds an event listener to get `click`'s on the document. The service checks
|
The service adds an event listener to get `click`'s on the document. The service checks
|
||||||
if the selector contained in its href attribute is valid to distinguish anchors and Odoo
|
if the selector contained in its href attribute is valid to distinguish anchors and Odoo
|
||||||
actions (e.g. `<a href="#target_element"></a>`). It does nothing if it is not the case.
|
actions (e.g. `<a href="#target_element"></a>`). It does nothing if it is not the case.
|
||||||
|
|
||||||
An event `SCROLLER:ANCHOR_LINK_CLICKED` is triggered on the main application bus if the click seems to be
|
An event `SCROLLER:ANCHOR_LINK_CLICKED` is triggered on the main application bus if the click seems to be
|
||||||
targeted at an element. The event contains a custom event containing the `element` matching and its `id` as a reference.
|
targeted at an element. The event contains a custom event containing the `element` matching and its `id` as a reference.
|
||||||
It may allow other parts to handle a behavior relative to anchors themselves. The original event is also
|
It may allow other parts to handle a behavior relative to anchors themselves. The original event is also
|
||||||
given as it might need to be prevented. If the event is not prevented, then the user interface will
|
given as it might need to be prevented. If the event is not prevented, then the user interface will
|
||||||
scroll to the target element.
|
scroll to the target element.
|
||||||
|
|
||||||
API
|
API
|
||||||
@ -733,7 +733,7 @@ The following values are contained in the `anchor-link-clicked` custom event exp
|
|||||||
:widths: 25 25 50
|
:widths: 25 25 50
|
||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
|
|
||||||
* - Name
|
* - Name
|
||||||
- Type
|
- Type
|
||||||
- Description
|
- Description
|
||||||
* - `element`
|
* - `element`
|
||||||
@ -796,7 +796,7 @@ Its API is:
|
|||||||
This is a string representing the current title. It is structured in the
|
This is a string representing the current title. It is structured in the
|
||||||
following way: ``value_1 - ... - value_n`` where each `value_i` is a (non null)
|
following way: ``value_1 - ... - value_n`` where each `value_i` is a (non null)
|
||||||
value found in the `Parts` object (returned by the `getParts` function)
|
value found in the `Parts` object (returned by the `getParts` function)
|
||||||
|
|
||||||
.. js:function:: getParts
|
.. js:function:: getParts
|
||||||
|
|
||||||
:returns: Parts the current `Parts` object maintained by the title service
|
:returns: Parts the current `Parts` object maintained by the title service
|
||||||
@ -835,9 +835,9 @@ Overview
|
|||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
|
|
||||||
* Technical name: `user`
|
* Technical name: `user`
|
||||||
* Dependencies: `rpc`
|
* Dependencies: `rpc`
|
||||||
|
|
||||||
The `user` service provides a bunch of data and a few helper functions concerning
|
The `user` service provides a bunch of data and a few helper functions concerning
|
||||||
the connected user.
|
the connected user.
|
||||||
|
|
||||||
|
|
||||||
@ -848,7 +848,7 @@ API
|
|||||||
:widths: 25 25 50
|
:widths: 25 25 50
|
||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
|
|
||||||
* - Name
|
* - Name
|
||||||
- Type
|
- Type
|
||||||
- Description
|
- Description
|
||||||
* - ``context``
|
* - ``context``
|
||||||
@ -868,7 +868,7 @@ API
|
|||||||
- Whether the user is part of the system group (`base.group_system`)
|
- Whether the user is part of the system group (`base.group_system`)
|
||||||
* - ``lang``
|
* - ``lang``
|
||||||
- ``string``
|
- ``string``
|
||||||
- language used
|
- language used
|
||||||
* - ``name``
|
* - ``name``
|
||||||
- ``string``
|
- ``string``
|
||||||
- Name of the user
|
- Name of the user
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user