/* tslint:disable:max-classes-per-file */
/* tslint:disable:variable-name */
/* tslint:disable:no-trailing-whitespace */
/* tslint:disable:no-consecutive-blank-lines */
/* tslint:disable:no-namespace */
/* tslint:disable:member-access */
/* tslint:disable:typedef-whitespace */
/* tslint:disable:no-internal-module */

declare module EVA.Workforce {
  
  export class ListClockedInEmployeesForFinancialPeriodResponseClockedInUser {
    User : EVA.Core.UserDto; 
    ClockedIn : string; // DateTime
    ClockedOut? : string; // DateTime, nullable
    IsAbsent : boolean; 
  }
  
  export class ClockEmployeeOutAsAbsent extends EVA.API.RequestMessageWithEmptyResponse {
    UserID : number; // Int32
    FinancialPeriodID? : number; // Int32, nullable
    AbsentFrom : string; // DateTime
  }
  
  export class ConsecutiveTimeChunkWithUser {
    UserID : number; // Int32
    FullName : string; 
    Date : string; // DateTime
    StartTime : any; // TimeSpan
    EndTime : any; // TimeSpan
    IsAvailable : boolean; 
    BadgeIDs : number[]; 
    Duration : any; // TimeSpan
    StartDateTime : string; // DateTime
    EndDateTime : string; // DateTime
  }
  
  export class CorrectWorkedHours extends EVA.API.RequestMessageWithEmptyResponse {
    ID : number; // Int32
    ClockInDateTime? : string; // DateTime, nullable
    ClockOutDateTime? : string; // DateTime, nullable
  }
  
  export class CreateWorkedHours extends EVA.API.RequestMessageWithEmptyResponse {
    UserID : number; // Int32
    Date : string; // DateTime
    ClockInTime : any; // TimeSpan
    ClockOutTime : any; // TimeSpan
    OrganizationUnitID : number; // Int32
  }
  
  export class DeleteRosterItem extends EVA.API.RequestMessageGeneric<EVA.API.EmptyResponseMessage> {
    ID : number; // Int32
    ExpireDate? : string; // DateTime, nullable
  }
  
  export class ExportPayrollPeriod extends EVA.API.RequestMessageWithEmptyResponse {
    PayrollPeriodID : number; // Int32
  }
  
  export enum FailedClockOutReasons {
    None = 0,
    AfterFinancialPeriod = 1,
    OutsideSubnet = 2,
  }
  
  export class GetPayrollPeriodReport extends EVA.API.RequestMessageGeneric<EVA.API.ResourceResponseMessage> {
    PayrollPeriodID : number; // Int32
  }
  
  export class GetPayrollPeriodWorkedHoursReport extends EVA.API.RequestMessageGeneric<EVA.API.ResourceResponseMessage> {
    PayrollPeriodID : number; // Int32
  }
  
  export class GetSalaryComponentTypes extends EVA.API.RequestMessageGeneric<EVA.Workforce.GetSalaryComponentTypesResponse> {
  }
  
  export class GetSalaryComponentTypesResponse extends EVA.API.ResponseMessage {
    Result : EVA.Workforce.GetSalaryComponentTypesResponseSalaryComponentTypeDto[]; 
  }
  
  export class ListLeaveBalancesForUserResponseLeaveBalanceDto {
    LeaveType : string; 
    Balance : number; // Decimal
  }
  
  export enum LeaveStatus {
    Requested = 0,
    Approved = 1,
  }
  
  export class ListAvailabilityForTimeslot extends EVA.API.RequestMessageGeneric<EVA.Workforce.ListAvailabilityForTimeslotResponse> {
    OrganizationUnitID : number; // Int32
    StartDateTime : string; // DateTime
    EndDateTime : string; // DateTime
  }
  
  export class ListAvailabilityForTimeslotResponse extends EVA.API.ResponseMessage {
    Availability : EVA.Workforce.ConsecutiveTimeChunkWithUser[]; 
  }
  
  export class ListClockedInEmployeesForFinancialPeriod extends EVA.API.RequestMessageGeneric<EVA.Workforce.ListClockedInEmployeesForFinancialPeriodResponse> {
    PeriodID : number; // Int32
  }
  
  export class ListClockedInEmployeesForFinancialPeriodResponse extends EVA.API.ResponseMessage {
    Employees : EVA.Workforce.ListClockedInEmployeesForFinancialPeriodResponseClockedInUser[]; 
  }
  
  export class ListLeaveBalancesForUser extends EVA.API.RequestMessageGeneric<EVA.Workforce.ListLeaveBalancesForUserResponse> {
    UserID : number; // Int32
  }
  
  export class ListLeaveBalancesForUserResponse extends EVA.API.ResponseMessage {
    Items : EVA.Workforce.ListLeaveBalancesForUserResponseLeaveBalanceDto[]; 
  }
  
