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


WITH tessa (path) AS (
    SELECT value
    FROM tools.npf360_settings
    WHERE "name" = 'TESSA_API'
),

base AS (
    SELECT
        td.id,
        td.canceled,
        td.accepted,
        td.version,
        td.date,
        td.number,
        td.year,
        td.type,
        td.comment,
        td.tessa_card_id,
        td.agent_id,

        atc.id AS atc_id,
        atc.number AS atc_number,

        contract.id AS contract_id,
        contract.number AS contract_number,
        contract.date AS contract_date,
        contract.entity_id,
        contract.individual_id AS contract_individual_id,

        apdi.last_name,
        apdi.first_name,
        apdi.middle_name,

        e.short_name,

        sat.service_type,

        sh.number AS account_number,

        info.name AS information_source_name,

        a.last_name AS agent_last_name,
        a.first_name AS agent_first_name,
        a.middle_name AS agent_middle_name,

        ind.id AS i_id,

        tessa.path AS tessa_path,

        row_number() over (
            partition by contract.number, td.year
            order by td.id desc
        ) as rn

    FROM ourpension.year_tax_deduction td
    LEFT JOIN ourpension.application_termination_contract atc
        ON atc.id = td.application_termination_contract_id
    LEFT JOIN ourpension.application_personal_data_individual apdi
        ON apdi.id = atc.application_personal_data_individual_id
    LEFT JOIN ourpension.application_termination_contract_data atcd
        ON atcd.application_termination_contract_id = atc.id
    LEFT JOIN ourpension.individual ind
        ON ind.id = apdi.individual_id
    LEFT JOIN ourpension.sharer sh
        ON sh.id = atcd.sharer_id
    LEFT JOIN ourpension.contract contract
        ON contract.id = sh.contract_id
    LEFT JOIN ourpension.service_app_type sat
        ON atc.service_app_type_code = sat.code
    LEFT JOIN ourpension.agent a
        ON td.agent_id = a.id
    LEFT JOIN ourpension.information_source info
        ON info.id = atc.information_source_id
    LEFT JOIN ourpension.entity e
        ON e.id = contract.entity_id
    CROSS JOIN tessa

    WHERE td.type != 'NONE'
      AND 1 = 1

    #if ("${!contract_number}" != "")
        AND contract.number ILIKE '%' || replace(:contract_number, chr(92), chr(92) || chr(92)) || '%' ESCAPE chr(92)
    #end

    #if ("${!client_full_name}" != "")
        AND apdi.last_name || ' ' || apdi.first_name || ' ' || apdi.middle_name ILIKE '%' || :client_full_name || '%'
    #end

    #if ("${!contract_activity_type}" != "")
        AND sat.service_type = cast(:contract_activity_type AS ourpension.service_type)
    #end

    #if ("${!account_number}" != "")
        AND sh.number ILIKE '%' || :account_number || '%'
    #end

    #if ("${!created_at_from}" != "")
        AND td.version >= to_date(:created_at_from, 'YYYY-MM-DD')
    #end

    #if ("${!created_at_to}" != "")
        AND td.version < to_date(:created_at_to, 'YYYY-MM-DD') + interval '1 day'
    #end
)

SELECT
    CASE
        WHEN q.canceled IS NULL THEN '<span class="glyphicon glyphicon-ok" style="color: green; align-items: center; justify-content: center;"></span>'
        WHEN q.canceled IS NOT NULL THEN '<span class="glyphicon glyphicon-remove" style="color: red; align-items: center; justify-content: center;"></span>'
        ELSE 'не определено'
    END AS actual,

    to_char(q.version, 'DD.MM.YYYY') AS created_at,
    to_char(q.date, 'DD.MM.YYYY') AS certificate_date,

    q.number AS document_number,

    CASE
        WHEN q.entity_id IS NULL
        THEN '<a target="_blank" href="view?viewCode=Client_list&id=' || q.contract_individual_id || '">' ||
             q.last_name || ' ' || q.first_name || coalesce(' ' || q.middle_name, '') ||
             '</a>'
        ELSE '<a target="_blank" href="view?viewCode=NCIuIMAW&id=' || q.entity_id || '">' ||
             q.short_name ||
             '</a>'
    END AS client_full_name,

    CASE q.service_type
        WHEN 'NPO' THEN 'НПО'
        WHEN 'OPS' THEN 'ОПС'
        WHEN 'PDS' THEN 'ПДС'
    END AS contract_activity_type,

    q.contract_number AS contract_number,

    '<a target="_blank" href="view?viewCode=7HPZX8vF&id=' || q.contract_id || '">' ||
    q.contract_number ||
    '</a>' AS contract_number_link,

    q.account_number AS account_number,

    CASE
        WHEN EXISTS (
            SELECT 1
            FROM report.fns_reference_request_journal fj
            WHERE fj.contract_number = q.contract_number
              AND fj.response_received = true
        )
        THEN 'ФНС'
        ELSE q.information_source_name
    END AS receive_method,

    q.agent_last_name || ' ' || q.agent_first_name || ' ' || q.agent_middle_name AS created_by_username,

    '<a target="_blank" href="view?viewCode=application_rd_npo_pds&id=' || q.atc_id || '">' ||
    q.atc_number ||
    '</a>' AS application_id,

    q.comment AS comment_text,

    q.atc_number AS atc_number,
    q.atc_id AS atc_id,

    to_char(q.contract_date, 'DD.MM.YYYY') AS contract_date,

    q.i_id AS i_id,

    '<a target="_blank" href="' || q.tessa_path || 'card/' || q.tessa_card_id || '" target="_blank">' ||
    q.tessa_card_id ||
    '</a>' AS tessa_card_id,

    q.last_name || ' ' || q.first_name || coalesce(' ' || q.middle_name, '') AS full_fl_name,

    to_char(q.accepted, 'DD.MM.YYYY HH24:MI:SS') AS accepted,
    to_char(q.canceled, 'DD.MM.YYYY HH24:MI:SS') AS canceled,

    q.id AS id,

    dev.get_history_link2(
        'gYRJIbh0',
        'ourpension.year_tax_deduction',
        q.id,
        'История изменений'
    ) AS history

FROM base q
WHERE q.rn = 1
ORDER BY q.year;