/*
простановка пидов klarea
*/
/* #count #nocount
	select count(1) from klarea with (nolock) where klcountry_id != 398
*/
do $$
declare
	begin	
	
	raise notice 'Обнуляем PIDы % ', ' Klarea';	
	update 	klarea 
	set 	klarea_pid = null --, pmuser_updid = 1, klarea_upddt = @now
	where 	klcountry_id != 398 and klarea_pid is not null;

	drop table if EXISTS tmp.gpp_kladr_klarea;
	  
	create table tmp.gpp_kladr_klarea as select * from dbo.klarea;
	 
	alter table tmp.gpp_kladr_klarea add pidnid bigint;
	--заполняем пиды

	raise notice 'Заполняем PIDы районов % ', ' Klarea';	
	update tmp.gpp_kladr_klarea ka
	set pidnid=ss.klarea_id
	--select ka.klarea_id, ka.klarea_pid, ka.klarea_name, ka.kladr_code ,ka.kladr_actual, ss.klarea_id, ss.klarea_pid, ss.klarea_name, ss.kladr_code
	from tmp.gpp_kladr_klarea kk
	left join lateral (select	ka1.klarea_id, ka1.klarea_pid, ka1.klarea_name, ka1.kladr_code
				from	klarea ka1 
				where	ka1.kladr_code = rpad(substring(kk.kladr_code, 1, 8),13,'0') order by kladr_actual asc limit 1
				) ss on true
	where kk.klarea_id=ka.klarea_id and kk.klcountry_id=643 and 
	(substring(kk.kladr_code, 9, 3) != '000') and  substring(ss.kladr_code, 1, 8)=substring(kk.kladr_code, 1, 8);

	raise notice 'Заполняем PIDы городов % ', ' Klarea';	
	update tmp.gpp_kladr_klarea ka
	set pidnid=ss.klarea_id
	--select ka.klarea_id, ka.klarea_pid, ka.klarea_name, ka.kladr_code ,ka.kladr_actual, ss.klarea_id, ss.klarea_pid, ss.klarea_name, ss.kladr_code
	from tmp.gpp_kladr_klarea kk
	left join lateral (select	ka1.klarea_id, ka1.klarea_pid, ka1.klarea_name, ka1.kladr_code
				from	klarea ka1 
				where	ka1.kladr_code = rpad(substring(kk.kladr_code, 1, 5),13,'0') order by kladr_actual asc limit 1
				) ss on true
	where kk.klarea_id=ka.klarea_id and kk.klcountry_id=643 and 
	(substring(ka.kladr_code, 6, 3) != '000') and  substring(ss.kladr_code, 1, 5)=substring(ka.kladr_code, 1, 5) and ka.pidnid is null;	

	raise notice 'Заполняем PIDы населенных пунктов % ', ' Klarea';	
	update tmp.gpp_kladr_klarea ka
	set pidnid=ss.klarea_id
	--select ka.klarea_id, ka.klarea_pid, ka.klarea_name, ka.kladr_code ,ka.kladr_actual, ss.klarea_id, ss.klarea_pid, ss.klarea_name, ss.kladr_code
	from tmp.gpp_kladr_klarea kk
	left join lateral (select ka1.klarea_id, ka1.klarea_pid, ka1.klarea_name, ka1.kladr_code
				from	klarea ka1 
				where	ka1.kladr_code = rpad(substring(kk.kladr_code, 1, 2),13,'0') order by kladr_actual asc limit 1
				) ss on true
	where kk.klarea_id=ka.klarea_id and kk.klcountry_id=643 and 
	(substring(ka.kladr_code, 3, 3) != '000') and  substring(ss.kladr_code, 1, 2)=substring(ka.kladr_code, 1, 2) and ka.pidnid is null;

	update dbo.klarea ka
	set klarea_pid=tm.pidnid, pmuser_updid=1, klarea_upddt=now()
	from tmp.gpp_kladr_klarea tm
	where tm.klarea_id = ka.klarea_id and ka.klcountry_id=643 ;
end $$
