lunes, 22 de octubre de 2012

SQLRPGLE


                                                               
                                             
      *-********************************************************************
      *-
      *-
      *-
      *-
      *-
      *- Realizado por el Analista:
      *-
      *-            --**  Leonardo Arévalo  **--
      *-            --**   06-09-2007       **--
      *-
      *-********************************************************************
     H DECEDIT('0,') DATEDIT(*DMY/)
     FSMSTEM01  UP A E           K DISK    PREFIX(SMST_)
     FSMSPF02   IF A E           K DISK    PREFIX(SMS1_)
     FSMSTXT2   O    E             DISK
     FSMSLI01   IF   E           K DISK    PREFIX(SMS_)
     D
      //definir data struc para sql
     D                 DS
     D XFECHA1                 1      8  0
     D  XANOD                  1      4  0
     D  XMESD                  5      6  0
     D  XDIAD                  7      8  0
     D
      *------------------------------
      * FECHA VENCIMIENTO PARA MSG  -
      *------------------------------
     D                 DS
     D  FECVEN                 1     10
     D  DIAVEN                 1      2  0
     D  ESLA1                  3      3    INZ('/')
     D  MESVEN                 4      5  0
     D  ESLA2                  6      6    INZ('/')
     D  AÑOVEN                 7     10  0
      *-------------------------------------
      *-------------------------------------
      * FECHA DESDE
      *-------------------------------------
     D                 DS
     D  DESDE                  1      8  0
     D  DIADES                 1      2  0
     D  MESDES                 3      4  0
     D  AÑODES                 5      8  0
      *-------------------------------------
      * FECHA INVERTIDA
      *-------------------------------------
     D                 DS
     D  FECINV                 1      8  0
     D  DIAINV                 7      8  0
     D  MESINV                 5      6  0
     D  AÑOINV                 1      4  0
      *-------------------------------------
      * FECHA DE VENCIMIENTO               *
      *-------------------------------------
     D                 DS
     D  FECVCT                 1      8  0
     D  DIVCT                  7      8  0
     D  MEVCT                  5      6  0
     D  AÑVCT                  1      4  0
      *-------------------------------------
      * FECHA 1  FECVCT
      *-------------------------------------
     D                 DS
     D  FECHA1                 1      8  0
     D  DIAFE1                 1      2  0
     D  MESFE1                 3      4  0
     D  ANOFE1                 5      8  0
      *-------------------------------------
      * FECHA 2 PARAMETROS
      *-------------------------------------
     D                 DS
     D  FECHA2                 1      8  0
     D  DIAFE2                 1      2  0
     D  MESFE2                 3      4  0
     D  ANOFE2                 5      8  0
      *-------------------------------------
      * FECHA 2 PARAMETROS
      *-------------------------------------
     D                 DS
     D  FEC4                   1      8  0
     D  DIA4                   1      2  0
     D  MES4                   3      4  0
     D  ANO4                   5      8  0
      *-------------------------------------------------------------
     D TIPCOB1         S              1S 0
     D NGIR1           S              2S 0
     D DIASV1          S              2S 0
     D CDCON1          S              1S 0
     D TIPOP           S              1S 0
     D MONTC           S             15
     D CELULAR         S             11
     D AAAAMMDD1       S               D   DATFMT(*ISO)
     D AAAAMMDD2       S               D   DATFMT(*ISO)
     D XFEC1           S               D   DATFMT(*EUR)
     D XFEC2           S               D   DATFMT(*EUR)
     D XFEC1R          S               D   DATFMT(*EUR)
     D XFEC2R          S               D   DATFMT(*EUR)
     D AAAAMMDD3       S              8  0
     D FEC1            S              8
     D FEC2            S              8
     D FEC3            S              8
     D*FEC4            S              8
     D METOD           S              1
     D MES1            S              2  0
     D MES2            S              2
     D PAS             S              1  0 INZ(0)
     D TEXTO2          S            144A
      *-------------------------------------------------------------
      *   b.nrreg,b.nrgir,b.aÑvct,b.mevct,b.divct,b.mongi,b.cdcon
     D REGISTRO        DS
     D  SQLTELEFONO                  12S 0
     D  SNRREG                        6S 0
     D  SNRGIR                        3S 0
     D  SAÑVCT                        4S 0
     D  SMEVCT                        2S 0
     D  SDIVCT                        2S 0
     D  SMONGI                       15S 2
     D  SCDCON                        1S 0
     D  SZONAT                        4S 0
      *
     ISMSTEMR
     I                                          SMST_NRREG    L1
     C
      *-********************************************************************
      *- El inicio del programa esta contenido en la rutina (*inzsr)
      *- esta intruccion se ejecuta primiero e luego el resto del programa
      *-********************************************************************
     C
      *--
     C                   Z-ADD     SMST_DIVCT    DIAFE1
     C                   Z-ADD     SMST_MEVCT    MESFE1
     C                   Z-ADD     SMST_AÑVCT    ANOFE1
      *--
     C                   MOVE      SMST_TELEFO   CELULAR
      *-
     C   L1              EVAL      GIROS=0
     C   L1              EVAL      TOTDEU=0
     C*    Valida la fecha desde
     C     *EUR          TEST (D)                FECHA1                 35
      *
     C                   IF        *IN35=*OFF AND *IN36=*OFF
     C     *EUR          MOVE      FECHA1        XFEC1
     C                   ENDIF
      *-
     C                   IF        *IN35=*OFF AND *IN36=*OFF
     C
     C                   ADD       SMST_MONGI    TOTDEU           13 2
     C                   MOVE      SMST_NRGIR    NUMGIR            2
     C                   ADD       1             GIROS             2 0
     C                   Z-ADD     SMST_DIVCT    DIAVEN
     C                   Z-ADD     SMST_MEVCT    MESVEN
     C                   Z-ADD     SMST_AÑVCT    AÑOVEN
     C                   MOVE      SMST_NRREG    FINANC            6
     C                   EVAL      CDCON1=SMST_CDCON
     C                   ENDIF
      *
     C*1                 EXSR      RUTL1
      *-genera txt
     CL1                 EXSR      GENERA_TXT
     C
     C*R                 WRITE     RTOTGE
     C
      *-********************************************************************
      *- fin de PGM
      *-********************************************************************
     C
      *-********************************************************************
      *-genera txt
      *-********************************************************************
     C     GENERA_TXT    BEGSR
     C
     C                   MOVE      SMST_TELEFO   TELEFON          12
      *- establecer parametros
     C                   EVAL      TIPOP=0
      *---------------------------------------------------------------------
      *- valida fecha
      *
      *-5 dias despues
      *1.
     C                   IF        XFEC1R=XFEC1
     C                   IF        GIROS=1
      *--5 dias antes del 1er vencimiento
     C                   EVAL      TIPOP=1
     C                   MOVEL     XFEC1         FECVEN
     C                   ELSE
     C                   IF        GIROS=2
      *--5 dias antes del 2do vencimiento
     C                   EVAL      TIPOP=3
     C                   MOVEL     XFEC1         FECVEN
     C                   ENDIF
     C                   ENDIF
     C                   ENDIF
      *2.
      *-5 dias antes
     C                   IF        XFEC2R=XFEC1
     C                   IF        GIROS=1
      *-5 dias despues del vencimiento
     C                   EVAL      TIPOP=2
     C                   MOVEL     XFEC1         FECVEN
     C                   ELSE
     C                   IF        GIROS=2
     C                   MOVEL     XFEC1         FECVEN
     C                   ENDIF
     C                   ENDIF
     C                   ENDIF
     C
      *-si vence la segunda cuota
     C                   IF        XFEC1=XFEC2  AND GIROS=2
     C                   EVAL      TIPOP=4
     C                   MOVEL     XFEC1         FECVEN
     C                   ENDIF
     C
      *-*-------------------------------------------------------------------
      *-se genera sms
     C                   IF        TIPOP<>0
      *-monto
     C                   EVAL      MONTC=*BLANKS
     C                   EVAL      MONTC=%EDITC(TOTDEU:'N')
      * parametros
     C                   EVAL      TIPCOB1=CDCON1
     C                   EVAL      DIASV1=TIPOP
     C                   EVAL      ESLA1='/'
     C                   EVAL      ESLA2='/'
      *--genera el sms
     C                   EXSR      GENERA_SMS
      *--graba sms
     C                   EXSR      GRABA_SMS
     C                   ENDIF
      *-*-------------------------------------------------------------------
      *--sms continuos al mensages inicial
     C                   IF        (TIPOP=2 OR TIPOP=3 OR TIPOP=4)
     C                             AND ( %SCAN('infructuosa':TEXTO2) = 0 )
     C                   EVAL      TIPOP=5
      * parametros
     C                   EVAL      TIPCOB1=0
     C                   EVAL      DIASV1=TIPOP
      *--genera el sms
     C                   EXSR      GENERA_SMS
      *--graba sms
     C                   EXSR      GRABA_SMS
     C                   ENDIF
      *-*-------------------------------------------------------------------
      *--sms continuos al mensages inicial  15,30
     C                   EVAL      METOD='A'
     C                   EVAL      FEC1='15'+%EDITC(*MONTH:'X')+%CHAR(*YEAR)
     C                   EVAL      FEC2=%EDITC(*DATE:'X')
      *-verifica dia habil mas cercano
     C                   EXSR      FECHA_HAB
     C
     C                   IF        FEC2=FEC3 AND CDCON1=02
     C                             OR
     C                             FEC2=FEC3 AND CDCON1=01
     C
     C                   EVAL      TIPOP=6
      * parametros
     C                   EVAL      TIPCOB1=0
     C                   EVAL      DIASV1=TIPOP
      *--genera el sms
     C                   EXSR      GENERA_SMS
      *--graba sms
     C                   EXSR      GRABA_SMS
     C                   ENDIF
     C
     C*                  IF        PAS=1
     C*                  EVAL      PAS=0
     C*                  EXSR      GRABAARC_SMS
     C*                  ENDIF
     C
     C                   MOVE      *BLANKS       TEXTO
     C                   ENDSR
      *-********************************************************************
      *- Rutina que genera SMS
      *-********************************************************************
     C     GENERA_SMS    BEGSR
     C
     C                   MOVEL     *BLANKS       TEXTO2
     C     KEYSMS        CHAIN     SMSLI01
     C                   IF        %FOUND(SMSLI01)
     C                   MOVE      SMS_CODSMS    CODSM             3
     C                   MOVE      SMST_TELEFO   TCELU            12
     C                   MOVE      FECVEN        TFECHA           10
     C                   MOVE      MONTC         TMONTO           15
     C                   MOVE      NUMGIR        TNROGI            2
     C                   MOVE      GIROS         TNROGN            2
     C                   MOVE      *ZEROS        TXCONV          180
     C                   MOVE      SMST_CDZNA    TXZONT            4
     C                   CALL      'SRPD34'
     C                   PARM                    CODSM
     C                   PARM                    TCELU
     C                   PARM                    TFECHA
     C                   PARM                    TMONTO
     C                   PARM                    TNROGI
     C                   PARM                    TNROGN
     C                   PARM                    TXCONV
     C                   PARM                    TXZONT
     C                   MOVEL     TXCONV        TEXTO2
     C*                  MOVE      TEXTO2        TEXTO
     C                   ENDIF
     C
     C                   ENDSR
      *-********************************************************************
      *- Rutina que indica el dia habil mas cercano
      *-********************************************************************
     C     FECHA_HAB     BEGSR
     C
     C                   MOVE      *BLANKS       FEC3
     C                   CALL      'SRPD35'
     C                   PARM                    FEC1
     C                   PARM                    FEC3
     C                   PARM                    METOD
     C
     C                   ENDSR
      *-********************************************************************
      *- Rutina que graba SMS
      *-********************************************************************
     C     GRABA_SMS     BEGSR
     C                   EVAL      PAS=1
     C                   IF        TEXTO2<>*BLANKS
     C                   EVAL      TEXTO=CELULAR+';'+TEXTO2
     C                   WRITE     MSGTXT
     C                   EXSR      GRABAARC_SMS
     C                   ENDIF
     C
     C                   ENDSR
      *--*******************************************************************
      *- Rutina que actualiza archivo sms
      *--*******************************************************************
     C     GRABAARC_SMS  BEGSR
     C                   EVAL      SMS1_NRREG=SMST_NRREG
     C                   EVAL      SMS1_NRGIR=SMST_NRGIR
     C                   EVAL      SMS1_AÑVCT=SMST_AÑVCT
     C                   EVAL      SMS1_MEVCT=SMST_MEVCT
     C                   EVAL      SMS1_DIVCT=SMST_DIVCT
     C                   EVAL      SMS1_MONGI=SMST_MONGI
     C                   EVAL      SMS1_CDCON=SMST_CDCON
     C                   EVAL      SMS1_TELEFO=SMST_TELEFO
     C                   EVAL      SMS1_FECEMI=AAAAMMDD1
     C                   EVAL      SMS1_DETSMS=TEXTO
     C*                  EVAL      SMS1_CODSMS=SMS_CODSMS
     C                   WRITE     SMSPF02R
     C                   ENDSR
      *--*******************************************************************
      *- Rutina de inicio de PGM
      *--*******************************************************************
     C     *INZSR        BEGSR
      *
     C     KEYSMS        KLIST
     C                   KFLD                    TIPCOB1
     C                   KFLD                    DIASV1
     C
     C     *ENTRY        PLIST
     C                   PARM                    DESD              8
      *
     C                   MOVE      DESD          DESDE
      *
     C                   MOVE      '0'           TRUE              1
     C     DESDE         IFEQ      0
     C                   MOVE      *DATE         DESDE
     C                   ELSE
     C                   CALL      'SRPD01'
     C                   PARM                    DESD
     C                   PARM                    TRUE
     C                   ENDIF
     C                   MOVE      TRUE          *INLR
     C                   MOVE      TRUE          *IN01
      *
     C     *IN01         IFEQ      *OFF
     C                   MOVE      DIADES        DIAINV
     C                   MOVE      MESDES        MESINV
     C                   MOVE      AÑODES        AÑOINV
      *--
     C                   MOVE      DIADES        DIAFE2
     C                   MOVE      MESDES        MESFE2
     C                   MOVE      AÑODES        ANOFE2
      *--
     C                   MOVE      *DATE         FECHOY            8 0
     C                   ENDIF
      *Invierte las fechas
     C     *EUR          MOVE      DESDE         AAAAMMDD1
      *-
     C     *EUR          TEST (D)                FECHA2                 36
     C     *EUR          MOVE      FECHA2        XFEC2
     C     XFEC2         ADDDUR    5:*D          XFEC1R
     C     XFEC2         SUBDUR    5:*D          XFEC2R
     C                   MOVE      XFEC1R        FEC4
     C     *EUR          MOVE      FEC4          AAAAMMDD2
     C                   MOVE      AAAAMMDD2     AAAAMMDD3
     C
      //carga sql 1
     C                   EXSR      CARGA_SQL
      //Crear archivo de trabajo
     C                   EXSR      ARC_TRA
      //cierre de cursor
     C                   EXSR      CLOSE_CUR
     C
     C                   ENDSR
      *-********************************************************************
      *-llenado de archivo de trabajo
      *-********************************************************************
     C     ARC_TRA       BEGSR
      //lee 1er    registro
     C                   EXSR      LEE_REGIS
     C
     C                   DOW       SQLCOD = 0
     C
     C                   EVAL      SMST_NRREG=SNRREG
     C                   EVAL      SMST_NRGIR=SNRGIR
     C                   EVAL      SMST_AÑVCT=SAÑVCT
     C                   EVAL      SMST_MEVCT=SMEVCT
     C                   EVAL      SMST_DIVCT=SDIVCT
     C                   EVAL      SMST_MONGI=SMONGI
     C                   EVAL      SMST_CDCON=SCDCON
     C                   EVAL      SMST_TELEFO=SQLTELEFONO
     C                   EVAL      SMST_CDZNA=SZONAT
     C
     C                   WRITE     SMSTEMR
     C                   EXSR      LEE_REGIS
     C                   ENDDO
     C
     C                   ENDSR
      *-********************************************************************
      *-genero el select para el sql y open al cursor
      *-********************************************************************
     C     CARGA_SQL     BEGSR
     C/EXEC SQL
     C+ DECLARE CUR SCROLL CURSOR FOR
     C+ select
     C+      (case when trim(SUBSTRING(CAST (a.TELDE as
     C+              character(12)),1,3))='414'
     C+         and
     C+           length(trim(CAST (a.TELDE as character(12))))=10
     C+          or
     C+                      trim(SUBSTRING(CAST (a.TELDE as
     C+              character(12)),1,3))='424'
     C+         and
     C+           length(trim(CAST (a.TELDE as character(12))))=10
     C+          or
     C+                      trim(SUBSTRING(CAST (a.TELDE as
     C+              character(12)),1,3))='416'
     C+         and
     C+           length(trim(CAST (a.TELDE as character(12))))=10
     C+          or
     C+              trim(SUBSTRING(CAST (a.TELDE as
     C+                 character(12)),1,3))='426'
     C+         and
     C+           length(trim(CAST (a.TELDE as character(12))))=10
     C+          or
     C+              trim(SUBSTRING(CAST (a.TELDE as
     C+                  character(12)),1,3))='412'
     C+         and
     C+           length(trim(CAST (a.TELDE as character(12))))=10
     C+      then
     C+         CAST (a.TELDE as character(12))
     C+      else
     C+
     C+   (case when trim(SUBSTRING(CAST (a.TELF as
     C+       character(12)),1,3))='414'
     C+      and
     C+        length(trim(CAST (a.TELF as character(12))))=10
     C+       or
     C+         trim(SUBSTRING(CAST (a.TELF as
     C+                 character(12)),1,3))='424'
     C+      and
     C+         length(trim(CAST (a.TELF as character(12))))=10
     C+       or
     C+         trim(SUBSTRING(CAST (a.TELF as
     C+                 character(12)),1,3))='416'
     C+      and
     C+         length(trim(CAST (a.TELF as character(12))))=10
     C+       or
     C+         trim(SUBSTRING(CAST (a.TELF as
     C+                 character(12)),1,3))='426'
     C+      and
     C+         length(trim(CAST (a.TELF as character(12))))=10
     C+       or
     C+         trim(SUBSTRING(CAST (a.TELF as
     C+                 character(12)),1,3))='412'
     C+      and
     C+         length(trim(CAST (a.TELF as character(12))))=10
     C+                   then
     C+                     CAST (a.TELF as character(12))
     C+                    else
     C+                     ''
     C+                   end)
     C+   end) as sqltelefono ,
     C+   b.nrreg,b.nrgir,b.aÑvct,b.mevct,b.divct,b.mongi,b.cdcon,
     C+   b.CDZNA
     C+   from
     C+        libbf/gipf01 a ,
     C+        libbf/gipf02 b
     C+   where
     C+         a.nrreg=b.nrreg
     C+     and b.stsgi=1
     C+     and b.nrgir>0
     C+     AND (((b.AÑVCT*10000)+(b.MEVCT*100)+b.DIVCT)<= :AAAAMMDD3)
     C+     and a.cdsts<>'9'
     C+     and b.mongi>0
     C+     and b.cdcon in (1,2,4)
     C+     and
     C+
     C+    (case when trim(SUBSTRING(CAST (a.TELDE as
     C+               character(12)),1,3))='414'
     C+       and
     C+           length(trim(CAST (a.TELDE as character(12))))=10
     C+        or
     C+           trim(SUBSTRING(CAST (a.TELDE as
     C+                 character(12)),1,3))='424'
     C+       and
     C+           length(trim(CAST (a.TELDE as character(12))))=10
     C+        or
     C+           trim(SUBSTRING(CAST (a.TELDE as
     C+                 character(12)),1,3))='416'
     C+       and
     C+           length(trim(CAST (a.TELDE as character(12))))=10
     C+        or
     C+           trim(SUBSTRING(CAST (a.TELDE as
     C+                 character(12)),1,3))='426'
     C+       and
     C+           length(trim(CAST (a.TELDE as character(12))))=10
     C+        or
     C+                         trim(SUBSTRING(CAST (a.TELDE as
     C+                 character(12)),1,3))='412'
     C+       and
     C+           length(trim(CAST (a.TELDE as character(12))))=10
     C+
     C+             then
     C+                a.TELDE
     C+             else
     C+                (case when trim(SUBSTRING(CAST (a.TELF as
     C+                 character(12)),1,3))='414'
     C+       and
     C+           length(trim(CAST (a.TELF as character(12))))=10
     C+        or
     C+                         trim(SUBSTRING(CAST (a.TELF as
     C+                 character(12)),1,3))='424'
     C+       and
     C+           length(trim(CAST (a.TELF as character(12))))=10
     C+        or
     C+           trim(SUBSTRING(CAST (a.TELF as
     C+                 character(12)),1,3))='416'
     C+       and
     C+           length(trim(CAST (a.TELF as character(12))))=10
     C+        or
     C+           trim(SUBSTRING(CAST (a.TELF as
     C+                 character(12)),1,3))='426'
     C+       and
     C+           length(trim(CAST (a.TELF as character(12))))=10
     C+        or
     C+           trim(SUBSTRING(CAST (a.TELF as
     C+                 character(12)),1,3))='412'
     C+       and
     C+           length(trim(CAST (a.TELF as character(12))))=10
     C+                 then
     C+                   a.TELF
     C+                  else
     C+                   0
     C+                 end)
     C+    end)> 0
     C/END-EXEC
     C*     and b.cdzna=0101
      // apertura del cursor
     C/EXEC SQL
     C+ OPEN CUR
     C/END-EXEC
     C                   ENDSR
      *-********************************************************************
      *-cierre de cursor
      *-********************************************************************
     C     CLOSE_CUR     BEGSR
     C/EXEC SQL
     C+ CLOSE CUR
     C/END-EXEC
     C                   ENDSR
      *--*******************************************************************
      *-para obtener los datos -SIGUIENTE REGISTRO
      *-********************************************************************
     C     LEE_REGIS     BEGSR
     C/EXEC SQL
     C+ FETCH NEXT FROM CUR INTO :REGISTRO
     C/END-EXEC
     C                   ENDSR 

0 comentarios :

Publicar un comentario