*S*************************************************************************         
*S***       
*S***                              WolffPack    
*S***       
*S*** Subroutine: WWSPURGN          
*S*** System    : FINANCIER         
*S*** Title     : Student purge (non year specific)         
*S*** Function  : This subprogram is used to read/purge student information.        
*S***       
*S***      Copyright 1995 - 2026 WolffPack, Inc.  All rights reserved.  
*S***       
*S*************************************************************************         
*S***       
*S**DEFINE DATA         
*S**  GLOBAL USING WWGDA
*S**  PARAMETER USING WWPDA         
*S**  PARAMETER         
*S**  01 #STUDENT-DATA  
*S**    02 #GOT-STUDENT-DATA(L)     
*S**    02 #ALLOW-PURGE(L)          
*S**    02 #NOTEPAD(L)  
*S**    02 #NOTEPAD-CV(C)           
*S**    02 #ARRAY(10)   
*S**      03 #FAO(A2)   
*S**      03 #FAO-CV(C) 
*S**      03 #AIDYEAR(A4)           
*S**      03 #ADD(L)    
*S**      03 #ADD-CV(C) 
*S**      03 #FEDERAL(L)
*S**      03 #FEDERAL-CV(C)         
*S**      03 #CSS(L)    
*S**      03 #CSS-CV(C) 
*S**      03 #VERIFICATION(L)       
*S**      03 #VERIFICATION-CV(C)    
*S**      03 #CORRECTION(L)         
*S**      03 #CORRECTION-CV(C)      
*S**      03 #AWARD(L)  
*S**      03 #AWARD-CV(C)           
*S**    02 #FILE-LOGICALS           
*S**      03 #AIDYEAR-L(L)          
*S**      03 #AIDYEAR-CNT(P3)       
*S**      03 #ADD-L(L)  
*S**      03 #ADD-CNT(P3)           
*S**      03 #NOTEPAD-L(L)          
*S**      03 #NOTEPAD-CNT(P3)       
*S**  PARAMETER         
*S**   01 #CMD(A8)      
*S**   01 #SUB(P3)      
*S**   01 #OVERFLOW(L)  
*S***       
*S**  LOCAL USING WWCONST           
*S**  LOCAL USING WFADDDSD          
*S**  LOCAL USING WFADDDSR          
*S**  LOCAL USING WWAOBJ
*S**  LOCAL USING WWBSORTD          
*S***       
*S**  LOCAL 
*S**  01 #SUB2(P3)      
*S**  01 #WORK-ARRAY(30)
*S**    02 #WORK-FAO(A2)
*S**    02 #WORK-AIDYEAR(A4)        
*S**  /*    
*S**  /* Views used for student deletion        
*S**  01 WF-AIDYEAR VIEW OF WF-AIDYEAR          
*S**    02 WW-STUDENT-ID
*S**    02 WF-FAO       
*S**    02 WF-AID-YEAR  
*S**  /*    
*S**  01 WW-AUDIT VIEW OF WW-AUDIT  
*S**    02 WW-RECORD-TYPE           
*S**    02 WF-FAO       
*S**    02 WW-AU-SUBJ-TYPE          
*S**    02 WW-AU-SUBJ-ID
*S**    02 WW-CTIME     
*S**  /*    
*S**  01 WW-STUDENT VIEW OF WW-STUDENT          
*S**    02 WW-STUDENT-ID
*S**    02 WW-ST-SSN    
*S**    02 WF-FAO       
*S**END-DEFINE          
*S***       
*S**ON ERROR
*S**  ASSIGN #CMD = 'ERROR'         
*S**END-ERROR           
*S**RESET #FILE-LOGICALS
*S**MOVE BY POSITION WW-PDA TO WW-GDA           
*S**DECIDE ON FIRST VALUE #CMD      
*S**  VALUE 'READ'      
*S**    PERFORM READ-STUDENT-DATA   
*S**  VALUE 'PURGE'     
*S**    PERFORM PURGE-STUDENT-DATA  
*S**  NONE  
*S**    IGNORE          
*S**END-DECIDE          
*S**MOVE BY POSITION WW-GDA TO WW-PDA           
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PURGE-STUDENT-DATA        
*S*************************************************************************         
*S***       
*S**  ASSIGN #AIDYEAR-L = TRUE      
*S**  PURGE-AIDYEAR.    
*S**  FIND WF-AIDYEAR WITH WW-STUDENT-ID = ##STUDENT-ID     
*S**    IF NO RECORDS FOUND         
*S**      ASSIGN #AIDYEAR-L = FALSE 
*S**      ESCAPE BOTTOM 
*S**    END-NOREC       
*S**    DELETE(PURGE-AIDYEAR.)      
*S**  END-FIND          
*S**  /*    
*S**  /* Find outstanding Notepad records       
*S**  ASSIGN #NOTEPAD-L = TRUE      
*S**  PURGE-AUDIT.      
*S**  FIND WW-AUDIT WITH WW-AU-SUBJ-ID = ##STUDENT-ID       
*S**    IF NO RECORDS FOUND         
*S**      ASSIGN #NOTEPAD-L = FALSE 
*S**      ESCAPE BOTTOM 
*S**    END-NOREC       
*S**    DELETE(PURGE-AUDIT.)        
*S**  END-FIND          
*S**END-SUBROUTINE /* PURGE-STUDENT-DATA        
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE READ-STUDENT-DATA         
*S*************************************************************************         
*S***       
*S**  ASSIGN #AIDYEAR-L = TRUE      
*S**  FIND WF-AIDYEAR WITH WW-STUDENT-ID = ##STUDENT-ID     
*S**    IF NO RECORDS FOUND         
*S**      ASSIGN #AIDYEAR-L = FALSE 
*S**      FIND WW-STUDENT WITH WW-STUDENT-ID = ##STUDENT-ID 
*S**      FOR #SUB = 1 TO 10        
*S**        IF WW-STUDENT.WF-FAO = #FAO(#SUB) OR
*S**           #FAO(#SUB) = SPACE   
*S**          MOVE WW-STUDENT.WF-FAO TO #FAO(#SUB)          
*S**          ESCAPE BOTTOM         
*S**        END-IF      
*S**      END-FOR       
*S**      END-FIND      
*S**      ESCAPE BOTTOM 
*S**    END-NOREC       
*S**    ASSIGN #AIDYEAR-CNT = *NUMBER           
*S**    /*  
*S**    /* Accumulate unique FAOs in work array 
*S**    FOR #SUB = 1 TO 30          
*S**      IF WF-AIDYEAR.WF-FAO = #WORK-FAO(#SUB) OR         
*S**         #WORK-FAO(#SUB) = SPACE
*S**        MOVE WF-AIDYEAR.WF-FAO TO #WORK-FAO(#SUB)       
*S**        ESCAPE BOTTOM           
*S**      END-IF        
*S**    END-FOR         
*S**    /*  
*S**    /* Accumulate unique AidYears in work array         
*S**    FOR #SUB = 1 TO 30          
*S**      IF WF-AIDYEAR.WF-AID-YEAR = #WORK-AIDYEAR(#SUB) OR
*S**         #WORK-AIDYEAR(#SUB) = SPACE        
*S**        MOVE WF-AIDYEAR.WF-AID-YEAR TO #WORK-AIDYEAR(#SUB)          
*S**        ESCAPE BOTTOM           
*S**      END-IF        
*S**    END-FOR         
*S**  END-FIND          
*S**  /*    
*S**  /* Sort work arrays and select entries for display    
*S**  IF #AIDYEAR-L     
*S**    /*  
*S**    /* Sort and fill FAO array (first 10/ascending)     
*S**    RESET WWBSORTD  
*S**    MOVE #WORK-FAO(1:30) TO #SORT-KEY(1:30) 
*S**    FOR #SUB = 30 TO 1 STEP -1  
*S**      IF #WORK-FAO(#SUB) NE SPACE           
*S**        ESCAPE BOTTOM           
*S**      END-IF        
*S**    END-FOR         
*S**    ASSIGN #SORT-MAX = #SUB     
*S**    PERFORM BUBBLE-SORT WWBSORTD
*S**    IF #SORT-MAX > 10           
*S**      ASSIGN #OVERFLOW = TRUE   
*S**    END-IF          
*S**    MOVE #SORT-KEY(1:10) TO #FAO(1:10)      
*S**    /*  
*S**    /* Sort and fill AidYear array (last 10/descending) 
*S**    RESET WWBSORTD  
*S**    MOVE #WORK-AIDYEAR(1:30) TO #SORT-KEY(1:30)         
*S**    FOR #SUB = 30 TO 1 STEP -1  
*S**      IF #WORK-AIDYEAR(#SUB) NE SPACE       
*S**        ESCAPE BOTTOM           
*S**      END-IF        
*S**    END-FOR         
*S**    ASSIGN #SORT-MAX = #SUB     
*S**    PERFORM BUBBLE-SORT WWBSORTD
*S**    IF #SORT-MAX > 10           
*S**      ASSIGN #OVERFLOW = TRUE   
*S**    END-IF          
*S**    ASSIGN #SUB2 = #SORT-MAX    
*S**    FOR #SUB = 1 TO 10          
*S**      IF #SUB2 = 0  
*S**        ESCAPE BOTTOM           
*S**      END-IF        
*S**      MOVE #SORT-KEY(#SUB2) TO #AIDYEAR(#SUB)           
*S**      SUBTRACT 1 FROM #SUB2     
*S**    END-FOR         
*S**    MOVE PROTECTED-ATTR TO #FAO-CV(*)       
*S**  END-IF
*S**  /*    
*S**  FOR #SUB = 1 TO 10
*S**    IF #AIDYEAR(#SUB) NE SPACE  
*S**      /*
*S**      /* Find outstanding ADD file records for the current SSN      
*S**      ASSIGN #ADD-L = TRUE      
*S**      FOR #SUB2 = 1 TO 10       
*S**        IF #FAO(#SUB2) NE SPACE 
*S**          MOVE PROTECTED-ATTR TO #ADD-CV(#SUB)          
*S**          ASSIGN WWAOBJ.#FUNCTION = 'GET'   
*S**          ASSIGN WFADDDSD.WF-FAO = #FAO(#SUB2)          
*S**          ASSIGN WFADDDSD.WF-AID-YEAR = #AIDYEAR(#SUB)  
*S**          ASSIGN WFADDDSD.WW-ST-SSN = ##SSN 
*S**          ASSIGN WFADDDSD.WF-AD-SOURCE = 'F'
*S**          CALLNAT 'WFADDDSO' WW-GDA         
*S**                  WFADDDSD      
*S**                  WFADDDSD-ID   
*S**                  WFADDDSR      
*S**                  WWAOBJ        
*S**          IF WWAOBJ.#EXISTS     
*S**           ASSIGN #ADD(#SUB) = TRUE         
*S**          END-IF    
*S**          ASSIGN WFADDDSD.WF-AD-SOURCE = 'B'
*S**          CALLNAT 'WFADDDSO' WW-GDA         
*S**                  WFADDDSD      
*S**                  WFADDDSD-ID   
*S**                  WFADDDSR      
*S**                  WWAOBJ        
*S**          IF WWAOBJ.#EXISTS     
*S**            ASSIGN #ADD(#SUB) = TRUE        
*S**          END-IF    
*S**          ASSIGN WFADDDSD.WF-AD-SOURCE = 'C'
*S**          CALLNAT 'WFADDDSO' WW-GDA         
*S**                  WFADDDSD      
*S**                  WFADDDSD-ID   
*S**                  WFADDDSR      
*S**                  WWAOBJ        
*S**          IF WWAOBJ.#EXISTS     
*S**           ASSIGN #ADD(#SUB) = TRUE         
*S**          END-IF    
*S**        END-IF      
*S**      END-FOR       
*S**    END-IF          
*S**  END-FOR           
*S**  /*    
*S**  /* Find outstanding Notepad records       
*S**  ASSIGN #NOTEPAD-L = TRUE      
*S**  RESET #NOTEPAD-CNT
*S**  FIND WW-AUDIT WITH WW-AU-SUBJ-ID = ##STUDENT-ID       
*S**    IF NO RECORDS FOUND         
*S**      ASSIGN #NOTEPAD-L = FALSE 
*S**    END-NOREC       
*S**    IF WW-AUDIT.WW-RECORD-TYPE = NOTE-TYPE  
*S**      ASSIGN #NOTEPAD-CNT = #NOTEPAD-CNT + 1
*S**    END-IF          
*S**  END-FIND          
*S**  IF #NOTEPAD-CNT > 0           
*S**    ASSIGN #NOTEPAD = TRUE      
*S**  END-IF
*S**  MOVE PROTECTED-ATTR TO #NOTEPAD-CV        
*S**END-SUBROUTINE /* READ-STUDENT-DATA         
*S***       
*S**END     
*E          
