PKG_FACT_NAF_SOL.pkb 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123
  1. CREATE OR REPLACE PACKAGE BODY NAF47.PKG_FACT_NAF_SOL AS
  2. /******************************************************************************
  3. NAME: PKG_FACT_NAF_SOL
  4. PURPOSE:
  5. REVISIONS:
  6. Ver Date Author Description
  7. --------- ---------- --------------- ------------------------------------
  8. 1.0 25/05/2016 etajanel 1. Created this package body.
  9. 2.0 27/11/2019 Innovare (HHGR/JAGV) 1. Adaptación del paquete para recibir soluciones
  10. ******************************************************************************/
  11. FUNCTION ULTIMO_TIPOCAMBIO(Pmoneda varchar2) RETURN NUMBER IS
  12. val_tc number;
  13. BEGIN
  14. select tipo_cambio_venta
  15. into val_tc
  16. from arcgtc
  17. where clase_cambio=Pmoneda
  18. and fecha= (select max(fecha)
  19. from arcgtc
  20. where clase_cambio=Pmoneda);
  21. return(val_tc);
  22. END;
  23. FUNCTION SIGUENTE_CORRELATIVO(PCIA NUMBER,popcion VARCHAR2) RETURN NUMBER IS
  24. val_correlativo number;
  25. BEGIN
  26. SELECT TO_NUMBER(VALOR) + 1
  27. INTO val_correlativo
  28. FROM PARAMETROS_VARIOS
  29. WHERE MODULO='FA'
  30. AND PANTALLA='SSO_FDIN'
  31. AND OPCION=popcion
  32. AND TO_NUMBER(CIA)=PCIA;
  33. UPDATE PARAMETROS_VARIOS SET VALOR = TO_CHAR(val_correlativo)
  34. WHERE MODULO='FA'
  35. AND PANTALLA='SSO_FDIN'
  36. AND OPCION=popcion
  37. AND TO_NUMBER(CIA)=PCIA;
  38. RETURN(val_correlativo);
  39. END;
  40. FUNCTION DIFERENCIAL(pcia number, -- Codigo de la compañia
  41. pcliente number, -- Codigo del cliente
  42. pInstalacion number, -- numero de enlace
  43. pnotransaccion number, --numero de orden de trabajo del enlace
  44. pValorAct number, -- valor de la nueva transaccion sobre el enlace
  45. pCodMoneda VARCHAR2 -- moneda de la nueva transaccion del enlace
  46. ) RETURN NUMBER IS
  47. CURSOR CUR_TRAN IS
  48. SELECT vmensual,codmoneda,DECODE(pcia,1,'01') cod_mondeda
  49. from sso_fdin
  50. where codempresa = pcia
  51. and codcliente=pcliente
  52. and instalacion=pinstalacion
  53. and notransaccion=pnotransaccion
  54. and activo='S'
  55. and tiposervicio='ENL'
  56. and fecha=(select max(fecha)
  57. from sso_fdin
  58. where codempresa = pcia
  59. and codcliente=pcliente
  60. and instalacion=pinstalacion
  61. and notransaccion=pnotransaccion
  62. and activo='S'
  63. and tiposervicio='ENL'
  64. );
  65. nValorAnt number;
  66. nCodmonedaAnt varchar2(4);
  67. nvalorTC number;
  68. dfecha_tc date;
  69. cCodMoneda_tc varchar2(4);
  70. nVal_direrencial number;
  71. BEGIN
  72. OPEN CUR_TRAN;
  73. FETCH CUR_TRAN INTO nValorAnt, nCodmonedaAnt,cCodMoneda_tc;
  74. CLOSE CUR_TRAN;
  75. IF ncodmonedaAnt != pCodMoneda THEN -- La moneda de la transaccion anterior es diferente a la moneda de la nueva transaccion
  76. nvalorTC := Tipo_cambio( cCodMoneda_tc, sysdate, dfecha_tc, 'C'); -- se obtiene el tipo de cambio del sistema NAF
  77. IF nCodmonedaAnt='USD' THEN -- La moneda anterior es dolares y la nueva moneda es local
  78. nVal_direrencial := NVL(pValorAct,0) - NVL((nValorAnt * nvalorTC),0);
  79. ELSE -- La moneda anterior es local y la nueva es dolares
  80. nVal_direrencial := NVL(pValorAct,0) - NVL((nValorAnt / nvalorTC),0);
  81. END IF;
  82. ELSE
  83. -- La moneda del servicio anterior es igual a la moneda de la nueva transaccion
  84. nVal_direrencial := NVL(pValorAct,0) - NVL(nValorAnt,0);
  85. END IF;
  86. IF nVal_direrencial < 0 THEN
  87. nVal_direrencial := 0;
  88. END IF;
  89. nVal_direrencial :=round(nVal_direrencial,2);
  90. --return nValorAnt;
  91. return nVal_direrencial;
  92. --RETURN nValorAnt;
  93. END;
  94. FUNCTION Existe_Cliente(pNO_CIA IN NUMBER,
  95. pNO_CLIENTE IN VARCHAR2,
  96. pNit VARCHAR2,
  97. pNOMBRE VARCHAR2) RETURN BOOLEAN IS
  98. v_cliente arccmc.no_cliente%type;
  99. BEGIN
  100. BEGIN
  101. SELECT no_cliente -- Busco el cliente por el codigo de siebel
  102. into v_cliente
  103. FROM ARCCMC
  104. WHERE TO_NUMBER(NO_CIA)=pNO_CIA
  105. AND NO_CLIENTE_SIEBEL =pNO_CLIENTE;
  106. EXCEPTION WHEN
  107. NO_DATA_FOUND THEN
  108. BEGIN
  109. SELECT no_cliente -- Busco el cliente por el nit
  110. into v_cliente
  111. FROM ARCCMC
  112. WHERE TO_NUMBER(NO_CIA)=pNO_CIA
  113. AND CEDULA = replace(substr(trim(pNIT),1,length(trim(pNIT))-1)||'-'||substr(trim(pNIT),length(trim(pNIT)),1),'--','-');
  114. EXCEPTION WHEN
  115. NO_DATA_FOUND THEN
  116. BEGIN
  117. SELECT no_cliente -- Busco el cliente por el nombre
  118. into v_cliente
  119. FROM ARCCMC
  120. WHERE TO_NUMBER(NO_CIA)=pNO_CIA
  121. AND NOMBRE =pnombre;
  122. EXCEPTION WHEN
  123. NO_DATA_FOUND THEN RETURN FALSE; -- EL CLIENTE NO EXISTE
  124. END;
  125. END;
  126. END;
  127. RETURN TRUE; -- EL CLIENTE SI EXISTE
  128. END;
  129. FUNCTION GET_MSG_DESCRIPTION(ID_RESULTADO IN NUMBER) RETURN VARCHAR2 IS
  130. --V_desc MSG_PKG_FACT_NAF_SOL.desc_msg%type;
  131. V_desc VARCHAR2(1000);
  132. BEGIN
  133. BEGIN
  134. SELECT desc_msg
  135. into v_Desc
  136. from MSG_PKG_FACT_NAF
  137. where id_msg=ID_RESULTADO;
  138. EXCEPTION WHEN NO_DATA_FOUND THEN
  139. V_desc:='Descripción no esta en la tabla de mensajes';
  140. END;
  141. RETURN v_Desc;
  142. END;
  143. PROCEDURE CREAR_CLIENTE(pNO_CIA IN VARCHAR2,
  144. pCOD_CLIENTE_SIEBEL IN VARCHAR2,
  145. pGRUPO IN VARCHAR2,
  146. pTIPO_CLIENTE IN VARCHAR2,
  147. pNOMBRE IN VARCHAR2,
  148. pNOMBRE_COMERCIAL IN VARCHAR2,
  149. pDIRECCION IN VARCHAR2,
  150. pFecha_Ingre IN DATE,
  151. pExcento_Imp IN VARCHAR2,
  152. pMONEDA_LIMITE IN VARCHAR2,
  153. pTELEFONO IN VARCHAR2,
  154. pPLAZO IN Number,
  155. pCedula IN VARCHAR2,
  156. pCLIENTE_NACIONAL IN VARCHAR2,
  157. pIND_ACEPTA_RETENCION IN VARCHAR2,
  158. pEXENTO_IVA IN VARCHAR2,
  159. pTipoPrecio IN VARCHAR2,
  160. pCentro IN VARCHAR2,
  161. pBALANCEFACTURA VARCHAR2,
  162. pNOMBRE_FISCAL VARCHAR2,
  163. PDIRECCION_FACTURA VARCHAR2,
  164. pFac_ANTICIPADO VARCHAR2,
  165. pCOD_CLIENTE_NAF IN OUT NUMBER,
  166. id_resultado IN OUT NUMBER,
  167. Desc_resultado IN OUT VARCHAR2) IS
  168. TmpVar NUMBER;
  169. BEGIN
  170. id_resultado := 0;
  171. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  172. IF Existe_Cliente(pNO_CIA,pCOD_CLIENTE_SIEBEL,pCedula,pNOMBRE) THEN
  173. id_resultado:=2;
  174. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  175. ELSE
  176. BEGIN
  177. SELECT NVL(MAX(to_number(NO_CLIENTE)),0) + 1
  178. INTO pCOD_CLIENTE_NAF
  179. FROM ARCCMC
  180. WHERE to_number(NO_CIA)=to_number(pNO_CIA);
  181. INSERT INTO ARCCMC(NO_CIA,NO_CLIENTE,GRUPO,TIPO_CLIENTE,NOMBRE,NOMBRE_COMERCIAL,DIRECCION,Fecha_Ingre,
  182. Excento_Imp,MONEDA_LIMITE,TELEFONO,PLAZO,Cedula,CLIENTE_NACIONAL,IND_ACEPTA_RETENCION,EXENTO_IVA,
  183. TIPOPRECIO,CENTRO,BALANCEFACTURA,NO_CLIENTE_SIEBEL,NOMBRE_LARGO)
  184. VALUES(pNO_CIA,pCOD_CLIENTE_NAF,/*pGRUPO*/'01',pTIPO_CLIENTE,pNOMBRE,pNOMBRE_COMERCIAL,pDIRECCION,pFecha_Ingre,
  185. pExcento_Imp,pMONEDA_LIMITE,pTELEFONO,pPLAZO,pCedula,pCLIENTE_NACIONAL,pIND_ACEPTA_RETENCION,pEXENTO_IVA,
  186. pTipoPrecio,pCentro,pBALANCEFACTURA,pCOD_CLIENTE_SIEBEL,pNOMBRE);
  187. EXCEPTION
  188. WHEN DUP_VAL_ON_INDEX THEN
  189. id_resultado := 2; -- Operación Fallida, Código de Cliente duplicado
  190. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||'('||pCOD_CLIENTE_NAF||')';
  191. WHEN OTHERS THEN
  192. id_resultado := 3; -- Operación Fallida, Error al insertar en ARCCMC
  193. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||SQLERRM;
  194. END;
  195. -- Crea de una vez grupo de facturacion 1
  196. ASIGNAR_GRUPOFAC(pNO_CIA, pCOD_CLIENTE_NAF,USER,pNOMBRE_FISCAL ,replace(PDIRECCION_FACTURA,',,',','));
  197. COMMIT;
  198. END IF;
  199. END;
  200. FUNCTION Existe_Cliente_Activo(pNO_CIA IN NUMBER,
  201. pNO_CLIENTE IN NUMBER
  202. ) RETURN NUMBER IS
  203. CURSOR CUR_CLI IS -- Para validar que exista el cliente
  204. SELECT no_cliente
  205. from arccmc
  206. WHERE TO_NUMBER(no_cia)=pNO_CIA
  207. and TO_NUMBER(no_cliente)=pNO_CLIENTE
  208. and F_CIERRE IS NULL;
  209. V_NO_CLIENTE ARCCMC.NO_CLIENTE%TYPE;
  210. BEGIN
  211. OPEN CUR_CLI;
  212. FETCH CUR_CLI into V_NO_CLIENTE;
  213. IF CUR_CLI%FOUND THEN
  214. CLOSE CUR_CLI;
  215. RETURN V_NO_CLIENTE;
  216. ELSE
  217. CLOSE CUR_CLI;
  218. RETURN 0;
  219. END IF;
  220. END;
  221. PROCEDURE ACTUALIZAR_CLIENTE(pNO_CIA IN VARCHAR2,
  222. pCOD_CLIENTE IN VARCHAR2,
  223. pNOMBRE IN VARCHAR2,
  224. pNOMBRE_COMERCIAL IN VARCHAR2,
  225. pDIRECCION IN VARCHAR2,
  226. pExcento_Imp IN VARCHAR2,
  227. pMONEDA_LIMITE IN VARCHAR2,
  228. pTELEFONO IN VARCHAR2,
  229. pPLAZO IN Number,
  230. pCedula IN VARCHAR2,
  231. pCLIENTE_NACIONAL IN VARCHAR2,
  232. pIND_ACEPTA_RETENCION IN VARCHAR2,
  233. pEXENTO_IVA IN VARCHAR2,
  234. pNOMBRE_FISCAL VARCHAR2,
  235. PDIRECCION_FACTURA VARCHAR2,
  236. pFac_ANTICIPADO VARCHAR2,
  237. id_resultado IN OUT NUMBER,
  238. Desc_resultado IN OUT VARCHAR2) IS
  239. BEGIN
  240. id_resultado := 0; -- Resultado exitoso
  241. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  242. IF Existe_Cliente_ACTIVO(pNO_CIA,pCOD_CLIENTE)=TO_NUMBER(pCOD_CLIENTE) THEN
  243. UPDATE arccmc set NOMBRE =NVL(pNOMBRE,NOMBRE),
  244. NOMBRE_COMERCIAL =NVL(pNOMBRE_COMERCIAL,NOMBRE_COMERCIAL),
  245. NOMBRE_LARGO =NVL(pNOMBRE,NOMBRE),
  246. DIRECCION =NVL(pDIRECCION,DIRECCION),
  247. Excento_Imp =NVL(pExcento_Imp,Excento_Imp),
  248. MONEDA_LIMITE =NVL(pMONEDA_LIMITE,MONEDA_LIMITE),
  249. TELEFONO =NVL(pTELEFONO,Telefono),
  250. PLAZO =NVL(pPLAZO,PLAZO),
  251. Cedula =pCedula,
  252. CLIENTE_NACIONAL =NVL(pCLIENTE_NACIONAL,CLIENTE_NACIONAL),
  253. IND_ACEPTA_RETENCION=NVL(pIND_ACEPTA_RETENCION,IND_ACEPTA_RETENCION),
  254. EXENTO_IVA =NVL(pEXENTO_IVA,EXENTO_IVA)
  255. WHERE NO_CIA=pNO_CIA
  256. AND NO_CLIENTE=pCOD_CLIENTE;
  257. -- ACTUALIZA TODOS LOS GRUPOS DE FACTURACION
  258. UPDATE sso_fgcf SET NOMBRECLIENTE=pNOMBRE_FISCAL,
  259. DIRECCION=replace(PDIRECCION_FACTURA,',,',','), -- de una vez le quito dos comas juntos cuando vienen
  260. NIT=replace(substr(trim(pCedula),1,length(trim(pCedula))-1)||'-'||substr(trim(pCedula),length(trim(pCedula)),1),'--','-')
  261. where codempresa=pNO_CIA
  262. and cod_cliente=pCOD_CLIENTE;
  263. COMMIT;
  264. ELSE
  265. id_resultado := 4; -- El cliente no existe.
  266. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  267. END IF;
  268. END;
  269. PROCEDURE BAJA_CLIENTE(pNO_CIA IN VARCHAR2,
  270. pNO_CLIENTE IN VARCHAR2,
  271. pFECHA_BAJA date,
  272. pMOTIVO VARCHAR2,
  273. id_resultado IN OUT NUMBER,
  274. Desc_resultado IN OUT VARCHAR2) IS
  275. BEGIN
  276. id_resultado := 0; -- Resultado exitoso
  277. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  278. UPDATE arccmc set F_CIERRE=pFECHA_BAJA,
  279. MOTIVO=pMotivo
  280. WHERE NO_CIA = pNO_CIA
  281. AND NO_CLIENTE= pNO_CLIENTE;
  282. COMMIT;
  283. END;
  284. PROCEDURE ASIGNAR_GRUPOFAC(pcia number, pcliente number, pUSUARIO_INGRESO VARCHAR2,
  285. pNOMBRE_FISCAL VARCHAR2,PDIRECCION_FACTURA VARCHAR2) is
  286. BEGIN
  287. BEGIN
  288. insert into sso_fgcf(CODEMPRESA,
  289. COD_CLIENTE,
  290. GRUPOFACTURA,
  291. NOMBREGRUPO,
  292. NOMBRECLIENTE,
  293. DIRECCION,
  294. NIT,
  295. TELEFONO,
  296. ENCABEZADOGRUPO,
  297. TIPODETALLE,
  298. PIEDETALLE,
  299. CICLO,
  300. EJECUTIVO,
  301. TIPOCLIENTE,
  302. GRUPOCONTABLE,
  303. ACTIVO,
  304. LEYENDA,
  305. MONEDA_IMPRESION)
  306. select no_cia,
  307. no_cliente,
  308. 1, -- grupofactura
  309. 1, -- nombre grupo
  310. pNOMBRE_FISCAL,
  311. PDIRECCION_FACTURA,
  312. cedula,
  313. telefono,
  314. 'Cobro por servicios correspondientes al mes de <%1>', --ENCABEZADOGRUPO
  315. 0, --TIPODETALLE
  316. null, --PIEDETALLE
  317. 17, -- ciclo
  318. substr(pUSUARIO_INGRESO,1,20), -- Ejecutivo
  319. DECODE(CLIENTE_NACIONAL,'S','L','I'), -- tipocliente(ESTA CLASIFICACION ES UNICAMENTE L/I)
  320. GRUPO, --grupocontable
  321. 'S', -- activo
  322. 'S', -- leyenda
  323. moneda_limite
  324. from arccmc
  325. where to_number(no_cliente)=pcliente
  326. and to_number(no_cia)=pcia
  327. and not exists( select * -- crea el grupo de facturacion 1, solamente si no existe para ese cliente
  328. from sso_fgcf
  329. where cod_cliente=pcliente
  330. and codempresa=pcia
  331. and grupofactura=1);
  332. exception when others then
  333. null;
  334. END;
  335. END;
  336. PROCEDURE GENERA_COBRO_INS(pCODEMPRESA NUMBER,
  337. pCODCLIENTE NUMBER,
  338. pINSTALACION_NAF NUMBER,
  339. pNOTRANSACCION_NAF NUMBER,
  340. pTIPOSERVICIO VARCHAR2,
  341. pVINSTALACION NUMBER
  342. /*Para el uso de soluciones*/
  343. ,pIdSolucion Varchar2 Default Null) IS
  344. LC_Solucion Varchar2(400);
  345. BEGIN
  346. If pIdSolucion Is Not Null Then
  347. LC_Solucion := Substr(PIdSolucion, Instr(pIdSolucion, '-')+1);
  348. LC_Solucion := '9990'||LC_Solucion;
  349. End if;
  350. INSERT INTO SSO_FDIN(
  351. CODEMPRESA,CODCLIENTE,CONTRATO,ANEXO,INSTALACION,NOTRANSACCION,TIPOSERVICIO,GRUPOFACTURA,CODTRANSACCION,CODMONEDA,
  352. ORDEN,DESCRIPCION,CANTIDAD,VINSTALACION,NOCUOTAS,TOTALCUOTAS,VMENSUAL,VACUMULADO,TIPOFACTURACION,FECHA,
  353. FACTURA,PRODUCTO,COD_CATEGORIA,PROXIMAFACTURA,CICLOFACTURACION,PERIODICIDAD,USUARIO_INGRESO,FECHA_INGRESO,OBSERVACIONES,FINFACTURACION,
  354. CODPRODUCTO,CODANCHOBANDA,NO_FACTU,CENTRO,BODEGA,SUBCLIENTE,ANCHO_BANDA,GEOGRAFIA_VENTA,GEOGRAFIA_PUNTO_INI,GEOGRAFIA_PUNTO_FIN,
  355. GENERA_COMISION,NO_VENDEDOR,PRODUCTO_INI,PRODUCTO_FIN,ALTA_FACTURACION,FECHA_IMPRESION,PREFACTURADO,ACTIVO,FECHA_BAJA,PUNTO_INICIO,
  356. PUNTO_FINAL,PAIS_INICIAL,PAIS_FINAL,MOTIVO_BAJA,OBSERVACIONES_ADMINISTRATIVAS,OBSERVACIONES_TECNICAS,ENCARGADO_CARTERA,ENCARGADO_BAJA,PERIODO_INICIO,FECHA_INICIO_FACTURACION,
  357. FECHA_AUTORIZACION_FACTURACION,HAY_DIFERENCIAL,FECHA_PREAUTORIZACION,FECHA_AUTORIZA_BAJA,INSTALACION_SIEBEL,NOTRANSACCION_SIEBEL,CODCLIENTE_PADRE,CODEMPRESA_PADRE,
  358. ES_SPLIT)
  359. SELECT
  360. CODEMPRESA,CODCLIENTE,CONTRATO,ANEXO,
  361. --INSTALACION,
  362. LC_Solucion,
  363. NOTRANSACCION,'INS',GRUPOFACTURA,CODTRANSACCION,CODMONEDA,
  364. ORDEN,DESCRIPCION,CANTIDAD,pVINSTALACION,NOCUOTAS,TOTALCUOTAS,pVINSTALACION,VACUMULADO,TIPOFACTURACION,FECHA,
  365. FACTURA,PRODUCTO,COD_CATEGORIA,PROXIMAFACTURA,CICLOFACTURACION,PERIODICIDAD,USUARIO_INGRESO,FECHA_INGRESO,OBSERVACIONES,FINFACTURACION,
  366. CODPRODUCTO,CODANCHOBANDA,NO_FACTU,CENTRO,BODEGA,SUBCLIENTE,ANCHO_BANDA,GEOGRAFIA_VENTA,GEOGRAFIA_PUNTO_INI,GEOGRAFIA_PUNTO_FIN,
  367. GENERA_COMISION,NO_VENDEDOR,PRODUCTO_INI,PRODUCTO_FIN,ALTA_FACTURACION,FECHA_IMPRESION,PREFACTURADO,ACTIVO,FECHA_BAJA,PUNTO_INICIO,
  368. PUNTO_FINAL,PAIS_INICIAL,PAIS_FINAL,MOTIVO_BAJA,OBSERVACIONES_ADMINISTRATIVAS,OBSERVACIONES_TECNICAS,ENCARGADO_CARTERA,ENCARGADO_BAJA,PERIODO_INICIO,FECHA_INICIO_FACTURACION,
  369. FECHA_AUTORIZACION_FACTURACION,HAY_DIFERENCIAL,FECHA_PREAUTORIZACION,FECHA_AUTORIZA_BAJA,INSTALACION_SIEBEL,NOTRANSACCION_SIEBEL,CODCLIENTE_PADRE,CODEMPRESA_PADRE,
  370. ES_SPLIT
  371. FROM SSO_FDIN
  372. WHERE CODEMPRESA=pCODEMPRESA
  373. AND CODCLIENTE=pCODCLIENTE
  374. AND INSTALACION=pINSTALACION_NAF
  375. AND NOTRANSACCION=pNOTRANSACCION_NAF
  376. AND TIPOSERVICIO=pTIPOSERVICIO
  377. AND ACTIVO='S';
  378. exception when no_data_found then
  379. null;
  380. END;
  381. FUNCTION OBTENER_CODANCHOBANDA(pCODEMPRESA NUMBER,
  382. pCODPRODUCTO VARCHAR2,
  383. pANCHO_BANDA VARCHAR2) RETURN varchar2 IS
  384. CURSOR CUR_AB IS
  385. select CODANCHOBANDA
  386. from ctl_anchobanda
  387. where codempresa=pCODEMPRESA
  388. and codproducto=pCODPRODUCTO
  389. and UPPER(descripcion)=UPPER(pANCHO_BANDA);
  390. v_codanchobanda ctl_anchobanda.codanchobanda%type;
  391. BEGIN
  392. OPEN CUR_AB;
  393. FETCH CUR_AB into v_codanchobanda;
  394. IF CUR_AB%NOTFOUND THEN
  395. select nvl(max(to_number(CODANCHOBANDA)),0)+1
  396. into v_codanchobanda
  397. from ctl_anchobanda
  398. where codempresa=pCODEMPRESA
  399. AND TRIM(TRANSLATE(CODANCHOBANDA,'0123456789', ' ')) IS NULL
  400. and codproducto=pCODPRODUCTO;
  401. insert into ctl_anchobanda(CODEMPRESA,CODPRODUCTO,CODANCHOBANDA,DESCRIPCION,PRODCODE,ABCODE,ACTIVO,CATEGORIA,PESO)
  402. values(pCODEMPRESA,pCODPRODUCTO,v_codanchobanda,pANCHO_BANDA,0,0,'S',0,0);
  403. END IF;
  404. CLOSE CUR_AB;
  405. RETURN v_codanchobanda;
  406. END;
  407. FUNCTION VALIDA_CAMBIO_PRECIO(pCODEMPRESA NUMBER,pEnlace number,pNoTransaccion number,pCODCLIENTE NUMBER,pTIPOSERVICIO varchar2,pPROXIMAFACTURA DATE) RETURN NUMBER IS
  408. v_resultado NUMBER;
  409. CURSOR CUR_FPROXIMA_FAC IS
  410. SELECT PROXIMAFACTURA
  411. FROM SSO_FDIN
  412. WHERE CODEMPRESA=pCODEMPRESA
  413. AND CODCLIENTE=pCODCLIENTE
  414. AND INSTALACION=pEnlace
  415. AND NOTRANSACCION=pNOTRANSACCION
  416. AND TIPOSERVICIO=pTIPOSERVICIO
  417. AND ACTIVO='S';
  418. V_PROXIMAFAC_ACTUAL DATE;
  419. BEGIN
  420. select count(*)
  421. into v_resultado
  422. from sso_fdin
  423. where codempresa=pCODEMPRESA
  424. and CODCLIENTE=pCODCLIENTE
  425. and instalacion=pEnlace
  426. and notransaccion=pNoTransaccion
  427. and prefacturado='S'
  428. and activo='S';
  429. IF NVL(v_resultado,0) > 0 THEN
  430. RETURN(14); --'Operación Fallida, El enlace tiene una prefactura generada, debe reversar o generar la factura previo a esta transacción...'
  431. END IF;
  432. OPEN CUR_FPROXIMA_FAC;
  433. FETCH CUR_FPROXIMA_FAC into V_PROXIMAFAC_ACTUAL;
  434. IF CUR_FPROXIMA_FAC%FOUND THEN
  435. IF TO_CHAR(V_PROXIMAFAC_ACTUAL,'DD/MM/YYYY') <> TO_CHAR(pPROXIMAFACTURA,'DD/MM/YYYY') THEN
  436. --CLOSE CUR_FPROXIMA_FAC;
  437. --RETURN(15);
  438. null; -- se quito la validacion de la fecha en cambio de precio
  439. END IF;
  440. ELSE
  441. CLOSE CUR_FPROXIMA_FAC;
  442. RETURN(7);
  443. END IF;
  444. CLOSE CUR_FPROXIMA_FAC;
  445. RETURN(0);
  446. END;
  447. PROCEDURE REGISTRO_DE_RESPUESTA(Pid_resultado NUMBER,PDesc_resultado VARCHAR2,PCorrelativo_hist NUMBER) IS
  448. BEGIN
  449. update arfa_hist_param set id_resultado=Pid_resultado,
  450. --desc_resultado=PDesc_resultado
  451. desc_resultado=desc_resultado||' - '||PDesc_resultado||' - hora fin:'||to_char(sysdate,'dd/mm/yyyy hh24:mi:ss')
  452. where correlativo=PCorrelativo_hist;
  453. END;
  454. PROCEDURE REGISTRO_DE_TRANSACCION(pCODEMPRESA NUMBER,
  455. pCODCLIENTE NUMBER,
  456. pCONTRATO NUMBER,
  457. pANEXO NUMBER,
  458. pINSTALACION_SIEBEL VARCHAR2,
  459. pNOTRANSACCION_SIEBEL VARCHAR2,
  460. pTIPOSERVICIO VARCHAR2,
  461. pCODTRANSACCION VARCHAR2,
  462. pCODMONEDA VARCHAR2,
  463. pDESCRIPCION VARCHAR2,
  464. pCANTIDAD NUMBER,
  465. pVINSTALACION NUMBER,
  466. pVMENSUAL NUMBER,
  467. pFECHA DATE,
  468. pProducto Varchar2,
  469. pPROXIMAFACTURA DATE,
  470. pUSUARIO_INGRESO VARCHAR2,
  471. pFECHA_INGRESO DATE,
  472. pCODPRODUCTO VARCHAR2,
  473. pCODANCHOBANDA VARCHAR2,
  474. pCENTRO VARCHAR2,
  475. pBODEGA VARCHAR2,
  476. pANCHO_BANDA VARCHAR2,
  477. pGEOGRAFIA_VENTA VARCHAR2,
  478. pGEOGRAFIA_PUNTO_INI VARCHAR2,
  479. pGEOGRAFIA_PUNTO_FIN VARCHAR2,
  480. pACTIVO VARCHAR2,
  481. pPUNTO_INICIO VARCHAR2,
  482. pPUNTO_FINAL VARCHAR2,
  483. pPAIS_INICIAL VARCHAR2,
  484. pPAIS_FINAL VARCHAR2,
  485. pPERIODO_INICIO NUMBER,
  486. pSPLIT VARCHAR2, -- P=padre, H=hijo, N= no aplica
  487. pINSTALACION_PADRE IN NUMBER, -- Numero de instalacion del padre cuando es split
  488. pNOTRANSACCION_PADRE IN NUMBER, --Numero de transaccion del padre cuando es split
  489. pCODEMPRESA_PADRE NUMBER, -- Codigo de empresa del padre cuand es split
  490. pCODCLIENTE_PADRE NUMBER, -- Codigo del cliente padre cuando es split
  491. pCODEMPRESA_NUEVA NUMBER, -- Nueva Empresa para la transaccion de cambio de cliente 'CC=cambio de cliente a enlace'
  492. pCODCLIENTE_NUEVO NUMBER, -- Nuevo cliente para la transaccion de cambio de cliente 'CC=cambio de cliente a enlace'
  493. pINSTALACION_NAF IN OUT NUMBER,
  494. pNOTRANSACCION_NAF IN OUT NUMBER,
  495. pId_BUNDLE VARCHAR2,
  496. pAplicaDesc varchar2,
  497. id_resultado IN OUT NUMBER,
  498. Desc_resultado IN OUT VARCHAR2,
  499. pFecha_ini_fac in out date,
  500. /*Parámetros para el proyecto de Soluciones*/
  501. FechaPactada IN DATE,
  502. TipoFactura IN VARCHAR2,
  503. NombreSucursal IN VARCHAR2,
  504. DireccionLineaUno IN VARCHAR2,
  505. DireccionLineaDos IN VARCHAR2,
  506. DireccionLineaTres IN VARCHAR2,
  507. Pais IN VARCHAR2,
  508. Departamento IN VARCHAR2,
  509. Municipio IN VARCHAR2,
  510. pIDsolucion IN VARCHAR2,
  511. DetalleFactura IN VARCHAR2,
  512. PagoUnico IN VARCHAR2,
  513. Plazo IN NUMBER ) IS
  514. BEGIN
  515. /*Se invovca el procedimiento standard que se usaba antes de soluciones*/
  516. pkg_fact_naf.REGISTRO_DE_TRANSACCION(pCODEMPRESA,
  517. pCODCLIENTE,
  518. pCONTRATO,
  519. pANEXO,
  520. pINSTALACION_SIEBEL,
  521. pNOTRANSACCION_SIEBEL,
  522. pTIPOSERVICIO,
  523. pCODTRANSACCION,
  524. pCODMONEDA,
  525. pDESCRIPCION,
  526. pCANTIDAD,
  527. pVINSTALACION,
  528. pVMENSUAL,
  529. pFECHA,
  530. pProducto,
  531. pPROXIMAFACTURA,
  532. pUSUARIO_INGRESO,
  533. pFECHA_INGRESO,
  534. pCODPRODUCTO,
  535. pCODANCHOBANDA,
  536. pCENTRO,
  537. pBODEGA,
  538. pANCHO_BANDA,
  539. pGEOGRAFIA_VENTA,
  540. pGEOGRAFIA_PUNTO_INI,
  541. pGEOGRAFIA_PUNTO_FIN,
  542. pACTIVO,
  543. pPUNTO_INICIO,
  544. pPUNTO_FINAL,
  545. pPAIS_INICIAL,
  546. pPAIS_FINAL,
  547. pPERIODO_INICIO,
  548. pSPLIT, -- P=padre, H=hijo, N= no aplica
  549. pINSTALACION_PADRE, -- Numero de instalacion del padre cuando es split
  550. pNOTRANSACCION_PADRE, --Numero de transaccion del padre cuando es split
  551. pCODEMPRESA_PADRe, -- Codigo de empresa del padre cuand es split
  552. pCODCLIENTE_PADRE, -- Codigo del cliente padre cuando es split
  553. pCODEMPRESA_NUEVA, -- Nueva Empresa para la transaccion de cambio de cliente 'CC=cambio de cliente a enlace'
  554. pCODCLIENTE_NUEVO, -- Nuevo cliente para la transaccion de cambio de cliente 'CC=cambio de cliente a enlace'
  555. pINSTALACION_NAF,
  556. pNOTRANSACCION_NAF,
  557. pId_BUNDLE,
  558. pAplicaDesc,
  559. id_resultado,
  560. Desc_resultado,
  561. pFecha_ini_fac,
  562. pIDsolucion);
  563. /*Proceso de la parte de solución*/
  564. If Id_Resultado = 0 Then
  565. Begin
  566. Insert Into sso_adenda (idsolucion,
  567. tipoadenda,
  568. activoscrm,
  569. activosnaf,
  570. codempresa,
  571. codcliente,
  572. instalacion,
  573. tiposervicio,
  574. notransaccion)
  575. Values (pIDsolucion,
  576. TipoFactura,
  577. 0,
  578. 0,
  579. pCODEMPRESA,
  580. pCODCLIENTE,
  581. pINSTALACION_SIEBEL,
  582. pTIPOSERVICIO,
  583. pCODTRANSACCION);
  584. Exception
  585. When dup_val_on_Index Then
  586. Update Sso_Adenda
  587. SEt tipoAdenda = TipoFactura
  588. Where idsolucion = pIDsolucion
  589. And codempresa = pCODEMPRESA
  590. And codcliente = pCODCLIENTE
  591. And instalacion = pINSTALACION_SIEBEL
  592. And tiposervicio = pTIPOSERVICIO
  593. And notransaccion =pCODTRANSACCION;
  594. End;
  595. Insert into sso_fdin_det_sol(id_solucion,
  596. codempresa,
  597. codcliente,
  598. instalacion,
  599. tiposervicio,
  600. notransaccion,
  601. tipofactura,
  602. nombresucursal,
  603. dirección,
  604. pais,
  605. departamento,
  606. municipio,
  607. idbundle,
  608. detallefactura,
  609. pagounico,
  610. plazo)
  611. Values (pIdSolucion,
  612. PCodEmpresa,
  613. PCodCliente,
  614. pINSTALACION_SIEBEL,
  615. pTipoServicio,
  616. pCodTransaccion,
  617. TipoFactura,
  618. NombreSucursal,
  619. DireccionLineaUno||DireccionLineaDos||DireccionLineaTres,
  620. Pais,
  621. Departamento,
  622. Municipio,
  623. pId_BUNDLE,
  624. DetalleFactura,
  625. PagoUnico,
  626. Plazo);
  627. End If;
  628. END; -- END DEL PROCEDIMIENTO
  629. FUNCTION EXISTE_ENLACE_ACTIVO(pCODEMPRESA NUMBER,
  630. pCODCLIENTE NUMBER,
  631. pINSTALACION NUMBER,
  632. pNOTRANSACCION NUMBER,
  633. pCODTRANSACCION varchar2,
  634. pGrupo_fac in out number,
  635. pProducto in out number) RETURN BOOLEAN IS
  636. tmp_instalacion sso_fdin.instalacion%type;
  637. BEGIN
  638. BEGIN
  639. SELECT INSTALACION,grupofactura,producto
  640. INTO tmp_instalacion,pGrupo_Fac,pproducto
  641. from sso_fdin
  642. WHERE CODEMPRESA=pCODEMPRESA
  643. AND CODCLIENTE=pCODCLIENTE
  644. AND INSTALACION=pINSTALACION
  645. AND NOTRANSACCION=pNOTRANSACCION
  646. AND ACTIVO=DECODE(pCODTRANSACCION,'REA','N','CB',activo,'S')
  647. AND TIPOSERVICIO='ENL';
  648. EXCEPTION
  649. WHEN NO_DATA_FOUND THEN
  650. return FALSE; -- EL ENLACE NO EXISTE
  651. WHEN TOO_MANY_ROWS THEN
  652. return TRUE; -- existe mas de un enlace.
  653. END;
  654. RETURN TRUE; -- SI EXISTE EL ENLACE
  655. END;
  656. FUNCTION VERIFICA_DET_ERROR(pCODEMPRESA NUMBER,
  657. pCODCLIENTE NUMBER,
  658. pINSTALACION NUMBER,
  659. pNOTRANSACCION NUMBER,
  660. pCODTRANSACCION varchar2,
  661. pFECHA_BAJA DATE,
  662. Desc_resultado IN OUT VARCHAR2) RETURN NUMBER IS
  663. CURSOR CUR_FDIN IS
  664. SELECT PROXIMAFACTURA,ACTIVO
  665. FROM SSO_FDIN
  666. WHERE CODEMPRESA=pCODEMPRESA
  667. AND CODCLIENTE=pCODCLIENTE
  668. AND INSTALACION=pINSTALACION
  669. AND NOTRANSACCION=pNOTRANSACCION
  670. AND TIPOSERVICIO='ENL'
  671. AND ACTIVO='S';
  672. VPROXIMA_fAC DATE;
  673. vEstado varchar2(2);
  674. CURSOR CUR_ENLACE IS
  675. SELECT CODEMPRESA,CODCLIENTE
  676. FROM SSO_FDIN
  677. WHERE INSTALACION=pINSTALACION
  678. AND NOTRANSACCION=pNOTRANSACCION
  679. AND TIPOSERVICIO='ENL'
  680. AND ACTIVO='S';
  681. CURSOR CUR_ENLACE_notran IS
  682. SELECT CODEMPRESA,CODCLIENTE,NOTRANSACCION
  683. FROM SSO_FDIN
  684. WHERE CODEMPRESA=pCODEMPRESA
  685. AND INSTALACION=pINSTALACION
  686. AND TIPOSERVICIO='ENL'
  687. AND ACTIVO='S';
  688. vEmpresa sso_fdin.codempresa%type:=0;
  689. vcliente sso_fdin.codcliente%type:=0;
  690. vnotran number:=0;
  691. BEGIN
  692. OPEN CUR_FDIN;
  693. FETCH CUR_FDIN into VPROXIMA_fAC,vEstado;
  694. IF CUR_FDIN%NOTFOUND THEN --NO SE ENCONTRO EL ENLACE
  695. CLOSE CUR_FDIN;
  696. OPEN CUR_ENLACE;
  697. FETCH CUR_ENLACE into vEmpresa,vcliente;
  698. CLOSE CUR_ENLACE;
  699. IF NVL(vEmpresa,0)>0 AND NVL(vcliente,0)>0 AND (vcliente!=pCODCLIENTE OR vEmpresa!=pCODEMPRESA) THEN
  700. Desc_resultado:=GET_MSG_DESCRIPTION(18)||vcliente; --La fecha de baja ingresada no es válida. Se recomienda colocar una fecha posterior a
  701. return(18); -- la fecha debe ser MENOR
  702. END IF;
  703. OPEN CUR_ENLACE_notran;
  704. FETCH CUR_ENLACE_notran into vEmpresa,vcliente,vnotran;
  705. CLOSE CUR_ENLACE_notran;
  706. --Desc_resultado:='RESULTADO:'||vEmpresa||'-'||vcliente||vnotran;
  707. --RETURN(100);
  708. IF vcliente=pCODCLIENTE and vEmpresa=pCODEMPRESA and vnotran <> pNOTRANSACCION and nvl(vnotran,0) >0 THEN
  709. 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
  710. return(19); -- la fecha debe ser MENOR
  711. END IF;
  712. Desc_resultado:=GET_MSG_DESCRIPTION(7);
  713. return(7); -- ENLACES NO EXISTE
  714. else -- si encontro el enlace
  715. CLOSE CUR_FDIN;
  716. 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
  717. 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
  718. return(17); -- la fecha debe ser MENOR
  719. END IF;
  720. END IF;
  721. RETURN 0; -- SI EXISTE EL ENLACE
  722. END;
  723. PROCEDURE BAJA_DE_ENLACE(pCODEMPRESA NUMBER,
  724. pCODCLIENTE NUMBER,
  725. pINSTALACION NUMBER,
  726. pNOTRANSACCION NUMBER,
  727. pTIPOSERVICIO VARCHAR2,
  728. pCODTRANSACCION VARCHAR2,
  729. pFECHA_BAJA DATE,
  730. pMOTIVO_BAJA VARCHAR2,
  731. pENCARGADO_BAJA VARCHAR2,
  732. id_resultado IN OUT NUMBER,
  733. Desc_resultado IN OUT VARCHAR2) IS
  734. vGrupo_Fac number;
  735. v_Correlativo_hist number;
  736. vEstado SSO_FDIN.ACTIVO%TYPE;
  737. CURSOR CUR_estado IS
  738. SELECT ACTIVO
  739. FROM SSO_FDIN
  740. WHERE CODEMPRESA=pCODEMPRESA
  741. AND CODCLIENTE=pCODCLIENTE
  742. AND INSTALACION=pINSTALACION
  743. AND NOTRANSACCION=pNOTRANSACCION
  744. AND TIPOSERVICIO='ENL'
  745. AND ACTIVO='N';
  746. V_PRODUCTO_CONTABLE number;
  747. BEGIN
  748. -- MEJORAS BAJA
  749. IF pCODTRANSACCION = 'B' THEN
  750. id_resultado := VERIFICA_DET_ERROR(pCODEMPRESA,pCODCLIENTE,pINSTALACION,pNOTRANSACCION,pCODTRANSACCION,pFECHA_BAJA,Desc_resultado);
  751. IF NVL(id_resultado,0) > 0 THEN
  752. GOTO FIN_TRANSACCION;
  753. END IF;
  754. END IF;
  755. IF pCODTRANSACCION = 'CB' THEN
  756. OPEN CUR_estado;
  757. FETCH CUR_estado into vEstado;
  758. IF CUR_estado%FOUND THEN --
  759. CLOSE CUR_estado;
  760. id_resultado := 20; --El enlace esta Inactivo debe hacer una reactivacion de enlace
  761. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  762. GOTO FIN_TRANSACCION;
  763. END IF;
  764. CLOSE CUR_estado;
  765. END IF;
  766. -- FIN DE MEJORAS BAJA
  767. id_resultado := 0;
  768. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  769. IF EXISTE_ENLACE_ACTIVO(pCODEMPRESA,pCODCLIENTE,pINSTALACION,pNOTRANSACCION,pCODTRANSACCION,vGrupo_Fac,V_PRODUCTO_CONTABLE) or pCODTRANSACCION='BREA' THEN
  770. IF pCODTRANSACCION = 'CB' THEN -- CANCELACION DE BAJA
  771. UPDATE SSO_FDIN
  772. SET FECHA_BAJA =NULL,
  773. FECHA_AUTORIZA_BAJA=NULL,
  774. MOTIVO_BAJA =NULL,
  775. ENCARGADO_BAJA=NULL,
  776. CODTRANSACCION=NVL(ultimo_codtransaccion,'CB'),
  777. fecha_cancelacion_baja=SYSDATE
  778. --ACTIVO=DECODE(pCODTRANSACCION,'B','S','N'),
  779. WHERE CODEMPRESA =pCODEMPRESA
  780. AND CODCLIENTE=pCODCLIENTE
  781. AND INSTALACION=pINSTALACION
  782. AND NOTRANSACCION=pNOTRANSACCION
  783. AND TIPOSERVICIO=pTIPOSERVICIO
  784. --AND TIPOSERVICIO='ENL'
  785. AND CODTRANSACCION='B'
  786. AND FECHA_BAJA IS NOT NULL;
  787. --AND ACTIVO='S';
  788. GOTO FIN_TRANSACCION;
  789. END IF;
  790. --- SI LLEGO AQUI ES PORQUE NO ES CANCELACION NI REACTIVACION, ES UNA BAJA
  791. BEGIN
  792. UPDATE SSO_FDIN
  793. SET FECHA_BAJA =pFECHA_BAJA,
  794. MOTIVO_BAJA =pMOTIVO_BAJA,
  795. ENCARGADO_BAJA=pENCARGADO_BAJA,
  796. CODTRANSACCION=pCODTRANSACCION,
  797. ACTIVO=DECODE(pCODTRANSACCION,'B','S','N'),
  798. FECHA_AUTORIZA_BAJA=DECODE(pCODTRANSACCION,'B',SYSDATE,NULL),
  799. fecha_baja_programada=pFECHA_BAJA,
  800. ultimo_codtransaccion=CODTRANSACCION
  801. WHERE CODEMPRESA =pCODEMPRESA
  802. AND CODCLIENTE=pCODCLIENTE
  803. AND INSTALACION=pINSTALACION
  804. AND NOTRANSACCION=pNOTRANSACCION
  805. AND TIPOSERVICIO=pTIPOSERVICIO
  806. --AND TIPOSERVICIO='ENL'
  807. AND ACTIVO='S';
  808. GOTO FIN_TRANSACCION;
  809. END;
  810. ELSE
  811. id_resultado := 7;
  812. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||'(cia:'||pCODEMPRESA||' cli:'||pCODCLIENTE||' inst:'||pINSTALACION||' trans:'||pNOTRANSACCION||' tserv:'||pTIPOSERVICIO||')';
  813. --Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||'(ENL: '||pINSTALACION||' NOTRAN: '||pNOTRANSACCION||')';
  814. GOTO FIN_TRANSACCION;
  815. END IF;
  816. <<FIN_TRANSACCION>>
  817. if nvl(id_resultado,0)=0 AND pCODTRANSACCION NOT IN ('B','CB')then
  818. --rollback;
  819. --REGISTRO_DE_RESPUESTA(id_resultado,Desc_resultado,v_Correlativo_hist);
  820. commit;
  821. end if;
  822. IF pCODTRANSACCION in ('B','CB') THEN
  823. -- mejora bajas
  824. IF pCODTRANSACCION='B' and nvl(id_resultado,0)=0 THEN
  825. 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')||')'
  826. into Desc_resultado
  827. from sso_fdin
  828. where codempresa=pCODEMPRESA
  829. and instalacion=pINSTALACION
  830. and notransaccion=pNOTRANSACCION
  831. and codcliente=pCODCLIENTE
  832. and tiposervicio='ENL';
  833. END IF;
  834. -- fin de mejora bajas
  835. v_Correlativo_hist:=SEC_HIST_PARAM_FA.NEXTVAL;
  836. BEGIN
  837. INSERT INTO ARFA_HIST_PARAM
  838. (Correlativo,CODEMPRESA,CODCLIENTE,TIPOSERVICIO,
  839. CODTRANSACCION,INSTALACION_NAF,NOTRANSACCION_NAF,FECHA,
  840. DESCRIPCION,id_resultado,Desc_resultado)
  841. VALUES (v_Correlativo_hist,pCODEMPRESA,pCODCLIENTE,pTIPOSERVICIO,
  842. pCODTRANSACCION,pINSTALACION,pNOTRANSACCION,pFECHA_BAJA,
  843. pMOTIVO_BAJA,id_resultado,Desc_resultado);
  844. EXCEPTION WHEN OTHERS THEN
  845. NULL;
  846. END;
  847. COMMIT;
  848. END IF;
  849. END;
  850. FUNCTION VALIDAR_ENLACE(pCODEMPRESA NUMBER, -- codigo de la empresa
  851. pCODCLIENTE NUMBER, -- codigo del cliente
  852. pINSTALACION NUMBER, -- condigo del enlace
  853. pNOTRANSACCION NUMBER, -- codigo de la orden de trabajo(SR de siebel)
  854. pTIPOSERVICIO VARCHAR2, -- ('ENL','INS','PRO')
  855. pTIPO_VALIDACION NUMBER -- 1=Validar meses facturado y pagadas; 2=Facturas pendientes de pago
  856. ) RETURN NUMBER IS
  857. v_salida number;
  858. v_Fecha date;
  859. BEGIN
  860. -- Selecciono la fecha de la ultima renovacion
  861. SELECT max(fecha)
  862. INTO v_Fecha
  863. from sso_fdin
  864. where instalacion=pINSTALACION
  865. and codtransaccion like '%R%';
  866. IF v_Fecha IS NULL THEN
  867. select min(fecha)
  868. INTO v_Fecha
  869. from sso_fdin
  870. where instalacion=pINSTALACION
  871. and tiposervicio='ENL';
  872. END IF;
  873. IF pTIPO_VALIDACION = 1 THEN -- Cantidad de facturas pagadas de este enlace
  874. SELECT COUNT(DISTINCT A.NO_FACTU)
  875. INTO v_salida
  876. FROM arfafe a, ARFAFL b, arccmd c
  877. WHERE b.instalacion=pINSTALACION
  878. AND a.no_cia=b.no_cia
  879. AND a.no_factu=b.no_factu
  880. AND A.serie_fisico!='PREF'
  881. AND NVL(a.ind_anu_Dev,'X') !='A'
  882. AND a.no_factu=c.no_docu
  883. AND NVL(c.saldo,0) =0
  884. AND a.fecha_Servicio>=v_Fecha
  885. and a.tipo_servicio='ENL';
  886. END IF;
  887. IF pTIPO_VALIDACION = 2 THEN -- la cantidad de facturas pendientes de pago
  888. SELECT COUNT(DISTINCT A.NO_FACTU)
  889. INTO v_salida
  890. FROM arfafe a, ARFAFL b, arccmd c
  891. WHERE b.instalacion=pINSTALACION
  892. AND a.no_cia=b.no_cia
  893. AND a.no_factu=b.no_factu
  894. AND A.serie_fisico!='PREF'
  895. AND NVL(a.ind_anu_Dev,'X') !='A'
  896. AND a.no_factu=c.no_docu
  897. AND NVL(c.saldo,0) >0
  898. AND a.tipo_servicio='ENL';
  899. END IF;
  900. RETURN(NVL(v_salida,0));
  901. END;
  902. PROCEDURE INFO_FACTURACION(pCODEMPRESA NUMBER,
  903. pCODCLIENTE NUMBER,
  904. pINSTALACION NUMBER,
  905. pNOTRANSACCION NUMBER,
  906. pPROXIMAFACTURA IN OUT DATE,
  907. pVMENSUAL IN OUT NUMBER,
  908. id_resultado IN OUT NUMBER,
  909. Desc_resultado IN OUT VARCHAR2
  910. ) IS
  911. CURSOR cur_infofac is
  912. select proximafactura,
  913. vmensual
  914. from sso_fdin
  915. where codempresa=pCODEMPRESA
  916. and codcliente=pCODCLIENTE
  917. and instalacion=pINSTALACION
  918. and notransaccion=pNOTRANSACCION
  919. and tiposervicio='ENL';
  920. BEGIN
  921. id_resultado := 0;
  922. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  923. OPEN cur_infofac;
  924. FETCH cur_infofac into pPROXIMAFACTURA,pVMENSUAL;
  925. IF cur_infofac%NOTFOUND THEN
  926. id_resultado := 7;
  927. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  928. END IF;
  929. CLOSE cur_infofac;
  930. END;
  931. FUNCTION VALIDA_EXENTO_IMP(pCODEMPRESA NUMBER,
  932. pCODCLIENTE NUMBER,
  933. PCLAVE VARCHAR2, --IV=Iva Venta , IC=Iva Compra
  934. PMONTO NUMBER
  935. ) RETURN NUMBER
  936. IS
  937. Vexento varchar2(1);
  938. VPORC NUMBER;
  939. cursor cur_cliente is
  940. SELECT EXcENTO_IMP
  941. FROM ARCCMC
  942. WHERE NO_CIA=pCODEMPRESA
  943. AND NO_CLIENTE=pCODCLIENTE
  944. AND EXCENTO_IMP='N';
  945. BEGIN
  946. OPEN cur_cliente;
  947. FETCH cur_cliente into Vexento;
  948. IF cur_cliente%NOTFOUND THEN
  949. CLOSE cur_cliente;
  950. RETURN PMONTO;
  951. END IF;
  952. CLOSE cur_cliente;
  953. BEGIN
  954. select nvl(PORCENTAJE,0)/100
  955. INTO VPORC
  956. FROM arcghimp
  957. WHERE NO_CIA=1
  958. AND CLAVE='IV'
  959. AND FEC_DESDE=(
  960. select MAX(FEC_DESDE)
  961. from arcghimp
  962. WHERE NO_CIA=1
  963. AND CLAVE='IV');
  964. EXCEPTION WHEN NO_DATA_FOUND THEN
  965. RETURN PMONTO;
  966. END;
  967. RETURN round((PMONTO + (PMONTO * VPORC)),2) ;
  968. END;
  969. FUNCTION VALIDA_DIAS_GRACIA(pcia number,
  970. pfecha_ini date,
  971. pDias_Gracia NUMBER
  972. ) RETURN DATE IS
  973. V_CONTADOR NUMBER:=0;
  974. V_FECHA_CALCULADA DATE:=pfecha_ini;
  975. CURSOR CUR_FERIADOS(PDIA DATE) IS
  976. SELECT DIA
  977. FROM FERIADOS
  978. WHERE NO_CIA=Pcia
  979. AND ANO=to_number(to_char(pdia,'yyyy'))
  980. AND TO_CHAR(DIA,'DDMMYYYY')=to_char(pdia,'DDMMYYYY');
  981. V_esferiado date;
  982. BEGIN
  983. WHILE V_CONTADOR < pDias_Gracia LOOP
  984. IF TRIM(to_char(V_FECHA_CALCULADA,'DAY', 'NLS_DATE_LANGUAGE=SPANISH')) IN ('SÁBADO','DOMINGO') THEN
  985. V_FECHA_CALCULADA := V_FECHA_CALCULADA + 1;
  986. ELSE
  987. OPEN CUR_FERIADOS(V_FECHA_CALCULADA);
  988. FETCH CUR_FERIADOS into V_esferiado;
  989. IF CUR_FERIADOS%NOTFOUND THEN
  990. V_CONTADOR := V_CONTADOR + 1;
  991. END IF;
  992. CLOSE CUR_FERIADOS;
  993. V_FECHA_CALCULADA := V_FECHA_CALCULADA + 1;
  994. END IF;
  995. END LOOP;
  996. V_CONTADOR:=0;
  997. WHILE V_CONTADOR = 0 LOOP
  998. OPEN CUR_FERIADOS(V_FECHA_CALCULADA);
  999. FETCH CUR_FERIADOS into V_esferiado;
  1000. IF CUR_FERIADOS%FOUND THEN
  1001. V_FECHA_CALCULADA := V_FECHA_CALCULADA + 1;
  1002. ELSE
  1003. V_CONTADOR:=1; -- SE SALE DEL CICLO
  1004. END IF;
  1005. CLOSE CUR_FERIADOS;
  1006. END LOOP;
  1007. IF TRIM(to_char(V_FECHA_CALCULADA,'DAY', 'NLS_DATE_LANGUAGE=SPANISH'))='SÁBADO' THEN
  1008. V_FECHA_CALCULADA := V_FECHA_CALCULADA + 2;
  1009. END IF;
  1010. RETURN V_FECHA_CALCULADA;
  1011. END;
  1012. PROCEDURE CANCELA_ACTIVOS_PAGO_UNICO(PCODEMPRESA IN NUMBER,
  1013. PCODCLIENTE IN NUMBER,
  1014. PINSTALACION IN NUMBER,
  1015. PFECHAFACTURA IN DATE) IS
  1016. --
  1017. CURSOR CPLAZO IS
  1018. SELECT PAGOUNICO, PLAZO
  1019. FROM SSO_FDIN_DET_SOL
  1020. WHERE CODEMPRESA = PCODEMPRESA
  1021. AND CODCLIENTE = PCODCLIENTE
  1022. AND INSTALACION = PINSTALACION;
  1023. --
  1024. VPAGOUNICO VARCHAR2(5);
  1025. VPLAZO NUMBER;
  1026. --
  1027. BEGIN
  1028. OPEN CPLAZO;
  1029. FETCH CPLAZO INTO VPAGOUNICO, VPLAZO;
  1030. CLOSE CPLAZO;
  1031. --
  1032. IF VPAGOUNICO = 'Y' AND VPLAZO = 0 THEN
  1033. UPDATE SSO_FDIN
  1034. SET ACTIVO = 'N',
  1035. FECHA_BAJA = NVL(FECHA_ULTIMA_FAC,TRUNC(SYSDATE)),
  1036. MOTIVO_BAJA = 'Vencimiento plazo pago único para soluciones.',
  1037. PROXIMAFACTURA = PFECHAFACTURA
  1038. WHERE CODEMPRESA = PCODEMPRESA
  1039. AND CODCLIENTE = PCODCLIENTE
  1040. AND INSTALACION = PINSTALACION;
  1041. ELSIF VPAGOUNICO = 'Y' AND VPLAZO > 0 THEN
  1042. UPDATE SSO_FDIN
  1043. SET PROXIMAFACTURA = ADD_MONTHS(PFECHAFACTURA,12)
  1044. WHERE CODEMPRESA = PCODEMPRESA
  1045. AND CODCLIENTE = PCODCLIENTE
  1046. AND INSTALACION = PINSTALACION;
  1047. END IF;
  1048. --
  1049. COMMIT;
  1050. --
  1051. END;
  1052. --
  1053. END; -- PKG_FACT_NAF_SOL;
  1054. /