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

SDES2REMAPUTIL.m

Go to the documentation of this file.
SDES2REMAPUTIL ;ALB/BWF/JAS - REMAP DIVISION/CLINIC ; MAY 21, 2025
 ;;5.3;Scheduling;**908**;Aug 13, 1993;Build 2
 ;;Per VHA Directive 6402, this routine should not be modified
 ;
 Q
 ; validation
VALIDATE(ERRORS,SDINPUT,QUEUEREMAP) ;
 N DIVISIONIEN,CLINICIEN,CLINCNT
 I $D(SDINPUT("DIVISION","ALL")) S QUEUEREMAP=1 Q
 S CLINCNT=0
 I $D(SDINPUT("DIVISION")) D  Q
 .S DIVISIONIEN=0
 .F  S DIVISIONIEN=$O(SDINPUT("DIVISION",DIVISIONIEN)) Q:'DIVISIONIEN  D
 ..I '$D(^DG(40.8,DIVISIONIEN,0)) D ERRLOG^SDES2JSON(.ERRORS,97)
 ..I $D(SDINPUT("DIVISION",DIVISIONIEN)),'$D(SDINPUT("DIVISION",DIVISIONIEN,"CLINIC")) S QUEUEREMAP=1 Q
 ..; no need to validate clinics if 'ALL' clinics are indicated
 ..I $D(SDINPUT("DIVISION",DIVISIONIEN,"CLINIC","ALL")) S QUEUEREMAP=1 Q
 ..; validate individual clinics
 ..I $D(SDINPUT("DIVISION",DIVISIONIEN,"CLINIC")) D
 ...S CLINICIEN=0
 ...F  S CLINICIEN=$O(SDINPUT("DIVISION",DIVISIONIEN,"CLINIC",CLINICIEN)) Q:'CLINICIEN  D
 ....I '$D(^SC(CLINICIEN,0)) D ERRLOG^SDES2JSON(.ERRORS,52,"Invalid clinic: "_CLINICIEN)
 ....I $$GET1^DIQ(44,CLINICIEN,2,"I")'="C" D ERRLOG^SDES2JSON(.ERRORS,52,"IEN "_CLINICIEN_" is not 'Clinic'.")
 ....I $$GET1^DIQ(44,CLINICIEN,3.5,"I")'=DIVISIONIEN D ERRLOG^SDES2JSON(.ERRORS,52,"Clinic "_CLINICIEN_" is not associated with Division: "_DIVISIONIEN)
 ....I $$INACTIVE^SDES2UTIL(CLINICIEN,DT) D ERRLOG^SDES2JSON(.ERRORS,52,"Inactive Clinic: "_CLINICIEN)
 ....S CLINCNT=CLINCNT+1
 .I CLINCNT>20 S QUEUEREMAP=1
 ;
 I $D(SDINPUT("CLINIC")) D
 .S CLINICIEN=0 F  S CLINIEN=$O(SDINPUT("CLINIC",CLINICIEN)) Q:'CLINICIEN  D
 ..I '$D(^SC(CLINICIEN,0)) D ERRLOG^SDES2JSON(.ERRORS,52,"Invalid clinic: "_CLINICIEN)
 ..I $$GET1^DIQ(44,CLINIEN,2,"I")'="C" D ERRLOG^SDES2JSON(.ERRORS,52,"IEN "_CLINICIEN_" is not 'Clinic'.")
 ..I $$INACTIVE^SDES2UTIL(CLINICIEN,DT) D ERRLOG^SDES2JSON(.ERRORS,52,"Inactive Clinic: "_CLINICIEN)
 ..S CLINCNT=CLINCNT+1
 .I CLINCNT>20 S QUEUEREMAP=1
 Q
 ;
TASKREMAP(SDINPUT,STARTDATE,ENDDATE,TASKRES,SDUSER) ;
 N ZTDESC,ZTRTN,ZTIO,ZTSK,X,ZTDTH,ZTSAVE
 S ZTDESC=""
 I $D(SDINPUT("DIVISION","ALL")) S ZTDESC="Clinic Remap - All Divisions / All clinics"
 I '$L(ZTDESC),$D(SDINPUT("DIVISION")) S ZTDESC="Clinic Remap - Division List"
 I '$L(ZTDESC),$D(SDINPUT("CLINIC")) S ZTDESC="Clinic Remap - Clinic List"
 I '$L(ZTDESC) S ZTDESC="Clinic Remap Background Process"
 S ZTDTH=$$FMADD^XLFDT(DT,1)
 S ZTDTH=ZTDTH_.02,ZTIO="",ZTRTN="BACKGROUNDREMAP^SDES2REMAPUTIL",ZTSAVE("*")="" D ^%ZTLOAD
 I $D(ZTSK) D  Q
 .S TASKRES("ClinicRemap","Status")="Task "_ZTSK_" has been queued."
 I '$D(ZTSK) D
 .S TASKRES("ClinicRemap","Status")="UNABLE TO QUEUE THIS JOB. Please contact the National Help Desk to report this issue."
 Q
BACKGROUNDREMAP ;
 N DIVISIONIEN,CLINICIEN,GBL,TMPCOUNT,DATETIME
 S DATETIME=$$NOW^XLFDT
 S GBL=$NA(^TMP("SDES2REMAP",$J)) K @GBL
 S (DIVISIONIEN,TMPCOUNT)=0
 ; all divisions
 ; build report header
 D HEADER(.GBL,.TMPCOUNT)
 ;
 I $D(SDINPUT("DIVISION","ALL")) D  Q
 .S CLINIEN=0 F  S CLINIEN=$O(^SC(CLINIEN)) Q:'CLINIEN  D
 ..Q:$$GET1^DIQ(44,CLINIEN,2,"I")'="C"
 ..Q:$$INACTIVE^SDES2UTIL(CLINIEN,DT)
 ..D REMAPCLIN^SDES2REMAP(.GBL,CLINIEN,STARTDATE,ENDDATE,.TMPCOUNT)
 .D MAIL(GBL,SDUSER)
 .K @GBL
 ;
 ; process division list with clinics = all, or multiple individual clinics
 I $O(SDINPUT("DIVISION",0)) D  Q
 .F  S DIVISIONIEN=$O(SDINPUT("DIVISION",DIVISIONIEN)) Q:'DIVISIONIEN  D
 ..; process all clinics
 ..I $D(SDINPUT("DIVISION",DIVISIONIEN,"CLINIC","ALL"))!('$D(SDINPUT("DIVISION",DIVISIONIEN,"CLINIC"))) D  Q
 ...S CLINICIEN=0
 ...F  S CLINICIEN=$O(^SC(CLINICIEN)) Q:'CLINICIEN  D
 ....Q:'$$CLINDIVCHECK(DIVISIONIEN,CLINICIEN)
 ....D REMAPCLIN^SDES2REMAP(.GBL,CLINICIEN,STARTDATE,ENDDATE,.TMPCOUNT)
 ..; process clinics in the list
 ..S CLINICIEN=0
 ..F  S CLINICIEN=$O(SDINPUT("DIVISION",DIVISIONIEN,"CLINIC",CLINICIEN)) Q:'CLINICIEN  D
 ...Q:'$$CLINDIVCHECK(DIVISIONIEN,CLINICIEN)
 .D MAIL(GBL,SDUSER)
 .K @GBL
 ;
 ; process remap by clinic list
 I $D(SDINPUT("CLINIC")) D  Q
 .S CLINIEN=0 F  S CLINIEN=$O(SDINPUT("CLINIC",CLINIEN)) Q:'CLINIEN  D
 ..Q:$$GET1^DIQ(44,CLINIEN,2,"I")'="C"
 ..Q:$$INACTIVE^SDES2UTIL(CLINIEN,DT)
 ..D REMAPCLIN^SDES2REMAP(.GBL,CLINIEN,STARTDATE,ENDDATE,.TMPCOUNT)
 .D MAIL(GBL,SDUSER)
 .K @GBL
 Q
MAIL(GBL,USERDUZ) ;
 N XMTEXT,XMSUB,XMY,XMDUZ,DIFROM,USEREMAIL
 ; Send MailMan message
 S XMTEXT="^TMP(""SDES2REMAP"","_$J_","
 S XMSUB="REMAP CLINIC - Queued Remap results "_$$FMTE^XLFDT(DT)_" by: "_$$GET1^DIQ(200,USERDUZ,.01,"E")
 S XMY(USERDUZ)=""
 S USEREMAIL=$$GET1^DIQ(200,USERDUZ,.151,"E")
 I USEREMAIL]"" S XMY(USEREMAIL)=""
 D ^XMD
 Q
CLINDIVCHECK(DIVIEN,CLINIEN) ;
 Q:$$GET1^DIQ(44,CLINICIEN,2,"I")'="C" 0
 Q:$$INACTIVE^SDES2UTIL(CLINICIEN,DT) 0
 I $$GET1^DIQ(44,CLINICIEN,3.5,"I")'=DIVISIONIEN Q 0
 Q 1
 ;
ACTIVEAPPTS(CLINIEN,REMAPDATE,FIRSTAPPTDTTM) ;
 N HASAPPTS,STARTDTTM,ENDDTTM,APPTDTTM,APPTIEN
 S HASAPPTS=0
 S FIRSTAPPTDTTM=$O(^SC(CLINIEN,"S",REMAPDATE))
 I FIRSTAPPTDTTM>(REMAPDATE_.9) S FIRSTAPPTDTTM=REMAPDATE Q HASAPPTS
 S APPTDTTM=REMAPDATE-.01
 F  S APPTDTTM=$O(^SC(CLINIEN,"S",APPTDTTM)) Q:'APPTDTTM!($P(APPTDTTM,".")>REMAPDATE)  D
 .S APPTIEN=0 F  S APPTIEN=$O(^SC(CLINIEN,"S",APPTDTTM,1,APPTIEN)) Q:'APPTIEN  D
 ..I $$GET1^DIQ(44.003,APPTIEN_","_APPTDTTM_","_CLINIEN_",",310,"I")="C" Q
 ..S HASAPPTS=1
 Q HASAPPTS
 ;
 S TMPCOUNT=TMPCOUNT+1
 S @GBL@(TMPCOUNT)=$$FMTE^XLFDT(DT)_"                  Clinic Remap Report     "
 S TMPCOUNT=TMPCOUNT+1
 S @GBL@(TMPCOUNT)=" "
 S TMPCOUNT=TMPCOUNT+1
 S @GBL@(TMPCOUNT)=$$PAD($E("Division",1,30),33)_$$PAD($E("Clinic Name",1,30),33)_$$PAD("Clinic Date",19)_"Remark"
 S TMPCOUNT=TMPCOUNT+1
 S @GBL@(TMPCOUNT)=$$PAD($E("=========",1,30),33)_$$PAD($E("===========",1,30),33)_$$PAD("============",19)_"======"
 S TMPCOUNT=TMPCOUNT+1
 S @GBL@(TMPCOUNT)=" "
 Q
LOGDATA(GBL,CLINGBL,TMPCOUNT,CLINTMPCNT,CLINICNAME,DIVNAME,DATE,SCHEDONHOLIDAY,ACTIVEAPPTS,DAY,REMARK) ;
 N MESSAGE
 ; file the passed in remark and quit
 I $L($G(REMARK)) D  Q
 .S TMPCOUNT=TMPCOUNT+1
 .S CLINTMPCNT=CLINTMPCNT+1
 .S (@GBL@(TMPCOUNT),@CLINGBL@(CLINTMPCNT))=$$PAD($E(DIVNAME,1,30),33)_$$PAD($E(CLINICNAME,1,30),33)_$$PAD($E(DAY,1,3),4)_$$PAD($$FMTE^XLFDT(DATE),15)_REMARK
 ; all other messages
 S MESSAGE=$S($D(^HOLIDAY(DATE,0))&ACTIVEAPPTS:"- Appts!",$D(^HOLIDAY(DATE,0))&'SCHEDONHOLIDAY:"- Inserted",1:"")
 I MESSAGE]"" S MESSAGE=MESSAGE
 Q:MESSAGE']""
 ;S @GBL@(TMPCOUNT)="     "_$E(CLINICNAME,1,30)_$$PAD(CLINICNAME,33)_$$PAD($$FMTE^XLFDT(DATE),18)_REMARK
 S TMPCOUNT=TMPCOUNT+1
 S CLINTMPCNT=CLINTMPCNT+1
 S (@GBL@(TMPCOUNT),@CLINGBL@(CLINTMPCNT))=$$PAD($E(DIVNAME,1,30),33)_$$PAD($E(CLINICNAME,1,30),33)_$$PAD($E(DAY,1,3),4)_$$PAD($$FMTE^XLFDT(DATE),15)_MESSAGE
 Q
PAD(STRING,LENGTH) ;
 N NLENGTH,SPACE,I,RETSTRING,SPACES
 S NLENGTH=$L(STRING)
 S SPACES=LENGTH-NLENGTH
 S RETSTRING=STRING
 F I=1:1:SPACES S RETSTRING=$G(RETSTRING)_" "
 Q RETSTRING