diff --git a/app/Models/ProjectProposal.php b/app/Models/ProjectProposal.php index f358e0b..6073213 100644 --- a/app/Models/ProjectProposal.php +++ b/app/Models/ProjectProposal.php @@ -103,4 +103,9 @@ class ProjectProposal extends Model implements HasMedia { return $this->hasMany(Vote::class); } + + public function hasVoteFrom(EinundzwanzigPleb $pleb): bool + { + return $this->votes->contains('einundzwanzig_pleb_id', $pleb->id); + } } diff --git a/resources/css/components/custom.css b/resources/css/components/custom.css index e547e84..596f14c 100644 --- a/resources/css/components/custom.css +++ b/resources/css/components/custom.css @@ -143,4 +143,21 @@ color: #f43658; border: none; } + + /** + * Board Vote Ribbon + * + * Diagonal ribbon in der oberen rechten Ecke einer Card, das + * Vorstandsmitglieder auf ausstehende Voting-Entscheidungen hinweist. + */ + .vote-ribbon { + @apply pointer-events-none absolute top-6 -right-12 z-10 w-44 rotate-45 + bg-gradient-to-r from-amber-400 via-orange-500 to-orange-600 + py-1.5 text-center text-[10px] font-bold uppercase tracking-[0.18em] text-white + shadow-[0_4px_12px_rgba(249,115,22,0.45)] ring-1 ring-white/20; + } + + .vote-ribbon__label { + @apply drop-shadow-[0_1px_1px_rgba(0,0,0,0.35)]; + } } diff --git a/resources/views/components/project-card.blade.php b/resources/views/components/project-card.blade.php index c38764b..fbd5a0e 100644 --- a/resources/views/components/project-card.blade.php +++ b/resources/views/components/project-card.blade.php @@ -15,11 +15,21 @@ 'approved' => ($approveCount === 3 || $disapproveCount !== 3), default => true, }; + + $showBoardVoteRibbon = $currentPleb + && $currentPleb->isBoardMember() + && ! $project->sats_paid + && ! $project->hasVoteFrom($currentPleb); @endphp @if($shouldDisplay) - + + @if($showBoardVoteRibbon) +
+ Jetzt voten +
+ @endif @if(!$project->sats_paid)