1. Go to this page and download the library: Download ilbronza/schedules library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use IlBronza\Schedules\Contracts\Schedulable;
use IlBronza\Schedules\Traits\InteractsWithSchedule;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class Vehicle extends Model implements Schedulable
{
use InteractsWithSchedule;
/**
* Metodi che il package può chiamare per leggere il valore corrente.
* Qualunque altro nome viene rifiutato.
*/
protected array $allowedScheduleValueMethods = [
'getOdometer',
];
public function getOdometer(): float
{
return (float) $this->odometer;
}
/**
* Scope usato dalla UI di applicazione massiva.
* Il nome è scope + Studly(nome del Type).
* Tipo "Revisione" → scopeRevisione.
*/
public function scopeRevisione(Builder $query): Builder
{
return $query->where('active', true);
}
public function getName(): string
{
return $this->plate;
}
}
public function scopeRevisione(Builder $query): Builder
{
return $query;
}
use IlBronza\Schedules\Helpers\Applicators\ScheduleApplicatorHelper;
use IlBronza\Schedules\Helpers\Applicators\BulkScheduleApplicatorHelper;
// Partenza = valore corrente del modello (getOdometer()), deadline = starting + validity
$schedule = ScheduleApplicatorHelper::applicateScheduleToModel($type, $vehicle);
// Partenza esplicita
$schedule = ScheduleApplicatorHelper::applicateStartingScheduleToModel($type, $vehicle, 90000);
// Deadline esplicita (starting = deadline − validity)
$schedule = ScheduleApplicatorHelper::applicateEndingScheduleToModel($type, $vehicle, 110000);
// Come i precedenti, ma riusano la schedule corrente dello stesso tipo.
// Non creano duplicati. Se i limiti cambiano, le soglie si riallineano;
// una soglia il cui threshold si sposta torna pending e può essere reinviata.
$schedule = ScheduleApplicatorHelper::findOrApplicateStartingScheduleToModel($type, $vehicle, 95000);
$schedule = ScheduleApplicatorHelper::findOrApplicateEndingScheduleToModel($type, $vehicle, 115000);
// Stesso tipo su tanti modelli, una transazione, lock ordinati
BulkScheduleApplicatorHelper::applicateScheduleToModels($type, $vehicles);
use IlBronza\Schedules\Services\ScheduleManager;
app(ScheduleManager::class)->manage($schedule);
app(ScheduleManager::class)->manageMany([$id1, $id2]);
$vehicle->schedules; // morphMany
$vehicle->getSchedules();
$vehicle->getCurrentScheduleByType($type); // una, la più lontana in deadline
$vehicle->getCurrentSchedulesByType($type); // tutte le correnti di quel tipo
$vehicle->getLatestByType($type); // anche expired/managed
$vehicle->getApplicatedScheduleTypes(); // Type distinti già applicati
$vehicle->scheduledNotifications(); // hasManyThrough, filtrato sul morph
$schedule->getStartingValue();
$schedule->getDeadlineValue();
$schedule->getCurrentValue(); // rilegge il modello (cache 60s)
$schedule->getPercentageValidity(); // 0 al starting, 100 alla deadline
$schedule->isCurrent();
$schedule->isExpiring(); // progresso ≥ percentage_validity del tipo
$schedule->isManaged();
$schedule->isMarkedExpired();
use IlBronza\Schedules\Contracts\ScheduleNotificationDispatcher;
$this->app->bind(
ScheduleNotificationDispatcher::class,
\App\Schedules\MyDispatcher::class
);