Implement additional "Abstain" option

Description

Implement a new option to allow users to select "Abstain," alongside the existing "Approve", "Reject" and “Consent“ options.

Allows for the approvers to express a vote of abstention.

If a user decides to abstain, their choice is considered neutral concerning the decisions made by other approvers.

If the other approvers agree, it will be considered as silent approval; if they disagree, it will be considered a rejection.

Abstain can be used:

  • on user, group and email steps (and the corresponding issue field steps)
  • for action type Approval and Consent

In the global settings, a toggle has been added to enable/disable the option to abstain from voting.

'Allow abstain action' checkbox should be added to definition form.

If it is enabled globally, it can be selected on existing definitions. Newly created definitions have it selected by default.

When approval is created on page, if 'Allow Abstain Approval' is selected for the definition and this option is enabled globally, the 'Abstain' button will appear by default.

There is an option to disable this through parameterization.

If 'Allow Abstain' is disabled either at the definition level or globally, the option is not available for approval steps.

Please pay attention to the added texts and descriptions and provide any suggestions you may have.

Edge cases:

// when

{{step type is group if it contains 3 users }}

number of votes required for group step to pass is 2

number of votes required for group step to fail is 2

// given

first user approved

second user rejected

third user abstain

// then

"Abstain" is treated as silent approval

after considering the abstain votes, number of votes required for group step to pass is met, 1 approve & 1 abstain >= 2 required votes to pass

step is marked as approved

// when

{{step type is group if it contains 3 users }}

number of votes required for group step to pass is 3

number of votes required for group step to fail is 2

// given

first user approved

second user rejected

third user abstain

// then

after considering the abstain votes, number of votes required for group step to pass is not met, 1 approval & 1 abstain < 3 required votes to pass

next, the condition on the number of rejected votes is checked, number of votes required for group step to fail is met, 1 reject & 1 abstain >= 2 required votes to fail

step is marked as rejected

Based on customer request

Additionally, the form for creating definitions and the available steps in it have been changed. Please perform regression testing for creating/editing definitions for all possible steps.