diff --git a/app/Events/Vendor/VendorContactLoggedIn.php b/app/Events/Vendor/VendorContactLoggedIn.php new file mode 100644 index 000000000000..2422af1023a5 --- /dev/null +++ b/app/Events/Vendor/VendorContactLoggedIn.php @@ -0,0 +1,45 @@ +save(); auth()->guard('vendor')->loginUsingId($vendor_contact->id, true); + + event(new VendorContactLoggedIn($vendor_contact, $vendor_contact->company, Ninja::eventVars())); if ($request->query('redirect') && ! empty($request->query('redirect'))) { return redirect()->to($request->query('redirect')); @@ -72,7 +76,7 @@ class VendorContactKeyLogin $vendor_contact->save(); auth()->guard('vendor')->loginUsingId($vendor_contact->id, true); - + event(new VendorContactLoggedIn($vendor_contact, $vendor_contact->company, Ninja::eventVars())); if ($request->query('next')) { return redirect()->to($request->query('next')); } diff --git a/app/Listeners/Vendor/UpdateVendorContactLastLogin.php b/app/Listeners/Vendor/UpdateVendorContactLastLogin.php new file mode 100644 index 000000000000..272b7144b1f7 --- /dev/null +++ b/app/Listeners/Vendor/UpdateVendorContactLastLogin.php @@ -0,0 +1,45 @@ +company->db); + + $contact = $event->contact; + + $contact->last_login = now(); + $contact->vendor->last_login = now(); + + $contact->push(); + } +} diff --git a/app/Models/Vendor.php b/app/Models/Vendor.php index b49cdf4502fe..d72061bad7fa 100644 --- a/app/Models/Vendor.php +++ b/app/Models/Vendor.php @@ -152,6 +152,7 @@ class Vendor extends BaseModel 'updated_at' => 'timestamp', 'created_at' => 'timestamp', 'deleted_at' => 'timestamp', + 'last_login' => 'timestamp', ]; protected $touches = []; diff --git a/app/Models/VendorContact.php b/app/Models/VendorContact.php index 91201af7a357..2e2da098504c 100644 --- a/app/Models/VendorContact.php +++ b/app/Models/VendorContact.php @@ -106,6 +106,7 @@ class VendorContact extends Authenticatable implements HasLocalePreference 'updated_at' => 'timestamp', 'created_at' => 'timestamp', 'deleted_at' => 'timestamp', + 'last_login' => 'timestamp', ]; protected $fillable = [ diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 5e8f8d60876c..d83f5602c8f3 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -70,13 +70,13 @@ use App\Events\Quote\QuoteWasRestored; use App\Events\Client\ClientWasCreated; use App\Events\Client\ClientWasDeleted; use App\Events\Client\ClientWasUpdated; -use App\Events\Design\DesignWasDeleted; -use App\Events\Design\DesignWasUpdated; use App\Events\Contact\ContactLoggedIn; use App\Events\Credit\CreditWasCreated; use App\Events\Credit\CreditWasDeleted; use App\Events\Credit\CreditWasEmailed; use App\Events\Credit\CreditWasUpdated; +use App\Events\Design\DesignWasDeleted; +use App\Events\Design\DesignWasUpdated; use App\Events\Vendor\VendorWasCreated; use App\Events\Vendor\VendorWasDeleted; use App\Events\Vendor\VendorWasUpdated; @@ -85,10 +85,10 @@ use App\Observers\SubscriptionObserver; use Illuminate\Mail\Events\MessageSent; use App\Events\Client\ClientWasArchived; use App\Events\Client\ClientWasRestored; -use App\Events\Design\DesignWasRestored; use App\Events\Credit\CreditWasArchived; use App\Events\Credit\CreditWasRestored; use App\Events\Design\DesignWasArchived; +use App\Events\Design\DesignWasRestored; use App\Events\Invoice\InvoiceWasViewed; use App\Events\Misc\InvitationWasViewed; use App\Events\Payment\PaymentWasVoided; @@ -133,6 +133,7 @@ use App\Listeners\User\UpdateUserLastLogin; use App\Events\Document\DocumentWasArchived; use App\Events\Document\DocumentWasRestored; use App\Events\Invoice\InvoiceWasMarkedSent; +use App\Events\Vendor\VendorContactLoggedIn; use App\Listeners\Quote\QuoteViewedActivity; use App\Listeners\User\ArchivedUserActivity; use App\Listeners\User\RestoredUserActivity; @@ -220,6 +221,7 @@ use App\Listeners\Invoice\InvoiceEmailFailedActivity; use App\Events\PurchaseOrder\PurchaseOrderWasAccepted; use App\Events\PurchaseOrder\PurchaseOrderWasArchived; use App\Events\PurchaseOrder\PurchaseOrderWasRestored; +use App\Listeners\Vendor\UpdateVendorContactLastLogin; use App\Events\RecurringQuote\RecurringQuoteWasCreated; use App\Events\RecurringQuote\RecurringQuoteWasDeleted; use App\Events\RecurringQuote\RecurringQuoteWasUpdated; @@ -615,6 +617,9 @@ class EventServiceProvider extends ServiceProvider VendorWasUpdated::class => [ VendorUpdatedActivity::class, ], + VendorContactLoggedIn::class => [ + UpdateVendorContactLastLogin::class, + ], \SocialiteProviders\Manager\SocialiteWasCalled::class => [ // ... Manager won't register drivers that are not added to this listener. \SocialiteProviders\Apple\AppleExtendSocialite::class.'@handle', diff --git a/app/Transformers/VendorContactTransformer.php b/app/Transformers/VendorContactTransformer.php index d06996c0100f..39f4d60d0e6e 100644 --- a/app/Transformers/VendorContactTransformer.php +++ b/app/Transformers/VendorContactTransformer.php @@ -44,6 +44,7 @@ class VendorContactTransformer extends EntityTransformer 'custom_value3' => $vendor->custom_value3 ?: '', 'custom_value4' => $vendor->custom_value4 ?: '', 'link' => $vendor->getLoginLink(), + 'last_login' => 'timestamp', ]; } } diff --git a/tests/Feature/VendorApiTest.php b/tests/Feature/VendorApiTest.php index 2127a996576f..d103afc5c1b8 100644 --- a/tests/Feature/VendorApiTest.php +++ b/tests/Feature/VendorApiTest.php @@ -11,13 +11,15 @@ namespace Tests\Feature; +use Tests\TestCase; +use App\Utils\Ninja; +use Tests\MockAccountData; use App\Utils\Traits\MakesHash; use Illuminate\Database\Eloquent\Model; -use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Support\Facades\Session; +use App\Events\Vendor\VendorContactLoggedIn; use Illuminate\Validation\ValidationException; -use Tests\MockAccountData; -use Tests\TestCase; +use Illuminate\Foundation\Testing\DatabaseTransactions; /** * @test @@ -44,6 +46,34 @@ class VendorApiTest extends TestCase Model::reguard(); } + public function testVendorLoggedInEvents() + { + $v = \App\Models\Vendor::factory()->create([ + 'user_id' => $this->user->id, + 'company_id' => $this->company->id + ]); + + $vc = \App\Models\VendorContact::factory()->create([ + 'user_id' => $this->user->id, + 'company_id' => $this->company->id, + 'vendor_id' => $v->id + ]); + + $this->assertNull($v->last_login); + $this->assertNull($vc->last_login); + + event(new VendorContactLoggedIn($vc, $this->company, Ninja::eventVars())); + + $this->expectsEvents([VendorContactLoggedIn::class]); + + // $vc->fresh(); + // $v->fresh(); + + // $this->assertNotNull($vc->fresh()->last_login); + // $this->assertNotNull($v->fresh()->last_login); + + } + public function testVendorLocale() { $v = \App\Models\Vendor::factory()->create([