Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat] Employee weekly schedule planning #8741

Open
wants to merge 19 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
e00c602
Implementation of employee weekly schedule planning
samuelmbabhazi Jan 22, 2025
7c4e4f5
Feedback integration
samuelmbabhazi Jan 23, 2025
ff2bacb
Merge branch 'develop' into feat/#5293-weekly-schedule-planning
samuelmbabhazi Jan 23, 2025
c369a13
Feedback integration
samuelmbabhazi Jan 23, 2025
f7eb738
Feedback integration
samuelmbabhazi Jan 23, 2025
96052b1
Feedback integration
samuelmbabhazi Jan 23, 2025
6c3ba54
Fix deepscan
samuelmbabhazi Jan 23, 2025
49d09b7
Merge branch 'develop' into feat/#5293-weekly-schedule-planning
rahul-rocket Jan 24, 2025
2b926a6
refactor: updated employee availability feature
rahul-rocket Jan 24, 2025
55092e8
fix: entity metadata for Employee#availabilities was not found
rahul-rocket Jan 24, 2025
a6a6e4c
Integration of requested changes
samuelmbabhazi Jan 24, 2025
b1dd009
Merge branch 'develop' into feat/#5293-weekly-schedule-planning
rahul-rocket Jan 26, 2025
39e500f
fix: #5293 bulk insert method for employee availability
rahul-rocket Jan 26, 2025
9037f32
fix: #5293 bulk insert method for employee availability
rahul-rocket Jan 26, 2025
413bf4e
fix: #5293 apply validation and permissions guard
rahul-rocket Jan 26, 2025
043f77f
fix: property 'tenantId' does not exist on type 'IEmployeeAvailabilit…
rahul-rocket Jan 26, 2025
fdab334
feat: #5293 added permission for Employee Availability
rahul-rocket Jan 26, 2025
d51f3f7
feat: #5293 added permission for Employee Availability
rahul-rocket Jan 27, 2025
d8ece61
feat: [table migration] for employee availability for all DB types.
rahul-rocket Jan 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions packages/contracts/src/lib/employee-availability.model.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { IBasePerTenantAndOrganizationEntityModel } from './base-entity.model';
import { IBasePerTenantAndOrganizationEntityModel, ID } from './base-entity.model';
import { IEmployee } from './employee.model';
import { IOrganization } from './organization.model';

/**
* Enum representing the availability status of an employee.
Expand All @@ -13,7 +12,7 @@ export enum AvailabilityStatusEnum {

export interface IEmployeeAvailability extends IBasePerTenantAndOrganizationEntityModel {
employee: IEmployee;
employeeId: string;
employeeId: ID;
startDate: Date;
endDate: Date;
dayOfWeek: number; // 0 = Sunday, 6 = Saturday
Expand All @@ -25,7 +24,7 @@ export interface IEmployeeAvailability extends IBasePerTenantAndOrganizationEnti
* Input interface for finding Employee Availability records.
*/
export interface IEmployeeAvailabilityFindInput {
employeeId?: string;
employeeId?: ID;
availabilityStatus?: AvailabilityStatusEnum;
startDate?: Date;
endDate?: Date;
Expand All @@ -35,7 +34,7 @@ export interface IEmployeeAvailabilityFindInput {
* Input interface for creating new Employee Availability records.
*/
export interface IEmployeeAvailabilityCreateInput extends IBasePerTenantAndOrganizationEntityModel {
employeeId: string;
employeeId: ID;
startDate: Date;
endDate: Date;
dayOfWeek: number; // 0 = Sunday, 6 = Saturday
Expand All @@ -47,7 +46,7 @@ export interface IEmployeeAvailabilityCreateInput extends IBasePerTenantAndOrgan
* Input interface for updating Employee Availability records.
*/
export interface IEmployeeAvailabilityUpdateInput extends IBasePerTenantAndOrganizationEntityModel {
employeeId?: string;
employeeId?: ID;
startDate?: Date;
endDate?: Date;
dayOfWeek?: number; // 0 = Sunday, 6 = Saturday
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { ICommand } from '@nestjs/cqrs';
import { IEmployeeAvailabilityCreateInput } from '@gauzy/contracts';

export class EmployeeAvailabilityBulkCreateCommand implements ICommand {
static readonly type = '[Employee Bulk Availability ] Register';
static readonly type = '[Employee Bulk Availability ] Create';

constructor(public readonly input: IEmployeeAvailabilityCreateInput[]) {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { RequestContext } from '../../../core/context';
import { EmployeeAvailabilityService } from '../../employee-availability.service';
import { EmployeeAvailability } from '../../employee-availability.entity';
import { EmployeeAvailabilityCreateCommand } from '../employee-availability.create.command';
import { BadRequestException } from '@nestjs/common';

@CommandHandler(EmployeeAvailabilityCreateCommand)
export class EmployeeAvailabilityCreateHandler implements ICommandHandler<EmployeeAvailabilityCreateCommand> {
Expand All @@ -12,7 +13,9 @@ export class EmployeeAvailabilityCreateHandler implements ICommandHandler<Employ
public async execute(command: EmployeeAvailabilityCreateCommand): Promise<IEmployeeAvailability> {
const { input } = command;
const { startDate, endDate } = input;
if (!startDate || !endDate) return;
if (!startDate || !endDate) {
throw new BadRequestException('Start date and end date are required.');
}
samuelmbabhazi marked this conversation as resolved.
Show resolved Hide resolved
const tenantId = RequestContext.currentTenantId();

const availability = new EmployeeAvailability({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { UpdateResult } from 'typeorm';
import { Body, Controller, Get, HttpCode, HttpStatus, Param, Post, Put, Query, UseGuards } from '@nestjs/common';
import { CommandBus } from '@nestjs/cqrs';
import { EmployeeAvailabilityService } from './employee-availability.service';
import { EmployeeAvailability } from './employee-availability.entity';
import { CrudController } from '../core';
import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
import { ParseJsonPipe, TenantPermissionGuard, UUIDValidationPipe } from '../shared';
import { ID, IEmployeeAvailability, IEmployeeAvailabilityCreateInput, IPagination } from '@gauzy/contracts';
import { UpdateResult } from 'typeorm';
import { EmployeeAvailabilityService } from './employee-availability.service';
import { EmployeeAvailability } from './employee-availability.entity';
import { CrudController, PaginationParams } from '../core';
import { TenantPermissionGuard, UUIDValidationPipe } from '../shared';
import { EmployeeAvailabilityBulkCreateCommand, EmployeeAvailabilityCreateCommand } from './commands';

@ApiTags('EmployeeAvailability')
Expand Down Expand Up @@ -57,9 +57,10 @@ export class EmployeeAvailabilityController extends CrudController<EmployeeAvail
description: 'No availability records found.'
})
@Get()
async findAll(@Query('data', ParseJsonPipe) data: any): Promise<IPagination<IEmployeeAvailability>> {
const { relations, findInput } = data;
return this.availabilityService.findAll({ where: findInput, relations });
async findAll(
@Query() filter: PaginationParams<EmployeeAvailability>
): Promise<IPagination<IEmployeeAvailability>> {
return this.availabilityService.findAll(filter);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,13 @@ export class EmployeeAvailability extends TenantOrganizationBaseEntity implement
@ApiProperty({ type: () => Number, description: 'Day of the week (0 = Sunday, 6 = Saturday)' })
@IsInt()
@IsNotEmpty()
@MultiORMColumn({ type: 'int', check: 'day_of_week BETWEEN 0 AND 6' })
@MultiORMColumn({ check: 'day_of_week BETWEEN 0 AND 6' })
samuelmbabhazi marked this conversation as resolved.
Show resolved Hide resolved
dayOfWeek: number;

@ApiProperty({ enum: AvailabilityStatusEnum })
@IsOptional()
@IsEnum(AvailabilityStatusEnum)
@MultiORMColumn({
type: 'int',
samuelmbabhazi marked this conversation as resolved.
Show resolved Hide resolved
nullable: true,
transformer: new AvailabilityStatusTransformer()
})
availabilityStatus: AvailabilityStatusEnum;
Expand All @@ -43,7 +41,7 @@ export class EmployeeAvailability extends TenantOrganizationBaseEntity implement
})
@IsString()
@IsOptional()
@MultiORMColumn({ type: 'text', nullable: true })
@MultiORMColumn({ nullable: true })
availabilityNotes?: string;

/*
Expand All @@ -56,14 +54,13 @@ export class EmployeeAvailability extends TenantOrganizationBaseEntity implement
* Employee
*/
@MultiORMManyToOne(() => Employee, {
nullable: false,
onDelete: 'CASCADE'
})
@JoinColumn()
employee: Employee;

@ApiProperty({ type: () => String })
@RelationId((it: EmployeeAvailability) => it.employee)
@MultiORMColumn({ type: 'uuid' })
@MultiORMColumn()
employeeId: ID;
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { Injectable } from '@nestjs/common';
import { TypeOrmEmployeeAvailabilityRepository } from './repository/type-orm-employee-availability.repository';
import { MikroOrmEmployeeAvailabilityRepository } from './repository/micro-orm-employee-availability.repository';
import { EmployeeAvailability, TenantAwareCrudService } from '../core';
import { TenantAwareCrudService } from './../core/crud';
import { EmployeeAvailability } from './employee-availability.entity';

@Injectable()
export class EmployeeAvailabilityService extends TenantAwareCrudService<EmployeeAvailability> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { AvailabilityStatusEnum } from '@gauzy/contracts';
import { ValueTransformer } from 'typeorm';
import { AvailabilityStatusEnum } from '@gauzy/contracts';

/**
* Transformer to handle the conversion between the enum values
Expand Down
Loading