from typing import Any, List, Optional

from bullhorn.types import (
    candidate,
    client_contact,
    client_corporation,
    job_order,
    job_submission,
    shift,
)


class Placement:
    id: int
    appointments: List[int]
    approvedChangeRequests: int
    approvingClientContact: Optional[client_contact.ClientContact]
    backupApprovingClientContact: Optional[client_contact.ClientContact]
    benefitGroup: Optional[str]
    billingClientContact: Optional[client_contact.ClientContact]
    billingFrequency: Optional[str]
    bonusPackage: Optional[str]
    bteSyncStatus: str
    candidate: candidate.Candidate
    changeRequests: List[int]
    clientBillRate: Optional[float]
    clientRating: Optional[int]
    clientOvertimeRate: Optional[float]
    comments: Optional[str]
    commissions: List[int]
    correlatedCustomDate1: Optional[int]
    correlatedCustomDate2: Optional[int]
    correlatedCustomDate3: Optional[int]
    correlatedCustomFloat1: Optional[float]
    correlatedCustomFloat2: Optional[float]
    correlatedCustomFloat3: Optional[float]
    correlatedCustomInt1: Optional[int]
    correlatedCustomInt2: Optional[int]
    correlatedCustomInt3: Optional[int]
    correlatedCustomText1: Optional[str]
    correlatedCustomText2: Optional[str]
    correlatedCustomText3: Optional[str]
    correlatedCustomText4: Optional[str]
    correlatedCustomText5: Optional[str]
    correlatedCustomText6: Optional[str]
    correlatedCustomText7: Optional[str]
    correlatedCustomText8: Optional[str]
    correlatedCustomText9: Optional[str]
    correlatedCustomText10: Optional[str]
    correlatedCustomTextBlock1: Optional[str]
    correlatedCustomTextBlock2: Optional[str]
    correlatedCustomTextBlock3: Optional[str]
    costCenter: Optional[str]
    customBillRate1: Optional[float]
    customBillRate2: Optional[float]
    customBillRate3: Optional[float]
    customBillRate4: Optional[float]
    customBillRate5: Optional[float]
    customBillRate6: Optional[float]
    customBillRate7: Optional[float]
    customBillRate8: Optional[float]
    customBillRate9: Optional[float]
    customBillRate10: Optional[float]
    customDate1: Optional[int]
    customDate2: Optional[int]
    customDate3: Optional[int]
    customDate4: Optional[int]
    customDate5: Optional[int]
    customDate6: Optional[int]
    customDate7: Optional[int]
    customDate8: Optional[int]
    customDate9: Optional[int]
    customDate10: Optional[int]
    customDate11: Optional[int]
    customDate12: Optional[int]
    customDate13: Optional[int]
    customEncryptedText1: Optional[str]
    customEncryptedText2: Optional[str]
    customEncryptedText3: Optional[str]
    customEncryptedText4: Optional[str]
    customEncryptedText5: Optional[str]
    customEncryptedText6: Optional[str]
    customEncryptedText7: Optional[str]
    customEncryptedText8: Optional[str]
    customEncryptedText9: Optional[str]
    customEncryptedText10: Optional[str]
    customFloat1: Optional[float]
    customFloat2: Optional[float]
    customFloat3: Optional[float]
    customFloat4: Optional[float]
    customFloat5: Optional[float]
    customFloat6: Optional[float]
    customFloat7: Optional[float]
    customFloat8: Optional[float]
    customFloat9: Optional[float]
    customFloat10: Optional[float]
    customFloat11: Optional[float]
    customFloat12: Optional[float]
    customFloat13: Optional[float]
    customFloat14: Optional[float]
    customFloat15: Optional[float]
    customFloat16: Optional[float]
    customFloat17: Optional[float]
    customFloat18: Optional[float]
    customFloat19: Optional[float]
    customFloat20: Optional[float]
    customFloat21: Optional[float]
    customFloat22: Optional[float]
    customFloat23: Optional[float]
    customObject1s: List[Any]
    customObject2s: List[Any]
    customObject3s: List[Any]
    customObject4s: List[Any]
    customObject5s: List[Any]
    customObject6s: List[Any]
    customObject7s: List[Any]
    customObject8s: List[Any]
    customObject9s: List[Any]
    customObject10s: List[Any]
    customPayRate1: Optional[float]
    customPayRate2: Optional[float]
    customPayRate3: Optional[float]
    customPayRate4: Optional[float]
    customPayRate5: Optional[float]
    customPayRate6: Optional[float]
    customPayRate7: Optional[float]
    customPayRate8: Optional[float]
    customPayRate9: Optional[float]
    customPayRate10: Optional[float]
    customText1: Optional[str]
    customText2: Optional[str]
    customText3: Optional[str]
    customText4: Optional[str]
    customText5: Optional[str]
    customText6: Optional[str]
    customText7: Optional[str]
    customText8: Optional[str]
    customText9: Optional[str]
    customText10: Optional[str]
    customText11: Optional[str]
    customText12: Optional[str]
    customText13: Optional[str]
    customText14: Optional[str]
    customText15: Optional[str]
    customText16: Optional[str]
    customText17: Optional[str]
    customText18: Optional[str]
    customText19: Optional[str]
    customText20: Optional[str]
    customText21: Optional[str]
    customText22: Optional[str]
    customText23: Optional[str]
    customText24: Optional[str]
    customText25: Optional[str]
    customText26: Optional[str]
    customText27: Optional[str]
    customText28: Optional[str]
    customText29: Optional[str]
    customText30: Optional[str]
    customTextBlock1: Optional[str]
    customTextBlock2: Optional[str]
    customTextBlock3: Optional[str]
    customTextBlock4: Optional[str]
    customTextBlock5: Optional[str]
    customTextBlock6: Optional[str]
    customTextBlock7: Optional[str]
    customTextBlock8: Optional[str]
    customTextBlock9: Optional[str]
    customTextBlock10: Optional[str]
    dateAdded: int
    dateBegin: int
    dateClientEffective: Optional[int]
    dateEffective: Optional[int]
    dateEnd: Optional[int]
    daysGuaranteed: int
    dateLastModified: int
    daysProRated: int
    durationWeeks: Optional[float]
    employeeType: Optional[str]
    employmentStartDate: Optional[int]
    employmentType: str
    expiringCredentials: int
    exemptionStatus: str
    fee: Optional[float]
    hoursOfOperation: Optional[str]
    hoursPerDay: Optional[float]
    housingAmenities: List[int]
    housingManagerID: Optional[int]
    housingStatus: Optional[str]
    incompleteRequirements: int
    invoiceGroupID: Optional[int]
    invoiceGroupName: Optional[str]
    invoiceID: Optional[int]
    invoiceItems: List[int]
    jobOrder: job_order.JobOrder
    jobSubmission: Optional[job_submission.JobSubmission]
    lastBteSyncDate: Optional[int]
    markupPercentage: Optional[float]
    notes: List[int]
    onboardingDocumentReceivedCount: int
    onboardingDocumentSentCount: int
    onboardingPercentComplete: int
    onboardingReceivedSent: Optional[str]
    onboardingStatus: Optional[str]
    optionsPackage: Optional[str]
    otExemption: Optional[bool]
    otherHourlyFee: Optional[float]
    otherHourlyFeeComments: Optional[str]
    overtimeMarkupPercentage: Optional[float]
    overtimeRate: Optional[float]
    payGroup: Optional[str]
    payRate: Optional[float]
    payrollEmployeeType: Optional[str]
    payrollSyncStatus: Optional[str]
    pendingChangeRequests: int
    placementCertifications: List[int]
    positionCode: Optional[str]
    recruitingManagerPercentGrossMargin: Optional[float]
    referralFee: Optional[float]
    referralFeeType: Optional[str]
    reportedMargin: Optional[float]
    reportTo: Optional[str]
    salary: Optional[float]
    salaryUnit: Optional[str]
    salesManagerPercentGrossMargin: Optional[float]
    shift: Optional[shift.Shift]
    statementClientContact: Optional[client_contact.ClientContact]
    status: str
    surveys: int
    tasks: List[int]
    taxRate: Optional[float]
    taxState: Optional[str]
    terminationReason: Optional[str]
    timeUnits: int
    timeCard: int
    timecardExpenses: int
    timecardTimes: int
    workersCompensationRateID: Optional[int]
    workWeekStart: int
    venderClientCorporation: Optional[client_corporation.ClientCorporation]
