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; /