ORMTIME	; SLC/RJS - PROCESS TIME BASED EVENT ;9/29/99  09:35 [2/1/00 9:30am]
	;;3.0;ORDER ENTRY/RESULTS REPORTING;**40,253,243**;Dec 17, 1997;Build 242
	;
EN	; Main entry tag.
	;
	N OCXPSDT,OCXZTSK,OCXERR,OCXORMTR,OCXSTDT,OCXLOCK,OCXPAR
	K ^TMP("OCXORMTIME",$J)
	S OCXLOCK=0
	S OCXORMTR="ORMTIME: Startup"
	S OCXSTDT=$$EDATE($$IDATE("NOW"))
	S ^TMP("OCXORMTIME",$J,"STATUS")="ORMTIME: Attempting to lock ^OR(100,""AE"") at "_OCXSTDT_"."
	L +^OR(100,"AE"):10
	I  D
	.S OCXLOCK=1
	.D SCAN
	.L -^OR(100,"AE")
	.K ^TMP("OCXORMTIME")
	.S OCXPAR=$$IDATE2("NOW")
	.D PUT^XPAR("SYS","ORM ORMTIME LAST RUN",1,OCXPAR,.OCXERR)
	S:'OCXLOCK ^TMP("OCXORMTIME",$J,"STATUS")="ORMTIME: Unable to lock ^OR(100,""AE"") at "_OCXSTDT_" attempt."
	Q
	;
SCAN	; Call ORMTIM01 for order checking, etc.  ORMTIM02 for misc time based tasks
	;
	D SCAN^ORMTIM01
	D MISC^ORMTIM02
	D TASK^ORTSKLPS
	Q
	;
EDATE(Y)	X ^DD("DD") S:(Y["@") Y=$P(Y,"@",1)_" at "_$P(Y,"@",2) Q Y
	;
IDATE(X)	N %DT,Y S %DT="F" D ^%DT Q Y
	;
IDATE2(X)	N %DT,Y S %DT="TF" D ^%DT Q Y
	;
REQUEUE(ORMQT)	; Code formerly queued ORMTIME tasks in Taskman.
	;
	; (This tag kept for compatibility with outside calls.)
	;
	Q
	;
STATUS	; Check status of last ORMTIME run. 
	;
	N ORMLAST
	;
	; Get date/time of last ORMTIME run:
	S ORMLAST=$$GET^XPAR("SYS","ORM ORMTIME LAST RUN",1,"I")
	S ORMLAST=$$EDATE(ORMLAST) ; Convert to external format for display.
	;
	; Present information to user:
	W !
	W !,"     ORMTIME last ran "_ORMLAST_"."
	W !
	;
	Q
	;
BULL	; Send a bulletin if ORMTIME's last run is greater than 24 hours.
	;
	N DIC,ORMMSG,X,XMSUB,XMTEXT,XMY,XMZ,Y,ORMLAST
	;
	; Don't send bulletin if ORMTIME STATUS mail group does not exist:
	S DIC=3.8,DIC(0)="",X="ORMTIME STATUS"
	D ^DIC Q:(+Y<0)
	;
	S ORMLAST=$$GET^XPAR("SYS","ORM ORMTIME LAST RUN",1,"I")
	I $$FMDIFF^XLFDT($$IDATE2("NOW"),ORMLAST,2)>86400  D
	.S XMY("G.ORMTIME STATUS")=""
	.S XMSUB=" ORMTIME Warning"
	.S ORMMSG(1,0)=" "
	.S ORMMSG(2,0)="    The ORMTIME process last ran more than 24 hours ago. "
	.S ORMMSG(3,0)=" "
	.S ORMMSG(4,0)=" The ORMTIME background job handles activating and expiring orders,"
	.S ORMMSG(5,0)=" some time based notifications, as well as purging of temporary CPRS"
	.S ORMMSG(6,0)=" data. It is important that it runs regularly."
	.S ORMMSG(7,0)=" "
	.S ORMMSG(8,0)="    Assure that the scheduled option, ORMTIME RUN, is correctly implemented."
	.S ORMMSG(9,0)=" "
	.S XMTEXT="ORMMSG("
	.D ^XMD
	Q
	;
