diff --git a/app/Jobs/Mail/PaymentFailedMailer.php b/app/Jobs/Mail/PaymentFailedMailer.php index 75c8ef97a568..da316645ae98 100644 --- a/app/Jobs/Mail/PaymentFailedMailer.php +++ b/app/Jobs/Mail/PaymentFailedMailer.php @@ -20,6 +20,7 @@ use App\Mail\Admin\EntityNotificationMailer; use App\Mail\Admin\PaymentFailureObject; use App\Models\Client; use App\Models\Company; +use App\Models\Invoice; use App\Models\PaymentHash; use App\Models\User; use App\Utils\Traits\Notifications\UserNotifies; @@ -75,17 +76,17 @@ class PaymentFailedMailer implements ShouldQueue $settings = $this->client->getMergedSettings(); $amount = 0; + $invoice = false; - if($this->payment_hash) + if($this->payment_hash){ $amount = array_sum(array_column($this->payment_hash->invoices(), 'amount')) + $this->payment_hash->fee_total; + $invoice = Invoice::whereIn('id', $this->transformKeys(array_column($payment_hash->invoices(), 'invoice_id')))->withTrashed()->first(); + } //iterate through company_users - $this->company->company_users->each(function ($company_user) use($amount, $settings){ + $this->company->company_users->each(function ($company_user) use($amount, $settings, $invoice){ - //determine if this user has the right permissions - // $methods = $this->findCompanyUserNotificationType($company_user, ['payment_failure_all','payment_failure','all_notifications']); - - $methods = $this->findUserEntityNotificationType($this->client, $company_user, ['payment_failure_user','payment_failure_all','payment_failure','all_notifications']); + $methods = $this->findUserEntityNotificationType($invoice ?: $this->client, $company_user, ['payment_failure_user', 'payment_failure_all', 'payment_failure', 'all_notifications']); //if mail is a method type -fire mail!! if (($key = array_search('mail', $methods)) !== false) { diff --git a/app/PaymentDrivers/CheckoutCom/Utilities.php b/app/PaymentDrivers/CheckoutCom/Utilities.php index 438453050124..85b7bf0c5da9 100644 --- a/app/PaymentDrivers/CheckoutCom/Utilities.php +++ b/app/PaymentDrivers/CheckoutCom/Utilities.php @@ -85,7 +85,7 @@ trait Utilities public function processUnsuccessfulPayment(Payment $_payment, $throw_exception = true) { $this->getParent()->sendFailureMail($_payment->response_summary); - $this->getParent()->clientPaymentFailureMailer($_payment->status); + // $this->getParent()->clientPaymentFailureMailer($_payment->status); $message = [ 'server_response' => $_payment, diff --git a/app/Utils/Traits/Notifications/UserNotifies.php b/app/Utils/Traits/Notifications/UserNotifies.php index 979c937a5270..24a7b72e8dee 100644 --- a/app/Utils/Traits/Notifications/UserNotifies.php +++ b/app/Utils/Traits/Notifications/UserNotifies.php @@ -11,6 +11,11 @@ namespace App\Utils\Traits\Notifications; +use App\Models\Client; +use App\Models\Invoice; +use App\Models\Payment; +use App\Models\Quote; + /** * Class UserNotifies. * @@ -31,7 +36,7 @@ trait UserNotifies //if a user owns this record or is assigned to it, they are attached the permission for notification. if ($invitation->{$entity_name}->user_id == $company_user->_user_id || $invitation->{$entity_name}->assigned_user_id == $company_user->user_id) { - array_push($required_permissions, 'all_user_notifications'); + $required_permissions = $this->addSpecialUserPermissionForEntity($invitation->{$entity_name}, $required_permissions); } if (count(array_intersect($required_permissions, $notifications->email)) >= 1 || count(array_intersect(['all_user_notifications'], $notifications->email)) >= 1 || count(array_intersect(['all_notifications'],$notifications->email)) >= 1) { @@ -58,17 +63,62 @@ trait UserNotifies } if ($entity->user_id == $company_user->_user_id || $entity->assigned_user_id == $company_user->user_id) { - array_push($required_permissions, 'all_user_notifications'); + $required_permissions = $this->addSpecialUserPermissionForEntity($entity, $required_permissions); + } + else{ + $required_permissions = $this->removeSpecialUserPermissionForEntity($entity, $required_permissions); } if (count(array_intersect($required_permissions, $notifications->email)) >= 1 || count(array_intersect(['all_notifications'],$notifications->email)) >= 1) { array_push($notifiable_methods, 'mail'); } -nlog($notifiable_methods); return $notifiable_methods; } + private function addSpecialUserPermissionForEntity($entity, $required_permissions) + { + switch ($entity) { + case ($entity instanceof Payment || $entity instanceof Client): //we pass client also as this is the proxy for Payment Failures (ie, there is no payment) + return array_push($required_permissions, ["all_user_notifications","payment_failure_user","payment_success_user"]); + break; + case ($entity instanceof Invoice): + return array_push($required_permissions, ["all_user_notifications","invoice_created_user","invoice_sent_user","invoice_viewed_user","invoice_late_user"]); + break; + case ($entity instanceof Quote): + return array_push($required_permissions, ["all_user_notifications","quote_created_user","quote_sent_user","quote_viewed_user","quote_approved_user","quote_expired_user"]); + break; + case ($entity instanceof Credit): + return array_push($required_permissions, ["all_user_notifications","credit_created_user","credit_sent_user","credit_viewed_user"]); + break; + default: + // code... + break; + } + } + + private function removeSpecialUserPermissionForEntity($entity, $required_permissions) + { + switch ($entity) { + case ($entity instanceof Payment || $entity instanceof Client): //we pass client also as this is the proxy for Payment Failures (ie, there is no payment) + return array_diff($required_permissions, ["all_user_notifications","payment_failure_user","payment_success_user"]); + break; + case ($entity instanceof Invoice): + return array_diff($required_permissions, ["all_user_notifications","invoice_created_user","invoice_sent_user","invoice_viewed_user","invoice_late_user"]); + break; + case ($entity instanceof Quote): + return array_diff($required_permissions, ["all_user_notifications","quote_created_user","quote_sent_user","quote_viewed_user","quote_approved_user","quote_expired_user"]); + break; + case ($entity instanceof Credit): + return array_diff($required_permissions, ["all_user_notifications","credit_created_user","credit_sent_user","credit_viewed_user"]); + break; + default: + // code... + break; + } + } + + public function findCompanyUserNotificationType($company_user, $required_permissions) :array {