Compare commits
1 Commits
15.0-check
...
15.0-twili
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
59e821d455 |
@@ -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>`_
|
||||
|
||||
@@ -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
|
||||
|
||||
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 13 KiB |
@@ -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`.
|
||||
|
||||
|
Before Width: | Height: | Size: 8.7 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 12 KiB |
BIN
content/applications/finance/expenses/create-new-expense.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
BIN
content/applications/finance/expenses/expenses-salesorder.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
content/applications/finance/expenses/internal-ref-numbers.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 11 KiB |
BIN
content/applications/finance/expenses/new-expense-form.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 15 KiB |
BIN
content/applications/finance/expenses/receipt-smartbutton.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 21 KiB |
@@ -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 -->
|
||||
|
||||
@@ -7,4 +7,3 @@ Human resources
|
||||
.. toctree::
|
||||
|
||||
hr/attendances
|
||||
hr/employees
|
||||
|
||||
@@ -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
|
||||
@@ -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.
|
||||
|
Before Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 15 KiB |
@@ -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.
|
||||
|
||||
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 13 KiB |
@@ -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.
|
||||
|
||||
|
Before Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 38 KiB |
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 61 KiB |
@@ -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
|
||||
---------------------
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 33 KiB |
@@ -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 Box’s 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 Balena’s website and download `Etcher <https://www.balena.io/>`__.
|
||||
It’s 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/>`_.
|
||||
|
||||
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 17 KiB |
@@ -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.
|
||||
|
||||