| 
<?php@ob_start();
 ob_implicit_flush(true);
 ob_end_flush();
 
 @set_time_limit(60*60); // 1 hour.
 
 use eftec\DocumentStoreOne\DocumentStoreOne;
 
 /**
 * It generates 12k invoices
 * @author Jorge Castro Castillo [email protected]
 * @license LGPLv3
 */
 echo "loading, please wait 1-5 minutes<br>";
 
 @flush();
 @ob_flush();
 
 
 
 include "../lib/DocumentStoreOne.php";
 include "modelinvoices/Models.php";
 $t1=microtime(true);
 try {
 $flatcon = new DocumentStoreOne(dirname(__FILE__) . "/base", 'invoices');
 } catch (Exception $e) {
 die("Unable to create document store ".$e->getMessage());
 }
 // random names
 // 100 invoices x 12 months x 10 years.
 // For a smb, it's around 10 years of invoices (most smb generates less than 100 invoices per month)
 // https://blog.hubspot.com/marketing/smb-invoicing-infographic
 // A larget business moves 33k invoices per month versus a 5k invoices (medium business).
 $TOTALINVOICES=100;
 $TOTALINVOICES10=floor($TOTALINVOICES/10);
 $numInv=$flatcon->getNextSequence("seq",-1,1,1,$TOTALINVOICES); // it reserves a big chunk at the same time.
 
 $igbinary=function_exists('igbinary_serialize');
 
 for($i=1;$i<=$TOTALINVOICES;$i++) {
 
 if ($i % $TOTALINVOICES10 ==0) {
 echo "-";
 @flush();
 @ob_flush();
 }
 
 //$numInv=$flatcon->getNextSequence(); // it slows down the load. For this exercise, it's better to reserve a number of sequences.
 $inv=new Invoice($numInv);
 $idCustomer=rand(0,count($names)-1);
 $inv->customer=new Customer($names[$idCustomer],"Fake Street #".$idCustomer,"555-2444".$idCustomer);
 $numDet=rand(1,20);
 for($e=0;$e<$numDet;$e++) {
 $numProd=rand(0,count($drinks)-1);
 $product=new Product($numProd,$drinks[$numProd]);
 $det=new InvoiceDetail($product,rand(10,200)/10,rand(1,10));
 $inv->details[]=$det;
 }
 if ($igbinary) {
 $doc=igbinary_serialize($inv);
 } else {
 $doc=json_encode($inv);
 }
 $flatcon->insertOrUpdate($numInv,$doc);
 $numInv++;
 }
 
 $t2=microtime(true);
 echo "<br>Generated in ".($t2-$t1)." seconds<br>";
 
 
 
 |