DGRPDT ;ALB/BRM - MILITARY SERVICE DATE UTILITIES ; 1/18/05 4:27pm ;;5.3;Registration;**562,603,626,673,731**;Aug 13, 1993;Build 8 ; DTUTIL(DGNEWDT,DGOLDDT,MYFLG) ; Date precision comparision API S:$G(DGOLDDT)="" DGOLDDT="0000000" Q:'$$VALID(.DGNEWDT) "0^INVALID DATE PARAMETER" I $L(DGOLDDT)<7 S DGOLDDT=DGOLDDT_$E("0000000",$L(DGOLDDT)+1,7) N X,Y,EXACTO,EXACTN,I,RTN,MSDATE,MSG S RTN="",EXACTO=$$CHKEXC(DGOLDDT),EXACTN=$$CHKEXC(DGNEWDT) I $G(MYFLG) Q:'$$MNTHYR(DGNEWDT) "0^Date must contain month and year" Q:EXACTO=EXACTN "1^Same Precision" F I=1:1:3 Q:RTN'="" D .S:$E(EXACTN,I)<$E(EXACTO,I) RTN="0^ is Less Precise Than Previously Entered " .S:$E(EXACTN,I)>$E(EXACTO,I) RTN="1^ is More Precise Than Previously Entered " .S MSG=$S(I=1:"Year",I=2:"Month",I=3:"Day",1:"") .S:RTN'="" $P(RTN,"^",2)=MSG_$P(RTN,"^",2)_MSG Q $S($G(RTN)'="":RTN,1:"0^Unknown Precision") CHKEXC(MSDATE) ; construct precision string (3 digit return value - YMD) Q ($E(MSDATE,1,3)'="000")_($E(MSDATE,4,5)'="00")_($E(MSDATE,6,7)'="00") MNTHYR(MSDATE) ; ensure month and year are not imprecise (binary return value) Q ($E(MSDATE,1,3)'="000")&($E(MSDATE,4,5)'="00") WITHIN(FRDT,TODT,CHKDT) ; is CHKDT within FRDT and TODT? N DGRPB41,DGRPB42 Q:'$$VALID($G(CHKDT)) "0^Invalid Date" Q:('$G(FRDT))!('$G(TODT)) "0^Missing Required Date Range" Q:('$$VALID(FRDT)!'$$VALID(TODT)!'$$B4(FRDT,TODT,1)) "0^Invalid Date Range" S DGRPB41=$$B4(FRDT,CHKDT,1),DGRPB42=$$B4(CHKDT,TODT,1) I 'DGRPB41!'DGRPB42 Q "0^Not Within Valid Date Range" Q "1^Date is Within Date Range"_$S($P(DGRPB41,"^",2):"^1",$P(DGRPB42,"^",2):"^1",1:"") ;add same flag if they are the same VALID(DATE) ; is this a valid Fileman date? (limits are from FR^XLFDT) Q:'$D(DATE) 0 Q (1410102'>DATE)&(DATE'>4141015.235959) B4(DATE1,DATE2,SAME) ;is DATE1 before DATE2? N IMPRDT,IDT,IRTN,CDATE1,CDATE2 S DATE1=$P($G(DATE1),"."),DATE2=$P($G(DATE2),".") Q:DATE1=""!DATE2="" 1 I $G(SAME),DATE1=DATE2 Q "1^1" I $$CHKEXC(DATE1)'=111!$$CHKEXC(DATE2)'=111 D Q:$G(IRTN) IRTN .S (CDATE1,CDATE2)="0000000" .I $E(DATE1,1,3),$E(DATE2,1,3) F I=1:1:2 S $E(@("CDATE"_I),1,3)=$E(@("DATE"_I),1,3) .I $E(DATE1,4,5),$E(DATE2,4,5) F I=1:1:2 S $E(@("CDATE"_I),4,5)=$E(@("DATE"_I),4,5) .I $E(DATE1,6,7),$E(DATE2,6,7) F I=1:1:2 S $E(@("CDATE"_I),6,7)=$E(@("DATE"_I),6,7) .I CDATE1