Compare commits

...

11 Commits

Author SHA1 Message Date
rps-odoo 2401a810bb [IMP] accounting/l10n_cl: add Importante note to F29 report 2024-07-31 14:05:46 -04:00
KC (ksc) 6f74248de1 [IMP] sales: adding global discount info
closes odoo/documentation#9962

Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
2024-07-30 23:55:05 +00:00
KC (ksc) be0b5e65d5 [ADD] events: revenues report
closes odoo/documentation#9953

Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
2024-07-30 22:09:40 +00:00
Lara Martini (larm) 83b6895deb [ADD] Expenses: post expenses to accounting journals
closes odoo/documentation#10392

Signed-off-by: Lara Martini (larm) <larm@odoo.com>
2024-07-30 20:29:06 +00:00
Felicious 16537bb9c5 [IMP] barcode: add nomenclature example
closes odoo/documentation#10432

X-original-commit: 70c736d57a
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2024-07-30 16:12:14 +00:00
Lara Martini (larm) 71e2a50d40 [ADD] Fleet: new accident management doc
closes odoo/documentation#10263

Signed-off-by: Lara Martini (larm) <larm@odoo.com>
2024-07-30 14:38:39 +00:00
xmo-odoo 514c175824 [FIX] contributing: remove smart quotes
There have been several new odooers who've hit legal/cla mismatches, and after
investigation their email address would be smart quoted in git (e.g.
`<“uid@example.org”>`).

That the documentation itself uses smart quotes is highly suspicious, it would
make sense that new developers just pasted the provided command, updated it to
match, and didn't even notice the quotes were wrong: `git` is perfectly happy
with it, only on reading it back can you realise it's wrong and the guide
doesn't say anything about *that*.

So fix the quotes in the doc, and hopefully that'll resolve the issue.

closes odoo/documentation#10442

X-original-commit: 811b442fcc
Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
2024-07-30 13:03:27 +00:00
KC (ksc) 65e7f1b3c5 [ADD] events: registration desk doc (17)
closes odoo/documentation#9348

Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
2024-07-29 23:55:40 +00:00
Felicious d362d4ebdb [ADD] inventory: storage categories
closes odoo/documentation#10412

X-original-commit: c70a77153e
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: pabr-odoo <pabr@odoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2024-07-29 22:37:40 +00:00
KC (ksc) 1aee294219 [ADD] sales: create quotations doc
closes odoo/documentation#9749

Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
2024-07-29 20:45:38 +00:00
Parish Bracha d8cd13b659 [ADD] Subscriptions: Wire transfer
closes odoo/documentation#10276

