/** * AJAX * Выдает значения для графика курса по заданному диапазону * * REQUEST: * - id - int - идентификатор курса * - min - string - дата начала графика 'yyyy-mm-dd' * - max - string - дата окончания графика 'yyyy-mm-dd' * - isUseRed - int - 1 - на графике будет присутствовать прогноз красный, 0 - не будет присутствовать * - isUseBlue - int - 1 - на графике будет присутствовать прогноз синий, 0 - не будет присутствовать * - isUseKurs - int - 1 - на графике будет присутствовать курс, 0 - не будет присутствовать * - y - int - какие значения использовать для оси Y (1 => 'Курс', 2 => 'Красный прогноз', 3 => 'Синий прогноз',) * * @return string json * { * 'red': - object - data которая для графика нужна * 'blue': - object - data которая для графика нужна * 'kurs': - object - data которая для графика нужна * } */ public function actionGraph_ajax() { $start = self::getParam('min'); $end = self::getParam('max'); $id = self::getParam('id'); $isUseRed = self::getParam('isUseRed', 0); $isUseBlue = self::getParam('isUseBlue', 0); $isUseKurs = self::getParam('isUseKurs', 0); $y = self::getParam('y'); $colorGreen = ['label' => "Курс", 'fillColor' => "rgba(220,220,220,0.2)", 'strokeColor' => "rgba(120,255,120,1)", 'pointColor' => "rgba(70,255,70,1)", 'pointStrokeColor' => "#fff", 'pointHighlightFill' => "#fff", 'pointHighlightStroke' => "rgba(220,220,220,1)"]; $colorRed = ['label' => "Прогноз", 'fillColor' => "rgba(220,220,220,0)", 'strokeColor' => "rgba(255,120,120,1)", 'pointColor' => "rgba(255,70,70,1)", 'pointStrokeColor' => "#fff", 'pointHighlightFill' => "#fff", 'pointHighlightStroke' => "rgba(220,220,220,1)"]; $colorBlue = ['label' => "Прогноз", 'fillColor' => "rgba(220,220,220,0)", 'strokeColor' => "rgba(120,120,255,1)", 'pointColor' => "rgba(70,70,255,1)", 'pointStrokeColor' => "#fff", 'pointHighlightFill' => "#fff", 'pointHighlightStroke' => "rgba(220,220,220,1)"]; $defaultParams = ['start' => $start, 'end' => $end, 'formatX' => 'd.m']; $colors = [$colorGreen, $colorRed, $colorBlue]; // график с продажами $lineArrayKurs = \app\service\GraphExporter::convert(ArrayHelper::merge($defaultParams, ['rows' => [\app\models\StockKurs::query(['stock_id' => $id])->andWhere(['between', 'date', $start, $end])->select(['date', 'kurs'])->all()]])); // график с прогнозом (красная линия) $lineArrayRed = \app\service\GraphExporter::convert(ArrayHelper::merge($defaultParams, ['rows' => [\app\models\StockPrognosisRed::query(['stock_id' => $id])->andWhere(['between', 'date', $start, $end])->select(['date', 'delta as kurs'])->all()]])); // график с прогнозом (синяя линия) $lineArrayBlue = \app\service\GraphExporter::convert(ArrayHelper::merge($defaultParams, ['rows' => [\app\models\StockPrognosisBlue::query(['stock_id' => $id])->andWhere(['between', 'date', $start, $end])->select(['date', 'delta as kurs'])->all()]])); if ($isUseRed == 1 && $isUseBlue == 0 && $isUseKurs == 0 || $isUseRed == 0 && $isUseBlue == 1 && $isUseKurs == 0 || $isUseRed == 0 && $isUseBlue == 0 && $isUseKurs == 1) { // показывается только один график if ($isUseRed == 1) { // показываю красный $lineArray = $lineArrayRed; $colors = [$colorRed]; } else { if ($isUseBlue == 1) { // показываю синий $lineArray = $lineArrayBlue; $colors = [$colorBlue]; } else { // показываю курс $lineArray = $lineArrayKurs; $colors = [$colorGreen]; } } } else { if ($isUseRed == 0 && $isUseBlue == 1 && $isUseKurs == 1 || $isUseRed == 1 && $isUseBlue == 0 && $isUseKurs == 1 || $isUseRed == 1 && $isUseBlue == 1 && $isUseKurs == 0) { // показывается два графика if ($isUseRed == 0) { switch ($y) { case 1: // Курс $lineArray = \app\service\GraphUnion::convert(['x' => $lineArrayRed['x'], 'y' => [$lineArrayKurs['y'][0], $lineArrayBlue['y'][0]]]); $colors = [$colorGreen, $colorBlue]; break; case 3: // Синий $lineArray = \app\service\GraphUnion::convert(['x' => $lineArrayRed['x'], 'y' => [$lineArrayBlue['y'][0], $lineArrayKurs['y'][0]]]); $colors = [$colorBlue, $colorGreen]; break; } } else { if ($isUseBlue == 0) { switch ($y) { case 1: // Курс $lineArray = \app\service\GraphUnion::convert(['x' => $lineArrayRed['x'], 'y' => [$lineArrayKurs['y'][0], $lineArrayRed['y'][0]]]); $colors = [$colorGreen, $colorRed]; break; case 2: // Красный $lineArray = \app\service\GraphUnion::convert(['x' => $lineArrayRed['x'], 'y' => [$lineArrayRed['y'][0], $lineArrayKurs['y'][0]]]); $colors = [$colorRed, $colorGreen]; break; } } else { switch ($y) { case 1: // Курс $lineArray = \app\service\GraphUnion::convert(['x' => $lineArrayRed['x'], 'y' => [$lineArrayRed['y'][0], $lineArrayBlue['y'][0]]]); $colors = [$colorRed, $colorBlue]; break; case 2: // Красный $lineArray = \app\service\GraphUnion::convert(['x' => $lineArrayRed['x'], 'y' => [$lineArrayRed['y'][0], $lineArrayBlue['y'][0]]]); $colors = [$colorRed, $colorBlue]; break; case 3: // Синий $lineArray = \app\service\GraphUnion::convert(['x' => $lineArrayRed['x'], 'y' => [$lineArrayBlue['y'][0], $lineArrayRed['y'][0]]]); $colors = [$colorBlue, $colorRed]; break; } } } } else { // показывается три графика switch ($y) { case 1: // Курс $lineArray = \app\service\GraphUnion::convert(['x' => $lineArrayRed['x'], 'y' => [$lineArrayKurs['y'][0], $lineArrayRed['y'][0], $lineArrayBlue['y'][0]]]); $colors = [$colorGreen, $colorRed, $colorBlue]; break; case 2: // Красный $lineArray = \app\service\GraphUnion::convert(['x' => $lineArrayRed['x'], 'y' => [$lineArrayRed['y'][0], $lineArrayKurs['y'][0], $lineArrayBlue['y'][0]]]); $colors = [$colorRed, $colorGreen, $colorBlue]; break; case 3: // Синий $lineArray = \app\service\GraphUnion::convert(['x' => $lineArrayRed['x'], 'y' => [$lineArrayBlue['y'][0], $lineArrayRed['y'][0], $lineArrayKurs['y'][0]]]); $colors = [$colorBlue, $colorRed, $colorGreen]; break; } } } $graph3 = new \cs\Widget\ChartJs\Line(['width' => 800, 'lineArray' => $lineArray, 'colors' => $colors]); return self::jsonSuccess($graph3->getData()); }
Зеленая линия прошедших торгов </div> <div class="col-sm-2"> <?php echo $form->field($model, 'isKurs')->widget('cs\\Widget\\CheckBox2\\CheckBox', ['options' => ['data-onstyle' => 'success']])->label('', ['class' => 'hide']); ?> </div> <?php ActiveForm::end(); ?> </div> <div class="row col-lg-12"> <?php $graph3 = new \cs\Widget\ChartJs\Line(['width' => 800, 'lineArray' => $lineArrayPast, 'colors' => [$colorGreen, $colorRed, $colorBlue]]); echo $graph3->run(); $timeEnd = time() - 60 * 60 * 24; $timeStart = $timeEnd - 60 * 60 * 24 * 30 * 6; $defaultEnd = $timeEnd; $defaultStart = $defaultEnd - 60 * 60 * 24 * 30; $this->registerJs(<<<JS /** * * @param f float */ function getDate(f) { start = new Date(); start.setTime(parseInt(f) + '000'); var m = start.getMonth() + 1;