Compare commits
16 Commits
staging.ma
...
master-xen
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
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 |
||
|
|
192cbbf168 |
[FIX] subscriptions: corrected invoicing info
closes odoo/documentation#10200
X-original-commit:
|
||
|
|
f6586f4dbd |
[IMP] Field Service: Correction on Itinerary doc
task 4053589
closes odoo/documentation#10226
X-original-commit:
|
||
|
|
1d25e55346 |
[IMP] sales: 100 percent down section
closes odoo/documentation#10168
X-original-commit:
|
||
|
|
8a6dbe56c3 |
[IMP] crm: add quotation product catalog
closes odoo/documentation#10163
X-original-commit:
|
||
|
|
f2f701dba6 |
[ADD] Recruitment: offer job positions
closes odoo/documentation#10211
X-original-commit:
|
||
|
|
85ebf41d2c |
[ADD] Time off: new allocations doc
closes odoo/documentation#10206
X-original-commit:
|
||
|
|
85c70cb544 |
[IMP] CRM: Inactive lost leads
closes odoo/documentation#10165
X-original-commit:
|
||
|
|
0c30ca938e |
[IMP] Website: link to be updated
taskid-4047508
closes odoo/documentation#10222
X-original-commit:
|
||
|
|
2f3d467dc8 |
[IMP] website: translations
taskid-3617120
closes odoo/documentation#10219
X-original-commit:
|
||
|
|
3e853095d3 |
[ADD] Studio: approval rules
task-3553095
closes odoo/documentation#10164
X-original-commit:
|
||
|
|
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:
|
||
|
|
e0269e2f11 |
[ADD] Manufacturing: MO costs
closes odoo/documentation#10167
X-original-commit:
|
||
|
|
3323cfe8ab |
[ADD] Manufacturing: Continuous product improvement
closes odoo/documentation#10162
X-original-commit:
|
||
|
|
83d52c83fa |
[IMP] documents: new changes in V17
closes odoo/documentation#10180
Taskid: 3491654
X-original-commit:
|
||
|
|
520b6e296a | [REL] saas-17.4 |
2
Makefile
|
|
@@ -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)
|
||||
|
|
|
|||
3
conf.py
|
|
@@ -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",
|
||||
|
|
|
|||
BIN
content/applications/finance/documents/right-panel-options.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
|
|
@@ -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
|
||||
=====================
|
||||
|
|
|
|||
|
|
@@ -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
|
||||
|
|
|
|||
160
content/applications/hr/recruitment/offer_job_positions.rst
Normal 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.
|
||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
|
|
@@ -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
|
||||
|
|
|
|||
118
content/applications/hr/time_off/allocations.rst
Normal 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.
|
||||
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
|
@@ -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
|
||||
|
|
|
|||
|
|
@@ -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|.
|
||||
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
|
@@ -15,3 +15,4 @@ Workflows
|
|||
workflows/unbuild_orders
|
||||
workflows/byproducts
|
||||
workflows/allocation
|
||||
workflows/continuous_improvement
|
||||
|
|
|
|||
|
|
@@ -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.
|
||||
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
|
@@ -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
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
|
@@ -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
|
||||
==========================
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
|
@@ -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
|
||||
|
|
|
|||
|
|
@@ -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
|
||||
|
|
|
|||
|
|
@@ -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`.
|
||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
|
@@ -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
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
|
@@ -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
|
||||
----------------
|
||||
|
|
|
|||
|
|
@@ -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 customer’s 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
|
||||
|
|
|
|||
|
|
@@ -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>`_
|
||||
|
|
|
|||
79
content/applications/studio/approval_rules.rst
Normal 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`.
|
||||
|
After Width: | Height: | Size: 5.0 KiB |
BIN
content/applications/studio/approval_rules/approvals-button.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
|
|
@@ -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 visitor’s browser. If the browser’s
|
||||
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 website’s
|
||||
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 visitor’s 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 website’s 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.
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
|
@@ -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:
|
||||
|
||||
|
|
|
|||