Compare commits

...

12 Commits

Author SHA1 Message Date
Valentino
091c084c9a [IMP] accounting/l10n_br: electronic invoicing & tax computation flow
With the addition of l10n_br_{avatax,edi,edi_sale}_services to the previous modules, now electronic invoices and tax computation for services can be created from Odoo through Avalara.

PR that includes these features: https://github.com/odoo/enterprise/pull/57868

This PR includes the necessary information to use these new modules - configuration and workflows.
2024-05-17 10:06:00 -04:00
tong-odoo
50d983d48d [IMP] accounting: employment hero added taxes mapping descriptions
Impacted Versions:

- 17.0 and above

closes odoo/documentation#9339

Signed-off-by: Tommy Ng (tong) <tong@odoo.com>
2024-05-17 08:23:06 +00:00
tiku-odoo
f80a74f460 [IMP] finance: avatax version 17 updates
closes odoo/documentation#9341

Signed-off-by: Timothy Kukulka (tiku) <tiku@odoo.com>
2024-05-16 22:46:46 +00:00
Felicious
7e37903b8f [IMP] inventory: fix lot assignment
closes odoo/documentation#9088

X-original-commit: 77d824bd67
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: Jess Rogers <104637850+jero-odoo@users.noreply.github.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Timothy Kukulka <91896312+tiku-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2024-05-16 22:46:45 +00:00
jero-odoo
50b3852bab [ADD] CRM: contact form leads
jero edits

closes odoo/documentation#9318

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: larm-odoo <121518652+larm-odoo@users.noreply.github.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2024-05-16 20:44:10 +00:00
Brandon Seltenrich (BRSE)
ba97b13527 [IMP] purchase: replace purchase uom screenshots
closes odoo/documentation#9317

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2024-05-15 23:44:57 +00:00
Lara Martini (larm)
e8a260f20a [IMP] payroll: added needed module info
closes odoo/documentation#9316

Signed-off-by: Lara Martini (larm) <larm@odoo.com>
2024-05-15 23:44:56 +00:00
Brandon Seltenrich (BRSE)
e25de2b5b5 [IMP] purchase: replace vendor bills screenshots
closes odoo/documentation#9312

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2024-05-15 23:44:55 +00:00
jero-odoo
34598f13bf [ADD] Purchase: Vendor costs
closes odoo/documentation#9255

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: hojo-odoo <123424465+hojo-odoo@users.noreply.github.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2024-05-15 23:44:53 +00:00
KC (ksc)
6ebd27144b [ADD] events: adding create events doc
closes odoo/documentation#8929

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2024-05-15 23:44:50 +00:00
maya-odoo
a08fc7db34 [IMP] accounting/l10n_hk: add Hong Kong payroll
Impacted Version:

- 17.0 and above

This commit improve below features:

- Add Hong Kong payroll documentation

closes odoo/documentation#8204

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2024-05-15 23:44:49 +00:00
Lara Martini (larm)
1f5a41a209 [IMP] Recruitment: instructions and images for 17
closes odoo/documentation#7869

Signed-off-by: Lara Martini (larm) <larm@odoo.com>
Co-authored-by: StraubCreative <zst@odoo.com>
2024-05-15 23:44:48 +00:00
106 changed files with 2437 additions and 763 deletions

View File

@@ -11,9 +11,9 @@ transactions.
.. important::
*AvaTax* is only available for integration with databases/companies that have locations in the
United States and Canada. This means the fiscal position/country of a database can only be set to
the United States or Canada. For more information, reference this documentation:
:ref:`avatax/fiscal_country`.
United States, Canada, and Brazil. This means the fiscal position/country of a database can only
be set to the United States, Canada, or Brazil. For more information, reference this
documentation: :ref:`avatax/fiscal_country`.
*AvaTax* accounts for location-based tax rates for each state, county, and city. It improves
remittance accuracy by paying close attention to laws, rules, jurisdiction boundaries, and special
@@ -125,7 +125,7 @@ To set the :guilabel:`Fiscal Country`, navigate to :menuselection:`Accounting ap
:doc:`../../fiscal_localizations`
Under the :guilabel:`Taxes` section, set the :guilabel:`Fiscal Country` feature to :guilabel:`United
States` or :guilabel:`Canada`. Then, click :guilabel:`Save`.
States`, :guilabel:`Canada`, or :guilabel:`Brazil`. Then, click :guilabel:`Save`.
Company settings
----------------
@@ -166,28 +166,50 @@ Next, ensure that the Odoo *AvaTax* module is installed. To do so, navigate to t
* - :guilabel:`Avatax`
- `account_avatax`
- Default *AvaTax* module. This module adds the base *AvaTax* features for tax calculation.
* - :guilabel:`Avatax for geo localization`
- `account_avatax_geolocalize`
- This module includes the features required for integration of *AvaTax* into geo-localization
in Odoo.
* - :guilabel:`Avatax for SO`
- `account_avatax_sale`
- Includes the information needed for tax calculation on sales orders in Odoo.
* - :guilabel:`Avatax for Subscriptions`
- `account_avatax_sale_subscription`
- This module includes the features required for tax calculation on subscriptions in Odoo.
* - :guilabel:`Account Avatax - Ecommerce`
- `website_sale_account_avatax`
- Includes tax calculation features for the checkout process on Odoo eCommerce.
* - :guilabel:`Account AvaTax - Ecommerce - Delivery`
- `website_sale_delivery_avatax`
- Includes tax calculation features for the delivery process on Odoo eCommerce.
* - :guilabel:`Avatax for Inventory`
- `account_avatax_stock`
- Includes tax calculation in Odoo Inventory.
* - :guilabel:`Amazon/Avatax Bridge`
- `sale_amazon_avatax`
- Includes tax calculation features between the *Amazon Connector* and Odoo.
* - :guilabel:`Avatax Brazil`
- `l10n_br_avatax`
- Includes information for tax calculation in the Brazil localization.
* - :guilabel:`Avatax Brazil for Services`
- `l10n_br_avatax_services`
- This module includes the required features for tax calculation for services in the Brazil
localization.
* - :guilabel:`Avatax Brazil Sale for Services`
- `l10n_br_edi_sale_services`
- This module includes the required features for tax calculation for the sale of services in
the Brazil localization. This includes electronic data interchange (EDI).
* - :guilabel:`Test SOs for the Brazilian AvaTax`
- `l10n_br_test_avatax_sale`
- This module includes the required features for test sales orders in the Brazil localization.
Click the :guilabel:`Install` button on the module labeled :guilabel:`Avatax`: `account_avatax`.
Click the :guilabel:`Install` button on the module labeled, :guilabel:`Avatax`: `account_avatax`.
Doing so installs the following modules:
- :guilabel:`Avatax`: `account_avatax`
- :guilabel:`Avatax for SO`: `account_avatax_sale`
- :guilabel:`Account Avatax - Ecommerce`: `website_sale_account_avatax`
- :guilabel:`Avatax for Inventory`: `account_avatax_stock`
Should *AvaTax* be needed for Odoo *Subscriptions*, or for delivery tax in Odoo *eCommerce*, then
install those modules individually by clicking on :guilabel:`Install`.
Should *AvaTax* be needed for geo-localization, or with the *Amazon Connector*, then install those
modules individually by clicking on :guilabel:`Install` on :guilabel:`Avatax for geo localization`
and :guilabel:`Amazon/Avatax Bridge`, respectively.
.. seealso::
For localization specific *AvaTax* instructions, view the following :doc:`fiscal localization
<../../fiscal_localizations>` documentation:
- :doc:`../../fiscal_localizations/brazil`
.. _avatax/credentials:
@@ -196,9 +218,13 @@ Odoo AvaTax settings
To integrate the *AvaTax* :abbr:`API (application programming interface)` with Odoo, go to
:menuselection:`Accounting app --> Configuration --> Settings` section. The :guilabel:`AvaTax`
fields in the :guilabel:`Taxes` section is where the *AvaTax* configurations are made and the
fields in the :guilabel:`Taxes` section is where the *AvaTax* configurations are made, and the
credentials are entered in.
First, tick the checkbox to the left of the :guilabel:`AvaTax` settings, to activate *AvaTax* on the
database. This is a quick, convenient way to activate and deactivate *AvaTax* tax calculation on the
Odoo database.
.. image:: avatax/avatax-configuration-settings.png
:align: center
:alt: Configure AvaTax settings
@@ -360,6 +386,12 @@ Tax mapping
The *AvaTax* integration is available on sale orders and invoices with the included *AvaTax* fiscal
position.
.. tip::
Additionally, there is a :guilabel:`Tax Mapping` tab and :guilabel:`Account Mapping` tab in the
:guilabel:`Automatic Tax Mapping (AvaTax)` fiscal position, where mapping for products can also
be configured. To access :guilabel:`Fiscal Positions` navigate to :menuselection:`Accounting app
--> Configuration --> Accounting: Fiscal Positions`.
Product category mapping
~~~~~~~~~~~~~~~~~~~~~~~~

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -11,15 +11,15 @@ Tax calculation
Automatically calculate taxes on Odoo quotations and invoices with AvaTax by confirming the
documents during the sales flow. Alternatively, calculate the taxes manually by clicking the
:guilabel:`Compute taxes using Avatax` button while these documents are in draft mode.
:guilabel:`Compute Taxes` button, while these documents are in draft stage.
.. tip::
Clicking the :guilabel:`Compute taxes using Avatax` button recalculates taxes if any product
lines are edited on the invoice.
Clicking the :guilabel:`Compute Taxes` button recalculates taxes, if any product lines are edited
on the invoice.
.. image:: avatax_use/calculate-avatax.png
:align: center
:alt: Sales quotation with the confirm and compute taxes using AvaTax buttons highlighted.
:alt: Sales quotation with the confirm and compute taxes button highlighted.
The tax calculation is triggered during the following :ref:`automatic trigger
<avatax/automatic-triggers>` and :ref:`manual trigger <avatax/manual-triggers>` circumstances.
@@ -43,8 +43,10 @@ Automatic triggers
Manual triggers
---------------
- :guilabel:`Compute taxes using Avatax` button at the bottom of the quote.
- :guilabel:`Compute taxes using Avatax` button at the top of the invoice.
- :guilabel:`Compute Taxes` button at the bottom of the quote.
- :guilabel:`Compute Taxes` button at the top of the invoice.
Use each of these buttons to manually re-calculate the sales tax.
.. tip::
Use the :guilabel:`Avalara Partner Code` field that is available on customer records, quotations,
@@ -94,9 +96,9 @@ AvaTax portal.
Fixed price discounts
=====================
Add a fixed price discount to a valuable customer by click :guilabel:`Add a line` on the customer's
invoice. Add the product discount and set the :guilabel:`Price` to either a positive or negative
value. To recalculate the taxes, click :guilabel:`Compute taxes using Avatax`.
Add a fixed price discount to a valuable customer, by clicking :guilabel:`Add a line` on the
customer's invoice. Add the product discount, and set the :guilabel:`Price` to either a positive or
negative value. To recalculate the taxes, click :guilabel:`Compute Taxes`.
.. tip::
Tax calculation can even be done on negative subtotals and credit notes.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

@@ -903,6 +903,9 @@ Configuration
:alt: The Employment Hero "Business ID" number is in the URL
- You can choose any Odoo journal to post the payslip entries.
#. Configure the tax by going to :menuselection:`Accounting --> Configuration --> Taxes`. Create the
necessary taxes for the Employment Hero payslip entries. Fill in the tax code from
**Employment Hero** in the :guilabel:`Matching Employment Hero Tax` field.
How does the API work?
----------------------

View File