Signed-off-by: Parish Bracha (pabr) <pabr@odoo.com>
2024-07-29 18:10:57 +00:00
62 changed files with 1493 additions and 232 deletions
+9 -47
View File
@@ -4,8 +4,8 @@
Expenses
========
Odoo *Expenses* streamlines the management of expenses. After an employee submits their expenses in
Odoo, they are reviewed by management and accounting teams. Once approved, payments can then be
Odoo **Expenses** streamlines the management of expenses. After an employee submits their expenses
in Odoo, they are reviewed by management and accounting teams. Once approved, payments can then be
processed, and disbursed back to the employee for reimbursement.
.. seealso::
@@ -372,46 +372,6 @@ the manager's team.
:align: center
:alt: Send messages in the chatter.
.. _expenses/post:
Post expenses in accounting
===========================
Once an expense report is approved, the next step is to post the report to the accounting journal.
To view all expense reports, go to :menuselection:`Expenses app --> Expense Reports`. To view only
the expense reports that have been approved and need to be posted, adjust the filters on the left
side so that only the :guilabel:`Approved` status is enabled.
.. image:: expenses/post-reports.png
:align: center
:alt: View reports to post by clicking on expense reports, then reports to post.
Just like approvals, expense reports can be posted in two ways (individually or several at once). To
post multiple expense reports at once, remain in the list view. First, select the reports to post by
ticking the checkbox next to each report, or tick the checkbox next to :guilabel:`Employee` to
select all the reports in the list. Next, click :guilabel:`Post Entries`.
.. image:: expenses/post-entries.png
:align: center
:alt: Post multiple reports at a time from the Expense Reports view, with the Approved filter.
To post an individual report, click on a report to go to the detailed view of that report. In this
view, several options are presented: :guilabel:`Post Journal Entries`, :guilabel:`Report In Next
Payslip`, :guilabel:`Refuse`, or :guilabel:`Reset to Draft`. Click :guilabel:`Post Journal Entries`
to post the report.
If :guilabel:`Refuse` is clicked, a pop-up window appears. Enter a brief explanation for the refusal
in the :guilabel:`Reason to Refuse Expense` field, and then click :guilabel:`Refuse`. Refused
reports can be viewed by going to :menuselection:`Expenses app --> Expense Reports`, then adjusting
the filters on the left so that only :guilabel:`Refused` is selected. This will only show the
refused expense reports.
.. important::
To post expense reports to an accounting journal, the user must have following access rights:
- Accounting: Accountant or Adviser
- Expenses: Manager
.. _expenses/reimburse:
Reimburse employees
@@ -511,10 +471,10 @@ Distribution` is set on every expense line of a report. If an :guilabel:`Analyti
missing, assign the correct accounts from the drop-down menu, and click :guilabel:`Approve` or
:guilabel:`Refuse`.
The accounting department is typically responsible for :ref:`posting journal entries
<expenses/post>`. Once an expense report is approved, it can then be posted. The :abbr:`SO (Sales
Order)` is **only** updated *after the journal entries are posted*. One the journal entries are
posted, the expenses now appear on the referenced :abbr:`SO (Sales Order)`.
The accounting department is typically responsible for :doc:`posting journal entries
<expenses/post_expenses>`. Once an expense report is approved, it can then be posted. The :abbr:`SO
(Sales Order)` is **only** updated *after* the journal entries are posted. Once the journal entries
are posted, the expenses now appear on the referenced :abbr:`SO (Sales Order)`.
Invoice expenses
----------------
@@ -549,9 +509,11 @@ clicking the radio button next to it. Then, click :guilabel:`Create Invoice`. Th
been invoiced for the expenses.
.. seealso::
:doc:`expenses/expense_reports`
- :doc:`expenses/post_expenses`
- :doc:`expenses/expense_reports`
.. toctree::
:titlesonly:
expenses/post_expenses
expenses/expense_reports
@@ -121,5 +121,6 @@ Click on a report to open it, then click :guilabel:`Submit To Manager`. After su
the next step is to wait for the manager to approve it.
.. important::
The :ref:`expenses/approve`, :ref:`expenses/post`, and :ref:`expenses/reimburse` sections are
**only** for users with the appropriate *access rights*.
:ref:`Approving <expenses/approve>`, :doc:`posting <../expenses/post_expenses>`, and
:ref:`reimbursing <expenses/reimburse>` expenses are **only** for users with the appropriate
:doc:`access rights <../../general/users/access_rights>`.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,75 @@
=============
Post expenses
=============
Once an expense report is :ref:`approved <expenses/approve>`, the next step is to post the expense
report to the proper accounting journal.
.. important::
To post expense reports to an accounting journal, the user **must** have the following
:doc:`access rights <../../general/users/access_rights>`:
- Accounting: *Accountant* or *Adviser*
- Expenses: *Manager*
Only expense reports with an *Approved* status can post the expenses to a journal. To view all
expense reports, navigate to :menuselection:`Expenses app --> Expense Reports`. Next, to view
**only** approved expense reports that need to be posted, adjust the filters on the left side, so
only the :guilabel:`Approved` checkbox is ticked.
.. image:: post-expenses/post-reports.png
:align: center
:alt: View reports to post by clicking on expense reports, then reports to post.
.. note::
The default :guilabel:`All Reports` dashboard displays all expense reports, except reports with a
status of :guilabel:`Refused`.
Expense reports can be posted to accounting journals in two ways: :ref:`individually
<expenses/individual>` or :ref:`in bulk <expenses/multiple>`.
.. _expenses/individual:
Post individual reports
-----------------------
To post an individual report, navigate to :menuselection:`Expenses app --> Expense Reports`, and
click on an individual report with a :guilabel:`Status` of :guilabel:`Approved`, to view the report
form. In this view, several options are presented: :guilabel:`Post Journal Entries`,
:guilabel:`Report In Next Payslip`, :guilabel:`Refuse`, or :guilabel:`Reset to Draft`.
Click :guilabel:`Post Journal Entries` to post the report.
The accounting journal the expenses are posted to is listed in the :guilabel:`Journal` field of the
expense report.
After posting the expenses to an accounting journal, a :guilabel:`Journal Entry` smart button
appears at the top of the screen. Click the :guilabel:`Journal Entry` smart button, and the details
for the journal entry appear, with a status of :guilabel:`Posted`.
.. _expenses/multiple:
Post multiple reports
---------------------
To post multiple expense reports at once, navigate to :menuselection:`Expenses app --> Expense
Reports` to view a list of expense reports. Next, select the reports to approve by ticking the
checkbox next to each report being approved.
.. note::
Only expense reports with a status of :guilabel:`Approved` are able to post the expenses to an
accounting journal. If an expense report is selected that **cannot** be posted, such as an
unapproved report, or the report has already been posted to a journal, the :guilabel:`Post
Entries` button is **not** visible.
.. tip::
To select **only** approved expense reports, adjust the filters on the left side, so that only
the :guilabel:`Approved` checkbox is ticked. Next, tick the checkbox next to the
:guilabel:`Employee` column title to select **all** the :guilabel:`Approved` reports in the list
at once.
Next, click the :guilabel:`Post Entries` button.
.. image:: post-expenses/post-entries.png
:align: center
:alt: Post multiple reports at a time from the Expense Reports view, with the Approved filter.
@@ -1228,6 +1228,10 @@ taxpayers, and that replaces the *Purchase and Sales Books*. This report is inte
Register (CR) and the Sales Register (RV). Its purpose is to support the transactions related to
VAT, improving its control and declaration.
.. important::
The *Propuesta F29 (CL)* report in Odoo covers the basic legal requirements as a first proposal
for your final tax declaration.
This record is supplied by the electronic tax documents (DTE's) that have been received by the
:abbr:`SII (Servicio de Impuestos Internos)`.
+2
View File
@@ -85,6 +85,7 @@ When the information is entered, click :guilabel:`Save`.
- :doc:`fleet/models`
- :doc:`fleet/new_vehicle`
- :doc:`fleet/service`
- :doc:`fleet/accidents`
.. toctree::
:titlesonly:
@@ -92,3 +93,4 @@ When the information is entered, click :guilabel:`Save`.
fleet/models
fleet/new_vehicle
fleet/service
fleet/accidents
+280
View File
@@ -0,0 +1,280 @@
=========
Accidents
=========
When managing a fleet, accidents are inevitable. Tracking accidents is crucial for understanding
vehicle maintenance costs and identifying safe drivers.
Odoo's *Fleet* app offers multiple ways to track accidents. Below are step-by-step instructions for
only **one** method to monitor accidents and repair costs.
Structure
=========
For this example, to track accidents, two :ref:`service types <fleet/new-type>` are created:
`Accident - Driver's Fault` and `Accident - No Fault`.
This tracks various repairs associated with accidents, organized by who was at fault.
When an accident occurs, a service record is created. The specific repairs needed for the accident
are logged in the *Description* of the service record, and the details about the accident are logged
in the *Notes* section.
With this organizational structure, it is possible to view all accidents organized by fault, car,
driver, or cost.
.. note::
To manage accidents, the creation of service records is **required**.
Refer to the :doc:`service` documentation for detailed instructions on creating service records
in Odoo's *Fleet* app.
Log accidents and repairs
=========================
To log an accident, and initiate the repair process, the first step is to :ref:`create a service
record <fleet/service-form>` detailing the specific repairs needed.
.. note::
Some accidents require multiple repairs with several different vendors. For these scenarios, a
separate service record is needed for each vendor performing repairs. To keep records organized,
it is recommended to keep the *Notes* field identical, as well as attaching the same important
documentation, such as a police report.
Navigate to :menuselection:`Fleet app --> Fleet --> Services` to view the main :guilabel:`Services`
dashboard. Click :guilabel:`New` in the top-left corner, and a blank service form loads.
Enter the following information on the form:
- :guilabel:`Description`: enter the description of repairs needed to fully repair the vehicle, such
as `Bodywork`, `Windshield Replacement`, or `Replacement Bumper, Tires, and Windows`.
- :guilabel:`Service Type`: for this example, select either `Accident - Driver's Fault` or
`Accident - No Fault`, depending on the situation.
When entering either of these two :guilabel:`Service Types` for the first time, type in the new
service type, then click :guilabel:`Create (new service type)`. A :guilabel:`Create Service Type`
pop-up window appears, with the new service type populating the :guilabel:`Name` field. In the
:guilabel:`Category` field, select :guilabel:`Service` from the drop-down menu, then click the
:guilabel:`Save & Close` button.
Once an accident service type has been added to the database, it is available to select from the
drop-down menu in the :guilabel:`Service Type` field.
- :guilabel:`Date`: using the calendar popover window, select the date the accident occurred.
Navigate to the desired month using the :icon:`fa-chevron-left` :icon:`fa-chevron-right`
:guilabel:`(arrow)` icons, then click the date to select it.
- :guilabel:`Cost`: leave this field blank, as the repair cost is not yet known.
- :guilabel:`Vendor`: select the vendor performing the repairs using the drop-down menu. If the
vendor has not already been entered in the system, type in the vendor name, and click either
:guilabel:`Create` to add them, or :guilabel:`Create and edit...` to :ref:`add and configure the
vendor <fleet/new-vendor>`.
- :guilabel:`Vehicle`: select the vehicle that was in the accident from the drop-down menu. When the
vehicle is selected, the :guilabel:`Driver` field is populated, and the unit of measure for the
:guilabel:`Odometer Value` field appears.
- :guilabel:`Driver`: the current driver listed for the selected vehicle populates this field when
the :guilabel:`Vehicle` is selected. If a different driver was operating the vehicle when the
accident occurred, select the correct driver from the drop-down menu.
- :guilabel:`Odometer Value`: enter the odometer reading when the accident occurred. The units of
measure are either in kilometers (:guilabel:`km`) or miles (:guilabel:`mi`), depending on how the
selected vehicle was configured.
- :guilabel:`NOTES`: enter the specific details of the accident at the bottom of the service form,
such as `Hit a deer` or `Rear-ended at an intersection while stopped`.
Odoo provides the ability to attach any important paperwork, such as repair estimates and police
reports, to the service record. To do so, click the :icon:`fa-paperclip` :guilabel:`(paperclip)`
icon, located in the *chatter* of the form, and a file explorer pop-up window appears. Navigate to
the desired record, and click :guilabel:`Open` to upload the file.
.. note::
Once a file is added to a service record, a :guilabel:`Files` section appears in the *chatter*.
To attach more records, click :icon:`fa-plus-square` :guilabel:`Attach files` to add more
documents.
.. image:: accidents/service-form.png
:align: center
:alt: Enter the information for an accident repair.
Service stages
==============
In Odoo's *Fleet* app, there are four default service stages:
.. tabs::
.. tab:: New
The default stage when a service record is created. The service has been requested, but
repairs have not begun. The :guilabel:`Cost` field for this stage remains zero.
.. tab:: Running
The repair is in-process, but not yet complete. The estimate for repairs is listed in the
:guilabel:`Cost` field.
.. tab:: Completed
All repairs listed on the service form have been completed. The :guilabel:`Cost` field is
updated to reflect the final total cost charged for the repairs.
.. tab:: Cancelled
The service request has been cancelled.
During the repair process, change the service status to reflect the vehicle's current state in one
of two ways: on the individual :ref:`service record <fleet/service_record>`, or in the :ref:`Kanban
service view <fleet/Kanban>`.
.. _fleet/service_record:
Service record
--------------
Open the main *Services* dashboard, by navigating to :menuselection:`Fleet app --> Fleet -->
Services`. Next, click on the individual service record to open the detailed service form. Click the
desired stage in the top-right corner, above the service form, to change the status.
.. image:: accidents/running.png
:align: center
:alt: The stages as seen from the service form.
.. _fleet/Kanban:
Kanban view
-----------
Open the main *Services* dashboard, by navigating to :menuselection:`Fleet app --> Fleet -->
Services`. First, click the :icon:`oi-view-kanban` :guilabel:`Kanban` icon in the top-right of the
screen, which organizes all repairs by vehicle.
Next, remove the default :guilabel:`Service Type` filter in the search bar. Upon doing so, all
services appear in a Kanban view, organized by their respective :guilabel:`Status`.
Drag-and-drop the service record to the desired stage.
.. image:: accidents/drag-n-drop.png
:align: center
:alt: The Kanban view of stages, with a card being dragged and dropped to the Running stage.
Accident reporting
==================
One of the main reasons to track accidents using the method outlined in this document is the ability
to view the total accident cost, determine the safest drivers, and calculate the actual total cost
for specific vehicles.
The main :ref:`Services dashboard <fleet/services_dashboard>` displays all the various accident
information, while the :ref:`Reporting dashboard <fleet/reporting_dashboard>` displays the total
cost for specific vehicles.
.. _fleet/services_dashboard:
Services dashboard
------------------
Navigate to :menuselection:`Fleet app --> Fleet --> Services` to view the :guilabel:`Services`
dashboard. All service records are displayed in a :icon:`oi-view-list` :guilabel:`(List)` view,
grouped alphabetically, by :guilabel:`Service Type`.
The two service types created for accident tracking appear in the list: :guilabel:`Accident -
Driver Fault` and :guilabel:`Accident - No Fault`.
Each grouping displays the number of records within each type, and lists the individual records
beneath each grouping title.
.. example::
In this example, there are six accidents where the driver was at fault, and four accidents that
were not the driver's fault. This dashboard also displays the estimated total :guilabel:`Cost`
for all the accidents in each group.
An estimated `$19,164.81` dollars are for driver-caused accident repairs, and an estimated
`$2,548.21` dollars are for no-fault accidents.
.. image:: accidents/group-accidents.png
:align: center
:alt: Accident services, with the total costs highlighted.
.. note::
The total :guilabel:`Cost` calculates **all** costs on the repair form, including estimated
costs, as well as final repair costs. This number may not be accurate, if there are any repairs
in the *Running* stage, and the final bill has not yet been calculated.
.. _fleet/reporting_dashboard:
Reporting dashboard
-------------------
Navigate to :menuselection:`Fleet app --> Reporting --> Costs` to view the :menuselection:`Cost
Analysis` report. This report displays a :icon:`fa-bar-chart` :guilabel:`(Bar Chart)` of all
:guilabel:`Contract` and :guilabel:`Service` costs for the current year, organized by month
(:guilabel:`Date : (year)`), by default. The :guilabel:`Sum`, represented by a gray dotted line, is
the combined total of both the :guilabel:`Contract` and :guilabel:`Service` costs.
To view the total cost by vehicle, click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon at
the right of the search bar, revealing a drop-down menu. Click :guilabel:`Vehicle` in the
:icon:`oi-group` :guilabel:`Group By` column, and the data is organized by vehicle.
This displays the true cost for each vehicle, including both the contract cost (such as the monthly
vehicle lease cost) and all service costs, including all accidents. Hover over a column to reveal a
data popover window, which displays the vehicle name and the total cost. This allows for a more
complete view of the vehicle cost.
.. image:: accidents/total-costs.png
:align: center
:alt: The Cost Analysis report, displaying total costs by vehicle.
To view the individual cost details for both contract costs and repairs, click the
:icon:`oi-view-pivot` :guilabel:`(Pivot)` icon in the top-right corner of the :guilabel:`Cost
Analysis` dashboard. This displays each vehicle on a separate line, and displays the
:guilabel:`Contract` cost and :guilabel:`Service` cost, as well as the :guilabel:`Total` cost.
.. image:: accidents/fleet-pivot.png
:align: center
:alt: The Cost Analysis report, displaying the contract and service costs separately, as well as
the total.
.. note::
The :icon:`oi-view-pivot` :guilabel:`(Pivot)` view organizes the data by vehicle, by default,
therefore grouping the data by :guilabel:`Vehicle` is not required. If this filer is already
activated, it does not affect the presented data.
Manage accident repairs
=======================
For companies with multiple employees, who manage a large fleet of vehicles, displaying only service
records in the :guilabel:`New` and :guilabel:`Running` stages can be time-saving, if there are a
large number of records in the *Services* dashboard.
Navigate to :menuselection:`Fleet app --> Fleet --> Services`, where all service requests are
organized by :guilabel:`Service Type`. Next, click the :icon:`fa-caret-down` :guilabel:`(down
arrow)` icon at the right of the search bar, revealing a drop-down menu. Click :guilabel:`Add Custom
Filter` in the :icon:`fa-filter` :guilabel:`Filters` column, and a :guilabel:`Add Custom Filter`
pop-up window appears.
Three drop-down fields need to be configured on the pop-up window.
In the first field, scroll down, and select :guilabel:`Stage`.
Leave the second field set to :guilabel:`=`.
Select :guilabel:`Running` from the drop-down menu in the last field.
Next, click the :icon:`fa-plus` :guilabel:`(plus)` icon to the right of the last field, and an
identical rule appears beneath the current rule.
Then, change :guilabel:`Running` to :guilabel:`New` in the third field of the second rule, leaving
the other fields as-is.
Click the :guilabel:`Add` button at the bottom to add the new custom filter.
.. image:: accidents/custom-filters.png
:align: center
:alt: The filter settings to be added to only display new and running services.
This slight modification only presents services in the :guilabel:`New` and :guilabel:`Running`
stages. This is a helpful report for a company managing a high number of repairs at any given time.
To have this report appear as the default report when opening the :guilabel:`Services` dashboard,
click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon at the far-right of the search bar.
Next, click :guilabel:`Save current search`, beneath the :icon:`fa-star` :guilabel:`Favorites`
column, which reveals another drop-down column beneath it. Tick the checkbox beside
:guilabel:`Default Filter`, then click :guilabel:`Save`. Then, this customized :guilabel:`Services`
dashboard appears, by default, anytime the :guilabel:`Services` dashboard is accessed.
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

@@ -12,111 +12,139 @@ scanned, it is associated to the **first** rule with a matching pattern. The pat
described in Odoo's nomenclature list using a regular expression, and a barcode is successfully read
by Odoo if its prefix and/or length matches the one defined in the barcode's rule.
Odoo *Barcode* supports UPC (Universal Product Code), EAN (European Article Number), and GS1
encoding. The pre-configured nomenclatures in Odoo are *Default Nomenclature* and *Default GS1
Nomenclature*. The default nomenclature uses |UPC| and |EAN| encoding, and supports |UPC|/|EAN|
conversion.
For instance, at a :doc:`Point of Sale <../../../sales/point_of_sale>` station, product weight
barcodes in the European Article Number (EAN) format, which begin with `21` and have five digits
specifying the weight, are used to weigh products and generate a barcode depicting the weight and
price. The `21` and five-digit weight is the barcode pattern used to identify the barcode and can be
customized to ensure Odoo correctly interprets all barcodes for the business.
.. note::
Barcodes are also commonly used with Odoo's **Inventory** and **Barcode** apps.
Odoo **Barcode** supports |EAN|, Universal Product Code (UPC), and :doc:`GS1 <gs1_nomenclature>`
formats. This document exclusively focuses on :ref:`default rules and patterns in Odoo
<barcode/operations/default-nomenclature-list>`, which use |UPC| and |EAN| encoding.
.. important::
|UPC| and |EAN| barcodes **must** be `purchased from GS1
<https://www.gs1.org/standards/get-barcodes>`_ to use these barcodes. GS1 is the **only**
official provider of |UPC|/|EAN| and GS1 |GTINs| in the world.
To use |UPC| and |EAN| barcodes for uniquely identifying products across the entire supply chain,
they **must** be `purchased from GS1 <https://www.gs1.org/standards/get-barcodes>`_.
.. _barcode/operations/set-up-nomenclature:
In Odoo, custom barcode patterns can be defined to recognize barcodes specific to the company.
Barcodes do not need to be purchased if used only within the company, such as in the
:ref:`example <barcode/operations/product-weight>` where the barcode is written in the |EAN|
format.
Set up barcode nomenclature
===========================
Configuration
=============
To use default nomenclature, navigate to :menuselection:`Inventory app --> Configuration -->
Settings`. Under the :guilabel:`Barcode` section, click the checkbox next to :guilabel:`Barcode
Scanner` to enable barcodes. Doing so installs the *Barcode* app in the database.
Settings`. Under the :guilabel:`Barcode` section, tick the :guilabel:`Barcode Scanner` checkbox.
Doing so installs the **Barcode** app in the database.
Next, ensure that the :guilabel:`Default Nomenclature` setting is selected in the :guilabel:`Barcode
Nomenclature` field. Then, click :guilabel:`Save`.
Next, in the :guilabel:`Barcode Nomenclature` field, ensure :guilabel:`Default Nomenclature` is
selected. Then, click :guilabel:`Save`.
.. image:: barcode_nomenclature/barcode-nomenclature-enabled-setting.png
.. image:: barcode_nomenclature/enable-nomenclature.png
:align: center
:alt: Enabled barcode setting with Default Nomenclature selected.
Once the nomenclature is saved and selected, the :menuselection:`Barcode Nomenclatures` settings can
be accessed, via a hidden menu that is **only** discoverable after enabling :ref:`developer mode
<developer-mode>`.
With the **Barcode** module installed, and the :guilabel:`Default Nomenclature` selected, the
barcode actions using |UPC| and |EAN|, detailed in the :ref:`default nomenclature list
<barcode/operations/default-nomenclature-list>`, are available for use. And, by default, Odoo
automatically handles |UPC|/|EAN| conversion.
Once developer mode is enabled, navigate to :menuselection:`Inventory app --> Configuration -->
Barcode Nomenclatures` menu, and select :guilabel:`Default Nomenclature`.
.. _barcode/operations/product-weight:
From this page, the :guilabel:`Barcode Nomenclature` is specified at the top as the `Default
Nomenclature`.
Example: product weight barcode
===============================
Under that, the :guilabel:`UPC/EAN Conversion` field is set to :guilabel:`Always`, by default. This
setting determines if a |UPC|/|EAN| barcode should be automatically converted one way or another
when trying to match a rule with the other encoding.
To better understand how barcode nomenclature is used to identify products in Odoo, this example
where product weight barcodes in |EAN| format are used to allow a :doc:`Point of Sale
<../../../sales/point_of_sale>` business to automatically print barcodes, and calculate the price
using the weight of the item.
The other available options for this field are :guilabel:`Never`, :guilabel:`EAN-13 to UPC-A`, and
:guilabel:`UPC-A to EAN-13`.
To set up barcodes for weighted products, the following rule is used:
.. list-table::
:header-rows: 1
* - Rule Name
- Barcode Pattern
- Field in Odoo
* - Weighted Barcodes 3 Decimals
- (21)....{NNDDD}
- :guilabel:`Barcode` field on product form
.. example::
To better understand the barcode pattern for weighted products, consider the barcode,
`2112345000008`:
- `21`: code that identifies this a barcode for weighted products.
- `12345`: five digits (denoted by `.....` in the table above) that identify the product.
- `00000`: five digits (denoted by `{NNDDD}` in the table) representing the weight of the
product. On the product form, the five weight values **must** be `00000`. The first two digits
are whole number values, and the last three digits are decimal values. For example, "13.5
grams" in the `{NNDDD}` format is `13500`.
- `8`: `check digit <https://www.gs1.org/services/check-digit-calculator>`_ for `211234500000`.
Together, these components make up a 13-character |EAN| - 13 barcode.
To configure the product barcode for `Pasta Bolognese`, the |EAN| barcode for weighted products,
`2112345000008`, is entered in the :guilabel:`Barcode` field on the product form (accessible by
going to :menuselection:`Inventory app --> Products --> Products`, and selecting the desired
product). In addition, the :guilabel:`Unit of Measure` is set to :guilabel:`kg`.
.. image:: barcode_nomenclature/barcode.png
:align: center
:alt: Barcode field on the product form.
Next, a customer's bowl of pasta is weighed to be `1.5` kilograms. This generates a new barcode for
the pasta, according to the weight: `211234501500`, which has a check digit of `2`. The new barcode
is `2112345015002`.
.. image:: barcode_nomenclature/weighted-barcode.png
:align: center
:alt: Generated barcode that includes a weight of 1.5 kg.
Ensure the products scan properly, by navigating to the :menuselection:`Barcode app --> Operations`.
Next, click any operation type, such as :guilabel:`Receipts`. Then, click the :guilabel:`New` button
to create a draft stock move. Scan the product weight barcode, such as `2112345015002`, and if the
intended product appears, the barcode setup is correct.
.. image:: barcode_nomenclature/barcode-scan.png
:align: center
:alt: Show successfully scanned barcode.
Create rules
============
.. important::
For |UPC|/|EAN| conversion to work for every barcode scanned, the setting in the
:guilabel:`UPC/EAN Conversion` field **must** be set to :guilabel:`Always`.
Adding new rules is necessary for |UPC| and |EAN| formats that are **not** in Odoo's default
list, since barcodes cannot be read successfully if there are unknown fields.
The last field at the top of the page is the :guilabel:`Is GS1 Nomenclature` field. For the
:guilabel:`Default Nomenclature`, this field should remain unchecked. This is because the
:guilabel:`Default Nomenclature` uses |UPC| and |EAN| encoding, *not* GS1 encoding.
While new rules can be created, Odoo fields do **not** auto-populate with information from these
rules. `Custom development <https://www.odoo.com/appointment/132>`_ is required for this
functionality.
.. image:: barcode_nomenclature/barcode-nomenclature-page-fields.png
To create a rule, first enable :ref:`developer mode <developer-mode>`. Then, navigate to
:menuselection:`Inventory app --> Configuration --> Barcode Nomenclatures`, and select
:guilabel:`Default Nomenclature`.
On this page, configure the following optional fields:
- :guilabel:`UPC/EAN Conversion`: determines if a |UPC|/|EAN| barcode should be automatically
converted when matching a rule with another encoding. Options include :guilabel:`Always` (the
default option), :guilabel:`Never`, :guilabel:`EAN-13 to UPC-A`, and :guilabel:`UPC-A to EAN-13`.
- :guilabel:`Is GS1 Nomenclature`: ensure this checkbox is **not** ticked, as the
:guilabel:`Default Nomenclature` uses |UPC| and |EAN| encoding, *not* GS1 encoding.
.. image:: barcode_nomenclature/rule-config.png
:align: center
:alt: Default Nomenclature page setting fields.
Further down the page, there is a list showcasing the :guilabel:`Rule Name`, :guilabel:`Type`,
:guilabel:`Encoding`, and :guilabel:`Barcode Pattern` for the *rules* and *barcode patterns* that
Odoo supports for the default nomenclature.
The :ref:`default nomenclature list <barcode/operations/default-nomenclature-list>` contains all the
information that can be condensed with a |UPC|/|EAN| barcode.
.. _barcode/operations/use-upc-ean-barcodes:
Use UPC/EAN barcodes in Odoo
============================
For product identification using |UPC|/|EAN| barcodes in Odoo, businesses **must** obtain `barcodes
<https://www.gs1us.org/upcs-barcodes-prefixes/how-to-get-a-upc-barcode>`_ purchased directly from
GS1.
The |UPC| and |EAN| barcode formats are predominantly used in their own regions. |UPC| is used only
in the United States and Canada, while |EAN| is used everywhere else globally.
A |UPC| is usually a 12-digit barcode used to identify most products, while |EAN| barcodes use
13-digit barcodes to identify products.
|UPC| codes can be converted to |EAN| by prefixing them with a zero. In Odoo, by default,
|UPC|/|EAN| barcodes are automatically converted one way or another when trying to match a rule with
the other encoding.
Refer to the :ref:`default nomenclature list <barcode/operations/default-nomenclature-list>` to see
a comprehensive list of all barcode patterns and rules to follow.
Create rules
------------
|UPC| and |EAN| barcodes contain specific information in the barcode. Scanning these codes from the
:ref:`default nomenclature list <barcode/operations/default-nomenclature-list>` automatically fills
corresponding data in the Odoo database.
Adding new barcode rules to this list ensures that non-standard (:dfn:`user-created`) formats are
interpreted accurately.
To create new rules, first activate :ref:`developer mode <developer-mode>`. Then, navigate to
:menuselection:`Inventory app --> Configuration --> Barcode Nomenclatures`. Select the
:guilabel:`Default Nomenclature` list item.
On the :guilabel:`Default Nomenclature` page, select :guilabel:`Add a line` at the bottom of the
On the :guilabel:`Default Nomenclature` page, click :guilabel:`Add a line` at the bottom of the
table, which opens a :guilabel:`Create Rules` pop-up window to create a new rule.
.. image:: barcode_nomenclature/barcode-nomenclature-new-rule-popup.png
:align: center
:alt: Create Rules pop-up window on Default Nomenclature page.
The :guilabel:`Rule Name` field is used internally to identify what the barcode represents.
The :guilabel:`Sequence` field represents the priority of the rule; meaning the smaller the value,
@@ -126,31 +154,23 @@ The barcode :guilabel:`Type` field represents different classifications of infor
understood by the system (e.g., :guilabel:`Package`, :guilabel:`Lot`, :guilabel:`Location`,
:guilabel:`Coupon`, etc.).
The :guilabel:`Encoding` field specifies which encoding the barcode uses; this rule **only** applies
The :guilabel:`Encoding` field specifies which encoding the barcode uses. This rule **only** applies
if the barcode uses this specific encoding. The available :guilabel:`Encoding` options are:
:guilabel:`EAN-13`, :guilabel:`EAN-8`, :guilabel:`UPC-A`, and :guilabel:`GS1-28`.
The :guilabel:`Barcode Pattern` field represents how the sequence of letters or numbers is
recognized by the system to contain information about the product. Odoo follows the sequential order
of this table, and uses the first rule it matches, based on the sequence.
recognized by the system to contain information about the product. Sometimes, when a certain amount
of digits are required, the number of `.` is shown. `N` represents whole number digits, and `D`
represent decimal digits.
.. note::
Barcode patterns can also define how numerical values, such as weight or price, are encoded in
the barcode.
They are indicated by **{NNN}**, where `N` defines where the number's digits are encoded.
*Floats* are also supported with the decimals, indicated by `D`, such as **{NNNDD}**.
In this case, the barcode field on the associated records **must** show these digits as zeros.
.. example::
`1...` represents any 4-digit number that starts with 1. `NNDD` represents a two digit number
with two decimal points. For example, `14.25` is 1425.
After filling in the information, click the :guilabel:`Save & New` button to save the rule, and
instantly start creating another rule. Or, click :guilabel:`Save & Close` to save the rule, and
return to the table of rules.
.. tip::
When the :guilabel:`Barcode Pattern` field contains `.*`, it means it can contain **any** number
of characters - those characters being **any** number or type of character.
.. _barcode/operations/default-nomenclature-list:
Default nomenclature list
@@ -212,5 +232,9 @@ written in regular expressions.
- Any
- .*
.. note::
When the :guilabel:`Barcode Pattern` contains `.*`, it means it can contain any number or type of
characters.
.. seealso::
:doc:`gs1_nomenclature`
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

@@ -13,4 +13,5 @@ Advanced operations
advanced_operations_warehouse/cross_dock
advanced_operations_warehouse/stock_warehouses
advanced_operations_warehouse/putaway
advanced_operations_warehouse/storage_category
advanced_operations_warehouse/cluster_picking
@@ -93,85 +93,3 @@ match is found:
:align: center
:alt: Some examples of putaway rules.
.. _inventory/warehouses_storage/storage-category:
Storage categories
==================
A *storage category* is an extra location attribute. Storage categories allow the user to define
the quantity of products that can be stored in the location, and how the location will be selected
with putaway rules.
Configuration
-------------
To enable storage categories, go to :menuselection:`Inventory app --> Configuration --> Settings`,
and activate the :guilabel:`Storage Categories` feature in the :guilabel:`Warehouse` section. Then,
click :guilabel:`Save`.
.. important::
The :guilabel:`Storage Locations` feature **must** be enabled to enable :guilabel:`Storage
Categories`.
Define storage category
-----------------------
To create a storage category, go to :menuselection:`Inventory app --> Configuration --> Storage
Categories` and click :guilabel:`Create`.
On the storage category form, type a name for the :guilabel:`Storage Category` field.
Options are available to limit the capacity by weight, by product, or by package type. The
:guilabel:`Allow New Product` field defines when the location is considered available to store a
product:
- :guilabel:`If location is empty`: a product can be added there only if the location is empty.
- :guilabel:`If products are the same`: a product can be added there only if the same product is
already there.
- :guilabel:`Allow mixed products`: several different products can be stored in this location at
the same time.
.. example::
Create putaway rules for pallet-stored items and ensure real-time storage capacity checks by
creating the `High Frequency pallets` storage category.
Name the :guilabel:`Storage Category`, and select :guilabel:`If all products are same` in the
:guilabel:`Allow New Product` field.
Then, define package capacity in the :guilabel:`Capacity by Package` tab, specifying the number
of packages for the designated :guilabel:`Package Type` and setting a maximum of `2.00` `Pallets`
for a specific location.
.. image:: putaway/storage-category.png
:align: center
:alt: Create a storage category on the page.
Once the storage category settings are saved, the storage category can be linked to a location.
To do that, navigate to the location by going to :menuselection:`Inventory app --> Configuration -->
Locations`, and select the location. Click :guilabel:`Edit` and select the created category in the
:guilabel:`Storage Category` field.
.. example::
Assign the `High Frequency pallets` storage category to the `WH/Stock/pallets/PAL 1`
sub-location.
.. image:: putaway/location-storage-category.png
:align: center
:alt: When a Storage Category is created, it can be linked to a warehouse location.
Storage categories in putaway rules
-----------------------------------
To continue the example from above, apply the `High Frequency Pallets` on the `PAL1` and `PAL2`
locations and :ref:`rework the putaway rules <inventory/routes/putaway-rule>` as follows:
Assume one pallet of lemonade cans is received:
- If PAL1 and PAL2 are empty, the pallet will be redirected to WH/Stock/Pallets/PAL1.
- If PAL1 is full, the pallet will be redirected to WH/Stock/Pallets/PAL2.
- If PAL1 and 2 are full, the pallet will be redirected to WH/Stock/Pallets.
.. image:: putaway/smart-putaways.png
:align: center
:alt: Storage Categories used in a variety of putaway rules.
@@ -0,0 +1,177 @@
==================
Storage categories
==================
A *storage category* is used with :doc:`putaway rules <putaway>`, as an extra location attribute to
automatically propose optimal storage locations for products.
Follow these steps to complete the setup:
#. :ref:`Enable the Storage Category feature <inventory/routes/enable-storage-categories>`
#. :ref:`Define a storage category <inventory/routes/define-storage>` with specific limitations
#. Assign a :ref:`category to storage locations <inventory/routes/assign-location>`
#. Add the storage category as an attribute to a :ref:`putaway rule
<inventory/routes/set-putaway-attribute>`
.. seealso::
:doc:`putaway`
.. note::
Assigning categories to storage locations tells Odoo these locations meet specific
requirements, such as temperature or accessibility. Odoo then evaluates these locations, based on
defined capacity, and recommends the best one on the warehouse transfer form.
.. _inventory/routes/enable-storage-categories:
Configuration
=============
To enable storage categories, go to :menuselection:`Inventory app --> Configuration --> Settings`.
Then, in the :guilabel:`Warehouse` section, ensure the :guilabel:`Storage Locations` and
:guilabel:`Multi-Step Routes` features are enabled.
Next, activate the :guilabel:`Storage Categories` feature. Finally, click :guilabel:`Save`.
.. image:: storage_category/enable-categories.png
:align: center
:alt: Show the Storage Categories feature.
.. _inventory/routes/define-storage:
Define storage category
=======================
A storage category with specific limitations **must** be created first, before it is applied to
locations, in order to decide the optimal storage location.
To create a storage category, go to :menuselection:`Inventory app --> Configuration --> Storage
Categories`, and click :guilabel:`Create`.
On the storage category form, type a name for the category in the :guilabel:`Storage Category`
field.
Options are available to limit capacity by weight, product, and package type.
.. note::
Weight limits can be combined with capacity by package or product (e.g. a maximum of one hundred
products with a total weight of two hundred kilograms).
While it is possible to limit capacity by product and package type at the same location, it may
be more practical to store items in different amounts across various locations, as shown in this
example of :ref:`capacity by package <inventory/routes/set-capacity-package>`.
The :guilabel:`Allow New Product` field defines when the location is considered available to store a
product:
- :guilabel:`If location is empty`: a product can be added there only if the location is empty.
- :guilabel:`If products are the same`: a product can be added there only if the same product is
already there.
- :guilabel:`Allow mixed products`: several different products can be stored in this location at
the same time.
.. tip::
When clicked, the :guilabel:`Location` smart button shows which storage locations the category
has been assigned to.
Capacity by weight
------------------
On a storage category form (:menuselection:`Inventory app --> Configuration --> Storage
Categories`), set a maximum product weight in the :guilabel:`Max Weight` field. This limit applies
to each location assigned this storage category.
Capacity by product
-------------------
In the :guilabel:`Capacity by Product` tab, click :guilabel:`Add a Line` to input items, and enter
their capacities in the :guilabel:`Quantity` field.
.. example::
Ensure only a maximum of five `Large Cabinets` and two `Corner Desk Right Sit` are stored at a
single storage location, by specifying those amounts in the :guilabel:`Capacity by Product` tab
of a storage category form.
.. image:: storage_category/capacity-by-product.png
:align: center
:alt: Show storage category limiting by product count.
.. _inventory/routes/set-capacity-package:
Capacity by package
-------------------
For companies using :doc:`packages <../../product_management/product_tracking/package>`, it becomes
possible to ensure real-time storage capacity checks, based on package types (e.g., crates, bins,
boxes, etc.).
.. important::
Enable the :guilabel:`Packages` feature in :menuselection:`Inventory app --> Configuration -->
Settings` to show the :guilabel:`Capacity by Package` tab.
.. example::
Create putaway rules for pallet-stored items, by creating the `High Frequency pallets` storage
category.
In the :guilabel:`Capacity by Package` tab, specify the number of packages for the designated
:guilabel:`Package Type`, and set a maximum of `2.00` `Pallets` for a specific location.
.. image:: storage_category/storage-category.png
:align: center
:alt: Create a storage category on the page.
.. _inventory/routes/assign-location:
Assign to location
==================
Once the storage category is created, assign it to a location. Navigate to the location by going to
:menuselection:`Inventory app --> Configuration --> Locations`, and select the desired location.
Then, select the created category in the :guilabel:`Storage Category` field.
.. example::
Assign the `High Frequency pallets` storage category (which limits pallets stored at any location
to two pallets) to the `WH/Stock/pallets/PAL 1` sub-location.
.. image:: storage_category/location-storage-category.png
:align: center
:alt: When a Storage Category is created, it can be linked to a warehouse location.
.. _inventory/routes/set-putaway-attribute:
Putaway rule
============
With the :ref:`storage category <inventory/routes/define-storage>` and :ref:`location
<inventory/routes/assign-location>` set up, create the :doc:`putaway rule <putaway>` by navigating
to :menuselection:`Inventory app --> Configuration --> Putaway Rules`.
Click the :guilabel:`Create` button to create the putaway rule. In the :guilabel:`Having Category`
field of the new putaway rule form, select the storage category.
.. example::
Continuing the example from above, the `High Frequency Pallets` storage category is assigned to
the putaway rule directing pallets of lemonade to locations with the `High Frequency Pallets`
storage category :ref:`assigned to them <inventory/routes/assign-location>`.
.. image:: storage_category/smart-putaways.png
:align: center
:alt: Storage Categories used in a variety of putaway rules.
Use case: limit capacity by package
===================================
To limit the capacity of a storage location by a specific number of packages, :ref:`create a storage
category with a Capacity By Package <inventory/routes/set-capacity-package>`.
Continuing the example from above, the `High Frequency Pallets` storage category is assigned to the
`PAL1` and `PAL2` locations.
Then, :ref:`putaway rules <inventory/routes/putaway-rule>` are set, so that any pallets received in
the warehouse are directed to be stored in `PAL1` and `PAL2` locations.
Depending on the number of pallets on-hand at each of the storage locations, when one pallet of
lemonade cans is received, the following scenarios happen:
- If `PAL1` and `PAL2` are empty, the pallet is redirected to `WH/Stock/Pallets/PAL1`.
- If `PAL1` is full, the pallet is redirected to `WH/Stock/Pallets/PAL2`.
- If `PAL1` and `PAL2` are full, the pallet is redirected to `WH/Stock/Pallets`.
@@ -52,9 +52,9 @@ location serves its intended purpose in the database:
:guilabel:`Inventory Loss`, :guilabel:`Production`, or :guilabel:`Transit Location` to categorize
the location. For details on each location type, refer to the :ref:`Location Types section
<inventory/warehouses_storage/location-type>`.
- :guilabel:`Storage Category`: only available with the :ref:`Storage Categories
<inventory/warehouses_storage/storage-category>` feature enabled in :menuselection:`Inventory app
--> Configuration --> Settings`.
- :guilabel:`Storage Category`: only available with the :doc:`Storage Categories
<../advanced_operations_warehouse/storage_category>` feature enabled in :menuselection:`Inventory
app --> Configuration --> Settings`.
- :guilabel:`Company`: the company the location belongs to.
- :guilabel:`Is a Scrap Location?`: tick this checkbox to allow for scrapped/damaged goods to be
stored in this location.
@@ -214,3 +214,5 @@ event-creation process.
events/event_templates
events/event_booths
events/event_tracks
events/registration_desk
events/revenues_report
@@ -0,0 +1,82 @@
=================
Registration Desk
=================
Use the *Registration Desk* feature in Odoo **Events** to grant access to registered event attendees
as they arrive, and store attendee-related data in the reporting metrics.
Registration Desk page
======================
On a mobile device (on the Odoo app or in a browser), open the :menuselection:`Events app`, and
click the :guilabel:`Registration Desk` to view the :guilabel:`Registration Desk` page.
.. image:: registration_desk/registration-desk-page.png
:align: center
:alt: The Registration Desk page in the Odoo Events application.
At the bottom of the :guilabel:`Registration Desk` box, there are options to either :guilabel:`Scan
a badge` or :guilabel:`Select Attendee`.
Scan a badge
============
Scan the codes present on event attendee badges, by navigating to :menuselection:`Events app -->
Registration Desk`, and selecting the :guilabel:`Scan a badge` option.
.. important::
Odoo **must** be granted access to the camera being used for the :guilabel:`Scan a badge` option
to work.
Once Odoo has access to the camera, a :guilabel:`Barcode Scanner` pop-up window appears, showing the
camera's point-of-view. There is also a specified view finder box present, whose size can be
manually modified, accordingly, using the :icon:`fa-crop` :guilabel:`(crop)` icon.
.. image:: registration_desk/barcode-scanner-window.png
:align: center
:alt: The Barcode Scanner window of the Registration Desk in the Odoo Events application.
When the badge code is in the middle of the view finder box, the code is scanned, the
:guilabel:`Barcode Scanner` pop-up window disappears, and the attendee is granted access to the
event. Once the code is scanned, their attendance is logged in the Odoo **Events** app.
If the barcode being scanned is invalid, an error pop-up message appears in the upper-right corner.
Select attendee
===============
Manually grant access to event attendees, by navigating to :menuselection:`Events app -->
Registration Desk`, and selecting the :guilabel:`Select Attendee` option.
Odoo reveals an :guilabel:`Attendees` page, with all the attendees for every event in the database,
in a default :icon:`oi-view-kanban` :guilabel:`Kanban` view.
.. image:: registration_desk/attendees-page.png
:align: center
:alt: The Attendees page, via the Registration Desk, located in the Odoo Events application.
On the :guilabel:`Attendees` page, each attendee card displays that person's name, which event they
are registered to attend, their associated company (if applicable), what ticket tier they purchased
(if applicable), along with two buttons: a :icon:`fa-check` :guilabel:`(checkmark)` and
:icon:`fa-undo` :guilabel:`(counter-clockwise arrow)`.
To grant access to a person, marking them as attended, click the :icon:`fa-check`
:guilabel:`(checkmark)` button on that attendee's card.
Click the :icon:`fa-undo` :guilabel:`(counter-clockwise arrow)` button on an attendee's card to undo
the previous action.
.. tip::
It is recommended to use an event-specific filter on the :guilabel:`Attendees` page, via the
search bar drop-down menu.
To do that, click the :icon:`fa-sort-desc` :guilabel:`(down arrow)` beside the seach bar to
reveal a drop-down menu with :guilabel:`Filters`, :guilabel:`Group By`, and :guilabel:`Favorites`
options.
For example, click the :guilabel:`Event` option, in the :guilabel:`Group By` column. Then, click
away to remove the drop-down menu. Odoo reveals the :guilabel:`Attendees` page with
event-specific columns, allowing users to locate specific event attendees.
.. seealso::
:doc:`../../essentials/search`
Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

@@ -0,0 +1,191 @@
===============
Revenues report
===============
The Odoo **Events** application creates custom reports, based on event-related data and analytics.
These reports can either be focused on *Attendees* or *Revenues*.
The following documentation focuses on the reporting options related to event *Revenues*.
Revenues reporting page
=======================
To access the *Attendees* reporting page, navigate to :menuselection:`Events app --> Reporting -->
Revenues`.
.. image:: revenues_report/default-view.png
:align: center
:alt: The default view of the Revenues reporting page in the Odoo Events application.
By default, the :guilabel:`Revenues` reporting page appears as a graph (a :icon:`fa-line-chart`
:guilabel:`(Line Chart)` with :icon:`fa-database` :guilabel:`(Stacked)` data). The default filters,
:guilabel:`Non-free tickets` and :guilabel:`Event Start Date: (current year)`, are present in the
search bar.
.. tip::
To learn more about the various graph views (and graph view options), refer to the :ref:`Graph
views <reporting/using-graph>` documentation.
The :guilabel:`Revenues` reporting page can also be viewed as a :ref:`pivot table
<reporting/views/pivot>`, by clicking the :icon:`oi-view-pivot` :guilabel:`(Pivot)` icon in the
upper-right corner.
Measures
--------
Choosing specific :ref:`Measures <reporting/choosing-measures>` is a quick way to customize
reporting pages.
Regardless of the chosen view, the measures on the :guilabel:`Revenues` reporting page are as
follows: :guilabel:`Revenues`, :guilabel:`Untaxed Revenues`, and :guilabel:`Count`.
.. note::
In the default graph view of the :guilabel:`Revenues` reporting page, only the
:guilabel:`Revenues` option is set in the :guilabel:`Measures` drop-down menu.
In graph view, only one of the :guilabel:`Measures` can be selected at a time.
When the pivot option is selected, all :guilabel:`Measures` options are selected, by default.
- :guilabel:`Revenues`: shows the revenues generated from events.
- :guilabel:`Untaxed Revenues`: shows the untaxed revenues generated from events.
- :guilabel:`Count`: shows the total amount of registrants who attended events.
Filters and grouping options
----------------------------
To reveal a drop-down menu of filter and grouping options to create custom reports, click the
:icon:`fa-caret-down` :guilabel:`(down arrow)` to the right of the search bar.
Doing so opens a drop-down mega menu of options organized into columns: :ref:`Filters
<search/preconfigured-filters>`, :ref:`Group By <search/group>`, and :ref:`Favorites
<search/favorites>`.
.. note::
If a time-related option has been selected from the :guilabel:`Filters` column (e.g. the default
:guilabel:`Event Start Date: (year)` filter), a :guilabel:`Comparison` column appears, with
comparison options for the corresponding time-related filter option selected.
Only **one** selection can be made from the :guilabel:`Comparison` column at a time.
.. seealso::
:doc:`../../essentials/search`
Filter options
~~~~~~~~~~~~~~
In the :guilabel:`Filters` column of the drop-down mega menu, there are various event-related
options that can be utilized to create custom reports, based on a number of specific criteria.
Multiple options in the :guilabel:`Filters` column can be selected at once.
The :guilabel:`Filters` column has the following options:
- :guilabel:`Non-free tickets`: event tickets/registrations that were **not** free.
- :guilabel:`Free`: event tickets/registrations that *were* free.
- :guilabel:`Pending payment`: event tickets/registrations that were purchased, but still have
payment pending.
- :guilabel:`Sold`: event tickets/registrations that have been successfully sold (and paid for).
- :guilabel:`Registration Date`: Click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon to
reveal a list of month, quarter, and year options. Select any number of these options to view a
specific periods of time and see how many registrations happened during that time.
- :guilabel:`Upcoming/Running`: include revenue-related information for events that are either
currently running or are going to happen in the future.
- :guilabel:`Past Events`: include revenue-related information for events that have already taken
place.
- :guilabel:`Event Start Date`: Click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon to
reveal a list of month, quarter, and year options. Select any number of these options to designate
event start dates to use as filters for revenue-related event data.
- :guilabel:`Event End Date`: Click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon to
reveal a list of month, quarter, and year options. Select any number of these options to designate
event end dates to use as filters for revenue-related event data.
- :guilabel:`Published Events`: Select this option to show revenue-related data for published
events.
- :guilabel:`Add Custom Filter`: Create a custom filter to analyze event-related revenue data. To
learn more, refer to the documentation on :ref:`custom filters <search/custom-filters>`.
Group By options
~~~~~~~~~~~~~~~~
In the :guilabel:`Group By` column of the drop-down mega menu, there are various event-related
options to create custom groupings of data.
Multiple :guilabel:`Group By` options can be selected at once.
The :guilabel:`Group By` column has the following options:
- :guilabel:`Event Type`: Group data based on the type of event.
- :guilabel:`Event`: Organize data into individual groups, separated by events.
- :guilabel:`Product`: Group data based on the event registration product.
- :guilabel:`Ticket`: Group data based on the type of event ticket purchased by attendees.
- :guilabel:`Registration Status`: Group data based on the status of registrations.
- :guilabel:`Sale Order Status`: Group data based on the status of event-related sales orders.
- :guilabel:`Customer`: Group data based on customer records.
- :guilabel:`Add Custom Group`: Click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon to
reveal a drop-down of grouping options. To select one, click on the desired option, and Odoo adds
it to the :guilabel:`Group By` column. Multiple selections can be made.
Sample report: event ticket analysis (graph)
============================================
The following is an example of how various filters and grouping options can create a useful analytic
graph report related to event revenues. In this case, the configurations present data about sold or
free tickets to published events, with the metrics separated by ticket type and event.
.. image:: revenues_report/event-ticket-analysis.png
:align: center
:alt: The event ticket analysis sample report with unique filters and groupings in place.
To create such a report, navigate to :menuselection:`Events app --> Reporting --> Revenues`. Stay in
the default graph view, but remove the default filters from the search bar.
Then, click the :icon:`fa-caret-down` :guilabel:`(down arrow)` to the right of the search bar, to
reveal the drop-down mega menu of filter and grouping options.
From here, select :guilabel:`Free` and :guilabel:`Sold` from the :guilabel:`Filters` column.
Then, since it is desired to **only** view data related to already published events, select the
:guilabel:`Published Events` option in the :guilabel:`Filters` column, as well.
Next, in the :guilabel:`Group By` column, select the :guilabel:`Event` and :guilabel:`Ticket`
options, **in that sequential order**. Doing so first groups the data by event, *then* by ticket
type, which provides a more useful array of data to analyze.
.. important::
The order in which the options are selected in the :guilabel:`Group By` column directly affects
how the data is presented on the report.
From there, additional configurations can be added for more detailed data, if desired.
If no additional filters or groupings are added, Odoo presents a graphical representation of data
related to all *free* or *sold* tickets for *published events*, grouped by *event*, and organized by
*ticket* type.
Sample report: event type analysis (pivot table)
================================================
The following is an example of how various filters and grouping options can create a useful analytic
pivot table report related to event revenues. In this case, the configurations present data about
how much revenue different event types have generated, in order to gauge which events are the most
profitable.
.. image:: revenues_report/event-type-analysis.png
:align: center
:alt: The event type analysis sample report with unique filters and groupings in place.
First, navigate to :menuselection:`Events app --> Reporting --> Revenues`, and switch to the pivot
table view, by clicking the :icon:`oi-view-pivot` :guilabel:`(Pivot)` icon in the upper-right
corner.
Keep the default filters (:guilabel:`Non-free tickets` and :guilabel:`Event Start Date: (year)`) in
the search bar.
Next, open the :guilabel:`Measures` drop-down menu, and deselect the option for :guilabel:`Count`,
because this report is only going to focus on revenues.
Then, click :icon:`fa-plus-square` :guilabel:`Total` above the column titles, and select
:guilabel:`Event Type` from the resulting drop-down menu.
With these configurations in place, all the revenues generated from the events (and their
corresponding registrations) are displayed, organized by the event type (presented as expandable
columns).
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

@@ -353,6 +353,49 @@ discount for each product line and the new price will automatically be calculate
Positive values for :guilabel:`Disc.%` will apply a *discount*, while negative values can be
used to *increase* the price.
Discount button
---------------
In Odoo 17, with the :ref:`Discounts setting <sales/discounts>` enabled, a :guilabel:`Discount`
button appears at the bottom of sales orders.
.. image:: pricing/discount-button-sales-order.png
:align: center
:alt: The discount button located at the bottom of a sales order form in the Odoo Sales app.
When the :guilabel:`Discount` button on a sales order is clicked, a :guilabel:`Discount` pop-up
window appears.
On this pop-up window, configure the :guilabel:`Discount` percentage, and select one of the
following discount options: :guilabel:`On All Order Lines`, :guilabel:`Global Discount`, or
:guilabel:`Fixed Amount`.
- :guilabel:`On All Order Lines`: When selected, Odoo provides the ability to add the specified
discount percentage (configured in the :guilabel:`Discount` field of the pop-up window) on all
existing order lines of the sales order.
- :guilabel:`Global Discount`: When selected, Odoo adds a discount product to the order, which has
the cumulative value equivalent to the specified discount percentage (configured in the
:guilabel:`Discount` field of the pop-up window). Any product added (or removed) *after* the
discount is added does **not** affect the discount value on the order line.
.. example::
In this example, since the total of the order is $600, and there is a 30% global discount, that
specific line is added to the sales order with a -180 value (which is 30% of $600).
.. image:: pricing/global-discount-option-so.png
:align: center
:alt: The sales order with the applied global discount option in the Odoo Sales application.
- :guilabel:`Fixed Amount`: When selected, the percentage designation in the :guilabel:`Discount`
field turns to a monetary value (e.g. dollars), wherein a specific amount must be entered. This
configured value is added as a discount line on the sales order.
.. note::
It is more beneficial to add a :guilabel:`Fixed Amount` discount after **all** desired products
have been added to a sales order. If there are changes made to the sales order *after* the
discount is added, make sure to change the value on the :guilabel:`Discount` line, or remove the
line and add the discount again.
.. _sales/advanced-price-rules:
Advanced price rules
Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@@ -7,6 +7,7 @@ Send Quotations
.. toctree::
:titlesonly:
send_quotations/create_quotations
send_quotations/quote_template
send_quotations/optional_products
send_quotations/get_signature_to_validate
@@ -0,0 +1,331 @@
=================
Create quotations
=================
In Odoo **Sales**, quotations can be created and sent to customers. Once a quotation has been
confirmed, it officially turns into a *sales order*, which can then be invoiced and paid for.
.. _sales/quotation-settings:
Quotation settings
==================
To access these setting options, navigate to :menuselection:`Sales app --> Configuration -->
Settings`, and scroll to the :guilabel:`Quotations & Orders` section.
.. image:: create_quotations/quotations-orders-section.png
:align: center
:alt: The Quotations and Orders section on the Odoo Sales app Settings page.
- :guilabel:`Quotation Templates`: Enable this option to create quotation templates featuring
standard product offers, which are then selectable on quotation forms. When this checkbox is
ticked, an additional field, :guilabel:`Default Template`, appears, along with a link to the
:guilabel:`Quotation Templates` page.
- :guilabel:`Online Signature`: Request an online signature to confirm orders.
- :guilabel:`Online Payment`: Request an online prepayment from customers to confirm orders. Request
a full or partial payment (via down payment). When this checkbox is ticked, an additional field,
:guilabel:`Prepayment amount (%)`, appears. There is also a link to the :guilabel:`Payment
Providers` page.
- :guilabel:`Default Quotation Validity`: Determine a set amount (in :guilabel:`days`) that
quotations can remain valid for.
- :guilabel:`Default Recurrence`: Select a default period from the drop-down menu to use as a
recurrence period for a new quotation.
- :guilabel:`Sale Warnings`: Get warning messages about orders that include specific products or
customers.
- :guilabel:`PDF Quote builder`: Customize the look of quotations with header pages, product
descriptions, footer pages, and more.
- :guilabel:`Lock Confirmed Sales`: Ensure no further edits can be made to confirmed orders.
- :guilabel:`Pro-Forma Invoice`: Send pro-forma invoices to customers.
To activate any of these settings, tick the checkbox beside the desired option(s). Then, click
:guilabel:`Save`.
Quotations dashboard
====================
The *Quotations* dashboard is the page that appears when the :menuselection:`Sales app` is opened.
By default, the :guilabel:`Quotations` dashboard displays all quotations in the database related to
the current user, as indicated by the default :guilabel:`My Quotations` filter present in the search
bar.
.. image:: create_quotations/quotations-dashboard.png
:align: center
:alt: The Quotations dashboard present in the Odoo Sales application.
.. note::
To view *all* quotations in the database, remove the :guilabel:`My Quotations` filter from the
search bar.
Quotations on this page appear in a default list view, but can also be viewed in a
:icon:`oi-view-kanban` :guilabel:`Kanban` view, :icon:`fa-calendar` :guilabel:`Calendar`,
:icon:`oi-view-pivot` :guilabel:`Pivot` table, :icon:`fa-area-chart` :guilabel:`Graph`, or
:icon:`fa-clock-o` :guilabel:`Activity` view.
To view and/or modify any listed quotation from the :guilabel:`Quotations` dashboard, click on the
desired quotation line from the list, and Odoo reveals the specific form for that selected
quotation.
Create quotation
================
To create a quotation, open the :menuselection:`Sales app`, and click the :guilabel:`New` button,
located in the upper-left corner of the main :guilabel:`Quotations` dashboard.
.. important::
The :guilabel:`New` button is **only** present if the :guilabel:`Quotations` dashboard is in list
or Kanban view.
Clicking the :guilabel:`New` button reveals a blank quotation form, with various fields and tabs to
configure.
.. image:: create_quotations/quotation-form.png
:align: center
:alt: A typical quotation form in the Odoo Sales application.
Begin by entering the customer's name in the :guilabel:`Customer` field at the top of the form. This
is a **required** field.
If the customer's information is already in the database, the :guilabel:`Invoice Address` and
:guilabel:`Delivery Address` fields auto-populate with the saved information for those respective
fields, based on the data from that customer's contact record (found in the **Contacts**
application).
If the customer was referred by another customer or contact, enter their name in the
:guilabel:`Referrer` field.
If a :guilabel:`Referrer` is selected, a new field, :guilabel:`Commission Plan` appears, in which a
commission can be selected from the drop-down menu. This commission is rewarded to the contact
selected in the :guilabel:`Referrer` field.
Next, if they have not already been auto-populated with the customer's information, enter the
appropriate addresses in the :guilabel:`Invoice Address` and :guilabel:`Delivery Address` fields.
Both of these fields are **required**.
Then, if desired, choose a :guilabel:`Quotation Template` from the drop-down field to apply to this
quotation. It should be noted that some additional fields may appear, depending on the template
selected.
The default date that appears in the :guilabel:`Expiration` field is based on the number configured
in the :ref:`Default Quotation Validity setting <sales/quotation-settings>` (in
:menuselection:`Sales app --> Configuration --> Settings`).
.. tip::
When using a quotation template, the date in the :guilabel:`Expiration` field is based off the
:guilabel:`Quotation Validity` figure on the template form.
If the quotation is for a recurring product or subscription, select the desired :guilabel:`Recurring
Plan` from that specific drop-down menu.
If desired, select a specific :guilabel:`Pricelist` to be applied to this quotation.
Lastly, select any specific :guilabel:`Payment Terms` to be used for this quotation.
Order Lines tab
---------------
The first tab on the quotation form is the :guilabel:`Order Lines` tab.
In this tab, select products, and quantities of those products, to add them to the quotation.
There are two ways to add products to the quotation from this tab.
Click :guilabel:`Add a product`, select the desired item from the :guilabel:`Product` drop-down
field, and proceed to adjust the quantity of that selected product, if necessary.
Or, click :guilabel:`Catalog` to reveal a separate page, showcasing every item (and every potential
product variant) in an organized catalog display, with items organizable by :guilabel:`Product
Category` and :guilabel:`Attributes`.
.. image:: create_quotations/product-catalog.png
:align: center
:alt: A product catalog accessible via a quotation in the Odoo Sales application.
From here, simply locate the desired items, click the :icon:`fa-shopping-cart` :guilabel:`Add`
button on the product card, and adjust the quantity, if needed. When complete, click the
:guilabel:`Back to Quotation` button in the upper-left corner to return to the quotation, where the
newly-selected catalog items can be found in the :guilabel:`Order Lines` tab.
If multiple items should be presented in a more organized way on the quotation, click :guilabel:`Add
a section`, enter a name for the section, and drag-and-drop that section heading in the desired
location amongst the items in the :guilabel:`Order Lines` tab. The section heading appears in bold.
If needed, click :guilabel:`Add a note` beneath a certain product line to add a custom note about
that specific product. The note appears in italics. Then, if needed, proceed to drag-and-drop the
note beneath the desired product line.
Beneath the product lines, there are buttons that can be clicked to apply any of the following:
:guilabel:`Coupon Code`, :guilabel:`Promotions`, :guilabel:`Discount`, and/or :guilabel:`Add
shipping`.
.. seealso::
- :doc:`../products_prices/ewallets_giftcards`
- :doc:`../products_prices/loyalty_discount`
- :doc:`../products_prices/prices/pricing`
Optional Products tab
---------------------
Open the :guilabel:`Optional Products` tab to select related products that can be presented to the
customer, which may result in an increased sale.
For example, if the customer wants to buy a car, an optional product that could be offered is a
*Trailer Hitch*.
.. seealso::
:doc:`optional_products`
Other Info tab
--------------
In the :guilabel:`Other Info` tab, there are various quotation-related configurations separated into
four different sections: :guilabel:`Sales`, :guilabel:`Delivery`, :guilabel:`Invoicing`, and
:guilabel:`Tracking`.
.. note::
Some fields **only** appear if specific settings and options have been configured.
Sales section
~~~~~~~~~~~~~
In the :guilabel:`Sales` section of the :guilabel:`Other Info` tab, there are sales specific fields
that can be configured.
.. image:: create_quotations/other-info-sales.png
:align: center
:alt: The Sales section of the Other Info tab of a quotation form in Odoo Sales.
- :guilabel:`Salesperson`: Assign a salesperson from the drop-down menu to be associated with this
quotation. The user who originally created the quotation is selected in this field, by default.
- :guilabel:`Sales Team`: Assign a specific sales team to this quotation. If the selected
:guilabel:`Salesperson` is a member of a sales team, that team is auto-populated in the field.
- :guilabel:`Company`: Select a company from the drop-down menu this quotation should be associated
with. This field only appears when working in a multi-company environment.
- :guilabel:`Online signature`: Tick this checkbox to request an online signature from the customer
to confirm the order. This field only appears if the *Online Signature* setting has been enabled.
- :guilabel:`Online payment`: Tick this checkbox, and enter a desired percentage in the adjacent
field, to request an online payment from the customer (for that designated percentage of the total
amount) to confirm the order. This field only appears if the *Online Payment* setting has been
enabled.
- :guilabel:`Customer Reference`: Enter a custom reference ID for this customer. The entered
reference ID can contain letters, numbers, or a mix of both.
- :guilabel:`Tags`: Add specific tags to the quotation for added organization and enhanced
searchability in the Odoo **Sales** application. Multiple tags can be added, if necessary.
Delivery section
~~~~~~~~~~~~~~~~
In the :guilabel:`Delivery` section of the :guilabel:`Other Info` tab, there are delivery-specific
fields that can be configured.
.. image:: create_quotations/other-info-delivery.png
:align: center
:alt: The Delivery section of the Other Info tab of a quotation form in Odoo Sales.
- :guilabel:`Shipping Weight`: Displays the weight of the items being shipped. This field is not
modifiable. Product weight is configured on individual product forms.
- :guilabel:`Incoterm`: Select an Incoterm (International Commerical Term) to use as predefined
commerical terms for international transactions.
- :guilabel:`Incoterm Location`: If an Incoterm is being used, enter the international location in
this field.
- :guilabel:`Shipping Policy`: Select a desired shipping policy from the drop-down menu. If all
products are delivered at once, the delivery order is scheduled, based on the greatest product
lead time. Otherwise, it is based on the shortest lead time. The available options are:
:guilabel:`As soon as possible` or :guilabel:`When all products are ready`.
- :guilabel:`Delivery Date`: Click into the empty field to reveal a calendar popover, from which a
customer delivery date can be selected. If no custom date is required, refer to the
:guilabel:`Expected` date listed to the right of that field.
Invoicing section
~~~~~~~~~~~~~~~~~
In the :guilabel:`Invoicing` section of the :guilabel:`Other Info` tab, there are invoicing specific
fields that can be configured.
.. image:: create_quotations/other-info-invoicing.png
:align: center
:alt: The Invoicing section of the Other Info tab of a quotation form in Odoo Sales.
- :guilabel:`Fiscal Position`: Select a fiscal position to be used to adapt taxes and accounts for
particular customers or sales orders/invoices. The default value comes from the customer. If a
selection is made in this field, an :icon:`fa-refresh` :guilabel:`Update Taxes` clickable link and
icon appear. When clicked, the taxes for this partiuclar customer and quotation are updated. A
confirmation window appears, as well.
- :guilabel:`Analytic Account`: Select an analytic account to apply to this customer/quotation.
Tracking section
~~~~~~~~~~~~~~~~
In the :guilabel:`Tracking` section of the :guilabel:`Other Info` tab, there are tracking specific
fields that can be configured.
.. image:: create_quotations/other-info-tracking.png
:align: center
:alt: The Tracking section of the Other Info tab of a quotation form in Odoo Sales.
- :guilabel:`Source Document`: Enter the reference of the document that generated the
quotation/sales order, if applicable.
- :guilabel:`Opportunity`: Select the specific opportunity (from the **CRM** app) related to this
quotation, if applicable.
- :guilabel:`Campaign`: Select the marketing campaign related to this quotation, if applicable.
- :guilabel:`Medium`: Select the method by which this quotation originated (e.g. *Email*), if
applicable.
- :guilabel:`Source`: Select the source of the link used to generate this quotation (e.g.
*Facebook*), if applicable.
.. seealso::
:doc:`../../../websites/website/reporting/link_tracker`
Notes tab
---------
In the :guilabel:`Notes` tab of the quotation form, enter any specific internal notes about the
quotation and/or customer, if desired.
Sending and confirming quotations
=================================
Once all the necessary fields and tabs have been configured, it is time to send the quotation to the
customer for confirmation. Upon confirmation, the quotation turns into an official sales order.
At the top of the form, there is a series of buttons:
- :guilabel:`Send by Email`: When clicked, a pop-up window appears with the customer's name and
email address in the :guilabel:`Recipients` field, the quotation (and reference ID) in the
:guilabel:`Subject` field, and a brief default message in the body of the email, which can be
modified, if needed.
Below that, a PDF copy of the quotation is attached. When ready, click :guilabel:`Send` to send
the quotation, via email, to the customer, so they can review and confirm it.
- :guilabel:`Send PRO-FORMA Invoice`: This button **only** appears if the *Pro-Forma Invoice*
setting has been enabled. When clicked, a pop-up window appears with the customer's name and email
address in the :guilabel:`Recipients` field, the *Proforma* invoice (and reference ID) in the
:guilabel:`Subject` field, and a brief default message in the body of the email, which can be
modified, if needed.
Below that, a PDF copy of the quotation is attached. When ready, click :guilabel:`Send` to send
the quotation, via email, to the customer, so they can review and confirm it.
- :guilabel:`Confirm`: When clicked, the quotation is confirmed, and the status changes to
:guilabel:`Sales Order`.
- :guilabel:`Preview`: When clicked, Odoo reveals a preview of the quotation the customer sees when
they log into their customer portal. Click the :icon:`fa-arrow-right` :guilabel:`Back to edit
mode` link at the top of the preview page, in the blue banner, to return to the quotation form.
- :guilabel:`Cancel`: When clicked, the quotation is canceled.
.. note::
If the *Lock Confirmed Sales* setting is enabled, the sales order becomes :guilabel:`Locked`, and
is indicated as such on the sales order form.
At this point, the quotation has been confirmed, turned into a sales order, and is now ready to be
invoiced and paid for.
For more information about invoicing, refer to the :doc:`Invoice based on delivered or ordered
quantities <../invoicing/invoicing_policy>`
.. seealso::
- :doc:`quote_template`
- :doc:`deadline`
- :doc:`get_signature_to_validate`
- :doc:`get_paid_to_validate`
- :doc:`pdf_quote_builder`
- :doc:`../invoicing/proforma`
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

@@ -87,3 +87,4 @@ invoice manually.
subscriptions/automatic_alerts
subscriptions/scheduled_actions
subscriptions/reports
subscriptions/payment_providers
@@ -0,0 +1,10 @@
:nosearch:
=================
Payment providers
=================
.. toctree::
:titlesonly:
payment_providers/wire_transfer
@@ -0,0 +1,156 @@
=============
Wire transfer
=============
The *wire transfer* payment method allows for payment instructions to be shared with a customer
after purchasing a product. With a subscription, these payment instructions are shared every time
the payment is renewed.
.. note::
The wire transfer payment method requires minimal setup, but in most cases, it is inefficient
compared to other online payment providers. It is recommended to use another payment provider
with subscriptions, due to wire transfers requiring manual confirmation for each payment.
.. _subscriptions/wire-transfer-configuration:
Configuration
=============
To use the wire transfer payment method, first ensure the *Wire Transfer* payment method is enabled.
To do so, begin by navigating to the *Payment Providers* page in either the **Accounting**,
**Website**, or **Sales** apps.
For example, navigate to :menuselection:`Accounting app --> Configuration --> Online Payments:
Payment Providers`, then click the :guilabel:`Wire Transfer` card.
.. tip::
If the **Accounting** app is not installed, the *Payment Providers* page can also be reached by
navigating to :menuselection:`Website app --> Configuration --> eCommerce: Payment Providers`, or
:menuselection:`Sales app --> Configuration --> Online Payments: Payment Providers`.
Next, set the :guilabel:`State` to :guilabel:`Enabled` to enable wire transfers. Use the drop-down
menus next to the :guilabel:`Company` and :guilabel:`Website` fields to set where wire transfers can
be used.
The options in the :guilabel:`Configuration` tab can be used to customize the wire transfer.
Optionally tick the checkbox next to :guilabel:`Enable QR Codes` to enable the use of QR codes when
paying by wire transfer, if desired.
Use the drop-down menu next to the :guilabel:`Communication` field to select the communication type
used on sales orders. Choose :guilabel:`Based on Document Reference` to use the sales order (or
invoice number), or :guilabel:`Based on Customer ID` to use the customer identifier. With either
method selected, communication is given to the customer, once they choose the wire transfer payment
method.
The configuration options listed under the :guilabel:`Availability` section are used to set payment
restrictions, and are optional. Use the :guilabel:`Maximum Amount` field to set a maximum payment
value, the :guilabel:`Currencies` field to restrict any currencies from being used for payment, and
the :guilabel:`Countries` field to restrict payment from any particular countries, if desired.
In the :guilabel:`Messages` tab, use the :guilabel:`Pending Message` field to add a message
containing wire transfer information. This message is displayed to the customer after confirming
their order, as well as if the order is marked as pending after the payment is processed.
If :doc:`a bank account <../../../finance/accounting/bank>` has already been defined, the account
number is automatically added to the default message generated by Odoo. A bank account can also be
added afterwards, and the message updates with the appropriate bank information by clicking
:icon:`fa-refresh` :guilabel:`Reload pending message`.
Once all necessary configuration settings are complete, the :icon:`fa-eye-slash`
:guilabel:`Unpublished` smart button located at the top of the page automatically changes to
:icon:`fa-globe` :guilabel:`Published` to show the wire transfer payment option is now visible
to customers. Only keep the payment method published if payments are ready to be received.
.. tip::
It is possible to keep the payment method enabled, but **not** visible to customers, until
payments are ready to be received. To do that, set the smart button to :icon:`fa-eye-slash`
:guilabel:`Unpublished` after setting the :guilabel:`State` to :guilabel:`Enabled`.
.. image:: wire_transfer/wire-transfer-published.png
:align: center
:alt: The wire transfer card enabled and published.
Test mode
---------
The wire transfer payment method can be tested before it is accessed by customers by selecting the
:guilabel:`Test Mode` option in the :guilabel:`State` field on the form. Upon selecting
:guilabel:`Test Mode`, an orange :guilabel:`Test mode` banner appears in the upper-right corner of
the form.
Next, enter the credentials for a bank account with accessible transactions in the
:guilabel:`Messages` tab. To re-enable normal function after testing, change the :guilabel:`State`
setting to :guilabel:`Enabled`.
.. note::
By default, the payment provider remains :guilabel:`Unpublished` in :guilabel:`Test Mode`, so it
is not visible to visitors.
.. warning::
It is recommended to use the :guilabel:`Test Mode` setting on a duplicate (or test) database to
avoid potential issues with invoice numbering.
.. _subscriptions/wire-transfer-payment:
Pay by wire transfer
====================
With wire transfers :ref:`enabled and published <subscriptions/wire-transfer-configuration>`,
customers see wire transfers as an available payment method at checkout when purchasing a product.
When this method is selected by a customer, they are shown the *Pending Message* set in the
:ref:`wire transfer configuration page <subscriptions/wire-transfer-configuration>`, after
confirming their purchase. Once the purchase is confirmed, a sales order is created.
.. image:: wire_transfer/payment-instructions-checkout.png
:align: center
:alt: The wire transfer pending message shown to customers.
.. important::
Online orders remain in the *Quotation sent* (i.e. unpaid order) stage until both the payment is
received, *and* the order is confirmed manually, using the :guilabel:`Confirm` button on the
sales order.
To begin processing the payment, navigate to :menuselection:`Sales app --> Orders --> Orders`, and
click the corresponding sales order. Ensure the sales order is correct, then click
:guilabel:`Confirm` to confirm the sales order.
Next, click the new :guilabel:`Create Invoice` button, then choose :guilabel:`Regular invoice`, and
click :guilabel:`Create Draft Invoice`. A draft of the invoice appears. Click :guilabel:`Confirm` to
validate the invoice.
To send this invoice to the customer, click the :guilabel:`Send & Print` button. A :guilabel:`Send`
pop-up window appears, with an email template configured, and a PDF invoice attached.
Ensure the information is correct, then click :guilabel:`Send & Print`. The pop-up window
disappears, and the :guilabel:`Send & Print` button turns gray to show the invoice has been sent.
.. tip::
The default template for sending an invoice can be modified by navigating to
:menuselection:`Settings app --> Companies --> Email Templates --> Review All Templates -->
Invoice: Sending`.
Next, click the :guilabel:`Register payment` button on the invoice page. A pop-up window titled,
:guilabel:`Register Payment`, appears with options for selecting the type of payment. In the
:guilabel:`Journal` field, select :guilabel:`Bank` from the drop-down menu. Next, set the
:guilabel:`Payment Method` to :guilabel:`Manual`. Ensure the :guilabel:`Amount` and
:guilabel:`Payment Date` are correct, then click the :guilabel:`Create Payment` button.
.. image:: wire_transfer/register-payment.png
:align: center
:alt: The register payment pop-up window.
The customer invoice is revealed with a green :guilabel:`In Payment` banner in the upper-right
corner. At this point, the flow is now complete.
.. image:: wire_transfer/in-payment-banner.png
:align: center
:alt: The green in payment banner displayed on the invoice.
.. note::
If payment has been received before sending the invoice, such as in cash, the payment can still
be registered in Odoo by clicking the :guilabel:`Register Payment` button, and creating the
payment *before* clicking :guilabel:`Send & Print`. Now, when an invoice is sent using the
:guilabel:`Send & Print` button, a new line is automatically added to the invoice message,
stating the invoice is already paid.
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

@@ -3,5 +3,5 @@ address you used to register on GitHub.
.. code-block:: console
$ git config --global user.name Your Name
$ git config --global user.email youremail@example.com
$ git config --global user.name "Your Name"
$ git config --global user.email "youremail@example.com"