Загрузка данных
WITH tessa (path) AS (
SELECT value FROM tools.npf360_settings WHERE "name" = 'TESSA_API'
),
all_rows AS (
SELECT td.*
FROM ourpension.year_tax_deduction td
WHERE td.type != 'NONE'
),
versions AS (
SELECT DISTINCT
application_termination_contract_id,
version AS cert_version
FROM all_rows
),
version_rows AS (
SELECT
v.application_termination_contract_id,
v.cert_version,
(
SELECT td.id
FROM all_rows td
WHERE td.application_termination_contract_id = v.application_termination_contract_id
AND td.version <= v.cert_version
AND (td.canceled IS NULL OR td.canceled > v.cert_version)
ORDER BY td.year DESC, td.id DESC
LIMIT 1
) AS representative_id
FROM versions v
),
ranked_versions AS (
SELECT
vr.*,
ROW_NUMBER() OVER (
PARTITION BY vr.application_termination_contract_id
ORDER BY vr.cert_version DESC
) AS rn
FROM version_rows vr
WHERE vr.representative_id IS NOT NULL
)
SELECT
CASE
WHEN rv.rn = 1 THEN '<span class="glyphicon glyphicon-ok" style="color: green; align-items: center; justify-content: center;"></span>'
ELSE '<span class="glyphicon glyphicon-remove" style="color: red; align-items: center; justify-content: center;"></span>'
END AS actual,
to_char(rv.cert_version, 'DD.MM.YYYY') AS created_at,
to_char(td.date, 'DD.MM.YYYY') AS certificate_date,
td.number AS document_number,
CASE
WHEN contract.entity_id IS NULL
THEN '<a target="_blank" href="view?viewCode=Client_list&id=' || contract.individual_id || '">' || apdi.last_name || ' ' || apdi.first_name || coalesce(' ' || apdi.middle_name, '') || '</a>'
ELSE '<a target="_blank" href="view?viewCode=NCIuIMAW&id=' || contract.entity_id || '">' || e.short_name || '</a>'
END AS client_full_name,
CASE sat.service_type
WHEN 'NPO' THEN 'НПО'
WHEN 'OPS' THEN 'ОПС'
WHEN 'PDS' THEN 'ПДС'
END AS contract_activity_type,
contract.number AS contract_number,
'<a target="_blank" href="view?viewCode=7HPZX8vF&id='||contract.id||'">'||contract.number||'</a>' AS contract_number_link,
sh.number AS account_number,
CASE
WHEN EXISTS (
SELECT 1
FROM report.fns_reference_request_journal fj
WHERE fj.contract_number = contract.number
AND fj.response_received = true
) THEN 'ФНС'
ELSE info.name
END AS receive_method,
a.last_name || ' ' || a.first_name || ' ' || a.middle_name AS created_by_username,
'<a target="_blank" href="view?viewCode=application_rd_npo_pds&id='||atc.id||'">'||atc.number||'</a>' AS application_id,
td.comment AS comment_text,
atc.number AS atc_number,
atc.id AS atc_id,
to_char(contract.date, 'DD.MM.YYYY') AS contract_date,
ind.id AS i_id,
'<a target="_blank" href="' || tessa.path || 'card/'|| td.tessa_card_id ||'" target="_blank">' || td.tessa_card_id || '</a>' AS tessa_card_id,
apdi.last_name || ' ' || apdi.first_name || coalesce(' ' || apdi.middle_name, '') AS full_fl_name,
to_char(td.accepted, 'DD.MM.YYYY HH24:MI:SS') AS accepted,
to_char(td.canceled, 'DD.MM.YYYY HH24:MI:SS') AS canceled,
td.id AS id,
extract(epoch from rv.cert_version)::bigint AS version_key,
dev.get_history_link2('gYRJIbh0','ourpension.year_tax_deduction',td.id,'История изменений') AS history
FROM ranked_versions rv
JOIN ourpension.year_tax_deduction td ON td.id = rv.representative_id
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" == "")
&& ("$!client_full_name" == "")
&& ("$!contract_activity_type" == "")
&& ("$!account_number" == "")
&& ("$!created_at_from" == "")
&& ("$!created_at_to" == "") )
and 1 = 0
#end
#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 rv.cert_version >= to_date(:created_at_from, 'YYYY-MM-DD')
#end
#if ("$!created_at_to" != "")
-- +1 день, чтобы дата "по" была включительно
and rv.cert_version < to_date(:created_at_to, 'YYYY-MM-DD') + interval '1 day'
#end
SELECT
CASE WHEN td.canceled IS NULL THEN '<span class="glyphicon glyphicon-ok" style="color: green; align-items: center; justify-content: center;"></span>'
WHEN td.canceled IS NOT NULL THEN '<span class="glyphicon glyphicon-remove" style="color: red; align-items: center; justify-content: center;"></span>'
ELSE 'не определено>'
END AS actual,
td.year AS year,
CASE td.type
WHEN 'NONE' THEN 'Нет справки'
WHEN 'NOT_RECEIVED' THEN 'Вычет не получен'
WHEN 'RECEIVED' THEN 'Вычет получен'
END AS type,
td.sum_income AS sum_income,
to_char(td.date, 'DD.MM.YYYY') AS date,
td.sum_tax_deduction AS sum_tax_deduction,
td.max_tax_deduction AS max_tax_deduction
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.sharer sh ON sh.id = atcd.sharer_id
LEFT JOIN ourpension.contract contract ON contract.id = sh.contract_id
WHERE 1=1
AND td.number = :document_number
AND td.year >= cast(to_char(contract.date, 'YYYY') as int)
AND td.type != 'NONE'
-- Фильтр по версии справки: строки, входящие в выбранную версию
AND td.version <= to_timestamp(:version_key)
AND (td.canceled IS NULL OR td.canceled > to_timestamp(:version_key))