Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- create or replace PROCEDURE GENERA_FACTURA
- IS
- /*******************************************************************
- FUNCION : GENERA_FACTURA
- AUTOR :
- FECHA :
- DESCRIPCION : Generacion de factura de predial
- PARAMETROS :
- Historia de Modificaciones
- Autor Fecha Descripcion
- ------------------------------------------
- CCH070 06-OCT-2010 Se agrega la asignacion del numero unico de factura
- cuando este ya este inicializado.
- ********************************************************************/
- -- Define modelo de facturacion
- sbModelo VARCHAR2(20) := 'CUOTA-ANUAL';
- -- Define si maneja concepto de cuota mensual
- sbMacoCume PARAOPER.ParaCova%TYPE := 'S';
- -- Cursor a periodos
- CURSOR cuPeriodo(sbPeriCodi PERIODO.PeriCodi%TYPE) IS
- SELECT * FROM Periodo
- WHERE PeriCodi = sbPeriCodi;
- -- Tabla de descuentos
- CURSOR cuTablLipa(sbTabla VARCHAR2, sbCodigo VARCHAR2, feFechRefe DATE, sbPrin VARCHAR2) IS
- SELECT TaliSecu Opcion, TaliFein FechInic,TaliFefi FechFina,TaliValo Valor, PaliTida TipoValo FROM TablLiqu,ParaLiqu
- WHERE PaliCodi = TaliPlco AND PaliIdco = TaliCoid AND
- PaliIdnv = TaliConv AND TaliPlco = sbTabla AND
- (((NVL(sbPrin,'.') = '.' OR sbPrin = '%') AND TaliCoal IS NULL) OR (sbPrin IS NOT NULL AND INSTR(sbPrin,TaliCoal) != 0)) AND
- TaliCodi = sbCodigo AND feFechRefe BETWEEN TaliFein AND TaliFefi
- ORDER BY TaliFein;
- -- Cursor a tipo de documento y numerador asociado
- CURSOR cuTipoDocu(sbTidoEmpr TIPODOCU.TidoEmpr%TYPE,
- sbTidoTido TIPODOCU.TidoTido%TYPE) IS
- SELECT * FROM TipoDocu,Numerado
- WHERE TidoEmpr = sbTidoEmpr AND TidoTido = sbTidoTido AND
- NumeCodi = TidoNume;
- -- Cursor a lapso por fecha
- CURSOR cuLapso(feFecha LAPSO.LapsFein%TYPE) IS
- SELECT * FROM Lapso
- WHERE feFecha BETWEEN LapsFein AND LapsFefi AND LapsLaps != VAR.sbLapsCero;
- -- Cursor a conceptos de movimiento
- CURSOR cuConcMovi(sbComoCodi VARCHAR2) IS
- SELECT * FROM ConcMovi
- WHERE ComoCodi = sbComoCodi;
- -- Cursor a datos del proyecto de valorizacion obra predio
- CURSOR cuPiobSuim(sbTisi VARCHAR2, sbSuim VARCHAR2, sbPiob VARCHAR2) IS
- SELECT * FROM PiobSuim
- WHERE PosiTisi = sbTisi AND PosiSuim = sbSuim AND PosiPiob = sbPiob
- AND PosiVaco > 0 AND PosiCume > 0
- AND PosiEsta = pkgConstantes.sbEstaActi;
- -- Cursor para validar si el concepto es cuota inicial
- CURSOR cuComoCuin IS
- SELECT * FROM TimoOper
- WHERE TmopTimo = VAR.rgConcMovi.ComoTimo AND TmopOper = 'CUOTINIC';
- -- Cursor a datos del tipo de informacion
- CURSOR cuSuimTiin(sbEmpr VARCHAR2, sbTiim VARCHAR2, sbTisi VARCHAR2, sbSuim VARCHAR2, sbTerc VARCHAR2, sbPiob VARCHAR2,
- sbTiin VARCHAR2, sbPeri VARCHAR2, sbLaps VARCHAR2) IS
- SELECT * FROM SuimTiin
- WHERE SutiTiem = sbEmpr AND SutiTiim = sbTiim AND SutiTisi = sbTisi AND SutiSuim = sbSuim
- AND SutiPrin = sbPiob AND SutiTerc LIKE sbTerc AND SutiTiin = sbTiin
- AND SutiPeri = sbPeri AND SutiLaps = sbLaps;
- -- Cursor a datos del tipo de informacion
- CURSOR cuInteCorr(sbEmpr VARCHAR2, sbTiim VARCHAR2, sbTisi VARCHAR2, sbSuim VARCHAR2, sbTerc VARCHAR2, sbPiob VARCHAR2, sbComo VARCHAR2, feFeco DATE) IS
- SELECT
- NVL(SUM(DECODE(AjssSign,'+',DECODE(SIGN(AjssFech-feFeco),-1,AjssValo,0),0)),0) DebiAnte,
- NVL(SUM(DECODE(AjssSign,'-',DECODE(SIGN(AjssFech-feFeco),-1,AjssValo,0),0)),0) CredAnte,
- NVL(SUM(DECODE(AjssSign,'+',DECODE(SIGN(AjssFech-feFeco),-1,0,AjssValo),0)),0) DebiActu,
- NVL(SUM(DECODE(AjssSign,'-',DECODE(SIGN(AjssFech-feFeco),-1,0,AjssValo),0)),0) CredActu
- FROM AjusSasi
- WHERE AjssTiem = sbEmpr AND AjssTiim = sbTiim AND AjssTisi = sbTisi AND AjssSuim = sbSuim AND AjssPiob = sbPiob AND AjssTerc LIKE sbTerc AND AjssComo = sbComo;
- -- Cursor para validar si el concepto es cuota inicial
- CURSOR cuComoOper(sbOperacio VARCHAR2) IS
- SELECT * FROM TimoOper
- WHERE TmopTimo = VAR.rgConcMovi.ComoTimo AND TmopOper = sbOperacio;
- -- Variables
- biSe BINARY_INTEGER := 0;
- biIn BINARY_INTEGER := 0;
- biMo BINARY_INTEGER := 0;
- boExito BOOLEAN;
- boExiste BOOLEAN;
- boExisAfor BOOLEAN;
- boDeudAnte BOOLEAN;
- boCuotInic BOOLEAN;
- boCuotaMes BOOLEAN;
- sbCouaPeri VARCHAR2(2);
- sbMarcFact SUJEIMPU.SuimMafa%TYPE;
- sbContSate VARCHAR2(2);
- inOpciPago NUMBER(2);
- inSecuMovi NUMBER(9) := 0;
- sbTablLipa VARCHAR2(8);
- sbPeriDebe LAPSO.LapsPeri%TYPE;
- sbLapsDebe LAPSO.LapsLaps%TYPE;
- sbFechVeDe VARCHAR2(20);
- inEdadDeud NUMBER(4) := 0;
- sbNumeLofa VARCHAR2(4);
- sbTidiPago VARCHAR2(2);
- inValoCuot AJUSSASI.AjssValo%TYPE := 0.00;
- inIntePeri AJUSSASI.AjssValo%TYPE := 0.00;
- inInteVige AJUSSASI.AjssValo%TYPE := 0.00;
- inDescPeri AJUSSASI.AjssValo%TYPE := 0.00;
- inDescVige AJUSSASI.AjssValo%TYPE := 0.00;
- inTotaDocu SALDSUIM.SasiDefi%TYPE := 0.00;
- inTotaPago SALDSUIM.SasiDefi%TYPE := 0.00;
- inVapaVige SALDSUIM.SasiDefi%TYPE := 0.00;
- inValoPago AJUSSASI.AjssValo%TYPE := 0.00;
- inSaldDeud AJUSSASI.AjssValo%TYPE := 0.00;
- inBaseMens AJUSSASI.AjssValo%TYPE := 0.00;
- inNumeDocu DOLICUEN.DlcuNume%TYPE;
- inProxNume DOLICUEN.DlcuNume%TYPE;
- feFechPeri DOLICUEN.DlcuFech%TYPE;
- feFechProy DOLICUEN.DlcuFech%TYPE;
- feFechProD DOLICUEN.DlcuFech%TYPE;
- feFechDebe DOLICUEN.DlcuFech%TYPE;
- feFechVeDe DOLICUEN.DlcuFech%TYPE; --Fecha de vencimiento por default, parametrizado en MtilW
- sbNumeDocu TIPODOCU.TidoNume%TYPE;
- inSuimEdad SUJEIMPU.SuimEdad%TYPE;
- sbRequPrin VARCHAR2(2);
- sbFactAmor VARCHAR2(2);
- inNumeCuot NUMBER(6);
- inTotaMese NUMBER(6);
- sbPeriInic PERIODO.PeriCodi%TYPE;
- sbPeriFina PERIODO.PeriCodi%TYPE;
- sbPeriInDe LAPSO.LapsPeri%TYPE;
- sbLapsInDe LAPSO.LapsLaps%TYPE;
- sbPeriFiDe LAPSO.LapsPeri%TYPE;
- sbLapsFiDe LAPSO.LapsLaps%TYPE;
- sbDetaFact PARAOPER.ParaCova%TYPE;
- sbDeudOppa PARAOPER.ParaCova%TYPE;
- feMaxiFech PERIODO.PeriFein%TYPE;
- feFeinPeri PERIODO.PeriFein%TYPE;
- feFefiPeri PERIODO.PeriFefi%TYPE;
- tbMoviDoli VAR.tyMoviDoli;
- tbMoviTemp VAR.tyMoviDoli;
- tbDescTemp VAR.tyDescPrpa;
- inMODLAAAC MOVIDOLI.MODLAAAC%TYPE;
- inMODLVAPF MOVIDOLI.MODLVAPF%TYPE;
- sbTisuPred SUJEIMPU.SuimTisi%TYPE;
- -- Variables de proyeccion de deuda
- inSaldFina NUMBER := 0;
- inPlazo NUMBER(4);
- inTasaFina NUMBER;
- feFechIncr DATE;
- rgPeriodo cuPeriodo%ROWTYPE;
- rgTipoDocu cuTipoDocu%ROWTYPE;
- rgConcMovi cuConcMovi%ROWTYPE;
- rgLapso cuLapso%ROWTYPE;
- rgLapsDocu cuLapso%ROWTYPE;
- rgLapsFina cuLapso%ROWTYPE;
- rgDoliCuen DOLICUEN%ROWTYPE;
- rgMoviDoli MOVIDOLI%ROWTYPE;
- rgDescPrpa DESCPRPA%ROWTYPE;
- rgPiobSuim PIOBSUIM%ROWTYPE;
- rgTimoOper TIMOOPER%ROWTYPE;
- rgSuimTiin SUIMTIIN%ROWTYPE;
- rgInteCorr cuInteCorr%ROWTYPE;
- -- Variables temporales que seran recibidas desde el proceso en IGFA
- sbEmprCodi EMPRESA.EmprCodi%TYPE;
- sbTipoImpu TIPOIMPU.TiimTiim%TYPE;
- sbTipoSuje TIPOSUIM.TisiCodi%TYPE;
- sbSujeImpu SUJEIMPU.SuimSuim%TYPE;
- sbSuimInic SUJEIMPU.SuimSuim%TYPE;
- sbSuimFina SUJEIMPU.SuimSuim%TYPE;
- sbTercero TERCERO.TercCodi%TYPE;
- sbProyInve PRINOBRA.PiobCodi%TYPE;
- sbPeriMovi PERIODO.PeriCodi%TYPE;
- sbVigeDocu PERIODO.PeriCodi%TYPE;
- sbLapsMovi LAPSO.LapsLaps%TYPE;
- sbTidoFact TIPODOCU.TidoTido%TYPE;
- sbConcRefe CONCMOVI.ComoCodi%TYPE;
- sbTipoDocu TIPODOCU.TidoTido%TYPE;
- sbProyInte PRINOBRA.PiobCodi%TYPE;
- sbMarcFati SUJEIMPU.SuimMafa%TYPE;
- sbPeinCrfa PERIODO.PeriCodi%TYPE;
- sbLainCrfa LAPSO.LapsLaps%TYPE;
- sbPefiCrfa PERIODO.PeriCodi%TYPE;
- sbLafiCrfa LAPSO.LapsLaps%TYPE;
- inValoMovi AJUSSASI.AjssValo%TYPE;
- inNumeLote DOLICUEN.DlcuLote%TYPE;
- feFechDocu DATE;
- feFechMovi DATE;
- feFechVenc DATE;
- feFechCort DATE;
- feFechPago DATE;
- inNumeCrfa NUMBER(4);
- inNumeInic NUMBER(9);
- inNumeFina NUMBER(9);
- sbObseDocu VARCHAR2(255);
- sbAbonGrav VARCHAR2(1);
- sbCancGrav VARCHAR2(1);
- sbDeudActu VARCHAR2(1);
- sbCargVafa VARCHAR2(1);
- -- Fin de bloque de variables temporales que son enviadas desde IGFA
- -- Tabla de opciones y factores de descuento
- TYPE ST_OPCIDESC IS RECORD
- (
- inOpciPago DESCPRPA.DeppOppa%TYPE,
- feFechInic DESCPRPA.DeppFech%TYPE,
- feFechFina DESCPRPA.DeppFech%TYPE,
- feFechVenc DESCPRPA.DeppFech%TYPE,
- inFactor DESCPRPA.DeppFact%TYPE
- );
- TYPE tyOpciDesc IS TABLE OF ST_OPCIDESC INDEX BY BINARY_INTEGER;
- tbOpciDesc tyOpciDesc;
- -- Tabla de periodos de liquidacion de descuentos y proyeccion de intereses
- TYPE ST_PERILIQU IS RECORD
- (
- sbPeriFisc LAPSO.LapsPeri%TYPE,
- sbLapsFisc LAPSO.LapsLaps%TYPE,
- feFechInic LAPSO.LapsFein%TYPE
- );
- TYPE tyPeriLiqu IS TABLE OF ST_PERILIQU INDEX BY BINARY_INTEGER;
- tbPeriLiqu tyPeriLiqu;
- -- Tabla de periodos facturados
- TYPE ST_PERIFACT IS RECORD
- (
- sbPeriFisc LAPSO.LapsPeri%TYPE,
- inValoFact AJUSSASI.AjssValo%TYPE
- );
- TYPE tyPeriFact IS TABLE OF ST_PERIFACT INDEX BY BINARY_INTEGER;
- tbPeriFact tyPeriFact;
- -- Procedimiento de actualizacion de movimientos
- PROCEDURE PRO_ACTUALIZA_MOVTO(sbPeriodo VARCHAR2,inComoSecu NUMBER)
- IS
- biMo BINARY_INTEGER := 0;
- biOp BINARY_INTEGER := 0;
- BEGIN
- --
- biMo := TO_NUMBER(sbPeriodo||TO_CHAR(inComoSecu));
- IF NOT (VAR.tbMoviDoli.EXISTS(biMo)) THEN
- VAR.tbMoviDoli(biMo).ModlDlem := rgMoviDoli.MODLDLEM;
- VAR.tbMoviDoli(biMo).ModlDltd := rgMoviDoli.MODLDLTD;
- VAR.tbMoviDoli(biMo).ModlDlnd := rgMoviDoli.MODLDLND;
- VAR.tbMoviDoli(biMo).ModlTiem := rgMoviDoli.MODLTIEM;
- VAR.tbMoviDoli(biMo).ModlTiim := rgMoviDoli.MODLTIIM;
- VAR.tbMoviDoli(biMo).ModlTisi := rgMoviDoli.MODLTISI;
- VAR.tbMoviDoli(biMo).ModlSuim := rgMoviDoli.MODLSUIM;
- VAR.tbMoviDoli(biMo).ModlTerc := rgMoviDoli.MODLTERC;
- VAR.tbMoviDoli(biMo).ModlPrin := rgMoviDoli.MODLPRIN;
- VAR.tbMoviDoli(biMo).ModlPeri := rgMoviDoli.MODLPERI;
- VAR.tbMoviDoli(biMo).ModlComo := rgMoviDoli.MODLCOMO;
- VAR.tbMoviDoli(biMo).ModlTali := NVL(rgMoviDoli.MODLTALI,0);
- VAR.tbMoviDoli(biMo).ModlVaba := NVL(rgMoviDoli.MODLVABA,0);
- VAR.tbMoviDoli(biMo).ModlVapf := rgMoviDoli.MODLVAPF;
- VAR.tbMoviDoli(biMo).ModlAaan := rgMoviDoli.MODLAAAN;
- VAR.tbMoviDoli(biMo).ModlAaac := rgMoviDoli.MODLAAAC;
- VAR.tbMoviDoli(biMo).ModlVaac := rgMoviDoli.MODLVAAC;
- VAR.tbMoviDoli(biMo).ModlVade := rgMoviDoli.MODLVADE;
- VAR.tbMoviDoli(biMo).ModlVaan := rgMoviDoli.MODLVAAN;
- VAR.tbMoviDoli(biMo).ModlVapa := rgMoviDoli.MODLVAPA;
- VAR.tbMoviDoli(biMo).ModlSald := rgMoviDoli.MODLSALD;
- ELSE
- VAR.tbMoviDoli(biMo).ModlVapf := VAR.tbMoviDoli(biMo).ModlVapf + rgMoviDoli.MODLVAPF;
- VAR.tbMoviDoli(biMo).ModlAaan := VAR.tbMoviDoli(biMo).ModlAaan + rgMoviDoli.MODLAAAN;
- VAR.tbMoviDoli(biMo).ModlAaac := VAR.tbMoviDoli(biMo).ModlAaac + rgMoviDoli.MODLAAAC;
- VAR.tbMoviDoli(biMo).ModlVaac := VAR.tbMoviDoli(biMo).ModlVaac + rgMoviDoli.MODLVAAC;
- VAR.tbMoviDoli(biMo).ModlVade := VAR.tbMoviDoli(biMo).ModlVade + rgMoviDoli.MODLVADE;
- VAR.tbMoviDoli(biMo).ModlVaan := VAR.tbMoviDoli(biMo).ModlVaan + rgMoviDoli.MODLVAAN;
- VAR.tbMoviDoli(biMo).ModlVapa := VAR.tbMoviDoli(biMo).ModlVapa + rgMoviDoli.MODLVAPA;
- VAR.tbMoviDoli(biMo).ModlSald := VAR.tbMoviDoli(biMo).ModlSald + rgMoviDoli.MODLSALD;
- END IF;
- -- Determinar variable de acumulados
- IF (sbDetaFact = 'D') THEN
- biMo := TO_NUMBER(sbPeriodo||TO_CHAR(inComoSecu));
- ELSE
- biMo := inComoSecu;
- END IF;
- IF NOT (tbMoviDoli.EXISTS(biMo)) THEN
- tbMoviDoli(biMo).ModlTiem := rgMoviDoli.MODLTIEM;
- tbMoviDoli(biMo).ModlTiim := rgMoviDoli.MODLTIIM;
- tbMoviDoli(biMo).ModlDlem := rgMoviDoli.MODLDLEM;
- tbMoviDoli(biMo).ModlDltd := rgMoviDoli.MODLDLTD;
- tbMoviDoli(biMo).ModlDlnd := rgMoviDoli.MODLDLND;
- tbMoviDoli(biMo).ModlTisi := rgMoviDoli.MODLTISI;
- tbMoviDoli(biMo).ModlSuim := rgMoviDoli.MODLSUIM;
- tbMoviDoli(biMo).ModlTerc := rgMoviDoli.MODLTERC;
- tbMoviDoli(biMo).ModlPrin := rgMoviDoli.MODLPRIN;
- tbMoviDoli(biMo).ModlPeri := rgMoviDoli.MODLPERI;
- tbMoviDoli(biMo).ModlComo := rgMoviDoli.MODLCOMO;
- tbMoviDoli(biMo).ModlTali := NVL(rgMoviDoli.MODLTALI,0);
- tbMoviDoli(biMo).ModlVaba := NVL(rgMoviDoli.MODLVABA,0);
- tbMoviDoli(biMo).ModlVapf := rgMoviDoli.MODLVAPF;
- tbMoviDoli(biMo).ModlAaan := rgMoviDoli.MODLAAAN;
- tbMoviDoli(biMo).ModlAaac := rgMoviDoli.MODLAAAC;
- tbMoviDoli(biMo).ModlVaac := rgMoviDoli.MODLVAAC;
- tbMoviDoli(biMo).ModlVade := rgMoviDoli.MODLVADE;
- tbMoviDoli(biMo).ModlVaan := rgMoviDoli.MODLVAAN;
- tbMoviDoli(biMo).ModlVapa := rgMoviDoli.MODLVAPA;
- tbMoviDoli(biMo).ModlSald := rgMoviDoli.MODLSALD;
- ELSE
- tbMoviDoli(biMo).ModlPeri := rgMoviDoli.MODLPERI;
- tbMoviDoli(biMo).ModlVapf := tbMoviDoli(biMo).ModlVapf + rgMoviDoli.MODLVAPF;
- tbMoviDoli(biMo).ModlAaan := tbMoviDoli(biMo).ModlAaan + rgMoviDoli.MODLAAAN;
- tbMoviDoli(biMo).ModlAaac := tbMoviDoli(biMo).ModlAaac + rgMoviDoli.MODLAAAC;
- tbMoviDoli(biMo).ModlVaac := tbMoviDoli(biMo).ModlVaac + rgMoviDoli.MODLVAAC;
- tbMoviDoli(biMo).ModlVade := tbMoviDoli(biMo).ModlVade + rgMoviDoli.MODLVADE;
- tbMoviDoli(biMo).ModlVaan := tbMoviDoli(biMo).ModlVaan + rgMoviDoli.MODLVAAN;
- tbMoviDoli(biMo).ModlVapa := tbMoviDoli(biMo).ModlVapa + rgMoviDoli.MODLVAPA;
- tbMoviDoli(biMo).ModlSald := tbMoviDoli(biMo).ModlSald + rgMoviDoli.MODLSALD;
- END IF;
- END;
- -- Procedimiento de actualizacion de movimientos
- PROCEDURE PRO_ACTUALIZA_DESTO(biSe BINARY_INTEGER,sbPeriodo VARCHAR2,inComoSecu NUMBER)
- IS
- biMo BINARY_INTEGER := 0;
- biOp BINARY_INTEGER := 0;
- boSalir BOOLEAN := FALSE;
- BEGIN
- --
- biOp := tbOpciDesc.FIRST;
- WHILE tbOpciDesc.EXISTS(biOp) AND NOT (boSalir) LOOP
- IF (biSe != 0) THEN
- biMo := TO_NUMBER(TO_CHAR(biSe)||sbPeriodo||TO_CHAR(inComoSecu));
- biOp := biSe;
- boSalir := TRUE;
- ELSE
- biMo := TO_NUMBER(TO_CHAR(biOp)||sbPeriodo||TO_CHAR(inComoSecu));
- END IF;
- IF NOT (VAR.tbDescPrpa.EXISTS(biMo)) THEN
- VAR.tbDescPrpa(biMo).DeppTiem := rgDescPrpa.DEPPTIEM;
- VAR.tbDescPrpa(biMo).DeppTiim := rgDescPrpa.DEPPTIIM;
- VAR.tbDescPrpa(biMo).DeppDlem := rgDescPrpa.DEPPDLEM;
- VAR.tbDescPrpa(biMo).DeppDltd := rgDescPrpa.DEPPDLTD;
- VAR.tbDescPrpa(biMo).DeppDlnd := rgDescPrpa.DEPPDLND;
- VAR.tbDescPrpa(biMo).DeppEsta := rgDescPrpa.DEPPESTA;
- VAR.tbDescPrpa(biMo).DeppTisi := rgDescPrpa.DEPPTISI;
- VAR.tbDescPrpa(biMo).DeppSuim := rgDescPrpa.DEPPSUIM;
- VAR.tbDescPrpa(biMo).DeppTerc := rgDescPrpa.DEPPTERC;
- VAR.tbDescPrpa(biMo).DeppPiob := rgDescPrpa.DEPPPIOB;
- VAR.tbDescPrpa(biMo).DeppComo := rgDescPrpa.DEPPCOMO;
- VAR.tbDescPrpa(biMo).DeppPeri := rgDescPrpa.DEPPPERI;
- VAR.tbDescPrpa(biMo).DeppLaps := rgDescPrpa.DEPPLAPS;
- VAR.tbDescPrpa(biMo).DeppVaba := rgDescPrpa.DEPPVABA;
- VAR.tbDescPrpa(biMo).DeppCant := rgDescPrpa.DEPPCANT;
- VAR.tbDescPrpa(biMo).DeppVaun := rgDescPrpa.DEPPVAUN;
- VAR.tbDescPrpa(biMo).DeppFech := tbOpciDesc(biOp).feFechVenc;
- VAR.tbDescPrpa(biMo).DeppOppa := biOp;
- VAR.tbDescPrpa(biMo).DeppFact := 0;
- VAR.tbDescPrpa(biMo).DeppDepe := 0;
- VAR.tbDescPrpa(biMo).DeppInpe := 0;
- VAR.tbDescPrpa(biMo).DeppDevi := 0;
- VAR.tbDescPrpa(biMo).DeppInvi := 0;
- VAR.tbDescPrpa(biMo).DeppVppe := 0;
- VAR.tbDescPrpa(biMo).DeppVpvi := 0;
- VAR.tbDescPrpa(biMo).DeppAtva := 0;
- VAR.tbDescPrpa(biMo).DeppAtvn := 0;
- VAR.tbDescPrpa(biMo).DeppVaan := 0;
- VAR.tbDescPrpa(biMo).DeppDean := 0;
- VAR.tbDescPrpa(biMo).DeppAjvv := 0;
- VAR.tbDescPrpa(biMo).DeppAjvp := 0;
- VAR.tbDescPrpa(biMo).DeppAjva := 0;
- END IF;
- -- Acumulados
- VAR.tbDescPrpa(biMo).DeppFact := rgDescPrpa.DeppFact;
- -- Total del Periodo
- VAR.tbDescPrpa(biMo).DeppDepe := VAR.tbDescPrpa(biMo).DeppDepe + rgDescPrpa.DEPPDEPE;
- VAR.tbDescPrpa(biMo).DeppInpe := VAR.tbDescPrpa(biMo).DeppInpe + rgDescPrpa.DEPPINPE;
- VAR.tbDescPrpa(biMo).DeppVppe := VAR.tbDescPrpa(biMo).DeppVppe + rgDescPrpa.DEPPVPPE;
- VAR.tbDescPrpa(biMo).DEPPATVA := VAR.tbDescPrpa(biMo).DEPPATVA + rgDescPrpa.DEPPATVA;
- VAR.tbDescPrpa(biMo).DEPPATVN := VAR.tbDescPrpa(biMo).DEPPATVN + rgDescPrpa.DEPPATVN;
- 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);
- -- Total de la Vigencia
- VAR.tbDescPrpa(biMo).DeppDevi := VAR.tbDescPrpa(biMo).DeppDevi + rgDescPrpa.DEPPDEVI;
- VAR.tbDescPrpa(biMo).DeppInvi := VAR.tbDescPrpa(biMo).DeppInvi + rgDescPrpa.DEPPINVI;
- VAR.tbDescPrpa(biMo).DeppVpvi := VAR.tbDescPrpa(biMo).DeppVpvi + rgDescPrpa.DEPPVPVI;
- -- Total Anticipo
- VAR.tbDescPrpa(biMo).DeppVaan := VAR.tbDescPrpa(biMo).DeppVaan + rgDescPrpa.DEPPVAAN;
- VAR.tbDescPrpa(biMo).DeppDean := VAR.tbDescPrpa(biMo).DeppDean + rgDescPrpa.DEPPDEAN;
- -- Valor de ajustes
- VAR.tbDescPrpa(biMo).DeppAjvv := VAR.tbDescPrpa(biMo).DeppAjvv + rgDescPrpa.DEPPAJVV;
- VAR.tbDescPrpa(biMo).DeppAjvp := VAR.tbDescPrpa(biMo).DeppAjvp + rgDescPrpa.DEPPAJVP;
- VAR.tbDescPrpa(biMo).DeppAjva := VAR.tbDescPrpa(biMo).DeppAjva + rgDescPrpa.DEPPAJVA;
- --
- biOp := tbOpciDesc.NEXT(biOp);
- END LOOP;
- END;
- BEGIN
- -- Variables de trabajo enviadas desde IGFA se guardan temporalmente
- sbEmprCodi := VAR.sbEmpresa;
- sbTipoImpu := VAR.sbTipoImpu;
- sbTipoSuje := VAR.sbTipoSuje;
- sbSujeImpu := VAR.sbSujeImpu;
- sbSuimInic := VAR.sbSuimInic;
- sbSuimFina := VAR.sbSuimFina;
- sbTercero := VAR.sbTercero;
- sbProyInve := VAR.sbProyInve;
- sbPeriMovi := VAR.sbPeriMovi;
- sbVigeDocu := VAR.sbVigeDocu;
- sbLapsMovi := VAR.sbLapsMovi;
- sbTidoFact := VAR.sbTidoFact;
- feFechDocu := VAR.feFechDocu;
- feFechMovi := VAR.feFechMovi;
- feFechVenc := VAR.feFechVenc;
- feFechCort := VAR.feFechCort;
- feFechPago := VAR.feFechPago;
- inValoMovi := VAR.inValoMovi;
- sbObseDocu := VAR.sbObseDocu;
- sbAbonGrav := VAR.sbAbonGrav;
- sbCancGrav := VAR.sbCancGrav;
- sbConcRefe := VAR.sbConcRefe;
- sbTipoDocu := VAR.sbTipoDocu;
- sbProyInte := VAR.sbProyInte;
- sbDeudActu := VAR.sbDeudActu;
- sbCargVafa := VAR.sbCargVafa;
- sbMarcFati := VAR.sbMarcFact;
- inNumeLote := VAR.inNumeLote;
- sbPeinCrfa := VAR.sbPeriInic;
- sbLainCrfa := VAR.sbLapsInic;
- sbPefiCrfa := VAR.sbPeriFina;
- sbLafiCrfa := VAR.sbLapsFina;
- inNumeCrfa := VAR.inNumeCuot;
- inNumeInic := VAR.inNumeInic;
- inNumeFina := VAR.inNumeFina;
- -- Validar tipos de movimiento debito o credito
- IF (VAR.sbTimoDebi IS NULL) THEN
- VAR.sbTimoDebi := funBuscPara('TIMOAJDB');
- END IF;
- IF (VAR.sbTimoCred IS NULL) THEN
- VAR.sbTimoCred := funBuscPara('TIMOAJCR');
- END IF;
- IF (VAR.sbEstaActi IS NULL) THEN
- VAR.sbEstaActi := funBuscPara('ESTAACTI');
- END IF;
- IF (VAR.sbEstaInac IS NULL) THEN
- VAR.sbEstaInac := funBuscPara('ESTAINAC');
- END IF;
- IF (VAR.sbCaraNulo IS NULL) THEN
- VAR.sbCaraNulo := funBuscPara('CARANULL');
- END IF;
- IF (VAR.sbLapsCero IS NULL) THEN
- VAR.sbLapsCero := funBuscPara('LAPSCERO');
- END IF;
- IF (VAR.sbDivision IS NULL) THEN
- VAR.sbDivision := funBuscPara('DIVIRENT');
- END IF;
- -- Si el tercero es porcentaje se debe redefinir el tercero a caracter nulo
- IF (VAR.sbTercero = '%') THEN
- VAR.sbTercero := VAR.sbCaraNulo;
- END IF;
- VAR.sbConcSade := funBuscPara('COMOSADE');
- sbTisuPred := funBuscPara('TISUPRED');
- sbNumeLofa := funBuscPara('NUMELOFA');
- sbDeudOppa := funBuscPara('DEUDOPPA');
- -- Busca Modelo de Liquidacion y Opciones de pago
- VAR.inLiquidac := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'MOLIDESC');
- sbContSate := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'CONTSATE');
- sbDetaFact := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'DETAFACT');
- inOpciPago := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'OPCIPAGO');
- sbTablLipa := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'TABLLIPA');
- VAR.sbFactSafa := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'FACTSAFA');
- sbRequPrin := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'REQUPRIN');
- sbTidiPago := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'TIDIPAGO');
- sbFactAmor := NVL(pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'FACTAMOR'),'N');
- -- Validar fechas y Recuperar la fecha de vencimiento configurada en MTIL
- VAR.feFechMovi := NVL(VAR.feFechMovi,TRUNC(SYSDATE));
- sbFechVeDe := pkgParaTiim.funBuscPara(VAR.sbEmpresa,VAR.sbTipoImpu,'FECHVENC');
- IF (sbFechVeDe IS NOT NULL) THEN
- feFechVeDe := TO_DATE(sbFechVeDe,'DD-MM-YYYY');
- ELSE
- feFechVeDe := NVL(VAR.feFechVenc,LAST_DAY(VAR.feFechMovi));
- END IF;
- feFechVeDe := NVL(feFechVeDe,LAST_DAY(VAR.feFechMovi));
- VAR.feFechVenc := NVL(VAR.feFechVenc,feFechVeDe);
- -- Evaluar los criterios de generacion por conceptos
- IF (NVL(VAR.sbConcRefe,'%') = '%') THEN
- IF (sbRequPrin = 'S') THEN
- IF (NVL(VAR.sbAbonGrav,'N') = 'S') THEN
- VAR.sbConcRefe := VAR.sbConcSade;
- ELSE
- VAR.sbConcRefe := NULL;
- END IF;
- ELSE
- VAR.sbConcRefe := '%';
- END IF;
- END IF;
- -- Carga Ambiemte de Liquidacion
- CARGA_CRITLIQU;
- -- Definir si maneja o no saldos por tercero
- VAR.sbSaldTerc := NVL(VAR.sbSaldTerc,sbContSate);
- -- Definir fecha de referencia
- VAR.feFechRefe := FECHINIPER(PERIOFECHA(VAR.feFechMovi));
- -- Define marca de facturacion
- sbMarcFact := 'SIN-FACTURA';
- -- Cargar las formulas y conceptos asociados al modelo de liquidacion de intereses de predial
- CARGA_LIQUIDAR;
- CARGA_TABLLIQU;
- -- Carga saldos de periodos cuando es factura por abono
- IF (VAR.sbPeriInic IS NOT NULL AND VAR.sbPeriFina IS NOT NULL AND NVL(VAR.inNumeCuot,0) >= 0) THEN
- CARGA_SALDOSPERIODOS(VAR.sbPeriInic,VAR.sbLapsInic,VAR.sbPeriFina,VAR.sbLapsFina);
- ELSE
- CARGA_SALDOS;
- END IF;
- dbms_output.put_line('saldos='||VAR.tbSaldos.COUNT);
- -- Validar si es una factura por periodos y/o cuotas o una factura por valor
- -- Si es una factura por periodos o por valor se recalculan los saldos
- IF (UPPER(sbTidiPago) = 'C' AND NVL(VAR.inValoMovi,0) != 0) THEN
- SALDFACT_CONCEPTO;
- ELSIF (NVL(VAR.inValoMovi,0) != 0 AND VAR.sbPeriInic IS NOT NULL AND VAR.sbPeriFina IS NOT NULL ) THEN
- SALDFACT_VALOR_PERIODO;
- ELSIF (NVL(VAR.inValoMovi,0) != 0) THEN
- SALDFACT_VALOR;
- ELSIF (VAR.sbPeriInic IS NOT NULL AND VAR.sbPeriFina IS NOT NULL AND NVL(VAR.inNumeCuot,0) >= 0) THEN
- SALDFACT_PERIODO;
- END IF;
- --
- CARGA_ESTABLEC;
- CARGA_AFOROS;
- CARGA_AFOROSUJETO;
- CARGA_NOVEDADES;
- CARGA_ULTIAFOR;
- CARGA_UNIDADLIQU;
- CARGA_UNIDLIQPER(VAR.feFechDocu);
- -- Iniciar arreglos de liquidacion
- INICIAR_ARREGLOS_LIQUIDAR;
- --
- VAR.feFechApli := VAR.feFechMovi;
- VAR.inTariLiqu := 0;
- VAR.inFactDesc := 0;
- VAR.inValoMovi := NVL(VAR.inValoMovi,0);
- VAR.inNumeCuot := NVL(VAR.inNumeCuot,0);
- -- Consultar opciones de descuento
- tbPeriLiqu.DELETE;
- tbOpciDesc.DELETE;
- feFeinPeri := FECHINPELI(VAR.feFechDocu);
- feFefiPeri := ADD_MONTHS(feFeinPeri,UNIDADLIQU-1);
- --Define opciones de pago si el contribuyente tiene deuda
- IF (sbDeudOppa = 'S') THEN
- IF (VAR.sbMiniPeri != PERIOFECHA(VAR.feFechDocu)) THEN
- inOpciPago := 1;
- VAR.feFechVenc := LAST_DAY(VAR.feFechMovi);
- VAR.feFechPago := LAST_DAY(VAR.feFechMovi);
- END IF;
- END IF;
- -- Si es factura por periodos, por valor o por cuotas se da una sola opcion de pago
- IF (VAR.sbPeriInic IS NOT NULL OR NVL(VAR.inValoMovi,0) > 0 OR NVL(VAR.inNumeCuot,0) > 0) THEN
- inOpciPago := 1;
- END IF;
- -- Se agrega VAR.feFechVenc = feFechVeDe para determinar si la fecha de
- -- vencimiento en MTIL es mayor o igual al criterio correspondiente
- IF ((VAR.sbPeriInic IS NULL) AND (NVL(VAR.inValoMovi,0) = 0) AND (NVL(VAR.inNumeCuot,0) = 0)) THEN
- FOR rgDe IN cuTablLipa(sbTablLipa, VAR.sbTipoImpu, VAR.feFechDocu, VAR.sbProyInve) LOOP
- IF (rgDe.FechFina >= VAR.feFechDocu) THEN
- IF (rgDe.Opcion = 0) THEN
- biIn := tbOpciDesc.COUNT + 1;
- ELSE
- biIn := rgDe.Opcion;
- END IF;
- --
- IF (biIn <= inOpciPago) THEN
- tbOpciDesc(biIn).feFechInic := rgDe.FechInic;
- tbOpciDesc(biIn).feFechFina := rgDe.FechFina;
- tbOpciDesc(biIn).feFechVenc := rgDe.FechFina;
- tbOpciDesc(biIn).inFactor := 0;
- tbOpciDesc(biIn).inOpciPago := biIn;
- IF (rgDe.TipoValo = 'F' AND rgDe.Valor IS NOT NULL) THEN
- tbOpciDesc(biIn).feFechVenc := LTRIM(RTRIM(rgDe.Valor));
- END IF;
- feMaxiFech := tbOpciDesc(biIn).feFechVenc;
- dbms_output.put_line('opciones de pago3='||biIn||' feFechVenc='||feFechVenc);
- END IF;
- END IF;
- END LOOP;
- END IF;
- IF (tbOpciDesc.COUNT = 0) THEN
- biIn := tbOpciDesc.COUNT + 1;
- tbOpciDesc(biIn).feFechInic := VAR.feFechMovi;
- tbOpciDesc(biIn).feFechFina := NVL(VAR.feFechVenc,LAST_DAY(VAR.feFechMovi));
- tbOpciDesc(biIn).feFechVenc := NVL(VAR.feFechVenc,LAST_DAY(VAR.feFechMovi));
- tbOpciDesc(biIn).inFactor := 0;
- IF (VAR.feFechVenc < VAR.feFechMovi) THEN
- tbOpciDesc(biIn).feFechFina := LAST_DAY(VAR.feFechMovi);
- tbOpciDesc(biIn).feFechVenc := LAST_DAY(VAR.feFechMovi);
- END IF;
- feMaxiFech := tbOpciDesc(biIn).feFechVenc;
- END IF;
- -- Validar que la fecha de vencimiento corresponda a la ultima fecha de vencimiento de las opciones de pago
- IF (VAR.feFechVenc != feMaxiFech) THEN
- VAR.feFechVenc := feMaxiFech;
- END IF;
- -- Validar que la fecha maxima de pago (sin recargos) no sea superior a la fecha de vencimiento
- IF (VAR.feFechPago > VAR.feFechVenc) THEN
- VAR.feFechPago := VAR.feFechVenc;
- END IF;
- -- Consultar tipo de documento de facturacion
- OPEN cuTipoDocu(VAR.sbEmpresa, VAR.sbTidoFact);
- FETCH cuTipoDocu INTO rgTipoDocu;
- CLOSE cuTipoDocu;
- -- Asigna Numerador
- sbNumeDocu := rgTipoDocu.TidoNume;
- inProxNume := rgTipoDocu.NumePrnu;
- IF (NVL(VAR.inNumeFact,0) <= 0) THEN
- VAR.inNumeFact := pkgNumerado.fun_ProximoNumero(sbNumeDocu,'C');
- END IF;
- -- Consultar lapso
- OPEN cuLapso(TRUNC(VAR.feFechDocu));
- FETCH cuLapso INTO rgLapsDocu;
- CLOSE cuLapso;
- -- Periodo de movimiento
- VAR.sbPeriMovi := rgLapsDocu.LapsPeri;
- VAR.sbLapsMovi := rgLapsDocu.LapsLaps;
- IF (VAR.sbVigeDocu IS NULL) THEN
- VAR.sbVigeDocu := VAR.sbPeriMovi;
- END IF;
- -- Periodo Inicio de deuda
- sbPeriInDe := VAR.rgSujeImpu.SuimPedd;
- sbLapsInDe := VAR.rgSujeImpu.SuimLadd;
- -- Lapso final de deuda
- OPEN cuLapso(feFefiPeri);
- FETCH cuLapso INTO rgLapsFina;
- CLOSE cuLapso;
- --
- sbPeriFiDe := rgLapsFina.LapsPeri;
- sbLapsFiDe := rgLapsFina.LapsLaps;
- --
- inNumeDocu := VAR.inNumeFact;
- -- Se valida si solo se factura a contribuyentes que solo deben la vigencia actual
- -- de lo contrario se factura normalmente.
- IF (NVL(VAR.sbDeudActu,'N') = 'S') THEN
- IF (sbPeriInDe = rgLapsDocu.LapsPeri) THEN
- boExito := TRUE;
- ELSE
- boExito := FALSE;
- END IF;
- ELSE
- boExito := TRUE;
- END IF;
- -- Cargar datos del proyecto obra predio si es valorizacion
- IF (VAR.sbProyInve != VAR.sbCaraNulo) THEN
- OPEN cuPiobSuim(VAR.sbTipoSuje,VAR.sbSujeImpu,VAR.sbProyInve);
- FETCH cuPiobSuim INTO rgPiobSuim;
- CLOSE cuPiobSuim;
- VAR.rgPiobSuim := rgPiobSuim;
- -- Cargar datos del proyecto obra
- pkgtbPrinObra.proSel(rgPiobSuim.PosiPiob,NULL,VAR.rgPrinObra);
- -- Variables de proyeccion de deuda
- inSaldFina := rgPiobSuim.PosiVaco - rgPiobSuim.PosiCuin;
- inPlazo := rgPiobSuim.PosiNucu;
- inTasaFina := VAR.rgPrinObra.PiobTifi;
- feFechIncr := rgPiobSuim.PosiFifp;
- dbms_output.put_line('proyecto='||VAR.rgPrinObra.PiobCodi||' '||rgPiobSuim.PosiFifp||' '||SALDOTOTAL||' '||VAR.tbSaldos.COUNT);
- END IF;
- -- Cargar condiciones de pago
- IF (NVL(VAR.sbSaldCopa,'N') = 'S') THEN
- CARGA_CONDICIONES_PAGOVALO(VAR.sbEmpresa,VAR.sbTipoImpu);
- CALCULA_SALDOS_CONDPAGO('S');
- END IF;
- --
- VAR.tbMoviDoli.DELETE;
- VAR.tbDescPrpa.DELETE;
- IF (SALDOTOTAL > 0 AND boExito) THEN
- inTotaDocu := 0;
- -- Consultar los saldos y acumular en movimiento de factura
- biSe := VAR.tbSaldos.FIRST;
- WHILE VAR.tbSaldos.EXISTS(biSe) LOOP
- -- Validar que solo se genera factura para los conceptos que generan deuda y no saldo a favor
- IF (VAR.tbSaldos(biSe).SasiSign = '+' AND ((sbFactAmor = 'N') OR (sbFactAmor = 'S' AND VAR.tbSaldos(biSe).SasiInte != 'D'))) THEN
- -- Consultar concepto de movimiento
- OPEN cuConcMovi(VAR.tbSaldos(biSe).SasiComo);
- FETCH cuConcMovi INTO rgConcMovi;
- CLOSE cuConcMovi;
- --
- VAR.sbConcMovi := VAR.tbSaldos(biSe).SasiComo;
- VAR.sbPeriFisc := VAR.tbSaldos(biSe).SasiPeri;
- VAR.sbLapsFisc := VAR.tbSaldos(biSe).SasiLaps;
- VAR.feFechRefe := '01-01-'||VAR.sbPeriFisc;
- CARGA_UNIDLIQPER(VAR.feFechDocu);
- -- Poner en el ambiente el registro del concepto de movimiento
- VAR.rgConcMovi := rgConcMovi;
- VAR.inSecuComo := rgConcMovi.ComoSecu;
- --
- rgMoviDoli.MODLDLEM := VAR.sbEmpresa;
- rgMoviDoli.MODLDLTD := VAR.sbTidoFact;
- rgMoviDoli.MODLDLND := inNumeDocu;
- rgMoviDoli.MODLESTA := VAR.sbEstaActi;
- rgMoviDoli.MODLTIEM := VAR.tbSaldos(biSe).SasiTiem;
- rgMoviDoli.MODLTIIM := VAR.tbSaldos(biSe).SasiTiim;
- rgMoviDoli.MODLTISI := VAR.tbSaldos(biSe).SasiTisi;
- rgMoviDoli.MODLSUIM := VAR.tbSaldos(biSe).SasiSuim;
- rgMoviDoli.MODLTERC := VAR.tbSaldos(biSe).SasiTerc;
- rgMoviDoli.MODLPRIN := VAR.tbSaldos(biSe).SasiPrin;
- rgMoviDoli.MODLCOMO := VAR.tbSaldos(biSe).SasiComo;
- rgMoviDoli.MODLPERI := VAR.tbSaldos(biSe).SasiPeri;
- rgMoviDoli.MODLVAPF := 0;
- rgMoviDoli.MODLAAAN := 0;
- rgMoviDoli.MODLAAAC := 0;
- rgMoviDoli.MODLVAAC := 0;
- rgMoviDoli.MODLVADE := 0;
- rgMoviDoli.MODLVAAN := 0;
- rgMoviDoli.MODLVAPA := 0;
- rgMoviDoli.MODLSALD := 0;
- -- Valor acumulado atrasado de la actual vigencia
- -- A este valor debo restarle el valor liquidado del periodo
- -- Calculo de fecha de referencia para calculo de valores vencidos
- dbms_output.put_line('sbFactAmor 0='||sbFactAmor);
- IF ((NVL(VAR.sbProyInve,VAR.sbCaraNulo) = VAR.sbCaraNulo OR VAR.sbProyInve = '%') AND sbFactAmor = 'N') THEN
- IF (VAR.tbSaldos(biSe).SasiPeri = VAR.sbPeriMovi AND
- ((VAR.tbSaldos(biSe).SasiLaps = VAR.sbLapsCero) OR
- (VAR.tbSaldos(biSe).SasiLaps != VAR.sbLapsCero AND VAR.tbSaldos(biSe).SasiLaps = VAR.sbLapsMovi))) THEN
- -- Valor acumulado atrasado de la actual vigencia
- -- A este valor debo restarle el valor liquidado del periodo
- IF (VAR.tbSaldos(biSe).SasiLaps = VAR.sbLapsCero) THEN
- -- Calculo de fecha de referencia para calculo de valores vencidos
- feFechPeri := FECHINPELI(VAR.feFechDocu);
- feFechProy := ADD_MONTHS(feFechPeri,UNIDADLIQU);
- rgMoviDoli.MODLAAAC := SALVENCONC(feFechPeri,VAR.tbSaldos(biSe).SasiPeri,VAR.tbSaldos(biSe).SasiLaps);
- rgMoviDoli.MODLVAPF := SALVENCONC(feFechProy,VAR.tbSaldos(biSe).SasiPeri,VAR.tbSaldos(biSe).SasiLaps);
- rgMoviDoli.MODLVAPF := rgMoviDoli.MODLVAPF - rgMoviDoli.MODLAAAC;
- ELSE
- rgMoviDoli.MODLAAAC := 0;
- rgMoviDoli.MODLVAPF := VAR.tbSaldos(biSe).SasiDefi;
- END IF;
- ELSE
- -- Valor acumulado de las vigencias anteriores
- rgMoviDoli.MODLAAAN := VAR.tbSaldos(biSe).SasiDefi;
- END IF;
- ELSIF (VAR.tbSaldos(biSe).SasiPeri = VAR.rgPrinObra.PiobPems AND VAR.tbSaldos(biSe).SasiLaps = VAR.rgPrinObra.PiobLams AND sbFactAmor = 'N' AND sbModelo = 'CUOTA-MES') THEN
- IF (VAR.tbSaldos(biSe).SasiInte = 'C') THEN
- feFechPeri := FECHINPELI(VAR.feFechDocu);
- feFechProy := ADD_MONTHS(feFechPeri,UNIDADLIQU);
- IF (NVL(VAR.sbSaldCopa,'N') = 'S') THEN
- rgMoviDoli.MODLAAAC := VALO_VALORCUOTAS_VENCIDAS(feFechPeri,VAR.tbSaldos(biSe).SasiComo,VAR.tbSaldos(biSe).SasiPeri,VAR.tbSaldos(biSe).SasiLaps);
- rgMoviDoli.MODLVAPF := VALO_VALORCUOTAS_VENCIDAS(feFechProy,VAR.tbSaldos(biSe).SasiComo,VAR.tbSaldos(biSe).SasiPeri,VAR.tbSaldos(biSe).SasiLaps);
- IF (feFechPeri < feFechIncr) THEN
- rgMoviDoli.MODLAAAC := 0;
- END IF;
- ELSE
- rgMoviDoli.MODLAAAC := SALVENVALORIZACION(feFechIncr, feFechPeri);
- rgMoviDoli.MODLVAPF := SALVENVALORIZACION(feFechIncr, feFechProy);
- IF (feFechPeri < feFechIncr) THEN
- rgMoviDoli.MODLAAAC := 0;
- END IF;
- END IF;
- rgMoviDoli.MODLVAPF := rgMoviDoli.MODLVAPF - rgMoviDoli.MODLAAAC;
- ELSE
- rgMoviDoli.MODLAAAC := 0;
- rgMoviDoli.MODLVAPF := VAR.tbSaldos(biSe).SasiDefi;
- rgMoviDoli.MODLAAAN := 0;
- END IF;
- ELSIF (VAR.tbSaldos(biSe).SasiInte = 'C' AND sbModelo = 'CUOTA-ANUAL') THEN
- -- Validar si el concepto es de cuota inicial
- OPEN cuComoOper('CUOTINIC');
- FETCH cuComoOper INTO rgTimoOper;
- boCuotInic := cuComoOper%FOUND;
- CLOSE cuComoOper;
- IF NOT (boCuotInic) THEN
- -- Si maneja concepto de cuota mes calcula los valores conforme a ese concepto
- IF (UPPER(sbMacoCume) = 'S') THEN
- OPEN cuComoOper('CUOTAMES');
- FETCH cuComoOper INTO rgTimoOper;
- boCuotaMes := cuComoOper%FOUND;
- CLOSE cuComoOper;
- IF (boCuotaMes) THEN
- IF (VAR.feFechDocu < LAST_DAY(ADD_MONTHS(VAR.rgPiobSuim.PosiFifp,VAR.rgPiobSuim.PosiNucu))) THEN
- IF (VAR.tbSaldos(biSe).SasiDefi >= VAR.rgPiobSuim.PosiCume) THEN
- rgMoviDoli.MODLAAAC := VAR.tbSaldos(biSe).SasiDefi - VAR.rgPiobSuim.PosiCume;
- rgMoviDoli.MODLVAPF := VAR.rgPiobSuim.PosiCume;
- ELSE
- rgMoviDoli.MODLAAAC := 0;
- rgMoviDoli.MODLVAPF := VAR.tbSaldos(biSe).SasiDefi;
- END IF;
- ELSE
- rgMoviDoli.MODLAAAC := VAR.tbSaldos(biSe).SasiDefi;
- rgMoviDoli.MODLVAPF := 0;
- END IF;
- -- Calcular cuotas vencidas
- VAR.inCuotVenc := ROUND(rgMoviDoli.MODLAAAC / VAR.rgPiobSuim.PosiCume) - 1;
- ELSE
- rgMoviDoli.MODLAAAC := 0;
- rgMoviDoli.MODLVAPF := 0;
- END IF;
- ELSE
- feFechPeri := ADD_MONTHS(FECHFIPELI(VAR.feFechDocu),-1);
- feFechProy := FECHFIPELI(VAR.feFechDocu);
- rgMoviDoli.MODLAAAC := SG_SALDODEUDA_FINANCIADA(feFechPeri,VAR.tbSaldos(biSe).SasiPago,0,'C');
- rgMoviDoli.MODLVAPF := SG_SALDODEUDA_FINANCIADA(feFechProy,VAR.tbSaldos(biSe).SasiPago,0,'C');
- rgMoviDoli.MODLVAPF := rgMoviDoli.MODLVAPF - rgMoviDoli.MODLAAAC;
- -- Calcular cuotas vencidas
- VAR.inCuotVenc := ROUND(rgMoviDoli.MODLAAAC / VAR.rgPiobSuim.PosiCume) - 1;
- END IF;
- ELSE
- IF (VAR.feFechDocu < rgPiobSuim.PosiFifp) THEN
- rgMoviDoli.MODLAAAC := 0;
- rgMoviDoli.MODLVAPF := VAR.tbSaldos(biSe).SasiDefi;
- ELSE
- rgMoviDoli.MODLAAAC := VAR.tbSaldos(biSe).SasiDefi;
- rgMoviDoli.MODLVAPF := 0;
- END IF;
- END IF;
- IF (VAR.inCuotVenc < 0) THEN
- VAR.inCuotVenc := 0;
- END IF;
- ELSIF (sbFactAmor = 'S') THEN
- dbms_output.put_line('sbFactAmor='||sbFactAmor);
- IF (VAR.tbSaldos(biSe).SasiInte = 'C') THEN
- -- Consultar valor de la cuota de amortizacion
- OPEN cuSuimTiin(VAR.tbSaldos(biSe).SasiTiem,VAR.tbSaldos(biSe).SasiTiim,
- VAR.tbSaldos(biSe).SasiTisi,VAR.tbSaldos(biSe).SasiSuim,'%',VAR.tbSaldos(biSe).SasiPrin,'AMME',
- VAR.tbSaldos(biSe).SasiPeri,VAR.tbSaldos(biSe).SasiLaps);
- FETCH cuSuimTiin INTO rgSuimTiin;
- boExiste := cuSuimTiin%FOUND;
- CLOSE cuSuimTiin;
- --
- IF (boExiste) THEN
- inValoCuot := NVL(rgSuimTiin.SutiValo,0);
- dbms_output.put_line('inValoCuot='||inValoCuot);
- --
- rgMoviDoli.MODLAAAN := 0;
- rgMoviDoli.MODLAAAC := VAR.tbSaldos(biSe).SasiDefi - inValoCuot;
- IF ((VAR.tbSaldos(biSe).SasiDefi - inValoCuot) < 0) THEN
- rgMoviDoli.MODLAAAC := 0;
- rgMoviDoli.MODLVAPF := VAR.tbSaldos(biSe).SasiDefi;
- ELSE
- rgMoviDoli.MODLAAAC := VAR.tbSaldos(biSe).SasiDefi - inValoCuot;
- rgMoviDoli.MODLVAPF := inValoCuot;
- END IF;
- ELSE
- -- Consultar valor de la cuota de amortizacion
- OPEN cuSuimTiin(VAR.tbSaldos(biSe).SasiTiem,VAR.tbSaldos(biSe).SasiTiim,
- VAR.tbSaldos(biSe).SasiTisi,VAR.tbSaldos(biSe).SasiSuim,'%',VAR.tbSaldos(biSe).SasiPrin,'TAAL',
- sbVigeDocu,VAR.sbLapsCero);
- FETCH cuSuimTiin INTO rgSuimTiin;
- boExiste := cuSuimTiin%FOUND;
- CLOSE cuSuimTiin;
- IF (boExiste) THEN
- inValoCuot := NVL(rgSuimTiin.SutiValo,0);
- dbms_output.put_line('inValoCuot='||inValoCuot);
- --
- rgMoviDoli.MODLAAAN := 0;
- rgMoviDoli.MODLAAAC := VAR.tbSaldos(biSe).SasiDefi - inValoCuot;
- IF ((VAR.tbSaldos(biSe).SasiDefi - inValoCuot) < 0) THEN
- rgMoviDoli.MODLAAAC := 0;
- rgMoviDoli.MODLVAPF := VAR.tbSaldos(biSe).SasiDefi;
- ELSE
- rgMoviDoli.MODLAAAC := VAR.tbSaldos(biSe).SasiDefi - inValoCuot;
- rgMoviDoli.MODLVAPF := inValoCuot;
- END IF;
- END IF;
- END IF;
- ELSIF (VAR.tbSaldos(biSe).SasiInte = 'N') THEN
- -- Consultar valor de intereses corrientes de la vigencia actual de la factura
- OPEN cuInteCorr(VAR.tbSaldos(biSe).SasiTiem,VAR.tbSaldos(biSe).SasiTiim,VAR.tbSaldos(biSe).SasiTisi,VAR.tbSaldos(biSe).SasiSuim,
- VAR.tbSaldos(biSe).SasiTerc,VAR.tbSaldos(biSe).SasiPrin,VAR.tbSaldos(biSe).SasiComo,
- TO_DATE('01-01-'||TO_CHAR(VAR.feFechDocu,'YYYY'),'DD-MM-YYYY'));
- FETCH cuInteCorr INTO rgInteCorr;
- CLOSE cuInteCorr;
- --
- dbms_output.put_line('rgInteCorr='||rgInteCorr.DebiAnte||' - '||rgInteCorr.CredAnte);
- dbms_output.put_line('rgInteCorr='||rgInteCorr.DebiActu||' - '||rgInteCorr.CredActu);
- rgMoviDoli.MODLAAAN := rgInteCorr.DebiAnte - rgInteCorr.CredAnte;
- IF (rgMoviDoli.MODLAAAN < 0) THEN
- rgMoviDoli.MODLVAPF := (rgInteCorr.DebiActu - rgInteCorr.CredActu) + rgMoviDoli.MODLAAAN;
- rgMoviDoli.MODLAAAN := 0;
- ELSE
- rgMoviDoli.MODLAAAN := rgInteCorr.DebiAnte - rgInteCorr.CredAnte - rgInteCorr.CredActu;
- IF (rgMoviDoli.MODLAAAN < 0) THEN
- rgMoviDoli.MODLVAPF := rgInteCorr.DebiActu + rgMoviDoli.MODLAAAN;
- rgMoviDoli.MODLAAAN := 0;
- ELSE
- rgMoviDoli.MODLVAPF := rgInteCorr.DebiActu;
- END IF;
- END IF;
- --
- ELSE
- rgMoviDoli.MODLAAAC := 0;
- rgMoviDoli.MODLAAAN := 0;
- rgMoviDoli.MODLVAPF := VAR.tbSaldos(biSe).SasiDefi;
- --
- END IF;
- END IF;
- -- Cuando el concepto es diferido no se tiene en cuenta en la facturacion del periodo
- IF (rgConcMovi.ComoDife != 'N') THEN
- rgMoviDoli.MODLVAPF := 0;
- END IF;
- -- Valor acumulado hasta la actual vigencia
- rgMoviDoli.MODLVAAC := rgMoviDoli.MODLAAAN + rgMoviDoli.MODLAAAC + rgMoviDoli.MODLVAPF;
- -- Valor acumulado hasta el fin de la actual vigencia
- rgMoviDoli.MODLVAAN := VAR.tbSaldos(biSe).SasiDefi;
- rgMoviDoli.MODLSALD := VAR.tbSaldos(biSe).SasiDefi;
- --
- rgMoviDoli.MODLTALI := VAR.tbSaldos(biSe).SasiTali;
- rgMoviDoli.MODLVABA := VAR.tbSaldos(biSe).SasiVaba;
- -- Acumula
- inTotaDocu := inTotaDocu + rgMoviDoli.MODLVAAC;
- --
- PRO_ACTUALIZA_MOVTO(VAR.tbSaldos(biSe).SasiPeri,rgConcMovi.ComoSecu);
- -- Datos de descuento
- rgDescPrpa.DEPPTIEM := rgMoviDoli.ModlTiem;
- rgDescPrpa.DEPPTIIM := rgMoviDoli.ModlTiim;
- rgDescPrpa.DEPPDLEM := rgMoviDoli.ModlDlem;
- rgDescPrpa.DEPPDLTD := rgMoviDoli.ModlDltd;
- rgDescPrpa.DEPPDLND := rgMoviDoli.ModlDlnd;
- rgDescPrpa.DEPPESTA := rgMoviDoli.ModlEsta;
- rgDescPrpa.DEPPTISI := rgMoviDoli.ModlTisi;
- rgDescPrpa.DEPPSUIM := rgMoviDoli.ModlSuim;
- rgDescPrpa.DEPPTERC := rgMoviDoli.ModlTerc;
- rgDescPrpa.DEPPPIOB := rgMoviDoli.ModlPrin;
- rgDescPrpa.DEPPCOMO := rgMoviDoli.ModlComo;
- rgDescPrpa.DEPPPERI := VAR.tbSaldos(biSe).SasiPeri;
- rgDescPrpa.DEPPLAPS := VAR.tbSaldos(biSe).SasiLaps;
- rgDescPrpa.DEPPFECH := rgMoviDoli.ModlFech;
- rgDescPrpa.DEPPVABA := VAR.tbSaldos(biSe).SasiVaba;
- rgDescPrpa.DEPPCANT := VAR.tbSaldos(biSe).SasiCant;
- rgDescPrpa.DEPPVAUN := VAR.tbSaldos(biSe).SasiVaun;
- rgDescPrpa.DEPPFACT := 0;
- rgDescPrpa.DEPPDEPE := 0;
- rgDescPrpa.DEPPINPE := 0;
- rgDescPrpa.DEPPDEVI := 0;
- rgDescPrpa.DEPPINVI := 0;
- rgDescPrpa.DEPPVAAN := 0;
- rgDescPrpa.DEPPDEAN := 0;
- rgDescPrpa.DEPPAJVV := 0;
- rgDescPrpa.DEPPAJVP := 0;
- rgDescPrpa.DEPPAJVA := 0;
- rgDescPrpa.DEPPATVA := rgMoviDoli.MODLAAAC;
- rgDescPrpa.DEPPATVN := rgMoviDoli.MODLAAAN;
- dbms_output.put_line('rgDescPrpa.DEPPATVA='||rgDescPrpa.DEPPATVA||' - '||rgDescPrpa.DEPPATVN||' rgMoviDoli.MODLAAAC='||rgMoviDoli.MODLAAAC);
- -- Cuando el concepto es diferido no se tiene en cuenta en la facturacion del periodo
- IF (rgConcMovi.ComoDife != 'N') THEN
- rgDescPrpa.DEPPVPPE := 0;
- ELSE
- rgDescPrpa.DEPPVPPE := rgMoviDoli.MODLVAAC;
- END IF;
- rgDescPrpa.DEPPVPVI := rgMoviDoli.MODLVAAN;
- --
- IF (rgDescPrpa.DeppVppe != 0 OR rgDescPrpa.DeppVpvi != 0 OR rgDescPrpa.DEPPVAAN != 0) THEN
- PRO_ACTUALIZA_DESTO(0,VAR.tbSaldos(biSe).SasiPeri,rgConcMovi.ComoSecu);
- END IF;
- -- Define periodo de liquidacion de descuentos y proyeccion de intereses
- biIn := TO_NUMBER(VAR.tbSaldos(biSe).SasiPeri||VAR.tbSaldos(biSe).SasiLaps);
- IF (NOT (tbPeriLiqu.EXISTS(biIn)) AND VAR.tbSaldos(biSe).SasiDefi > 0) THEN
- OPEN cuPeriodo(VAR.tbSaldos(biSe).SasiPeri);
- FETCH cuPeriodo INTO rgPeriodo;
- CLOSE cuPeriodo;
- tbPeriLiqu(biIn).sbPeriFisc := VAR.tbSaldos(biSe).SasiPeri;
- tbPeriLiqu(biIn).sbLapsFisc := VAR.tbSaldos(biSe).SasiLaps;
- tbPeriLiqu(biIn).feFechInic := rgPeriodo.PeriFein;
- END IF;
- END IF; --Fin si no es de saldo a favor
- --
- biSe := VAR.tbSaldos.NEXT(biSe);
- --
- END LOOP;
- -- Liquidacion de descuentos e intereses proyectados segun el modelo de liquidacion
- -- de descuentos
- IF (VAR.tbDescPrpa.COUNT > 0) THEN
- biSe := tbOpciDesc.FIRST;
- WHILE tbOpciDesc.EXISTS(biSe) LOOP
- -- Fecha de corte
- VAR.feFechMovi := tbOpciDesc(biSe).feFechVenc;
- VAR.inOpciPago := tbOpciDesc(biSe).inOpciPago;
- VAR.tbMovireli.DELETE;
- -- Liquidacoin proyectada por periodos
- biMo := tbPeriLiqu.FIRST;
- WHILE tbPeriLiqu.EXISTS(biMo) LOOP
- -- Carga variables de ambiente
- VAR.feFechRefe := tbPeriLiqu(biMo).feFechInic;
- VAR.sbPeriFisc := tbPeriLiqu(biMo).sbPeriFisc;
- VAR.sbLapsFisc := tbPeriLiqu(biMo).sbLapsFisc;
- --
- CARGA_UNIDLIQPER(VAR.feFechRefe);
- CARGA_LIQUPERI(VAR.feFechMovi);
- -- Liquida
- IF (UPPER(VAR.sbSaldTerc) = 'S') THEN
- LIQUIDA_PROPIETARI;
- ELSE
- LIQUIDAR;
- END IF;
- ACUMULA_MOVIMRELIQ;
- biMo := tbPeriLiqu.NEXT(biMo);
- END LOOP;
- -- Recorre los Movimientos Generados por la Formula
- biMo := VAR.tbMovireli.FIRST;
- WHILE VAR.tbMovireli.EXISTS(biMo) LOOP
- -- Consultar concepto de movimiento
- OPEN cuConcMovi (VAR.tbMovireli(biMo).sbConcMovi);
- FETCH cuConcMovi INTO rgConcMovi;
- CLOSE cuConcMovi;
- -- Solo aplica descuentos a facturas que no son por abonos
- IF (VAR.inValoMovi = 0) THEN
- inDescPeri := VAR.tbMovireli(biMo).inDescPeri * -1;
- inDescVige := VAR.tbMovireli(biMo).inDescVige * -1;
- ELSE
- inDescPeri := 0;
- inDescVige := 0;
- END IF;
- --
- inIntePeri := VAR.tbMovireli(biMo).inIntePeri;
- inInteVige := VAR.tbMovireli(biMo).inIntePeri;
- --
- IF ((inDescPeri + inDescVige) != 0) THEN
- rgDescPrpa.DeppFact := VAR.tbMovireli(biMo).inFactDesc;
- ELSE
- rgDescPrpa.DeppFact := 0;
- END IF;
- --
- rgDescPrpa.DEPPTIEM := VAR.sbEmpresa;
- rgDescPrpa.DEPPTIIM := VAR.sbTipoImpu;
- rgDescPrpa.DEPPDLEM := VAR.sbEmpresa;
- rgDescPrpa.DEPPDLTD := VAR.sbTidoFact;
- rgDescPrpa.DEPPDLND := inNumeDocu;
- rgDescPrpa.DEPPESTA := VAR.sbEstaActi;
- rgDescPrpa.DEPPTISI := VAR.sbTipoSuje;
- rgDescPrpa.DEPPSUIM := VAR.sbSujeImpu;
- rgDescPrpa.DEPPTERC := VAR.sbTercero;
- -- Asigna proyecto
- IF (VAR.sbProyInve = '%') THEN
- rgDescPrpa.DEPPPIOB := VAR.sbCaraNulo;
- ELSE
- rgDescPrpa.DEPPPIOB := VAR.sbProyInve;
- END IF;
- rgDescPrpa.DEPPCOMO := VAR.tbMovireli(biMo).sbConcMovi;
- rgDescPrpa.DEPPPERI := VAR.tbMovireli(biMo).sbPeriFisc;
- rgDescPrpa.DEPPLAPS := VAR.tbMovireli(biMo).sbLapsFisc;
- rgDescPrpa.DEPPFECH := VAR.feFechMovi;
- rgDescPrpa.DEPPVABA := 0;
- rgDescPrpa.DEPPCANT := 0;
- rgDescPrpa.DEPPVAUN := 0;
- rgDescPrpa.DEPPATVA := 0;
- rgDescPrpa.DEPPATVN := 0;
- -- Total Periodo
- rgDescPrpa.DeppDepe := inDescPeri;
- rgDescPrpa.DeppInpe := inIntePeri;
- rgDescPrpa.DeppVppe := inIntePeri - inDescPeri;
- -- Total Vigencia
- rgDescPrpa.DeppDevi := inDescVige;
- rgDescPrpa.DeppInvi := inInteVige;
- rgDescPrpa.DeppVpvi := inInteVige - inDescVige;
- -- Anticipos
- rgDescPrpa.DeppVaan := VAR.tbMovireli(biMo).inValoAnti;
- rgDescPrpa.DeppDean := (VAR.tbMovireli(biMo).inDescAnti * -1);
- rgDescPrpa.DeppAjvv := NVL(VAR.tbMovireli(biMo).inAjusVavi,0);
- rgDescPrpa.DeppAjvp := NVL(VAR.tbMovireli(biMo).inAjusVape,0);
- rgDescPrpa.DeppAjva := NVL(VAR.tbMovireli(biMo).inAjusVaan,0);
- dbms_output.put_line('DeppVaan='||VAR.tbMovireli(biMo).inValoAnti||' VAR.tbMovireli(biMo).inDescAnti='||VAR.tbMovireli(biMo).inDescAnti||' rgDescPrpa.DeppAjva='||rgDescPrpa.DeppAjva);
- --
- rgDescPrpa.DeppOppa := biSe;
- --
- IF (rgDescPrpa.DeppVppe != 0 OR rgDescPrpa.DeppVpvi != 0 OR rgDescPrpa.DeppVaan != 0 OR rgDescPrpa.DeppDean != 0 OR
- rgDescPrpa.DeppAjvv != 0 OR rgDescPrpa.DeppAjvp != 0 OR rgDescPrpa.DeppAjva != 0) THEN
- PRO_ACTUALIZA_DESTO(biSe,VAR.tbMovireli(biMo).sbPeriFisc,rgConcMovi.ComoSecu);
- END IF;
- --
- biMo := VAR.tbMovireli.NEXT(biMo);
- END LOOP;
- --
- biSe := tbOpciDesc.NEXT(biSe);
- END LOOP;
- END IF;
- IF (VAR.inValoMovi != 0 OR VAR.sbPeriInic IS NOT NULL) THEN
- -- ========================================================================
- -- Calcula el valor por concepto si es una factura por pago parcial o abono
- -- ========================================================================
- IF (VAR.inValoMovi != 0) THEN
- inValoPago := VAR.inValoMovi;
- inNumeCuot := 0;
- IF (VAR.sbPeriInic || VAR.sbPeriFina IS NOT NULL) THEN
- sbPeriInic := VAR.sbPeriInic;
- sbPeriFina := VAR.sbPeriFina;
- ELSE
- sbPeriInic := NULL;
- sbPeriFina := NULL;
- END IF;
- ELSE
- -- Si no es por valor va desde una vigencia inicial hasta una final
- -- si ademas se dedine una cuota (SasiSasaX) se toman solo los saldos
- --hasta esa cuota en el periodo final.
- sbPeriInic := VAR.sbPeriInic;
- sbPeriFina := VAR.sbPeriFina;
- inNumeCuot := 0;
- IF (sbPeriInic IS NOT NULL AND sbPeriFina IS NOT NULL AND VAR.inNumeCuot != 0 AND VAR.inNumeCuot != CANTPERUNI) THEN
- -- CCH07 : Se modifica asignacion de sbPeriInic con VAR.sbPeriInic a VAR.sbPeriFina
- sbPeriInic := VAR.sbPeriInic;
- sbPeriFina := VAR.sbPeriFina;
- inNumeCuot := VAR.inNumeCuot;
- END IF;
- END IF;
- -- Determinar el valor facturado a pagar por cada vigencia fiscal
- inTotaPago := 0;
- biIn := VAR.tbDescPrpa.FIRST;
- WHILE VAR.tbDescPrpa.EXISTS(biIn) LOOP
- IF (VAR.tbDescPrpa(biIn).DeppFech = feMaxiFech) THEN
- biMo := TO_NUMBER(VAR.tbDescPrpa(biIn).DeppPeri);
- IF NOT (tbPeriFact.EXISTS(biMo)) THEN
- tbPeriFact(biMo).sbPeriFisc := VAR.tbDescPrpa(biIn).DeppPeri;
- tbPeriFact(biMo).inValoFact := VAR.tbDescPrpa(biIn).DeppVpvi;
- ELSE
- tbPeriFact(biMo).inValoFact := tbPeriFact(biMo).inValoFact + VAR.tbDescPrpa(biIn).DeppVpvi;
- END IF;
- inTotaPago := inTotaPago + VAR.tbDescPrpa(biIn).DeppVpvi;
- END IF;
- biIn := VAR.tbDescPrpa.NEXT(biIn);
- END LOOP;
- -- Validar que el valor del pago no exceda el total de deuda a pagar
- IF (inValoPago != 0 AND inValoPago > inTotaPago) THEN
- inValoPago := inTotaPago;
- END IF;
- -- Determinar de acuerdo al valor a pagar hasta que vigencia alcanza a cubrir
- -- si y solo si es un pago por valor
- IF (VAR.inValoMovi != 0) THEN
- boExito := FALSE;
- biIn := tbPeriFact.FIRST;
- WHILE (tbPeriFact.EXISTS(biIn) AND boExito = FALSE) LOOP
- IF (sbPeriInic IS NULL) THEN
- sbPeriInic := tbPeriFact(biIn).sbPeriFisc;
- sbPeriFina := tbPeriFact(biIn).sbPeriFisc;
- END IF;
- IF ((inValoPago - tbPeriFact(biIn).inValoFact) < 0) THEN
- sbPeriFina := tbPeriFact(biIn).sbPeriFisc;
- boExito := TRUE;
- ELSE
- sbPeriFina := tbPeriFact(biIn).sbPeriFisc;
- inValoPago := inValoPago - tbPeriFact(biIn).inValoFact;
- IF (inValoPago = 0) THEN
- boExito := TRUE;
- END IF;
- END IF;
- biIn := tbPeriFact.NEXT(biIn);
- END LOOP;
- END IF;
- -- Regenerar los movimiento de la facturacion
- tbMoviTemp := VAR.tbMoviDoli;
- tbDescTemp := VAR.tbDescPrpa;
- tbMoviDoli.DELETE;
- VAR.tbMoviDoli.DELETE;
- VAR.tbDescPrpa.DELETE;
- biSe := tbMoviTemp.FIRST;
- WHILE tbMoviTemp.EXISTS(biSe) LOOP
- IF (tbMoviTemp(bise).ModlPeri BETWEEN sbPeriInic AND sbPeriFina) THEN
- IF NOT (tbMoviTemp(bise).ModlPeri = sbPeriFina AND (inValoPago > 0 OR inNumeCuot != 0)) THEN
- -- Consultar concepto de movimiento
- OPEN cuConcMovi(tbMoviTemp(bise).ModlComo);
- FETCH cuConcMovi INTO rgConcMovi;
- CLOSE cuConcMovi;
- -- Determinar variable de acumulados
- rgMoviDoli.MODLDLEM := tbMoviTemp(bise).ModlDlem;
- rgMoviDoli.MODLDLTD := tbMoviTemp(bise).ModlDltd;
- rgMoviDoli.MODLDLND := tbMoviTemp(bise).ModlDlnd;
- rgMoviDoli.MODLTIEM := tbMoviTemp(bise).ModlTiem;
- rgMoviDoli.MODLTIIM := tbMoviTemp(bise).ModlTiim;
- rgMoviDoli.MODLTISI := tbMoviTemp(bise).ModlTisi;
- rgMoviDoli.MODLSUIM := tbMoviTemp(bise).ModlSuim;
- rgMoviDoli.MODLTERC := tbMoviTemp(bise).ModlTerc;
- rgMoviDoli.MODLPRIN := tbMoviTemp(bise).ModlPrin;
- rgMoviDoli.MODLCOMO := tbMoviTemp(bise).ModlComo;
- rgMoviDoli.MODLPERI := tbMoviTemp(bise).ModlPeri;
- rgMoviDoli.MODLVAPF := tbMoviTemp(bise).ModlVapf;
- rgMoviDoli.MODLAAAN := tbMoviTemp(bise).ModlAaan;
- rgMoviDoli.MODLAAAC := tbMoviTemp(bise).ModlAaac;
- rgMoviDoli.MODLVAAC := tbMoviTemp(bise).ModlVaac;
- rgMoviDoli.MODLVADE := tbMoviTemp(bise).ModlVade;
- rgMoviDoli.MODLVAAN := tbMoviTemp(bise).ModlVaan;
- rgMoviDoli.MODLVAPA := tbMoviTemp(bise).ModlVapa;
- rgMoviDoli.MODLSALD := tbMoviTemp(bise).ModlSald;
- -- Periodo final debe desde en factura
- sbPeriFiDe := rgMoviDoli.MODLPERI;
- sbLapsFiDe := '12';
- --
- PRO_ACTUALIZA_MOVTO(tbMoviTemp(bise).ModlPeri,rgConcMovi.ComoSecu);
- END IF;
- END IF;
- biSe := tbMoviTemp.NEXT(biSe);
- END LOOP;
- IF (VAR.sbPeriFina IS NOT NULL AND sbPeriFide != VAR.sbVigeDocu AND VAR.sbPeriFina = VAR.sbVigeDocu) THEN
- sbPeriFiDe := rgLapsFina.LapsPeri;
- sbLapsFiDe := rgLapsFina.LapsLaps;
- END IF;
- biSe := tbDescTemp.FIRST;
- WHILE tbDescTemp.EXISTS(biSe) LOOP
- IF (tbDescTemp(bise).DeppPeri BETWEEN sbPeriInic AND sbPeriFina) THEN
- IF NOT (tbDescTemp(bise).DeppPeri = sbPeriFina AND (inValoPago > 0 OR inNumeCuot != 0)) THEN
- IF (tbDescTemp(bise).DeppVppe != 0 OR tbDescTemp(bise).DeppVpvi != 0 OR
- tbDescTemp(bise).DeppDepe != 0 OR tbDescTemp(bise).DeppDevi != 0) THEN
- VAR.tbDescPrpa(biSe) := tbDescTemp(biSe);
- END IF;
- END IF;
- END IF;
- biSe := tbDescTemp.NEXT(biSe);
- END LOOP;
- -- Generar valor de la factura por el valor de pago por distribuir y que no
- -- alcanzo a cubrir una vigencia completa o por la cantidad de cuotas para la
- -- ultima vigencia
- IF (inValoPago > 0 OR inNumeCuot != 0) THEN
- GENERA_PAGOPARCIAL(VAR.sbEmpresa,VAR.sbTipoImpu,
- sbPeriFina,VAR.sbLapsCero,
- sbPeriFina,VAR.sbLapsCero,
- inNumeCuot,inValoPago);
- --
- inSuimEdad := 0;
- feFechProD := VAR.feFechDocu;
- biSe := VAR.tbMoviPago.FIRST;
- WHILE VAR.tbMoviPago.EXISTS(biSe) LOOP
- -- Consultar concepto de movimiento
- OPEN cuConcMovi(VAR.tbMoviPago(biSe).sbConcepto);
- FETCH cuConcMovi INTO rgConcMovi;
- CLOSE cuConcMovi;
- --
- rgMoviDoli.MODLDLEM := VAR.sbEmpresa;
- rgMoviDoli.MODLDLTD := VAR.sbTidoFact;
- rgMoviDoli.MODLDLND := inNumeDocu;
- rgMoviDoli.MODLESTA := VAR.sbEstaActi;
- rgMoviDoli.MODLTIEM := VAR.tbMoviPago(biSe).sbEmpresa;
- rgMoviDoli.MODLTIIM := VAR.tbMoviPago(biSe).sbTipoImpu;
- rgMoviDoli.MODLTISI := VAR.tbMoviPago(biSe).sbTipoSuje;
- rgMoviDoli.MODLSUIM := VAR.tbMoviPago(biSe).sbSujeImpu;
- rgMoviDoli.MODLTERC := VAR.tbMoviPago(biSe).sbTercero;
- rgMoviDoli.MODLPRIN := VAR.tbMoviPago(biSe).sbProyInve;
- rgMoviDoli.MODLPERI := VAR.tbMoviPago(biSe).sbPeriodo;
- rgMoviDoli.MODLCOMO := VAR.tbMoviPago(biSe).sbConcepto;
- rgMoviDoli.MODLVADE := 0;
- rgMoviDoli.MODLVAPA := 0;
- rgMoviDoli.MODLSALD := 0;
- rgMoviDoli.MODLAAAC := 0;
- rgMoviDoli.MODLVAPF := 0;
- rgMoviDoli.MODLAAAN := 0;
- -- Valores para comparar y determinar donde clasificar la vigencia actual
- IF (VAR.tbMoviPago(biSe).sbPeriodo < rgLapsDocu.LapsPeri) THEN
- rgMoviDoli.MODLAAAN := VAR.tbMoviPago(biSe).inValoPago;
- ELSE
- -- Valor acumulado atrasado de la actual vigencia
- -- A este valor debo restarle el valor liquidado del periodo
- VAR.inSecuComo := rgConcMovi.ComoSecu;
- VAR.sbConcMovi := VAR.tbMoviPago(biSe).sbConcepto;
- CARGA_UNIDLIQPER(VAR.feFechDocu);
- -- Calculo de fecha de referencia para calculo de valores vencidos
- feFechPeri := FECHINPELI(VAR.feFechDocu);
- feFechProy := ADD_MONTHS(feFechPeri,UNIDADLIQU);
- inMODLAAAC := SALVENCONC(feFechPeri,VAR.tbMoviPago(biSe).sbPeriodo,VAR.tbMoviPago(biSe).sbLapso);
- inMODLVAPF := SALVENCONC(feFechProy,VAR.tbMoviPago(biSe).sbPeriodo,VAR.tbMoviPago(biSe).sbLapso);
- inMODLVAPF := inMODLVAPF - inMODLAAAC;
- --
- IF (inMODLAAAC > VAR.tbMoviPago(biSe).inValoPago) THEN
- rgMoviDoli.MODLAAAC := VAR.tbMoviPago(biSe).inValoPago;
- rgMoviDoli.MODLVAPF := 0;
- ELSE
- rgMoviDoli.MODLAAAC := inMODLAAAC;
- rgMoviDoli.MODLVAPF := VAR.tbMoviPago(biSe).inValoPago - inMODLAAAC;
- END IF;
- --
- END IF;
- -- Valor acumulado hasta la actual vigencia
- rgMoviDoli.MODLVAAC := rgMoviDoli.MODLAAAN + rgMoviDoli.MODLAAAC + rgMoviDoli.MODLVAPF;
- rgMoviDoli.MODLVAAN := VAR.tbMoviPago(biSe).inValoPago;
- -- Actulizo movimiento de factura
- PRO_ACTUALIZA_MOVTO(VAR.tbMoviPago(biSe).sbPeriodo,VAR.tbMoviPago(biSe).inComoSecu);
- -- Datos de descuento
- rgDescPrpa.DEPPTIEM := rgMoviDoli.ModlTiem;
- rgDescPrpa.DEPPTIIM := rgMoviDoli.ModlTiim;
- rgDescPrpa.DEPPDLEM := rgMoviDoli.ModlDlem;
- rgDescPrpa.DEPPDLTD := rgMoviDoli.ModlDltd;
- rgDescPrpa.DEPPDLND := rgMoviDoli.ModlDlnd;
- rgDescPrpa.DEPPESTA := rgMoviDoli.ModlEsta;
- rgDescPrpa.DEPPTISI := rgMoviDoli.ModlTisi;
- rgDescPrpa.DEPPSUIM := rgMoviDoli.ModlSuim;
- rgDescPrpa.DEPPTERC := rgMoviDoli.ModlTerc;
- rgDescPrpa.DEPPPIOB := rgMoviDoli.ModlPrin;
- rgDescPrpa.DEPPCOMO := rgMoviDoli.ModlComo;
- rgDescPrpa.DEPPPERI := VAR.tbMoviPago(biSe).sbPeriodo;
- rgDescPrpa.DEPPLAPS := VAR.tbMoviPago(biSe).sbLapso;
- rgDescPrpa.DEPPFECH := rgMoviDoli.ModlFech;
- rgDescPrpa.DEPPVABA := 0;
- rgDescPrpa.DEPPCANT := 0;
- rgDescPrpa.DEPPVAUN := 0;
- rgDescPrpa.DEPPFACT := 0;
- rgDescPrpa.DEPPDEPE := 0;
- rgDescPrpa.DEPPINPE := 0;
- rgDescPrpa.DEPPDEVI := 0;
- rgDescPrpa.DEPPINVI := 0;
- rgDescPrpa.DEPPVPPE := VAR.tbMoviPago(biSe).inValoPago;
- rgDescPrpa.DEPPVPVI := VAR.tbMoviPago(biSe).inValoPago;
- rgDescPrpa.DEPPATVA := 0;
- rgDescPrpa.DEPPATVN := 0;
- rgDescPrpa.DEPPVAAN := 0;
- rgDescPrpa.DEPPDEAN := 0;
- rgDescPrpa.DEPPAJVV := 0;
- rgDescPrpa.DEPPAJVP := 0;
- rgDescPrpa.DEPPAJVA := 0;
- --
- IF (rgDescPrpa.DeppVppe != 0 OR rgDescPrpa.DeppVpvi != 0) THEN
- PRO_ACTUALIZA_DESTO(0,rgDescPrpa.DeppPeri,rgConcMovi.ComoSecu);
- END IF;
- -- Calcular hasta donde pago
- IF (rgConcMovi.ComoInte = 'C') THEN
- VAR.sbPeriFisc := VAR.tbMoviPago(biSe).sbPeriodo;
- VAR.sbLapsFisc := VAR.tbMoviPago(biSe).sbLapso;
- VAR.feFechRefe := '01-01-'||VAR.sbPeriFisc;
- VAR.sbConcMovi := VAR.tbMoviPago(biSe).sbConcepto;
- VAR.inSecuComo := rgConcMovi.ComoSecu;
- -- Cargar unidad de liquidacion por periodo
- CARGA_UNIDLIQPER;
- --
- IF (VAR.tbMoviPago(biSe).sbTipoSuje = sbTisuPred) THEN
- inBaseMens := (AFOROCONCE / CANTPERUNI) / UNIDADLIQU;
- ELSE
- inBaseMens := AFOROCONCE;
- END IF;
- --
- inSaldDeud := SALDOCONCE - VAR.tbMoviPago(biSe).inValoPago;
- inTotaMese := MESESFECHA(FECHDEBSAL(inBaseMens,inSaldDeud,NULL,1),VAR.feFechDocu,'N');
- IF (VAR.sbPeriFisc = VAR.sbPeriMovi) THEN
- IF (VAR.inNumeCuot = 0) THEN
- feFechProD := '31-12-'||VAR.sbPeriFisc;
- feFechProD := ADD_MONTHS(feFechProD,1);
- ELSE
- feFechProD := ADD_MONTHS('01-01-'||VAR.sbPeriFisc,(VAR.inNumeCuot+1) * UNIDADLIQU);
- END IF;
- END IF;
- --
- IF (inTotaMese > inSuimEdad) THEN
- inSuimEdad := inTotaMese;
- END IF;
- END IF;
- biSe := VAR.tbMoviPago.NEXT(biSe);
- END LOOP;
- feFechDebe := FECHAEDAD(feFechProD,inSuimEdad);
- feFechDebe := ADD_MONTHS(feFechDebe,-1);
- -- Consultar lapso de fecha pago hasta cuando es factura por abono
- OPEN cuLapso(feFechDebe);
- FETCH cuLapso INTO rgLapso;
- boExito := cuLapso%FOUND;
- CLOSE cuLapso;
- --
- IF (boExito) THEN
- sbPeriFiDe := rgLapso.LapsPeri;
- sbLapsFiDe := rgLapso.LapsLaps;
- END IF;
- END IF;
- END IF;
- -- Validar si no existe un valor a pagar de la vigencia menor a cero, lo cual puede
- -- suceder en el caso que el descuento supere el valor a pagar de la vigencia
- inVapaVige := 0.00;
- biIn := VAR.tbDescPrpa.FIRST;
- WHILE VAR.tbDescPrpa.EXISTS(biIn) LOOP
- -- Total Vigencia
- inVapaVige := inVapaVige + VAR.tbDescPrpa(biIn).DeppVpvi;
- --
- biIn := VAR.tbDescPrpa.NEXT(biIn);
- END LOOP;
- --========================================================================
- -- Crear la factura
- --========================================================================
- biSe := tbMoviDoli.COUNT;
- IF (tbMoviDoli.COUNT > 0 AND inVapaVige > 0) THEN
- IF (VAR.inDlcuNufa IS NOT NULL AND VAR.inDlcuNufa > 0) THEN
- rgDoliCuen.DLCUNUFA := VAR.inDlcuNufa;
- END IF;
- rgDoliCuen.DLCUTIEM := VAR.sbEmpresa;
- rgDoliCuen.DLCUTIIM := VAR.sbTipoImpu;
- rgDoliCuen.DLCUEMPR := VAR.sbEmpresa;
- rgDoliCuen.DLCUTIDO := VAR.sbTidoFact;
- rgDoliCuen.DLCUNUME := inNumeDocu;
- rgDoliCuen.DLCUFECH := VAR.feFechDocu;
- rgDoliCuen.DLCUFEVE := VAR.feFechVenc;
- rgDoliCuen.DLCUFVSR := NVL(VAR.feFechPago,VAR.feFechVenc);
- rgDoliCuen.DLCUDIEM := VAR.sbEmpresa;
- rgDoliCuen.DLCUDIVI := VAR.sbDivision;
- rgDoliCuen.DLCUPERI := rgLapsDocu.LapsPeri;
- rgDoliCuen.DLCULAPS := rgLapsDocu.LapsLaps;
- rgDoliCuen.DLCUTISI := VAR.sbTipoSuje;
- rgDoliCuen.DLCUSUIM := VAR.sbSujeImpu;
- rgDoliCuen.DLCUVAFA := inTotaDocu;
- rgDoliCuen.DLCUVATA := inTotaDocu;
- rgDoliCuen.DLCUSALD := inTotaDocu;
- rgDoliCuen.DLCUFEVD := VAR.feFechDocu;
- rgDoliCuen.DLCUPEID := sbPeriInDe;
- rgDoliCuen.DLCULAID := sbLapsInDe;
- rgDoliCuen.DLCUPEFD := sbPeriFiDe;
- rgDoliCuen.DLCULAFD := sbLapsFiDe;
- IF (VAR.inNumeLote IS NULL) THEN
- VAR.inNumeLote := pkgNumerado.fun_ProximoNumero(sbNumeLofa,'C');
- END IF;
- rgDoliCuen.DLCULOTE := VAR.inNumeLote;
- IF (VAR.rgSujeImpu.SuimTerc IS NOT NULL) THEN
- rgDoliCuen.DLCUTERC := VAR.rgSujeImpu.SuimTerc;
- ELSE
- rgDoliCuen.DLCUTERC := VAR.sbTercero;
- END IF;
- rgDoliCuen.DLCUESTA := VAR.sbEstaActi;
- -- Asigna proyecto
- IF (VAR.sbProyInve = '%') THEN
- rgDoliCuen.DLCUPRIN := VAR.sbCaraNulo;
- ELSE
- rgDoliCuen.DLCUPRIN := VAR.sbProyInve;
- END IF;
- rgDoliCuen.DLCUDAEM := NULL;
- rgDoliCuen.DLCUDATD := NULL;
- rgDoliCuen.DLCUDAVN := NULL;
- rgDoliCuen.DLCUDAND := NULL;
- rgDoliCuen.DLCUOBSE := VAR.sbObseDocu;
- rgDoliCuen.DLCUVADE := 0;
- -- Define si es una factura por abono
- IF (VAR.sbPeriInic IS NOT NULL OR NVL(VAR.inValoMovi,0) > 0 OR NVL(VAR.inNumeCuot,0) > 0) THEN
- rgDoliCuen.DLCUFATO := 'N';
- ELSE
- rgDoliCuen.DLCUFATO := 'S';
- END IF;
- --
- rgDoliCuen.DLCUVAPA := 0;
- rgDoliCuen.DLCUVAFA := 0;
- rgDoliCuen.DLCUVATA := 0;
- rgDoliCuen.DLCUSALD := 0;
- rgDoliCuen.DLCUVAPE := 0;
- rgDoliCuen.DLCUAVFI := 0;
- rgDoliCuen.DLCUBAGR := 0;
- rgDoliCuen.DLCUNUCI := 0;
- rgDoliCuen.DLCUFEPA := NULL;
- rgDoliCuen.DLCUAPEM := NULL;
- rgDoliCuen.DLCUAPTD := NULL;
- rgDoliCuen.DLCUAPND := NULL;
- rgDoliCuen.DLCUNUCU := NVL(VAR.inNumeCuot,0);
- -- Inactiva La Factura Anterior
- IF (NVL(VAR.sbAnulFaan,'N') = 'S') THEN
- UPDATE DoliCuen
- SET DlcuEsta = VAR.sbEstaInac
- WHERE DlcuTisi = rgDoliCuen.DLCUTISI
- AND DlcuSuim = rgDoliCuen.DLCUSUIM
- AND DlcuPrin = rgDoliCuen.DLCUPRIN
- AND DlcuEsta = VAR.sbEstaActi
- AND DlcuEmpr = rgDoliCuen.DLCUEMPR
- AND DlcuTido = rgDoliCuen.DLCUTIDO
- AND DlcuNume < rgDoliCuen.DLCUNUME
- AND DlcuTiem = rgDoliCuen.DLCUTIEM
- AND DlcuTiim = rgDoliCuen.DLCUTIIM;
- END IF;
- -- Crear documento
- pkgDoliCuen.pro_Crear(rgDoliCuen);
- -- Incrementar numeracion de facturas
- IF (rgTipoDocu.NumeUsse = 'N') THEN
- UPDATE Numerado
- SET NumePrnu = NumePrnu + 1
- WHERE NumeCodi = sbNumeDocu;
- END IF;
- --
- VAR.inNumeFact := 0;
- --========================================================================
- -- Armar movimiento de factura
- --========================================================================
- rgMoviDoli.MODLTIEM := rgDoliCuen.DlcuTiem;
- rgMoviDoli.MODLTIIM := rgDoliCuen.DlcuTiim;
- rgMoviDoli.MODLDLEM := rgDoliCuen.DlcuEmpr;
- rgMoviDoli.MODLDLTD := rgDoliCuen.DlcuTido;
- rgMoviDoli.MODLDLND := rgDoliCuen.DlcuNume;
- rgMoviDoli.MODLFECH := rgDoliCuen.DlcuFech;
- rgMoviDoli.MODLPERI := rgDoliCuen.DlcuPeri;
- rgMoviDoli.MODLLAPS := rgDoliCuen.DlcuLaps;
- rgMoviDoli.MODLTISI := rgDoliCuen.DlcuTisi;
- rgMoviDoli.MODLSUIM := rgDoliCuen.DlcuSuim;
- rgMoviDoli.MODLESTA := rgDoliCuen.DlcuEsta;
- rgMoviDoli.MODLTERC := rgDoliCuen.DlcuTerc;
- rgMoviDoli.MODLPRIN := rgDoliCuen.DlcuPrin;
- rgMoviDoli.MODLCOMO := NULL;
- rgMoviDoli.MODLINT1 := 0;
- rgMoviDoli.MODLINT2 := 0;
- rgMoviDoli.MODLINT3 := 0;
- rgMoviDoli.MODLTALI := 0;
- biSe := tbMoviDoli.FIRST;
- WHILE tbMoviDoli.EXISTS(biSe) LOOP
- IF (tbMoviDoli(bise).ModlSald != 0 OR
- tbMoviDoli(biSe).ModlVaan != 0) THEN
- rgMoviDoli.MODLCOMO := tbMoviDoli(bise).ModlComo;
- rgMoviDoli.MODLPERI := tbMoviDoli(bise).ModlPeri;
- rgMoviDoli.MODLVAPF := tbMoviDoli(bise).ModlVapf;
- rgMoviDoli.MODLAAAN := tbMoviDoli(bise).ModlAaan;
- rgMoviDoli.MODLAAAC := tbMoviDoli(bise).ModlAaac;
- rgMoviDoli.MODLVAAC := tbMoviDoli(bise).ModlVaac;
- rgMoviDoli.MODLVADE := tbMoviDoli(bise).ModlVade;
- rgMoviDoli.MODLVAAN := tbMoviDoli(bise).ModlVaan;
- rgMoviDoli.MODLVAPA := tbMoviDoli(bise).ModlVapa;
- rgMoviDoli.MODLSALD := tbMoviDoli(bise).ModlSald;
- rgMoviDoli.MODLTALI := tbMoviDoli(bise).ModlTali;
- -- Crear registro
- boExito := pkgMoviDoli.funCrear_Movi(rgMoviDoli);
- END IF;
- biSe := tbMoviDoli.NEXT(biSe);
- END LOOP;
- -- Generar descuentos por pronto pago y liquidacion de intereses proyectados
- inSecuMovi := 0;
- biIn := VAR.tbDescPrpa.FIRST;
- WHILE VAR.tbDescPrpa.EXISTS(biIn) LOOP
- inSecuMovi := inSecuMovi + 1;
- --
- rgDescPrpa.DeppTiem := VAR.tbDescPrpa(biIn).DeppTiem;
- rgDescPrpa.DeppTiim := VAR.tbDescPrpa(biIn).DeppTiim;
- rgDescPrpa.DeppDlem := VAR.tbDescPrpa(biIn).DeppDlem;
- rgDescPrpa.DeppDltd := VAR.tbDescPrpa(biIn).DeppDltd;
- rgDescPrpa.DeppDlnd := VAR.tbDescPrpa(biIn).DeppDlnd;
- rgDescPrpa.DeppEsta := VAR.tbDescPrpa(biIn).DeppEsta;
- rgDescPrpa.DeppTisi := VAR.tbDescPrpa(biIn).DeppTisi;
- rgDescPrpa.DeppSuim := VAR.tbDescPrpa(biIn).DeppSuim;
- -- Asignacion del tercero diferente a punto cuando no maneja saldos por tercero
- -- de manera informativa para visualizar al momento del pago manual
- IF (UPPER(VAR.sbSaldTerc) = 'N' AND VAR.tbDescPrpa(biIn).DeppTerc = pkgConstantes.sbCaraNull) THEN
- rgDescPrpa.DeppTerc := rgDoliCuen.DlcuTerc;
- ELSE
- rgDescPrpa.DeppTerc := VAR.tbDescPrpa(biIn).DeppTerc;
- END IF;
- --
- rgDescPrpa.DeppPiob := VAR.tbDescPrpa(biIn).DeppPiob;
- rgDescPrpa.DeppPeri := VAR.tbDescPrpa(biIn).DeppPeri;
- rgDescPrpa.DeppLaps := VAR.tbDescPrpa(biIn).DeppLaps;
- rgDescPrpa.DeppVaba := VAR.tbDescPrpa(biIn).DeppVaba;
- rgDescPrpa.DeppCant := VAR.tbDescPrpa(biIn).DeppCant;
- rgDescPrpa.DeppVaun := VAR.tbDescPrpa(biIn).DeppVaun;
- --
- rgDescPrpa.deppsecu := inSecuMovi;
- rgDescPrpa.deppcomo := VAR.tbDescPrpa(biIn).DeppComo;
- rgDescPrpa.deppfech := VAR.tbDescPrpa(biIn).DeppFech;
- rgDescPrpa.deppfact := VAR.tbDescPrpa(biIn).DeppFact;
- -- Periodo
- rgDescPrpa.deppdepe := VAR.tbDescPrpa(biIn).DeppDepe;
- rgDescPrpa.deppinpe := VAR.tbDescPrpa(biIn).DeppInpe;
- rgDescPrpa.deppvppe := VAR.tbDescPrpa(biIn).DeppVppe;
- -- Total Vigencia
- rgDescPrpa.deppdevi := VAR.tbDescPrpa(biIn).DeppDevi;
- rgDescPrpa.deppinvi := VAR.tbDescPrpa(biIn).DeppInvi;
- rgDescPrpa.deppvpvi := VAR.tbDescPrpa(biIn).DeppVpvi;
- rgDescPrpa.DeppOppa := VAR.tbDescPrpa(biIn).DeppOppa;
- rgDescPrpa.DEPPATVA := VAR.tbDescPrpa(biIn).DEPPATVA;
- rgDescPrpa.DEPPATVN := VAR.tbDescPrpa(biIn).DEPPATVN;
- rgDescPrpa.DEPPVAAN := VAR.tbDescPrpa(biIn).DEPPVAAN;
- rgDescPrpa.DEPPDEAN := VAR.tbDescPrpa(biIn).DEPPDEAN;
- rgDescPrpa.DEPPAJVV := VAR.tbDescPrpa(biIn).DEPPAJVV;
- rgDescPrpa.DEPPAJVP := VAR.tbDescPrpa(biIn).DEPPAJVP;
- rgDescPrpa.DEPPAJVA := VAR.tbDescPrpa(biIn).DEPPAJVA;
- -- Crea el Registro
- pkgDescPrpa.pro_Crear(rgDescPrpa);
- --
- biIn := VAR.tbDescPrpa.NEXT(biIn);
- END LOOP;
- VAR.feFechMovi := VAR.feFechApli;
- sbMarcFact := 'FACT-'||TO_CHAR(VAR.feFechMovi,'DD-MM-YYYY');
- END IF;
- END IF;
- -- Calcular edad de la deuda
- feFechDebe := DEBEDESDE(VAR.sbEmpresa, VAR.sbTipoImpu,
- VAR.sbTipoSuje, VAR.sbSujeImpu,
- VAR.sbTercero, VAR.sbProyInve,
- VAR.feFechDocu,'S');
- IF (feFechDebe IS NOT NULL) THEN
- -- Calcular datos para actualizar sujetos
- sbPeriDebe := PERIOFECHA(feFechDebe);
- sbLapsDebe := MESFECHA(feFechDebe);
- inEdadDeud := MESESFECHA(feFechDebe,VAR.feFechDocu,'M');
- inEdadDeud := FLOOR(inEdadDeud/UNIDADLIQU);
- -- Consultar lapso de fecha debe
- OPEN cuLapso(feFechDebe);
- FETCH cuLapso INTO rgLapso;
- boExito := cuLapso%FOUND;
- CLOSE cuLapso;
- --
- IF (boExito) THEN
- sbPeriInDe := rgLapso.LapsPeri;
- sbLapsInDe := rgLapso.LapsLaps;
- ELSE
- sbPeriInDe := VAR.sbCaraNulo;
- sbLapsInDe := VAR.sbCaraNulo;
- END IF;
- -- Actualizar edad de la deuda en factura
- UPDATE DoliCuen
- SET DlcuPeid = sbPeriInDe,
- DlcuLaid = sbLapsInDe
- WHERE DlcuTiem = rgDoliCuen.DLCUTIEM AND
- DlcuTiim = rgDoliCuen.DLCUTIIM AND
- DlcuEmpr = rgDoliCuen.DLCUEMPR AND
- DlcuTido = rgDoliCuen.DLCUTIDO AND
- DlcuNume = rgDoliCuen.DLCUNUME;
- --
- END IF;
- -- Marcar sujeto con marca de facturacion
- UPDATE SUJEIMPU
- SET SuimEdad = inEdadDeud, SuimPedd = sbPeriDebe, SuimLadd = sbLapsDebe, SuimMafa = sbMarcFact
- WHERE SuimTisi = VAR.sbTipoSuje AND
- SuimSuim = VAR.sbSujeImpu;
- --
- COMMIT;
- -- Liberar la memoria
- IF (NVL(VAR.sbSuimInic,'%') != '%' AND NVL(VAR.sbSuimInic,'%') = NVL(VAR.sbSuimFina,'%') AND INSTR(VAR.sbSuimInic,'%') = 0) THEN
- VAR.sbPeriInic := NULL;
- VAR.sbLapsInic := NULL;
- VAR.sbPeriFina := NULL;
- VAR.sbLapsFina := NULL;
- END IF;
- --
- VAR.inValoMovi := 0;
- VAR.inNumeCuot := 0;
- --
- LIBERA_MEMORIA;
- -- Recuperacion de las variables temporales y asignarlas tal como fueron enviadas desde IGFA
- VAR.sbEmpresa := sbEmprCodi;
- VAR.sbTipoImpu := sbTipoImpu;
- VAR.sbTipoSuje := sbTipoSuje;
- VAR.sbSujeImpu := sbSujeImpu;
- VAR.sbSuimInic := sbSuimInic;
- VAR.sbSuimFina := sbSuimFina;
- VAR.sbTercero := sbTercero;
- VAR.sbProyInve := sbProyInve;
- VAR.sbPeriMovi := sbPeriMovi;
- VAR.sbVigeDocu := sbVigeDocu;
- VAR.sbLapsMovi := sbLapsMovi;
- VAR.sbTidoFact := sbTidoFact;
- VAR.feFechDocu := feFechDocu;
- VAR.feFechMovi := feFechMovi;
- VAR.feFechVenc := feFechVenc;
- VAR.feFechCort := feFechCort;
- VAR.feFechPago := feFechPago;
- VAR.inValoMovi := inValoMovi;
- VAR.sbObseDocu := sbObseDocu;
- VAR.sbAbonGrav := sbAbonGrav;
- VAR.sbCancGrav := sbCancGrav;
- VAR.sbConcRefe := sbConcRefe;
- VAR.sbTipoDocu := sbTipoDocu;
- VAR.sbProyInte := sbProyInte;
- VAR.sbDeudActu := sbDeudActu;
- VAR.sbCargVafa := sbCargVafa;
- VAR.sbMarcFact := sbMarcFati;
- VAR.inNumeLote := inNumeLote;
- VAR.sbPeriInic := sbPeinCrfa;
- VAR.sbLapsInic := sbLainCrfa;
- VAR.sbPeriFina := sbPefiCrfa;
- VAR.sbLapsFina := sbLafiCrfa;
- VAR.inNumeCuot := inNumeCrfa;
- VAR.inNumeInic := inNumeInic;
- VAR.inNumeFina := inNumeFina;
- -- Fin de bloque de recuperacion de las variables
- /*
- Historia de Modificaciones
- Autor Fecha Descripcion
- --------------------------------------------------------------------
- CCH070 30-06-2009 Al abrir el curso cuLapso se agrego TRUNC en el parametro
- puesto que por redondeo de fechas no encontraba el lapso
- para la fecha de la factura aunque en MLAP estaba configurado
- --------------------------------------------------------------------
- CCH070 01-10-2008 Se modifica asignacion de sbPeriInic con VAR.sbPeriFina a VAR.sbPeriInic
- en el caso de ser una factura parcial por peridoos y cuota sin valor de pago definido,
- anteriomentesolo se generaba con los saldos para el periodo final ahora
- se toman todos los saldos desde elperiodo inicial hasta el final pero en este
- ultimo solo los que estan hasta la cuota definida.
- --------------------------------------------------------------------
- CCH070 02-04-2007 Se agrega variable feFechVeDe con la que valida si la fecha de
- vencimiento dada para para factura es menor que la configurada en
- MTIL en el parametro FECHVENC, en cuyo caso la factura se genera con una
- sola opcion de pago correspondiente a esta fecha
- */
- END GENERA_FACTURA;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement