Compare commits

...

13 Commits

Author SHA1 Message Date
Julien Carion (juca) 2b3b2c3488 [IMP] web: replace attribute in form dialog footer
Task-4010906
2024-08-01 13:52:54 +02:00
Donatienne (dopi) c7c9e3d6f0 [IMP] Documents: share button modified
taskid-4037157

closes odoo/documentation#10381

X-original-commit: a623c1ed0f
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Donatienne Pirlot (dopi) <dopi@odoo.com>
2024-08-01 08:13:52 +00:00
Felicious d9fc72e1dd [ADD] inventory: storage categories
closes odoo/documentation#10437

X-original-commit: d362d4ebdb
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-31 17:00:45 +00:00
Antoine Vandevenne (anv) 632f7c65ce [FIX] contributing/development: fix doc reference to tutorials.rst
closes odoo/documentation#10475

X-original-commit: 747e1bab14
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2024-07-31 14:19:56 +00:00
KC (ksc) a4b8a53aab [IMP] sales: adding global discount info
closes odoo/documentation#10468

X-original-commit: 6f74248de1
Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
2024-07-31 14:19:53 +00:00
Lara Martini (larm) 976968cd3a [ADD] Expenses: post expenses to accounting journals
closes odoo/documentation#10462

X-original-commit: 83b6895deb
Signed-off-by: Lara Martini (larm) <larm@odoo.com>
2024-07-31 14:19:52 +00:00
Felicious 183f981184 [IMP] barcode: add nomenclature example
closes odoo/documentation#10458

X-original-commit: 16537bb9c5
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 20:22:41 +00:00
Lara Martini (larm) aa65246560 [ADD] Fleet: new accident management doc
closes odoo/documentation#10454

X-original-commit: 71e2a50d40
Signed-off-by: Lara Martini (larm) <larm@odoo.com>
2024-07-30 20:22:40 +00:00
Felicious 8956e39eea [IMP] inventory: shipping rule note
closes odoo/documentation#10386

X-original-commit: 2fd4af7619
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
2024-07-30 18:49:46 +00:00
laro-odoo b693187c7c [IMP] web: hide seconds in datetime widgets
Task-2517675

closes odoo/documentation#10326

Related: odoo/odoo#162373
Related: odoo/enterprise#61553
Signed-off-by: Mathieu Duckerts-Antoine (dam) <dam@odoo.com>
2024-07-30 16:57:57 +00:00
KC (ksc) e1df7a714b [IMP] events: update track and manage talks
closes odoo/documentation#10126

X-original-commit: 6b17ed5052
Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
2024-07-30 15:32:12 +00:00
xmo-odoo 9f25d5e345 [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#10446

X-original-commit: 811b442fcc
Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
2024-07-30 14:06:16 +00:00
Zuzanna Luczynska f5a5b57be3 [ADD] project: new doc about sub-tasks
taskid-4066254

closes odoo/documentation#10353

X-original-commit: b3e2b51a6a
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Zuzanna Luczynska (zulu) <zulu@odoo.com>
2024-07-30 14:06:11 +00:00
60 changed files with 966 additions and 420 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.
+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

@@ -224,6 +224,11 @@ Optionally, create shipping rules to automatically generate shipping labels tail
product needs. For example, a shipping rule can be created for customers shipping expensive jewelry
items to purchase insurance.
.. note::
Shipping rules do **not** affect :ref:`shipping rate calculations
<inventory/shipping_receiving/third-party-rate>`, and are only used to improve the process of
:doc:`generating shipping labels <labels>`.
To use shipping rules, navigate to :menuselection:`Inventory app --> Configuration --> Delivery:
Shipping Methods`, and select the intended `Sendcloud` shipping method.
@@ -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.
@@ -1,161 +1,143 @@
======================
Track and manage talks
======================
============================
Talks, proposals, and agenda
============================
With Odoo Events, it's possible to provide attendees with the power to propose presenters to speak
at events.
With Odoo *Events*, users can utilize a fully-integrated event website, where attendees can quickly
access various tracks (talks, presentations, etc.), view entire agendas, and propose talks for the
event.
Configuration
Event website
=============
First, go to :menuselection:`Events --> Configuration --> Settings` and enable :guilabel:`Schedule &
Tracks`.
To access an event website, navigate to the specific event form in the Odoo *Events* app, and click
the :guilabel:`Go to Website` smart button. Or, while on the Odoo-built website for the company,
click the :guilabel:`Events` header option, and select the desired event to view that event's
website.
When that feature is enabled, two more options become available: *Live Broadcast* and *Event
Gamification*.
On the event website, there is an event-specific subheader menu with different options to choose
from.
:guilabel:`Live Broadcast` allows for the airing of tracks online through a YouTube integration.
With the *Schedule & Tracks* setting enabled in the Odoo *Events* app, the following links are
automatically added to the subheader menu, located on the event website: :guilabel:`Talks`,
:guilabel:`Talk Proposals`, and :guilabel:`Agenda`.
:guilabel:`Event Gamification` allows for the sharing of a quiz with your attendees, once a track
(talk) is over.
.. image:: track_manage_talks/track-submenu-options.png
:align: center
:alt: The track-related event submenu options on an event website built with Odoo Events.
To enable the :guilabel:`Schedule & Tracks` setting, navigate to :menuselection:`Events app -->
Configuration --> Settings`, tick the checkbox beside :guilabel:`Schedule & Tracks`, and click
:guilabel:`Save`.
Talks page
----------
The :guilabel:`Talks` link takes the attendee to a page filled with all the planned tracks for the
event.
.. image:: track_manage_talks/talks-page.png
:align: center
:alt: The Talks page on an event website built through the Odoo Events application.
At the top of :guilabel:`Talks` page, there are drop-down filter menus beside a :guilabel:`Search
a talk...` search bar.
The first drop-down filter menu (with the starting title: :guilabel:`Favorites`) is the only
drop-down filter menu that appears by default. When clicked, the resulting menu presents two
options: :guilabel:`Favorites` and :guilabel:`All Talks`.
Selecting :guilabel:`Favorites` shows *only* the tracks that have been favorited by the attendee.
.. note::
If no tracks have been favorited, and the :guilabel:`Favorites` filter is selected, Odoo presents
all the event tracks.
Selecting :guilabel:`All Talks` shows *all* the tracks, regardless if they have been favorited or
not.
The other drop-down filter menus that appear on this page are related to any configured tags (and
tag categories) created for event tracks in the backend.
.. tip::
:guilabel:`Event Gamification` isn't necessary for tracks to appear on the event page on the
website, but it can enhance the engagement and overall enjoyablity of the event for attendees.
To add tags and tag categories to track forms, open a desired event track form, and start typing
a new tag in the :guilabel:`Tags` field. Then, click :guilabel:`Create and edit...` from the
resulting drop-down menu.
Talks, talk proposals, and agenda
=================================
Doing so reveals a :guilabel:`Create Tags` pop-up form.
Once those two features are enabled, the following links are automatically added to the sub-header
menu, located on the event page on the website: :guilabel:`Talks`, :guilabel:`Talk Proposals`, and
:guilabel:`Agenda`. Any attendee can freely access these menu items and their corresponding content.
.. image:: track_manage_talks/create-tags-popup.png
:align: center
:alt: The Create Tags pop-up form that coincides with drop-down filter menus on Talks page.
The :guilabel:`Talks` link takes the attendee to a page full of all the talks for that event.
From here, users see the recently added tag in the :guilabel:`Tag Name` field. Beneath that,
there is an option to add a specific :guilabel:`Color Index` to the tag for added organization.
The :guilabel:`Talks Proposals` link takes the attendee to a form page, where they can propose
talks for the event.
Lastly, there is the :guilabel:`Category` field, where users can either select a pre-existing
category for this new tag, or create a new one.
The :guilabel:`Agenda` link takes the attendee to a page with all the talks for the event, but in a
calendar/time-slot format.
All options in the :guilabel:`Category` field for tags appear as their own drop-down filter menu
on the :guilabel:`Talks` page, located on the event website.
.. image:: track_manage_talks/events-talk-proposal-header.png
Beneath the drop-down filter menus at the top of the :guilabel:`Talks` page, there is a list of
planned tracks for the specific event, organized by day.
If an attendee wishes to favorite a track, they can click the :icon:`fa-bell-o` :guilabel:`(empty
bell)` icon, located to the right of the track title. Attendees will know a track has been favorited
when they notice the icon has been changed to :icon:`fa-bell` :guilabel:`(filled bell)` icon.
Favoriting a track this way places it on the list of :guilabel:`Favorites`, which is accessible from
the default drop-down filter menu, located at the top of the :guilabel:`Talks` page.
Talk Proposals page
-------------------
The :guilabel:`Talk Proposals` link takes attendees to a page on the event website, wherein they can
formerly submit a proposal for a talk (:dfn:`track`) for the event, via a custom online form.
.. image:: track_manage_talks/talk-proposals-page.png
:align: center
:alt: View of the published website and the talks, talk proposals, and agenda in Odoo Events
:alt: The Talk Proposals page on the event website built with the Odoo Events application.
Manage talk proposals
=====================
In addition to the form, an introduction to the page, along with any other pertinent information
related to the types of talks the event will feature can be added, if needed.
When attendees fill out and submit a talk proposal form on the website, a new :guilabel:`Proposal`
is instantly created in the back end for the event.
The talk proposal form can be modified in a number of different ways, via the web builder tools,
accessible by clicking :guilabel:`Edit` while on the specific page.
.. note::
All talks (Proposals, Confirmed, Announced, etc.) are accessible via the :guilabel:`Tracks`
smart button on the event form.
Then, proceed to edit any of the default fields, or add new forms with the :guilabel:`Form` building
block (located in the :guilabel:`Blocks` section of the web builder tools sidebar).
.. image:: track_manage_talks/events-tracks-kanban.png
Once all the necessary information is entered into the form, the attendees just need to click the
:guilabel:`Submit Proposal` button.
Then, that talk, and all the information entered on the form, can be accessed on the
:guilabel:`Event Tracks` page for that specific event in the :guilabel:`Proposal` stage, which is
accessible via the :guilabel:`Tracks` smart button on the event form.
At that point, an internal user can review the proposed talk, and choose to accept or deny the
proposal.
If accepted, the internal user can then move the track to the next appropriate stage in the Kanban
pipeline on the :guilabel:`Event Tracks` page for the event. Then, they can open that track form,
and click the :guilabel:`Go to Website` smart button to reveal that track's page on the event
website.
From there, they can toggle the :guilabel:`Unpublished` switch in the header to
:guilabel:`Published`, which allows all event attendees to view and access the talk.
Agenda page
-----------
The :guilabel:`Agenda` link takes attendees to a page on the event website, showcasing an event
calendar, depicting when (and where) events are taking place for that specific event.
.. image:: track_manage_talks/event-agenda-page.png
:align: center
:alt: View of the talks' proposals page emphasizing the column proposal in Odoo Events.
:alt: The event Agenda page on the event website built with the Odoo Events application.
If a proposal is accepted, move the :guilabel:`Event Track` to the appropriate stage in the Kanban
view (e.g. `Confirmed`, etc.). Then, go to that particular event's template form, and click the
:guilabel:`Go to Website` smart button to reach that specific talk's page on the website.
Clicking any track on the calendar takes the attendee to that specific track's detail page on the
event website.
In the upper right corner, toggle the switch from :guilabel:`Unpublished` to :guilabel:`Published`,
and the talk is instantly accessible on the website.
.. note::
Without publishing a talk, attendees will never be able to access it.
.. image:: track_manage_talks/events-tracks-publish.png
:align: center
:alt: View of the website page to publish a proposed talk for Odoo Events.
Attendees list and attendance
-----------------------------
Once attendees have registered for a specific event, they are added to the :guilabel:`Attendee List`
for that event, which is accessible via the :guilabel:`Attendees` smart button on the event template
form, or :menuselection:`Reporting --> Attendees` and sorted by event.
.. note::
When an attendee arrives at the event, they will be marked as attending (:guilabel:`Confirmed
Attendance`), and the status of that attendee will change to :guilabel:`Attended.`
.. image:: track_manage_talks/events-attendees-smartbutton.png
:align: center
:alt: Overview of events with the kanban view in Odoo Events.
When analyzing an :guilabel:`Attendees list`, Odoo provides different ways to view the information.
Each view option presents the same information, but in a slightly different layout. To change the
view, click on the icons in the upper right hand of the screen.
.. image:: track_manage_talks/events-attendees-view-options.png
:align: center
:alt: Various view options on the attendees list page.
In the :guilabel:`Kanban` view, it can be confirmed whether the attendees have already paid or
remain unpaid.
The :guilabel:`List` view provides information in a more traditional list formation.
The :guilabel:`Calendar` view provides a clear schedule visualization of which attendees are
arriving on specific dates of the event.
The :guilabel:`Graph` view provides graphical representations of that event's attendees, along with
numerous filters and customizable measures for deeper analysis.
The :guilabel:`Cohort` view lays out attendee data to better analyze the number of registration
dates.
.. note::
Tickets sold through sales orders validate attendees as soon as the quotation is confirmed.
Manage registrations
--------------------
Upon selecting an attendee, Odoo reveals that specific attendee's detail form.
From here, event badges can be sent manually, by selecting :guilabel:`Send By Email`. The
:guilabel:`Attendee` can also be marked as :guilabel:`Attended`, or the registration can be
cancelled altogether via the :guilabel:`Cancel Registration` button.
.. image:: track_manage_talks/events-send-email-button.png
:align: center
:alt: View of an attendee form emphasizing the send by email and cancel registration in Odoo
Events.
Lead Generation Rules
---------------------
With Odoo, leads can be generated from events.
To create and configure a :guilabel:`Lead Generation Rule` related to events, navigate to
:menuselection:`Events app --> Configuration --> Lead Generation`.
On the :guilabel:`Lead Generation Rule` page, every configured :guilabel:`Lead Generation Rule`
can be found, along with pertinent data related to those rules.
.. image:: track_manage_talks/events-lead-generation-rule-page.png
:align: center
:alt: How the Lead Generation Rule page looks in Odoo Events.
To create a new :guilabel:`Lead Generation Rule`, click :guilabel:`Create`, and fill out the
:guilabel:`Lead Generation Rule` form.
.. image:: track_manage_talks/events-lead-generation-rule-template.png
:align: center
:alt: How the Lead Generation Rule template looks in Odoo Events.
After naming the rule, configure *how* the lead should be created (either :guilabel:`Per Attendee`
or :guilabel:`Per Order`), and *when* they should be created, (when
:guilabel:`Attendees are created`, when :guilabel:`Attendees are confirmed`, or when
:guilabel:`Attendees attended` the event).
In the :guilabel:`For any of these Events` section, there are fields to attach this rule to any
specific event categories, company, and/or event. To add even more specificity to the rule, a
domain filter rule can be configured to ensure the rule only applies to a specific target audience
of attendees (found in the :guilabel:`If the Attendees meet these Conditions` section).
Lastly, in the :guilabel:`Lead Default Values` section, designate a :guilabel:`Lead Type`, then
assign it to a specific :guilabel:`Sales Team` (and/or :guilabel:`Salesperson`), and attach tags to
the rule, if necessary.
If an attendee wishes to favorite a track, they can click the :icon:`fa-bell-o` :guilabel:`(empty
bell)` icon, located to the right of the track title. Attendees will know a track has been favorited
when they notice the icon has been changed to :icon:`fa-bell` :guilabel:`(filled bell)` icon.
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

+52 -49
View File
@@ -4,8 +4,6 @@ Documents
**Odoo Documents** allows you to store, view, and manage files within Odoo.
You can upload any file (max 64MB per file on Odoo Online) and organize them in various workspaces.
.. seealso::
- `Odoo Documents: product page <https://www.odoo.com/app/documents>`_
- `Odoo Tutorials: Documents basics [video] <https://www.odoo.com/slides/slide/documents-basics-6841?fullscreen=1>`_
@@ -110,17 +108,18 @@ example:
down to the bottom of the right panel to see the :guilabel:`History` and :guilabel:`restore`,
:guilabel:`download`, or :guilabel:`delete` the document;
- :icon:`fa-unlock` (:guilabel:`Lock`);
- :icon:`fa-scissors` (:ref:`Split <documents/split>`).
- :icon:`fa-scissors` (:ref:`Split <documents/split>`);
- :icon:`fa-comments` (:guilabel:`Open chatter`).
You can also :icon:`fa-comments` :guilabel:`Open chatter` or delete the document by clicking the
:icon:`fa-trash` (:guilabel:`Move to trash`) icon.
To modify the name of your file, edit the :guilabel:`Name` field. Click the :icon:`fa-trash`
(:guilabel:`Move to trash`) icon to delete your document.
.. note::
Items moved to the trash are permanently deleted after 30 days.
Items moved to the trash are kept for 30 days in the :icon:`fa-trash` :guilabel:`Trash`
workspace, after which they are permanently deleted.
To modify the name of your file, click on :guilabel:`Name`. A :guilabel:`Contact` or an
:guilabel:`Owner` can be assigned. The related :guilabel:`Workspace` can be modified and it is
possible to access the related :guilabel:`Journal Entry` or add :guilabel:`Tags`.
A :guilabel:`Contact` or an :guilabel:`Owner` can be assigned. You can also modify the related
:guilabel:`Workspace` and add :guilabel:`Tags`.
.. note::
- The :guilabel:`Contact` is a person related to the document who only has read
@@ -158,20 +157,26 @@ pages, click the :icon:`fa-scissors` (:guilabel:`scissors`) icon.
Additional features
-------------------
Select a workspace and click the :icon:`fa-caret-down` (:guilabel:`down arrow`) next to the
:guilabel:`Upload` button to access additional features:
Select a workspace and click the :guilabel:`New` button to access additional features:
Upload
~~~~~~
You can upload any file (max 64MB per file on Odoo Online) to your **Documents** app. Select the
workspace where you want to upload your file, click the :guilabel:`New` button, then
:icon:`fa-upload` :guilabel:`Upload`.
Request
~~~~~~~
You can request files and organize them as documents to remind users to download them.
Select the workspace where the file should be stored, click the :icon:`fa-caret-down`
(:guilabel:`down arrow`) next to the :guilabel:`Upload` button, then :guilabel:`Request`. Add the
:guilabel:`Document Name` and select the person you need it from in the :guilabel:`Request To`
field. You can also fill in the :guilabel:`Due Date In`, confirm the :guilabel:`Workspace` the
document should belong to, and add :guilabel:`Tags` and a :guilabel:`Message`. Then, click
:guilabel:`Request`. A placeholder for the missing document is created in the workspace.
Select the workspace where the file should be stored, click the :guilabel:`New` button, then
:icon:`fa-paper-plane-o` :guilabel:`Request`. Add the :guilabel:`Document Name` and select the
person you need it from in the :guilabel:`Request To` field. You can also fill in the
:guilabel:`Due Date In`, confirm the :guilabel:`Workspace` the document should belong to, and add
:guilabel:`Tags` and a :guilabel:`Message`. Then, click :guilabel:`Request`. A placeholder for the
missing document is created in the workspace.
When your document is available, click the placeholder to upload it.
@@ -191,43 +196,48 @@ Document` column.
.. _documents/add-a-link:
Add a link
~~~~~~~~~~
Link
~~~~
To add a link to your documents dashboard, click :guilabel:`Add a Link`, enter the :guilabel:`URL`,
and :guilabel:`Name` it.
To add a link to your documents dashboard, click :icon:`fa-link` :guilabel:`Link`, enter the
:guilabel:`URL`, and :guilabel:`Name` it.
Spreadsheet
~~~~~~~~~~~
To create a new :doc:`spreadsheet <spreadsheet>`, click :guilabel:`Spreadsheet`. You can select
a :guilabel:`Blank spreadsheet` or an :doc:`existing template <spreadsheet/templates>`.
Share
~~~~~
-----
You can make a document or a workspace accessible to anyone by sharing a URL.
Share a document
****************
~~~~~~~~~~~~~~~~
To generate a **share link** to a document, select the document, click the :icon:`fa-caret-down`
(:guilabel:`down arrow`) next to the :guilabel:`Upload` button, and click :guilabel:`Share`.
To generate a **share link** to a document, select the document and click the :guilabel:`Share`
button.
In the pop-up, you can :guilabel:`Name` the share link, set a validity date by filling in the
:guilabel:`Valid Until` field, and if you own more than one site, select the :guilabel:`Website` you
want so the right domain name is reflected in the URL.
Click :guilabel:`Copy` to send the URL to whomever you want.
Click :guilabel:`Copy Link & Close` to copy the URL to your clipboard.
.. tip::
You can also generate a share URL by selecting the document, going to the right panel, and
clicking the :icon:`fa-share-alt` (:guilabel:`Share this selection`) icon.
Share a workspace
*****************
~~~~~~~~~~~~~~~~~
You can share a link to a workspace and allow users to :guilabel:`Download` its content or
:guilabel:`Download and Upload` files to it.
To do so, go to the left column of your dashboard and select the workspace you want to share. You
can also choose one or more tags that will be automatically added to the uploaded documents. Then,
click the :icon:`fa-caret-down` (:guilabel:`down arrow`) next to the :guilabel:`Upload` button and
:guilabel:`Share`.
click the :guilabel:`Share` button.
In the pop-up, a share :guilabel:`URL` you can :guilabel:`Copy` is displayed. You can
:guilabel:`Name` your share link and set a validity date by filling in the :guilabel:`Valid Until`
@@ -235,15 +245,15 @@ field. If you own more than one site, select the :guilabel:`Website` you want so
reflects the right domain name.
.. Note::
- The links added to your workspace using the :ref:`Add a Link <documents/add-a-link>` option
cannot be shared and are, therefore, excluded;
- The links added to your workspace using the :ref:`Link <documents/add-a-link>` option cannot be
shared and are, therefore, excluded.
- When tags are applied to a shared workspace, users can exclusively access the documents
associated with those tags.
.. _documents/upload:
Files upload
^^^^^^^^^^^^
************
Toggle the :guilabel:`Allow upload` switch to allow users to upload files to your workspace.
@@ -270,12 +280,6 @@ uploaded to the workspace using the chosen tags.
Select a line and click :guilabel:`Delete` to disable the URL. People who have received this
link will no longer be able to access the document(s) or workspace.
New spreadsheet
~~~~~~~~~~~~~~~
To create a new :doc:`spreadsheet <spreadsheet>`, click :guilabel:`New Spreadsheet`. You can select
a :guilabel:`Blank spreadsheet` or an :doc:`existing template <spreadsheet/templates>`.
.. _documents/workflow-actions:
Workflow actions
@@ -300,7 +304,7 @@ Set the conditions
------------------
Define the :guilabel:`Action Name` and then set the conditions that trigger the appearance of the
:icon:`fa-play` (:guilabel:`play`) icon on the right-side panel when selecting a file.
action button on the right-side panel when selecting a file.
There are three basic types of conditions you can set:
@@ -325,9 +329,8 @@ Advanced condition type: domain
It is recommended to have some knowledge of Odoo development to configure *Domain* filters
properly.
The :ref:`developer mode <developer-mode>` needs to be activated to access the :guilabel:`Domain`
condition from the :guilabel:`Actions` tab. Once done, select the :guilabel:`Domain` condition type
and click :guilabel:`New Rule`.
The :ref:`developer mode <developer-mode>` needs to be activated to enable the :guilabel:`Domain`
:guilabel:`Condition type`. Once done, click :guilabel:`New Rule`.
To create a rule, you typically select a :guilabel:`field`, an :guilabel:`operator`, and a
:guilabel:`value`. For example, if you want to add a workflow action to all the PDF files inside a
@@ -345,7 +348,7 @@ using the :guilabel:`Code editor`.
Configure the actions
---------------------
Select the :guilabel:`Actions` tab to set up your action. You can simultaneously:
Go to the :guilabel:`Actions` section to set up your action. You can simultaneously:
- **Move to Workspace**: move the file to any workspace;
- **Create**: create one of the following items attached to the file in your database:
@@ -370,20 +373,20 @@ Select the :guilabel:`Actions` tab to set up your action. You can simultaneously
- **Set Contact**: add a contact to the file, or replace an existing contact with a new one;
- **Set Owner**: add an owner to the file, or replace an existing owner with a new one;
- **Set Tags**: add, remove, and replace any number of tags;
- **Set Tags**: add, remove, and replace any number of tags.
To set up activities related to your actions, go to the :guilabel:`Activities` section:
- **Activities - Mark all as Done**: mark all activities linked to the file as done;
- **Activities - Schedule Activity**: create a new activity linked to the file as configured in
the action. You can choose to set the activity on the document owner.
.. image:: documents/workflow-action-example.png
:alt: Example of a workflow action Odoo Documents
Digitize documents with AI and optical character recognition (OCR)
==================================================================
Documents available in the Finance workspace can be digitized. Select the document to digitize,
click :guilabel:`Create Bill`, :guilabel:`Create Customer Invoice`, or
:guilabel:`Create credit note`, and then click :guilabel:`Send for Digitization`.
click :guilabel:`Create Vendor Bill`, :guilabel:`Create Customer Invoice`, or
:guilabel:`Create Customer Credit Note`, and then click :guilabel:`Send for Digitization`.
.. seealso::
:doc:`AI-powered document digitization <../finance/accounting/vendor_bills/invoice_digitization>`
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 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

@@ -10,3 +10,4 @@ Task management
tasks/task_stages_statuses
tasks/task_creation
tasks/recurring_tasks
tasks/sub-tasks
@@ -0,0 +1,51 @@
=========
Sub-tasks
=========
When handling project tasks, you can often benefit from splitting the workload into smaller
**sub-tasks**, making it easier to track progress and manage the work.
Odoos sub-task feature is particularly useful in some of the following cases:
- The task workload is too big to handle in one record.
- Theres a clear sequence of steps to follow.
- Some parts of the workload fall under the scope of different projects and/or assignees.
The original task to which sub-tasks are linked is referred to as the **parent task**. The sub-tasks
of the parent task are known as **child tasks**.
Creating sub-tasks
==================
To create a sub-task:
#. Open the Project app, then go into your desired project.
#. Click the task where you want to add the sub-task, then click the :guilabel:`Sub-tasks` tab.
#. Click :guilabel:`Add a line`, then fill in the :guilabel:`Title`.
#. Click the :icon:`fa-cloud-upload` (:guilabel:`cloud`) icon to save the task manually.
.. tip::
You can edit several fields of a sub-task directly from the parent tasks sub-task tab without
opening the individual sub-task. By default, those are: :guilabel:`Title`, :guilabel:`Priority`,
:guilabel:`Status`, and :guilabel:`Assignees`. Use the :icon:`fa-sliders` (:guilabel:`sliders`)
icon to add or remove fields.
Once the new sub-task is created, the following changes occur in the parent task:
- A **smart button** displays the total number of sub-tasks, as well as the number of closed
(**done** or **canceled**) sub-tasks. Click the smart button to access the list of the sub-tasks.
- The :guilabel:`Allocated time` displays the amount of time allocated to the parent task, as well
as time allocated to the sub-tasks. This can be used to ensure that the time allocated to
sub-tasks does not exceed time allocated to the parent task.
- The :guilabel:`Timesheets` tab includes a breakdown of time spent on the parent task as well as
sub-tasks.
Click :guilabel:`View` to open the sub-task you created. The sub-task form is identical to the
:ref:`task form <task_creation/task-configuration>`.
.. tip::
- A **smart button** allows to navigate back to the :guilabel:`Parent task`.
- The :guilabel:`Sub-tasks` tab allows for further creation of sub-tasks.
- Selecting a :guilabel:`Project` will trigger this sub-task to be displayed in the Kanban view of
the selected project.
@@ -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"
+1 -1
View File
@@ -84,7 +84,7 @@ Make your first contribution
.. important::
- Odoo development can be challenging for beginners. We recommend you to be knowledgeable enough
to code a small module before contributing. If that is not the case, take some time to go
through the :doc:`developer tutorials </developer/howtos>` to fill in the gaps.
through the :doc:`developer tutorials </developer/tutorials>` to fill in the gaps.
- Some steps of this guide require to be comfortable with Git. Here are some `tutorials
<https://www.atlassian.com/git/tutorials>`_ and an `interactive training
<https://learngitbranching.js.org/>`_ if you are stuck at some point.
@@ -707,6 +707,14 @@ Date & Time (`datetime`)
<field name="datetimefield" options="{'rounding': 10}" />
- `show_seconds`: when set to false, it hides the seconds from the datetime field.
The field will still accept datetime values, but the seconds will be hidden in
the UI (default: `true`).
.. code-block:: xml
<field name="datetimefield" widget="datetime" options="{'show_seconds': false}" />
Date Range (`daterange`)
This widget allows the user to select start and end date from a single picker.
@@ -843,6 +843,19 @@ elements at the end of dialogs.
<button string="Discard" special="cancel"/>
</footer>
When no `footer` element is specified, the view's standard buttons (like Save or Discard) will be
present by default. It is also possible to avoid replacing the standard buttons in form or x2many
dialogs by using the `replace` attribute. This attribute defaults to `True` if not specified but
setting it to `False` (or 0) will make it so that the specified `footer` will be added next to the
default buttons instead of replacing them.
.. example::
.. code-block:: xml
<footer replace="0">
<button string="Custom added action" type="object" name="my_action" class="btn-primary"/>
</footer>
.. _reference/view_architectures/form/button_container:
Buttons container