feat: add bulk client notifications and email enhancements with review fixes (Stories 3.4 & 3.5)
Story 3-4: Bulk client notification scheduling — BulkNotificationController, BulkActionBar component, checkbox selection on declarations index. Story 3-5: Email notification enhancement — observer-driven email on en_attente_client, cache invalidation on ferme, workspace branding on all email templates, 11 feature tests. Code review fixes: - Move bulk-notify route above resource wildcard to prevent shadowing - Add static $suppressEmail flag to prevent observer double-sending when DeclarationMessageController already sends the email - Fix canBulkNotify logic (was granting workers access) - Add WorkspaceUserRole check to BulkNotifyRequest::authorize() - Replace firstOrCreate with explicit invitation lookup that syncs client email and handles used/expired invitations correctly - Watch declarations.data instead of current_page to clear selection on filter/sort changes Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -15,6 +15,7 @@ use App\Models\Declaration;
|
||||
use App\Models\DeclarationInvitation;
|
||||
use App\Models\Message;
|
||||
use App\Models\Workspace;
|
||||
use App\Observers\DeclarationObserver;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
@@ -73,6 +74,8 @@ class DeclarationMessageController extends Controller
|
||||
$message->update(['metadata' => array_merge($metadata, ['media_ids' => $mediaIds])]);
|
||||
}
|
||||
|
||||
// Suppress observer email — this controller sends its own email below
|
||||
DeclarationObserver::$suppressEmail = true;
|
||||
$this->updateDeclarationStatusAndConfirmation($declaration, $type, $mediaIds);
|
||||
|
||||
$emailSent = $this->sendEmailForMessage($declaration, $invitation, $message, $body, $type);
|
||||
|
||||
Reference in New Issue
Block a user