Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DECLARE
- partner_type boolean;
- BEGIN
- SELECT
- "Тип"
- INTO
- partner_type
- FROM
- dblink('application_name="Billing.SpisokPartnerovSUchetomPrav" ' || "СтрокаПодключения",
- $q$
- SELECT
- P3."Тип"
- FROM
- "ПользовательБиллинг" P1
- JOIN
- "ПользовательБиллинг" P2 ON
- P1."Раздел" = P2."@Пользователь"
- JOIN
- "Пользователь" U2 ON
- U2."@Пользователь" = P2."@Пользователь"
- JOIN
- "Партнер" P3 ON
- P1."Раздел" = P3."@Пользователь"
- WHERE
- P1."@Пользователь" = $q$ || "Пользователь" || $q$
- LIMIT
- 1
- $q$) T("Тип" boolean);
- RETURN QUERY
- (
- SELECT
- "Пользователи"
- , "Фильтрация"
- FROM
- dblink('application_name="Billing.SpisokPartnerovSUchetomPrav" ' || "СтрокаПодключения",
- $q$
- WITH RECURSIVE U AS (
- SELECT
- COALESCE(P3."Видимость", P1."Раздел") parent
- , U2."Логин"
- FROM
- "ПользовательБиллинг" P1
- LEFT JOIN
- "ПользовательБиллинг" P2 ON
- P1."Раздел" = P2."@Пользователь"
- LEFT JOIN
- "Пользователь" U2 ON
- U2."@Пользователь" = P2."@Пользователь"
- LEFT JOIN
- "Партнер" P3 ON
- P1."Раздел" = P3."@Пользователь"
- WHERE
- P1."@Пользователь" = $q$ || "Пользователь" || $q$
- )
- , T AS (
- SELECT
- P."@Пользователь"
- FROM
- "ПользовательБиллинг" U
- JOIN
- "Партнер" P
- USING("@Пользователь")
- WHERE
- "@Пользователь" = (
- SELECT
- parent
- FROM
- U
- )
- $q$ ||
- CASE
- WHEN "Подразделение" = 1 THEN $q$ AND "Тип" IS FALSE $q$
- WHEN "Подразделение" = 2 THEN $q$ AND "Тип" IS TRUE $q$
- WHEN "Подразделение" = 0 THEN ''
- ELSE ''
- END
- || $q$
- UNION ALL
- SELECT
- P."@Пользователь"
- FROM
- "Партнер" P
- JOIN
- T ON
- T."@Пользователь" = P."Раздел"
- )
- SELECT
- coalesce(array_agg("@Пользователь"::integer), '{}')
- , coalesce((
- SELECT
- "Логин" <> '__сбис__биллинг' AND "Логин" <> '__сбис__администратор' AND "Логин" IS NOT NULL OR "Логин" IS NULL
- FROM
- U
- ), true)
- FROM
- $q$ ||
- CASE
- WHEN partner_type IS TRUE THEN
- $q$
- (
- SELECT
- "@Пользователь"
- FROM
- "Партнер"
- WHERE
- "Тип" IS TRUE
- UNION
- SELECT
- "@Пользователь"
- FROM
- T
- ) T
- $q$
- ELSE $q$ T $q$
- END
- || $q$
- $q$
- ) T("Пользователи" integer[], "Фильтрация" boolean)
- );
- END
Add Comment
Please, Sign In to add comment