[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>
This commit is contained in:
Jess Rogers (jero) 2024-03-04 13:25:54 -05:00 committed by jero-odoo
parent d13ddab247
commit c9c0945734
8 changed files with 72 additions and 63 deletions

View File

@ -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`

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 24 KiB