Загрузка данных
SELECT
sh.id as id,
'<a target="_blank" href="view?viewCode=Client_list&id=' || sh.individual_id||'">'||
rtrim(i.last_name || ' ' || i.first_name || ' ' || coalesce(i.middle_name, '')) ||'</a>' as fio,
to_char(i.birth_date, 'dd.MM.yyyy') as birthDate,
coalesce(uat.activity_rus_type, 'ОПС') as serviceTypeRus,
'<a target="_blank" href="view?viewCode=Pzbmp8Pg&id=' || sh.id|| '"target="_blank">' || sh.number || '</a>' as number,
to_char(sh.open_date, 'dd.MM.yyyy') as date,
s_types.label as sharer_type,
to_char(sh.close_date, 'dd.MM.yyyy') as closeDate,
to_char(di.death_date, 'dd.MM.yyyy') as deathDate,
pp.name as programName,
trim(to_char(coalesce(b1s.curr_state, 0), '99 999 999 999 999 990D99')) as sharerCurrState,
trim(to_char(coalesce(b.curr_state, 0), '99 999 999 999 999 990D99')) as sharerCurrState360,
(select state from utils.get_sharer_state_on_date(sh.id)) as state,
(select name from ourpension.sharer_statuses where code = ourpension.current_sharer_status(sh.id) limit 1) as stateNpf360
FROM ourpension.sharer sh
JOIN ourpension.contract c ON c.id = sh.contract_id and c.id = :contractId
JOIN ourpension.individual i ON sh.individual_id = i.id
LEFT JOIN ourpension.sharer_params s_params ON s_params.sharer_id = sh.id
LEFT JOIN ourpension.voc_sharer_types s_types ON s_types.code = s_params.sharer_type
left join ourpension.pension_program pp on pp.id = sh.pension_program_id
left join lateral
(select individual_id, death_date
from(
select a.individual_id, a.death_date,
row_number() over (partition by a.individual_id order by a.version desc) num
from ourpension.application_death_info a
where a.individual_id = i.id
and a.accepted is not null
and a.canceled is null
and a.rejected is null
) d where num = 1
) di on true
left join lateral(
select
sum(b.total_credit - b.total_debit) curr_state
from back_office.account a
join back_office.balance b on a.id = b.account_id and coalesce(:effectiveDate, current_date) between b.start_date and b.end_date
where a.owner_sharer_id = sh.id
) b on 1 = 1
left join lateral(
select id, sum(balanceN) balanceN, sum(balance) curr_state from (
select
shb.id as id,
sum(case when atg.mnemonics = 'Н' then io.val_num end) as balanceN,
sum(io.val_num) as balance
from mgr.imp_obj io
join ourpension.sharer shb on shb.id = sh.id and io.npf360_id = shb.contract_id
join back_office.account_type at on io.code = at.mnemonics
join back_office.account_type_group atg on at.account_type_group_id = atg.id
and atg.mnemonics in ('Н', 'Р(С)', 'Р(П)', 'Р(Е)', 'Р ПП', 'Р Н')
where io.service_type = 'OPS' and io.add_dt <= coalesce(:effectiveDate, current_date)
group by shb.id
union all
select
shb.id as id,
sum(io.val_num) as balanceN,
sum(io.val_num) as balance
from mgr.imp_obj io
join ourpension.sharer shb on shb.id = sh.id and io.npf360_id = shb.id
where io.service_type <> 'OPS'
group by shb.id
)
group by id
) b1s on true
----, utils.get_sharer_state_on_date(s.id) state
--join utils.get_sharer_state_ops_on_date(null, null, null) state on s.id = state.sharer_id
left join ourpension.uv_activity_type uat on c.client_type = uat.client_type and c.service_type = uat.activity_eng_type
where
1=1
#if ($filterFio && !$filterFio.isEmpty())
and rtrim(i.last_name || ' ' || i.first_name || ' ' || coalesce(i.middle_name, '')) ilike trim(:filterFio) || '%'
#end
#if ($filterServiceTypeRus && !$filterServiceTypeRus.isEmpty())
and uat.activity_rus_type ilike trim(:filterServiceTypeRus) || '%'
#end
#if ($filterBirthDate && !$filterBirthDate.isEmpty())
and i.birth_date =:filterBirthDate
#end
#if ($filterNumber && !$filterNumber.isEmpty())
and sh.number ilike trim(:filterNumber) || '%'
#end
#if ($filterOpenDate && !$filterOpenDate.isEmpty())
and sh.open_date = :filterOpenDate
#end
#if ($filterCloseDate && !$filterCloseDate.isEmpty())
and sh.close_date = :filterOpenDate
#end
#if ($filterNumberProgram && !$filterNumberProgram.isEmpty())
and pp.number ilike trim(:filterNumberProgram) || '%'
#end