1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123 |
- CREATE OR REPLACE PACKAGE BODY NAF47.PKG_FACT_NAF_SOL AS
- /******************************************************************************
- NAME: PKG_FACT_NAF_SOL
- PURPOSE:
- REVISIONS:
- Ver Date Author Description
- --------- ---------- --------------- ------------------------------------
- 1.0 25/05/2016 etajanel 1. Created this package body.
- 2.0 27/11/2019 Innovare (HHGR/JAGV) 1. Adaptación del paquete para recibir soluciones
- ******************************************************************************/
- FUNCTION ULTIMO_TIPOCAMBIO(Pmoneda varchar2) RETURN NUMBER IS
- val_tc number;
- BEGIN
- select tipo_cambio_venta
- into val_tc
- from arcgtc
- where clase_cambio=Pmoneda
- and fecha= (select max(fecha)
- from arcgtc
- where clase_cambio=Pmoneda);
- return(val_tc);
- END;
- FUNCTION SIGUENTE_CORRELATIVO(PCIA NUMBER,popcion VARCHAR2) RETURN NUMBER IS
- val_correlativo number;
- BEGIN
- SELECT TO_NUMBER(VALOR) + 1
- INTO val_correlativo
- FROM PARAMETROS_VARIOS
- WHERE MODULO='FA'
- AND PANTALLA='SSO_FDIN'
- AND OPCION=popcion
- AND TO_NUMBER(CIA)=PCIA;
- UPDATE PARAMETROS_VARIOS SET VALOR = TO_CHAR(val_correlativo)
- WHERE MODULO='FA'
- AND PANTALLA='SSO_FDIN'
- AND OPCION=popcion
- AND TO_NUMBER(CIA)=PCIA;
- RETURN(val_correlativo);
- END;
- FUNCTION DIFERENCIAL(pcia number, -- Codigo de la compañia
- pcliente number, -- Codigo del cliente
- pInstalacion number, -- numero de enlace
- pnotransaccion number, --numero de orden de trabajo del enlace
- pValorAct number, -- valor de la nueva transaccion sobre el enlace
- pCodMoneda VARCHAR2 -- moneda de la nueva transaccion del enlace
- ) RETURN NUMBER IS
- CURSOR CUR_TRAN IS
- SELECT vmensual,codmoneda,DECODE(pcia,1,'01') cod_mondeda
- from sso_fdin
- where codempresa = pcia
- and codcliente=pcliente
- and instalacion=pinstalacion
- and notransaccion=pnotransaccion
- and activo='S'
- and tiposervicio='ENL'
- and fecha=(select max(fecha)
- from sso_fdin
- where codempresa = pcia
- and codcliente=pcliente
- and instalacion=pinstalacion
- and notransaccion=pnotransaccion
- and activo='S'
- and tiposervicio='ENL'
- );
- nValorAnt number;
- nCodmonedaAnt varchar2(4);
- nvalorTC number;
- dfecha_tc date;
- cCodMoneda_tc varchar2(4);
- nVal_direrencial number;
- BEGIN
- OPEN CUR_TRAN;
- FETCH CUR_TRAN INTO nValorAnt, nCodmonedaAnt,cCodMoneda_tc;
- CLOSE CUR_TRAN;
- IF ncodmonedaAnt != pCodMoneda THEN -- La moneda de la transaccion anterior es diferente a la moneda de la nueva transaccion
- nvalorTC := Tipo_cambio( cCodMoneda_tc, sysdate, dfecha_tc, 'C'); -- se obtiene el tipo de cambio del sistema NAF
- IF nCodmonedaAnt='USD' THEN -- La moneda anterior es dolares y la nueva moneda es local
- nVal_direrencial := NVL(pValorAct,0) - NVL((nValorAnt * nvalorTC),0);
- ELSE -- La moneda anterior es local y la nueva es dolares
- nVal_direrencial := NVL(pValorAct,0) - NVL((nValorAnt / nvalorTC),0);
- END IF;
- ELSE
- -- La moneda del servicio anterior es igual a la moneda de la nueva transaccion
- nVal_direrencial := NVL(pValorAct,0) - NVL(nValorAnt,0);
- END IF;
- IF nVal_direrencial < 0 THEN
- nVal_direrencial := 0;
- END IF;
- nVal_direrencial :=round(nVal_direrencial,2);
- --return nValorAnt;
- return nVal_direrencial;
- --RETURN nValorAnt;
- END;
- FUNCTION Existe_Cliente(pNO_CIA IN NUMBER,
- pNO_CLIENTE IN VARCHAR2,
- pNit VARCHAR2,
- pNOMBRE VARCHAR2) RETURN BOOLEAN IS
- v_cliente arccmc.no_cliente%type;
- BEGIN
- BEGIN
- SELECT no_cliente -- Busco el cliente por el codigo de siebel
- into v_cliente
- FROM ARCCMC
- WHERE TO_NUMBER(NO_CIA)=pNO_CIA
- AND NO_CLIENTE_SIEBEL =pNO_CLIENTE;
- EXCEPTION WHEN
- NO_DATA_FOUND THEN
- BEGIN
- SELECT no_cliente -- Busco el cliente por el nit
- into v_cliente
- FROM ARCCMC
- WHERE TO_NUMBER(NO_CIA)=pNO_CIA
- AND CEDULA = replace(substr(trim(pNIT),1,length(trim(pNIT))-1)||'-'||substr(trim(pNIT),length(trim(pNIT)),1),'--','-');
- EXCEPTION WHEN
- NO_DATA_FOUND THEN
- BEGIN
- SELECT no_cliente -- Busco el cliente por el nombre
- into v_cliente
- FROM ARCCMC
- WHERE TO_NUMBER(NO_CIA)=pNO_CIA
- AND NOMBRE =pnombre;
- EXCEPTION WHEN
- NO_DATA_FOUND THEN RETURN FALSE; -- EL CLIENTE NO EXISTE
- END;
- END;
- END;
- RETURN TRUE; -- EL CLIENTE SI EXISTE
- END;
- FUNCTION GET_MSG_DESCRIPTION(ID_RESULTADO IN NUMBER) RETURN VARCHAR2 IS
- --V_desc MSG_PKG_FACT_NAF_SOL.desc_msg%type;
- V_desc VARCHAR2(1000);
- BEGIN
- BEGIN
- SELECT desc_msg
- into v_Desc
- from MSG_PKG_FACT_NAF
- where id_msg=ID_RESULTADO;
- EXCEPTION WHEN NO_DATA_FOUND THEN
- V_desc:='Descripción no esta en la tabla de mensajes';
- END;
- RETURN v_Desc;
- END;
- PROCEDURE CREAR_CLIENTE(pNO_CIA IN VARCHAR2,
- pCOD_CLIENTE_SIEBEL IN VARCHAR2,
- pGRUPO IN VARCHAR2,
- pTIPO_CLIENTE IN VARCHAR2,
- pNOMBRE IN VARCHAR2,
- pNOMBRE_COMERCIAL IN VARCHAR2,
- pDIRECCION IN VARCHAR2,
- pFecha_Ingre IN DATE,
- pExcento_Imp IN VARCHAR2,
- pMONEDA_LIMITE IN VARCHAR2,
- pTELEFONO IN VARCHAR2,
- pPLAZO IN Number,
- pCedula IN VARCHAR2,
- pCLIENTE_NACIONAL IN VARCHAR2,
- pIND_ACEPTA_RETENCION IN VARCHAR2,
- pEXENTO_IVA IN VARCHAR2,
- pTipoPrecio IN VARCHAR2,
- pCentro IN VARCHAR2,
- pBALANCEFACTURA VARCHAR2,
- pNOMBRE_FISCAL VARCHAR2,
- PDIRECCION_FACTURA VARCHAR2,
- pFac_ANTICIPADO VARCHAR2,
- pCOD_CLIENTE_NAF IN OUT NUMBER,
- id_resultado IN OUT NUMBER,
- Desc_resultado IN OUT VARCHAR2) IS
- TmpVar NUMBER;
- BEGIN
- id_resultado := 0;
- Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
- IF Existe_Cliente(pNO_CIA,pCOD_CLIENTE_SIEBEL,pCedula,pNOMBRE) THEN
- id_resultado:=2;
- Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
- ELSE
- BEGIN
- SELECT NVL(MAX(to_number(NO_CLIENTE)),0) + 1
- INTO pCOD_CLIENTE_NAF
- FROM ARCCMC
- WHERE to_number(NO_CIA)=to_number(pNO_CIA);
- INSERT INTO ARCCMC(NO_CIA,NO_CLIENTE,GRUPO,TIPO_CLIENTE,NOMBRE,NOMBRE_COMERCIAL,DIRECCION,Fecha_Ingre,
- Excento_Imp,MONEDA_LIMITE,TELEFONO,PLAZO,Cedula,CLIENTE_NACIONAL,IND_ACEPTA_RETENCION,EXENTO_IVA,
- TIPOPRECIO,CENTRO,BALANCEFACTURA,NO_CLIENTE_SIEBEL,NOMBRE_LARGO)
- VALUES(pNO_CIA,pCOD_CLIENTE_NAF,/*pGRUPO*/'01',pTIPO_CLIENTE,pNOMBRE,pNOMBRE_COMERCIAL,pDIRECCION,pFecha_Ingre,
- pExcento_Imp,pMONEDA_LIMITE,pTELEFONO,pPLAZO,pCedula,pCLIENTE_NACIONAL,pIND_ACEPTA_RETENCION,pEXENTO_IVA,
- pTipoPrecio,pCentro,pBALANCEFACTURA,pCOD_CLIENTE_SIEBEL,pNOMBRE);
- EXCEPTION
- WHEN DUP_VAL_ON_INDEX THEN
- id_resultado := 2; -- Operación Fallida, Código de Cliente duplicado
- Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||'('||pCOD_CLIENTE_NAF||')';
- WHEN OTHERS THEN
- id_resultado := 3; -- Operación Fallida, Error al insertar en ARCCMC
- Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||SQLERRM;
- END;
- -- Crea de una vez grupo de facturacion 1
- ASIGNAR_GRUPOFAC(pNO_CIA, pCOD_CLIENTE_NAF,USER,pNOMBRE_FISCAL ,replace(PDIRECCION_FACTURA,',,',','));
- COMMIT;
- END IF;
- END;
- FUNCTION Existe_Cliente_Activo(pNO_CIA IN NUMBER,
- pNO_CLIENTE IN NUMBER
- ) RETURN NUMBER IS
- CURSOR CUR_CLI IS -- Para validar que exista el cliente
- SELECT no_cliente
- from arccmc
- WHERE TO_NUMBER(no_cia)=pNO_CIA
- and TO_NUMBER(no_cliente)=pNO_CLIENTE
- and F_CIERRE IS NULL;
- V_NO_CLIENTE ARCCMC.NO_CLIENTE%TYPE;
- BEGIN
- OPEN CUR_CLI;
- FETCH CUR_CLI into V_NO_CLIENTE;
- IF CUR_CLI%FOUND THEN
- CLOSE CUR_CLI;
- RETURN V_NO_CLIENTE;
- ELSE
- CLOSE CUR_CLI;
- RETURN 0;
- END IF;
- END;
- PROCEDURE ACTUALIZAR_CLIENTE(pNO_CIA IN VARCHAR2,
- pCOD_CLIENTE IN VARCHAR2,
- pNOMBRE IN VARCHAR2,
- pNOMBRE_COMERCIAL IN VARCHAR2,
- pDIRECCION IN VARCHAR2,
- pExcento_Imp IN VARCHAR2,
- pMONEDA_LIMITE IN VARCHAR2,
- pTELEFONO IN VARCHAR2,
- pPLAZO IN Number,
- pCedula IN VARCHAR2,
- pCLIENTE_NACIONAL IN VARCHAR2,
- pIND_ACEPTA_RETENCION IN VARCHAR2,
- pEXENTO_IVA IN VARCHAR2,
- pNOMBRE_FISCAL VARCHAR2,
- PDIRECCION_FACTURA VARCHAR2,
- pFac_ANTICIPADO VARCHAR2,
- id_resultado IN OUT NUMBER,
- Desc_resultado IN OUT VARCHAR2) IS
- BEGIN
- id_resultado := 0; -- Resultado exitoso
- Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
- IF Existe_Cliente_ACTIVO(pNO_CIA,pCOD_CLIENTE)=TO_NUMBER(pCOD_CLIENTE) THEN
- UPDATE arccmc set NOMBRE =NVL(pNOMBRE,NOMBRE),
- NOMBRE_COMERCIAL =NVL(pNOMBRE_COMERCIAL,NOMBRE_COMERCIAL),
- NOMBRE_LARGO =NVL(pNOMBRE,NOMBRE),
- DIRECCION =NVL(pDIRECCION,DIRECCION),
- Excento_Imp =NVL(pExcento_Imp,Excento_Imp),
- MONEDA_LIMITE =NVL(pMONEDA_LIMITE,MONEDA_LIMITE),
- TELEFONO =NVL(pTELEFONO,Telefono),
- PLAZO =NVL(pPLAZO,PLAZO),
- Cedula =pCedula,
- CLIENTE_NACIONAL =NVL(pCLIENTE_NACIONAL,CLIENTE_NACIONAL),
- IND_ACEPTA_RETENCION=NVL(pIND_ACEPTA_RETENCION,IND_ACEPTA_RETENCION),
- EXENTO_IVA =NVL(pEXENTO_IVA,EXENTO_IVA)
- WHERE NO_CIA=pNO_CIA
- AND NO_CLIENTE=pCOD_CLIENTE;
- -- ACTUALIZA TODOS LOS GRUPOS DE FACTURACION
- UPDATE sso_fgcf SET NOMBRECLIENTE=pNOMBRE_FISCAL,
- DIRECCION=replace(PDIRECCION_FACTURA,',,',','), -- de una vez le quito dos comas juntos cuando vienen
- NIT=replace(substr(trim(pCedula),1,length(trim(pCedula))-1)||'-'||substr(trim(pCedula),length(trim(pCedula)),1),'--','-')
- where codempresa=pNO_CIA
- and cod_cliente=pCOD_CLIENTE;
- COMMIT;
- ELSE
- id_resultado := 4; -- El cliente no existe.
- Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
- END IF;
- END;
- PROCEDURE BAJA_CLIENTE(pNO_CIA IN VARCHAR2,
- pNO_CLIENTE IN VARCHAR2,
- pFECHA_BAJA date,
- pMOTIVO VARCHAR2,
- id_resultado IN OUT NUMBER,
- Desc_resultado IN OUT VARCHAR2) IS
- BEGIN
- id_resultado := 0; -- Resultado exitoso
- Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
- UPDATE arccmc set F_CIERRE=pFECHA_BAJA,
- MOTIVO=pMotivo
- WHERE NO_CIA = pNO_CIA
- AND NO_CLIENTE= pNO_CLIENTE;
- COMMIT;
- END;
- PROCEDURE ASIGNAR_GRUPOFAC(pcia number, pcliente number, pUSUARIO_INGRESO VARCHAR2,
- pNOMBRE_FISCAL VARCHAR2,PDIRECCION_FACTURA VARCHAR2) is
- BEGIN
- BEGIN
- insert into sso_fgcf(CODEMPRESA,
- COD_CLIENTE,
- GRUPOFACTURA,
- NOMBREGRUPO,
- NOMBRECLIENTE,
- DIRECCION,
- NIT,
- TELEFONO,
- ENCABEZADOGRUPO,
- TIPODETALLE,
- PIEDETALLE,
- CICLO,
- EJECUTIVO,
- TIPOCLIENTE,
- GRUPOCONTABLE,
- ACTIVO,
- LEYENDA,
- MONEDA_IMPRESION)
- select no_cia,
- no_cliente,
- 1, -- grupofactura
- 1, -- nombre grupo
- pNOMBRE_FISCAL,
- PDIRECCION_FACTURA,
- cedula,
- telefono,
- 'Cobro por servicios correspondientes al mes de <%1>', --ENCABEZADOGRUPO
- 0, --TIPODETALLE
- null, --PIEDETALLE
- 17, -- ciclo
- substr(pUSUARIO_INGRESO,1,20), -- Ejecutivo
- DECODE(CLIENTE_NACIONAL,'S','L','I'), -- tipocliente(ESTA CLASIFICACION ES UNICAMENTE L/I)
- GRUPO, --grupocontable
- 'S', -- activo
- 'S', -- leyenda
- moneda_limite
- from arccmc
- where to_number(no_cliente)=pcliente
- and to_number(no_cia)=pcia
- and not exists( select * -- crea el grupo de facturacion 1, solamente si no existe para ese cliente
- from sso_fgcf
- where cod_cliente=pcliente
- and codempresa=pcia
- and grupofactura=1);
- exception when others then
- null;
- END;
- END;
- PROCEDURE GENERA_COBRO_INS(pCODEMPRESA NUMBER,
- pCODCLIENTE NUMBER,
- pINSTALACION_NAF NUMBER,
- pNOTRANSACCION_NAF NUMBER,
- pTIPOSERVICIO VARCHAR2,
- pVINSTALACION NUMBER
- /*Para el uso de soluciones*/
- ,pIdSolucion Varchar2 Default Null) IS
- LC_Solucion Varchar2(400);
- BEGIN
- If pIdSolucion Is Not Null Then
- LC_Solucion := Substr(PIdSolucion, Instr(pIdSolucion, '-')+1);
- LC_Solucion := '9990'||LC_Solucion;
- End if;
- INSERT INTO SSO_FDIN(
- CODEMPRESA,CODCLIENTE,CONTRATO,ANEXO,INSTALACION,NOTRANSACCION,TIPOSERVICIO,GRUPOFACTURA,CODTRANSACCION,CODMONEDA,
- ORDEN,DESCRIPCION,CANTIDAD,VINSTALACION,NOCUOTAS,TOTALCUOTAS,VMENSUAL,VACUMULADO,TIPOFACTURACION,FECHA,
- FACTURA,PRODUCTO,COD_CATEGORIA,PROXIMAFACTURA,CICLOFACTURACION,PERIODICIDAD,USUARIO_INGRESO,FECHA_INGRESO,OBSERVACIONES,FINFACTURACION,
- CODPRODUCTO,CODANCHOBANDA,NO_FACTU,CENTRO,BODEGA,SUBCLIENTE,ANCHO_BANDA,GEOGRAFIA_VENTA,GEOGRAFIA_PUNTO_INI,GEOGRAFIA_PUNTO_FIN,
- GENERA_COMISION,NO_VENDEDOR,PRODUCTO_INI,PRODUCTO_FIN,ALTA_FACTURACION,FECHA_IMPRESION,PREFACTURADO,ACTIVO,FECHA_BAJA,PUNTO_INICIO,
- PUNTO_FINAL,PAIS_INICIAL,PAIS_FINAL,MOTIVO_BAJA,OBSERVACIONES_ADMINISTRATIVAS,OBSERVACIONES_TECNICAS,ENCARGADO_CARTERA,ENCARGADO_BAJA,PERIODO_INICIO,FECHA_INICIO_FACTURACION,
- FECHA_AUTORIZACION_FACTURACION,HAY_DIFERENCIAL,FECHA_PREAUTORIZACION,FECHA_AUTORIZA_BAJA,INSTALACION_SIEBEL,NOTRANSACCION_SIEBEL,CODCLIENTE_PADRE,CODEMPRESA_PADRE,
- ES_SPLIT)
- SELECT
- CODEMPRESA,CODCLIENTE,CONTRATO,ANEXO,
- --INSTALACION,
- LC_Solucion,
- NOTRANSACCION,'INS',GRUPOFACTURA,CODTRANSACCION,CODMONEDA,
- ORDEN,DESCRIPCION,CANTIDAD,pVINSTALACION,NOCUOTAS,TOTALCUOTAS,pVINSTALACION,VACUMULADO,TIPOFACTURACION,FECHA,
- FACTURA,PRODUCTO,COD_CATEGORIA,PROXIMAFACTURA,CICLOFACTURACION,PERIODICIDAD,USUARIO_INGRESO,FECHA_INGRESO,OBSERVACIONES,FINFACTURACION,
- CODPRODUCTO,CODANCHOBANDA,NO_FACTU,CENTRO,BODEGA,SUBCLIENTE,ANCHO_BANDA,GEOGRAFIA_VENTA,GEOGRAFIA_PUNTO_INI,GEOGRAFIA_PUNTO_FIN,
- GENERA_COMISION,NO_VENDEDOR,PRODUCTO_INI,PRODUCTO_FIN,ALTA_FACTURACION,FECHA_IMPRESION,PREFACTURADO,ACTIVO,FECHA_BAJA,PUNTO_INICIO,
- PUNTO_FINAL,PAIS_INICIAL,PAIS_FINAL,MOTIVO_BAJA,OBSERVACIONES_ADMINISTRATIVAS,OBSERVACIONES_TECNICAS,ENCARGADO_CARTERA,ENCARGADO_BAJA,PERIODO_INICIO,FECHA_INICIO_FACTURACION,
- FECHA_AUTORIZACION_FACTURACION,HAY_DIFERENCIAL,FECHA_PREAUTORIZACION,FECHA_AUTORIZA_BAJA,INSTALACION_SIEBEL,NOTRANSACCION_SIEBEL,CODCLIENTE_PADRE,CODEMPRESA_PADRE,
- ES_SPLIT
- FROM SSO_FDIN
- WHERE CODEMPRESA=pCODEMPRESA
- AND CODCLIENTE=pCODCLIENTE
- AND INSTALACION=pINSTALACION_NAF
- AND NOTRANSACCION=pNOTRANSACCION_NAF
- AND TIPOSERVICIO=pTIPOSERVICIO
- AND ACTIVO='S';
- exception when no_data_found then
- null;
- END;
- FUNCTION OBTENER_CODANCHOBANDA(pCODEMPRESA NUMBER,
- pCODPRODUCTO VARCHAR2,
- pANCHO_BANDA VARCHAR2) RETURN varchar2 IS
- CURSOR CUR_AB IS
- select CODANCHOBANDA
- from ctl_anchobanda
- where codempresa=pCODEMPRESA
- and codproducto=pCODPRODUCTO
- and UPPER(descripcion)=UPPER(pANCHO_BANDA);
- v_codanchobanda ctl_anchobanda.codanchobanda%type;
- BEGIN
- OPEN CUR_AB;
- FETCH CUR_AB into v_codanchobanda;
- IF CUR_AB%NOTFOUND THEN
- select nvl(max(to_number(CODANCHOBANDA)),0)+1
- into v_codanchobanda
- from ctl_anchobanda
- where codempresa=pCODEMPRESA
- AND TRIM(TRANSLATE(CODANCHOBANDA,'0123456789', ' ')) IS NULL
- and codproducto=pCODPRODUCTO;
- insert into ctl_anchobanda(CODEMPRESA,CODPRODUCTO,CODANCHOBANDA,DESCRIPCION,PRODCODE,ABCODE,ACTIVO,CATEGORIA,PESO)
- values(pCODEMPRESA,pCODPRODUCTO,v_codanchobanda,pANCHO_BANDA,0,0,'S',0,0);
- END IF;
- CLOSE CUR_AB;
- RETURN v_codanchobanda;
- END;
- FUNCTION VALIDA_CAMBIO_PRECIO(pCODEMPRESA NUMBER,pEnlace number,pNoTransaccion number,pCODCLIENTE NUMBER,pTIPOSERVICIO varchar2,pPROXIMAFACTURA DATE) RETURN NUMBER IS
- v_resultado NUMBER;
- CURSOR CUR_FPROXIMA_FAC IS
- SELECT PROXIMAFACTURA
- FROM SSO_FDIN
- WHERE CODEMPRESA=pCODEMPRESA
- AND CODCLIENTE=pCODCLIENTE
- AND INSTALACION=pEnlace
- AND NOTRANSACCION=pNOTRANSACCION
- AND TIPOSERVICIO=pTIPOSERVICIO
- AND ACTIVO='S';
- V_PROXIMAFAC_ACTUAL DATE;
- BEGIN
- select count(*)
- into v_resultado
- from sso_fdin
- where codempresa=pCODEMPRESA
- and CODCLIENTE=pCODCLIENTE
- and instalacion=pEnlace
- and notransaccion=pNoTransaccion
- and prefacturado='S'
- and activo='S';
- IF NVL(v_resultado,0) > 0 THEN
- RETURN(14); --'Operación Fallida, El enlace tiene una prefactura generada, debe reversar o generar la factura previo a esta transacción...'
- END IF;
- OPEN CUR_FPROXIMA_FAC;
- FETCH CUR_FPROXIMA_FAC into V_PROXIMAFAC_ACTUAL;
- IF CUR_FPROXIMA_FAC%FOUND THEN
- IF TO_CHAR(V_PROXIMAFAC_ACTUAL,'DD/MM/YYYY') <> TO_CHAR(pPROXIMAFACTURA,'DD/MM/YYYY') THEN
- --CLOSE CUR_FPROXIMA_FAC;
- --RETURN(15);
- null; -- se quito la validacion de la fecha en cambio de precio
- END IF;
- ELSE
- CLOSE CUR_FPROXIMA_FAC;
- RETURN(7);
- END IF;
- CLOSE CUR_FPROXIMA_FAC;
- RETURN(0);
- END;
- PROCEDURE REGISTRO_DE_RESPUESTA(Pid_resultado NUMBER,PDesc_resultado VARCHAR2,PCorrelativo_hist NUMBER) IS
- BEGIN
- update arfa_hist_param set id_resultado=Pid_resultado,
- --desc_resultado=PDesc_resultado
- desc_resultado=desc_resultado||' - '||PDesc_resultado||' - hora fin:'||to_char(sysdate,'dd/mm/yyyy hh24:mi:ss')
- where correlativo=PCorrelativo_hist;
- END;
- PROCEDURE REGISTRO_DE_TRANSACCION(pCODEMPRESA NUMBER,
- pCODCLIENTE NUMBER,
- pCONTRATO NUMBER,
- pANEXO NUMBER,
- pINSTALACION_SIEBEL VARCHAR2,
- pNOTRANSACCION_SIEBEL VARCHAR2,
- pTIPOSERVICIO VARCHAR2,
- pCODTRANSACCION VARCHAR2,
- pCODMONEDA VARCHAR2,
- pDESCRIPCION VARCHAR2,
- pCANTIDAD NUMBER,
- pVINSTALACION NUMBER,
- pVMENSUAL NUMBER,
- pFECHA DATE,
- pProducto Varchar2,
- pPROXIMAFACTURA DATE,
- pUSUARIO_INGRESO VARCHAR2,
- pFECHA_INGRESO DATE,
- pCODPRODUCTO VARCHAR2,
- pCODANCHOBANDA VARCHAR2,
- pCENTRO VARCHAR2,
- pBODEGA VARCHAR2,
- pANCHO_BANDA VARCHAR2,
- pGEOGRAFIA_VENTA VARCHAR2,
- pGEOGRAFIA_PUNTO_INI VARCHAR2,
- pGEOGRAFIA_PUNTO_FIN VARCHAR2,
- pACTIVO VARCHAR2,
- pPUNTO_INICIO VARCHAR2,
- pPUNTO_FINAL VARCHAR2,
- pPAIS_INICIAL VARCHAR2,
- pPAIS_FINAL VARCHAR2,
- pPERIODO_INICIO NUMBER,
- pSPLIT VARCHAR2, -- P=padre, H=hijo, N= no aplica
- pINSTALACION_PADRE IN NUMBER, -- Numero de instalacion del padre cuando es split
- pNOTRANSACCION_PADRE IN NUMBER, --Numero de transaccion del padre cuando es split
- pCODEMPRESA_PADRE NUMBER, -- Codigo de empresa del padre cuand es split
- pCODCLIENTE_PADRE NUMBER, -- Codigo del cliente padre cuando es split
- pCODEMPRESA_NUEVA NUMBER, -- Nueva Empresa para la transaccion de cambio de cliente 'CC=cambio de cliente a enlace'
- pCODCLIENTE_NUEVO NUMBER, -- Nuevo cliente para la transaccion de cambio de cliente 'CC=cambio de cliente a enlace'
- pINSTALACION_NAF IN OUT NUMBER,
- pNOTRANSACCION_NAF IN OUT NUMBER,
- pId_BUNDLE VARCHAR2,
- pAplicaDesc varchar2,
- id_resultado IN OUT NUMBER,
- Desc_resultado IN OUT VARCHAR2,
- pFecha_ini_fac in out date,
- /*Parámetros para el proyecto de Soluciones*/
- FechaPactada IN DATE,
- TipoFactura IN VARCHAR2,
- NombreSucursal IN VARCHAR2,
- DireccionLineaUno IN VARCHAR2,
- DireccionLineaDos IN VARCHAR2,
- DireccionLineaTres IN VARCHAR2,
- Pais IN VARCHAR2,
- Departamento IN VARCHAR2,
- Municipio IN VARCHAR2,
- pIDsolucion IN VARCHAR2,
- DetalleFactura IN VARCHAR2,
- PagoUnico IN VARCHAR2,
- Plazo IN NUMBER ) IS
- BEGIN
- /*Se invovca el procedimiento standard que se usaba antes de soluciones*/
- pkg_fact_naf.REGISTRO_DE_TRANSACCION(pCODEMPRESA,
- pCODCLIENTE,
- pCONTRATO,
- pANEXO,
- pINSTALACION_SIEBEL,
- pNOTRANSACCION_SIEBEL,
- pTIPOSERVICIO,
- pCODTRANSACCION,
- pCODMONEDA,
- pDESCRIPCION,
- pCANTIDAD,
- pVINSTALACION,
- pVMENSUAL,
- pFECHA,
- pProducto,
- pPROXIMAFACTURA,
- pUSUARIO_INGRESO,
- pFECHA_INGRESO,
- pCODPRODUCTO,
- pCODANCHOBANDA,
- pCENTRO,
- pBODEGA,
- pANCHO_BANDA,
- pGEOGRAFIA_VENTA,
- pGEOGRAFIA_PUNTO_INI,
- pGEOGRAFIA_PUNTO_FIN,
- pACTIVO,
- pPUNTO_INICIO,
- pPUNTO_FINAL,
- pPAIS_INICIAL,
- pPAIS_FINAL,
- pPERIODO_INICIO,
- pSPLIT, -- P=padre, H=hijo, N= no aplica
- pINSTALACION_PADRE, -- Numero de instalacion del padre cuando es split
- pNOTRANSACCION_PADRE, --Numero de transaccion del padre cuando es split
- pCODEMPRESA_PADRe, -- Codigo de empresa del padre cuand es split
- pCODCLIENTE_PADRE, -- Codigo del cliente padre cuando es split
- pCODEMPRESA_NUEVA, -- Nueva Empresa para la transaccion de cambio de cliente 'CC=cambio de cliente a enlace'
- pCODCLIENTE_NUEVO, -- Nuevo cliente para la transaccion de cambio de cliente 'CC=cambio de cliente a enlace'
- pINSTALACION_NAF,
- pNOTRANSACCION_NAF,
- pId_BUNDLE,
- pAplicaDesc,
- id_resultado,
- Desc_resultado,
- pFecha_ini_fac,
- pIDsolucion);
- /*Proceso de la parte de solución*/
- If Id_Resultado = 0 Then
- Begin
- Insert Into sso_adenda (idsolucion,
- tipoadenda,
- activoscrm,
- activosnaf,
- codempresa,
- codcliente,
- instalacion,
- tiposervicio,
- notransaccion)
- Values (pIDsolucion,
- TipoFactura,
- 0,
- 0,
- pCODEMPRESA,
- pCODCLIENTE,
- pINSTALACION_SIEBEL,
- pTIPOSERVICIO,
- pCODTRANSACCION);
- Exception
- When dup_val_on_Index Then
- Update Sso_Adenda
- SEt tipoAdenda = TipoFactura
- Where idsolucion = pIDsolucion
- And codempresa = pCODEMPRESA
- And codcliente = pCODCLIENTE
- And instalacion = pINSTALACION_SIEBEL
- And tiposervicio = pTIPOSERVICIO
- And notransaccion =pCODTRANSACCION;
- End;
- Insert into sso_fdin_det_sol(id_solucion,
- codempresa,
- codcliente,
- instalacion,
- tiposervicio,
- notransaccion,
- tipofactura,
- nombresucursal,
- dirección,
- pais,
- departamento,
- municipio,
- idbundle,
- detallefactura,
- pagounico,
- plazo)
- Values (pIdSolucion,
- PCodEmpresa,
- PCodCliente,
- pINSTALACION_SIEBEL,
- pTipoServicio,
- pCodTransaccion,
- TipoFactura,
- NombreSucursal,
- DireccionLineaUno||DireccionLineaDos||DireccionLineaTres,
- Pais,
- Departamento,
- Municipio,
- pId_BUNDLE,
- DetalleFactura,
- PagoUnico,
- Plazo);
- End If;
- END; -- END DEL PROCEDIMIENTO
- FUNCTION EXISTE_ENLACE_ACTIVO(pCODEMPRESA NUMBER,
- pCODCLIENTE NUMBER,
- pINSTALACION NUMBER,
- pNOTRANSACCION NUMBER,
- pCODTRANSACCION varchar2,
- pGrupo_fac in out number,
- pProducto in out number) RETURN BOOLEAN IS
- tmp_instalacion sso_fdin.instalacion%type;
- BEGIN
- BEGIN
- SELECT INSTALACION,grupofactura,producto
- INTO tmp_instalacion,pGrupo_Fac,pproducto
- from sso_fdin
- WHERE CODEMPRESA=pCODEMPRESA
- AND CODCLIENTE=pCODCLIENTE
- AND INSTALACION=pINSTALACION
- AND NOTRANSACCION=pNOTRANSACCION
- AND ACTIVO=DECODE(pCODTRANSACCION,'REA','N','CB',activo,'S')
- AND TIPOSERVICIO='ENL';
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- return FALSE; -- EL ENLACE NO EXISTE
- WHEN TOO_MANY_ROWS THEN
- return TRUE; -- existe mas de un enlace.
- END;
- RETURN TRUE; -- SI EXISTE EL ENLACE
- END;
- FUNCTION VERIFICA_DET_ERROR(pCODEMPRESA NUMBER,
- pCODCLIENTE NUMBER,
- pINSTALACION NUMBER,
- pNOTRANSACCION NUMBER,
- pCODTRANSACCION varchar2,
- pFECHA_BAJA DATE,
- Desc_resultado IN OUT VARCHAR2) RETURN NUMBER IS
- CURSOR CUR_FDIN IS
- SELECT PROXIMAFACTURA,ACTIVO
- FROM SSO_FDIN
- WHERE CODEMPRESA=pCODEMPRESA
- AND CODCLIENTE=pCODCLIENTE
- AND INSTALACION=pINSTALACION
- AND NOTRANSACCION=pNOTRANSACCION
- AND TIPOSERVICIO='ENL'
- AND ACTIVO='S';
- VPROXIMA_fAC DATE;
- vEstado varchar2(2);
- CURSOR CUR_ENLACE IS
- SELECT CODEMPRESA,CODCLIENTE
- FROM SSO_FDIN
- WHERE INSTALACION=pINSTALACION
- AND NOTRANSACCION=pNOTRANSACCION
- AND TIPOSERVICIO='ENL'
- AND ACTIVO='S';
- CURSOR CUR_ENLACE_notran IS
- SELECT CODEMPRESA,CODCLIENTE,NOTRANSACCION
- FROM SSO_FDIN
- WHERE CODEMPRESA=pCODEMPRESA
- AND INSTALACION=pINSTALACION
- AND TIPOSERVICIO='ENL'
- AND ACTIVO='S';
- vEmpresa sso_fdin.codempresa%type:=0;
- vcliente sso_fdin.codcliente%type:=0;
- vnotran number:=0;
- BEGIN
- OPEN CUR_FDIN;
- FETCH CUR_FDIN into VPROXIMA_fAC,vEstado;
- IF CUR_FDIN%NOTFOUND THEN --NO SE ENCONTRO EL ENLACE
- CLOSE CUR_FDIN;
- OPEN CUR_ENLACE;
- FETCH CUR_ENLACE into vEmpresa,vcliente;
- CLOSE CUR_ENLACE;
- IF NVL(vEmpresa,0)>0 AND NVL(vcliente,0)>0 AND (vcliente!=pCODCLIENTE OR vEmpresa!=pCODEMPRESA) THEN
- Desc_resultado:=GET_MSG_DESCRIPTION(18)||vcliente; --La fecha de baja ingresada no es válida. Se recomienda colocar una fecha posterior a
- return(18); -- la fecha debe ser MENOR
- END IF;
- OPEN CUR_ENLACE_notran;
- FETCH CUR_ENLACE_notran into vEmpresa,vcliente,vnotran;
- CLOSE CUR_ENLACE_notran;
- --Desc_resultado:='RESULTADO:'||vEmpresa||'-'||vcliente||vnotran;
- --RETURN(100);
- IF vcliente=pCODCLIENTE and vEmpresa=pCODEMPRESA and vnotran <> pNOTRANSACCION and nvl(vnotran,0) >0 THEN
- Desc_resultado:=GET_MSG_DESCRIPTION(19)||pNOTRANSACCION||'. Debería tener el número de instalación '||vnotran; --La fecha de baja ingresada no es válida. Se recomienda colocar una fecha posterior a
- return(19); -- la fecha debe ser MENOR
- END IF;
- Desc_resultado:=GET_MSG_DESCRIPTION(7);
- return(7); -- ENLACES NO EXISTE
- else -- si encontro el enlace
- CLOSE CUR_FDIN;
- IF To_number( To_char(pFECHA_BAJA, 'YYYYMM')) < To_number( To_char( VPROXIMA_fAC, 'YYYYMM') ) AND Trunc(pFECHA_BAJA) != Last_day( Add_months( VPROXIMA_fAC, -1)) THEN
- Desc_resultado:=GET_MSG_DESCRIPTION(17)||Last_day( Add_months( VPROXIMA_fAC, -1)); --La fecha de baja ingresada no es válida. Se recomienda colocar una fecha posterior a
- return(17); -- la fecha debe ser MENOR
- END IF;
- END IF;
- RETURN 0; -- SI EXISTE EL ENLACE
- END;
- PROCEDURE BAJA_DE_ENLACE(pCODEMPRESA NUMBER,
- pCODCLIENTE NUMBER,
- pINSTALACION NUMBER,
- pNOTRANSACCION NUMBER,
- pTIPOSERVICIO VARCHAR2,
- pCODTRANSACCION VARCHAR2,
- pFECHA_BAJA DATE,
- pMOTIVO_BAJA VARCHAR2,
- pENCARGADO_BAJA VARCHAR2,
- id_resultado IN OUT NUMBER,
- Desc_resultado IN OUT VARCHAR2) IS
- vGrupo_Fac number;
- v_Correlativo_hist number;
- vEstado SSO_FDIN.ACTIVO%TYPE;
- CURSOR CUR_estado IS
- SELECT ACTIVO
- FROM SSO_FDIN
- WHERE CODEMPRESA=pCODEMPRESA
- AND CODCLIENTE=pCODCLIENTE
- AND INSTALACION=pINSTALACION
- AND NOTRANSACCION=pNOTRANSACCION
- AND TIPOSERVICIO='ENL'
- AND ACTIVO='N';
- V_PRODUCTO_CONTABLE number;
- BEGIN
- -- MEJORAS BAJA
- IF pCODTRANSACCION = 'B' THEN
- id_resultado := VERIFICA_DET_ERROR(pCODEMPRESA,pCODCLIENTE,pINSTALACION,pNOTRANSACCION,pCODTRANSACCION,pFECHA_BAJA,Desc_resultado);
- IF NVL(id_resultado,0) > 0 THEN
- GOTO FIN_TRANSACCION;
- END IF;
- END IF;
- IF pCODTRANSACCION = 'CB' THEN
- OPEN CUR_estado;
- FETCH CUR_estado into vEstado;
- IF CUR_estado%FOUND THEN --
- CLOSE CUR_estado;
- id_resultado := 20; --El enlace esta Inactivo debe hacer una reactivacion de enlace
- Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
- GOTO FIN_TRANSACCION;
- END IF;
- CLOSE CUR_estado;
- END IF;
- -- FIN DE MEJORAS BAJA
- id_resultado := 0;
- Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
- IF EXISTE_ENLACE_ACTIVO(pCODEMPRESA,pCODCLIENTE,pINSTALACION,pNOTRANSACCION,pCODTRANSACCION,vGrupo_Fac,V_PRODUCTO_CONTABLE) or pCODTRANSACCION='BREA' THEN
- IF pCODTRANSACCION = 'CB' THEN -- CANCELACION DE BAJA
- UPDATE SSO_FDIN
- SET FECHA_BAJA =NULL,
- FECHA_AUTORIZA_BAJA=NULL,
- MOTIVO_BAJA =NULL,
- ENCARGADO_BAJA=NULL,
- CODTRANSACCION=NVL(ultimo_codtransaccion,'CB'),
- fecha_cancelacion_baja=SYSDATE
- --ACTIVO=DECODE(pCODTRANSACCION,'B','S','N'),
- WHERE CODEMPRESA =pCODEMPRESA
- AND CODCLIENTE=pCODCLIENTE
- AND INSTALACION=pINSTALACION
- AND NOTRANSACCION=pNOTRANSACCION
- AND TIPOSERVICIO=pTIPOSERVICIO
- --AND TIPOSERVICIO='ENL'
- AND CODTRANSACCION='B'
- AND FECHA_BAJA IS NOT NULL;
- --AND ACTIVO='S';
- GOTO FIN_TRANSACCION;
- END IF;
- --- SI LLEGO AQUI ES PORQUE NO ES CANCELACION NI REACTIVACION, ES UNA BAJA
- BEGIN
- UPDATE SSO_FDIN
- SET FECHA_BAJA =pFECHA_BAJA,
- MOTIVO_BAJA =pMOTIVO_BAJA,
- ENCARGADO_BAJA=pENCARGADO_BAJA,
- CODTRANSACCION=pCODTRANSACCION,
- ACTIVO=DECODE(pCODTRANSACCION,'B','S','N'),
- FECHA_AUTORIZA_BAJA=DECODE(pCODTRANSACCION,'B',SYSDATE,NULL),
- fecha_baja_programada=pFECHA_BAJA,
- ultimo_codtransaccion=CODTRANSACCION
- WHERE CODEMPRESA =pCODEMPRESA
- AND CODCLIENTE=pCODCLIENTE
- AND INSTALACION=pINSTALACION
- AND NOTRANSACCION=pNOTRANSACCION
- AND TIPOSERVICIO=pTIPOSERVICIO
- --AND TIPOSERVICIO='ENL'
- AND ACTIVO='S';
- GOTO FIN_TRANSACCION;
- END;
- ELSE
- id_resultado := 7;
- Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||'(cia:'||pCODEMPRESA||' cli:'||pCODCLIENTE||' inst:'||pINSTALACION||' trans:'||pNOTRANSACCION||' tserv:'||pTIPOSERVICIO||')';
- --Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||'(ENL: '||pINSTALACION||' NOTRAN: '||pNOTRANSACCION||')';
- GOTO FIN_TRANSACCION;
- END IF;
- <<FIN_TRANSACCION>>
- if nvl(id_resultado,0)=0 AND pCODTRANSACCION NOT IN ('B','CB')then
- --rollback;
- --REGISTRO_DE_RESPUESTA(id_resultado,Desc_resultado,v_Correlativo_hist);
- commit;
- end if;
- IF pCODTRANSACCION in ('B','CB') THEN
- -- mejora bajas
- IF pCODTRANSACCION='B' and nvl(id_resultado,0)=0 THEN
- select Desc_resultado||' (ESTADO DEL ENLACE: '||DECODE(ACTIVO,'S','ACTIVO','INACTIVO')||', FECHA BAJA: '||TO_CHAR(pFECHA_BAJA,'DD/MM/YYYY')||', FECHA PROXIMA FAC:'||TO_CHAR(PROXIMAFACTURA,'DD/MM/YYYY')||')'
- into Desc_resultado
- from sso_fdin
- where codempresa=pCODEMPRESA
- and instalacion=pINSTALACION
- and notransaccion=pNOTRANSACCION
- and codcliente=pCODCLIENTE
- and tiposervicio='ENL';
- END IF;
- -- fin de mejora bajas
- v_Correlativo_hist:=SEC_HIST_PARAM_FA.NEXTVAL;
- BEGIN
- INSERT INTO ARFA_HIST_PARAM
- (Correlativo,CODEMPRESA,CODCLIENTE,TIPOSERVICIO,
- CODTRANSACCION,INSTALACION_NAF,NOTRANSACCION_NAF,FECHA,
- DESCRIPCION,id_resultado,Desc_resultado)
- VALUES (v_Correlativo_hist,pCODEMPRESA,pCODCLIENTE,pTIPOSERVICIO,
- pCODTRANSACCION,pINSTALACION,pNOTRANSACCION,pFECHA_BAJA,
- pMOTIVO_BAJA,id_resultado,Desc_resultado);
- EXCEPTION WHEN OTHERS THEN
- NULL;
- END;
- COMMIT;
- END IF;
- END;
- FUNCTION VALIDAR_ENLACE(pCODEMPRESA NUMBER, -- codigo de la empresa
- pCODCLIENTE NUMBER, -- codigo del cliente
- pINSTALACION NUMBER, -- condigo del enlace
- pNOTRANSACCION NUMBER, -- codigo de la orden de trabajo(SR de siebel)
- pTIPOSERVICIO VARCHAR2, -- ('ENL','INS','PRO')
- pTIPO_VALIDACION NUMBER -- 1=Validar meses facturado y pagadas; 2=Facturas pendientes de pago
- ) RETURN NUMBER IS
- v_salida number;
- v_Fecha date;
- BEGIN
- -- Selecciono la fecha de la ultima renovacion
- SELECT max(fecha)
- INTO v_Fecha
- from sso_fdin
- where instalacion=pINSTALACION
- and codtransaccion like '%R%';
- IF v_Fecha IS NULL THEN
- select min(fecha)
- INTO v_Fecha
- from sso_fdin
- where instalacion=pINSTALACION
- and tiposervicio='ENL';
- END IF;
- IF pTIPO_VALIDACION = 1 THEN -- Cantidad de facturas pagadas de este enlace
- SELECT COUNT(DISTINCT A.NO_FACTU)
- INTO v_salida
- FROM arfafe a, ARFAFL b, arccmd c
- WHERE b.instalacion=pINSTALACION
- AND a.no_cia=b.no_cia
- AND a.no_factu=b.no_factu
- AND A.serie_fisico!='PREF'
- AND NVL(a.ind_anu_Dev,'X') !='A'
- AND a.no_factu=c.no_docu
- AND NVL(c.saldo,0) =0
- AND a.fecha_Servicio>=v_Fecha
- and a.tipo_servicio='ENL';
- END IF;
- IF pTIPO_VALIDACION = 2 THEN -- la cantidad de facturas pendientes de pago
- SELECT COUNT(DISTINCT A.NO_FACTU)
- INTO v_salida
- FROM arfafe a, ARFAFL b, arccmd c
- WHERE b.instalacion=pINSTALACION
- AND a.no_cia=b.no_cia
- AND a.no_factu=b.no_factu
- AND A.serie_fisico!='PREF'
- AND NVL(a.ind_anu_Dev,'X') !='A'
- AND a.no_factu=c.no_docu
- AND NVL(c.saldo,0) >0
- AND a.tipo_servicio='ENL';
- END IF;
- RETURN(NVL(v_salida,0));
- END;
- PROCEDURE INFO_FACTURACION(pCODEMPRESA NUMBER,
- pCODCLIENTE NUMBER,
- pINSTALACION NUMBER,
- pNOTRANSACCION NUMBER,
- pPROXIMAFACTURA IN OUT DATE,
- pVMENSUAL IN OUT NUMBER,
- id_resultado IN OUT NUMBER,
- Desc_resultado IN OUT VARCHAR2
- ) IS
- CURSOR cur_infofac is
- select proximafactura,
- vmensual
- from sso_fdin
- where codempresa=pCODEMPRESA
- and codcliente=pCODCLIENTE
- and instalacion=pINSTALACION
- and notransaccion=pNOTRANSACCION
- and tiposervicio='ENL';
- BEGIN
- id_resultado := 0;
- Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
- OPEN cur_infofac;
- FETCH cur_infofac into pPROXIMAFACTURA,pVMENSUAL;
- IF cur_infofac%NOTFOUND THEN
- id_resultado := 7;
- Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
- END IF;
- CLOSE cur_infofac;
- END;
- FUNCTION VALIDA_EXENTO_IMP(pCODEMPRESA NUMBER,
- pCODCLIENTE NUMBER,
- PCLAVE VARCHAR2, --IV=Iva Venta , IC=Iva Compra
- PMONTO NUMBER
- ) RETURN NUMBER
- IS
- Vexento varchar2(1);
- VPORC NUMBER;
- cursor cur_cliente is
- SELECT EXcENTO_IMP
- FROM ARCCMC
- WHERE NO_CIA=pCODEMPRESA
- AND NO_CLIENTE=pCODCLIENTE
- AND EXCENTO_IMP='N';
- BEGIN
- OPEN cur_cliente;
- FETCH cur_cliente into Vexento;
- IF cur_cliente%NOTFOUND THEN
- CLOSE cur_cliente;
- RETURN PMONTO;
- END IF;
- CLOSE cur_cliente;
- BEGIN
- select nvl(PORCENTAJE,0)/100
- INTO VPORC
- FROM arcghimp
- WHERE NO_CIA=1
- AND CLAVE='IV'
- AND FEC_DESDE=(
- select MAX(FEC_DESDE)
- from arcghimp
- WHERE NO_CIA=1
- AND CLAVE='IV');
- EXCEPTION WHEN NO_DATA_FOUND THEN
- RETURN PMONTO;
- END;
- RETURN round((PMONTO + (PMONTO * VPORC)),2) ;
- END;
- FUNCTION VALIDA_DIAS_GRACIA(pcia number,
- pfecha_ini date,
- pDias_Gracia NUMBER
- ) RETURN DATE IS
- V_CONTADOR NUMBER:=0;
- V_FECHA_CALCULADA DATE:=pfecha_ini;
- CURSOR CUR_FERIADOS(PDIA DATE) IS
- SELECT DIA
- FROM FERIADOS
- WHERE NO_CIA=Pcia
- AND ANO=to_number(to_char(pdia,'yyyy'))
- AND TO_CHAR(DIA,'DDMMYYYY')=to_char(pdia,'DDMMYYYY');
- V_esferiado date;
- BEGIN
- WHILE V_CONTADOR < pDias_Gracia LOOP
- IF TRIM(to_char(V_FECHA_CALCULADA,'DAY', 'NLS_DATE_LANGUAGE=SPANISH')) IN ('SÁBADO','DOMINGO') THEN
- V_FECHA_CALCULADA := V_FECHA_CALCULADA + 1;
- ELSE
- OPEN CUR_FERIADOS(V_FECHA_CALCULADA);
- FETCH CUR_FERIADOS into V_esferiado;
- IF CUR_FERIADOS%NOTFOUND THEN
- V_CONTADOR := V_CONTADOR + 1;
- END IF;
- CLOSE CUR_FERIADOS;
- V_FECHA_CALCULADA := V_FECHA_CALCULADA + 1;
- END IF;
- END LOOP;
- V_CONTADOR:=0;
- WHILE V_CONTADOR = 0 LOOP
- OPEN CUR_FERIADOS(V_FECHA_CALCULADA);
- FETCH CUR_FERIADOS into V_esferiado;
- IF CUR_FERIADOS%FOUND THEN
- V_FECHA_CALCULADA := V_FECHA_CALCULADA + 1;
- ELSE
- V_CONTADOR:=1; -- SE SALE DEL CICLO
- END IF;
- CLOSE CUR_FERIADOS;
- END LOOP;
- IF TRIM(to_char(V_FECHA_CALCULADA,'DAY', 'NLS_DATE_LANGUAGE=SPANISH'))='SÁBADO' THEN
- V_FECHA_CALCULADA := V_FECHA_CALCULADA + 2;
- END IF;
- RETURN V_FECHA_CALCULADA;
- END;
- PROCEDURE CANCELA_ACTIVOS_PAGO_UNICO(PCODEMPRESA IN NUMBER,
- PCODCLIENTE IN NUMBER,
- PINSTALACION IN NUMBER,
- PFECHAFACTURA IN DATE) IS
- --
- CURSOR CPLAZO IS
- SELECT PAGOUNICO, PLAZO
- FROM SSO_FDIN_DET_SOL
- WHERE CODEMPRESA = PCODEMPRESA
- AND CODCLIENTE = PCODCLIENTE
- AND INSTALACION = PINSTALACION;
- --
- VPAGOUNICO VARCHAR2(5);
- VPLAZO NUMBER;
- --
- BEGIN
- OPEN CPLAZO;
- FETCH CPLAZO INTO VPAGOUNICO, VPLAZO;
- CLOSE CPLAZO;
- --
- IF VPAGOUNICO = 'Y' AND VPLAZO = 0 THEN
- UPDATE SSO_FDIN
- SET ACTIVO = 'N',
- FECHA_BAJA = NVL(FECHA_ULTIMA_FAC,TRUNC(SYSDATE)),
- MOTIVO_BAJA = 'Vencimiento plazo pago único para soluciones.',
- PROXIMAFACTURA = PFECHAFACTURA
- WHERE CODEMPRESA = PCODEMPRESA
- AND CODCLIENTE = PCODCLIENTE
- AND INSTALACION = PINSTALACION;
- ELSIF VPAGOUNICO = 'Y' AND VPLAZO > 0 THEN
- UPDATE SSO_FDIN
- SET PROXIMAFACTURA = ADD_MONTHS(PFECHAFACTURA,12)
- WHERE CODEMPRESA = PCODEMPRESA
- AND CODCLIENTE = PCODCLIENTE
- AND INSTALACION = PINSTALACION;
- END IF;
- --
- COMMIT;
- --
- END;
- --
- END; -- PKG_FACT_NAF_SOL;
- /
|