import { CreateLeaveRequestDto } from "./dto/create-leave-request.dto";
import { UpdateLeaveRequestDto } from "./dto/update-leave-request.dto";
import { UpdateLeaveRequestStatusDto } from "./dto/update-leave-request-status.dto";
import { LeaveRequestRepository } from "./repositories/leave-request.repository";
import { LeaveRequestApprovalLogRepository } from "./repositories/leave-request-approval-log.repository";
import { EmployeeLeaveBalanceRepository } from "../employee-leave-balances/repositories/employee-leave-balance.repository";
import { EmployeeRepository } from "../employees/repositories/employee.repository";
import { CompanySettingsRepository } from "../company/repositories/company-settings.repository";
import { DataSource } from "typeorm";
import { LeaveRequestFiltersDto } from "./dto/leave-request-filters.dto";
import { PermissionRepository } from "../permissions/repositories/permission.repository";
import { RolePermissionRepository } from "../role-permissions/repositories/role-permission.repository";
import { AuthRepository } from "../auth/repositories/auth.repository";
import { LeaveTypeRepository } from "../leave-types/repositories/leave-type.repository";
import { NotificationService } from "../notification/notification.service";
export declare class LeaveRequestsService {
    private readonly leaveRequestRepository;
    private readonly leaveRequestApprovalLogRepository;
    private readonly employeeLeaveBalanceRepository;
    private readonly employeeRepository;
    private readonly companySettingsRepository;
    private readonly dataSource;
    private readonly permissionRepository;
    private readonly rolePermissionRepository;
    private readonly authRepository;
    private readonly leaveTypeRepository;
    private readonly notificationService;
    constructor(leaveRequestRepository: LeaveRequestRepository, leaveRequestApprovalLogRepository: LeaveRequestApprovalLogRepository, employeeLeaveBalanceRepository: EmployeeLeaveBalanceRepository, employeeRepository: EmployeeRepository, companySettingsRepository: CompanySettingsRepository, dataSource: DataSource, permissionRepository: PermissionRepository, rolePermissionRepository: RolePermissionRepository, authRepository: AuthRepository, leaveTypeRepository: LeaveTypeRepository, notificationService: NotificationService);
    private formatApprovalLogs;
    create(createLeaveRequestDto: CreateLeaveRequestDto, token: string): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    findAll(query: LeaveRequestFiltersDto, token: string): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    findMyLeaveRequests(query: LeaveRequestFiltersDto, token: string): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    findOne(id: number): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    update(id: number, updateLeaveRequestDto: UpdateLeaveRequestDto, token: string): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    remove(id: number, token: string): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    updateStatus(id: number, updateStatusDto: UpdateLeaveRequestStatusDto, token: string): Promise<{
        success: boolean;
        code: number;
        message: string;
    }>;
    checkLeaveRequestExist(employeeId: number, fromDate: Date, toDate: Date, companyId: number): Promise<boolean>;
    private calculateCarryForwardDays;
    private createLeaveBalanceIfNotExists;
    private sendLeaveStatusNotification;
    private notifyLeaveApprovers;
    private getMainLeaveTypeForSub;
}
