Function Win_Check_Req_Fields(WinID, TabControl)

////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
//																								
// This program is proprietary and is not to be used by or disclosed to others, nor is it to	
// be copied without written permission from SRP Computer Solutions, Inc.						
//																								
// Name       : Win_Check_Req_Fields															
//																								
// Description: Checks the Required fields of a window to make sure they have data entered.		
//																								
// Notes:		Currently, this only works with controls with TEXT properties and				
//				non-Edittables. Follow the examples below to hook this on to other windows.		
//				Also include the following line in the Window Case statement in the				
//				Promoted_Write_Event (Pre section):												
//																								
//					EventFlow = Win_Check_Req_Fields(@Window)									
//																								
//				It will automatically try and pull the STA_ controls text information.  If no	
//				static control exists, then it will use the control name after re-formating it.	
//																								
// Parameters:																					
//	WinID			[in] -- The window being validated. If blank, @WINDOW will be used.			
//	TabControl		[in] -- The name of the Tab control that is associated with each window		
//							page. Not applicable with single-page forms.						
//	EventFlow	   [out] -- Event flow status variable. See EVENT_SETUP insert for more			
//							information on how this works.										
//																								
// History (Date, Initials, Notes)																
//   09/21/01  pcs   Original programmer														
//   12/06/05  dmb   Updated code to support the OLE Tab control. Minor code clean up.			
//   12/14/05  dmb   Check IOOPTIONS<10> first before executing code.							
//																								
////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////

If Assigned(WinID) else WinID = @Window
If Assigned(TabControl) else TabControl = ".OLE_TAB"	; // If no tab control is passed, this one will be assumed.

$insert SRP_APP_INSERTS
$insert SRP_EVENT_SETUP
$insert MSG_EQUATES
$insert OIWin_Comm_Init

Declare Subroutine First_Caps

Process = 1
Done = No$

// Only execute if required fields are checked during the WRITE event.
IOOptions = Get_Property(@Window, "IOOPTIONS")
If IOOptions<10> NE Yes$ then Done = Yes$

Loop
	If Process GT 2 then Done = Yes$
Until Done
	On Process GoSub Init_Vars, Process_Window
	Process += 1
Repeat
If Assigned(EventFlow) else EventFlow = EVENT_CONTINUE$

Return EventFlow


Init_Vars:
	TrueNames = ""
	ReqFields = ""
	CntrlSemantics = ControlSemantics@
	ControlList = ControlList@
	NumItems = Count(CntrlSemantics, @FM) + (CntrlSemantics NE "")
	For ItemLoop = 1 to NumItems
		If CntrlSemantics<ItemLoop, 17, 1> then
			CurControl = ControlList<ItemLoop, 1>
			ReqFields<-1> = CurControl
			StartPos = Index(CurControl, ".", 1)
			STAName = CurControl
			STAName[(StartPos + 1), 3] = "STA"
			CurTrueText = Get_Property(STAName, "TEXT")
			If CurTrueText EQ "" then
				CurTrueText = CurControl[(StartPos + 5), 999]
				Swap "_" with " " in CurTrueText
				First_Caps("", CurTrueText, "", NewText)
				CurTrueText = NewText
			end
			TrueNames<-1> = CurTrueText
		end
	Next ItemLoop
	If ReqFields EQ "" then
		Done = Yes$
	end
return

Process_Window:
	MissingField = ""
	CurFocus = ""
	NumReqFields = Count(ReqFields, @FM) + (ReqFields NE "")
	Count = 1
	For ReqLoop = 1 to NumReqFields
		CurReq = ReqFields<ReqLoop>
		CurProp = Get_Property(CurReq, "DEFPROP")
		If CurProp GT "" then
			// Contains information. Continue.
		end else
			// Missing information. Flag for reminder.
			If CurFocus = "" then
				// Set Focus back into the first field.
				CurFocus = CurReq
			end
			CurTrue = TrueNames<ReqLoop>
			MissingField<-1> = Count:".)":Tab$:CurTrue
			Count += 1
			EventFlow = EVENT_STOP$
		end
	Next ReqLoop
	If MissingField then
		// Required fields are blank. Display error message.
		Swap @FM with "|" in MissingField
		MsgBody = "|Unable to save the record due to missing required information:||":MissingField:"|"
		Set_Property("SYSTEM", "FOCUS", CurFocus)
		If Get_Property(WinID:TabControl, "HANDLE") then
			// A tab control that manages pages for this window exists. Reset so the appropriate tab has focus.
			Page = Get_Property(WinID, "VPOSITION")<1>
			Set_Property(WinID:TabControl, "OLE.SelectedTab", Page)
		end
		MsgTitle = "Missing Required Fields"
		MsgStruct			= ""
		MsgStruct<MICON$>	= "H"
		Msg(WinID, MsgStruct, "OK", "", MsgTitle:@FM:MsgBody)
	end
return
