Compare commits

..

1 Commits

Author SHA1 Message Date
Jonathan
59e821d455 [FIX] discuss: broken link in ice_servers.rst 2023-06-21 12:00:34 +02:00
178 changed files with 998 additions and 2101 deletions

View File

@@ -187,6 +187,3 @@ To do so, check the :guilabel:`Deprecated` box in the account's settings, and sa
* :doc:`../vendor_bills/deferred_expenses`
* :doc:`../customer_invoices/deferred_revenues`
* :doc:`../../fiscal_localizations`
* `Odoo Tutorials: Chart of accounts <https://www.odoo.com/slides/slide/chart-of-accounts-1630>`_
* `Odoo Tutorials: Update your chart of accounts
<https://www.odoo.com/slides/slide/update-your-chart-of-accounts-1658>`_

View File

@@ -2,122 +2,128 @@
Checks
======
There are two ways to handle payments received by checks in Odoo, either by using :ref:`outstanding
accounts <checks/outstanding-account>` or by :ref:`bypassing the reconciliation process
<checks/reconciliation-bypass>`.
There are two ways to handle payments received by checks. Odoo support
both approaches so that you can use the one that better fits your
habits.
**Using outstanding accounts is recommended**, as your bank account balance stays accurate by taking
into account checks yet to be cashed.
1. **Undeposited Funds:**
once you receive the check, you record a payment
by check on the invoice. (using a Check journal and posted on the
Undeposited Fund account) Then, once the check arrives in your
bank account, move money from Undeposited Funds to your bank
account.
.. note::
Both methods produce the same data in your accounting at the end of the process. But if you
have checks that have not been cashed in, the **Outstanding Account** method reports these
checks in the **Outstanding Receipts** account. However, funds appear in your bank account
whether or not they are reconciled, as the bank value is reflected at the moment of the bank
statement.
2. **One journal entry only:**
once your receive the check, you record a
payment on your bank, paid by check, without going through the
**Undeposited Funds**. Once you process your bank statement, you do
the matching with your bank feed and the check payment, without
creating a dedicated journal entry.
.. seealso::
* :ref:`Outstanding accounts <bank/outstanding-accounts>`
* :ref:`Bank reconciliation <accounting/reconciliation>`
We recommend the first approach as it is more accurate (your bank
account balance is accurate, taking into accounts checks that have not
been cashed yet). Both approaches require the same effort.
.. _checks/outstanding-account:
Even if the first method is cleaner, Odoo support the second approach
because some accountants are used to it (quickbooks and peachtree
users).
Method 1: Outstanding account
=============================
.. Note::
You may have a look at the *Deposit Ticket feature* if you deposit
several checks to your bank accounts in batch.
When you receive a check, you :doc:`record a payment <../bank/reconciliation>` by check on the
invoice. Then, when your bank account is credited with the check's amount, you reconcile the payment
and statement to move the amount from the **Outstanding Receipt** account to the **Bank** account.
Option 1: Undeposited Funds
===========================
.. tip::
You can create a new payment method named *Checks* if you would like to identify such payments
quickly. To do so, go to :menuselection:`Accounting --> Configuration --> Journals --> Bank`,
click the :guilabel:`Incoming Payments` tab, and :guilabel:`Add a line`. As :guilabel:`Payment
Method`, select :guilabel:`Manual`, enter `Checks` as name, and :guilabel:`Save`.
Configuration
-------------
.. _checks/reconciliation-bypass:
- Create a journal **Checks**
Method 2: Reconciliation bypass
===============================
- Set **Undeposited Checks** as a default credit/debit account
When you receive a check, you :doc:`record a payment <../bank/reconciliation>` on the related
invoice. The amount is then moved from the **Account Receivable** to the **Bank** account, bypassing
the reconciliation and creating only **one journal entry**.
- Set the bank account related to this journal as **Allow Reconciliation**
To do so, you *must* follow the following setup. Go to :menuselection:`Accounting --> Configuration
--> Journals --> Bank`. Click the :guilabel:`Incoming Payments` tab and then :guilabel:`Add a line`,
select :guilabel:`Manual` as :guilabel:`Payment Method`, and enter `Checks` as :guilabel:`Name`.
Click the :guilabel:`⋮` button, tick :guilabel:`Outstanding Receipts accounts`, and in the
:guilabel:`Outstanding Receipts accounts` column, set the :guilabel:`Bank` account for the
**Checks** payment method, and :guilabel:`Save`.
From check payments to bank statements
--------------------------------------
.. image:: checks/outstanding-payment-accounts.png
:alt: Bypass the Outstanding Receipts account using the Bank account.
The first way to handle checks is to create a check journal. Thus,
checks become a payment method in itself and you will record two
transactions.
Payment registration
====================
Once you receive a customer check, go to the related invoice and click
on **Register Payment**. Fill in the information about the payment:
.. note::
By default, there are two ways to register payments made by check:
- Payment method: Check Journal (that you configured with the debit and
credit default accounts as **Undeposited Funds**)
- **Manual**: for single checks;
- **Batch**: for multiple checks at once.
- Memo: write the Check number
This documentation focuses on **single-check** payments. For **batch deposits**, see :doc:`the
batch payments documentation <batch>`.
.. image:: checks/check02.png
Once you receive a customer check, go to the related invoice (:menuselection:`Accounting -->
Customer --> Invoices)`, and click :guilabel:`Register Payment`. Fill in the payment information:
- :guilabel:`Journal: Bank`;
- :guilabel:`Payment method`: :guilabel:`Manual` (or **Checks** if you have created a specific
payment method);
- :guilabel:`Memo`: enter the check number;
- Click :guilabel:`Create Payment`.
.. image:: checks/payment-checks.png
:alt: Check payment info
The generated journal entries are different depending on the payment registration method chosen.
Journal entries
===============
Outstanding account
-------------------
The invoice is marked as :guilabel:`In Payment` as soon as you record the payment. This operation
produces the following **journal entry**:
This operation will produce the following journal entry:
+----------------------+-------------------+----------+----------+
| Account | Statement Match | Debit | Credit |
+======================+===================+==========+==========+
| Account Receivable | | | 100.00 |
+----------------------+-------------------+----------+----------+
| Outstanding Receipts | | 100.00 | |
| Undeposited Funds | | 100.00 | |
+----------------------+-------------------+----------+----------+
Then, once you receive the bank statements, match this statement with the check of the **Outstanding
Receipts** account. This produces the following **journal entry**:
The invoice is marked as paid as soon as you record the check.
Then, once you get the bank statements, you will match this statement
with the check that is in Undeposited Funds.
+---------------------+-------------------+----------+----------+
| Account | Statement Match | Debit | Credit |
+=====================+===================+==========+==========+
| Outstanding Receipts| X | | 100.00 |
| Undeposited Funds | X | | 100.00 |
+---------------------+-------------------+----------+----------+
| Bank | | 100.00 | |
+---------------------+-------------------+----------+----------+
If you use this approach to manage received checks, you get the list of checks that have not been
cashed in the **Outstanding Receipt** account (accessible, for example, from the general ledger).
Reconciliation bypass
---------------------
If you use this approach to manage received checks, you get the list of
checks that have not been cashed in the **Undeposit Funds** account
(accessible, for example, from the general ledger).
The invoice is marked as :guilabel:`Paid` as soon as you record the check.
.. Note::
Both methods will produce the same data in your accounting at the
end of the process. But, if you have checks that have not been cashed,
this one is cleaner because those checks have not been reported yet on
your bank account.
With this approach, you bypass the use of **outstanding accounts**, effectively getting only one
journal entry in your books and bypassing the reconciliation:
Option 2: One journal entry only
================================
Configuration
-------------
These is nothing to configure if you plan to manage your checks using
this method.
From check payments to bank statements
--------------------------------------
Once you receive a customer check, go to the related invoice and click
on **Register Payment**. Fill in the information about the payment:
- **Payment method:** the bank that will be used for the deposit
- Memo: write the check number
.. image:: checks/check03.png
The invoice is marked as paid as soon as you record the check.
Once you will receive the bank statements, you will do the matching with
the statement and this actual payment. (technically: point this payment
and relate it to the statement line)
With this approach, you will get the following journal entry in your
books:
+----------------------+-------------------+----------+----------+
| Account | Statement Match | Debit | Credit |
@@ -126,3 +132,17 @@ journal entry in your books and bypassing the reconciliation:
+----------------------+-------------------+----------+----------+
| Bank | | 100.00 | |
+----------------------+-------------------+----------+----------+
.. tip::
You may also record the payment directly without going on the
customer invoice, using the menu :menuselection:`Sales --> Payments`. This method may
be more convenient if you have a lot of checks to record in a batch but
you will have to reconcile entries afterwards (matching payments with
invoices)
If you use this approach to manage received checks, you can use the
report **Bank Reconciliation Report** to verify which checks have been
received or paid by the bank. (this report is available from the **More**
option from the Accounting dashboard on the related bank account).
.. image:: checks/check01.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -23,16 +23,15 @@ products in a default kanban view.
:align: center
:alt: Set expense costs on products.
To create a new expense product, click :guilabel:`Create`. A product form will appear. Only the
:guilabel:`Product Name` and :guilabel:`Unit of Measure` fields are required to create a new expense
product. Enter the :guilabel:`Product Name` in the field, and select the :guilabel:`Unit of Measure`
from the drop-down menu (most products will be set to :guilabel:`Units`, which is the default
selection).
To create a new expense product, click :guilabel:`Create`. A product form will appear. Only two
fields are required, the :guilabel:`Product Name` and the :guilabel:`Unit of Measure`. Enter the
:guilabel:`Product Name` in the field, and select the :guilabel:`Unit of Measure` from the drop-down
menu (most products will be set to :guilabel:`Units`).
.. tip::
The *Sales* app is where specification on the units of measure are created and edited (e.g.
units, miles, nights, etc.). Go to :menuselection:`Sales app --> Configuration --> Settings` and
ensure `Units of Measure` is enabled in the `Product Catalog` section. Click on the
ensure `Units of Measure` is checked off in the `Product Catalog` section. Click on the
:guilabel:`Units of Measure` internal link to view, create, and edit the units of measure. Refer
to :doc:`this document </applications/inventory_and_mrp/inventory/management/products/uom>` to
learn more about units of measure and how to configure them.
@@ -50,9 +49,9 @@ report the actual cost when submitting an expense report.
Here are some examples for when to set a specific :guilabel:`Cost` on a product vs. leaving the
:guilabel:`Cost` at `0.00`:
- **Meals**: Set the :guilabel:`Cost` to `0.00`. When an employee logs an expense for a meal,
they enter the actual amount of the bill and will be reimbursed for that amount. An expense for
a meal costing $95.23 would equal a reimbursement for $95.23.
- **Meals**: Set the :guilabel:`Cost` to `0.00`. When an employee logs an expense for a meal, they
enter the actual amount of the bill and will be reimbursed for that amount. An expense for a
meal costing $95.23 would equal a reimbursement for $95.23.
- **Mileage**: Set the :guilabel:`Cost` to `0.30`. When an employee logs an expense for
"mileage", they enter the number of miles driven, and are reimbursed 0.30 per mile they
entered. An expense for 100 miles would equal a reimbursement for $30.00.
@@ -91,55 +90,48 @@ First, click :guilabel:`Create`, and then fill out the various fields on the for
- :guilabel:`Product`: Select the product from the drop-down menu that most closely corresponds to
the expense. For example, an airplane ticket would be appropriate for an expense
:guilabel:`Product` named :guilabel:`Air Travel`.
- :guilabel:`Total`: Enter the total amount paid for the expense in one of two ways:
- :guilabel:`Unit Price`: Enter the total amount paid for the expense in one of two ways:
#. If the expense is for one single item/expense with a variable price, enter the cost in the
:guilabel:`Total` field. Odoo will not display the :guilabel:`Quantity` field for a product if
it does not need to have the quantity specified (a product with a unit price of `0.00` and a
quantity of `1.00`).
#. If the expense is for multiples of the same item/expense with a fixed price, the
:guilabel:`Unit Price` is displayed. Enter the quantity in the :guilabel:`Quantity` field, and
the :guilabel:`Total` is automatically updated with the correct total (the :guilabel:`Quantity`
x the :guilabel:`Unit Price` = the :guilabel:`Total`).
#. If the expense is for one single item/expense, enter the cost in the :guilabel:`Unit Price`
field, and leave the :guilabel:`Quantity` `1.00`.
#. If the expense is for multiples of the same item/expense, enter the price *per unit* in the
:guilabel:`Unit Price` field, and enter the *quantity of units* in the :guilabel:`Quantity`
field.
.. example::
For example, in the case of mileage driven, the :guilabel:`Unit Price` would be set in the
product form as the cost *per mile*. Simply set the :guilabel:`Quantity` to the *number of
miles* driven, and the total for the expense is updated.
In the case of a hotel stay, for example, the :guilabel:`Unit Price` would be set as the
cost *per night*, and set the :guilabel:`Quantity` to the *number of nights* stayed.
- :guilabel:`Bill Reference`: If there is any reference text that should be included for the
expense, enter it in this field. This field is not visible for expense products that require a
:guilabel:`Quantity` to be entered.
- :guilabel:`Taxes`: If taxes were paid on the expense, select the tax percentage using the
drop-down menu. Tax options are pre-configured based on the localization setting selected when the
database was created. Adding any new taxes should only be done when necessary.
.. note::
When a tax is selected, the :guilabel:`Total` value will update in real time to show the added
taxes.
- :guilabel:`Paid By`: Click the radio button to indicate who paid for the expense and should be
reimbursed. If the employee paid for the expense (and should be reimbursed) select
:guilabel:`Employee (to reimburse)`. If the company paid directly instead (e.g. if the company
credit card was used to pay for the expense) select :guilabel:`Company`.
- :guilabel:`Expense Date`: Using the calendar module, enter the date the expense was incurred. Use
the :guilabel:`< (left)` and :guilabel:`> (right)` arrows to navigate to the correct month, then
click on the specific day to enter the selection.
- :guilabel:`Bill Reference`: If there is any reference text that should be included for the
expense, enter it in this field.
- :guilabel:`Account`: Select the expense account that this expense should be logged on from the
drop-down menu.
- :guilabel:`Employee`: Using the drop-down menu, select the employee this expense is for.
- :guilabel:`Customer to Reinvoice`: If the expense is something that should be paid for by a
customer, select the customer and related sales order that will be invoiced for this expense from
the drop-down menu. For example, if a customer wishes to have a custom designed piece of
furniture, and purchased design hours from our employee, that sales order listing the hours would
be referenced as the :guilabel:`Customer to Reinvoice`. In the list view, there may be many
different sales orders referencing the same company, so be sure the correct sales order is
selected.
.. note::
The :guilabel:`Customer to Reinvoice` field is only visible if the expense product has either
:guilabel:`At cost` or :guilabel:`Sales price` selected under the :guilabel:`Re-Invoice Expenses`
section. If :guilabel:`No` is selected for the :guilabel:`Re-Invoice Expenses` section, the
:guilabel:`Customer to Reinvoice` field is hidden.
customer, select the customer that will be invoiced for this expense from the drop-down menu. For
example, if a customer wishes to have an on-site meeting, and agrees to pay for the expenses
associated with it (such as travel, hotel, meals, etc.), then all expenses tied to that meeting
would indicate that customer as the :guilabel:`Customer to Reinvoice`.
- :guilabel:`Analytic Account`: Select the account the expense should be written against from the
drop-down menu.
- :guilabel:`Company`: If multiple companies are set-up, select the company this expense should be
filed for from the drop-down menu. If there is only one company, this field will be automatically
populated.
- :guilabel:`Employee`: Using the drop-down menu, select the employee this expense is for.
- :guilabel:`Paid By`: Click the radio button to indicate who paid for the expense and should be
reimbursed. If the employee paid for the expense (and should be reimbursed) select
:guilabel:`Employee (to reimburse)`. If the company paid directly instead (e.g. if the company
credit card was used to pay for the expense) select :guilabel:`Company`.
- :guilabel:`Notes...`: If any notes are needed in order to clarify the expense, enter them in the
notes field.
@@ -161,37 +153,14 @@ into an :guilabel:`Edit` button).
:alt: Attach a receipt after saving the record.
Click the new :guilabel:`Attach Receipt` button, and a file explorer appears. Navigate to the
receipt to be attached, and click :guilabel:`Open`. The new receipt is recorded in the chatter, and
the number of receipts will appear next to the :guilabel:`📎(paperclip)` icon beneath the expense
form. More than one receipt can be attached to an individual expense, as needed. The number of
receipts attached to the expense will be noted on the paperclip icon.
receipt to be attached, and click :guilabel:`Open`. A new :guilabel:`Receipts` smart button appears
at the top, and the new receipt is recorded in the chatter. More than one receipt can be attached to
an individual expense, as needed. The number of receipts attached to the expense will be noted on
the smart button.
.. image:: expenses/receipt-icon.png
.. image:: expenses/receipt-smartbutton.png
:align: center
:alt: View receipts in the chatter and see how many receipts are attached byu looking at the
paperclip icon in the chatter beneath the record.
Create new expenses from a scanned receipt
------------------------------------------
Rather than manually inputting all of the information for an expense, expenses can be created
automatically by scanning a PDF receipt.
First, in the main :guilabel:`Expenses` app dashboard view (this view can also be accessed from
:menuselection:`Expenses app --> My Expenses --> My Expenses to Report`), click :guilabel:`Scan`,
and a file explorer pops up. Navigate to the receipt to be uploaded, click on it to select it, and
then click :guilabel:`Open`.
.. image:: expenses/scan.png
:align: center
:alt: Create an expense by scanning a receipt. Click Scan at the top of the Expenses dashboard
view.
The receipt is scanned, and a new entry is created with today's date as the :guilabel:`Expense
Date`, and any other fields it can populate based on the scanned data, such as the total. Click on
the new entry to open the individual expense form, and click :guilabel:`Edit` to make changes. The
receipt that was scanned in appears in the chatter. Make any edits to the form, then click
:guilabel:`Save` when all the information is entered.
:alt: Attach a receipt after saving the record.
Automatically create new expenses from an email
-----------------------------------------------
@@ -200,7 +169,7 @@ Instead of individually creating each expense in the *Expenses* app, expenses ca
created by sending an email to an email alias.
To do so, first, an email alias needs to be configured. Go to :menuselection:`Expenses app -->
Configuration --> Settings`. Ensure :guilabel:`Incoming Emails` is enabled.
Configuration --> Settings`. Ensure :guilabel:`Incoming Emails` is checked off.
.. image:: expenses/email-alias.png
:align: center
@@ -224,9 +193,9 @@ the receipt.
To check an expense product's internal reference, go to :menuselection:`Expenses app -->
Configuration --> Expense Products`. If an internal reference is listed on the product, it is
visible in this view.
visible in this view as :guilabel:`(Ref###)`.
.. image:: expenses/internal-reference.png
.. image:: expenses/internal-ref-numbers.png
:align: center
:alt: Internal reference numbers are listed in the main Expense Products view.
@@ -235,7 +204,7 @@ To add an internal reference on an expense product, click on the product, then c
:guilabel:`Internal Reference` field, this sentence appears: :guilabel:`Use this reference as a
subject prefix when submitting by email.`.
.. image:: expenses/accomodation-internal-reference.png
.. image:: expenses/meals-internal-reference.png
:align: center
:alt: Internal reference numbers are listed in the main Expense Products view.
@@ -257,8 +226,6 @@ subject prefix when submitting by email.`.
- The :guilabel:`Internal Reference` for the expense product `Meals` is `Ref005`
- The :guilabel:`Cost` for the expense is `$25.00`
.. _expenses/report:
Create an expense report
========================
@@ -276,19 +243,13 @@ each entry, or quickly select all the expenses in the list by clicking the check
:alt: Select the expenses to submit, then create the report.
Once the expenses have been selected, click the :guilabel:`Create Report` button. The new report
appears with all the expenses listed, and the :guilabel:`Employee`, :guilabel:`Paid By`,
:guilabel:`Expense Journal`, and :guilabel:`Company` fields are automatically populated from the
individual expenses in the report.
appears with all the expenses listed, and the number of documents is visible in the
:guilabel:`Documents` smart button.
It is recommended to add a short summary for each report to help keep expenses organized. Enter a
short description for the expense report (such as `Client Trip NYC`, or `Repairs for Company Car`)
in the :guilabel:`Expense Report Summary` field.
.. note::
If all the expenses are listed for the same date, the :guilabel:`Expense Report Summary`
field will be pre-populated with the date for the expenses.
Next, select a :guilabel:`Manager` from the drop-down menu to assign a manager to review the report.
It is recommended to add a short summary for each report to help keep expenses organized. Click the
:guilabel:`Edit` button, and the :guilabel:`Expense Report Summary` field appears. Enter a short
description for the expense report (such as `Client Trip NYC`, or `Repairs for Company Car`). Next,
select a :guilabel:`Manager` from the drop-down menu to assign a manager to review the report.
.. image:: expenses/expense-report-summary.png
:align: center
@@ -302,16 +263,11 @@ add, then click :guilabel:`Select`. The items now appear on the report that was
:align: center
:alt: Add more expenses to the report before submitting.
When all edits have been completed, click :guilabel:`Save`. Once the expense report is saved, an
:guilabel:`Expenses` smart button appears in the top-right corner, listing the number of expenses on
the report. Click the :guilabel:`Expenses` smart button to view the individual expenses for the
report in a list.
.. note::
:guilabel:`Add a line` only appears when the document is in edit mode. It does not appear
otherwise.
.. image:: expenses/expense-smart-button.png
:align: center
:alt: An Expenses smart button appears after saving the expense report.
.. _expenses/submit:
When all edits have been completed, click :guilabel:`Save`.
Submit an expense report
------------------------
@@ -391,9 +347,8 @@ noted by the :guilabel:`Submitted` tag in the status column.
Reports can be approved in two ways (individually or several at once) and refused only one way. To
approve multiple expense reports at once, remain in the list view. First, select the reports to
approve by clicking the check box next to each report, or click the box next to :guilabel:`Employee`
to select all reports in the list. Next, click the :guilabel:`Approve Report` button. The number of
reports that are selected appear next to the :guilabel:`Approve Report` button, in an :guilabel:`X
Selected` button, with X being the number of reports currently selected.
to select all reports in the list. Next, click on the :guilabel:`⚙️ Action (gear)` icon, then click
:guilabel:`Approve Report`.
.. image:: expenses/approve-report.png
:align: center
@@ -410,27 +365,20 @@ in the :guilabel:`Reason to refuse Expense` field, then click :guilabel:`Refuse`
:align: center
:alt: Send messages in the chatter.
Team managers can easily view all the expense reports to approve for their team members. While in
the :guilabel:`Reports to Approve` view, click on :guilabel:`Filters`, then click :guilabel:`My
Team`. This presents all the reports to approve for the manager's team. Manager's can easily view
*all* reports for their team by simply clicking on and removing the :guilabel:`To Approve` filter in
the :guilabel:`Search...` bar, leaving only the :guilabel:`My Team` filter active.
Team managers can easily view all the expense reports for their team members. While in the
:guilabel:`Reports to Approve` view, click on :guilabel:`Filters`, then click :guilabel:`My Team`.
This presents all the reports for the manager's team.
.. image:: expenses/my-team-filter.png
:align: center
:alt: Select the My Team filter.
.. tip::
If more information is needed, such as a missing receipt, communication is easy from the chatter.
In an individual report, simply click :guilabel:`Send Message`, then type in a message in the
text box that appears, tagging the proper person (if needed), and post it to the chatter by
clicking :guilabel:`Send`. The message is posted in the chatter, and the person tagged will be
notified via email of the message, as well as anyone following.
Note that only followers can be tagged in a message. To tag someone who is not following, add
them as a follower first. Click the :guilabel:`👤 (person)` icon, then click :guilabel:`Add
Followers`, then enter their name in the :guilabel:`Recipients` field, and finally, click
:guilabel:`Add Followers`.
.. note::
If more information is needed, such as a receipt is missing, communication is easy from the
chatter. In an individual report, simply type in a message, tagging the proper person (if
needed), and post it to the chatter by clicking :guilabel:`Send`. The message is posted in the
chatter, and the person tagged will be notified via email of the message, as well as anyone
following.
.. image:: expenses/chatter.png
:align: center
@@ -452,7 +400,8 @@ To Post`.
Just like approvals, expense reports can be posted in two ways (individually or several at once). To
post multiple expense reports at once, remain in the list view. First, select the reports to post by
clicking the check box next to each report, or click the box next to :guilabel:`Employee` to select
all reports in the list. Next, click :guilabel:`Post Entries`.
all reports in the list. Next, click on the :guilabel:`⚙️ Action (gear)` icon, then click
:guilabel:`Post Entries`.
.. image:: expenses/post-entries.png
:align: center
@@ -460,8 +409,7 @@ all reports in the list. Next, click :guilabel:`Post Entries`.
To post an individual report, click on a report to go to the detailed view of that report. In this
view, several options are presented: :guilabel:`Post Journal Entries`, :guilabel:`Report In Next
Payslip`, :guilabel:`Refuse`, or :guilabel:`Reset to Draft`. Click :guilabel:`Post Journal Entries`
to post the report.
Payslip`, or :guilabel:`Refuse`. Click :guilabel:`Post Journal Entries` to post the report.
If :guilabel:`Refuse` is clicked, a pop-up window appears. Enter a brief explanation for the refusal
in the :guilabel:`Reason to refuse Expense` field, then click :guilabel:`Refuse`. Refused reports
@@ -490,7 +438,8 @@ Reports To Pay`.
Just like approvals and posting, expense reports can be paid in two ways (individually or several at
once). To pay multiple expense reports at once, remain in the list view. First, select the reports
to pay by clicking the check box next to each report, or click the box next to :guilabel:`Employee`
to select all reports in the list. Next, click :guilabel:`Register Payment`.
to select all reports in the list. Next, click on the :guilabel:`⚙️ Action (gear)` icon, then click
:guilabel:`Register Payment`.
.. image:: expenses/register-payment.png
:align: center
@@ -502,19 +451,10 @@ To pay an individual report, click on a report to go to a detailed view of that
Re-invoice expenses to customers
================================
If an expense is to be reimbursed by a customer and not the company, the expense can be
automatically charged to the customer. This is done by first referencing the :abbr:`SO (Sales
Order)` the expense should be applied to when creating the expense.
The next steps are the same as if the expense is being reimbursed by the company instead of a
customer. The expense or expenses are placed on an expense report, and then the expense report is
submitted for approval. Next, managers approve the expense report, and the accounting department
post the journal entry.
Finally, once the expense report is posted to a journal, the expense then appears on the :abbr:`SO
(Sales Order)` that was referenced when the expense was first created.
The sales order can then be invoiced, thus invoicing the customer for the expense.
If expenses are tracked on customer projects, expenses can be automatically charged back to the
customer. This is done by creating an expense report, then creating a sales order with the expensed
items on it. Then, managers approve the expense report, and the accounting department posts the
journal entries. Finally, the customer is invoiced.
Setup
-----
@@ -537,23 +477,37 @@ and :guilabel:`Re-Invoicing Policy` by clicking the radio button next to the des
- :guilabel:`At cost`: Expense product will invoice expenses at their real cost.
- :guilabel:`At sales price`: Expense product will invoice the price set on the sale order.
Create an expense and expense report
------------------------------------
Create an expense
-----------------
First, when :ref:`creating a new expense <expenses/new>`, the correct information needs to be
entered in order to re-invoice a customer. Using the drop-down menu, select the *sales order* the
expense will appear on in the :guilabel:`Customer to Reinvoice` section. Next, select the
:guilabel:`Analytic Account` the expense will be posted to. After the expense(s) is created, the
expense report needs to be :ref:`created <expenses/report>` and :ref:`submitted <expenses/submit>`
as usual.
entered in order to re-invoice a customer. Select the :guilabel:`Customer to Reinvoice` from the
drop-down menu. Next, select the :guilabel:`Analytic Account` the expense will be posted to.
.. image:: expenses/reinvoice-expense.png
:align: center
:alt: Ensure the customer to be invoiced is called out on the expense.
.. important::
Selecting a :guilabel:`Customer to Reinvoice` when creating an expense is critical, since this
field is unable to be modified once the expense is added to an expense report.
Create a quote and sales order
------------------------------
In the :menuselection:`Sales` app, create a quote for the customer being invoiced, listing the
expense products. First, click :guilabel:`Create` to create a new quotation. Next, select the
:guilabel:`Customer` being invoiced for the expenses from the drop-down menu.
In the :guilabel:`Order Lines` tab, click :guilabel:`Add a product`. In the :guilabel:`Product`
field, select the first item being invoiced from the drop-down menu, or type in the product name.
Then, update the :guilabel:`Quantity`, the :guilabel:`Delivered` quantity, and the :guilabel:`Unit
Price` if needed. Repeat this for all products being invoiced. When all the products have been added
to the quote, click :guilabel:`Confirm` and the quotation becomes a sales order.
.. image:: expenses/expenses-salesorder.png
:align: center
:alt: Create and confirm the sales order with the expenses listed as products.
Once the quote turns into a sales order, a :guilabel:`Delivered` column appears. The delivered
quantity must be updated for each item. Click on the `0.000` field for each product, and enter the
delivered quantity. When all delivered quantities have been entered, click :guilabel:`Save`.
Validate and post expenses
--------------------------
@@ -565,32 +519,18 @@ set on every expense line of a report. If an :guilabel:`Analytic Account` is mis
:guilabel:`Approve` or :guilabel:`Refuse`.
The accounting department is typically responsible for :ref:`posting journal entries
<expenses/post>`. Once an expense report is approved, it can then be posted. The :abbr:`SO (Sales
Order)` is **only** updated *after the journal entry is posted*, and the expense(s) now appear on
the referenced :abbr:`SO (Sales Order)`.
<expenses/post>`. Once an expense report is approved, it can then be posted.
Invoice expenses
----------------
Once the :abbr:`SO (Sales Order)` has been updated, it is time to invoice the customer. After the
expense report has been approved and the journal entry has been posted, the :abbr:`SO (Sales
Order)` can be opened and the expenses can be seen on it. Click anywhere on an expense line, and the
details for that individual expense appears in a pop-up. Click on the :abbr:`SO (Sales Order)` that
is listed next to :guilabel:`Customer to Reinvoice`.
Once the quote has turned into a sales order, and the expense report has been approved, it is time
to invoice the customer. Go to :menuselection:`Sales app --> To Invoice --> Orders to Invoice` to
view the sales orders ready to be invoiced.
.. image:: expenses/sales-order.png
:align: center
:alt: After the expense report is posted to the journal entry, the sales order can be called up
by clicking on the sales order number.
The :abbr:`SO (Sales Order)` appears, and now the expenses are listed in the :guilabel:`Order Lines`
tab.
.. image:: expenses/so-details.png
:align: center
:alt: See the expenses listed on the sales order after clicking into it.
Next, click :guilabel:`Create Invoice`, and select if the invoice is for a :guilabel:`Regular
invoice`, a :guilabel:`Down payment (percentage)`, or a :guilabel:`Down payment (fixed amount)` by
clicking the radio button next to it. Then, click :guilabel:`Create Invoice`. The customer has now
been invoiced for the expenses.
Next, find the sales order related to the expense report, click into it, and then click
:guilabel:`Create Invoice` and a :guilabel:`Create invoices` pop-up window appears. Select if the
invoice is a :guilabel:`Regular invoice`, :guilabel:`Down payment (percentage)`, or :guilabel:`Down
payment (fixed amount)` by clicking the radio button next to the selection. For either down payment
options, enter the amount (fixed or percentage) in the :guilabel:`Down Payment Amount` field.
Finally, click either :guilabel:`create and view invoice` or :guilabel:`create invoice`.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -2,7 +2,7 @@
Belgium
=======
.. _belgium/pos-restaurant-certification:
.. _belgium/introduction:
Fiscal certification: POS restaurant
====================================
@@ -12,14 +12,14 @@ use a government-certified **Cash Register System** for their receipts. This app
earnings (excluding VAT, drinks, and take-away food) exceed 25,000 euros.
This government-certified system entails the use of a :ref:`certified POS system
<belgium/certified-pos>`, along with a device called a :ref:`Fiscal Data Module <belgium/fdm>` (or
<belgium/certified>`, along with a device called a :ref:`Fiscal Data Module <belgium/fdm>` (or
**black box**) and a :ref:`VAT Signing Card <belgium/vat>`.
.. important::
Do not forget to register as *foodservice industry manager* on the `Federal Public Service
Finance registration form <https://www.systemedecaisseenregistreuse.be/fr/enregistrement>`_.
.. _belgium/certified-pos:
.. _belgium/certified:
Certified POS system
--------------------
@@ -121,6 +121,7 @@ As a pre-requisite, :ref:`activate <general/install>` the `Belgian Registered Ca
(technical name: `pos_blackbox_be`).
.. image:: belgium/be-modules.png
:align: center
:alt: black box modules for belgian fiscal certification
Once the module is activated, add your VAT number to your company information. To set it up, go to
@@ -130,6 +131,7 @@ so, go to the :guilabel:`Employees` app and open an employee form. There, go to
settings tab --> Attendance/Point of Sale`, and fill in the :guilabel:`INSZ or BIS number` field.
.. image:: belgium/bis-number.png
:align: center
:alt: ISNZ or BIS number field on employee form
.. tip::
@@ -158,6 +160,7 @@ database. To verify that the IoT Box recognizes the FDM, go to the IoT homepage
:guilabel:`IOT Device` section, which should display the FDM.
.. image:: belgium/iot-devices.png
:align: center
:alt: Hardware status page on a registered IoT Box
Then, add the IoT to your POS. To do so, go to :menuselection:`Point of Sale --> Configuration -->

View File

@@ -7,4 +7,3 @@ Human resources
.. toctree::
hr/attendances
hr/employees

View File

@@ -1,14 +0,0 @@
:nosearch:
:show-content:
:show-toc:
=========
Employees
=========
Odoo *Employees* organizes a company's employee records, contracts, and departments.
.. toctree::
:titlesonly:
employees/new_employee

View File

@@ -1,266 +0,0 @@
==================
Add a new employee
==================
When a new employee is hired, the first step is to create a new employee form. Starting in the
:menuselection:`Employees` app default view, click the :guilabel:`Create` button to access a new
employee form. Fill out the required information (underlined in bold) and any additional details,
then click :guilabel:`Save`.
.. image:: new_employee/employee-new.png
:align: center
:alt: Create a new employee card.
.. note::
The current company phone number and name is populated in the :guilabel:`Work Phone` and
:guilabel:`Company` fields.
General information
===================
Required fields
---------------
- :guilabel:`Name`: Enter the employee's name.
- :guilabel:`Company`: Select the company from the drop-down menu that the new employee is hired by,
or create a new company by typing the name in the field.
- :guilabel:`Working Hours`: In the :guilabel:`Work Information` tab, select the desired
:guilabel:`Working Hours` from the drop-down menu.
.. image:: new_employee/working-hours.png
:align: center
:alt: Working Hours are located in the Work Information tab.
.. note::
:guilabel:`Working Hours` are related to a company's working times, and an employee cannot have
working hours that are outside of a company's working times.
Each individual working time is company-specific, so for multi-company databases, each company
needs to have its own working hours set.
If an employee's working hours are not configured as a working time for the company, new working
times can be added, or existing working times can be modified. To add or modify a working time,
go to the :menuselection:`Payroll app --> Configuration --> Working Times`, and add a new working
time or edit an existing one.
After the new working time is created, set the working hours for the employee.
Optional fields
---------------
- :guilabel:`Photo`: In the top right image box of the employee card, click on the :guilabel:`✏️
(pencil)` edit icon to select a photo to upload.
- :guilabel:`Job Position`: Enter the employee's job position title.
- Tags: Click on a tag in the drop-down menu to add any tags applicable to the employee. Any tag can
be created in this field by typing it in. Once created, the new tag is available for all employee
cards. There is no limit to the amount of tags that can be added.
- Work Contact Information: Enter the employees :guilabel:`Work Mobile`, :guilabel:`Work Phone`,
:guilabel:`Work Email`, and/or :guilabel:`Company` name.
- :guilabel:`Department`: Select the employee's department from the drop-down menu.
- :guilabel:`Manager`: Select the employee's manager from the drop-down menu.
- :guilabel:`Coach`: Select the employee's coach from the drop-down menu.
.. note::
After a :guilabel:`Manager` is selected, if the :guilabel:`Coach` field is blank, the selected
manager automatically populates the :guilabel:`Coach` field.
.. tip::
To make edits to the selected :guilabel:`Department`, :guilabel:`Manager`, :guilabel:`Coach`, or
:guilabel:`Company`, click the :guilabel:`External Link` button next to the respective selection.
The :guilabel:`External Link` button opens the selected form, allowing for modifications. Click
:guilabel:`Save` after any edits are made.
Additional information tabs
===========================
Resumé tab
----------
Resumé
~~~~~~
Next, the employee's work history is entered in the :guilabel:`Resumé` tab. Each previous experience
must be entered individually. Click :guilabel:`Create a New Entry`, and the :guilabel:`Create Resumé
lines` form appears. Enter the following information, then click the :guilabel:`Save & Close` button
if there is only one entry to add, or click the :guilabel:`Save & New` button to save the current
entry and create another line.
.. image:: new_employee/resume-lines.png
:align: center
:alt: Add information for the previous work experience in this form.
- :guilabel:`Name`: Type in the name of the previous work experience.
- :guilabel:`Type`: From the drop-down menu, select either :guilabel:`Experience`,
:guilabel:`Education`, :guilabel:`Internal Certification`, :guilabel:`Internal Training`, or type
in a new entry.
- :guilabel:`Display Type`: Select either :guilabel:`Classic`, :guilabel:`Certification`, or
:guilabel:`Course` from the drop-down menu.
- :guilabel:`Date Start` and :guilabel:`Date End`: Enter the start and end dates for the work
experience. To select a date, use the :guilabel:`< (left)` and :guilabel:`> (right)` arrow icons
to scroll to the desired month, then click on the day to select it.
- :guilabel:`Description`: Enter any relevant details in the field.
Skills
~~~~~~
An employee's skills can be entered in the :guilabel:`Resumé` tab in the same manner a resumé line
is created. Click the :guilabel:`Create a New Entry` button under :guilabel:`Skills` and a
:guilabel:`Create Skills` form appears. Fill in the information, then click the :guilabel:`Save &
Close` button if there is only one entry to add, or click the :guilabel:`Save & New` button to save
the current entry and immediately create a new entry.
.. image:: new_employee/create-skill.png
:align: center
:alt: Create a new skill for the employee.
- :guilabel:`Skill Type`: Select from the drop-down menu either :guilabel:`Languages`,
:guilabel:`Dev`, :guilabel:`Music`, :guilabel:`Marketing`, or type in a new skill type. After
entering the new skill type, an option to :guilabel:`Create` the skill or :guilabel:`Create and
Edit` the skill appears. Click :guilabel:`Create and Edit`, and a pop-up for the specific skill
type appears. This can also be accessed with the :guilabel:`External Link` button next to the new
skill. This form allows for the creation of specific skills and levels. Click :guilabel:`Add a
line` and enter the information for the new skill, then repeat for all other added skills. Repeat
this process for the :guilabel:`Levels` section. Click :guilabel:`Add a line` to add each level
and progress.
.. image:: new_employee/new-skills.png
:align: center
:alt: Add a new skill and levels.
.. example::
To add a math skill set, enter `Math` in the :guilabel:`Name` field. In the :guilabel:`Skills`
field, enter `Algebra`, `Calculus`, and `Trigonometry`. And, in the :guilabel:`Levels` field
enter `beginner`, `intermediate`, and `expert`. Then, either click :guilabel:`Save & Close` or
:guilabel:`Save & New`.
- :guilabel:`Skill`: The corresponding skills associated with the selected :guilabel:`Skill Type`
appear in a drop-down menu. For example, selecting :guilabel:`Language` as the :guilabel:`Skill
Type` presents a variety of languages to select from under the :guilabel:`Skills` field. Select
the appropriate pre-configured skill, or type in a new one.
- :guilabel:`Skill Level`: Pre-defined skill levels associated with the selected :guilabel:`Skill
Type` appear in a drop-down menu. Select a level or create a new skill level by typing it in.
- :guilabel:`Progress`: Progress is automatically selected based on the selected :guilabel:`Skill
Level`. Skill levels and progress can be modified in the :guilabel:`Skill Type` pop-up form, which
is accessed via the :guilabel:`External Link` button next to :guilabel:`Skill Type` field.
To delete any line from the :guilabel:`Resumé` tab, click the :guilabel:`🗑️ (trash can)` delete icon
to delete the entry. Add a new line by clicking the :guilabel:`ADD` button next to the corresponding
section.
Work information tab
--------------------
- :guilabel:`Location`: Select the :guilabel:`Work Address` from the drop-down menu. The
:guilabel:`External Link` button opens up the selected company form in a window, and allows for
editing. The :guilabel:`Work Location` is where any specific location details should be noted,
such as a floor, or building.
- :guilabel:`Approvers`: Using the drop-down menus, select the employees responsible for approving
:guilabel:`Time Off`, :guilabel:`Expenses`, and :guilabel:`Timesheets` for the employee. The
:guilabel:`External Link` button opens a form with the approver's :guilabel:`Name`,
:guilabel:`Email Address`, :guilabel:`Company`, :guilabel:`Phone`, and :guilabel:`Mobile` fields.
These can be modified, if needed. Click :guilabel:`Save` after making any edits.
- :guilabel:`Schedule`: Select the :guilabel:`Working Hours` (required) and :guilabel:`Timezone` for
the employee. The :guilabel:`External Link` button opens up a detailed view of the specific daily
working hours. Working hours can be created, modified, or deleted here. Global time off (such as
holidays) can be entered in the :guilabel:`Global Time Off` tab. Click :guilabel:`Add a line` to
add a new global time off.
- :guilabel:`Planning`: Click on a planning role from the drop-down menu for both the
:guilabel:`Default Planning Role` and the :guilabel:`Planning Roles` fields to add a role. There
is no limit to the amount of :guilabel:`Planning Roles` that can be selected for an employee, but
there can only be one :guilabel:`Default Planning Role`. The default is the *typical* role that
the employee performs, where the :guilabel:`Planning Roles` are *all* the specific roles the
employee is able to perform.
.. image:: new_employee/work-info.png
:align: center
:alt: Add the work information to the Work Information tab.
Private information tab
-----------------------
No information in the :guilabel:`Private Information` tab is required, however, some information in
this section may be critical for the company's payroll department. In order to properly process
payslips and ensure all deductions are accounted for, the employee's personal information should be
entered.
Here, the employee's :guilabel:`Private Contact`, :guilabel:`Marital Status`, :guilabel:`Emergency
Contact`, :guilabel:`Education`, :guilabel:`Citizenship`, :guilabel:`Dependant`, and :guilabel:`Work
Permit` information is entered. Fields are entered either using a drop-down menu, clicking a check
box, or typing in the information.
- :guilabel:`Private Contact`: Enter the :guilabel:`Address` for the employee. The selection can be
made with the drop-down menu. If the information is not available, type in the name for the new
address. To edit the new address, click the :guilabel:`External Link` button to open the address
form. On the address form, enter the necessary details, then click :guilabel:`Save`. Some other
information in the :guilabel:`Private Contact` section may auto-populate, if the address is
already listed in the drop-down menu.
- :guilabel:`Marital Status`: Select either :guilabel:`Single`, :guilabel:`Married`,
:guilabel:`Legal Cohabitant`, :guilabel:`Widower`, or :guilabel:`Divorced` from the drop-down
menu.
- :guilabel:`Emergency Contact`: Type in the name and phone number of the employee's emergency
contact.
- :guilabel:`Education`: Select the highest level of education completed by the employee from the
:guilabel:`Certificate Level` drop-down menu. Options include :guilabel:`Graduate`,
:guilabel:`Bachelor`, :guilabel:`Master`, :guilabel:`Doctor`, or :guilabel:`Other`. Type in the
:guilabel:`Field of Study`, and the name of the :guilabel:`School` in the respective fields.
- :guilabel:`Citizenship`: This section houses all the information relevant to the citizenship of
the employee. Some selections use a drop-down menu, as does the :guilabel:`Nationality (Country)`,
:guilabel:`Gender`, and :guilabel:`Country of Birth` sections. The :guilabel:`Date of Birth` uses
a calendar module to select the date. First, click on the name of the month, then the year, to
access the year ranges. Use the :guilabel:`< (left)` and :guilabel:`> (right)` arrow icons,
navigate to the correct year range, and click on the year. Next, click on the month. Last, click
on the day to select the date. Type in the information for the :guilabel:`Identification No`,
:guilabel:`Passport No`, and :guilabel:`Place of Birth` fields. If the employee is
:guilabel:`Disabled` or a :guilabel:`Nonresident`, click the check box next to the respective
fields.
- :guilabel:`Dependant`: If the employee has any dependants, that information is entered here. Type
in the number of children the employee has, and check the boxes next to :guilabel:`Disabled
Children` and/or :guilabel:`Other Dependent People` if applicable.
- :guilabel:`Work Permit`: If the employee has a work permit, enter the information in this section.
Type in the :guilabel:`Visa No` and/or :guilabel:`Work Permit No` in the corresponding fields.
Using the calendar module, select the :guilabel:`Visa Expire Date` to enter the expiration date.
.. image:: new_employee/private-info.png
:align: center
:alt: Add the private information to the Private Information tab.
HR settings tab
---------------
This tab provides various fields for different information, depending on the country the company is
located. Different fields are configured for different locations, however some sections appear
regardless.
- :guilabel:`Status`: If applicable, select a :guilabel:`Related User`, :guilabel:`Job Position`,
and :guilabel:`Language` with the drop-down menus. Type in the :guilabel:`Registration Number of
the Employee`, and the :guilabel:`NIF Country Code` if available.
- :guilabel:`Fleet`: If the employee has access to a company car, enter the :guilabel:`Mobility
Card` information here.
- :guilabel:`Timesheets`: Enter the employee's cost per hour in a $XX.XX format. This is factored in
when the employee is working at a work center. This value affects the employee's pay, and may also
affect manufacturing costs for a product, if the value of the manufactured product is not a fixed
amount.
- :guilabel:`Attendance`: This section may only appear for Belgian companies. Enter the
:guilabel:`INSZ or BIS` number if applicable. :guilabel:`Badge ID` and a :guilabel:`PIN Code` can
be entered here, if the employee needs/has one. Click :guilabel:`Generate` next to the
:guilabel:`Badge ID` to create a badge ID.
.. image:: new_employee/hr-settings.png
:align: center
:alt: Enter any information prompted in the HR Settings tab for the employee.
Personal documents tab
----------------------
The :guilabel:`Personal Documents` tab is only displayed for certain countries. If this tab is not
visible, it is not applicable to the company's location.
Add a file for the employee's :guilabel:`ID Card Copy`, :guilabel:`Driving License`,
:guilabel:`Mobile Subscription Invoice`, :guilabel:`SIM Card Copy`, and :guilabel:`Internet
Subscription Invoice` by clicking the :guilabel:`Upload Your File` button next to the corresponding
field. File types that can be accepted are :file:`.jpg`, :file:`.png`, and :file:`.pdf`.
.. image:: new_employee/personal.png
:align: center
:alt: Upload personal documents for the employee in the Personal Documents tab, either a jpg,
png, or pdf.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -1,267 +1,65 @@
================
Expiration dates
Expiration Dates
================
In Odoo, *expiration dates* can be used to manage and track the lifecycles of perishable products,
from purchase to sale. Using expiration dates reduces product loss due to unexpected expiry, and
helps to avoid sending expired products to customers.
In many companies, products have expiration dates and they should be managed based on those dates.
In the food industry, for example, tracking and managing product stock based on expiration dates is
mandatory to avoid selling expired products to customers.
In Odoo, only products that are tracked using *lots* and *serial numbers* can be assigned expiration
information. Once a lot or serial number has been assigned, an expiration date can be set. This is
especially helpful for companies (such as food manufacturers) that consistently, or exclusively, buy
and sell perishable products.
With Odoo, you can track and manage your products based on their expiration dates, even if they are
already tracked by lots or serial numbers.
.. seealso::
- :doc:`/applications/inventory_and_mrp/inventory/management/lots_serial_numbers/lots`
- :doc:`/applications/inventory_and_mrp/inventory/management/lots_serial_numbers/serial_numbers`
Configuration
=============
Enable expiration dates
=======================
Application configuration
-------------------------
To enable the use of *expiration dates*, go to :menuselection:`Inventory app --> Configuration -->
Settings`, and scroll down to the :guilabel:`Traceability` section. Then, click the checkbox to
enable the :guilabel:`Lots & Serial Numbers` feature.
To use expiration date tracking, open the *Inventory* application and go to
:menuselection:`Configuration --> Settings` and activate the *Lots & Serial Numbers* and *Expiration
Dates* features.
Once that feature is activated, a new option will appear to enable :guilabel:`Expiration Dates`.
Click that checkbox to enable the feature, and be sure to :guilabel:`Save` changes.
.. image:: expiration_dates/expiration-dates-enabled-settings.png
.. image:: expiration_dates/expiration_dates_01.png
:align: center
:alt: Enabled lots and serial numbers and expiration dates settings.
.. tip::
Once the :guilabel:`Lots & Serial Numbers` feature is activated, additional features appear to
:guilabel:`Display Lots & Serial Numbers on Delivery Slips`; to :guilabel:`Display Lots & Serial
Numbers on Invoices`; and to :guilabel:`Display Expiration Dates on Delivery Slips`. Activating
these features helps with end-to-end traceability, making it easier to manage product recalls,
identify "bad" batches of products, and more.
Product configuration
---------------------
Configure expiration dates on products
Now, you can define different dates in the *inventory tab* of the product form:
- Product Use Time: the number of days before the goods start deteriorating, without being
dangerous. This is used to calculate the Best before date on each lot/serial number received.
- Product Life Time: the number of days before the goods may become dangerous and must not be
consumed. This is used to calculate the Expiration date on each lot/serial number received.
- Product Removal Time: shows the number of days before the goods should be removed from the stock.
This is used to calculate the Removal date on each lot/serial number received.
- Product Alert Time: refers to the number of days before an alert should be raised on the
lot/serial number. This is used to calculate the Alert date on each lot/serial number received.
Once the Alert date is reached, an Activity is assigned on the relevant lot/serial number to the
Responsible user defined on the Product.
.. image:: expiration_dates/expiration_dates_02.png
:align: center
Expiration Date on Lots/Serial Numbers
======================================
Once the :guilabel:`Lots & Serial Numbers` and :guilabel:`Expiration Dates` features have been
enabled in the settings of the *Inventory* app, expiration information can be configured on
individual products.
When receiving a product into inventory, the dates will automatically be updated on the
corresponding lot/serial number. These updates will be based on the receipt date of the product and
the days set on the product form.
To do so, go to :menuselection:`Inventory app --> Products --> Products`, and select a product to
edit. Selecting a product reveals the product form for that particular item. Once on the product
form, click :guilabel:`Edit` in the upper-left corner to make changes.
.. important::
To be tracked using lots or serial numbers, or to configure expiration information, products
*must* have their :guilabel:`Product Type` set as :guilabel:`Storable Product` under the
:guilabel:`General Information` tab.
Then, click the :guilabel:`Inventory` tab, and scroll down to the :guilabel:`Traceability` section.
From here, make sure that either :guilabel:`By Unique Serial Number` or :guilabel:`By Lots` is
checked.
Once it is, a new :guilabel:`Expiration Date` checkbox appears that must also be clicked. When both
are enabled, a new :guilabel:`Dates` field appears to the right.
.. note::
If a product has stock on-hand prior to activating tracking by lots or serial numbers, an
inventory adjustment might need to be performed in order to assign lot numbers to the existing
stock.
.. tip::
For processing large quantities of products on receipts or deliveries, it is recommended to track
using lots, so multiple products can be traced back to the same lot, if any issues arise.
.. image:: expiration_dates/expiration-dates-product-configuration.png
.. image:: expiration_dates/expiration_dates_03.png
:align: center
:alt: Expiration dates configuration on the product form.
Under the :guilabel:`Dates` field, there are four categories of expiration information to configure
for the product:
- :guilabel:`Expiration Time`: the number of days after receiving products (either from a vendor or
in stock after production) in which goods may become dangerous and should not be used or consumed.
- :guilabel:`Best Before Time`: the number of days before the expiration date in which the goods
start deteriorating, **without** necessarily being dangerous yet.
- :guilabel:`Removal Time`: the number of days before the expiration date in which the goods should
be removed from stock.
- :guilabel:`Alert Time`: the number of days before the expiration date in which an alert should be
raised on goods in a particular lot or containing a particular serial number.
.. note::
The values entered into these fields automatically compute the expiration date for goods entered
into stock, whether purchased from a vendor or manufactured in-house.
Once all the expiration information has been configured, click :guilabel:`Save` to save all changes.
.. tip::
If the :guilabel:`Dates` field is not populated with any values for expiration information, dates
(and lots) can be manually assigned upon receipts and deliveries in and out of the warehouse.
Even when assigned, they can still be overwritten and changed manually if needed, as well.
Set expiration dates on receipts with lots & serial numbers
===========================================================
Generating expiration dates for **incoming** goods can be done directly from the purchase order. To
create a purchase order, go to the :menuselection:`Purchase` app and click :guilabel:`Create` to
create a new request for quotation (RFQ).
Then, fill out the information by adding a :guilabel:`Vendor`, and add products to the
:guilabel:`Product` lines by clicking :guilabel:`Add a product`.
Choose the desired quantity to order by changing the number in the :guilabel:`Quantity` column, and
click :guilabel:`Confirm Order`. This converts the :abbr:`RFQ (request for quotation)` into a
purchase order.
Click the :guilabel:`Receipt` smart button at the top of the purchase order to be taken to the
warehouse receipt form.
.. note::
Clicking :guilabel:`Validate` before assigning a serial number to the ordered product quantities
causes a :guilabel:`User Error` popup to appear. The popup requires entry of a lot or serial
number for the ordered products. The :abbr:`RFQ (request for quotation)` cannot be validated
without an assigned lot or serial number.
.. image:: expiration_dates/expiration-dates-user-error-popup.png
:align: center
:alt: User error popup when validating an order with no lot number.
From here, click the :guilabel:`Additional Options` menu (hamburger) icon located on the far-right
of the product line. When clicked, a :guilabel:`Detailed Operations` pop-up will appear.
In this pop-up, click :guilabel:`Add a line`, and assign a lot or serial number under the
:guilabel:`Lot/Serial Number Name` field.
An expiration date automatically populates, based on the configuration on the product form (if
previously configured).
.. tip::
If the :guilabel:`Dates` field on the product form has not been configured, this date can be
manually entered.
After the expiration date has been established, mark the :guilabel:`Done` quantities, and click
:guilabel:`Confirm` to close the pop-up. Finally, click :guilabel:`Validate`.
.. image:: expiration_dates/expiration-dates-detailed-operations-popup.png
.. image:: expiration_dates/expiration_dates_04.png
:align: center
:alt: Detailed operations popup showing expiration dates for ordered products.
A :guilabel:`Traceability` smart button will appear upon validating the receipt. Click the
:guilabel:`Traceability` smart button to see the updated :guilabel:`Traceability Report`, which
includes: a :guilabel:`Reference` document; the :guilabel:`Product` being traced; the
:guilabel:`Lot/Serial #`; and more.
Expiration Alerts
=================
Set expiration dates on manufactured products
=============================================
You can access expiration alerts from the *inventory* app. To do so, go to :menuselection:`Master
Data --> Lots/Serial Numbers`. There, you can use the pre-existing filter to show all the
lots/serial numbers that have exceeded their respective alert dates.
Expiration dates can also be generated for products manufactured in-house. To assign expiration
dates to manufactured products, a manufacturing order (MO) needs to be completed.
To create a :abbr:`MO (manufacturing order)`, go to :menuselection:`Manufacturing app --> Operations
--> Manufacturing Orders`, and click :guilabel:`Create`. Choose a product to manufacture from the
:guilabel:`Product` field drop-down menu, then select the :guilabel:`Quantity` to produce.
.. image:: expiration_dates/expiration-dates-manufacturing-order.png
.. image:: expiration_dates/expiration_dates_05.png
:align: center
:alt: Manufacturing order for product with expiration date.
.. note::
To manufacture a product, there must be materials to consume in the lines in the
:guilabel:`Product` column. This can be achieved either by creating a :guilabel:`Bill of
Material` for the :guilabel:`Product`, or manually adding materials to consume by clicking
:guilabel:`Add a line`.
Once ready, click :guilabel:`Confirm`.
Next to :guilabel:`Lot/Serial Number`, either select an existing lot number from the drop-down menu,
or click the green :guilabel:`+` sign to automatically assign a new lot number.
Then, select a number of units for the :guilabel:`Quantity` field, and click :guilabel:`Mark as
Done`.
Click on the :guilabel:`External Link` icon in the assigned :guilabel:`Lot/Serial Number` field. A
pop-up appears, revealing a detail form for that specific number.
On that pop-up, under the :guilabel:`Dates` tab, all expiration information that was previously
configured for the product is displayed. That same information is also available on the detail form
for that specific product, or by going to :menuselection:`Inventory app --> Products --> Lots/Serial
Numbers`.
.. image:: expiration_dates/expiration-dates-dates-tab-lot-number.png
:align: center
:alt: Dates tab with expiration information for specific lot number.
Sell products with expiration dates
===================================
Selling perishable products with expiration dates is done the same as any other type of product. The
first step in selling perishable products is to create a sales order.
To do that, go to :menuselection:`Sales app --> Create` to create a new quotation, and fill out the
information on the sales order form.
Add a :guilabel:`Customer`, click :guilabel:`Add a product` to add the desired products to the
:guilabel:`Product` lines, and set a :guilabel:`Quantity` for the products.
Then, click the :guilabel:`Other Info` tab. Under the :guilabel:`Delivery` section, change the
:guilabel:`Delivery Date` to a date after the expected date, and click the :guilabel:`green
checkmark` icon to confirm the date. Finally, click :guilabel:`Confirm` to confirm the sales order.
Next, click the :guilabel:`Delivery` smart button at the top of the sales order to see the warehouse
receipt form.
On the warehouse receipt form, click :guilabel:`Validate`, and then :guilabel:`Apply` in the
accompanying pop-up window, to automatically process all :guilabel:`Done` quantities, and deliver
the products to the customer.
If the products are delivered before the :guilabel:`Alert Date` set on the product form, then no
alerts will be created.
.. important::
To sell perishable products with expiration dates, the :guilabel:`Removal Strategy` for the
:guilabel:`Location` the products are stored in must be set to :abbr:`FEFO (First Expiry, First
Out)`. If there is not enough stock of perishable products in one lot, Odoo will automatically
take the remaining quantity required from a second lot with the next-soonest expiration date.
Removal strategies can also be set on :guilabel:`Product Categories`.
.. seealso::
:doc:`/applications/inventory_and_mrp/inventory/routes/strategies/removal`
View expiration dates for lots & serial numbers
===============================================
To view (and/or group) all products with expiration dates by lot number, go to
:menuselection:`Inventory app --> Products --> Lots/Serial Numbers`.
Once there, remove any default search filters from the :guilabel:`Search...` bar. Then, click
:guilabel:`Group By`, choose :guilabel:`Add Custom Group`, and select the :guilabel:`Expiration
Date` parameter from the drop-down menu. Finally, click :guilabel:`Apply` to apply the filter.
Doing so breaks down all perishable products, their expiration dates, and the assigned lot number.
.. image:: expiration_dates/expiration-dates-group-by-dates.png
:align: center
:alt: Group by expiration dates on lots and serial numbers page.
Expiration alerts
-----------------
To see expiration alerts, go to :menuselection:`Inventory app --> Products --> Lots/Serial Numbers`.
Then, click into a :guilabel:`Lot/Serial Number` with perishable products. Doing so reveals the
serial number detail form. On the serial number detail form, click the :guilabel:`Dates` tab to see
all expiration information related to the products.
To edit the form, click :guilabel:`Edit` in the upper-left corner of the form, then change the
:guilabel:`Expiration Date` to today's date (or earlier), and click :guilabel:`Save` to save
changes.
After saving, the lot number form displays a red :guilabel:`Expiration Alert` at the top of the form
to indicate that the products in this lot are either expired or expiring soon. From here, click back
to the :guilabel:`Lots/Serial Numbers` page (via the breadcrumbs).
To see the new expiration alert, or any expiration alerts for products that are expired (or will
expire soon), remove all of the search filters from the :guilabel:`Search...` bar on the
:guilabel:`Lots/Serial Numbers` dashboard.
Then, click :guilabel:`Filters`, and choose :guilabel:`Expiration Alerts`.
.. image:: expiration_dates/expiration-dates-expiration-alert.png
:align: center
:alt: Expiration alert for product past the expiration date.

View File

@@ -1,16 +1,11 @@
==================================
Selecting a replenishment strategy
==================================
===============================
Select a replenishment strategy
===============================
.. |MTO| replace:: :abbr:`MTO (Make to Oder)`
.. |PO| replace:: :abbr:`PO (Purchase Order)`
.. |MO| replace:: :abbr:`MO (Manufacturing Order)`
.. |SO| replace:: :abbr:`SO (Sales Order)`
In Odoo, there are two strategies for automatically replenishing inventory: *reordering rules* and
the *make to order (MTO)* route. Although these strategies differ slightly, they both have similar
consequences: triggering the automatic creation of a |PO| or |MO|. The choice of which strategy to
use depends on the business's manufacturing and delivery processes.
In Odoo, there are two strategies for replenishing inventory: **Reordering Rules** and the **Make
to Order (MTO)** route. Although these strategies differ slightly, they both have similar
consequences: triggering the automatic creation of a purchase or manufacturing order. The choice of
which strategy to use depends on the business's manufacturing and delivery processes.
Terminology
===========
@@ -20,32 +15,31 @@ Replenishment report and reordering rules
The replenishment report is a list of all products that have a negative forecast quantity.
*Reordering rules* are used to ensure there's always a minimum amount of a product in-stock, in
order to manufacture products and/or fulfill sales orders. When the stock level of a product reaches
its minimum, Odoo automatically generates a purchase order with the quantity needed to reach the
maximum stock level.
Reordering rules are used to ensure that there's always a minimum amount of a product in stock in
order to manufacture products and/or fulfill sales orders. When the stock level of a product
reaches its minimum, Odoo automatically generates a purchase order with the quantity needed to
reach the maximum stock level.
Reordering rules can be created and managed in the replenishment report, or from the product form.
Reordering rules can be created and managed in the replenishment report or from the product form.
Make to order
Make to Order
-------------
*Make to order (MTO)* is a procurement route that creates a draft purchase order (or manufacturing
order) each time a sales order is confirmed, **regardless of the current stock level**.
Make to Order (MTO) is a procurement route that creates a draft purchase order or manufacturing
order each time a sales order is confirmed, *regardless of the current stock level*.
Unlike products replenished using reordering rules, Odoo automatically links the sales order to the
|PO| or |MO| generated by the |MTO| route.
Another difference between reordering rules and |MTO| is, with |MTO|, Odoo generates a draft |PO| or
|MO| immediately after the |SO| is confirmed. With reordering rules, Odoo generates a draft |PO| or
|MO| when the product's forecasted stock falls below the set minimum quantity.
In addition, Odoo automatically adds quantities to the |PO| or |MO| as the forecast changes, so long
as the |PO| or |MO| is not confirmed.
The |MTO| route is the best replenishment strategy for products that are customized, and/or for
products that have no stock kept on-hand.
purchase order (PO) or manufacturing order (MO) generated by the MTO route. Another difference
between reordering rules and MTO is with MTO, Odoo generates a draft :abbr:`PO (Purchase Order)` or
:abbr:`MO (Manufacturing Order)` immediately after the sales order is confirmed. With reordering
rules, Odoo generates a draft :abbr:`PO (Purchase Order)` or :abbr:`MO (Manufacturing Order)` when
the product's forecasted stock falls below the set minimum quantity. In addition, Odoo will
automatically add quantities to the :abbr:`PO (Purchase Order)`/:abbr:`MO (Manufacturing Order)` as
the forecast changes, as long as the :abbr:`PO (Purchase Order)`/:abbr:`MO (Manufacturing Order)`
is not confirmed.
The MTO route is the best replenishment strategy for products that are customized and should be
used for this purpose only.
Configuration
=============
@@ -53,146 +47,92 @@ Configuration
Replenishment report and reordering rules
-----------------------------------------
To access the replenishment report, go to :menuselection:`Inventory app --> Operations -->
Replenishment.`
To access the replenishment report, go to :menuselection:`Inventory --> Operations -->
Replenishment`. By default, the replenishment report shows every product that needs to be manually
reordered. If there is no specific rule for a product, Odoo assumes that the :guilabel:`Minimum
Quantity` and :guilabel:`Maximum Quantity` stock are both `0.00`.
By default, the replenishment report dashboard shows every product that needs to be manually
reordered. If there is no specific rule for a product, Odoo assumes the :guilabel:`Min Quantity` and
:guilabel:`Max Quantity` stock are both `0.00`
.. image:: strategies/replenishment-report.png
:align: center
:alt: The replenishment report shows products that need to be reordered manually.
.. note::
For products that don't have a set reordering rule, Odoo calculates the forecast based on
confirmed sales orders, deliveries, and receipts. For products that have a set reordering rule,
Odoo calculates the forecast normally, but also takes into account the purchase/manufacturing
lead time and security lead time.
For products that don't have a set reordering rule, Odoo calculates the forecast as sales orders,
deliveries, and receipts are confirmed. For products that have a set reordering rule, Odoo
calculates the forecast normally, but also takes into account the purchase/manufacturing lead
time and security lead time.
.. important::
Before creating a new reordering rule, make sure the product has a *vendor* or a *bill of
materials* configured on the product form. To check this, go to :menuselection:`Inventory app
--> Products --> Products`, and select the product to open its product form. The vendor, if
configured, is listed in the :guilabel:`Purchase` tab, and the bill on materials, if configured,
is found in the :guilabel:`Bill of Materials` smart button at the top of the form.
Before creating a new reordering rule, make sure the product has a vendor or a bill of materials
configured on the product form. Also, make sure the :guilabel:`Product Type` is set to `Storable
Product` on the product form. By definition, a consumable product does not have its inventory
levels tracked, so Odoo can not account for a consumable product in the stock valuation.
The :guilabel:`Product Type`, located in the :guilabel:`General Information` tab on the product
form, **must** be set to :guilabel:`Storable Product`. By definition, a consumable product does
not have its inventory levels tracked, so Odoo cannot account for a consumable product in the
replenishment report.
To create a new reordering rule from the replenishment report, go to :menuselection:`Inventory -->
Operations --> Replenishment`, click :guilabel:`Create`, and set the :guilabel:`Product`. If
desired, set a :guilabel:`Min Quantity` and a :guilabel:`Max Quantity`. Finally, click
:guilabel:`Save`.
.. image:: strategies/replenishment-report-dashboard.png
:align: center
:alt: Replenishment report listing all items needing to be purchased to meet current needs.
To create a new reordering rule from the product form, go to :menuselection:`Inventory --> Products
--> Products`, select a product to open its product form, click the :guilabel:`Reordering Rules`
smart button, and click :guilabel:`Create`. Then, fill out the fields and save the new reordering
rule.
To create a new reordering rule from the replenishment report, go to :menuselection:`Inventory app
--> Operations --> Replenishment`, click :guilabel:`Create`, and select the desired product from the
drop-down menu in the :guilabel:`Product` column. If necessary, a :guilabel:`Min Quantity` and a
:guilabel:`Max Quantity` can be configured in the corresponding columns on the
:guilabel:`Replenishment` report page, as well.
By default, the quantity in the :guilabel:`To Order` field is the quantity required to reach the
set :guilabel:`Max Quantity`. However, the :guilabel:`To Order` quantity can be adjusted by
clicking on the field, changing the value, and clicking :guilabel:`Save`. To replenish a product
manually, click :guilabel:`Order Once`.
To create a new reordering rule from the product form, go to :menuselection:`Inventory app -->
Products --> Products`, and select a product to open its product form. Click the
:guilabel:`Reordering Rules` smart button, click :guilabel:`Create`, and fill out the fields.
To automate replenishment, click :guilabel:`Automate Orders`. When this button is clicked, Odoo
will automatically generate a draft :abbr:`PO (Purchase Order)`/:abbr:`MO (Manufacturing Order)`
every time the forecasted stock level falls below the set :guilabel:`Min Quantity` of the
reordering rule.
Replenishment report fields
~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following fields are on the :guilabel:`Replenishment` report. If any of these fields are not
visible, click the :guilabel:`⋮ (additional options)` icon on the far right side of the report, then
click the checkbox next to a field to make it visible.
- :guilabel:`Product`: the product that requires a replenishment.
- :guilabel:`Location`: the specific location where the product is stored.
- :guilabel:`Warehouse`: the warehouse where the product is stored.
- :guilabel:`On Hand`: the amount of product currently available.
- :guilabel:`Forecast`: the amount of product available after all current orders (sales,
manufacturing, purchase, etc.) are taken into account.
- :guilabel:`Preferred Route`: how the product is procured, either :guilabel:`Buy`,
:guilabel:`Manufactured`, :guilabel:`Dropship`, etc.
- :guilabel:`Vendor`: the company from which the product is acquired.
- :guilabel:`Bill of Materials`: the bill of materials for the product (if one is configured).
- :guilabel:`Trigger`: how the replenishment is created, either :guilabel:`Auto` (automatically,
once the :guilabel:`On Hand` quantity goes below the :guilabel:`Min Quantity`) or
:guilabel:`Manual` (only when the replenishment is requested).
- :guilabel:`Procurement Group`: the reference number for how the product is being acquired, such as
a sales order, purchase order, or manufacturing order.
- :guilabel:`Min Quantity`: the minimum amount of product that should be available. When inventory
levels goes below this number, the replenishment is triggered.
- :guilabel:`Max Quantity`: the amount of product that should be available after replenishing the
product.
- :guilabel:`Multiple Quantity`: if the product should be ordered in specific quantities, enter the
number that should be ordered. For example, if the :guilabel:`Multiple Quantity` is set to `5`,
and only 3 are needed, 5 products are replenished.
- :guilabel:`To Order`: the amount of product that is currently needed, and will be ordered, if the
:guilabel:`Order Once` or :guilabel:`Automate Orders` button is clicked.
- :guilabel:`UoM`: the unit of measure used to acquire the product.
- :guilabel:`Company`: the company for which the product is acquired.
By default, the quantity in the :guilabel:`To Order` field is the quantity required to reach the set
:guilabel:`Max Quantity`. However, the :guilabel:`To Order` quantity can be adjusted by clicking on
the field and, changing the value, and clicking :guilabel:`Save`. To replenish a product manually,
click :guilabel:`Order Once`.
To automate a replenishment from the :guilabel:`Replenishment` page, click :guilabel:`Automate
Orders` on the right-side of the line, represented by a :guilabel:`🔄 (circular arrow)` icon.
When this button is clicked, Odoo will automatically generate a draft |PO|/|MO| every time the
forecasted stock level falls below the set :guilabel:`Min Quantity` of the reordering rule.
On the :guilabel:`Replenishment` page, a reordering rule or manual replenishment can be temporarily
deactivated for a given period, by clicking the :guilabel:`🔕 (snooze)` icon on the far-right of the
line.
A reordering rule can be temporarily deactivated for a given period by using the :guilabel:`Snooze`
button.
.. image:: strategies/reordering-rule-snooze-settings.png
:align: center
:alt: Snooze options to turn off notifications for reordering for a period of time.
:alt: Snooze feature to temporarily deactivate reordering rules.
A |PO| or |MO| created by a manual replenishment has a :guilabel:`Replenishment Report` as the
source document. A |PO| or |MO| created by an automated reordering rule has the |SO| reference
number(s) that triggered the rule as the source document.
A :abbr:`PO (Purchase Order)` or :abbr:`MO (Manufacturing Order)` created by a manual replenishment
will have `Replenishment Report` as the source document. A :abbr:`PO (Purchase Order)` or
:abbr:`MO (Manufacturing Order)` created by an automated reordering rule will have the sales
order(s) reference number(s) that triggered the rule as the source document.
.. image:: strategies/rfq-source-document.png
:align: center
:alt: Quote request list shows which quotes are directly from the replenishment report.
:alt: Look at the source panel showing where RFQ/MFG orders originated from.
Make to order (MTO) route
=========================
Make to order
-------------
Since the |MTO| route is recommended for customized products, the route is hidden by default.
Since the Make to Order (MTO) route is only recommended for customized products, the route is
hidden by default.
To activate the |MTO| route in Odoo:
#. Go to :menuselection:`Inventory app --> Configuration --> Settings`.
#. Activate the :guilabel:`Multi-Step Routes` setting, located under the :guilabel:`Warehouse`
section, and click :guilabel:`Save`.
#. Then, go to :menuselection:`Inventory app --> Configuration --> Routes`.
#. Click on :menuselection:`Filters --> Archived` to show archived routes.
#. Select the checkbox next to :guilabel:`Replenish on Order (MTO)`, and click on
:menuselection:`Action --> Unarchive`.
To activate the Make to Order (MTO) route in Odoo:
#. Go to :menuselection:`Inventory --> Configuration --> Settings --> Warehouse`.
#. Activate :guilabel:`Multi-Step Routes` setting and click :guilabel:`Save`.
#. Go to :menuselection:`Inventory --> Configuration --> Routes`.
#. Click on :menuselection:`Filters --> Archived` to show archived routes.
#. Select the checkbox next to :guilabel:`Replenish on Order (MTO)`, and click on
:menuselection:`Action --> Unarchive`.
.. note::
Activating the :guilabel:`Multi-Step Routes` setting also activates :guilabel:`Storage
Locations`. If these features aren't applicable to the warehouse, disable these settings after
unarchiving the |MTO| route.
Activating the :guilabel:`Multi-Step Routes` setting also activates :guilabel:`Storage Locations`
setting. If these features aren't applicable to the warehouse, disable these settings after
unarchiving the MTO route.
To set a product's procurement route to |MTO|, go to :menuselection:`Inventory app --> Products -->
Products`, click on the desired product to open its product form, and click :guilabel:`Edit`.
To set a product's procurement route to MTO, go to :menuselection:`Inventory --> Products -->
Products`, click on a product to open the product form, and click :guilabel:`Edit`. Then, click on
the :guilabel:`Inventory` tab and in the :guilabel:`Routes` options, select :guilabel:`Replenish on
Order (MTO)`. For products purchased directly from a vendor, make sure the :guilabel:`Buy` route is
selected in addition to the MTO route and a vendor is configured in the :guilabel:`Purchase` tab.
For products manufactured in-house, make sure the :guilabel:`Manufacture` route is selected in
addition to the MTO route and a bill of materials is configured for the product. Finally, click
:guilabel:`Save`.
Then, click the :guilabel:`Inventory` tab, and in the :guilabel:`Routes` section of options, select
:guilabel:`Replenish on Order (MTO)`.
For products purchased directly from a vendor, make sure the :guilabel:`Buy` route is selected, in
addition to the :guilabel:`Replenish on Order (MTO)` route. Also, make sure a vendor is configured
in the :guilabel:`Purchase` tab of the product form.
For products manufactured in-house, make sure the :guilabel:`Manufacture` route is selected, in
addition to the :guilabel:`Replenish on Order (MTO)` route. Also, make sure a bill of materials is
configured for the product, which is accessible via the :guilabel:`Bill of Materials` smart button
on the product form.
Finally, when all configurations are complete, click :guilabel:`Save`.
.. note::
The |MTO| route cannot be selected alone. |MTO| **only** works if the :guilabel:`Manufacture` or
:guilabel:`Buy` route is also selected.
.. image:: strategies/acoustic-block-screen-replenish.png
.. image:: strategies/replenish-on-order-product-setting.png
:align: center
:alt: Replenish on Order selected on the product form.
:alt: Enable the Replenish on Order (MTO) route on the product settings.

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -12,6 +12,7 @@ Manufacturing management
management/kit_shipping
management/sub_assemblies
management/quality_control
management/alternative_wc
management/subcontracting
management/use_mps
management/using_work_centers

View File

@@ -0,0 +1,58 @@
========================
Alternative Work Centers
========================
Manufacturing several different products simultaneously at the same work center is a common issue
for manufacturing companies. Although in practice, employees can manufacture the goods at another
work center instead of waiting for one to be available, it's not always simple to have visibility
on which work center is busy and plan resources accordingly in real-time.
With Odoo, you can configure alternative work centers to solve this issue. This automatically
checks which work center is busy and which equivalent ones are free, and schedules orders and
maintenance accordingly.
This way, your process becomes more efficient, as work center utilisation is optimised.
Configure your Work Centers
===========================
First, go to the :menuselection:`Manufacturing app --> Configuration --> Settings`. Then, enable
the :guilabel:`Work Orders` feature and hit :guilabel:`Save`.
.. image:: alternative_wc/work-orders-setting.png
:align: center
:alt: Work order settings ticked in Odoo Manufacturing.
Now, go to :menuselection:`Configuration --> Work Centers` and create two new work centers. Add the
second work center as an alternative to the first one and vice versa.
.. image:: alternative_wc/alternative-wc-config.png
:align: center
:alt: Create a secondary work center as an alternate to the first.
Next, go to :menuselection:`Products --> Bills of Materials`, choose your product, and add these
work centers to the operations of your :abbr:`BoM (Bill of Materials)`.
.. image:: alternative_wc/wc-bom-operations.png
:align: center
:alt: Add work centers to Bill of Materials operations.
Create your Work Orders
=======================
Now that everything is configured, you can create your *Work Orders*.
Go to :menuselection:`Operations --> Manufacturing Orders`, and hit :guilabel:`Create`. There, add
your product to your manufacturing order and plan it. You can then retrieve them from the
:guilabel:`Work Orders` list view, under :menuselection:`Operations > Work Orders`.
Each new *Work Order*, which will be created before the end of the first one, will be scheduled at
the alternative work center you configured, as shown below.
.. image:: alternative_wc/work-orders-by-wc.png
:align: center
:alt: Work order creation and scheduling.
.. note::
Keep in mind that, if you add time after production to your work center, you may have work
orders scheduled for your alternative work center even if the usual one is free.

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

View File

@@ -76,8 +76,6 @@ to a work center. The following information will be displayed for each piece of
:guilabel:`MTBF`, :guilabel:`MTTR`, and :guilabel:`Est. Next Failure` are all calculated
automatically based on past failure data, if any exists.
.. _workcenter_iot:
Integrate IoT devices
---------------------

View File

@@ -1,181 +1,81 @@
==========================
Connect an IoT box to Odoo
==========================
===================================
Connect an IoT Box to your database
===================================
An Internet of Things (IoT) box is a micro-computer device that allows for the connection of input
and output devices to an Odoo database. An :abbr:`IoT (Internet of Things)` box subscription is
required in order to use the :abbr:`IoT (Internet of Things)` box with a secured connection. A
computer is also required to set up the :abbr:`IoT (Internet of Things)` box.
Install the Internet of Things (IoT) App on your Odoo Database.
.. seealso::
`IoT Box FAQ <https://www.odoo.com/app/iot-faq>`_
Begin the :abbr:`IoT (Internet of Things)` configuration process by :ref:`installing the IoT app
<general/install>` on the Odoo database through the :menuselection:`Apps` application.
.. image:: connect/install-iot-app.png
.. image:: connect/connect01.png
:align: center
:alt: The Internet of Things (IoT) app on the Odoo database.
Next, after the *IoT app* is installed, navigate to :menuselection:`IoT app --> IoT Boxes`, and then
click on the :guilabel:`Connect` button located in the upper-left corner of the :menuselection:`IoT
Boxes` dashboard.
Go in the IoT App and click on Connect on the IoT Boxes page.
.. image:: connect/connect-iot.png
.. image:: connect/connect02.png
:align: center
:alt: Connecting an IoT box to the Odoo database.
There are two recommended ways to connect the :abbr:`IoT (Internet of Things)` box to the database
once the *IoT app* is installed. Follow the steps in either of the next two sections to connect the
:abbr:`IoT (Internet of Things)` box via :ref:`wired ethernet connection <iot_connect/ethernet>` or
via :ref:`WiFi <iot_connect/wifi>`.
Follow the steps to connect your IoT Box.
.. image:: connect/connect-iot-box.png
.. image:: connect/connect03.png
:align: center
:alt: Connection steps for a wired connection or WiFi connection.
.. important::
The disk image that the :abbr:`IoT (Internet of Things)` box SD card is formatted with is unique
to the version of the Odoo database that the :abbr:`IoT (Internet of Things)` box is running on.
Ensure that the :abbr:`IoT (Internet of Things)` box is :doc:`flashed <flash_sdcard>` with the
most up-to-date disk image.
.. _iot_connect/ethernet:
Ethernet connection
Ethernet Connection
===================
The following is the process to connect the :abbr:`IoT (Internet of Things)` box via an ethernet
cable to the Odoo database (by way of the ethernet port; RJ-45).
#. Connect to the IoT Box all the devices that have to be connected with
cables (ethernet, usb devices, etc.).
First, connect all wired devices to the :abbr:`IoT (Internet of Things)` box (ethernet, :abbr:`USB
(Universal Serial Bus)` devices, etc.). At minimum, an HDMI screen should be connected. Then, plug
the :abbr:`IoT (Internet of Things)` box into a power source.
#. Power on the IoT Box.
Immediately after the unit powers on and boots up, read the *pairing code* from the screen or from
the printout of a receipt printer connected to the :abbr:`IoT (Internet of Things)` box.
#. Read the Pairing Code from a screen or a receipt printer connected to the IoT Box.
.. warning::
By default, the :abbr:`IoT (Internet of Things)` box will display the *pairing code* for a
maximum of 5 minutes after the unit boots up. After 5 minutes, the *pairing code* will disappear
for security purposes and the :abbr:`IoT (Internet of Things)` box will need to be rebooted
manually by unplugging the unit from the power source for ten seconds and re-plugging it back in.
.. image:: connect/connect04.png
#. Input the Pairing Code and click on the Pair button.
.. note::
If no screen is attached to the :abbr:`IoT (Internet of Things)` box, then the *pairing code* can
be accessed from the :abbr:`IoT (Internet of Things)` box homepage by clicking on the
:guilabel:`POS Display` button. For instructions on how to access the :abbr:`IoT (Internet of
Things)` box homepage visit :ref:`iot_connect/token`.
Recent changes in modern web browsers forced us to modify the connection wizard.
If your screen is different from the screenshots, make sure that the
``iot_pairing`` module is installed.
On the computer, navigate to :menuselection:`IoT app --> IoT Boxes`, and then click on the
:guilabel:`Connect` button located in the upper-left corner of the the :menuselection:`IoT Boxes`
dashboard. Input the *pairing code* in the :guilabel:`Pairing Code` field and click on the
:guilabel:`Pair` button. The database will now link to the :abbr:`IoT (Internet of Things)` box and
it will appear on the :menuselection:`IoT Boxes` page.
.. _iot_connect/wifi:
WiFi connection
WiFi Connection
===============
The following is the process to connect the :abbr:`IoT (Internet of Things)` box via a WiFi
connection to the Odoo database.
#. Power on the IoT Box
First, ensure there is no ethernet cable plugged into the :abbr:`IoT (Internet of Things)` box.
Then, connect all wired devices to the :abbr:`IoT (Internet of Things)` box (:abbr:`USB (Universal
Serial Bus)` devices, etc.).
#. Copy the token
After connecting the devices, plug the :abbr:`IoT (Internet of Things)` box into to a power source.
On the computer, navigate to :menuselection:`IoT app --> IoT Boxes`, and then click on the
:guilabel:`Connect` button located in the upper-left corner of the the :menuselection:`IoT Boxes`
dashboard. Then copy the :guilabel:`Token` from the :guilabel:`WiFi connection` section as this will
later be used to link the Odoo database to the :abbr:`IoT (Internet of Things)` box.
.. image:: connect/connect05.png
Back on the computer, navigate to the available WiFi networks and connect to the :abbr:`IoT
(Internet of Things)` box WiFi network. The WiFi network dispersed by the :abbr:`IoT (Internet of
Things)` box will start with `IoTBox-xxxxxxxxxx`.
#. Connect to the IoT Box WiFi Network (make sure there is no ethernet
cable plugged in your computer).
.. image:: connect/connect-iot-wifi.png
.. image:: connect/connect06.png
#. You will be redirected to the IoT Box Homepage (if it doesn't work,
connect to the IP address of the box). Give a name to your IoT Box (not
required) and paste the token, then click on next.
.. image:: connect/connect07.png
.. tip::
If you are on Runbot, do not forget to add the -all or -base in the
token (e.g. this token
**http://375228-saas-11-5-iot-f3f920.runbot16.odoo.com\|4957098401**
should become
**http://375228-saas-11-5-iot-f3f920-all.runbot16.odoo.com\|4957098401**).
#. Choose the WiFi network you want to connect with (enter the password
if there is one) and click on Submit. Wait a few seconds before being
redirected to your database.
.. image:: connect/connect08.png
You should now see the IoT Box.
.. image:: connect/connect09.png
:align: center
:alt: WiFi networks available on the computer.
Upon connecting to the :abbr:`IoT (Internet of Things)` box WiFi, a browser will automatically
redirect to the :menuselection:`Configure Iot Box` wizard. Name the :abbr:`IoT (Internet of Things)`
box, then paste the previously copied *token* into the :guilabel:`Server Token` field, and then
click on :guilabel:`Next`.
.. image:: connect/server-token.png
:align: center
:alt: Enter the server token into the IoT box.
.. note::
If the :abbr:`IoT (Internet of Things)` box WiFi connection wizard doesn't start, then see the
documentation on :ref:`connecting with a token <iot_connect/token>`.
Now, choose the WiFi network that the :abbr:`IoT (Internet of Things)` box will connect with (enter
the password if there is one) and click on :guilabel:`Connect`. Wait a few seconds and the browser
will redirect to the :abbr:`IoT (Internet of Things)` box homepage. The computer may need to be
manually re-connected back to the original WiFi connection, if this does not happen automatically.
.. image:: connect/configure-wifi-network-iot.png
:align: center
:alt: Configuring the WiFi for the IoT box.
After completing each step, the :abbr:`IoT (Internet of Things)` box should appear when navigating
to :menuselection:`IoT app --> IoT Boxes` on the Odoo database.
.. image:: connect/iot-box-connected.png
:align: center
:alt: The IoT box has been successfully configured on the Odoo database.
.. important::
The :abbr:`IoT (Internet of Things)` box may need to be manually rebooted upon successfully
connecting via WiFi for the box to appear in the *IoT app* on the Odoo database. To do so, simply
unplug the device and plug it back into the power source after ten seconds.
.. _iot_connect/token:
Manually connecting the IoT box using the token
===============================================
A manual connection of the :abbr:`IoT (Internet of Things)` box to the :abbr:`IoT (Internet of
Things)` app can be made using the *token*, from a computer. The *token* can be found by navigating
to :menuselection:`IoT app --> IoT Boxes` and clicking on :guilabel:`Connect`.
Under the :guilabel:`WiFi Connection` section of the :guilabel:`Connect an IoT Box` page that
appears, click :guilabel:`Copy` to the right of the :guilabel:`Token`. This token will be entered
into the :abbr:`IoT (Internet of Things)` box homepage.
Access the :abbr:`IoT (Internet of Things)` box homepage by entering the :abbr:`IP (Internet
Protocol)` address of the :abbr:`IoT (Internet of Things)` box into a browser window from a computer
on the same network as the :abbr:`IoT (Internet of Things)` box (preferably by ethernet connection).
.. note::
The :abbr:`IP (Internet Protocol)` address can be accessed by the router admin console that the
:abbr:`IoT (Internet of Things)` box is connected to, or by connecting a receipt printer to the
:abbr:`IoT (Internet of Things)` box. A receipt will print out with the :abbr:`IoT (Internet of
Things)` box's :abbr:`IP (Internet Protocol)` address on it.
On the :abbr:`IoT (Internet of Things)` box homepage, enter the *token* under the :guilabel:`Server`
section by clicking on :guilabel:`Configure`. Then, paste the *token* into the :guilabel:`Server
Token` field and click :guilabel:`Connect`. The :abbr:`IoT (Internet of Things)` box will then link
to the Odoo database.
.. _iot/connect_schema:
IoT box schema
IoT Box Schema
==============
Raspberry Pi 4
--------------
.. figure:: connect/iot-box-schema.png
The Odoo IoT box (Raspberry Pi 4) schema with labels.
Raspberry Pi 3
--------------
.. figure:: connect/iox-box-schema-3.png
The Odoo IoT box (Raspberry Pi 3) schema with labels.
.. image:: connect/connect10.png
:align: center

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

View File

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

View File

@@ -1,68 +1,37 @@
====================
Flashing the SD card
====================
=====================
Flashing your SD Card
=====================
In some circumstances, the :abbr:`IoT (Internet of Things)` box's micro SD Card may need to be
re-flashed to benefit from Odoo's latest :abbr:`IoT (Internet of Things)` image update. This means
that the Odoo :abbr:`IoT (Internet of Things)` box software may need to be updated.
In some case, you may need to reflash your IoT Boxs SD Card to benefit
from our latest updates.
Upgrade from the IoT box home page
==================================
Upgrade from the IoT Box homepage
=================================
Go to the :abbr:`IoT (Internet of Things)` box homepage by navigating to :menuselection:`IoT app -->
IoT Boxes` and clicking on the :guilabel:`IP address` of the :abbr:`IoT (Internet of Things)` box.
Then click on :guilabel:`Update` (next to the version number).
If a new version of the :abbr:`IoT (Internet of Things)` Box image is available, an
:guilabel:`Upgrade to _xx.xx_` button will appear at the bottom of the page. Click this button to
upgrade the unit and the :abbr:`IoT (Internet of Things)` box will then flash itself to the new
version. All of the previous configurations will be saved.
Go to the IoT Box homepage, click on *Update*, next to the version number.
If a new version of the IoT Box image is available, you will see a
*Upgrade to ___* button a the bottom of the page, the IoT Box will then
flash itself to the new version of the IoT Box. All of your configurations
will be saved.
.. note::
This process can take more than 30 minutes. Do not turn off or unplug the :abbr:`IoT (Internet of
Things)` box as it would leave it in an inconsistent state. This means that the :abbr:`IoT
(Internet of Things)` box will need to be re-flashed with a new image. See
:ref:`flash_sdcard/etcher`.
This process can take more than 30 minutes. Do not turn off or unplug
the IoT Box as it would leave it in an inconsistent state.
.. image:: flash_sdcard/flash-upgrade.png
.. image:: flash_sdcard/flash_sdcard01.png
:align: center
:alt: IoT box software upgrade in the IoT Box Home Page.
.. _flash_sdcard/etcher:
Upgrade with Etcher
===================
Upgrade with Etcher Software
============================
Go to Balenas website and download `Etcher <https://www.balena.io/>`__.
Its a free and open-source utility used for burning image files.
Install and launch it. Download the latest image from `nightly
<http://nightly.odoo.com/master/iotbox/>`__.
.. note::
A computer with a micro SD card reader/adapter is required in order to re-flash the micro SD
card.
Then, open *Etcher* and select *Flash from file*, find the image you just
downloaded. Insert the IoT Box SD card into your computer and select it.
Click on *Flash* and wait for the process to finish.
Navigate to Balena's website and download `Etcher <https://www.balena.io/>`_. It's a free and
open-source utility used for burning image files onto drives. Click to `download
<https://www.balena.io/etcher#download-etcher>`_. Install and launch the program on the computer.
Then download the version-specific :abbr:`IoT (Internet of Things)` image from `nightly
<http://nightly.odoo.com/master/iotbox/>`_.
The following are image versions on the `nightly <http://nightly.odoo.com/master/iotbox/>`_ website
with their corresponding Odoo database version:
- Odoo V16 --> iotbox-latest.zip
- Odoo V15 --> iotboxv21_10.zip
- Odoo V14 --> iotboxv21_04.zip
- Odoo V13 --> iotboxv20_10.zip
The images should be downloaded and extracted to a convenient file location.
After this step is complete, insert the :abbr:`IoT (Internet of Things)` box's micro SD card into
the computer or reader. Open *Etcher* and select :guilabel:`Flash from file`, then find and select
the image just downloaded and extracted. Next, select the drive the image should be burned to.
Lastly, click on :guilabel:`Flash` and wait for the process to finish.
.. image:: flash_sdcard/etcher-app.png
.. image:: flash_sdcard/flash_sdcard02.png
:align: center
:alt: Balena's Etcher software dashboard.
.. note::
An alternative software for flashing the micro SD card is *Raspberry Pi Imager*. Download the
*Raspberry Pi* software `here <https://www.raspberrypi.com/software/>`_.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -1,67 +1,67 @@
=========================
Use an IoT box with a PoS
=========================
===========================
Use the IoT Box for the PoS
===========================
.. image:: pos/pos01.png
:align: center
Prerequisites
=============
Before starting, make sure the following equipment is available:
Before starting, make sure you have the following:
- An :abbr:`IoT (Internet of Things)` box, with its power adapter.
- A computer or tablet with an up-to-date web browser.
- Odoo Online or an Odoo instance with the *Point of Sale* and *IoT* applications installed.
- A local network set up with :abbr:`DHCP (Dynamic Host Configuration Protocol)` (this is the
default setting).
- An RJ45 Ethernet Cable (optional, but preferred over WiFi, which is already built in).
- Any of the supported hardware (receipt printer, barcode scanner, cash drawer, payment terminal,
scale, customer display, etc.). The list of supported hardware can be found on the `POS Hardware
page <https://www.odoo.com/page/point-of-sale-hardware>`_.
- An IoT Box, with its power adapter.
Setup
=====
- A computer or tablet with an up-to-date web browser
.. figure:: pos/pos-connections.png
- A running Odoo Online or Odoo instance with the Point of Sale and IoT apps
installed
A suggested configuration for a point of sale system.
- A local network setup with DHCP (this is the default setting)
To connect hardware to the :abbr:`PoS (Point of Sale)`, the first step is to connect an :abbr:`IoT
(Internet of Things)` box to the database. To do this, follow these instructions: :doc:`Connect an
Internet of Things (IoT) box to the Odoo database <connect>`.
- An RJ45 Ethernet Cable (optional, WiFi is built in)
Then, connect the peripheral devices to the :abbr:`IoT (Internet of Things)` box.
- Any of the supported hardware (receipt printer, barcode scanner,
cash drawer, payment terminal, scale, customer display, etc.).
The list of supported hardware can be found on the `POS Hardware
page <https://www.odoo.com/page/point-of-sale-hardware>`__
.. list-table::
:header-rows: 1
:stub-columns: 1
Set Up
======
* - Device Name
- Instructions
* - Printer
- Connect a supported receipt printer to a :abbr:`USB (Universal Serial Bus)` port or
to the network, and power it on. Refer to
:doc:`/applications/sales/point_of_sale/restaurant/kitchen_printing`.
* - Cash drawer
- The cash drawer should be connected to the printer with an RJ25 cable.
* - Barcode scanner
- In order for the barcode scanner to be compatible it must end barcodes with an `ENTER`
character (keycode 28). This is most likely the default configuration of the barcode scanner.
* - Scale
- Connect the scale and power it on. Refer to
:doc:`/applications/productivity/iot/devices/scale`.
* - Customer display
- Connect a screen to the :abbr:`IoT (Internet of Things)` box to display the :abbr:`PoS (Point
of Sale)` order. Refer to :doc:`/applications/productivity/iot/devices/screen`.
* - Payment terminal
- The connection process depends on the terminal. Refer to the :doc:`payment terminals
documentation </applications/sales/point_of_sale/payment_methods>`.
To connect hardware to the PoS, the first step is to connect an IoT Box
to your database. For this, follow this
:doc:`documentation <connect>`.
Once this is completed, connect the :abbr:`IoT (Internet of Things)` box to the :menuselection:`PoS`
application. To do this, go to :menuselection:`Point of Sale --> Configuration --> PoS`, tick the
:guilabel:`IoT Box` option, and select the devices to be used in this :abbr:`PoS (Point of Sale)`.
:guilabel:`Save` the the changes.
Then, you have to connect the peripheral devices to your IoT Box.
.. image:: pos/iot-connected-devices.png
- **Printer**: Connect a supported receipt printer to a USB port or to
the network and power it on.
- **Cash drawer**: The cash drawer should be connected to the printer
with an RJ25 cable.
- **Barcode scanner**: Connect your barcode scanner. In order for your
barcode scanner to be compatible it must end barcodes with an Enter
character (keycode 28). This is most likely the default configuration
of your barcode scanner.
- **Scale**: Connect your scale and power it on.
- **Customer Display**: Connect a screen to the IoT Box to display the
PoS order. Please refer to
:doc:`/applications/productivity/iot/devices/screen`.
- **Payment terminal**: The connection process depends on the terminal,
please refer to the :doc:`payment terminals documentation
</applications/sales/point_of_sale/payment_methods>`.
Once it's done, you can connect the IoT Box to your PoS. For this, go in
:menuselection:`Point of Sale --> Configuration --> PoS`, tick *IoT Box*
and select the devices you want to use in this Point of Sale. Save the
changes.
.. image:: pos/pos02.png
:align: center
:alt: Configuring the connected devices in the POS application.
Once set up is done, a new :abbr:`PoS (Point of Sale)` session can be launched.
Set up is done, you can launch a new PoS Session.

Some files were not shown because too many files have changed in this diff Show More