only send one notification per invoice

This commit is contained in:
David Bomba 2020-07-14 19:55:28 +10:00
parent 00a3d36fcd
commit fe4885f5a6
16 changed files with 29 additions and 22 deletions

View File

@ -122,11 +122,15 @@ class EmailController extends BaseController
$invitation->contact->notify((new SendGenericNotification($invitation, $entity_string, $subject, $body))->delay($when)); $invitation->contact->notify((new SendGenericNotification($invitation, $entity_string, $subject, $body))->delay($when));
EntitySentMailer::dispatch($invitation, $entity_string, $entity_obj->user, $invitation->company);
} }
}); });
/*Only notify the admin ONCE, not once per contact/invite*/
$invitation = $entity_obj->invitations->first();
EntitySentMailer::dispatch($invitation, $entity_string, $entity_obj->user, $invitation->company);
if ($this instanceof Invoice) { if ($this instanceof Invoice) {
$this->entity_type = Invoice::class ; $this->entity_type = Invoice::class ;

View File

@ -62,8 +62,13 @@ class SetupController extends Controller
$mail_driver = 'log'; $mail_driver = 'log';
} }
$url = $request->input('url');
if(substr($url, -1) != '/')
$url = $url . '/';
$_ENV['APP_KEY'] = config('app.key'); $_ENV['APP_KEY'] = config('app.key');
$_ENV['APP_URL'] = $request->input('url'); $_ENV['APP_URL'] = $url;
$_ENV['APP_DEBUG'] = $request->input('debug') ? 'true' : 'false'; $_ENV['APP_DEBUG'] = $request->input('debug') ? 'true' : 'false';
$_ENV['REQUIRE_HTTPS'] = $request->input('https') ? 'true' : 'false'; $_ENV['REQUIRE_HTTPS'] = $request->input('https') ? 'true' : 'false';
$_ENV['DB_TYPE'] = 'mysql'; $_ENV['DB_TYPE'] = 'mysql';

View File

@ -56,7 +56,6 @@ class EntitySentMailer extends BaseMailerJob implements ShouldQueue
*/ */
public function handle() public function handle()
{ {
info("entity sent mailer");
//Set DB //Set DB
MultiDB::setDb($this->company->db); MultiDB::setDb($this->company->db);

View File

@ -57,8 +57,6 @@ class EntityViewedMailer extends BaseMailerJob implements ShouldQueue
public function handle() public function handle()
{ {
info("entity viewed mailer");
//Set DB //Set DB
MultiDB::setDb($this->company->db); MultiDB::setDb($this->company->db);

View File

@ -44,6 +44,7 @@ class InvoiceEmailedNotification implements ShouldQueue
{ {
MultiDB::setDb($event->company->db); MultiDB::setDb($event->company->db);
$first_notification_sent = true;
foreach ($invitation->company->company_users as $company_user) { foreach ($invitation->company->company_users as $company_user) {
@ -53,7 +54,7 @@ class InvoiceEmailedNotification implements ShouldQueue
$methods = $this->findUserNotificationTypes($invitation, $company_user, 'invoice', ['all_notifications', 'invoice_sent']); $methods = $this->findUserNotificationTypes($invitation, $company_user, 'invoice', ['all_notifications', 'invoice_sent']);
if (($key = array_search('mail', $methods)) !== false) { if (($key = array_search('mail', $methods)) !== false && $first_notification_sent === true) {
unset($methods[$key]); unset($methods[$key]);
//Fire mail notification here!!! //Fire mail notification here!!!
@ -61,6 +62,8 @@ class InvoiceEmailedNotification implements ShouldQueue
//handle the mailer //handle the mailer
EntitySentMailer::dispatch($invitation, 'invoice', $user, $invitation->company); EntitySentMailer::dispatch($invitation, 'invoice', $user, $invitation->company);
$first_notification_sent = false;
} }
$notification->method = $methods; $notification->method = $methods;

View File

@ -46,7 +46,6 @@ class InvitationViewedListener implements ShouldQueue
$invitation = $event->invitation; $invitation = $event->invitation;
$notification = new EntityViewedNotification($invitation, $entity_name); $notification = new EntityViewedNotification($invitation, $entity_name);
$notification_not_fired_yet = true;
foreach ($invitation->company->company_users as $company_user) { foreach ($invitation->company->company_users as $company_user) {
@ -54,11 +53,10 @@ class InvitationViewedListener implements ShouldQueue
$methods = $this->findUserNotificationTypes($invitation, $company_user, $entity_name, ['all_notifications', $entity_viewed]); $methods = $this->findUserNotificationTypes($invitation, $company_user, $entity_name, ['all_notifications', $entity_viewed]);
if (($key = array_search('mail', $methods)) !== false && $notification_not_fired_yet) { if (($key = array_search('mail', $methods)) !== false) {
unset($methods[$key]); unset($methods[$key]);
EntityViewedMailer::dispatch($invitation, $entity_name, $company_user->user, $invitation->company); EntityViewedMailer::dispatch($invitation, $entity_name, $company_user->user, $invitation->company);
$notification_not_fired_yet = false;
} }

View File

@ -126,8 +126,6 @@ class InvoiceInvitation extends BaseModel
public function markViewed() public function markViewed()
{ {
info('marking viewed here');
$this->viewed_date = Carbon::now(); $this->viewed_date = Carbon::now();
$this->save(); $this->save();
} }

View File

@ -85,7 +85,7 @@ class InvoiceSentNotification extends Notification implements ShouldQueue
'invoice' => $this->invoice->number, 'invoice' => $this->invoice->number,
] ]
), ),
'url' => config('ninja.app_url') . '/invoices/' . $this->invoice->hashed_id, 'url' => config('ninja.app_url') . 'invoices/' . $this->invoice->hashed_id,
'button' => ctrans('texts.view_invoice'), 'button' => ctrans('texts.view_invoice'),
'signature' => $this->settings->email_signature, 'signature' => $this->settings->email_signature,
'logo' => $this->company->present()->logo(), 'logo' => $this->company->present()->logo(),

View File

@ -85,7 +85,7 @@ class InvoiceViewedNotification extends Notification implements ShouldQueue
'invoice' => $this->invoice->number, 'invoice' => $this->invoice->number,
] ]
), ),
'url' => config('ninja.app_url') . '/invoices/' . $this->invoice->hashed_id, 'url' => config('ninja.app_url') . 'invoices/' . $this->invoice->hashed_id,
'button' => ctrans('texts.view_invoice'), 'button' => ctrans('texts.view_invoice'),
'signature' => $this->settings->email_signature, 'signature' => $this->settings->email_signature,
'logo' => $this->company->present()->logo(), 'logo' => $this->company->present()->logo(),

View File

@ -83,7 +83,7 @@ class NewPartialPaymentNotification extends Notification implements ShouldQueue
'invoice' => $invoice_texts, 'invoice' => $invoice_texts,
] ]
), ),
'url' => config('ninja.app_url') . '/payments/' . $this->payment->hashed_id, 'url' => config('ninja.app_url') . 'payments/' . $this->payment->hashed_id,
'button' => ctrans('texts.view_payment'), 'button' => ctrans('texts.view_payment'),
'signature' => $this->settings->email_signature, 'signature' => $this->settings->email_signature,
'logo' => $this->company->present()->logo(), 'logo' => $this->company->present()->logo(),

