miércoles, 8 de febrero de 2012
Asteriscos en el monto del cheque
/*
Esta funcion pone asteriscos al inicio del monto del cheque del Adempiere,
esto con el fin de seguridad del mismo, las funciones fnt_right y fnt_left
las puedes encontrar en este mismo blog
*/
-- select asteriscos_numeros('146520');
-- select asteriscos_numeros('14124350175.1520304000');
-- select asteriscos_numeros('12504.');
-- select length('200');
create or replace function asteriscos_numeros(numero character varying)
returns character varying as $$
declare
resultado character varying;
maximo numeric;
contador numeric;
asteriscos character varying;
nuevo_numero character varying;
k numeric;
entero character varying;
decimales character varying;
begin
-- Establecemos el tamaño máximo del texto
maximo = 15;
-- Establecemos valores por defecto
resultado = '';
contador = 0;
asteriscos = '';
entero = substring(numero, 0, position('.' in numero));
decimales = coalesce(substring(numero, position('.' in numero) + 1, length(numero)), '');
nuevo_numero = '';
k = 0;
if(decimales = '.' or decimales = '')then
decimales = '';
else
decimales = '.' || decimales;
end if;
-- Establecer la coma como separador de miles donde corresponda
contador = length(entero);
while contador > 0 loop
contador = contador - 1;
k = k + 1;
if(k = 3)then
if(length(nuevo_numero) = 0)then
nuevo_numero = fnt_right(entero, 3);
else
nuevo_numero = fnt_left(fnt_right(entero, length(nuevo_numero) + 3), 3) || ',' || nuevo_numero;
end if;
k = 0;
end if;
end loop;
if(length(entero) > 3)then
if(k = 1)then
nuevo_numero = fnt_left(fnt_right(entero, length(nuevo_numero) + 1), 1) || ',' || nuevo_numero;
end if;
if(k = 2)then
nuevo_numero = fnt_left(fnt_right(entero, length(nuevo_numero) + 2), 2) || ',' || nuevo_numero;
end if;
else
nuevo_numero = entero;
end if;
contador = 0;
if(length(numero) > 0 and length(numero) < maximo)then
contador = maximo - length(numero);
while contador > 0 loop
asteriscos = '*' || asteriscos;
contador = contador - 1;
end loop;
resultado = asteriscos || nuevo_numero;
else
resultado = '**' || nuevo_numero;
end if;
return resultado || decimales;
end;
$$ language plpgsql;
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario