Files
tnsu-approval-route/backend/Tnsu.ApprovalRoute.Domain/Entities/TemplateRouteStepCondition.cs
T
gorbenko.pavel 10c3057eff Несколько условий шага, объединяемых через И/ИЛИ
Раньше шаг маршрута мог нести ровно одно условие (field_name/operation/
value). Теперь условий может быть сколько угодно, а их объединение задаётся
явно — ConditionsLogic.And (все условия) или .Or (любое из условий).

Бэкенд:
- Новая сущность TemplateRouteStepCondition (дочерняя таблица
  template_route_step_conditions, FK на шаг, cascade delete) вместо трёх
  колонок на TemplateRouteStep. Миграция AddMultipleStepConditions переносит
  существующие условия шагов в новую таблицу перед удалением старых колонок,
  чтобы не потерять уже настроенные в деве/проде условия.
- TemplateRouteService.MatchesConditions: несколько условий шага объединяются
  по ConditionsLogic (Any/All); HasUnevaluatableManagerCondition проверяет
  условие на IsManager в списке условий, а не единственное поле.
- TemplateRouteStepService: дубликаты шагов теперь сравниваются по всему
  набору условий (без учёта порядка) и, если условий два и более, по логике
  их объединения — сравнение в памяти, а не в SQL, кандидатов на дубликат
  в пределах маршрута всегда мало.
- Валидация условия: раньше «все три поля или ни одного», теперь — в каждом
  элементе списка все три поля обязательны.

Фронтенд:
- RouteStepFormModal: условие — динамический список строк (добавить/удалить),
  у каждой строки свой набор допустимых операторов по типу колонки; селектор
  И/ИЛИ появляется, когда условий два и больше.
- describeStepCondition в таблице шагов склеивает все условия через « И »/« ИЛИ ».

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-25 09:56:36 +05:00

25 lines
1.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Tnsu.ApprovalRoute.Domain.Enums;
namespace Tnsu.ApprovalRoute.Domain.Entities;
/// <summary>
/// Одно условие появления шага (см. <see cref="TemplateRouteStep.Conditions"/>) —
/// сравнение значения поля заявки (<see cref="FieldName"/>) с <see cref="Value"/>
/// через <see cref="Operation"/>. Несколько условий одного шага объединяются
/// через <see cref="TemplateRouteStep.ConditionsLogic"/> (И/ИЛИ).
/// </summary>
public class TemplateRouteStepCondition
{
public int Id { get; set; }
public int StepId { get; set; }
public TemplateRouteStep? Step { get; set; }
/// <summary>Порядок отображения в форме — на вычисление условия не влияет.</summary>
public int OrderNo { get; set; }
public string FieldName { get; set; } = string.Empty;
public ComparisonOperator Operation { get; set; }
public string Value { get; set; } = string.Empty;
}