  export class ListOccupiedPeriods extends EVA.API.RequestMessageGeneric<EVA.Workforce.ListOccupiedPeriodsResponse> {
    UserID : number; // Int32
    StartDate : string; // DateTime
    EndDate : string; // DateTime
  }
  
  export class ListOccupiedPeriodsResponse extends EVA.API.ResponseMessage {
    Absence : EVA.Workforce.ListOccupiedPeriodsResponseOccupiedPeriod[]; 
    Leave : EVA.Workforce.ListOccupiedPeriodsResponseOccupiedPeriod[]; 
  }
  
  export class ListPayrollPeriods extends EVA.API.PagedResultRequest<EVA.Workforce.ListPayrollPeriodsResponse> {
  }
  
  export class ListPayrollPeriodsResponse extends EVA.API.PagedResultResponse<EVA.Workforce.ListPayrollPeriodsResponsePayrollPeriodDto> {
  }
  
  export class ListPlanning extends EVA.API.RequestMessageGeneric<EVA.Workforce.ListPlanningResponse> {
    OrganizationUnitID? : number; // Int32, nullable
    StartDate : string; // DateTime
    EndDate : string; // DateTime
  }
  
  export class ListPlanningResponse extends EVA.API.ResponseMessage {
    Items : EVA.Workforce.ListPlanningResponsePlanning[]; 
  }
  
  export class ListRoster extends EVA.API.RequestMessageGeneric<EVA.Workforce.ListRosterResponse> {
    Types : number[]; 
    UserID? : number; // Int32, nullable
    BadgeID? : number; // Int32, nullable
    OrganizationUnitID? : number; // Int32, nullable
    StartDate : string; // DateTime
    EndDate : string; // DateTime
  }
  
  export class ListRosterableUsersForOrganizationUnit extends EVA.API.RequestMessageGeneric<EVA.Workforce.ListRosterableUsersForOrganizationUnitResponse> {
    OrganizationUnitID : number; // Int32
    From : string; // DateTime
    To : string; // DateTime
  }
  
  export class ListRosterableUsersForOrganizationUnitResponse extends EVA.API.ResponseMessage {
    Users : EVA.Core.UserDto[]; 
  }
  
  export class ListRosterResponse extends EVA.API.ResponseMessage {
    Items : EVA.Workforce.ListRosterResponseRosterItem[]; 
  }
  
  export class ListSalaryComponents extends EVA.API.PagedResultRequest<EVA.Workforce.ListSalaryComponentsResponse> {
  }
  
  export class ListSalaryComponentsResponse extends EVA.API.PagedResultResponse<EVA.Workforce.ListSalaryComponentsResponseSalaryComponentDto> {
  }
  
  export class ListUnrosteredWorkedHours extends EVA.API.RequestMessageGeneric<EVA.Workforce.ListUnrosteredWorkedHoursResponse> {
    UserID : number; // Int32
    StartDate : string; // DateTime
    EndDate : string; // DateTime
    OrganizationUnitID? : number; // Int32, nullable
  }
  
  export class ListUnrosteredWorkedHoursResponse extends EVA.API.ResponseMessage {
    WorkedHours : EVA.Workforce.WorkedPeriod[]; 
  }
  
  export class ListWorkedHours extends EVA.API.RequestMessageGeneric<EVA.Workforce.ListWorkedHoursResponse> {
    UserIDs : number[]; 
    StartDate : string; // DateTime
    EndDate : string; // DateTime
    OrganizationUnitID? : number; // Int32, nullable
  }
  
  export class ListWorkedHoursForCurrentEmployee extends EVA.API.RequestMessageGeneric<EVA.Workforce.ListWorkedHoursForCurrentEmployeeResponse> {
  }
  
  export class ListWorkedHoursForCurrentEmployeeResponse extends EVA.API.ResponseMessage {
    WorkedHours : EVA.Workforce.WorkedHoursDto[]; 
  }
  
  export class ListWorkedHoursForFinancialPeriod extends EVA.API.FilteredPagedResultRequest<EVA.Workforce.ListWorkedHoursInFinancialPeriodFilter, EVA.Workforce.ListWorkedHoursForFinancialPeriodResponse> {
  }
  
  export class ListWorkedHoursForFinancialPeriodResponse extends EVA.API.PagedResultResponse<EVA.Workforce.ListWorkedHoursForFinancialPeriodResponseWorkedPeriod> {
  }
  
  export class ListWorkedHoursInFinancialPeriodFilter {
    FinancialPeriodID : number; // Int32
  }
  
  export class ListWorkedHoursResponse extends EVA.API.ResponseMessage {
    WorkedPeriods : { [ key : number ] : EVA.Workforce.ListWorkedHoursResponseWorkedPeriod[] }; 
  }
  
