Compare commits

...

16 Commits

Author SHA1 Message Date
nni-odoo
55f940d2d5 [IMP] payment_xendit: tokenization
Tokenization is introduced in https://github.com/odoo/odoo/pull/158445 and needs extra configuration to setup for credit card payment.
We require optional 3DS to be enabled and dynamic 3DS to be disabled
2024-07-18 14:49:18 +08:00
KC (ksc)
192cbbf168 [FIX] subscriptions: corrected invoicing info
closes odoo/documentation#10200

X-original-commit: 1f88f9dd67
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
2024-07-17 17:30:50 +00:00
guillaume gallant (guga)
f6586f4dbd [IMP] Field Service: Correction on Itinerary doc
task 4053589

closes odoo/documentation#10226

X-original-commit: 79745b702f
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Guillaume Gallant (guga) <guga@odoo.com>
2024-07-17 14:44:09 +00:00
Parish Bracha
1d25e55346 [IMP] sales: 100 percent down section
closes odoo/documentation#10168

X-original-commit: 9d228fc301
Signed-off-by: Parish Bracha (pabr) <pabr@odoo.com>
2024-07-16 19:19:39 +00:00
Parish Bracha
8a6dbe56c3 [IMP] crm: add quotation product catalog
closes odoo/documentation#10163

X-original-commit: 9af6b453fe
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Parish Bracha (pabr) <pabr@odoo.com>
2024-07-16 19:19:38 +00:00
Lara Martini (larm)
f2f701dba6 [ADD] Recruitment: offer job positions
closes odoo/documentation#10211

X-original-commit: 11a2af286d
Signed-off-by: Lara Martini (larm) <larm@odoo.com>
2024-07-16 17:24:44 +00:00
Lara Martini (larm)
85ebf41d2c [ADD] Time off: new allocations doc
closes odoo/documentation#10206

X-original-commit: 7c10386675
Signed-off-by: Lara Martini (larm) <larm@odoo.com>
2024-07-16 17:24:43 +00:00
Parish Bracha
85c70cb544 [IMP] CRM: Inactive lost leads
closes odoo/documentation#10165

X-original-commit: 11ef368a58
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Parish Bracha (pabr) <pabr@odoo.com>
2024-07-16 17:24:42 +00:00
Donatienne (dopi)
0c30ca938e [IMP] Website: link to be updated
taskid-4047508

closes odoo/documentation#10222

X-original-commit: baf1e9b464
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Donatienne Pirlot (dopi) <dopi@odoo.com>
2024-07-16 15:53:47 +00:00
Donatienne (dopi)
2f3d467dc8 [IMP] website: translations
taskid-3617120

closes odoo/documentation#10219

X-original-commit: fda2534a74
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Donatienne Pirlot (dopi) <dopi@odoo.com>
2024-07-16 15:53:46 +00:00
“Audrey
3e853095d3 [ADD] Studio: approval rules
task-3553095

closes odoo/documentation#10164

X-original-commit: 28d5856640
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2024-07-16 10:07:42 +00:00
lejeune quentin
7467c92786 [ADD] point_of_sale: Documentation for Viva wallet
This PR add the documentation needed to use viva wallet payment method in Point Of Sale.
task-3667968

closes odoo/documentation#10187

X-original-commit: 7598c57f48
Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
Signed-off-by: Quentin Lejeune (qle) <qle@odoo.com>
Co-authored-by: lejeune quentin <qle@odoo.com>
Co-authored-by: Perazzo Loredana <lrpz@odoo.com>
2024-07-16 06:57:37 +00:00
John Holton (hojo)
e0269e2f11 [ADD] Manufacturing: MO costs
closes odoo/documentation#10167

X-original-commit: 2de0593eb7
Signed-off-by: John Holton (hojo) <hojo@odoo.com>
2024-07-15 18:05:09 +00:00
John Holton (hojo)
3323cfe8ab [ADD] Manufacturing: Continuous product improvement
closes odoo/documentation#10162

X-original-commit: d4fe1eb4d1
Signed-off-by: John Holton (hojo) <hojo@odoo.com>
2024-07-15 18:05:08 +00:00
Donatienne (dopi)
83d52c83fa [IMP] documents: new changes in V17
closes odoo/documentation#10180

Taskid: 3491654
X-original-commit: 3b573b0e60
Signed-off-by: Donatienne Pirlot (dopi) <dopi@odoo.com>
2024-07-12 14:24:01 +00:00
Christophe Monniez
520b6e296a [REL] saas-17.4 2024-07-11 14:21:13 +00:00
64 changed files with 1281 additions and 434 deletions

View File

@@ -27,7 +27,7 @@ SOURCE_DIR = content
HTML_BUILD_DIR = $(BUILD_DIR)/html
ifdef VERSIONS
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/master
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/saas-17.4
endif
ifneq ($(CURRENT_LANG),en)
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/$(CURRENT_LANG)

View File

@@ -22,7 +22,7 @@ copyright = 'Odoo S.A.'
# `version` is the version info for the project being documented, acts as replacement for |version|,
# also used in various other places throughout the built documents.
# `release` is the full version, including alpha/beta/rc tags. Acts as replacement for |release|.
version = release = 'master'
version = release = 'saas-17.4'
# `current_branch` is the technical name of the current branch.
# E.g., saas-15.4 -> saas-15.4; 12.0 -> 12.0, master -> master (*).
@@ -231,6 +231,7 @@ sphinx.transforms.i18n.docname_to_domain = (
# is populated. If a version is passed to `versions` but is not listed here, it will not be shown.
versions_names = {
'master': "Master",
'saas-17.4': "Odoo Online",
'saas-17.2': "Odoo Online",
'saas-17.1': "Odoo Online",
'17.0': "Odoo 17",

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -33,6 +33,8 @@ Configuration on the Xendit Dashboard
#. In the :guilabel:`Webhook URL` section, enter your Odoo database's URL, followed by
`/payment/xendit/webhook` (e.g., `https://example.odoo.com/payment/xendit/webhook`) in the field
:guilabel:`Invoices paid` and click the :guilabel:`Test and save` button next to it.
#. Navigate to the `Card Settings page <https://dashboard.xendit.co/settings/payment-methods/cards-configuration>`_
and ensure that :guilabel:`Optional 3DS` is enabled while :guilabel:`Dynamic 3DS` is disabled.
Configuration on Odoo
=====================

View File

@@ -191,8 +191,8 @@ Odoo:
- :ref:`Initial Qualification <recruitment/initial-qualification>`
- :ref:`First Interview <recruitment/first-interview>`
- :ref:`Second Interview <recruitment/second-interview>`
- :ref:`Contract Proposal <recruitment/contract-proposal>`
- :ref:`Contract Signed <recruitment/contract-signed>`
- :doc:`Contract Proposal <recruitment/offer_job_positions>`
- :ref:`Contract Signed <recruitment/offer_job_positions/contract-signed>`
The last column, :guilabel:`Contract Signed`, is folded by default. Folded columns appear gray, and
the applicants in it are hidden from view. To expand the folded stage and view the applicant cards
@@ -542,141 +542,18 @@ activities or emails configured. The recruiter can now :doc:`schedule a second i
<recruitment/schedule_interviews>` with the applicant, following the same process as the first
interview.
.. _recruitment/contract-proposal:
Contract proposal
-----------------
When the applicant has passed the interview stages and an offer is ready to be sent, they can be
moved to the :guilabel:`Contract Proposal` stage. Drag and drop the applicant's card to the
:guilabel:`Contract Proposal` stage, or click on the :guilabel:`Contract Proposal` stage button at
the top-right of the individual applicant's card.
The next step is to send an offer to the applicant. On the applicant's card, click the
:guilabel:`Generate Offer` button. A :guilabel:`Generate a Simulation Link` pop-up appears. Most
fields are pre-populated with information from the job position. If any necessary fields are blank,
enter the relevant information in the fields.
.. note::
Not all fields may appear on the :guilabel:`Generate a Simulation Link` pop-up. Depending on the
localization setting for the company and the applications installed, some fields may not appear.
For example if the *Fleet* application is not installed, any fields related to vehicles do not
appear on the pop-up window.
Universal fields
~~~~~~~~~~~~~~~~
The following fields appear for all offers sent to applicants regardless of localization settings.
- :guilabel:`Contract Template`: the template currently being used to populate the
:guilabel:`Generate a Simulation Link` pop-up window. To modify the template, click the
:guilabel:`Internal link` icon to the right of the drop-down arrow. Make any changes, then click
:guilabel:`Save & Close`. A different :guilabel:`Contract Template` can be selected using the
drop-down menu.
- :guilabel:`Job Position`: the name of the :guilabel:`Job Position` being offered to the
applicant. The selections available in the drop-down menu correspond to the :guilabel:`Job
Positions` configured on the main *Recruitment* dashboard.
- :guilabel:`Job Title`: the specific name of the position being offered to the applicant.
- :guilabel:`Department`: the :guilabel:`Department` the job position falls under.
- :guilabel:`Contract Start Date`: the date the contract takes effect. The default date is the
current date. To modify the date, click the drop-down to reveal a calendar. Use the :guilabel:`<
(left)` and :guilabel:`> (right)` arrows on either side of the month to navigate to the desired
month, then click on the :guilabel:`day` to select the date.
- :guilabel:`Yearly Cost`: the annual salary being offered.
- :guilabel:`Link Expiration Date`: job offers are only valid for a specific period of time. The
default expiration date is 30 days. Modify the expiration date, if desired.
Send offer
~~~~~~~~~~
When the information is all updated, click :guilabel:`Send By Email` to send the offer to the
applicant.
If the applicant does not have an email address listed on their applicant card, a warning appears in
a red box at the bottom of the :guilabel:`Generate a Simulation Link` pop-up window, stating
:guilabel:`The applicant does not have a valid email set. The Offer Link won't be able to be
completed.` Click :guilabel:`Discard`, enter an email on the applicant's card, then click the
:guilabel:`Generate Offer` button again.
An email pop-up window loads. The default :guilabel:`Recruitment: Your Salary Package` email
template is used, and the :guilabel:`Recipients`, :guilabel:`Subject`, and email body are
pre-populated based on the email template.
If any attachments need to be added, click the :guilabel:`Attachments` button and a file explorer
window appears. Navigate to the desired file, then click :guilabel:`Open` to attach it to the email.
The attachment loads, and is listed above the :guilabel:`Attachments` button.
Once the email is ready to send, click :guilabel:`Send`.
.. note::
To send an offer, ensure the *Sign* application is installed. This is necessary so the offer can
be sent to the applicant by the recruiter. The applicant does not need any software installed.
.. image:: recruitment/send-offer.png
:align: center
:alt: Send an email to the applicant with a link to the offered salary.
Configure your package
~~~~~~~~~~~~~~~~~~~~~~
The email template includes a :guilabel:`Configure your package` button. This link takes the
applicant to a webpage where they can modify the proposed salary package, and enter their personal
information.
Once the applicant is hired, the personal information entered on the webpage is imported to their
employee record, when created.
If applicable, the applicant can modify their salary package. This option is not available for all
localizations. Depending on where the company is located, this option may not be available.
Once all the information is completed, the applicant accepts the offer by clicking the
:guilabel:`Review Contract & Sign` button to accept the contract and sign it using the *Sign*
application.
.. _recruitment/contract-signed:
Contract signed
---------------
Once the applicant has accepted the offer and signed the contract, the next step is to move the
applicant to the :guilabel:`Contract Signed` stage. To move the applicant to the next stage, drag
and drop the applicant's card to the :guilabel:`Contract Signed` stage, or click the
:guilabel:`More` button at the top of the applicant's card to reveal the :guilabel:`Contract
Signed` stage button at the top of the individual applicant's card, and click :guilabel:`Contract
Signed`.
The :guilabel:`Contract Signed` stage is folded in the Kanban view, but the card may still be
dragged and dropped into that stage.
Once the applicant's card moves to the :guilabel:`Contract Signed` stage, a green :guilabel:`HIRED`
banner appears in the top-right of the applicant's card.
.. image:: recruitment/hired.png
:align: center
:alt: Hired banner in the top right corner of applicant card.
Create employee
~~~~~~~~~~~~~~~
Once the applicant has been hired, the next step is to create an employee record of them. On the
applicant's card, click the :guilabel:`Create Employee` button in the top-left. An employee form
appears, and any information from the applicant's card that can be imported into the employee card
appears in the form.
Fill out the rest of the form. For detailed information on the fields, refer to the
:doc:`employees/new_employee` documentation. When done, the employee record is saved in the
*Employees* app.
.. seealso::
- recruitment/new_job
- recruitment/schedule_interviews
- recruitment/add-new-applicants
- recruitment/schedule_interviews
- recruitment/offer_job_positions
- recruitment/refuse_applicant
.. toctree::
:titlesonly:
recruitment/new_job
recruitment/schedule_interviews
recruitment/add-new-applicants
recruitment/schedule_interviews
recruitment/offer_job_positions
recruitment/refuse_applicant

View File

@@ -0,0 +1,160 @@
===================
Offer job positions
===================
Once an applicant has successfully passed the various interview stages, the recruitment team is
ready to send an offer for employment. The next step is to send the applicant a contract.
.. seealso::
Refer to the :doc:`recruitment <../recruitment>` documentation for details on the various stages
of the recruitment process.
Contract proposal
=================
When an offer is ready to be sent, first open the applicant's card by navigating to the
:menuselection:`Recruitment app`, and clicking on the desired job position card.
From the resulting :guilabel:`Job Positions` Kanban view, the corresponding applicant card can be
dragged-and-dropped to the :guilabel:`Contract Proposal` stage. Or, click into the desired
applicant's card, and click the :guilabel:`Contract Proposal` stage, located in the status bar in
the top-right of the applicant's form.
The next step is to send an offer to the applicant. Start by selecting the desired applicant's card
to open their applicant form.
On the applicant's form, click the :guilabel:`Generate Offer` button. A :guilabel:`Generate a
Simulation Link` pop-up window appears.
Most fields are pre-populated with information from the job position. If any necessary fields are
blank, or if any information needs to be updated, enter, or update, the relevant information in the
corresponding fields.
.. note::
Depending on the localization setting for the company, and which applications are installed, some
fields may not appear in the :guilabel:`Generate a Simulation Link` pop-up window.
For example, if the *Fleet* application is **not** installed, any fields related to vehicles do
**not** appear.
Universal fields
----------------
The following fields appear in the :guilabel:`Generate a Simulation Link` pop-up window, regardless
of the localization.
- :guilabel:`Contract Template`: the template currently being used to populate the
:guilabel:`Generate a Simulation Link` pop-up window. Use the drop-down menu to select a different
:guilabel:`Contract Template`, if desired.
.. note::
To modify the template, hover over the current template name, and click the :icon:`oi-launch`
:guilabel:`Internal link` icon that appears to the right of the field. Make any desired
changes, then click :guilabel:`Save & Close`.
- :guilabel:`Job Position`: the name of the :guilabel:`Job Position` being offered to the applicant.
The selections available in the drop-down menu correspond to the job position configured on the
main *Recruitment* dashboard.
- :guilabel:`Job Title`: the selected :guilabel:`Job Position` populates this field, by default.
The title can be modified to suit the specific applicant's position and provide more details.
.. example::
An applicant is offered a marketing manager job at a shoe company, specifically for the
children's line.
The :guilabel:`Job Position` selected from the drop-down menu is `Marketing Manager`, and the
:guilabel:`Job Title` is modified for their specific responsibilities, `Marketing Manager:
Children's Shoes`.
- :guilabel:`Department`: the department the job position falls under.
- :guilabel:`Contract Start Date`: the date the contract takes effect. The default date is the
current date. To modify the date, click on the displayed date to reveal a calendar popover window.
Navigate to the desired month, then click the day to select the date.
- :guilabel:`Yearly Cost`: the annual salary being offered.
- :guilabel:`Link Expiration Date`: the number of days the job offer is valid. The default
expiration date is `30` days. Modify the expiration date, if desired.
Send offer
----------
Once the :guilabel:`Generate a Simulation Link` pop-up window is complete, click :guilabel:`Send By
Email` to reveal an email pop-up window.
.. important::
If the applicant does not have an email address listed on their applicant card, a warning appears
in a red box at the bottom of the :guilabel:`Generate a Simulation Link` pop-up window, stating:
:guilabel:`The applicant does not have a valid email set. The Offer Link won't be able to be
completed.` Click :guilabel:`Discard`, then enter an email on the applicant's card. Once an email
is entered, click the :guilabel:`Generate Offer` button, and the email pop-up window loads again.
The default :guilabel:`Recruitment: Your Salary Package` email template is used (set in the
:guilabel:`Load template` field), and the :guilabel:`Recipients`, :guilabel:`Subject`, and email
body are pre-populated based on the email template.
If any attachments need to be added, click the :icon:`fa-paperclip` :guilabel:`Attachments` button,
and a file explorer window appears. Navigate to the desired file, then click :guilabel:`Open` to
attach it to the email. The attachment loads, and is listed above the :icon:`fa-paperclip`
:guilabel:`Attachments` button.
Once the email is ready to send, click :guilabel:`Send`. The email pop-up window closes, and an
:guilabel:`Offers` smart button appears at the top of the applicant's card.
.. note::
To send an offer, ensure the *Sign* application is installed. This is necessary, so the offer can
be sent to the applicant by the recruiter, and they can actually sign the offer. The applicant
does **not** need any software installed to sign the offer.
.. image:: offer_job_positions/send-offer.png
:align: center
:alt: Send an email to the applicant with a link to the offered salary.
Configure your package
----------------------
If applicable, the applicant can modify their salary package. This option is not available for all
localizations. Depending on where the company is located, this option may not be available.
The email template includes a :guilabel:`Configure your package` button. This link takes the
applicant to a webpage, where they can modify the proposed salary package, and enter their personal
information.
Once the applicant is hired, the personal information entered on the webpage is imported to their
employee record, when created.
Once all the information is completed, the applicant can then accept the offer by clicking the
:guilabel:`Review Contract & Sign` button to accept the contract, and sign it using the *Sign*
application.
.. _recruitment/offer_job_positions/contract-signed:
Contract signed
===============
Once the applicant has accepted the offer and signed the contract, the next step is to move the
applicant to the :guilabel:`Contract Signed` stage. This stage is folded in the Kanban view, by
default.
To move the applicant to that stage, drag-and-drop the applicant's card to the :guilabel:`Contract
Signed` stage. If the stage is not visible, click the :icon:`fa-ellipsis-h` :guilabel:`(ellipsis)`
button to the right of :guilabel:`Contract Proposal` on the applicant's form, and click
:guilabel:`Contract Signed` from the resulting drop-down menu.
Once the applicant is moved to the :guilabel:`Contract Signed` stage, a green :guilabel:`HIRED`
banner appears in the top-right of the applicant's card and form.
.. image:: offer_job_positions/hired.png
:align: center
:alt: Hired banner in the top right corner of applicant card.
Create employee
===============
Once the applicant has been hired, the next step is to create their employee record. Click the
:guilabel:`Create Employee` button in the top-left corner of the hired applicant's form.
An employee form appears, with information from the applicant's card, and the employee contract.
Fill out the rest of the employee form. For detailed information on the fields, refer to the
:doc:`../employees/new_employee` documentation.
Once completed, the employee record is saved in the *Employees* app.

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -8,7 +8,7 @@ Odoo's *Time Off* application serves as a centralized hub for all time-off-relat
application manages requests, balances, allocations, approvals, and reports.
Users can :doc:`request time off <../hr/time_off/request_time_off>`, and see an overview of their
requests and time off balances. Managers can :ref:`allocate time off <time_off/allocate>` to
requests and time off balances. Managers can :doc:`allocate time off <time_off/allocations>` to
individuals, teams, or the whole company, and :ref:`approve time off requests
<time_off/manage-time-off>`.
@@ -429,124 +429,6 @@ Enter the following information on that new line:
:align: center
:alt: The Mandatory Days section with three configured days.
.. _time_off/allocate:
Allocate time off
=================
Once time off types and accrual plans have been configured, the next step is to allocate, or give,
time off to employees. This section is only visible to users who have either :guilabel:`Time Off
Officer` or :guilabel:`Administrator` access rights for the *Time Off* application.
To create a new allocation, navigate to :menuselection:`Time Off app --> Management -->
Allocations`.
This presents a list of all current allocations, including their respective statuses.
Click :guilabel:`New` to allocate time off, and a blank allocation form appears.
After entering a name for the allocation on the first blank field of the form, enter the following
information:
- :guilabel:`Time Off Type`: using the drop-down menu, select the type of time off that is being
allocated to the employees.
- :guilabel:`Allocation Type`: select either :guilabel:`Regular Allocation` or :guilabel:`Accrual
Allocation`. If the allocation is **not** based on an accrual plan, select :guilabel:`Regular
Allocation`.
- :guilabel:`Accrual Plan`: if :guilabel:`Accrual Allocation` is selected for the
:guilabel:`Allocation Type`, the :guilabel:`Accrual Plan` field appears. Using the drop-down menu,
select the accrual plan with which the allocation is associated. An accrual plan **must** be
selected for an :guilabel:`Accrual Allocation`.
- :guilabel:`Validity Period/Start Date`: if :guilabel:`Regular Allocation` is selected for the
:guilabel:`Allocation Type`, this field is labeled :guilabel:`Validity Period`. If
:guilabel:`Accrual Allocation` is selected for the :guilabel:`Allocation Type`, this field is
labeled :guilabel:`Start Date`.
The current date populates the first date field by default. To select another date, click on the
pre-populated date to reveal a popover calendar window. Navigate to the desired start date for the
allocation, and click on the date to select it.
If the allocation expires, select the expiration date in the next date field. If the time off does
*not* expire, leave the second date field blank. `No Limit` appears in the field if no date is
selected.
If :guilabel:`Accrual Allocation` is selected for the :guilabel:`Allocation Type`, this second
field is labeled :guilabel:`Run until`.
- :guilabel:`Allocation`: enter the amount of time that is being allocated to the employees. This
field displays the time in either :guilabel:`Hours` or :guilabel:`Days`, depending on how the
selected :ref:`Time Off Type <time_off/time-off-types>` is configured (in hours or days).
- :guilabel:`Mode`: using the drop-down menu, select how the allocation is assigned. This selection
determines who receives the time off allocation. The options are :guilabel:`By Employee`,
:guilabel:`By Company`, :guilabel:`By Department`, or :guilabel:`By Employee Tag`.
Depending on what is selected for the :guilabel:`Mode`, this following field is labeled either:
:guilabel:`Employees`, :guilabel:`Company`, :guilabel:`Department`, or :guilabel:`Employee Tag`.
Using the drop-down menu, indicate the specific employees, company, department, or employee tags
who are receiving this time off.
Multiple selections can be made for either :guilabel:`Employees` or :guilabel:`Employee Tag`.
Only one selection can be made for the :guilabel:`Company` or :guilabel:`Department`.
- :guilabel:`Add a reason...`: if any description or note is necessary to explain the time off
allocation, enter it in this field at the bottom of the form.
.. image:: time_off/new-allocation.png
:align: center
:alt: A new allocation form with all the fields filled out for the annual two week vacation
granted to all employees.
.. _time_off/request-allocation:
Request allocation
==================
If an employee has used all their time off, or is going to run out of time off, they can request an
allocation for additional time. Allocations can be requested in one of two ways, either from the
:ref:`Dashboard <time_off/dashboard>` or the :ref:`My Allocations <time_off/my-allocations>` view.
To create a new allocation request, click either the :guilabel:`New Allocation Request` button on
the main *Time Off* dashboard, or the :guilabel:`New` button in the :guilabel:`My Allocations` list
view. Both buttons open a new allocation request form.
.. note::
Both :guilabel:`New` buttons open a :guilabel:`New Allocation` request form, but when requested
from the :guilabel:`Dashboard`, the form appears in a modal. When requested from the
:guilabel:`My Allocations` list view, the screen navigates to a new allocation request page,
instead.
Enter the following information on the :guilabel:`New Allocation` request form:
- :guilabel:`Time Off Type`: select the type of time off being requested for the allocation from the
drop-down menu. After a selection is made, the title updates with the time off type.
- :guilabel:`Validity Period`: this field **only** appears if requesting an allocation with a time
off type that has the :guilabel:`Take Time Off in` field :ref:`configured
<time_off/time-off-officer>` to either :guilabel:`Day` or :guilabel:`Half Day`. This field does
**not** appear if the :guilabel:`Take Time Off in` field is set to :guilabel:`Hours`.
Using the calendar selector, select a start and end date the allocation is valid for. By default,
the current date populates the first field, and :guilabel:`No Limit` populates the second field.
Adjust both of these dates, if desired.
- :guilabel:`Allocation`: enter the amount of time being requested in this field. The format is
presented in either days or hours, depending on how the time off type is configured. Once this
field is populated, the name of the allocation request is updated to include the amount of time
being requested.
- :guilabel:`Add a reason...`: enter a description for the allocation request. This should include
any details that managers and approvers may need in order to approve the request.
If the request was created from the :guilabel:`Dashboard`, click the :guilabel:`Save & Close` button
to save the information and submit the request.
If the form was completed from the :guilabel:`My Allocations` list view, the information is
automatically saved as it is entered. However, the form can be saved manually at any time by
clicking the *save manually* button, represented by a :guilabel:`(cloud upload)` icon.
.. image:: time_off/allocation-request.png
:align: center
:alt: An allocation request form filled out for an employee requesting an additional week of
sick time.
Overview
========
@@ -664,6 +546,7 @@ detailed information on the reports, and their various options, refer to the :do
<../essentials/reporting>` documentation.
.. seealso::
- :doc:`time_off/allocations`
- :doc:`time_off/request_time_off`
- :doc:`time_off/my_time`
- :doc:`time_off/management`
@@ -671,6 +554,7 @@ detailed information on the reports, and their various options, refer to the :do
.. toctree::
:titlesonly:
time_off/allocations
time_off/request_time_off
time_off/my_time
time_off/management

View File

@@ -0,0 +1,118 @@
===========
Allocations
===========
Once :ref:`time off types <time_off/time-off-types>` and :ref:`accrual plans
<time_off/accrual-plans>` have been configured, the next step is to *allocate*, or give, time off to
employees.
The *Allocations* section of the *Time Off* app is **only** visible to users who have either
:guilabel:`Time Off Officer` or :guilabel:`Administrator` access rights for the *Time Off*
application. For more information on access rights, refer to the :doc:`access rights
<../../general/users/access_rights/>` documentation.
Allocate time off
=================
To create a new allocation, navigate to :menuselection:`Time Off app --> Management -->
Allocations`.
This presents a list of all current allocations, including their respective statuses.
Click :guilabel:`New` to allocate time off, and a blank allocation form appears.
After entering a name for the allocation on the first blank field of the form, enter the following
information:
- :guilabel:`Time Off Type`: using the drop-down menu, select the type of time off that is being
allocated to the employees.
- :guilabel:`Allocation Type`: select either :guilabel:`Regular Allocation` or :guilabel:`Accrual
Allocation`. If the allocation is **not** based on an :ref:`accrual plan
<time_off/accrual-plans>`, select :guilabel:`Regular Allocation`.
- :guilabel:`Accrual Plan`: if :guilabel:`Accrual Allocation` is selected for the
:guilabel:`Allocation Type`, the :guilabel:`Accrual Plan` field appears. Using the drop-down menu,
select the accrual plan with which the allocation is associated. An accrual plan **must** be
selected for an :guilabel:`Accrual Allocation`.
- :guilabel:`Validity Period/Start Date`: if :guilabel:`Regular Allocation` is selected for the
:guilabel:`Allocation Type`, this field is labeled :guilabel:`Validity Period`. If
:guilabel:`Accrual Allocation` is selected for the :guilabel:`Allocation Type`, this field is
labeled :guilabel:`Start Date`.
The current date populates the first date field, by default. To select another date, click on the
pre-populated date to reveal a popover calendar window. Navigate to the desired start date for the
allocation, and click on the date to select it.
If the allocation expires, select the expiration date in the next date field. If the time off does
*not* expire, leave the second date field blank. :guilabel:`No Limit` appears in the field if no
date is selected.
If :guilabel:`Accrual Allocation` is selected for the :guilabel:`Allocation Type`, this second
field is labeled :guilabel:`Run until`.
- :guilabel:`Allocation`: enter the amount of time that is being allocated to the employees. This
field displays the time in either :guilabel:`Hours` or :guilabel:`Days`, depending on how the
selected :ref:`Time Off Type <time_off/time-off-types>` is configured.
- :guilabel:`Mode`: using the drop-down menu, select how the allocation is assigned. This selection
determines who receives the time off allocation. The options are :guilabel:`By Employee`,
:guilabel:`By Company`, :guilabel:`By Department`, or :guilabel:`By Employee Tag`.
Depending on what is selected for the :guilabel:`Mode`, the following field is labeled either:
:guilabel:`Employees`, :guilabel:`Company`, :guilabel:`Department`, or :guilabel:`Employee Tag`.
Using the drop-down menu, indicate the specific employees, company, department, or employee tags
receiving this time off.
Multiple selections can be made for either :guilabel:`Employees` or :guilabel:`Employee Tag`.
Only one selection can be made for the :guilabel:`Company` or :guilabel:`Department`.
- :guilabel:`Add a reason...`: if any description or note is necessary to explain the time off
allocation, enter it in this field at the bottom of the form.
.. image:: allocations/new-allocation.png
:align: center
:alt: A new allocation form with all the fields filled out for the annual two week vacation
granted to all employees.
.. _time_off/request-allocation:
Request allocation
==================
If an employee has used all their time off, or will run out of time off, they can request an
allocation for additional time. Allocations can be requested in one of two ways, either from the
:ref:`Dashboard <time_off/dashboard>` or the :ref:`My Allocations <time_off/my-allocations>` view.
To create a new allocation request, click either the :guilabel:`New Allocation Request` button on
the main *Time Off* dashboard, or the :guilabel:`New` button in the :guilabel:`My Allocations` list
view. Both buttons open a new allocation request form.
.. note::
Both options open a new allocation request form, but when requested from the
:guilabel:`Dashboard`, the form appears in a pop-up window. When requested from the
:guilabel:`My Allocations` list view, the screen navigates to a new allocation request page,
instead.
Enter the following information on the new allocation request form:
- :guilabel:`Time Off Type`: select the type of time off being requested for the allocation from the
drop-down menu. After a selection is made, the title updates with the time off type.
- :guilabel:`Validity Period`: using the calendar selector, select a start and end date the
allocation is valid for. By default, the current date populates the first field, and :guilabel:`No
Limit` populates the second field. Adjust both of these dates, if desired.
- :guilabel:`Allocation`: enter the amount of time being requested in this field. The format is
presented in either :guilabel:`Days` or :guilabel:`Hours`, depending on how the :guilabel:`Time
Off Type` is configured. Once this field is populated, the name of the allocation request is
updated to include the amount of time being requested.
- :guilabel:`Add a reason...`: enter a description for the allocation request. This should include
any details that approvers may need to approve the request.
If the request was created from the :guilabel:`Dashboard`, click the :guilabel:`Save & Close` button
on the :guilabel:`New Allocation` pop-up window to save the information and submit the request.
If the form was completed from the :guilabel:`My Allocations` list view, the information is
automatically saved as it is entered. However, the form can be saved manually at any time by
clicking the :icon:`fa-cloud-upload` :guilabel:`(cloud upload)` icon.
.. image:: allocations/allocation-request.png
:align: center
:alt: An allocation request form filled out for an employee requesting an additional week of
sick time.

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -12,3 +12,4 @@ Basic setup
basic_setup/one_step_manufacturing
basic_setup/two_step_manufacturing
basic_setup/three_step_manufacturing
basic_setup/mo_costs

View File

@@ -0,0 +1,216 @@
=========================
Manufacturing order costs
=========================
.. |MO| replace:: :abbr:`MO (Manufacturing Order)`
.. |MOs| replace:: :abbr:`MOs (Manufacturing Orders)`
.. |POs| replace:: :abbr:`POs (Purchase Orders)`
.. |BoM| replace:: :abbr:`BoM (Bill of Materials)`
.. |BoMs| replace:: :abbr:`BoMs (Bills of Materials)`
The ability to accurately calculate the cost of manufacturing a product is critical when determining
product profitability. Odoo's *Manufacturing* app simplifies this calculation by automatically
calculating the cost to complete each manufacturing order (MO), as well as the average production
cost of a product, based on all completed |MOs|.
.. important::
Odoo's Manufacturing app distinguishes between the *manufacturing order cost* and the *real cost*
of an |MO|.
The |MO| cost represents how much it *should* cost to complete an |MO|, based on the
configuration of the product's bill of materials (BoM). This takes into account the cost and
quantity of components, as well as the cost of completing the necessary operations.
The real cost represents how much it *actually* costs to complete the |MO|. A few factors can
cause the real cost to differ from the |MO| cost. For example, an operation may take longer to
complete than estimated, a greater component quantity might be needed than was specified on the
|BoM|, or the price of components may change during manufacturing.
Cost configuration
==================
Odoo computes |MO| costs based on the configuration of the |BoM| used to manufacture a product. This
includes the cost and quantity of components and operations listed on the |BoM|, in addition to the
operating costs of the work centers where those operations are carried out.
Component cost
--------------
Component cost is calculated automatically, based on the average purchase cost of a component across
all purchase orders (POs). To view a component's cost, navigate to :guilabel:`Inventory app -->
Products --> Products`, and select a component product. The cost is displayed in the
:guilabel:`Cost` field of the :guilabel:`General Information` tab, on the component's product form.
It is possible to set the cost of a component manually, by clicking the :guilabel:`Cost` field on
the component's product form, and entering a value. However, any future |POs| for the component
override a value entered manually, resetting the :guilabel:`Cost` field back to an automatically
computed value.
Work center cost
----------------
To set the operating cost for a specific work center, navigate to :menuselection:`Manufacturing app
--> Configuration --> Work Centers`, and select a work center.
To set the operating cost for the work center, as a whole, enter a value in the :guilabel:`per
workcenter` field, located beside the :guilabel:`Cost per hour` section on the work center's
:guilabel:`General Information` tab. This operating cost is used regardless of how many employees
are working at the work center at any given time.
To set the operating cost for the work center based on the number of employees working there at a
given time, enter a value in the :guilabel:`per employee` field, located beside the :guilabel:`Cost
per hour` section on the work center's :guilabel:`General Information` tab. For example, if `25.00`
is entered in the :guilabel:`per employee` field, it costs $25.00 per hour for *each* employee
working at the work center.
Note that, if values are entered in both the :guilabel:`per workcenter` *and* :guilabel:`per
employee` fields, the value in the :guilabel:`per workcenter` field takes precedence, and the value
in the :guilabel:`per employee` field is ignored.
.. important::
It is also possible to set a per hour cost for specific employees, by navigating to the
:menuselection:`Employees` app, selecting an employee, clicking the :guilabel:`HR Settings` tab
on their employee form, and entering a value in the :guilabel:`Hourly Cost` field.
Just like the *per workcenter* field on a work center form, the :guilabel:`Hourly Cost` field on
an employee's form overrides the *per employee* field on a work center form.
However, the *per workcenter* field takes precedence over both the *per employee* field on the
workcenter form *and* the :guilabel:`Hourly Cost` field on the employee form.
|BoM| cost
----------
Configuring a |BoM| so Odoo can accurately calculate the cost of |MOs| that use it requires two
steps. First, components **must** be added, and the required quantity specified. Second, operations
**must** be added, along with the work centers where they are carried out.
Begin by navigating to :menuselection:`Manufacturing app --> Products --> Bills of Materials`.
Select a |BoM|, or create a new one by clicking :guilabel:`New`.
In the :guilabel:`Components` tab of the |BoM| form, add each component by clicking :guilabel:`Add a
line`, selecting the component from the drop-down menu in the :guilabel:`Component` column, and
entering the quantity in the :guilabel:`Quantity` column.
In the :guilabel:`Operations` tab, add an operation by clicking :guilabel:`Add a line` to open the
:guilabel:`Create Operations` pop-up window. Enter a title for the operation in the
:guilabel:`Operation` field.
Select the :guilabel:`Work Center` where the operation is carried out. Then, add a
:guilabel:`Default Duration`, which is the estimated amount of time the operation takes to complete.
By default, the :guilabel:`Duration Computation` field is set to :guilabel:`Set duration manually`,
which means that the number entered in :guilabel:`Default Duration` field is always used as the
expected duration of the operation.
Selecting :guilabel:`Compute based on tracked time` causes Odoo to automatically compute the default
duration based on a certain number of work orders, which is set in the :guilabel:`Based on` field.
Before there are work orders to compute this duration, the value in the :guilabel:`Default Duration`
field is used instead.
The hourly cost of operating the work center, and the duration of the operation, are used to
calculate the operation's cost.
Finally, click :guilabel:`Save & Close` to add the operation to the |BoM|, and close the
:guilabel:`Create Operations` pop-up window. Alternatively, click :guilabel:`Save & New` to add the
operation to the |BoM|, and open a blank :guilabel:`Create Operations` pop-up window to add another
operation.
.. seealso::
For a full overview of |BoM| configuration, see the documentation on :doc:`bills of materials
<bill_configuration>`.
|MO| overview
=============
Each |MO| has an *overview* page, which lists a variety of information about the |MO|, including
|MO| cost and real cost. To view the overview for an |MO|, navigate to :menuselection:`Manufacturing
app --> Operations --> Manufacturing Orders`, and select an |MO|. Then, click the :icon:`fa-bars`
:guilabel:`Overview` smart button at the top of the |MO|.
Both the |MO| cost and real cost take into account the cost and quantity of components, as well as
the cost of completing each work order. The overview page lists a row for each of these values, with
the sum of them listed at the bottom of the :guilabel:`MO Cost` and :guilabel:`Real Cost` columns.
Before work begins on an |MO|, the :guilabel:`MO Cost` and :guilabel:`Real Cost` columns display the
same costs. This is the *estimated* cost of completing the |MO|.
However, once work commences, the values in the :guilabel:`Real Cost` column may begin to diverge
from the values in the :guilabel:`MO Cost` column. This happens if a different component quantity is
used than was listed on the |MO|, or if the duration of a work order is different than expected.
Once the |MO| has been completed by clicking :guilabel:`Produce All`, the values in the
:guilabel:`MO Cost` column update to match those displayed in the :guilabel:`Real Cost` column.
.. image:: mo_costs/overview.png
:align: center
:alt: The MO Overview page.
Average manufacturing cost
==========================
In addition to the cost of each individual |MO| for a product, Odoo also tracks the average cost of
manufacturing the product, taking into account the cost of every completed |MO|. To view this,
navigate to :menuselection:`Inventory app --> Products --> Products`, and select a product.
The manufacturing cost of the product is displayed per unit of measure in the :guilabel:`Cost`
field, located in the :guilabel:`General Information` tab. The value continues to update as the
costs of additional |MOs| are factored into the average cost.
To the right of the :guilabel:`Cost` field is a :guilabel:`Compute Price from BoM` button, which
only appears for products with at least one |BoM|. Click this button to reset the cost of the
product to the expected cost, which only takes into account the components and operations listed on
the |BoM|.
.. important::
Be aware that clicking :guilabel:`Compute Price from BoM` does not set the price permanently. The
cost continues to update based on the average of the |BoM| price and the real cost of any future
|MOs|.
.. admonition:: Example workflow: manufacturing cost
:class: alert alert-success
Golf product manufacturer *Fairway Fields* produces a variety of golf products, including an
indoor *putting green*. They have configured a |BoM| for the putting green, so Odoo automatically
calculates the manufacturing cost of each putting green |MO|.
The |BoM| lists two components:
- One unit of *green felt*, which costs $20.00.
- One unit of a *rubber pad*, which costs $30.00.
The |BoM| also lists four operations, all of which are carried out at *Assembly Station 1*, which
has an hourly operating cost of $30.00. Those operations are as follows:
- *Cut felt*: default duration of seven minutes, for a total cost of $3.50.
- *Cut rubber pad*: default duration of five minutes, for a total cost of $2.50.
- *Attach pad to felt*: default duration of 15 minutes, for a total cost of $7.50.
- *Cut holes*: default duration of three minutes, for a total cost of $1.50.
Altogether, the components required to produce one putting green cost $50.00, and the operations
required cost $15.00, for a total manufacturing cost of $65.00. This cost is reflected in the
:guilabel:`Cost` field on the putting green's product form.
Fairway Fields confirms an |MO| for one putting green. Before manufacturing starts, the |MO|
overview lists a cost of `$65.00` in both the :guilabel:`MO Cost` and :guilabel:`Real Cost`
fields.
.. image:: mo_costs/overview-before.png
:align: center
:alt: The MO Overview page for one putting green, before production starts.
Manufacturing begins, and the operations take ten minutes longer than expected, for a total
manufacturing time of 40 minutes. This deviation from the |BoM| is reflected on the |MO|
overview, which now lists a :guilabel:`Real Cost` of `$70.00`.
.. image:: mo_costs/overview-during.png
:align: center
:alt: The MO Overview page for one putting green, during production.
Once manufacturing is finished, and the |MO| is marked as *Done*, the |MO| overview updates
again, so the values in the :guilabel:`MO Cost` and :guilabel:`Real Cost` columns match, each
displaying a value of `$70.00`.
On the putting green's product page, the :guilabel:`Cost` field now displays a cost of `$67.50`,
the average of the original cost of $65.00 and the real cost of $70.00 from the |MO|.

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -15,3 +15,4 @@ Workflows
workflows/unbuild_orders
workflows/byproducts
workflows/allocation
workflows/continuous_improvement

View File

@@ -0,0 +1,248 @@
==============================
Continuous product improvement
==============================
.. |MO| replace:: :abbr:`MO (Manufacturing Order)`
.. |MOs| replace:: :abbr:`MOs (Manufacturing Orders)`
.. |BoM| replace:: :abbr:`BoM (Bill of Materials)`
.. |ECO| replace:: :abbr:`ECO (Engineering Change Order)`
.. |QCP| replace:: :abbr:`QCP (Quality Control Point)`
.. |PLM| replace:: :abbr:`PLM (Product Lifecycle Management)`
.. |BoMs| replace:: :abbr:`BoMs (Bills of Materials)`
*Continuous improvement* is a general philosophy intended to help individuals and organizations
constantly improve themselves and the work they produce.
There are a variety of different methodologies that fall under the umbrella of continuous
improvement. These include kaizen, six sigma, and lean, among others. While the specific steps of
each method differ, their goal remains the same: implement a process by which improvement is a
perpetual goal, rather than a one-time accomplishment.
The sections below contain details about how Odoo can be used to implement four general steps common
to many of the most popular continuous improvement strategies, with links to documentation about
configuring the necessary features. The final section details how a specific company might configure
these Odoo implementations within their organization.
#. :ref:`manufacturing/workflows/ci-identify`
#. :ref:`manufacturing/workflows/ci-suggest`
#. :ref:`manufacturing/workflows/ci-implement`
#. :ref:`manufacturing/workflows/ci-review`
.. important::
Continuous improvement is not a one-size-fits-all methodology. While most strategies include
between four and six steps, proper implementation requires developing a system tailored to the
specific needs of each company.
This is not a limitation, but rather a benefit, as it makes the methodology flexible enough to
adapt to almost any use case. Odoo, in particular, adapts well to this flexibility, as it can be
configured to meet the needs of almost any workflow.
As such, it is important to remember the content below only provides *examples* of how Odoo
*might* be used. They should be viewed as more of a starting point, rather than a concrete
outline that every organization must follow.
.. _manufacturing/workflows/ci-identify:
Identify problems
=================
Before improvement can begin, it is necessary to determine where improvement is necessary. This is
where identifying problems comes into play. Two of the best Odoo apps for identifying problems with
products or processes are *Helpdesk* and *Quality*.
Helpdesk
--------
The *Helpdesk* app is useful for receiving feedback from outside of the organization, like from
clients or customers. This is accomplished by implementing one (or more) of the methods for
:doc:`receiving tickets <../../../services/helpdesk/overview/receiving_tickets>`, including email
aliases, live chat conversations, and website forms.
Using these methods, customers can submit feedback about problems, which is then reviewed by a
member of a :doc:`helpdesk team <../../../services/helpdesk>`. Depending on the outcome of the
review, the team member may decide to take further action to ensure the issue is addressed. This can
include creating a :doc:`quality alert <../../quality/quality_management/quality_alerts>`.
Quality
-------
The *Quality* app is useful for receiving feedback from *within* the organization, like from
employees.
One method for accomplishing this is to set up a :doc:`quality control point
<../../quality/quality_management/quality_control_points>` (QCP). A |QCP| is used to automatically
create quality checks at regular intervals, prompting employees to inspect, and confirm, the quality
of a product.
If an issue is found, an employee can then create a :doc:`quality alert
<../../quality/quality_management/quality_alerts>` to notify a quality team. Quality alerts can also
be created independent of a |QCP|, in the event that an employee discovers an issue without being
prompted to check for one. This is a great way for customer support employees to notify a quality
team of an issue brought to their attention by a customer ticket.
.. _manufacturing/workflows/ci-suggest:
Suggest improvements
====================
Once a problem is identified, the next step is to put forward ideas for how to address the problem.
As with identifying problems, the *Quality app* is also useful for suggesting improvements. In
addition, the *PLM* (*Product Lifecycle Management*) app can be used for this purpose, as well.
Quality
-------
When creating a :doc:`quality alert <../../quality/quality_management/quality_alerts>` to bring an
issue to the attention of a quality team, the :guilabel:`Corrective Actions` and
:guilabel:`Preventive Actions` tabs can be used to provide feedback about how the issue can be
addressed.
The :guilabel:`Corrective Actions` tab is used to suggest a method for fixing items affected by the
issue. For example, `Screw the bolts on tighter, so the seat stays in place`.
The :guilabel:`Preventive Actions` tab is used to suggest a method for preventing the issue from
occurring in the future. For example, `Do not tighten the screws too much, or they will be
stripped`.
The quality team that reviews the alert sees these suggested actions, and can take them into account
when deciding how to address the issue.
PLM
---
The |PLM| app is used to manage the lifecycle of a product from its introduction through each
successive version. As such, it is useful for testing ideas for product improvements.
Using :doc:`engineering change orders <../../plm/manage_changes/engineering_change_orders>`, product
management teams can create new iterations of product |BoMs|, adding or removing specific components
or operations, as needed. The products created using these |BoMs| are put through a review process
to confirm the effectiveness of the changes.
.. _manufacturing/workflows/ci-implement:
Implement strategies
====================
Implementing strategies involves putting the proposed solutions from the suggest improvements step
into action. The |PLM| app continues to be useful during this step, as it can be configured to make
|BoM| updates. The *Field Service* app can also be used by certain companies to make improvements to
products that have already been sold to customers.
PLM
---
Once |BoM| changes have gone through the proper review process, they can be approved, and the
updated |BoM| put into use. This is accomplished by configuring one of the |ECO| review stages to
:ref:`apply the changes <plm/eco/apply-changes>` made to the |BoM|, at which point the updated |BoM|
becomes available for new |MOs|.
Product |BoMs| can continue to be updated, as needed. The :doc:`version control
<../../plm/manage_changes/version_control>` features of the |PLM| app allow for easy management of
all versions of a given |BoM|.
Field Service
-------------
The |PLM| app is a great way to make changes to product |BoMs|. However, these changes only affect
products produced using the new |BoM|. If a defective product has already been sold to a customer,
it may be necessary to repair (or update) that product.
In such a case, the *Field Service* app can be used to schedule :doc:`onsite interventions
<../../../services/field_service/onsite_interventions>`. These interventions allow service
technicians (or other employees) to be sent to a customer's location to address an issue with a
product.
.. _manufacturing/workflows/ci-review:
Review actions
==============
Reviewing actions is where the "continuous" part of continuous improvement comes into play, as it
allows an organization to evaluate the decisions made in the previous steps. As such, this step is,
essentially, returning to the beginning of the process, so that additional problems can be
identified and addressed.
This means that the *Helpdesk* and *Quality* apps should be used again to receive customer and
employee feedback. Another app that may be useful at this stage is the *Surveys* app.
Surveys
-------
After implementing changes to a product or process, it may be wise to solicit customers for their
feedback directly, rather than waiting to hear from them of their own volition. This may bring to
light feedback that customers may have otherwise neglected to share.
One of the best ways to accomplish this is through the :doc:`Surveys <../../../marketing/surveys>`
app. Creating a survey, and sending it to customers who receive an updated product, increases the
likelihood of receiving relevant feedback about the product.
.. admonition:: Example workflow: coat rack product improvement
:class: alert alert-success
*Wood Hut* is a manufacturer of fine wood products. They are committed to manufacturing products
of the highest-possible quality, and are always looking for ways to improve the products they
sell, along with the processes used to create them.
Wood Hut uses the Odoo platform to manage every element of their production, fulfillment, and
customer satisfaction processes. They have developed a custom product improvement workflow that
incorporates the Helpdesk, Quality, PLM, and Manufacturing apps.
One of Wood Hut's most popular products is their *coat rack*. It's made entirely of oak, and
customers describe it as "sleek and elegant." However, recent customer feedback about the coat
rack has brought attention to quality issues that necessitate revising the current manufacturing
process.
The product revision workflow begins when the customer service team receives a ticket in the
Helpdesk app from a customer having problems with the coat rack she purchased. The customer,
Abigail Peterson, has found that her coat rack falls over when more than five coats are hanging
from it. This is a major issue, as the coat rack has enough dowels for six coats.
.. image:: continuous_improvement/helpdesk-ticket.png
:align: center
:alt: A Helpdesk ticket about an issue with the coat rack product.
Marc, the customer service employee assigned to the helpdesk ticket, opens the Quality app, and
creates a new quality alert. He tags the *Production Quality Team* and assigns Julie Andreson as
the quality employee responsible for the alert.
Julie reviews the alert, and consults with her team about the best course of action. They decide
that it is necessary to revise the product's |BoM| to prevent the issue from occurring in the
future, which Julie notes in the :guilabel:`Corrective Actions` tab of the quality alert.
.. image:: continuous_improvement/quality-alert.png
:align: center
:alt: A quality alert created about the issue with the coat rack product.
Then, Julie messages product engineer, Joe Kazan in the chatter of the quality alert to bring it
to his attention. Joe opens the |PLM| app and creates a new |ECO|, noting the problem with the
coat rack, and suggesting that a change to the product's |BoM| may be necessary.
.. image:: continuous_improvement/eco.png
:align: center
:alt: An ECO created to update the coat rack product's BoM.
Joe clicks :guilabel:`Start Revision`, and then the :guilabel:`Revision` smart button to open
version two of the coat rack's |BoM|. This |BoM| was created alongside the |ECO|, and remains
archived until it is approved.
After some testing, Joe discovers that adding a metal *support rod* to the coat rack strengthens
it, allowing the rack to hold six or more coats without falling over. He updates the |BoM| to
include the support rod as one of the components, and adds an extra operation to make sure it is
installed during the manufacturing process. Finally, he leaves a message in the chatter of the
|ECO|, letting his manager, Jose, know that it is ready for review.
.. image:: continuous_improvement/bom.png
:align: center
:alt: The coat rack BoM, updated to add an extra component and operation.
Jose reviews the changes, and confirms they are an effective method for addressing the problem
with the coat rack. He moves the |ECO| to the *Approved* stage, which makes version two of the
coat rack |BoM| the current version.
Now, each time an |MO| is created to produce a coat rack, the updated |BoM| is automatically
selected. Wood Hut begins producing the improved coat rack, and customer feedback confirms that
the new version has addressed the problem with its predecessor.
Using the Odoo platform, Wood Hut has implemented an end-to-end product improvement process.
Since the essential elements of this process (customer feedback, quality control, etc.) are
always functioning, it can be reused to continuously update products and processes.

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -8,9 +8,8 @@ You can upload any file (max 64MB per file on Odoo Online) and organize them in
.. seealso::
- `Odoo Documents: product page <https://www.odoo.com/app/documents>`_
- `Odoo Tutorials: Documents basics [video]
<https://www.odoo.com/slides/slide/documents-basics-674>`_
- `Odoo Tutorials: Using Documents with your Accounting App [video] <https://www.odoo.com/slides/slide/using-documents-with-your-accounting-app-675?fullscreen=1#>`_
- `Odoo Tutorials: Documents basics [video] <https://www.odoo.com/slides/slide/documents-basics-6841?fullscreen=1>`_
- `Odoo Tutorials: Using Documents with your Accounting App [video] <https://www.odoo.com/slides/slide/accounting-integration-and-workflow-actions-6853?fullscreen=1>`_
Configuration
=============
@@ -18,9 +17,9 @@ Configuration
By going to :menuselection:`Documents --> Configuration --> Settings`, you can enable the
centralization of files attached to a specific area of your activity. For example, by ticking
:guilabel:`Human Resources`, your HR documents are automatically available in the HR workspace,
while documents related to Payroll are automatically available in the Payroll sub-workspace . You
while documents related to Payroll are automatically available in the Payroll sub-workspace. You
can change the default workspace using the dropdown menu and edit its properties by clicking the
:guilabel:`➔` (:guilabel:`Internal link`) icon.
:icon:`fa-arrow-right` (:guilabel:`Internal link`) icon.
.. image:: documents/files-centralization.png
:alt: Enable the centralization of files attached to a specific area of your activity.
@@ -48,7 +47,7 @@ own by going to :menuselection:`Documents --> Configuration --> Workspaces` and
- :guilabel:`Name`
- :guilabel:`Parent Workspace`: if you want to create a sub-workspace, select its :guilabel:`Parent
Workspace`
Workspace`.
Three tabs are available: :ref:`Tags <documents/tags>`,
:ref:`Access Rights <documents/access-rights>`, and :ref:`Description <documents/description>`.
@@ -68,8 +67,8 @@ and :guilabel:`Name` your tags.
- The tags of a parent workspace apply to the child workspaces automatically;
- Tags can be created and modified by going to :menuselection:`Documents --> Configuration -->
Tags`;
- Tags can also be created or edited by clicking the :icon:`fa-cog` (:guilabel:`cog`) icon on
the left menu;
- Tags can also be created or edited by clicking the :icon:`fa-gear` (:guilabel:`gear`) icon on
the left panel;
- An :ref:`email alias <documents/upload>` can be used to automatically send received documents
to a specific workspace based on the tag assigned.
@@ -78,10 +77,9 @@ and :guilabel:`Name` your tags.
Access rights
-------------
To manage your workspace access rights, go to :menuselection:`Documents --> Configuration -->
Workspaces`, open the workspace you want to edit, and go to the :guilabel:`Access Rights` tab.
You can add :guilabel:`Write Groups` that can view, create, and edit the workspace's documents.
You can also add :guilabel:`Read Groups` that can only view the workspace's documents.
To manage your workspace access rights, go to the :guilabel:`Access Rights` tab. You can add
:guilabel:`Write Groups` that can view, create, and edit the workspace's documents. You can also add
:guilabel:`Read Groups` that only view the workspace's documents.
.. tip::
Enable :guilabel:`Own Documents Only` to limit :guilabel:`Read Groups` and
@@ -92,16 +90,11 @@ You can also add :guilabel:`Read Groups` that can only view the workspace's docu
Description
-----------
You can add descriptive information to your workspace by going to :menuselection:`Documents -->
Configuration --> Workspaces`, opening the workspace you want to describe and going to the
:guilabel:`Description` tab.
You can add descriptive information to your workspace by going to the :guilabel:`Description` tab.
.. note::
Workspaces can also be created and edited by clicking the :icon:`fa-cog` (:guilabel:`cog`) icon
on the left menu.
.. image:: documents/sub-workspaces-creation.png
:alt: Create sub-workspaces from the left menu
Workspaces can also be created and edited by clicking the :icon:`fa-gear` (:guilabel:`gear`) icon
on the left panel.
.. _documents/management:
@@ -109,14 +102,21 @@ Documents management
====================
When selecting or opening a document, the right panel displays different options, including, for
example: :icon:`fa-download` (:guilabel:`Download`), :icon:`fa-share-alt` (:guilabel:`Share this
selection`), :icon:`fa-retweet` (:guilabel:`Replace`), :icon:`fa-unlock` (:guilabel:`Lock`),
:icon:`fa-scissors` (:ref:`Split <documents/split>`), :icon:`fa-comments` (:guilabel:`Open chatter`),
and :icon:`fa-trash` (:guilabel:`Move to trash`).
example:
.. image:: documents/right-panel-options.png
:align: center
:alt: right panel options
- :icon:`fa-download` (:guilabel:`Download`);
- :icon:`fa-share-alt` (:guilabel:`Share this selection`): a share URL is copied to your clipboard;
- :icon:`fa-retweet` (:guilabel:`Replace`): select a new file to replace the existing one. Scroll
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>`).
You can also :icon:`fa-comments` :guilabel:`Open chatter` or delete the document by clicking the
:icon:`fa-trash` (:guilabel:`Move to trash`) icon.
.. note::
Items moved to the trash are permanently deleted after 30 days.
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
@@ -158,38 +158,33 @@ pages, click the :icon:`fa-scissors` (:guilabel:`scissors`) icon.
Additional features
-------------------
Select a workspace and click the arrow next to the :guilabel:`Upload` button to access 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:
Request
~~~~~~~
You can create "missing documents" and organize them as documents, to remind users to download them.
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 arrow next to the :guilabel:`Upload`
button, and select the :guilabel:`Request` option. Add the :guilabel:`Document Name`, choose the
person you need it from in the :guilabel:`Request To` field, fill in the :guilabel:`Due Date In`,
confirm the :guilabel:`Workspace` the document should belong to, and add :guilabel:`Tags` and a
:guilabel:`Note` if needed. 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 :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.
.. image:: documents/missing-doc.png
:alt: Placeholder for missing document
To upload the document, click the :icon:`fa-upload` (:guilabel:`Upload file`) icon in the document
preview. By default, the requestor is set as the document's :guilabel:`Owner`.
When your document is available, click the placeholder to upload it.
You can see all missing documents by going to the **Activity** view and the :guilabel:`Requested
Document` column.
.. tip::
- From the :guilabel:`Activity` view, you can send a **reminder email** to users from whom you
are expecting a document. Go to the :guilabel:`Requested Document` column, click on the
:icon:`fa-ellipsis-v` (:guilabel:`vertical ellipsis`) icon and :guilabel:`Document Request: Reminder`.
- Click on a date to see the details of a specific request. You can update it by clicking on the
:icon:`fa-pencil` (:guilabel:`pen`) icon, :guilabel:`Preview` the content of the reminder
email, or :guilabel:`Send Now` to send a reminder email.
From the :guilabel:`Activity` view, you can send a **reminder email** to users from whom you are
expecting a document. Go to the :guilabel:`Requested Document` column and click the
:icon:`fa-ellipsis-v` (:guilabel:`ellipsis`) icon, and :guilabel:`Document Request: Reminder`.
Click on a date to see the details of a specific request. You can update it by clicking on the
:icon:`fa-pencil` (:guilabel:`pen`) icon, :guilabel:`Preview` the content of the reminder email,
or :guilabel:`Send Now` to send a reminder email.
.. image:: documents/reminder-email.png
:alt: send a reminder email from the Activity view
@@ -199,8 +194,8 @@ Document` column.
Add a link
~~~~~~~~~~
To add a link to your documents dashboard, click on :guilabel:`Add a Link`, enter the
:guilabel:`URL`, and :guilabel:`Name` it.
To add a link to your documents dashboard, click :guilabel:`Add a Link`, enter the :guilabel:`URL`,
and :guilabel:`Name` it.
Share
~~~~~
@@ -210,8 +205,8 @@ 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 arrow next to the
:guilabel:`Upload` button, and click :guilabel:`Share`.
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`.
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
@@ -231,8 +226,8 @@ You can share a link to a workspace and allow users to :guilabel:`Download` its
To do so, go to the left column of your dashboard. In the :guilabel:`Workspace` section, select the
workspace to share, and possibly one or several tags that will be automatically added to the
uploaded documents. Then, click the arrow next to the :guilabel:`Upload` button and
:guilabel:`Share`.
uploaded documents. Then, click the :icon:`fa-caret-down` (:guilabel:`down arrow`) next to the
:guilabel:`Upload` button and :guilabel:`Share`.
In the pop-up, a share :guilabel:`URL` you can :guilabel:`Copy` is displayed. You can
:guilabel:`Name` your share link, set a validity date by filling in the :guilabel:`Valid Until`
@@ -245,7 +240,7 @@ Upload <documents/upload>` files to it.
.. 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.
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.
@@ -273,6 +268,8 @@ The documents sent to this email alias are uploaded to the workspace using the c
.. tip::
Go to :menuselection:`Configuration --> Share & Emails` to see and manage your share links.
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
~~~~~~~~~~~~~~~
@@ -287,15 +284,15 @@ Workflow actions
Workflow actions help manage documents and overall business operations. These are automated actions
that can be created and customized for each workspace. With a single click you can, for example,
create, move, sign, and add tags to a document, and process bills.
create, move, sign, add tags to a document, and process bills.
These workflow actions appear on the right panel when a document meets the set criteria.
When a document meets the set criteria, these workflow actions appear on the right panel.
Create workflow actions
-----------------------
To create workflow actions, go to :menuselection:`Documents --> Configuration --> Actions` and click
:guilabel:`New`.
To update an existing workflow action or create a new one, go to :menuselection:`Documents -->
Configuration --> Actions` and click :guilabel:`New`.
.. note::
An action applies to all **sub-workspaces** under the :guilabel:`Related Workspace` you selected.
@@ -303,16 +300,15 @@ To create workflow actions, go to :menuselection:`Documents --> Configuration --
Set the conditions
------------------
You can :guilabel:`Create` a new :guilabel:`Action` or edit an existing one. You can define the
:guilabel:`Action Name` and then set the conditions that trigger the appearance of the action button
(:guilabel:`▶`) on the right-side panel when selecting a file.
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.
There are three basic types of conditions you can set:
#. :guilabel:`Tags`: you can use the :guilabel:`Contains` and :guilabel:`Does not contain`
conditions, meaning the files *must have* or *must not have* the tags set here.
conditions, meaning the files *must have* or *must not have* the tags set here;
#. :guilabel:`Contact`: the files must be associated with the contact set here.
#. :guilabel:`Contact`: the files must be associated with the contact set here;
#. :guilabel:`Owner`: the files must be associated with the owner set here.
@@ -332,7 +328,7 @@ Advanced condition type: domain
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:`Add condition`.
and 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
@@ -352,30 +348,29 @@ Configure the actions
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.
- **Move to Workspace**: move the file to any workspace.
- **Move to Workspace**: move the file to any workspace;
- **Create**: create one of the following items attached to the file in your database:
- **Link to record**: link the document to a record (i.e. link to a vehicle in Fleet);
- **Product template**: create a product you can edit directly;
- **Task**: create a Project task you can edit directly;
- **Signature PDF template**: create a new Sign template to send out;
- **PDF to sign**: create a PDF to sign;
- **Applicant**: create a new HR application you can edit directly;
- **Vendor bill**: create a vendor bill using OCR and AI to scrape information from the file
content;
- **Customer invoice**: create a customer invoice using OCR and AI to scrape information from
the file;
- **Vendor credit note**: create a vendor credit note using OCR and AI to scrape information
from the file;
- **Credit note**: create a customer credit note using OCR and AI to scrape information from
the file;
- **Miscellaneous Operations**: create a record in :guilabel:`Miscellaneous Operations`
in Accounting;
- **Bank Statement**: create a Bank Statement in Finance;
- **Expense**: create an expense automatically based on a file's content.
- **Link to record**: create a link between a document and a record from a specific model;
- **Product template**: create a product you can edit directly;
- **Task**: create a Project task you can edit directly;
- **Signature PDF template**: create a new Sign template to send out;
- **PDF to sign**: create a Sign template to sign directly;
- **Applicant**: create a new HR application you can edit directly;
- **Vendor bill**: create a vendor bill using OCR and AI to scrape information from the file
content;
- **Customer invoice**: create an invoice using OCR and AI to scrape information from the file;
- **Vendor credit note**: create a vendor credit note using OCR and AI to scrape information
from the file;
- **Credit note**: create a customer credit note using OCR and AI to scrape information from the
file;
- **Miscellaneous Operations**: create an entry in the Miscellaneous Operations journal;
- **Bank Statement**: import a bank statement;
- **Purchase Receipt**: create a vendor receipt;
- **Expense**: create an HR expense.
- **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;
- **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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -94,9 +94,41 @@ catalog. Then, select a product from the drop-down menu, or create a new one by
After selecting a product, update the :guilabel:`Quantity`, if necessary. Confirm the information in
the remaining fields.
To remove a line from the quotation, click the :guilabel:`🗑️ (trash can)` icon.
To remove a line from the quotation, click the :icon:`fa-trash-o` :guilabel:`(trash can)` icon.
Repeat the steps above until the quotation is complete.
To organize products into sections click :guilabel:`Add a section` and type a name for the section.
Then, click the :icon:`oi-draggable` :guilabel:`(drag)` icon to the left of the name and drag to
move the section to the appropriate location. Move each product using the same method to finish
organizing the quotation order lines.
.. image:: send_quotes/product-sections.png
:align: center
:alt: Categories are used to create separate sections on the order lines of a quote.
Product catalog
~~~~~~~~~~~~~~~
To quickly add numerous products to the quotation, click the :guilabel:`Catalog` button to open the
product catalog.
All products in the database are listed as cards and can be sorted in the left panel by
:guilabel:`Product Category` and :guilabel:`Attributes`.
.. image:: send_quotes/product-catalog.png
:align: center
:alt: The product catalog displays all products as cards.
To add a product, click the :icon:`fa-shopping-cart` :guilabel:`Add` button on the product card.
Set the quantity of the item using the :icon:`fa-plus` :guilabel:`(add)` or :icon:`fa-minus`
:guilabel:`(subtract)` buttons, or type the quantity in the number field between the two buttons.
To remove an item, click the :icon:`fa-trash` :guilabel:`Remove` button on the product card.
.. image:: send_quotes/set-quantity.png
:align: center
:alt: The purple add and subtract buttons are used to set the quantity of an item.
Once all product quantities are set, click the :guilabel:`Back to Quotation` button to return to the
quotation. The items selected in the product catalog now appear in the :guilabel:`Order Lines` tab.
Preview and send quotation
==========================

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -45,6 +45,10 @@ corner of the opportunity.
:align: center
:alt: A lost opportunity with the lost banner added.
.. note::
To mark an *inactive* (archived) opportunity as lost, set the :guilabel:`Probability` field to
`0` percent.
.. _crm/lost-reasons:
Create/edit lost reasons

View File

@@ -25,6 +25,7 @@ Then, follow the corresponding documentation to configure your device:
- :doc:`SIX configuration <terminals/six>`
- :doc:`Stripe configuration <terminals/stripe>`
- :doc:`Vantiv configuration <terminals/vantiv>`
- :doc:`Viva Wallet configuration <terminals/viva_wallet>`
- :doc:`Worldline configuration <terminals/worldline>`
Once the terminal is configured, you can :doc:`create the corresponding payment method and add it to
@@ -38,4 +39,5 @@ the POS <../payment_methods>`.
terminals/six
terminals/stripe
terminals/vantiv
terminals/viva_wallet
terminals/worldline

View File

@@ -0,0 +1,134 @@
===========
Viva Wallet
===========
Connecting a **Viva Wallet** :doc:`payment terminal <../terminals>` allows you to offer a fluid
payment flow to your customers and ease the work of your cashiers.
.. note::
Viva Wallet lets you turn your phone into a mobile card reader: `Tap On Phone
<https://www.vivawallet.com/gb_en/blog-tap-on-phone-gb>`_.
Configuration
=============
Start by creating your Viva Wallet account on `Viva Wallet's website <https://www.vivawallet.com>`_.
Locate your Viva Wallet credentials
-----------------------------------
When configuring Viva Wallet in Point of Sale, you need to use specific credentials that are
available in your Viva Wallet account. These credentials include your :ref:`Merchant ID
<viva_wallet/id-key>`, :ref:`API key <viva_wallet/id-key>`, :ref:`POS API credentials
<viva_wallet/pos-api>`, and :ref:`Terminal ID <viva_wallet/identifier>` number.
.. _viva_wallet/id-key:
Merchant ID and API key
~~~~~~~~~~~~~~~~~~~~~~~
Locate your `Merchant ID and API key following the Viva documentation
<https://developer.vivawallet.com/getting-started/find-your-account-credentials/merchant-id-and-api-key/>`_.
Then, save the keys and paste them into the Odoo :guilabel:`Merchant ID` and :guilabel:`API Key`
fields :ref:`when creating the payment method <viva_wallet/method-creation>`.
.. image:: viva_wallet/access-cred.png
:alt: merchant ID and API key fields
.. note::
These credentials are used for APIs that authenticate with Basic Auth.
.. _viva_wallet/pos-api:
POS API credentials
~~~~~~~~~~~~~~~~~~~
Locate and generate your `POS API credentials following the Viva documentation
<https://developer.vivawallet.com/getting-started/find-your-account-credentials/pos-api-credentials/>`_.
Then, save the keys and paste them in the Odoo :guilabel:`Client secret` and :guilabel:`Client ID`
fields :ref:`when creating the payment method <viva_wallet/method-creation>`.
.. warning::
These credentials are only displayed once. Ensure you keep a copy to secure them.
.. image:: viva_wallet/api-cred.png
:alt: Client secret and client ID fields
.. note::
These credentials are used for Android and iOS POS Activation requests, as well as the Cloud
Terminal API.
.. _viva_wallet/identifier:
Terminal ID
~~~~~~~~~~~
Your terminal ID number is used to identify your terminal. To find it:
#. Go to your Viva Wallet account and select the relevant account.
#. Go to :menuselection:`Sales --> Physical payments --> Card terminals` in the navigation menu.
The terminal ID number is located under the :guilabel:`Terminal ID (TID)` column. Save it to paste
it into the :guilabel:`Terminal ID` field :ref:`when creating the payment method
<viva_wallet/method-creation>`.
.. image:: viva_wallet/terminal-id.png
:alt: Viva terminal ID
.. _viva_wallet/method-creation:
Configure the payment method
----------------------------
#. :doc:`Activate the POS Viva Wallet module <../../../../general/apps_modules>` to enable the
payment terminal.
#. :doc:`Create the related payment method <../../payment_methods>` by going to
:menuselection:`Point of Sale --> Configuration --> Payment Methods` and clicking
:guilabel:`New`.
#. Set the journal type as :guilabel:`Bank`.
#. Select :guilabel:`Viva Wallet` in the :guilabel:`Use a Payment Terminal` field.
#. Fill in the mandatory fields with your:
- :ref:`Merchant ID and API key <viva_wallet/ID-key>`
- :ref:`Client ID and Client secret <viva_wallet/pos-api>`
- :ref:`Terminal ID <viva_wallet/identifier>`
#. Save the form and copy the generated webhook URL from the :guilabel:`Viva Wallet Webhook
Endpoint` field. This URL is necessary :ref:`when configuring the webhook <viva_wallet/webhook>`.
.. image:: viva_wallet/create-method-viva-wallet.png
:alt: payment method creation form
:scale: 75%
.. _viva_wallet/webhook:
Configure the webhook
---------------------
Webhooks allow you to receive real-time notifications whenever a transaction occurs within your Viva
Wallet account. Set them up for `payment transactions following the Viva documentation
<https://developer.vivawallet.com/webhooks-for-payments/transaction-payment-created/>`_.
.. seealso::
`Setting up webhooks <https://developer.viva.com/webhooks-for-payments/#setting-up-webhooks>`_
Link the payment method to a POS
--------------------------------
You can select the payment method in your POS settings once the payment method is created. To do so,
go to the :ref:`POS' settings <configuration/settings>` and add the payment method under the
:guilabel:`Payment methods` field of the :guilabel:`Payment` section.
Pay with a payment terminal
===========================
When processing a payment, select the related payment method. Check the amount and click on
:guilabel:`Send`. Once the payment is successful, the status changes to :guilabel:`Payment
Successful`.
.. note::
- | In case of connection issues between Odoo and the payment terminal, force the payment by
clicking on :guilabel:`Force Done`, which allows you to validate the order.
| This option is only available after receiving an error message informing you that the
connection failed.
- To cancel the payment request, click :guilabel:`cancel`.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

View File

@@ -82,6 +82,8 @@ that was just configured in the :guilabel:`Create invoices` pop-up form appears
If :guilabel:`Based on Delivered Quantity (Manual)` is chosen as the :guilabel:`Invoicing
Policy`, an invoice will **not** be able to be created.
.. _sales/invoicing/50-percent-down-payments:
Example: request 50% down payment
=================================
@@ -141,7 +143,7 @@ From those buttons, the payment can be registered by clicking :guilabel:`Registe
:alt: Showcase of the Register Payment button on a confirmed customer invoice.
Doing so reveals a :guilabel:`Register Payment` pop-up form, which is auto-populated with the
necessary information. Confirm the information provided is correct and make any necessary
necessary information. Confirm the information provided is correct, and make any necessary
adjustments. When ready, click the :guilabel:`Create Payment` button.
.. image:: down_payment/register-payment-pop-up-window.png
@@ -209,11 +211,14 @@ At this point, the flow is now complete.
.. important::
If a down payment is used with a product that has a :guilabel:`Delivered quantities` invoicing
policy, the down payments will **not** be able to be deducted when it comes time to invoice the
customer.
policy, and the cost of the product *exceeds* the 50% down payment (as in most cases), a regular
invoice is created.
This is because, due to the invoicing policy, the product(s) would have to be delivered *before*
creating the final invoice.
However, for products that cost *less* than the 50% down payment, the down payments will **not**
be able to be deducted when it comes time to invoice the customer.
This is because the product(s) would have to be delivered *before* creating the final invoice due
to Odoo not allowing negative totals for invoices.
If nothing has been delivered, a :guilabel:`Credit Note` is created, which cancels the draft
invoice that was created after the down payment.
@@ -222,6 +227,76 @@ At this point, the flow is now complete.
order to confirm the delivery. Otherwise, the delivered quantity can be entered manually directly
on the sales order.
.. _sales/invoicing/100-percent-down-payments:
Example: request 100% down payment
==================================
The process of requesting a 100% down payment is similar to the process of setting up a :ref:`50%
down payment <sales/invoicing/50-percent-down-payments>`, but with fewer steps.
.. note::
A 100% down payment is **not** the same as a full payment of the sales order.
A sales order paid through the regular invoice process will not allow any additional invoices to
be generated, and **will not** display the *Create Invoice* button on the Sales Order.
Following this example **will** cause the *Create Invoice* button to be displayed on the Sales
Order. This is because Odoo expects another invoice to be created after the down payment
to complete payment of the sales order.
The *Solar Panel Installation* product is being used in this example.
To configure a 100% down payment, begin by navigating to :menuselection:`Sales app --> New`, and add
a :guilabel:`Customer` to the quote.
Next, click :guilabel:`Add a product` in the :guilabel:`Order Lines` tab, and select the
`Solar Panel Installation` product.
Upon clicking the :guilabel:`Confirm` button, the quotation turns into a sales order. At that point,
an invoice can now be created by clicking :guilabel:`Create Invoice` in the top-left corner.
On the :guilabel:`Create invoices` pop-up window that appears, select :guilabel:`Down payment
(percentage)`, and type `100` in the :guilabel:`Down Payment Amount` field. Then, if desired, select
an :guilabel:`Income Account` and :guilabel:`Customer Taxes` in their respective fields.
.. note::
The :guilabel:`Income Account` and :guilabel:`Customer Taxes` fields are *not* required fields,
and they will *not* appear if they've already been preconfigured in previous down payment
requests.
For more information, check out the documentation on :ref:`customer taxes modification on down
payments <sales/invoicing/customer-tax-modification-down-payments>` and :ref:`income account
modification on down payments <sales/invoicing/income-account-modification>`.
.. image:: down_payment/100p-down-payment-percentage.png
:align: center
:alt: The Down payment (percentage) option selected with 100% set as the Down Payment.
Next, click :guilabel:`Create Draft Invoice` to create an invoice draft. This will also
bring the draft invoice into view, which includes the :guilabel:`Down payment` as a
:guilabel:`Product` in the :guilabel:`Invoice Lines` tab.
The invoice can now be confirmed and posted by clicking :guilabel:`Confirm`. Confirming the
invoice changes the status from :guilabel:`Draft` to :guilabel:`Posted`. It also reveals a new
series of buttons at the top of the page.
The payment can be registered by clicking the :guilabel:`Register Payment` button.
Doing so reveals a :guilabel:`Register Payment` pop-up form, which is auto-populated with the
necessary information. Confirm the information provided is correct and make any necessary
adjustments. When ready, click the :guilabel:`Create Payment` button.
After clicking :guilabel:`Create Payment`, Odoo reveals the customer invoice, now with a green
:guilabel:`In Payment` banner in the upper-right corner.
.. image:: down_payment/100p-invoice.png
:align: center
:alt: Customer Invoice with a green In Payment banner located in the upper-right corner.
The process is now complete, and the 100% down payment has been successfully applied.
.. _sales/invoicing/customer-tax-modification-down-payments:
Customer taxes modification on down payments

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@@ -107,10 +107,14 @@ Odoo uses the information in the :guilabel:`Recurring Plan` field to update the
accordingly.
.. warning::
If there is no payment provider set up, Odoo does **not** create an invoice, and the customer is
not charged. Instead, the subscription is processed as a free recurring product, and is reflected
as such in the *chatter* of the subscription sales order. When this occurs, the following message
appears: `Automatic renewal succeeded. Free subscription. Next invoice:[date]. No email sent.`
If the product invoicing policy is set to *Based on Delivered Quantities (Manual)*, and the
delivered quantity is `0`, Odoo does **not** create an invoice, and the customer is not charged.
Instead, the subscription is processed as a free recurring product, and is reflected as such in
the *chatter* of the subscription sales order.
When this occurs, the following message appears: `Automatic renewal succeeded. Free subscription.
Next invoice:[date]. No email sent.`
Once the invoice for the subscription sales order is created, the invoice can be viewed by clicking
the :guilabel:`Invoices` smart button that appears at the top of the subscription sales order.
@@ -125,8 +129,8 @@ the :guilabel:`Payment Token` field, under the :guilabel:`Subscription` section.
:align: center
:alt: The Payment Token field under the Other Info tab on a subscription sales order form.
If there is no :guilabel:`Payment Token` (i.e. payment provider is `Bank Transfer`), the invoice is
created and sent to the customer. The payment **must** be registered manually in this case.
If there is no :guilabel:`Payment Token`, the invoice is created, and sent to the customer. The
payment **must** be registered manually in this case.
Closing invoices
----------------

View File

@@ -18,10 +18,8 @@ Displaying your itinerary on a map
==================================
.. important::
For a field service task to be featured on the map, it needs:
- a :guilabel:`Planned Date`;
- a valid address linked to the customers profile.
For a field service task to be featured on the map, a **valid address** must be provided for the
customer.
To display your tasks on a map, go to :menuselection:`Field Service --> My Tasks --> Map`. To create
your itinerary, Odoo sorts out your field service tasks based on their :guilabel:`Planned Date` to

View File

@@ -13,19 +13,27 @@ Studio
studio/models_modules_apps
studio/automated_actions
studio/pdf_reports
studio/approval_rules
Studio is a toolbox that allows you to customize Odoo without coding knowledge. For example, you
can, on any app, add or modify:
can, in any app, add or modify:
- :doc:`Fields <studio/fields>`
- :doc:`Views <studio/views>`
- :doc:`Models <studio/models_modules_apps>`
- :doc:`Automated actions <studio/automated_actions>`
- :doc:`PDF reports <studio/pdf_reports>`
- Approval rules
- :doc:`Approval rules <studio/approval_rules>`
- Security rules
Or you can :doc:`build an app from scratch <studio/models_modules_apps>`.
You can also :doc:`build an app from scratch <studio/models_modules_apps>`.
.. _studio/access:
To access Studio, navigate to the app and model you want to modify, then click the **Toggle Studio**
button, or vice versa.
To close Studio, click :guilabel:`Close` in the upper right corner.
.. seealso::
- `Odoo Tutorials: Studio <https://www.odoo.com/slides/studio-31>`_
`Odoo Tutorials: Studio <https://www.odoo.com/slides/studio-31>`_

View File

@@ -0,0 +1,79 @@
==============
Approval rules
==============
Studio approval rules are used to automate approval processes for actions. They allow you to define
the criteria for when an approval is required before an action can be performed using a button.
Configuration
=============
To add approval rules, proceed as follows:
#. :ref:`Open Studio <studio/access>` and switch to the required :doc:`view <views>`.
#. Select the button for which you want to add approval rules.
#. In the :guilabel:`Properties` tab on the left, enable the :guilabel:`Set approval rules`
feature.
#. Specify the :guilabel:`Allowed Group` to limit the approval permission to a specific user
group.
#. Select the :guilabel:`Responsible` user to create an activity for a specific user when approval
is requested from them.
#. Select the :guilabel:`Users to notify` via internal note.
#. Add a :guilabel:`Description` to be displayed in the :ref:`Approval dialog <approval-rules/use>`.
Optionally, you can also add conditions for the approval rule to be applied by clicking the
:icon:`fa-filter` (:guilabel:`filter`) icon next to the :guilabel:`Allowed Group` field.
To add another rule, click :guilabel:`Add an approval rule`. When there are multiple approval rules,
you can:
- enable :guilabel:`Exclusive Approval` to require approvers to be different users;
- change the :guilabel:`Notification Order` of the approval rule so that the :guilabel:`Responsible`
and :guilabel:`Users to notify` are only notified when the previous rule has been approved, and
their approval is required. If the approval rules have the same :guilabel:`Notification Order`,
all users are notified at the same time when the first approval is requested.
Click the :icon:`fa-trash` (:guilabel:`trash`) icon next to the :guilabel:`Allowed Group` field to
delete the approval rule.
.. tip::
You can create :ref:`user groups <access-rights/groups>` specifically for approvals.
.. _approval-rules/use:
Use
===
Once approval rules have been defined for a button:
- A **user avatar** icon is displayed next to the button's label for each approval rule that has
been defined.
.. image:: approval_rules/approvals-button.png
:alt: Confirm button with approval for purchase orders
- When an unauthorized user clicks the button, an error message is displayed in the top-right corner
and an activity is created for the user specified in the :guilabel:`Responsible` field.
- Only users from the group defined in the :guilabel:`Allowed Group` field are authorized to approve
or reject the action.
Authorized users can:
- approve and perform the action by clicking the button;
- approve the action and allow another user to perform it by clicking the **user avatar** icon next
to the button's label, then clicking the :icon:`fa-check` (:guilabel:`Approve`) button in the
dialog that opens;
- reject the action by clicking the **user avatar** icon next to the button's label, then clicking
the :icon:`fa-times` (:guilabel:`Reject`) button in the dialog that opens.
.. image:: approval_rules/approvals-awaiting.png
:alt: Approval dialog
.. tip::
- The user who approved/rejected the action can revoke their decision by clicking the **user
avatar** icon next to the button's label, then clicking the :icon:`fa-undo`
(:guilabel:`Revoke`) button.
- Approvals are tracked in the record's chatter. An approval entry is also created every time
a Studio approval-related action is performed. To access the approval entries, :doc:`activate
the developer mode </applications/general/developer_mode>` and go to :menuselection:`Settings
--> Technical --> Studio Approval Entries`.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -2,101 +2,109 @@
Translations
============
The contents of your website pages (i.e., text strings) can be translated into different languages
directly on your website.
Your website is displayed in the language that matches your visitors browser. If the browsers
language has not been installed and added to your website, the content is shown in the
:ref:`default language <translate/default-language>`. When additional languages are installed, users
can choose their preferred language using the :ref:`language selector <translate/language-selector>`.
Your website is displayed in the language that matches the visitor's browser's language, unless that
particular language has not been installed. In this case, the website is displayed in the
:ref:`default language <translate/default-language>`. The visitor can still select another language
in the language menu.
The :ref:`Translate <translate/translate>` feature on your website allows automatic translation of
standard terms and provides a tool for manual content translation.
Installing languages
====================
Install languages
=================
To translate your website, you first have to add the required languages:
To allow translation of your website, you must first :doc:`install <../../../general/users/language>`
the required languages and add them to your website. To do so, go to :menuselection:`Website -->
Configuration --> Settings` and click :guilabel:`Install languages` in the :guilabel:`Website info`
section. In the dialog box that opens, select the :guilabel:`Languages` you want from the dropdown
menu, tick the required :guilabel:`Websites to translate`, and click :guilabel:`Add`.
#. Go to your website.
#. Scroll to the bottom of the page to the **language menu**.
#. Click the language and select :guilabel:`Add a language`.
.. image:: translate/website-add-language.png
:alt: Add a language to your website.
#. Click the :guilabel:`Languages` field and select the required language from the drop-down list.
Ticking the :guilabel:`Websites to translate` checkboxes allows users to change your websites
navigation to another language using the language selector.
#. Click the :guilabel:`Add` button.
Repeat the steps for each additional language.
To edit your website's languages, go to :menuselection:`Website > Configuration > Settings` and
add/remove the required languages in/from the :guilabel:`Languages` field in the
:guilabel:`Website info` section.
.. tip::
- You might need to refresh your page to see the new language.
- You can also edit your website's languages from the backend, in the :guilabel:`Settings`. Go to
:menuselection:`Website > Configuration > Settings` and add/remove the required languages in
the :guilabel:`Languages` field, in the :guilabel:`Website info` section.
Alternatively, once the languages have been installed, you can add them from the :ref:`language
selector <translate/language-selector>`. You might then need to refresh your page to see the new
language.
.. _translate/default-language:
Default language
----------------
If the language of the visitor's browser is not installed on your website, the content is displayed
in the default language.
To define a default language, go to :menuselection:`Website > Configuration > Settings`, and
select a language in the :guilabel:`Default` field.
When multiple languages are available on your website, you can set a default language to be used if
the visitors browser language is not available. To do so, go to :menuselection:`Website ->
Configuration -> Settings`, and select a language in the :guilabel:`Default` field.
.. note::
This field is visible only if multiple languages are already configured for your website.
Translating the contents
========================
Once the languages have been added, you can translate the contents of your website. To do so, go to
your website, select the language from the language menu and click the :guilabel:`Translate` button
on the right part of the task bar to activate the **translation mode**.
.. image:: translate/translate-button.png
:alt: Translate button
As a result:
- Text strings that have already been translated are highlighted in green;
- Text strings that need to be translated are highlighted in yellow.
.. image:: translate/website-translation-yellow.png
:alt: Text to be translated highlighted in yellow
You can then replace the original text with the translation by clicking the block, editing its
contents and saving.
.. tip::
- Once the languages have been installed, you can also translate some items (e.g.,
the product's name and description) from the backend (e.g., in the product template). To do so,
click the language code (e.g., :guilabel:`EN`) next to the text you want to translate (e.g.,
the product name) and add the translation.
.. image:: translate/product-translation.png
:alt: Translate product-related items.
- You can also :doc:`export/import translations <../../../../developer/howtos/translations>`
to translate multiple items (e.g., product names and descriptions) in one go.
This field is only visible if multiple languages have been installed and added to your website.
.. _translate/language-selector:
Language selector menu
======================
Language selector
=================
To add a language selector menu:
Your websites visitors can switch languages using the language selector, available by default in
the :guilabel:`Copyright` section at the bottom of the page. To edit the language selector menu:
#. Go to your website and click :guilabel:`Edit`.
#. Select the block where you want to add the language selector menu (e.g., the header).
#. Select the :guilabel:`Customize` tab.
#. In the :guilabel:`Navbar` section, set the :guilabel:`Language selector` field to either
:guilabel:`Dropdown` or :guilabel:`Inline`.
#. Go to your website and click :guilabel:`Edit`;
#. Click the language selector available in the :guilabel:`Copyright` block and go to the
:guilabel:`Copyright` section of the website builder;
#. Set the :guilabel:`Language selector` field to either :guilabel:`Dropdown` or :guilabel:`Inline`.
Click :guilabel:`None` if you do not want to display the :guilabel:`Language selector`;
.. image:: translate/language-selector.png
:alt: Add a language selector menu.
.. image:: translate/language-selector.png
:alt: Add a language selector menu.
#. Click :guilabel:`Save`.
.. tip::
You can also add the :guilabel:`Language Selector` to the :guilabel:`Header` of your page. To do
so, click the :guilabel:`Header` block and go to the :guilabel:`Navbar` section to edit the
:guilabel:`Language Selector`.
.. _translate/translate:
Translate your website
======================
Select your desired language from the language selector to see your content in another language.
Then, click the :guilabel:`Translate` button in the top-right corner to manually activate the
translation mode so that you can translate what has not been translated automatically by Odoo.
Translated text strings are highlighted in green; text strings that were not translated
automatically are highlighted in yellow.
.. image:: translate/translated-text.png
:alt: Entering the translation mode
In this mode, you can only translate text. To change the page's structure, you must edit the master
page, i.e., the page in the original language of the database. Any changes made to the master page
are automatically applied to all translated versions.
To replace the original text with the translation, click the block, edit its contents, and save.
.. note::
When a website supports multiple languages, the content is accessible through different URLs,
depending on the language selected. For example,
`https://www.mywebsite.com/shop/product/my-product-1` is the URL to the master page, in English,
while `https://www.mywebsite.com/fr_FR/shop/product/mon-produit-1` is the URL to the French
version of the same page.
.. tip::
Once the desired language is installed, you can translate some items from the backend (e.g., the
product's name in the product form). To do so, click the language code (e.g., :guilabel:`EN`) next
to the text you want to translate and add the translation.
Content visibility by language
------------------------------
You can hide content (such as images or videos, for example) depending on the language. To do so:
#. Click :guilabel:`Edit` and select an element of your website;
#. Go to the :guilabel:`Text - Image` section and :guilabel:`Visibility`;
#. Click :guilabel:`No condition` and select :guilabel:`Conditionally` instead;
#. Go to :guilabel:`Languages` to configure the condition(s) to apply by selecting
:guilabel:`Visible for` or :guilabel:`Hidden for`, and click :guilabel:`Choose a record` to
decide which languages are impacted.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -11,7 +11,7 @@ pages. Four types of building blocks are available depending on their use:
:doc:`Inner Content <building_blocks/inner_content>`.
.. seealso::
`Odoo Tutorial: Design your first webpage <https://www.odoo.com/slides/slide/design-your-first-web-page-1667?fullscreen=1>`_
`Odoo Tutorial: Design your first webpage <https://www.odoo.com/slides/slide/design-your-website-images-and-motion-6931?fullscreen=1>`_
.. _websites/website/web_design/building_blocks: