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


/*пока только для УОПС-П:
	ищем руководителя сотрудника, создающего выгрузку, с доверенностью;
	если его нет, то берем гендира из настроек фонда*/
with recursive d as
(
	select dv.id, dv.parent_id, dv.name as division, dv.id_manager_department_employee as chief_id, 
	ch.last_name, ch.first_name, ch.middle_name, pos.id as position_id, pos.position, 1 as level_id
	from ourpension.agent a 
		join ourpension.subdivision dv on a.code_subdivision = dv.id
		join ourpension.agent ch on dv.id_manager_department_employee = ch.id
		join ourpension.agent_position pos on pos.agent_id = ch.id
	where a.user_id = :user_id
		and :registerType in('УОПС-П') 
	union all
	select dv.id, dv.parent_id, dv.name as division, dv.id_manager_department_employee as chief_id, 
	ch.last_name, ch.first_name, ch.middle_name, pos.id as position_id, pos.position, d.level_id + 1 as level_id
	from d
		join ourpension.subdivision dv on d.parent_id = dv.id
		join ourpension.agent ch on dv.id_manager_department_employee = ch.id
		join ourpension.agent_position pos on pos.agent_id = ch.id
),
trusted_chief as
(
	select level_id, row_number() over(order by level_id desc) as rn, chief_id, 
		last_name as chief_last_name, first_name as chief_first_name, middle_name as chief_middle_name, 
		position_id, position as chief_position
	from d
	where position = 'Директор департамента'
		and exists
		(select 1
			from ourpension.letter_of_attorney l
				join ourpension.letter_of_attorney_document_type ladt on l.id = ladt.loa_id
				join ourpension.document_type_for_sign dt on dt.id = ladt.dt_id 
					and dt.id = 9 --Руководитель для выгрузкок XML ОПС ПФР
			where l.agent_position_id = d.position_id
				and l.expire_date >= current_date
		)
)
insert into report.smev_register
	(id,  number, 
	 date, year, 
	 smev_register_type_code, username, guid, 
	 fund_pfr_name, juridical_form, short_name, inn, kpp, 
	 email, fax_number, address, postcode, 																				
	 city_name, city_prefix, street_name, street_prefix, house,  
	 director_position, director_last_name, director_first_name, director_middle_name, phone_number, 
	 agent_last_name, agent_first_name, agent_middle_name, repeated, accepted, description)
select  :registerId,
	 case when :registrationNumberSequence is not null THEN cast (nextval(:registrationNumberSequence) as varchar (10)) 
				else(select 	 
							cast ((serial_number + 1) as varchar (10)) 
						 from dev.unique_number where code = 'smev_register')
	 end as number,
   now() as date, date_part('year', now()) as year,
	 :registerType,	:username,  :guid,
	 f.name_in_pfr, 'Акционерное общество' as juridical_form, e.name, e.inn, e.kpp,
	 e.email, regexp_replace(e.fax_number, '[^0-9]', '', 'g'),  aj.address_text, aj.postcode,
   aj.city_name, aj.city_prefix, aj.street_name, aj.street_prefix, aj.house,
	 case when ch.chief_id is not null then chief_position else f.director_position end as director_position, 
	 case when ch.chief_id is not null then chief_last_name else split_part(f.director, ' ', 1) end,
   case when ch.chief_id is not null then chief_first_name else split_part(f.director, ' ', 2) end,
   case when ch.chief_id is not null then chief_middle_name else split_part(f.director, ' ', 3) end,
	 regexp_replace(e.phone_number, '[^0-9]', '', 'g'),
	 a.last_name, a.first_name, a.middle_name, 	
	 cast( :repeated as boolean), now() as accepted,  :description
from ourpension.fund f
	join ourpension.entity e on e.id = f.entity_id
	join ourpension.address aj on aj.id = e.registration_address_id
	join ourpension.fund_branch fb on f.id = fb.fund_id
	join ourpension.agent a on a.fund_branch_id = fb.id
	left join trusted_chief ch on ch.rn = 1
where a.user_id = :user_id



update dev.unique_number 
	set serial_number = serial_number+1
where code = 'smev_register'