Skip to content

Commit 3023780

Browse files
committed
Change how the cost estimates are calcualted when points based payments are chosen
1 parent bed5a22 commit 3023780

File tree

2 files changed

+34
-19
lines changed
  • src/components/ChallengeEditor

2 files changed

+34
-19
lines changed

src/components/ChallengeEditor/ChallengeReviewer-Field/index.js

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ import PropTypes from 'prop-types'
33
import { connect } from 'react-redux'
44
import cn from 'classnames'
55
import { PrimaryButton, OutlineButton } from '../../Buttons'
6-
import { REVIEW_OPPORTUNITY_TYPE_LABELS, REVIEW_OPPORTUNITY_TYPES, VALIDATION_VALUE_TYPE, MARATHON_TYPE_ID, DES_TRACK_ID } from '../../../config/constants'
6+
import { REVIEW_OPPORTUNITY_TYPE_LABELS, REVIEW_OPPORTUNITY_TYPES, VALIDATION_VALUE_TYPE, MARATHON_TYPE_ID, DES_TRACK_ID, CHALLENGE_PRIZE_TYPE } from '../../../config/constants'
77
import { loadScorecards, loadDefaultReviewers, loadWorkflows, replaceResourceInRole, createResource, deleteResource } from '../../../actions/challenges'
88
import styles from './ChallengeReviewer-Field.module.scss'
99
import { validateValue } from '../../../util/input-check'
1010
import AssignedMemberField from '../AssignedMember-Field'
1111
import { getResourceRoleByName } from '../../../util/tc'
1212
import { isEqual } from 'lodash'
13+
import { getPrizeType } from '../../../util/prize'
1314

1415
const ResourceToPhaseNameMap = {
1516
Reviewer: 'Review',
@@ -959,7 +960,8 @@ class ChallengeReviewerField extends Component {
959960
}
960961

961962
getFirstPlacePrizeValue (challenge) {
962-
const placementPrizeSet = challenge.prizeSets.find(set => set.type === 'PLACEMENT')
963+
const prizeSets = challenge.prizeSets || []
964+
const placementPrizeSet = prizeSets.find(set => set.type === 'PLACEMENT')
963965
if (placementPrizeSet && placementPrizeSet.prizes && placementPrizeSet.prizes[0] && placementPrizeSet.prizes[0].value) {
964966
return placementPrizeSet.prizes[0].value
965967
}
@@ -971,20 +973,23 @@ class ChallengeReviewerField extends Component {
971973
const { error } = this.state
972974
const { scorecards = [], defaultReviewers = [], workflows = [] } = metadata
973975
const reviewers = challenge.reviewers || []
974-
const firstPlacePrize = this.getFirstPlacePrizeValue(challenge)
976+
const prizeType = getPrizeType(challenge.prizeSets)
977+
const firstPlacePrize = prizeType === CHALLENGE_PRIZE_TYPE.POINT ? 0 : this.getFirstPlacePrizeValue(challenge)
975978
const estimatedSubmissionsCount = 2 // Estimate assumes two submissions
976-
const reviewersCost = reviewers
977-
.filter((r) => !this.isAIReviewer(r))
978-
.reduce((sum, r) => {
979-
const fixedAmount = parseFloat(r.fixedAmount || 0)
980-
const baseCoefficient = parseFloat(r.baseCoefficient || 0)
981-
const incrementalCoefficient = parseFloat(r.incrementalCoefficient || 0)
982-
const reviewerCost = fixedAmount + (baseCoefficient + incrementalCoefficient * estimatedSubmissionsCount) * firstPlacePrize
983-
984-
const count = parseInt(r.memberReviewerCount) || 1
985-
return sum + reviewerCost * count
986-
}, 0)
987-
.toFixed(2)
979+
const reviewersCost = prizeType === CHALLENGE_PRIZE_TYPE.POINT
980+
? '0.00'
981+
: reviewers
982+
.filter((r) => !this.isAIReviewer(r))
983+
.reduce((sum, r) => {
984+
const fixedAmount = parseFloat(r.fixedAmount || 0)
985+
const baseCoefficient = parseFloat(r.baseCoefficient || 0)
986+
const incrementalCoefficient = parseFloat(r.incrementalCoefficient || 0)
987+
const reviewerCost = fixedAmount + (baseCoefficient + incrementalCoefficient * estimatedSubmissionsCount) * firstPlacePrize
988+
989+
const count = parseInt(r.memberReviewerCount) || 1
990+
return sum + reviewerCost * count
991+
}, 0)
992+
.toFixed(2)
988993

989994
if (isLoading) {
990995
return (

src/components/ChallengeEditor/ChallengeTotal-Field/index.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,27 @@ import PropTypes from 'prop-types'
44
import styles from './ChallengeTotal-Field.module.scss'
55
import cn from 'classnames'
66
import { convertDollarToInteger } from '../../../util/input-check'
7+
import { CHALLENGE_PRIZE_TYPE, PRIZE_SETS_TYPE } from '../../../config/constants'
8+
import { getPrizeType } from '../../../util/prize'
79

810
const ChallengeTotalField = ({ challenge }) => {
911
let challengeTotal = null
10-
if (challenge.prizeSets) {
11-
challengeTotal = _.flatten(challenge.prizeSets.map(p => p.prizes))
12+
const prizeSets = challenge.prizeSets || []
13+
const prizeType = getPrizeType(prizeSets)
14+
const prizeSetsForTotal = prizeType === CHALLENGE_PRIZE_TYPE.POINT
15+
? prizeSets.filter(p => p.type === PRIZE_SETS_TYPE.COPILOT_PAYMENT)
16+
: prizeSets
17+
18+
if (prizeSetsForTotal.length) {
19+
challengeTotal = _.flatten(prizeSetsForTotal.map(p => p.prizes))
1220
.map(p => p.value)
1321
.map(v => convertDollarToInteger(v, '$'))
1422
.reduce((prev, next) => prev + next, 0)
1523
}
16-
const placementPrizeSet = challenge.prizeSets.find(set => set.type === 'PLACEMENT')
17-
const firstPlacePrize = (placementPrizeSet && placementPrizeSet.prizes && placementPrizeSet.prizes[0] && placementPrizeSet.prizes[0].value) || 0
24+
const placementPrizeSet = prizeSets.find(set => set.type === PRIZE_SETS_TYPE.CHALLENGE_PRIZES)
25+
const firstPlacePrize = prizeType === CHALLENGE_PRIZE_TYPE.POINT
26+
? 0
27+
: (placementPrizeSet && placementPrizeSet.prizes && placementPrizeSet.prizes[0] && placementPrizeSet.prizes[0].value) || 0
1828
let reviewerTotal = 0
1929
if (challenge.reviewers && Array.isArray(challenge.reviewers)) {
2030
reviewerTotal = challenge.reviewers

0 commit comments

Comments
 (0)