PKG_FACT_NAF.pkb 77 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498
  1. CREATE OR REPLACE PACKAGE BODY NAF47.PKG_FACT_NAF AS
  2. /******************************************************************************
  3. NAME: PKG_FACT_NAF
  4. PURPOSE:
  5. REVISIONS:
  6. Ver Date Author Description
  7. --------- ---------- --------------- ------------------------------------
  8. 1.0 25/05/2016 etajanel 1. Created this package body.
  9. ******************************************************************************/
  10. FUNCTION ULTIMO_TIPOCAMBIO(Pmoneda varchar2) RETURN NUMBER IS
  11. val_tc number;
  12. BEGIN
  13. select tipo_cambio_venta
  14. into val_tc
  15. from arcgtc
  16. where clase_cambio=Pmoneda
  17. and fecha= (select max(fecha)
  18. from arcgtc
  19. where clase_cambio=Pmoneda);
  20. return(val_tc);
  21. END;
  22. FUNCTION SIGUENTE_CORRELATIVO(PCIA NUMBER,popcion VARCHAR2) RETURN NUMBER IS
  23. val_correlativo number;
  24. BEGIN
  25. SELECT TO_NUMBER(VALOR) + 1
  26. INTO val_correlativo
  27. FROM PARAMETROS_VARIOS
  28. WHERE MODULO='FA'
  29. AND PANTALLA='SSO_FDIN'
  30. AND OPCION=popcion
  31. AND TO_NUMBER(CIA)=PCIA;
  32. UPDATE PARAMETROS_VARIOS SET VALOR = TO_CHAR(val_correlativo)
  33. WHERE MODULO='FA'
  34. AND PANTALLA='SSO_FDIN'
  35. AND OPCION=popcion
  36. AND TO_NUMBER(CIA)=PCIA;
  37. RETURN(val_correlativo);
  38. END;
  39. FUNCTION DIFERENCIAL(pcia number, -- Codigo de la compañia
  40. pcliente number, -- Codigo del cliente
  41. pInstalacion number, -- numero de enlace
  42. pnotransaccion number, --numero de orden de trabajo del enlace
  43. pValorAct number, -- valor de la nueva transaccion sobre el enlace
  44. pCodMoneda VARCHAR2 -- moneda de la nueva transaccion del enlace
  45. ) RETURN NUMBER IS
  46. CURSOR CUR_TRAN IS
  47. SELECT vmensual,codmoneda,DECODE(pcia,1,'01') cod_mondeda
  48. from sso_fdin
  49. where codempresa = pcia
  50. and codcliente=pcliente
  51. and instalacion=pinstalacion
  52. and notransaccion=pnotransaccion
  53. and activo='S'
  54. and tiposervicio='ENL'
  55. and fecha=(select max(fecha)
  56. from sso_fdin
  57. where codempresa = pcia
  58. and codcliente=pcliente
  59. and instalacion=pinstalacion
  60. and notransaccion=pnotransaccion
  61. and activo='S'
  62. and tiposervicio='ENL'
  63. );
  64. nValorAnt number;
  65. nCodmonedaAnt varchar2(4);
  66. nvalorTC number;
  67. dfecha_tc date;
  68. cCodMoneda_tc varchar2(4);
  69. nVal_direrencial number;
  70. BEGIN
  71. OPEN CUR_TRAN;
  72. FETCH CUR_TRAN INTO nValorAnt, nCodmonedaAnt,cCodMoneda_tc;
  73. CLOSE CUR_TRAN;
  74. IF ncodmonedaAnt != pCodMoneda THEN -- La moneda de la transaccion anterior es diferente a la moneda de la nueva transaccion
  75. nvalorTC := Tipo_cambio( cCodMoneda_tc, sysdate, dfecha_tc, 'C'); -- se obtiene el tipo de cambio del sistema NAF
  76. IF nCodmonedaAnt='USD' THEN -- La moneda anterior es dolares y la nueva moneda es local
  77. nVal_direrencial := NVL(pValorAct,0) - NVL((nValorAnt * nvalorTC),0);
  78. ELSE -- La moneda anterior es local y la nueva es dolares
  79. nVal_direrencial := NVL(pValorAct,0) - NVL((nValorAnt / nvalorTC),0);
  80. END IF;
  81. ELSE
  82. -- La moneda del servicio anterior es igual a la moneda de la nueva transaccion
  83. nVal_direrencial := NVL(pValorAct,0) - NVL(nValorAnt,0);
  84. END IF;
  85. IF nVal_direrencial < 0 THEN
  86. nVal_direrencial := 0;
  87. END IF;
  88. nVal_direrencial :=round(nVal_direrencial,2);
  89. --return nValorAnt;
  90. return nVal_direrencial;
  91. --RETURN nValorAnt;
  92. END;
  93. FUNCTION Existe_Cliente(pNO_CIA IN NUMBER,
  94. pNO_CLIENTE IN VARCHAR2,
  95. pNit VARCHAR2,
  96. pNOMBRE VARCHAR2) RETURN BOOLEAN IS
  97. v_cliente arccmc.no_cliente%type;
  98. BEGIN
  99. BEGIN
  100. SELECT no_cliente -- Busco el cliente por el codigo de siebel
  101. into v_cliente
  102. FROM ARCCMC
  103. WHERE TO_NUMBER(NO_CIA)=pNO_CIA
  104. AND NO_CLIENTE_SIEBEL =pNO_CLIENTE;
  105. EXCEPTION WHEN
  106. NO_DATA_FOUND THEN
  107. BEGIN
  108. SELECT no_cliente -- Busco el cliente por el nit
  109. into v_cliente
  110. FROM ARCCMC
  111. WHERE TO_NUMBER(NO_CIA)=pNO_CIA
  112. AND CEDULA = replace(substr(trim(pNIT),1,length(trim(pNIT))-1)||'-'||substr(trim(pNIT),length(trim(pNIT)),1),'--','-');
  113. EXCEPTION WHEN
  114. NO_DATA_FOUND THEN
  115. BEGIN
  116. SELECT no_cliente -- Busco el cliente por el nombre
  117. into v_cliente
  118. FROM ARCCMC
  119. WHERE TO_NUMBER(NO_CIA)=pNO_CIA
  120. AND NOMBRE =pnombre;
  121. EXCEPTION WHEN
  122. NO_DATA_FOUND THEN RETURN FALSE; -- EL CLIENTE NO EXISTE
  123. END;
  124. END;
  125. END;
  126. RETURN TRUE; -- EL CLIENTE SI EXISTE
  127. END;
  128. FUNCTION GET_MSG_DESCRIPTION(ID_RESULTADO IN NUMBER) RETURN VARCHAR2 IS
  129. --V_desc MSG_PKG_FACT_NAF.desc_msg%type;
  130. V_desc VARCHAR2(1000);
  131. BEGIN
  132. BEGIN
  133. SELECT desc_msg
  134. into v_Desc
  135. from MSG_PKG_FACT_NAF
  136. where id_msg=ID_RESULTADO;
  137. EXCEPTION WHEN NO_DATA_FOUND THEN
  138. V_desc:='Descripción no esta en la tabla de mensajes';
  139. END;
  140. RETURN v_Desc;
  141. END;
  142. PROCEDURE CREAR_CLIENTE(pNO_CIA IN VARCHAR2,
  143. pCOD_CLIENTE_SIEBEL IN VARCHAR2,
  144. pGRUPO IN VARCHAR2,
  145. pTIPO_CLIENTE IN VARCHAR2,
  146. pNOMBRE IN VARCHAR2,
  147. pNOMBRE_COMERCIAL IN VARCHAR2,
  148. pDIRECCION IN VARCHAR2,
  149. pFecha_Ingre IN DATE,
  150. pExcento_Imp IN VARCHAR2,
  151. pMONEDA_LIMITE IN VARCHAR2,
  152. pTELEFONO IN VARCHAR2,
  153. pPLAZO IN Number,
  154. pCedula IN VARCHAR2,
  155. pCLIENTE_NACIONAL IN VARCHAR2,
  156. pIND_ACEPTA_RETENCION IN VARCHAR2,
  157. pEXENTO_IVA IN VARCHAR2,
  158. pTipoPrecio IN VARCHAR2,
  159. pCentro IN VARCHAR2,
  160. pBALANCEFACTURA VARCHAR2,
  161. pNOMBRE_FISCAL VARCHAR2,
  162. PDIRECCION_FACTURA VARCHAR2,
  163. pFac_ANTICIPADO VARCHAR2,
  164. pCOD_CLIENTE_NAF IN OUT NUMBER,
  165. id_resultado IN OUT NUMBER,
  166. Desc_resultado IN OUT VARCHAR2) IS
  167. TmpVar NUMBER;
  168. BEGIN
  169. id_resultado := 0;
  170. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  171. IF Existe_Cliente(pNO_CIA,pCOD_CLIENTE_SIEBEL,pCedula,pNOMBRE) THEN
  172. id_resultado:=2;
  173. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  174. ELSE
  175. BEGIN
  176. SELECT NVL(MAX(to_number(NO_CLIENTE)),0) + 1
  177. INTO pCOD_CLIENTE_NAF
  178. FROM ARCCMC
  179. WHERE to_number(NO_CIA)=to_number(pNO_CIA);
  180. INSERT INTO ARCCMC(NO_CIA,NO_CLIENTE,GRUPO,TIPO_CLIENTE,NOMBRE,NOMBRE_COMERCIAL,DIRECCION,Fecha_Ingre,
  181. Excento_Imp,MONEDA_LIMITE,TELEFONO,PLAZO,Cedula,CLIENTE_NACIONAL,IND_ACEPTA_RETENCION,EXENTO_IVA,
  182. TIPOPRECIO,CENTRO,BALANCEFACTURA,NO_CLIENTE_SIEBEL,NOMBRE_LARGO)
  183. VALUES(pNO_CIA,pCOD_CLIENTE_NAF,/*pGRUPO*/'01',pTIPO_CLIENTE,pNOMBRE,pNOMBRE_COMERCIAL,pDIRECCION,pFecha_Ingre,
  184. pExcento_Imp,pMONEDA_LIMITE,pTELEFONO,pPLAZO,pCedula,pCLIENTE_NACIONAL,pIND_ACEPTA_RETENCION,pEXENTO_IVA,
  185. pTipoPrecio,pCentro,pBALANCEFACTURA,pCOD_CLIENTE_SIEBEL,pNOMBRE);
  186. EXCEPTION
  187. WHEN DUP_VAL_ON_INDEX THEN
  188. id_resultado := 2; -- Operación Fallida, Código de Cliente duplicado
  189. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||'('||pCOD_CLIENTE_NAF||')';
  190. WHEN OTHERS THEN
  191. id_resultado := 3; -- Operación Fallida, Error al insertar en ARCCMC
  192. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||SQLERRM;
  193. END;
  194. -- Crea de una vez grupo de facturacion 1
  195. ASIGNAR_GRUPOFAC(pNO_CIA, pCOD_CLIENTE_NAF,USER,pNOMBRE_FISCAL ,replace(PDIRECCION_FACTURA,',,',','));
  196. COMMIT;
  197. END IF;
  198. END;
  199. FUNCTION Existe_Cliente_Activo(pNO_CIA IN NUMBER,
  200. pNO_CLIENTE IN NUMBER
  201. ) RETURN NUMBER IS
  202. CURSOR CUR_CLI IS -- Para validar que exista el cliente
  203. SELECT no_cliente
  204. from arccmc
  205. WHERE TO_NUMBER(no_cia)=pNO_CIA
  206. and TO_NUMBER(no_cliente)=pNO_CLIENTE
  207. and F_CIERRE IS NULL;
  208. V_NO_CLIENTE ARCCMC.NO_CLIENTE%TYPE;
  209. BEGIN
  210. OPEN CUR_CLI;
  211. FETCH CUR_CLI into V_NO_CLIENTE;
  212. IF CUR_CLI%FOUND THEN
  213. CLOSE CUR_CLI;
  214. RETURN V_NO_CLIENTE;
  215. ELSE
  216. CLOSE CUR_CLI;
  217. RETURN 0;
  218. END IF;
  219. END;
  220. PROCEDURE ACTUALIZAR_CLIENTE(pNO_CIA IN VARCHAR2,
  221. pCOD_CLIENTE IN VARCHAR2,
  222. pNOMBRE IN VARCHAR2,
  223. pNOMBRE_COMERCIAL IN VARCHAR2,
  224. pDIRECCION IN VARCHAR2,
  225. pExcento_Imp IN VARCHAR2,
  226. pMONEDA_LIMITE IN VARCHAR2,
  227. pTELEFONO IN VARCHAR2,
  228. pPLAZO IN Number,
  229. pCedula IN VARCHAR2,
  230. pCLIENTE_NACIONAL IN VARCHAR2,
  231. pIND_ACEPTA_RETENCION IN VARCHAR2,
  232. pEXENTO_IVA IN VARCHAR2,
  233. pNOMBRE_FISCAL VARCHAR2,
  234. PDIRECCION_FACTURA VARCHAR2,
  235. pFac_ANTICIPADO VARCHAR2,
  236. id_resultado IN OUT NUMBER,
  237. Desc_resultado IN OUT VARCHAR2) IS
  238. BEGIN
  239. id_resultado := 0; -- Resultado exitoso
  240. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  241. IF Existe_Cliente_ACTIVO(pNO_CIA,pCOD_CLIENTE)=TO_NUMBER(pCOD_CLIENTE) THEN
  242. UPDATE arccmc set NOMBRE =NVL(pNOMBRE,NOMBRE),
  243. NOMBRE_COMERCIAL =NVL(pNOMBRE_COMERCIAL,NOMBRE_COMERCIAL),
  244. NOMBRE_LARGO =NVL(pNOMBRE,NOMBRE),
  245. DIRECCION =NVL(pDIRECCION,DIRECCION),
  246. Excento_Imp =NVL(pExcento_Imp,Excento_Imp),
  247. MONEDA_LIMITE =NVL(pMONEDA_LIMITE,MONEDA_LIMITE),
  248. TELEFONO =NVL(pTELEFONO,Telefono),
  249. PLAZO =NVL(pPLAZO,PLAZO),
  250. Cedula =pCedula,
  251. CLIENTE_NACIONAL =NVL(pCLIENTE_NACIONAL,CLIENTE_NACIONAL),
  252. IND_ACEPTA_RETENCION=NVL(pIND_ACEPTA_RETENCION,IND_ACEPTA_RETENCION),
  253. EXENTO_IVA =NVL(pEXENTO_IVA,EXENTO_IVA)
  254. WHERE NO_CIA=pNO_CIA
  255. AND NO_CLIENTE=pCOD_CLIENTE;
  256. -- ACTUALIZA TODOS LOS GRUPOS DE FACTURACION
  257. UPDATE sso_fgcf SET NOMBRECLIENTE=pNOMBRE_FISCAL,
  258. DIRECCION=replace(PDIRECCION_FACTURA,',,',','), -- de una vez le quito dos comas juntos cuando vienen
  259. NIT=replace(substr(trim(pCedula),1,length(trim(pCedula))-1)||'-'||substr(trim(pCedula),length(trim(pCedula)),1),'--','-')
  260. where codempresa=pNO_CIA
  261. and cod_cliente=pCOD_CLIENTE;
  262. COMMIT;
  263. ELSE
  264. id_resultado := 4; -- El cliente no existe.
  265. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  266. END IF;
  267. END;
  268. PROCEDURE BAJA_CLIENTE(pNO_CIA IN VARCHAR2,
  269. pNO_CLIENTE IN VARCHAR2,
  270. pFECHA_BAJA date,
  271. pMOTIVO VARCHAR2,
  272. id_resultado IN OUT NUMBER,
  273. Desc_resultado IN OUT VARCHAR2) IS
  274. BEGIN
  275. id_resultado := 0; -- Resultado exitoso
  276. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  277. UPDATE arccmc set F_CIERRE=pFECHA_BAJA,
  278. MOTIVO=pMotivo
  279. WHERE NO_CIA = pNO_CIA
  280. AND NO_CLIENTE= pNO_CLIENTE;
  281. COMMIT;
  282. END;
  283. PROCEDURE ASIGNAR_GRUPOFAC(pcia number, pcliente number, pUSUARIO_INGRESO VARCHAR2,
  284. pNOMBRE_FISCAL VARCHAR2,PDIRECCION_FACTURA VARCHAR2) is
  285. BEGIN
  286. BEGIN
  287. insert into sso_fgcf(CODEMPRESA,
  288. COD_CLIENTE,
  289. GRUPOFACTURA,
  290. NOMBREGRUPO,
  291. NOMBRECLIENTE,
  292. DIRECCION,
  293. NIT,
  294. TELEFONO,
  295. ENCABEZADOGRUPO,
  296. TIPODETALLE,
  297. PIEDETALLE,
  298. CICLO,
  299. EJECUTIVO,
  300. TIPOCLIENTE,
  301. GRUPOCONTABLE,
  302. ACTIVO,
  303. LEYENDA,
  304. MONEDA_IMPRESION)
  305. select no_cia,
  306. no_cliente,
  307. 1, -- grupofactura
  308. 1, -- nombre grupo
  309. pNOMBRE_FISCAL,
  310. PDIRECCION_FACTURA,
  311. cedula,
  312. telefono,
  313. 'Cobro por servicios correspondientes al mes de <%1>', --ENCABEZADOGRUPO
  314. 0, --TIPODETALLE
  315. null, --PIEDETALLE
  316. 17, -- ciclo
  317. substr(pUSUARIO_INGRESO,1,20), -- Ejecutivo
  318. DECODE(CLIENTE_NACIONAL,'S','L','I'), -- tipocliente(ESTA CLASIFICACION ES UNICAMENTE L/I)
  319. GRUPO, --grupocontable
  320. 'S', -- activo
  321. 'S', -- leyenda
  322. moneda_limite
  323. from arccmc
  324. where to_number(no_cliente)=pcliente
  325. and to_number(no_cia)=pcia
  326. and not exists( select * -- crea el grupo de facturacion 1, solamente si no existe para ese cliente
  327. from sso_fgcf
  328. where cod_cliente=pcliente
  329. and codempresa=pcia
  330. and grupofactura=1);
  331. exception when others then
  332. null;
  333. END;
  334. END;
  335. PROCEDURE GENERA_COBRO_INS(pCODEMPRESA NUMBER,
  336. pCODCLIENTE NUMBER,
  337. pINSTALACION_NAF NUMBER,
  338. pNOTRANSACCION_NAF NUMBER,
  339. pTIPOSERVICIO VARCHAR2,
  340. pVINSTALACION NUMBER) IS
  341. BEGIN
  342. INSERT INTO SSO_FDIN(
  343. CODEMPRESA,CODCLIENTE,CONTRATO,ANEXO,INSTALACION,NOTRANSACCION,TIPOSERVICIO,GRUPOFACTURA,CODTRANSACCION,CODMONEDA,
  344. ORDEN,DESCRIPCION,CANTIDAD,VINSTALACION,NOCUOTAS,TOTALCUOTAS,VMENSUAL,VACUMULADO,TIPOFACTURACION,FECHA,
  345. FACTURA,PRODUCTO,COD_CATEGORIA,PROXIMAFACTURA,CICLOFACTURACION,PERIODICIDAD,USUARIO_INGRESO,FECHA_INGRESO,OBSERVACIONES,FINFACTURACION,
  346. CODPRODUCTO,CODANCHOBANDA,NO_FACTU,CENTRO,BODEGA,SUBCLIENTE,ANCHO_BANDA,GEOGRAFIA_VENTA,GEOGRAFIA_PUNTO_INI,GEOGRAFIA_PUNTO_FIN,
  347. GENERA_COMISION,NO_VENDEDOR,PRODUCTO_INI,PRODUCTO_FIN,ALTA_FACTURACION,FECHA_IMPRESION,PREFACTURADO,ACTIVO,FECHA_BAJA,PUNTO_INICIO,
  348. PUNTO_FINAL,PAIS_INICIAL,PAIS_FINAL,MOTIVO_BAJA,OBSERVACIONES_ADMINISTRATIVAS,OBSERVACIONES_TECNICAS,ENCARGADO_CARTERA,ENCARGADO_BAJA,PERIODO_INICIO,FECHA_INICIO_FACTURACION,
  349. FECHA_AUTORIZACION_FACTURACION,HAY_DIFERENCIAL,FECHA_PREAUTORIZACION,FECHA_AUTORIZA_BAJA,INSTALACION_SIEBEL,NOTRANSACCION_SIEBEL,CODCLIENTE_PADRE,CODEMPRESA_PADRE,
  350. ES_SPLIT)
  351. SELECT
  352. CODEMPRESA,CODCLIENTE,CONTRATO,ANEXO,INSTALACION,NOTRANSACCION,'INS',GRUPOFACTURA,CODTRANSACCION,CODMONEDA,
  353. ORDEN,DESCRIPCION,CANTIDAD,pVINSTALACION,NOCUOTAS,TOTALCUOTAS,pVINSTALACION,VACUMULADO,TIPOFACTURACION,FECHA,
  354. FACTURA,PRODUCTO,COD_CATEGORIA,PROXIMAFACTURA,CICLOFACTURACION,PERIODICIDAD,USUARIO_INGRESO,FECHA_INGRESO,OBSERVACIONES,FINFACTURACION,
  355. CODPRODUCTO,CODANCHOBANDA,NO_FACTU,CENTRO,BODEGA,SUBCLIENTE,ANCHO_BANDA,GEOGRAFIA_VENTA,GEOGRAFIA_PUNTO_INI,GEOGRAFIA_PUNTO_FIN,
  356. GENERA_COMISION,NO_VENDEDOR,PRODUCTO_INI,PRODUCTO_FIN,ALTA_FACTURACION,FECHA_IMPRESION,PREFACTURADO,ACTIVO,FECHA_BAJA,PUNTO_INICIO,
  357. PUNTO_FINAL,PAIS_INICIAL,PAIS_FINAL,MOTIVO_BAJA,OBSERVACIONES_ADMINISTRATIVAS,OBSERVACIONES_TECNICAS,ENCARGADO_CARTERA,ENCARGADO_BAJA,PERIODO_INICIO,FECHA_INICIO_FACTURACION,
  358. FECHA_AUTORIZACION_FACTURACION,HAY_DIFERENCIAL,FECHA_PREAUTORIZACION,FECHA_AUTORIZA_BAJA,INSTALACION_SIEBEL,NOTRANSACCION_SIEBEL,CODCLIENTE_PADRE,CODEMPRESA_PADRE,
  359. ES_SPLIT
  360. FROM SSO_FDIN
  361. WHERE CODEMPRESA=pCODEMPRESA
  362. AND CODCLIENTE=pCODCLIENTE
  363. AND INSTALACION=pINSTALACION_NAF
  364. AND NOTRANSACCION=pNOTRANSACCION_NAF
  365. AND TIPOSERVICIO=pTIPOSERVICIO
  366. AND ACTIVO='S';
  367. exception when no_data_found then
  368. null;
  369. END;
  370. FUNCTION OBTENER_CODANCHOBANDA(pCODEMPRESA NUMBER,
  371. pCODPRODUCTO VARCHAR2,
  372. pANCHO_BANDA VARCHAR2) RETURN varchar2 IS
  373. CURSOR CUR_AB IS
  374. select CODANCHOBANDA
  375. from ctl_anchobanda
  376. where codempresa=pCODEMPRESA
  377. and codproducto=pCODPRODUCTO
  378. and UPPER(descripcion)=UPPER(pANCHO_BANDA);
  379. v_codanchobanda ctl_anchobanda.codanchobanda%type;
  380. BEGIN
  381. OPEN CUR_AB;
  382. FETCH CUR_AB into v_codanchobanda;
  383. IF CUR_AB%NOTFOUND THEN
  384. select nvl(max(to_number(CODANCHOBANDA)),0)+1
  385. into v_codanchobanda
  386. from ctl_anchobanda
  387. where codempresa=pCODEMPRESA
  388. AND TRIM(TRANSLATE(CODANCHOBANDA,'0123456789', ' ')) IS NULL
  389. and codproducto=pCODPRODUCTO;
  390. insert into ctl_anchobanda(CODEMPRESA,CODPRODUCTO,CODANCHOBANDA,DESCRIPCION,PRODCODE,ABCODE,ACTIVO,CATEGORIA,PESO)
  391. values(pCODEMPRESA,pCODPRODUCTO,v_codanchobanda,pANCHO_BANDA,0,0,'S',0,0);
  392. END IF;
  393. CLOSE CUR_AB;
  394. RETURN v_codanchobanda;
  395. END;
  396. FUNCTION VALIDA_CAMBIO_PRECIO(pCODEMPRESA NUMBER,pEnlace number,pNoTransaccion number,pCODCLIENTE NUMBER,pTIPOSERVICIO varchar2,pPROXIMAFACTURA DATE) RETURN NUMBER IS
  397. v_resultado NUMBER;
  398. CURSOR CUR_FPROXIMA_FAC IS
  399. SELECT PROXIMAFACTURA
  400. FROM SSO_FDIN
  401. WHERE CODEMPRESA=pCODEMPRESA
  402. AND CODCLIENTE=pCODCLIENTE
  403. AND INSTALACION=pEnlace
  404. AND NOTRANSACCION=pNOTRANSACCION
  405. AND TIPOSERVICIO=pTIPOSERVICIO
  406. AND ACTIVO='S';
  407. V_PROXIMAFAC_ACTUAL DATE;
  408. BEGIN
  409. select count(*)
  410. into v_resultado
  411. from sso_fdin
  412. where codempresa=pCODEMPRESA
  413. and CODCLIENTE=pCODCLIENTE
  414. and instalacion=pEnlace
  415. and notransaccion=pNoTransaccion
  416. and prefacturado='S'
  417. and activo='S';
  418. IF NVL(v_resultado,0) > 0 THEN
  419. RETURN(14); --'Operación Fallida, El enlace tiene una prefactura generada, debe reversar o generar la factura previo a esta transacción...'
  420. END IF;
  421. OPEN CUR_FPROXIMA_FAC;
  422. FETCH CUR_FPROXIMA_FAC into V_PROXIMAFAC_ACTUAL;
  423. IF CUR_FPROXIMA_FAC%FOUND THEN
  424. IF TO_CHAR(V_PROXIMAFAC_ACTUAL,'DD/MM/YYYY') <> TO_CHAR(pPROXIMAFACTURA,'DD/MM/YYYY') THEN
  425. --CLOSE CUR_FPROXIMA_FAC;
  426. --RETURN(15);
  427. null; -- se quito la validacion de la fecha en cambio de precio
  428. END IF;
  429. ELSE
  430. CLOSE CUR_FPROXIMA_FAC;
  431. RETURN(7);
  432. END IF;
  433. CLOSE CUR_FPROXIMA_FAC;
  434. RETURN(0);
  435. END;
  436. PROCEDURE REGISTRO_DE_RESPUESTA(Pid_resultado NUMBER,PDesc_resultado VARCHAR2,PCorrelativo_hist NUMBER) IS
  437. BEGIN
  438. update arfa_hist_param set id_resultado=Pid_resultado,
  439. --desc_resultado=PDesc_resultado
  440. desc_resultado=desc_resultado||' - '||PDesc_resultado||' - hora fin:'||to_char(sysdate,'dd/mm/yyyy hh24:mi:ss')
  441. where correlativo=PCorrelativo_hist;
  442. END;
  443. PROCEDURE REGISTRO_DE_TRANSACCION(pCODEMPRESA NUMBER,
  444. pCODCLIENTE NUMBER,
  445. pCONTRATO NUMBER,
  446. pANEXO NUMBER,
  447. pINSTALACION_SIEBEL VARCHAR2,
  448. pNOTRANSACCION_SIEBEL VARCHAR2,
  449. pTIPOSERVICIO VARCHAR2,
  450. pCODTRANSACCION VARCHAR2,
  451. pCODMONEDA VARCHAR2,
  452. pDESCRIPCION VARCHAR2,
  453. pCANTIDAD NUMBER,
  454. pVINSTALACION NUMBER,
  455. pVMENSUAL NUMBER,
  456. pFECHA DATE,
  457. pProducto Varchar2,
  458. pPROXIMAFACTURA DATE,
  459. pUSUARIO_INGRESO VARCHAR2,
  460. pFECHA_INGRESO DATE,
  461. pCODPRODUCTO VARCHAR2,
  462. pCODANCHOBANDA VARCHAR2,
  463. pCENTRO VARCHAR2,
  464. pBODEGA VARCHAR2,
  465. pANCHO_BANDA VARCHAR2,
  466. pGEOGRAFIA_VENTA VARCHAR2,
  467. pGEOGRAFIA_PUNTO_INI VARCHAR2,
  468. pGEOGRAFIA_PUNTO_FIN VARCHAR2,
  469. pACTIVO VARCHAR2,
  470. pPUNTO_INICIO VARCHAR2,
  471. pPUNTO_FINAL VARCHAR2,
  472. pPAIS_INICIAL VARCHAR2,
  473. pPAIS_FINAL VARCHAR2,
  474. pPERIODO_INICIO NUMBER,
  475. pSPLIT VARCHAR2, -- P=padre, H=hijo, N= no aplica
  476. pINSTALACION_PADRE IN NUMBER, -- Numero de instalacion del padre cuando es split
  477. pNOTRANSACCION_PADRE IN NUMBER, --Numero de transaccion del padre cuando es split
  478. pCODEMPRESA_PADRE NUMBER, -- Codigo de empresa del padre cuand es split
  479. pCODCLIENTE_PADRE NUMBER, -- Codigo del cliente padre cuando es split
  480. pCODEMPRESA_NUEVA NUMBER, -- Nueva Empresa para la transaccion de cambio de cliente 'CC=cambio de cliente a enlace'
  481. pCODCLIENTE_NUEVO NUMBER, -- Nuevo cliente para la transaccion de cambio de cliente 'CC=cambio de cliente a enlace'
  482. pINSTALACION_NAF IN OUT NUMBER,
  483. pNOTRANSACCION_NAF IN OUT NUMBER,
  484. pId_BUNDLE VARCHAR2,
  485. pAplicaDesc varchar2,
  486. id_resultado IN OUT NUMBER,
  487. Desc_resultado IN OUT VARCHAR2,
  488. pFecha_ini_fac in out date,
  489. pIdSolucion Varchar2 Default Null) IS
  490. ndias_prop number;
  491. --nMonto_Prop number;
  492. dfecha_facturacion date;
  493. vCliente number;
  494. V_diferencial number;
  495. CURSOR cur_cli is
  496. SELECT NO_CLIENTE
  497. FROM ARCCMC
  498. WHERE TO_NUMBER(NO_CIA)=pCODEMPRESA
  499. AND TO_NUMBER(NO_CLIENTE)=pCODCLIENTE;
  500. CURSOR cur_grupo_cli is
  501. SELECT grupo
  502. FROM ARCCMC
  503. WHERE TO_NUMBER(NO_CIA)=pCODEMPRESA
  504. AND TO_NUMBER(NO_CLIENTE)=pCODCLIENTE;
  505. CURSOR CUR_ENL IS
  506. SELECT INSTALACION
  507. FROM SSO_FDIN
  508. WHERE CODEMPRESA=pCODEMPRESA
  509. AND CODCLIENTE=pCODCLIENTE
  510. AND INSTALACION_SIEBEL=pINSTALACION_SIEBEL
  511. AND NOTRANSACCION_SIEBEL=pNOTRANSACCION_SIEBEL
  512. AND TIPOSERVICIO=pTIPOSERVICIO;
  513. --INICIO MODIFICACION 2019/01/24 MMONTENEGROP, SE AGREGA MONEDA Y VMENSUAL
  514. CURSOR CUR_FPROXIMA_FAC IS
  515. SELECT PROXIMAFACTURA,DESCRIPCION,ANCHO_BANDA, CODMONEDA, VMENSUAL,fecha_ini_fac
  516. FROM SSO_FDIN
  517. WHERE CODEMPRESA=pCODEMPRESA
  518. AND CODCLIENTE=pCODCLIENTE
  519. AND INSTALACION=pINSTALACION_NAF
  520. AND NOTRANSACCION=pNOTRANSACCION_NAF
  521. AND TIPOSERVICIO=pTIPOSERVICIO
  522. AND ACTIVO=DECODE(pCODTRANSACCION,'REA','N','S');
  523. --FINAL DE MODIFICACION 2019/01/24
  524. CURSOR CUR_PRODUCTO IS
  525. SELECT DESCRIPCION
  526. FROM CTL_PRODUCTO
  527. WHERE CODEMPRESA=pCODEMPRESA
  528. AND CODPRODUCTO=PCODPRODUCTO
  529. AND ACTIVO='S';
  530. venlace number:=0;
  531. NOTRANSACCION_BAJA NUMBER;
  532. vGrupo_Fac number;
  533. v_monto_mensual number;
  534. v_monto_mensual_ins number;
  535. V_FECHA_PROXIMAF DATE;
  536. V_FECHA_ACTUAL DATE;
  537. v_descpricion_fact sso_fdin.descripcion%type;
  538. v_descri_producto ctl_producto.descripcion%type;
  539. V_ANCHO_BANDA sso_fdin.ancho_banda%type;
  540. v_codanchobanda sso_fdin.codanchobanda%type;
  541. v_Correlativo_hist number;
  542. vEXISTE_INS_PENDIENTE_COBRO NUMBER;
  543. pFechaProp DATE;
  544. pFechaEnlace DATE;
  545. --Modificacion 2019/01/24 mmontenegrop, se agregan 2 variables para precio y moneda de reactivacion (ultima facturacion)
  546. v_precio_rea number;
  547. v_moneda_rea varchar2(5);
  548. --Fin modificacion 2019/01/24
  549. V_PRODUCTO_CONTABLE SSO_FCTA.TIPOPRODUCTO%TYPE;
  550. v_grupo arccmc.grupo%type;
  551. BEGIN
  552. v_Correlativo_hist:=SEC_HIST_PARAM_FA.NEXTVAL;
  553. BEGIN
  554. INSERT INTO ARFA_HIST_PARAM
  555. (Correlativo,CODEMPRESA,CODCLIENTE,CONTRATO,ANEXO,INSTALACION_SIEBEL,NOTRANSACCION_SIEBEL,TIPOSERVICIO,CODTRANSACCION,CODMONEDA,
  556. DESCRIPCION,CANTIDAD,VINSTALACION,VMENSUAL,FECHA,Producto,PROXIMAFACTURA,USUARIO_INGRESO,FECHA_INGRESO,CODPRODUCTO,
  557. CODANCHOBANDA,CENTRO,BODEGA,ANCHO_BANDA,GEOGRAFIA_VENTA,GEOGRAFIA_PUNTO_INI,GEOGRAFIA_PUNTO_FIN,ACTIVO,PUNTO_INICIO,PUNTO_FINAL,
  558. PAIS_INICIAL,PAIS_FINAL,PERIODO_INICIO,SPLIT,INSTALACION_PADRE,NOTRANSACCION_PADRE,CODEMPRESA_PADRE,CODCLIENTE_PADRE,CODEMPRESA_NUEVA,CODCLIENTE_NUEVO,
  559. INSTALACION_NAF,NOTRANSACCION_NAF,id_resultado,Desc_resultado,Id_BUNDLE,AplicaDesc)
  560. VALUES(v_Correlativo_hist,pCODEMPRESA,pCODCLIENTE,pCONTRATO,pANEXO,pINSTALACION_SIEBEL,pNOTRANSACCION_SIEBEL,pTIPOSERVICIO,pCODTRANSACCION,pCODMONEDA,pDESCRIPCION,
  561. pCANTIDAD,pVINSTALACION,pVMENSUAL,pFECHA,pProducto,pPROXIMAFACTURA,pUSUARIO_INGRESO,pFECHA_INGRESO,pCODPRODUCTO,pCODANCHOBANDA,
  562. pCENTRO,pBODEGA,pANCHO_BANDA,pGEOGRAFIA_VENTA,pGEOGRAFIA_PUNTO_INI,pGEOGRAFIA_PUNTO_FIN,pACTIVO,pPUNTO_INICIO,pPUNTO_FINAL,pPAIS_INICIAL,
  563. pPAIS_FINAL,pPERIODO_INICIO,pSPLIT,pINSTALACION_PADRE,pNOTRANSACCION_PADRE,pCODEMPRESA_PADRE,pCODCLIENTE_PADRE,pCODEMPRESA_NUEVA,pCODCLIENTE_NUEVO,pINSTALACION_NAF,
  564. pNOTRANSACCION_NAF,id_resultado,Desc_resultado||'Hora ini:'||to_char(sysdate,'dd/mm/yyyy hh24:mi:ss'),pId_BUNDLE,pAplicaDesc);
  565. EXCEPTION WHEN OTHERS THEN
  566. NULL;
  567. END;
  568. commit;
  569. IF NVL(pINSTALACION_NAF,0) = 0 THEN
  570. id_resultado := 9; --Operación Fallida, El numero de enlace no puede ser nulo...
  571. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  572. GOTO FINALIZAR_TRANSACCION;
  573. END IF;
  574. IF NVL(pCODPRODUCTO,'x') = 'x' THEN
  575. id_resultado := 10; --Operación Fallida, El código de producto no puede ser nulo...
  576. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  577. GOTO FINALIZAR_TRANSACCION;
  578. END IF;
  579. IF Existe_Cliente_Activo(pCODEMPRESA_NUEVA,pCODCLIENTE_NUEVO)=0 AND pCODTRANSACCION = 'CC' THEN -- VALIDA QUE EXISTA EL CLIENTE DESTINO EN CC(Sesion y traspaso)
  580. id_resultado:=12;
  581. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||' ( empresa:'||pCODEMPRESA_NUEVA||' , Cliente:'||pCODCLIENTE_NUEVO||' )';
  582. GOTO FINALIZAR_TRANSACCION;
  583. END IF;
  584. IF NVL(pVMENSUAL,0) <= 0 THEN
  585. id_resultado := 13; --Operación Fallida, El precio debe ser mayor a cero...
  586. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  587. GOTO FINALIZAR_TRANSACCION;
  588. END IF;
  589. IF pCODTRANSACCION = 'CP' THEN
  590. id_resultado:=VALIDA_CAMBIO_PRECIO(pCODEMPRESA,pInstalacion_NAF,pNoTransaccion_NAF,pCODCLIENTE,pTIPOSERVICIO,pPROXIMAFACTURA);
  591. IF nvl(id_resultado,0)>0 THEN
  592. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  593. GOTO FINALIZAR_TRANSACCION;
  594. END IF;
  595. END IF;
  596. IF pCODTRANSACCION IN ('A','U','D','TU','TUR','TR','T','CAP','TD','TDR','UR','DR','RA','CP','REA') THEN
  597. OPEN cur_grupo_cli;
  598. FETCH cur_grupo_cli into v_grupo;
  599. CLOSE cur_grupo_cli;
  600. SELECT NVL(MAX(TIPOPRODUCTO),0)
  601. INTO V_PRODUCTO_CONTABLE
  602. from sso_fcta
  603. where codempresa=pCODEMPRESA
  604. and tipocliente=v_grupo
  605. and codproducto=pCODPRODUCTO;
  606. IF nvl(V_PRODUCTO_CONTABLE,0)=0 THEN
  607. id_resultado := 21;
  608. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  609. GOTO FINALIZAR_TRANSACCION;
  610. END IF;
  611. END IF;
  612. IF pCODTRANSACCION = 'AB' THEN
  613. UPDATE SSO_FDIN SET ID_BUNDLE = PID_BUNDLE
  614. WHERE CODEMPRESA=pCODEMPRESA
  615. AND CODCLIENTE=PCODCLIENTE
  616. AND INSTALACION=pINSTALACION_NAF
  617. AND NOTRANSACCION=pNOTRANSACCION_NAF
  618. AND TIPOSERVICIO='ENL'
  619. AND ACTIVO='S';
  620. id_resultado := 0;
  621. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  622. REGISTRO_DE_RESPUESTA(id_resultado,Desc_resultado,v_Correlativo_hist);
  623. COMMIT;
  624. GOTO FINALIZAR_TRANSACCION;
  625. END IF;
  626. -- Busca el codigo del ancho de banda basada en la descripcion del ancho de banda
  627. v_codanchobanda:=OBTENER_CODANCHOBANDA(pCODEMPRESA,pCODPRODUCTO,pANCHO_BANDA);
  628. --pPROXIMAFACTURA:=SYSDATE; -- ESTO ES SOLO PARA LA DEMO
  629. IF pCODTRANSACCION = 'A' THEN
  630. -- CUANDO SE IMPLEMENTE LOS DIAS DE GRACIA SOLO SE DEBE CAMBIAR LOS DIAS POR EL '0'
  631. V_FECHA_PROXIMAF:=VALIDA_DIAS_GRACIA(pCODEMPRESA,pPROXIMAFACTURA,6);
  632. pfecha_ini_fac:=V_FECHA_PROXIMAF;
  633. --IF TO_CHAR(V_FECHA_PROXIMAF,'MMYYYY')!=TO_CHAR(pPROXIMAFACTURA,'MMYYYY') THEN -- CAMBIO DE MES CON LOS 6 DIAS DE GRACIA
  634. IF TO_CHAR(V_FECHA_PROXIMAF,'DD')='01' THEN
  635. --dfecha_facturacion:=last_Day(V_FECHA_PROXIMAF)+1;
  636. dfecha_facturacion:=V_FECHA_PROXIMAF;
  637. ELSE
  638. dfecha_facturacion:=last_Day(V_FECHA_PROXIMAF)+1;
  639. END IF;
  640. --END IF;
  641. ELSE -- ES UNA TRANSACCION POSTVENTA
  642. V_FECHA_PROXIMAF:=pPROXIMAFACTURA;
  643. --pfecha_ini_fac:=V_FECHA_PROXIMAF;
  644. pfecha_ini_fac:=null;
  645. --agregado para validar diferencial con nuevo procedimiento
  646. pFechaProp:=pPROXIMAFACTURA;
  647. IF TO_CHAR(V_FECHA_PROXIMAF,'DD')='01' THEN
  648. dfecha_facturacion:=V_FECHA_PROXIMAF;
  649. ELSE
  650. dfecha_facturacion:=last_Day(V_FECHA_PROXIMAF)+1;
  651. END IF;
  652. OPEN CUR_FPROXIMA_FAC;
  653. FETCH CUR_FPROXIMA_FAC into V_FECHA_ACTUAL,v_descpricion_fact,V_ANCHO_BANDA, v_moneda_rea, v_precio_rea,pfecha_ini_fac;
  654. IF CUR_FPROXIMA_FAC%FOUND AND pCODTRANSACCION!='REA'THEN
  655. dfecha_facturacion := V_FECHA_ACTUAL;
  656. END IF;
  657. CLOSE CUR_FPROXIMA_FAC;
  658. v_descpricion_fact:=REPLACE(v_descpricion_fact,V_ANCHO_BANDA,pANCHO_BANDA);
  659. END IF;
  660. id_resultado := 0;
  661. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  662. -- esta funcion regresa el monto con su respectivo impuesto si el cliente no es exento de impuesto.
  663. v_monto_mensual:=VALIDA_EXENTO_IMP(pCODEMPRESA,pCODCLIENTE,'IV',pVMENSUAL);
  664. v_monto_mensual_ins:=VALIDA_EXENTO_IMP(pCODEMPRESA,pCODCLIENTE,'IV',pVINSTALACION);
  665. IF pAplicaDesc='0' THEN --Se contruye la descripcion
  666. IF TRIM(pANCHO_BANDA)='0' THEN
  667. v_descpricion_fact:='('||pINSTALACION_NAF||') '||', '||pDESCRIPCION||', '||pPUNTO_INICIO;
  668. ELSE
  669. v_descpricion_fact:='('||pINSTALACION_NAF||') '||pANCHO_BANDA||', '||pDESCRIPCION||', '||pPUNTO_INICIO;
  670. END IF;
  671. v_descpricion_fact:=replace(v_descpricion_fact,',,',','); -- se lequitan dos comas juntas cuando vienen
  672. ELSE -- se pone la descripcion que digitaron en Siebel
  673. v_descpricion_fact:=pDESCRIPCION;
  674. END IF;
  675. -- A=ALTA, y no es Hijo
  676. IF pCODTRANSACCION = 'A' AND ( pSPLIT !='H' ) THEN
  677. OPEN cur_cli;
  678. FETCH cur_cli into vCliente;
  679. CLOSE cur_cli;
  680. IF vCliente = pCODCLIENTE THEN -- SI EXISTE EL CLIENTE
  681. OPEN CUR_ENL;
  682. FETCH CUR_ENL into venlace;
  683. CLOSE CUR_ENL;
  684. IF (nvl(venlace,0)=0) THEN -- El enlace no existe por lo tanto se procede a la creacion del mismo.
  685. pNOTRANSACCION_NAF:=SIGUENTE_CORRELATIVO(1,'NOTRANSACCION');
  686. -- se comentariza porque al principio aqui se generaba el correlativo, ahora ya viene en el registro
  687. -- pINSTALACION_NAF:=SIGUENTE_CORRELATIVO(1,'INSTALACION');
  688. BEGIN
  689. INSERT INTO SSO_FDIN
  690. (CODEMPRESA,CODCLIENTE,CONTRATO,ANEXO,INSTALACION,NOTRANSACCION,TIPOSERVICIO,GRUPOFACTURA,CODTRANSACCION,
  691. CODMONEDA,DESCRIPCION,CANTIDAD,VINSTALACION,VMENSUAL,FECHA,PROXIMAFACTURA,USUARIO_INGRESO,
  692. FECHA_INGRESO,CODPRODUCTO,CODANCHOBANDA,CENTRO,BODEGA,ANCHO_BANDA,GEOGRAFIA_VENTA,GEOGRAFIA_PUNTO_INI,
  693. GEOGRAFIA_PUNTO_FIN,ACTIVO,PUNTO_INICIO,PUNTO_FINAL,PAIS_INICIAL,PAIS_FINAL,PERIODO_INICIO,ORDEN,
  694. PRODUCTO,CICLOFACTURACION,INSTALACION_SIEBEL,NOTRANSACCION_SIEBEL,ES_SPLIT,Id_BUNDLE,fecha_ini_fac)
  695. VALUES(pCODEMPRESA,pCODCLIENTE,pCONTRATO,pANEXO,pINSTALACION_NAF,pNOTRANSACCION_NAF,pTIPOSERVICIO,1,pCODTRANSACCION,
  696. pCODMONEDA,v_descpricion_fact,pCANTIDAD,v_monto_mensual_ins,v_monto_mensual,pFECHA,dfecha_facturacion,pUSUARIO_INGRESO,
  697. pFECHA_INGRESO,pCODPRODUCTO,v_codanchobanda,pCENTRO,pBODEGA,substr(pANCHO_BANDA,1,20),pGEOGRAFIA_VENTA,pGEOGRAFIA_PUNTO_INI,
  698. pGEOGRAFIA_PUNTO_FIN,pACTIVO,pPUNTO_INICIO,pPUNTO_FINAL,pPAIS_INICIAL,pPAIS_FINAL,pPERIODO_INICIO,pINSTALACION_NAF,
  699. /*pProducto*/V_PRODUCTO_CONTABLE,'U',pINSTALACION_SIEBEL,pNOTRANSACCION_SIEBEL,DECODE(pSplit,'H','S','P','S',pSplit),pId_BUNDLE,pfecha_ini_fac);
  700. EXCEPTION
  701. WHEN DUP_VAL_ON_INDEX THEN
  702. id_resultado := 5; -- Registro duplicado en sso_fdin
  703. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  704. WHEN OTHERS THEN
  705. id_resultado := 6; -- Operación Fallida, Error al insertar en SSO_FDIN
  706. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||SQLERRM;
  707. END;
  708. IF TO_CHAR(V_FECHA_PROXIMAF,'DD')>1 THEN -- SE INSERTA EL PROPORCIONAL
  709. -- La cantidad de dias proporcionales
  710. ndias_prop:=to_char(last_Day(pPROXIMAFACTURA),'DD')- TO_CHAR(pPROXIMAFACTURA,'DD') + 1;
  711. --nMonto_Prop:=v_monto_mensual/to_char(last_Day(pPROXIMAFACTURA),'DD') * ndias_prop;
  712. -- inserta el proporcional
  713. BEGIN
  714. INSERT INTO SSO_FDIN
  715. (CODEMPRESA,CODCLIENTE,CONTRATO,ANEXO,INSTALACION,NOTRANSACCION,TIPOSERVICIO,GRUPOFACTURA,CODTRANSACCION,
  716. CODMONEDA,DESCRIPCION,CANTIDAD,VINSTALACION,VMENSUAL,FECHA,PROXIMAFACTURA,USUARIO_INGRESO,
  717. FECHA_INGRESO,CODPRODUCTO,CODANCHOBANDA,CENTRO,BODEGA,ANCHO_BANDA,GEOGRAFIA_VENTA,GEOGRAFIA_PUNTO_INI,
  718. GEOGRAFIA_PUNTO_FIN,ACTIVO,PUNTO_INICIO,PUNTO_FINAL,PAIS_INICIAL,PAIS_FINAL,PERIODO_INICIO,ORDEN,
  719. PRODUCTO,CICLOFACTURACION,INSTALACION_SIEBEL,NOTRANSACCION_SIEBEL,ES_SPLIT,Id_BUNDLE,fecha_ini_fac)
  720. VALUES(pCODEMPRESA,pCODCLIENTE,pCONTRATO,pANEXO,pINSTALACION_NAF,pNOTRANSACCION_NAF,'PRO',1,pCODTRANSACCION,
  721. pCODMONEDA,v_descpricion_fact,pCANTIDAD,v_monto_mensual_ins,v_monto_mensual,pFECHA,V_FECHA_PROXIMAF,pUSUARIO_INGRESO,
  722. pFECHA_INGRESO,pCODPRODUCTO,v_codanchobanda,pCENTRO,pBODEGA,substr(pANCHO_BANDA,1,20),pGEOGRAFIA_VENTA,pGEOGRAFIA_PUNTO_INI,
  723. pGEOGRAFIA_PUNTO_FIN,pACTIVO,pPUNTO_INICIO,pPUNTO_FINAL,pPAIS_INICIAL,pPAIS_FINAL,pPERIODO_INICIO,pINSTALACION_NAF,
  724. /*pProducto*/V_PRODUCTO_CONTABLE,'U',pINSTALACION_SIEBEL,pNOTRANSACCION_SIEBEL,DECODE(pSplit,'H','S','P','S',pSplit),pId_BUNDLE,pfecha_ini_fac);
  725. EXCEPTION
  726. WHEN DUP_VAL_ON_INDEX THEN
  727. id_resultado := 5; -- Registro duplicado en sso_fdin
  728. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  729. WHEN OTHERS THEN
  730. id_resultado := 6; -- Operación Fallida, Error al insertar en SSO_FDIN
  731. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||SQLERRM;
  732. END;
  733. END IF; --IF TO_CHAR(pPROXIMAFACTURA,'DD')>1 THEN
  734. IF NVL(pVINSTALACION,0) > 0 THEN
  735. pkg_fact_naf_sol.GENERA_COBRO_INS(pCODEMPRESA,pCODCLIENTE,pINSTALACION_NAF,pNOTRANSACCION_NAF,pTIPOSERVICIO,v_monto_mensual_ins, pIdSolucion);
  736. END IF;
  737. --ASIGNAR_GRUPOFAC(pCODEMPRESA, pCODCLIENTE , pUSUARIO_INGRESO);
  738. IF NVL(id_resultado,-1) = 0 THEN
  739. --REGISTRO_DE_RESPUESTA(id_resultado,Desc_resultado,v_Correlativo_hist);
  740. REGISTRO_DE_RESPUESTA(id_resultado,Desc_resultado||' ( FECHA INST:'||pFecha_ini_fac||')',v_Correlativo_hist);
  741. COMMIT;
  742. END IF;
  743. ELSE --(nvl(venlace,0)=0) THEN
  744. id_resultado:=8;
  745. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  746. END IF;--IF (nvl(venlace,0)=0) THEN
  747. ELSE
  748. id_resultado:=4;
  749. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  750. END IF;--IF vCliente = pCODCLIENTE THEN
  751. END IF; -- pCODTRANSACCION = 'A' AND ( pSPLIT !='H' ) THEN
  752. IF ( NVL(pSPLIT,'X') ='H') AND (pCODTRANSACCION IN ('A')) THEN -- Si trae H es parte de un split y ademas es un hijo
  753. BEGIN
  754. INSERT INTO SSO_FDIN
  755. (CODEMPRESA,CODCLIENTE,CONTRATO,ANEXO,INSTALACION,NOTRANSACCION,TIPOSERVICIO,GRUPOFACTURA,CODTRANSACCION,
  756. CODMONEDA,DESCRIPCION,CANTIDAD,VINSTALACION,VMENSUAL,FECHA,PROXIMAFACTURA,USUARIO_INGRESO,
  757. FECHA_INGRESO,CODPRODUCTO,CODANCHOBANDA,CENTRO,BODEGA,ANCHO_BANDA,GEOGRAFIA_VENTA,GEOGRAFIA_PUNTO_INI,
  758. GEOGRAFIA_PUNTO_FIN,ACTIVO,PUNTO_INICIO,PUNTO_FINAL,PAIS_INICIAL,PAIS_FINAL,PERIODO_INICIO,ORDEN,
  759. PRODUCTO,CICLOFACTURACION,INSTALACION_SIEBEL,NOTRANSACCION_SIEBEL,CODEMPRESA_PADRE,CODCLIENTE_PADRE,
  760. ES_SPLIT,Id_BUNDLE,fecha_ini_fac)
  761. VALUES(pCODEMPRESA,pCODCLIENTE,pCONTRATO,pANEXO,pINSTALACION_PADRE,pNOTRANSACCION_PADRE,pTIPOSERVICIO,1,pCODTRANSACCION,
  762. pCODMONEDA,v_descpricion_fact,pCANTIDAD,v_monto_mensual_ins,v_monto_mensual,pFECHA,dfecha_facturacion,pUSUARIO_INGRESO,
  763. pFECHA_INGRESO,pCODPRODUCTO,v_codanchobanda,pCENTRO,pBODEGA,substr(pANCHO_BANDA,1,20),pGEOGRAFIA_VENTA,pGEOGRAFIA_PUNTO_INI,
  764. pGEOGRAFIA_PUNTO_FIN,pACTIVO,pPUNTO_INICIO,pPUNTO_FINAL,pPAIS_INICIAL,pPAIS_FINAL,pPERIODO_INICIO,pINSTALACION_PADRE,
  765. /*pProducto*/V_PRODUCTO_CONTABLE,'U',pINSTALACION_SIEBEL,pNOTRANSACCION_SIEBEL,pCODEMPRESA_PADRE,pCODCLIENTE_PADRE,
  766. DECODE(pSplit,'H','S','P','S',pSplit),pId_BUNDLE,pfecha_ini_fac);
  767. EXCEPTION
  768. WHEN DUP_VAL_ON_INDEX THEN
  769. id_resultado := 5; -- Registro duplicado en sso_fdin
  770. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  771. WHEN OTHERS THEN
  772. id_resultado := 6; -- Operación Fallida, Error al insertar en SSO_FDIN
  773. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||SQLERRM;
  774. END;
  775. IF TO_CHAR(V_FECHA_PROXIMAF,'DD')>1 THEN -- SE INSERTA EL PROPORCIONAL
  776. -- La cantidad de dias proporcionales
  777. ndias_prop:=to_char(last_Day(pPROXIMAFACTURA),'DD')- TO_CHAR(pPROXIMAFACTURA,'DD') + 1;
  778. --nMonto_Prop:=v_monto_mensual/to_char(last_Day(pPROXIMAFACTURA),'DD') * ndias_prop;
  779. -- inserta el proporcional
  780. BEGIN
  781. INSERT INTO SSO_FDIN
  782. (CODEMPRESA,CODCLIENTE,CONTRATO,ANEXO,INSTALACION,NOTRANSACCION,TIPOSERVICIO,GRUPOFACTURA,CODTRANSACCION,
  783. CODMONEDA,DESCRIPCION,CANTIDAD,VINSTALACION,VMENSUAL,FECHA,PROXIMAFACTURA,USUARIO_INGRESO,
  784. FECHA_INGRESO,CODPRODUCTO,CODANCHOBANDA,CENTRO,BODEGA,ANCHO_BANDA,GEOGRAFIA_VENTA,GEOGRAFIA_PUNTO_INI,
  785. GEOGRAFIA_PUNTO_FIN,ACTIVO,PUNTO_INICIO,PUNTO_FINAL,PAIS_INICIAL,PAIS_FINAL,PERIODO_INICIO,ORDEN,
  786. PRODUCTO,CICLOFACTURACION,INSTALACION_SIEBEL,NOTRANSACCION_SIEBEL,CODEMPRESA_PADRE,CODCLIENTE_PADRE,
  787. ES_SPLIT,Id_BUNDLE,fecha_ini_fac)
  788. VALUES(pCODEMPRESA,pCODCLIENTE,pCONTRATO,pANEXO,pINSTALACION_PADRE,pNOTRANSACCION_PADRE,'PRO',1,pCODTRANSACCION,
  789. pCODMONEDA,v_descpricion_fact,pCANTIDAD,v_monto_mensual_ins,v_monto_mensual,pFECHA,V_FECHA_PROXIMAF,pUSUARIO_INGRESO,
  790. pFECHA_INGRESO,pCODPRODUCTO,v_codanchobanda,pCENTRO,pBODEGA,substr(pANCHO_BANDA,1,20),pGEOGRAFIA_VENTA,pGEOGRAFIA_PUNTO_INI,
  791. pGEOGRAFIA_PUNTO_FIN,pACTIVO,pPUNTO_INICIO,pPUNTO_FINAL,pPAIS_INICIAL,pPAIS_FINAL,pPERIODO_INICIO,pINSTALACION_PADRE,
  792. /*pProducto*/V_PRODUCTO_CONTABLE,'U',pINSTALACION_SIEBEL,pNOTRANSACCION_SIEBEL,pCODEMPRESA_PADRE,pCODCLIENTE_PADRE,
  793. DECODE(pSplit,'H','S','P','S',pSplit),pId_BUNDLE,pfecha_ini_fac);
  794. EXCEPTION
  795. WHEN DUP_VAL_ON_INDEX THEN
  796. id_resultado := 5; -- Registro duplicado en sso_fdin
  797. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  798. WHEN OTHERS THEN
  799. id_resultado := 6; -- Operación Fallida, Error al insertar en SSO_FDIN
  800. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||SQLERRM;
  801. END;
  802. END IF;
  803. IF NVL(pVINSTALACION,0) > 0 THEN
  804. GENERA_COBRO_INS(pCODEMPRESA,pCODCLIENTE,pINSTALACION_PADRE,pNOTRANSACCION_PADRE,pTIPOSERVICIO,v_monto_mensual_ins);
  805. END IF;
  806. --ASIGNAR_GRUPOFAC(pCODEMPRESA, pCODCLIENTE , pUSUARIO_INGRESO);
  807. IF id_resultado=0 THEN
  808. --REGISTRO_DE_RESPUESTA(id_resultado,Desc_resultado,v_Correlativo_hist);
  809. REGISTRO_DE_RESPUESTA(id_resultado,Desc_resultado||' ( FECHA INST:'||pFecha_ini_fac||')',v_Correlativo_hist);
  810. COMMIT;
  811. END IF;
  812. END IF; --IF ( NVL(pSPLIT,'X') ='H') AND (pCODTRANSACCION IN ('A')) THEN -- Si trae H es parte de un split y ademas es un hijo
  813. IF pCODTRANSACCION = 'CC' THEN --CAMBIO DE CLIENTE
  814. NOTRANSACCION_BAJA:=pNOTRANSACCION_NAF;
  815. pNOTRANSACCION_NAF:=SIGUENTE_CORRELATIVO(pCODEMPRESA,'NOTRANSACCION');
  816. INSERT INTO SSO_FDIN(CODEMPRESA,CODCLIENTE,CONTRATO,ANEXO,INSTALACION,
  817. NOTRANSACCION,TIPOSERVICIO,GRUPOFACTURA,CODTRANSACCION,CODMONEDA,
  818. ORDEN,DESCRIPCION,CANTIDAD,VINSTALACION,NOCUOTAS,
  819. TOTALCUOTAS,VMENSUAL,VACUMULADO,TIPOFACTURACION,FECHA,
  820. FACTURA,PRODUCTO,COD_CATEGORIA,PROXIMAFACTURA,CICLOFACTURACION,
  821. PERIODICIDAD,USUARIO_INGRESO,FECHA_INGRESO,OBSERVACIONES,FINFACTURACION,
  822. CODPRODUCTO,CODANCHOBANDA,NO_FACTU,CENTRO,BODEGA,
  823. SUBCLIENTE,ANCHO_BANDA,GEOGRAFIA_VENTA,GEOGRAFIA_PUNTO_INI,GEOGRAFIA_PUNTO_FIN,
  824. GENERA_COMISION,NO_VENDEDOR,PRODUCTO_INI,PRODUCTO_FIN,ALTA_FACTURACION,FECHA_IMPRESION,
  825. PREFACTURADO,ACTIVO,FECHA_BAJA,PUNTO_INICIO,PUNTO_FINAL,
  826. PAIS_INICIAL,PAIS_FINAL,MOTIVO_BAJA,OBSERVACIONES_ADMINISTRATIVAS,OBSERVACIONES_TECNICAS,
  827. ENCARGADO_CARTERA,ENCARGADO_BAJA,PERIODO_INICIO,FECHA_INICIO_FACTURACION,FECHA_AUTORIZACION_FACTURACION,
  828. HAY_DIFERENCIAL,FECHA_PREAUTORIZACION,FECHA_AUTORIZA_BAJA,INSTALACION_SIEBEL,NOTRANSACCION_SIEBEL,
  829. CODCLIENTE_PADRE,CODEMPRESA_PADRE,ES_SPLIT,FECHA_ULTIMA_FAC,fecha_ini_fac)
  830. SELECT pCODEMPRESA_NUEVA,pCODCLIENTE_NUEVO,CONTRATO,ANEXO,INSTALACION,
  831. pNOTRANSACCION_NAF,TIPOSERVICIO,GRUPOFACTURA/*1*/,pCODTRANSACCION,CODMONEDA,
  832. ORDEN,DESCRIPCION,CANTIDAD,VINSTALACION,NOCUOTAS,
  833. TOTALCUOTAS,VMENSUAL,VACUMULADO,TIPOFACTURACION,SYSDATE,
  834. FACTURA,PRODUCTO,COD_CATEGORIA,PROXIMAFACTURA,CICLOFACTURACION,
  835. PERIODICIDAD,pUSUARIO_INGRESO,SYSDATE,OBSERVACIONES,FINFACTURACION,
  836. CODPRODUCTO,CODANCHOBANDA,NO_FACTU,CENTRO,BODEGA,
  837. SUBCLIENTE,ANCHO_BANDA,GEOGRAFIA_VENTA,GEOGRAFIA_PUNTO_INI,GEOGRAFIA_PUNTO_FIN,
  838. GENERA_COMISION,NO_VENDEDOR,PRODUCTO_INI,PRODUCTO_FIN,ALTA_FACTURACION,FECHA_IMPRESION,
  839. PREFACTURADO,ACTIVO,FECHA_BAJA,PUNTO_INICIO,PUNTO_FINAL,
  840. PAIS_INICIAL,PAIS_FINAL,MOTIVO_BAJA,OBSERVACIONES_ADMINISTRATIVAS,OBSERVACIONES_TECNICAS,
  841. ENCARGADO_CARTERA,ENCARGADO_BAJA,PERIODO_INICIO,FECHA_INICIO_FACTURACION,FECHA_AUTORIZACION_FACTURACION,
  842. HAY_DIFERENCIAL,FECHA_PREAUTORIZACION,FECHA_AUTORIZA_BAJA,pINSTALACION_SIEBEL,pNOTRANSACCION_SIEBEL,
  843. CODCLIENTE_PADRE,CODEMPRESA_PADRE,ES_SPLIT,FECHA_ULTIMA_FAC,fecha_ini_fac
  844. FROM SSO_FDIN
  845. WHERE codempresa=pCODEMPRESA
  846. AND codcliente=pCODCLIENTE
  847. AND instalacion=pINSTALACION_NAF
  848. --AND notransaccion=pNOTRANSACCION_NAF
  849. AND notransaccion=NOTRANSACCION_BAJA
  850. AND activo='S'
  851. AND tiposervicIo='ENL';
  852. IF id_resultado=0 THEN
  853. --ASIGNAR_GRUPOFAC(pCODEMPRESA_NUEVA, pCODCLIENTE_NUEVO, pUSUARIO_INGRESO);
  854. --COMMIT;
  855. REGISTRO_DE_RESPUESTA(id_resultado,Desc_resultado||'( FECHA INST:'||pFecha_ini_fac||')',v_Correlativo_hist);
  856. BAJA_DE_ENLACE(pCODEMPRESA,pCODCLIENTE,pINSTALACION_NAF,NOTRANSACCION_BAJA,'ENL','B'||pCODTRANSACCION,
  857. SYSDATE,'BAJA POR TRANSACCION: '||pCODTRANSACCION,pUSUARIO_INGRESO,id_resultado,Desc_resultado);
  858. END IF;
  859. END IF;
  860. IF pCODTRANSACCION IN ('U','D','TU','TUR','TR','T','CAP','TD','TDR','UR','DR','RA','CP','REA') THEN
  861. --U=UPGRADE, D=DOWNGRADE, TU=TRASLADO CON UPGRADE,TUR=TRASLADO CON UPGRADE Y RENOVACION
  862. --TR=TRASLADO CON RENOVACION, T=TRASALADO DE ENLACE, CAP=CAMBIO DE PRODUCTO
  863. --TD=TRASLADO CON DOWNGRADE, TDR=TRASLADO CON DOWNGRADE Y RENOVACION, UR=UPGRADE CON RENOVACION
  864. --DR=DOWNGRADE CON RENOVACION, RA='RENOVACION DE ANEXO', CP=CAMBIO DE PRECIO
  865. --REA=REACTIVACION DE ENLACE, AB=ALTA BUNDLE
  866. IF EXISTE_ENLACE_ACTIVO(pCODEMPRESA,pCODCLIENTE,pINSTALACION_NAF,pNOTRANSACCION_NAF,pCODTRANSACCION,vGrupo_Fac,V_PRODUCTO_CONTABLE) THEN
  867. NOTRANSACCION_BAJA:=pNOTRANSACCION_NAF;
  868. pNOTRANSACCION_NAF:=SIGUENTE_CORRELATIVO(pCODEMPRESA,'NOTRANSACCION');
  869. --Se agrega If para diferenciar las postventas de la reactivacion
  870. if pCODTRANSACCION !='REA' then
  871. DIFERENCIAL_ENVIO_AUTO(pCODEMPRESA, -- Codigo de la compañia
  872. pCODCLIENTE, -- Codigo del cliente
  873. pINSTALACION_NAF, -- numero de enlace
  874. NOTRANSACCION_BAJA, --numero de orden de trabajo del enlace
  875. v_monto_mensual, -- valor de la nueva transaccion sobre el enlace
  876. pCODMONEDA, -- moneda de la nueva transaccion del enlace
  877. V_diferencial, -- monto del diferencial
  878. pFechaProp, -- fecha nueva del proporcional
  879. pFechaEnlace);
  880. --pfecha_ini_fac:=dfecha_facturacion;
  881. --Asignamos la moneda a la nueva variable
  882. v_moneda_rea := pCODMONEDA;
  883. else
  884. v_monto_mensual := v_precio_rea;
  885. --pCODMONEDA := v_moneda_rea;
  886. pFechaEnlace :=dfecha_facturacion;
  887. IF TO_CHAR(V_FECHA_PROXIMAF,'DD')='01' THEN
  888. V_diferencial:=0;
  889. ELSE
  890. V_diferencial:=v_precio_rea;
  891. pFechaProp := V_FECHA_PROXIMAF;
  892. END IF;
  893. end if;
  894. IF pCODTRANSACCION IN ('DR','TDR','RA','TUR','UR','TR') THEN
  895. pfecha_ini_fac:=pFechaEnlace;
  896. END IF;
  897. IF pCODTRANSACCION IN ('TUR','UR','TR') AND nvl(V_diferencial,0) > 0 THEN
  898. pfecha_ini_fac:=pFechaProp;
  899. END IF;
  900. BEGIN
  901. INSERT
  902. INTO SSO_FDIN(CODEMPRESA,CODCLIENTE,CONTRATO,ANEXO,INSTALACION,NOTRANSACCION,TIPOSERVICIO,GRUPOFACTURA,CODTRANSACCION,
  903. CODMONEDA,DESCRIPCION,CANTIDAD,VINSTALACION,VMENSUAL,FECHA,PROXIMAFACTURA,USUARIO_INGRESO,
  904. FECHA_INGRESO,CODPRODUCTO,CODANCHOBANDA,CENTRO,BODEGA,ANCHO_BANDA,GEOGRAFIA_VENTA,GEOGRAFIA_PUNTO_INI,
  905. GEOGRAFIA_PUNTO_FIN,ACTIVO,PUNTO_INICIO,PUNTO_FINAL,PAIS_INICIAL,PAIS_FINAL,PERIODO_INICIO,ORDEN,
  906. PRODUCTO,CICLOFACTURACION,INSTALACION_SIEBEL,NOTRANSACCION_SIEBEL,Id_BUNDLE,fecha_ini_fac)
  907. VALUES( pCODEMPRESA,pCODCLIENTE,pCONTRATO,pANEXO,pINSTALACION_NAF,pNOTRANSACCION_NAF,pTIPOSERVICIO,vGrupo_Fac,pCODTRANSACCION,
  908. /*pCODMONEDA*/v_moneda_rea,v_descpricion_fact,pCANTIDAD,v_monto_mensual_ins,v_monto_mensual,pFECHA,pFechaEnlace/*dfecha_facturacion*/,pUSUARIO_INGRESO,
  909. pFECHA_INGRESO,pCODPRODUCTO,v_codanchobanda,pCENTRO,pBODEGA,substr(pANCHO_BANDA,1,20),pGEOGRAFIA_VENTA,pGEOGRAFIA_PUNTO_INI,
  910. pGEOGRAFIA_PUNTO_FIN,pACTIVO,pPUNTO_INICIO,pPUNTO_FINAL,pPAIS_INICIAL,pPAIS_FINAL,pPERIODO_INICIO,pINSTALACION_NAF,
  911. /*pProducto*/V_PRODUCTO_CONTABLE,'U',pINSTALACION_SIEBEL,pNOTRANSACCION_SIEBEL,pId_BUNDLE,pfecha_ini_fac);
  912. EXCEPTION
  913. WHEN DUP_VAL_ON_INDEX THEN
  914. id_resultado := 5; -- Registro duplicado en sso_fdin
  915. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  916. WHEN OTHERS THEN
  917. id_resultado := 6; -- Operación Fallida, Error al insertar en SSO_FDIN
  918. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||SQLERRM;
  919. END;
  920. IF id_resultado=0 THEN -- Si todo va bien se procede con la baja y proporcional cuando aplica
  921. /*V_diferencial:=DIFERENCIAL(pCODEMPRESA, -- Codigo de la compañia
  922. pCODCLIENTE, -- Codigo del cliente
  923. pINSTALACION_NAF, -- numero de Enlace
  924. NOTRANSACCION_BAJA, --numero de orden de trabajo del enlace
  925. v_monto_mensual, -- valor de la nueva transaccion sobre el enlace
  926. pCODMONEDA -- moneda de la nueva transaccion del enlace
  927. );
  928. */
  929. --IF ( TO_CHAR(V_FECHA_PROXIMAF,'DD')>1 and V_diferencial > 0 AND pCODTRANSACCION NOT IN('CP')) THEN -- SE INSERTA EL PROPORCIONAL
  930. IF ( nvl(V_diferencial,0) > 0 AND pCODTRANSACCION NOT IN('CP')) THEN -- SE INSERTA EL PROPORCIONAL
  931. -- La cantidad de dias proporcionales
  932. ndias_prop:=to_char(last_Day(pPROXIMAFACTURA),'DD')- TO_CHAR(pPROXIMAFACTURA,'DD') + 1;
  933. -- inserta el proporcional
  934. BEGIN
  935. INSERT INTO SSO_FDIN(CODEMPRESA,CODCLIENTE,CONTRATO,ANEXO,INSTALACION,NOTRANSACCION,TIPOSERVICIO,GRUPOFACTURA,CODTRANSACCION,
  936. CODMONEDA,DESCRIPCION,CANTIDAD,VINSTALACION,VMENSUAL,FECHA,PROXIMAFACTURA,USUARIO_INGRESO,
  937. FECHA_INGRESO,CODPRODUCTO,CODANCHOBANDA,CENTRO,BODEGA,ANCHO_BANDA,GEOGRAFIA_VENTA,GEOGRAFIA_PUNTO_INI,
  938. GEOGRAFIA_PUNTO_FIN,ACTIVO,PUNTO_INICIO,PUNTO_FINAL,PAIS_INICIAL,PAIS_FINAL,PERIODO_INICIO,ORDEN,
  939. PRODUCTO,CICLOFACTURACION,INSTALACION_SIEBEL,NOTRANSACCION_SIEBEL,CODEMPRESA_PADRE,CODCLIENTE_PADRE,fecha_ini_fac)
  940. VALUES(pCODEMPRESA,pCODCLIENTE,pCONTRATO,pANEXO,pINSTALACION_NAF,pNOTRANSACCION_NAF,'PRO',vGrupo_Fac,pCODTRANSACCION,
  941. /*pCODMONEDA*/v_moneda_rea,v_descpricion_fact,pCANTIDAD,v_monto_mensual_ins,V_diferencial,pFECHA,pFechaProp/*V_FECHA_PROXIMAF*/,pUSUARIO_INGRESO,
  942. pFECHA_INGRESO,pCODPRODUCTO,v_codanchobanda,pCENTRO,pBODEGA,substr(pANCHO_BANDA,1,20),pGEOGRAFIA_VENTA,pGEOGRAFIA_PUNTO_INI,
  943. pGEOGRAFIA_PUNTO_FIN,pACTIVO,pPUNTO_INICIO,pPUNTO_FINAL,pPAIS_INICIAL,pPAIS_FINAL,pPERIODO_INICIO,pINSTALACION_NAF,
  944. /*pProducto*/V_PRODUCTO_CONTABLE,'U',pINSTALACION_SIEBEL,pNOTRANSACCION_SIEBEL,pCODEMPRESA_PADRE,pCODCLIENTE_PADRE,pfecha_ini_fac);
  945. EXCEPTION
  946. WHEN DUP_VAL_ON_INDEX THEN
  947. id_resultado := 5; -- Registro duplicado en sso_fdin
  948. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||SQLERRM;
  949. WHEN OTHERS THEN
  950. id_resultado := 6; -- Operación Fallida, Error al insertar en SSO_FDIN
  951. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||SQLERRM;
  952. END;
  953. END IF;--IF TO_CHAR(pPROXIMAFACTURA,'DD')>1
  954. END IF; --IF id_resultado=0
  955. IF id_resultado=0 THEN
  956. -- EL COMMIT SE HACE EN LA BAJA SI ES EXITOSO.
  957. IF NVL(pVINSTALACION,0) > 0 THEN
  958. SELECT COUNT(*)
  959. INTO vEXISTE_INS_PENDIENTE_COBRO
  960. FROM SSO_FDIN
  961. WHERE CODEMPRESA =pCODEMPRESA
  962. AND CODCLIENTE=pCODCLIENTE
  963. AND INSTALACION=pINSTALACION_NAF
  964. AND NOTRANSACCION=NOTRANSACCION_BAJA
  965. AND TIPOSERVICIO='INS'
  966. AND NVL(VACUMULADO,0)<NVL(VINSTALACION,0)
  967. AND ACTIVO='S';
  968. IF pCODTRANSACCION='CP' AND NVL(vEXISTE_INS_PENDIENTE_COBRO,0)>0 THEN
  969. UPDATE SSO_FDIN
  970. SET FECHA_BAJA =SYSDATE,
  971. MOTIVO_BAJA ='BAJA POR TRANSACCION: '||pCODTRANSACCION,
  972. ENCARGADO_BAJA=pUSUARIO_INGRESO,
  973. --CODTRANSACCION=DECODE(pCODTRANSACCION,'B',CODTRANSACCION,pCODTRANSACCION),
  974. CODTRANSACCION='B'||pCODTRANSACCION,
  975. ACTIVO='N',
  976. FECHA_AUTORIZA_BAJA=SYSDATE
  977. WHERE CODEMPRESA =pCODEMPRESA
  978. AND CODCLIENTE=pCODCLIENTE
  979. AND INSTALACION=pINSTALACION_NAF
  980. AND NOTRANSACCION=NOTRANSACCION_BAJA
  981. AND TIPOSERVICIO='INS'
  982. AND NVL(VACUMULADO,0)<NVL(VINSTALACION,0)
  983. AND ACTIVO='S';
  984. GENERA_COBRO_INS(pCODEMPRESA,pCODCLIENTE,pINSTALACION_NAF,pNOTRANSACCION_NAF,pTIPOSERVICIO,v_monto_mensual_ins);
  985. ELSE
  986. GENERA_COBRO_INS(pCODEMPRESA,pCODCLIENTE,pINSTALACION_NAF,pNOTRANSACCION_NAF,pTIPOSERVICIO,v_monto_mensual_ins);
  987. END IF;
  988. END IF;
  989. REGISTRO_DE_RESPUESTA(id_resultado,Desc_resultado||'( FECHA INST:'||pFecha_ini_fac||')',v_Correlativo_hist);
  990. BAJA_DE_ENLACE(pCODEMPRESA,pCODCLIENTE,pINSTALACION_NAF,NOTRANSACCION_BAJA,'ENL','B'||pCODTRANSACCION,SYSDATE,
  991. 'BAJA POR TRANSACCION: '||pCODTRANSACCION,pUSUARIO_INGRESO,id_resultado,Desc_resultado);
  992. END IF;
  993. ELSE
  994. id_resultado := 7;
  995. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  996. --Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||' cia:'||pCODEMPRESA||' cli:'||pCODCLIENTE||' inst:'||pINSTALACION_NAF||' trans:'||pNOTRANSACCION_NAF||' tserv:'||pTIPOSERVICIO;
  997. END IF; --IF EXISTE_ENLACE_ACTIVO(pCODEMPRESA,pCODCLIENTE,pINSTALACION_NAF,pNOTRANSACCION_NAF)
  998. END IF; --pCODTRANSACCION = 'U' THEN
  999. <<FINALIZAR_TRANSACCION>>
  1000. if nvl(id_resultado,0)>0 then
  1001. rollback;
  1002. REGISTRO_DE_RESPUESTA(id_resultado,Desc_resultado,v_Correlativo_hist);
  1003. commit;
  1004. end if;
  1005. END; -- END DEL PROCEDIMIENTO
  1006. FUNCTION EXISTE_ENLACE_ACTIVO(pCODEMPRESA NUMBER,
  1007. pCODCLIENTE NUMBER,
  1008. pINSTALACION NUMBER,
  1009. pNOTRANSACCION NUMBER,
  1010. pCODTRANSACCION varchar2,
  1011. pGrupo_fac in out number,
  1012. pProducto in out number) RETURN BOOLEAN IS
  1013. tmp_instalacion sso_fdin.instalacion%type;
  1014. BEGIN
  1015. BEGIN
  1016. SELECT INSTALACION,grupofactura,producto
  1017. INTO tmp_instalacion,pGrupo_Fac,pproducto
  1018. from sso_fdin
  1019. WHERE CODEMPRESA=pCODEMPRESA
  1020. AND CODCLIENTE=pCODCLIENTE
  1021. AND INSTALACION=pINSTALACION
  1022. AND NOTRANSACCION=pNOTRANSACCION
  1023. AND ACTIVO=DECODE(pCODTRANSACCION,'REA','N','CB',activo,'S')
  1024. AND TIPOSERVICIO='ENL';
  1025. EXCEPTION
  1026. WHEN NO_DATA_FOUND THEN
  1027. return FALSE; -- EL ENLACE NO EXISTE
  1028. WHEN TOO_MANY_ROWS THEN
  1029. return TRUE; -- existe mas de un enlace.
  1030. END;
  1031. RETURN TRUE; -- SI EXISTE EL ENLACE
  1032. END;
  1033. FUNCTION VERIFICA_DET_ERROR(pCODEMPRESA NUMBER,
  1034. pCODCLIENTE NUMBER,
  1035. pINSTALACION NUMBER,
  1036. pNOTRANSACCION NUMBER,
  1037. pCODTRANSACCION varchar2,
  1038. pFECHA_BAJA DATE,
  1039. Desc_resultado IN OUT VARCHAR2) RETURN NUMBER IS
  1040. CURSOR CUR_FDIN IS
  1041. SELECT PROXIMAFACTURA,ACTIVO
  1042. FROM SSO_FDIN
  1043. WHERE CODEMPRESA=pCODEMPRESA
  1044. AND CODCLIENTE=pCODCLIENTE
  1045. AND INSTALACION=pINSTALACION
  1046. AND NOTRANSACCION=pNOTRANSACCION
  1047. AND TIPOSERVICIO='ENL'
  1048. AND ACTIVO='S';
  1049. VPROXIMA_fAC DATE;
  1050. vEstado varchar2(2);
  1051. CURSOR CUR_ENLACE IS
  1052. SELECT CODEMPRESA,CODCLIENTE
  1053. FROM SSO_FDIN
  1054. WHERE INSTALACION=pINSTALACION
  1055. AND NOTRANSACCION=pNOTRANSACCION
  1056. AND TIPOSERVICIO='ENL'
  1057. AND ACTIVO='S';
  1058. CURSOR CUR_ENLACE_notran IS
  1059. SELECT CODEMPRESA,CODCLIENTE,NOTRANSACCION
  1060. FROM SSO_FDIN
  1061. WHERE CODEMPRESA=pCODEMPRESA
  1062. AND INSTALACION=pINSTALACION
  1063. AND TIPOSERVICIO='ENL'
  1064. AND ACTIVO='S';
  1065. vEmpresa sso_fdin.codempresa%type:=0;
  1066. vcliente sso_fdin.codcliente%type:=0;
  1067. vnotran number:=0;
  1068. BEGIN
  1069. OPEN CUR_FDIN;
  1070. FETCH CUR_FDIN into VPROXIMA_fAC,vEstado;
  1071. IF CUR_FDIN%NOTFOUND THEN --NO SE ENCONTRO EL ENLACE
  1072. CLOSE CUR_FDIN;
  1073. OPEN CUR_ENLACE;
  1074. FETCH CUR_ENLACE into vEmpresa,vcliente;
  1075. CLOSE CUR_ENLACE;
  1076. IF NVL(vEmpresa,0)>0 AND NVL(vcliente,0)>0 AND (vcliente!=pCODCLIENTE OR vEmpresa!=pCODEMPRESA) THEN
  1077. Desc_resultado:=GET_MSG_DESCRIPTION(18)||vcliente; --La fecha de baja ingresada no es válida. Se recomienda colocar una fecha posterior a
  1078. return(18); -- la fecha debe ser MENOR
  1079. END IF;
  1080. OPEN CUR_ENLACE_notran;
  1081. FETCH CUR_ENLACE_notran into vEmpresa,vcliente,vnotran;
  1082. CLOSE CUR_ENLACE_notran;
  1083. --Desc_resultado:='RESULTADO:'||vEmpresa||'-'||vcliente||vnotran;
  1084. --RETURN(100);
  1085. IF vcliente=pCODCLIENTE and vEmpresa=pCODEMPRESA and vnotran <> pNOTRANSACCION and nvl(vnotran,0) >0 THEN
  1086. 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
  1087. return(19); -- la fecha debe ser MENOR
  1088. END IF;
  1089. Desc_resultado:=GET_MSG_DESCRIPTION(7);
  1090. return(7); -- ENLACES NO EXISTE
  1091. else -- si encontro el enlace
  1092. CLOSE CUR_FDIN;
  1093. 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
  1094. 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
  1095. return(17); -- la fecha debe ser MENOR
  1096. END IF;
  1097. END IF;
  1098. RETURN 0; -- SI EXISTE EL ENLACE
  1099. END;
  1100. PROCEDURE BAJA_DE_ENLACE(pCODEMPRESA NUMBER,
  1101. pCODCLIENTE NUMBER,
  1102. pINSTALACION NUMBER,
  1103. pNOTRANSACCION NUMBER,
  1104. pTIPOSERVICIO VARCHAR2,
  1105. pCODTRANSACCION VARCHAR2,
  1106. pFECHA_BAJA DATE,
  1107. pMOTIVO_BAJA VARCHAR2,
  1108. pENCARGADO_BAJA VARCHAR2,
  1109. id_resultado IN OUT NUMBER,
  1110. Desc_resultado IN OUT VARCHAR2) IS
  1111. vGrupo_Fac number;
  1112. v_Correlativo_hist number;
  1113. vEstado SSO_FDIN.ACTIVO%TYPE;
  1114. CURSOR CUR_estado IS
  1115. SELECT ACTIVO
  1116. FROM SSO_FDIN
  1117. WHERE CODEMPRESA=pCODEMPRESA
  1118. AND CODCLIENTE=pCODCLIENTE
  1119. AND INSTALACION=pINSTALACION
  1120. AND NOTRANSACCION=pNOTRANSACCION
  1121. AND TIPOSERVICIO='ENL'
  1122. AND ACTIVO='N';
  1123. V_PRODUCTO_CONTABLE number;
  1124. BEGIN
  1125. -- MEJORAS BAJA
  1126. IF pCODTRANSACCION = 'B' THEN
  1127. id_resultado := VERIFICA_DET_ERROR(pCODEMPRESA,pCODCLIENTE,pINSTALACION,pNOTRANSACCION,pCODTRANSACCION,pFECHA_BAJA,Desc_resultado);
  1128. IF NVL(id_resultado,0) > 0 THEN
  1129. GOTO FIN_TRANSACCION;
  1130. END IF;
  1131. END IF;
  1132. IF pCODTRANSACCION = 'CB' THEN
  1133. OPEN CUR_estado;
  1134. FETCH CUR_estado into vEstado;
  1135. IF CUR_estado%FOUND THEN --
  1136. CLOSE CUR_estado;
  1137. id_resultado := 20; --El enlace esta Inactivo debe hacer una reactivacion de enlace
  1138. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  1139. GOTO FIN_TRANSACCION;
  1140. END IF;
  1141. CLOSE CUR_estado;
  1142. END IF;
  1143. -- FIN DE MEJORAS BAJA
  1144. id_resultado := 0;
  1145. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  1146. IF EXISTE_ENLACE_ACTIVO(pCODEMPRESA,pCODCLIENTE,pINSTALACION,pNOTRANSACCION,pCODTRANSACCION,vGrupo_Fac,V_PRODUCTO_CONTABLE) or pCODTRANSACCION='BREA' THEN
  1147. IF pCODTRANSACCION = 'CB' THEN -- CANCELACION DE BAJA
  1148. UPDATE SSO_FDIN
  1149. SET FECHA_BAJA =NULL,
  1150. FECHA_AUTORIZA_BAJA=NULL,
  1151. MOTIVO_BAJA =NULL,
  1152. ENCARGADO_BAJA=NULL,
  1153. CODTRANSACCION=NVL(ultimo_codtransaccion,'CB'),
  1154. fecha_cancelacion_baja=SYSDATE
  1155. --ACTIVO=DECODE(pCODTRANSACCION,'B','S','N'),
  1156. WHERE CODEMPRESA =pCODEMPRESA
  1157. AND CODCLIENTE=pCODCLIENTE
  1158. AND INSTALACION=pINSTALACION
  1159. AND NOTRANSACCION=pNOTRANSACCION
  1160. AND TIPOSERVICIO=pTIPOSERVICIO
  1161. --AND TIPOSERVICIO='ENL'
  1162. AND CODTRANSACCION='B'
  1163. AND FECHA_BAJA IS NOT NULL;
  1164. --AND ACTIVO='S';
  1165. GOTO FIN_TRANSACCION;
  1166. END IF;
  1167. --- SI LLEGO AQUI ES PORQUE NO ES CANCELACION NI REACTIVACION, ES UNA BAJA
  1168. BEGIN
  1169. UPDATE SSO_FDIN
  1170. SET FECHA_BAJA =pFECHA_BAJA,
  1171. MOTIVO_BAJA =pMOTIVO_BAJA,
  1172. ENCARGADO_BAJA=pENCARGADO_BAJA,
  1173. CODTRANSACCION=pCODTRANSACCION,
  1174. ACTIVO=DECODE(pCODTRANSACCION,'B','S','N'),
  1175. FECHA_AUTORIZA_BAJA=DECODE(pCODTRANSACCION,'B',SYSDATE,NULL),
  1176. fecha_baja_programada=pFECHA_BAJA,
  1177. ultimo_codtransaccion=CODTRANSACCION
  1178. WHERE CODEMPRESA =pCODEMPRESA
  1179. AND CODCLIENTE=pCODCLIENTE
  1180. AND INSTALACION=pINSTALACION
  1181. AND NOTRANSACCION=pNOTRANSACCION
  1182. AND TIPOSERVICIO=pTIPOSERVICIO
  1183. --AND TIPOSERVICIO='ENL'
  1184. AND ACTIVO='S';
  1185. GOTO FIN_TRANSACCION;
  1186. END;
  1187. ELSE
  1188. id_resultado := 7;
  1189. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||'(cia:'||pCODEMPRESA||' cli:'||pCODCLIENTE||' inst:'||pINSTALACION||' trans:'||pNOTRANSACCION||' tserv:'||pTIPOSERVICIO||')';
  1190. --Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado)||'(ENL: '||pINSTALACION||' NOTRAN: '||pNOTRANSACCION||')';
  1191. GOTO FIN_TRANSACCION;
  1192. END IF;
  1193. <<FIN_TRANSACCION>>
  1194. if nvl(id_resultado,0)=0 AND pCODTRANSACCION NOT IN ('B','CB')then
  1195. --rollback;
  1196. --REGISTRO_DE_RESPUESTA(id_resultado,Desc_resultado,v_Correlativo_hist);
  1197. commit;
  1198. end if;
  1199. IF pCODTRANSACCION in ('B','CB') THEN
  1200. -- mejora bajas
  1201. IF pCODTRANSACCION='B' and nvl(id_resultado,0)=0 THEN
  1202. 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')||')'
  1203. into Desc_resultado
  1204. from sso_fdin
  1205. where codempresa=pCODEMPRESA
  1206. and instalacion=pINSTALACION
  1207. and notransaccion=pNOTRANSACCION
  1208. and codcliente=pCODCLIENTE
  1209. and tiposervicio='ENL';
  1210. END IF;
  1211. -- fin de mejora bajas
  1212. v_Correlativo_hist:=SEC_HIST_PARAM_FA.NEXTVAL;
  1213. BEGIN
  1214. INSERT INTO ARFA_HIST_PARAM
  1215. (Correlativo,CODEMPRESA,CODCLIENTE,TIPOSERVICIO,
  1216. CODTRANSACCION,INSTALACION_NAF,NOTRANSACCION_NAF,FECHA,
  1217. DESCRIPCION,id_resultado,Desc_resultado)
  1218. VALUES (v_Correlativo_hist,pCODEMPRESA,pCODCLIENTE,pTIPOSERVICIO,
  1219. pCODTRANSACCION,pINSTALACION,pNOTRANSACCION,pFECHA_BAJA,
  1220. pMOTIVO_BAJA,id_resultado,Desc_resultado);
  1221. EXCEPTION WHEN OTHERS THEN
  1222. NULL;
  1223. END;
  1224. COMMIT;
  1225. END IF;
  1226. END;
  1227. FUNCTION VALIDAR_ENLACE(pCODEMPRESA NUMBER, -- codigo de la empresa
  1228. pCODCLIENTE NUMBER, -- codigo del cliente
  1229. pINSTALACION NUMBER, -- condigo del enlace
  1230. pNOTRANSACCION NUMBER, -- codigo de la orden de trabajo(SR de siebel)
  1231. pTIPOSERVICIO VARCHAR2, -- ('ENL','INS','PRO')
  1232. pTIPO_VALIDACION NUMBER -- 1=Validar meses facturado y pagadas; 2=Facturas pendientes de pago
  1233. ) RETURN NUMBER IS
  1234. v_salida number;
  1235. v_Fecha date;
  1236. BEGIN
  1237. -- Selecciono la fecha de la ultima renovacion
  1238. SELECT max(fecha)
  1239. INTO v_Fecha
  1240. from sso_fdin
  1241. where instalacion=pINSTALACION
  1242. and codtransaccion like '%R%';
  1243. IF v_Fecha IS NULL THEN
  1244. select min(fecha)
  1245. INTO v_Fecha
  1246. from sso_fdin
  1247. where instalacion=pINSTALACION
  1248. and tiposervicio='ENL';
  1249. END IF;
  1250. IF pTIPO_VALIDACION = 1 THEN -- Cantidad de facturas pagadas de este enlace
  1251. SELECT COUNT(DISTINCT A.NO_FACTU)
  1252. INTO v_salida
  1253. FROM arfafe a, ARFAFL b, arccmd c
  1254. WHERE b.instalacion=pINSTALACION
  1255. AND a.no_cia=b.no_cia
  1256. AND a.no_factu=b.no_factu
  1257. AND A.serie_fisico!='PREF'
  1258. AND NVL(a.ind_anu_Dev,'X') !='A'
  1259. AND a.no_factu=c.no_docu
  1260. AND NVL(c.saldo,0) =0
  1261. AND a.fecha_Servicio>=v_Fecha
  1262. and a.tipo_servicio='ENL';
  1263. END IF;
  1264. IF pTIPO_VALIDACION = 2 THEN -- la cantidad de facturas pendientes de pago
  1265. SELECT COUNT(DISTINCT A.NO_FACTU)
  1266. INTO v_salida
  1267. FROM arfafe a, ARFAFL b, arccmd c
  1268. WHERE b.instalacion=pINSTALACION
  1269. AND a.no_cia=b.no_cia
  1270. AND a.no_factu=b.no_factu
  1271. AND A.serie_fisico!='PREF'
  1272. AND NVL(a.ind_anu_Dev,'X') !='A'
  1273. AND a.no_factu=c.no_docu
  1274. AND NVL(c.saldo,0) >0
  1275. AND a.tipo_servicio='ENL';
  1276. END IF;
  1277. RETURN(NVL(v_salida,0));
  1278. END;
  1279. PROCEDURE INFO_FACTURACION(pCODEMPRESA NUMBER,
  1280. pCODCLIENTE NUMBER,
  1281. pINSTALACION NUMBER,
  1282. pNOTRANSACCION NUMBER,
  1283. pPROXIMAFACTURA IN OUT DATE,
  1284. pVMENSUAL IN OUT NUMBER,
  1285. id_resultado IN OUT NUMBER,
  1286. Desc_resultado IN OUT VARCHAR2
  1287. ) IS
  1288. CURSOR cur_infofac is
  1289. select proximafactura,
  1290. vmensual
  1291. from sso_fdin
  1292. where codempresa=pCODEMPRESA
  1293. and codcliente=pCODCLIENTE
  1294. and instalacion=pINSTALACION
  1295. and notransaccion=pNOTRANSACCION
  1296. and tiposervicio='ENL';
  1297. BEGIN
  1298. id_resultado := 0;
  1299. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  1300. OPEN cur_infofac;
  1301. FETCH cur_infofac into pPROXIMAFACTURA,pVMENSUAL;
  1302. IF cur_infofac%NOTFOUND THEN
  1303. id_resultado := 7;
  1304. Desc_resultado:=GET_MSG_DESCRIPTION(id_resultado);
  1305. END IF;
  1306. CLOSE cur_infofac;
  1307. END;
  1308. FUNCTION VALIDA_EXENTO_IMP(pCODEMPRESA NUMBER,
  1309. pCODCLIENTE NUMBER,
  1310. PCLAVE VARCHAR2, --IV=Iva Venta , IC=Iva Compra
  1311. PMONTO NUMBER
  1312. ) RETURN NUMBER
  1313. IS
  1314. Vexento varchar2(1);
  1315. VPORC NUMBER;
  1316. cursor cur_cliente is
  1317. SELECT EXcENTO_IMP
  1318. FROM ARCCMC
  1319. WHERE NO_CIA=pCODEMPRESA
  1320. AND NO_CLIENTE=pCODCLIENTE
  1321. AND EXCENTO_IMP='N';
  1322. BEGIN
  1323. OPEN cur_cliente;
  1324. FETCH cur_cliente into Vexento;
  1325. IF cur_cliente%NOTFOUND THEN
  1326. CLOSE cur_cliente;
  1327. RETURN PMONTO;
  1328. END IF;
  1329. CLOSE cur_cliente;
  1330. BEGIN
  1331. select nvl(PORCENTAJE,0)/100
  1332. INTO VPORC
  1333. FROM arcghimp
  1334. WHERE NO_CIA=1
  1335. AND CLAVE='IV'
  1336. AND FEC_DESDE=(
  1337. select MAX(FEC_DESDE)
  1338. from arcghimp
  1339. WHERE NO_CIA=1
  1340. AND CLAVE='IV');
  1341. EXCEPTION WHEN NO_DATA_FOUND THEN
  1342. RETURN PMONTO;
  1343. END;
  1344. RETURN round((PMONTO + (PMONTO * VPORC)),2) ;
  1345. END;
  1346. FUNCTION VALIDA_DIAS_GRACIA(pcia number,
  1347. pfecha_ini date,
  1348. pDias_Gracia NUMBER
  1349. ) RETURN DATE IS
  1350. V_CONTADOR NUMBER:=0;
  1351. V_FECHA_CALCULADA DATE:=pfecha_ini;
  1352. CURSOR CUR_FERIADOS(PDIA DATE) IS
  1353. SELECT DIA
  1354. FROM FERIADOS
  1355. WHERE NO_CIA=Pcia
  1356. AND ANO=to_number(to_char(pdia,'yyyy'))
  1357. AND TO_CHAR(DIA,'DDMMYYYY')=to_char(pdia,'DDMMYYYY');
  1358. V_esferiado date;
  1359. BEGIN
  1360. WHILE V_CONTADOR < pDias_Gracia LOOP
  1361. IF TRIM(to_char(V_FECHA_CALCULADA,'DAY', 'NLS_DATE_LANGUAGE=SPANISH')) IN ('SÁBADO','DOMINGO') THEN
  1362. V_FECHA_CALCULADA := V_FECHA_CALCULADA + 1;
  1363. ELSE
  1364. OPEN CUR_FERIADOS(V_FECHA_CALCULADA);
  1365. FETCH CUR_FERIADOS into V_esferiado;
  1366. IF CUR_FERIADOS%NOTFOUND THEN
  1367. V_CONTADOR := V_CONTADOR + 1;
  1368. END IF;
  1369. CLOSE CUR_FERIADOS;
  1370. V_FECHA_CALCULADA := V_FECHA_CALCULADA + 1;
  1371. END IF;
  1372. END LOOP;
  1373. V_CONTADOR:=0;
  1374. WHILE V_CONTADOR = 0 LOOP
  1375. OPEN CUR_FERIADOS(V_FECHA_CALCULADA);
  1376. FETCH CUR_FERIADOS into V_esferiado;
  1377. IF CUR_FERIADOS%FOUND THEN
  1378. V_FECHA_CALCULADA := V_FECHA_CALCULADA + 1;
  1379. ELSE
  1380. V_CONTADOR:=1; -- SE SALE DEL CICLO
  1381. END IF;
  1382. CLOSE CUR_FERIADOS;
  1383. END LOOP;
  1384. IF TRIM(to_char(V_FECHA_CALCULADA,'DAY', 'NLS_DATE_LANGUAGE=SPANISH'))='SÁBADO' THEN
  1385. V_FECHA_CALCULADA := V_FECHA_CALCULADA + 2;
  1386. END IF;
  1387. RETURN V_FECHA_CALCULADA;
  1388. END;
  1389. END; -- PKG_FACT_NAF;
  1390. /