Compare commits
13 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
2b3b2c3488 |
[IMP] web: replace attribute in form dialog footer
Task-4010906 |
||
|
|
c7c9e3d6f0 |
[IMP] Documents: share button modified
taskid-4037157
closes odoo/documentation#10381
X-original-commit:
|
||
|
|
d9fc72e1dd |
[ADD] inventory: storage categories
closes odoo/documentation#10437
X-original-commit:
|
||
|
|
632f7c65ce |
[FIX] contributing/development: fix doc reference to tutorials.rst
closes odoo/documentation#10475
X-original-commit:
|
||
|
|
a4b8a53aab |
[IMP] sales: adding global discount info
closes odoo/documentation#10468
X-original-commit:
|
||
|
|
976968cd3a |
[ADD] Expenses: post expenses to accounting journals
closes odoo/documentation#10462
X-original-commit:
|
||
|
|
183f981184 |
[IMP] barcode: add nomenclature example
closes odoo/documentation#10458
X-original-commit:
|
||
|
|
aa65246560 |
[ADD] Fleet: new accident management doc
closes odoo/documentation#10454
X-original-commit:
|
||
|
|
8956e39eea |
[IMP] inventory: shipping rule note
closes odoo/documentation#10386
X-original-commit:
|
||
|
|
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> |
||
|
|
e1df7a714b |
[IMP] events: update track and manage talks
closes odoo/documentation#10126
X-original-commit:
|
||
|
|
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:
|
||
|
|
f5a5b57be3 |
[ADD] project: new doc about sub-tasks
taskid-4066254
closes odoo/documentation#10353
X-original-commit:
|
@@ -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>`.
|
||||
|
||||
|
Before Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
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.
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
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`
|
||||
|
||||
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
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`.
|
||||
|
||||
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 11 KiB |
@@ -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.
|
||||
|
||||
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 17 KiB |
@@ -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>`
|
||||
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 11 KiB |
|
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
|
||||
|
||||
|
After Width: | Height: | Size: 21 KiB |
|
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.
|
||||
|
||||
Odoo’s sub-task feature is particularly useful in some of the following cases:
|
||||
|
||||
- The task workload is too big to handle in one record.
|
||||
- There’s 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 task’s 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"
|
||||
|
||||
@@ -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
|
||||
|
||||