Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: ABSPP48

ABSPP48.m

Go to the documentation of this file.
ABSPP48 ; /IHS/OIT/RAM ; 25 MAY 2017 ; PRE & POST INSTALL ROUTINES FOR ABSP PATCH 48
 ;;1.0;PHARMACY POINT OF SALE;**48**;25 MAY 2017;Build 20
 ; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 ; /IHS/OIT/RAM ; Entire routine
 ; Preinstall and Postinstall routines for ABSP Patch 48.
 ; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 ; Q
 ;
ENV ; /IHS/OIT/RAM ; 25 MAY 2017 ; ENVIRONMENT CHECK ROUTINE FOR ABSP PATCH 48
 ;;1.0;PHARMACY POINT OF SALE;**48**;25 MAY 2017
 ;
 N STATTEXT,ZMONTH D INIT
 ;
 N LIST,STATUS,USER,OBJ,CURRNS,DEFEDEST,EDEST,DIR,DIR2,NEWDIR,DIRLEN,DB,SEP,TSC
 N NEWNS,FINDNS,PLOP,NEWGLOBAL,ALLGLOBMAPS,ALLROUTMAPS,ALLPKGMAPS,DEBUG,U
 N CURVER,VER,LASTPATCH,INPUT,ZDD
 S PLOP=0,DEBUG=0,U="^"
 ;
 D MES^XPDUTL("Verifying Installation Environment.")
 I $G(DT)="" D DT^DICRW
 ;
 ; CHECKING ON DATA FIELDS THAT WERE MISSING AT CROW -- TROUBLE TICKET 290606.
 S ZDD=$D(^DD(52,9999999.14))&($D(^DD(52,9999999.13)))&($D(^DD(52.1,9999999.13)))
 I 'ZDD {
  D BMES^XPDUTL("Missing at least one of the DUR/PPS fields in File 52. Database structure is comprimised.")
  D MES^XPDUTL("Please put in a ticket with Area/HQ and ask them to reference Ticket #290606.")
  D MES^XPDUTL("Aborting Install.")
  S PLOP=1
 }
 I PLOP G ENVABORT
 E  D BMES^XPDUTL("File 52 structure appears complete!")
 ;
 D BMES^XPDUTL("Checking Patch Prerequisites.... AG package.")
 ;
 ; Let's check AG first, as this patch is dependant on AG*7.1*12 and must be installed first.
 ; Also... keep in mind the AG package has both version 7.1 and 7.2 active branches.
 ;
 S CURVER=$$VERSION^XPDUTL("AG")
 I '(CURVER=7.1!(CURVER=7.2)) {
  D MES^XPDUTL("Current version of the AG package: "_CURVER_" isn't the expected 7.1 or 7.2.")
  D MES^XPDUTL("Aborting Install.")
  S PLOP=1
 }
 I PLOP G ENVABORT
 E  D MES^XPDUTL("AG version ("_CURVER_") level correct!")
 ;
 S LASTPATCH=$$LAST^XPDUTL("AG",7.2)
 I +LASTPATCH'>3 {
  D MES^XPDUTL("Current patch revision of AG 7.2 package: "_+LASTPATCH_" -- requires P4 or newer.")
  S PLOP=1
 }
 I PLOP G ENVABORT
 E  D MES^XPDUTL("AG 7.2 patch level correct!")
 ;
 ; S LASTPATCH=$$LAST^XPDUTL("AG",7.1)
 ; I +LASTPATCH'>11 {
 ;	 D MES^XPDUTL("Current patch revision of AG 7.1 package: "_+LASTPATCH_" -- requires P12 or newer.")
 ;	 S PLOP=1
 ; }
 S LASTPATCH=$$LAST^XPDUTL("AG",7.1)
 I +LASTPATCH'>10 {
  D MES^XPDUTL("Current patch revision of AG 7.1 package: "_+LASTPATCH_" -- BETA requires P11 or newer.")
  S PLOP=1
 }
 I PLOP G ENVABORT
 E  D MES^XPDUTL("AG 7.1 patch level correct!")
 ;
 D BMES^XPDUTL("Checking Patch Prerequisites.... ABSP package.")
 ;
 S CURVER=$$VERSION^XPDUTL("ABSP")
 I '(CURVER="1.0") {
  D MES^XPDUTL("Current version of the ABSP package: "_CURVER_" isn't the expected 1.0.")
  D MES^XPDUTL("Aborting Install.")
  S PLOP=1
 }
 I PLOP G ENVABORT
 E  D MES^XPDUTL("ABSP version ("_CURVER_") level correct!")
 ;
 S LASTPATCH=$$LAST^XPDUTL("ABSP",CURVER)
 I +LASTPATCH<47 {
  D MES^XPDUTL("Current patch revision of ABSP 1.0 package: "_+LASTPATCH_" -- requires P47 or newer.")
  S PLOP=1
 }
 I +LASTPATCH>48 {
  D MES^XPDUTL("Current patch revision of ABSP 1.0 package: "_+LASTPATCH_" -- is newer than P48.")
  D MES^XPDUTL("Are you sure that you wish to install this package? ")
  R INPUT#1:120 S INPUT=$$SUP(INPUT)
     I "N"=INPUT S PLOP=1
 }
 I PLOP G ENVABORT
 E  D MES^XPDUTL("ABSP 1.0 patch level within normal parameters!")
 ;
