PSSSCHED	;BIR/JMC-BUILD SCHEDULE LIST FOR CPRS GUI SELECTION;02/27/08
	;;1.0;PHARMACY DATA MANAGEMENT;**94**;9/30/97;Build 26
	;
	;
	Q  ;Cannot be called directly.  Must use API
	;
SCHED(PSSWIEN,PSSARRY)	;Receive ward IEN from CPRS and return list of schedules.
	;
	;PSSWIEN   = Ward IEN
	;PSSARRY   = array passed by reference from CPRS
	;
	;If there is a duplicate schedule, and if one of them contains
	;ward-specific admin times for the ward location of the patient,
	;the schedule returned for inclusion in the list of selectable
	;schedules to CPRS will be the one with the ward-specific admin
	;times.  If neither duplicate has ward-specific admin times,
	;then the current functionality of the schedule with the lowest
	;IEN number will remain in place.  If both (or more than one)
	;duplicate schedules have ward-specific admin times for the ward
	;location of the patient, then the one with the lowest IEN number
	;will be the schedule returned to CPRS.
	;
	;Example:  Patient's ward location is ICU
	;^PS(51.1,"APPSJ","BID",1)=""
	;^PS(51.1,"APPSJ","BID",2)=""
	;
	;If ^PS(51.1,1 does not have ward-specific admin times for
	;the ICU, but ^PS(51.1,2 does, ^PS(51.1,2 will be in the list
	;of schedules returned to CPRS.
	;
	;If neither schedule has ward-specific admin times for the ICU
	;then ^PS(51.1,1 will be in the list of schedules returned to CPRS.            
	;
	;If both schedules have ward-specific admin times for the ICU
	;then ^PS(51.1,1 will be in the list of schedules returned to CPRS.
	;
	;The returned array to CPRS will be in the format:
	;PSSARRY(n)=IEN^NAME^OUTPATIENT EXPANSION^SCHEDULE TYPE^ADMIN TIME
	;
	N PSSSKED,PSSSKED1,PSSSK
	K ^TMP("PSSADMIN"),^TMP("PSSDUP")
	I $G(PSSWIEN)="" S PSSWIEN=0
	S PSSSKED=""
	F  S PSSSKED=$O(^PS(51.1,"APPSJ",PSSSKED)) Q:PSSSKED=""  D
	. S PSSSKED1="",PSSSK=1
	. F  S PSSSKED1=$O(^PS(51.1,"APPSJ",PSSSKED,PSSSKED1)) Q:PSSSKED1=""  D
	. . Q:$P($G(^PS(51.1,PSSSKED1,0)),"^",5)=""
	. . S ^TMP("PSSDUP",$J,PSSSKED,PSSSK)=PSSSKED1  ;Identify duplicate schedules to work with.
	. . S ^TMP("PSSADMIN",$J,"STD",PSSSKED,PSSSKED1)=$S($P($G(^PS(51.1,PSSSKED1,1,PSSWIEN,0)),"^",2)'="":$P($G(^PS(51.1,PSSSKED1,1,PSSWIEN,0)),"^",2),1:$P($G(^PS(51.1,PSSSKED1,0)),"^",2))
	. . S PSSSK=PSSSK+1
	. I '$D(^TMP("PSSDUP",$J,PSSSKED,2)) K ^TMP("PSSDUP",$J,PSSSKED)
	I $D(^TMP("PSSDUP")) D DUP,FORMAT,KILL Q  ;Duplicate schedules - determine if any have ward-specific admin times
	I '$D(^TMP("PSSDUP")) D FORMAT,KILL Q  ;No duplicates in the schedule file - format for proper return to CPRS
	Q
KILL	;
	K ^TMP("PSSADMIN"),PSSSKED,PSSSKED1,PSSSK,PSSWIEN
	Q
DUP	;Compare duplicates to see if any have ward-specific admin times.
	S PSSSKED="",PSSSKED1=""
	F  S PSSSKED=$O(^TMP("PSSDUP",$J,PSSSKED)) Q:PSSSKED=""  D
	. S PSSSK=""
	. F  S PSSSK=$O(^TMP("PSSDUP",$J,PSSSKED,PSSSK)) Q:PSSSK=""  D
	. . S PSSSKED1=$G(^TMP("PSSDUP",$J,PSSSKED,PSSSK))
	. . I '$D(^TMP("PSSADMIN",$J,"STD",PSSSKED)) S ^TMP("PSSADMIN",$J,"STD",PSSSKED,PSSSKED1)=$P($G(^PS(51.1,PSSSKED1,0)),"^",2)
	. . I '$D(^PS(51.1,PSSSKED1,1,PSSWIEN,0)),PSSSK>1 K ^TMP("PSSADMIN",$J,"STD",PSSSKED,PSSSKED1) Q
	. . I $D(^PS(51.1,PSSSKED1,1,PSSWIEN,0)),'$D(^TMP("PSSADMIN",$J,"WARD",PSSSKED)) S ^TMP("PSSADMIN",$J,"WARD",PSSSKED,PSSSKED1)=$P($G(^PS(51.1,PSSSKED1,1,PSSWIEN,0)),"^",2)
	. . I $D(^TMP("PSSADMIN",$J,"WARD",PSSSKED)) D  Q
	. . . K ^TMP("PSSADMIN",$J,"STD",PSSSKED)
	. . . S ^TMP("PSSADMIN",$J,"STD",PSSSKED,PSSSKED1)=$G(^TMP("PSSADMIN",$J,"WARD",PSSSKED,PSSSKED1))
	. . . K ^TMP("PSSADMIN",$J,"WARD",PSSSKED)
	K ^TMP("PSSDUP")
	Q
FORMAT	;Format array for proper return to CPRS
	N PSSCNTR,PSSTMP
	S PSSSKED="",PSSSKED1="",PSSCNTR=1
	F  S PSSSKED=$O(^TMP("PSSADMIN",$J,"STD",PSSSKED)) Q:PSSSKED=""  D
	. F  S PSSSKED1=$O(^TMP("PSSADMIN",$J,"STD",PSSSKED,PSSSKED1)) Q:PSSSKED1=""  D
	. . S PSSTMP=$G(^PS(51.1,PSSSKED1,0))
	. . S PSSARRY(PSSCNTR)=PSSSKED1_"^"_PSSSKED_"^"_$P(PSSTMP,"^",8)_"^"_$P(PSSTMP,"^",5)_"^"_$G(^TMP("PSSADMIN",$J,"STD",PSSSKED,PSSSKED1))
	. . S PSSCNTR=PSSCNTR+1
	K PSSCNTR,PSSTMP
	Q
