XU8P497 ;BP/BT - UPDATE PERSON CLASS FILE; 10/23/08
 ;;8.0;KERNEL;**497**;July 10, 1995;Build 5
 ;;"Per VHA Directive 2004-038, this routine should not be modified."
 ;
 Q
POST ; entry point of Post-Initi Routine
 D LOOP,INACTIVE
 Q
LOOP ; loop through New Person file. And map new Person Classes for users
 N XUIEN,XUPC,XUEFDATE,XUEXDATE
 K ^TMP("XU8P497")
 S XUIEN=0 F  S XUIEN=$O(^VA(200,XUIEN)) Q:XUIEN'>0  D
 . I $P($$ACTIVE^XUSER(XUIEN),"^",2)="TERMINATED" Q
 . S XUPC=$$GETPC(XUIEN)
 . I +XUPC>522 Q
 . I +XUPC<187 Q
 . S XUEFDATE=$P(XUPC,"^",2) I XUEFDATE<$$DT^XLFDT S XUEFDATE=$$DT^XLFDT
 . S XUEXDATE=$P(XUPC,"^",3)
 . I +XUPC=187 D REPOINT(XUIEN,181,XUEFDATE,XUEXDATE),PRINT(XUIEN,181) Q
 . I +XUPC=247 D REPOINT(XUIEN,1135,XUEFDATE,XUEXDATE),PRINT(XUIEN,1135) Q
 . I +XUPC=353 D REPOINT(XUIEN,675,XUEFDATE,XUEXDATE),PRINT(XUIEN,675) Q
 . I +XUPC=515 D REPOINT(XUIEN,352,XUEFDATE,XUEXDATE),PRINT(XUIEN,352) Q
 . I +XUPC=517 D REPOINT(XUIEN,352,XUEFDATE,XUEXDATE),PRINT(XUIEN,352) Q
 . I +XUPC=519 D REPOINT(XUIEN,354,XUEFDATE,XUEXDATE),PRINT(XUIEN,354) Q
 . I +XUPC=522 D REPOINT(XUIEN,352,XUEFDATE,XUEXDATE),PRINT(XUIEN,352) Q
 Q
 ;
REPOINT(USERIEN,NEWPC,EFDATE,EXDATE) ;Use FM so to fire X-ref's
 N RX1,RX2,DA1
 S DA1=USERIEN
 I $G(EFDATE)="" S EFDATE=$$DT^XLFDT
 S RX1(200.05,"+1,"_DA1_",",.01)=NEWPC
 S RX1(200.05,"+1,"_DA1_",",2)=$G(EFDATE)
 S RX1(200.05,"+1,"_DA1_",",3)=$G(EXDATE)
 L +^VA(200,DA1,"USC1"):2 I '$T D  Q
 .S XUA(1)="",XUA(2)=">>>User # "_DA1_" is locked at this time." D MES^XPDUTL(.XUA)
 D UPDATE^DIE("S","RX1","RX2")
 L -^VA(200,DA1,"USC1")
 Q
 ;
INACTIVE ; inactivate Person Class entries
 N XUI
 F XUI=187,247,353,515,517,519,522 D INAC(XUI)
 Q
 ;
INAC(PCIEN) ; inactivate single Person Class entry
 I +$G(PCIEN)'=$G(PCIEN) Q
 I $G(PCIEN)'>0 Q
 N XUA,XUDT S XUDT=$$DT^XLFDT
 L +^USC(8932.1,PCIEN,0):10 I '$T D  Q
 .S XUA(1)="",XUA(2)=">>>Record # "_PCIEN_" locked at time of patch installation. Could not inactivate." D MES^XPDUTL(.XUA)
 N DR,DIE,DA S DR="3////i",DIE="^USC(8932.1,",DA=PCIEN D ^DIE
 N DR,DIE,DA S DR="4///^S X=XUDT",DIE="^USC(8932.1,",DA=PCIEN D ^DIE
 L -^USC(8932.1,PCIEN,0)
 Q
 ;
PRINT(USERIEN,PCNEW) ; print a user who is assigned the replacement Person Class
 N XUA,XUY
 S XUY=+$O(^TMP("XU8P497",$J,"A"),-1)
 S XUA(1)=">>> The user "_$P($G(^VA(200,USERIEN,0)),"^")_" is assigned to the Person Class IEN: "_PCNEW
 S XUA(2)=""
 S ^TMP("XU8P497",$J,XUY+1)=XUA(1)
 D MES^XPDUTL(.XUA)
 Q
 ;
GETPC(XUIEN) ;Get Person Class for a single user
 N XUEXDA,XUPCIEN
 I +$G(XUIEN)'>0 Q ""
 I '$D(^VA(200,XUIEN,"USC1")) Q ""
 S XUPCIEN=$O(^VA(200,XUIEN,"USC1","A"),-1)
 I $G(XUPCIEN)'>0 Q ""
 S XUEXDA=$P($G(^VA(200,XUIEN,"USC1",XUPCIEN,0)),"^",3)
 I XUEXDA'="",(XUEXDA<$$DT^XLFDT) Q ""
 Q $G(^VA(200,XUIEN,"USC1",XUPCIEN,0))
 ;
SETDATE(USERIEN,PCIEN,XUEFDA,XUEXDA) ;set eff and exp date for the privious Person Class entry.
 I +$G(XUEFDA)>$$DT^XLFDT D SETEFDA(USERIEN,PCIEN,$$DT^XLFDT)
 I +$G(XUEXDA)>$$DT^XLFDT D SETEXDA(USERIEN,PCIEN,$$DT^XLFDT)
 Q
 ;
SETEXDA(USERIEN,PCIEN,EXDATE) ; set exp date
 N DIE,DA,DR
 S DA(1)=USERIEN ;
 S DA=PCIEN ; entry number in subfile
 S DIE="^VA(200,"_DA(1)_","_"""USC1"""_"," ; global root of subfile
 S DR="3///^S X=EXDATE" ; fields in subfile to edit
 L +^VA(200,USERIEN,"USC1"):2 I '$T D  Q
 .S XUA(1)="",XUA(2)=">>>User # "_DA1_" is locked at this time." D MES^XPDUTL(.XUA)
 D ^DIE
 L -^VA(200,USERIEN,"USC1")
 Q
SETEFDA(USERIEN,PCIEN,EFDATE) ; set eff date
 N DIE,DA,DR
 S DA(1)=USERIEN ;
 S DA=PCIEN ; entry number in subfile
 S DIE="^VA(200,"_DA(1)_","_"""USC1"""_"," ; global root of subfile
 S DR="2///^S X=EFDATE" ; fields in subfile to edit
 L +^VA(200,USERIEN,"USC1"):2 I '$T D  Q
 .S XUA(1)="",XUA(2)=">>>User # "_DA1_" is locked at this time." D MES^XPDUTL(.XUA)
 D ^DIE
 L -^VA(200,USERIEN,"USC1")
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HXU8P497   3897     printed  Sep 23, 2025@19:44:01                                                                                                                                                                                                     Page 2
XU8P497   ;BP/BT - UPDATE PERSON CLASS FILE; 10/23/08
 +1       ;;8.0;KERNEL;**497**;July 10, 1995;Build 5
 +2       ;;"Per VHA Directive 2004-038, this routine should not be modified."
 +3       ;
 +4        QUIT 
POST      ; entry point of Post-Initi Routine
 +1        DO LOOP
           DO INACTIVE
 +2        QUIT 
