index.php 7.81 KB
<?php
    use artweb\artbox\ecommerce\models\Label;
    use artweb\artbox\ecommerce\models\Order;
    use kartik\daterange\DateRangePicker;
    use kartik\grid\GridView;
    use kartik\select2\Select2;
    use yii\data\ActiveDataProvider;
    use yii\helpers\ArrayHelper;
    use yii\helpers\Html;
    use yii\helpers\StringHelper;
    use yii\web\View;
    use yiier\chartjs\ChartJs;
    
    /**
     * @var View               $this
     * @var Label[]            $labels
     * @var array              $labelStatistics
     * @var array              $rejectionStatistics
     * @var ActiveDataProvider $dataProvider
     * @var array              $labelChartData
     * @var string             $dateValue
     * @var int | boolean      $dataLabel
     */

?>

<div class="box box-default">
  <div class="box-header with-border">
    <h3 class="box-title">Collapsable</h3>
    <div class="box-tools pull-right">
      <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
    </div><!-- /.box-tools -->
  </div><!-- /.box-header -->
  <div class="box-body">
      <?= Html::beginForm(
          [ '/ecommerce/statistics' ],
          'get'
      ) ?>
    <div class="row">
      <div class="col-md-4">
          <?= DateRangePicker::widget(
              [
                  'name'          => 'date_range',
                  'value'         => $dateValue,
                  'pluginOptions' => [
                      'locale' => [
                          'format'    => 'DD-MM-Y',
                          'separator' => ' : ',
                      ],
                  ],
              ]
          ) ?>
      </div>
      <div class="col-md-6">
          <?= Select2::widget(
              [
                  'name'    => 'label',
                  'value'   => $dataLabel,
                  'data'    => ArrayHelper::map(
                      $labels,
                      function($model) {
                          return $model->id;
                      },
                      function($model) {
                          return $model->lang->title;
                      }
                  ),
                  'options' => [
                      'placeholder' => 'Все',
                  ],
                  'pluginOptions' => [
                    'allowClear' => true,
                  ],
              ]
          ) ?>
      </div>
      <div class="col-md-2">
          <?= Html::submitButton(
              'Go',
              [
                  'class' => 'btn btn-success',
              ]
          ) ?>
      </div>
    </div>
      <?= Html::endForm() ?>
  </div><!-- /.box-body -->
</div><!-- /.box -->

<div class="box box-default">
  <div class="box-header with-border">
    <h3 class="box-title">Метки, статистика за </h3>
    <div class="box-tools pull-right">
      <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
    </div><!-- /.box-tools -->
  </div><!-- /.box-header -->
  <div class="box-body table-responsive no-padding">
    <table class="table table-hover">
      <tr>
        <td><b>Метка</b></td>
        <td><b>Заказов, шт.</b></td>
        <td><b>На сумму, грн.</b></td>
        <td><b>Заказано товаров, шт.</b></td>
        <td><b>Уникальных товаров, шт.</b></td>
      </tr>
        <?php
            foreach ($labelStatistics as $name => $statistic) {
                echo Html::tag(
                    'tr',
                    Html::tag('td', $name) . Html::tag('td', $statistic[ 'count' ]) . Html::tag(
                        'td',
                        $statistic[ 'sum' ]
                    ) . Html::tag('td', $statistic[ 'products' ]) . Html::tag('td', $statistic[ 'unique' ])
                );
            } ?>
    </table>
      
      <?= ChartJs::widget(
          [
              'type'          => 'bar',
              'options'       => [
                  'height' => 200,
                  'width'  => 600,
              ],
              'data'          => $labelChartData,
              'clientOptions' => [
                  'title'  => [
                      'display' => true,
                      'text'    => 'Custom Chart Title',
                  ],
                  'scales' => [
                      'xAxes' => [
                          [
                              'display' => false,
                          ],
                      ],
                  ],
              ],
          ]
      ); ?>

  </div><!-- /.box-body -->
</div><!-- /.box -->

<div class="box box-default">
  <div class="box-header with-border">
    <h3 class="box-title">Метки, статистика за </h3>
    <div class="box-tools pull-right">
      <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
    </div><!-- /.box-tools -->
  </div><!-- /.box-header -->
  <div class="box-body table-responsive no-padding">
    <table class="table table-hover">
      <tr>
        <td><b>Причина</b></td>
        <td><b>Заказов, шт.</b></td>
        <td><b>На сумму, грн.</b></td>
      </tr>
        <?php
            foreach ($rejectionStatistics as $name => $statistic) {
                echo Html::tag(
                    'tr',
                    Html::tag('td', $name) . Html::tag('td', $statistic[ 'count' ]) . Html::tag(
                        'td',
                        $statistic[ 'sum' ]
                    )
                );
            }
        ?>
    </table>
  </div><!-- /.box-body -->
</div><!-- /.box -->

<?= GridView::widget(
    [
        'dataProvider' => $dataProvider,
        'columns'      => [
            'id',
            'created_at:datetime',
            'name',
            'city',
            [
                'attribute' => 'orderLabel.label',
                'label'     => 'Метка',
            ],
            'total',
            [
                'attribute' => 'reason',
                'content'   => function($model) {
                    /**
                     * @var Order $model
                     */
                    if (empty($model->reason)) {
                        return '';
                    } else {
                        return Order::REASONS[ $model->reason ];
                    }
                },
            ],
            [
                'attribute' => 'manager.username',
                'label'     => 'Менеджер',
            ],
            [
                'attribute' => 'body',
                'content'   => function($model) {
                    /**
                     * @var Order $model
                     */
                    if (empty($model->body)) {
                        return '';
                    } else {
                        return Html::a(
                            StringHelper::truncate($model->body, 10, '...'),
                            '#',
                            [
                                'data-toggle' => 'tooltip',
                                'title'       => $model->body,
                                'onclick'     => 'event.preventDefault();',
                            ]
                        );
                    }
                },
            ],
            [
                'content' => function($model) {
                    /**
                     * @var Order $model
                     */
                    return Html::a(
                        Html::tag('i', '', [ 'class' => 'glyphicon glyphicon-eye-open' ]),
                        [
                            '/ecommerce/order/view',
                            'id' => $model->id,
                        ],
                        [
                            'target'    => '_blank',
                            'data-pjax' => '0',
                        ]
                    );
                },
            ],
        ],
    ]
) ?>