Annotation of freem_fileman/DICA.m, revision 1.1.1.1

1.1       snw         1: DICA   ;SEA/TOAD-VA FileMan, Updater, Engine ;12/1/94  08:52 ;
                      2:        ;;21.0;VA FileMan;;Dec 28, 1994
                      3:        ;Per VHA Directive 10-93-142, this routine should not be modified.
                      4:        
                      5: ADD(DIFLAGS,DIFDA,DIEN,DIMSGA) 
                      6:        
                      7: ADDX   ; Branch in from UPDATE^DIE
                      8:        ; ENTRY POINT--add a new entry to a file
                      9:        ; subroutine, DIEN passed by reference
                     10:        I '$D(DIQUIET) N DIQUIET S DIQUIET=1
                     11:        I '$D(DIFM) N DIFM S DIFM=1 D INIZE^DIEFU
                     12:        K ^TMP("DIADD",$J)
                     13: INPUT  
                     14:        ; initialize input parameters & check
                     15:        N DIRULE S DIRULE="^TMP(""DICA"",$J)"
                     16:        N DIFDAO
                     17:        I $G(DIMSGA)'="" D
                     18:        . K @DIMSGA@("DIERR"),@DIMSGA@("DIHELP"),@DIMSGA@("DIMSG")
                     19:        S DIFLAGS=$G(DIFLAGS)
                     20:        I $TR(DIFLAGS,"ESY")'="" D  Q
                     21:        . D ERR^DICA3(301,"","","",DIFLAGS),CLOSE
                     22:        S DIFDA=$G(DIFDA) I $D(@DIFDA)<10 D  Q
                     23:        . D ERR^DICA3(202,"","","","FDA"),CLOSE
                     24:        S DIFDAO=DIFDA
                     25:        S DIEN=$G(DIEN) I DIEN="" S DIEN="DIDUMMY" N DIDUMMY
                     26: PRE    
                     27:        N DIOK S DIOK=1 D CHECK^DICA1(DIFLAGS,.DIFDA,DIEN,DIRULE,.DIOK)
                     28:        I $G(DIERR) D CLOSE Q
                     29:        I 'DIOK D ERR^DICA3(202,"","","","FDA"),CLOSE Q
                     30: SEQ    
                     31:        N DIENTRY,DIFILE,DIOUT1,DINEXT
                     32:        S (DIOUT1,DINEXT)="" F  D  Q:DIOUT1
                     33:        . S DINEXT=$O(@DIRULE@("NEXT",DINEXT)) I DINEXT="" S DIOUT1=1 Q
                     34:        . X @DIRULE@("NEXT",DINEXT)
                     35: FILES  . 
                     36:        . I $P($G(^DD($$FNO^DILIBF(DIFILE),0,"DI")),U,2)["Y" D  Q
                     37:        . . S DIOUT1=DIFLAGS'["Y"&'$D(DIOVRD)
                     38:        . . I DIOUT1 D ERR^DICA3(405,DIFILE,"","",DIFILE)
                     39: ENTRIES        . 
                     40:        . N DIDA,DIENP,DIOP,DIROOT,DISEQ
                     41:        . S DIDA=$P(DIENTRY,",") I +DIDA=DIDA Q
                     42:        . S DIENP=$$IEN(DIENTRY,"",DIRULE)
                     43:        . S DIOP=$E(DIDA,1,2) I DIOP'="?+" S DIOP=$E(DIOP)
                     44:        . S DISEQ=$P(DIDA,DIOP,2)
                     45: FINDING        .
                     46:        . I DIOP["?" S DIOUT2=0 D  I DIOUT2 Q
                     47:        . . N DIFIND,DIFORMAT,DIGET,DIVALUE
                     48:        . . S DIFORMAT=$S(DIFLAGS["E":"",1:"Q")
                     49:        . . S DIGET=DIFDA
                     50:        . . I DIFLAGS["E",DIOP="?" S DIGET=DIFDAO
                     51:        . . S DIVALUE=$G(@DIGET@(DIFILE,DIENTRY,.01))
                     52:        . . S DIFIND=$$FIND1^DIC(DIFILE,DIENP,DIFORMAT,DIVALUE)
                     53:        . . I $D(DIERR) S DIOUT1=1,DIOUT2=1 Q
                     54:        . . I DIOP="?+",'DIFIND Q
                     55:        . . I 'DIFIND S DIOUT1=1,DIOUT2=1 D  Q
                     56:        . . . D ERR^DICA3(703,DIFILE,DIENTRY,"",DIVALUE)
                     57:        . . S @DIEN@(DISEQ)=DIFIND
                     58:        . . S @DIRULE@("IEN",DISEQ)=DIFIND
                     59:        . . D SAVE S DIOUT2=1
                     60: ADDING . 
                     61:        . N DIENEW,DIKEY
                     62:        . I $L(DIENP,",")>2 S DIOK=$$VMINUS9^DIEFU(DIFILE,DIENP) I 'DIOK D  Q
                     63:        . . S DIOUT1=1
                     64:        . . D ERR^DICA3(602,DIFILE,$P(DIENP,",",$L(DIENP,",")-1))
                     65:        . S DIROOT=$$ROOT^DIQGU(DIFILE,DIENP)
                     66:        . D DA^DILF(DIENTRY,.DIENEW)
                     67: A1     . S DIENEW=$$IEN(DIENTRY,$G(@DIEN@(DISEQ)),DIRULE)
                     68:        . S DIKEY=$G(@DIFDA@(DIFILE,DIENTRY,.01)) I DIKEY="" D  Q
                     69:        . . S DIOUT1=1 D ERR^DICA3(202,"","","","FDA")
                     70:        . S DIOK=$$LAYGO(DIFILE,.DIENEW,DIKEY)
                     71:        . I 'DIOK S DIOUT1=1 D  Q
                     72:        . . I '$G(DIERR) D ERR^DICA3(405,DIFILE,"","",DIFILE) Q
                     73:        . . N DIENS S DIENS="New entry"
                     74:        . . I $L(DIENEW,",")>2 S DIENS=DIENS_" under record: "_DIENEW
                     75:        . . N DI1 S DI1="LAYGO Node on the new value '"_DIKEY_"'"
                     76:        . . D ERR^DICA3(120,DIFILE,DIENS,.01,DI1)
                     77:        . D CREATE^DICA3(DIFILE,.DIENEW,DIROOT,DIKEY)
                     78:        . S DIENEW=+DIENEW
                     79:        . I 'DIENEW S DIOUT1=1 Q
                     80:        . L -@(DIROOT_"DIENEW)")
                     81:        . S @DIEN@(DISEQ)=DIENEW
                     82:        . S @DIRULE@("IEN",DISEQ)=DIENEW
                     83:        . D SAVE
                     84:        
                     85: FILER  ; file the data for the new records
                     86:        I '$D(DIERR),$D(@DIFDA) D
                     87:        . D FILE^DIEF($S(DIFLAGS["S":"S",1:""),DIFDA,"",DIEN)
                     88:        I '$D(DIERR),DIFLAGS'["S" K @DIFDAO
                     89:        I $D(DIERR)!(DIFLAGS["S"),DIFLAGS'["E" D
                     90:        . M @DIFDA=^TMP("DIADD",$J) K ^TMP("DIADD",$J)
                     91:        D CLOSE
                     92:        Q
                     93:        
                     94: LAYGO(DIFILE,DIEN,DIKEY)       
                     95:        ; ADDING--return if LAYGO permitted
                     96:        ; function, all by value
                     97:        N DA,DIOK,DINODE,DIOUTS,X,Y,Y1
                     98:        S DIOK=1,DINODE="",DIOUTS=0 F  D  I DIOUTS!'DIOK Q
                     99:        . S DINODE=$O(^DD(DIFILE,.01,"LAYGO",DINODE))
                    100:        . I DINODE'>0 S DIOUTS=1 Q
                    101:        . I $D(^DD(DIFILE,.01,"LAYGO",DINODE,0))[0 Q
                    102:        . S X=DIKEY M DA=DIEN S Y=$P(DA,","),Y1=DA,DA=$P(DA,",")
                    103:        . I 1 X ^DD(DIFILE,.01,"LAYGO",DINODE,0) S DIOK=$T&'$G(DIERR)
                    104:        Q DIOK
                    105:        
                    106: SAVE   I DIFLAGS'["E" D
                    107:        . S ^TMP("DIADD",$J,DIFILE,DIENTRY,.01)=@DIFDA@(DIFILE,DIENTRY,.01)
                    108:        K @DIFDA@(DIFILE,DIENTRY,.01)
                    109:        Q
                    110:        
                    111: IEN(DIENTRY,DIENF,DIRULE)      
                    112:        ; ADDING/FINDING--return translated IEN String
                    113:        ; function, DIENTRY passed by value
                    114:        N DIC,DIENEW,DIOP,DIP,DIPNEW,DISEQ
                    115:        S DIENEW=""
                    116:        S DIENF=$G(DIENF)
                    117:        S DIP="" F DIC=1:1 D  I DIP="" Q
                    118:        . S DIP=$P(DIENTRY,",",DIC) I DIP="" Q
                    119:        . D
                    120:        . . I +DIP=DIP S DIPNEW=DIP Q
                    121: IEN1   . . I DIC=1 S DIPNEW=DIENF Q
                    122:        . . S DIOP=$E(DIP,1,2) I DIOP'="?+" S DIOP=$E(DIOP)
                    123:        . . S DISEQ=$P(DIP,DIOP,2,9999)
                    124:        . . S DIPNEW=@DIRULE@("IEN",DISEQ)
                    125:        . S $P(DIENEW,",",DIC)=DIPNEW
                    126:        I DIENEW'="" S DIENEW=DIENEW_","
                    127:        Q DIENEW
                    128:        
                    129: CLOSE  I $G(DIMSGA)'="" D CALLOUT^DIEFU(DIMSGA)
                    130:        K @DIRULE
                    131:        Q

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>