@@ -10,12 +10,12 @@ Introduction
============
With the Brazilian localization, sales taxes can be automatically computed and electronic invoices
(NF-e) for goods can be sent using AvaTax (Avalara) through |API| calls. Moreover, taxes for
services can be configured.
for goods (NF-e) and services (NFS-e) can be sent using AvaTax (Avalara) through |API| calls.
Moreover, taxes for services can be configured.
For the goods tax computation and electronic invoicing process, you need to configure the
:ref:`contacts <brazil/contacts>`, :ref:`company <brazil/company>`, :ref:`products
<brazil/products>`, and :ref:`create an account in Avatax <brazil/avatax-account>` need to be
For the goods and services tax computation and electronic invoicing process, you need to configure
the :ref:`contacts <brazil/contacts>`, :ref:`company <brazil/company>`, :ref:`products
<brazil/products>`, and :ref:`create an account in AvaTax <brazil/avatax-account>` which needs to be
configured in the general settings.
For the services taxes, you can create and configure them from Odoo directly without computing them
@@ -27,9 +27,36 @@ needed.
Configuration
=============
Install the :guilabel:`🇧🇷 Brazil` :ref:`fiscal localization package
<fiscal_localizations/packages>` to get all the default accounting features of the Brazilian
localization, following the :abbr:`IFRS (International Financial Reporting Standards)` rules.
Modules installation
--------------------
:ref:`Install <general/install>` the following modules to get all the features of the Brazilian
localization:
.. list-table::
:header-rows: 1
:widths: 25 25 50
* - Name
- Technical name
- Description
* - :guilabel:`Brazilian - Accounting`
- `l10n_br`
- Default :ref:`fiscal localization package <fiscal_localizations/packages>`, which represents
having the Generic Brazilian chart of accounts and Taxes, together with document types and
identification types.
* - :guilabel:`Brazil - Accounting Reports`
- `l10n_br_reports`
- Accounting reports for Brazil.
* - :guilabel:`AvaTax Brazil` & :guilabel:`AvaTax Brazil for Services`
- `l10n_br_avatax` & `l10n_br_avatax_services`
- Goods and Services tax computation through Avalara.
* - :guilabel:`Brazilian Accounting EDI` & :guilabel:`Brazilian Accounting EDI for services`
- `l10n_br_edi` & `l10n_br_edi_services`
- Provides electronic invoicing for goods and services for Brazil through AvaTax.
* - :guilabel:`Brazil Pix QR codes`
- `l10n_br_pix`
- Implements Pix QR codes for Brazil.
.. _brazil/company:
@@ -42,40 +69,53 @@ given to your company.
#. Select the :guilabel:`Company` option at the top of the page. Then, configure the following
fields:
- :guilabel:`Name`.
- :guilabel:`Address` (add :guilabel:`City`, :guilabel:`State`, :guilabel:`Zip Code`,
:guilabel:`Country`).
- :guilabel:`Name`
- :guilabel:`Address`: add :guilabel:`City`, :guilabel:`State`, :guilabel:`Zip Code`,
:guilabel:`Country`
- In the :guilabel:`Street` field, enter the street name, number, and any additional address
information.
- In the :guilabel:`Street 2` field, enter the neighborhood.
- :guilabel:`Identification Number` (:guilabel:`CNPJ`, :guilabel:`CPF`).
- :guilabel:`Tax ID` (associated with the identification type).
- :guilabel:`IE` (State registration).
- :guilabel:`IM` (Municipal registration).
- :guilabel:`SUFRAMA code` (Superintendence of the Manaus Free Trade Zone - add if applicable).
- :guilabel:`Phone`.
- :guilabel:`Email`.
- :guilabel:`Identification Number`: :guilabel:`CNPJ` or :guilabel:`CPF`
- :guilabel:`Tax ID`: associated with the identification type
- :guilabel:`IE`: State registration
- :guilabel:`IM`: Municipal registration
- :guilabel:`SUFRAMA code`: Superintendence of the Manaus Free Trade Zone - add if applicable
- :guilabel:`Phone`
- :guilabel:`Email`
.. image:: brazil/contact-configuration.png
:alt: Company configuration.
#. Configure the :guilabel:`Fiscal Information` within the :guilabel:`Sales and Purchase` tab:
- Add the :guilabel:`Fiscal Position` for :ref:`Avatax Brazil <brazil/fiscal-positions>`.
- :guilabel:`Tax Regime` (Federal Tax Regime).
- :guilabel:`ICMS Taxpayer Type` (indicates ICMS regime, Exempt status, or Non-Taxpayer).
- :guilabel:`Main Activity Sector`.
- Add the :guilabel:`Fiscal Position` for :ref:`AvaTax Brazil <brazil/fiscal-positions>`.
- :guilabel:`Tax Regime`: Federal Tax Regime
- :guilabel:`ICMS Taxpayer Type`: indicates :guilabel:`ICMS regime`, :guilabel:`Exempt status`,
or :guilabel:`Non-Taxpayer`
- :guilabel:`Main Activity Sector`
.. image:: brazil/contact-fiscal-configuration.png
:alt: Company fiscal configuration.
#. Finally, upload a company logo and save the contact
#. Configure the following extra :guilabel:`Fiscal Information` if you are going to issue NFS-e:
- Add the :guilabel:`Fiscal Position` for :ref:`AvaTax Brazil <brazil/fiscal-positions>`.
- :guilabel:`COFINS Details`: :guilabel:`Taxable, Not Taxable, Taxable with rate 0%, Exempt,
Suspended`
- :guilabel:`PIS Details` :guilabel:`Taxable, Not Taxable, Taxable with rate 0%, Exempt,
Suspended`
- :guilabel:`CSLL Taxable` If the company is subject to CSLL or not
.. image:: brazil/contact-fiscal-configuration-nfse.png
:alt: Company fiscal configuration for NFSe.
#. Finally, upload a company logo and save the contact.
.. note::
If you are a simplified regime, you need to configure the ICMS rate under
:menuselection:`Accounting --> Configuration --> Settings --> Taxes --> Avatax Brazil`.
:menuselection:`Accounting --> Configuration --> Settings --> Taxes --> AvaTax Brazil`.
.. _brazil/avatax-account:
@@ -88,11 +128,14 @@ transaction information to retrieve the correct tax to be used and process the e
with the government.
Using this integration requires :doc:`In-App-Purchases (IAPs) <../../essentials/in_app_purchase>` to
compute the taxes and to send the electronic invoices. Whenever you compute taxes, an |API| call is
made using credits from your |IAP| credits balance.
compute the taxes and to send the electronic invoices. Whenever you compute taxes, send an
electronic document (NF-e, NFS-e, etc), or perform any electronic flow (NF-e Cancellation,
Correction letter, Invalidate invoice number range), an API call is made using credits from your
`IAP credits balance <https://iap.odoo.com/iap/in-app-services/819>`_.
.. note::
Odoo is a certified partner of Avalara Brazil.
- Odoo is a certified partner of Avalara Brazil.
- You can `buy IAP credit on odoo.com <https://iap.odoo.com/iap/in-app-services/819>`_.
Credential configuration
~~~~~~~~~~~~~~~~~~~~~~~~
@@ -100,19 +143,31 @@ Credential configuration
To activate AvaTax in Odoo, you need to create an account. To do so, go to
:menuselection:`Accounting --> Configuration --> Settings --> Taxes`, and in the :guilabel:`AvaTax
Brazil` section, add the administration email address to be used for the AvaTax portal in the
:guilabel:`Avatax Portal Email`, and then click on :guilabel:`Create account`.
:guilabel:`AvaTax Portal Email`, and then click on :guilabel:`Create account`.
.. warning::
When **testing** an :guilabel:`Avatax Portal Email` integration in a testing or sandbox database,
use an alternate email address. It is **not** possible to re-use the same email address on the
production database.
When **testing** or **creating a production** :guilabel:`AvaTax Portal Email` integration in a
sandbox or production database, use a real email address, as it is needed to log in to the
Avalara Portal and set up the certificates, whether you want to test or use it on production.
There are two different Avalara Portals, one for testing and one for production:
- Sandbox: https://portal.sandbox.avalarabrasil.com.br/
- Production: https://portal.avalarabrasil.com.br/
When you create the account from Odoo, be sure to select the right environment. Moreover, the
email used to open the account cannot be used to open another account. Save your :guilabel:`API
ID` and :guilabel:`API Key` when you create the account from Odoo.
.. image:: brazil/transfer-api-credentials.png
:alt: Transfer API Credentials.
After you create the account from Odoo, you need to go to the Avalara Portal to set up your
password:
#. Access the `Avalara portal <https://portal.avalarabrasil.com.br/Login>`_.
#. Click on :guilabel:`Meu primeiro acesso`.
#. Add the email address you used in Odoo to create the Avalara/Avatax account, and then click
#. Add the email address you used in Odoo to create the Avalara/AvaTax account, and then click
:guilabel:`Solicitar Senha`.
#. You will receive an email with a token and a link to create your password. Click on this link and
copy-paste the token to allocate your desired password.
@@ -123,7 +178,7 @@ password:
invoice service, you **must** access the AvaTax portal and upload your certificate there.
.. image:: brazil/avatax-account-configuration.png
:alt: Avatax account configuration.
:alt: AvaTax account configuration.
.. note::
You can transfer |API| credentials. Use this only when you have already created an account in
@@ -139,6 +194,13 @@ The certificate will be synchronized with Odoo, as long as the external identifi
AvaTax portal matches - without special characters - with the CNPJ number, and the identification
number (CNPJ) in Odoo matches with the CNPJ in AvaTax.
.. important::
To issue NFS-e, some cities require that you link the certificate within the City Portal system
before issuing NFS-e from Odoo.
If you receive an error message from the city that says :guilabel:`Your certificate is not linked
to the user`, that means this process needs to be done in the city portal.
Configure master data
---------------------
@@ -187,15 +249,8 @@ be manually added and configured, as the rate may differ depending on the city w
offering the service.
.. important::
Taxes attached to services are not computed by AvaTax. Only goods taxes are computed.
When configuring a tax used for a service that is included in the final price (when the tax is not
added or subtracted on top of the product price), set the :guilabel:`Tax Computation` to
:guilabel:`Percentage of Price Tax Included`, and, on the :guilabel:`Advanced Options` tab, check
the :guilabel:`Included in Price` option.
.. image:: brazil/tax-configuration.png
:alt: Tax configuration.
If you decide to do service taxes manually, you won't be able to issue an NFS-e. To
electronically send an NFS-e, you need to compute taxes using Avalara.
.. warning::
Do not delete taxes, as they are used for the AvaTax tax computation. If deleted, Odoo creates
@@ -212,14 +267,17 @@ Products
~~~~~~~~
To use the AvaTax integration on sale orders and invoices, first specify the following information
on the product:
on the product depending on its intended use:
- :guilabel:`CEST Code` (Code for products subject to ICMS tax substitution).
- :guilabel:`Mercosul NCM Code` (Mercosur Common Nomenclature Product Code).
- :guilabel:`Source of Origin` (Indicates the origin of the product, which can be foreign or
domestic, among other possible options depending on the specific use case).
- :guilabel:`SPED Fiscal Product Type` (Fiscal product type according to SPED list table).
- :guilabel:`Purpose of Use` (Specify the intended purpose of use for this product).
E-Invoice for goods (NF-e)
**************************
- :guilabel:`CEST Code`: Code for products subject to ICMS tax substitution
- :guilabel:`Mercosul NCM Code`: Mercosur Common Nomenclature Product Code
- :guilabel:`Source of Origin`: Indicates the origin of the product, which can be foreign or
domestic, among other possible options depending on the specific use case
- :guilabel:`SPED Fiscal Product Type`: Fiscal product type according to SPED list table
- :guilabel:`Purpose of Use`: Specify the intended purpose of use for this product
.. image:: brazil/product-configuration.png
:alt: Product configuration.
@@ -231,6 +289,16 @@ on the product:
:guilabel:`Product Type` `Service`, :guilabel:`Transportation Cost Type` `Insurance`, `Freight`,
or `Other Costs`).
E-Invoice for services (NFS-e)
******************************
- :guilabel:`Mercosul NCM Code`: Mercosur Common Nomenclature Product Code
- :guilabel:`Purpose of Use`: Specify the intended purpose of use for this product
- :guilabel:`Service Code Origin`: City Service Code where the provider is registered
- :guilabel:`Service Codes`: City Service Code where the service will be provided, if no
code is added, the Origin City Code will be used
- :guilabel:`Labor Assignment`: Defines if your services includes labor
.. _brazil/contacts:
Contacts
@@ -242,23 +310,23 @@ Before using the integration, specify the following information on the contact:
- Select the :guilabel:`Company` option for a contact with a tax ID (CNPJ), or check
:guilabel:`Individual` for a contact with a CPF.
- :guilabel:`Name`.
- :guilabel:`Address` (add :guilabel:`City`, :guilabel:`State`, :guilabel:`Zip Code`,
:guilabel:`Country`).
- :guilabel:`Name`
- :guilabel:`Address`: add :guilabel:`City`, :guilabel:`State`, :guilabel:`Zip Code`,
:guilabel:`Country`
- In the :guilabel:`Street` field, enter the street, number, and any extra address information.
- In the :guilabel:`Street 2` field, enter the neighborhood.
- :guilabel:`Identification Number` (:guilabel:`CNPJ`, :guilabel:`CPF`).
- :guilabel:`Tax ID` (associated with the identification type).
- :guilabel:`IE`: state tax identification number.
- :guilabel:`IM`: municipal tax identification number.
- :guilabel:`SUFRAMA code`: SUFRAMA registration number.
- :guilabel:`Phone`.
- :guilabel:`Email`.
- :guilabel:`Identification Number`: :guilabel:`CNPJ` or :guilabel:`CPF`
- :guilabel:`Tax ID`: associated with the identification type
- :guilabel:`IE`: state tax identification number
- :guilabel:`IM`: municipal tax identification number
- :guilabel:`SUFRAMA code`: SUFRAMA registration number
- :guilabel:`Phone`
- :guilabel:`Email`
.. image:: brazil/contact-configuration.png
:alt: Contact configuration.
:alt: Contact configuration.
.. note::
The :guilabel:`CPF`, :guilabel:`IE`, :guilabel:`IM`, and :guilabel:`SUFRAMA code` fields are
@@ -269,13 +337,25 @@ Before using the integration, specify the following information on the contact:
- :guilabel:`Fiscal Position`: add the AvaTax fiscal position to automatically compute taxes on
sale orders and invoices automatically
- :guilabel:`Tax Regime`: federal tax regime
- :guilabel:`ICMS Taxpayer Type`: taxpayer type determines if the contact is within the ICMS
regime, if it is exempt, or if it is a non-taxpayer
- :guilabel:`ICMS Taxpayer Type`: taxpayer type determines if the contact is within the
:guilabel:`ICMS regime`, :guilabel:`Exempt status`, or :guilabel:`Non-taxpayer`
- :guilabel:`Main Activity Sector`: list of main activity sectors of the contact
.. image:: brazil/contact-fiscal-configuration.png
:alt: Contact fiscal configuration.
#. Configure the following extra :guilabel:`Fiscal Information` if you are going to issue NFS-e:
- Add the :guilabel:`Fiscal Position` for :ref:`AvaTax Brazil <brazil/fiscal-positions>`
- :guilabel:`COFINS Details`: :guilabel:`Taxable, Not Taxable, Taxable with rate 0%, Exempt,
Suspended`
- :guilabel:`PIS Details`: :guilabel:`Taxable, Not Taxable, Taxable with rate 0%, Exempt,
Suspended`
- :guilabel:`CSLL Taxable`: If the company is subject to CSLL or not
.. image:: brazil/contact-fiscal-configuration-nfse.png
:alt: Contact fiscal configuration for NFSe.
.. _brazil/fiscal-positions:
Fiscal positions
@@ -285,8 +365,8 @@ To compute taxes and send electronic invoices on sale orders and invoices, both
:guilabel:`Detect Automatically` and the :guilabel:`Use AvaTax API` options need to be enabled in
the :guilabel:`Fiscal Position`.
The :guilabel:`Fiscal Position` can be configured on the contact or selected when creating a sales
order or an invoice.
The :guilabel:`Fiscal Position` can be configured on the :ref:`contact <brazil/contacts>` or
selected when creating a sales order or an invoice.
.. image:: brazil/fiscal-position-configuration.png
:alt: Fiscal position configuration
@@ -295,8 +375,8 @@ Workflows
=========
This section provides an overview of the actions that trigger `API calls
<https://en.wikipedia.org/wiki/API>`_ for tax computation, and how to send an electronic invoice for
goods (NF-e) for government validation.
<https://en.wikipedia.org/wiki/API>`_ for tax computation, along with instructions on how to send
electronic invoices for goods (NF-e) and services (NFS-e) for government validation.
.. warning::
Please note that each |API| call incurs a cost. Be mindful of the actions that trigger these
@@ -314,7 +394,7 @@ any of the following ways:
- **Quotation confirmation**
Confirm a quotation into a sales order.
- **Manual trigger**
Click on :guilabel:`Compute Taxes Using Avatax`.
Click on :guilabel:`Compute Taxes Using AvaTax`.
- **Preview**
Click on the :guilabel:`Preview` button.
- **Email a quotation / sales order**
@@ -326,8 +406,8 @@ any of the following ways:
Tax calculations on invoices
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Trigger an |API| call to calculate taxes on a customer invoice automatically with AvaTax any of the
following ways:
Trigger an |API| call to calculate taxes on a customer invoice automatically with AvaTax in any of
the following ways:
- **Manual trigger**
Click on :guilabel:`Compute Taxes Using AvaTax`.
@@ -351,21 +431,21 @@ Electronic documents
Customer invoices
~~~~~~~~~~~~~~~~~
To process an electronic invoice for goods (NF-e), the invoice needs to be confirmed and taxes need
to be computed by Avalara. Once that step is done, click on the :guilabel:`Send \& Print` button in
the upper left corner, and a pop-up will appear. Then click on :guilabel:`Process e-invoice` and any
of the other options - :guilabel:`Download` or :guilabel:`Email`. Finally, click on :guilabel:`Send
\& Print` to process the invoice against the government.
To process an electronic invoice for goods (NF-e) or services (NFS-e), the invoice needs to be
confirmed and taxes need to be computed by Avalara. Once that step is done, click on the
:guilabel:`Send & Print` button in the upper left corner. In the pop-up that appears, click on
:guilabel:`Process e-invoice` and any of the other options - :guilabel:`Download` or
:guilabel:`Email`. Finally, click on :guilabel:`Send & Print` to process the invoice with the
government.
Before sending the electronic invoice for goods (NF-e) some fields need to be filled out on the
invoice:
Before sending the electronic invoice for goods (NF-e) or services (NFS-e), some fields need to be
filled out on the invoice:
- :guilabel:`Customer` with all the customer information
- :guilabel:`Payment Method: Brazil` (how the invoice is planned to be paid)
- :guilabel:`Customer`, with all the customer information
- :guilabel:`Payment Method: Brazil`: how the invoice is planned to be paid
- :guilabel:`Fiscal Position` set as the :guilabel:`Automatic Tax Mapping (Avalara Brazil)`
- :guilabel:`Document Type` set as :guilabel:`(55) Electronic Invoice (NF-e)`. This is the only
electronic document supported at the moment. Non-electronic invoices can be registered, and other
document types can be activated if needed
- :guilabel:`Document Type` set as :guilabel:`(55) Electronic Invoice (NF-e)` or :guilabel:`(SE)
Electronic Service Invoice (NFS-e)`
There are some other optional fields that depend on the nature of the transaction. These fields are
not required, so no errors will appear from the government if these optional fields are not
@@ -392,6 +472,9 @@ Credit notes
If a sales return needs to be registered, then a credit note can be created in Odoo to be sent to
the government for validation.
.. note::
Credit notes are only available for electronic invoices for goods (NF-e).
.. seealso::
:ref:`Issue a credit note <accounting/issue-credit-note>`
@@ -401,7 +484,9 @@ Debit Notes
If additional information needs to be included, or values need to be corrected that were not
accurately provided in the original invoice, a debit note can be issued.
.. important::
.. note::
Debit notes are only available for electronic invoices for goods (NF-e).
Only the products included in the original invoice can be part of the debit note. While changes
can be made to the product's unit price or quantity, products **cannot** be added to the debit
note. The purpose of this document is only to declare the amount that you want to add to the
@@ -415,22 +500,37 @@ Invoice cancellation
It is possible to cancel an electronic invoice that was validated by the government.
.. important::
.. note::
Check whether the electronic invoice is still within the cancellation deadline, which may vary
according to the legislation of each state.
This can be done in Odoo by clicking :guilabel:`Request Cancel` and adding a cancellation
:guilabel:`Reason` on the pop-up that appears. If you want to send this cancellation reason to the
customer via email, activate the :guilabel:`E-mail` checkbox.
E-invoices for goods (NF-e)
***************************
Cancel an e-invoice for goods (NF-e) in Odoo by clicking :guilabel:`Request Cancel` and adding a
cancellation :guilabel:`Reason` on the pop-up that appears. If you want to send this cancellation
reason to the customer via email, activate the :guilabel:`E-mail` checkbox.
.. image:: brazil/invoice-cancellation.png
:alt: Invoice cancellation reason in Odoo.
.. note::
This is an electronic cancellation, which means that Odoo will send a request to the government
to cancel the NF-e, and it will then consume one |IAP| credit, as an |API| call occurs.
E-invoices for services (NFS-e)
*******************************
Cancel an e-invoice for services (NFS-e) in Odoo by clicking :guilabel:`Request Cancel`. In this
case, there is no electronic cancellation process, as not every city has this service available. The
user needs to manually cancel this NFS-e on the city portal. Once that step is completed, they can
request the cancellation in Odoo, which will cancel the invoice.
Correction letter
~~~~~~~~~~~~~~~~~
A correction letter can be created and linked to an electronic invoice that was validated by the
government.
A correction letter can be created and linked to an electronic invoice for goods (NF-e) that was
validated by the government.
This can be done in Odoo by clicking :guilabel:`Correction Letter` and adding a correction
:guilabel:`Reason` on the pop-up that appears. To send this correction reason to a customer via
@@ -439,6 +539,9 @@ email, activate the :guilabel:`E-mail` checkbox.
.. image:: brazil/correction-letter.png
:alt: Correction letter reason in Odoo.
.. note::
Correction letters are only available for electronic invoices for goods (NF-e).
Invalidate invoice number range
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -455,6 +558,10 @@ journal, and click the :menuselection:`⚙️ (gear) icon --> Invalidate Number
.. image:: brazil/range-number-invalidation-wizard.png
:alt: Number range invalidation wizard in Odoo.
.. note::
Invalidate invoice number range documents are only available for electronic invoices for goods
(NF-e).
.. note::
The log of the canceled numbers along with the XML file are recorded in the chatter of the
journal.
@@ -468,8 +575,8 @@ is recorded on the :ref:`customer invoices <brazil/electronic-documents>`.
These Brazilian specific fields are:
- :guilabel:`Payment Method: Brazil` (how the invoice is planned to be paid).
- :guilabel:`Document Type` used by your vendor.
- :guilabel:`Document Number` (the invoice number from your supplier).
- :guilabel:`Freight Model` (how goods are planned to be transported - domestic).
- :guilabel:`Transporter Brazil` (who is doing the transportation).
- :guilabel:`Payment Method: Brazil`: how the invoice is planned to be paid
- :guilabel:`Document Type`: used by your vendor
- :guilabel:`Document Number`: the invoice number from your supplier
- :guilabel:`Freight Model`: **NF-e specific** how goods are planned to be transported - domestic
- :guilabel:`Transporter Brazil`: **NF-e specific** who is doing the transportation.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -2,8 +2,35 @@
Hong Kong
=========
Add FPS QR codes to invoices
============================
Configuration
=============
:ref:`Install <general/install>` the following modules to get the latest features of the Hong Kong
localization:
.. list-table::
:header-rows: 1
* - Name
- Technical name
- Description
* - :guilabel:`Hong Kong - Accounting`
- `l10n_hk`
- The base module to manage chart of accounting and localization for Hong Kong.
* - :guilabel:`Hong Kong - Payroll`
- `l10n_hk_hr_payroll`
- Enables :ref:`payroll <hong_kong/payroll>` specific localization features for Odoo *Payroll*
app. This module also installs :guilabel:`Hong Kong - Payroll with Accounting` and
:guilabel:`Documents - Hong Kong Payroll`.
* - :guilabel:`Hong Kong - Payroll with Accounting`
- `l10n_hk_hr_payroll_account`
- Installs the link between Hong Kong payroll and accounting.
* - :guilabel:`Documents - Hong Kong Payroll`
- `documents_l10n_hk_hr_payroll`
- Integrates employee ir56 forms in the Odoo *Documents* app.
FPS QR codes on invoices
========================
:abbr:`FPS (Faster Payment System)` is a payment service platform that allows customers to make
instant domestic payments to individuals and merchants in Hong Kong dollars or Renminbi via online
@@ -12,23 +39,26 @@ and mobile banking.
Activate QR codes
-----------------
Go to :menuselection:`Accounting --> Configuration --> Settings`. Under the :guilabel:`Customer
Payments` section, activate the :guilabel:`QR Codes` feature.
Go to :menuselection:`Accounting app --> Configuration --> Settings`. Under the :guilabel:`Customer
Payments` section, tick the checkbox beside the :guilabel:`QR Codes` feature. Then, click
:guilabel:`Save`.
FPS bank account configuration
------------------------------
Go to :menuselection:`Contacts --> Configuration --> Bank Accounts` and select the bank account for
which you want to activate FPS. Set the :guilabel:`Proxy Type` and fill in the :guilabel:`Proxy
Value` field depending on the type you chose.
Go to :menuselection:`Contacts app --> Configuration --> Bank Accounts section --> Bank Accounts`.
Then select the bank account for FPS activation. Proceed to set the :guilabel:`Proxy Type` and fill
in the :guilabel:`Proxy Value` field, depending on the type chosen.
.. important::
- The account holder's country must be set to Hong Kong on its contact form.
- You could also include the invoice number in the QR code by checking the :guilabel:`Include
Reference` checkbox.
Remember to include the invoice number in the QR code, by ticking the :guilabel:`Include Reference`
checkbox.
.. image:: hong_kong/hk-fps-bank-setting.png
:alt: FPS bank account configuration
:align: center
:alt: FPS bank account configuration.
.. important::
The account holder's country **must** be set to `Hong Kong` on their contact form.
.. seealso::
:doc:`../accounting/bank`
@@ -36,20 +66,475 @@ Value` field depending on the type you chose.
Bank journal configuration
--------------------------
Go to :menuselection:`Accounting --> Configuration --> Journals`, open the bank journal, then fill
out the :guilabel:`Account Number` and :guilabel:`Bank` under the :guilabel:`Journal Entries` tab.
Go to :menuselection:`Accounting app --> Configuration --> Journals` and open the bank journal.
Then, fill out the :guilabel:`Account Number` and :guilabel:`Bank` fields, located in the
:guilabel:`Journal Entries` tab.
.. image:: hong_kong/hk-bank-account-journal-setting.png
:alt: Bank Account's journal configuration
:align: center
:alt: Bank Account's journal configuration.
Issue invoices with FPS QR codes
--------------------------------
When creating a new invoice, open the :guilabel:`Other Info` tab and set the :guilabel:`Payment
QR-code` option to *EMV Merchant-Presented QR-code*.
QR-code` option to :guilabel:`EMV Merchant-Presented QR-code`.
.. image:: hong_kong/hk-qr-code-invoice-setting.png
:alt: Select EMV Merchant-Presented QR-code option
:align: center
:alt: Select EMV Merchant-Presented QR-code option.
Ensure that the :guilabel:`Recipient Bank` is the one you configured, as Odoo uses this field to
generate the FPS QR code.
Ensure that the :guilabel:`Recipient Bank` is configured, as Odoo uses this field to generate the
FPS QR code.
.. _hong_kong/payroll:
Payroll
=======
.. important::
Ensure the :guilabel:`Hong Kong - Payroll` (`l10n_hk_hr_payroll`) module is installed before
proceeding.
Create employees
----------------
Go to the :menuselection:`Employees` app and click :guilabel:`New`. Then, configure the following
fields:
- Under the :guilabel:`Work Information` tab
- :guilabel:`Working Hours`: :guilabel:`HK Standard 40 hours/week` option **must** be selected.
- Under the :guilabel:`Private Information` tab
- :guilabel:`Surname, Given Name, Name in Chinese`: name of the employee.
- :guilabel:`Private Address`: address of the employee.
- :guilabel:`Bank Account Number`: employee's bank account number.
- :guilabel:`Current Rental`: employee's rental records (if rental allowance is applicable).
- :guilabel:`Autopay Type`: :guilabel:`BBAN`, :guilabel:`SVID`, :guilabel:`EMAL`, etc.
- :guilabel:`Autopay Reference`: autopay reference number.
- :guilabel:`Identification No`: HKID of the employee.
- :guilabel:`Gender`: gender of the employee.
.. important::
For the :guilabel:`Bank Account Number`, this account should be set as :guilabel:`Trusted`
before further processing.
To achieve this, click on the right-arrow button next to :guilabel:`Bank Account Number` field.
Set the :guilabel:`Send Money` to :guilabel:`Trusted` by clicking on the toggle.
.. note::
To populate the :guilabel:`Current Rental`, click on the :guilabel:`History` button.
Then, click on :guilabel:`New`. Fill in the relevant details and save the rental record. Upon
saving the record, the rental contract :guilabel:`state` will be visible (at the top-right
corner) and can be set to :guilabel:`Running`.
- Under the :guilabel:`HR Settings` tab:
- :guilabel:`Volunteer Contribution Option`: select either :guilabel:`Only Mandatory
Contribution`, :guilabel:`With Fixed %VC`, or :guilabel:`Cap 5% VC`.
- :guilabel:`MPF Manulife Account`: account number, if applicable.
.. _hong_kong/manage_contracts:
Manage contracts
----------------
Once the new employee has been created, click the :guilabel:`Contracts` smart button on the
employee record, or navigate to :menuselection:`Employees app --> Employees --> Contracts`.
.. note::
Only **one** contract can be active simultaneously per employee, but an employee can be assigned
consecutive contracts during their employment.
The following are critical for setting up a contract:
- :guilabel:`Salary Structure Type`: set as :guilabel:`CAP57: Hong Kong Employee`.
- :guilabel:`Contract Start Date`: start date of employment.
- :guilabel:`Working Schedule`: set as :guilabel:`HK Standard 40 hours/week` (from employee record).
- :guilabel:`Work Entry Source`: select either :guilabel:`Working Schedule`, :guilabel:`Attendances`
or :guilabel:`Planning`. This field determines how the work entries are accounted for in the
payslip.
- :guilabel:`Working Schedule`: the work entries are generated automatically based on the
employee's working schedule.
- :guilabel:`Attendances`: the work entries are generated based on the check-in/out period logged
in the *Attendances*.
- :guilabel:`Planning`: the work entries are generated from planning shifts only.
- Under the :guilabel:`Salary Information` tab
- :guilabel:`Wage Type`: select :guilabel:`Fixed Wage` for Full-time or Part-time employees, or
:guilabel:`Hourly Wage` for employees who are paid hourly.
- :guilabel:`Schedule Pay`: the frequency of payslip issuance.
- :guilabel:`Wage`: :guilabel:`Monthly` or :guilabel:`Hourly` depending on the :guilabel:`Wage
Type`.
- :guilabel:`Internet Subscription`: this is an **optional** field to provide additional internet
allowance on top of the current salary package.
.. important::
Timesheets do **not** impact work entries in Odoo.
Once all information has been setup, set the contract status to :guilabel:`Running` by clicking the
:guilabel:`Running` button in the top-right of the page.
.. image:: hong_kong/hk-contract.png
:align: center
:alt: Hong Kong employment contract.
.. _hong_kong/running_payslips:
Generate payslips
-----------------
Once the employees, and their contracts, are configured, payslips can be generated in the *Payroll*
app.
Odoo provides **four** different salary structures under CAP57 regulation:
#. :guilabel:`CAP57: Employees Monthly Pay`: to process the monthly employee salary.
#. :guilabel:`CAP57: Payment in Lieu of Notice`: to process final payment upon contract termination
using :abbr:`ADW (Average Daily Wage)`.
#. :guilabel:`CAP57: Long Service Payment`: applicable to employees with more than five years of
service upon contract termination.
#. :guilabel:`CAP57: Severance Payment`: applicable to employees with more than two years of service
upon contract termination.
Before running the payslips, the accounts used in the salary rule can be adjusted by navigating to
:menuselection:`Payroll app --> Configuration --> Rules`.
.. image:: hong_kong/hk-salary-rules.png
:align: center
:alt: Hong Kong Salary Rules.
Odoo can create pay runs in two ways: via :ref:`batch <hong_kong/batch_payslips>` or
:ref:`individual <hong_kong/individual_payslips>` payslips.
.. _hong_kong/batch_payslips:
Batch payslips
~~~~~~~~~~~~~~
This method of payslip generation is used for recurring payments, since multiple employee payslips
can be managed at once. Go to :menuselection:`Payroll app --> Payslips --> Batches`.
#. Click on :guilabel:`New`.
#. Enter a :guilabel:`Batch Name` (e.g. `2024 - Jan`) and :guilabel:`Period` (e.g. `01/01/2024` -
`01/31/2024`).
#. Click on :guilabel:`Generate Payslips`.
#. Choose which :guilabel:`Salary Structure` to use for this batch. The department filter allows the
batch to only apply to a specific group of employees.
#. Click on :guilabel:`Generate`.
#. A :guilabel:`Payslips` smart button is created automatically.
Next, click :guilabel:`Create Draft Entry` to generate a draft journal entry found in the
:guilabel:`Other Info` tab of each payslip. A :guilabel:`Confirmation` pop-up window appears asking
:guilabel:`Are you sure you want to proceed?`. Click :guilabel:`Ok` to create the journal entries.
.. _hong_kong/individual_payslips:
Individual payslips
~~~~~~~~~~~~~~~~~~~
Go to :menuselection:`Payroll app --> Payslips --> All Payslips`.
This method of payslip generation is commonly used to handle non-recurring payments (e.g.
:guilabel:`CAP57: Payment in Lieu of Notice`, :guilabel:`CAP57: Long Service Payment` or
:guilabel:`CAP57: Severance Payment`).
#. Click on :guilabel:`New`.
#. Select an :guilabel:`Employee`. When selected, the :guilabel:`Contract` is filled out
automatically.
#. Add a pay :guilabel:`Period`.
#. Select a salary :guilabel:`Structure` (e.g. :guilabel:`CAP57: Employees Monthly Pay`).
#. The :guilabel:`Worked Days & Inputs` tab automatically compute the worked days/hours and time off
leaves that are applicable.
#. Additional payslip items can be added at this time (e.g. :guilabel:`Commissions`,
:guilabel:`Deductions`) under the :guilabel:`Other Inputs` section.
#. Click on :guilabel:`Compute Sheet` button to generate the payslip lines. This button updates
the :guilabel:`Salary Computation` tab.
.. note::
If the work entry for an employee was amended, click the :icon:`fa-cog` :guilabel:`(gear)` icon,
then click :guilabel:`Recompute Whole Sheet` to refresh the payslip's :guilabel:`Worked Days &
Inputs` tab.
The :guilabel:`Salary Computation` tab shows the detailed breakdown of the computation, based on
the salary rules configured for each structure type.
#. :guilabel:`Rent Allowance`: amount derived from the employee's active rental record.
#. :guilabel:`Basic Salary`: amount of base salary provided (after rent allowance deduction).
#. :guilabel:`713 Gross`: net payable amount considering *Commission*, *Internet Allowance*,
*Reimbursements*, *Back-pay*, *Deduction*, etc.
#. :guilabel:`MPF Gross`: net payable amount from 713 gross after consideration of additional
allowances, deductions, and end-of-year payment.
#. :guilabel:`Employee Mandatory Contribution`: employee MPF Contribution.
#. :guilabel:`Employer Mandatory Contribution`: employer MPF Contribution.
#. :guilabel:`Gross`: net payable amount from MPF gross after consideration of MPF deductions.
#. :guilabel:`Net Salary`: final payable amount to be paid to the employee.
.. important::
There are no MPF contributions for the first month. Both employee and employer contribution
starts on second month.
.. image:: hong_kong/hk-salary-computation.png
:align: center
:alt: Hong Kong Salary computation.
Under the :guilabel:`Other Inputs` section in :guilabel:`Worked Days & Inputs` tab, there are
additional manual input types:
- :guilabel:`Back Pay`: additional salary payout can be included under this category.
- :guilabel:`Commission`: the commission earned during the period can be manually entered here.
- :guilabel:`Global Deduction`: a lump-sum deduction from the entire payslip.
- :guilabel:`Global Reimbursement`: a lump-sum reimbursement to the entire payslip.
- :guilabel:`Referral Fee`: the additional bonus offered for any form of business-related referral.
- :guilabel:`Moving Daily Wage`: to override the :abbr:`ADW (Average Daily Wage)` value used for
leaves computation.
- :guilabel:`Skip Rent Allowance`: if set, the rental allowance is excluded from the current
payslip.
- :guilabel:`Custom Average Monthly Salary`: to override the average monthly salary used for
end-of-year payment (rule is only applicable to payslips generated in December).
- :guilabel:`Lieu of Notice Period (Months)`: only applicable to :guilabel:`CAP57: Payment in Lieu
of Notice` salary structure. By default, the final payout is set as 1-month. Use the
:guilabel:`Count` field under the :guilabel:`Other Inputs` section to set a different notice
period duration.
Once the payslips are ready, click on :guilabel:`Compute Sheet`, followed by :guilabel:`Create Draft
entry` to generate a draft journal entry found in the :guilabel:`Other Info` tab of the payslip.
Pay employees
-------------
Once the draft journal entries have been posted, the company can now pay the employees. The user can
choose between **two** different *payment methods*:
- From the employee's payslip (:menuselection:`Payroll app --> Payslips --> All Payslips`), once the
payslip's journal entry has been posted, click :guilabel:`Register Payment`. The process is the
same as :doc:`paying vendor bills <../accounting/payments>`. Select the desired bank journal and
payment method, then later reconcile the payment with the corresponding bank statement.
- For batch payments (:menuselection:`Payroll app --> Payslips --> Batches`), once all draft journal
entries from the batch are confirmed, click :guilabel:`Mark as Paid` to post the payment journal
entry. Then :doc:`create a payment <../accounting/payments>` in the *Accounting* app, and
reconcile accordingly.
Attendances and hourly wage
---------------------------
To configure the contract for an employee paid hourly using the *Attendances* app for hours
tracking, navigate to :menuselection:`Payroll app --> Contracts --> Contracts`.
Create a new :ref:`contract <hong_kong/manage_contracts>`. It is important to remember to set the
:guilabel:`Work Entry Source` as :guilabel:`Attendances`, and :guilabel:`Wage Type` as
:guilabel:`Hourly Wage`.
To record the hours logged by the employee using *Attendances* app:
#. Go to :menuselection:`Attendances app`.
#. The employee can check-in/out, via the kiosk mode and the time will be logged automatically.
#. In the :menuselection:`Payroll app`, review the attendance work entries generated from
:menuselection:`Payroll app --> Work Entries --> Work Entries`.
#. Next, generate the :ref:`payslips <hong_kong/running_payslips>` and process the payment.
.. image:: hong_kong/hk-attendance-work-entry.png
:align: center
:alt: Hong Kong Attendance Work Entry.
.. image:: hong_kong/hk-attendance-payslip.png
:align: center
:alt: Hong Kong Attendance Payslip.
Time Off with Payroll
---------------------
The work entry types and time off types are fully integrated between the *Time Off* and
*Payroll* apps. There are several default time off types and work entry types specific to
Hong Kong which are installed automatically along with the *Hong Kong - Payroll* module.
Go to :menuselection:`Payroll app --> Configuration --> Work Entry Types` and click :guilabel:`New`.
There are two checkboxes to be considered when setting up the work entry type:
- :guilabel:`Use 713`: Include this leave type as part of 713 computation.
- :guilabel:`Non-full pay`: 80% of the :abbr:`ADW (Average Daily Wage)`.
.. image:: hong_kong/hk-work-entry-type.png
:align: center
:alt: Hong Kong Work Entry Type.
.. seealso::
:ref:`Creating and configuring work entry types <payroll/work-entries>`
Understanding 713 Ordinance
---------------------------
The *Hong Kong - Payroll* module is compliant with 713 Ordinance which relates to the
:abbr:`ADW (Average Daily Wage)` computation to ensure fair compensation for employees.
The ADW computation is as follows:
.. figure:: hong_kong/hk-adw.png
:alt: Hong Kong ADW Formula.
:abbr:`ADW (Average Daily Wage)` equals the total wage in a 12-month period, minus the wages of
non-full pay, divided by the total days in a 12-month period minus the days of non-full pay.
.. note::
For 418 compliance, there is no automated allocation of the *Statutory Holiday* entitlement to
the employees. As soon as 418 requirements are met, manually allocate the leaves, via the *Time
Off* app.
.. note::
Before generating payslips, ensure the statuses are :guilabel:`Done` to validate the outcome.
.. list-table::
:header-rows: 1
* - Period
- Days
- Wage
- Commission
- Total
- ADW
- Leave Value
* - Jan
- 31
- $20200
- $0
- $20200
- $651.61 ($20200/31)
- N/A
* - Feb
- 28
- $20200
- $5000
- $25200
- $769.49 ($45400/59)
- N/A
* - Mar (One Day Annual Leave)
- 31
- $20324.33
- $0
- $20324.33
- $730.27 ($65724.33/90)
- $769.49
* - Apr (One Day 80% Sick Leave)
- 30
- $20117.56
- $0
-
-
- $584.22 ($730.27*0.8)
.. example::
Here is an example demonstrating the 713 logic:
- **Jan**: Generate a payslip with a monthly wage of $20200. The :abbr:`ADW (Average Daily Wage)`
is always computed on a cumulative basis of the trailing 12-months.
- **Feb**: Generate a similar payslip, but add an :guilabel:`Other Input Type` for the
:guilabel:`Commission`.
- **Mar**: Apply for **one** full-paid annual leave in March. The salary compensation for the
leave taken is based on :abbr:`ADW (Average Daily Wage)` thus far.
.. image:: hong_kong/hk-march-713.png
:align: center
:alt: Hong Kong March 713.
- **Apr**: Apply for a 1-day non-full pay leave in April. Since this is a non-full pay leave, the
:abbr:`ADW (Average Daily Wage)` is computed accordingly.
.. image:: hong_kong/hk-apr-713.png
:align: center
:alt: Hong Kong April 713.
.. note::
The value of :abbr:`ADW (Average Daily Wage)` is computed in the backend, and not be visible to
the user.
.. seealso::
- `HK 713 Ordinance <https://www.labour.gov.hk/eng/public/wcp/ConciseGuide/Appendix1.pdf>`_
- `HK 418 Ordinance <https://www.workstem.com/hk/en/blog/418-regulations/>`_
Generate reports
----------------
Before generating the below reports, setup the following in :menuselection:`Settings app -->
Payroll`.
Configure the following in the :guilabel:`Accounting` section:
- Tick the :guilabel:`Payroll HSBC Autopay` checkbox.
- :guilabel:`Autopay Type`: Set as :guilabel:`H2H Submission`.
- Select the :guilabel:`Bank Account` to use.
Configure the following in the :guilabel:`HK Localization` section:
- :guilabel:`Employer's Name shows on reports`
- :guilabel:`Employer's File Number`
- :guilabel:`Manulife MPF Scheme`
.. image:: hong_kong/hk-report-setup.png
:align: center
:alt: Hong Kong Payroll Settings.
IRD report
~~~~~~~~~~
There are a total of **four** IRD reports available:
- :guilabel:`IR56B`: employer's Return of Remuneration and Pensions.
- :guilabel:`IR56E`: notification of Commencement of Employment.
- :guilabel:`IR56F`: notification of Ceasation of Employment (remaining in HK).
- :guilabel:`IR56G`: notification of Ceasation of Employment (departing from HK permanently).
Go to :menuselection:`Payroll app --> Reporting`, and select one of the :guilabel:`IR56B/E/F/G
Sheet` options:
#. Click on :guilabel:`New`.
#. Fill in the relevant information for the IRD report.
#. Click on :guilabel:`Populate`, and the :guilabel:`Eligible Employees` smart button appears.
#. The :guilabel:`Employee Declarations` status is :guilabel:`Draft` and changed to
:guilabel:`Generated PDF` status once the schedule runs.
#. Once the PDF is generated, the IRD form may be downloaded.
.. image:: hong_kong/hk-ir56b.png
:align: center
:alt: Hong Kong IR56B report.
.. note::
The scheduled action called *Payroll: Generate pdfs* can be manually triggered. It is set by
default to run the PDF generation monthly.
Manulife MPF sheet
~~~~~~~~~~~~~~~~~~
Go to :menuselection:`Payroll app --> Reporting --> Manulife MPF Sheet`.
#. Click on :guilabel:`New`.
#. Select the relevant :guilabel:`Year`, :guilabel:`Month`, and :guilabel:`Sequence No.`.
#. Click on :guilabel:`Create XLSX`.
#. The *Manulife MPF XLSX* file is then generated, and available for download.
.. image:: hong_kong/hk-manulife-sheet.png
:align: center
:alt: Hong Kong Manulife Sheet.
.. note::
Odoo will not be developing further reports for other MPF trustee as there will soon be an
eMPF platform setup by the local government.
.. seealso::
`eMPF <https://www.mpfa.org.hk/en/empf/overview>`_
HSBC autopay report
~~~~~~~~~~~~~~~~~~~
If *HSBC Autopay* is selected as the batch payment method, click on :guilabel:`Create HSBC Autopay
Report`, and fill in the mandatory fields:
.. image:: hong_kong/hk-generate-autopay.png
:align: center
:alt: Hong Kong HSBC Autopay wizard.
This creates an :file:`.apc` file format which can be uploaded to the HSCB portal for processing.

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -108,6 +108,10 @@ The contract template forms the basis of an offer, and can be modified for speci
employees, when necessary. If a contract template is created or modified in the *Payroll*
application, the changes are also reflected in the *Recruitment* application.
.. important::
To access contract templates, the *Salary Configurator* (`hr_contract_salary`) module **must** be
:ref:`installed <general/install>`.
To view all the current contract templates in the database, navigate to :menuselection:`Payroll app
--> Configuration --> Contracts: Templates`.
@@ -383,7 +387,7 @@ by typing in the time.
`2:00 PM` would be entered as `14:00`.
If the working time should be in a two-week configuration, click the :guilabel:`Switch to 2 weeks
calendar` button in the top left. This creates entries for an :guilabel:`Even week` and an
calendar` button in the top-left. This creates entries for an :guilabel:`Even week` and an
:guilabel:`Odd week`.
.. image:: payroll/new-working-schedule.png
@@ -411,12 +415,13 @@ end of year bonus. Both the `Regular Pay` structure and `End of Year Bonus` stru
within the `Employee` structure type.
The different :guilabel:`Structure Types` can be seen by navigating to :menuselection:`Payroll app
--> Configuration --> Salary --> Structure Types`.
--> Configuration --> Salary: Structure Types`.
There are two default structure types configured in Odoo: :guilabel:`Employee` and
:guilabel:`Worker`. Typically, :guilabel:`Employee` is used for salaried employees, which is why the
wage type is :guilabel:`Monthly Fixed Wage`, and :guilabel:`Worker` is typically used for employees
paid by the hour, so the wage type is :guilabel:`Hourly Wage`.
Two default structure types are configured in Odoo: :guilabel:`Employee` and :guilabel:`Worker`.
Typically, :guilabel:`Employee` is used for salaried employees, which is why the wage type is
:guilabel:`Monthly Fixed Wage`, and :guilabel:`Worker` is typically used for employees paid by the
hour, so the wage type is :guilabel:`Hourly Wage`.
.. image:: payroll/structure-type.png
:align: center

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@@ -1,19 +1,21 @@
=====================================
Use lots to manage groups of products
=====================================
===========
Lot numbers
===========
*Lots* are one of the two ways to identify and track products in Odoo. A lot usually indicates a
specific batch of an item that was received, is currently stored, or was shipped from a warehouse,
but can also pertain to a batch of products manufactured in-house, as well.
.. |PO| replace:: :abbr:`PO (Purchase Order)`
.. |SO| replace:: :abbr:`SO (Sales Order)`
.. |DO| replace:: :abbr:`DO (Delivery Order)`
.. |list| replace:: :icon:`fa-list` :guilabel:`(list)`
Manufacturers assign lot numbers to groups of products that have common properties; this can lead to
multiple goods sharing the same lot number. This helps to identify a number of products in a single
group, and allows for end-to-end traceability of these products through each step in their
lifecycles.
*Lots* are one of the two ways to identify and track products in Odoo. They typically represent a
specific batch of products that were received, stored, shipped, or manufactured in-house.
Lots are useful for products that are manufactured or received in large quantities (such as clothes
or food), and can be used to trace a product back to a group. This is especially useful when
managing product recalls or expiration dates.
Manufacturers assign lot numbers to groups of products sharing common properties, facilitating
end-to-end traceability through their lifecycles.
Lots are useful for managing large quantities of manufactured or received products, aiding in
tracing items back to their group, particularly for product recalls or :doc:`expiration dates
<expiration_dates>`.
.. seealso::
:doc:`serial_numbers`
@@ -21,236 +23,313 @@ managing product recalls or expiration dates.
Enable lots & serial numbers
============================
To track products using lots, the *Lots & Serial Numbers* feature must be enabled. Go to
the :menuselection:`Inventory app --> Configuration --> Settings`, scroll down to the
:guilabel:`Traceability` section, and click the box next to :guilabel:`Lots & Serial Numbers`. Then,
click the :guilabel:`Save` button to save changes.
To track products using lots, enable the *Lots & Serial Numbers* feature. Go to the
:menuselection:`Inventory app --> Configuration --> Settings`, scroll down to the
:guilabel:`Traceability` section, and tick the checkbox next to :guilabel:`Lots & Serial Numbers`.
Then, click :guilabel:`Save`.
.. image:: lots/lots-enabled-lots-setting.png
.. seealso::
- :doc:`Tracking expiration dates <expiration_dates>`
- :ref:`Print GS1 barcodes for lots and serial numbers <barcode/operations/gs1-lots>`
.. image:: lots/enabled-lots-setting.png
:align: center
:alt: Enabled lots and serial numbers feature in inventory settings.
.. _inventory/management/track_products_by_lots:
Track products by lots
======================
Track by lots
=============
Once the :guilabel:`Lots & Serial Numbers` setting has been activated, individual products can now
be configured to be tracked using lots. To do this, go to the :menuselection:`Inventory app -->
Products --> Products`, and choose a product.
Once the :guilabel:`Lots & Serial Numbers` feature is activated, configure individual products to be
tracked using lots. To do this, go to :menuselection:`Inventory app --> Products --> Products`, and
choose a product to configure.
Once on the product form, click :guilabel:`Edit` to make changes to the form. Then, click the
:guilabel:`Inventory` tab. In the :guilabel:`Traceability` section, click :guilabel:`By Lots`. Then,
click :guilabel:`Save` to save changes. Existing or new lot numbers can now be assigned to
newly-received or manufactured batches of this product.
On the product form, go to the :guilabel:`Inventory` tab. In the :guilabel:`Traceability` section,
select the :guilabel:`By Lots` option in the :guilabel:`Tracking` field. Now, new or existing lot
numbers can be assigned to newly-received or manufactured batches of this product.
.. seealso::
:doc:`expiration_dates`
.. important::
If a product has stock on-hand prior to activating tracking by lots or serial numbers, an
inventory adjustment might need to be performed to assign lot numbers to the existing stock.
If a product has stock on-hand prior to activating tracking by lots or serial numbers, a warning
message appears. Use an :doc:`inventory adjustment <reassign>` to assign lot numbers to existing
products in stock.
.. image:: lots/lots-tracking-product-form.png
.. image:: lots/tracking-product-form.png
:align: center
:alt: Enabled tracking by lots feature on product form.
Create new lots for products already in stock
---------------------------------------------
Assign lots for shipping and receiving
======================================
New lots can be created for products already in stock with no assigned lot number. To do this, go to
the :menuselection:`Inventory app --> Products --> Lots/Serial Numbers`, and click
:guilabel:`Create`. Doing so reveals a separate page where a new :guilabel:`Lot/Serial Number` is
generated automatically.
Assign new lot numbers to :ref:`incoming goods <inventory/product_management/assign-lots>` on the
receipt form. When shipping :ref:`outgoing goods
<inventory/product_management/assign-lots-delivery>`, select products with specific lot numbers on
the delivery order form.
.. _inventory/product_management/assign-lots:
On receipts
-----------
Assigning new or existing lot numbers to incoming goods can be done directly on receipts.
To begin, go to the :menuselection:`Purchase` app to `create and confirm
<https://www.youtube.com/watch?v=o_uI718P1Dc>`_ a |PO| for products tracked by lot numbers. Then,
click the :guilabel:`Receipt` smart button that appears at the top of the page to navigate to the
warehouse receipt form.
.. note::
Alternatively, navigate to an existing receipt by going to the :menuselection:`Inventory` app,
clicking the :guilabel:`Receipts` Kanban card, and choosing the desired receipt.
.. important::
Clicking :guilabel:`Validate` before assigning a lot number triggers an error, indicating that a
lot number **must** be assigned before validating the receipt.
.. image:: lots/user-error.png
:align: center
:alt: Add lot/serial number user error popup.
On the receipt form, on the product line in the :guilabel:`Operations` tab, select the |list| icon
to the right of the product that is tracked by lot numbers.
.. image:: lots/list-icon.png
:align: center
:alt: Show the bulleted list icon on the product line.
Doing so opens the :guilabel:`Open: Stock move` pop-up window, where the :guilabel:`Lot/Serial
Number` and :guilabel:`Quantity` are assigned.
The two ways to assign lot numbers: **manually** and **importing**.
Manual assignment
~~~~~~~~~~~~~~~~~
To manually assign lot numbers, click :guilabel:`Add a line`. Input the :guilabel:`Lot/Serial
Number`, :guilabel:`Store To` location for the lot, :guilabel:`Quantity`, and :guilabel:`Destination
Package`, if any.
.. note::
To assign multiple lot numbers, or store to multiple locations, click :guilabel:`Add a line`, and
type a new :guilabel:`Lot/Serial Number` for additional quantities. Repeat until the total in the
:guilabel:`Quantity` column matches the :guilabel:`Demand` at the top.
.. image:: lots/assign-lots-popup.png
:align: center
:alt: Assign lot number detailed operations popup.
Import lots
~~~~~~~~~~~
In the :guilabel:`Open: Stock move` pop-up window, click :guilabel:`Import Serials/Lots`, then paste
the bulk lot numbers, in the :guilabel:`Lots/Serial numbers` field.
.. figure:: lots/lots-excel-spreadsheet.png
:align: center
:alt: List of lot numbers copied on excel spreadsheet.
List of lot numbers copied on *Google* spreadsheets.
.. figure:: lots/bulk-sn.png
:align: center
:alt: Lot numbers copied to the lot number line.
Lot numbers pasted to the "Lots/Serial numbers" field, in the **Import Lots** pop-up window.
Tick the :guilabel:`Keep current lines` checkbox to generate *additional* lot numbers in the
:guilabel:`Open: Stock move` pop-up window. To replace the lot numbers in the list, leave the
:guilabel:`Keep current lines` option unticked.
Finally, click :guilabel:`Generate`.
Once all product quantities have been assigned a lot number, click :guilabel:`Save` to close the
pop-up window. Then, click :guilabel:`Validate` on the receipt form.
.. seealso::
:ref:`Traceability report for lot numbers <inventory/product_management/lot-traceability>`
.. _inventory/product_management/assign-lots-delivery:
On delivery orders
------------------
Odoo makes it possible to specify which lot numbers for a product are chosen for outgoing shipment
on a delivery order form.
To begin, create or select an existing quotation from the :menuselection:`Sales` app. After
confirming the |SO|, the :guilabel:`Delivery` smart button becomes available. Click the
:guilabel:`Delivery` smart button to view the warehouse receipt form for that specific |SO|.
.. note::
Alternatively, navigate to delivery orders by going to the :menuselection:`Inventory` app, and
clicking the :guilabel:`Delivery Orders` kanban card.
Clicking the :guilabel:`Delivery` smart button opens the the delivery order form, where lot numbers
are picked for delivery. In the :guilabel:`Operations` tab, click the |list| icon to the right of
the product that is tracked by lot numbers. Clicking that icon reveals a :guilabel:`Open: Stock
move` pop-up window.
In the pop-up window, the chosen lot number and its storage location is displayed in the
:guilabel:`Pick From` column, with the with the full :guilabel:`Quantity` taken from that specific
lot (if there is enough stock in that particular lot).
If there is insufficient stock in that lot, or if partial quantities of the :guilabel:`Demand`
should be taken from multiple lots, change the :guilabel:`Quantity` directly.
.. note::
The lot automatically chosen for delivery orders varies, depending on the selected removal
strategy (:abbr:`FIFO (First In, First Out)`, :abbr:`LIFO (Last In, First Out)`, or :abbr:`FEFO
(First Expiry, First Out)`). It also depends on the ordered quantity, and whether the lot's
on-hand quantity is enough to fulfill the order.
.. seealso::
:doc:`../../warehouses_storage/removal_strategies`
Repeat the above steps to select enough lots to fulfill the :guilabel:`Demand`, and click
:guilabel:`Save` to close the pop-up window. Lastly, click the :guilabel:`Validate` button on the
|DO| to deliver the products.
.. image:: lots/pick-from-lots.png
:align: center
:alt: Popup for source lot number on sales order.
.. seealso::
:ref:`Traceability report for lot numbers <inventory/product_management/lot-traceability>`
Lot management
==============
Manage and view existing lot numbers for products in the :guilabel:`Lot/Serial Numbers` dashboard by
going to :menuselection:`Inventory app --> Products --> Lots/Serial Numbers`.
By default, lot numbers are grouped by product, and selecting the drop-down menu for each product
displays the existing lot numbers. Select a lot number to :ref:`modify or add details
<inventory/product_management/edit-lot>` linked to the lot. Lot numbers can also be :ref:`created
<inventory/product_management/create-new-lot>` from this page, by clicking the :guilabel:`New`
button.
.. figure:: lots/lot-dashboard.png
:align: center
:alt: Show the "Lot/Serial Number" dashboard.
Display lot numbers, grouped by products, on the **Lot/Serial Number** dashboard.
.. _inventory/product_management/edit-lot:
Modify lot
----------
Clicking a lot from the :guilabel:`Lot/Serial Number` dashboard reveals a separate page where
additional information can be provided about the lot.
.. tip::
Odoo automatically generates a new :guilabel:`Lot/Serial Number` to follow the most recent
number. However, it can be edited, by clicking the line under the :guilabel:`Lot/Serial Number`
field, and changing the generated number to any desired one.
On the lot number form, the following fields can be modified:
- :guilabel:`Lot/Serial Number`: change the lot number linked to the :guilabel:`Product`
- :guilabel:`Internal Reference`: records an alternative lot/serial number used within the warehouse
that differs from the one used by the supplier manufacturer.
- :guilabel:`Company`: specify the company where the lot number is available.
- :guilabel:`Description`: add extra details about the lot or serial number in this text field.
.. important::
On existing lots, the :guilabel:`Product` and :guilabel:`On Hand Quantity` fields **cannot** be
modified, as the lot numbers are linked with existing stock moves.
.. image:: lots/lot-number.png
:align: center
:alt: Show the lot number form.
.. seealso::
:doc:`Set expiration dates for lots <expiration_dates>`
Add property
~~~~~~~~~~~~
To add custom fields to lots for enhanced traceability, there are two methods of adding properties
on a lot number form:
#. Click the :icon:`fa-cog` :guilabel:`(cog)` icon at the top-left of the page, then select
:icon:`fa-cogs` :guilabel:`Add Properties` from the drop-down menu.
#. Click the :icon:`fa-plus` :guilabel:`Add a Property` button, located below the existing fields.
Name and :doc:`configure the new field <../../../../productivity/knowledge/properties>`. Once
finished, enter the property value in the new field.
.. example::
The new property, `Wood type`, is added. The value is recorded as `Cherry wood`.
.. image:: lots/add-properties.png
:align: center
:alt: Show the "Add Properties" button on a lot number form.
.. seealso::
:doc:`Configuring custom properties <../../../../productivity/knowledge/properties>`
.. _inventory/product_management/create-new-lot:
Reserve lot number for a product
--------------------------------
To create a lot number for a product, begin by going to :menuselection:`Inventory app --> Products
--> Lot/Serial Numbers`, and click :guilabel:`New`.
.. important::
Creating a lot number reserves it for a product but **does not** assign it. To assign lot
numbers, refer to the section on :ref:`assigning lot numbers on receipts
<inventory/product_management/assign-lots>`.
.. tip::
While Odoo automatically generates a new :guilabel:`Lot/Serial Number` to follow the most recent
number, it can be edited and changed to any desired number, by clicking the line under the
:guilabel:`Lot/Serial Number` field, and changing the generated number.
:guilabel:`Lot/Serial Number` field on the lot form, and changing the generated number.
Once the new :guilabel:`Lot/Serial Number` is generated, click the blank field next to
:guilabel:`Product` to reveal a drop-down menu. From this menu, select the product to which this new
number will be assigned.
This form also provides the option to adjust the :guilabel:`Quantity`, assign a unique
:guilabel:`Internal Reference` number (for traceability purposes), and assign this specific lot or
serial number configuration to a specific website in the :guilabel:`Website` field (if working in a
multi-website environment).
.. example::
The lot number, `000001`, is created for the product, `Drawer Black`.
A detailed description of this specific lot or serial number can also be added in the
:guilabel:`Description` tab below.
When all desired configurations are complete, click the :guilabel:`Save` button to save all changes.
.. image:: lots/lots-new-lot-number.png
:align: center
:alt: New lot number creation form with assigned product.
After a new lot number has been created, saved, and assigned to the desired product, navigate back
to the product form in the :menuselection:`Inventory` app, by going to :menuselection:`Products -->
Products`, and selecting the product to which this newly-created lot number was just assigned.
On that product's detail form, click the :guilabel:`Lot/Serial Numbers` smart button to view the new
lot number. When additional quantity of this product is received or manufactured, this new lot
number can be selected and assigned to it.
Manage lots for shipping and receiving
======================================
Lot numbers can be assigned for both **incoming** and **outgoing** goods. For incoming goods, lot
numbers are assigned directly on the purchase order form. For outgoing goods, lot numbers are
assigned directly on the sales order form.
.. _inventory/product_management/receipt-lots:
Manage lots on receipts
-----------------------
Assigning lot numbers to **incoming** goods can be done directly from the purchase order (PO).
To create a :abbr:`PO (purchase order)`, go to :menuselection:`Purchase app --> Create`. Doing so
reveals a new, blank request for quotation (RFQ) form.
On this :abbr:`RFQ (request for quotation)`, fill out the necessary information by adding a
:guilabel:`Vendor`, and adding the desired products to the :guilabel:`Product` lines, by clicking
:guilabel:`Add a product` (under the :guilabel:`Products` tab).
Choose the desired quantity of the product to order by changing the number in the
:guilabel:`Quantity` column.
Once the :abbr:`RFQ (request for quotation)` has been filled out, click :guilabel:`Confirm Order`.
When the :abbr:`RFQ (request for quotation)` is confirmed, it becomes a :guilabel:`Purchase Order`,
and a :guilabel:`Receipt` smart button appears. Click the :guilabel:`Receipt` smart button to be
taken to the warehouse receipt form.
.. note::
Clicking :guilabel:`Validate` before assigning a lot number to the ordered product quantities
will result in a :guilabel:`User Error` pop-up. The pop-up requires entry of a lot or serial
number for the ordered products. The :abbr:`RFQ (request for quotation)` **cannot** be validated
without a lot number being assigned.
.. image:: lots/lots-user-error-popup.png
:align: center
:alt: Add lot/serial number user error popup.
From here, click the :guilabel:`Additional Options` menu, represented by a :guilabel:`hamburger
(four horizontal lines)` icon, located to the right of the :guilabel:`Unit of Measure` column in the
:guilabel:`Operations` tab). Clicking that icon reveals a :guilabel:`Detailed Operations` pop-up.
In this pop-up, configure a number of different fields, including the assignation of a lot number,
under the :guilabel:`Lot/Serial Number Name` column, located at the bottom of the pop-up.
There are two ways to assign lot numbers: **manually** and **copy/paste**.
- **Manually assign lot numbers**: Click :guilabel:`Add a line` and choose the location the products
will be stored in under the :guilabel:`To` column. Then, type a new :guilabel:`Lot Number Name`
and set the :guilabel:`Done` quantity.
.. image:: lots/lots-assign-lot-number-popup.png
.. image:: lots/new-lot-number.png
:align: center
:alt: Assign lot number detailed operations popup.
:alt: New lot number creation form with assigned product.
.. note::
If quantities should be processed in multiple locations and lots, click :guilabel:`Add a line`
and type a new :guilabel:`Lot Number Name` for additional quantities. Repeat until the
:guilabel:`Quantity Done` matches the :guilabel:`Demand`.
After a new lot number has been created, saved, and assigned to the desired product, the lot number
is saved as an existing lot number linked to the product, and can be selected when :ref:`assigning
lot numbers to products on a receipt <inventory/product_management/assign-lots>`, or when making an
inventory adjustment.
- **Copy/paste lot numbers from a spreadsheet**: Populate a spreadsheet with all of the lot numbers
received from the supplier (or manually chosen to assign upon receipt). Then, copy and paste them
in the :guilabel:`Lot/Serial Number Name` column. Odoo will automatically create the necessary
number of lines based on the amount of numbers pasted in the column. From here, the :guilabel:`To`
locations and :guilabel:`Done` quantities can be manually entered in each of the lot number lines.
.. example::
After creating the lot number, `000001` appears as an option for `Drawer Black` when assigning
lot numbers on the :guilabel:`Inventory Adjustment` page.
.. image:: lots/lots-excel-spreadsheet.png
.. image:: lots/inventory-adjustment.png
:align: center
:alt: List of lot numbers copied on excel spreadsheet.
Once all product quantities have been assigned a lot number, click :guilabel:`Confirm` to close the
pop-up. Then, click :guilabel:`Validate`.
A :guilabel:`Traceability` smart button appears upon validating the receipt. Click the
:guilabel:`Traceability` smart button to see the updated :guilabel:`Traceability Report`, which
includes: a :guilabel:`Reference` document, the :guilabel:`Product` being traced, the
:guilabel:`Lot/Serial #` assigned, and more.
Manage lots on delivery orders
------------------------------
Assigning lot numbers to **outgoing** goods can be done directly from the sales order (SO).
To create an :abbr:`SO (sales order)`, go to the :menuselection:`Sales app --> Create`. Doing so
reveals a new, blank quotation form.
On this blank quotation form, fill out the necessary information by adding a :guilabel:`Customer`,
and adding products to the :guilabel:`Product` lines (in the :guilabel:`Order Lines` tab) by
clicking :guilabel:`Add a product`.
Then, choose the desired quantity to sell by changing the number in the :guilabel:`Quantity` column.
Once the quotation has been filled out, click the :guilabel:`Confirm` button to confirm the
quotation. When the quotation is confirmed, it becomes an :abbr:`SO (sales order)`, and a
:guilabel:`Delivery` smart button appears.
Click the :guilabel:`Delivery` smart button to view the warehouse receipt form for that specific
:abbr:`SO (sales order)`.
From here, click the :guilabel:`Additional Options` menu, represented by a `hamburger` icon (four
horizontal lines, located to the right of the :guilabel:`Unit of Measure` column in the
:guilabel:`Operations` tab). Clicking that icon reveals a :guilabel:`Detailed Operations` pop-up.
In the pop-up, a :guilabel:`Lot/Serial Number` will be chosen by default, with the full
:guilabel:`Reserved` quantity taken from that specific lot (if there is enough stock in that
particular lot).
If there is insufficient stock in that lot, or if partial quantities of the :guilabel:`Demand`
should be taken from multiple lots, change the quantity in the :guilabel:`Done` column to only
include that specific part of the total quantity.
.. note::
The lot automatically chosen for delivery orders varies, depending on the selected removal
strategy (:abbr:`FIFO (First In, First Out)`, :abbr:`LIFO (Last In, First Out)`, or :abbr:`FEFO
(First Expiry, First Out)`). It will also depend on the quantity ordered, and if there is enough
quantity in one lot to fulfill the order.
.. seealso::
:doc:`/applications/inventory_and_mrp/inventory/warehouses_storage/removal_strategies`
Then, click :guilabel:`Add a line`, select an additional (different) :guilabel:`Lot/Serial Number`,
apply the rest of the :guilabel:`Done` quantities, and click :guilabel:`Confirm` to close the
pop-up. Lastly, click the :guilabel:`Validate` button to deliver the products.
.. image:: lots/lots-detailed-operations-popup.png
:align: center
:alt: Detailed operations popup for source lot number on sales order.
Upon validating the delivery order, a :guilabel:`Traceability` smart button appears. Click the
:guilabel:`Traceability` smart button to see the updated :guilabel:`Traceability Report`, which
includes a :guilabel:`Reference` document, the :guilabel:`Product` being traced, the
:guilabel:`Date`, and the :guilabel:`Lot/Serial #` assigned.
The :guilabel:`Traceability Report` can also include a :guilabel:`Reference` receipt from the
previous purchase order, if the product quantities shared the same lot number.
:alt: Show how to assign lot numbers on the Inventory Adjustment page.
Manage lots for different operations types
==========================================
In Odoo, the creation of new lots is only allowed upon **receiving** products from a purchase order,
by default. **Existing** lot numbers cannot be used.
For sales orders, the opposite is true: new lot numbers cannot be created on the delivery order,
only existing lot numbers can be used.
By default, new lots can only be created when receiving products, and existing lot numbers cannot
be used. For sales orders, only existing lot numbers can be utilized, and new ones cannot be created
on the delivery order.
To change the ability to use new (or existing) lot numbers on any operation type, go to the
:menuselection:`Inventory app --> Configuration --> Operations Types`, and select the desired
:guilabel:`Operation Type`.
operation type.
For :guilabel:`Receipts`, found on the :menuselection:`Operations Types` page, the :guilabel:`Use
Existing Lots/Serial Numbers` option can be enabled, by clicking :guilabel:`Edit`, and then clicking
the checkbox beside the :guilabel:`Use Existing Lots/Serial Numbers` option (in the
:guilabel:`Traceability` section). Lastly, click the :guilabel:`Save` button to save the changes.
On the operation type form, under the :guilabel:`Lots/Serial Numbers` section, tick the
:guilabel:`Create New` checkbox to enable new lot numbers to be created during this operation type.
Choose :guilabel:`Use Existing ones` if only existing lot numbers can be selected.
For :guilabel:`Delivery Orders`, the :guilabel:`Create New Lots/Serial Numbers` option can be
enabled, by clicking :guilabel:`Edit`, and clicking the checkbox beside the :guilabel:`Create New
Lots/Serial Numbers` option. Be sure to click the :guilabel:`Save` button to save all changes.
.. image:: lots/lots-operations-type-form.png
.. image:: lots/operation-type-form.png
:align: center
:alt: Enabled traceability setting on operations type form.
@@ -258,11 +337,13 @@ Lots/Serial Numbers` option. Be sure to click the :guilabel:`Save` button to sav
For inter-warehouse transfers involving products tracked by lots, it can be useful to enable the
:guilabel:`Use Existing Lots/Serial Numbers` option for warehouse receipts.
Lots traceability
=================
.. _inventory/product_management/lot-traceability:
Traceability
============
Manufacturers and companies can refer to traceability reports to see the entire lifecycle of a
product: where (and when) it came from, where it was stored, and who (and when) it went to.
product: where it came from, when it arrived, where it was stored, who it went to (and when).
To see the full traceability of a product, or group by lots, go to the :menuselection:`Inventory app
--> Products --> Lots/Serial Numbers`. Doing so reveals the :menuselection:`Lots/Serial Numbers`
@@ -271,16 +352,29 @@ dashboard.
From here, products with lot numbers assigned to them will be listed by default, and can be expanded
to show the lot numbers those products have assigned to them.
To group by lots (or serial numbers), begin by removing any filters in the search bar. Then, click
the :guilabel:`Group By` drop-down, select :guilabel:`Add Custom Group`, and select
:guilabel:`Lot/Serial Number` from the drop-down menu. Then, click :guilabel:`Apply`.
To group by lots, begin by removing any filters in the :guilabel:`Search...` bar. Then, click the
:icon:`fa-caret-down` :guilabel:`(caret down)` icon to open a drop-down menu of :guilabel:`Filters`,
:guilabel:`Group By` options, and :guilabel:`Favorites`. Under the :guilabel:`Group By` section,
click the :guilabel:`Add Custom Group` option, and select :guilabel:`Lot/Serial Number` from the
drop-down menu.
Doing so displays all existing lots and serial numbers, and can be expanded to show all quantities
of products with that assigned number.
Doing so reorganizes all the records on the page to display all existing lots and serial numbers,
and can be expanded to show all quantities of products with that assigned number.
.. image:: lots/lots-traceability-report.png
.. image:: lots/group-by-number.png
:align: center
:alt: Lots and serial numbers traceability report.
Traceability report
-------------------
To view a full stock moves report for a lot number, select the lot number line from the
:guilabel:`Lots/Serial Number` dashboard. On the lot number form, click the :guilabel:`Traceability`
smart button.
.. image:: lots/traceability-report.png
:align: center
:alt: Show the Traceability Report for a lot, that displays the stock moves.
.. seealso::
:doc:`differences`

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@@ -120,7 +120,7 @@ Lots` options.
After enabling the features, assign lot or serial numbers to products using an :doc:`inventory
adjustment <inventory_management/count_products>` or during :ref:`product reception
<inventory/product_management/receipt-lots>`.
<inventory/product_management/assign-lots>`.
Locations and routes
--------------------

View File

@@ -8,3 +8,4 @@ Advanced
:titlesonly:
advanced/analyze
advanced/vendor_costs_report

View File

@@ -0,0 +1,103 @@
===================
Vendor costs report
===================
.. |RFQ| replace:: :abbr:`RfQ (Request for Quotation)`
.. |RFQs| replace:: :abbr:`RfQs (Requests for Quotation)`
.. |POs| replace:: :abbr:`POs (Purchase Orders)`
.. |caret| replace:: :icon:`fa-caret-down` :guilabel:`(down)` icon
With the *Purchase* application, users can track the fluctuation of vendor costs over time. This
allows users to identify the most expensive vendors, and track seasonal changes.
Create vendor costs reports
===========================
To create a vendor costs report, first navigate to :menuselection:`Purchase app --> Reporting -->
Purchase` to open the :guilabel:`Purchase Analysis` dashboard. By default, the dashboard displays a
line chart overview of the :guilabel:`Untaxed Total` of POs (Purchase Orders) with a
:guilabel:`Confirmation Date` for the current month, or of RFQs (Requests for Quotation) with a
status of *Draft*, *Sent, or *Cancelled*.
Add filters and groups
----------------------
On the top-right, click the :icon:`oi-view-pivot` :guilabel:`(pivot)` icon to switch to pivot view.
Remove any default filters from the :guilabel:`Search...` bar. Then, click the |caret| to open the
drop-down menu that contains the :guilabel:`Filters`, :guilabel:`Group By`, and
:guilabel:`Favorites` columns.
.. note::
Unless otherwise specified, the report displays data from both |RFQs| and |POs|. This can be
changed by selecting either :guilabel:`Requests for Quotation` or :guilabel:`Purchase Orders`
under the :guilabel:`Filters` column.
Under the :guilabel:`Filters` column, select a date range to use for comparison. The report can be
filtered by either :guilabel:`Order Date` or :guilabel:`Confirmation Date`. Choose one from the
list, and click the |caret| to specify the date range, either by month, quarter, or year.
Next, under the :guilabel:`Group by` column, select :guilabel:`Vendor`. Then, select
:guilabel:`Product`, which is also located in the :guilabel:`Group By` column.
.. note::
Selecting :guilabel:`Product` is **not** required for this report. However, it is recommended, as
it provides additional insight into the performance of individual vendors. Additional selections
can be made under the :guilabel:`Group by` heading as well, including :guilabel:`Product
Category`, :guilabel:`Status`, and :guilabel:`Purchase Representative`.
To ensure the report is generated correctly, make sure that :guilabel:`Vendor` is the **first**
selection made under the :guilabel:`Group By` column.
Next, make a selection under the :guilabel:`Comparison` heading. These options are only available
after the date range is selected under the :guilabel:`Filters` column, and vary based on that range.
:guilabel:`Previous Period` adds a comparison to the previous period, such as the last month or
quarter. :guilabel:`Previous Year` compares the same time period from the previous year.
.. note::
While multiple time-based filters can be added at once, only one comparison can be selected at a
time.
.. image:: vendor_costs_report/filters-groups.png
:align: center
:alt: The drop-down menu of filters, group by and comparison options for the vendor costs report.
Add measures
------------
After selecting the :guilabel:`Filters`, :guilabel:`Group by`, and :guilabel:`Comparison` settings,
click out of the drop-down menu.
By default, the report displays with the following measures: :guilabel:`Order`, :guilabel:`Total`,
:guilabel:`Untaxed Total`, and :guilabel:`Count`. Click :guilabel:`Measures` at the top-left to open
the drop-down list of available measures. Click :guilabel:`Average Cost` to add it to the report.
Select any additional measures to add to the report, or click on any of the already selected
measures to remove them, if desired.
.. tip::
It is recommended to run the report with at least :guilabel:`Average Cost`, :guilabel:`Total`, or
:guilabel:`Untaxed Total` selected from the :guilabel:`Measures` list. Additional measures, such
as :guilabel:`Days to Receive`, can be added to provide additional insights.
View results
============
The vendor costs report is displayed in the *pivot* view, by default. Click :guilabel:`Insert in
Spreadsheet` to add the pivot view into an editable spreadsheet format within the *Documents* app.
.. important::
The :guilabel:`Insert in Spreadsheet` option is only available if the *Documents Spreadsheet*
module is installed.
.. image:: vendor_costs_report/sample-vendor-report.png
:align: center
:alt: A sample of a vendor costs report with the measures set as total and average costs.
.. note::
The vendor costs report is also available in *graph* view. Click the :icon:`fa-area-chart`
:guilabel:`(area chart)` icon to change to graph view. Click the corresponding icon at the top of
the report to switch to a :icon:`fa-bar-chart` :guilabel:`(bar chart)`, :icon:`fa-line-chart`
:guilabel:`(line chart)`, or :icon:`fa-pie-chart` :guilabel:`(pie chart)`.
.. seealso::
To save this report as a *favorite*, see :ref:`search/favorites`.

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -49,17 +49,13 @@ is as follows:
the purchase order have actually been received.
To activate it, go to :menuselection:`Purchase app --> Configuration --> Settings`, and scroll down
to the :guilabel:`Invoicing` section. Then, check the box next to :guilabel:`3-way matching:
purchases, receptions, and bills`, and click :guilabel:`Save` to save changes.
to the :guilabel:`Invoicing` section. Then, tick the checkbox next to :guilabel:`3-way matching`,
and click :guilabel:`Save` to save changes.
.. important::
:guilabel:`3-way matching` is **only** intended to work with the :guilabel:`Bill Control` policy
set to :guilabel:`Received quantities`.
.. image:: manage/manage-three-way-matching.png
:align: center
:alt: Activated three-way matching feature in purchase settings.
Create and manage vendor bills on receipts
==========================================
@@ -153,12 +149,12 @@ Finally, click the :guilabel:`Create Bill` button to create a bill for the purch
.. note::
Clicking :guilabel:`Create Bill` before any products have been received will cause a
:guilabel:`User Error` pop-up to appear. The :guilabel:`Purchase Order` requires the receipt of
at least partial quantity of the items included on the order to create a vendor bill.
:guilabel:`User Error` pop-up message to appear. The :guilabel:`Purchase Order` requires the
receipt of at least partial quantity of the items included on the order to create a vendor bill.
.. image:: manage/manage-user-error-popup.png
:align: center
:alt: User error pop-up for received quantities control policy.
.. image:: manage/manage-user-error-popup.png
:align: center
:alt: User error pop-up for received quantities control policy.
Next, click the :guilabel:`Receipt` smart button to view the warehouse receipt form.
@@ -242,11 +238,11 @@ a separate page. This list of journal entries are all tied to their appropriate
.. image:: manage/manage-batch-billing.png
:align: center
:alt: Batch billing register payment pop-up.
:alt: Batch billing register payment pop-up window.
.. note::
The :guilabel:`Register Payment` option for vendor bills in batches will only work for journal
entries whose :guilabel:`Status` is set to :guilabel:`Posted`.
.. seealso::
:doc:`/applications/inventory_and_mrp/purchase/manage_deals/control_bills`
:doc:`control_bills`

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -1,11 +1,11 @@
=================================================
Purchase in different units of measure than sales
=================================================
=========================
Purchase units of measure
=========================
When you purchase a product, it may happen that your vendor uses a different unit of measure than
you do when you sell it. This can cause confusion between sales and purchase representatives. It is
also time-consuming to convert measures manually every time. With Odoo, you can configure your
product once and let Odoo handle the conversion.
when it is sold. This can cause confusion between sales and purchase representatives. It is also
time-consuming to convert measures manually every time. With Odoo, you can configure your product
once and let Odoo handle the conversion.
Consider the following examples:
@@ -70,14 +70,15 @@ and name the category.
:align: center
:alt: Create a new units of measure category in Odoo Purchase
The next step is to create the two units of measures. To do so, go to :menuselection:`Configuration
--> Units of Measure`.
The next step is to create the two units of measures. To do so, click into the :guilabel:`Unit of
Measure Category` field and enter a name for the category. Then, under the :guilabel:`Units of
Measure` tab, click :guilabel:`Add a line`.
First, create the unit of measure used as the reference point for converting to other units of
measure inside the category by clicking on *Create*. Name the unit and select the units of measure
category you just created. For the *Type*, select *Reference Unit of Measure for this category
type*. Enter the *Rounding Precision* you would like to use. The quantity computed by Odoo is always
a multiple of this value.
measure inside the category. Name the unit, and select the units of measure category you just
created. For the *Type*, select *Reference Unit of Measure for this category type*. Enter the
*Rounding Precision* you would like to use. The quantity computed by Odoo is always a multiple of
this value.
In the example, as you cannot purchase less than 1 roll and won't use fractions of a roll as a unit
of measure, you can enter 1.
@@ -105,10 +106,6 @@ should be smaller than 1.
For your curtain roll, the ratio should be set to 100.
.. image:: uom/uom-second-unit.png
:align: center
:alt: Create a second unit of measure in Odoo Purchase
You can now configure your product just as you would using Odoo's standard units of measure.
.. image:: uom/uom-product-configuration-new-units.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -10,5 +10,6 @@ Events
.. toctree::
events/event_essentials
events/create_events
events/sell_tickets
events/track_manage_talks

View File

@@ -0,0 +1,416 @@
=============
Create events
=============
With the *Events* application, event organizers can create and configure in-person or online-only
events in Odoo. Each new event contains a number of customizable options that are geared around
specific event logistics, as needed per event, such as ticket sales and registration desk, booths,
tracks, sponsors, rooms, and more.
Events can be manually created from scratch or built off of pre-made templates. Once launched, the
*Events* application then integrates with the *Website* app for the front-end promotion and
registration of the event for attendees, the *Sales* app for the purchasing ability of paid tickets,
as well the *CRM* application through customizable lead generation rules.
New event
=========
To create a new event, begin by navigating to the :menuselection:`Events app` to land on the default
:guilabel:`Events` dashboard, in the :icon:`oi-view-kanban` :guilabel:`Kanban` view. From there, or
alternatively from the :icon:`oi-view-list` :guilabel:`List` or :icon:`fa-tasks` :guilabel:`Gantt`
views, click the :guilabel:`New` button in the upper-left corner of the dashboard to open up a new
event form.
.. image:: create_events/blank-event-template.png
:align: center
:alt: Typical event template in the Odoo Events application.
.. note::
If certain fields do not readily appear on the event form, that means an additional application
needs to be installed, or the database is not operating in a multi-company environment.
For example, the :guilabel:`Twitter Wall` field **only** appears if the *Social Marketing* app is
installed, and the :guilabel:`Company` field **only** appears if the database is working in a
multi-company environment.
These are just *additional* elements that can be used for an event. They are **not** required to
create, host, and manage an event with Odoo *Events*.
Event form
==========
At the top of the event form are a series of smart buttons related to various event metrics, which
will autopopulate with pertinent data once attendees begin to register, booths and sponsors sign on
for the event, the event takes place, and so on.
Beneath the smart buttons is the event form, which contains various fields and clickable tabs that
serve to configure the initial, necessary details of the event.
The following are fields found on an event form:
- :guilabel:`Event Name`: the title of the event. This field is **required**.
- :guilabel:`Date`: when the event is scheduled to take place. This field is auto-populated, but
modifiable, and is **required**.
- :guilabel:`Timezone`: the corresponding timezone related to the event. This field is
auto-populated, but modifiable, and is **required**.
- :guilabel:`Language`: designate a specific language for all event communications to be translated
into, if necessary. This field is blank, by default, so if event-related communications are being
sent to recipients who speak a different language, be sure to configure this field properly.
- :guilabel:`Twitter Wall`: creates a separate page on the event website to feature specific social
posts on X (formerly Twitter) that contain pre-determined desired elements.
.. tip::
To create and customize a :guilabel:`Twitter Wall`, type the name of the desired wall into the
field, and select :guilabel:`Create and edit...` from the resulting drop-down menu.
Doing so reveals :guilabel:`Create Twitter Wall` pop-up window.
.. image:: create_events/twitter-wall-popup.png
:align: center
:alt: The Twitter Wall pop-up window in the Odoo Events application.
From this window, enter a :guilabel:`Wall Name`. Then, select a certain word or hashtag for
Odoo to search for on X, like `#WoodWorkingExpo24`, for example.
Next, determine the :guilabel:`Type of tweets` Odoo should showcase with that predetermined
criteria. The choices in this field are: :guilabel:`Recent`, :guilabel:`Popular`, or
:guilabel:`Mixed`.
Users also have the option to add a brief :guilabel:`Description` to the wall, as well.
Lastly, the greyed-out, non-modifiable :guilabel:`Website URL` field will autopopulate with the
full URL needed to access the document through the event website.
An image can also be added to the wall by clicking the :icon:`fa-pencil` :guilabel:`(pencil)`
icon that appears when the cursor hovers over the :guilabel:`(camera)` placeholder image in the
upper-right corner of the pop-up window.
Then, from the resulting file explorer window, select the desired image to be added to the
wall.
This :guilabel:`Twitter Wall` field **only** appears on the event form if the *Social
Marketing* app is installed, and an X account has been added as a stream on the application. To
learn more, check out the :doc:`Social marketing essentials
<../social_marketing/essentials/social_essentials>` documentation.
- :guilabel:`Template`: choose a pre-configured event template from the resulting drop-down menu.
Or, create a new one directly from this field, by typing in the name of the new template, and
selecting either:
- :guilabel:`Create` (which creates the template, and can be edited later) or
- :guilabel:`Create and edit...` (which creates the template, and reveals a separate template page
to configure the template in greater detail).
- :guilabel:`Tags`: add any corresponding tags to briefly describe the event (e.g. `Online`,
`Conference`, etc.). Multiple tags can be added per event.
.. tip::
Tags can be displayed on events that are listed on the website by enabling the *Show on
Website* checkbox from :menuselection:`Events app --> Configuration --> Event Tag Categories`.
- :guilabel:`Organizer`: designate the organizer of the event (a company, contact, or employee).
- :guilabel:`Responsible`: designate a user in the database to be responsible for this event.
- :guilabel:`Company`: designate which company in the database to which this event is related. This
field **only** appears if working in a multi-company environment. This field is auto-populated,
but modifiable, and is **required**.
- :guilabel:`Website`: choose to restrict the publishing of this event to a specific website created
in Odoo. If this field is left blank, the event can be published on *all* websites in the
database. To learn more, refer to the :doc:`Multiple websites
<../../websites/website/configuration/multi_website>` documentation.
- :guilabel:`Venue`: enter the pertinent event venue details in this field.
- :guilabel:`Exhibition Map`: if desired, click the :guilabel:`Upload your file` button to upload an
image of the event venue map.
- :guilabel:`Limit Registrations`: if this checkbox is ticked, a limit to the amount of
registrations is added to the event, and that desired limit amount **must** be entered in the
blank field before :guilabel:`Attendees`.
- :guilabel:`Badge Dimension`: select a desired paper format dimension for event badges. The options
are: :guilabel:`A4 foldable`, :guilabel:`A6`, or :guilabel:`4 per sheet`.
- :guilabel:`Badge Background`: if desired, click the :guilabel:`Upload your file` button to upload
a custom background image for event badges.
When the above fields in the event form have been adequately filled in, move on to the four tabs at
the bottom of the event form for further customization.
Those tabs are: :ref:`Tickets <events/event-tickets>`, :ref:`Communication
<events/event-communication>`, :ref:`Questions <events/event-questions>`, and :ref:`Notes
<events/event-notes>`.
.. _events/event-tickets:
Tickets tab
-----------
Create custom tickets (and ticket tiers) for events in the :guilabel:`Tickets` tab of an event form.
.. image:: create_events/tickets-tab.png
:align: center
:alt: A typical tickets tab on an event form in the Odoo Events application.
To create a ticket, click :guilabel:`Add a line` in the :guilabel:`Tickets` tab. Then, enter a name
for the ticket (e.g. `Basic Ticket` or `VIP`) in the :guilabel:`Name` field.
In the :guilabel:`Product` field, either select the pre-configured :guilabel:`Event Registration`
product, or create a new one by typing in the name of the new event registration product, and then
select either :guilabel:`Create` or :guilabel:`Create and edit...` from the resulting drop-down
menu.
.. important::
Upon installing Odoo *Events*, a new product type, *Event Ticket*, becomes available on product
forms (:menuselection:`Sales --> Products --> Products`). In order for an event registration
product to be selectable in the *Tickets* tab, the event registration :guilabel:`Product Type`
**must** be set to :guilabel:`Event Ticket`.
.. tip::
Existing event registration products can be modified directly from this field, as well, by
clicking the :icon:`oi-arrow-right` :guilabel:`(right arrow)` icon, located beside the event
registration product. Doing so reveals that product's form. If the *Inventory* application is
installed, additional choices are available to customize for the product.
Next, set the registration cost of the ticket in the :guilabel:`Price` field.
.. note::
The *Sales Price* defined on the event registration product's product form sets the default cost
of a ticket. Modifying the :guilabel:`Price` of a ticket in the :guilabel:`Tickets` tab, sets a
new registration cost of the ticket for that event.
Next, determine a :guilabel:`Sales Start` and :guilabel:`Sales End` date in their respective fields.
To do that, click into the blank field to reveal a calendar popover. From there, select the desired
date and time, then click :icon:`fa-check` :guilabel:`Apply`.
Then, if desired, designate a :guilabel:`Maximum` amount of that specific ticket that can be sold.
The :guilabel:`Taken` column populates with the number of tickets that are sold.
Optionally, in the :guilabel:`Color` column, add a custom color to differentiate ticket badges. The
selected color displays on ticket badges when printed.
To delete any tickets from the :guilabel:`Tickets` tab, click the :icon:`fa-trash-o`
:guilabel:`(trash can)` icon on the corresponding line for the ticket that should be deleted.
.. tip::
To add an optional :guilabel:`Description` column to the :guilabel:`Tickets` tab, click the
:icon:`oi-settings-adjust` :guilabel:`(additional options)` drop-down menu, located to the
far-right of the column titles.
Then, tick the checkbox beside :guilabel:`Description` from the resulting drop-down menu.
When added, the option to add brief descriptions for each event ticket appears, which can be used
to inform attendees of any perks or amenities that may coincide with specific ticket purchases.
.. _events/event-communication:
Communication tab
-----------------
In the :guilabel:`Communication` tab of an event form, create various marketing communications that
can be scheduled to be sent at specific intervals leading up to, and following, the event.
.. image:: create_events/communication-tab.png
:align: center
:alt: Typical communication tab on an event form in the Odoo Events application.
.. note::
By default, Odoo provides three separate pre-configured communications on every new event form.
One is an email sent after each registration to confirm the purchase with the attendee. The other
two are email event reminders that are scheduled to be sent at different time intervals leading
up to the event to remind the recipient of the upcoming event.
To add a communication in the :guilabel:`Communication` tab, click :guilabel:`Add a line`. Then,
select the desired type of communication in the :guilabel:`Send` field. The options are:
:guilabel:`Mail`, :guilabel:`SMS`, :guilabel:`Social Post`, or :guilabel:`WhatsApp`.
There is no limit to the number of communications that can be added in the :guilabel:`Communication`
tab of an event form.
To delete a communication from the :guilabel:`Communication` tab, click the :icon:`fa-trash-o`
:guilabel:`(trash can)` icon on the corresponding communication line. Doing so removes the
communication from the event entirely.
.. important::
The :guilabel:`Social Post` option **only** appears if the *Social Marketing* application is
installed. The :guilabel:`WhatsApp` option **only** appears if the *WhatsApp Integration* module
is installed.
:doc:`WhatsApp <../../productivity/whatsapp>` templates **cannot** be edited during active
configuration. A separate approval from *Meta* is required.
Mail
~~~~
Select an existing email template from the :guilabel:`Template` drop-down menu.
Next, define the :guilabel:`Interval`, :guilabel:`Unit`, and :guilabel:`Trigger` from their
respective drop-down fields, letting Odoo know when the communication should be sent.
The :guilabel:`Unit` options are: :guilabel:`Immediately`, :guilabel:`Hours`, :guilabel:`Days`,
:guilabel:`Weeks`, and :guilabel:`Months`.
Then, select an option from the :guilabel:`Trigger` drop-down menu. The options are:
:guilabel:`After each registration`, :guilabel:`Before the event`, and :guilabel:`After the event`.
The :guilabel:`Sent` column populates with the number of sent communications. And, beside the
number are different icons that appear, depending on the status of that particular communication.
The status of *Running* is represented by a :icon:`fa-cogs` :guilabel:`(three gears)` icon. The
status of *Sent* is represented by a :icon:`fa-check` :guilabel:`(checkmark)` icon. And, the status
of *Scheduled* is represented by an :icon:`fa-hourglass-half` :guilabel:`(hourglass)` icon.
.. example::
To send a confirmation email an hour after an attendee registers for an event, configure the
following communication:
- :guilabel:`Interval`: `1`
- :guilabel:`Unit`: :guilabel:`Hours`
- :guilabel:`Trigger`: :guilabel:`After each registration`
.. note::
Existing email templates can be modified directly from the :guilabel:`Template` drop-down menu,
if necessary, by clicking the :icon:`oi-arrow-right` :guilabel:`(right arrow)` icon next to the
template name. Doing so reveals a separate page where users can edit the :guilabel:`Content`,
:guilabel:`Email Configuration`, and :guilabel:`Settings` of that particular email template.
To view and manage all email templates, activate :ref:`developer-mode` and navigate to
:menuselection:`Settings --> Technical --> Email: Email Templates`. Modify with caution as email
templates effect all communications where the template is used.
.. _events/event-questions:
Questions tab
-------------
In the :guilabel:`Questions` tab of an event form, users can create brief questionnaires for
registrants to interact with, and respond to, after they register for the event.
These questions can be focused on gathering basic information about the attendee, learning about
their preferences, expectations, and other things of that nature. This information can also be used
to create more detailed reporting metrics, in addition to being utilized to create specific lead
generation rules.
.. image:: create_events/questions-tab.png
:align: center
:alt: Typical questions tab on an event form in the Odoo Events application.
.. note::
By default, Odoo provides three questions in the :guilabel:`Questions` tab for every event form.
The default questions require the registrant(s) to provide their :guilabel:`Name` and
:guilabel:`Email`, and make it optional to include their :guilabel:`Phone` number, as well.
The information gathered from the :guilabel:`Questions` tab can be found on the
:guilabel:`Attendees` dashboard, accessible via the :icon:`fa-users` :guilabel:`Attendees` smart
button. Odoo populates individual records that contain basic information about the registrant(s),
as well as their preferences.
To add a question in the :guilabel:`Questions` tab, click :guilabel:`Add a line`. Doing so reveals a
:guilabel:`Create Question` pop-up window. From here, users can create and configure their question.
.. image:: create_events/create-question-popup.png
:align: center
:alt: The Create Question pop-up window that appears in the Odoo Events application.
First, enter the question in the field at the top of the form. Then, decide if the question should
require a :guilabel:`Mandatory Answer` and/or if Odoo should :guilabel:`Ask once per order`, by
ticking their respective boxes, if desired.
If the :guilabel:`Ask once per order` checkbox is ticked, the question will only be asked once, and
its value is propogated to every attendee in the order (if multiple tickets are purchased at once).
If the checkbox is *not* ticked for this setting, Odoo will present the question for every attendee
that is connected to that registration.
Next, select a :guilabel:`Question Type` option:
- :guilabel:`Selection`: provide answer options to the question for registrants to choose from.
Selectable answer options can be managed in the :guilabel:`Answers` column at the bottom of the
pop-up window.
- :guilabel:`Text Input`: lets the users enter a custom response to the question in a text field.
- :guilabel:`Name`: provides registrants with a field for them to enter their name.
- :guilabel:`Email`: provides registrants with a field for them to enter their email address.
- :guilabel:`Phone`: provides registrants with a field for them to enter their phone number.
- :guilabel:`Company`: provides registrants with a field for them to enter a company they are
associated with.
Once all the desired configurations have been entered, either click :guilabel:`Save & Close` to save
the question, and return to the :guilabel:`Questions` tab on the event form, or click
:guilabel:`Save & New` to save the question and immediately create a new question on a new
:guilabel:`Create Question` pop-up window.
As questions are added to the :guilabel:`Questions` tab, the informative columns showcase the
configurations of each question.
The informative columns are the following:
- :guilabel:`Title`
- :guilabel:`Mandatory`
- :guilabel:`Once per Order`
- :guilabel:`Type`
- :guilabel:`Answers` (if applicable)
For :guilabel:`Selection` and :guilabel:`Text Input` types, a :icon:`fa-bar-chart` :guilabel:`Stats`
button appears on the right side of the question line. When clicked, Odoo reveals a separate page,
showcasing the response metrics to that specific question.
To delete any question from the :guilabel:`Questions` tab, click the :icon:`fa-trash-o`
:guilabel:`(trash can)` icon on the corresponding question line.
There is no limit to the number of questions that can be added in the :guilabel:`Questions` tab of
an event form.
.. _events/event-notes:
Notes tab
---------
In the :guilabel:`Notes` tab of an event form, users can leave detailed internal notes and/or
event-related instructions/information for attendees.
.. image:: create_events/notes-tab.png
:align: center
:alt: Typical notes tab on an event form in the Odoo Events application.
In the :guilabel:`Note` field of the :guilabel:`Notes` tab, users can leave internal notes for other
event employees, like "to-do" lists, contact information, instructions, and so on.
In the :guilabel:`Ticket Instructions` field of the :guilabel:`Notes` tab, users can leave specific
instructions for people attending the event that appear on the attendees ticket.
Publish events
==============
Once all configurations and modifications are complete on the event form, it is time to publish the
event on the website. Doing so makes the event visible to website visitors, and makes it possible
for people to register for the event.
To publish an event after all the customizations are complete, click the :icon:`fa-globe`
:guilabel:`Go to Website` smart button at the top of the event form. Doing so reveals the event's
web page, which can be customized like any other web page on the site, via the :guilabel:`Edit`
button.
To learn more about website design functionality and options, consult the :doc:`Building block
<../../websites/website/web_design/building_blocks>` documentation.
Once the event website is ready to be shared, click the red :guilabel:`Unpublished` toggle switch
in the header menu, changing it to a green :guilabel:`Published` switch. At this point, the event
web page is published, and viewable/accessible by all website visitors.
Send event invites
==================
To send event invites to potential attendees, navigate to the desired event form, via
:menuselection:`Events app --> Events`, and click into the desired event. Following this, click the
:guilabel:`Invite` button in the upper-left corner of the event form.
Doing so reveals a blank email form to fill out, as desired. To learn more about how to create and
customize emails like this, refer to the :ref:`Create an email <email_marketing/create_email>`
documentation.
Proceed to create and customize an email message to send as an invite to potential attendees.
Remember to include a link to the registration page on the event website, allowing interested
recipients to quickly register.
.. tip::
Sending emails from Odoo is subject to a daily limit, which, by default, is 200. To learn more
about daily limits, visit the :ref:`email_communication/daily_limit_mail` documentation.
.. seealso::
- :doc:`event_essentials`
- :doc:`track_manage_talks`

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

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