diff --git a/content/applications/hr/payroll/work_entries.rst b/content/applications/hr/payroll/work_entries.rst index 301968f151..4ba19144d6 100644 --- a/content/applications/hr/payroll/work_entries.rst +++ b/content/applications/hr/payroll/work_entries.rst @@ -2,12 +2,20 @@ Work entries ============ -Work entries are created automatically in the *Payroll* app, based on the employee's :ref:`salary -structure type `, and from the *Planning*, *Attendances*, and *Time Off* -applications. +The **Payroll** app automatically creates work entries based on the employee's :ref:`salary +structure type `, and from the **Planning**, **Attendances**, and **Time +Off** applications. -The *Work Entries* dashboard of the *Payroll* application provides a visual overview of the -individual work entries for every employee. +Work entries provide the **Payroll** app with the worked hours used to compute employee paychecks, +if the employee's salary is based on work entries, as opposed to a salaried position. + +.. _payroll/work-entry-dashboard: + +Work entry dashboard +==================== + +The *Work Entries* dashboard of the **Payroll** app provides a visual overview of the individual +work entries for every employee. To open the dashboard, navigate to :menuselection:`Payroll app --> Work Entries --> Work Entries`. @@ -15,72 +23,72 @@ On the :guilabel:`Work Entry` dashboard, work entries appear in alphabetical ord first name of the employees. The entire month is displayed, with the current day highlighted in pale yellow. -If any entries have :ref:`conflicts ` that need to be resolved, the dashboard -defaults to filter only the :guilabel:`Conflicting` entries. - -To remove the filter from the :guilabel:`Search...` bar to view all work entries, click the -:guilabel:`✖️ (remove)` icon on the :guilabel:`Conflicting` filter in the :guilabel:`Search...` bar, -and all work entries appear in the list. +The :guilabel:`Work Entry` dashboard has a default :guilabel:`Conflicting` filter, which displays +only work entries with :ref:`conflicts ` to be resolved. .. image:: work_entries/work-entries-overview.png - :align: center :alt: Conflicts dashboard view showing all employee's conflicts in work entries. +.. tip:: + Remove the default :guilabel:`Conflicting` filter from the search bar to view *all* work entries. + .. _payroll/adjust-view: -To change the view, so only the entries for a single day, week, or month are shown, click on -:guilabel:`Month`. A drop-down menu appears with the options of :guilabel:`Day`, :guilabel:`Week`, -or :guilabel:`Month`. Click on one of the options to only display data for that specific selection. +Adjust view +----------- -Use the :guilabel:`⬅️ (left arrow)` and :guilabel:`➡️ (right arrow)` icons on the left and right -side of the :guilabel:`Month` button to adjust the displayed dates. The arrows adjust the date based -on the type of time selected. +To change the view so that only the entries for a single day, week, month, quarter, or year are +shown, click the :icon:`fa-calendar` :guilabel:`(Month)(Year)` button. A drop-down menu appears with +the options of :guilabel:`Today`, :guilabel:`This week`, :guilabel:`This month`, :guilabel:`This +quarter`, or :guilabel:`This year`. Click on one of the options to only display data for that +specific selection. + +Use the :icon:`oi-arrow-left` :guilabel:`(left arrow)` and :icon:`oi-arrow-right` :guilabel:`(right +arrow)` buttons to adjust the displayed dates. The arrows adjust the date based on the type of time +selected. For example, if :guilabel:`Month` is selected, the arrows move one month with each click of the arrow. If :guilabel:`Week` or :guilabel:`Day` is selected, the time moves by either a week or a day for each click of the arrow, respectively. -At any point, to return to a view containing the current day, click the :guilabel:`Today` button. +At any point, to return to a view containing the current day, click the :icon:`fa-crosshairs` +:guilabel:`(Focus Today)` button. .. _payroll/new-work-entry: Add a new work entry ==================== -If a work entry is missing and needs to be added, such as sick time, or if an employee forgot to -clock in and out for a shift, click :guilabel:`New` on the :guilabel:`Work Entry` dashboard, to -create a new work entry. - -A :guilabel:`Create` work entry pop-up form appears. +If a work entry is missing, such as sick time, or if an employee forgot to clock in and out for a +shift, a new work entry must be created for the missing shift. -Enter the following information on the form: +Click :guilabel:`New` on the :ref:`work entry dashboard `, and a blank +:guilabel:`Create` work entry pop-up form appears. Enter the following information on the form: -- :guilabel:`Description`: enter a short description for the work entry, such as `Sick Time`. If - this field is left blank, it automatically populates once an employee is selected. The default - entry is `Attendance: (Employee)`. -- :guilabel:`Employee`: select the employee the work entry is for, using the drop-down menu. -- :guilabel:`Work Entry Type`: select the :ref:`work entry type ` using the +- :guilabel:`Description`: Enter a short description for the work entry, such as `Sick Time`. The + default entry is `Attendance: (Employee)`. +- :guilabel:`Employee`: Select the employee the work entry is for, using the drop-down menu. +- :guilabel:`Work Entry Type`: Select the :ref:`work entry type ` using the drop-down menu. -- :guilabel:`From` and :guilabel:`To`: enter the start (:guilabel:`From`) and end (:guilabel:`To`) +- :guilabel:`From` and :guilabel:`To`: Enter the start (:guilabel:`From`) and end (:guilabel:`To`) dates and times for the work entry. First, click on either the :guilabel:`From` or :guilabel:`To` line to reveal a calendar pop-up - window. Select the date by navigating to the correct month and year, using the :guilabel:`< (left - arrow)` and :guilabel:`> (right arrow)` icons, then click on the specific day. + window. Select the date by navigating to the correct month, then click on the specific day to + select it. Next, select the time, by clicking on either the hour or minute fields at the bottom of the - calendar, and select the desired time for both the hour and minutes. + calendar, and set the desired time. - When the date and time are correct for the entry, click the :guilabel:`Apply` button. -- :guilabel:`Duration`: displays the hours based on the :guilabel:`To` and :guilabel:`From` entries. - Modifying this field modifies the :guilabel:`To` field (the :guilabel:`From` field does not - change). + When the date and time for the entry are correct, click the :guilabel:`Apply` button. +- :guilabel:`Duration`: This field displays the hours based on the :guilabel:`To` and + :guilabel:`From` entries. Modifying this field modifies the :guilabel:`To` field (the + :guilabel:`From` field does not change). Once the desired information is entered, click :guilabel:`Save & Close` to save the entry, and close the pop-up form. .. image:: work_entries/create.png - :align: center :alt: Filling in the work entry Create form in Odoo. .. _payroll/conflicts: @@ -88,9 +96,9 @@ the pop-up form. Conflicts ========= -A conflict appears for any request that has not been approved, such as sick time or vacation, or if -there are any errors on the work entry, such as required fields being left blank. Conflicts are -required to be resolved before payslips can be generated. +A conflict occurs when a request has not been approved, such as sick time or vacation, or if there +are any errors on the work entry. Conflicts that span the current pay period being processed +**must** be resolved before payslips can be generated. Any work entry that has a conflict to be resolved is indicated on the main :guilabel:`Work Entry` dashboard, which can be accessed by navigating to :menuselection:`Payroll app --> Work Entries --> @@ -101,49 +109,62 @@ entry. Click on an individual work entry to see the date and time for the specif click :guilabel:`Edit` to view the conflict details in a pop-up window. .. image:: work_entries/conflict-pop-up.png - :align: center :alt: A row of conflicts, with one entry showing details for the conflict. The conflict is briefly explained in an orange text box in the :guilabel:`Open` pop-up window that appears. -The :guilabel:`Description`, :guilabel:`Employee`, and :guilabel:`Work Entry Type` are listed on -the left side of the pop-up window. The :guilabel:`From` and :guilabel:`To` date and time range, as -well as the total time (in hours) in the :guilabel:`Duration` field, appears on the right side. - -If the conflict is due to a time off request that has not been approved yet, a :guilabel:`Time Off` -field appears on the left side, with the type of time off requested in the description. - -.. image:: work_entries/conflict-details.png - :align: center - :alt: The detailed conflict pop-up window that appears when Edit is clicked. +The :guilabel:`Description`, :guilabel:`Employee`, and :guilabel:`Work Entry Type` are listed on the +left side of the pop-up window. The :guilabel:`From` and :guilabel:`To` date and time range, as well +as the total time (in hours) in the :guilabel:`Duration` field, appears on the right side. Time off conflicts ------------------ -The most common work entry conflicts are for time off requests that have been submitted, but not yet -approved, which results in duplicate work entries for that employee (one for time off and another +The most common work entry conflicts are for time off requests. Odoo automatically generates work +entries for specific time periods. When time off is requested after these work entries are +generated, it results in duplicate work entries for that employee (one for time off and another for regular work). If there is a conflict because a time off request is in the system for the same time that a regular -work entry already exists, the time off request is entered in the :guilabel:`Time Off` field. +work entry already exists, the time off request is entered in a :guilabel:`Time Off` field. -The time off conflict can be resolved either on the work entry pop-up window, or on a detailed time -off request pop-up window. +Conflicts can be resolved either directly on the work entry or in the detailed time off request +form. + +.. _payroll/time-off-work-entry: Resolve on work entry ~~~~~~~~~~~~~~~~~~~~~ -To resolve the time off conflict on this work entry pop-up window, click the :guilabel:`Approve Time -Off` button to approve the time off request, and resolve the work entry conflict. +If no additional details are needed to determine if a time off request should be approved or +refused, the time off conflict can be resolved directly from the work entry pop-up window. + +Click either the :guilabel:`Refuse Time Off` or :guilabel:`Approve Time Off` buttons to refuse or +approve the time off request, then the two buttons disappear. Click the :guilabel:`Save & Close` +button to close the pop-up window. + +The conflict disappears from the :guilabel:`Work Entry` dashboard, since the conflict is now +resolved. + +.. image:: work_entries/conflict-details.png + :alt: The detailed conflict pop-up window that appears when the Edit button is clicked. + +.. note:: + If the time off is approved, the status of the work entry conflict changes to + :guilabel:`Cancelled`. If the time off is refused, the status changes to :guilabel:`Draft`. -The :guilabel:`Approve Time Off` and :guilabel:`Refuse Time Off` buttons disappear. Click the -:guilabel:`Save & Close` button to close the pop-up window. The conflict disappears from the -:guilabel:`Work Entry` dashboard, since the conflict is resolved. +.. _payroll/time-off-request-form: Resolve on time off request ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If more details are needed to make a decision about the time off request, hover over the entry in +the :guilabel:`Time Off` field, and click the :icon:`fa-external-link` :guilabel:`(Internal Link)` +icon that appears at the end of the line. This causes an :guilabel:`Open: Time Off` pop-up window to +load, with all the time off request details. Click either the :guilabel:`Approve` or +:guilabel:`Refuse` buttons to approve or refuse the request. + To resolve the time off conflict on the detailed time off request pop-up window, click the :guilabel:`Internal Link` button at the end of the :guilabel:`Time Off` entry line, and the time off request details appear in a new pop-up window. The request can be modified, if needed. @@ -151,9 +172,8 @@ request details appear in a new pop-up window. The request can be modified, if n Click the :guilabel:`Approve` button to approve the request, then click the :guilabel:`Save & Close` button to save the changes, and go back to the work entry conflict pop-up window. -.. image:: work_entries/time-off-details.png - :align: center - :alt: The detailed time off request form. +.. image:: work_entries/entry-details.png + :alt: The detailed time off request information. Now, the :guilabel:`Approve Time Off` button is hidden, only the :guilabel:`Refuse Time Off` button is visible. @@ -170,92 +190,44 @@ it has been resolved. Regenerate work entries ======================= -When regenerating work entries, any manual changes, such as resolved conflicts, are overwritten, -and work entries are regenerated (or recreated) from the applications that created them. +After conflicts are resolved, the affected work entries must be regenerated. This recreates the +specified work entries, and overwrites the previously conflicting work entries. -This method for correcting a large amount of conflicts is recommended to keep all records correct. While :ref:`conflicts ` *can* be resolved individually, if the conflicts are -caused from another application, it is best practice to ensure the records in the other applications -are also correct. That is why it is recommended to resolve these conflicts in the applications that -created the conflict. - -Another reason this method is recommended is because, when work entries are regenerated, the -conflicts reappear, if the issue in the related application is **not** resolved. +caused from another application, such as **Planning** or **Attendances**, it is best practice to +correct the record in the application causing the conflict. The reason this method is recommended is +because, if the issue in the related application is **not** resolved, when work entries are +regenerated, the conflicts reappear. First, ensure the issues are resolved in the specific applications that caused the work entry -conflicts. +conflicts. Once the conflicts have been resolved in the corresponding apps, open the work entry +dashboard by navigating to :menuselection:`Payroll app --> Work Entries --> Work Entries`. -Next, click the :guilabel:`Regenerate Work Entries` button at the top of the :guilabel:`Work -Entries` dashboard, and a :guilabel:`Work Entry Regeneration` pop-up window appears. +Click the :guilabel:`Regenerate Work Entries` button at the top of the :guilabel:`Work Entries` +dashboard, and a :guilabel:`Work Entry Regeneration` pop-up window appears. -Select the :guilabel:`Employees` to regenerate work entries for from the drop-down menu, and adjust +Select the :guilabel:`Employees` to regenerate work entries for, using the drop-down menu. Adjust the :guilabel:`From` and :guilabel:`To` fields, so the correct date range is displayed. Click the :guilabel:`Regenerate Work Entries` button, and the work entries are recreated. Once finished, the pop-up window closes. .. image:: work_entries/regenerate-details.png - :align: center :alt: Regenerate a work entry for a particular employee. .. example:: - An employee has incorrect work entries generated from the *Planning* app because they were - incorrectly assigned to two work stations simultaneously. This should be fixed in the *Planning* - app, instead of the *Payroll* app. - - To correct this issue, modify the employee's schedule in the *Planning* app, so they are - correctly assigned to only one work station. Then, in the *Payroll* app, regenerate work entries - for that employee, for that specific time period. - - The *Payroll* app then pulls the new, corrected data form the *Planning* app, and recreates the - correct work entries for that employee. All conflicts for that employee are now resolved. - -Generating payslips -=================== - -To generate payslips, :ref:`navigate to the time period ` the payslips should -be generated for. Ensure the :guilabel:`Conflicting` filter is removed. When the desired pay period -is displayed, click the :guilabel:`Generate Payslips` button. - -.. tip:: - If the :guilabel:`Generate Payslips` button is not active (appears pale purple, instead of dark - purple), that indicates there are conflicts, or the date selected includes dates in the future. - Resolve all conflicts before generating payslips. + An employee has incorrect work entries generated from the **Planning** app because they were + incorrectly assigned to two work stations simultaneously. This should be fixed in the + **Planning** app, instead of the **Payroll** app. -When the :guilabel:`Generate Payslips` button is clicked, a batch entry appears on a separate page -for the time period selected. + To correct this issue, modify the employee's schedule in the **Planning** app, so they are + correctly assigned to only one work station. Then, in the **Payroll** app, regenerate work + entries for that employee, for that specific time period. -The batch name populates the :guilabel:`Batch Name` field in a default `From (date) to (date)` -format. + The **Payroll** app then pulls the new, corrected data form the **Planning** app, and recreates + the correct work entries for that employee. All conflicts for that employee are now resolved. -The date range to which the payslips apply appears in the :guilabel:`Period` field, and the company -appears in the :guilabel:`Company` field. It is **not** possible to make changes to this form. +.. seealso:: + :doc:`payslips` -Click the :guilabel:`Create Draft Entry` button to create the payslips for the batch. - -Click the :guilabel:`Payslips` smart button at the top of the page to view all the payslips for the -batch. - -.. image:: work_entries/generate-payslips.png - :align: center - :alt: Information that appears when generating payslips. - -Printing payslips ------------------ - -To print payslips, first view the individual payslips by clicking the :guilabel:`Payslips` smart -button on the batch form. - -Next, select the payslips to print from the :guilabel:`Payslips` list. Click the box next to each -payslip to print, or click the box to the left of the :guilabel:`Reference` column title, to select -all the payslips in the list at once. - -Click the :guilabel:`Print` button, and a PDF file is created with all the specified payslips. - -.. image:: work_entries/print-payslips.png - :align: center - :alt: Print button for printing the payslips. - -.. note:: - The :guilabel:`Print` button does **not** appear until at least one payslip is selected in the - list. + :doc:`batches` diff --git a/content/applications/hr/payroll/work_entries/conflict-details.png b/content/applications/hr/payroll/work_entries/conflict-details.png index 6a64f5b61a..dbc4c6c325 100644 Binary files a/content/applications/hr/payroll/work_entries/conflict-details.png and b/content/applications/hr/payroll/work_entries/conflict-details.png differ diff --git a/content/applications/hr/payroll/work_entries/conflict-pop-up.png b/content/applications/hr/payroll/work_entries/conflict-pop-up.png index fab9235c74..27ec2e222c 100644 Binary files a/content/applications/hr/payroll/work_entries/conflict-pop-up.png and b/content/applications/hr/payroll/work_entries/conflict-pop-up.png differ diff --git a/content/applications/hr/payroll/work_entries/create.png b/content/applications/hr/payroll/work_entries/create.png index 58638b8000..9db489955c 100644 Binary files a/content/applications/hr/payroll/work_entries/create.png and b/content/applications/hr/payroll/work_entries/create.png differ diff --git a/content/applications/hr/payroll/work_entries/entry-details.png b/content/applications/hr/payroll/work_entries/entry-details.png new file mode 100644 index 0000000000..11d0b62ebf Binary files /dev/null and b/content/applications/hr/payroll/work_entries/entry-details.png differ diff --git a/content/applications/hr/payroll/work_entries/generate-payslips.png b/content/applications/hr/payroll/work_entries/generate-payslips.png deleted file mode 100644 index 05790e0c43..0000000000 Binary files a/content/applications/hr/payroll/work_entries/generate-payslips.png and /dev/null differ diff --git a/content/applications/hr/payroll/work_entries/print-payslips.png b/content/applications/hr/payroll/work_entries/print-payslips.png deleted file mode 100644 index e2b6d1d63f..0000000000 Binary files a/content/applications/hr/payroll/work_entries/print-payslips.png and /dev/null differ diff --git a/content/applications/hr/payroll/work_entries/time-off-details.png b/content/applications/hr/payroll/work_entries/time-off-details.png deleted file mode 100644 index 23cf54486b..0000000000 Binary files a/content/applications/hr/payroll/work_entries/time-off-details.png and /dev/null differ diff --git a/content/applications/hr/payroll/work_entries/work-entries-overview.png b/content/applications/hr/payroll/work_entries/work-entries-overview.png index 4bc836f687..9a16153d82 100644 Binary files a/content/applications/hr/payroll/work_entries/work-entries-overview.png and b/content/applications/hr/payroll/work_entries/work-entries-overview.png differ