Загрузка данных
WITH operation(operation_id, credit_mnemonics, debit_mnemonics, value) as (
-- Дебет
select
o.id,
cat.mnemonics,
dat.mnemonics,
t.value
from back_office.operation o
join ourpension.sharer s on s.id = :sharerId
join back_office.transaction t on t.operation_id = o.id
left join back_office.account da on da.id = t.debit_account_id
left join back_office.account ca on ca.id = t.credit_account_id
left join back_office.account_type dat on dat.id = da.account_type_id
left join back_office.account_type cat on cat.id = ca.account_type_id
where o.effective_date <= :effectiveDate
and da.owner_sharer_id = s.id
and da.owner_sharer_id <> coalesce(ca.owner_sharer_id, -1)
union all
-- Кредит
select
o.id,
cat.mnemonics,
dat.mnemonics,
t.value
from back_office.operation o
join ourpension.sharer s on s.id = :sharerId
join back_office.transaction t on t.operation_id = o.id
left join back_office.account da on da.id = t.debit_account_id
left join back_office.account ca on ca.id = t.credit_account_id
left join back_office.account_type dat on dat.id = da.account_type_id
left join back_office.account_type cat on cat.id = ca.account_type_id
where o.effective_date <= :effectiveDate
and ca.owner_sharer_id = s.id
union all
-- Возврат ОПС
select
o.id,
cat.mnemonics,
dat.mnemonics,
t.value
from back_office.operation o
join back_office.ops_payment_return r on r.id = o.ops_payment_return_id
join back_office.ops_payment_register_decision rd on rd.id = r.ops_payment_register_decision_id
join back_office.ops_payment_decision d on d.id = rd.ops_payment_decision_id
join ourpension.ops_pension_assignment_application a on a.id = d.ops_pension_assignment_application_id
join back_office.transaction t on t.operation_id = o.id
join back_office.account da on da.id = t.debit_account_id
join back_office.account ca on ca.id = t.credit_account_id
join back_office.account_type dat on dat.id = da.account_type_id
join back_office.account_type cat on cat.id = ca.account_type_id
where o.effective_date <= :effectiveDate
and ca.owner_individual_id = rd.recipient_individual_id
and a.sharer_id = :sharerId
union all
-- Возврат НПО
select
o.id,
cat.mnemonics,
dat.mnemonics,
t.value
from back_office.operation o
join back_office.payment_return pr on pr.id = o.payment_return_id
join back_office.payment p on p.id = pr.payment_id
join back_office.payment_register r on p.payment_register_id = r.id
join back_office.transaction t on t.operation_id = o.id
join back_office.account da on da.id = t.debit_account_id
join back_office.account ca on ca.id = t.credit_account_id
join back_office.account_type dat on dat.id = da.account_type_id
join back_office.account_type cat on cat.id = ca.account_type_id
where o.effective_date <= :effectiveDate
and ca.owner_individual_id = p.recipient_individual_id
and p.sharer_id = :sharerId
union all
-- Повторная выплата возврата
select
o.id,
cat.mnemonics,
dat.mnemonics,
t.value
from back_office.operation o
join back_office.ops_payment_register_decision rd on rd.ops_payment_register_id = o.ops_payment_register_id
join back_office.ops_payment_return r on r.id = rd.ops_payment_return_id
join back_office.ops_payment_decision d on d.id = rd.ops_payment_decision_id
join ourpension.ops_pension_assignment_application a on a.id = d.ops_pension_assignment_application_id
join back_office.transaction t on t.operation_id = o.id
join back_office.account da on da.id = t.debit_account_id
join back_office.account ca on ca.id = t.credit_account_id
join back_office.account_type dat on dat.id = da.account_type_id
join back_office.account_type cat on cat.id = ca.account_type_id
where o.effective_date <= :effectiveDate
and ca.owner_individual_id = rd.recipient_individual_id
and a.sharer_id = :sharerId
), operation_sorter as (
SELECT
op.id as id,
op.effective_date as effectiveDate,
op.id as operation_id,
m.value as value,
op.approved as approved,
op.period_date as periodDate,
m.credit_mnemonics as creditMnemonics,
m.debit_mnemonics as debitMnemonics,
op.payment_register_id as paymentRegisterId,
op.ops_payment_register_id as opsPaymentRegisterId,
op.operation_type_id as operationTypeId
FROM back_office.operation op
join operation m on m.operation_id = op.id
join back_office.operation_type ot on ot.id = op.operation_type_id
left join back_office.account_type atc on atc.mnemonics = m.credit_mnemonics
left join back_office.account_type atd on atd.mnemonics = m.debit_mnemonics
WHERE
case
when :acc_filter_date <>'' then
cast(:acc_filter_date as date) = cast(op.effective_date as date)
else true
end
and
case
when :acc_filter_period <>'' then
cast(:acc_filter_period as date) = cast(op.period_date as date)
else true
end
and
case
when :acc_filter_oper_type <>'' then
cast(:acc_filter_oper_type as integer) = op.operation_type_id
else true
end
and
case
when :acc_filter_sum <>'' then
cast(m.value as text) like '%'||:acc_filter_sum||'%'
else true
end
and
case
when :acc_filter_in <>'' then
cast(:acc_filter_in as integer) = atc.id
else true
end
and
case
when :acc_filter_out <>'' then
cast(:acc_filter_out as integer) = atd.id
else true
end
ORDER BY op.id DESC
)
SELECT
o.id as id,
to_char(os.effectiveDate, 'DD.MM.YYYY') as effectiveDate,
'<a target="_blank" href="view?viewCode=9CNmoQeC&id='||o.id||'"target="_blank">'||ot.short_name||'</a>' as operationType,
REPLACE(trim(to_char(coalesce(os.value, 0), '99 999 999 999 999 990D99')), '.', ',') as value,
to_char(os.approved, 'DD.MM.YYYY') as approved,
to_char(os.periodDate, 'DD.MM.YYYY') as periodDate,
'<span class="label label-success">' || os.creditMnemonics || '</span>' as creditMnemonics,
'<span class="label label-primary">' || os.debitMnemonics || '</span>' as debitMnemonics,
os.paymentRegisterId as paymentRegisterId,
os.opsPaymentRegisterId as opsPaymentRegisterId,
os.operationTypeId as operationTypeId
FROM operation_sorter os
join back_office.operation o on o.id = os.operation_id
join back_office.operation_type ot on ot.id = o.operation_type_id