Загрузка данных


BEGIN;

-- Чтобы между вычислением MAX(id) и вставкой
-- никто параллельно не занял те же id.
LOCK TABLE back_office.operation_type IN EXCLUSIVE MODE;


WITH new_operations (
    code,
    name,
    short_name,
    template_code
) AS (
    VALUES

    (
        'NPO_TARGET_CONTRIBUTIONS_SR',
        'Целевые взносы в СР',
        'Р С',
        'NPO_TARGET_CONTRIBUTIONS'
    ),

    (
        'NPO_TARGET_CONTRIBUTIONS_SS',
        'Целевые взносы в СС',
        'С С',
        'NPO_TARGET_CONTRIBUTIONS'
    ),

    (
        'NPO_RETURN_PENSION_PAYMENT',
        'Возврат выплаты негосударственной пенсии',
        'Возврат НП',
        'NPO_RETURN_RPPO_PENSION_PAYMENT'
    ),

    (
        'NPO_RETURN_RPPO_SUCCESSOR_PAYMENT',
        'Возврат в РППО выплат правопреемникам',
        'Возврат в РППО -ВС ПП',
        'NPO_RETURN_SUCCESSOR_PAYMENT'
    ),

    (
        'NPO_RETURN_RPPO_REDEMPTION_SUM',
        'Возврат в РППО выплат выкупных сумм',
        'Возврат в РППО-ВС',
        'NPO_RETURN_REDEMPTION_SUM'
    ),

    (
        'SECOND_PAYMENT_PENSION',
        'Повторная выплата негосударственных пенсий',
        'Повторная выплата НП',
        'NPO_PAYMENT_PENSION'
    ),

    (
        'SECOND_PAYMENT_SUCCESSOR',
        'Повторная выплата правопреемникам',
        'Повторная выплата ВС ПП',
        'NPO_PAYMENT_SUCCESSOR'
    ),

    (
        'SECOND_PAYMENT_TERMINATED',
        'Повторная выплата выкупных сумм',
        'Повторная выплата ВС',
        'NPO_PAYMENT_TERMINATED'
    )
),
base_id AS (
    SELECT MAX(id) AS max_id
    FROM back_office.operation_type
),
prepared AS (
    SELECT
        n.*,
        ROW_NUMBER() OVER (ORDER BY n.code) AS rn
    FROM new_operations n
)
INSERT INTO back_office.operation_type (
    id,
    code,
    "name",
    short_name,
    group_code,
    "service_type",
    name_old,
    short_name_old,
    auto_approver,
    display_in_lkk,
    name_for_statement,
    display_in_statement,
    type_movement,
    settings_transaction_extended_id
)
SELECT
    b.max_id + p.rn,
    p.code,
    p.name,
    p.short_name,

    t.group_code,
    t."service_type",

    t.name_old,
    t.short_name_old,

    t.auto_approver,
    t.display_in_lkk,

    -- Пока сохраняем поведение операции-аналога.
    t.name_for_statement,

    t.display_in_statement,
    t.type_movement,
    t.settings_transaction_extended_id

FROM prepared p
CROSS JOIN base_id b
JOIN back_office.operation_type t
    ON t.code = p.template_code

WHERE NOT EXISTS (
    SELECT 1
    FROM back_office.operation_type x
    WHERE x.code = p.code
);






SELECT
    id,
    code,
    name,
    short_name,
    group_code,
    service_type,
    type_movement,
    auto_approver,
    display_in_lkk,
    name_for_statement,
    display_in_statement,
    settings_transaction_extended_id
FROM back_office.operation_type
WHERE code IN (
    'NPO_TARGET_CONTRIBUTIONS_SR',
    'NPO_TARGET_CONTRIBUTIONS_SS',
    'NPO_RETURN_PENSION_PAYMENT',
    'NPO_RETURN_RPPO_SUCCESSOR_PAYMENT',
    'NPO_RETURN_RPPO_REDEMPTION_SUM',
    'SECOND_PAYMENT_PENSION',
    'SECOND_PAYMENT_SUCCESSOR',
    'SECOND_PAYMENT_TERMINATED'
)
ORDER BY id;