CREATE OR REPLACE FUNCTION public.sp_crud_actualizar_cronograma(
    p_id character varying)
  RETURNS character varying AS
$BODY$
declare
	cursor_solicitud record;
	cursos_cronograma record;
	idp integer;
	v_id_asistencia integer;
	v_cant integer;
	_fecha varchar;

	v_interes decimal;
	v_capital_amortizado decimal;
	v_capital_vivo decimal;
	
begin

	For cursor_solicitud In
	select t2.id_solicitud,t2.valor_prestamo 
	from solicitudes t1
	inner join cronogramas t2 on t1.id=t2.id_solicitud
	where t2.id_solicitud=p_id::int 
	--where t2.id_solicitud=150 --137 --288
	--137
	Loop
		_fecha='';
		v_capital_vivo=cursor_solicitud.valor_prestamo;
		
		For cursos_cronograma In
		select t4.id,t4.nro_cuota,t4.cuota_pagar,t4.interes,t4.capital_amortizado,t4.capital_vivo,coalesce(t5.facd_importe,0)facd_importe,t4.facturado,t3.interes_equivalente
		from solicitudes t1
		inner join personas t2 on t1.id_persona=t2.id
		inner join cronogramas t3 on t1.id=t3.id_solicitud
		inner join cronograma_detalles t4 on t3.id = t4.id_cronograma
		left join factura_detalles t5 on t4.fac_tipo=t5.facd_tipo and t4.fac_serie=t5.facd_serie and t4.fac_numero=t5.facd_numero and t4.nro_cuota=t5.facd_item
		Where t1.eliminado='N'
		and t1.id=cursor_solicitud.id_solicitud
		And t4.estado='A'
		--and t4.id not in (select id from cronograma_detalles where facturado='N' and cuota_pagar=0) 
		--and t4.cuota_pagar > 0
		order by t4.nro_cuota
		
		Loop

			if round(cursos_cronograma.facd_importe::decimal,2)=round(cursos_cronograma.cuota_pagar::decimal,2) then
				v_interes=v_capital_vivo*cursos_cronograma.interes_equivalente;
				v_capital_amortizado=cursos_cronograma.cuota_pagar-v_interes;

				if v_interes<0 then v_interes=0; end if;
				if v_capital_amortizado<0 then v_capital_amortizado=0; end if;
				if v_capital_vivo<0 then v_capital_vivo=0; end if;
				
				v_capital_vivo=v_capital_vivo-v_capital_amortizado;
				
			else
				--v_interes=cursos_cronograma.facd_importe;
				v_interes=v_capital_vivo*cursos_cronograma.interes_equivalente;
				v_capital_amortizado=cursos_cronograma.facd_importe-(v_capital_vivo*cursos_cronograma.interes_equivalente);

				if v_interes<0 then v_interes=0; end if;
				if v_capital_amortizado<0 then v_capital_amortizado=0; end if;
				if v_capital_vivo<0 then v_capital_vivo=0; end if;
				
				v_capital_vivo=v_capital_vivo-v_capital_amortizado;
				
				if round(cursos_cronograma.facd_importe::decimal,2) < round(v_interes::decimal,2) then
					v_capital_amortizado=0;
					v_capital_vivo=v_capital_vivo + (v_interes - cursos_cronograma.facd_importe);
					v_interes=cursos_cronograma.facd_importe;
				end if;
				
			end if;

			_fecha:=_fecha||v_interes||'#'||v_capital_amortizado||'#'||v_capital_vivo||'@@';

			if cursos_cronograma.facturado='S' then
				update cronograma_detalles set 
				interes=v_interes,
				capital_amortizado=v_capital_amortizado,
				capital_vivo=v_capital_vivo
				where id=cursos_cronograma.id;
			end if;	
			
			if cursos_cronograma.facturado='N' then
				update cronograma_detalles set 
				cuota_pagar = capital_amortizado+interes
				where id=cursos_cronograma.id;
			end if;
			
		End Loop;

	End Loop;
	
	return _fecha;	
	--return idp;
	/*EXCEPTION
	WHEN OTHERS THEN
        idp:=-1;
	return idp;*/
end;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
