mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-24 02:14:21 -04:00
Working on Invoice Invitations
This commit is contained in:
parent
e898494b72
commit
866111cbbb
41
app/Factory/InvoiceInvitationFactory.php
Normal file
41
app/Factory/InvoiceInvitationFactory.php
Normal file
@ -0,0 +1,41 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com)
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2019. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://opensource.org/licenses/AAL
|
||||
*/
|
||||
|
||||
namespace App\Factory;
|
||||
|
||||
use App\Models\InvoiceInvitation;
|
||||
|
||||
class InvoiceInvitationFactory
|
||||
{
|
||||
|
||||
public static function create(int $company_id, int $user_id) :InvoiceInvitation
|
||||
{
|
||||
$ii = new InvoiceInvitation;
|
||||
$ii->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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
68
app/Jobs/Invitation/MarkOpened.php
Normal file
68
app/Jobs/Invitation/MarkOpened.php
Normal file
@ -0,0 +1,68 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com)
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2019. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://opensource.org/licenses/AAL
|
||||
*/
|
||||
|
||||
namespace App\Jobs\Invitation;
|
||||
|
||||
use App\Models\Invoice;
|
||||
use App\Models\Payment;
|
||||
use App\Repositories\InvoiceRepository;
|
||||
use App\Utils\Traits\NumberFormatter;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
|
||||
class MarkOpened implements ShouldQueue
|
||||
{
|
||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, NumberFormatter;
|
||||
|
||||
public $message_id;
|
||||
|
||||
public $entity;
|
||||
|
||||
/**
|
||||
* Create a new job instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(string $message_id, string $entity)
|
||||
{
|
||||
|
||||
$this->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();
|
||||
|
||||
}
|
||||
}
|
68
app/Mail/BouncedEmail.php
Normal file
68
app/Mail/BouncedEmail.php
Normal file
@ -0,0 +1,68 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com)
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2019. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://opensource.org/licenses/AAL
|
||||
*/
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
|
||||
class BouncedEmail extends Mailable implements ShouldQueue
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
public $invitation;
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($invitation)
|
||||
{
|
||||
$this->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');
|
||||
*/
|
||||
}
|
||||
}
|
@ -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
|
||||
*/
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user