diff --git a/backend/grant/proposal/models.py b/backend/grant/proposal/models.py index 90a481ad..beae8133 100644 --- a/backend/grant/proposal/models.py +++ b/backend/grant/proposal/models.py @@ -298,7 +298,15 @@ class Proposal(db.Model): if len(milestone.content) > 200: raise ValidationException("Milestone content cannot be longer than 200 chars") - payout_total += float(milestone.payout_percent) + try: + p = float(milestone.payout_percent) + if p <= 0: + raise ValidationException("Milestone payout percent must be greater than zero") + + except ValueError: + raise ValidationException("Milestone payout percent must be a number") + + payout_total += p try: present = datetime.datetime.today().replace(day=1) diff --git a/frontend/client/modules/create/utils.ts b/frontend/client/modules/create/utils.ts index f2963f40..733d2127 100644 --- a/frontend/client/modules/create/utils.ts +++ b/frontend/client/modules/create/utils.ts @@ -148,6 +148,10 @@ export function getCreateErrors( return 'Payout percent is required'; } else if (Number.isNaN(parseInt(ms.payoutPercent, 10))) { return 'Payout percent must be a valid number'; + } else if (parseInt(ms.payoutPercent, 10) <= 0) { + return 'Payout percent must be greater than zero'; + } else if (parseInt(ms.payoutPercent, 10) > 100) { + return 'Payout percent must be less than or equal to 100'; } // Last one shows percentage errors