LOOP      ; loop through New Person file. And map new Person Classes for users
 +1        NEW XUIEN,XUPC,XUEFDATE,XUEXDATE
 +2        KILL ^TMP("XU8P497")
 +3        SET XUIEN=0
           FOR 
               SET XUIEN=$ORDER(^VA(200,XUIEN))
               if XUIEN'>0
                   QUIT 
               Begin DoDot:1
 +4                IF $PIECE($$ACTIVE^XUSER(XUIEN),"^",2)="TERMINATED"
                       QUIT 
 +5                SET XUPC=$$GETPC(XUIEN)
 +6                IF +XUPC>522
                       QUIT 
 +7                IF +XUPC<187
                       QUIT 
 +8                SET XUEFDATE=$PIECE(XUPC,"^",2)
                   IF XUEFDATE<$$DT^XLFDT
                       SET XUEFDATE=$$DT^XLFDT
 +9                SET XUEXDATE=$PIECE(XUPC,"^",3)
 +10               IF +XUPC=187
                       DO REPOINT(XUIEN,181,XUEFDATE,XUEXDATE)
                       DO PRINT(XUIEN,181)
                       QUIT 
 +11               IF +XUPC=247
                       DO REPOINT(XUIEN,1135,XUEFDATE,XUEXDATE)
                       DO PRINT(XUIEN,1135)
                       QUIT 
 +12               IF +XUPC=353
                       DO REPOINT(XUIEN,675,XUEFDATE,XUEXDATE)
                       DO PRINT(XUIEN,675)
                       QUIT 
 +13               IF +XUPC=515
                       DO REPOINT(XUIEN,352,XUEFDATE,XUEXDATE)
                       DO PRINT(XUIEN,352)
                       QUIT 
 +14               IF +XUPC=517
                       DO REPOINT(XUIEN,352,XUEFDATE,XUEXDATE)
                       DO PRINT(XUIEN,352)
                       QUIT 
 +15               IF +XUPC=519
                       DO REPOINT(XUIEN,354,XUEFDATE,XUEXDATE)
                       DO PRINT(XUIEN,354)
                       QUIT 
 +16               IF +XUPC=522
                       DO REPOINT(XUIEN,352,XUEFDATE,XUEXDATE)
                       DO PRINT(XUIEN,352)
                       QUIT 
               End DoDot:1
 +17       QUIT 
 +18      ;
REPOINT(USERIEN,NEWPC,EFDATE,EXDATE) ;Use FM so to fire X-ref's
 +1        NEW RX1,RX2,DA1
 +2        SET DA1=USERIEN
 +3        IF $GET(EFDATE)=""
               SET EFDATE=$$DT^XLFDT
 +4        SET RX1(200.05,"+1,"_DA1_",",.01)=NEWPC
 +5        SET RX1(200.05,"+1,"_DA1_",",2)=$GET(EFDATE)
 +6        SET RX1(200.05,"+1,"_DA1_",",3)=$GET(EXDATE)
 +7        LOCK +^VA(200,DA1,"USC1"):2
           IF '$TEST
               Begin DoDot:1
 +8                SET XUA(1)=""
                   SET XUA(2)=">>>User # "_DA1_" is locked at this time."
                   DO MES^XPDUTL(.XUA)
               End DoDot:1
               QUIT 
 +9        DO UPDATE^DIE("S","RX1","RX2")
 +10       LOCK -^VA(200,DA1,"USC1")
 +11       QUIT 
 +12      ;
INACTIVE  ; inactivate Person Class entries
 +1        NEW XUI
 +2        FOR XUI=187,247,353,515,517,519,522
               DO INAC(XUI)
 +3        QUIT 
 +4       ;
INAC(PCIEN) ; inactivate single Person Class entry
 +1        IF +$GET(PCIEN)'=$GET(PCIEN)
               QUIT 
 +2        IF $GET(PCIEN)'>0
               QUIT 
 +3        NEW XUA,XUDT
           SET XUDT=$$DT^XLFDT
 +4        LOCK +^USC(8932.1,PCIEN,0):10
           IF '$TEST
               Begin DoDot:1
 +5                SET XUA(1)=""
                   SET XUA(2)=">>>Record # "_PCIEN_" locked at time of patch installation. Could not inactivate."
                   DO MES^XPDUTL(.XUA)
               End DoDot:1
               QUIT 
 +6        NEW DR,DIE,DA
           SET DR="3////i"
           SET DIE="^USC(8932.1,"
           SET DA=PCIEN
           DO ^DIE
 +7        NEW DR,DIE,DA
           SET DR="4///^S X=XUDT"
           SET DIE="^USC(8932.1,"
           SET DA=PCIEN
           DO ^DIE
 +8        LOCK -^USC(8932.1,PCIEN,0)
 +9        QUIT 
 +10      ;
PRINT(USERIEN,PCNEW) ; print a user who is assigned the replacement Person Class
 +1        NEW XUA,XUY
 +2        SET XUY=+$ORDER(^TMP("XU8P497",$JOB,"A"),-1)
 +3        SET XUA(1)=">>> The user "_$PIECE($GET(^VA(200,USERIEN,0)),"^")_" is assigned to the Person Class IEN: "_PCNEW
 +4        SET XUA(2)=""
 +5        SET ^TMP("XU8P497",$JOB,XUY+1)=XUA(1)
 +6        DO MES^XPDUTL(.XUA)
 +7        QUIT 
 +8       ;
GETPC(XUIEN) ;Get Person Class for a single user
 +1        NEW XUEXDA,XUPCIEN
 +2        IF +$GET(XUIEN)'>0
               QUIT ""
 +3        IF '$DATA(^VA(200,XUIEN,"USC1"))
               QUIT ""
 +4        SET XUPCIEN=$ORDER(^VA(200,XUIEN,"USC1","A"),-1)
 +5        IF $GET(XUPCIEN)'>0
               QUIT ""
 +6        SET XUEXDA=$PIECE($GET(^VA(200,XUIEN,"USC1",XUPCIEN,0)),"^",3)
 +7        IF XUEXDA'=""
               IF (XUEXDA<$$DT^XLFDT)
                   QUIT ""
 +8        QUIT $GET(^VA(200,XUIEN,"USC1",XUPCIEN,0))
 +9       ;
SETDATE(USERIEN,PCIEN,XUEFDA,XUEXDA) ;set eff and exp date for the privious Person Class entry.
 +1        IF +$GET(XUEFDA)>$$DT^XLFDT
               DO SETEFDA(USERIEN,PCIEN,$$DT^XLFDT)
 +2        IF +$GET(XUEXDA)>$$DT^XLFDT
               DO SETEXDA(USERIEN,PCIEN,$$DT^XLFDT)
 +3        QUIT 
 +4       ;
SETEXDA(USERIEN,PCIEN,EXDATE) ; set exp date
 +1        NEW DIE,DA,DR
 +2       ;
           SET DA(1)=USERIEN
 +3       ; entry number in subfile
           SET DA=PCIEN
 +4       ; global root of subfile
           SET DIE="^VA(200,"_DA(1)_","_"""USC1"""_","
 +5       ; fields in subfile to edit
           SET DR="3///^S X=EXDATE"
 +6        LOCK +^VA(200,USERIEN,"USC1"):2
           IF '$TEST
               Begin DoDot:1
 +7                SET XUA(1)=""
                   SET XUA(2)=">>>User # "_DA1_" is locked at this time."
                   DO MES^XPDUTL(.XUA)
               End DoDot:1
               QUIT 
 +8        DO ^DIE
 +9        LOCK -^VA(200,USERIEN,"USC1")
 +10       QUIT 
SETEFDA(USERIEN,PCIEN,EFDATE) ; set eff date
 +1        NEW DIE,DA,DR
 +2       ;
           SET DA(1)=USERIEN
 +3       ; entry number in subfile
           SET DA=PCIEN
 +4       ; global root of subfile
           SET DIE="^VA(200,"_DA(1)_","_"""USC1"""_","
 +5       ; fields in subfile to edit
           SET DR="2///^S X=EFDATE"
 +6        LOCK +^VA(200,USERIEN,"USC1"):2
           IF '$TEST
               Begin DoDot:1
 +7                SET XUA(1)=""
                   SET XUA(2)=">>>User # "_DA1_" is locked at this time."
                   DO MES^XPDUTL(.XUA)
               End DoDot:1
               QUIT 
 +8        DO ^DIE
 +9        LOCK -^VA(200,USERIEN,"USC1")
 +10       QUIT