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

SDES2CLONESLOTS.m

Go to the documentation of this file.
SDES2CLONESLOTS ;ALB/BLB - SDES2 SEARCH CLINIC SLOTLENGTHS; Apr 04, 2025@4:17am 1993;Build 8
 ;;5.3;Scheduling;**904,906**; Aug 3,1993;Build 5
 ;;Per VHA Directive 6402, this routine should not be modified
 ;
 Q
 ;
CLONECLINICSLOTS(JSON,SDCONTEXT,CLINIC) ;
 N ERRORS,SLOTS,PATTERNCOUNT
 ;
 D VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
 D VALFILEIEN^SDES2VALUTIL(,.ERRORS,44,$G(CLINIC("CLINIC IEN")),1,,18,19)
 I $D(ERRORS) S ERRORS("cloneClinicSlots",1)="" D BUILDJSON^SDES2JSON(.JSON,.ERRORS) Q
 ;
 D BUILDINDEFSLOTS(.SLOTS,CLINIC("CLINIC IEN"),.PATTERNCOUNT)
 D BUILDSPECSLOTS(.SLOTS,CLINIC("CLINIC IEN"),.PATTERNCOUNT)
 ;
 I '$D(SLOTS) S SLOTS("cloneClinicSlots",1)=""
 D BUILDJSON^SDES2JSON(.JSON,.SLOTS)
 Q
 ;
BUILDINDEFSLOTS(SLOTS,CLINICIEN,PATTERNCOUNT) ;
 N TNODE,SLOTDATE,STARTDATE,DATE
 ;
 F TNODE=0:1:6 D
 .;
 .S DATE=99999999
 .F  S DATE=$O(^SC(CLINICIEN,"T"_TNODE,DATE),-1) Q:'DATE!(DATE<DT)  D
 ..S (SLOTDATE,STARTDATE)=$O(^SC(CLINICIEN,"T"_TNODE,DATE),-1)
 ..S PATTERNCOUNT=$G(PATTERNCOUNT)+1
 ..;
 ..I DATE=9999999 D  Q
 ...I '$G(SLOTDATE) D  Q
 ....S (STARTDATE,SLOTDATE)=$$GETINDEFSLOTDATE(CLINICIEN,DATE,TNODE)
 ....;
 ....I STARTDATE<DT D
 .....S STARTDATE=$$NEXTWEEKDAY(TNODE)
 ....;
 ....D BUILDSLOTS(.SLOTS,CLINICIEN,SLOTDATE,STARTDATE,1,PATTERNCOUNT)
 ...;
 ...S STARTDATE=$$NEXTWEEKDAY(TNODE)
 ...S SLOTDATE=$$GETINDEFSLOTDATE(CLINICIEN,DATE,TNODE)
 ...D BUILDSLOTS(.SLOTS,CLINICIEN,SLOTDATE,STARTDATE,1,PATTERNCOUNT)
 ..;
 ..I DATE=9999999,SLOTDATE>DT D  Q
 ...S (SLOTDATE,STARTDATE)=$$NEXTWEEKDAY(TNODE)
 ...D BUILDSLOTS(.SLOTS,CLINICIEN,SLOTDATE,STARTDATE,1,PATTERNCOUNT)
 ..;
 ..I 'SLOTDATE D
 ...S (SLOTDATE,STARTDATE)=DATE
 ..;
 ..D BUILDSLOTS(.SLOTS,CLINICIEN,SLOTDATE,STARTDATE,1,PATTERNCOUNT)
 I $D(SLOTS) S SLOTS("cloneClinicSlots",1,"clinicIen")=CLINICIEN
 Q
 ;
BUILDSPECSLOTS(SLOTS,CLINICIEN,PATTERNCOUNT) ;
 N PATTERN,STARTINGSPACES,INCREMENT,OSTDATE
 ;
 S OSTDATE=$$FMADD^XLFDT(DT,-1)
 F  S OSTDATE=$O(^SC(CLINICIEN,"OST",OSTDATE)) Q:'OSTDATE  D
 .S PATTERNCOUNT=$G(PATTERNCOUNT)+1
 .D BUILDSLOTS(.SLOTS,CLINICIEN,OSTDATE,,0,PATTERNCOUNT)
 Q
 ;
BUILDSLOTS(SLOTS,CLINICIEN,DATE,INDEFSTARTDATE,INDEFINITE,PATTERNCOUNT,RETURNALLSLOTS) ;
 N SUBIEN,OPEN,COUNT,STARTDATE,TIME,NEXTTIME,TIMEDIFF,SLOTLENGTH,STARTDATETIME,ENDDATETIME,NUMBEROFSLOTS
 ;
 S SUBIEN=0,COUNT=0,STARTDATE=$S($G(INDEFINITE):$G(INDEFSTARTDATE),1:DATE)
 F  S SUBIEN=$O(^SC(CLINICIEN,"T",DATE,2,SUBIEN)) Q:'SUBIEN  D
 .;
 .S TIME=$$GET1^DIQ(44.004,SUBIEN_","_DATE_","_CLINICIEN_",",.01,"I")
 .S TIME=$S(TIME="0000":"0001",1:TIME)
 .S NEXTTIME=$$GET1^DIQ(44.004,SUBIEN+1_","_DATE_","_CLINICIEN_",",.01,"I")
 .S NEXTTIME=$S(NEXTTIME="0000":"0001",1:NEXTTIME)
 .S TIMEDIFF=$$FMDIFF^XLFDT(STARTDATE_"."_NEXTTIME,STARTDATE_"."_TIME,2)/60
 .S SLOTLENGTH=$$GET1^DIQ(44,CLINICIEN,1912)
 .S NUMBEROFSLOTS=$$GET1^DIQ(44.004,SUBIEN_","_DATE_","_CLINICIEN_",",1,"I")
 .S STARTDATETIME=$TR($E($$FMTISO^SDAMUTDT(STARTDATE_"."_TIME),1,16),":","")
 .S ENDDATETIME=$TR($E($$FMTISO^SDAMUTDT($$FMADD^XLFDT(STARTDATE_"."_TIME,,,$$GET1^DIQ(44,CLINICIEN,1912))),1,16),":","")
 .;
 .I '$G(OPEN) D
 ..S COUNT=COUNT+1
 ..S SLOTS("cloneClinicSlots",PATTERNCOUNT,"startDateTime",COUNT)=STARTDATETIME
 ..S SLOTS("cloneClinicSlots",PATTERNCOUNT,"numberOfSlots",COUNT)=NUMBEROFSLOTS
 ..S SLOTS("cloneClinicSlots",PATTERNCOUNT,"indefinite",COUNT)=INDEFINITE
 ..S OPEN=1
 .;
 .I TIMEDIFF'=SLOTLENGTH D
 ..S SLOTS("cloneClinicSlots",PATTERNCOUNT,"endDateTime",COUNT)=ENDDATETIME
 ..S OPEN=0
 Q
 ;
NEXTWEEKDAY(TNODE) ;
 N TODAY,DIFF
 ;
 S TODAY=$$DOW^XLFDT(DT,1)
 S DIFF=TNODE-TODAY
 I DIFF<0 S DIFF=DIFF+7
 Q $$FMADD^XLFDT(DT,DIFF)
 ;
GETINDEFSLOTDATE(CLINICIEN,DATE,TNODE) ;
 N TDATE,INDEFDATE
 ;
 S TDATE=9999999,INDEFDATE=0
 F  S TDATE=$O(^SC(CLINICIEN,"T",TDATE),-1) Q:'TDATE!($G(INDEFDATE))  D
 .I $$DOW^XLFDT(TDATE,1)=TNODE D
 ..I $D(^SC(CLINICIEN,"OST",TDATE)) Q
 ..S INDEFDATE=TDATE
 Q INDEFDATE
 ;
GETFILE(SUBFILE) ;
 Q $SELECT(SUBFILE=0:44.06,SUBFILE=1:44.07,SUBFILE=2:44.08,SUBFILE=3:44.09,SUBFILE=4:44.008,SUBFILE=5:44.009,SUBFILE=6:44.0001,1:"")
 ;