  export class ListOccupiedPeriodsResponseOccupiedPeriod {
    StartDate : string; // DateTime
    EndDate? : string; // DateTime, nullable
    TypeDescription : string; 
    Reason : string; 
  }
  
  export class ListPayrollPeriodsResponsePayrollPeriodDto {
    ID : number; // Int32
    PreviousPeriodID? : number; // Int32, nullable
    StartDate : string; // DateTime
    EndDate : string; // DateTime
    Weeks : number; // Int32
    IsExported : boolean; 
  }
  
  export class ListPlanningResponsePlanning {
    OrganizationUnit : EVA.Core.OrganizationUnitDto; 
    DateTime : string; // DateTime
    Result : number; // Int32
  }
  
  export class RecalculatePayrollPeriod extends EVA.API.RequestMessageWithEmptyResponse {
    PayrollPeriodID : number; // Int32
  }
  
  export class ListRosterResponseRosterItem {
    TypeID : number; // Int32
    OrganizationUnitID? : number; // Int32, nullable
    OrganizationUnitName : string; 
    UserID? : number; // Int32, nullable
    BadgeID? : number; // Int32, nullable
    FullName : string; 
    Date : string; // DateTime
    StartTime? : any; // TimeSpan, nullable
    EndTime? : any; // TimeSpan, nullable
    DayOfWeekID? : number; // Int32, nullable
    ID : number; // Int32
    StartDateTime? : string; // DateTime, nullable
    EndDateTime? : string; // DateTime, nullable
    Description : string; 
    AllDay : boolean; 
  }
  
  export enum RosterTypes {
    UserAvailable = 1,
    UserUnavailable = 2,
    TimeSlot = 3,
    Planned = 4,
    AbsenceRequested = 5,
  }
  
  export class ListSalaryComponentsResponseSalaryComponentDto {
    PayrollPeriodID : number; // Int32
    UserID : number; // Int32
    User : EVA.Core.UserDto; 
    TypeID : number; // Int32
    Param1? : number; // Decimal, nullable
    Param2? : number; // Decimal, nullable
    Param3? : number; // Decimal, nullable
    Reason : string; 
    IsExported : boolean; 
  }
  
  export class GetSalaryComponentTypesResponseSalaryComponentTypeDto {
    ID : number; // Int32
    Name : string; 
    Description : string; 
    Code : string; 
    ExportNextPeriod : boolean; 
  }
  
  export class SaveRosterItem extends EVA.API.RequestMessageGeneric<EVA.API.EmptyResponseMessage> {
    ID : number; // Int32
    TypeID : number; // Int32
    OrganizationUnitID? : number; // Int32, nullable
    UserID? : number; // Int32, nullable
    BadgeID? : number; // Int32, nullable
    Date? : string; // DateTime, nullable
    DayOfWeekID? : number; // Int32, nullable
    AllDay : boolean; 
    AvailabilityID? : number; // Int32, nullable
    SlotID? : number; // Int32, nullable
    StartDateTime? : string; // DateTime, nullable
    EndDateTime? : string; // DateTime, nullable
    Description : string; 
  }
  
  export enum UserTimeLedgerTypes {
    ActualUserTaskTime = 1,
    ExpectedUserTaskTime = 2,
    TimeSpentOnInterruptedUserTask = 3,
    ExpectedSalesTime = 4,
    ActualWorkedHours = 5,
  }
  
  export class WorkedHoursDto {
    ID : number; // Int32
    UserID : number; // Int32
    User : EVA.Core.UserDto; 
    OrganizationUnitID : number; // Int32
    OrganizationUnit : EVA.Core.OrganizationUnitDto; 
    Date : string; // DateTime
    ClockInTime : any; // TimeSpan
    ClockOutTime? : any; // TimeSpan, nullable
    ClockInDateTime : string; // DateTime
    ClockOutDateTime? : string; // DateTime, nullable
    IsExported : boolean; 
  }
  
  export enum WorkedHoursLedgerType {
    ClockIn = 1,
    ClockOut = 2,
    ClockInCorrection = 3,
    ClockOutCorrection = 4,
    ClockedOutInPeriodClosing = 5,
    DaySplit = 6,
  }
  
  export class WorkedPeriod {
    StartDate : string; // DateTime
    EndDate? : string; // DateTime, nullable
  }
  
  export class ListWorkedHoursResponseWorkedPeriod {
    StartDate : string; // DateTime
    StartID : number; // Int32
    EndDate? : string; // DateTime, nullable
    ClockedOut : boolean; 
  }
  
  export class ListWorkedHoursForFinancialPeriodResponseWorkedPeriod {
    UserID : number; // Int32
    UserFullName : string; 
    StartDate : string; // DateTime
    EndDate? : string; // DateTime, nullable
    IsCorrected : boolean; 
    IsAbsent : boolean; 
  }
  
}