diff --git a/app/Events/Invoice/InvoiceWasViewed.php b/app/Events/Invoice/InvoiceWasViewed.php new file mode 100644 index 000000000000..34c26c4733b0 --- /dev/null +++ b/app/Events/Invoice/InvoiceWasViewed.php @@ -0,0 +1,44 @@ +invitation = $invitation; + $this->company = $company; + $this->event_vars = $event_vars; + } +} diff --git a/app/Http/Controllers/ClientPortal/InvitationController.php b/app/Http/Controllers/ClientPortal/InvitationController.php index 8061672d3c61..8453e788f76c 100644 --- a/app/Http/Controllers/ClientPortal/InvitationController.php +++ b/app/Http/Controllers/ClientPortal/InvitationController.php @@ -11,6 +11,7 @@ namespace App\Http\Controllers\ClientPortal; +use App\Events\Invoice\InvoiceWasViewed; use App\Events\Misc\InvitationWasViewed; use App\Http\Controllers\Controller; use App\Models\InvoiceInvitation; @@ -39,6 +40,7 @@ class InvitationController extends Controller $invitation = $entity_obj::whereRaw("BINARY `key`= ?", [$invitation_key])->first(); if ($invitation) { + if ((bool)$invitation->contact->client->getSetting('enable_client_portal_password') !== false) { $this->middleware('auth:contact'); } else { @@ -51,6 +53,8 @@ class InvitationController extends Controller $invitation->markViewed(); event(new InvitationWasViewed($invitation->{$entity}, $invitation, $invitation->{$entity}->company, Ninja::eventVars())); + + $this->fireEntityViewedEvent($invitation->{$entity}, $entity); } return redirect()->route('client.'.$entity.'.show', [$entity => $this->encodePrimaryKey($invitation->{$key})]); @@ -59,6 +63,20 @@ class InvitationController extends Controller } } + private function fireEntityViewedEvent($invitation, $entity_string) + { + + switch ($entity_string) { + case 'invoice': + event(new InvoiceWasViewed($invitation, $invitation->company, Ninja::eventVars())); + break; + + default: + # code... + break; + } + } + public function routerForDownload(string $entity, string $invitation_key) { return redirect('client/'.$entity.'/'.$invitation_key.'/download_pdf'); diff --git a/app/Listeners/Invoice/InvoiceViewedActivity.php b/app/Listeners/Invoice/InvoiceViewedActivity.php new file mode 100644 index 000000000000..c3b0e52efecd --- /dev/null +++ b/app/Listeners/Invoice/InvoiceViewedActivity.php @@ -0,0 +1,59 @@ +activity_repo = $activity_repo; + } + + /** + * Handle the event. + * + * @param object $event + * @return void + */ + public function handle($event) + { + MultiDB::setDb($event->company->db); + + $fields = new \stdClass; + + $fields->user_id = $event->invoice->user_id; + $fields->company_id = $event->invoice->company_id; + $fields->activity_type_id = Activity::VIEW_INVOICE; + $fields->client_id = $event->invitation->client_id; + $fields->client_contact_id = $event->invitation->client_contact_id; + $fields->invitation_id = $event->invitation->id; + $fields->invoice_id = $event->invitation->invoice_id; + + $this->activity_repo->save($fields, $event->invoice, $event->event_vars); + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 86e13b666212..ff955841ca74 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -32,6 +32,7 @@ use App\Events\Invoice\InvoiceWasMarkedSent; use App\Events\Invoice\InvoiceWasPaid; use App\Events\Invoice\InvoiceWasReversed; use App\Events\Invoice\InvoiceWasUpdated; +use App\Events\Invoice\InvoiceWasViewed; use App\Events\Misc\InvitationWasViewed; use App\Events\Payment\PaymentWasCreated; use App\Events\Payment\PaymentWasDeleted; @@ -59,6 +60,7 @@ use App\Listeners\Invoice\InvoiceDeletedActivity; use App\Listeners\Invoice\InvoiceEmailActivity; use App\Listeners\Invoice\InvoiceEmailFailedActivity; use App\Listeners\Invoice\InvoiceEmailedNotification; +use App\Listeners\Invoice\InvoiceViewedActivity; use App\Listeners\Invoice\UpdateInvoiceActivity; use App\Listeners\Invoice\UpdateInvoiceInvitations; use App\Listeners\Misc\InvitationViewedListener; @@ -159,6 +161,9 @@ class EventServiceProvider extends ServiceProvider InvoiceWasPaid::class => [ CreateInvoiceHtmlBackup::class, ], + InvoiceWasViewed::class = [ + InvoiceViewedActivity::class, + ], InvoiceWasEmailed::class => [ InvoiceEmailActivity::class, InvoiceEmailedNotification::class,