/home/bdqbpbxa/api-uniferx.goodface.com.ua/vendor/laravel/nova/src/Metrics/Progress.php
<?php
namespace Laravel\Nova\Metrics;
use Illuminate\Database\Eloquent\Builder;
abstract class Progress extends Metric
{
use RoundingPrecision;
/**
* The element's component.
*
* @var string
*/
public $component = 'progress-metric';
/**
* Return a progress result showing the growth of an count aggregate.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @param \Illuminate\Database\Eloquent\Builder|class-string<\Illuminate\Database\Eloquent\Model> $model
* @param callable(\Illuminate\Database\Eloquent\Builder):void $progress
* @param \Illuminate\Database\Query\Expression|string|null $column
* @param int|float|null $target
* @return \Laravel\Nova\Metrics\ProgressResult
*/
public function count($request, $model, callable $progress, $column = null, $target = null)
{
return $this->aggregate($request, $model, 'count', $column, $progress, $target);
}
/**
* Return a progress result showing the growth of a sum aggregate.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @param \Illuminate\Database\Eloquent\Builder|class-string<\Illuminate\Database\Eloquent\Model> $model
* @param callable(\Illuminate\Database\Eloquent\Builder):void $progress
* @param \Illuminate\Database\Query\Expression|string $column
* @param int|float|null $target
* @return \Laravel\Nova\Metrics\ProgressResult
*/
public function sum($request, $model, callable $progress, $column, $target = null)
{
return $this->aggregate($request, $model, 'sum', $column, $progress, $target);
}
/**
* Return a progress result showing the segments of a aggregate.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @param \Illuminate\Database\Eloquent\Builder|class-string<\Illuminate\Database\Eloquent\Model> $model
* @param string $function
* @param \Illuminate\Database\Query\Expression|string|null $column
* @param callable(\Illuminate\Database\Eloquent\Builder):void $progress
* @param int|float|null $target
* @return \Laravel\Nova\Metrics\ProgressResult
*/
protected function aggregate($request, $model, $function, $column, callable $progress, $target = null)
{
$query = $model instanceof Builder ? $model : (new $model)->newQuery();
$column = $column ?? $query->getModel()->getQualifiedKeyName();
$query->tap(function ($query) use ($request) {
return $this->applyFilterQuery($request, $query);
});
return $this->result(
round(
(clone $query)->tap(function ($query) use ($progress) {
call_user_func($progress, $query);
})->{$function}($column) ?? 0,
$this->roundingPrecision,
$this->roundingMode
),
$target ?? round(
(clone $query)->{$function}($column) ?? 0,
$this->roundingPrecision,
$this->roundingMode
)
);
}
/**
* Create a new progress metric result.
*
* @param int|float $value
* @param int|float $target
* @return \Laravel\Nova\Metrics\ProgressResult
*/
public function result($value, $target)
{
return new ProgressResult($value, $target);
}
}