66 lines
1.6 KiB
PHP
66 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Contribution\Documents;
|
|
|
|
use Zoomyboy\Tex\Document;
|
|
use Zoomyboy\Tex\Template;
|
|
|
|
abstract class ContributionDocument extends Document
|
|
{
|
|
private string $eventName;
|
|
|
|
abstract public static function getName(): string;
|
|
|
|
/**
|
|
* @param ContributionRequestArray $request
|
|
*/
|
|
abstract public static function fromRequest(array $request): self;
|
|
|
|
/**
|
|
* @param ContributionApiRequestArray $request
|
|
*/
|
|
abstract public static function fromApiRequest(array $request): self;
|
|
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
abstract public static function rules(): array;
|
|
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
public static function globalRules(): array
|
|
{
|
|
return [
|
|
'eventName' => 'required|string',
|
|
'members' => 'present|array|min:1',
|
|
'members.*' => 'integer|exists:members,id',
|
|
];
|
|
}
|
|
|
|
public static function buttonName(): string
|
|
{
|
|
return 'Für ' . static::getName() . ' erstellen';;
|
|
}
|
|
|
|
public function setEventName(string $eventName): void
|
|
{
|
|
$this->eventName = $eventName;
|
|
}
|
|
|
|
public function basename(): string
|
|
{
|
|
return str('Zuschüsse ')->append($this->getName())->append(' ')->append($this->eventName)->slug();
|
|
}
|
|
|
|
public function template(): Template
|
|
{
|
|
return Template::make('tex.templates.contribution');
|
|
}
|
|
|
|
public function view(): string
|
|
{
|
|
return 'tex.contribution.' . str(class_basename(static::class))->replace('Document', '')->kebab()->toString();
|
|
}
|
|
}
|