ENVBYE 
 D BMES^XPDUTL("Preinstall Routine complete.")
 ; NEXT IS A WAY FOR ME TO ABORT THE INSTALL EVEN IF IT ALL APPEARS GOOD -- FOR TESTING PORPOISES ONLY.
 I DEBUG {
   N INPUT S PLOP=0
   D MES^XPDUTL("Continue installing da package? ")
   R INPUT:120 S INPUT=$$SUP(INPUT)
   I "N"=INPUT S PLOP=1
 }
 I PLOP G ENVABORT
 Q
 ;
ENVABORT ; "SOMETHING BROKE. ABORT INSTALL AND UNLOAD DISTRIBUTION."
 D BMES^XPDUTL("Environment check routine found issues with the environment.")
 D MES^XPDUTL("This installation will now abort and be unloaded.")
 D MES^XPDUTL("Press any key to continue.")
 ; K DIR S DIR(0)="FA^0:0" D ^DIR
 R PLOP#1:120
 S XPDABORT=1,XPDQUIT=1,XPDQUIT("ABSP*1.0*48")=1
 Q
 ;
PRE ; /IHS/OIT/RAM ; 25 MAY 2017 ; PRE-INSTALL ROUTINE FOR ABSP PATCH 48
 ;;1.0;PHARMACY POINT OF SALE;**48**;25 MAY 2017
 ;
 ;
 N STATTEXT,ZMONTH D INIT
 ;
PREBYE ;
 Q
 ;
POST ; /IHS/OIT/RAM ; 25 MAY 2017 ; POST-INSTALL ROUTINE FOR ABSP PATCH 48
 ;;1.0;PHARMACY POINT OF SALE;**48**;25 MAY 2017
 ;
 ;
 N STATTEXT,ZMONTH D INIT
 ;
POSTBYE ;
 Q
 ;
