{"version":3,"file":"chunk-fmoo6e4b.js","sources":["packages/sports/web/app/src/horse-racing-shared/services/horses-fixture-pricing-helper.service.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport {\n DisplayType,\n OptionStatus,\n Participant,\n ParticipantMarketStatus,\n ParticipantMarketType,\n ParticipantOption,\n ParticipantPriceStatus,\n ParticipantPriceType,\n ParticipantStatus,\n ParticipantType,\n Price,\n} from '@cds/betting-offer';\nimport { EventOption, EventOptionGroup } from '@frontend/sports/betting-offer/feature/model';\nimport { Nullable } from '@frontend/sports/common/core/utils/extended-types';\nimport { NativePrice } from '@frontend/sports/odds/feature/native-price';\nimport {\n FixtureParticipantPriceMap,\n ForecastModel,\n ForecastPlaces,\n V3FixtureParticipantPriceMap,\n WinGameFixture,\n WinGameParticipant,\n} from '@frontend/sports/racing/feature/models';\n\nimport { HorsesFixtureHelper, PricingStateFixture } from './horses-fixture-helper.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HorsesFixturePricingHelper {\n /**\n * Return a dictionary of corresponding price for each participant\n * Only returns prices that are in visible or suspended state\n *\n * @param fixture\n * @param marketType\n * @returns hash of: \n * @memberOf HorsesFixturePricingHelper\n */\n getPrices(fixture: WinGameFixture, marketType: ParticipantMarketType, preferredPriceType?: ParticipantPriceType): FixtureParticipantPriceMap {\n const result = {} as FixtureParticipantPriceMap;\n for (const participant of fixture.participants) {\n const options = participant.options.filter((o) => o.marketType === marketType);\n const fixtureParticipantId = participant.id;\n if (options.length === 0) {\n result[fixtureParticipantId] = null;\n } else if (options.length === 1) {\n result[fixtureParticipantId] = options[0];\n } else {\n result[fixtureParticipantId] = this.getOption(options, marketType, preferredPriceType);\n }\n }\n\n return result;\n }\n\n getOptionPrices(fixture: WinGameFixture, optionGroup: EventOptionGroup, preferredPriceType?: ParticipantPriceType): V3FixtureParticipantPriceMap {\n const result = {} as V3FixtureParticipantPriceMap;\n const fliteredOptions =\n (optionGroup.isStartingPriceAvailable && optionGroup.isWinPriceAvailable) ||\n optionGroup.detailedGrouping.displayType !== DisplayType.Wincast\n ? optionGroup.options\n : optionGroup.options.filter(\n (o) =>\n (o.participantPriceType === ParticipantPriceType.StartingPrice && optionGroup.isStartingPriceAvailable) ||\n (o.participantPriceType === ParticipantPriceType.Fixed && optionGroup.isWinPriceAvailable),\n );\n\n for (const participant of fixture.participants) {\n const options = fliteredOptions.filter((o) => o.optionPlayerId === participant.id);\n if (options && options.length > 0) {\n if (options && options.length === 1) {\n // options[0].online = this.isDerivedMarketOptionLocked(options[0]);\n result[participant.id] = options[0];\n } else {\n result[participant.id] = this.filterParticipantOption(options, preferredPriceType);\n }\n }\n }\n\n return result;\n }\n\n isAvailableWinOption(option: Nullable): boolean {\n return !!(\n option &&\n option.marketType === ParticipantMarketType.Win &&\n option.marketStatus === ParticipantMarketStatus.Visible &&\n option.participantPriceStatus === ParticipantPriceStatus.Visible &&\n (option.priceType === ParticipantPriceType.StartingPrice || NativePrice.fromNativePriceElement(option.price).greaterThan(1))\n );\n }\n\n isV3WinOptionAvailable(option: Nullable): boolean {\n return !!(\n option &&\n option.status === OptionStatus.Visible &&\n (option.participantPriceType === ParticipantPriceType.StartingPrice || option.nativePrice.greaterThan(1))\n );\n }\n\n isPriceLocked>(\n fixture: PricingStateFixture,\n participant: TParticipant | null,\n option: Nullable,\n ): boolean {\n if (!HorsesFixtureHelper.isTradable(fixture)) {\n // If fixture is finished or resulted\n return true;\n }\n\n if (!participant || participant.status !== ParticipantStatus.NotDefined) {\n // If the participant is not participating\n return true;\n }\n\n if (this.isOptionLocked(option)) {\n // if option and market are not visible\n return true;\n }\n\n return false;\n }\n\n isDerivedMarketPriceLocked>(\n fixture: PricingStateFixture,\n participant: TParticipant | null,\n option: Nullable,\n ): boolean {\n if (!HorsesFixtureHelper.isTradable(fixture)) {\n // If fixture is finished or resulted\n return true;\n }\n\n if (!participant || participant.status !== ParticipantStatus.NotDefined) {\n // If the participant is not participating\n return true;\n }\n\n if (this.isDerivedMarketOptionLocked(option)) {\n // if option and market are not visible\n return true;\n }\n\n return false;\n }\n\n getPriceForMarketType(participant: Participant, marketType: ParticipantMarketType): ParticipantOption[] {\n return participant.options.filter((o) => o.marketType === marketType);\n }\n\n isPriceStatusVisible(participant: Participant, marketType: ParticipantMarketType): boolean {\n return this.isPriceStatus(participant, marketType, ParticipantPriceStatus.Visible) && participant.status === ParticipantStatus.NotDefined;\n }\n\n isDerivedMarketPriceStatusVisible(participant: Participant, marketType: ParticipantMarketType): boolean {\n return participant.status === ParticipantStatus.NotDefined;\n }\n\n allPricesAreLocked>(\n fixture: PricingStateFixture,\n participants: TParticipant[],\n options: FixtureParticipantPriceMap,\n ): boolean {\n for (const participant of participants) {\n const option = options[participant.id];\n if (option && !this.isPriceLocked(fixture, participant, option)) {\n return false;\n }\n }\n\n return true;\n }\n\n getPriceHistory(option: Nullable): Price[] {\n let priceHistory: Price[] = [];\n if (option && option.priceType === ParticipantPriceType.Fixed && option.priceHistory && option.priceHistory.length) {\n // if any price history >= 10 take only 2 because there's not enough space to show 3.\n const numberOfPrices = option.priceHistory.some((pr) => NativePrice.fromNativePriceElement(pr).greaterThanOrEqualTo(10)) ? 2 : 3;\n priceHistory = option.priceHistory.slice(-numberOfPrices);\n }\n\n return priceHistory;\n }\n\n getV3PriceHistory(option: Nullable): Price[] {\n let priceHistory: Price[] = [];\n if (option && option.participantPriceType === ParticipantPriceType.Fixed && option.priceHistory && option.priceHistory.length) {\n // if any price history >= 10 take only 2 because there's not enough space to show 3.\n priceHistory = option.priceHistory.slice(-3);\n }\n\n return priceHistory;\n }\n\n allPricesAreSP>(options: FixtureParticipantPriceMap, participants: TParticipant[]): boolean {\n for (const participant of participants) {\n const option = options[participant.id];\n if (!option || option.priceType !== ParticipantPriceType.StartingPrice) {\n return false;\n }\n }\n\n return true;\n }\n\n isFixedOptionParticipant(participant: Participant): boolean {\n const options = participant.options.filter((o) => o.marketType === ParticipantMarketType.Win);\n const validOption = this.selectValidWinOption(options);\n\n return !!validOption && validOption.priceType === ParticipantPriceType.Fixed;\n }\n\n private getOption(\n options: ParticipantOption[],\n marketType: ParticipantMarketType,\n preferredPriceType?: ParticipantPriceType,\n ): Nullable {\n if (typeof preferredPriceType !== 'undefined') {\n const preferredOption = options.find((o) => o.priceType === preferredPriceType);\n if (preferredOption && this.isVisibleOption(preferredOption)) {\n return preferredOption;\n }\n }\n if (marketType === ParticipantMarketType.Win) {\n return this.selectValidWinOption(options);\n } else {\n return options[0] || null;\n }\n\n return null;\n }\n\n private selectValidWinOption(options: ParticipantOption[]): Nullable {\n const fixedPriceOption = options.find((o) => o.priceType === ParticipantPriceType.Fixed);\n const startingPriceOption = options.find((o) => o.priceType === ParticipantPriceType.StartingPrice);\n if (fixedPriceOption && (this.isVisibleOption(fixedPriceOption) || !startingPriceOption)) {\n // If fixed price available and either is valid or starting price does not exists\n return fixedPriceOption;\n }\n if (startingPriceOption && this.isVisibleOption(startingPriceOption)) {\n // When no valid fixed price and existing starting price return SP\n return startingPriceOption;\n }\n\n return fixedPriceOption || startingPriceOption || null;\n }\n\n private isPriceStatus(participant: Participant, marketType: ParticipantMarketType, priceStatus: ParticipantPriceStatus): boolean {\n return participant.options.some((p) => p.marketType === marketType && p.participantPriceStatus === priceStatus);\n }\n\n private isVisibleOption(option: Nullable): boolean {\n return !!(\n option &&\n option.marketStatus === ParticipantMarketStatus.Visible &&\n option.participantPriceStatus === ParticipantPriceStatus.Visible &&\n (option.priceType !== ParticipantPriceType.Fixed || NativePrice.fromNativePriceElement(option.price).greaterThan(1))\n );\n }\n\n private isOptionLocked(option: Nullable): boolean {\n return (\n !option ||\n option.marketStatus !== ParticipantMarketStatus.Visible ||\n option.participantPriceStatus !== ParticipantPriceStatus.Visible ||\n (option.priceType === ParticipantPriceType.Fixed && NativePrice.fromNativePriceElement(option.price).lessThanOrEqualTo(1))\n );\n }\n\n private isDerivedMarketOptionLocked(option: Nullable): boolean {\n return !option || !option.visible || (option.participantPriceType === ParticipantPriceType.Fixed && option.nativePrice.lessThanOrEqualTo(1));\n }\n\n getParticipantOptions(id: number, participantOptionGroups: { [id: string]: EventOption[] }, preferredPriceType: ParticipantPriceType) {\n const partOptions = participantOptionGroups[id];\n\n return this.filterParticipantOption(partOptions, preferredPriceType);\n }\n\n filterParticipantOption(eventOptions: EventOption[], preferredPriceType?: ParticipantPriceType) {\n const preferredOption = eventOptions ? eventOptions.find((option) => option.participantPriceType === preferredPriceType) : null;\n if (preferredOption?.status === OptionStatus.Visible && preferredOption.online) {\n return preferredOption;\n } else {\n return eventOptions ? eventOptions.filter((option) => option.participantPriceType === ParticipantPriceType.StartingPrice)[0] : null;\n }\n }\n\n someOptionsPriced(runners: WinGameParticipant[], participantOptionGroups: { [id: string]: EventOption[] }): boolean {\n return runners\n .filter((t) => t.properties?.type !== ParticipantType.Favourite)\n .flatMap((t) => this.getParticipantOptions(t.id, participantOptionGroups, ParticipantPriceType.Fixed))\n .some((t) => t?.nativePrice.greaterThan(1));\n }\n\n isPlaceAssigned(model: ForecastModel, isTricast?: boolean): boolean {\n if (!isTricast) {\n return model.first || model.second;\n }\n\n return model.third || model.fourth || model.fifth;\n }\n\n getMarketTypeByKey(key: string, forecastColumns: { id: keyof ForecastPlaces; name: string; visible: boolean }[]): ParticipantMarketType {\n if (forecastColumns.some((c) => c.id === key)) {\n return ParticipantMarketType.Forecast;\n }\n\n return ParticipantMarketType.Tricast;\n }\n}\n"],"names":["HorsesFixturePricingHelper","getPrices","fixture","marketType","preferredPriceType","result","participant","participants","options","filter","o","fixtureParticipantId","id","length","getOption","getOptionPrices","optionGroup","fliteredOptions","isStartingPriceAvailable","isWinPriceAvailable","detailedGrouping","displayType","participantPriceType","optionPlayerId","filterParticipantOption","isAvailableWinOption","option","marketStatus","participantPriceStatus","priceType","NativePrice","fromNativePriceElement","price","greaterThan","isV3WinOptionAvailable","status","nativePrice","isPriceLocked","HorsesFixtureHelper","isTradable","isOptionLocked","isDerivedMarketPriceLocked","isDerivedMarketOptionLocked","getPriceForMarketType","isPriceStatusVisible","isPriceStatus","isDerivedMarketPriceStatusVisible","allPricesAreLocked","getPriceHistory","priceHistory","numberOfPrices","some","pr","greaterThanOrEqualTo","slice","getV3PriceHistory","allPricesAreSP","isFixedOptionParticipant","validOption","selectValidWinOption","preferredOption","find","isVisibleOption","fixedPriceOption","startingPriceOption","priceStatus","p","lessThanOrEqualTo","visible","getParticipantOptions","participantOptionGroups","partOptions","eventOptions","online","someOptionsPriced","runners","t","_a","properties","type","flatMap","isPlaceAssigned","model","isTricast","third","fourth","fifth","first","second","getMarketTypeByKey","key","forecastColumns","c","factory","ɵfac","providedIn","_HorsesFixturePricingHelper"],"mappings":"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"}