.
***********************************************************************/
$page_security = 'SA_BOM';
$path_to_root = "../..";
include_once($path_to_root . "/includes/session.inc");
page(_("Bill Of Materials"));
include_once($path_to_root . "/includes/date_functions.inc");
include_once($path_to_root . "/includes/ui.inc");
include_once($path_to_root . "/includes/data_checks.inc");
include_once($path_to_root . "/includes/manufacturing.inc");
check_db_has_bom_stock_items(_("There are no manufactured or kit items defined in the system."));
check_db_has_workcentres(_("There are no work centres defined in the system. BOMs require at least one work centre be defined."));
simple_page_mode(true);
$selected_component = $selected_id;
//--------------------------------------------------------------------------------------------------
//if (isset($_GET["NewItem"]))
//{
// $_POST['stock_id'] = $_GET["NewItem"];
//}
if (isset($_GET['stock_id']))
{
$_POST['stock_id'] = $_GET['stock_id'];
$selected_parent = $_GET['stock_id'];
}
/* selected_parent could come from a post or a get */
/*if (isset($_GET["selected_parent"]))
{
$selected_parent = $_GET["selected_parent"];
}
else if (isset($_POST["selected_parent"]))
{
$selected_parent = $_POST["selected_parent"];
}
*/
/* selected_component could also come from a post or a get */
/*if (isset($_GET["selected_component"]))
{
$selected_component = $_GET["selected_component"];
}
else
{
$selected_component = get_post("selected_component", -1);
}
*/
//--------------------------------------------------------------------------------------------------
function check_for_recursive_bom($ultimate_parent, $component_to_check)
{
/* returns true ie 1 if the bom contains the parent part as a component
ie the bom is recursive otherwise false ie 0 */
$sql = "SELECT component FROM ".TB_PREF."bom WHERE parent=".db_escape($component_to_check);
$result = db_query($sql,"could not check recursive bom");
if ($result != 0)
{
while ($myrow = db_fetch_row($result))
{
if ($myrow[0] == $ultimate_parent)
{
return 1;
}
if (check_for_recursive_bom($ultimate_parent, $myrow[0]))
{
return 1;
}
} //(while loop)
} //end if $result is true
return 0;
} //end of function check_for_recursive_bom
//--------------------------------------------------------------------------------------------------
function display_bom_items($selected_parent)
{
global $table_style;
$result = get_bom($selected_parent);
div_start('bom');
start_table("$table_style width=60%");
$th = array(_("Code"), _("Description"), _("Location"),
_("Work Centre"), _("Quantity"), _("Units"),'','');
table_header($th);
$k = 0;
while ($myrow = db_fetch($result))
{
alt_table_row_color($k);
label_cell($myrow["component"]);
label_cell($myrow["description"]);
label_cell($myrow["location_name"]);
label_cell($myrow["WorkCentreDescription"]);
qty_cell($myrow["quantity"], false, get_qty_dec($myrow["component"]));
label_cell($myrow["units"]);
edit_button_cell("Edit".$myrow['id'], _("Edit"));
delete_button_cell("Delete".$myrow['id'], _("Delete"));
end_row();
} //END WHILE LIST LOOP
end_table();
div_end();
}
//--------------------------------------------------------------------------------------------------
function on_submit($selected_parent, $selected_component=-1)
{
if (!check_num('quantity', 0))
{
display_error(_("The quantity entered must be numeric and greater than zero."));
set_focus('quantity');
return;
}
if ($selected_component != -1)
{
$sql = "UPDATE ".TB_PREF."bom SET workcentre_added=".db_escape($_POST['workcentre_added'])
. ",loc_code=".db_escape($_POST['loc_code']) . ",
quantity= " . input_num('quantity') . "
WHERE parent=".db_escape($selected_parent) . "
AND id=".db_escape($selected_component);
check_db_error("Could not update this bom component", $sql);
db_query($sql,"could not update bom");
display_notification(_('Selected component has been updated'));
$Mode = 'RESET';
}
else
{
/*Selected component is null cos no item selected on first time round
so must be adding a record must be Submitting new entries in the new
component form */
//need to check not recursive bom component of itself!
if (!check_for_recursive_bom($selected_parent, $_POST['component']))
{
/*Now check to see that the component is not already on the bom */
$sql = "SELECT component FROM ".TB_PREF."bom
WHERE parent=".db_escape($selected_parent)."
AND component=".db_escape($_POST['component']) . "
AND workcentre_added=".db_escape($_POST['workcentre_added']) . "
AND loc_code=".db_escape($_POST['loc_code']);
$result = db_query($sql,"check failed");
if (db_num_rows($result) == 0)
{
$sql = "INSERT INTO ".TB_PREF."bom (parent, component, workcentre_added, loc_code, quantity)
VALUES (".db_escape($selected_parent).", ".db_escape($_POST['component']) . ","
.db_escape($_POST['workcentre_added']) . ", ".db_escape($_POST['loc_code']) . ", "
. input_num('quantity') . ")";
db_query($sql,"check failed");
display_notification(_("A new component part has been added to the bill of material for this item."));
$Mode = 'RESET';
}
else
{
/*The component must already be on the bom */
display_error(_("The selected component is already on this bom. You can modify it's quantity but it cannot appear more than once on the same bom."));
}
} //end of if its not a recursive bom
else
{
display_error(_("The selected component is a parent of the current item. Recursive BOMs are not allowed."));
}
}
}
//--------------------------------------------------------------------------------------------------
if ($Mode == 'Delete')
{
$sql = "DELETE FROM ".TB_PREF."bom WHERE id=".db_escape($selected_id);
db_query($sql,"Could not delete this bom components");
display_notification(_("The component item has been deleted from this bom"));
$Mode = 'RESET';
}
if ($Mode == 'RESET')
{
$selected_id = -1;
unset($_POST['quantity']);
}
//--------------------------------------------------------------------------------------------------
start_form();
start_form(false, true);
start_table("class='tablestyle_noborder'");
stock_manufactured_items_list_row(_("Select a manufacturable item:"), 'stock_id', null, false, true);
if (list_updated('stock_id'))
$Ajax->activate('_page_body');
end_table();
br();
end_form();
//--------------------------------------------------------------------------------------------------
if (get_post('stock_id') != '')
{ //Parent Item selected so display bom or edit component
$selected_parent = $_POST['stock_id'];
if ($Mode=='ADD_ITEM' || $Mode=='UPDATE_ITEM')
on_submit($selected_parent, $selected_id);
//--------------------------------------------------------------------------------------
start_form();
display_bom_items($selected_parent);
//--------------------------------------------------------------------------------------
echo '
';
start_table($table_style2);
if ($selected_id != -1)
{
if ($Mode == 'Edit') {
//editing a selected component from the link to the line item
$sql = "SELECT ".TB_PREF."bom.*,".TB_PREF."stock_master.description FROM "
.TB_PREF."bom,".TB_PREF."stock_master
WHERE id=".db_escape($selected_id)."
AND ".TB_PREF."stock_master.stock_id=".TB_PREF."bom.component";
$result = db_query($sql, "could not get bom");
$myrow = db_fetch($result);
$_POST['loc_code'] = $myrow["loc_code"];
$_POST['component'] = $myrow["component"]; // by Tom Moulton
$_POST['workcentre_added'] = $myrow["workcentre_added"];
$_POST['quantity'] = number_format2($myrow["quantity"], get_qty_dec($myrow["component"]));
label_row(_("Component:"), $myrow["component"] . " - " . $myrow["description"]);
}
hidden('selected_id', $selected_id);
}
else
{
start_row();
label_cell(_("Component:"));
echo "