drop function if exists staging2.fn_PTO_GVG_block;
CREATE OR REPLACE FUNCTION staging2.fn_PTO_GVG_block(p_client_id int,p_function_id int, p_file_mnemonic text,
p_file_sheet_mnemonic text, p_file_syspk int)
   RETURNS text AS $$
   declare __make text;
   declare __model text;
   
   declare __client_id int :=p_client_id;
   declare __function_id int :=p_function_id;
   declare __file_mnemonic text  :=p_file_mnemonic;
   declare __file_sheet_mnemonic text :=p_file_sheet_mnemonic;
   declare __file_syspk int :=p_file_syspk;
   declare err_state   text;
   declare err_msg     text;
   declare err_detail  text;
   declare err_hint    text;
   declare err_context text;   
   declare err_query int;
   declare err_block text; 
   
 begin
/************************************************************************************
Function Name:fn_PTOBEN_GVG_block
Function Desc: This function populates data into staging2 blocks
File Format: PTOBEN
Sheet Format: PTOBEN_GVG
Creation Date: April 27 2021
Updation Date:
Author: compegence team
Function Call: select staging2.fn_PTO_GVG_block(1,1,'PTOBEN','PTOBEN_GVG',944)
***************************************************************************************/

SET search_path TO  staging2;


/* rerunnability - delete block tables and update config tables to null */
truncate table staging2.stg_specific_table_PTOBEN_GVG;
truncate table staging2.stg_process_table_PTOBEN_GVG;
truncate table staging2.PTOBEN_GVG_performance_governing_trails_block;


execute 'delete from fw_core.fw_jobctl_file_sheet_block_run_schedule where file_syspk='||p_file_syspk||' and file_sheet_mnemonic='''||p_file_sheet_mnemonic||'''';

execute 'update transactional.source_config a
set row_number_start=null,
row_previous_number=null,
row_read_end=null,
run_time=null
where   a.file_mnemonic='''||p_file_mnemonic||''' and a.file_sheet_mnemonic='''||p_file_sheet_mnemonic||'''';

/* transfer data from generic to specific for PTOBEN */
execute 'insert into  staging2.stg_specific_table_PTOBEN_GVG 
select * from staging1.staging_generic_table a
where   a.file_mnemonic='''||p_file_mnemonic||''' and a.file_sheet_mnemonic='''||p_file_sheet_mnemonic||'''
and a.file_syspk='||p_file_syspk||'';

select count(*) into err_query from staging2.stg_specific_table_PTOBEN_GVG;

if err_query=0 then
err_context := 'data not present';
	raise exception using 
	      message = 'No Data for pto',
          detail = 'No data in table stg_specific_table_PTOBEN_PRF',  
          errcode = 'PTO', 
          hint = 'check sheet mnemonic in generic table, if it is null update it';
end if;	


/* trimming data */
update staging2.stg_specific_table_PTOBEN_GVG set column3 =  TRIM (TRAILING FROM column3 );
update staging2.stg_specific_table_PTOBEN_GVG set column3 =  TRIM (LEADING FROM column3 );

update transactional.source_config set F1_modified =  TRIM (TRAILING FROM F1_modified) ;
update transactional.source_config set F1_modified =  TRIM (LEADING FROM F1_modified) ;
update transactional.source_config set F1_source=F1_modified ;
update transactional.source_config set F1_source =  TRIM (TRAILING FROM F1_source);
update transactional.source_config set F1_source =  TRIM (LEADING FROM F1_source);

execute 'update transactional.source_config a  
set row_number_start=(select min(b.row_number)
from staging2.stg_specific_table_PTOBEN_GVG  b
where trim(upper(F1_modified))=trim(upper(column2))
and b.is_rownumber_fetched is null)
where a.row_number_start is null
and a.file_mnemonic='''||p_file_mnemonic||''' and a.file_sheet_mnemonic='''||p_file_sheet_mnemonic||'''';

/* keyword match in config table*/
execute 'update staging2.stg_specific_table_PTOBEN_GVG  a  
set is_rownumber_fetched=1
from transactional.source_config  b
where trim(upper(F1_modified))=trim(upper(column3))
and b.row_number_start=a.row_number
and is_rownumber_fetched is null
and a.file_mnemonic='''||p_file_mnemonic||''' and a.file_sheet_mnemonic='''||p_file_sheet_mnemonic||'''';

execute 'update transactional.source_config a set row_previous_number=row_number_start-1
where a.file_mnemonic='''||p_file_mnemonic||''' and a.file_sheet_mnemonic='''||p_file_sheet_mnemonic||'''';

execute 'update transactional.source_config a
set row_read_end= (select b.row_number_start
from transactional.source_config b 
where b.syspk=a.syspk+1 and file_mnemonic='''||p_file_mnemonic||''' and file_sheet_mnemonic='''||p_file_sheet_mnemonic||''' ) 
where a.file_mnemonic='''||p_file_mnemonic||''' and a.file_sheet_mnemonic='''||p_file_sheet_mnemonic||'''';


/* config file last field update as null otherwise it picks up next format row number*/
execute 'update transactional.source_config a 
set row_read_end = null ,run_time=current_timestamp
where f1_modified =''Graphs - for Example'' 
and a.file_mnemonic='''||p_file_mnemonic||''' and a.file_sheet_mnemonic='''||p_file_sheet_mnemonic||'''';

/* tagging block_row_numbers*/

execute 'insert into staging2.stg_process_table_PTOBEN_GVG
select a.* , RANK () OVER ( ORDER BY row_number) as block_row_number,b.block_tag as block_tag
from  staging2.stg_specific_table_PTOBEN_GVG  a
join transactional.source_config b 
on a.row_number >=row_number_start 
and (a.row_number< row_read_end or row_read_end is null)
and f1_modified=''Data Inputs''
and  b.file_mnemonic='''||p_file_mnemonic||''' and b.file_sheet_mnemonic='''||p_file_sheet_mnemonic||'''';

execute 'insert into staging2.stg_process_table_PTOBEN_GVG
select a.* , RANK () OVER ( ORDER BY row_number) as block_row_number,b.block_tag as block_tag
from  staging2.stg_specific_table_PTOBEN_GVG  a
join transactional.source_config b 
on a.row_number >=row_number_start 
and (a.row_number< row_read_end or row_read_end is null)
and f1_modified=''Graphs - for Example''
and  b.file_mnemonic='''||p_file_mnemonic||''' and b.file_sheet_mnemonic='''||p_file_sheet_mnemonic||'''';

select column5 into __make from staging2.stg_process_table_PTOBEN_PRF a
where  block_tag='PTOBEN_PRF_Key_Performance_Parameters' and block_row_number=7 ;

select column5  into __model from staging2.stg_process_table_PTOBEN_PRF a
where  block_tag='PTOBEN_PRF_Key_Performance_Parameters' and block_row_number=9;


/* block  PTOBEN_GVG_performance_governing_trails_block */

perform fw_core.fn_jobctl_block_begin(__client_id,__function_id,__file_syspk,
'PTOBEN_GVG_performance_governing_trails_block',__file_mnemonic,__file_sheet_mnemonic,1); 

err_block := 'PTOBEN_GVG_performance_governing_trails_block';

insert into staging2.PTOBEN_GVG_performance_governing_trails_block
(
c2,
c3,
c4,
c5,
c6,
c7,
c8,
c9,
c10,
c11,
c12,
c13,
c14,
c15,
c16,
c17,
c18,
c19,
c20,
c21,
c22,
c23,
c24,
c25,
c26,
c27,
c28,
c29,
c30,
c31,
c32,
c33,
c34,
c35,
c36,
c37,
c38,
c39,
c40,
c41,
c42,
c43,
c44,
c45,
c46,
c47,
c48,
c49,
c50,
c51,
block_row_number
)

select column2,
column3,
column4,
column5,
column6,
column7,
column8,
column9,
column10,
column11,
column12,
column13,
column14,
column15,
column16,
column17,
column18,
column19,
column20,
column21,
column22,
column23,
column24,
column25,
column26,
column27,
column28,
column29,
column30,
column31,
column32,
column33,
column34,
column35,
column36,
column37,
column38,
column39,
column40,
column41,
column42,
column43,
column44,
column45,
column46,
column47,
column48,
column49,
column50,
column51,
block_row_number
 from staging2.stg_process_table_PTOBEN_GVG a
where  block_tag='PTOBEN_GVG_data_inputs';

update staging2.PTOBEN_GVG_performance_governing_trails_block
set test_condition=c2
where block_row_number=2;

update staging2.PTOBEN_GVG_performance_governing_trails_block
set c2=null
where block_row_number=2;

update staging2.PTOBEN_GVG_performance_governing_trails_block a 
set test_condition= b.first_value from (SELECT
  block_row_number, test_condition, value_partition, first_value(test_condition) over (partition by value_partition order by block_row_number)
FROM (
  SELECT
    block_row_number,
    test_condition,
    sum(case when test_condition is null then 0 else 1 end) over (order by block_row_number) as value_partition  
    FROM staging2.PTOBEN_GVG_performance_governing_trails_block 
  ORDER BY block_row_number ASC
) as q) b where a.block_row_number = b.block_row_number ;

update  staging2.PTOBEN_GVG_performance_governing_trails_block 
set c1=c2 where block_row_number=5;

update staging2.PTOBEN_GVG_performance_governing_trails_block a 
set c1= b.first_value from (SELECT
  block_row_number, c1, value_partition, first_value(c1) over (partition by value_partition order by block_row_number)
FROM (
  SELECT
    block_row_number,
    c1,
    sum(case when c1 is null then 0 else 1 end) over (order by block_row_number) as value_partition  
    FROM staging2.PTOBEN_GVG_performance_governing_trails_block 
  ORDER BY block_row_number ASC
) as q) b where a.block_row_number = b.block_row_number ;


update  staging2.PTOBEN_GVG_performance_governing_trails_block 
set c7_1=c7 where block_row_number=5;

update staging2.PTOBEN_GVG_performance_governing_trails_block a 
set c7_1= b.first_value from (SELECT
  block_row_number, c7_1, value_partition, first_value(c7_1) over (partition by value_partition order by block_row_number)
FROM (
  SELECT
    block_row_number,
    c7_1,
    sum(case when c7_1 is null then 0 else 1 end) over (order by block_row_number) as value_partition  
    FROM staging2.PTOBEN_GVG_performance_governing_trails_block 
  ORDER BY block_row_number ASC
) as q) b where a.block_row_number = b.block_row_number ;

update  staging2.PTOBEN_GVG_performance_governing_trails_block 
set c12_1=c12 where block_row_number=5;

update staging2.PTOBEN_GVG_performance_governing_trails_block a 
set c12_1= b.first_value from (SELECT
  block_row_number, c12_1, value_partition, first_value(c12_1) over (partition by value_partition order by block_row_number)
FROM (
  SELECT
    block_row_number,
    c12_1,
    sum(case when c12_1 is null then 0 else 1 end) over (order by block_row_number) as value_partition  
    FROM staging2.PTOBEN_GVG_performance_governing_trails_block 
  ORDER BY block_row_number ASC
) as q) b where a.block_row_number = b.block_row_number ;

update  staging2.PTOBEN_GVG_performance_governing_trails_block 
set c17_1=c17 where block_row_number=5;

update staging2.PTOBEN_GVG_performance_governing_trails_block a 
set c17_1= b.first_value from (SELECT
  block_row_number, c17_1, value_partition, first_value(c17_1) over (partition by value_partition order by block_row_number)
FROM (
  SELECT
    block_row_number,
    c17_1,
    sum(case when c17_1 is null then 0 else 1 end) over (order by block_row_number) as value_partition  
    FROM staging2.PTOBEN_GVG_performance_governing_trails_block 
  ORDER BY block_row_number ASC
) as q) b where a.block_row_number = b.block_row_number ;

update  staging2.PTOBEN_GVG_performance_governing_trails_block 
set c22_1=c22 where block_row_number=5;

update staging2.PTOBEN_GVG_performance_governing_trails_block a 
set c22_1= b.first_value from (SELECT
  block_row_number, c22_1, value_partition, first_value(c22_1) over (partition by value_partition order by block_row_number)
FROM (
  SELECT
    block_row_number,
    c22_1,
    sum(case when c22_1 is null then 0 else 1 end) over (order by block_row_number) as value_partition  
    FROM staging2.PTOBEN_GVG_performance_governing_trails_block 
  ORDER BY block_row_number ASC
) as q) b where a.block_row_number = b.block_row_number ;

update  staging2.PTOBEN_GVG_performance_governing_trails_block 
set c27_1=c27 where block_row_number=5;

update staging2.PTOBEN_GVG_performance_governing_trails_block a 
set c27_1= b.first_value from (SELECT
  block_row_number, c27_1, value_partition, first_value(c27_1) over (partition by value_partition order by block_row_number)
FROM (
  SELECT
    block_row_number,
    c27_1,
    sum(case when c27_1 is null then 0 else 1 end) over (order by block_row_number) as value_partition  
    FROM staging2.PTOBEN_GVG_performance_governing_trails_block 
  ORDER BY block_row_number ASC
) as q) b where a.block_row_number = b.block_row_number ;

update  staging2.PTOBEN_GVG_performance_governing_trails_block 
set c32_1=c32 where block_row_number=5;

update staging2.PTOBEN_GVG_performance_governing_trails_block a 
set c32_1= b.first_value from (SELECT
  block_row_number, c32_1, value_partition, first_value(c32_1) over (partition by value_partition order by block_row_number)
FROM (
  SELECT
    block_row_number,
    c32_1,
    sum(case when c32_1 is null then 0 else 1 end) over (order by block_row_number) as value_partition  
    FROM staging2.PTOBEN_GVG_performance_governing_trails_block 
  ORDER BY block_row_number ASC
) as q) b where a.block_row_number = b.block_row_number ;

update  staging2.PTOBEN_GVG_performance_governing_trails_block 
set c37_1=c37 where block_row_number=5;

update staging2.PTOBEN_GVG_performance_governing_trails_block a 
set c37_1= b.first_value from (SELECT
  block_row_number, c37_1, value_partition, first_value(c37_1) over (partition by value_partition order by block_row_number)
FROM (
  SELECT
    block_row_number,
    c37_1,
    sum(case when c37_1 is null then 0 else 1 end) over (order by block_row_number) as value_partition  
    FROM staging2.PTOBEN_GVG_performance_governing_trails_block 
  ORDER BY block_row_number ASC
) as q) b where a.block_row_number = b.block_row_number ;

update  staging2.PTOBEN_GVG_performance_governing_trails_block 
set c42_1=c42 where block_row_number=5;

update staging2.PTOBEN_GVG_performance_governing_trails_block a 
set c42_1= b.first_value from (SELECT
  block_row_number, c42_1, value_partition, first_value(c42_1) over (partition by value_partition order by block_row_number)
FROM (
  SELECT
    block_row_number,
    c42_1,
    sum(case when c42_1 is null then 0 else 1 end) over (order by block_row_number) as value_partition  
    FROM staging2.PTOBEN_GVG_performance_governing_trails_block 
  ORDER BY block_row_number ASC
) as q) b where a.block_row_number = b.block_row_number ;

update  staging2.PTOBEN_GVG_performance_governing_trails_block 
set c47_1=c47 where block_row_number=5;

update staging2.PTOBEN_GVG_performance_governing_trails_block a 
set c47_1= b.first_value from (SELECT
  block_row_number, c47_1, value_partition, first_value(c47_1) over (partition by value_partition order by block_row_number)
FROM (
  SELECT
    block_row_number,
    c47_1,
    sum(case when c47_1 is null then 0 else 1 end) over (order by block_row_number) as value_partition  
    FROM staging2.PTOBEN_GVG_performance_governing_trails_block 
  ORDER BY block_row_number ASC
) as q) b where a.block_row_number = b.block_row_number ;


update staging2.PTOBEN_GVG_performance_governing_trails_block
set trx_record=0 where block_row_number in (1,2,3,4,5);

 execute 'update staging2.PTOBEN_GVG_performance_governing_trails_block set client_id='||p_client_id||'';
 execute 'update staging2.PTOBEN_GVG_performance_governing_trails_block set function_id='||p_function_id||'';
 execute 'update staging2.PTOBEN_GVG_performance_governing_trails_block set file_mnemonic='''||p_file_mnemonic||'''';
 execute 'update staging2.PTOBEN_GVG_performance_governing_trails_block set file_sheet_mnemonic='''||p_file_sheet_mnemonic||'''';
 execute 'update staging2.PTOBEN_GVG_performance_governing_trails_block set file_syspk='||p_file_syspk||'';
  
 update staging2.PTOBEN_GVG_performance_governing_trails_block set make=__make; 
 update staging2.PTOBEN_GVG_performance_governing_trails_block set model=__model;


perform fw_core.fn_jobctl_block_end(__file_syspk,'PTOBEN_GVG_performance_governing_trails_block'); 

 err_context := '';
perform  fw_core.fn_insert_db_error ( __client_id, __function_id, 1001, 'Compegence', __file_syspk ,__file_mnemonic,__file_sheet_mnemonic ,null,'stg2', 'fn_PTO_GVG_block', err_state, err_msg, err_detail, err_hint, err_context,'success');
return err_context;	

EXCEPTION when OTHERS then 
	
GET STACKED DIAGNOSTICS 
       err_state   = returned_sqlstate,
       err_msg     = message_text,
       err_detail  = pg_exception_detail,
       err_hint    = pg_exception_hint,
       err_context = pg_exception_context;

   	   perform  fw_core.fn_insert_db_error ( __client_id, __function_id, 1001, 'Compegence', __file_syspk ,__file_mnemonic,__file_sheet_mnemonic ,null,'stg2', 'fn_PTO_GVG_block', err_state, err_msg, err_detail, err_hint, err_context,'error');
return err_context;
end
$$ LANGUAGE plpgsql;
