diff --git a/content/applications/sales/rental.rst b/content/applications/sales/rental.rst index ceebeffa3a..40a2908018 100644 --- a/content/applications/sales/rental.rst +++ b/content/applications/sales/rental.rst @@ -139,5 +139,6 @@ Odoo always uses two rules to compute the price of a product when a rental order .. toctree:: rental/products + rental/service_products rental/manage_deposits diff --git a/content/applications/sales/rental/service_products.rst b/content/applications/sales/rental/service_products.rst new file mode 100644 index 0000000000..99815aced9 --- /dev/null +++ b/content/applications/sales/rental/service_products.rst @@ -0,0 +1,370 @@ +======================= +Service rental products +======================= + +The **Rental** app is a comprehensive tool that enables users to manage the scheduling, pricing, and +inventory for both physical goods (products) and non-physical goods (services) within a single +platform. + +This flexibility allows for combining products and services like bike rentals with guided tours, or +booking a studio with a photographer. + +This document covers how to configure a rental service to automatically sync with staff shifts, +track timesheet hours, and set up and link project tasks based on a rental order. + +Settings +======== + +To configure default settings on rental products, navigate to :menuselection:`Rental app --> +Configuration --> Settings`. + +.. image:: service_products/rental-settings.png + :alt: Sammple of Rental app configuration settings. + +In the :guilabel:`Rental` section, under the :guilabel:`Default Delay Costs` subsection, fill in the +:guilabel:`Apply after` field. + +.. note:: + For finer control, configure the costs of late returns for the :guilabel:`Per Hour` and + :guilabel:`Per Day` fields at the product level. If the defaults apply to all products, leave the + :guilabel:`Product` field blank. + +In the :guilabel:`Default Padding Time` section, fill in the :guilabel:`Padding` field. + +Next, enable :guilabel:`Rental Transfers`. In the :guilabel:`Rent Online` section, fill in the +:guilabel:`Minimal Rental Duration` field and designate :guilabel:`Unavailability days`. Click +:guilabel:`Save` to apply the changes. + +App integration configuration +============================= + +The following Odoo apps and configurations are required. The listed apps allow for workflow +efficiency and automation when creating a service product and rental order. + +Sales app settings +------------------ + +Install the **Sales** app. Navigate to :menuselection:`Sales app --> Configuration --> Settings`. +In the :guilabel:`Quotations & Orders` section, tick the :guilabel:`Online Signature`, +:guilabel:`Online Payment`, and :guilabel:`Quotation Templates` checkboxes. + +In the :guilabel:`Default Template` field, click the :guilabel:`Quotation templates` to customize +the quotation templates to use. + +Project app settings +-------------------- + +Install the **Project** app and enable :guilabel:`Project stages` and :guilabel:`Timesheets`. Refer +to the :doc:`Planning <../../services/planning>` page for more information. + +Planning app settings +--------------------- + +Install the **Planning** app and configure employee shifts and roles. Refer to the :doc:`Project +management <../../services/planning>` for instructions on setting up your employees and shifts. + +Sign app settings +----------------- + +Install the **Sign** app. Refer to the :doc:`Sign <../../productivity/sign>` page for instructions +on uploading a rental agreement for the business to use. + +Rental services +=============== + +To view all products that can be rented in the database, navigate to :menuselection:`Rentals app --> +Products`. By default, the :guilabel:`Rental` filter appears in the search bar, and the view is +Kanban. Remove the filter, then click the search bar. From the preset filters, select +:guilabel:`Services`. All the configured services appear. + +Each Kanban card displays the name and rental price of the service. + +.. _rental/service_products/service: + +Create a new service product +============================ + +To set up a new rental service, go to the :menuselection:`Rental app --> Products` and then click +:guilabel:`New`. In the new product window, the :guilabel:`Rental` checkbox is already ticked by +default. + +.. image:: service_products/service-product.png + :alt: Sample of a configured service product in the Rental app. + +Tick the :guilabel:`Sales` checkbox to enable the :guilabel:`Create on Order` and +:guilabel:`Invoicing Policy` fields. Select the :guilabel:`Product Type` as a :guilabel:`Service`. + +In the :guilabel:`Create on Order` drop-down menu, select :guilabel:`Project & Task`. + +.. important:: + The **Project** and the **Sales** apps must be installed for the :guilabel:`Project & Task` + option and the :guilabel:`Project Template` field to be available. + +In the :guilabel:`Invoicing Policy` drop-down menu, select :guilabel:`Based on Timesheets`. + +Tick the :guilabel:`Plan Services` checkbox and either create a new role or select a pre-existing +one. To create a new role, type in the name of the role in the blank field and click +:guilabel:`Create and edit` that appears. + +In the :guilabel:`Create Planning Role` pop-up window, enter the role's name. Select an option for +the :guilabel:`Services` and :guilabel:`Resources`, and click :guilabel:`Save`. + +.. image:: service_products/create-planning-role-window.png + :alt: Sample of the Create Planning Role window for a servuce product in the Rental app. + +Click the :guilabel:`Rental prices` tab and in the :guilabel:`Pricing` section, click :guilabel:`Add +a price` to enter a new rental rate. Choose a *pricing period* (:dfn:`the unit of duration of the +rental`) in the :guilabel:`Period` column, or create a new pricing period by typing in the name and +clicking Create and edit. + +.. tip:: + Customize rental rate time periods by navigating to :menuselection:`Rental app --> Configuration + --> Rental periods`. + + .. image:: service_products/new-rental-period.png + :alt: Sample of a Create Period pop up window in the Rental app. + +Next, enter the :guilabel:`Price` for that specific :guilabel:`Period`. To apply the configured +rental rate to an existing pricelist, click in the :guilabel:`Pricelist` column and select the +desired list from the drop-down menu. + +In the :guilabel:`Reservations` section, fill in the :guilabel:`Hourly Fine`, :guilabel:`Daily +Fine`, and the :guilabel:`Reserve product` time. These values are automatically populated from the +:guilabel:`Default Delay Costs` section, provided they have been configured in the +:menuselection:`Rental app --> Configuration --> Settings`. + +Click the :icon:`fa-cloud-upload` :guilabel:`(Save manually)` icon near the top to save. + +.. example:: + A photography studio rents out its photographers on an hourly and daily basis. They want to add a + new four hour package for $750. + + All reservations require 24-hour notice to reserve a photographer, but they do not charge a fine + if the reservations go over the agreed time. Instead, they default to their hourly fee. + + Create a new pricing period by navigating to :menuselection:`Rental app --> Configuration --> + Rental periods`. Click :guilabel:`New` and configure the period for four hours. + + Navigate to the :guilabel:`Photographer` service product and in the :guilabel:`Rental prices` + tab, add the four hour period set at $750. Manually save to apply changes. + + .. image:: service_products/example-4hrs-rental-period.png + :alt: Sample of the Rental prices tab of service product in the Rental app. + +Create a rental order with a service product +============================================ + +In Odoo, a rental order is the same as a sales order. When creating orders in the **Rental** app +they are referred to as rental orders. + +Navigate to the **Rental** app which opens the Rental Orders dashboard. Click :guilabel:`New` to +open a new rental order form. + +Enter the :guilabel:`Customer` field, and select a :guilabel:`Quotation Template`, if applicable. + +Next, set the desired rental duration in the :guilabel:`Rental period` field. To adjust the rental +duration, click the first date in the :guilabel:`Rental period` field, and select the range of dates +and times to represent the rental duration from the pop-up calendar form that appears. + +.. image:: service_products/rental-period-field-popup.png + :alt: Sample of the rental period field calendar pop-up window in the Rental app. + +Once complete, click :guilabel:`Apply` in the calendar pop-up form. Following that, the pop-up form +disappears, and the designated rental time period is represented in the :guilabel:`Duration` field. + +Next, add a rental service in the :guilabel:`Order Lines` tab, by clicking :guilabel:`Add a product` +and selecting the desired rental service to add to the form. Enter the desired amount in the +:guilabel:`Quantity` column. + +.. note:: + If a rental product is added before the Rental period field has been properly configured, the + user can still adjust the Rental period field accordingly. Select the desired range of dates to + represent the duration of the rental, then click Update Rental Prices in the Duration field. + + .. image:: service_products/rental-update-rental-prices.png + :alt: Sample of the Duration field with the Update Rental Prices option in the Rental app. + + Doing so reveals a Confirmation pop-up window. If everything is correct, click Ok, and Odoo + recalculates the rental price accordingly. + +.. image:: service_products/rental-order-form.png + :alt: Sample of a rental order for a service product in the Rental app. + +Once all information has been entered correctly on the rental order form, click :guilabel:`Send` to +email the quotation to the customer. When the customer approves the quotation, click +:guilabel:`Confirm`. A banner displays on the rental order stating its current status. + +Customer signature +================== + +Odoo enables electronic signature requests for customer service agreements and any other documents +that require signatures. Service agreements detail the business relationship and mutual duties. +These agreements protect both the provider and the customer by creating clear, enforceable +guidelines. + +.. note:: + Requesting an electronic signature can be done at any stage of the order. This feature also + requires the **Sign** app. + +If signatures are required, go to the **Rental** app and from the default :guilabel:`Rental Orders` +dashboard, select the desired rental order. Click the :icon:`fa-cog` :guilabel:`(Actions)` icon, and +click :guilabel:`Request Signature`. + +.. image:: service_products/request-signature.png + :alt: The Action drop-down menu for requesting a signature in the Rental app. + +A :guilabel:`New Signature Request` pop-up window displays. Select the desired document from the +:guilabel:`Template` drop-down menu. + +.. image:: service_products/new-signature-request.png + :alt: Sample of the New Signature Request pop-up window in the Rental app. + +Doing so reveals a :guilabel:`New Signature Request` pop-up window. Upon confirming the information +in the :guilabel:`New Signature Request` pop-up form, click :guilabel:`Send` to initiate the signing +process. + +.. image:: service_products/new-signature-request-message.png + :alt: Sample of the New Signature Request message in the Rental app. + +A link to the signature request will appear in the chatter of the rental order. The document is +accessible to the customer via the customer portal or email. + +Signing a document from a email link +------------------------------------ + +When a customer clicks :guilabel:`Sign document`, a separate page is then revealed, showcasing the +document to be signed. The customer begins the process by clicking :guilabel:`Click` to start. + +The app guides the signer to the required signature locations and allows them to create electronic +signatures to complete the form. + +.. image:: service_products/adopt-signature-popup.png + :alt: Sample of a customer signature with the Auto option chosen. + +The *Adopt your signature* pop-up window that appears in the Odoo Rental application. Once the +document has been signed and completed, click :guilabel:`Validate & Send Completed Document` at the +bottom of the document. + +Odoo presents the option to download the signed document for record-keeping purposes, if necessary. + +.. image:: service_products/validate-send-doc-button.png + :alt: Sample of a signed document with the Validate & Send Completed Document button. + +.. seealso:: + `Odoo Tutorials: Sign `_. + +Entering time for the rental order +================================== + +.. important:: + For the appropriate smart buttons to display, the **Project**, **Timesheet**, and **Planning** + apps are needed. The selected service product on the rental order must be :ref:`properly + configured ` to integrate with the recommended apps. + +Navigate to the rental orders by :menuselection:`Rental app --> Orders --> Orders` and select the +desired rental order. At the top of the rental order form, the following smart buttons appear: + +- **Tasks**: Linked to the Projects app and shows any projects or tasks related to the rental order. + +- **Recorded**: Linked to the Timesheets app and shows how many hours are related to the rental + order. + +- **Planned**: Linked to the Planning app and shows how many shifts are related to the rental order. + +Click the :guilabel:`Tasks` smart button to view a Kanban view of all the associated tasks that were +automatically created when confirming the rental order. Click the desired task, then select the +:guilabel:`Timesheets` tab. + +.. image:: service_products/rental-order-task-card.png + :alt: Sample of a project task card for the rental order in the Rental app. + +Click :guilabel:`Add a line` to enter the number of hours worked on the task manually. Click on the +:guilabel:`Sales Order` smart button to return to the rental order. + +.. image:: service_products/rental-task-timesheets-tab.png + :alt: Sample of a a task timesheet tab for a rental order in the Rental app. + +.. note:: + Once time is added to the :guilabel:`Timesheets` tab of a task, the status of the rental order + is automatically changed to :guilabel:`Picked-up` and the :guilabel:`Return` button appears. + +Create an invoice +================= + +Navigate to the desired invoice by navigating to the **Rental** app and on the :guilabel:`Rental +Orders` dashboard, in the :guilabel:`INVOICE STATUS` section, click :guilabel:`To Invoice` to view +all the rental orders that require to be sent. + +.. image:: service_products/invoice-status-section.png + :alt: Sample of the INVOICE STATUS section in the Rental app. + +Click on the desired rental order and click :guilabel:`Create Invoice`. Select :guilabel:`Regular +invoice` from the :guilabel:`Create invoice(s)` window and click :guilabel:`Create Draft`. + +.. image:: service_products/create-invoices.png + :alt: Sample of Create invoices window in the Rental app. + +If all the details are correct, click :guilabel:`Confirm`. Click :guilabel:`Send` to email the +invoice to the customer or :guilabel:`Print` and then click :guilabel:`Pay` if the customer is in +person. + +In the :guilabel:`Pay` pop-up window, select a :guilabel:`Journal` and click :guilabel:`Create +Payment`. + +.. image:: service_products/pay-popup.png + :alt: Sample of the Pay pop-up window in the Rental app. + +Click on the :guilabel:`Payments` smart button that appears on the top of the rental order. Click +:guilabel:`Validate` on the :guilabel:`Payment` page. + +.. image:: service_products/payment-validate.png + :alt: Sample of the Payment page in the Rental app. + +Use the breadcrumbs to return to the rental order. + +Pickup products +=============== + +When time is entered on the :guilabel:`Timesheets` tab of an associated task, the rental order +status automatically changes to :guilabel:`Picked-up`. This happens even if time is entered before +the physical product ordered with the service is picked up. + +If a product is rented alongside a service, it is advised to pick it up before entering time on the +associated task. The :guilabel:`Pickup` button is still available on the rental order if time is +entered before picking up the product. + +When a customer picks up the product, navigate to the appropriate rental order, click +:guilabel:`Pickup`, and then click :guilabel:`Validate` in the :guilabel:`Validate a pickup` pop-up +form that appears. + +.. image:: service_products/pickup-popup.png + :alt: Sample of a service product pick up pop-up window in the Rental. + +Doing so places a :guilabel:`Picked-up` status banner on the rental order. + +Return products +=============== + +Regardless if there is a product rented along with a service, the service or product must be +returned on the rental order. + +When a customer returns the products or when the service has been completed, navigate to the +appropriate rental order and click :guilabel:`Return`. Validate the return by clicking +:guilabel:`Validate` in the :guilabel:`Validate a return` pop-up form that appears. + +.. image:: service_products/validate-a-return-window.png + :alt: Sample of returning a service product in the Rental app. + +Doing so places a :guilabel:`Returned` status banner on the rental order. + +.. example:: + + The photography studio had a customer who wanted to rent one of their photographers and banner + decorations for a home photoshoot. The booking was for two hours. + + On the :guilabel:`Validate a return` form the rental order, the banner line item matches number + of banners picked up and the photographer line item matches the number of hours submitted on the + Timesheets tab on the related task. + + .. image:: service_products/return-form-example-product-service.png + :alt: Sample of a Validate a return form with a rental product and service listed. diff --git a/content/applications/sales/rental/service_products/adopt-signature-popup.png b/content/applications/sales/rental/service_products/adopt-signature-popup.png new file mode 100644 index 0000000000..6325909609 Binary files /dev/null and b/content/applications/sales/rental/service_products/adopt-signature-popup.png differ diff --git a/content/applications/sales/rental/service_products/create-invoices.png b/content/applications/sales/rental/service_products/create-invoices.png new file mode 100644 index 0000000000..32d44e9295 Binary files /dev/null and b/content/applications/sales/rental/service_products/create-invoices.png differ diff --git a/content/applications/sales/rental/service_products/create-planning-role-window.png b/content/applications/sales/rental/service_products/create-planning-role-window.png new file mode 100644 index 0000000000..b08b086744 Binary files /dev/null and b/content/applications/sales/rental/service_products/create-planning-role-window.png differ diff --git a/content/applications/sales/rental/service_products/example-4hrs-rental-period.png b/content/applications/sales/rental/service_products/example-4hrs-rental-period.png new file mode 100644 index 0000000000..ed725e994e Binary files /dev/null and b/content/applications/sales/rental/service_products/example-4hrs-rental-period.png differ diff --git a/content/applications/sales/rental/service_products/invoice-status-section.png b/content/applications/sales/rental/service_products/invoice-status-section.png new file mode 100644 index 0000000000..cf2f6b37b4 Binary files /dev/null and b/content/applications/sales/rental/service_products/invoice-status-section.png differ diff --git a/content/applications/sales/rental/service_products/new-rental-period.png b/content/applications/sales/rental/service_products/new-rental-period.png new file mode 100644 index 0000000000..40dedf554b Binary files /dev/null and b/content/applications/sales/rental/service_products/new-rental-period.png differ diff --git a/content/applications/sales/rental/service_products/new-signature-request-message.png b/content/applications/sales/rental/service_products/new-signature-request-message.png new file mode 100644 index 0000000000..6dbe5d7d4a Binary files /dev/null and b/content/applications/sales/rental/service_products/new-signature-request-message.png differ diff --git a/content/applications/sales/rental/service_products/new-signature-request.png b/content/applications/sales/rental/service_products/new-signature-request.png new file mode 100644 index 0000000000..2cb7d7cadb Binary files /dev/null and b/content/applications/sales/rental/service_products/new-signature-request.png differ diff --git a/content/applications/sales/rental/service_products/pay-popup.png b/content/applications/sales/rental/service_products/pay-popup.png new file mode 100644 index 0000000000..a2e8f34726 Binary files /dev/null and b/content/applications/sales/rental/service_products/pay-popup.png differ diff --git a/content/applications/sales/rental/service_products/payment-validate.png b/content/applications/sales/rental/service_products/payment-validate.png new file mode 100644 index 0000000000..ebe56a553e Binary files /dev/null and b/content/applications/sales/rental/service_products/payment-validate.png differ diff --git a/content/applications/sales/rental/service_products/pickup-popup.png b/content/applications/sales/rental/service_products/pickup-popup.png new file mode 100644 index 0000000000..d1e1be718a Binary files /dev/null and b/content/applications/sales/rental/service_products/pickup-popup.png differ diff --git a/content/applications/sales/rental/service_products/rental-order-form.png b/content/applications/sales/rental/service_products/rental-order-form.png new file mode 100644 index 0000000000..d4ce00e882 Binary files /dev/null and b/content/applications/sales/rental/service_products/rental-order-form.png differ diff --git a/content/applications/sales/rental/service_products/rental-order-task-card.png b/content/applications/sales/rental/service_products/rental-order-task-card.png new file mode 100644 index 0000000000..f8f685c07f Binary files /dev/null and b/content/applications/sales/rental/service_products/rental-order-task-card.png differ diff --git a/content/applications/sales/rental/service_products/rental-period-field-popup.png b/content/applications/sales/rental/service_products/rental-period-field-popup.png new file mode 100644 index 0000000000..555f48e734 Binary files /dev/null and b/content/applications/sales/rental/service_products/rental-period-field-popup.png differ diff --git a/content/applications/sales/rental/service_products/rental-settings.png b/content/applications/sales/rental/service_products/rental-settings.png new file mode 100644 index 0000000000..f0c38f17f2 Binary files /dev/null and b/content/applications/sales/rental/service_products/rental-settings.png differ diff --git a/content/applications/sales/rental/service_products/rental-task-timesheets-tab.png b/content/applications/sales/rental/service_products/rental-task-timesheets-tab.png new file mode 100644 index 0000000000..c5568ee89f Binary files /dev/null and b/content/applications/sales/rental/service_products/rental-task-timesheets-tab.png differ diff --git a/content/applications/sales/rental/service_products/rental-update-rental-prices.png b/content/applications/sales/rental/service_products/rental-update-rental-prices.png new file mode 100644 index 0000000000..4277eb4d67 Binary files /dev/null and b/content/applications/sales/rental/service_products/rental-update-rental-prices.png differ diff --git a/content/applications/sales/rental/service_products/request-signature.png b/content/applications/sales/rental/service_products/request-signature.png new file mode 100644 index 0000000000..895bca2412 Binary files /dev/null and b/content/applications/sales/rental/service_products/request-signature.png differ diff --git a/content/applications/sales/rental/service_products/return-form-example-product-service.png b/content/applications/sales/rental/service_products/return-form-example-product-service.png new file mode 100644 index 0000000000..cf33318882 Binary files /dev/null and b/content/applications/sales/rental/service_products/return-form-example-product-service.png differ diff --git a/content/applications/sales/rental/service_products/service-product.png b/content/applications/sales/rental/service_products/service-product.png new file mode 100644 index 0000000000..181bdd57f4 Binary files /dev/null and b/content/applications/sales/rental/service_products/service-product.png differ diff --git a/content/applications/sales/rental/service_products/validate-a-return-window.png b/content/applications/sales/rental/service_products/validate-a-return-window.png new file mode 100644 index 0000000000..446d9e5185 Binary files /dev/null and b/content/applications/sales/rental/service_products/validate-a-return-window.png differ diff --git a/content/applications/sales/rental/service_products/validate-send-doc-button.png b/content/applications/sales/rental/service_products/validate-send-doc-button.png new file mode 100644 index 0000000000..54bf2275b7 Binary files /dev/null and b/content/applications/sales/rental/service_products/validate-send-doc-button.png differ