diff --git a/app/Factory/CloneQuoteToInvoiceFactory.php b/app/Factory/CloneQuoteToInvoiceFactory.php index 6dcb2a3439c0..e0987fc3fed9 100644 --- a/app/Factory/CloneQuoteToInvoiceFactory.php +++ b/app/Factory/CloneQuoteToInvoiceFactory.php @@ -26,6 +26,7 @@ class CloneQuoteToInvoiceFactory unset($quote_array['client']); unset($quote_array['company']); unset($quote_array['hashed_id']); + unset($quote_array['invoice_id']); unset($quote_array['id']); foreach($quote_array as $key => $value) diff --git a/app/Helpers/Mail/GmailTransport.php b/app/Helpers/Mail/GmailTransport.php index e1c600abe5a4..c39723124bbc 100644 --- a/app/Helpers/Mail/GmailTransport.php +++ b/app/Helpers/Mail/GmailTransport.php @@ -62,8 +62,14 @@ class GmailTransport extends Transport $this->gmail->cc($message->getCc()); $this->gmail->bcc($message->getBcc()); +\Log::error(print_r($message->getChildren(),1)); + + foreach($message->getChildren() as $child) + $this->gmail->attach($child); //todo this should 'just work' + $this->gmail->send(); + $this->sendPerformed($message); return $this->numberOfRecipients($message); diff --git a/app/Http/Controllers/EmailController.php b/app/Http/Controllers/EmailController.php index df326868905e..c40b2a4804c1 100644 --- a/app/Http/Controllers/EmailController.php +++ b/app/Http/Controllers/EmailController.php @@ -14,7 +14,7 @@ namespace App\Http\Controllers; use App\Helpers\Email\InvoiceEmail; use App\Http\Requests\Email\SendEmailRequest; use App\Jobs\Invoice\EmailInvoice; -use App\Jobs\Mail\EntityMailer; +use App\Jobs\Mail\EntitySentMailer; use App\Models\Credit; use App\Models\Invoice; use App\Models\Quote; @@ -122,7 +122,7 @@ class EmailController extends BaseController $invitation->contact->notify((new SendGenericNotification($invitation, $entity_string, $subject, $body))->delay($when)); - EntityMailer::dispatch($invitation, $entity_string, $entity_obj->user, $invitation->company); + EntitySentMailer::dispatch($invitation, $entity_string, $entity_obj->user, $invitation->company); } diff --git a/app/Jobs/Mail/EntityMailer.php b/app/Jobs/Mail/EntitySentMailer.php similarity index 90% rename from app/Jobs/Mail/EntityMailer.php rename to app/Jobs/Mail/EntitySentMailer.php index 65e9b40f0782..55b307155e72 100644 --- a/app/Jobs/Mail/EntityMailer.php +++ b/app/Jobs/Mail/EntitySentMailer.php @@ -18,7 +18,7 @@ use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Mail; -class EntityMailer extends BaseMailerJob implements ShouldQueue +class EntitySentMailer extends BaseMailerJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; @@ -56,6 +56,7 @@ class EntityMailer extends BaseMailerJob implements ShouldQueue */ public function handle() { + info("entity sent mailer"); //Set DB MultiDB::setDb($this->company->db); @@ -63,8 +64,8 @@ class EntityMailer extends BaseMailerJob implements ShouldQueue $this->setMailDriver($this->entity->client->getSetting('email_sending_method')); $mail_obj = (new EntitySentObject($this->invitation, $this->entity_type))->build(); - $mail_obj->from = $this->entity->user->present()->name(); - + $mail_obj->from = [$this->entity->user->email, $this->entity->user->present()->name()]; + //send email Mail::to($this->user->email) ->send(new EntityNotificationMailer($mail_obj)); diff --git a/app/Jobs/Mail/EntityViewedMailer.php b/app/Jobs/Mail/EntityViewedMailer.php new file mode 100644 index 000000000000..c5fd76e36dd4 --- /dev/null +++ b/app/Jobs/Mail/EntityViewedMailer.php @@ -0,0 +1,94 @@ +company = $company; + + $this->user = $user; + + $this->invitation = $invitation; + + $this->entity = $invitation->{$entity_type}; + + $this->entity_type = $entity_type; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + + info("entity viewed mailer"); + + //Set DB + MultiDB::setDb($this->company->db); + + //if we need to set an email driver do it now + $this->setMailDriver($this->entity->client->getSetting('email_sending_method')); + + $mail_obj = (new EntityViewedObject($this->invitation, $this->entity_type))->build(); + $mail_obj->from = [$this->entity->user->email, $this->entity->user->present()->name()]; + + //send email + Mail::to($this->user->email) + ->send(new EntityNotificationMailer($mail_obj)); + + //catch errors + if (count(Mail::failures()) > 0) { + $this->logMailError(Mail::failures()); + } + + } + + private function logMailError($errors) + { + SystemLogger::dispatch( + $errors, + SystemLog::CATEGORY_MAIL, + SystemLog::EVENT_MAIL_SEND, + SystemLog::TYPE_FAILURE, + $this->invoice->client + ); + } + + +} diff --git a/app/Listeners/Invoice/InvoiceEmailedNotification.php b/app/Listeners/Invoice/InvoiceEmailedNotification.php index 58e3bd15bd7f..aa1490387c8b 100644 --- a/app/Listeners/Invoice/InvoiceEmailedNotification.php +++ b/app/Listeners/Invoice/InvoiceEmailedNotification.php @@ -11,6 +11,7 @@ namespace App\Listeners\Invoice; +use App\Jobs\Mail\EntitySentMailer; use App\Models\Activity; use App\Models\ClientContact; use App\Models\InvoiceInvitation; @@ -57,7 +58,7 @@ class InvoiceEmailedNotification implements ShouldQueue //This allows us better control of how we //handle the mailer - EntityMailer::dispatch($invitation, 'invoice', $user, $invitation->company); + EntitySentMailer::dispatch($invitation, 'invoice', $user, $invitation->company); } $notification->method = $methods; diff --git a/app/Listeners/Misc/InvitationViewedListener.php b/app/Listeners/Misc/InvitationViewedListener.php index ce677f01a8c0..2b517a5d4c34 100644 --- a/app/Listeners/Misc/InvitationViewedListener.php +++ b/app/Listeners/Misc/InvitationViewedListener.php @@ -11,7 +11,7 @@ namespace App\Listeners\Misc; -use App\Jobs\Mail\EntityMailer; +use App\Jobs\Mail\EntityViewedMailer; use App\Notifications\Admin\EntityViewedNotification; use App\Utils\Traits\Notifications\UserNotifies; use Illuminate\Contracts\Queue\ShouldQueue; @@ -53,11 +53,8 @@ class InvitationViewedListener implements ShouldQueue if (($key = array_search('mail', $methods)) !== false) { unset($methods[$key]); - //Fire mail notification here!!! - //This allows us better control of how we - //handle the mailer + EntityViewedMailer::dispatch($invitation, $entity_name, $company_user->user, $invitation->company); - EntityMailer::dispatch($invitation, 'invoice', $user, $invitation->company); } $notification->method = $methods; diff --git a/app/Mail/Admin/EntityNotificationMailer.php b/app/Mail/Admin/EntityNotificationMailer.php index b34350e25fe2..6b077651518c 100644 --- a/app/Mail/Admin/EntityNotificationMailer.php +++ b/app/Mail/Admin/EntityNotificationMailer.php @@ -36,9 +36,9 @@ class EntityNotificationMailer extends Mailable */ public function build() { - return $this->from($this->mail_obj->from) //todo + return $this->from($this->mail_obj->from[0], $this->mail_obj->from[1]) //todo ->subject($this->mail_obj->subject) - ->markdown($this->mail_obj->markdown, ['data' => $this->mail_obj->data]) + ->markdown($this->mail_obj->markdown, $this->mail_obj->data) ->withSwiftMessage(function ($message) { $message->getHeaders()->addTextHeader('Tag', $this->mail_obj->tag); }); diff --git a/app/Mail/Admin/EntitySentObject.php b/app/Mail/Admin/EntitySentObject.php index 6cb893df02e9..ef5506d175c1 100644 --- a/app/Mail/Admin/EntitySentObject.php +++ b/app/Mail/Admin/EntitySentObject.php @@ -71,7 +71,7 @@ class EntitySentObject $settings = $this->entity->client->getMergedSettings(); - $data = [ + return [ 'title' => $this->getSubject(), 'message' => ctrans( "texts.notification_{$this->entity_type}_sent", @@ -87,6 +87,5 @@ class EntitySentObject 'logo' => $this->company->present()->logo(), ]; - return $data; } } \ No newline at end of file diff --git a/app/Utils/Traits/Notifications/UserNotifies.php b/app/Utils/Traits/Notifications/UserNotifies.php index a97d35c6370a..264cf6357e22 100644 --- a/app/Utils/Traits/Notifications/UserNotifies.php +++ b/app/Utils/Traits/Notifications/UserNotifies.php @@ -30,7 +30,7 @@ trait UserNotifies array_push($required_permissions, "all_user_notifications"); } - if (count(array_intersect($required_permissions, $notifications->email)) >=1) { + if (count(array_intersect($required_permissions, $notifications->email)) >=1 || count(array_intersect($required_permissions, "all_user_notifications")) >=1 || count(array_intersect($required_permissions, "all_notifications")) >=1) { array_push($notifiable_methods, 'mail'); } @@ -54,7 +54,7 @@ trait UserNotifies array_push($required_permissions, "all_user_notifications"); } - if (count(array_intersect($required_permissions, $notifications->email)) >=1) { + if (count(array_intersect($required_permissions, $notifications->email)) >=1 || count(array_intersect($required_permissions, "all_user_notifications")) >=1 || count(array_intersect($required_permissions, "all_notifications")) >=1) { array_push($notifiable_methods, 'mail'); }