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


	const contract = new QueryTable(
						"all_contract",
						{
							onRowDblClick: function (data, index) {
								if ($("#filter_number").val() === null) {
									$("#filter_number_sharer").val("null");
								}
								if ($("#filter_number").val() === undefined) {
									$("#filter_number_sharer").val("undefined");
								}
							},
							initComplete: function (queryAction) {
								//contract.insertActionButton("addContractButton", "Создать", addContract, "btn-succesfull", false, 0);
								contract.addActionButton(
									"editContractButton",
									"Редактировать",
									editContract,
									"btn-primary",
									true
								);
								contract.addActionButton(
									"printApplication",
									"Печать",
									signersFormShow,
									"btn-info",
									true
								);
							},
							onRowSelect: function (data, index) {
								contract_data = data;
								const contractId = data ? data.contractId : -1;
								showContractCard(contractId);
								TargetContributionsTable.reload();
								loadVestingData( data )
							},
							onRowDeselect: function (data, index) {
								hideSourceLink();
								loadVestingData( )
								$('#deathInfo').html('')
								$('#deathInfo').hide()
							},
							drawCallback: function (settings) {
								loadVestingData( )
							},
						},
						function () {
							const data = {};
							const contractData = contract.data();

							data.id = application ? application().id : null;
							data.contract_id = contractData ? contractData.contractId : null;

							if ($("#filter_nonstandard_contract").prop("checked")) {
								data.filterNonstandardContract = true;
							} else {
								data.filterNonstandardContract = false;
							}

							const countPropsBeforeFilter =
										Object.getOwnPropertyNames(data).length;
							//Договор
							if ($("#filter_number").val()) {
								data.filterNumber = $("#filter_number").val();
							}
							if ($("#filter_start_date_contract").val()) {
								data.filterStartDateContract = $(
									"#filter_start_date_contract"
								).val();
							}
							if ($("#filter_end_date_contract").val()) {
								data.filterEndDateContract = $("#filter_end_date_contract").val();
							}
							if ($("#filter_start_date_action").val()) {
								data.filterStartDateAction = $("#filter_start_date_action").val();
							}
							if ($("#filter_end_date_action").val()) {
								data.filterEndDateAction = $("#filter_end_date_action").val();
							}
							if ($("#filter_test_date").val()) {
								data.filterEndDateContract = $("#filter_test_date").val();
							}
							if ($("#filter_service_type").val()) {
								data.filterServiceType = $("#filter_service_type").val();
							}
							if ($("#filter_pension_scheme").val()) {
								data.schemeNumber = $("#filter_pension_scheme").val();
							}

							//Счет
							if ($("#filter_number_sharer").val()) {
								data.filterNumberSharer = $("#filter_number_sharer").val();
							}
							//Вкладчик
							if ($("#filter_insurance_number").val()) {
								data.filterInsuranceNumber = $("#filter_insurance_number").val();
							}
							if ($("#filter_inn").val()) {
								data.filterInn = $("#filter_inn").val();
							}

							if ($("#filter_classification").val()) {
								data.filterClassification = $("#filter_classification").val();
							}
							if ($("#filter_investor_investor").val()) {
								data.filterInvestorFullName = $(
									"#filter_investor_investor"
								).val();
							}

							if ($("#filter_investor_lastName").val()) {
								data.filterInvestorLastName = $(
									"#filter_investor_lastName"
								).val();
							}
							if ($("#filter_investor_firstName").val()) {
								data.filterInvestorFirstName = $(
									"#filter_investor_firstName"
								).val();
							}
							if ($("#filter_investor_middleName").val()) {
								data.filterInvestorMiddleName = $(
									"#filter_investor_middleName"
								).val();
							}
							if ($("#filter_contributor_name").val()) {
								data.filterInvestorShortName = $(
									"#filter_contributor_name"
								).val();
							}
                            
							if ($("#filter_programm").val()) {
								data.filterProgram = $("#filter_programm").select2("data").name;
							}
                            
							if ($("#filter_product").val()) {
								data.filterProduct = $("#filter_product").select2("data").name;
							}

							if ($("#filter_nonstandard_reason").val()) {
								data.filterNonstandardReason = $(
									"#filter_nonstandard_reason"
								).select2("data").id;
							}

							if ($("#filter_status").val()) {
								data.filterStatus = $("#filter_status").select2("data").name;
							}
                            
							if ($("#filter_contract_type").val()) {
								data.filterContractType = $("#filter_contract_type").val();
							}

							// изначально определяем по заполненности фильтра, показывать ли список
                            data.filterShowList =
								countPropsBeforeFilter <
								Object.getOwnPropertyNames(data).length || // ввели что-то в верхнем фильтре
								contract.filter().parts.some(function (value) {
								return (
									["VALUE", "PREDICATE"].includes(value.type) ||
									value.id.includes("NULL")
								);
							}); // ввели условие в универсальном фильтре
                            
							// если фильтр заполнен, то внешний ИД игнорируем
                            if ( data.filterShowList ) {
                                data.id = -1                                
                            }
                            
							// если фильтр пуст, то список показывать будем по внешнему ИД (если указан)
                            data.filterShowList = data.filterShowList || data.id > -1; 

							console.log({ data });

							return data;
						},
						{
							selectFirstRow: true,
						}
					);




SELECT
  ct.id as id,
  ct.id as contractId,
  '<a target="_blank" href="view?viewCode=7HPZX8vF&id=' || ct.id|| '"target="_blank">' || ct.number || '</a>' as number,
  to_char(ct.date, 'DD.MM.YYYY') as date,
  case 
  when p.lifetime_pension='true' 
   then '<span data-toggle="tooltip" title="' || spl.scheme_number || '" class="label label-success">' || spl.scheme_number || '</span>'
   else '<span data-toggle="tooltip" title="' || spl.scheme_number || '" class="label label-primary">' || spl.scheme_number || '</span>'
end as schemeNumber,
  '<span data-toggle="tooltip" title="' || coalesce(uat.activity_name, 'ОПС') || '" class="label label-success">' || coalesce(uat.activity_rus_type, 'ОПС') || '</span>' as clientType,
  case 
  when ct.entity_id is null
    then '<a target="_blank" href="view?viewCode=Client_list&id=' || ct.individual_id || '">' || i.last_name || ' ' || i.first_name || coalesce(' ' || i.middle_name, '') || '</a>'
  else '<a target="_blank" href="view?viewCode=NCIuIMAW&id=' || ct.entity_id || '">' || e.short_name || '</a>'
end as investor,
  '<span data-toggle="tooltip" title="' || to_char(
  case when t.termination_date is not null or ct.close_date is not null
  then coalesce(t.termination_date, ct.close_date)
  else ct.date
  end, 'DD.MM.YYYY') || '" class="label label-primary">' || cs.name || '</span>' as contractLifecycle,
  coalesce(a.last_name,'') || ' ' || left(coalesce(a.first_name, ''), 1) || '.' || coalesce(left(a.middle_name, 1) || '.', '') as agent,
  case
 when ct.service_type = 'PDS' then 'ДДС'
 when ct.service_type = 'NPO' and ct.individual_id is not null then 'ИПП'
 when ct.service_type = 'NPO' and ct.entity_id is not null then 'КПП'
 else ''
end as contractType,
  pp3."name" as program,
  pp2."name" as product,
  ct.number as contractNumber,
  cr.name as closeReasone,
  to_char(t.termination_date, 'DD.MM.YYYY') as terminationDate,
  tr.name as terminationReason,
  to_char(ct.create_date, 'DD.MM.YYYY') as createDate,
  to_char(coalesce(ct.close_date,t.termination_date,ct.date), 'dd.MM.yyyy') as state_date,
  pp3."name" || coalesce('(' || pp2."name" || ')','') as programProduct,
  cs.name as state,
  ct.client_type as clientTypeId,
  coalesce(uat.activity_rus_type, 'ОПС') as serviceType,
  sc.name as saleChannelName,
  fe.name as fund_name,
  i.last_name || ' ' || i.first_name || coalesce(' ' || i.middle_name, '') as investor_fio,
  death_info.id as death_info_id,
  ct.service_type as service_type,
  fsg.name_in_pfr as fund_signed,
  fsr.name_in_pfr as fund_resource 
FROM ourpension.contract as ct

inner join ourpension.current_contract_status(ct.id) as ccs
    on true

inner join ourpension.contract_statuses as cs
    on cs.code = ccs.c_code

inner join ourpension.agent as a
    on a.id = ct.agent_id



left join ourpension.uv_activity_type as uat
    on uat.activity_eng_type = ct.service_type
   and uat.client_type = ct.client_type




left join lateral
(
    select
        tc.contract_id,
        trm.contract_termination_reason_id as termination_reason_id,
        trm.date as termination_date
    from ourpension.termination_contract as tc

    join ourpension.termination as trm
        on trm.id = tc.termination_id

    where tc.contract_id = ct.id

    order by
        trm.date,
        trm.version desc

    limit 1
) as t
    on true


left join ourpension.entity as e
    on e.id = ct.entity_id

left join ourpension.individual as i
    on i.id = ct.individual_id

left join ourpension.pension_scheme as p
    on p.id = ct.scheme_id

left join ourpension.contract_close_reason as cr
    on cr.id = ct.contract_close_reason_id

left join ourpension.contract_termination_reason as tr
    on tr.id = t.termination_reason_id

left join ourpension.information_source as sc
    on sc.id = ct.sale_channel_id

left join ourpension.fund_branch as fb
    on fb.id = a.fund_branch_id

left join ourpension.fund as f
    on f.id = fb.fund_id

left join ourpension.entity as fe
    on fe.id = f.entity_id

left join ourpension.contract_params as cpp
    on cpp.contract_id = ct.id

left join prod_line.pens_product as pp3
    on pp3.id = ct.product_id

left join prod_line.table_param_pl_pens_program as tpp
    on tpp.pens_program_id = pp3.id

left join prod_line.pens_product_param_pl as pppp
    on pppp.id = tpp.pens_product_param_pl_id

left join prod_line.pens_product as pp2
    on pp2.id = pppp.pens_product_id

left join ourpension.fund as fsg
    on fsg.id = ct.sign_fund_id

left join ourpension.fund as fsr
    on fsr.id = ct.fund_id



left join lateral
(
    select
        adi.id,
        adi."number",
        adi.death_date

    from ourpension.application_death_info as adi

    join ourpension.individual as di
        on di.id = adi.individual_id

    join ourpension.agent as da
        on da.id = adi.agent_id

    join ourpension.death_info_certificate as dc
        on dc.code = adi.death_info_certificate_code

    join ourpension.contract_statuses_history as history
        on history.contract_id = ct.id

    where adi.accepted is not null
      and adi.canceled is null
      and adi.rejected is null
      and adi.individual_id = ct.individual_id
      and history.code = 'CA0'
      and adi.death_date <= history.status_date
      and ct.service_type = 'OPS'

) as death_info
    on true


left join lateral
(
    select
        products.id,
        products.pens_scheme_accum_stage_id as scheme_id,
        ps.brief as scheme_number

    from ourpension.contract_product_history as history

    inner join prod_line.pens_product as products
        on products.id = history.pens_product_id

    left join prod_line.pens_scheme as ps
        on ps.id = products.pens_scheme_accum_stage_id

    where history.contract_id = ct.id
      and current_timestamp between
            history.begin_date
            and coalesce(history.end_date, 'infinity')

    limit 1

) as spl
    on true
WHERE     



#if ($filterShowList)
    true
#else
    false
#end


#if ($id != -1)
    and ct.id = :id
#end


#if ($filterNumber && !$filterNumber.isEmpty())
    and ct.number ilike
        replace(
            replace(
                trim(:filterNumber),
                '\',
                '\\'
            ),
            '/',
            '\/'
        ) || '%'
#end


#if ($filterPensionScheme && !$filterPensionScheme.isEmpty())
    and p.number ilike trim(:filterPensionScheme) || '%'
#end