2026-07-07 15:31:09 +03:30
|
|
|
import {
|
|
|
|
|
IsBoolean,
|
|
|
|
|
IsDateString,
|
|
|
|
|
IsEnum,
|
|
|
|
|
IsIn,
|
|
|
|
|
IsInt,
|
|
|
|
|
IsOptional,
|
|
|
|
|
IsString,
|
|
|
|
|
IsUUID,
|
|
|
|
|
Max,
|
|
|
|
|
Min,
|
|
|
|
|
} from 'class-validator';
|
2026-06-28 22:56:56 +03:30
|
|
|
import { Transform } from 'class-transformer';
|
|
|
|
|
import { LabTaskStatus } from '@prisma/client';
|
|
|
|
|
|
2026-07-07 15:31:09 +03:30
|
|
|
const toBoolean = ({ value }: { value: unknown }) => {
|
|
|
|
|
if (typeof value === 'boolean') return value;
|
|
|
|
|
if (value === 'true' || value === '1') return true;
|
|
|
|
|
if (value === 'false' || value === '0') return false;
|
|
|
|
|
return value;
|
|
|
|
|
};
|
|
|
|
|
|
2026-06-28 22:56:56 +03:30
|
|
|
export class UpdateLabTaskDto {
|
|
|
|
|
@IsEnum(LabTaskStatus)
|
|
|
|
|
status: LabTaskStatus;
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-08 02:53:47 +03:30
|
|
|
export type TaskSortField =
|
|
|
|
|
| 'date'
|
|
|
|
|
| 'status'
|
|
|
|
|
| 'clinic'
|
|
|
|
|
| 'patient'
|
|
|
|
|
| 'important'
|
|
|
|
|
| 'prosthesis'
|
|
|
|
|
| 'taskType';
|
2026-07-07 15:31:09 +03:30
|
|
|
|
2026-06-28 22:56:56 +03:30
|
|
|
export class ListLabTasksDto {
|
2026-07-07 15:31:09 +03:30
|
|
|
@IsOptional()
|
|
|
|
|
@IsString()
|
|
|
|
|
q?: string;
|
|
|
|
|
|
|
|
|
|
@IsOptional()
|
|
|
|
|
@IsUUID()
|
|
|
|
|
clinicOrganizationId?: string;
|
|
|
|
|
|
|
|
|
|
@IsOptional()
|
|
|
|
|
@IsEnum(LabTaskStatus)
|
|
|
|
|
status?: LabTaskStatus;
|
|
|
|
|
|
|
|
|
|
@IsOptional()
|
|
|
|
|
@Transform(toBoolean)
|
|
|
|
|
@IsBoolean()
|
|
|
|
|
completed?: boolean;
|
|
|
|
|
|
|
|
|
|
@IsOptional()
|
|
|
|
|
@Transform(toBoolean)
|
|
|
|
|
@IsBoolean()
|
|
|
|
|
important?: boolean;
|
|
|
|
|
|
|
|
|
|
@IsOptional()
|
|
|
|
|
@IsDateString()
|
|
|
|
|
sentFrom?: string;
|
|
|
|
|
|
|
|
|
|
@IsOptional()
|
|
|
|
|
@IsDateString()
|
|
|
|
|
sentTo?: string;
|
|
|
|
|
|
2026-07-13 02:09:49 +03:30
|
|
|
/** Workflow step code (e.g. design) completed within the prosthesis group. */
|
|
|
|
|
@IsOptional()
|
|
|
|
|
@IsString()
|
|
|
|
|
stepCompleted?: string;
|
|
|
|
|
|
2026-07-07 15:31:09 +03:30
|
|
|
@IsOptional()
|
2026-07-08 02:53:47 +03:30
|
|
|
@IsIn(['date', 'status', 'clinic', 'patient', 'important', 'prosthesis', 'taskType'])
|
2026-07-07 15:31:09 +03:30
|
|
|
sortBy?: TaskSortField;
|
|
|
|
|
|
|
|
|
|
@IsOptional()
|
|
|
|
|
@IsIn(['asc', 'desc'])
|
|
|
|
|
sortDir?: 'asc' | 'desc';
|
|
|
|
|
|
2026-06-28 22:56:56 +03:30
|
|
|
@IsOptional()
|
|
|
|
|
@Transform(({ value }) => Number(value))
|
|
|
|
|
@IsInt()
|
|
|
|
|
@Min(1)
|
|
|
|
|
page = 1;
|
|
|
|
|
|
|
|
|
|
@IsOptional()
|
|
|
|
|
@Transform(({ value }) => Number(value))
|
|
|
|
|
@IsInt()
|
|
|
|
|
@Min(1)
|
|
|
|
|
@Max(100)
|
|
|
|
|
limit = 50;
|
|
|
|
|
}
|