View File

@ -86,7 +86,7 @@ class NewPaymentNotification extends Notification implements ShouldQueue
'invoice' => $invoice_texts, 'invoice' => $invoice_texts,
] ]
), ),
'url' => config('ninja.app_url') . '/payments/' . $this->payment->hashed_id, 'url' => config('ninja.app_url') . 'payments/' . $this->payment->hashed_id,
'button' => ctrans('texts.view_payment'), 'button' => ctrans('texts.view_payment'),
'signature' => $this->settings->email_signature, 'signature' => $this->settings->email_signature,
'logo' => $this->company->present()->logo(), 'logo' => $this->company->present()->logo(),

View File

@ -496,7 +496,8 @@ class HtmlEngine
*/ */
public function generateAppUrl() public function generateAppUrl()
{ {
return rtrim(config('ninja.app_url'), "/"); //return rtrim(config('ninja.app_url'), "/");
return config('ninja.app_url');
} }
/** /**

View File

@ -749,7 +749,8 @@ trait MakesInvoiceValues
*/ */
public function generateAppUrl() public function generateAppUrl()
{ {
return rtrim(config('ninja.app_url'), "/"); //return rtrim(config('ninja.app_url'), "/");
return config('ninja.app_url');
} }
/** /**

View File

@ -36,7 +36,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.4.1/css/simple-line-icons.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.4.1/css/simple-line-icons.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">
<link rel="canonical" href="{{ config('ninja.app_url') }}/{{ request()->path() }}"/> <link rel="canonical" href="{{ config('ninja.app_url') }}{{ request()->path() }}"/>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>

View File

@ -35,7 +35,7 @@
<meta property="og:site_name" content="Invoice Ninja"/> <meta property="og:site_name" content="Invoice Ninja"/>
<meta property="og:url" content="{{ config('ninja.app_url') }}"/> <meta property="og:url" content="{{ config('ninja.app_url') }}"/>
<meta property="og:title" content="Invoice Ninja"/> <meta property="og:title" content="Invoice Ninja"/>
<meta property="og:image" content="{{ config('ninja.app_url') }}/images/logo.png"/> <meta property="og:image" content="{{ config('ninja.app_url') }}images/logo.png"/>
<meta property="og:description" content="Create. Send. Get Paid."/> <meta property="og:description" content="Create. Send. Get Paid."/>
--/> --/>
<!-- http://realfavicongenerator.net --> <!-- http://realfavicongenerator.net -->
@ -57,7 +57,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.4.1/css/simple-line-icons.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.4.1/css/simple-line-icons.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">
<link rel="canonical" href="{{ config('ninja.app_url') }}/{{ request()->path() }}"/> <link rel="canonical" href="{{ config('ninja.app_url') }}{{ request()->path() }}"/>
<link rel="stylesheet" href="{{ mix('/css/ninja.min.css') }}"> <link rel="stylesheet" href="{{ mix('/css/ninja.min.css') }}">
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>

View File

@ -54,7 +54,7 @@
<link href="{{ mix('css/app.css') }}" rel="stylesheet"> <link href="{{ mix('css/app.css') }}" rel="stylesheet">
{{-- <link href="{{ mix('favicon.png') }}" rel="shortcut icon" type="image/png"> --}} {{-- <link href="{{ mix('favicon.png') }}" rel="shortcut icon" type="image/png"> --}}
<link rel="canonical" href="{{ config('ninja.app_url') }}/{{ request()->path() }}"/> <link rel="canonical" href="{{ config('ninja.app_url') }}{{ request()->path() }}"/>
{{-- Feel free to push anything to header using @push('header') --}} {{-- Feel free to push anything to header using @push('header') --}}
@stack('head') @stack('head')