- PRCFFU16 ;WISC/SJG-PO OBLIGATION UTILITY ;8/18/94 17:03
- V ;;5.1;IFCAP;;Oct 20, 2000
- ;Per VHA Directive 10-93-142, this routine should not be modified.
- ;
- EN(IEN) ; Called from PO obligation processing
- ; IEN - Internal entry number from 442
- W !,"Editing Auto Accrual information...",!
- D POVENO^PRCFFU15(IEN)
- S (ACCEDIT,AUTOACC,EXIT)=0
- N FILE S FILE=$$FILE
- D GENDIQ^PRCFFU7(FILE,IEN,".1;29;30","IEN","")
- I $G(PRCTMP(FILE,IEN,29,"E"))="" D PROMPT I 'Y!($D(DIRUT)) D:EXIT MSG5 Q
- I $G(PRCTMP(FILE,IEN,29,"E"))'="" S OB=IEN D MSG1,PROMPT1 I Y!($D(DIRUT)) D:EXIT MSG5 Q
- W ! D MSG3,MSG4
- I EXIT D MSG5 Q
- W ! D CHK
- I (NEWDATE="")&(NEWACC="YES") D
- .K MSG W !!
- .S MSG(1)="This Purchase Order Obligation does not have an Ending Date, but the"
- .S MSG(2)="Auto Accrual flag is set to 'YES'.",MSG(3)=" "
- .S MSG(4)="The Auto Accrual flag will be corrected and set to 'NO'."
- .D EN^DDIOL(.MSG) W ! K MSG D EDIT H 3
- .Q
- S DIE=442,DA=IEN,DR="29////^S X=NEWDATE;30////^S X=NEWACC"
- I $P(PRCFA("MOD"),U)="M",'PRCFA("RETRAN") S DIE=443.6
- D ^DIE K DIE,DR
- D TAG33^PRCFFU9
- KILL AUTOACC,NEWACC,NEWDATE,OLDACC,OLDDATE,CONTEND,CONTENDA,CONTENDE,CONTENDI
- QUIT
- ;
- EDIT S DIE=442,DA=IEN,DR="30///^S X=""N"""
- I $P(PRCFA("MOD"),U)="M",'PRCFA("RETRAN") S DIE=443.6
- D ^DIE K DIE,DR
- Q
- PROMPT ; Prompt user
- D EN^DDIOL("This "_$$LABEL^PRCFFU15_" Obligation appears to be for services.")
- S DIR(0)="Y",DIR("A")="Will this Purchase Order Obligation need to be accrued in FMS",DIR("B")="YES"
- S DIR("?")=" '^' to exit this option."
- S DIR("?",1)="Enter one of the following:"
- S DIR("?",2)=" 'NO' or 'N' if no accrual is needed OR it is for one month."
- S DIR("?",3)=" 'YES' or 'Y' if the Obligation covers more than one month AND accrual is",DIR("?",4)=" needed."
- S DIR("?",5)=" 'RETURN' for YES."
- S DIR("??")="^D MSG2^PRCFFU15"
- D ^DIR K DIR W !
- I 'Y!($D(DIRUT)) N YY S YY=Y D EDIT,TAG33^PRCFFU9,MSG5 S Y=YY Q
- S NEWACC=Y(0)
- Q
- MSG1 ; Display current auto accrual information
- D MSG1^PRCFFU15
- Q
- PROMPT1 ; Prompt for correct values
- S DIR(0)="Y",DIR("A")="Are these Auto Accrual values correct",DIR("B")="YES",DIR("??")="^D MSG2^PRCFFU15"
- W ! D ^DIR K DIR W !
- I Y S EXIT=0,PRCFA("ACCEDIT")=1
- Q
- MSG3 ; Prompt for Ending Date
- S NEWDATE=$G(PRCTMP(FILE,IEN,29,"I")),EXIT=0
- S DIR(0)="D",DIR("A")="END DATE FOR P.O. SERVICE ORDER"
- I $G(PRCTMP(FILE,IEN,29,"E"))]"" S DIR("B")=$G(PRCTMP(FILE,IEN,29,"E"))
- I $G(PRCTMP(FILE,IEN,29,"E"))="" D
- .I $D(CONTENDA)>9 D
- ..N END,CONT S END="",CONT=$O(CONTENDA(END))
- ..S CONTEND=$P(CONTENDA(CONT),U)
- ..I CONTEND]"" S DIR("B")=CONTEND
- ..Q
- .I $D(CONTENDA)<9 D
- ..N COM S COM=$G(PRCTMP(FILE,IEN,.1,"I")),Y=$P($$EOM^PRCFFU16(COM),U,2)
- ..D DD^%DT S DIR("B")=Y
- ..Q
- .Q
- D ^DIR K DIR
- I $D(DIRUT) S EXIT=1 Q
- I Y S NEWDATE=Y
- S X1=NEWDATE,X2=$G(PRCTMP(FILE,IEN,.1,"I")) D ^%DTC I X<0 W ! D EN^DDIOL("The Ending Date cannot come before the Purchase Order Date - "_$G(PRCTMP(FILE,IEN,.1,"E"))) W ! G MSG3
- D CHK1(NEWDATE)
- Q
- MSG4 ; Prompt for Auto Accrual
- Q:EXIT
- S NEWACC=$G(PRCTMP(FILE,IEN,30,"I")),EXIT=0
- S DIR(0)="Y",DIR("A")="AUTO ACCRUAL FLAG",DIR("B")="YES"
- I $G(PRCTMP(FILE,IEN,30,"E"))="" D
- .S X1=NEWDATE,X2=$G(PRCTMP(FILE,IEN,.1,"I")) D ^%DTC I X<31 S DIR("B")="NO"
- I $G(PRCTMP(FILE,IEN,30,"E"))]"" S DIR("B")=$G(PRCTMP(FILE,IEN,30,"E"))
- D ^DIR K DIR
- I $D(DIRUT) S EXIT=1 Q
- S NEWACC=$S($E(Y,1)="Y":1,$E(Y,1)="N":0,$G(DIRUT)=1:0,'Y:0,Y:1,1:1)
- Q
- MSG5 ; Exit message
- D MSG5^PRCFFU15
- Q
- MSG6 ; Returning message
- D EN^DDIOL("Returning to Obligation processing...")
- Q
- CHK ;
- S OLDDATE=$G(PRCTMP(FILE,IEN,29,"I"))
- S OLDACC=$G(PRCTMP(FILE,IEN,33,"I"))
- I OLDDATE=NEWDATE&(OLDACC=NEWACC) Q
- I OLDDATE'=NEWDATE S (PRCFA("ACCEDIT"),ACCEDIT)=1
- I OLDACC'=NEWACC S (PRCFA("ACCEDIT"),ACCEDIT)=1
- Q
- FILE() ; Determine file for lookup
- I $D(PRCFA("MOD")),$P(PRCFA("MOD"),U)="E" S FILE=442
- I $D(PRCFA("MOD")),$P(PRCFA("MOD"),U)="M" D
- .I $D(PRCFA("RETRAN")),PRCFA("RETRAN")=0 S FILE=443.6
- .I $D(PRCFA("RETRAN")),PRCFA("RETRAN")=1 S FILE=442
- .Q
- Q FILE
- EOM(DATE) ; Determine end-of-month default date
- N YR,MON,EOM,LEAP,DEF
- S YR=$E(DATE,1,3)+1700,MON=+$E(DATE,4,5)
- S LEAP=$S(YR#400=0:1,YR#4=0&'(YR#100=0):1,1:0)
- S EOM=$P("31~"_(28+LEAP)_"~31~30~31~30~31~31~30~31~30~31","~",MON)
- S FMEOM=$E(DATE,1,5)_EOM,DEF=MON_"/"_EOM
- Q DEF_U_FMEOM
- CHK1(DATE) ;Check for Ending date crossover to next FY.
- S X="0930"_PRC("FY") D ^%DT
- S X2=Y ; end of fiscal year for PO
- S X=DATE D ^%DT
- S X1=Y D ^%DTC
- I X>0 W ! D EN^DDIOL("NOTE: The Ending Date for P.O. Service Order exceeds the End of the Fiscal Year!")
- W !
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPRCFFU16 4670 printed Feb 18, 2025@23:30:03 Page 2
- PRCFFU16 ;WISC/SJG-PO OBLIGATION UTILITY ;8/18/94 17:03
- V ;;5.1;IFCAP;;Oct 20, 2000
- +1 ;Per VHA Directive 10-93-142, this routine should not be modified.
- +2 ;
- EN(IEN) ; Called from PO obligation processing
- +1 ; IEN - Internal entry number from 442
- +2 WRITE !,"Editing Auto Accrual information...",!
- +3 DO POVENO^PRCFFU15(IEN)
- +4 SET (ACCEDIT,AUTOACC,EXIT)=0
- +5 NEW FILE
- SET FILE=$$FILE
- +6 DO GENDIQ^PRCFFU7(FILE,IEN,".1;29;30","IEN","")
- +7 IF $GET(PRCTMP(FILE,IEN,29,"E"))=""
- DO PROMPT
- IF 'Y!($DATA(DIRUT))
- if EXIT
- DO MSG5
- QUIT
- +8 IF $GET(PRCTMP(FILE,IEN,29,"E"))'=""
- SET OB=IEN
- DO MSG1
- DO PROMPT1
- IF Y!($DATA(DIRUT))
- if EXIT
- DO MSG5
- QUIT
- +9 WRITE !
- DO MSG3
- DO MSG4
- +10 IF EXIT
- DO MSG5
- QUIT
- +11 WRITE !
- DO CHK
- +12 IF (NEWDATE="")&(NEWACC="YES")
- Begin DoDot:1
- +13 KILL MSG
- WRITE !!
- +14 SET MSG(1)="This Purchase Order Obligation does not have an Ending Date, but the"
- +15 SET MSG(2)="Auto Accrual flag is set to 'YES'."
- SET MSG(3)=" "
- +16 SET MSG(4)="The Auto Accrual flag will be corrected and set to 'NO'."
- +17 DO EN^DDIOL(.MSG)
- WRITE !
- KILL MSG
- DO EDIT
- HANG 3
- +18 QUIT
- End DoDot:1
- +19 SET DIE=442
- SET DA=IEN
- SET DR="29////^S X=NEWDATE;30////^S X=NEWACC"
- +20 IF $PIECE(PRCFA("MOD"),U)="M"
- IF 'PRCFA("RETRAN")
- SET DIE=443.6
- +21 DO ^DIE
- KILL DIE,DR
- +22 DO TAG33^PRCFFU9
- +23 KILL AUTOACC,NEWACC,NEWDATE,OLDACC,OLDDATE,CONTEND,CONTENDA,CONTENDE,CONTENDI
- +24 QUIT
- +25 ;
- EDIT SET DIE=442
- SET DA=IEN
- SET DR="30///^S X=""N"""
- +1 IF $PIECE(PRCFA("MOD"),U)="M"
- IF 'PRCFA("RETRAN")
- SET DIE=443.6
- +2 DO ^DIE
- KILL DIE,DR
- +3 QUIT
- PROMPT ; Prompt user
- +1 DO EN^DDIOL("This "_$$LABEL^PRCFFU15_" Obligation appears to be for services.")
- +2 SET DIR(0)="Y"
- SET DIR("A")="Will this Purchase Order Obligation need to be accrued in FMS"
- SET DIR("B")="YES"
- +3 SET DIR("?")=" '^' to exit this option."
- +4 SET DIR("?",1)="Enter one of the following:"
- +5 SET DIR("?",2)=" 'NO' or 'N' if no accrual is needed OR it is for one month."
- +6 SET DIR("?",3)=" 'YES' or 'Y' if the Obligation covers more than one month AND accrual is"
- SET DIR("?",4)=" needed."
- +7 SET DIR("?",5)=" 'RETURN' for YES."
- +8 SET DIR("??")="^D MSG2^PRCFFU15"
- +9 DO ^DIR
- KILL DIR
- WRITE !
- +10 IF 'Y!($DATA(DIRUT))
- NEW YY
- SET YY=Y
- DO EDIT
- DO TAG33^PRCFFU9
- DO MSG5
- SET Y=YY
- QUIT
- +11 SET NEWACC=Y(0)
- +12 QUIT
- MSG1 ; Display current auto accrual information
- +1 DO MSG1^PRCFFU15
- +2 QUIT
- PROMPT1 ; Prompt for correct values
- +1 SET DIR(0)="Y"
- SET DIR("A")="Are these Auto Accrual values correct"
- SET DIR("B")="YES"
- SET DIR("??")="^D MSG2^PRCFFU15"
- +2 WRITE !
- DO ^DIR
- KILL DIR
- WRITE !
- +3 IF Y
- SET EXIT=0
- SET PRCFA("ACCEDIT")=1
- +4 QUIT
- MSG3 ; Prompt for Ending Date
- +1 SET NEWDATE=$GET(PRCTMP(FILE,IEN,29,"I"))
- SET EXIT=0
- +2 SET DIR(0)="D"
- SET DIR("A")="END DATE FOR P.O. SERVICE ORDER"
- +3 IF $GET(PRCTMP(FILE,IEN,29,"E"))]""
- SET DIR("B")=$GET(PRCTMP(FILE,IEN,29,"E"))
- +4 IF $GET(PRCTMP(FILE,IEN,29,"E"))=""
- Begin DoDot:1
- +5 IF $DATA(CONTENDA)>9
- Begin DoDot:2
- +6 NEW END,CONT
- SET END=""
- SET CONT=$ORDER(CONTENDA(END))
- +7 SET CONTEND=$PIECE(CONTENDA(CONT),U)
- +8 IF CONTEND]""
- SET DIR("B")=CONTEND
- +9 QUIT
- End DoDot:2
- +10 IF $DATA(CONTENDA)<9
- Begin DoDot:2
- +11 NEW COM
- SET COM=$GET(PRCTMP(FILE,IEN,.1,"I"))
- SET Y=$PIECE($$EOM^PRCFFU16(COM),U,2)
- +12 DO DD^%DT
- SET DIR("B")=Y
- +13 QUIT
- End DoDot:2
- +14 QUIT
- End DoDot:1
- +15 DO ^DIR
- KILL DIR
- +16 IF $DATA(DIRUT)
- SET EXIT=1
- QUIT
- +17 IF Y
- SET NEWDATE=Y
- +18 SET X1=NEWDATE
- SET X2=$GET(PRCTMP(FILE,IEN,.1,"I"))
- DO ^%DTC
- IF X<0
- WRITE !
- DO EN^DDIOL("The Ending Date cannot come before the Purchase Order Date - "_$GET(PRCTMP(FILE,IEN,.1,"E")))
- WRITE !
- GOTO MSG3
- +19 DO CHK1(NEWDATE)
- +20 QUIT
- MSG4 ; Prompt for Auto Accrual
- +1 if EXIT
- QUIT
- +2 SET NEWACC=$GET(PRCTMP(FILE,IEN,30,"I"))
- SET EXIT=0
- +3 SET DIR(0)="Y"
- SET DIR("A")="AUTO ACCRUAL FLAG"
- SET DIR("B")="YES"
- +4 IF $GET(PRCTMP(FILE,IEN,30,"E"))=""
- Begin DoDot:1
- +5 SET X1=NEWDATE
- SET X2=$GET(PRCTMP(FILE,IEN,.1,"I"))
- DO ^%DTC
- IF X<31
- SET DIR("B")="NO"
- End DoDot:1
- +6 IF $GET(PRCTMP(FILE,IEN,30,"E"))]""
- SET DIR("B")=$GET(PRCTMP(FILE,IEN,30,"E"))
- +7 DO ^DIR
- KILL DIR
- +8 IF $DATA(DIRUT)
- SET EXIT=1
- QUIT
- +9 SET NEWACC=$SELECT($EXTRACT(Y,1)="Y":1,$EXTRACT(Y,1)="N":0,$GET(DIRUT)=1:0,'Y:0,Y:1,1:1)
- +10 QUIT
- MSG5 ; Exit message
- +1 DO MSG5^PRCFFU15
- +2 QUIT
- MSG6 ; Returning message
- +1 DO EN^DDIOL("Returning to Obligation processing...")
- +2 QUIT
- CHK ;
- +1 SET OLDDATE=$GET(PRCTMP(FILE,IEN,29,"I"))
- +2 SET OLDACC=$GET(PRCTMP(FILE,IEN,33,"I"))
- +3 IF OLDDATE=NEWDATE&(OLDACC=NEWACC)
- QUIT
- +4 IF OLDDATE'=NEWDATE
- SET (PRCFA("ACCEDIT"),ACCEDIT)=1
- +5 IF OLDACC'=NEWACC
- SET (PRCFA("ACCEDIT"),ACCEDIT)=1
- +6 QUIT
- FILE() ; Determine file for lookup
- +1 IF $DATA(PRCFA("MOD"))
- IF $PIECE(PRCFA("MOD"),U)="E"
- SET FILE=442
- +2 IF $DATA(PRCFA("MOD"))
- IF $PIECE(PRCFA("MOD"),U)="M"
- Begin DoDot:1
- +3 IF $DATA(PRCFA("RETRAN"))
- IF PRCFA("RETRAN")=0
- SET FILE=443.6
- +4 IF $DATA(PRCFA("RETRAN"))
- IF PRCFA("RETRAN")=1
- SET FILE=442
- +5 QUIT
- End DoDot:1
- +6 QUIT FILE
- EOM(DATE) ; Determine end-of-month default date
- +1 NEW YR,MON,EOM,LEAP,DEF
- +2 SET YR=$EXTRACT(DATE,1,3)+1700
- SET MON=+$EXTRACT(DATE,4,5)
- +3 SET LEAP=$SELECT(YR#400=0:1,YR#4=0&'(YR#100=0):1,1:0)
- +4 SET EOM=$PIECE("31~"_(28+LEAP)_"~31~30~31~30~31~31~30~31~30~31","~",MON)
- +5 SET FMEOM=$EXTRACT(DATE,1,5)_EOM
- SET DEF=MON_"/"_EOM
- +6 QUIT DEF_U_FMEOM
- CHK1(DATE) ;Check for Ending date crossover to next FY.
- +1 SET X="0930"_PRC("FY")
- DO ^%DT
- +2 ; end of fiscal year for PO
- SET X2=Y
- +3 SET X=DATE
- DO ^%DT
- +4 SET X1=Y
- DO ^%DTC
- +5 IF X>0
- WRITE !
- DO EN^DDIOL("NOTE: The Ending Date for P.O. Service Order exceeds the End of the Fiscal Year!")
- +6 WRITE !
- +7 QUIT