-
Notifications
You must be signed in to change notification settings - Fork 5
Description
Using "kirschbaum-development/nova-chartjs": "^2.0" I want to add chart for completed orders within current month:
I created report resource with data filter in indexQuery method :
<?php
namespace App\Nova\Reports;
use App\Nova\Resource;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Http\Requests\NovaRequest;
use KirschbaumDevelopment\NovaChartjs\NovaChartjs;
class CompletedOrdersByDaysChartJS extends Resource
{
/**
* The model the resource corresponds to.
*
* @var class-string<\App\Models\Order>
*/
public static $model = \App\Models\Order::class;
/**
* The single value that should be used to represent the resource when being displayed.
*
* @var string
*/
public static $title = 'Completed orders by days 999';
/**
* The columns that should be searched.
*
* @var array
*/
public static $search = [
'id',
];
public static function indexQuery(NovaRequest $request, $query)
{
$today = Carbon::now();
$query->onlyCompleted()->whereMonth('completed_by_manager_at', $today->month)
->whereYear('completed_by_manager_at', $today->year);
return parent::indexQuery($request, $query);
}
/**
* Get the fields displayed by the resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function fields(NovaRequest $request)
{
$chartName = 'Completed orders by days';
return [
NovaChartjs::make('Completed orders by month', 'novaChartjsMetricValue', function () use($chartName) {
return optional($this->novaChartjsMetricValue()->where('chart_name', $chartName)->first())->metric_values ?? [];
}),
];
}
public static function canUpdate(Request $request)
{
return false;
}
public static function canAdd(Request $request)
{
return false;
}
public static function canDelete(Request $request)
{
return false;
}
/**
* Get the cards available for the request.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function cards(NovaRequest $request)
{
return [];
}
/**
* Get the filters available for the resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function filters(NovaRequest $request)
{
return [];
}
/**
* Get the lenses available for the resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function lenses(NovaRequest $request)
{
return [];
}
/**
* Get the actions available for the resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function actions(NovaRequest $request)
{
return [];
}
}
I see next page :
https://img001.prntscr.com/file/img001/y6kn43edST2EnLQVu69Aww.png
Checking sql :
SELECT *
FROM `orders`
WHERE `orders`.`status` = 'O' AND month(`completed_by_manager_at`) = '03' AND year(`completed_by_manager_at`) = 2025
ORDER BY `orders`.`id` desc limit 26 offset 0
and 2 rows found with field with 2025-03-01 08:46:07 and 2025-03-02 09:45:01 dates.
In the generated report there are 2 rows, but day completed_by_manager_at is not marked.
I did not understand how to show report relative to my dates ?
I suppose to make some grouping by days.
I added logging messages into getNovaChartjsSettings method of Order model, but looks like getNovaChartjsSettings method is not calling.
Not sure, if I do not have to apply any getAdditionalDatasets method in the Order model in my case?
Order Model, has no title/name fields - as I see "undefined" label...
How can I make my report ?