Metody
Trait: /src/Model/Entity/Trait/PaymentStatusTrait.php
<?php declare(strict_types=1); namespace App\Model\Entity\Trait; /** * Payment Status Trait * * Mapowanie statusów płatności z angielskiego na polski * Użycie: w Invoice.php i PurchaseInvoice.php */ trait PaymentStatusTrait { /** * Mapowanie statusów płatności EN -> PL * * @var array<string, string> */ protected static array $paymentStatusMap = [ 'unpaid' => 'Nieopłacona', 'partial' => 'Częściowo opłacona', 'paid' => 'Opłacona', 'overdue' => 'Przeterminowana', ]; /** * Mapowanie odwrotne PL -> EN * * @var array<string, string> */ protected static array $paymentStatusMapReverse = [ 'Nieopłacona' => 'unpaid', 'Częściowo opłacona' => 'partial', 'Opłacona' => 'paid', 'Przeterminowana' => 'overdue', ]; /** * Virtual field: Polska nazwa statusu płatności * * @return string */ protected function _getPaymentStatusLabel(): string { return self::$paymentStatusMap[$this->payment_status] ?? $this->payment_status; } /** * Pobiera polską nazwę statusu * * @param string|null $status Status w języku angielskim (opcjonalnie) * @return string */ public function getPaymentStatusLabel(?string $status = null): string { $status = $status ?? $this->payment_status; return self::$paymentStatusMap[$status] ?? $status; } /** * Pobiera angielską nazwę ze statusu polskiego * * @param string $polishStatus Status w języku polskim * @return string|null */ public static function getPaymentStatusFromPolish(string $polishStatus): ?string { return self::$paymentStatusMapReverse[$polishStatus] ?? null; } /** * Zwraca wszystkie dostępne statusy płatności * * @param bool $polish Zwróć w języku polskim? * @return array<string, string> */ public static function getPaymentStatuses(bool $polish = false): array { if ($polish) { return self::$paymentStatusMap; } return array_keys(self::$paymentStatusMap); } /** * Zwraca opcje dla selecta (dla formularzy) * * @return array<string, string> ['unpaid' => 'Nieopłacona', ...] */ public static function getPaymentStatusOptions(): array { return self::$paymentStatusMap; } /** * Sprawdza czy faktura jest opłacona * * @return bool */ public function isPaid(): bool { return $this->payment_status === 'paid'; } /** * Sprawdza czy faktura jest nieopłacona * * @return bool */ public function isUnpaid(): bool { return $this->payment_status === 'unpaid'; } /** * Sprawdza czy faktura jest częściowo opłacona * * @return bool */ public function isPartiallyPaid(): bool { return $this->payment_status === 'partial'; } /** * Sprawdza czy faktura jest przeterminowana * * @return bool */ public function isOverdue(): bool { return $this->payment_status === 'overdue'; } /** * Pobiera klasę CSS dla badge'a statusu * * @return string */ public function getPaymentStatusBadgeClass(): string { $classes = [ 'unpaid' => 'bg-warning text-dark', 'partial' => 'bg-light text-info', 'paid' => 'bg-light text-success', 'overdue' => 'bg-danger', ]; return $classes[$this->payment_status] ?? 'bg-secondary'; } /** * Pobiera ikonę Font Awesome dla statusu * * @return string */ public function getPaymentStatusIcon(): string { $icons = [ 'unpaid' => 'fas fa-clock', 'partial' => 'fas fa-circle-half-stroke', 'paid' => 'fas fa-check-circle', 'overdue' => 'fas fa-exclamation-triangle', ]; return $icons[$this->payment_status] ?? 'fas fa-question-circle'; } }
Używanie: Lista select
<?= $this->Form->control('payment_status', [
'label' => 'Status płatności',
'class' => 'form-select mb-2',
'options' => $invoice::getPaymentStatusOptions(),
]) ?>
widok:
<td><strong>Status płatności:</strong></td> <td> <spanclass="badge <?= $invoice->getPaymentStatusBadgeClass() ?>"> <i class="<?= $invoice->getPaymentStatusIcon() ?>"></i> <?= h($invoice->payment_status_label) ?> </span> </td>
Model/Entity: PurchaseInvoice.php, Invoice.php
use App\Model\Entity\Trait\PaymentStatusTrait; class Invoice extends Entity { use PaymentStatusTrait; ..... }