create or replace package pk_microcaller is
procedure resultERROR(p_procedure in varchar2, p_retcode in varchar2, p_errbuf in varchar2);
/* Crida simple 0 -> Genera un resultat erroni
*/
procedure resultOK(p_procedure in varchar2, p_retcode in varchar2);
/* Crida simple 1 -> Genera tot el resultat si nomes volem donar feedback del resultat
*/
procedure resultOK(p_procedure in varchar2, p_retcode in varchar2, p_name_array owa.vc_arr, p_value_array owa.vc_arr);
/* Crida simple 2 -> Genera tot el resultat si nomes tenim un retvals que retornar
...
*/
procedure resultOK(p_procedure in varchar2, p_retcode in varchar2, p_contenttype in varchar2, p_content in varchar2, p_transformation in varchar2 default null);
/* Crida simple 3 -> Genera tot el resultat si nomes tenim un content que retornar
]]>
*/
procedure resultOKHeader(p_procedure in varchar2, p_retcode in varchar2);
/* Abre un result OK
*/
procedure resultOkFooter;
/* Cierra el result
*/
procedure retvals (p_name_array owa.vc_arr, p_value_array owa.vc_arr);
/* Genera un conjunto de valores de retorno
...
*/
procedure content (p_content in varchar2);
/* Llamada super-simple a content */
/*
]]>
*/
procedure content (p_name in varchar2, p_type in varchar2, p_content in varchar2, p_transformation in varchar2 default null);
/* Llamada super-simple2 a content */
/*
>>>> Si es != text/xml
]]>
>>>> Si es = text/xml
*/
procedure contentHeader;
/* Abre un content simple de tipo text/html
>>> Si es != text/xml
>>> Si es = text/xml
*/
procedure contentFooter;
/* Cierra un content simple de tipo text/html
]]>
*/
procedure contentFooter (p_type in varchar2);
/* Cierra un content
>>>> Si es != text/xml
]]>
>>>> Si es = text/xml
*/
procedure contentBodyPart (p_content_part in varchar2);
/* Envia a la salida exactamente el string pasado como parametro */
procedure cjtHeader(p_name in varchar2);
procedure cjtFooter;
procedure cjtElementHeader(p_id in varchar2, p_order in number default null);
procedure cjtElementFooter;
procedure testerror;
procedure test1;
procedure test2;
procedure test3;
procedure test31;
procedure test4;
procedure test5;
procedure test61;
procedure test62;
procedure test71;
procedure test72;
procedure test73(p_churro1 in varchar2, p_churro2 in varchar2);
procedure xsl;
end;
/
create or replace package body pk_microcaller is
/* Package microcaller Agusti Pons 2001 */
/* v.1.0 - Creacion - 14/08/2001 */
/* v.1.1 - Anyadidos procedimientos para escribir el resultado del microcall por fases
- resultOKHeader, resultOKContent, resultOKFooter - 22/08/2001 */
/* v.1.2 - Anyadidos procedimientos que encapsulan el retorno de valores - 29/08/2001 */
/* v.2.0 - Generalizacion de la informacion retornada, Modelo 6 de llamada - 20/09/2001 */
/* v.3.0 - Nuevas llamadas a content incluyendo nuevo parametro para transformacion xsl - 6/11/2001 */
/* v.3.1 - Nuevas llamadas para retornar contents masivos, contentHeader, contentFooter y contentBody - 21/11/2001 */
/* v.4.0 - cjtretvals eliminat, i simplificacio de crides */
/* v.5.0 - noves crides per generar conjunts generics */
procedure cjtHeader(p_name in varchar2) is
begin
htp.p('');
end;
procedure cjtFooter is
begin
htp.p('');
end;
procedure cjtElementHeader(p_id in varchar2, p_order in number default null) is
begin
if p_order is null then
htp.p('');
else
htp.p('');
end if;
end;
procedure cjtElementFooter is
begin
htp.p('');
end;
function retvals (p_name_array owa.vc_arr, p_value_array owa.vc_arr) return varchar2 is
l_strParams varchar2(32000);
i number;
begin
l_strParams:=' '||CHR(13)||CHR(10);
for i in 1..p_name_array.count loop
l_strParams:=l_strParams||' '||CHR(13)||CHR(10);
end loop;
l_strParams:=l_strParams||' '||CHR(13)||CHR(10);
return(l_strParams);
end;
function resultOK(p_procedure in varchar2, p_retcode in varchar2) return varchar2 is
begin
return(''||CHR(13)||CHR(10)
||'');
end;
function resultOK(p_procedure in varchar2, p_retcode in varchar2, p_name_array owa.vc_arr, p_value_array owa.vc_arr) return varchar2 is
begin
return(''||CHR(13)||CHR(10)
||''
||CHR(13)||CHR(10)||retvals(p_name_array, p_value_array)||'');
end;
function resultOK(p_procedure in varchar2, p_retcode in varchar2, p_contenttype in varchar2, p_content in varchar2, p_transformation in varchar2 default null) return varchar2 is
l_transformation varchar2(1000);
begin
if p_transformation is not null then
l_transformation:=' transformation="'||p_transformation||'"';
end if;
return(''||CHR(13)||CHR(10)
||''||CHR(13)||CHR(10)
||' '||CHR(13)||CHR(10)
||'');
end;
function resultERROR(p_procedure in varchar2, p_retcode in varchar2, p_errbuf in varchar2) return varchar2 is
begin
return(''||CHR(13)||CHR(10)
||'');
end;
procedure resultOK(p_procedure in varchar2, p_retcode in varchar2) is
begin
owa_util.mime_header('text/xml');
htp.p(resultOK(p_procedure, p_retcode));
end;
procedure resultOK(p_procedure in varchar2, p_retcode in varchar2, p_name_array owa.vc_arr, p_value_array owa.vc_arr) is
begin
owa_util.mime_header('text/xml');
htp.p(resultOK(p_procedure, p_retcode, p_name_array, p_value_array));
end;
procedure resultOK(p_procedure in varchar2, p_retcode in varchar2, p_contenttype in varchar2, p_content in varchar2, p_transformation in varchar2 default null) is
begin
owa_util.mime_header('text/xml');
htp.p(resultOK(p_procedure, p_retcode, p_contenttype, p_content, p_transformation));
end;
procedure resultERROR(p_procedure in varchar2, p_retcode in varchar2, p_errbuf in varchar2) is
begin
owa_util.mime_header('text/xml');
htp.p(resultERROR(p_procedure, p_retcode, p_errbuf));
end;
procedure resultOKHeader(p_procedure in varchar2, p_retcode in varchar2) is
begin
owa_util.mime_header('text/xml');
htp.p(''||CHR(13)||CHR(10)
||''||CHR(13)||CHR(10));
end;
procedure resultOkFooter is
begin
htp.p('');
end;
procedure retvals (p_name_array owa.vc_arr, p_value_array owa.vc_arr) is
begin
htp.p(retvals(p_name_array, p_value_array));
end;
procedure contentHeader (p_name in varchar2, p_type in varchar2, p_transformation in varchar2 default null) is
begin
if p_transformation is null then
htp.p(' ');
else
htp.p(' ');
end if;
if (p_type!='text/xml') then
htp.prn('');
end if;
htp.prn('');
end;
procedure contentFooter is
begin
contentFooter('text/html');
end;
procedure contentBodyPart (p_content_part in varchar2) is
begin
htp.prn(p_content_part);
end;
procedure content (p_name in varchar2, p_type in varchar2, p_content in varchar2, p_transformation in varchar2 default null) is
begin
contentHeader(p_name, p_type, p_transformation);
contentBodyPart(p_content);
contentFooter(p_type);
end;
procedure content (p_content in varchar2) is
begin
content('default', 'text/hmtl', p_content);
end;
procedure testerror is
begin
resultERROR('testerror', -1, 'Error de test error');
end;
procedure test1 is
begin
resultOk('test1', 0);
end;
procedure test2 is
l_namesArray owa.vc_arr;
l_valuesArray owa.vc_arr;
begin
l_namesArray(1):='variable';
l_valuesArray(1):='valor';
resultOk('test2', 0, l_namesArray, l_valuesArray);
end;
procedure test3 is
begin
resultOK('test3', 0, 'text/html', 'ohohohodhaofsafodasjfoidjsaoifjdisjfaoidjsidfsj');
end;
procedure test31 is
begin
resultOK('test31', 0, 'text/html', 'ohohohodhaofsafodasjfoidjsaoifjdisjfaoidjsidfsj', 'http://testtransformation.xsl');
end;
procedure test4 is
begin
resultOKHeader('proc1', '1543');
for i in 1..20 loop
content('Volta: '||i);
end loop;
resultOkFooter;
end;
procedure test5 is
l_namesArray owa.vc_arr;
l_valuesArray owa.vc_arr;
begin
resultOkHeader('test5', 0);
for i in 1..20 loop
content('Volta: '||i);
l_namesArray(i):='variable:'||i;
l_valuesArray(i):='valor:'||i;
end loop;
pk_microcaller.retvals(l_namesArray, l_valuesArray);
pk_microcaller.resultOkFooter;
end;
procedure test61 is
begin
resultOkHeader('test61', '61');
resultOkFooter();
end;
procedure test62 is
l_namesArray owa.vc_arr;
l_valuesArray owa.vc_arr;
begin
resultOkHeader('test62', '62');
for i in 1..20 loop
content(i, 'text'||i||'html', 'Volta: '||i);
l_namesArray(i):='variable:'||i;
l_valuesArray(i):='valor:'||i;
end loop;
retvals(l_namesArray, l_valuesArray);
resultOkFooter();
end;
procedure test71 is
l_namesArray owa.vc_arr;
l_valuesArray owa.vc_arr;
begin
resultOkHeader('test72', '72');
for i in 1..20 loop
content(i, 'text'||i||'html', 'Volta: '||i, 'http://www.sismograma.com/xsl/trans72-'||i||'.xsl');
l_namesArray(i):='variable:'||i;
l_valuesArray(i):='valor:'||i;
end loop;
retvals(l_namesArray, l_valuesArray);
resultOkFooter();
end;
procedure test72 is
l_namesArray owa.vc_arr;
l_valuesArray owa.vc_arr;
begin
resultOkHeader('test72', '72');
contentHeader('nonxml', 'text/html');
htp.prn('
hola
con acintos a``````
tralari tralara !!!
');
contentFooter('text/html');
contentHeader('xml', 'text/xml', 'http://www.lavanguardia.es/test.xsl');
htp.prn('');
for i in 1..20 loop
htp.prn(''||i||'
');
l_namesArray(i):='variable:'||i;
l_valuesArray(i):='valor:'||i;
end loop;
htp.prn('');
contentFooter('text/xml');
retvals(l_namesArray, l_valuesArray);
resultOkFooter();
end;
procedure test73(p_churro1 in varchar2, p_churro2 in varchar2) is
l_namesArray owa.vc_arr;
l_valuesArray owa.vc_arr;
begin
resultOkHeader('test72', '72');
contentHeader('nonxml', 'text/html');
htp.prn('
hola
con acintos a``````
tralari tralara !!!
');
contentFooter('text/html');
contentHeader('churro1', 'text/html');
htp.prn(p_churro1);
contentFooter('text/html');
contentHeader('churro2', 'text/html');
htp.prn(p_churro2);
contentFooter('text/html');
contentHeader('test', 'text/xml', 'http://wwwd.lavanguardia.es:7777/pls/mc/pk_microcaller.xsl');
htp.prn('');
for i in 1..20 loop
htp.prn(''||i||'
');
l_namesArray(i):='variable:'||i;
l_valuesArray(i):='valor:'||i;
end loop;
htp.prn('');
contentFooter('text/xml');
retvals(l_namesArray, l_valuesArray);
resultOkFooter();
end;
procedure xsl is
begin
htp.prn('
');
end;
end;
/
create or replace package PK_MICROCALLS is
-- Author : ALEXU
-- Created : 09/08/2005 9:39:20
-- Purpose : Agrupa los microcalls de la nota de gastos de grupo godo
type curNotas is ref cursor;
--- direccion donde se encuentran los XLS
cv_urlbase constant varchar2(255) := 'http://192.168.35.39/gnomaxslt/NGASTOS2/';
procedure p_get_estados;
procedure p_get_paises;
procedure p_get_monedas;
procedure p_get_ultimas_notas;
procedure p_get_ultimas_notas(pv_usuario in varchar2);
procedure p_busca_notas(pv_usuario_id in varchar2 := 'null'
,pv_usuario in varchar2 := 'null'
, pv_fecha_creacion in varchar2 := 'null'
, pv_total_k_i in varchar2 := 'null'
, pv_total_k in varchar2 := 'null'
, pv_total_c_i in varchar2 := 'null'
, pv_total_c in varchar2 := 'null'
, pv_fecha_inicio in varchar2 := 'null'
, pv_fecha_final in varchar2 := 'null'
, pv_lugar in varchar2 := 'null'
, pv_descripcion in varchar2 := 'null'
, pv_estado in varchar2 := 'null');
procedure p_get_detalle_nota (pv_ng in varchar2);
procedure p_get_nuevo_detalle_nota ;
procedure p_get_dieta_km_manutencion (pv_ng in varchar2);
procedure p_get_dieta_nota_gastos (pv_ng in varchar2);
procedure p_get_clase_gasto ;
procedure p_get_dieta_resumenes (pv_ng in varchar2);
procedure p_update_dieta_resumenes(pv_ng in varchar2
,pv_total_circuito_provisiones in varchar2);
procedure p_set_nota_gastos(pv_usuario_id in varchar2
, pv_usuario in varchar2
, pv_seccion in varchar2
, pv_reparto_coste in varchar2
, pv_matric in varchar2
, pv_proveedor in varchar2
, pv_seccion_pro in varchar2
, pv_reparto_coste_pro in varchar2
, pv_pais in varchar2
, pv_lugar in varchar2
, pv_fecha_ini in varchar2
, pv_fecha_fin in varchar2
, pv_objetivo in varchar2
, pv_moneda in varchar2);
procedure p_set_dieta_km_manutencion (pv_ng in varchar2
, pv_tipo_coste in owa.vc_arr
, pv_nro_dietas in owa.vc_arr
, pv_exento in owa.vc_arr
, pv_cotiza in owa.vc_arr);
procedure p_set_dieta_nota_gasto ( pv_ng in varchar2
, pv_tipo_coste in varchar2
, pv_descripcion in varchar2
, pv_total in varchar2);
procedure p_set_dieta_nota_gasto (pv_ng in varchar2
, pv_tipo_coste in owa.vc_arr
, pv_descripcion in owa.vc_arr
, pv_total in owa.vc_arr);
procedure p_update_nota_gastos(pv_ng in varchar2
, pv_usuario in varchar2
, pv_seccion in varchar2
, pv_reparto_coste in varchar2
, pv_matric in varchar2
, pv_proveedor in varchar2
, pv_seccion_pro in varchar2
, pv_reparto_coste_pro in varchar2
, pv_pais in varchar2
, pv_lugar in varchar2
, pv_fecha_ini in varchar2
, pv_fecha_fin in varchar2
, pv_objetivo in varchar2
, pv_moneda in varchar2);
procedure p_update_dieta_km_manutencion (pv_ng in varchar2
, pv_tipo_coste in owa.vc_arr
, pv_nro_dietas in owa.vc_arr);
procedure p_update_dieta_nota_gasto (pv_ng in varchar2
, pv_tipo_coste in owa.vc_arr
, pv_descripcion in owa.vc_arr
, pv_total in owa.vc_arr);
procedure p_delete_nota_gastos (pv_ng in owa.vc_arr);
procedure p_cambio_estado (pv_ng in owa.vc_arr, pv_estado in owa.vc_arr);
procedure p_get_detalle_dieta_km_man(pv_ng in varchar2
, pv_tipodieta in varchar2);
procedure p_set_detalle_dieta_km_man (pv_ng in varchar2
, pv_tipodieta in varchar2
, pv_kms in owa.vc_arr
, pv_origen in owa.vc_arr
, pv_destino in owa.vc_arr);
procedure p_get_estado_nota(pv_ng in varchar2);
procedure p_envia_a_sap(pv_ng in owa.vc_arr);
procedure p_envia_a_sap_batch;
--procedure p_imprimir_nota;
procedure p_impresion_nota (pv_ng in varchar2);
function fecha_solapada (p_nota_id in number, p_usuario_id in varchar2, p_fecha in date) return varchar2;
end PK_MICROCALLS;
/
create or replace package body PK_MICROCALLS is
/* funciones auxiliares */
function f_da_igual(pv_i in varchar2) return varchar2 is
v_i varchar2(2);
begin
if pv_i = 'menor' then v_i := '<';
elsif pv_i = 'menorigual' then v_i := '<=';
elsif pv_i = 'mayor' then v_i := '>';
elsif pv_i = 'mayorigual' then v_i := '>=';
else v_i := 'igual';
end if;
return v_i;
end f_da_igual;
function f_da_estado(pv_estado in varchar2) return varchar2 is
v_estado ggc_estado.descripcion%type;
begin
select a.descripcion
into v_estado
from ggc_estado a
where a.codigo = pv_estado;
return v_estado;
exception
when no_data_found then
return 'N/A';
end f_da_estado;
/*
* Da todas las 5 ultimas notas ordenadas por fecha
*/
procedure p_get_ultimas_notas is
cursor c_ng is
select a.*, b.descripcion estdesc, b.codigo codigo, c.descripcion paisdesc
from ggc_nota_gastos a
, ggc_estado b, ggc_pais c
where a.estado = b.codigo
and a.pais = c.codigo
order by a.fecha_creacion desc;
v_proc varchar2(100) := 'p_get_ultimas_notas';
n_counter number := 0;
begin
pk_microcaller.resultOKHeader(v_proc,'1');
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'ultimas_notas.xsl');
htp.prn('');
for c_n in c_ng loop
n_counter := n_counter + 1;
if n_counter > 5 then
exit;
end if;
htp.prn('');
htp.prn(''||c_n.id||'');
htp.prn(''||c_n.usuario_nombre||'');
htp.prn(''||c_n.seccion||'');
htp.prn(''||c_n.reparto_coste||'');
htp.prn(''||c_n.num_matricula||'');
htp.prn(''||c_n.num_proveedor||'');
htp.prn(''||c_n.seccion_pro||'');
htp.prn(''||c_n.reparto_coste_pro||'');
htp.prn(''||c_n.lugar||'');
htp.prn(''||c_n.paisdesc||'');
htp.prn(''||c_n.objetivo||'');
htp.prn(''||c_n.fecha_ini||'');
htp.prn(''||c_n.fecha_fin||'');
htp.prn(''||c_n.estdesc||'');
htp.prn(''||to_char(nvl(c_n.total_circuito_notas,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(nvl(c_n.total_kilometraje,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn('');
end loop;
htp.prn('');
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter;
exception
when no_data_found then
pk_microcaller.resultERROR(v_proc,'1',sqlerrm);
end p_get_ultimas_notas;
/*
* Da todas las notas de un usuario ordenadas por fecha
*/
procedure p_get_ultimas_notas(pv_usuario in varchar2) is
cursor c_ng(p_user in varchar2) is
select a.*, b.descripcion estdesc, b.codigo codigo,c.descripcion paisdesc
from ggc_nota_gastos a
, ggc_estado b, ggc_pais c
where a.usuario_id = p_user
and a.estado = b.codigo
and a.pais = c.codigo
order by a.fecha_creacion desc;
v_proc varchar2(100) := 'p_get_ultimas_notas';
n_counter number := 0;
begin
pk_microcaller.resultOKHeader(v_proc,'1');
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'ultimas_notas.xsl');
htp.prn('');
for c_n in c_ng(pv_usuario) loop
n_counter := n_counter + 1;
if n_counter > 5 then
exit;
end if;
htp.prn('');
htp.prn(''||c_n.id||'');
htp.prn(''||c_n.usuario_nombre||'');
htp.prn(''||c_n.seccion||'');
htp.prn(''||c_n.reparto_coste||'');
htp.prn(''||c_n.num_matricula||'');
htp.prn(''||c_n.num_proveedor||'');
htp.prn(''||c_n.seccion_pro||'');
htp.prn(''||c_n.reparto_coste_pro||'');
htp.prn(''||c_n.lugar||'');
htp.prn(''||c_n.paisdesc||'');
htp.prn(''||c_n.objetivo||'');
htp.prn(''||c_n.fecha_ini||'');
htp.prn(''||c_n.fecha_fin||'');
htp.prn(''||c_n.estdesc||'');
htp.prn(''||to_char(nvl(c_n.total_circuito_notas,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(nvl(c_n.total_kilometraje,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn('');
end loop;
htp.prn('');
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter;
exception
when no_data_found then
pk_microcaller.resultERROR(v_proc,'1',sqlerrm);
end p_get_ultimas_notas;
/*
* Da todas las notas que cumplan los criterios de busqueda
*/
procedure p_busca_notas(pv_usuario_id in varchar2 := 'null'
,pv_usuario in varchar2 := 'null'
, pv_fecha_creacion in varchar2 := 'null'
, pv_total_k_i in varchar2 := 'null'
, pv_total_k in varchar2 := 'null'
, pv_total_c_i in varchar2 := 'null'
, pv_total_c in varchar2 := 'null'
, pv_fecha_inicio in varchar2 := 'null'
, pv_fecha_final in varchar2 := 'null'
, pv_lugar in varchar2 := 'null'
, pv_descripcion in varchar2 := 'null'
, pv_estado in varchar2 := 'null') is
c_n curNotas;
c_n2 curNotas;
r_nota ggc_nota_gastos%rowtype;
b_where boolean := false;
v_select varchar2(3000) := 'select a.* from ggc_nota_gastos a ';
v_select2 varchar2(3000) := 'select count(1) from ggc_nota_gastos a ';
v_where varchar2(3000) := '';
v_proc varchar2(100) := 'p_busca_notas';
n_counter number := 0;
n_rows number;
begin
--construimos la query
if pv_usuario_id != 'null' then
if b_where = true then
v_where := v_where||' and upper(a.usuario_id) = upper('''||pv_usuario_id||''') ';
else
b_where := true;
v_where := v_where||' where upper(a.usuario_id) = upper('''||pv_usuario_id||''') ';
end if;
end if;
if pv_usuario != 'null' then
if b_where = true then
v_where := v_where||' and upper(a.usuario_nombre) like upper(''%'||pv_usuario||'%'') ';
else
b_where := true;
v_where := v_where||' where upper(a.usuario_nombre) like upper(''%'||pv_usuario||'%'') ';
end if;
end if;
if pv_fecha_creacion != 'null' then
if b_where = true then
v_where := v_where||' and to_date('''||pv_fecha_creacion||''',''dd-mm-yyyy'') = trunc(a.fecha_creacion) ';
else
b_where := true;
v_where := v_where||' where to_date('''||pv_fecha_creacion||''',''dd-mm-yyyy'') = trunc(a.fecha_creacion) ';
end if ;
end if;
if pv_total_k != 'null' then
if b_where = true then
v_where := v_where||' and a.total_kilometraje '||f_da_igual(pv_total_k_i)||' to_number('''||pv_total_k||''') ';
else
b_where := true;
v_where := v_where||' where a.total_kilometraje '||f_da_igual(pv_total_k_i)||' to_number('''||pv_total_k||''') ';
end if;
end if;
if pv_total_c != 'null' then
if b_where = true then
v_where := v_where||' and a.total_circuito '||f_da_igual(pv_total_c_i)||' to_number('''||pv_total_c||''') ';
else
b_where := true;
v_where := v_where||' where a.total_circuito '||f_da_igual(pv_total_c_i)||' to_number('''||pv_total_c||''') ';
end if;
end if;
if pv_fecha_inicio != 'null' then
if b_where = true then
v_where := v_where||' and to_date('''||pv_fecha_inicio||''',''dd/mm/yyyy'') = trunc(a.fecha_ini) ';
else
b_where := true;
v_where := v_where||' where to_date('''||pv_fecha_inicio||''',''dd/mm/yyyy'') = trunc(a.fecha_ini) ';
end if ;
end if;
if pv_fecha_final != 'null' then
if b_where = true then
v_where := v_where||' and to_date('''||pv_fecha_final||''',''dd/mm/yyyy'') = trunc(a.fecha_fin) ';
else
b_where := true;
v_where := v_where||' where to_date('''||pv_fecha_final||''',''dd/mm/yyyy'') = trunc(a.fecha_fin) ';
end if ;
end if;
if pv_lugar != 'null' then
if b_where = true then
v_where := v_where||' and a.pais = '||pv_lugar||' ';
else
b_where := true;
v_where := v_where||' where a.pais = '||pv_lugar||' ';
end if;
end if;
if pv_descripcion != 'null' then
if b_where = true then
v_where := v_where||' and upper(a.lugar) like upper(''%'||pv_descripcion||'%'') ';
else
b_where := true;
v_where := v_where||' where upper(a.lugar) like upper(''%'||pv_descripcion||'%'') ';
end if;
end if;
if pv_estado != 'null' then
if b_where = true then
v_where := v_where||' and a.estado = '''||pv_estado||''' ';
else
v_where := v_where||' where a.estado = '''||pv_estado||''' ';
end if;
end if;
open c_n2 for v_select2||v_where;
fetch c_n2 into n_rows;
close c_n2;
pk_microcaller.resultOKHeader(v_proc,to_char(n_rows));
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'busca_notas.xsl');
htp.prn('');
open c_n for v_select||v_where ||' order by a.fecha_creacion desc';
loop
fetch c_n into r_nota;
exit when c_n%NOTFOUND;
n_counter := n_counter + 1;
htp.prn('');
htp.prn(''||r_nota.id ||'');
htp.prn(''||r_nota.usuario_id||'');
htp.prn(''||r_nota.usuario_nombre||'');
htp.prn(''||r_nota.seccion||'');
htp.prn(''||r_nota.reparto_coste||'');
htp.prn(''||r_nota.num_matricula||'');
htp.prn(''||r_nota.num_proveedor||'');
htp.prn(''||r_nota.seccion_pro||'');
htp.prn(''||r_nota.reparto_coste_pro||'');
htp.prn(''||r_nota.lugar||'');
htp.prn(''||r_nota.pais||'');
htp.prn(''||r_nota.objetivo||'');
htp.prn(''||r_nota.fecha_creacion||'');
htp.prn(''||r_nota.fecha_ini||'');
htp.prn(''||r_nota.fecha_fin||'');
htp.prn(''||f_da_estado(r_nota.estado)||'');
htp.prn(''||to_char(nvl(r_nota.total_circuito_notas,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(nvl(r_nota.total_kilometraje,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn('');
end loop;
close c_n;
htp.prn('');
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter;
exception
when no_data_found then
pk_microcaller.resultERROR(v_proc,'1',sqlerrm);
end p_busca_notas;
/*
* Da los estados disponibles
*/
procedure p_get_estados is
cursor c_estados is
select a.codigo, a.descripcion
from ggc_estado a;
n_counter number := 0;
l_namesArray owa.vc_arr;
l_valuesArray owa.vc_arr;
v_proc varchar2(100) := 'p_get_estados';
begin
for c_p in c_estados loop
n_counter := n_counter + 1;
l_namesArray(n_counter) := c_p.codigo;
l_valuesArray(n_counter) := c_p.descripcion;
end loop;
pk_microcaller.resultOKHeader(v_proc, to_char(n_counter));
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'option_list.xsl');
pk_microcaller.retvals(l_namesArray, l_valuesArray);
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter();
end p_get_estados;
/*
* Da los paises disponibles
*/
procedure p_get_paises is
cursor c_paises is
select a.codigo, a.descripcion
from ggc_pais a;
n_counter number := 0;
l_namesArray owa.vc_arr;
l_valuesArray owa.vc_arr;
v_proc varchar2(100) := 'p_get_paises';
begin
for c_p in c_paises loop
n_counter := n_counter + 1;
l_namesArray(n_counter) := c_p.codigo;
l_valuesArray(n_counter) := c_p.descripcion;
end loop;
pk_microcaller.resultOKHeader(v_proc, to_char(n_counter));
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'option_list.xsl');
pk_microcaller.retvals(l_namesArray, l_valuesArray);
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter();
end p_get_paises;
/*
* Da las monedas disponibles
*/
procedure p_get_monedas is
cursor c_monedas is
select a.codigo, a.descripcion
from ggc_moneda a;
n_counter number := 0;
l_namesArray owa.vc_arr;
l_valuesArray owa.vc_arr;
v_proc varchar2(100) := 'p_get_monedas';
begin
for c_m in c_monedas loop
n_counter := n_counter + 1;
l_namesArray(n_counter) := c_m.codigo;
l_valuesArray(n_counter) := c_m.descripcion;
end loop;
pk_microcaller.resultOKHeader(v_proc, to_char(n_counter));
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'option_list.xsl');
pk_microcaller.retvals(l_namesArray, l_valuesArray);
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter();
end p_get_monedas;
/*
* recupera los datos de una nota de gastos
*/
procedure p_get_detalle_nota (pv_ng in varchar2) is
cursor c_paises is
select a.* from ggc_pais a;
cursor c_secciones is
select a.* from ggc_secciones a
order by a.orden;
r_nota ggc_nota_gastos%rowtype;
v_proc varchar2(100) := 'p_get_nota_gastos';
begin
select a.*
into r_nota
from ggc_nota_gastos a
where a.id = to_number(pv_ng);
pk_microcaller.resultOKHeader(v_proc,'1');
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'detalle_nota.xsl');
htp.prn('');
htp.prn(''||r_nota.id||'');
htp.prn(''||r_nota.usuario_id||'');
htp.prn(''||r_nota.usuario_nombre||'');
htp.prn('');
for c_s in c_secciones loop
htp.prn('');
end loop;
htp.prn('');
htp.prn(''||to_char(nvl(r_nota.reparto_coste,0),'900D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||r_nota.num_matricula||'');
htp.prn(''||r_nota.num_proveedor||'');
htp.prn('');
for c_s in c_secciones loop
htp.prn('');
end loop;
htp.prn('');
htp.prn(''||to_char(nvl(r_nota.reparto_coste_pro,0),'900D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn('');
for c_p in c_paises loop
htp.prn('');
end loop;
htp.prn('');
htp.prn(''||r_nota.lugar||'');
htp.prn(''||to_char(r_nota.fecha_ini,'dd/mm/yyyy')||'');
htp.prn(''||to_char(r_nota.fecha_fin,'dd/mm/yyyy')||'');
htp.prn(''||r_nota.objetivo||'');
htp.prn(''||f_da_estado(r_nota.estado)||'');
htp.prn(''||to_char(nvl(r_nota.total_circuito_notas,0),'99999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(nvl(r_nota.total_kilometraje,0),'99999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn('');
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter;
exception
when no_data_found then
pk_microcaller.resultERROR(v_proc, '1', sqlerrm);
end p_get_detalle_nota;
/*
* recupera los datos de una nota de gastos
*/
procedure p_get_nuevo_detalle_nota is
cursor c_paises is
select a.* from ggc_pais a;
cursor c_secciones is
select a.* from ggc_secciones a
order by a.orden;
v_proc varchar2(100) := 'p_get_nuevo_detalle_nota';
begin
pk_microcaller.resultOKHeader(v_proc,'1');
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'detalle_nota.xsl');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
for c_s in c_secciones loop
htp.prn('');
end loop;
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
for c_s in c_secciones loop
htp.prn('');
end loop;
htp.prn('');
htp.prn('');
htp.prn('');
for c_p in c_paises loop
htp.prn('');
end loop;
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter;
exception
when no_data_found then
pk_microcaller.resultERROR(v_proc, '1', sqlerrm);
end p_get_nuevo_detalle_nota;
procedure p_get_dieta_km_manutencion (pv_ng in varchar2) is
cursor c_dietas_manutencion (p_nota in varchar2) is
select a.codigo, a.descripcion , a.codigo tipo_coste, nvl(b.id,0) id_dieta, nvl(b.num_dietas,0) num_dietas,
nvl(b.exento,0) exento, nvl(b.cotiza,0) cotiza, nvl(b.total,0) total,
nvl( (select z.porcentaje from ggc_formulas z, ggc_nota_gastos c
where z.fecha_ini <= c.fecha_ini
and z.fecha_fin >= c.fecha_fin
and z.cod_clase_gasto = a.codigo
and c.id = to_number(p_nota)), 0) porcentaje ,
nvl( (select z.monto from ggc_formulas z, ggc_nota_gastos c
where z.fecha_ini <= c.fecha_ini
and z.fecha_fin >= c.fecha_fin
and z.cod_clase_gasto = a.codigo
and c.id = to_number(p_nota)), 0) monto
from ggc_clase_gasto a, ggc_dieta_km_manutencion b
where a.codigo = b.cod_clase_gasto(+)
and b.id_ng (+) = to_number(p_nota)
and a.codigo in ('NACO', 'NAME', 'INCO', 'INME', 'KILO')
order by a.orden asc, id_dieta;
v_proc varchar2(100) := 'p_get_dieta_km_manutencion';
n_total_cotiza number := 0; -- aņadido por apons: 31.oct
n_total_exento number := 0; -- aņadido por apons: 31.oct
n_total_manutencion number := 0;
n_total_kilometraje number := 0;
n_counter number := 0;
begin
pk_microcaller.resultOKHeader(v_proc,'1');
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'dieta_km_manutencion.xsl');
htp.prn ('');
for c_m in c_dietas_manutencion(pv_ng) loop
n_counter := n_counter + 1;
htp.prn ('');
htp.prn(''||c_m.tipo_coste||'');
htp.prn(''||c_m.descripcion||'');
htp.prn(''||to_char(nvl(c_m.num_dietas,0),'999990','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(nvl(c_m.exento,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(nvl(c_m.cotiza,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(nvl(c_m.total,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn('');
htp.prn ('');
n_total_cotiza := n_total_cotiza + to_number(c_m.cotiza); -- 31.oct, por apons
n_total_exento := n_total_exento + to_number(c_m.exento); -- 31.oct, por apons
if (c_m.tipo_coste != 'KILO') then
n_total_manutencion := n_total_manutencion + to_number(c_m.cotiza) + to_number(c_m.exento);
else
n_total_kilometraje := to_number(c_m.cotiza) + to_number(c_m.exento);
end if;
end loop;
htp.prn(''||to_char(n_total_manutencion,'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(n_total_kilometraje,'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(n_total_manutencion + n_total_kilometraje,'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(n_total_cotiza,'999990D99','NLS_NUMERIC_CHARACTERS=,.')||''); -- 31.oct, por apons, 31.oct por mspiritu
htp.prn(''||to_char(n_total_exento,'999990D99','NLS_NUMERIC_CHARACTERS=,.')||''); -- 31.oct, por apons, 31.oct, por mespiritu
htp.prn ('');
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter;
exception
when no_data_found then
pk_microcaller.resultERROR(v_proc, '1', sqlerrm);
end p_get_dieta_km_manutencion;
procedure p_get_dieta_nota_gastos (pv_ng in varchar2) is
cursor c_dietas_ng (p_nota in varchar2) is
select a.codigo, a.descripcion , a.codigo tipo_coste, nvl(b.id,0) id_dieta, nvl(b.total,0) total, b.descripcion desc_dieta,
(select sum(z.total) from ggc_dieta_nota_gasto z where z.id_ng = b.id_ng and z.cod_clase_gasto = a.codigo ) total_dieta,
(select count(*) from ggc_dieta_nota_gasto z where z.id_ng = b.id_ng and z.cod_clase_gasto = a.codigo ) nro_total
from ggc_clase_gasto a, ggc_dieta_nota_gasto b
where a.codigo = b.cod_clase_gasto
and b.id_ng = to_number(p_nota)
and a.codigo not in ('NACO', 'NAME', 'INCO', 'INME', 'KILO')
order by a.orden asc, id_dieta;
cursor c_clase_gasto is
select a.codigo, a.descripcion from ggc_clase_gasto a
where a.codigo not in ('NACO', 'NAME', 'INCO', 'INME', 'KILO')
order by a.orden;
v_proc varchar2(100) := 'p_get_dieta_nota_gastos';
n_total_nota_gastos number := 0;
n_counter number := 0;
c_dieta varchar2(50) := 'XXX';
l_namesArray owa.vc_arr;
l_valuesArray owa.vc_arr;
begin
for c_p in c_clase_gasto loop
n_counter := n_counter + 1;
l_namesArray(n_counter) := c_p.codigo;
l_valuesArray(n_counter) := c_p.descripcion;
end loop;
pk_microcaller.resultOKHeader(v_proc,'1');
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'dieta_nota_gastos.xsl');
htp.prn ('');
n_counter := 0;
for c_n in c_dietas_ng(pv_ng) loop
n_counter := n_counter + 1;
if (c_dieta != c_n.codigo) then
if(n_counter > 1) then
htp.prn ('');
end if;
htp.prn ('');
end if;
/* 31.oct
if (c_n.id_dieta != 0) then
htp.prn('');
n_total_nota_gastos := n_total_nota_gastos + to_number(c_n.total);
end if;
*/
-- 31.oct, por godo
if (c_n.id_dieta != 0) then
htp.prn('');
htp.prn('' || c_n.desc_dieta ||'');
htp.prn('');
n_total_nota_gastos := n_total_nota_gastos + to_number(c_n.total);
end if;
c_dieta := c_n.codigo;
end loop;
if(n_counter > 0) then
htp.prn ('');
end if;
htp.prn(''||to_char(n_counter)||'');
htp.prn(''||to_char(nvl(n_total_nota_gastos,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn('');
pk_microcaller.retvals(l_namesArray, l_valuesArray);
htp.prn('');
htp.prn ('');
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter;
exception
when no_data_found then
pk_microcaller.resultERROR(v_proc, '1', sqlerrm);
end p_get_dieta_nota_gastos;
procedure p_get_clase_gasto is
cursor c_clase_gasto is
select a.codigo, a.descripcion from ggc_clase_gasto a
where a.codigo not in ('NACO', 'NAME', 'INCO', 'INME', 'KILO')
order by a.orden asc;
n_counter number := 0;
l_namesArray owa.vc_arr;
l_valuesArray owa.vc_arr;
v_proc varchar2(100) := 'p_get_clase_gasto';
begin
for c_p in c_clase_gasto loop
n_counter := n_counter + 1;
l_namesArray(n_counter) := c_p.codigo;
l_valuesArray(n_counter) := c_p.descripcion;
end loop;
pk_microcaller.resultOKHeader(v_proc, to_char(n_counter));
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'dieta_nota_gastos.xsl');
htp.prn('');
htp.prn('');
pk_microcaller.retvals(l_namesArray, l_valuesArray);
htp.prn('');
htp.prn('');
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter();
end p_get_clase_gasto;
procedure p_update_dieta_resumenes(pv_ng in varchar2
,pv_total_circuito_provisiones in varchar2) is
v_proc varchar2(100) := 'p_update_dieta_resumenes';
begin
update ggc_nota_gastos a
set a.total_a_deducir = to_number(pv_total_circuito_provisiones),
a.total_a_liquidar = a.total_circuito_notas - to_number(pv_total_circuito_provisiones)
where a.id = to_number(pv_ng);
pk_microcaller.resultOK(v_proc, '0');
exception
when others then
pk_microcaller.resultERROR(v_proc,'1',sqlerrm);
end p_update_dieta_resumenes;
procedure p_get_dieta_resumenes (pv_ng in varchar2) is
cursor c_resumenes (p_nota in varchar2) is
select a.total_exento exento,
a.total_cotiza cotiza,
a.total_kilometraje total, 'M' tipo
from ggc_nota_gastos a
where a.id = to_number(p_nota)
union
select nvl(a.total_a_deducir,0) exento,
nvl(a.total_a_liquidar,0) cotiza,
a.total_circuito_notas total, 'N' tipo
from ggc_nota_gastos a
where a.id = to_number(p_nota)
order by tipo;
v_proc varchar2(100) := 'p_get_dieta_resumenes';
n_total number:=0; --31.oct, por marco
begin
pk_microcaller.resultOKHeader(v_proc,'1');
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'dieta_resumenes.xsl');
htp.prn ('');
for c_n in c_resumenes(pv_ng) loop
htp.prn('');
htp.prn (''||c_n.tipo||'' );
htp.prn (''||to_char(nvl(c_n.exento,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn (''||to_char(nvl(c_n.cotiza,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn (''||to_char(nvl(c_n.total,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
n_total := n_total + nvl(c_n.total,0); --31.oct, por marco
htp.prn ('');
end loop;
htp.prn (''||to_char(n_total,'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'' ); --31.oct, por marco
htp.prn (''); --31.oct, por marco
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter;
exception
when no_data_found then
pk_microcaller.resultERROR(v_proc, '1', sqlerrm);
end p_get_dieta_resumenes;
/*
* Inserta la cabecera de una nota de gastos
*
*/
procedure p_set_nota_gastos(pv_usuario_id in varchar2
, pv_usuario in varchar2
, pv_seccion in varchar2
, pv_reparto_coste in varchar2
, pv_matric in varchar2
, pv_proveedor in varchar2
, pv_seccion_pro in varchar2
, pv_reparto_coste_pro in varchar2
, pv_pais in varchar2
, pv_lugar in varchar2
, pv_fecha_ini in varchar2
, pv_fecha_fin in varchar2
, pv_objetivo in varchar2
, pv_moneda in varchar2) is
n_id number;
v_proc varchar2(100) := 'p_set_nota_gastos';
begin
select s_ggc_ng.nextval
into n_id
from dual;
if (pv_seccion_pro !='null') then
insert into ggc_nota_gastos(id
,usuario_id
,usuario_nombre
,seccion
,reparto_coste
,num_matricula
,num_proveedor
,seccion_pro
,reparto_coste_pro
,pais
,lugar
,fecha_ini
,fecha_fin
,objetivo
,moneda
,estado
,fecha_creacion)
values (n_id
,pv_usuario_id
,pv_usuario
,pv_seccion
,to_number(pv_reparto_coste)
,pv_matric
,pv_proveedor
,pv_seccion_pro
,to_number(pv_reparto_coste_pro)
,pv_pais
,pv_lugar
,to_date(pv_fecha_ini,'dd/mm/yyyy')
,to_date(pv_fecha_fin,'dd/mm/yyyy')
,pv_objetivo
,pv_moneda
,'ABR'
,sysdate);
else
insert into ggc_nota_gastos(id
,usuario_id
,usuario_nombre
,seccion
,reparto_coste
,num_matricula
,num_proveedor
,pais
,lugar
,fecha_ini
,fecha_fin
,objetivo
,moneda
,estado
,fecha_creacion)
values (n_id
,pv_usuario_id
,pv_usuario
,pv_seccion
,to_number(pv_reparto_coste)
,pv_matric
,pv_proveedor
,pv_pais
,pv_lugar
,to_date(pv_fecha_ini,'dd/mm/yyyy')
,to_date(pv_fecha_fin,'dd/mm/yyyy')
,pv_objetivo
,pv_moneda
,'ABR'
,sysdate);
end if;
pk_microcaller.resultOK(v_proc, to_char(n_id));
exception
when others then
pk_microcaller.resultERROR(v_proc,'1',sqlerrm);
end p_set_nota_gastos;
/*
* Inserta lineas de kilometraje y manutencion
*/
procedure p_set_dieta_km_manutencion (pv_ng in varchar2
, pv_tipo_coste in owa.vc_arr
, pv_nro_dietas in owa.vc_arr
, pv_exento in owa.vc_arr
, pv_cotiza in owa.vc_arr) is
n_total number := 0;
n_total_exento number:=0;
n_total_cotiza number:=0;
v_proc varchar2(100) := 'p_set_dieta_km_manutencion';
begin
for i in 1..pv_tipo_coste.count loop
insert into ggc_dieta_km_manutencion(id, id_ng, cod_clase_gasto, num_dietas, exento, cotiza, total)
values(s_ggc_dietas.nextval, to_number(pv_ng), pv_tipo_coste(i), to_number(pv_nro_dietas(i)), to_number(pv_exento(i)), to_number(pv_cotiza(i)), to_number(pv_exento(i))+to_number(pv_cotiza(i)));
n_total_exento := n_total_exento + to_number(pv_exento(i));
n_total_cotiza := n_total_cotiza + to_number(pv_cotiza(i));
n_total := n_total + pv_exento(i) + pv_cotiza(i);
end loop;
update ggc_nota_gastos a
set a.total_kilometraje = n_total,
a.total_exento = n_total_exento,
a.total_cotiza = n_total_cotiza
where a.id = to_number(pv_ng);
pk_microcaller.resultOK(v_proc,'0');
exception
when others then
pk_microcaller.resultERROR(v_proc,'1',sqlerrm);
end p_set_dieta_km_manutencion;
/*
* Inserta lineas de circuito de notas de gasto
*/
procedure p_set_dieta_nota_gasto( pv_ng in varchar2
, pv_tipo_coste in varchar2
, pv_descripcion in varchar2
, pv_total in varchar2) is
n_total number := 0;
v_proc varchar2(100) := 'p_set_dieta_nota_gasto';
begin
insert into ggc_dieta_nota_gasto(id,id_ng, cod_clase_gasto ,descripcion,total)
values (s_ggc_dietas.nextval, to_number(pv_ng),pv_tipo_coste, pv_descripcion, to_number(pv_total));
n_total := n_total + pv_total;
update ggc_nota_gastos a
set a.total_circuito_notas = nvl(a.total_circuito_notas, 0) + n_total
where a.id = to_number(pv_ng);
pk_microcaller.resultOK(v_proc, '0');
exception
when others then
pk_microcaller.resultERROR(v_proc,'1',sqlerrm);
end p_set_dieta_nota_gasto;
procedure p_set_dieta_nota_gasto (pv_ng in varchar2
, pv_tipo_coste in owa.vc_arr
, pv_descripcion in owa.vc_arr
, pv_total in owa.vc_arr) is
n_total number := 0;
v_proc varchar2(100) := 'p_set_dieta_nota_gasto';
begin
for i in 1..pv_tipo_coste.count loop
if (pv_tipo_coste(i) != 'null') then
insert into ggc_dieta_nota_gasto(id, id_ng, cod_clase_gasto, descripcion, total)
values (s_ggc_dietas.nextval, to_number(pv_ng),pv_tipo_coste(i),pv_descripcion(i),to_number(pv_total(i)));
n_total := n_total + pv_total(i);
end if;
end loop;
update ggc_nota_gastos a
set a.total_circuito_notas = n_total
where a.id = to_number(pv_ng);
pk_microcaller.resultOK(v_proc, '0');
exception
when others then
pk_microcaller.resultERROR(v_proc,'1',sqlerrm);
end p_set_dieta_nota_gasto;
procedure p_get_detalle_dieta_km_man(pv_ng in varchar2
, pv_tipodieta in varchar2) is
cursor c_detalles is
select a.*
from ggc_detalles_dieta a, ggc_dieta_km_manutencion b
where a.id_dieta = b.id
and b.id_ng = to_number(pv_ng)
and b.cod_clase_gasto = pv_tipodieta;
v_proc varchar2(100) := 'p_get_detalle_dieta_km_man';
n_counter number := 0;
begin
pk_microcaller.resultOKHeader(v_proc,'1');
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'detalle_dietas_km_man.xsl');
htp.prn('');
for c_detalle in c_detalles loop
htp.prn('');
htp.prn(''||c_detalle.km||'');
htp.prn(''||c_detalle.origen||'');
htp.prn(''||c_detalle.destino||'');
htp.prn('');
n_counter := n_counter + 1;
end loop;
htp.prn('');
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter;
exception
when no_data_found then
pk_microcaller.resultERROR(v_proc, '-1', sqlerrm);
end p_get_detalle_dieta_km_man;
procedure p_set_detalle_dieta_km_man (pv_ng in varchar2
, pv_tipodieta in varchar2
, pv_kms in owa.vc_arr
, pv_origen in owa.vc_arr
, pv_destino in owa.vc_arr) is
--id_dieta ggc_dieta_km_manutencion.id%type ;
id_dieta_nota number:=0 ;
v_proc varchar2(100) := 'p_set_detalle_dieta_km_man';
n_total_km number:=0;
l_tipo_coste owa.vc_arr;
l_nro_dietas owa.vc_arr;
begin
select b.id into id_dieta_nota
from ggc_dieta_km_manutencion b
where b.id_ng = to_number(pv_ng)
and b.cod_clase_gasto=pv_tipodieta;
--Borramos los registros
delete from ggc_detalles_dieta a where a.id_dieta = id_dieta_nota;
------------------------
for i in 1..pv_kms.count loop
if (to_number(pv_kms(i)) != 0) then
n_total_km := n_total_km + to_number(pv_kms(i));
insert into ggc_detalles_dieta (id , id_dieta , km , origen , destino)
values (s_ggc_detalle_dietas.nextval, id_dieta_nota, to_number(pv_kms(i)),pv_origen(i),pv_destino(i));
end if;
end loop;
--- Actualizar total en tabla dieta_km
l_tipo_coste(1):= 'KILO';
l_nro_dietas(1):= to_char(n_total_km);
p_update_dieta_km_manutencion (pv_ng, l_tipo_coste, l_nro_dietas);
pk_microcaller.resultOK(v_proc, '0');
exception
when others then
pk_microcaller.resultERROR(v_proc,'1',sqlerrm);
end p_set_detalle_dieta_km_man;
/*
* Actualiza una nota de gastos
*/
procedure p_update_nota_gastos(pv_ng in varchar2
, pv_usuario in varchar2
, pv_seccion in varchar2
, pv_reparto_coste in varchar2
, pv_matric in varchar2
, pv_proveedor in varchar2
, pv_seccion_pro in varchar2
, pv_reparto_coste_pro in varchar2
, pv_pais in varchar2
, pv_lugar in varchar2
, pv_fecha_ini in varchar2
, pv_fecha_fin in varchar2
, pv_objetivo in varchar2
, pv_moneda in varchar2 ) is
v_proc varchar2(100) := 'p_update_nota_gastos';
begin
if (pv_seccion_pro!='null') then
update ggc_nota_gastos a
set a.usuario_nombre = pv_usuario
, a.seccion = pv_seccion
, a.reparto_coste = to_number(pv_reparto_coste)
, a.num_matricula = pv_matric
, a.num_proveedor = pv_proveedor
, a.seccion_pro = pv_seccion_pro
, a.reparto_coste_pro = to_number(pv_reparto_coste_pro)
, a.pais = pv_pais
, a.lugar = pv_lugar
, a.fecha_ini = to_date(pv_fecha_ini,'dd/mm/yyyy')
, a.fecha_fin = to_date(pv_fecha_fin,'dd/mm/yyyy')
, a.objetivo = pv_objetivo
, a.moneda = pv_moneda
where a.id = to_number(pv_ng);
else
update ggc_nota_gastos a
set a.usuario_nombre = pv_usuario
, a.seccion = pv_seccion
, a.reparto_coste = to_number(pv_reparto_coste)
, a.num_matricula = pv_matric
, a.num_proveedor = pv_proveedor
, a.seccion_pro = null
, a.reparto_coste_pro = null
, a.pais = pv_pais
, a.lugar = pv_lugar
, a.fecha_ini = to_date(pv_fecha_ini,'dd/mm/yyyy')
, a.fecha_fin = to_date(pv_fecha_fin,'dd/mm/yyyy')
, a.objetivo = pv_objetivo
, a.moneda = pv_moneda
where a.id = to_number(pv_ng);
end if;
pk_microcaller.resultOK(v_proc,'0');
exception
when others then
pk_microcaller.resultERROR(v_proc,'1',sqlerrm);
end p_update_nota_gastos;
procedure p_delete_nota_gastos (pv_ng in owa.vc_arr) is
estado ggc_nota_gastos.estado%type;
v_proc varchar2(100) := 'p_delete_nota_gastos';
begin
for i in 1..pv_ng.count loop
if pv_ng(i) != 'null' then
-- Verificar el estado
select a.estado into estado
from ggc_nota_gastos a
where a.id = to_number(pv_ng(i));
if estado = 'ABR' then
-- Borrar detalles dietas km_manutencion
delete from ggc_detalles_dieta a
where a.id_dieta in
(select a.id from ggc_dieta_km_manutencion a
where a.id_ng = to_number(pv_ng(i)) );
-- Borrar dietas km_manutencion
delete from ggc_dieta_km_manutencion a
where a.id_ng = to_number(pv_ng(i));
-- Borrar dietas notas gastos
delete from ggc_dieta_nota_gasto a
where a.id_ng = to_number(pv_ng(i));
-- Borrar cabecera nota de gasto
delete from ggc_nota_gastos a
where a.id = to_number(pv_ng(i));
end if;
end if;
end loop;
pk_microcaller.resultOK(v_proc, '0');
exception
when others then
pk_microcaller.resultERROR(v_proc,'-1',sqlerrm);
end p_delete_nota_gastos;
/*
* Actualiza las dietas de kilometraje y manutenci?
*/
procedure p_update_dieta_km_manutencion (pv_ng in varchar2
, pv_tipo_coste in owa.vc_arr
, pv_nro_dietas in owa.vc_arr) is
n_total number := 0;
n_total_exento number:=0;
n_total_cotiza number:=0;
porcentaje ggc_formulas.porcentaje%type;
monto ggc_formulas.monto%type;
n_total_dieta number:=0;
n_exento number:=0;
n_cotiza number:=0;
v_proc varchar2(100) := 'p_update_dieta_km_manutencion';
total_km ggc_dieta_km_manutencion.total%type;
total_km_exento ggc_dieta_km_manutencion.exento%type;
total_km_cotiza ggc_dieta_km_manutencion.cotiza%type;
begin
for i in 1..pv_tipo_coste.count loop
if pv_tipo_coste(i) != 'null' then
-- Buscar en la tabla de formulas el porcentaje y monto
select a.porcentaje, a.monto into porcentaje, monto
from ggc_formulas a, ggc_nota_gastos b
where a.fecha_ini <= b.fecha_ini
and a.fecha_fin >= b.fecha_fin
and b.id = to_number(pv_ng)
and a.cod_clase_gasto = pv_tipo_coste(i);
n_total_dieta := to_number(pv_nro_dietas(i))* nvl(monto,0);
n_exento := n_total_dieta*(nvl(porcentaje,0)/100);
n_cotiza := n_total_dieta - n_exento;
update ggc_dieta_km_manutencion
set num_dietas = to_number(pv_nro_dietas(i)),
exento = n_exento,
cotiza = n_cotiza,
total = n_total_dieta
where id_ng = to_number(pv_ng)
and cod_clase_gasto = pv_tipo_coste(i);
n_total_exento := n_total_exento + n_exento;
n_total_cotiza := n_total_cotiza + n_cotiza;
n_total := n_total + n_total_dieta;
end if;
end loop;
select sum(a.total), sum(a.exento), sum(a.cotiza)
into total_km, total_km_exento, total_km_cotiza
from ggc_dieta_km_manutencion a
where a.id_ng = to_number(pv_ng);
update ggc_nota_gastos a
set a.total_kilometraje = total_km,
a.total_exento = total_km_exento,
a.total_cotiza = total_km_cotiza
where a.id = to_number(pv_ng);
pk_microcaller.resultOK(v_proc, '0');
exception
when others then
rollback;
pk_microcaller.resultERROR(v_proc,'1',sqlerrm);
end p_update_dieta_km_manutencion;
/*
* Actualiza las dietas del cicuito de notas de gastos
*/
procedure p_update_dieta_nota_gasto (pv_ng in varchar2
, pv_tipo_coste in owa.vc_arr
, pv_descripcion in owa.vc_arr
, pv_total in owa.vc_arr) is
n_total number := 0;
v_proc varchar2(100) := 'p_update_dieta_nota_gasto';
begin
--borramos las dietas anteriores
delete from ggc_dieta_nota_gasto a
where a.id_ng = to_number(pv_ng);
--insertamos las dietas modificadas
for i in 1..pv_tipo_coste.count loop
if (pv_tipo_coste(i) != 'null') then
insert into ggc_dieta_nota_gasto (id,id_ng, cod_clase_gasto, descripcion, total)
values (s_ggc_dietas.nextval, to_number(pv_ng),pv_tipo_coste(i),pv_descripcion(i),to_number(pv_total(i)));
n_total := n_total + pv_total(i);
end if;
end loop;
update ggc_nota_gastos a
set a.total_circuito_notas = n_total
where a.id = to_number(pv_ng);
pk_microcaller.resultOK(v_proc, '0');
exception
when others then
rollback;
pk_microcaller.resultERROR(v_proc,'1',sqlerrm);
end p_update_dieta_nota_gasto;
/*
* Cambia el estado de la nota de gastos
*/
procedure p_cambio_estado (pv_ng in owa.vc_arr, pv_estado in owa.vc_arr) is
v_proc varchar2(100) := 'p_cambio_estado';
estado ggc_estado.codigo%type;
estado_final varchar2(8):='AAA';
begin
for i in 1..pv_ng.count loop
if (pv_ng(i) is not null) and ( pv_ng(i) != 'null') then
select a.estado into estado
from ggc_nota_gastos a
where a.id = to_number(pv_ng(i));
if (pv_estado(i)='CER') then
if (estado ='ABR') then
estado_final:= 'CSV';
end if;
elsif (pv_estado(i)='VAL') then
if (estado ='CSV') then
estado_final:= 'CER';
end if;
elsif (pv_estado(i)='REC') then
if (estado ='CSV') then
estado_final:= 'REC';
end if;
else
estado_final := 'AAA';
end if;
if estado_final != 'AAA' then
update ggc_nota_gastos a
set a.estado = estado_final
where a.id = to_number(pv_ng(i));
estado_final := 'AAA';
end if;
end if;
end loop;
pk_microcaller.resultOK(v_proc,'0');
exception
when others then
pk_microcaller.resultERROR(v_proc, '1', sqlerrm);
end p_cambio_estado;
procedure p_get_estado_nota(pv_ng in varchar2)is
v_proc varchar2(100) := 'p_get_estado_nota';
id_estado ggc_nota_gastos.estado%type;
id_usuario ggc_nota_gastos.usuario_id%type;
estado ggc_estado.descripcion%type;
begin
select a.usuario_id, b.codigo, b.descripcion
into id_usuario, id_estado, estado
from ggc_nota_gastos a, ggc_estado b
where a.estado = b.codigo
and a.id = to_number(pv_ng);
pk_microcaller.resultOKHeader(v_proc,'1');
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'botonera.xsl');
htp.prn('');
htp.prn(''||estado||'');
htp.prn(''||id_usuario||'');
htp.prn('');
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter;
exception
when no_data_found then
pk_microcaller.resultOKHeader(v_proc,'0');
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'botonera.xsl');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter;
when others then
pk_microcaller.resultERROR(v_proc, '-1', sqlerrm);
end p_get_estado_nota;
function fecha_solapada (p_nota_id in number, p_usuario_id in varchar2, p_fecha in date) return varchar2 is
-- Si la fecha no esta solapada retornamos 000000
-- Si esta solapada, la primera retornara 000000 la segunda 000100 etc.
cursor notas is
select a.*
from ggc_nota_gastos a
where a.usuario_id = p_usuario_id
and a.fecha_ini = p_fecha
order by id;
l_cont number;
begin
l_cont:=0;
for unanota in notas loop
if unanota.id = p_nota_id then
return '00'||lpad(l_cont, 2, '0')||'00';
end if;
l_cont:=l_cont+1;
end loop;
end;
-- 31.oct, actualizado por marco
procedure p_envia_a_sap(pv_ng in owa.vc_arr) is
cursor c_dietas (p_ng in varchar2) is
select b.codigo_sap, a.total
/*
select *
from (
select b.codigo_sap, a.total
from ggc_dieta_km_manutencion a, ggc_clase_gasto b
where a.cod_clase_gasto = b.codigo
and a.id_ng = to_number(p_ng)
union all
select n.codigo_sap, m.total
from ggc_dieta_nota_gasto m, ggc_clase_gasto n
where m.cod_clase_gasto = n.codigo
and m.id_ng = to_number(p_ng)
order by codigo_sap asc
) where total != 0;
*/
-- 31.oct, marco
from ggc_dieta_km_manutencion a, ggc_clase_gasto b
where a.cod_clase_gasto = b.codigo
and a.id_ng = to_number(p_ng)
union
select n.codigo_sap, m.total
from ggc_dieta_nota_gasto m, ggc_clase_gasto n
where m.cod_clase_gasto = n.codigo
and m.id_ng = to_number(p_ng)
order by codigo_sap asc;
r_nota ggc_nota_gastos%rowtype;
v_proc varchar2(100) := 'p_envia_a_sap';
codigo_sap varchar2(8) := 'NULL';
total_dieta number:=0;
begin
pk_microcaller.resultOKHeader(v_proc,'1');
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'envia_a_sap.xsl');
htp.prn('');
for i in 1..pv_ng.count loop
if (pv_ng(i) != 'null') then
select a.* into r_nota from ggc_nota_gastos a
where a.id = to_number(pv_ng(i));
if (r_nota.estado = 'CER') then
htp.prn('');
htp.prn('1');
htp.prn('');
htp.prn('');
-- htp.prn('000000');
htp.prn(''||fecha_solapada (r_nota.id, r_nota.usuario_id, r_nota.fecha_ini)||'');
-- htp.prn('');
-- htp.prn('240000');
htp.prn('');
htp.prn('230000');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
if (r_nota.pais = 'ES') then
htp.prn('');
else
htp.prn('');
end if;
htp.prn('');
htp.prn('4');
htp.prn('2');
htp.prn('');
for r_dieta_nota in c_dietas(pv_ng(i)) loop
if (r_dieta_nota.codigo_sap != codigo_sap) then
if (total_dieta != 0) then
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('SX');
htp.prn('');
htp.prn('');
htp.prn('');
total_dieta:= 0;
end if;
end if;
total_dieta := total_dieta + nvl(r_dieta_nota.total,0);
codigo_sap := r_dieta_nota.codigo_sap;
end loop;
if (total_dieta != 0) then
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('SX');
htp.prn('');
htp.prn('');
htp.prn('');
total_dieta:= 0;
end if;
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
if (r_nota.seccion_pro is not null) and (length(trim(r_nota.seccion_pro)) != 0) then
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
htp.prn('');
end if;
htp.prn('');
htp.prn('');
-- cambia el estado a enviado a SAP
update ggc_nota_gastos a
set a.estado = 'SAP'
where a.id = to_number(pv_ng(i));
end if;
end if;
end loop;
htp.prn('');
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter;
exception
when no_data_found then
pk_microcaller.resultERROR(v_proc, '-1', sqlerrm);
end p_envia_a_sap;
procedure p_envia_a_sap_batch is
cursor c_notas is
select a.id from ggc_nota_gastos a
where a.estado='CER';
v_proc varchar2(100) := 'p_envia_a_sap_batch';
l_ng owa.vc_arr;
n_counter number:=0;
begin
for r_nota in c_notas loop
n_counter := n_counter + 1 ;
l_ng(n_counter):= to_char(r_nota.id);
end loop;
if (n_counter > 0) then
p_envia_a_sap(l_ng);
end if;
exception
when no_data_found then
pk_microcaller.resultERROR(v_proc, '-1', sqlerrm);
end p_envia_a_sap_batch;
procedure p_impresion_nota (pv_ng in varchar2) is
cursor c_nota (pv_ng in varchar2) is
select a.*, b.descripcion desc_seccion, c.descripcion desc_seccion_pro
from ggc_nota_gastos a, ggc_secciones b, ggc_secciones c
where a.seccion = b.codigo
and a.seccion_pro = c.codigo (+)
and a.id = to_number(pv_ng);
cursor c_dieta_km (pv_ng in varchar2) is
select a.num_dietas, a.exento, a.cotiza, a.total, b.descripcion, b.codigo
from ggc_dieta_km_manutencion a, ggc_clase_gasto b
where a.id_ng = to_number(pv_ng)
and a.cod_clase_gasto = b.codigo
order by id asc;
cursor c_dieta_nota (pv_ng in varchar2) is
select a.cod_clase_gasto, b.descripcion , sum(a.total) total, count(*) nro_dietas
from ggc_dieta_nota_gasto a, ggc_clase_gasto b
where a.cod_clase_gasto = b.codigo
and a.id_ng = to_number(pv_ng)
group by a.cod_clase_gasto, b.descripcion ;
cursor c_resumenes (p_nota in varchar2) is
select a.total_exento exento,
a.total_cotiza cotiza,
a.total_kilometraje total, 'M' tipo
from ggc_nota_gastos a
where a.id = to_number(p_nota)
union
select nvl(a.total_a_deducir,0) exento,
nvl(a.total_a_liquidar,0) cotiza,
a.total_circuito_notas total, 'N' tipo
from ggc_nota_gastos a
where a.id = to_number(p_nota)
order by tipo;
v_proc varchar2(100) := 'p_impresion_nota';
n_counter number :=0;
n_total_manutencion number:=0;
n_total_kilometraje number:=0;
n_total_dietas_notas number:=0;
n_total_resumenes number:=0;
begin
pk_microcaller.resultOKHeader(v_proc,'1');
pk_microcaller.contentHeader('default','text/xml',cv_urlbase||'impresion.xsl');
for c_n in c_nota(pv_ng) loop
htp.prn('');
htp.prn(''||c_n.id||'');
htp.prn(''||c_n.usuario_nombre||'');
htp.prn('');
htp.prn(''||to_char(nvl(c_n.reparto_coste,0),'900D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||c_n.num_matricula||'');
htp.prn(''||c_n.num_proveedor||'');
htp.prn('');
htp.prn(''||to_char(nvl(c_n.reparto_coste_pro,0),'900D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||c_n.lugar||'');
htp.prn(''||to_char(c_n.fecha_ini,'dd/mm/yyyy')||'');
htp.prn(''||to_char(c_n.fecha_fin,'dd/mm/yyyy')||'');
htp.prn(''||to_char(c_n.fecha_creacion,'dd/mm/yyyy')||'');
htp.prn(''||c_n.objetivo||'');
htp.prn(''||f_da_estado(c_n.estado)||'');
htp.prn(''||to_char(nvl(c_n.total_circuito_notas,0),'99999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(nvl(c_n.total_kilometraje,0),'99999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn('');
for c_dieta in c_dieta_km(pv_ng) loop
n_counter := n_counter + 1;
htp.prn('');
htp.prn(''||c_dieta.codigo||'');
htp.prn(''||c_dieta.descripcion||'');
htp.prn(''||to_char(nvl(c_dieta.num_dietas,0),'999990','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(nvl(c_dieta.exento,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(nvl(c_dieta.cotiza,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(nvl(c_dieta.total,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
if (c_dieta.codigo != 'KILO') then
n_total_manutencion := n_total_manutencion + to_number(c_dieta.total);
else
n_total_kilometraje := n_total_kilometraje + to_number(c_dieta.total);
end if;
htp.prn('');
end loop;
htp.prn(''||to_char(n_total_manutencion,'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(n_total_kilometraje,'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn(''||to_char(n_total_manutencion + n_total_kilometraje,'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn('');
htp.prn('');
n_counter := 0;
for c_dieta in c_dieta_nota(pv_ng) loop
n_counter := n_counter + 1;
htp.prn('');
htp.prn(''||c_dieta.cod_clase_gasto||'');
htp.prn(''||c_dieta.descripcion||'');
htp.prn(''||c_dieta.nro_dietas||'');
htp.prn(''||to_char(nvl(c_dieta.total,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
n_total_dietas_notas := n_total_dietas_notas + to_number(c_dieta.total);
htp.prn('');
end loop;
htp.prn(''||to_char(n_total_dietas_notas,'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'');
htp.prn('');
htp.prn ('');
for c_resumen in c_resumenes(pv_ng) loop
htp.prn('');
htp.prn (''||c_resumen.tipo||'' );
htp.prn (''||to_char(nvl(c_resumen.exento,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'' );
htp.prn (''||to_char(nvl(c_resumen.cotiza,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'' );
htp.prn (''||to_char(nvl(c_resumen.total,0),'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'' );
n_total_resumenes := n_total_resumenes + nvl(c_resumen.total,0);
htp.prn ('');
end loop;
htp.prn (''||to_char(n_total_resumenes,'999990D99','NLS_NUMERIC_CHARACTERS=,.')||'' );
htp.prn ('');
htp.prn('');
end loop;
pk_microcaller.contentFooter('text/xml');
pk_microcaller.resultOkFooter;
exception
when no_data_found then
pk_microcaller.resultERROR('p_imprimir_nota', '-1', sqlerrm);
end p_impresion_nota;
end PK_MICROCALLS;
/