CluPilotCloud/app/Models/DpaVersion.php

61 lines
1.8 KiB
PHP

<?php
namespace App\Models;
use App\Models\Concerns\HasUuid;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
/**
* One published version of the data-processing agreement.
*
* The TEXT is not this application's. An operator uploads the document their
* lawyer wrote, names the version, and publishes it; everything here is about
* serving that file and knowing which one is in force. The technical and
* organisational measures ride along as a second file rather than as a second
* concept — they are an annex to the agreement, and "which measures applied when
* this customer accepted" has to have one answer.
*/
class DpaVersion extends Model
{
use HasFactory, HasUuid;
protected $fillable = ['version', 'agreement_path', 'measures_path', 'note', 'published_at', 'created_by'];
protected function casts(): array
{
return ['published_at' => 'datetime'];
}
/**
* The version in force: the newest published one.
*
* Newest by publication, not by id — a version prepared earlier and
* published later is the later one, and the id says nothing about that.
*/
public static function current(): ?self
{
return static::query()
->whereNotNull('published_at')
->where('published_at', '<=', now())
->latest('published_at')
->first();
}
public function isPublished(): bool
{
return $this->published_at !== null && $this->published_at->isPast();
}
public function acceptances(): HasMany
{
return $this->hasMany(DpaAcceptance::class);
}
public function operator()
{
return $this->belongsTo(Operator::class, 'created_by');
}
}