CREATE OR REPLACE FUNCTION public.sp_procesar_concepto_persona(p_id_periodo character varying)
 RETURNS character varying
 LANGUAGE plpgsql
AS $function$
declare
	cursor_personas record;
	cursor_conceptos record;
	idp integer;
	v_id_asistencia integer;
	v_cant integer;
	_fecha varchar;

	v_interes decimal;
	v_capital_amortizado decimal;
	v_capital_vivo decimal;

	v_id_tipo_planilla integer;
	v_id_planilla integer;
	v_id_subplanilla integer;
	v_id_ubicacion integer;
	v_fech_inic_tpe varchar;
	v_fech_fina_tpe varchar;
	v_ano_peri_tpe varchar;

	v_mont_fijo_cmf float;
	v_id_periodo_maximo integer;

	v_cant_feriados integer;

begin

	select id_planilla,id_subplanilla,id_ubicacion,fech_inic_tpe,fech_fina_tpe,ano_peri_tpe 
	into v_id_planilla,v_id_subplanilla,v_id_ubicacion,v_fech_inic_tpe,v_fech_fina_tpe,v_ano_peri_tpe 
	from tperiodos
	where id=p_id_periodo::int
	and estado='1';

	select id into v_id_tipo_planilla from tabla_ubicaciones where tabla='tplanillas' and id_registro=1;
	
	select count(*) 
	into v_cant_feriados 
	from tdias_feriados tf 
	where fech_feri_tdf between v_fech_inic_tpe::timestamp and v_fech_fina_tpe::timestamp;
	
	/*
	delete from concepto_personas 
	where id_periodo =p_id_periodo::int;
	*/

	update concepto_personas
	set estado='0' 
	where id_periodo=p_id_periodo::int;

	For cursor_personas In
	select id_persona,id_tipo_planilla,id_ubicacion
	from persona_detalles 
	where id_tipo_planilla=v_id_tipo_planilla
	and id_ubicacion=v_id_ubicacion
	and estado = 'A'
	--and eliminado='N'
	Loop
		_fecha='';
		
		insert into meta_personas(id_periodo,id_ubicacion,id_planilla,id_subplanilla,id_persona,anno_ejec_eje,estado,created_at,updated_at)
		values (p_id_periodo::int,v_id_ubicacion,v_id_planilla,v_id_subplanilla,cursor_personas.id_persona,v_ano_peri_tpe,'1',now(),now());
		
		--and id_periodo=p_id_periodo::int
		if (select count(*) from concepto_personas 
			where estado='1' and id_planilla=v_id_planilla and id_subplanilla=v_id_subplanilla 
			and id_persona=cursor_personas.id_persona and id_ubicacion=v_id_ubicacion)=0 then
	
			For cursor_conceptos In
			select t3.id_planilla,t4.id_subplanilla,t4.id_concepto,t1.desc_tipo_tpl,t3.desc_subt_stp,t5.desc_conc_tco
			from tplanillas t1
			inner join tabla_ubicaciones t2 on t2.id_registro=t1.id and tabla='tplanillas'
			inner join subtplanillas t3 on t1.id=t3.id_planilla
			inner join concepto_planes t4 on t4.id_planilla=t3.id_planilla and t4.id_subplanilla=t3.id
			inner join conceptos t5 on t4.id_concepto=t5.id
			where t2.id=cursor_personas.id_tipo_planilla
			and t4.estado='A' and t4.predeterminado='1'
			
			loop
				v_mont_fijo_cmf := null;
				if cursor_conceptos.id_concepto = 27 then 
					select mont_cont_ctr into v_mont_fijo_cmf from contratos where id_persona = cursor_personas.id_persona order by id desc limit 1;
				end if;
				if cursor_conceptos.id_concepto = 39 then
					v_mont_fijo_cmf := 1025;
				end if;
				
				if cursor_conceptos.id_concepto = 85 then
					v_mont_fijo_cmf := v_cant_feriados;
				end if;
			
				insert into concepto_personas(id_periodo,id_planilla,id_subplanilla,id_persona,id_ubicacion,id_concepto,mont_fijo_cmf,estado,created_at,updated_at)
				values (p_id_periodo::int,cursor_conceptos.id_planilla,cursor_conceptos.id_subplanilla,cursor_personas.id_persona,cursor_personas.id_ubicacion,cursor_conceptos.id_concepto,v_mont_fijo_cmf,'1',now(),now());
				
			End Loop;
			
		Else
		
			select max(id_periodo) into v_id_periodo_maximo   
			from concepto_personas where estado='1' and id_planilla=v_id_planilla and id_subplanilla=v_id_subplanilla 
			and id_persona=cursor_personas.id_persona and id_ubicacion=v_id_ubicacion;
			
			For cursor_conceptos In
			--select id_concepto,coalesce(mont_fijo_cmf,0)mont_fijo_cmf,id_planilla,id_subplanilla
			select id_concepto,mont_fijo_cmf,id_planilla,id_subplanilla
			from concepto_personas 
			where estado='1' 
			and id_planilla=v_id_planilla 
			and id_subplanilla=v_id_subplanilla 
			and id_persona=cursor_personas.id_persona 
			and id_ubicacion=v_id_ubicacion 
			and id_periodo=v_id_periodo_maximo
			
			loop
				
				v_mont_fijo_cmf := cursor_conceptos.mont_fijo_cmf;
			
				if cursor_conceptos.id_concepto = 85 then
					v_mont_fijo_cmf := v_cant_feriados;
				end if;
				
				insert into concepto_personas(id_periodo,id_planilla,id_subplanilla,id_persona,id_ubicacion,id_concepto,mont_fijo_cmf,estado,created_at,updated_at)
				values (p_id_periodo::int,cursor_conceptos.id_planilla,cursor_conceptos.id_subplanilla,cursor_personas.id_persona,cursor_personas.id_ubicacion,cursor_conceptos.id_concepto,v_mont_fijo_cmf,'1',now(),now());
				
			End Loop;
		
		End if;
	
	
	End Loop;
	
	return _fecha;	
	--return idp;
	/*EXCEPTION
	WHEN OTHERS THEN
        idp:=-1;
	return idp;*/
end;
$function$
;
