Algorithms - pseudocode

This pseudocode provides a programmatic explanation of the requirements described in Writing a client program to evaluate ItemData elements.

IsItemComplete(item)
{ 
if (item only has calculated controls) 
return true;
foreach(childControl of item)
{bool completeControlFound = false;
if (IsControlIncomplete(childControl, completeControlFound))
return false; }return completeControlFound;
}
IsControlIncomplete(control, completeControlFound)
{
if (control is a calculated control) 
return false; 
if (control is a control type that doesn’t have children (text, pulldown, etc.))
{  
if (control has value){ completeControlFound = true;} 
return false;}
if (control is a radio group)
{
if (it doesn’t have a selection)
return false;
selectedOption = the radio group’s selected option;
if (selectedOption doesn’t have any child controls OR
it has exactly one child that is a calculated control) 
{ 
completeControlFound = true;
return false;
}
foreach (child of the selected option)
{
if (IsChildControlIncomplete(child))
return true;
}
completeControlFound = true;
return false;
}
if (control is a checkbox option)
{
if (it isn't checked)
return false;
if (it has exactly one child that is a calculated control)
{
completeControlFound = true;
return false;
}
foreach (child of the checkbox option)
{
if (IsChildControlIncomplete(child)) 
return true;
}
completeControlFound = true;
return false;
}
}
IsChildControlIncomplete(control)
{
if (control is a calculated control)
return false;
if (control is a control type that doesn't have children (text, pulldown, etc.))
Does the control have a value? 
if (yes)
return false;
if (no)
return true; 
if (control is a radio group)
{
if (it doesn’t have a selection)
return true;
selectedOption = the radio group’s selected option;
if (selectedOption doesn’t have any child controls OR
it has exactly one child that is a calculated control) 
return false;
foreach (child of the selected option)
{
if (IsChildControlIncomplete(child))
return true;
}
return false;
}
if (control is a checkbox option)
{
if (it isn't checked)
return true;
if (it has exactly one child that is a calculated control)
return false;
foreach (child of the checkbox option)
{
if (IsChildControlIncomplete(child))
return true;}
return false;
}
}