diff --git a/app/Factory/InvoiceInvitationFactory.php b/app/Factory/InvoiceInvitationFactory.php new file mode 100644 index 000000000000..3156cc451ee5 --- /dev/null +++ b/app/Factory/InvoiceInvitationFactory.php @@ -0,0 +1,41 @@ + company_id = $company_id; + $ii->user_id = $user_id; + $ii->client_contact_id = null; + $ii->invoice_id = null; + $ii->invitation_key = str_random(config('ninja.key_length')); + $ii->transaction_reference = null; + $ii->message_id = null; + $ii->email_error = ''; + $ii->signature_base64 = ''; + $ii->signature_date = null; + $ii->sent_date = null; + $ii->viewed_date = null; + $ii->opened_date = null; + + return $ii; + } + +} + + \ No newline at end of file diff --git a/app/Jobs/Invitation/MarkOpened.php b/app/Jobs/Invitation/MarkOpened.php new file mode 100644 index 000000000000..239a40d8d6bf --- /dev/null +++ b/app/Jobs/Invitation/MarkOpened.php @@ -0,0 +1,68 @@ +message_id = $message_id; + + $this->entity = $entity; + + } + + /** + * Execute the job. + * + * + * @return void + */ + public function handle() + { + $invitation = $this->entity::with('user', 'contact') + ->whereMessageId($this->message_id) + ->first(); + + if (! $invitation) { + return false; + } + + $invitation->email_error = $error; + $invitation->save(); + + } +} diff --git a/app/Mail/BouncedEmail.php b/app/Mail/BouncedEmail.php new file mode 100644 index 000000000000..5e4c8e63b9ec --- /dev/null +++ b/app/Mail/BouncedEmail.php @@ -0,0 +1,68 @@ +invitation = $invitation; + } + + /** + * Build the message. + * + * @return $this + */ + public function build() + { + $entity_type = class_basename(lcfirst($this->invitation->getEntityType())); + + $subject = ctrans("texts.notification_{$entity_type}_bounced_subject", ['invoice' => $invoice->invoice_number]); + + return + $this->from($invitation->user->email) + ->text() + ->subject($subject); + + //todo +/* + + + //todo determine WHO is notified!! In this instance the _user_ is notified + + Mail::to($invitation->user->email) + //->cc('') + //->bcc('') + ->queue(new BouncedEmail($invitation)); + */ + return $this->from('turbo124@gmail.com') //todo + ->subject(ctrans('texts.confirmation_subject')) + ->markdown('email.auth.verify', ['user' => $this->user]) + ->text('email.auth.verify_text'); +*/ + } +} diff --git a/app/Models/InvoiceInvitation.php b/app/Models/InvoiceInvitation.php index 0bb78352dd5b..36f67ffdb680 100644 --- a/app/Models/InvoiceInvitation.php +++ b/app/Models/InvoiceInvitation.php @@ -11,6 +11,7 @@ namespace App\Models; +use App\Models\Invoice; use App\Utils\Traits\MakesDates; use Illuminate\Database\Eloquent\Model; @@ -23,6 +24,11 @@ class InvoiceInvitation extends BaseModel 'id', ]; + public function entityType() + { + return Invoice::class; + } + /** * @return mixed */ diff --git a/app/Repositories/InvoiceRepository.php b/app/Repositories/InvoiceRepository.php index f0f7f61409e1..1cd244ce3915 100644 --- a/app/Repositories/InvoiceRepository.php +++ b/app/Repositories/InvoiceRepository.php @@ -13,10 +13,13 @@ namespace App\Repositories; use App\Events\Invoice\InvoiceWasCreated; use App\Events\Invoice\InvoiceWasUpdated; +use App\Factory\InvoiceInvitationFactory; use App\Helpers\Invoice\InvoiceCalc; use App\Jobs\Company\UpdateCompanyLedgerWithInvoice; use App\Models\Invoice; +use App\Models\InvoiceInvitation; use Illuminate\Http\Request; +use Illuminate\Support\Carbon; /** * InvoiceRepository @@ -82,10 +85,48 @@ class InvoiceRepository extends BaseRepository $invoice->status_id = Invoice::STATUS_SENT; + $this->markInvitationsSent(); + $invoice->save(); return $invoice; } + private function markInvitationsSent(Invoice $invoice) :Invoice + { + $invoice->invitations->each(function($invitation, $key) { + $invitation->sent_date = Carbon::now()->format('Y-m-d H:i'); + $invitation->save(); + }); + } + + private function saveInvitations(Invoice $invoice) :Invoice + { + $contact_list = (array)$invoice->settings->invoice_email_list; + + $contacts = ClientContact::findMany($contacts); + + if (! $contacts->count()) { + return $invoice; + } + + $contacts->each(function($contact, $key) use ($invoice){ + + $invitation = InvoiceInvitation::whereClientContactId($contact->id)->whereInvoiceId($invoice->id)->first(); + + if($!invitation){ + $invitation = InvoiceInvitationFactory::create($invoice->company_id, $invoice->user_id); + $invitation->client_contact_id = $contact->id; + $invitation->invoice_id = $invoice->id; + $invitation->save(); + } + + + }); + + + return $invoice; + } + } \ No newline at end of file