diff --git a/resources/js/components/BarChart.vue b/resources/js/components/BarChart.vue
index 13ea1aa..c50ddae 100644
--- a/resources/js/components/BarChart.vue
+++ b/resources/js/components/BarChart.vue
@@ -24,42 +24,44 @@
diff --git a/src/api/TotalRecordsController.php b/src/api/TotalRecordsController.php
index 57fa373..1c15de6 100644
--- a/src/api/TotalRecordsController.php
+++ b/src/api/TotalRecordsController.php
@@ -10,6 +10,11 @@
use Illuminate\Support\Facades\DB;
use Laravel\Nova\Http\Requests\NovaRequest;
+use app\Nova\Services\ChartService;
+
+
+use Illuminate\Http\Request;
+
class TotalRecordsController extends Controller
{
use ValidatesRequests;
@@ -18,7 +23,8 @@ class TotalRecordsController extends Controller
* @return \Illuminate\Http\JsonResponse
* @throws \Illuminate\Validation\ValidationException
*/
- public function handle(NovaRequest $request)
+ //public function handle(NovaRequest $request)
+ public function handle(Request $request)
{
if ($request->input('model')) {
$request->merge(['model' => urldecode($request->input('model'))]);
@@ -27,7 +33,8 @@ public function handle(NovaRequest $request)
$options = is_string($request->options) ? json_decode($request->options, true) : $request->input('options', []);
$join = is_string($request->join) ? json_decode($request->join, true) : $request->input('join', []);
- $showTotal = (bool) json_decode($options['showTotal'] ?? true);
+ //$showTotal = (bool) json_decode($options['showTotal'] ?? true);
+ $showTotal = false;
$totalLabel = $options['totalLabel'] ?? 'Total';
$chartType = $request->type ?? 'bar';
$advanceFilterSelected = $options['advanceFilterSelected'] ?? false;
@@ -38,25 +45,112 @@ public function handle(NovaRequest $request)
throw new ThrowError('UOM not defined correctly.
Check documentation: https://github.com/coroo/nova-chartjs');
}
$calculation = $options['sum'] ?? 1;
- $request->validate(['model' => ['bail', 'required', 'min:1', 'string']]);
+
+ // выкинем нахуй проверку
+ //$request->validate(['model' => ['bail', 'required', 'min:1', 'string']]);
$model = $request->input('model');
- $modelInstance = new $model;
- $connectionName = $modelInstance->getConnection()->getDriverName();
- $tableName = $modelInstance->getConnection()->getTablePrefix() . $modelInstance->getTable();
- $xAxisColumn = $request->input('col_xaxis') ?? $tableName.'.created_at';
- $cacheKey = hash('md4', $model . (int)(bool)$request->input('expires'));
- $dataSet = Cache::get($cacheKey);
+
+ // custom Hell #start#
+
+ if ($model == 'App\Custom') {
+
+ // $advanceFilterSelected это и есть фильтры (отслеживаемых дней - 1 ) ,
+ // ипользуем только numeric чтобы не путаться
+
+ $days = $advanceFilterSelected - 1;
+ $datesX = ChartService::rangeDates($days);
+ $xAxis = $datesX;
+
+
+ if(isset($request->series)){
+ $countKey = 0;
+ foreach($request->series as $sKey => $sData){
+ $dataSeries = json_decode($sData);
+
+ $yAxis[$sKey]['label'] = $dataSeries->label;
+ $yAxis[$sKey]['backgroundColor'] = $dataSeries->backgroundColor ?? ChartService::PURPLE;
+
+ // TODO 0
+ if(isset($dataSeries->metricAmount) && isset($dataSeries->metricCount))
+ {
+ $method = $dataSeries->method;
+ $metricAmount = $dataSeries->metricAmount;
+ $metricCount = $dataSeries->metricCount;
+
+ $yAxis[$sKey]['data'] = ChartService::$method($days, $metricAmount, $metricCount);
+ }
+
+ // TODO 1
+ if($dataSeries->method == 'getMetricData') {
+ $method = $dataSeries->method;
+ $metricKey = $dataSeries->metricKey;
+ $yAxis[$sKey]['data'] = ChartService::$method($metricKey, $days);
+
+ }
+
+ // TODO 2
+
+ if($dataSeries->method == 'metricDataRegisteredUserAll' || $dataSeries->method == 'metricDataSuccessfullPayment')
+ {
+ $method = $dataSeries->method;
+ $yAxis[$sKey]['data'] = match ($method) {
+ 'metricDataRegisteredUserAll' => ChartService::$method()['values'],
+ 'metricDataSuccessfullPayment' => ChartService::metricDataSuccessfullPayment($days),
+ default => [],
+ };
+ }
+ }
+
+ // Проблемы с тоталом оставим на потом если надо TODO
+ // if($showTotal){
+ // $yAxis[$countKey] = $this->counted($dataSet, $defaultColor[$countKey], 'line', $totalLabel);
+ // }
+
+ }
+
+ return response()->json([
+ 'dataset' => [
+ 'xAxis' => $xAxis,
+ 'yAxis' => $yAxis
+ ]
+ ]);
+
+ // custom Hell #end#
+ } else {
+ $modelInstance = new $model;
+ $connectionName = $modelInstance->getConnection()->getDriverName();
+ $tableName = $modelInstance->getConnection()->getTablePrefix() . $modelInstance->getTable();
+
+ $xAxisColumn = $request->input('col_xaxis') ?? $tableName.'.created_at';
+ $cacheKey = hash('md4', $model . (int)(bool)$request->input('expires'));
+ $dataSet = Cache::get($cacheKey);
+
+ \Log::debug( $dataSet);
+ }
+
if (!$dataSet) {
+ // TODO конфиги отдельно
$labelList = [];
$xAxis = [];
$yAxis = [];
$seriesSql = "";
$brandColor = config('nova.brand.colors.500') ?: '14,165,233';
$defaultColor = array("rgba($brandColor, 1)", "#ffcc5c","#91e8e1","#ff6f69","#88d8b0","#b088d8","#d8b088", "#88b0d8", "#6f69ff","#7cb5ec","#434348","#90ed7d","#8085e9","#f7a35c","#f15c80","#e4d354","#2b908f","#f45b5b","#91e8e1","#E27D60","#85DCB","#E8A87C","#C38D9E","#41B3A3","#67c4a7","#992667","#ff4040","#ff7373","#d2d2d2");
+
if(isset($request->series)){
foreach($request->series as $seriesKey => $serieslist){
- $seriesData = (object) $serieslist;
- $filter = (object) $seriesData->filter;
+ //\Log::debug($request->series);
+
+ /*
+ 0 => '{"barPercentage":0.5,"label":"G2A","borderColor":"#ffb366","filter":{"key":"k","value":"g2a_payments_amount"}}',
+ 1 => '{"barPercentage":0.5,"label":"ZEN","borderColor":"#90ed7d","filter":{"key":"k","value":"zen_payments_amount"}}',
+ 2 => '{"barPercentage":0.5,"label":"COINBASE","borderColor":"#8b572a","filter":{"key":"k","value":"coinbase_payments_amount"}}',
+ 3 => '{"barPercentage":0.5,"label":"ALIPAY","borderColor":"#6e8bc8","filter":{"key":"k","value":"alipay_payments_amount"}}',
+ )
+ */
+
+ $seriesData = json_decode($serieslist);
+ $filter = $seriesData->filter;
$labelList[$seriesKey] = $seriesData->label;
if(empty($filter->value)&&isset($filter->operator)&&($filter->operator=='IS NULL' || $filter->operator=='IS NOT NULL')) {
$seriesSql .= ", SUM(CASE WHEN ".$filter->key." ".$filter->operator." then ".$calculation." else 0 end) as \"".$labelList[$seriesKey]."\"";
@@ -100,6 +194,7 @@ public function handle(NovaRequest $request)
}
$query->groupBy('catorder', 'cat')
->orderBy('catorder', 'asc');
+
} else if($unitOfMeasurement=='week'){
if(count($join)){
$joinInformation = $join;
@@ -197,6 +292,7 @@ public function handle(NovaRequest $request)
}
$query->groupBy('catorder', 'cat')
->orderBy('catorder', 'asc');
+
}
if($options['queryFilter'] ?? false){
@@ -238,8 +334,12 @@ public function handle(NovaRequest $request)
if(isset($request->series)){
$countKey = 0;
foreach($request->series as $sKey => $sData){
- $dataSeries = (object) $sData;
- $filter = (object) $dataSeries->filter;
+ //$dataSeries = (object) $sData;
+
+ $dataSeries = json_decode($sData);
+
+ //$filter = (object) $dataSeries->filter;
+ $filter = $dataSeries->filter;
$yAxis[$sKey]['label'] = $dataSeries->label;
if(isset($dataSeries->fill)){
if($dataSeries->fill==false){
@@ -254,11 +354,11 @@ public function handle(NovaRequest $request)
$yAxis[$sKey]['data'] = collect($dataSet)->map(function ($item, $key) use ($dataSeries){
return $item->only([$dataSeries->label])[$dataSeries->label];
});
- $countKey++;
}
if($showTotal){
- $yAxis[$countKey] = $this->counted($dataSet, $defaultColor[$countKey], 'line', $totalLabel);
+ //$yAxis[$countKey] = $this->counted($dataSet, $defaultColor[$countKey], 'line', $totalLabel);
}
+
} else {
$yAxis[0] = $this->counted($dataSet, $defaultColor[0], $chartType, $totalLabel);
}
@@ -266,12 +366,15 @@ public function handle(NovaRequest $request)
Cache::put($cacheKey, $dataSet, Carbon::parse($request->input('expires')));
}
}
- return response()->json(
- ['dataset' => [
+
+ //\Log::debug($yAxis);
+
+ return response()->json([
+ 'dataset' => [
'xAxis' => $xAxis,
'yAxis' => $yAxis
]
- ]);
+ ]);
}
private function counted($dataSet, $bgColor = "#111", $type = "bar", $label = "Total")