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

ABSPP49.m

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