# peoplesoft

## Client

- Employee:
  `employeesSearchQueryOptions`
  `employeesQueryOptions`
  `activeEmployeesQueryOptions`
  `employeeByIdQueryOptions`
  `previousEmployeeIdsQueryOptions`
  `employeeSupervisorQueryOptions`
  `employeeSubordinatesQueryOptions`
  `employeeManagerQueryOptions`
  `employeeGeneralManagerQueryOptions`
  `companyGeneralManagerQueryOptions`
- Department:
  `departmentsQueryOptions`
  `departmentByIdQueryOptions`
  `departmentManagerQueryOptions`
  `departmentEmployeesQueryOptions`

## Server

- Employee:
  `searchEmployees`
  `getEmployees`
  `getActiveEmployees`
  `getEmployeeByEmployeeId`
  `getPreviousEmployeeIds`
  `getEmployeeSupervisor`
  `getEmployeeSubordinates`
  `getEmployeeManager`
  `getEmployeeGeneralManager`
  `getCompanyGeneralManager`
- Department:
  `getDepartments`
  `getDepartmentById`
  `getDepartmentManager`
  `getDepartmentEmployees`

## Schemas/Models

```ts
const EmployeeSchema = z.object({
  badgeId: z.string().trim(),
  category: z.string().trim(),
  categoryGroup: EmployeeCategoryGroup,
  companyCode: z.string().trim(),
  contactPhone: z.string().trim(),
  departmentId: z.string().trim(),
  departmentDescription: z.string().trim(),
  emailString: z.string().trim(),
  employeeId: z.string().trim(),
  extensionNumber: z.string().trim(),
  firstName: z.string().trim(),
  gender: z.string().trim(),
  hiredDate: z.date(),
  lastName: z.string().trim(),
  managerId: z.string().trim(),
  middleName: z.string().trim(),
  name: z.string().trim(),
  nameTitleCase: z.string().trim(),
  nfcSn: z.string().trim(),
  plantId: z.string().trim(),
  position: z.string().trim(),
  previousEmployeeIds: z.string().trim().nullable(),
  reHiredDate: z.date().nullable(),
  recordNumber: z.number(),
  status: EmployeeStatus,
  supervisorId: z.string().trim(),
  terminationDate: z.date().nullable(),
  terminationFutureDate: z.date().nullable(),
  type: z.string().trim(),
  upperDepartmentId: z.string().trim(),
  jobCode: z.string().trim(),
  jobDescription: z.string().trim(),
  terminationReason: z.string().trim().nullable(),
  supervisorRecordNumber: z.number(),
});

const DepartmentSchema = z.object({
  departmentId: z.string().trim(),
  description: z.string().trim(),
  managerId: z.string().trim(),
  managerRecordNumber: z.string().trim(),
  treeLevel: z.number(),
  upperDepartmentId: z.string().trim(),
  companyCode: z.string().trim(),
  location: z.string().trim(),
  salLocation: z.string().trim(),
  plantId: z.string().trim(),
  manager: EmployeeSchema,
});

const EmployeeCategoryGroup = z.enum(["IDL", "FD", "FI"]);
const EmployeeStatus = z.enum(["Active", "Terminated", "Leave of Absence"]);
```

## Examples

```ts
import { activeEmployeesQueryOptions } from "wcz-layout/data/client";
import { getEmployeeManager } from "wcz-layout/data/server";

// client
const { data: employees = [] } = useQuery(activeEmployeesQueryOptions());

// server
const manager = await getEmployeeManager({ data: { employeeId } });
```
