# Dependencies

This workflow prevents setting an issue state to Fixed if it has dependent issues that are not resolved.

| Name | @jetbrains/youtrack-workflow-dependencies |
| Auto-attached | no |
| Modules |  [Block users from resolving issues with unresolved dependencies](#do-not-allow-fix-unresolved-dependencies) (on-change rule)  |

## Use Case

If a user tries to fix an issue that depends on another issue that is not resolved, a warning is displayed. The issue state cannot be set to Fixed.

## Modules

When the issue state is set to Fixed, the on-change rule in this module checks the list of linked issues for depends on-links.

If there are any linked issues in the depends on list, the rule checks the current state of each linked issue.

* If all of the linked issues are resolved, proceed and resolve the current issue.

* If any of the linked issues are not resolved, a warning is displayed. The transition to the Fixed state for the original issue is cancelled.

### Block users from resolving issues with unresolved dependencies

```JAVASCRIPT
const entities = require('@jetbrains/youtrack-scripting-api/entities');
const workflow = require('@jetbrains/youtrack-scripting-api/workflow');

exports.rule = entities.Issue.onChange({
  title: 'Block users from resolving issues with unresolved dependencies',
  guard: (ctx) => {
    return ctx.issue.fields.becomes(ctx.State, ctx.State.Fixed) && ctx.issue.links['depends on'].isNotEmpty();
  },
  action: (ctx) => {
    ctx.issue.links['depends on'].forEach(function (dep) {
      if (!dep.project.isArchived && dep.isReported) {
        workflow.check(dep.isResolved, 'The issue has unresolved dependencies and thus cannot be set Fixed! (depends on {0})', dep.id);
      }
    });
  },
  requirements: {
    State: {
      type: entities.State.fieldType,
      Fixed: {}
    },
    Depend: {
      type: entities.IssueLinkPrototype,
      outward: 'is required for',
      inward: 'depends on'
    }
  }
});
```

