Files
HRM-System/docs/PLAN-shift-branch.md

2.4 KiB

Project Plan: Admin Shift Branch Selection

Goal

Allow users with the manage-any-shifts permission (Admins) to select a specific Branch (or keep it company-wide) when creating or editing a Shift. HR users should continue to have the shift automatically assigned to their branch.

Context

When an Admin creates a Shift template, they might want that shift to only be available for a specific branch rather than the entire company. Currently, the backend forces branch_id = null (company-wide) for Admins. We need to allow them to explicitly pick a branch.

Task Breakdown

Phase 1: Backend Updates (ShiftController)

  1. Pass Branches to Frontend:

    • In ShiftController@index, fetch all branches (Branch::whereIn('created_by', getCompanyAndUsersId())->get(['id', 'name'])) and pass them to the Inertia page (Inertia::render('shifts/index', ['branches' => $branches])) so they are available in the dropdown.
  2. Handle Branch Assignment in Store & Update:

    • In ShiftController@store, modify the logic for Admins:
      if (!Auth::user()->can('manage-any-shifts')) {
          $validated['branch_id'] = Auth::user()->branch_id ?? Auth::user()->employee->branch_id ?? null;
      } else {
          $validated['branch_id'] = $request->input('branch_id') ?: null;
      }
      
    • Do the same for ShiftController@update.
    • Update ShiftRequest (or the inline validation array) to accept branch_id as nullable|exists:branches,id.

Phase 2: Frontend Updates (Shift Management UI)

  1. Update Shift Form Configuration:
    • In resources/js/pages/shifts/index.tsx (or wherever the CrudFormModal for shifts is), extract the branches and permissions from usePage().props.
    • Add a conditional field for branch_id in the formConfig of CrudFormModal.
    • The field should be a select type containing options mapped from branches.
    • Ensure the field is ONLY shown if the user has the manage-any-shifts permission.
    • Include an empty option like "All Branches (Company-wide)".

Phase 3: Verification Checklist

  • Admin can see the Branch dropdown when creating a shift.
  • Admin can create a shift assigned to a specific branch (DB branch_id is set).
  • Admin can create a company-wide shift (DB branch_id is null).
  • HR (without manage-any-shifts) does NOT see the dropdown.
  • HR created shifts are still automatically tied to their branch.