CDB3-7948 [GFW] Валідація на унікальність productEntity.id та комбінації productEntity.id + productEntity.lotId
При публікації процедури на ЦБД має бути валідація, яка перевіряє, що одночасно існує тільки одна процедура факторингу на один тендер або лот в нетермінальному статусі (крім complete).
Якщо процедура публікується з зазначенням productEntity.id ТА productEntity.lotId, ми маємо робити перевірку на комбінацію цих двох значень, і якщо знайдено процедуру з таким самим productEntity.id та productEntity.lotId в нетермінальному статусі (крім complete), повернути помилку "Факторинг за цим лотом вже було створено".
Якщо процедура публікується з зазначенням лише productEntity.id, необхідно зробити перевірку на наявність процедур в ЦБД з зазначеним productEntity.id, якщо такі процедури знайдено (як з productEntity.lotId, так і без), і статус знайдених процедур нетермінальний (крім complete), в такому випадку необхідно повернути помилку "Факторинг за цим лотом вже було створено".
Приклади комбінацій:
- Публікую процедуру з productEntity.id1. Якщо знайдено співпадіння по productEntity.id1, і статус знайденої процедури != unsuccessful, cancelled, вертаємо помилку.
- Якщо знайдено процедуру з productEntity.id1 та productEntity.lotId1, і статус знайденої процедури != unsuccessful, cancelled, вертаємо помилку.
- Публікую процедуру з productEntity.id1 та productEntity.lotId1. Якщо знайдено співпадіння по productEntity.id1 (тобто така процедура є, але її було створено без лоту), і статус процедури != unsuccessful, cancelled, вертаємо помилку. В цьому кейсі і потрібна валідація майданчика на етапі створення процедури, не давати можливості організатору створити процедуру без лотів, якщо лоти є на закупках.
- Публікую процедуру з productEntity.id1 та productEntity.lotId1. Якщо знайдено співпадіння по productEntity.id1, і по productEntity.lotId1, і статус процедури != unsuccessful, cancelled, вертаємо помилку.
- Публікую процедуру з productEntity.id1 та productEntity.lotId2. Якщо знайдено співпадіння по productEntity.id1, а по productEntity.lotId2 співпадінь немає, публікуємо успішно процедуру