| 
<?php@set_time_limit(60*60); // 1 hour.
 use eftec\DocumentStoreOne\DocumentStoreOne;
 
 /**
 * It map-reduce invoices according the products.
 * @author Jorge Castro Castillo [email protected]
 * @license LGPLv3
 */
 
 include "../lib/DocumentStoreOne.php";
 include "modelinvoices/Models.php";
 
 $t1=microtime(true);
 
 $igbinary=function_exists('igbinary_serialize');
 
 try {
 $flatcon = new DocumentStoreOne(dirname(__FILE__) . "/base", 'invoices');
 } catch (Exception $e) {
 die("Unable to create document store");
 }
 $flatcon->collection("invoicemap");
 $products=$flatcon->get("invoicexproduct");
 if (!$products) {
 die("you must run example_mapreduce_invoice.php before");
 }
 
 if ($igbinary) {
 $products=igbinary_unserialize($products);
 } else {
 $products=json_decode($products,true);
 }
 
 
 $flatcon->collection("invoices");
 $numItems=0;
 $totalInvoice=0;
 $productName='Coca-Cola Cherry';
 if (!isset($products[$productName])) die("no invoices for $productName");
 $listInvoices=$products[$productName];
 
 
 echo '<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">';
 echo "<body class='container-fluid'>";
 echo "<h1>Invoices of $productName. It uses mapreduces</h1>";
 echo "<table class='table table-striped table-bordered'>";
 echo "<thead class='thead-dark'><tr><th>Invoice #</th><th>Date</th><th>Detail Num</th></tr></thead>";
 foreach($listInvoices as $i) {
 if ($igbinary) {
 $inv=igbinary_unserialize($flatcon->get($i));
 } else {
 $invTmp = json_decode($flatcon->get($i)); // $invTmp is stdclass
 $inv = new Invoice();
 DocumentStoreOne::fixCast($inv, $invTmp); // $inv is a Invoice class. However, $inv->details is a stdClass[]
 }
 
 echo "<tr><td>{$inv->idInvoice}</td><td>{$inv->date}</td><td><table class='table table-bordered'>";
 echo "<thead class='thead-dark'><tr><th>Product #</th><th>Price</th><th>Amount</th></tr></thead>";
 foreach($inv->details as $d) {
 if ($productName!=$d->product->name) {
 echo "<tr><td>" . $d->product->name . "</td><td>" . $d->unitPrice . "</td><td>" . $d->amount . "</td></tr>";
 } else {
 echo "<tr class='bg-primary'><td>" . $d->product->name . "</td><td>" . $d->unitPrice . "</td><td>" . $d->amount . "</td></tr>";
 }
 }
 echo "</table></td></tr>";
 }
 echo "</table>";
 $t2=microtime(true);
 
 
 
 echo "Mapreduce microseconds :".($t2-$t1)." seconds.<br>";
 echo "</body>";
 
 
 |