Advertisement
Guest User

Untitled

a guest
Oct 20th, 2016
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 77.37 KB | None | 0 0
  1. create or replace PROCEDURE GENERA_FACTURA
  2. IS
  3. /*******************************************************************
  4. FUNCION : GENERA_FACTURA
  5. AUTOR :
  6. FECHA :
  7. DESCRIPCION : Generacion de factura de predial
  8. PARAMETROS :
  9. Historia de Modificaciones
  10. Autor Fecha Descripcion
  11. ------------------------------------------
  12. CCH070 06-OCT-2010 Se agrega la asignacion del numero unico de factura
  13. cuando este ya este inicializado.
  14. ********************************************************************/
  15. -- Define modelo de facturacion
  16. sbModelo VARCHAR2(20) := 'CUOTA-ANUAL';
  17. -- Define si maneja concepto de cuota mensual
  18. sbMacoCume PARAOPER.ParaCova%TYPE := 'S';
  19. -- Cursor a periodos
  20. CURSOR cuPeriodo(sbPeriCodi PERIODO.PeriCodi%TYPE) IS
  21. SELECT * FROM Periodo
  22. WHERE PeriCodi = sbPeriCodi;
  23. -- Tabla de descuentos
  24. CURSOR cuTablLipa(sbTabla VARCHAR2, sbCodigo VARCHAR2, feFechRefe DATE, sbPrin VARCHAR2) IS
  25. SELECT TaliSecu Opcion, TaliFein FechInic,TaliFefi FechFina,TaliValo Valor, PaliTida TipoValo FROM TablLiqu,ParaLiqu
  26. WHERE PaliCodi = TaliPlco AND PaliIdco = TaliCoid AND
  27. PaliIdnv = TaliConv AND TaliPlco = sbTabla AND
  28. (((NVL(sbPrin,'.') = '.' OR sbPrin = '%') AND TaliCoal IS NULL) OR (sbPrin IS NOT NULL AND INSTR(sbPrin,TaliCoal) != 0)) AND
  29. TaliCodi = sbCodigo AND feFechRefe BETWEEN TaliFein AND TaliFefi
  30. ORDER BY TaliFein;
  31. -- Cursor a tipo de documento y numerador asociado
  32. CURSOR cuTipoDocu(sbTidoEmpr TIPODOCU.TidoEmpr%TYPE,
  33. sbTidoTido TIPODOCU.TidoTido%TYPE) IS
  34. SELECT * FROM TipoDocu,Numerado
  35. WHERE TidoEmpr = sbTidoEmpr AND TidoTido = sbTidoTido AND
  36. NumeCodi = TidoNume;
  37. -- Cursor a lapso por fecha
  38. CURSOR cuLapso(feFecha LAPSO.LapsFein%TYPE) IS
  39. SELECT * FROM Lapso
  40. WHERE feFecha BETWEEN LapsFein AND LapsFefi AND LapsLaps != VAR.sbLapsCero;
  41. -- Cursor a conceptos de movimiento
  42. CURSOR cuConcMovi(sbComoCodi VARCHAR2) IS
  43. SELECT * FROM ConcMovi
  44. WHERE ComoCodi = sbComoCodi;
  45. -- Cursor a datos del proyecto de valorizacion obra predio
  46. CURSOR cuPiobSuim(sbTisi VARCHAR2, sbSuim VARCHAR2, sbPiob VARCHAR2) IS
  47. SELECT * FROM PiobSuim
  48. WHERE PosiTisi = sbTisi AND PosiSuim = sbSuim AND PosiPiob = sbPiob
  49. AND PosiVaco > 0 AND PosiCume > 0
  50. AND PosiEsta = pkgConstantes.sbEstaActi;
  51. -- Cursor para validar si el concepto es cuota inicial
  52. CURSOR cuComoCuin IS
  53. SELECT * FROM TimoOper
  54. WHERE TmopTimo = VAR.rgConcMovi.ComoTimo AND TmopOper = 'CUOTINIC';
  55. -- Cursor a datos del tipo de informacion
  56. CURSOR cuSuimTiin(sbEmpr VARCHAR2, sbTiim VARCHAR2, sbTisi VARCHAR2, sbSuim VARCHAR2, sbTerc VARCHAR2, sbPiob VARCHAR2,
  57. sbTiin VARCHAR2, sbPeri VARCHAR2, sbLaps VARCHAR2) IS
  58. SELECT * FROM SuimTiin
  59. WHERE SutiTiem = sbEmpr AND SutiTiim = sbTiim AND SutiTisi = sbTisi AND SutiSuim = sbSuim
  60. AND SutiPrin = sbPiob AND SutiTerc LIKE sbTerc AND SutiTiin = sbTiin
  61. AND SutiPeri = sbPeri AND SutiLaps = sbLaps;
  62. -- Cursor a datos del tipo de informacion
  63. CURSOR cuInteCorr(sbEmpr VARCHAR2, sbTiim VARCHAR2, sbTisi VARCHAR2, sbSuim VARCHAR2, sbTerc VARCHAR2, sbPiob VARCHAR2, sbComo VARCHAR2, feFeco DATE) IS
  64. SELECT
  65. NVL(SUM(DECODE(AjssSign,'+',DECODE(SIGN(AjssFech-feFeco),-1,AjssValo,0),0)),0) DebiAnte,
  66. NVL(SUM(DECODE(AjssSign,'-',DECODE(SIGN(AjssFech-feFeco),-1,AjssValo,0),0)),0) CredAnte,
  67. NVL(SUM(DECODE(AjssSign,'+',DECODE(SIGN(AjssFech-feFeco),-1,0,AjssValo),0)),0) DebiActu,
  68. NVL(SUM(DECODE(AjssSign,'-',DECODE(SIGN(AjssFech-feFeco),-1,0,AjssValo),0)),0) CredActu
  69. FROM AjusSasi
  70. WHERE AjssTiem = sbEmpr AND AjssTiim = sbTiim AND AjssTisi = sbTisi AND AjssSuim = sbSuim AND AjssPiob = sbPiob AND AjssTerc LIKE sbTerc AND AjssComo = sbComo;
  71. -- Cursor para validar si el concepto es cuota inicial
  72. CURSOR cuComoOper(sbOperacio VARCHAR2) IS
  73. SELECT * FROM TimoOper
  74. WHERE TmopTimo = VAR.rgConcMovi.ComoTimo AND TmopOper = sbOperacio;
  75. -- Variables
  76. biSe BINARY_INTEGER := 0;
  77. biIn BINARY_INTEGER := 0;
  78. biMo BINARY_INTEGER := 0;
  79. boExito BOOLEAN;
  80. boExiste BOOLEAN;
  81. boExisAfor BOOLEAN;
  82. boDeudAnte BOOLEAN;
  83. boCuotInic BOOLEAN;
  84. boCuotaMes BOOLEAN;
  85. sbCouaPeri VARCHAR2(2);
  86. sbMarcFact SUJEIMPU.SuimMafa%TYPE;
  87. sbContSate VARCHAR2(2);
  88. inOpciPago NUMBER(2);
  89. inSecuMovi NUMBER(9) := 0;
  90. sbTablLipa VARCHAR2(8);
  91. sbPeriDebe LAPSO.LapsPeri%TYPE;
  92. sbLapsDebe LAPSO.LapsLaps%TYPE;
  93. sbFechVeDe VARCHAR2(20);
  94. inEdadDeud NUMBER(4) := 0;
  95. sbNumeLofa VARCHAR2(4);
  96. sbTidiPago VARCHAR2(2);
  97. inValoCuot AJUSSASI.AjssValo%TYPE := 0.00;
  98. inIntePeri AJUSSASI.AjssValo%TYPE := 0.00;
  99. inInteVige AJUSSASI.AjssValo%TYPE := 0.00;
  100. inDescPeri AJUSSASI.AjssValo%TYPE := 0.00;
  101. inDescVige AJUSSASI.AjssValo%TYPE := 0.00;
  102. inTotaDocu SALDSUIM.SasiDefi%TYPE := 0.00;
  103. inTotaPago SALDSUIM.SasiDefi%TYPE := 0.00;
  104. inVapaVige SALDSUIM.SasiDefi%TYPE := 0.00;
  105. inValoPago AJUSSASI.AjssValo%TYPE := 0.00;
  106. inSaldDeud AJUSSASI.AjssValo%TYPE := 0.00;
  107. inBaseMens AJUSSASI.AjssValo%TYPE := 0.00;
  108. inNumeDocu DOLICUEN.DlcuNume%TYPE;
  109. inProxNume DOLICUEN.DlcuNume%TYPE;
  110. feFechPeri DOLICUEN.DlcuFech%TYPE;
  111. feFechProy DOLICUEN.DlcuFech%TYPE;
  112. feFechProD DOLICUEN.DlcuFech%TYPE;
  113. feFechDebe DOLICUEN.DlcuFech%TYPE;
  114. feFechVeDe DOLICUEN.DlcuFech%TYPE; --Fecha de vencimiento por default, parametrizado en MtilW
  115. sbNumeDocu TIPODOCU.TidoNume%TYPE;
  116. inSuimEdad SUJEIMPU.SuimEdad%TYPE;
  117. sbRequPrin VARCHAR2(2);
  118. sbFactAmor VARCHAR2(2);
  119. inNumeCuot NUMBER(6);
  120. inTotaMese NUMBER(6);
  121. sbPeriInic PERIODO.PeriCodi%TYPE;
  122. sbPeriFina PERIODO.PeriCodi%TYPE;
  123. sbPeriInDe LAPSO.LapsPeri%TYPE;
  124. sbLapsInDe LAPSO.LapsLaps%TYPE;
  125. sbPeriFiDe LAPSO.LapsPeri%TYPE;
  126. sbLapsFiDe LAPSO.LapsLaps%TYPE;
  127. sbDetaFact PARAOPER.ParaCova%TYPE;
  128. sbDeudOppa PARAOPER.ParaCova%TYPE;
  129. feMaxiFech PERIODO.PeriFein%TYPE;
  130. feFeinPeri PERIODO.PeriFein%TYPE;
  131. feFefiPeri PERIODO.PeriFefi%TYPE;
  132. tbMoviDoli VAR.tyMoviDoli;
  133. tbMoviTemp VAR.tyMoviDoli;
  134. tbDescTemp VAR.tyDescPrpa;
  135. inMODLAAAC MOVIDOLI.MODLAAAC%TYPE;
  136. inMODLVAPF MOVIDOLI.MODLVAPF%TYPE;
  137. sbTisuPred SUJEIMPU.SuimTisi%TYPE;
  138. -- Variables de proyeccion de deuda
  139. inSaldFina NUMBER := 0;
  140. inPlazo NUMBER(4);
  141. inTasaFina NUMBER;
  142. feFechIncr DATE;
  143. rgPeriodo cuPeriodo%ROWTYPE;
  144. rgTipoDocu cuTipoDocu%ROWTYPE;
  145. rgConcMovi cuConcMovi%ROWTYPE;
  146. rgLapso cuLapso%ROWTYPE;
  147. rgLapsDocu cuLapso%ROWTYPE;
  148. rgLapsFina cuLapso%ROWTYPE;
  149. rgDoliCuen DOLICUEN%ROWTYPE;
  150. rgMoviDoli MOVIDOLI%ROWTYPE;
  151. rgDescPrpa DESCPRPA%ROWTYPE;
  152. rgPiobSuim PIOBSUIM%ROWTYPE;
  153. rgTimoOper TIMOOPER%ROWTYPE;
  154. rgSuimTiin SUIMTIIN%ROWTYPE;
  155. rgInteCorr cuInteCorr%ROWTYPE;
  156. -- Variables temporales que seran recibidas desde el proceso en IGFA
  157. sbEmprCodi EMPRESA.EmprCodi%TYPE;
  158. sbTipoImpu TIPOIMPU.TiimTiim%TYPE;
  159. sbTipoSuje TIPOSUIM.TisiCodi%TYPE;
  160. sbSujeImpu SUJEIMPU.SuimSuim%TYPE;
  161. sbSuimInic SUJEIMPU.SuimSuim%TYPE;
  162. sbSuimFina SUJEIMPU.SuimSuim%TYPE;
  163. sbTercero TERCERO.TercCodi%TYPE;
  164. sbProyInve PRINOBRA.PiobCodi%TYPE;
  165. sbPeriMovi PERIODO.PeriCodi%TYPE;
  166. sbVigeDocu PERIODO.PeriCodi%TYPE;
  167. sbLapsMovi LAPSO.LapsLaps%TYPE;
  168. sbTidoFact TIPODOCU.TidoTido%TYPE;
  169. sbConcRefe CONCMOVI.ComoCodi%TYPE;
  170. sbTipoDocu TIPODOCU.TidoTido%TYPE;
  171. sbProyInte PRINOBRA.PiobCodi%TYPE;
  172. sbMarcFati SUJEIMPU.SuimMafa%TYPE;
  173. sbPeinCrfa PERIODO.PeriCodi%TYPE;
  174. sbLainCrfa LAPSO.LapsLaps%TYPE;
  175. sbPefiCrfa PERIODO.PeriCodi%TYPE;
  176. sbLafiCrfa LAPSO.LapsLaps%TYPE;
  177. inValoMovi AJUSSASI.AjssValo%TYPE;
  178. inNumeLote DOLICUEN.DlcuLote%TYPE;
  179. feFechDocu DATE;
  180. feFechMovi DATE;
  181. feFechVenc DATE;
  182. feFechCort DATE;
  183. feFechPago DATE;
  184. inNumeCrfa NUMBER(4);
  185. inNumeInic NUMBER(9);
  186. inNumeFina NUMBER(9);
  187.  
  188. sbObseDocu VARCHAR2(255);
  189. sbAbonGrav VARCHAR2(1);
  190. sbCancGrav VARCHAR2(1);
  191. sbDeudActu VARCHAR2(1);
  192. sbCargVafa VARCHAR2(1);
  193. -- Fin de bloque de variables temporales que son enviadas desde IGFA
  194. -- Tabla de opciones y factores de descuento
  195. TYPE ST_OPCIDESC IS RECORD
  196. (
  197. inOpciPago DESCPRPA.DeppOppa%TYPE,
  198. feFechInic DESCPRPA.DeppFech%TYPE,
  199. feFechFina DESCPRPA.DeppFech%TYPE,
  200. feFechVenc DESCPRPA.DeppFech%TYPE,
  201. inFactor DESCPRPA.DeppFact%TYPE
  202. );
  203. TYPE tyOpciDesc IS TABLE OF ST_OPCIDESC INDEX BY BINARY_INTEGER;
  204. tbOpciDesc tyOpciDesc;
  205. -- Tabla de periodos de liquidacion de descuentos y proyeccion de intereses
  206. TYPE ST_PERILIQU IS RECORD
  207. (
  208. sbPeriFisc LAPSO.LapsPeri%TYPE,
  209. sbLapsFisc LAPSO.LapsLaps%TYPE,
  210. feFechInic LAPSO.LapsFein%TYPE
  211. );
  212. TYPE tyPeriLiqu IS TABLE OF ST_PERILIQU INDEX BY BINARY_INTEGER;
  213. tbPeriLiqu tyPeriLiqu;
  214. -- Tabla de periodos facturados
  215. TYPE ST_PERIFACT IS RECORD
  216. (
  217. sbPeriFisc LAPSO.LapsPeri%TYPE,
  218. inValoFact AJUSSASI.AjssValo%TYPE
  219. );
  220. TYPE tyPeriFact IS TABLE OF ST_PERIFACT INDEX BY BINARY_INTEGER;
  221. tbPeriFact tyPeriFact;
  222. -- Procedimiento de actualizacion de movimientos
  223. PROCEDURE PRO_ACTUALIZA_MOVTO(sbPeriodo VARCHAR2,inComoSecu NUMBER)
  224. IS
  225. biMo BINARY_INTEGER := 0;
  226. biOp BINARY_INTEGER := 0;
  227. BEGIN
  228. --
  229. biMo := TO_NUMBER(sbPeriodo||TO_CHAR(inComoSecu));
  230. IF NOT (VAR.tbMoviDoli.EXISTS(biMo)) THEN
  231. VAR.tbMoviDoli(biMo).ModlDlem := rgMoviDoli.MODLDLEM;
  232. VAR.tbMoviDoli(biMo).ModlDltd := rgMoviDoli.MODLDLTD;
  233. VAR.tbMoviDoli(biMo).ModlDlnd := rgMoviDoli.MODLDLND;
  234. VAR.tbMoviDoli(biMo).ModlTiem := rgMoviDoli.MODLTIEM;
  235. VAR.tbMoviDoli(biMo).ModlTiim := rgMoviDoli.MODLTIIM;
  236. VAR.tbMoviDoli(biMo).ModlTisi := rgMoviDoli.MODLTISI;
  237. VAR.tbMoviDoli(biMo).ModlSuim := rgMoviDoli.MODLSUIM;
  238. VAR.tbMoviDoli(biMo).ModlTerc := rgMoviDoli.MODLTERC;
  239. VAR.tbMoviDoli(biMo).ModlPrin := rgMoviDoli.MODLPRIN;
  240. VAR.tbMoviDoli(biMo).ModlPeri := rgMoviDoli.MODLPERI;
  241. VAR.tbMoviDoli(biMo).ModlComo := rgMoviDoli.MODLCOMO;
  242. VAR.tbMoviDoli(biMo).ModlTali := NVL(rgMoviDoli.MODLTALI,0);
  243. VAR.tbMoviDoli(biMo).ModlVaba := NVL(rgMoviDoli.MODLVABA,0);
  244. VAR.tbMoviDoli(biMo).ModlVapf := rgMoviDoli.MODLVAPF;
  245. VAR.tbMoviDoli(biMo).ModlAaan := rgMoviDoli.MODLAAAN;
  246. VAR.tbMoviDoli(biMo).ModlAaac := rgMoviDoli.MODLAAAC;
  247. VAR.tbMoviDoli(biMo).ModlVaac := rgMoviDoli.MODLVAAC;
  248. VAR.tbMoviDoli(biMo).ModlVade := rgMoviDoli.MODLVADE;
  249. VAR.tbMoviDoli(biMo).ModlVaan := rgMoviDoli.MODLVAAN;
  250. VAR.tbMoviDoli(biMo).ModlVapa := rgMoviDoli.MODLVAPA;
  251. VAR.tbMoviDoli(biMo).ModlSald := rgMoviDoli.MODLSALD;
  252. ELSE
  253. VAR.tbMoviDoli(biMo).ModlVapf := VAR.tbMoviDoli(biMo).ModlVapf + rgMoviDoli.MODLVAPF;
  254. VAR.tbMoviDoli(biMo).ModlAaan := VAR.tbMoviDoli(biMo).ModlAaan + rgMoviDoli.MODLAAAN;
  255. VAR.tbMoviDoli(biMo).ModlAaac := VAR.tbMoviDoli(biMo).ModlAaac + rgMoviDoli.MODLAAAC;
  256. VAR.tbMoviDoli(biMo).ModlVaac := VAR.tbMoviDoli(biMo).ModlVaac + rgMoviDoli.MODLVAAC;
  257. VAR.tbMoviDoli(biMo).ModlVade := VAR.tbMoviDoli(biMo).ModlVade + rgMoviDoli.MODLVADE;
  258. VAR.tbMoviDoli(biMo).ModlVaan := VAR.tbMoviDoli(biMo).ModlVaan + rgMoviDoli.MODLVAAN;
  259. VAR.tbMoviDoli(biMo).ModlVapa := VAR.tbMoviDoli(biMo).ModlVapa + rgMoviDoli.MODLVAPA;
  260. VAR.tbMoviDoli(biMo).ModlSald := VAR.tbMoviDoli(biMo).ModlSald + rgMoviDoli.MODLSALD;
  261. END IF;
  262. -- Determinar variable de acumulados
  263. IF (sbDetaFact = 'D') THEN
  264. biMo := TO_NUMBER(sbPeriodo||TO_CHAR(inComoSecu));
  265. ELSE
  266. biMo := inComoSecu;
  267. END IF;
  268. IF NOT (tbMoviDoli.EXISTS(biMo)) THEN
  269. tbMoviDoli(biMo).ModlTiem := rgMoviDoli.MODLTIEM;
  270. tbMoviDoli(biMo).ModlTiim := rgMoviDoli.MODLTIIM;
  271. tbMoviDoli(biMo).ModlDlem := rgMoviDoli.MODLDLEM;
  272. tbMoviDoli(biMo).ModlDltd := rgMoviDoli.MODLDLTD;
  273. tbMoviDoli(biMo).ModlDlnd := rgMoviDoli.MODLDLND;
  274. tbMoviDoli(biMo).ModlTisi := rgMoviDoli.MODLTISI;
  275. tbMoviDoli(biMo).ModlSuim := rgMoviDoli.MODLSUIM;
  276. tbMoviDoli(biMo).ModlTerc := rgMoviDoli.MODLTERC;
  277. tbMoviDoli(biMo).ModlPrin := rgMoviDoli.MODLPRIN;
  278. tbMoviDoli(biMo).ModlPeri := rgMoviDoli.MODLPERI;
  279. tbMoviDoli(biMo).ModlComo := rgMoviDoli.MODLCOMO;
  280. tbMoviDoli(biMo).ModlTali := NVL(rgMoviDoli.MODLTALI,0);
  281. tbMoviDoli(biMo).ModlVaba := NVL(rgMoviDoli.MODLVABA,0);
  282. tbMoviDoli(biMo).ModlVapf := rgMoviDoli.MODLVAPF;
  283. tbMoviDoli(biMo).ModlAaan := rgMoviDoli.MODLAAAN;
  284. tbMoviDoli(biMo).ModlAaac := rgMoviDoli.MODLAAAC;
  285. tbMoviDoli(biMo).ModlVaac := rgMoviDoli.MODLVAAC;
  286. tbMoviDoli(biMo).ModlVade := rgMoviDoli.MODLVADE;
  287. tbMoviDoli(biMo).ModlVaan := rgMoviDoli.MODLVAAN;
  288. tbMoviDoli(biMo).ModlVapa := rgMoviDoli.MODLVAPA;
  289. tbMoviDoli(biMo).ModlSald := rgMoviDoli.MODLSALD;
  290. ELSE
  291. tbMoviDoli(biMo).ModlPeri := rgMoviDoli.MODLPERI;
  292. tbMoviDoli(biMo).ModlVapf := tbMoviDoli(biMo).ModlVapf + rgMoviDoli.MODLVAPF;
  293. tbMoviDoli(biMo).ModlAaan := tbMoviDoli(biMo).ModlAaan + rgMoviDoli.MODLAAAN;
  294. tbMoviDoli(biMo).ModlAaac := tbMoviDoli(biMo).ModlAaac + rgMoviDoli.MODLAAAC;
  295. tbMoviDoli(biMo).ModlVaac := tbMoviDoli(biMo).ModlVaac + rgMoviDoli.MODLVAAC;
  296. tbMoviDoli(biMo).ModlVade := tbMoviDoli(biMo).ModlVade + rgMoviDoli.MODLVADE;
  297. tbMoviDoli(biMo).ModlVaan := tbMoviDoli(biMo).ModlVaan + rgMoviDoli.MODLVAAN;
  298. tbMoviDoli(biMo).ModlVapa := tbMoviDoli(biMo).ModlVapa + rgMoviDoli.MODLVAPA;
  299. tbMoviDoli(biMo).ModlSald := tbMoviDoli(biMo).ModlSald + rgMoviDoli.MODLSALD;
  300. END IF;
  301. END;
  302. -- Procedimiento de actualizacion de movimientos
  303. PROCEDURE PRO_ACTUALIZA_DESTO(biSe BINARY_INTEGER,sbPeriodo VARCHAR2,inComoSecu NUMBER)
  304. IS
  305. biMo BINARY_INTEGER := 0;
  306. biOp BINARY_INTEGER := 0;
  307. boSalir BOOLEAN := FALSE;
  308. BEGIN
  309. --
  310. biOp := tbOpciDesc.FIRST;
  311. WHILE tbOpciDesc.EXISTS(biOp) AND NOT (boSalir) LOOP
  312. IF (biSe != 0) THEN
  313. biMo := TO_NUMBER(TO_CHAR(biSe)||sbPeriodo||TO_CHAR(inComoSecu));
  314. biOp := biSe;
  315. boSalir := TRUE;
  316. ELSE
  317. biMo := TO_NUMBER(TO_CHAR(biOp)||sbPeriodo||TO_CHAR(inComoSecu));
  318. END IF;
  319. IF NOT (VAR.tbDescPrpa.EXISTS(biMo)) THEN
  320. VAR.tbDescPrpa(biMo).DeppTiem := rgDescPrpa.DEPPTIEM;
  321. VAR.tbDescPrpa(biMo).DeppTiim := rgDescPrpa.DEPPTIIM;
  322. VAR.tbDescPrpa(biMo).DeppDlem := rgDescPrpa.DEPPDLEM;
  323. VAR.tbDescPrpa(biMo).DeppDltd := rgDescPrpa.DEPPDLTD;
  324. VAR.tbDescPrpa(biMo).DeppDlnd := rgDescPrpa.DEPPDLND;
  325. VAR.tbDescPrpa(biMo).DeppEsta := rgDescPrpa.DEPPESTA;
  326. VAR.tbDescPrpa(biMo).DeppTisi := rgDescPrpa.DEPPTISI;
  327. VAR.tbDescPrpa(biMo).DeppSuim := rgDescPrpa.DEPPSUIM;
  328. VAR.tbDescPrpa(biMo).DeppTerc := rgDescPrpa.DEPPTERC;
  329. VAR.tbDescPrpa(biMo).DeppPiob := rgDescPrpa.DEPPPIOB;
  330. VAR.tbDescPrpa(biMo).DeppComo := rgDescPrpa.DEPPCOMO;
  331. VAR.tbDescPrpa(biMo).DeppPeri := rgDescPrpa.DEPPPERI;
  332. VAR.tbDescPrpa(biMo).DeppLaps := rgDescPrpa.DEPPLAPS;
  333. VAR.tbDescPrpa(biMo).DeppVaba := rgDescPrpa.DEPPVABA;
  334. VAR.tbDescPrpa(biMo).DeppCant := rgDescPrpa.DEPPCANT;
  335. VAR.tbDescPrpa(biMo).DeppVaun := rgDescPrpa.DEPPVAUN;
  336. VAR.tbDescPrpa(biMo).DeppFech := tbOpciDesc(biOp).feFechVenc;
  337. VAR.tbDescPrpa(biMo).DeppOppa := biOp;
  338. VAR.tbDescPrpa(biMo).DeppFact := 0;
  339. VAR.tbDescPrpa(biMo).DeppDepe := 0;
  340. VAR.tbDescPrpa(biMo).DeppInpe := 0;
  341. VAR.tbDescPrpa(biMo).DeppDevi := 0;
  342. VAR.tbDescPrpa(biMo).DeppInvi := 0;
  343. VAR.tbDescPrpa(biMo).DeppVppe := 0;
  344. VAR.tbDescPrpa(biMo).DeppVpvi := 0;
  345. VAR.tbDescPrpa(biMo).DeppAtva := 0;
  346. VAR.tbDescPrpa(biMo).DeppAtvn := 0;
  347. VAR.tbDescPrpa(biMo).DeppVaan := 0;
  348. VAR.tbDescPrpa(biMo).DeppDean := 0;
  349. VAR.tbDescPrpa(biMo).DeppAjvv := 0;
  350. VAR.tbDescPrpa(biMo).DeppAjvp := 0;
  351. VAR.tbDescPrpa(biMo).DeppAjva := 0;
  352. END IF;
  353. -- Acumulados
  354. VAR.tbDescPrpa(biMo).DeppFact := rgDescPrpa.DeppFact;
  355. -- Total del Periodo
  356. VAR.tbDescPrpa(biMo).DeppDepe := VAR.tbDescPrpa(biMo).DeppDepe + rgDescPrpa.DEPPDEPE;
  357. VAR.tbDescPrpa(biMo).DeppInpe := VAR.tbDescPrpa(biMo).DeppInpe + rgDescPrpa.DEPPINPE;
  358. VAR.tbDescPrpa(biMo).DeppVppe := VAR.tbDescPrpa(biMo).DeppVppe + rgDescPrpa.DEPPVPPE;
  359. VAR.tbDescPrpa(biMo).DEPPATVA := VAR.tbDescPrpa(biMo).DEPPATVA + rgDescPrpa.DEPPATVA;
  360. VAR.tbDescPrpa(biMo).DEPPATVN := VAR.tbDescPrpa(biMo).DEPPATVN + rgDescPrpa.DEPPATVN;
  361. dbms_output.put_line('bimo='||bimo||' VAR.tbDescPrpa(biMo).DEPPATVA='||VAR.tbDescPrpa(biMo).DEPPATVA||' VAR.tbDescPrpa(biMo).DEPPATVN='||VAR.tbDescPrpa(biMo).DEPPATVN||' VAR.tbDescPrpa(biMo).DeppVaan='||VAR.tbDescPrpa(biMo).DeppVaan||' rgDescPrpa.DEPPVAAN='||rgDescPrpa.DEPPVAAN);
  362. -- Total de la Vigencia
  363. VAR.tbDescPrpa(biMo).DeppDevi := VAR.tbDescPrpa(biMo).DeppDevi + rgDescPrpa.DEPPDEVI;
  364. VAR.tbDescPrpa(biMo).DeppInvi := VAR.tbDescPrpa(biMo).DeppInvi + rgDescPrpa.DEPPINVI;
  365. VAR.tbDescPrpa(biMo).DeppVpvi := VAR.tbDescPrpa(biMo).DeppVpvi + rgDescPrpa.DEPPVPVI;
  366. -- Total Anticipo
  367. VAR.tbDescPrpa(biMo).DeppVaan := VAR.tbDescPrpa(biMo).DeppVaan + rgDescPrpa.DEPPVAAN;
  368. VAR.tbDescPrpa(biMo).DeppDean := VAR.tbDescPrpa(biMo).DeppDean + rgDescPrpa.DEPPDEAN;
  369. -- Valor de ajustes
  370. VAR.tbDescPrpa(biMo).DeppAjvv := VAR.tbDescPrpa(biMo).DeppAjvv + rgDescPrpa.DEPPAJVV;
  371. VAR.tbDescPrpa(biMo).DeppAjvp := VAR.tbDescPrpa(biMo).DeppAjvp + rgDescPrpa.DEPPAJVP;
  372. VAR.tbDescPrpa(biMo).DeppAjva := VAR.tbDescPrpa(biMo).DeppAjva + rgDescPrpa.DEPPAJVA;
  373. --
  374. biOp := tbOpciDesc.NEXT(biOp);
  375. END LOOP;
  376. END;
  377. BEGIN
  378. -- Variables de trabajo enviadas desde IGFA se guardan temporalmente
  379. sbEmprCodi := VAR.sbEmpresa;
  380. sbTipoImpu := VAR.sbTipoImpu;
  381. sbTipoSuje := VAR.sbTipoSuje;
  382. sbSujeImpu := VAR.sbSujeImpu;
  383. sbSuimInic := VAR.sbSuimInic;
  384. sbSuimFina := VAR.sbSuimFina;
  385. sbTercero := VAR.sbTercero;
  386. sbProyInve := VAR.sbProyInve;
  387. sbPeriMovi := VAR.sbPeriMovi;
  388. sbVigeDocu := VAR.sbVigeDocu;
  389. sbLapsMovi := VAR.sbLapsMovi;
  390. sbTidoFact := VAR.sbTidoFact;
  391. feFechDocu := VAR.feFechDocu;
  392. feFechMovi := VAR.feFechMovi;
  393. feFechVenc := VAR.feFechVenc;
  394. feFechCort := VAR.feFechCort;
  395. feFechPago := VAR.feFechPago;
  396. inValoMovi := VAR.inValoMovi;
  397. sbObseDocu := VAR.sbObseDocu;
  398. sbAbonGrav := VAR.sbAbonGrav;
  399. sbCancGrav := VAR.sbCancGrav;
  400. sbConcRefe := VAR.sbConcRefe;
  401. sbTipoDocu := VAR.sbTipoDocu;
  402. sbProyInte := VAR.sbProyInte;
  403. sbDeudActu := VAR.sbDeudActu;
  404. sbCargVafa := VAR.sbCargVafa;
  405. sbMarcFati := VAR.sbMarcFact;
  406. inNumeLote := VAR.inNumeLote;
  407. sbPeinCrfa := VAR.sbPeriInic;
  408. sbLainCrfa := VAR.sbLapsInic;
  409. sbPefiCrfa := VAR.sbPeriFina;
  410. sbLafiCrfa := VAR.sbLapsFina;
  411. inNumeCrfa := VAR.inNumeCuot;
  412. inNumeInic := VAR.inNumeInic;
  413. inNumeFina := VAR.inNumeFina;
  414. -- Validar tipos de movimiento debito o credito
  415. IF (VAR.sbTimoDebi IS NULL) THEN
  416. VAR.sbTimoDebi := funBuscPara('TIMOAJDB');
  417. END IF;
  418. IF (VAR.sbTimoCred IS NULL) THEN
  419. VAR.sbTimoCred := funBuscPara('TIMOAJCR');
  420. END IF;
  421. IF (VAR.sbEstaActi IS NULL) THEN
  422. VAR.sbEstaActi := funBuscPara('ESTAACTI');
  423. END IF;
  424. IF (VAR.sbEstaInac IS NULL) THEN
  425. VAR.sbEstaInac := funBuscPara('ESTAINAC');
  426. END IF;
  427. IF (VAR.sbCaraNulo IS NULL) THEN
  428. VAR.sbCaraNulo := funBuscPara('CARANULL');
  429. END IF;
  430. IF (VAR.sbLapsCero IS NULL) THEN
  431. VAR.sbLapsCero := funBuscPara('LAPSCERO');
  432. END IF;
  433. IF (VAR.sbDivision IS NULL) THEN
  434. VAR.sbDivision := funBuscPara('DIVIRENT');
  435. END IF;
  436. -- Si el tercero es porcentaje se debe redefinir el tercero a caracter nulo
  437. IF (VAR.sbTercero = '%') THEN
  438. VAR.sbTercero := VAR.sbCaraNulo;
  439. END IF;
  440. VAR.sbConcSade := funBuscPara('COMOSADE');
  441. sbTisuPred := funBuscPara('TISUPRED');
  442. sbNumeLofa := funBuscPara('NUMELOFA');
  443. sbDeudOppa := funBuscPara('DEUDOPPA');
  444. -- Busca Modelo de Liquidacion y Opciones de pago
  445. VAR.inLiquidac := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'MOLIDESC');
  446. sbContSate := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'CONTSATE');
  447. sbDetaFact := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'DETAFACT');
  448. inOpciPago := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'OPCIPAGO');
  449. sbTablLipa := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'TABLLIPA');
  450. VAR.sbFactSafa := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'FACTSAFA');
  451. sbRequPrin := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'REQUPRIN');
  452. sbTidiPago := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'TIDIPAGO');
  453. sbFactAmor := NVL(pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'FACTAMOR'),'N');
  454. -- Validar fechas y Recuperar la fecha de vencimiento configurada en MTIL
  455. VAR.feFechMovi := NVL(VAR.feFechMovi,TRUNC(SYSDATE));
  456. sbFechVeDe := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'FECHVENC');
  457. IF (sbFechVeDe IS NOT NULL) THEN
  458. feFechVeDe := TO_DATE(sbFechVeDe,'DD-MM-YYYY');
  459. ELSE
  460. feFechVeDe := NVL(VAR.feFechVenc,LAST_DAY(VAR.feFechMovi));
  461. END IF;
  462. feFechVeDe := NVL(feFechVeDe,LAST_DAY(VAR.feFechMovi));
  463. VAR.feFechVenc := NVL(VAR.feFechVenc,feFechVeDe);
  464. -- Evaluar los criterios de generacion por conceptos
  465. IF (NVL(VAR.sbConcRefe,'%') = '%') THEN
  466. IF (sbRequPrin = 'S') THEN
  467. IF (NVL(VAR.sbAbonGrav,'N') = 'S') THEN
  468. VAR.sbConcRefe := VAR.sbConcSade;
  469. ELSE
  470. VAR.sbConcRefe := NULL;
  471. END IF;
  472. ELSE
  473. VAR.sbConcRefe := '%';
  474. END IF;
  475. END IF;
  476. -- Carga Ambiemte de Liquidacion
  477. CARGA_CRITLIQU;
  478. -- Definir si maneja o no saldos por tercero
  479. VAR.sbSaldTerc := NVL(VAR.sbSaldTerc,sbContSate);
  480. -- Definir fecha de referencia
  481. VAR.feFechRefe := FECHINIPER(PERIOFECHA(VAR.feFechMovi));
  482. -- Define marca de facturacion
  483. sbMarcFact := 'SIN-FACTURA';
  484. -- Cargar las formulas y conceptos asociados al modelo de liquidacion de intereses de predial
  485. CARGA_LIQUIDAR;
  486. CARGA_TABLLIQU;
  487. -- Carga saldos de periodos cuando es factura por abono
  488. IF (VAR.sbPeriInic IS NOT NULL AND VAR.sbPeriFina IS NOT NULL AND NVL(VAR.inNumeCuot,0) >= 0) THEN
  489. CARGA_SALDOSPERIODOS(VAR.sbPeriInic,VAR.sbLapsInic,VAR.sbPeriFina,VAR.sbLapsFina);
  490. ELSE
  491. CARGA_SALDOS;
  492. END IF;
  493. dbms_output.put_line('saldos='||VAR.tbSaldos.COUNT);
  494. -- Validar si es una factura por periodos y/o cuotas o una factura por valor
  495. -- Si es una factura por periodos o por valor se recalculan los saldos
  496. IF (UPPER(sbTidiPago) = 'C' AND NVL(VAR.inValoMovi,0) != 0) THEN
  497. SALDFACT_CONCEPTO;
  498. ELSIF (NVL(VAR.inValoMovi,0) != 0 AND VAR.sbPeriInic IS NOT NULL AND VAR.sbPeriFina IS NOT NULL ) THEN
  499. SALDFACT_VALOR_PERIODO;
  500. ELSIF (NVL(VAR.inValoMovi,0) != 0) THEN
  501. SALDFACT_VALOR;
  502. ELSIF (VAR.sbPeriInic IS NOT NULL AND VAR.sbPeriFina IS NOT NULL AND NVL(VAR.inNumeCuot,0) >= 0) THEN
  503. SALDFACT_PERIODO;
  504. END IF;
  505. --
  506. CARGA_ESTABLEC;
  507. CARGA_AFOROS;
  508. CARGA_AFOROSUJETO;
  509. CARGA_NOVEDADES;
  510. CARGA_ULTIAFOR;
  511. CARGA_UNIDADLIQU;
  512. CARGA_UNIDLIQPER(VAR.feFechDocu);
  513. -- Iniciar arreglos de liquidacion
  514. INICIAR_ARREGLOS_LIQUIDAR;
  515. --
  516. VAR.feFechApli := VAR.feFechMovi;
  517. VAR.inTariLiqu := 0;
  518. VAR.inFactDesc := 0;
  519. VAR.inValoMovi := NVL(VAR.inValoMovi,0);
  520. VAR.inNumeCuot := NVL(VAR.inNumeCuot,0);
  521. -- Consultar opciones de descuento
  522. tbPeriLiqu.DELETE;
  523. tbOpciDesc.DELETE;
  524. feFeinPeri := FECHINPELI(VAR.feFechDocu);
  525. feFefiPeri := ADD_MONTHS(feFeinPeri,UNIDADLIQU-1);
  526. --Define opciones de pago si el contribuyente tiene deuda
  527. IF (sbDeudOppa = 'S') THEN
  528. IF (VAR.sbMiniPeri != PERIOFECHA(VAR.feFechDocu)) THEN
  529. inOpciPago := 1;
  530. VAR.feFechVenc := LAST_DAY(VAR.feFechMovi);
  531. VAR.feFechPago := LAST_DAY(VAR.feFechMovi);
  532. END IF;
  533. END IF;
  534. -- Si es factura por periodos, por valor o por cuotas se da una sola opcion de pago
  535. IF (VAR.sbPeriInic IS NOT NULL OR NVL(VAR.inValoMovi,0) > 0 OR NVL(VAR.inNumeCuot,0) > 0) THEN
  536. inOpciPago := 1;
  537. END IF;
  538. -- Se agrega VAR.feFechVenc = feFechVeDe para determinar si la fecha de
  539. -- vencimiento en MTIL es mayor o igual al criterio correspondiente
  540. IF ((VAR.sbPeriInic IS NULL) AND (NVL(VAR.inValoMovi,0) = 0) AND (NVL(VAR.inNumeCuot,0) = 0)) THEN
  541. FOR rgDe IN cuTablLipa(sbTablLipa, VAR.sbTipoImpu, VAR.feFechDocu, VAR.sbProyInve) LOOP
  542. IF (rgDe.FechFina >= VAR.feFechDocu) THEN
  543. IF (rgDe.Opcion = 0) THEN
  544. biIn := tbOpciDesc.COUNT + 1;
  545. ELSE
  546. biIn := rgDe.Opcion;
  547. END IF;
  548. --
  549. IF (biIn <= inOpciPago) THEN
  550. tbOpciDesc(biIn).feFechInic := rgDe.FechInic;
  551. tbOpciDesc(biIn).feFechFina := rgDe.FechFina;
  552. tbOpciDesc(biIn).feFechVenc := rgDe.FechFina;
  553. tbOpciDesc(biIn).inFactor := 0;
  554. tbOpciDesc(biIn).inOpciPago := biIn;
  555. IF (rgDe.TipoValo = 'F' AND rgDe.Valor IS NOT NULL) THEN
  556. tbOpciDesc(biIn).feFechVenc := LTRIM(RTRIM(rgDe.Valor));
  557. END IF;
  558. feMaxiFech := tbOpciDesc(biIn).feFechVenc;
  559. dbms_output.put_line('opciones de pago3='||biIn||' feFechVenc='||feFechVenc);
  560. END IF;
  561. END IF;
  562. END LOOP;
  563. END IF;
  564. IF (tbOpciDesc.COUNT = 0) THEN
  565. biIn := tbOpciDesc.COUNT + 1;
  566. tbOpciDesc(biIn).feFechInic := VAR.feFechMovi;
  567. tbOpciDesc(biIn).feFechFina := NVL(VAR.feFechVenc,LAST_DAY(VAR.feFechMovi));
  568. tbOpciDesc(biIn).feFechVenc := NVL(VAR.feFechVenc,LAST_DAY(VAR.feFechMovi));
  569. tbOpciDesc(biIn).inFactor := 0;
  570. IF (VAR.feFechVenc < VAR.feFechMovi) THEN
  571. tbOpciDesc(biIn).feFechFina := LAST_DAY(VAR.feFechMovi);
  572. tbOpciDesc(biIn).feFechVenc := LAST_DAY(VAR.feFechMovi);
  573. END IF;
  574. feMaxiFech := tbOpciDesc(biIn).feFechVenc;
  575. END IF;
  576. -- Validar que la fecha de vencimiento corresponda a la ultima fecha de vencimiento de las opciones de pago
  577. IF (VAR.feFechVenc != feMaxiFech) THEN
  578. VAR.feFechVenc := feMaxiFech;
  579. END IF;
  580. -- Validar que la fecha maxima de pago (sin recargos) no sea superior a la fecha de vencimiento
  581. IF (VAR.feFechPago > VAR.feFechVenc) THEN
  582. VAR.feFechPago := VAR.feFechVenc;
  583. END IF;
  584. -- Consultar tipo de documento de facturacion
  585. OPEN cuTipoDocu(VAR.sbEmpresa, VAR.sbTidoFact);
  586. FETCH cuTipoDocu INTO rgTipoDocu;
  587. CLOSE cuTipoDocu;
  588. -- Asigna Numerador
  589. sbNumeDocu := rgTipoDocu.TidoNume;
  590. inProxNume := rgTipoDocu.NumePrnu;
  591. IF (NVL(VAR.inNumeFact,0) <= 0) THEN
  592. VAR.inNumeFact := pkgNumerado.fun_ProximoNumero(sbNumeDocu,'C');
  593. END IF;
  594. -- Consultar lapso
  595. OPEN cuLapso(TRUNC(VAR.feFechDocu));
  596. FETCH cuLapso INTO rgLapsDocu;
  597. CLOSE cuLapso;
  598. -- Periodo de movimiento
  599. VAR.sbPeriMovi := rgLapsDocu.LapsPeri;
  600. VAR.sbLapsMovi := rgLapsDocu.LapsLaps;
  601. IF (VAR.sbVigeDocu IS NULL) THEN
  602. VAR.sbVigeDocu := VAR.sbPeriMovi;
  603. END IF;
  604. -- Periodo Inicio de deuda
  605. sbPeriInDe := VAR.rgSujeImpu.SuimPedd;
  606. sbLapsInDe := VAR.rgSujeImpu.SuimLadd;
  607. -- Lapso final de deuda
  608. OPEN cuLapso(feFefiPeri);
  609. FETCH cuLapso INTO rgLapsFina;
  610. CLOSE cuLapso;
  611. --
  612. sbPeriFiDe := rgLapsFina.LapsPeri;
  613. sbLapsFiDe := rgLapsFina.LapsLaps;
  614. --
  615. inNumeDocu := VAR.inNumeFact;
  616. -- Se valida si solo se factura a contribuyentes que solo deben la vigencia actual
  617. -- de lo contrario se factura normalmente.
  618. IF (NVL(VAR.sbDeudActu,'N') = 'S') THEN
  619. IF (sbPeriInDe = rgLapsDocu.LapsPeri) THEN
  620. boExito := TRUE;
  621. ELSE
  622. boExito := FALSE;
  623. END IF;
  624. ELSE
  625. boExito := TRUE;
  626. END IF;
  627. -- Cargar datos del proyecto obra predio si es valorizacion
  628. IF (VAR.sbProyInve != VAR.sbCaraNulo) THEN
  629. OPEN cuPiobSuim(VAR.sbTipoSuje,VAR.sbSujeImpu,VAR.sbProyInve);
  630. FETCH cuPiobSuim INTO rgPiobSuim;
  631. CLOSE cuPiobSuim;
  632. VAR.rgPiobSuim := rgPiobSuim;
  633. -- Cargar datos del proyecto obra
  634. pkgtbPrinObra.proSel(rgPiobSuim.PosiPiob,NULL,VAR.rgPrinObra);
  635. -- Variables de proyeccion de deuda
  636. inSaldFina := rgPiobSuim.PosiVaco - rgPiobSuim.PosiCuin;
  637. inPlazo := rgPiobSuim.PosiNucu;
  638. inTasaFina := VAR.rgPrinObra.PiobTifi;
  639. feFechIncr := rgPiobSuim.PosiFifp;
  640. dbms_output.put_line('proyecto='||VAR.rgPrinObra.PiobCodi||' '||rgPiobSuim.PosiFifp||' '||SALDOTOTAL||' '||VAR.tbSaldos.COUNT);
  641. END IF;
  642. -- Cargar condiciones de pago
  643. IF (NVL(VAR.sbSaldCopa,'N') = 'S') THEN
  644. CARGA_CONDICIONES_PAGOVALO(VAR.sbEmpresa,VAR.sbTipoImpu);
  645. CALCULA_SALDOS_CONDPAGO('S');
  646. END IF;
  647. --
  648. VAR.tbMoviDoli.DELETE;
  649. VAR.tbDescPrpa.DELETE;
  650. IF (SALDOTOTAL > 0 AND boExito) THEN
  651. inTotaDocu := 0;
  652. -- Consultar los saldos y acumular en movimiento de factura
  653. biSe := VAR.tbSaldos.FIRST;
  654. WHILE VAR.tbSaldos.EXISTS(biSe) LOOP
  655. -- Validar que solo se genera factura para los conceptos que generan deuda y no saldo a favor
  656. IF (VAR.tbSaldos(biSe).SasiSign = '+' AND ((sbFactAmor = 'N') OR (sbFactAmor = 'S' AND VAR.tbSaldos(biSe).SasiInte != 'D'))) THEN
  657.  
  658. -- Consultar concepto de movimiento
  659. OPEN cuConcMovi(VAR.tbSaldos(biSe).SasiComo);
  660. FETCH cuConcMovi INTO rgConcMovi;
  661. CLOSE cuConcMovi;
  662. --
  663. VAR.sbConcMovi := VAR.tbSaldos(biSe).SasiComo;
  664. VAR.sbPeriFisc := VAR.tbSaldos(biSe).SasiPeri;
  665. VAR.sbLapsFisc := VAR.tbSaldos(biSe).SasiLaps;
  666. VAR.feFechRefe := '01-01-'||VAR.sbPeriFisc;
  667. CARGA_UNIDLIQPER(VAR.feFechDocu);
  668. -- Poner en el ambiente el registro del concepto de movimiento
  669. VAR.rgConcMovi := rgConcMovi;
  670. VAR.inSecuComo := rgConcMovi.ComoSecu;
  671. --
  672. rgMoviDoli.MODLDLEM := VAR.sbEmpresa;
  673. rgMoviDoli.MODLDLTD := VAR.sbTidoFact;
  674. rgMoviDoli.MODLDLND := inNumeDocu;
  675. rgMoviDoli.MODLESTA := VAR.sbEstaActi;
  676. rgMoviDoli.MODLTIEM := VAR.tbSaldos(biSe).SasiTiem;
  677. rgMoviDoli.MODLTIIM := VAR.tbSaldos(biSe).SasiTiim;
  678. rgMoviDoli.MODLTISI := VAR.tbSaldos(biSe).SasiTisi;
  679. rgMoviDoli.MODLSUIM := VAR.tbSaldos(biSe).SasiSuim;
  680. rgMoviDoli.MODLTERC := VAR.tbSaldos(biSe).SasiTerc;
  681. rgMoviDoli.MODLPRIN := VAR.tbSaldos(biSe).SasiPrin;
  682. rgMoviDoli.MODLCOMO := VAR.tbSaldos(biSe).SasiComo;
  683. rgMoviDoli.MODLPERI := VAR.tbSaldos(biSe).SasiPeri;
  684. rgMoviDoli.MODLVAPF := 0;
  685. rgMoviDoli.MODLAAAN := 0;
  686. rgMoviDoli.MODLAAAC := 0;
  687. rgMoviDoli.MODLVAAC := 0;
  688. rgMoviDoli.MODLVADE := 0;
  689. rgMoviDoli.MODLVAAN := 0;
  690. rgMoviDoli.MODLVAPA := 0;
  691. rgMoviDoli.MODLSALD := 0;
  692. -- Valor acumulado atrasado de la actual vigencia
  693. -- A este valor debo restarle el valor liquidado del periodo
  694. -- Calculo de fecha de referencia para calculo de valores vencidos
  695. dbms_output.put_line('sbFactAmor 0='||sbFactAmor);
  696. IF ((NVL(VAR.sbProyInve,VAR.sbCaraNulo) = VAR.sbCaraNulo OR VAR.sbProyInve = '%') AND sbFactAmor = 'N') THEN
  697. IF (VAR.tbSaldos(biSe).SasiPeri = VAR.sbPeriMovi AND
  698. ((VAR.tbSaldos(biSe).SasiLaps = VAR.sbLapsCero) OR
  699. (VAR.tbSaldos(biSe).SasiLaps != VAR.sbLapsCero AND VAR.tbSaldos(biSe).SasiLaps = VAR.sbLapsMovi))) THEN
  700. -- Valor acumulado atrasado de la actual vigencia
  701. -- A este valor debo restarle el valor liquidado del periodo
  702. IF (VAR.tbSaldos(biSe).SasiLaps = VAR.sbLapsCero) THEN
  703. -- Calculo de fecha de referencia para calculo de valores vencidos
  704. feFechPeri := FECHINPELI(VAR.feFechDocu);
  705. feFechProy := ADD_MONTHS(feFechPeri,UNIDADLIQU);
  706. rgMoviDoli.MODLAAAC := SALVENCONC(feFechPeri,VAR.tbSaldos(biSe).SasiPeri,VAR.tbSaldos(biSe).SasiLaps);
  707. rgMoviDoli.MODLVAPF := SALVENCONC(feFechProy,VAR.tbSaldos(biSe).SasiPeri,VAR.tbSaldos(biSe).SasiLaps);
  708. rgMoviDoli.MODLVAPF := rgMoviDoli.MODLVAPF - rgMoviDoli.MODLAAAC;
  709. ELSE
  710. rgMoviDoli.MODLAAAC := 0;
  711. rgMoviDoli.MODLVAPF := VAR.tbSaldos(biSe).SasiDefi;
  712. END IF;
  713. ELSE
  714. -- Valor acumulado de las vigencias anteriores
  715. rgMoviDoli.MODLAAAN := VAR.tbSaldos(biSe).SasiDefi;
  716. END IF;
  717. ELSIF (VAR.tbSaldos(biSe).SasiPeri = VAR.rgPrinObra.PiobPems AND VAR.tbSaldos(biSe).SasiLaps = VAR.rgPrinObra.PiobLams AND sbFactAmor = 'N' AND sbModelo = 'CUOTA-MES') THEN
  718. IF (VAR.tbSaldos(biSe).SasiInte = 'C') THEN
  719. feFechPeri := FECHINPELI(VAR.feFechDocu);
  720. feFechProy := ADD_MONTHS(feFechPeri,UNIDADLIQU);
  721. IF (NVL(VAR.sbSaldCopa,'N') = 'S') THEN
  722. rgMoviDoli.MODLAAAC := VALO_VALORCUOTAS_VENCIDAS(feFechPeri,VAR.tbSaldos(biSe).SasiComo,VAR.tbSaldos(biSe).SasiPeri,VAR.tbSaldos(biSe).SasiLaps);
  723. rgMoviDoli.MODLVAPF := VALO_VALORCUOTAS_VENCIDAS(feFechProy,VAR.tbSaldos(biSe).SasiComo,VAR.tbSaldos(biSe).SasiPeri,VAR.tbSaldos(biSe).SasiLaps);
  724. IF (feFechPeri < feFechIncr) THEN
  725. rgMoviDoli.MODLAAAC := 0;
  726. END IF;
  727. ELSE
  728. rgMoviDoli.MODLAAAC := SALVENVALORIZACION(feFechIncr, feFechPeri);
  729. rgMoviDoli.MODLVAPF := SALVENVALORIZACION(feFechIncr, feFechProy);
  730. IF (feFechPeri < feFechIncr) THEN
  731. rgMoviDoli.MODLAAAC := 0;
  732. END IF;
  733. END IF;
  734. rgMoviDoli.MODLVAPF := rgMoviDoli.MODLVAPF - rgMoviDoli.MODLAAAC;
  735. ELSE
  736. rgMoviDoli.MODLAAAC := 0;
  737. rgMoviDoli.MODLVAPF := VAR.tbSaldos(biSe).SasiDefi;
  738. rgMoviDoli.MODLAAAN := 0;
  739. END IF;
  740. ELSIF (VAR.tbSaldos(biSe).SasiInte = 'C' AND sbModelo = 'CUOTA-ANUAL') THEN
  741. -- Validar si el concepto es de cuota inicial
  742. OPEN cuComoOper('CUOTINIC');
  743. FETCH cuComoOper INTO rgTimoOper;
  744. boCuotInic := cuComoOper%FOUND;
  745. CLOSE cuComoOper;
  746. IF NOT (boCuotInic) THEN
  747. -- Si maneja concepto de cuota mes calcula los valores conforme a ese concepto
  748. IF (UPPER(sbMacoCume) = 'S') THEN
  749. OPEN cuComoOper('CUOTAMES');
  750. FETCH cuComoOper INTO rgTimoOper;
  751. boCuotaMes := cuComoOper%FOUND;
  752. CLOSE cuComoOper;
  753. IF (boCuotaMes) THEN
  754. IF (VAR.feFechDocu < LAST_DAY(ADD_MONTHS(VAR.rgPiobSuim.PosiFifp,VAR.rgPiobSuim.PosiNucu))) THEN
  755. IF (VAR.tbSaldos(biSe).SasiDefi >= VAR.rgPiobSuim.PosiCume) THEN
  756. rgMoviDoli.MODLAAAC := VAR.tbSaldos(biSe).SasiDefi - VAR.rgPiobSuim.PosiCume;
  757. rgMoviDoli.MODLVAPF := VAR.rgPiobSuim.PosiCume;
  758. ELSE
  759. rgMoviDoli.MODLAAAC := 0;
  760. rgMoviDoli.MODLVAPF := VAR.tbSaldos(biSe).SasiDefi;
  761. END IF;
  762. ELSE
  763. rgMoviDoli.MODLAAAC := VAR.tbSaldos(biSe).SasiDefi;
  764. rgMoviDoli.MODLVAPF := 0;
  765. END IF;
  766. -- Calcular cuotas vencidas
  767. VAR.inCuotVenc := ROUND(rgMoviDoli.MODLAAAC / VAR.rgPiobSuim.PosiCume) - 1;
  768. ELSE
  769. rgMoviDoli.MODLAAAC := 0;
  770. rgMoviDoli.MODLVAPF := 0;
  771. END IF;
  772. ELSE
  773. feFechPeri := ADD_MONTHS(FECHFIPELI(VAR.feFechDocu),-1);
  774. feFechProy := FECHFIPELI(VAR.feFechDocu);
  775. rgMoviDoli.MODLAAAC := SG_SALDODEUDA_FINANCIADA(feFechPeri,VAR.tbSaldos(biSe).SasiPago,0,'C');
  776. rgMoviDoli.MODLVAPF := SG_SALDODEUDA_FINANCIADA(feFechProy,VAR.tbSaldos(biSe).SasiPago,0,'C');
  777. rgMoviDoli.MODLVAPF := rgMoviDoli.MODLVAPF - rgMoviDoli.MODLAAAC;
  778. -- Calcular cuotas vencidas
  779. VAR.inCuotVenc := ROUND(rgMoviDoli.MODLAAAC / VAR.rgPiobSuim.PosiCume) - 1;
  780. END IF;
  781. ELSE
  782. IF (VAR.feFechDocu < rgPiobSuim.PosiFifp) THEN
  783. rgMoviDoli.MODLAAAC := 0;
  784. rgMoviDoli.MODLVAPF := VAR.tbSaldos(biSe).SasiDefi;
  785. ELSE
  786. rgMoviDoli.MODLAAAC := VAR.tbSaldos(biSe).SasiDefi;
  787. rgMoviDoli.MODLVAPF := 0;
  788. END IF;
  789. END IF;
  790. IF (VAR.inCuotVenc < 0) THEN
  791. VAR.inCuotVenc := 0;
  792. END IF;
  793. ELSIF (sbFactAmor = 'S') THEN
  794. dbms_output.put_line('sbFactAmor='||sbFactAmor);
  795. IF (VAR.tbSaldos(biSe).SasiInte = 'C') THEN
  796. -- Consultar valor de la cuota de amortizacion
  797. OPEN cuSuimTiin(VAR.tbSaldos(biSe).SasiTiem,VAR.tbSaldos(biSe).SasiTiim,
  798. VAR.tbSaldos(biSe).SasiTisi,VAR.tbSaldos(biSe).SasiSuim,'%',VAR.tbSaldos(biSe).SasiPrin,'AMME',
  799. VAR.tbSaldos(biSe).SasiPeri,VAR.tbSaldos(biSe).SasiLaps);
  800. FETCH cuSuimTiin INTO rgSuimTiin;
  801. boExiste := cuSuimTiin%FOUND;
  802. CLOSE cuSuimTiin;
  803. --
  804. IF (boExiste) THEN
  805. inValoCuot := NVL(rgSuimTiin.SutiValo,0);
  806. dbms_output.put_line('inValoCuot='||inValoCuot);
  807. --
  808. rgMoviDoli.MODLAAAN := 0;
  809. rgMoviDoli.MODLAAAC := VAR.tbSaldos(biSe).SasiDefi - inValoCuot;
  810. IF ((VAR.tbSaldos(biSe).SasiDefi - inValoCuot) < 0) THEN
  811. rgMoviDoli.MODLAAAC := 0;
  812. rgMoviDoli.MODLVAPF := VAR.tbSaldos(biSe).SasiDefi;
  813. ELSE
  814. rgMoviDoli.MODLAAAC := VAR.tbSaldos(biSe).SasiDefi - inValoCuot;
  815. rgMoviDoli.MODLVAPF := inValoCuot;
  816. END IF;
  817. ELSE
  818. -- Consultar valor de la cuota de amortizacion
  819. OPEN cuSuimTiin(VAR.tbSaldos(biSe).SasiTiem,VAR.tbSaldos(biSe).SasiTiim,
  820. VAR.tbSaldos(biSe).SasiTisi,VAR.tbSaldos(biSe).SasiSuim,'%',VAR.tbSaldos(biSe).SasiPrin,'TAAL',
  821. sbVigeDocu,VAR.sbLapsCero);
  822. FETCH cuSuimTiin INTO rgSuimTiin;
  823. boExiste := cuSuimTiin%FOUND;
  824. CLOSE cuSuimTiin;
  825. IF (boExiste) THEN
  826. inValoCuot := NVL(rgSuimTiin.SutiValo,0);
  827. dbms_output.put_line('inValoCuot='||inValoCuot);
  828. --
  829. rgMoviDoli.MODLAAAN := 0;
  830. rgMoviDoli.MODLAAAC := VAR.tbSaldos(biSe).SasiDefi - inValoCuot;
  831. IF ((VAR.tbSaldos(biSe).SasiDefi - inValoCuot) < 0) THEN
  832. rgMoviDoli.MODLAAAC := 0;
  833. rgMoviDoli.MODLVAPF := VAR.tbSaldos(biSe).SasiDefi;
  834. ELSE
  835. rgMoviDoli.MODLAAAC := VAR.tbSaldos(biSe).SasiDefi - inValoCuot;
  836. rgMoviDoli.MODLVAPF := inValoCuot;
  837. END IF;
  838. END IF;
  839. END IF;
  840. ELSIF (VAR.tbSaldos(biSe).SasiInte = 'N') THEN
  841. -- Consultar valor de intereses corrientes de la vigencia actual de la factura
  842. OPEN cuInteCorr(VAR.tbSaldos(biSe).SasiTiem,VAR.tbSaldos(biSe).SasiTiim,VAR.tbSaldos(biSe).SasiTisi,VAR.tbSaldos(biSe).SasiSuim,
  843. VAR.tbSaldos(biSe).SasiTerc,VAR.tbSaldos(biSe).SasiPrin,VAR.tbSaldos(biSe).SasiComo,
  844. TO_DATE('01-01-'||TO_CHAR(VAR.feFechDocu,'YYYY'),'DD-MM-YYYY'));
  845. FETCH cuInteCorr INTO rgInteCorr;
  846. CLOSE cuInteCorr;
  847. --
  848. dbms_output.put_line('rgInteCorr='||rgInteCorr.DebiAnte||' - '||rgInteCorr.CredAnte);
  849. dbms_output.put_line('rgInteCorr='||rgInteCorr.DebiActu||' - '||rgInteCorr.CredActu);
  850. rgMoviDoli.MODLAAAN := rgInteCorr.DebiAnte - rgInteCorr.CredAnte;
  851. IF (rgMoviDoli.MODLAAAN < 0) THEN
  852. rgMoviDoli.MODLVAPF := (rgInteCorr.DebiActu - rgInteCorr.CredActu) + rgMoviDoli.MODLAAAN;
  853. rgMoviDoli.MODLAAAN := 0;
  854. ELSE
  855. rgMoviDoli.MODLAAAN := rgInteCorr.DebiAnte - rgInteCorr.CredAnte - rgInteCorr.CredActu;
  856. IF (rgMoviDoli.MODLAAAN < 0) THEN
  857. rgMoviDoli.MODLVAPF := rgInteCorr.DebiActu + rgMoviDoli.MODLAAAN;
  858. rgMoviDoli.MODLAAAN := 0;
  859. ELSE
  860. rgMoviDoli.MODLVAPF := rgInteCorr.DebiActu;
  861. END IF;
  862. END IF;
  863. --
  864. ELSE
  865. rgMoviDoli.MODLAAAC := 0;
  866. rgMoviDoli.MODLAAAN := 0;
  867. rgMoviDoli.MODLVAPF := VAR.tbSaldos(biSe).SasiDefi;
  868. --
  869. END IF;
  870. END IF;
  871. -- Cuando el concepto es diferido no se tiene en cuenta en la facturacion del periodo
  872. IF (rgConcMovi.ComoDife != 'N') THEN
  873. rgMoviDoli.MODLVAPF := 0;
  874. END IF;
  875. -- Valor acumulado hasta la actual vigencia
  876. rgMoviDoli.MODLVAAC := rgMoviDoli.MODLAAAN + rgMoviDoli.MODLAAAC + rgMoviDoli.MODLVAPF;
  877. -- Valor acumulado hasta el fin de la actual vigencia
  878. rgMoviDoli.MODLVAAN := VAR.tbSaldos(biSe).SasiDefi;
  879. rgMoviDoli.MODLSALD := VAR.tbSaldos(biSe).SasiDefi;
  880. --
  881. rgMoviDoli.MODLTALI := VAR.tbSaldos(biSe).SasiTali;
  882. rgMoviDoli.MODLVABA := VAR.tbSaldos(biSe).SasiVaba;
  883. -- Acumula
  884. inTotaDocu := inTotaDocu + rgMoviDoli.MODLVAAC;
  885. --
  886. PRO_ACTUALIZA_MOVTO(VAR.tbSaldos(biSe).SasiPeri,rgConcMovi.ComoSecu);
  887. -- Datos de descuento
  888. rgDescPrpa.DEPPTIEM := rgMoviDoli.ModlTiem;
  889. rgDescPrpa.DEPPTIIM := rgMoviDoli.ModlTiim;
  890. rgDescPrpa.DEPPDLEM := rgMoviDoli.ModlDlem;
  891. rgDescPrpa.DEPPDLTD := rgMoviDoli.ModlDltd;
  892. rgDescPrpa.DEPPDLND := rgMoviDoli.ModlDlnd;
  893. rgDescPrpa.DEPPESTA := rgMoviDoli.ModlEsta;
  894. rgDescPrpa.DEPPTISI := rgMoviDoli.ModlTisi;
  895. rgDescPrpa.DEPPSUIM := rgMoviDoli.ModlSuim;
  896. rgDescPrpa.DEPPTERC := rgMoviDoli.ModlTerc;
  897. rgDescPrpa.DEPPPIOB := rgMoviDoli.ModlPrin;
  898. rgDescPrpa.DEPPCOMO := rgMoviDoli.ModlComo;
  899. rgDescPrpa.DEPPPERI := VAR.tbSaldos(biSe).SasiPeri;
  900. rgDescPrpa.DEPPLAPS := VAR.tbSaldos(biSe).SasiLaps;
  901. rgDescPrpa.DEPPFECH := rgMoviDoli.ModlFech;
  902. rgDescPrpa.DEPPVABA := VAR.tbSaldos(biSe).SasiVaba;
  903. rgDescPrpa.DEPPCANT := VAR.tbSaldos(biSe).SasiCant;
  904. rgDescPrpa.DEPPVAUN := VAR.tbSaldos(biSe).SasiVaun;
  905. rgDescPrpa.DEPPFACT := 0;
  906. rgDescPrpa.DEPPDEPE := 0;
  907. rgDescPrpa.DEPPINPE := 0;
  908. rgDescPrpa.DEPPDEVI := 0;
  909. rgDescPrpa.DEPPINVI := 0;
  910. rgDescPrpa.DEPPVAAN := 0;
  911. rgDescPrpa.DEPPDEAN := 0;
  912. rgDescPrpa.DEPPAJVV := 0;
  913. rgDescPrpa.DEPPAJVP := 0;
  914. rgDescPrpa.DEPPAJVA := 0;
  915. rgDescPrpa.DEPPATVA := rgMoviDoli.MODLAAAC;
  916. rgDescPrpa.DEPPATVN := rgMoviDoli.MODLAAAN;
  917. dbms_output.put_line('rgDescPrpa.DEPPATVA='||rgDescPrpa.DEPPATVA||' - '||rgDescPrpa.DEPPATVN||' rgMoviDoli.MODLAAAC='||rgMoviDoli.MODLAAAC);
  918. -- Cuando el concepto es diferido no se tiene en cuenta en la facturacion del periodo
  919. IF (rgConcMovi.ComoDife != 'N') THEN
  920. rgDescPrpa.DEPPVPPE := 0;
  921. ELSE
  922. rgDescPrpa.DEPPVPPE := rgMoviDoli.MODLVAAC;
  923. END IF;
  924. rgDescPrpa.DEPPVPVI := rgMoviDoli.MODLVAAN;
  925. --
  926. IF (rgDescPrpa.DeppVppe != 0 OR rgDescPrpa.DeppVpvi != 0 OR rgDescPrpa.DEPPVAAN != 0) THEN
  927. PRO_ACTUALIZA_DESTO(0,VAR.tbSaldos(biSe).SasiPeri,rgConcMovi.ComoSecu);
  928. END IF;
  929. -- Define periodo de liquidacion de descuentos y proyeccion de intereses
  930. biIn := TO_NUMBER(VAR.tbSaldos(biSe).SasiPeri||VAR.tbSaldos(biSe).SasiLaps);
  931. IF (NOT (tbPeriLiqu.EXISTS(biIn)) AND VAR.tbSaldos(biSe).SasiDefi > 0) THEN
  932. OPEN cuPeriodo(VAR.tbSaldos(biSe).SasiPeri);
  933. FETCH cuPeriodo INTO rgPeriodo;
  934. CLOSE cuPeriodo;
  935. tbPeriLiqu(biIn).sbPeriFisc := VAR.tbSaldos(biSe).SasiPeri;
  936. tbPeriLiqu(biIn).sbLapsFisc := VAR.tbSaldos(biSe).SasiLaps;
  937. tbPeriLiqu(biIn).feFechInic := rgPeriodo.PeriFein;
  938. END IF;
  939. END IF; --Fin si no es de saldo a favor
  940. --
  941. biSe := VAR.tbSaldos.NEXT(biSe);
  942. --
  943. END LOOP;
  944. -- Liquidacion de descuentos e intereses proyectados segun el modelo de liquidacion
  945. -- de descuentos
  946. IF (VAR.tbDescPrpa.COUNT > 0) THEN
  947. biSe := tbOpciDesc.FIRST;
  948. WHILE tbOpciDesc.EXISTS(biSe) LOOP
  949. -- Fecha de corte
  950. VAR.feFechMovi := tbOpciDesc(biSe).feFechVenc;
  951. VAR.inOpciPago := tbOpciDesc(biSe).inOpciPago;
  952. VAR.tbMovireli.DELETE;
  953. -- Liquidacoin proyectada por periodos
  954. biMo := tbPeriLiqu.FIRST;
  955. WHILE tbPeriLiqu.EXISTS(biMo) LOOP
  956. -- Carga variables de ambiente
  957. VAR.feFechRefe := tbPeriLiqu(biMo).feFechInic;
  958. VAR.sbPeriFisc := tbPeriLiqu(biMo).sbPeriFisc;
  959. VAR.sbLapsFisc := tbPeriLiqu(biMo).sbLapsFisc;
  960. --
  961. CARGA_UNIDLIQPER(VAR.feFechRefe);
  962. CARGA_LIQUPERI(VAR.feFechMovi);
  963. -- Liquida
  964. IF (UPPER(VAR.sbSaldTerc) = 'S') THEN
  965. LIQUIDA_PROPIETARI;
  966. ELSE
  967. LIQUIDAR;
  968. END IF;
  969. ACUMULA_MOVIMRELIQ;
  970. biMo := tbPeriLiqu.NEXT(biMo);
  971. END LOOP;
  972. -- Recorre los Movimientos Generados por la Formula
  973. biMo := VAR.tbMovireli.FIRST;
  974. WHILE VAR.tbMovireli.EXISTS(biMo) LOOP
  975. -- Consultar concepto de movimiento
  976. OPEN cuConcMovi (VAR.tbMovireli(biMo).sbConcMovi);
  977. FETCH cuConcMovi INTO rgConcMovi;
  978. CLOSE cuConcMovi;
  979. -- Solo aplica descuentos a facturas que no son por abonos
  980. IF (VAR.inValoMovi = 0) THEN
  981. inDescPeri := VAR.tbMovireli(biMo).inDescPeri * -1;
  982. inDescVige := VAR.tbMovireli(biMo).inDescVige * -1;
  983. ELSE
  984. inDescPeri := 0;
  985. inDescVige := 0;
  986. END IF;
  987. --
  988. inIntePeri := VAR.tbMovireli(biMo).inIntePeri;
  989. inInteVige := VAR.tbMovireli(biMo).inIntePeri;
  990. --
  991. IF ((inDescPeri + inDescVige) != 0) THEN
  992. rgDescPrpa.DeppFact := VAR.tbMovireli(biMo).inFactDesc;
  993. ELSE
  994. rgDescPrpa.DeppFact := 0;
  995. END IF;
  996. --
  997. rgDescPrpa.DEPPTIEM := VAR.sbEmpresa;
  998. rgDescPrpa.DEPPTIIM := VAR.sbTipoImpu;
  999. rgDescPrpa.DEPPDLEM := VAR.sbEmpresa;
  1000. rgDescPrpa.DEPPDLTD := VAR.sbTidoFact;
  1001. rgDescPrpa.DEPPDLND := inNumeDocu;
  1002. rgDescPrpa.DEPPESTA := VAR.sbEstaActi;
  1003. rgDescPrpa.DEPPTISI := VAR.sbTipoSuje;
  1004. rgDescPrpa.DEPPSUIM := VAR.sbSujeImpu;
  1005. rgDescPrpa.DEPPTERC := VAR.sbTercero;
  1006. -- Asigna proyecto
  1007. IF (VAR.sbProyInve = '%') THEN
  1008. rgDescPrpa.DEPPPIOB := VAR.sbCaraNulo;
  1009. ELSE
  1010. rgDescPrpa.DEPPPIOB := VAR.sbProyInve;
  1011. END IF;
  1012. rgDescPrpa.DEPPCOMO := VAR.tbMovireli(biMo).sbConcMovi;
  1013. rgDescPrpa.DEPPPERI := VAR.tbMovireli(biMo).sbPeriFisc;
  1014. rgDescPrpa.DEPPLAPS := VAR.tbMovireli(biMo).sbLapsFisc;
  1015. rgDescPrpa.DEPPFECH := VAR.feFechMovi;
  1016. rgDescPrpa.DEPPVABA := 0;
  1017. rgDescPrpa.DEPPCANT := 0;
  1018. rgDescPrpa.DEPPVAUN := 0;
  1019. rgDescPrpa.DEPPATVA := 0;
  1020. rgDescPrpa.DEPPATVN := 0;
  1021. -- Total Periodo
  1022. rgDescPrpa.DeppDepe := inDescPeri;
  1023. rgDescPrpa.DeppInpe := inIntePeri;
  1024. rgDescPrpa.DeppVppe := inIntePeri - inDescPeri;
  1025. -- Total Vigencia
  1026. rgDescPrpa.DeppDevi := inDescVige;
  1027. rgDescPrpa.DeppInvi := inInteVige;
  1028. rgDescPrpa.DeppVpvi := inInteVige - inDescVige;
  1029. -- Anticipos
  1030. rgDescPrpa.DeppVaan := VAR.tbMovireli(biMo).inValoAnti;
  1031. rgDescPrpa.DeppDean := (VAR.tbMovireli(biMo).inDescAnti * -1);
  1032. rgDescPrpa.DeppAjvv := NVL(VAR.tbMovireli(biMo).inAjusVavi,0);
  1033. rgDescPrpa.DeppAjvp := NVL(VAR.tbMovireli(biMo).inAjusVape,0);
  1034. rgDescPrpa.DeppAjva := NVL(VAR.tbMovireli(biMo).inAjusVaan,0);
  1035.  
  1036. dbms_output.put_line('DeppVaan='||VAR.tbMovireli(biMo).inValoAnti||' VAR.tbMovireli(biMo).inDescAnti='||VAR.tbMovireli(biMo).inDescAnti||' rgDescPrpa.DeppAjva='||rgDescPrpa.DeppAjva);
  1037. --
  1038. rgDescPrpa.DeppOppa := biSe;
  1039. --
  1040. IF (rgDescPrpa.DeppVppe != 0 OR rgDescPrpa.DeppVpvi != 0 OR rgDescPrpa.DeppVaan != 0 OR rgDescPrpa.DeppDean != 0 OR
  1041. rgDescPrpa.DeppAjvv != 0 OR rgDescPrpa.DeppAjvp != 0 OR rgDescPrpa.DeppAjva != 0) THEN
  1042. PRO_ACTUALIZA_DESTO(biSe,VAR.tbMovireli(biMo).sbPeriFisc,rgConcMovi.ComoSecu);
  1043. END IF;
  1044. --
  1045. biMo := VAR.tbMovireli.NEXT(biMo);
  1046. END LOOP;
  1047. --
  1048. biSe := tbOpciDesc.NEXT(biSe);
  1049. END LOOP;
  1050. END IF;
  1051. IF (VAR.inValoMovi != 0 OR VAR.sbPeriInic IS NOT NULL) THEN
  1052. -- ========================================================================
  1053. -- Calcula el valor por concepto si es una factura por pago parcial o abono
  1054. -- ========================================================================
  1055. IF (VAR.inValoMovi != 0) THEN
  1056. inValoPago := VAR.inValoMovi;
  1057. inNumeCuot := 0;
  1058. IF (VAR.sbPeriInic || VAR.sbPeriFina IS NOT NULL) THEN
  1059. sbPeriInic := VAR.sbPeriInic;
  1060. sbPeriFina := VAR.sbPeriFina;
  1061. ELSE
  1062.  
  1063. sbPeriInic := NULL;
  1064. sbPeriFina := NULL;
  1065. END IF;
  1066. ELSE
  1067. -- Si no es por valor va desde una vigencia inicial hasta una final
  1068. -- si ademas se dedine una cuota (SasiSasaX) se toman solo los saldos
  1069. --hasta esa cuota en el periodo final.
  1070. sbPeriInic := VAR.sbPeriInic;
  1071. sbPeriFina := VAR.sbPeriFina;
  1072. inNumeCuot := 0;
  1073. IF (sbPeriInic IS NOT NULL AND sbPeriFina IS NOT NULL AND VAR.inNumeCuot != 0 AND VAR.inNumeCuot != CANTPERUNI) THEN
  1074. -- CCH07 : Se modifica asignacion de sbPeriInic con VAR.sbPeriInic a VAR.sbPeriFina
  1075. sbPeriInic := VAR.sbPeriInic;
  1076. sbPeriFina := VAR.sbPeriFina;
  1077. inNumeCuot := VAR.inNumeCuot;
  1078. END IF;
  1079. END IF;
  1080. -- Determinar el valor facturado a pagar por cada vigencia fiscal
  1081. inTotaPago := 0;
  1082. biIn := VAR.tbDescPrpa.FIRST;
  1083. WHILE VAR.tbDescPrpa.EXISTS(biIn) LOOP
  1084. IF (VAR.tbDescPrpa(biIn).DeppFech = feMaxiFech) THEN
  1085. biMo := TO_NUMBER(VAR.tbDescPrpa(biIn).DeppPeri);
  1086. IF NOT (tbPeriFact.EXISTS(biMo)) THEN
  1087. tbPeriFact(biMo).sbPeriFisc := VAR.tbDescPrpa(biIn).DeppPeri;
  1088. tbPeriFact(biMo).inValoFact := VAR.tbDescPrpa(biIn).DeppVpvi;
  1089. ELSE
  1090. tbPeriFact(biMo).inValoFact := tbPeriFact(biMo).inValoFact + VAR.tbDescPrpa(biIn).DeppVpvi;
  1091. END IF;
  1092. inTotaPago := inTotaPago + VAR.tbDescPrpa(biIn).DeppVpvi;
  1093. END IF;
  1094. biIn := VAR.tbDescPrpa.NEXT(biIn);
  1095. END LOOP;
  1096. -- Validar que el valor del pago no exceda el total de deuda a pagar
  1097. IF (inValoPago != 0 AND inValoPago > inTotaPago) THEN
  1098. inValoPago := inTotaPago;
  1099. END IF;
  1100. -- Determinar de acuerdo al valor a pagar hasta que vigencia alcanza a cubrir
  1101. -- si y solo si es un pago por valor
  1102. IF (VAR.inValoMovi != 0) THEN
  1103. boExito := FALSE;
  1104. biIn := tbPeriFact.FIRST;
  1105. WHILE (tbPeriFact.EXISTS(biIn) AND boExito = FALSE) LOOP
  1106. IF (sbPeriInic IS NULL) THEN
  1107. sbPeriInic := tbPeriFact(biIn).sbPeriFisc;
  1108. sbPeriFina := tbPeriFact(biIn).sbPeriFisc;
  1109. END IF;
  1110. IF ((inValoPago - tbPeriFact(biIn).inValoFact) < 0) THEN
  1111. sbPeriFina := tbPeriFact(biIn).sbPeriFisc;
  1112. boExito := TRUE;
  1113. ELSE
  1114. sbPeriFina := tbPeriFact(biIn).sbPeriFisc;
  1115. inValoPago := inValoPago - tbPeriFact(biIn).inValoFact;
  1116. IF (inValoPago = 0) THEN
  1117. boExito := TRUE;
  1118. END IF;
  1119. END IF;
  1120. biIn := tbPeriFact.NEXT(biIn);
  1121. END LOOP;
  1122. END IF;
  1123. -- Regenerar los movimiento de la facturacion
  1124. tbMoviTemp := VAR.tbMoviDoli;
  1125. tbDescTemp := VAR.tbDescPrpa;
  1126. tbMoviDoli.DELETE;
  1127. VAR.tbMoviDoli.DELETE;
  1128. VAR.tbDescPrpa.DELETE;
  1129. biSe := tbMoviTemp.FIRST;
  1130. WHILE tbMoviTemp.EXISTS(biSe) LOOP
  1131. IF (tbMoviTemp(bise).ModlPeri BETWEEN sbPeriInic AND sbPeriFina) THEN
  1132. IF NOT (tbMoviTemp(bise).ModlPeri = sbPeriFina AND (inValoPago > 0 OR inNumeCuot != 0)) THEN
  1133. -- Consultar concepto de movimiento
  1134. OPEN cuConcMovi(tbMoviTemp(bise).ModlComo);
  1135. FETCH cuConcMovi INTO rgConcMovi;
  1136. CLOSE cuConcMovi;
  1137. -- Determinar variable de acumulados
  1138. rgMoviDoli.MODLDLEM := tbMoviTemp(bise).ModlDlem;
  1139. rgMoviDoli.MODLDLTD := tbMoviTemp(bise).ModlDltd;
  1140. rgMoviDoli.MODLDLND := tbMoviTemp(bise).ModlDlnd;
  1141. rgMoviDoli.MODLTIEM := tbMoviTemp(bise).ModlTiem;
  1142. rgMoviDoli.MODLTIIM := tbMoviTemp(bise).ModlTiim;
  1143. rgMoviDoli.MODLTISI := tbMoviTemp(bise).ModlTisi;
  1144. rgMoviDoli.MODLSUIM := tbMoviTemp(bise).ModlSuim;
  1145. rgMoviDoli.MODLTERC := tbMoviTemp(bise).ModlTerc;
  1146. rgMoviDoli.MODLPRIN := tbMoviTemp(bise).ModlPrin;
  1147. rgMoviDoli.MODLCOMO := tbMoviTemp(bise).ModlComo;
  1148. rgMoviDoli.MODLPERI := tbMoviTemp(bise).ModlPeri;
  1149. rgMoviDoli.MODLVAPF := tbMoviTemp(bise).ModlVapf;
  1150. rgMoviDoli.MODLAAAN := tbMoviTemp(bise).ModlAaan;
  1151. rgMoviDoli.MODLAAAC := tbMoviTemp(bise).ModlAaac;
  1152. rgMoviDoli.MODLVAAC := tbMoviTemp(bise).ModlVaac;
  1153. rgMoviDoli.MODLVADE := tbMoviTemp(bise).ModlVade;
  1154. rgMoviDoli.MODLVAAN := tbMoviTemp(bise).ModlVaan;
  1155. rgMoviDoli.MODLVAPA := tbMoviTemp(bise).ModlVapa;
  1156. rgMoviDoli.MODLSALD := tbMoviTemp(bise).ModlSald;
  1157. -- Periodo final debe desde en factura
  1158. sbPeriFiDe := rgMoviDoli.MODLPERI;
  1159. sbLapsFiDe := '12';
  1160. --
  1161. PRO_ACTUALIZA_MOVTO(tbMoviTemp(bise).ModlPeri,rgConcMovi.ComoSecu);
  1162. END IF;
  1163. END IF;
  1164. biSe := tbMoviTemp.NEXT(biSe);
  1165. END LOOP;
  1166. IF (VAR.sbPeriFina IS NOT NULL AND sbPeriFide != VAR.sbVigeDocu AND VAR.sbPeriFina = VAR.sbVigeDocu) THEN
  1167. sbPeriFiDe := rgLapsFina.LapsPeri;
  1168. sbLapsFiDe := rgLapsFina.LapsLaps;
  1169. END IF;
  1170. biSe := tbDescTemp.FIRST;
  1171. WHILE tbDescTemp.EXISTS(biSe) LOOP
  1172. IF (tbDescTemp(bise).DeppPeri BETWEEN sbPeriInic AND sbPeriFina) THEN
  1173. IF NOT (tbDescTemp(bise).DeppPeri = sbPeriFina AND (inValoPago > 0 OR inNumeCuot != 0)) THEN
  1174. IF (tbDescTemp(bise).DeppVppe != 0 OR tbDescTemp(bise).DeppVpvi != 0 OR
  1175. tbDescTemp(bise).DeppDepe != 0 OR tbDescTemp(bise).DeppDevi != 0) THEN
  1176. VAR.tbDescPrpa(biSe) := tbDescTemp(biSe);
  1177. END IF;
  1178. END IF;
  1179. END IF;
  1180. biSe := tbDescTemp.NEXT(biSe);
  1181. END LOOP;
  1182. -- Generar valor de la factura por el valor de pago por distribuir y que no
  1183. -- alcanzo a cubrir una vigencia completa o por la cantidad de cuotas para la
  1184. -- ultima vigencia
  1185. IF (inValoPago > 0 OR inNumeCuot != 0) THEN
  1186. GENERA_PAGOPARCIAL(VAR.sbEmpresa,VAR.sbTipoImpu,
  1187. sbPeriFina,VAR.sbLapsCero,
  1188. sbPeriFina,VAR.sbLapsCero,
  1189. inNumeCuot,inValoPago);
  1190. --
  1191. inSuimEdad := 0;
  1192. feFechProD := VAR.feFechDocu;
  1193. biSe := VAR.tbMoviPago.FIRST;
  1194. WHILE VAR.tbMoviPago.EXISTS(biSe) LOOP
  1195. -- Consultar concepto de movimiento
  1196. OPEN cuConcMovi(VAR.tbMoviPago(biSe).sbConcepto);
  1197. FETCH cuConcMovi INTO rgConcMovi;
  1198. CLOSE cuConcMovi;
  1199. --
  1200. rgMoviDoli.MODLDLEM := VAR.sbEmpresa;
  1201. rgMoviDoli.MODLDLTD := VAR.sbTidoFact;
  1202. rgMoviDoli.MODLDLND := inNumeDocu;
  1203. rgMoviDoli.MODLESTA := VAR.sbEstaActi;
  1204. rgMoviDoli.MODLTIEM := VAR.tbMoviPago(biSe).sbEmpresa;
  1205. rgMoviDoli.MODLTIIM := VAR.tbMoviPago(biSe).sbTipoImpu;
  1206. rgMoviDoli.MODLTISI := VAR.tbMoviPago(biSe).sbTipoSuje;
  1207. rgMoviDoli.MODLSUIM := VAR.tbMoviPago(biSe).sbSujeImpu;
  1208. rgMoviDoli.MODLTERC := VAR.tbMoviPago(biSe).sbTercero;
  1209. rgMoviDoli.MODLPRIN := VAR.tbMoviPago(biSe).sbProyInve;
  1210. rgMoviDoli.MODLPERI := VAR.tbMoviPago(biSe).sbPeriodo;
  1211. rgMoviDoli.MODLCOMO := VAR.tbMoviPago(biSe).sbConcepto;
  1212. rgMoviDoli.MODLVADE := 0;
  1213. rgMoviDoli.MODLVAPA := 0;
  1214. rgMoviDoli.MODLSALD := 0;
  1215. rgMoviDoli.MODLAAAC := 0;
  1216. rgMoviDoli.MODLVAPF := 0;
  1217. rgMoviDoli.MODLAAAN := 0;
  1218. -- Valores para comparar y determinar donde clasificar la vigencia actual
  1219. IF (VAR.tbMoviPago(biSe).sbPeriodo < rgLapsDocu.LapsPeri) THEN
  1220. rgMoviDoli.MODLAAAN := VAR.tbMoviPago(biSe).inValoPago;
  1221. ELSE
  1222. -- Valor acumulado atrasado de la actual vigencia
  1223. -- A este valor debo restarle el valor liquidado del periodo
  1224. VAR.inSecuComo := rgConcMovi.ComoSecu;
  1225. VAR.sbConcMovi := VAR.tbMoviPago(biSe).sbConcepto;
  1226. CARGA_UNIDLIQPER(VAR.feFechDocu);
  1227. -- Calculo de fecha de referencia para calculo de valores vencidos
  1228. feFechPeri := FECHINPELI(VAR.feFechDocu);
  1229. feFechProy := ADD_MONTHS(feFechPeri,UNIDADLIQU);
  1230. inMODLAAAC := SALVENCONC(feFechPeri,VAR.tbMoviPago(biSe).sbPeriodo,VAR.tbMoviPago(biSe).sbLapso);
  1231. inMODLVAPF := SALVENCONC(feFechProy,VAR.tbMoviPago(biSe).sbPeriodo,VAR.tbMoviPago(biSe).sbLapso);
  1232. inMODLVAPF := inMODLVAPF - inMODLAAAC;
  1233. --
  1234. IF (inMODLAAAC > VAR.tbMoviPago(biSe).inValoPago) THEN
  1235. rgMoviDoli.MODLAAAC := VAR.tbMoviPago(biSe).inValoPago;
  1236. rgMoviDoli.MODLVAPF := 0;
  1237. ELSE
  1238. rgMoviDoli.MODLAAAC := inMODLAAAC;
  1239. rgMoviDoli.MODLVAPF := VAR.tbMoviPago(biSe).inValoPago - inMODLAAAC;
  1240. END IF;
  1241. --
  1242. END IF;
  1243. -- Valor acumulado hasta la actual vigencia
  1244. rgMoviDoli.MODLVAAC := rgMoviDoli.MODLAAAN + rgMoviDoli.MODLAAAC + rgMoviDoli.MODLVAPF;
  1245. rgMoviDoli.MODLVAAN := VAR.tbMoviPago(biSe).inValoPago;
  1246. -- Actulizo movimiento de factura
  1247. PRO_ACTUALIZA_MOVTO(VAR.tbMoviPago(biSe).sbPeriodo,VAR.tbMoviPago(biSe).inComoSecu);
  1248. -- Datos de descuento
  1249. rgDescPrpa.DEPPTIEM := rgMoviDoli.ModlTiem;
  1250. rgDescPrpa.DEPPTIIM := rgMoviDoli.ModlTiim;
  1251. rgDescPrpa.DEPPDLEM := rgMoviDoli.ModlDlem;
  1252. rgDescPrpa.DEPPDLTD := rgMoviDoli.ModlDltd;
  1253. rgDescPrpa.DEPPDLND := rgMoviDoli.ModlDlnd;
  1254. rgDescPrpa.DEPPESTA := rgMoviDoli.ModlEsta;
  1255. rgDescPrpa.DEPPTISI := rgMoviDoli.ModlTisi;
  1256. rgDescPrpa.DEPPSUIM := rgMoviDoli.ModlSuim;
  1257. rgDescPrpa.DEPPTERC := rgMoviDoli.ModlTerc;
  1258. rgDescPrpa.DEPPPIOB := rgMoviDoli.ModlPrin;
  1259. rgDescPrpa.DEPPCOMO := rgMoviDoli.ModlComo;
  1260. rgDescPrpa.DEPPPERI := VAR.tbMoviPago(biSe).sbPeriodo;
  1261. rgDescPrpa.DEPPLAPS := VAR.tbMoviPago(biSe).sbLapso;
  1262. rgDescPrpa.DEPPFECH := rgMoviDoli.ModlFech;
  1263. rgDescPrpa.DEPPVABA := 0;
  1264. rgDescPrpa.DEPPCANT := 0;
  1265. rgDescPrpa.DEPPVAUN := 0;
  1266. rgDescPrpa.DEPPFACT := 0;
  1267. rgDescPrpa.DEPPDEPE := 0;
  1268. rgDescPrpa.DEPPINPE := 0;
  1269. rgDescPrpa.DEPPDEVI := 0;
  1270. rgDescPrpa.DEPPINVI := 0;
  1271. rgDescPrpa.DEPPVPPE := VAR.tbMoviPago(biSe).inValoPago;
  1272. rgDescPrpa.DEPPVPVI := VAR.tbMoviPago(biSe).inValoPago;
  1273. rgDescPrpa.DEPPATVA := 0;
  1274. rgDescPrpa.DEPPATVN := 0;
  1275. rgDescPrpa.DEPPVAAN := 0;
  1276. rgDescPrpa.DEPPDEAN := 0;
  1277. rgDescPrpa.DEPPAJVV := 0;
  1278. rgDescPrpa.DEPPAJVP := 0;
  1279. rgDescPrpa.DEPPAJVA := 0;
  1280. --
  1281. IF (rgDescPrpa.DeppVppe != 0 OR rgDescPrpa.DeppVpvi != 0) THEN
  1282. PRO_ACTUALIZA_DESTO(0,rgDescPrpa.DeppPeri,rgConcMovi.ComoSecu);
  1283. END IF;
  1284. -- Calcular hasta donde pago
  1285. IF (rgConcMovi.ComoInte = 'C') THEN
  1286. VAR.sbPeriFisc := VAR.tbMoviPago(biSe).sbPeriodo;
  1287. VAR.sbLapsFisc := VAR.tbMoviPago(biSe).sbLapso;
  1288. VAR.feFechRefe := '01-01-'||VAR.sbPeriFisc;
  1289. VAR.sbConcMovi := VAR.tbMoviPago(biSe).sbConcepto;
  1290. VAR.inSecuComo := rgConcMovi.ComoSecu;
  1291. -- Cargar unidad de liquidacion por periodo
  1292. CARGA_UNIDLIQPER;
  1293. --
  1294. IF (VAR.tbMoviPago(biSe).sbTipoSuje = sbTisuPred) THEN
  1295. inBaseMens := (AFOROCONCE / CANTPERUNI) / UNIDADLIQU;
  1296. ELSE
  1297. inBaseMens := AFOROCONCE;
  1298. END IF;
  1299. --
  1300. inSaldDeud := SALDOCONCE - VAR.tbMoviPago(biSe).inValoPago;
  1301. inTotaMese := MESESFECHA(FECHDEBSAL(inBaseMens,inSaldDeud,NULL,1),VAR.feFechDocu,'N');
  1302. IF (VAR.sbPeriFisc = VAR.sbPeriMovi) THEN
  1303. IF (VAR.inNumeCuot = 0) THEN
  1304. feFechProD := '31-12-'||VAR.sbPeriFisc;
  1305. feFechProD := ADD_MONTHS(feFechProD,1);
  1306. ELSE
  1307. feFechProD := ADD_MONTHS('01-01-'||VAR.sbPeriFisc,(VAR.inNumeCuot+1) * UNIDADLIQU);
  1308. END IF;
  1309. END IF;
  1310. --
  1311. IF (inTotaMese > inSuimEdad) THEN
  1312. inSuimEdad := inTotaMese;
  1313. END IF;
  1314. END IF;
  1315. biSe := VAR.tbMoviPago.NEXT(biSe);
  1316. END LOOP;
  1317. feFechDebe := FECHAEDAD(feFechProD,inSuimEdad);
  1318. feFechDebe := ADD_MONTHS(feFechDebe,-1);
  1319. -- Consultar lapso de fecha pago hasta cuando es factura por abono
  1320. OPEN cuLapso(feFechDebe);
  1321. FETCH cuLapso INTO rgLapso;
  1322. boExito := cuLapso%FOUND;
  1323. CLOSE cuLapso;
  1324. --
  1325. IF (boExito) THEN
  1326. sbPeriFiDe := rgLapso.LapsPeri;
  1327. sbLapsFiDe := rgLapso.LapsLaps;
  1328. END IF;
  1329. END IF;
  1330. END IF;
  1331. -- Validar si no existe un valor a pagar de la vigencia menor a cero, lo cual puede
  1332. -- suceder en el caso que el descuento supere el valor a pagar de la vigencia
  1333. inVapaVige := 0.00;
  1334. biIn := VAR.tbDescPrpa.FIRST;
  1335. WHILE VAR.tbDescPrpa.EXISTS(biIn) LOOP
  1336. -- Total Vigencia
  1337. inVapaVige := inVapaVige + VAR.tbDescPrpa(biIn).DeppVpvi;
  1338. --
  1339. biIn := VAR.tbDescPrpa.NEXT(biIn);
  1340. END LOOP;
  1341. --========================================================================
  1342. -- Crear la factura
  1343. --========================================================================
  1344. biSe := tbMoviDoli.COUNT;
  1345. IF (tbMoviDoli.COUNT > 0 AND inVapaVige > 0) THEN
  1346. IF (VAR.inDlcuNufa IS NOT NULL AND VAR.inDlcuNufa > 0) THEN
  1347. rgDoliCuen.DLCUNUFA := VAR.inDlcuNufa;
  1348. END IF;
  1349.  
  1350. rgDoliCuen.DLCUTIEM := VAR.sbEmpresa;
  1351. rgDoliCuen.DLCUTIIM := VAR.sbTipoImpu;
  1352. rgDoliCuen.DLCUEMPR := VAR.sbEmpresa;
  1353. rgDoliCuen.DLCUTIDO := VAR.sbTidoFact;
  1354. rgDoliCuen.DLCUNUME := inNumeDocu;
  1355. rgDoliCuen.DLCUFECH := VAR.feFechDocu;
  1356. rgDoliCuen.DLCUFEVE := VAR.feFechVenc;
  1357. rgDoliCuen.DLCUFVSR := NVL(VAR.feFechPago,VAR.feFechVenc);
  1358. rgDoliCuen.DLCUDIEM := VAR.sbEmpresa;
  1359. rgDoliCuen.DLCUDIVI := VAR.sbDivision;
  1360. rgDoliCuen.DLCUPERI := rgLapsDocu.LapsPeri;
  1361. rgDoliCuen.DLCULAPS := rgLapsDocu.LapsLaps;
  1362. rgDoliCuen.DLCUTISI := VAR.sbTipoSuje;
  1363. rgDoliCuen.DLCUSUIM := VAR.sbSujeImpu;
  1364. rgDoliCuen.DLCUVAFA := inTotaDocu;
  1365. rgDoliCuen.DLCUVATA := inTotaDocu;
  1366. rgDoliCuen.DLCUSALD := inTotaDocu;
  1367. rgDoliCuen.DLCUFEVD := VAR.feFechDocu;
  1368. rgDoliCuen.DLCUPEID := sbPeriInDe;
  1369. rgDoliCuen.DLCULAID := sbLapsInDe;
  1370. rgDoliCuen.DLCUPEFD := sbPeriFiDe;
  1371. rgDoliCuen.DLCULAFD := sbLapsFiDe;
  1372. IF (VAR.inNumeLote IS NULL) THEN
  1373. VAR.inNumeLote := pkgNumerado.fun_ProximoNumero(sbNumeLofa,'C');
  1374. END IF;
  1375. rgDoliCuen.DLCULOTE := VAR.inNumeLote;
  1376. IF (VAR.rgSujeImpu.SuimTerc IS NOT NULL) THEN
  1377. rgDoliCuen.DLCUTERC := VAR.rgSujeImpu.SuimTerc;
  1378. ELSE
  1379. rgDoliCuen.DLCUTERC := VAR.sbTercero;
  1380. END IF;
  1381. rgDoliCuen.DLCUESTA := VAR.sbEstaActi;
  1382. -- Asigna proyecto
  1383. IF (VAR.sbProyInve = '%') THEN
  1384. rgDoliCuen.DLCUPRIN := VAR.sbCaraNulo;
  1385. ELSE
  1386. rgDoliCuen.DLCUPRIN := VAR.sbProyInve;
  1387. END IF;
  1388. rgDoliCuen.DLCUDAEM := NULL;
  1389. rgDoliCuen.DLCUDATD := NULL;
  1390. rgDoliCuen.DLCUDAVN := NULL;
  1391. rgDoliCuen.DLCUDAND := NULL;
  1392. rgDoliCuen.DLCUOBSE := VAR.sbObseDocu;
  1393. rgDoliCuen.DLCUVADE := 0;
  1394. -- Define si es una factura por abono
  1395. IF (VAR.sbPeriInic IS NOT NULL OR NVL(VAR.inValoMovi,0) > 0 OR NVL(VAR.inNumeCuot,0) > 0) THEN
  1396. rgDoliCuen.DLCUFATO := 'N';
  1397. ELSE
  1398. rgDoliCuen.DLCUFATO := 'S';
  1399. END IF;
  1400. --
  1401. rgDoliCuen.DLCUVAPA := 0;
  1402. rgDoliCuen.DLCUVAFA := 0;
  1403. rgDoliCuen.DLCUVATA := 0;
  1404. rgDoliCuen.DLCUSALD := 0;
  1405. rgDoliCuen.DLCUVAPE := 0;
  1406. rgDoliCuen.DLCUAVFI := 0;
  1407. rgDoliCuen.DLCUBAGR := 0;
  1408. rgDoliCuen.DLCUNUCI := 0;
  1409. rgDoliCuen.DLCUFEPA := NULL;
  1410. rgDoliCuen.DLCUAPEM := NULL;
  1411. rgDoliCuen.DLCUAPTD := NULL;
  1412. rgDoliCuen.DLCUAPND := NULL;
  1413. rgDoliCuen.DLCUNUCU := NVL(VAR.inNumeCuot,0);
  1414. -- Inactiva La Factura Anterior
  1415. IF (NVL(VAR.sbAnulFaan,'N') = 'S') THEN
  1416. UPDATE DoliCuen
  1417. SET DlcuEsta = VAR.sbEstaInac
  1418. WHERE DlcuTisi = rgDoliCuen.DLCUTISI
  1419. AND DlcuSuim = rgDoliCuen.DLCUSUIM
  1420. AND DlcuPrin = rgDoliCuen.DLCUPRIN
  1421. AND DlcuEsta = VAR.sbEstaActi
  1422. AND DlcuEmpr = rgDoliCuen.DLCUEMPR
  1423. AND DlcuTido = rgDoliCuen.DLCUTIDO
  1424. AND DlcuNume < rgDoliCuen.DLCUNUME
  1425. AND DlcuTiem = rgDoliCuen.DLCUTIEM
  1426. AND DlcuTiim = rgDoliCuen.DLCUTIIM;
  1427. END IF;
  1428. -- Crear documento
  1429. pkgDoliCuen.pro_Crear(rgDoliCuen);
  1430. -- Incrementar numeracion de facturas
  1431. IF (rgTipoDocu.NumeUsse = 'N') THEN
  1432. UPDATE Numerado
  1433. SET NumePrnu = NumePrnu + 1
  1434. WHERE NumeCodi = sbNumeDocu;
  1435. END IF;
  1436. --
  1437. VAR.inNumeFact := 0;
  1438. --========================================================================
  1439. -- Armar movimiento de factura
  1440. --========================================================================
  1441. rgMoviDoli.MODLTIEM := rgDoliCuen.DlcuTiem;
  1442. rgMoviDoli.MODLTIIM := rgDoliCuen.DlcuTiim;
  1443. rgMoviDoli.MODLDLEM := rgDoliCuen.DlcuEmpr;
  1444. rgMoviDoli.MODLDLTD := rgDoliCuen.DlcuTido;
  1445. rgMoviDoli.MODLDLND := rgDoliCuen.DlcuNume;
  1446. rgMoviDoli.MODLFECH := rgDoliCuen.DlcuFech;
  1447. rgMoviDoli.MODLPERI := rgDoliCuen.DlcuPeri;
  1448. rgMoviDoli.MODLLAPS := rgDoliCuen.DlcuLaps;
  1449. rgMoviDoli.MODLTISI := rgDoliCuen.DlcuTisi;
  1450. rgMoviDoli.MODLSUIM := rgDoliCuen.DlcuSuim;
  1451. rgMoviDoli.MODLESTA := rgDoliCuen.DlcuEsta;
  1452. rgMoviDoli.MODLTERC := rgDoliCuen.DlcuTerc;
  1453. rgMoviDoli.MODLPRIN := rgDoliCuen.DlcuPrin;
  1454. rgMoviDoli.MODLCOMO := NULL;
  1455. rgMoviDoli.MODLINT1 := 0;
  1456. rgMoviDoli.MODLINT2 := 0;
  1457. rgMoviDoli.MODLINT3 := 0;
  1458. rgMoviDoli.MODLTALI := 0;
  1459. biSe := tbMoviDoli.FIRST;
  1460. WHILE tbMoviDoli.EXISTS(biSe) LOOP
  1461. IF (tbMoviDoli(bise).ModlSald != 0 OR
  1462. tbMoviDoli(biSe).ModlVaan != 0) THEN
  1463. rgMoviDoli.MODLCOMO := tbMoviDoli(bise).ModlComo;
  1464. rgMoviDoli.MODLPERI := tbMoviDoli(bise).ModlPeri;
  1465. rgMoviDoli.MODLVAPF := tbMoviDoli(bise).ModlVapf;
  1466. rgMoviDoli.MODLAAAN := tbMoviDoli(bise).ModlAaan;
  1467. rgMoviDoli.MODLAAAC := tbMoviDoli(bise).ModlAaac;
  1468. rgMoviDoli.MODLVAAC := tbMoviDoli(bise).ModlVaac;
  1469. rgMoviDoli.MODLVADE := tbMoviDoli(bise).ModlVade;
  1470. rgMoviDoli.MODLVAAN := tbMoviDoli(bise).ModlVaan;
  1471. rgMoviDoli.MODLVAPA := tbMoviDoli(bise).ModlVapa;
  1472. rgMoviDoli.MODLSALD := tbMoviDoli(bise).ModlSald;
  1473. rgMoviDoli.MODLTALI := tbMoviDoli(bise).ModlTali;
  1474. -- Crear registro
  1475. boExito := pkgMoviDoli.funCrear_Movi(rgMoviDoli);
  1476. END IF;
  1477. biSe := tbMoviDoli.NEXT(biSe);
  1478. END LOOP;
  1479. -- Generar descuentos por pronto pago y liquidacion de intereses proyectados
  1480. inSecuMovi := 0;
  1481. biIn := VAR.tbDescPrpa.FIRST;
  1482. WHILE VAR.tbDescPrpa.EXISTS(biIn) LOOP
  1483. inSecuMovi := inSecuMovi + 1;
  1484. --
  1485. rgDescPrpa.DeppTiem := VAR.tbDescPrpa(biIn).DeppTiem;
  1486. rgDescPrpa.DeppTiim := VAR.tbDescPrpa(biIn).DeppTiim;
  1487. rgDescPrpa.DeppDlem := VAR.tbDescPrpa(biIn).DeppDlem;
  1488. rgDescPrpa.DeppDltd := VAR.tbDescPrpa(biIn).DeppDltd;
  1489. rgDescPrpa.DeppDlnd := VAR.tbDescPrpa(biIn).DeppDlnd;
  1490. rgDescPrpa.DeppEsta := VAR.tbDescPrpa(biIn).DeppEsta;
  1491. rgDescPrpa.DeppTisi := VAR.tbDescPrpa(biIn).DeppTisi;
  1492. rgDescPrpa.DeppSuim := VAR.tbDescPrpa(biIn).DeppSuim;
  1493. -- Asignacion del tercero diferente a punto cuando no maneja saldos por tercero
  1494. -- de manera informativa para visualizar al momento del pago manual
  1495. IF (UPPER(VAR.sbSaldTerc) = 'N' AND VAR.tbDescPrpa(biIn).DeppTerc = pkgConstantes.sbCaraNull) THEN
  1496. rgDescPrpa.DeppTerc := rgDoliCuen.DlcuTerc;
  1497. ELSE
  1498. rgDescPrpa.DeppTerc := VAR.tbDescPrpa(biIn).DeppTerc;
  1499. END IF;
  1500. --
  1501. rgDescPrpa.DeppPiob := VAR.tbDescPrpa(biIn).DeppPiob;
  1502. rgDescPrpa.DeppPeri := VAR.tbDescPrpa(biIn).DeppPeri;
  1503. rgDescPrpa.DeppLaps := VAR.tbDescPrpa(biIn).DeppLaps;
  1504. rgDescPrpa.DeppVaba := VAR.tbDescPrpa(biIn).DeppVaba;
  1505. rgDescPrpa.DeppCant := VAR.tbDescPrpa(biIn).DeppCant;
  1506. rgDescPrpa.DeppVaun := VAR.tbDescPrpa(biIn).DeppVaun;
  1507. --
  1508. rgDescPrpa.deppsecu := inSecuMovi;
  1509. rgDescPrpa.deppcomo := VAR.tbDescPrpa(biIn).DeppComo;
  1510. rgDescPrpa.deppfech := VAR.tbDescPrpa(biIn).DeppFech;
  1511. rgDescPrpa.deppfact := VAR.tbDescPrpa(biIn).DeppFact;
  1512. -- Periodo
  1513. rgDescPrpa.deppdepe := VAR.tbDescPrpa(biIn).DeppDepe;
  1514. rgDescPrpa.deppinpe := VAR.tbDescPrpa(biIn).DeppInpe;
  1515. rgDescPrpa.deppvppe := VAR.tbDescPrpa(biIn).DeppVppe;
  1516. -- Total Vigencia
  1517. rgDescPrpa.deppdevi := VAR.tbDescPrpa(biIn).DeppDevi;
  1518. rgDescPrpa.deppinvi := VAR.tbDescPrpa(biIn).DeppInvi;
  1519. rgDescPrpa.deppvpvi := VAR.tbDescPrpa(biIn).DeppVpvi;
  1520. rgDescPrpa.DeppOppa := VAR.tbDescPrpa(biIn).DeppOppa;
  1521. rgDescPrpa.DEPPATVA := VAR.tbDescPrpa(biIn).DEPPATVA;
  1522. rgDescPrpa.DEPPATVN := VAR.tbDescPrpa(biIn).DEPPATVN;
  1523. rgDescPrpa.DEPPVAAN := VAR.tbDescPrpa(biIn).DEPPVAAN;
  1524. rgDescPrpa.DEPPDEAN := VAR.tbDescPrpa(biIn).DEPPDEAN;
  1525. rgDescPrpa.DEPPAJVV := VAR.tbDescPrpa(biIn).DEPPAJVV;
  1526. rgDescPrpa.DEPPAJVP := VAR.tbDescPrpa(biIn).DEPPAJVP;
  1527. rgDescPrpa.DEPPAJVA := VAR.tbDescPrpa(biIn).DEPPAJVA;
  1528. -- Crea el Registro
  1529. pkgDescPrpa.pro_Crear(rgDescPrpa);
  1530. --
  1531. biIn := VAR.tbDescPrpa.NEXT(biIn);
  1532. END LOOP;
  1533. VAR.feFechMovi := VAR.feFechApli;
  1534. sbMarcFact := 'FACT-'||TO_CHAR(VAR.feFechMovi,'DD-MM-YYYY');
  1535. END IF;
  1536. END IF;
  1537. -- Calcular edad de la deuda
  1538. feFechDebe := DEBEDESDE(VAR.sbEmpresa, VAR.sbTipoImpu,
  1539. VAR.sbTipoSuje, VAR.sbSujeImpu,
  1540. VAR.sbTercero, VAR.sbProyInve,
  1541. VAR.feFechDocu,'S');
  1542. IF (feFechDebe IS NOT NULL) THEN
  1543. -- Calcular datos para actualizar sujetos
  1544. sbPeriDebe := PERIOFECHA(feFechDebe);
  1545. sbLapsDebe := MESFECHA(feFechDebe);
  1546. inEdadDeud := MESESFECHA(feFechDebe,VAR.feFechDocu,'M');
  1547. inEdadDeud := FLOOR(inEdadDeud/UNIDADLIQU);
  1548. -- Consultar lapso de fecha debe
  1549. OPEN cuLapso(feFechDebe);
  1550. FETCH cuLapso INTO rgLapso;
  1551. boExito := cuLapso%FOUND;
  1552. CLOSE cuLapso;
  1553. --
  1554. IF (boExito) THEN
  1555. sbPeriInDe := rgLapso.LapsPeri;
  1556. sbLapsInDe := rgLapso.LapsLaps;
  1557. ELSE
  1558. sbPeriInDe := VAR.sbCaraNulo;
  1559. sbLapsInDe := VAR.sbCaraNulo;
  1560. END IF;
  1561. -- Actualizar edad de la deuda en factura
  1562. UPDATE DoliCuen
  1563. SET DlcuPeid = sbPeriInDe,
  1564. DlcuLaid = sbLapsInDe
  1565. WHERE DlcuTiem = rgDoliCuen.DLCUTIEM AND
  1566. DlcuTiim = rgDoliCuen.DLCUTIIM AND
  1567. DlcuEmpr = rgDoliCuen.DLCUEMPR AND
  1568. DlcuTido = rgDoliCuen.DLCUTIDO AND
  1569. DlcuNume = rgDoliCuen.DLCUNUME;
  1570. --
  1571. END IF;
  1572. -- Marcar sujeto con marca de facturacion
  1573. UPDATE SUJEIMPU
  1574. SET SuimEdad = inEdadDeud, SuimPedd = sbPeriDebe, SuimLadd = sbLapsDebe, SuimMafa = sbMarcFact
  1575. WHERE SuimTisi = VAR.sbTipoSuje AND
  1576. SuimSuim = VAR.sbSujeImpu;
  1577. --
  1578. COMMIT;
  1579. -- Liberar la memoria
  1580. IF (NVL(VAR.sbSuimInic,'%') != '%' AND NVL(VAR.sbSuimInic,'%') = NVL(VAR.sbSuimFina,'%') AND INSTR(VAR.sbSuimInic,'%') = 0) THEN
  1581. VAR.sbPeriInic := NULL;
  1582. VAR.sbLapsInic := NULL;
  1583. VAR.sbPeriFina := NULL;
  1584. VAR.sbLapsFina := NULL;
  1585. END IF;
  1586. --
  1587. VAR.inValoMovi := 0;
  1588. VAR.inNumeCuot := 0;
  1589. --
  1590. LIBERA_MEMORIA;
  1591. -- Recuperacion de las variables temporales y asignarlas tal como fueron enviadas desde IGFA
  1592. VAR.sbEmpresa := sbEmprCodi;
  1593. VAR.sbTipoImpu := sbTipoImpu;
  1594. VAR.sbTipoSuje := sbTipoSuje;
  1595. VAR.sbSujeImpu := sbSujeImpu;
  1596. VAR.sbSuimInic := sbSuimInic;
  1597. VAR.sbSuimFina := sbSuimFina;
  1598. VAR.sbTercero := sbTercero;
  1599. VAR.sbProyInve := sbProyInve;
  1600. VAR.sbPeriMovi := sbPeriMovi;
  1601. VAR.sbVigeDocu := sbVigeDocu;
  1602. VAR.sbLapsMovi := sbLapsMovi;
  1603. VAR.sbTidoFact := sbTidoFact;
  1604. VAR.feFechDocu := feFechDocu;
  1605. VAR.feFechMovi := feFechMovi;
  1606. VAR.feFechVenc := feFechVenc;
  1607. VAR.feFechCort := feFechCort;
  1608. VAR.feFechPago := feFechPago;
  1609. VAR.inValoMovi := inValoMovi;
  1610. VAR.sbObseDocu := sbObseDocu;
  1611. VAR.sbAbonGrav := sbAbonGrav;
  1612. VAR.sbCancGrav := sbCancGrav;
  1613. VAR.sbConcRefe := sbConcRefe;
  1614. VAR.sbTipoDocu := sbTipoDocu;
  1615. VAR.sbProyInte := sbProyInte;
  1616. VAR.sbDeudActu := sbDeudActu;
  1617. VAR.sbCargVafa := sbCargVafa;
  1618. VAR.sbMarcFact := sbMarcFati;
  1619. VAR.inNumeLote := inNumeLote;
  1620.  
  1621. VAR.sbPeriInic := sbPeinCrfa;
  1622. VAR.sbLapsInic := sbLainCrfa;
  1623. VAR.sbPeriFina := sbPefiCrfa;
  1624. VAR.sbLapsFina := sbLafiCrfa;
  1625. VAR.inNumeCuot := inNumeCrfa;
  1626.  
  1627. VAR.inNumeInic := inNumeInic;
  1628. VAR.inNumeFina := inNumeFina;
  1629. -- Fin de bloque de recuperacion de las variables
  1630. /*
  1631. Historia de Modificaciones
  1632. Autor Fecha Descripcion
  1633. --------------------------------------------------------------------
  1634. CCH070 30-06-2009 Al abrir el curso cuLapso se agrego TRUNC en el parametro
  1635. puesto que por redondeo de fechas no encontraba el lapso
  1636. para la fecha de la factura aunque en MLAP estaba configurado
  1637. --------------------------------------------------------------------
  1638. CCH070 01-10-2008 Se modifica asignacion de sbPeriInic con VAR.sbPeriFina a VAR.sbPeriInic
  1639. en el caso de ser una factura parcial por peridoos y cuota sin valor de pago definido,
  1640. anteriomentesolo se generaba con los saldos para el periodo final ahora
  1641. se toman todos los saldos desde elperiodo inicial hasta el final pero en este
  1642. ultimo solo los que estan hasta la cuota definida.
  1643. --------------------------------------------------------------------
  1644. CCH070 02-04-2007 Se agrega variable feFechVeDe con la que valida si la fecha de
  1645. vencimiento dada para para factura es menor que la configurada en
  1646. MTIL en el parametro FECHVENC, en cuyo caso la factura se genera con una
  1647. sola opcion de pago correspondiente a esta fecha
  1648. */
  1649. END GENERA_FACTURA;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement