From: <ice...@us...> - 2012-06-24 05:49:46
|
Revision: 5451 http://web-erp.svn.sourceforge.net/web-erp/?rev=5451&view=rev Author: icedlava Date: 2012-06-24 05:49:39 +0000 (Sun, 24 Jun 2012) Log Message: ----------- Add ViewTopic and BookMark vars to some functions to take advantage of new Manual contextual help. Must be added before header.inc include. Ongoing work. Modified Paths: -------------- trunk/InventoryPlanning.php trunk/SelectProduct.php trunk/StockAdjustments.php trunk/StockMovements.php trunk/StockTransfers.php trunk/Stocks.php trunk/doc/Change.log Modified: trunk/InventoryPlanning.php =================================================================== --- trunk/InventoryPlanning.php 2012-06-24 05:36:51 UTC (rev 5450) +++ trunk/InventoryPlanning.php 2012-06-24 05:49:39 UTC (rev 5451) @@ -3,6 +3,9 @@ /* $Id$ */ include('includes/session.inc'); +/* webERP manual links before header.inc */ +$ViewTopic= "Inventory"; +$BookMark = "PlanningReport"; if (isset($_POST['PrintPDF']) and isset($_POST['FromCriteria']) @@ -409,7 +412,7 @@ <tr> <td>' . _('For Inventory in Location') . ':</td> <td><select name="Location">'; - + $sql = "SELECT loccode, locationname FROM locations"; $LocnResult=DB_query($sql,$db); Modified: trunk/SelectProduct.php =================================================================== --- trunk/SelectProduct.php 2012-06-24 05:36:51 UTC (rev 5450) +++ trunk/SelectProduct.php 2012-06-24 05:49:39 UTC (rev 5451) @@ -6,6 +6,8 @@ include ('includes/session.inc'); $title = _('Search Inventory Items'); +/* webERP manual links before header.inc */ +$ViewTopic= "Inventory"; include ('includes/header.inc'); if (isset($_GET['StockID'])) { Modified: trunk/StockAdjustments.php =================================================================== --- trunk/StockAdjustments.php 2012-06-24 05:36:51 UTC (rev 5450) +++ trunk/StockAdjustments.php 2012-06-24 05:49:39 UTC (rev 5451) @@ -6,7 +6,9 @@ include('includes/DefineSerialItems.php'); include('includes/session.inc'); $title = _('Stock Adjustments'); - +/* webERP manual links before header.inc */ +$ViewTopic= "Inventory"; +$BookMark = "InventoryAdjustments"; include('includes/header.inc'); include('includes/SQL_CommonFunctions.inc'); @@ -38,16 +40,16 @@ } } if ($NewAdjustment==true){ - + $_SESSION['Adjustment' . $identifier]->StockID = trim(mb_strtoupper($StockID)); - $result = DB_query("SELECT description, - controlled, - serialised, + $result = DB_query("SELECT description, + controlled, + serialised, decimalplaces, perishable, materialcost+labourcost+overheadcost AS totalcost, units - FROM stockmaster + FROM stockmaster WHERE stockid='" . $_SESSION['Adjustment' . $identifier]->StockID . "'",$db); $myrow = DB_fetch_array($result); $_SESSION['Adjustment' . $identifier]->ItemDescription = $myrow['description']; @@ -64,7 +66,7 @@ $DecimalPlaces = $myrow['decimalplaces']; DB_free_result($result); - + } //end if it's a new adjustment if (isset($_POST['tag'])){ $_SESSION['Adjustment' . $identifier]->tag = $_POST['tag']; @@ -93,14 +95,14 @@ echo '<p class="page_title_text"><img src="'.$rootpath.'/css/'.$theme.'/images/magnifier.png" title="' . _('Dispatch') . '" alt="" />' . ' ' . _('Select Item to Adjust') . '</p>'; if (mb_strlen($_POST['StockText'])>0) { - $sql="SELECT stockid, - description - FROM stockmaster + $sql="SELECT stockid, + description + FROM stockmaster WHERE description " . LIKE . " '%" . $_POST['StockText'] ."%'"; } else { - $sql="SELECT stockid, - description - FROM stockmaster + $sql="SELECT stockid, + description + FROM stockmaster WHERE stockid " . LIKE . " '%" . $_POST['StockCode'] ."%'"; } $ErrMsg=_('The stock information cannot be retrieved because'); @@ -332,7 +334,7 @@ $DbgMsg = _('The following SQL to insert the GL entries was used'); $Result = DB_query($SQL,$db, $ErrMsg, $DbgMsg,true); } - + EnsureGLEntriesBalance(17, $AdjustmentNumber,$db); $Result = DB_Txn_Commit($db); @@ -345,7 +347,7 @@ $EmailSubject = _('Stock adjustment for'). ' ' . $_SESSION['Adjustment' . $identifier]->StockID; mail($_SESSION['InventoryManagerEmail'],$EmailSubject,$ConfirmationText); } - + unset ($_SESSION['Adjustment' . $identifier]); } /* end if there was no input error */ @@ -365,14 +367,14 @@ $StockID = $_SESSION['Adjustment' . $identifier]->StockID; $Controlled = $_SESSION['Adjustment' . $identifier]->Controlled; $Quantity = $_SESSION['Adjustment' . $identifier]->Quantity; - $sql="SELECT materialcost, - labourcost, - overheadcost, - units, - decimalplaces - FROM stockmaster + $sql="SELECT materialcost, + labourcost, + overheadcost, + units, + decimalplaces + FROM stockmaster WHERE stockid='".$StockID."'"; - + $result=DB_query($sql, $db); $myrow=DB_fetch_array($result); $_SESSION['Adjustment' . $identifier]->PartUnit=$myrow['units']; Modified: trunk/StockMovements.php =================================================================== --- trunk/StockMovements.php 2012-06-24 05:36:51 UTC (rev 5450) +++ trunk/StockMovements.php 2012-06-24 05:49:39 UTC (rev 5451) @@ -4,6 +4,9 @@ include('includes/session.inc'); $title = _('Stock Movements'); +/* webERP manual links before header.inc */ +$ViewTopic= "Inventory"; +$BookMark = "InventoryMovement"; include('includes/header.inc'); if (isset($_GET['StockID'])){ @@ -101,7 +104,7 @@ <th>' . _('Discount') . '</th> <th>' . _('New Qty') . '</th> </tr>'; - + echo $tableheader; $j = 1; Modified: trunk/StockTransfers.php =================================================================== --- trunk/StockTransfers.php 2012-06-24 05:36:51 UTC (rev 5450) +++ trunk/StockTransfers.php 2012-06-24 05:49:39 UTC (rev 5451) @@ -7,7 +7,9 @@ include('includes/session.inc'); $title = _('Stock Transfers'); - +/* webERP manual links before header.inc */ +$ViewTopic= "Inventory"; +$BookMark = "LocationTransfers"; include('includes/header.inc'); include('includes/SQL_CommonFunctions.inc'); @@ -29,14 +31,14 @@ </p>'; if (mb_strlen($_POST['StockText'])>0) { - $sql="SELECT stockid, - description - FROM stockmaster + $sql="SELECT stockid, + description + FROM stockmaster WHERE description " . LIKE . " '%" . $_POST['StockText'] . "%'"; } else { - $sql="SELECT stockid, - description - FROM stockmaster + $sql="SELECT stockid, + description + FROM stockmaster WHERE stockid " . LIKE . " '%" . $_POST['StockCode']."%'"; } $ErrMsg=_('The stock information cannot be retrieved because'); @@ -54,7 +56,7 @@ <td><a href="' . $rootpath . '/StockTransfers.php?StockID='.$myrow['stockid'].'&Description='.$myrow['description'].'&NewTransfer=Yes&Quantity='. filter_number_format($_POST['Quantity']).'&From='.$_POST['StockLocationFrom'].'&To='.$_POST['StockLocationTo'].'">' ._('Transfer').'</a></td> </tr>'; - + } echo '</table>'; include('includes/footer.inc'); @@ -110,7 +112,7 @@ FROM stockmaster WHERE stockid='" . trim(mb_strtoupper($_POST['StockID'])) . "'", $db); - + if (DB_num_rows($result) == 0){ prnMsg( _('Unable to locate Stock Code').' '.mb_strtoupper($_POST['StockID']), 'error' ); } elseif (DB_num_rows($result)>0){ @@ -123,8 +125,8 @@ $myrow['serialised'], $myrow['perishable'], $myrow['decimalplaces']); - + $_SESSION['Transfer']->TransferItem[0]->StandardCost = $myrow['standardcost']; if ($myrow['mbflag']=='D' OR $myrow['mbflag']=='A' OR $myrow['mbflag']=='K'){ @@ -138,17 +140,17 @@ } } -if (isset($_POST['Quantity']) - AND isset($_SESSION['Transfer']->TransferItem[0]->Controlled) +if (isset($_POST['Quantity']) + AND isset($_SESSION['Transfer']->TransferItem[0]->Controlled) AND $_SESSION['Transfer']->TransferItem[0]->Controlled==0){ - + $_SESSION['Transfer']->TransferItem[0]->Quantity = filter_number_format($_POST['Quantity']); } -if ( isset($_POST['StockLocationFrom']) +if ( isset($_POST['StockLocationFrom']) AND $_POST['StockLocationFrom']!= $_SESSION['Transfer']->StockLocationFrom ){ - + $_SESSION['Transfer']->StockLocationFrom = $_POST['StockLocationFrom']; $_SESSION['Transfer']->StockLocationTo = $_POST['StockLocationTo']; $_SESSION['Transfer']->TransferItem[0]->Quantity=filter_number_format($_POST['Quantity']); @@ -208,7 +210,7 @@ // There must actually be some error this should never happen $QtyOnHandPrior = 0; } - if ($_SESSION['ProhibitNegativeStock']==1 + if ($_SESSION['ProhibitNegativeStock']==1 AND $QtyOnHandPrior<$_SESSION['Transfer']->TransferItem[0]->Quantity) { prnMsg( _('There is insufficient stock to make this transfer and webERP is setup to prevent negative stock'), 'warn'); include('includes/footer.inc'); @@ -399,7 +401,7 @@ '" . $Item->BundleRef . "', '" . FormatDateForSQL($Item->ExpiryDate) . "', '" . $Item->BundleQty . "')"; - + $ErrMsg = _('CRITICAL ERROR') . '! ' . _('NOTE DOWN THIS ERROR AND SEEK ASSISTANCE') . ': ' . _('The serial stock item record could not be added because'); $DbgMsg = _('The following SQL to insert the serial stock item record was used:'); $Result = DB_query($SQL, $db, $ErrMsg, $DbgMsg, true); @@ -482,9 +484,9 @@ } echo '</td><td><input type="submit" name="CheckCode" value="'._('Check Part').'" /></td></tr>'; -if (isset($_SESSION['Transfer']->TransferItem[0]->ItemDescription) +if (isset($_SESSION['Transfer']->TransferItem[0]->ItemDescription) AND mb_strlen($_SESSION['Transfer']->TransferItem[0]->ItemDescription)>1){ - + echo '<tr> <td colspan="3"><font color="blue" size="3">' . $_SESSION['Transfer']->TransferItem[0]->ItemDescription . ' ('._('In Units of').' ' . $_SESSION['Transfer']->TransferItem[0]->PartUnit . ' )</font></td> </tr>'; @@ -540,9 +542,9 @@ echo '<tr> <td>'._('Transfer Quantity').':</td>'; -if (isset($_SESSION['Transfer']->TransferItem[0]->Controlled) +if (isset($_SESSION['Transfer']->TransferItem[0]->Controlled) AND $_SESSION['Transfer']->TransferItem[0]->Controlled==1){ - + echo '<td class="number"><input type="hidden" name="Quantity" value="' . locale_number_format($_SESSION['Transfer']->TransferItem[0]->Quantity) . '" /><a href="' . $rootpath .'/StockTransferControlled.php?StockLocationFrom='.$_SESSION['Transfer']->StockLocationFrom.'">' . $_SESSION['Transfer']->TransferItem[0]->Quantity . '</a></td></tr>'; } elseif (isset($_SESSION['Transfer']->TransferItem[0]->Controlled)){ echo '<td><input type="text" class="number" name="Quantity" size="12" maxlength="12" value="' . locale_number_format($_SESSION['Transfer']->TransferItem[0]->Quantity) . '" /></td></tr>'; Modified: trunk/Stocks.php =================================================================== --- trunk/Stocks.php 2012-06-24 05:36:51 UTC (rev 5450) +++ trunk/Stocks.php 2012-06-24 05:49:39 UTC (rev 5451) @@ -4,6 +4,10 @@ include('includes/session.inc'); $title = _('Item Maintenance'); +$title = _('Item Maintenance'); +/* webERP manual links before header.inc */ +$ViewTopic= "Inventory"; +$BookMark = "InventoryAddingItems"; include('includes/header.inc'); include('includes/SQL_CommonFunctions.inc'); @@ -18,11 +22,11 @@ } if (isset($StockID) and !isset($_POST['UpdateCategories'])) { - $sql = "SELECT COUNT(stockid) - FROM stockmaster - WHERE stockid='".$StockID."' + $sql = "SELECT COUNT(stockid) + FROM stockmaster + WHERE stockid='".$StockID."' GROUP BY stockid"; - + $result = DB_query($sql,$db); $myrow = DB_fetch_row($result); if ($myrow[0]==0) { @@ -181,12 +185,12 @@ $Errors[$i] = 'NextSerialNo'; $i++; } - if (($_POST['MBFlag']=='A' - OR $_POST['MBFlag']=='K' - OR $_POST['MBFlag']=='D' - OR $_POST['MBFlag']=='G') + if (($_POST['MBFlag']=='A' + OR $_POST['MBFlag']=='K' + OR $_POST['MBFlag']=='D' + OR $_POST['MBFlag']=='G') AND $_POST['Controlled']==1){ - + $InputError = 1; prnMsg(_('Assembly/Kitset/Phantom/Service/Labour items cannot also be controlled items') . '. ' . _('Assemblies/Dummies/Phantom and Kitsets are not physical items and batch/serial control is therefore not appropriate'),'error'); $Errors[$i] = 'Controlled'; @@ -226,8 +230,8 @@ materialcost+labourcost+overheadcost AS itemcost, stockcategory.stockact, stockcategory.wipact - FROM stockmaster - INNER JOIN stockcategory + FROM stockmaster + INNER JOIN stockcategory ON stockmaster.categoryid=stockcategory.categoryid WHERE stockid = '".$StockID."'"; $MBFlagResult = DB_query($sql,$db); @@ -238,26 +242,26 @@ $UnitCost = $myrow[3]; $OldStockAccount = $myrow[4]; $OldWIPAccount = $myrow[5]; - - $sql = "SELECT SUM(locstock.quantity) - FROM locstock - WHERE stockid='".$StockID."' + + $sql = "SELECT SUM(locstock.quantity) + FROM locstock + WHERE stockid='".$StockID."' GROUP BY stockid"; $result = DB_query($sql,$db); $StockQtyRow = DB_fetch_row($result); /*Now check the GL account of the new category to see if it is different to the old stock gl account */ - + $result = DB_query("SELECT stockact, wipact - FROM stockcategory + FROM stockcategory WHERE categoryid='" . $_POST['CategoryID'] . "'", $db); $NewStockActRow = DB_fetch_array($result); $NewStockAct = $NewStockActRow['stockact']; $NewWIPAct = $NewStockActRow['wipact']; - + if ($OldMBFlag != $_POST['MBFlag']){ if (($OldMBFlag == 'M' OR $OldMBFlag=='B') AND ($_POST['MBFlag']=='A' OR $_POST['MBFlag']=='K' OR $_POST['MBFlag']=='D' OR $_POST['MBFlag']=='G')){ /*then need to check that there is no stock holding first */ /* stock holding OK for phantom (ghost) items */ @@ -303,9 +307,9 @@ /*now check that if it was a Manufactured, Kitset, Phantom or Assembly and is being changed to a purchased or dummy - that no BOM exists */ if (($OldMBFlag=='M' OR $OldMBFlag =='K' OR $OldMBFlag=='A' OR $OldMBFlag=='G') AND ($_POST['MBFlag']=='B' OR $_POST['MBFlag']=='D')) { - $sql = "SELECT COUNT(*) - FROM bom - WHERE parent = '".$StockID."' + $sql = "SELECT COUNT(*) + FROM bom + WHERE parent = '".$StockID."' GROUP BY parent"; $result = DB_query($sql,$db); $ChkBOM = DB_fetch_row($result); @@ -317,9 +321,9 @@ /*now check that if it was Manufac, Phantom or Purchased and is being changed to assembly or kitset, it is not a component on an existing BOM */ if (($OldMBFlag=='M' OR $OldMBFlag =='B' OR $OldMBFlag=='D' OR $OldMBFlag=='G') AND ($_POST['MBFlag']=='A' OR $_POST['MBFlag']=='K')) { - $sql = "SELECT COUNT(*) - FROM bom - WHERE component = '".$StockID."' + $sql = "SELECT COUNT(*) + FROM bom + WHERE component = '".$StockID."' GROUP BY component"; $result = DB_query($sql,$db); $ChkBOM = DB_fetch_row($result); @@ -341,7 +345,7 @@ prnMsg( _('You can not change a Serialised Item to Non-Serialised (or vice-versa) when there is a quantity on hand for the item') , 'error'); } /* Do some check for property input */ - + for ($i=0;$i<$_POST['PropertyCounter'];$i++){ if ($_POST['PropNumeric' .$i]==1){ if ( filter_number_format($_POST['PropValue' . $i]) < $_POST['PropMin' . $i] OR filter_number_format($_POST['PropValue' . $i]) > $_POST['PropMax' . $i]){ @@ -354,9 +358,9 @@ if ($InputError == 0){ - + DB_Txn_Begin($db); - + $sql = "UPDATE stockmaster SET longdescription='" . $_POST['LongDescription'] . "', description='" . $_POST['Description'] . "', @@ -411,7 +415,7 @@ '" . $_POST['PropValue' . $i] . "')", $db,$ErrMsg,$DbgMsg,true); } //end of loop around properties defined for the category - + if ($OldStockAccount != $NewStockAct AND $_SESSION['CompanyRecord']['gllink_stock']==1) { /*Then we need to make a journal to transfer the cost to the new stock account */ $JournalNo = GetNextTransNo(0,$db); //enter as a journal @@ -447,20 +451,20 @@ '" . $StockID . ' ' . _('Change stock category') . "', '" . (-$UnitCost* $StockQtyRow[0]) . "')"; $result = DB_query($SQL,$db, $ErrMsg, $DbgMsg,true); - + } /* end if the stock category changed and forced a change in stock cost account */ if ($OldWIPAccount != $NewWIPAct AND $_SESSION['CompanyRecord']['gllink_stock']==1) { /*Then we need to make a journal to transfer the cost of WIP to the new WIP account */ /*First get the total cost of WIP for this category */ - + $WOCostsResult = DB_query("SELECT workorders.costissued, SUM(woitems.qtyreqd * woitems.stdcost) AS costrecd FROM woitems INNER JOIN workorders ON woitems.wo = workorders.wo INNER JOIN stockmaster ON woitems.stockid=stockmaster.stockid - WHERE stockmaster.stockid='". $StockID . "' - AND workorders.closed=0 + WHERE stockmaster.stockid='". $StockID . "' + AND workorders.closed=0 GROUP BY workorders.costissued", $db, _('Error retrieving value of finished goods received and cost issued against work orders for this item')); @@ -468,7 +472,7 @@ while ($WIPRow=DB_fetch_array($WOCostsResult)){ $WIPValue += ($WIPRow['costissued']-$WIPRow['costrecd']); } - if ($WIPValue !=0){ + if ($WIPValue !=0){ $JournalNo = GetNextTransNo(0,$db); //enter as a journal $SQL = "INSERT INTO gltrans (type, typeno, @@ -507,12 +511,12 @@ DB_Txn_Commit($db); prnMsg( _('Stock Item') . ' ' . $StockID . ' ' . _('has been updated'), 'success'); echo '<br />'; - } + } } else { //it is a NEW part //but lets be really sure here - $result = DB_query("SELECT stockid - FROM stockmaster + $result = DB_query("SELECT stockid + FROM stockmaster WHERE stockid='" . $StockID ."'",$db); if (DB_num_rows($result)==1){ prnMsg(_('The stock code entered is actually already in the database - duplicate stock codes are prohibited by the system. Try choosing an alternative stock code'),'error'); @@ -563,7 +567,7 @@ if (DB_error_no($db) ==0) { //now insert any item properties for ($i=0;$i<$_POST['PropertyCounter'];$i++){ - + if ($_POST['PropType' . $i] ==2){ if ($_POST['PropValue' . $i]=='on'){ $_POST['PropValue' . $i]=1; @@ -571,7 +575,7 @@ $_POST['PropValue' . $i]=0; } } - + if ($_POST['PropNumeric' .$i]==1){ $_POST['PropValue' . $i]=filter_number_format($_POST['PropValue' . $i]); } else { @@ -600,9 +604,9 @@ $InsResult = DB_query($sql,$db,$ErrMsg,$DbgMsg); if (DB_error_no($db) ==0) { - prnMsg( _('New Item') .' ' . '<a href="SelectProduct.php?StockID=' . $StockID . '">' . $StockID . '</a> '. _('has been added to the database') . + prnMsg( _('New Item') .' ' . '<a href="SelectProduct.php?StockID=' . $StockID . '">' . $StockID . '</a> '. _('has been added to the database') . '<br />' . _('NB: The item cost and pricing must also be setup') . - '<br />' . '<a target="_blank" href="StockCostUpdate.php?StockID=' . $StockID . '">' . _('Enter Item Cost') . '</a> + '<br />' . '<a target="_blank" href="StockCostUpdate.php?StockID=' . $StockID . '">' . _('Enter Item Cost') . '</a> <br />' . '<a target="_blank" href="Prices.php?Item=' . $StockID . '">' . _('Enter Item Prices') . '</a> ','success'); echo '<br />'; unset($_POST['Description']); @@ -630,8 +634,8 @@ }//THE INSERT OF THE NEW CODE WORKED SO BANG IN THE STOCK LOCATION RECORDS TOO }//END CHECK FOR ALREADY EXISTING ITEM OF THE SAME CODE } - + } else { echo '<br />'. "\n"; prnMsg( _('Validation failed, no updates or deletes took place'), 'error'); @@ -746,7 +750,7 @@ unset($_POST['DecimalPlaces']); unset($_SESSION['SelectedStockItem']); unset($StockID); - + $New=1; } //end if Delete Part } @@ -798,7 +802,7 @@ shrinkfactor FROM stockmaster WHERE stockid = '".$StockID."'"; - + $result = DB_query($sql, $db); $myrow = DB_fetch_array($result); @@ -820,7 +824,7 @@ $_POST['DecimalPlaces'] = $myrow['decimalplaces']; $_POST['NextSerialNo'] = $myrow['nextserialno']; $_POST['Pansize'] = $myrow['pansize']; - $_POST['ShrinkFactor'] = $myrow['shrinkfactor']; + $_POST['ShrinkFactor'] = $myrow['shrinkfactor']; echo '<tr><td>' . _('Item Code') . ':</td> @@ -1010,7 +1014,7 @@ echo '<tr> <td>' . _('Current or Obsolete') . ':</td> <td><select name="Discontinued">'; - + if ($_POST['Discontinued']==0){ echo '<option selected="selected" value="0">' . _('Current') . '</option>'; } else { @@ -1182,7 +1186,7 @@ echo '<input type="hidden" name="PropID' . $PropertyCounter . '" value="' .$PropertyRow['stkcatpropid'] .'" />'; echo '<input type="hidden" name="PropNumeric' . $PropertyCounter . '" value="' .$PropertyRow['numericvalue'] .'" />'; echo $PropertyRow['label'] . '</td> - + <td>'; switch ($PropertyRow['controltype']) { case 0; //textbox @@ -1219,7 +1223,7 @@ echo '<input type="hidden" name="PropType' . $PropertyCounter .'" value="' . $PropertyRow['controltype'] . '" />'; echo '</td></tr>'; $PropertyCounter++; - + } //end loop round properties for the item category unset($StockID); echo '</table>'; Modified: trunk/doc/Change.log =================================================================== --- trunk/doc/Change.log 2012-06-24 05:36:51 UTC (rev 5450) +++ trunk/doc/Change.log 2012-06-24 05:49:39 UTC (rev 5451) @@ -1,5 +1,5 @@ webERP Change Log - +24/06/2012: Icedlava: Add ViewTopic and BookMark vars to some functions to take advantage of new Manual contextual help. Must be added before header.inc include. 24/06/2012: Icedlava: Adjust header.inc, ManualContents.php, ManualHeader.html to take Viewtopic and Bookmark parameters in displaying manual. Add ManualOutline.php file containing manual TOC, add CSS and rework all manual docs. Still to add $Viewtopic and $Bookmark to functions (eg see Stocks.php) 24/6/2012 Release 4.08.1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |