

class createProjectFiles { private $createMinParts; private $createMaxParts; private $uniqueCarsCount; private $manufacturers; private $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private $parts = array(); private $vehicles = array(); private $vehicleNumbers = array(); private $uniquePartNumbers = array(); private $uniqueCars = array(); private $partTransactions;
public function __construct()
{
$this->createMinParts = 500;
$this->createMaxParts = 5000;
$this->uniqueCarsCount = 50;
$this->partTransactions = 10;
$this->manufacturers = array
(
'Toyota',
'General Motors',
'Volkswagen',
'Hyundai',
'Ford',
'Nissan',
'Honda',
'PSA',
'Suzuki',
'Renault',
'Fiat',
'Darnier AG',
'Chrysler',
'BMW',
'Mazda',
'Mitsubishi',
'Tata',
'FAW',
'Geely',
'Cherry',
'Fuji'
);
}
public function setMinParts( $min )
{
$this->createMinParts = $min;
}
public function setMaxParts( $max )
{
$this->createMaxParts = $max;
}
public function setMaxCarCount( $count )
{
$this->uniqueCarsCount = $count;
}
public function createPartTransactions( $partTransactions )
{
$this->partTransactions = $partTransactions;
}
public function generateFiles()
{
$this->generateStock();
$this->addSubstitutePartsToStock();
$this->writeStockFile();
$this->writeVehicleFile();
sort( $this->uniquePartNumbers );
sort( $this->uniqueCars );
sort( $this->vehicleNumbers );
sort( $this->vehicles );
$this->writeTransFile();
}
private function generateVehicleNumber()
{
if( $this->uniqueCarsCount > 0 )
{
// create random car
$vehicleNumber = rand( 10000 , 99999 );
$this->uniqueCars[] = $vehicleNumber;
$this->uniqueCarsCount--;
return sprintf( "%05s" , $vehicleNumber );
}
else
{
// pick random existing car
$vehicleNumber = $this->uniqueCars[ rand( 0 , count( $this->uniqueCars ) -1 ) ];
return sprintf( "%05s" , $vehicleNumber );
}
}
private function generatePartNumber()
{
$randomLetter1 = $this->chars[ rand( 0 , 25 ) ];
$randomLetter2 = $this->chars[ rand( 0 , 25 ) ];
$partNumber = rand( 1 , 99999 );
return $randomLetter1 . $randomLetter2 . sprintf( "%05s" , $partNumber );
}
private function getExistingPartNumber()
{
$randError = rand( 0 , 5 );
if( $randError == 3 )
{
//bogus part
return "AA00000";
}
else
{
return $this->uniquePartNumbers[ rand( 0 , count( $this->uniquePartNumbers ) - 1 ) ];
}
}
private function getExistingVehicleNumber()
{
$randError = rand( 0 , 5 );
if( $randError == 3 )
{
//bogus car
return "00000";
}
else
{
$vehicleNumber = $this->uniqueCars[ rand( 0 , count( $this->uniqueCars ) -1 ) ];
return sprintf( "%05s" , $vehicleNumber );
}
}
private function generateStock()
{
for( $i = 0; $i < rand( $this->createMinParts , $this->createMaxParts ); $i++ )
{
$partNumber = $this->generatePartNumber();
$vehicleNumber = $this->generateVehicleNumber();
$description = "--------dont care--------";
$quatity = rand( 0 , 99999 );
$price = rand( 10 , 999999 );
$reorderL = rand( 0 , 999 );
$reorderQ = rand( 0 , 99999 );
$numparts = rand( 0 , 10 );
if( in_array( $partNumber , $this->uniquePartNumbers ) )
{
continue;
}
else
{
$part = array
(
"partNumber" => $partNumber,
"vehicleNumber" => $vehicleNumber,
"description" => $description,
"quatity" => sprintf( "%05s" , $quatity ),
"price" => sprintf( "%06s" , $price ),
"reorderL" => sprintf( "%03s" , $reorderL ),
"reorderQ" => sprintf( "%05s" , $reorderQ ),
"numSubparts" => sprintf( "%02s" , $numparts ),
"part1" => '',
"part2" => '',
"part3" => '',
"part4" => '',
"part5" => '',
"part6" => '',
"part7" => '',
"part8" => '',
"part9" => '',
"part10" => ''
);
$this->parts[] = $part;
if( !in_array( $vehicleNumber , $this->vehicleNumbers ) )
{
$this->vehicleNumbers[] = $vehicleNumber;
$this->vehicles[ $vehicleNumber ] = array( $vehicleNumber , "-- vehicle description --" ,
sprintf( "%20s" , $this->manufacturers[ rand ( 0 , count( $this->manufacturers ) - 1 ) ] ) );
}
$this->uniquePartNumbers[] = $partNumber;
}
}
}
private function addSubstitutePartsToStock()
{
// add substitute parts to the parts from the parts
for( $t=0; $t < count( $this->parts ); $t++ )
{
$thepart = $this->parts[ $t ];
$numofsubparts = $thepart[ 'numSubparts' ];
$ignoreDuplicates = array();
for( $y =0; $y < $numofsubparts; $y++ )
{
$rand = rand( 0 , count( $this->parts ) -1 );
if( in_array( $this->parts[ $rand ][ 'partNumber' ], $ignoreDuplicates ) )
{
$y = $y -1;
continue;
}
else
{
$index = "part" . ( $y + 1 );
$this->parts[ $t ][ $index ] = $this->parts[ $rand ][ 'partNumber' ];
$ignoreDuplicates[] = $this->parts[ $rand ][ "partNumber" ];
}
}
}
}
private function writeStockFile()
{
// bang out the stock master file
$fp = fopen( "INAUTO-SMF.DAT" , 'w' );
if( $fp )
{
foreach( $this->parts as $part )
{
fwrite( $fp , sprintf( "%-128s" , $part[ 'partNumber' ] .
$part[ 'vehicleNumber' ] .
$part[ 'description' ] .
$part[ 'quatity' ] .
$part[ 'price' ] .
$part[ 'reorderL' ] .
$part[ 'reorderQ' ] .
$part[ 'numSubparts' ] .
$part[ 'part1' ] .
$part[ 'part2' ] .
$part[ 'part3' ] .
$part[ 'part4' ] .
$part[ 'part5' ] .
$part[ 'part6' ] .
$part[ 'part7' ] .
$part[ 'part8' ] .
$part[ 'part9' ] .
$part[ 'part10' ] ) . "\r\n" );
}
fclose( $fp );
}
}
private function writeVehicleFile()
{
$fp = fopen( "INAUTO-VEHICLE.DAT" , 'w' );
if( $fp )
{
ksort( $this->vehicles );
foreach( $this->vehicles as $vehicle )
{
fwrite( $fp , sprintf( "%-49s" , $vehicle[ 0 ] . $vehicle[ 1 ] . $vehicle[ 2 ] ) . "\r\n" );
}
fclose( $fp );
}
}
private function writeTransFile()
{
$fp = fopen( "INAUTO-TRANS.DAT" , 'w' );
if( $fp )
{
$partNumberTransactions = $this->createOrderedPartNumberlist();
for( $partTrans = 0; $partTrans < count( $partNumberTransactions ); $partTrans++ )
{
$i = 0;
$records = array();
$p = rand( 1 , 5 );
while( $i < $p )
{
$type = rand( 1 , 5 );
switch( $type )
{
case 1:
$records[ "$type" ] = $this->createInsertion( $partNumberTransactions[ $partTrans ] );
break;
case 2:
$records[ "$type" ] = $this->createDeletion( $partNumberTransactions[ $partTrans ] );
break;
case 3:
$records[ "$type" ] = $this->createQuantity( $partNumberTransactions[ $partTrans ] );
break;
case 4:
$records[ "$type" ] = $this->createAddSub( $partNumberTransactions[ $partTrans ] );
break;
case 5:
$records[ "$type" ] = $this->createRemoveSub( $partNumberTransactions[ $partTrans ] );
break;
}
$i++;
}
ksort( $records );
foreach( $records as $key => $val )
{
fwrite( $fp , sprintf( "%-129s" , $val ) . "\r\n" );
}
}
fclose( $fp );
}
}
private function createOrderedPartNumberlist()
{
$list = array();
for( $i = 0; $i < $this->partTransactions; $i++ )
{
if( $i % 5 > 0 )
{
// choose existing part number
$list[] = $this->uniquePartNumbers[ rand( 0 , count( $this->uniquePartNumbers ) - 1 ) ];
}
else
{
$list[] = $this->generatePartNumber();
}
}
sort( $list );
return $list;
}
private function createDeletion( $part )
{
return "2" . $part;
}
private function createQuantity( $part )
{
return "3" . $part . sprintf( "%05s" , rand( 0 , 99999 ) );
}
private function createAddSub( $part )
{
return "4" . $part . $this->getExistingPartNumber();
}
private function createRemoveSub( $part )
{
return "5" . $part . $this->getExistingPartNumber();
}
private function createInsertion( $part )
{
$partNumber = $part;
$vehicleNumber = $this->generateVehicleNumber();
$description = "--------dont care--------";
$quatity = rand( 0 , 99999 );
$price = rand( 10 , 999999 );
$reorderL = rand( 0 , 999 );
$reorderQ = rand( 0 , 99999 );
$numparts = rand( 0 , 10 );
$part = array
(
"partNumber" => $partNumber,
"vehicleNumber" => $vehicleNumber,
"description" => $description,
"quatity" => sprintf( "%05s" , $quatity ),
"price" => sprintf( "%06s" , $price ),
"reorderL" => sprintf( "%03s" , $reorderL ),
"reorderQ" => sprintf( "%05s" , $reorderQ ),
"numSubparts" => sprintf( "%02s" , $numparts ),
"part1" => '',
"part2" => '',
"part3" => '',
"part4" => '',
"part5" => '',
"part6" => '',
"part7" => '',
"part8" => '',
"part9" => '',
"part10" => ''
);
$ignoreDuplicates = array();
for( $y =0; $y < $numparts; $y++ )
{
$randSubPart = $this->getExistingPartNumber();
if( in_array( $randSubPart , $ignoreDuplicates ) )
{
$y = $y -1;
continue;
}
else
{
$index = "part" . ( $y + 1 );
$part[ $index ] = $randSubPart;
$ignoreDuplicates[] = $randSubPart;
}
}
return "1" .
$part[ 'partNumber' ] .
$part[ 'vehicleNumber' ] .
$part[ 'description' ] .
$part[ 'quatity' ] .
$part[ 'price' ] .
$part[ 'reorderL' ] .
$part[ 'reorderQ' ] .
$part[ 'numSubparts' ] .
$part[ 'part1' ] .
$part[ 'part2' ] .
$part[ 'part3' ] .
$part[ 'part4' ] .
$part[ 'part5' ] .
$part[ 'part6' ] .
$part[ 'part7' ] .
$part[ 'part8' ] .
$part[ 'part9' ] .
$part[ 'part10' ];
}
}
$creator = new createProjectFiles(); $creator->setMinParts( 500 ); // minimum amount of parts $creator->setMaxParts( 5000 ); // maximum amount of parts $creator->setMaxCarCount( 50 ); // after X cars, no new one will be gnerated and the old car numbers reused $creator->createPartTransactions( 120 ); // number of parts, may contain up to 3 transations per part $creator->generateFiles();
If you are facing any programming issue, such as compilation errors or not able to find the code you are looking for.
Ask your questions, our development team will try to give answers to your questions.