<?php
namespace App\Reports;
use \koolreport\processes\ColumnMeta; use \koolreport\pivot\processes\Pivot; use App\Reports\CustomerAjax; use App\Reports\ProductAjax;
class Supplierogrrecon extends \koolreport\KoolReport {
use \koolreport\export\Exportable;
use \koolreport\excel\ExcelExportable;
use \koolreport\core\SubReport;
use \koolreport\laravel\Friendship;
use \koolreport\inputs\Bindable;
use \koolreport\inputs\POSTBinding;
function settings() {
    return array(
        "subReports" => array(
            "customerAjax" => CustomerAjax::class,
            "productAjax" => ProductAjax::class
        )
    );
}
protected function defaultParamValues() {
    return array(
        "month" => date('Y-m'),
        "group" => array(),
        "customer" => array(),
        "network" => array(),
        "product" => array(),
    );
}
protected function bindParamsToInputs() {
    return array(
        "month",
        "group",
        "customer",
        "network",
        "product"
    );
}
function setup() {
    $month = date('M', strtotime($this->params["month"]));
    $month1 = date('M', strtotime('-1 month', strtotime($this->params["month"])));
    $month2 = date('M', strtotime('-2 month', strtotime($this->params["month"])));
    $node = $this->src('mysql')->query("select c.name as parent,m.income,m.expense,g.code,p.name,s.qty,m.serial_no,DATE_FORMAT(o.process_month, '%Y') as year,DATE_FORMAT(o.process_month, '%b') as month FROM me_ogr_post_process m "
                            . "LEFT JOIN me_import_file o on o.id = m.file_id "
                            . "LEFT JOIN sales_order_detail s on s.id = m.sales_order_detail_id "
                            . "LEFT JOIN customer c on m.customer_id = c.id "
                            . "JOIN customer p ON c.id = p.parent_id "
                            . "LEFT JOIN `group` g on g.id = c.group_id "
                            . "WHERE DATE_FORMAT(o.process_month, '%Y') = YEAR(CURDATE())  AND "
                            . (($this->params["network"] != array()) ? "m.network_id IN (:network) AND " : "")
                            . (($this->params["group"] != array()) ? "c.group_id IN (:group) AND " : "")
                            . (($this->params["customer"] != array()) ? "m.customer_id IN (:customer) AND " : "")
                            . (($this->params["product"] != array()) ? "m.product_id IN (:product) AND " : "")
                            . ("(DATE_FORMAT(o.process_month, '%b') = '$month' OR DATE_FORMAT(o.process_month, '%b') = '$month1' OR DATE_FORMAT(o.process_month, '%b') = '$month2')")
                    )
                    ->params(array(
                        ":customer" => $this->params["customer"],
                        ":network" => $this->params["network"],
                        ":group" => $this->params["group"],
                        ":product" => $this->params["product"]
                    ))
                    ->pipe(new ColumnMeta(array(
                        "expense" => array(
                            'type' => 'number',
                            "decimals" => 2,
                            "prefix" => "R",
                        ),
                        "income" => array(
                            'type' => 'number',
                            "decimals" => 2,
                            "prefix" => "R",
                        ),
                        "serial_no" => array(
                            'type' => 'number',
                        ),
                    )))
                    ->pipe(new Pivot(array(
                        "dimensions" => array(
                            "column" => "year,month",
                            "row" => "code,parent,name"
                        ),
                        "aggregates" => array(
                            "sum" => "income,expense",
                            "count" => "serial_no",
                        )
                    )))->saveTo($node2);
    $node2->pipe($this->dataStore('sales'));
}
}
-------------------------------------------------view file ----------------------------------------------
<?php
use \koolreport\pivot\widgets\PivotTable; use \koolreport\inputs\DateTimePicker; ?> <style>
.calendar.left .daterangepicker_input,
.calendar.right .daterangepicker_input {
    display: none;
}
</style> <div class="report-content">
<form method="POST">
    <?php echo csrf_field() ?>
    <div class="text-center">
        <h3>Supplier OGR Recon</h3>
        <br/>
        <div class="form-group">
            <button formaction="/reporting/supplier_ogr_recon_export_pdf/" class="btn btn-primary">Download PDF</button>
            <button formaction="/reporting/supplier_ogr_recon_export_excel/" class="btn btn-primary">Download Excel</button>
        </div>
    </div>
    <div class="row">
        <div class="col-md-3">
            From Date:
            <?php
            DateTimePicker::create(array(
                "name" => "month",
                "maxDate" => "@endDatePicker",
                "format" => "YYYY-MM",
                "themeBase" => "bs4",
            ));
            ?>
        </div>
        <div class="col-md-3">
            <?php $this->subReport("customerAjax"); ?>
        </div>
        <div class="col-md-3">
            <?php $this->subReport("productAjax"); ?>
        </div>
        <div class="form-group" style="margin-top:30px;">
            <button class="btn btn-lg btn-primary">Submit form</button>
        </div>
    </div>
</form>
</div>
<?php if (!empty($this->dataStore('sales'))) {
PivotTable::create(array(
    "dataStore" => $this->dataStore('sales'),
    'rowCollapseLevels' => array(0),
    'columnCollapseLevels' => array(0),
    'hideSubtotalRow' => true,
    'hideSubtotalColumn' => true,
    'showDataHeaders' => true,
    'columnSort' => array(
        'month' => function ($a, $b) {
            return false;
        },
    ),
));
} ?>
why my data not load every time?

