420 lines
8.6 KiB
TypeScript
420 lines
8.6 KiB
TypeScript
import { Address, BankAccount } from '@/types/common'
|
||
import {
|
||
EmployeeStatusEnum,
|
||
EmploymentTypeEnum,
|
||
GenderEnum,
|
||
HrCostCenter,
|
||
HrDisciplinaryAction,
|
||
HrEmergencyContact,
|
||
HrPerformanceEvaluation,
|
||
HrTraining,
|
||
HrWorkSchedule,
|
||
JobLevelEnum,
|
||
LeaveStatusEnum,
|
||
LeaveTypeEnum,
|
||
MaritalStatusEnum,
|
||
} from '@/types/hr'
|
||
|
||
export interface IntranetDashboardDto {
|
||
events: EventDto[]
|
||
birthdays: EmployeeDto[]
|
||
visitors: VisitorDto[]
|
||
reservations: ReservationDto[]
|
||
trainings: TrainingDto[]
|
||
expenses: ExpensesDto
|
||
documents: DocumentDto[]
|
||
announcements: AnnouncementDto[]
|
||
shuttleRoutes: ShuttleRouteDto[]
|
||
meals: MealDto[]
|
||
leaves: LeaveDto[]
|
||
overtimes: OvertimeDto[]
|
||
surveys: SurveyDto[]
|
||
socialPosts: SocialPostDto[]
|
||
// priorityTasks: TaskDto[]
|
||
}
|
||
|
||
// Etkinlik
|
||
export interface EventDto {
|
||
id: string
|
||
categoryName: string
|
||
typeName: string
|
||
date: Date
|
||
name: string
|
||
description: string
|
||
place: string
|
||
organizer: EmployeeDto
|
||
participants: number
|
||
photos: string[]
|
||
comments: EventCommentDto[]
|
||
likes: number
|
||
isPublished: boolean
|
||
}
|
||
|
||
// Etkinlik Yorumu
|
||
export interface EventCommentDto {
|
||
id: string
|
||
author: EmployeeDto
|
||
content: string
|
||
creationTime: Date
|
||
likes: number
|
||
}
|
||
|
||
export interface EmployeeDto {
|
||
// İnsan Kaynakları Çalışanı
|
||
id: string
|
||
code: string
|
||
firstName: string
|
||
lastName: string
|
||
fullName: string
|
||
email: string
|
||
phone?: string
|
||
personalPhone?: string
|
||
avatar?: string // Avatar URL
|
||
nationalId: string
|
||
birthDate: Date
|
||
gender: GenderEnum
|
||
maritalStatus: MaritalStatusEnum
|
||
address: Address
|
||
emergencyContact: HrEmergencyContact
|
||
hireDate: Date
|
||
terminationDate?: Date
|
||
employmentType: EmploymentTypeEnum
|
||
jobPositionId: string
|
||
jobPosition?: JobPositionDto
|
||
departmentId: string
|
||
department?: DepartmentDto
|
||
managerId?: string
|
||
manager?: EmployeeDto
|
||
baseSalary: number
|
||
currency: string
|
||
payrollGroup: string
|
||
bankAccountId: string
|
||
bankAccount?: BankAccount
|
||
workLocation: string
|
||
workSchedule?: HrWorkSchedule
|
||
badgeNumber?: string
|
||
employeeStatus: EmployeeStatusEnum
|
||
isActive: boolean
|
||
leaves: LeaveDto[]
|
||
evaluations: HrPerformanceEvaluation[]
|
||
trainings: HrTraining[]
|
||
disciplinaryActions: HrDisciplinaryAction[]
|
||
creationTime: Date
|
||
lastModificationTime: Date
|
||
}
|
||
|
||
export interface DepartmentDto {
|
||
// İnsan Kaynakları Departmanı
|
||
id: string
|
||
code: string
|
||
name: string
|
||
description?: string
|
||
parentDepartmentId?: string
|
||
parentDepartment?: DepartmentDto
|
||
subDepartments: DepartmentDto[]
|
||
managerId?: string
|
||
manager?: EmployeeDto
|
||
costCenterId?: string
|
||
costCenter?: HrCostCenter
|
||
budget: number
|
||
isActive: boolean
|
||
creationTime: Date
|
||
lastModificationTime: Date
|
||
}
|
||
|
||
export interface JobPositionDto {
|
||
// İnsan Kaynakları İş Pozisyonu
|
||
id: string
|
||
code: string
|
||
name: string
|
||
description?: string
|
||
departmentId: string
|
||
department?: DepartmentDto
|
||
level: JobLevelEnum
|
||
minSalary: number
|
||
maxSalary: number
|
||
currency: string
|
||
requiredSkills: string[]
|
||
responsibilities: string[]
|
||
qualifications: string[]
|
||
isActive: boolean
|
||
employees: EmployeeDto[]
|
||
creationTime: Date
|
||
lastModificationTime: Date
|
||
}
|
||
|
||
// Ziyaretçi
|
||
export interface VisitorDto {
|
||
id: string
|
||
fullName: string
|
||
companyName: string
|
||
email: string
|
||
phone: string
|
||
purpose: string
|
||
visitDate: Date
|
||
checkIn?: Date
|
||
checkOut?: Date
|
||
employeeId: string
|
||
employee: EmployeeDto
|
||
status: 'scheduled' | 'checked-in' | 'checked-out' | 'cancelled'
|
||
badgeNumber?: string
|
||
photo?: string
|
||
}
|
||
|
||
// Rezervasyon
|
||
export interface ReservationDto {
|
||
id: string
|
||
type: 'room' | 'vehicle' | 'equipment'
|
||
resourceName: string
|
||
bookedBy: EmployeeDto
|
||
startDate: Date
|
||
endDate: Date
|
||
purpose: string
|
||
status: 'pending' | 'approved' | 'rejected' | 'completed'
|
||
participants?: number
|
||
notes?: string
|
||
}
|
||
|
||
// Eğitim
|
||
export interface TrainingDto {
|
||
id: string
|
||
title: string
|
||
description: string
|
||
instructor: string
|
||
category: 'technical' | 'soft-skills' | 'management' | 'compliance' | 'other'
|
||
type: 'online' | 'classroom' | 'hybrid'
|
||
duration: number // saat
|
||
startDate: Date
|
||
endDate: Date
|
||
maxParticipants: number
|
||
enrolled: number
|
||
status: 'upcoming' | 'ongoing' | 'completed'
|
||
location?: string
|
||
thumbnail?: string
|
||
}
|
||
|
||
// Harcama
|
||
export interface ExpensesDto {
|
||
totalRequested: number
|
||
totalApproved: number
|
||
last5Expenses: ExpenseDto[]
|
||
}
|
||
|
||
// Harcama
|
||
export interface ExpenseDto {
|
||
id: string
|
||
employee: EmployeeDto
|
||
category: 'travel' | 'meal' | 'accommodation' | 'transport' | 'other'
|
||
amount: number
|
||
currency: string
|
||
date: Date
|
||
description: string
|
||
project?: string
|
||
receipts: { name: string; url: string; size: string }[]
|
||
status: 'pending' | 'approved' | 'rejected'
|
||
approver?: EmployeeDto
|
||
approvalDate?: Date
|
||
notes?: string
|
||
creationTime: Date
|
||
}
|
||
|
||
// Doküman (FileItemDto ile uyumlu)
|
||
export interface DocumentDto {
|
||
id: string
|
||
name: string
|
||
type: string // "file" or "folder"
|
||
size: number
|
||
extension: string
|
||
mimeType: string
|
||
createdAt: Date
|
||
modifiedAt: Date
|
||
path: string
|
||
parentId: string
|
||
isReadOnly: boolean
|
||
childCount: number
|
||
}
|
||
|
||
// Sertifika
|
||
export interface CertificateDto {
|
||
id: string
|
||
employee: EmployeeDto
|
||
trainingTitle: string
|
||
issueDate: Date
|
||
expiryDate?: Date
|
||
certificateUrl: string
|
||
score?: number
|
||
}
|
||
|
||
// Duyuru
|
||
export interface AnnouncementDto {
|
||
id: string
|
||
title: string
|
||
excerpt: string
|
||
content: string
|
||
imageUrl?: string
|
||
category: string
|
||
employeeId: string
|
||
employee: EmployeeDto
|
||
publishDate: Date
|
||
expiryDate?: Date
|
||
isPinned: boolean
|
||
viewCount: number
|
||
departments?: string[]
|
||
attachments?: { name: string; url: string; size: string }[]
|
||
}
|
||
|
||
// Servis
|
||
export interface ShuttleRouteDto {
|
||
id: string
|
||
name: string
|
||
route: string[]
|
||
departureTime: string
|
||
arrivalTime: string
|
||
capacity: number
|
||
available: number
|
||
type: string
|
||
}
|
||
|
||
// Yemek Menüsü
|
||
export interface MealDto {
|
||
id: string
|
||
branchId: string
|
||
date: Date
|
||
type: 'breakfast' | 'lunch' | 'dinner'
|
||
totalCalorie?: number
|
||
materials: string[]
|
||
}
|
||
|
||
// İnsan Kaynakları Fazla Mesai
|
||
export interface OvertimeDto {
|
||
id: string
|
||
employeeId: string
|
||
employee?: EmployeeDto
|
||
date: Date
|
||
startTime: string
|
||
endTime: string
|
||
totalHours: number
|
||
reason: string
|
||
status: LeaveStatusEnum
|
||
approvedBy?: string
|
||
approver?: EmployeeDto
|
||
rate?: number
|
||
amount?: number
|
||
creationTime: Date
|
||
lastModificationTime: Date
|
||
}
|
||
|
||
// İnsan Kaynakları İzni
|
||
export interface LeaveDto {
|
||
id: string
|
||
employeeId: string
|
||
employee?: EmployeeDto
|
||
leaveType: LeaveTypeEnum
|
||
startDate: Date
|
||
endDate: Date
|
||
totalDays: number
|
||
reason?: string
|
||
status: LeaveStatusEnum
|
||
appliedDate: Date
|
||
approvedBy?: string
|
||
approvedDate?: Date
|
||
rejectionReason?: string
|
||
isHalfDay: boolean
|
||
attachments: string[]
|
||
creationTime: Date
|
||
lastModificationTime: Date
|
||
}
|
||
|
||
// Anket Cevap
|
||
export interface SurveyAnswerDto {
|
||
questionId: string
|
||
questionType: 'rating' | 'multiple-choice' | 'text' | 'textarea' | 'yes-no'
|
||
value: string | number | string[]
|
||
}
|
||
|
||
// Sosyal Duvar - Comment Interface
|
||
export interface SocialCommentDto {
|
||
id: string
|
||
creator: EmployeeDto
|
||
content: string
|
||
creationTime: Date
|
||
}
|
||
|
||
export interface SocialPollOptionDto {
|
||
id: string
|
||
text: string
|
||
votes: number
|
||
}
|
||
|
||
// Sosyal Duvar - Social Media Interface
|
||
export interface SocialMediaDto {
|
||
id?: string
|
||
type: 'image' | 'video' | 'poll'
|
||
|
||
// Ortak alanlar
|
||
urls?: string[]
|
||
|
||
// Anket (poll) ile ilgili alanlar doğrudan burada
|
||
pollQuestion?: string
|
||
pollOptions?: SocialPollOptionDto[]
|
||
pollTotalVotes?: number
|
||
pollEndsAt?: Date
|
||
pollUserVoteId?: string
|
||
}
|
||
|
||
// Sosyal Duvar - Ana Interface
|
||
export interface SocialPostDto {
|
||
id: string
|
||
employee: EmployeeDto
|
||
content: string
|
||
locationJson?: string
|
||
media?: SocialMediaDto
|
||
likeCount: number
|
||
isLiked: boolean
|
||
likeUsers: EmployeeDto[]
|
||
comments: SocialCommentDto[]
|
||
isOwnPost: boolean
|
||
creationTime: Date
|
||
}
|
||
|
||
// Anket Cevabı
|
||
export interface SurveyResponseDto {
|
||
id: string
|
||
surveyId: string
|
||
respondentId?: string // Anonymous ise null
|
||
submissionTime: Date
|
||
answers: SurveyAnswerDto[]
|
||
}
|
||
|
||
// Anket Sorusu Seçeneği
|
||
export interface SurveyQuestionOptionDto {
|
||
id: string
|
||
text: string
|
||
order: number
|
||
}
|
||
|
||
// Anket Sorusu
|
||
export interface SurveyQuestionDto {
|
||
id: string
|
||
surveyId: string
|
||
questionText: string
|
||
type: 'rating' | 'multiple-choice' | 'text' | 'textarea' | 'yes-no'
|
||
order: number
|
||
isRequired: boolean
|
||
options?: SurveyQuestionOptionDto[]
|
||
}
|
||
|
||
// Anket
|
||
export interface SurveyDto {
|
||
id: string
|
||
title: string
|
||
description: string
|
||
creatorId: EmployeeDto
|
||
creationTime: Date
|
||
deadline: Date
|
||
questions: SurveyQuestionDto[]
|
||
responses: number
|
||
targetAudience: string[]
|
||
status: 'draft' | 'active' | 'closed'
|
||
isAnonymous: boolean
|
||
}
|