import { DataSource, Repository } from 'typeorm';
import { Period } from '../periods/entities/period.entity';
import { JobTitle } from '../job-titles/entities/job-title.entity';
import { Site } from '../sites/entities/site.entity';
import { User } from '../users/entities/user.entity';
import { Worker } from '../workers/entities/worker.entity';
import { WorkerSite } from '../workers/entities/worker-site.entity';
import { UpsertCellDto } from './dto/upsert-attendance.dto';
import { Attendance } from './entities/attendance.entity';
import { AttendanceType } from './entities/attendance-type.entity';
export interface GridUserRef {
    id: number;
    firstName: string;
    lastName: string;
}
export interface GridResponse {
    period: Period;
    workers: Worker[];
    attendances: Attendance[];
    dates: string[];
    jobTitles: JobTitle[];
    attendanceTypes: AttendanceType[];
    usersMap: Record<number, GridUserRef>;
}
export declare class AttendancesService {
    private readonly attendancesRepository;
    private readonly attendanceTypesRepository;
    private readonly workersRepository;
    private readonly periodsRepository;
    private readonly workerSitesRepository;
    private readonly sitesRepository;
    private readonly jobTitlesRepository;
    private readonly usersRepository;
    private readonly dataSource;
    constructor(attendancesRepository: Repository<Attendance>, attendanceTypesRepository: Repository<AttendanceType>, workersRepository: Repository<Worker>, periodsRepository: Repository<Period>, workerSitesRepository: Repository<WorkerSite>, sitesRepository: Repository<Site>, jobTitlesRepository: Repository<JobTitle>, usersRepository: Repository<User>, dataSource: DataSource);
    private assertSiteActive;
    getGrid(period: Period): Promise<GridResponse>;
    deleteCell(period: Period, workerId: number, date: string): Promise<void>;
    upsertCell(period: Period, dto: UpsertCellDto, userId: number): Promise<Attendance[]>;
    upsertManyCells(period: Period, items: UpsertCellDto[], userId: number): Promise<{
        saved: number;
    }>;
    private replaceCellLines;
    private normalizeLines;
    private loadTypeMap;
    private loadCompanyJobTitleIds;
    private getWorkerOrThrow;
    private assertOpen;
    private assertDateInPeriod;
    private assertWorkerOnSite;
}