GETPATCHDATA(PKG,ALLPATCH) ; GET ALL ABSP PATCH DATA FROM THE INSTALL FILE.
 ;
 N I,I2,I3,J,J2,J3,K,K2,K3
 N NAME,STATUS,INSTALLBY,COMPLETED,DISTRODATE
 N PACKAGE,VERSION,PATCH,SPACES
 N U S U="^"
 ;
 S (I,I2)=PKG
 F  S I=$O(^XPD(9.7,"B",I)) Q:$E(I,1,$L(I2))'=I2  D
 . S J=0 F  S J=$O(^XPD(9.7,"B",I,J)) Q:+J=0  D
 . . S NAME=$P($G(^XPD(9.7,J,0)),U,1) Q:NAME=""
 . . I NAME["*" D
 . . . S PACKAGE=$P(NAME,"*",1)
 . . . S VERSION=$P(NAME,"*",2)
 . . . S PATCH=$P(NAME,"*",3)
 . . E  D
 . . . S SPACES=$L(NAME," ")
 . . . S VERSION=$P(NAME," ",SPACES)
 . . . S PATCH=0
 . . . S PACKAGE=$P(NAME," ",1,SPACES-1)
 . . S DISTRODATE=$P($G(^XPD(9.7,J,1)),U,4) Q:DISTRODATE=""
 . . S COMPLETED=$P($G(^XPD(9.7,J,1)),U,3) S:COMPLETED="" COMPLETED=DISTRODATE
 . . S STATUS=$P($G(^XPD(9.7,J,0)),U,9) S:STATUS="" STATUS=5
 . . S STATUS=STATTEXT(STATUS)
 . . S INSTALLBY=$P($G(^XPD(9.7,J,0)),U,11) S:INSTALLBY="" INSTALLBY=1
 . . S INSTALLBY=$$GETPERSON(INSTALLBY)
 . . S ALLPATCH(COMPLETED)=PATCH_U_VERSION_U_STATUS_U_NAME_U_DISTRODATE_U_INSTALLBY
 . . ; I STATUS="COMPLETED" S ALLPATCH("P",PACKAGE,VERSION,PATCH,COMPLETED)=INSTALLBY
 ;
 Q
 ;
GETPERSON(IEN) ; TAKE THE 'INSTALLED BY' IEN AND TURN IT INTO A NAME.
 ;
 N NAME
 N U S U="^"
 S NAME=$P($G(^VA(200,IEN,0)),U,1)
 S:NAME="" NAME="UNKNOWN"
 Q NAME
 ;
PREREQ(PKG,VER,PAT) ;
 ; INIT LOCAL VARIABLES
 N ZPATCH,I,I2,I3,J,J2,J3,INST,STOP,LASTPAT,COMPAT
 ; GO GET PATCHES FOR A PACKAGE.
 D GETPATCHDATA(PKG,.ZPATCH)
 ; GET CURRENT VERSION OF PACKAGE. REQUIRED DUE TO ISSUES WITH OLD TEST PACKAGES OF ABSP NUMBERED 1.25 INSTEAD OF 1.0*25.
 S CURVER=$$VERSION^XPDUTL(PKG)
 ;
 ; ; ; IGNORE... ; S LASTPAT=ZPATCH($O(ZPATCH(""),-1)) ; LET'S FIND THE LAST PATCH INSTALLED.
 ; GET LATEST _COMPLETED_  PATCH. 
 S I="",(LASTPAT,STOP)=0 F  S I=$O(ZPATCH(I),-1) D  Q:I=""!STOP
 . I $P($G(ZPATCH(I)),U,3)="COMPLETED" S LASTPAT=I,STOP=1 ; W I,! 
 ; 
 I LASTPAT=0 Q 4 ; RATHER BROKEN; NO PATCH IN THE LIST HAD A 'COMPLETED' STATUS. EXIT ACCORDINGLY.
 ; 
 S COMPAT=ZPATCH(LASTPAT)
 ; 
 ; WE HAVE THE LAST SUCCESSFUL PATCH INSTALL IN COMPAT ; TEST VARIOUS SITUATIONS NEXT.
 S J2=$P($G(COMPAT),U,1),J3=$P($G(COMPAT),U,2) ;; LET'S GET THE PATCH (J2) AND VERSION (J3).
 I J3>CURVER W J3,*9,CURVER," CUR",! Q 1   ; LAST PATCH INSTALLED SHOWS NEWER VERSION THAN CURRENT. POSSIBLE ISSUE WITH INSTALL FILE OR SOMESUCH. EXIT GRUMPILY.
 I J3>VER W J3,*9,VER," VER",! Q 1      ; LAST PATCH INSTALLED SHOWS NEWER VERSION THAN REQUESTED. POSSIBLE ISSUE WITH INSTALL FILE OR CALLING PARAMETERS. EXIT GRUMPILY.
 I J2=PAT Q 0      ; LAST PATCH INSTALLED IS THE PREREQ. EXIT HAPPILY.
 I J2=(PAT+1) Q 0  ; LAST PATCH INSTALLED IS *THIS* PATCH. EXIT HAPPILY AND INSTALL ANYWAY IN CASE PREVIOUS INSTALL WAS A BETA.
 I J2>PAT Q 2      ; LAST PATCH INSTALLED IS NEWER THAN THIS PATCH. EXIT GRUMPILY, BUT CALLING ROUTINE CAN ASK USER IF THEY WANT TO INSTALL ANYWAY.
 I J2<PAT Q 3_U_J2 ; LAST PATCH INSTALLED IS 2+ PATCHES OLDER THAN THIS PATCH. EXIT GRUMPILY; WARN USER TO INSTALL PREVIOUS PATCHES.
 ;
 ; THEN... VERIFY PREREQUISITE EVEN INSTALLED.
 ;
 Q 5 ; SHOULD NEVER GET HERE... THIS IS THE "IMPOSSIBLE" RETURN CODE.
 ;
NOTOUCHIE ;; LEFTOVER CODE I COULDN'T BRING MYSELF TO DELETE... MIGHT STILL NEED THE LOGIC SOMEDAY. 
 ;
 ; MORE NOTOUCHIE... =-=-=-=
 Q ;; MAKE SURE WE DON'T ACTUALLY TRY TO EXECUTE ANY OF THE LEFTOVERS...
 ; 
 S STATUS=$$PREREQ("ABSP","1.0",47)
 I +STATUS D  G ENVABORT
 . I +STATUS=1 D MES^XPDUTL("Newer ABSP Major version installed. Exiting.")
 . I +STATUS=2 D MES^XPDUTL("Newer than expected ABSP Patch installed: "_$P(STATUS,U,2)_". Exiting.")
 . I +STATUS=3 D MES^XPDUTL("Older than expected ABSP Patch installed: "_$P(STATUS,U,2)_". Exiting.")
 . I +STATUS=4 D MES^XPDUTL("No ABSP Patches seem to have been installed successfully. Exiting.")
 . I +STATUS=5 D MES^XPDUTL("Unknown error regarding ABSP Patch 47. Contact OIT! Exiting.")
 ;
 D MES^XPDUTL("Required ABSP Patch 47... OK.")
 ;
 S STATUS=$$PREREQ("AG","7.1",12)
 I STATUS D  G ENVABORT
 . I STATUS=1 D MES^XPDUTL("Newer AG Major version installed. Exiting.")
 . I STATUS=2 D MES^XPDUTL("Newer than expected AG Patch installed: "_$P(STATUS,U,2)_". Exiting.")
 . I STATUS=3 D MES^XPDUTL("Older than expected AG Patch installed: "_$P(STATUS,U,2)_". Exiting.")
 . I STATUS=4 D MES^XPDUTL("No AG Patches seem to have been installed successfully. Exiting.")
 . I STATUS=5 D MES^XPDUTL("Unknown error regarding AG Patch 12. Contact OIT! Exiting.")
 ;
 ; =-=-=-=
 ;
 Q ;; MAKE SURE WE DON'T ACTUALLY TRY TO EXECUTE ANY OF THE LEFTOVERS...
 ;
 S (INST,STOP)=0,I="" F  S I=$O(ZPATCH(I),-1) Q:+I=0!STOP  D  ; LOOP THROUGH PATCHES, NEWEST FIRST.
 . S J2=$P($G(ZPATCH(I)),U,1),J3=$P($G(ZPATCH(I)),U,2)
 . I J2=PAT&(J3=VER) S STOP=1                       ; AND SEE IF THE CORRECT PATCH & VERSION NUMBER EXISTS.
 . ; W I,*9,J2,*9,PAT,*9,J3,*9,VER,*9,"YUP",!
 ;
 I 'STOP Q 1 ; LOOP NEVER STOPPED; PREREQ PATCH NOT INSTALLED.
 S I=$O(ZPATCH(I),1) ; MOVE BACK FORWARD ONE NODE ;
 I $P($G(ZPATCH(I)),U,3)'="COMPLETED" Q 3  ; PREREQ STATUS NOT 'COMPLETED'
 ;
 ; STILL HERE? LET'S GO FORWARD FROM CURRENT AND SEE IF AN OLDER PATCH WAS INSTALLED...
 ; OR IF A NEWER MAJOR VERSION OF THE PACKAGE HAS BEEN INSTALLED.
 S STOP=0,I2=I F  S I2=$O(ZPATCH(I2)) Q:+I2=0!STOP  D
 . S J2=$P($G(ZPATCH(I2)),U,1),J3=$P($G(ZPATCH(I2)),U,2)
 . I J2<PAT S STOP=1
 . I J3>VER S STOP=2
 . ; W I2,*9,J2,*9,PAT,*9,J3,*9,VER,*9,"SQEEB",!
 ;
 I STOP=0 Q 0  ;; FORWARD LOOP NEVER STOPPED; OLDER PATCH OR NEWER VERSION NEVER INSTALLED. GOOD TO GO.
 ; THEN... VERIFY CORRECT INSTALLATION ORDER. -- MAKE SURE A PREVIOUS PATCH WASN'T INSTALLED AFTER THE PREREQ.
 I STOP=1 Q 2 ; OLDER PATCH INSTALLED AFTER TARGET PREREQ. RETURN THUSLY.
 ;
 I STOP=2 Q 4 ; NEWER VERSION INSTALLED; WARN THE INSTALLER TO NOT CONTINUE. 
 ;
 ; RETURN CODES:
 ; 0 == ALL GOOD. // 1 == PREREQ NOT INSTALLED. // 2 == EARLIER PATCH INSTALLED AFTER PREREQ. // 3 == PREREQ STATUS NOT 'COMPLETE'
 ; 4 == NEWER MAJOR VERSION INSTALLED // 5 == NEWER PATCH (IN THIS CASE, 49+) INSTALLED. // 6 == UNKNOWN RETURN CODE... "SHOULDN'T HAPPEN."
 ; 
 Q 6  ;; ONLY HIT THIS IF A NEW 'STOP' CODE IS MISPROGRAMMED. 
 ;
INIT ;
 ;
 S STATTEXT(0)="LOADED"
 S STATTEXT(1)="QUEUED"
 S STATTEXT(2)="STARTED"
 S STATTEXT(3)="COMPLETED"
 S STATTEXT(4)="DEINSTALL"
 S STATTEXT(5)="UNKNOWN"
 ;
 S ZMONTH(1)="Jan"
 S ZMONTH(2)="Feb"
 S ZMONTH(3)="Mar"
 S ZMONTH(4)="Apr"
 S ZMONTH(5)="May"
 S ZMONTH(6)="Jun"
 S ZMONTH(7)="Jul"
 S ZMONTH(8)="Aug"
 S ZMONTH(9)="Sep"
 S ZMONTH(10)="Oct"
 S ZMONTH(11)="Nov"
 S ZMONTH(12)="Dec"
 ;
 Q
 ;
SUP(YUP) ; UTILITY TO GRAB JUST THE FIRST CHARACTER AND UPPERCASE IT.
 ;
 Q $TR($E(YUP,1),"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
 ;