[IMP] helpdesk: track and bill time
closes odoo/documentation#8098
X-original-commit: d8b4b1d60f
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
@ -3,13 +3,13 @@ Track and bill time
|
|||||||
===================
|
===================
|
||||||
|
|
||||||
Odoo *Helpdesk* provides teams with the ability to track the amount of hours spent working on a
|
Odoo *Helpdesk* provides teams with the ability to track the amount of hours spent working on a
|
||||||
ticket, and to bill a customer for that time. Through integrations with the *Sales*, *Timesheets*
|
ticket, and to bill a customer for that time. Through integrations with the *Sales*, *Timesheets*,
|
||||||
and *Accounting* applications, customers can be charged once the work is completed, or before it has
|
*Project* and *Accounting* applications, customers can be charged once the work is completed, or
|
||||||
even begun.
|
before it has even begun.
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
Since the *Track & Bill Time* features require integration with other applications, enabling them
|
Since the *Track & Bill Time* features require integration with other applications, enabling them
|
||||||
may result in the installation of additional modules (or applications).
|
may result in the installation of additional modules or applications.
|
||||||
|
|
||||||
Installing a new application on a *One-App-Free* database triggers a 15-day trial. At the end of
|
Installing a new application on a *One-App-Free* database triggers a 15-day trial. At the end of
|
||||||
the trial, if a paid subscription has not been added to the database, it will no longer be active
|
the trial, if a paid subscription has not been added to the database, it will no longer be active
|
||||||
@ -18,56 +18,61 @@ even begun.
|
|||||||
Configure track and bill time features
|
Configure track and bill time features
|
||||||
======================================
|
======================================
|
||||||
|
|
||||||
Before a customer can be invoiced for support services, the *Track & Bill Time* features must first
|
Before a customer can be invoiced for support services, the *Track & Bill Time* features **must** be
|
||||||
be enabled. These features must be enabled on each *Helpdesk* team where they will be utilized.
|
enabled on each *Helpdesk* team individually.
|
||||||
|
|
||||||
Enable track and bill time on a helpdesk team
|
Enable track and bill time on a helpdesk team
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
|
|
||||||
To view and enable the :guilabel:`Track & Bill Time` features on a *Helpdesk* team, first navigate
|
To view and enable the *Track & Bill Time* features on a *Helpdesk* team, first navigate to
|
||||||
to :menuselection:`Helpdesk --> Configuration --> Teams`. Then select a team from the list or
|
:menuselection:`Helpdesk app --> Configuration --> Helpdesk Teams`. Then, select a team from the
|
||||||
:doc:`create a new one </applications/services/helpdesk/overview/getting_started>`. This will reveal
|
list, or create a :doc:`new one <../overview/getting_started>`. This reveals a team's settings page.
|
||||||
a team's settings page.
|
|
||||||
|
|
||||||
On the team's settings page, scroll to the :guilabel:`Track & Bill Time` section. Check the boxes
|
On the team's settings page, scroll to the :guilabel:`Track & Bill Time` section. Check the boxes
|
||||||
labeled :guilabel:`Timesheets` and :guilabel:`Time Billing`.
|
labeled :guilabel:`Timesheets` and :guilabel:`Time Billing`.
|
||||||
|
|
||||||
Once the :guilabel:`Timesheets` box is checked, a new field appears, labeled :guilabel:`Project`.
|
Once the :guilabel:`Timesheets` box is checked, a new field appears, labeled :guilabel:`Project`.
|
||||||
|
|
||||||
The project selected in this field is where all the timesheets for this team's tickets will be
|
.. note::
|
||||||
recorded. Click into the drop-down menu to select a :guilabel:`Project`.
|
If this is the first time this feature has been enabled on this database, the page may need to be
|
||||||
|
manually saved and refreshed before the :guilabel:`Project` field appears.
|
||||||
|
|
||||||
To create a new project where the timesheets will be recorded, click into the drop-down menu, type a
|
The project selected in this field represents where all the timesheets for this team's tickets are
|
||||||
name for the project, and then click :guilabel:`Create`.
|
recorded. Click into the :guilabel:`Project` drop-down menu to select a project.
|
||||||
|
|
||||||
|
To create a new project where the timesheets are recorded, click into the :guilabel:`Project`
|
||||||
|
drop-down menu, type a name for the project, and then click :guilabel:`Create` from the drop-down
|
||||||
|
menu beneath.
|
||||||
|
|
||||||
.. image:: track_and_bill/track-bill-enable-settings.png
|
.. image:: track_and_bill/track-bill-enable-settings.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: View of a helpdesk team settings page emphasizing the track and bill time settings.
|
:alt: View of a helpdesk team settings page emphasizing the track and bill time settings.
|
||||||
|
|
||||||
.. _helpdesk/advanced/configure-service-products:
|
.. _helpdesk/configure-service-products:
|
||||||
|
|
||||||
Configure service products
|
Configure service products
|
||||||
--------------------------
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
When the :guilabel:`Time Billing` feature is enabled, a new product is created in the *Sales* app
|
When the :guilabel:`Time Billing` feature is enabled, a new product is created in the *Sales* app
|
||||||
called :guilabel:`Service on Timesheets`. This product can be found under :menuselection:`Sales -->
|
called *Service on Timesheets*. This product can be found under :menuselection:`Sales app-->
|
||||||
Products --> Products`. Search for `Service on Timesheets` in the :guilabel:`Search...` bar. This is
|
Products --> Products`. Then, search for `Service on Timesheets` in the :guilabel:`Search...` bar.
|
||||||
the product that will be used when invoicing for *post-paid support services* after they have been
|
This is the product that is used when invoicing for *post-paid support services* **after** they have
|
||||||
completed.
|
been completed.
|
||||||
|
|
||||||
Select :guilabel:`Service on Timesheets` from the product page. This reveals the product detail
|
Select :guilabel:`Service on Timesheets` from the product page. This reveals the product detail
|
||||||
form. The product is configured with the :guilabel:`Product Type` set to :guilabel:`Service` and the
|
form. The product is configured with the :guilabel:`Product Type` set to :guilabel:`Service` and the
|
||||||
:guilabel:`Invoicing Policy` set to :guilabel:`Based on Timesheets`.
|
:guilabel:`Invoicing Policy` set to :guilabel:`Based on Timesheets`. Make any necessary changes to
|
||||||
|
the product record, such as the :guilabel:`Cost` or :guilabel:`Sales Price`.
|
||||||
|
|
||||||
.. image:: track_and_bill/track-bill-product-based-on-timesheets.png
|
.. image:: track_and_bill/track-bill-product-based-on-timesheets.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: View of a service product with the invoicing policy set to 'Based on timesheets'.
|
:alt: View of a service product with the invoicing policy set to 'Based on timesheets'.
|
||||||
|
|
||||||
In order to invoice for support services before the work has been completed (also known as *prepaid
|
In order to invoice for support services **before** the work has been completed (also known as
|
||||||
support services*), a separate product with a different invoicing policy must be created.
|
*prepaid support services*), a separate product with a different invoicing policy must be created.
|
||||||
|
|
||||||
To create a new service product, go to :menuselection:`Sales --> Products --> Products` and click
|
To create a new service product, go to :menuselection:`Sales app --> Products --> Products`, and
|
||||||
:guilabel:`New`. This will reveal a blank product detail form.
|
click :guilabel:`New`. This reveals a blank product detail form.
|
||||||
|
|
||||||
On the new product form, add a :guilabel:`Product Name`, and set the :guilabel:`Product Type` to
|
On the new product form, add a :guilabel:`Product Name`, and set the :guilabel:`Product Type` to
|
||||||
:guilabel:`Service`. Then, set the :guilabel:`Invoicing Policy` to :guilabel:`Prepaid/Fixed Price`.
|
:guilabel:`Service`. Then, set the :guilabel:`Invoicing Policy` to :guilabel:`Prepaid/Fixed Price`.
|
||||||
@ -85,16 +90,16 @@ Invoice prepaid support services
|
|||||||
================================
|
================================
|
||||||
|
|
||||||
When support services are billed on a fixed price, an invoice can be created before any work is
|
When support services are billed on a fixed price, an invoice can be created before any work is
|
||||||
completed on the issue. In this case, a service product with the invoicing policy set to
|
completed on the issue. In this case, a service product with the *Invoicing Policy* set to
|
||||||
:guilabel:`Prepaid/Fixed Price` would be used, just like :ref:`the section above
|
*Prepaid/Fixed Price* would be used, just like :ref:`the section above
|
||||||
<helpdesk/advanced/configure-service-products>`.
|
<helpdesk/configure-service-products>`.
|
||||||
|
|
||||||
Create a sales order with prepaid product
|
Create a sales order with prepaid product
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
|
|
||||||
To invoice a customer for prepaid support services, first create a sales order (SO) with the support
|
To invoice a customer for prepaid support services, first create a sales order (SO) with the support
|
||||||
services product. To do this, go to :menuselection:`Sales --> Orders --> Quotations --> New`, which
|
services product. To do this, go to :menuselection:`Sales app --> Orders --> Quotations`. Then,
|
||||||
reveals a blank quotation form.
|
click :guilabel:`New` to reveal a blank quotation form.
|
||||||
|
|
||||||
Then, fill out the quotation form with the customer information.
|
Then, fill out the quotation form with the customer information.
|
||||||
|
|
||||||
@ -109,11 +114,12 @@ Create and send an invoice for prepaid services
|
|||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
|
|
||||||
Once the :abbr:`SO (sales order)` has been confirmed, click the :guilabel:`Create Invoice` button.
|
Once the :abbr:`SO (sales order)` has been confirmed, click the :guilabel:`Create Invoice` button.
|
||||||
This will open a :guilabel:`Create Invoices` pop-up window.
|
This opens a :guilabel:`Create invoices` pop-up window.
|
||||||
|
|
||||||
If no down payment will be collected, the :guilabel:`Create Invoice` type can remain as
|
If no down payment is collected, the :guilabel:`Create Invoice` type can remain as
|
||||||
:guilabel:`Regular Invoice`. If a down payment will be collected, choose between either
|
:guilabel:`Regular Invoice`. If a :doc:`down payment <../../../sales/sales/invoicing/down_payment>`
|
||||||
:guilabel:`Down payment (percentage)` or :guilabel:`Down payment (fixed amount)`.
|
is collected, choose between either :guilabel:`Down payment (percentage)` or :guilabel:`Down payment
|
||||||
|
(fixed amount)`.
|
||||||
|
|
||||||
When the necessary information has been entered, click :guilabel:`Create Draft Invoice`.
|
When the necessary information has been entered, click :guilabel:`Create Draft Invoice`.
|
||||||
|
|
||||||
@ -129,8 +135,8 @@ a new ticket.
|
|||||||
On the blank ticket form, create a ticket :guilabel:`Title`, and enter the :guilabel:`Customer`
|
On the blank ticket form, create a ticket :guilabel:`Title`, and enter the :guilabel:`Customer`
|
||||||
information.
|
information.
|
||||||
|
|
||||||
When the customer name is added, the :guilabel:`Sales Order Item` field will automatically populate
|
When the customer name is added, the :guilabel:`Sales Order Item` field automatically populates with
|
||||||
with the most recent prepaid sales order item that has time remaining.
|
the most recent prepaid sales order item that has time remaining.
|
||||||
|
|
||||||
Track hours on helpdesk ticket
|
Track hours on helpdesk ticket
|
||||||
------------------------------
|
------------------------------
|
||||||
@ -141,8 +147,8 @@ On the ticket detail form, click on the :guilabel:`Timesheets` tab and click :gu
|
|||||||
Choose an :guilabel:`Employee`, add a :guilabel:`Description` of the task, and enter the number of
|
Choose an :guilabel:`Employee`, add a :guilabel:`Description` of the task, and enter the number of
|
||||||
:guilabel:`Hours Spent`.
|
:guilabel:`Hours Spent`.
|
||||||
|
|
||||||
As new lines are added to :guilabel:`Timesheets` tab, the :guilabel:`Remaining Hours on SO` field is
|
As new lines are added to :guilabel:`Timesheets` tab, the :guilabel:`Remaining Hours on SO` field,
|
||||||
automatically updated.
|
at the bottom-right of the tab, is automatically updated.
|
||||||
|
|
||||||
.. image:: track_and_bill/track-bill-remaining-hours-total.png
|
.. image:: track_and_bill/track-bill-remaining-hours-total.png
|
||||||
:align: center
|
:align: center
|
||||||
@ -150,7 +156,7 @@ automatically updated.
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
If the number of hours on the :guilabel:`Timesheets` tab exceeds the number of hours sold, the
|
If the number of hours on the :guilabel:`Timesheets` tab exceeds the number of hours sold, the
|
||||||
:guilabel:`Remaining Hours of SO` will turn red.
|
:guilabel:`Remaining Hours of SO` turns red.
|
||||||
|
|
||||||
As hours are added to the :guilabel:`Timesheets` tab, they are automatically updated in the
|
As hours are added to the :guilabel:`Timesheets` tab, they are automatically updated in the
|
||||||
:guilabel:`Delivered` field on the :abbr:`SO (sales order)`, as well.
|
:guilabel:`Delivered` field on the :abbr:`SO (sales order)`, as well.
|
||||||
@ -160,15 +166,16 @@ Invoice post-paid support services
|
|||||||
|
|
||||||
When support services are billed based on the amount of time spent on an issue, an invoice cannot be
|
When support services are billed based on the amount of time spent on an issue, an invoice cannot be
|
||||||
created before the total number of hours required to solve the problem have been entered on a
|
created before the total number of hours required to solve the problem have been entered on a
|
||||||
timesheet. In this case, a service product with the invoicing policy set to :guilabel:`Based on
|
timesheet. In this case, a service product with the *Invoicing Policy* set to *Based on Timesheets*
|
||||||
Timesheets` would be used, like the one created above.
|
would be used, like the one created in :ref:`the section above
|
||||||
|
<helpdesk/configure-service-products>`.
|
||||||
|
|
||||||
Create a sales order with a time-tracked product
|
Create a sales order with a time-tracked product
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
To invoice a customer for post-paid support services, first create a sales order (SO) with the
|
To invoice a customer for post-paid support services, first create a sales order (SO) with the
|
||||||
*support services product*. To do this, go to :menuselection:`Sales --> Orders --> Quotations -->
|
*support services product*. To do this, go to :menuselection:`Sales app --> Orders --> Quotations`.
|
||||||
New`.
|
Then, click :guilabel:`New` to reveal a blank quotation form.
|
||||||
|
|
||||||
Fill out the quotation with the customer information.
|
Fill out the quotation with the customer information.
|
||||||
|
|
||||||
@ -176,23 +183,23 @@ On the :guilabel:`Order Lines` tab, click :guilabel:`Add a Product`. Select the
|
|||||||
product configured in the steps above. After updating any other necessary information,
|
product configured in the steps above. After updating any other necessary information,
|
||||||
:guilabel:`Confirm` the quotation.
|
:guilabel:`Confirm` the quotation.
|
||||||
|
|
||||||
.. note::
|
.. important::
|
||||||
Unlike with the prepaid services quotation, Odoo will not allow an invoice to be created at this
|
Unlike with the prepaid services quotation, Odoo does **not** allow an invoice to be created at
|
||||||
time. That is because no services have been performed; in other words nothing has been delivered,
|
this time. That is because no services have been performed; in other words, nothing has been
|
||||||
therefore, there is nothing to invoice.
|
delivered, therefore, there is nothing to invoice.
|
||||||
|
|
||||||
Create a helpdesk ticket for time-tracked services
|
Create a helpdesk ticket for time-tracked services
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
To record a *Timesheet* entry for time-tracker services, go to :menuselection:`Helpdesk` and select
|
To record a *Timesheet* entry for time-tracker services, go to the :menuselection:`Helpdesk` app,
|
||||||
the appropriate team for which these services apply.
|
and select the appropriate team for which these services apply.
|
||||||
|
|
||||||
If there is already an existing ticket for this issue, select it from the kanban view. This will
|
If there is already an existing ticket for this issue, select it from the Kanban view. This opens
|
||||||
open the ticket details form. If there is no existing ticket for this customer issue, click
|
the ticket details form. If there is no existing ticket for this customer issue, click
|
||||||
:guilabel:`New` to create a new ticket and enter the necessary customer information on the blank
|
:guilabel:`New` to create a new ticket and enter the necessary customer information on the blank
|
||||||
ticket details form.
|
ticket details form.
|
||||||
|
|
||||||
After selecting or creating a ticket, go to the :guilabel:`Sales Order Line` drop-down menu. Select
|
After selecting or creating a ticket, go to the :guilabel:`Sales Order Item` drop-down menu. Select
|
||||||
the :abbr:`SO (sales order)` created in the previous step.
|
the :abbr:`SO (sales order)` created in the previous step.
|
||||||
|
|
||||||
Track support hours on a ticket
|
Track support hours on a ticket
|
||||||
@ -214,7 +221,7 @@ Repeat these steps as needed until all time spent on the issues has been recorde
|
|||||||
Create an invoice for hours tracked on a ticket
|
Create an invoice for hours tracked on a ticket
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
|
|
||||||
After the customer's issue has been solved, and it is determined no new timesheet entries will be
|
After the customer's issue has been solved, and it is determined no new timesheet entries need to be
|
||||||
made, an invoice can be created, and the customer can be billed.
|
made, an invoice can be created, and the customer can be billed.
|
||||||
|
|
||||||
To do this, return to the :abbr:`SO (sales order)` by clicking on the :guilabel:`Sales Order` smart
|
To do this, return to the :abbr:`SO (sales order)` by clicking on the :guilabel:`Sales Order` smart
|
||||||
@ -227,22 +234,24 @@ total number of :guilabel:`Hours Spent` listed in the :guilabel:`Timesheets` tab
|
|||||||
:align: center
|
:align: center
|
||||||
:alt: View of a sales order with emphasis on the delivered column.
|
:alt: View of a sales order with emphasis on the delivered column.
|
||||||
|
|
||||||
Then, click :guilabel:`Create Invoice`. This will open a :guilabel:`Create Invoices` pop-up window.
|
Then, click :guilabel:`Create Invoice`. This opens a :guilabel:`Create invoice(s)` pop-up window.
|
||||||
If no down payment will be collected, the :guilabel:`Create Invoice` type can remain as
|
|
||||||
:guilabel:`Regular Invoice`. If a down payment will be collected, choose between either
|
If no down payment is collected, the :guilabel:`Create Invoice` type can remain as
|
||||||
:guilabel:`Down payment (percentage)` or :guilabel:`Down payment (fixed amount)`.
|
:guilabel:`Regular Invoice`. If a down payment is collected, choose between either :guilabel:`Down
|
||||||
|
payment (percentage)` or :guilabel:`Down payment (fixed amount)`.
|
||||||
|
|
||||||
.. important::
|
.. important::
|
||||||
Use the :guilabel:`Timesheets Period` field if this invoice should only include timesheets from a
|
Use the :guilabel:`Timesheets Period` field if this invoice should **only** include timesheets
|
||||||
certain time period. If this field is left blank, *all* applicable timesheets that have not yet
|
from a certain time period. If this field is left blank, **all** applicable timesheets that have
|
||||||
been invoiced will be included.
|
not yet been invoiced will be included.
|
||||||
|
|
||||||
.. image:: track_and_bill/track-bill-create-invoice-timesheets-period.png
|
.. image:: track_and_bill/track-bill-create-invoice-timesheets-period.png
|
||||||
:align: center
|
:align: center
|
||||||
:alt: View of create invoices pop up showing timesheets period fields.
|
:alt: View of create invoices pop up showing timesheets period fields.
|
||||||
|
|
||||||
When the necessary information has been entered, click :guilabel:`Create Invoice`. The invoice can
|
When the necessary information has been entered, click :guilabel:`Create Draft`. The invoice can
|
||||||
then be sent to the customer for payment.
|
then be reviewed, edited, and sent to the customer for payment.
|
||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
:doc:`/applications/inventory_and_mrp/inventory/product_management/product_replenishment/uom`
|
- :doc:`../../../inventory_and_mrp/inventory/product_management/product_replenishment/uom`
|
||||||
|
- :doc:`../../../sales/sales/invoicing/down_payment`
|
||||||
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 24 KiB |