mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-06-01 04:04:47 -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;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use App\Models\Invoice;
|
||||||
use App\Utils\Traits\MakesDates;
|
use App\Utils\Traits\MakesDates;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
@ -23,6 +24,11 @@ class InvoiceInvitation extends BaseModel
|
|||||||
'id',
|
'id',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
public function entityType()
|
||||||
|
{
|
||||||
|
return Invoice::class;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
|
@ -13,10 +13,13 @@ namespace App\Repositories;
|
|||||||
|
|
||||||
use App\Events\Invoice\InvoiceWasCreated;
|
use App\Events\Invoice\InvoiceWasCreated;
|
||||||
use App\Events\Invoice\InvoiceWasUpdated;
|
use App\Events\Invoice\InvoiceWasUpdated;
|
||||||
|
use App\Factory\InvoiceInvitationFactory;
|
||||||
use App\Helpers\Invoice\InvoiceCalc;
|
use App\Helpers\Invoice\InvoiceCalc;
|
||||||
use App\Jobs\Company\UpdateCompanyLedgerWithInvoice;
|
use App\Jobs\Company\UpdateCompanyLedgerWithInvoice;
|
||||||
use App\Models\Invoice;
|
use App\Models\Invoice;
|
||||||
|
use App\Models\InvoiceInvitation;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* InvoiceRepository
|
* InvoiceRepository
|
||||||
@ -82,10 +85,48 @@ class InvoiceRepository extends BaseRepository
|
|||||||
|
|
||||||
$invoice->status_id = Invoice::STATUS_SENT;
|
$invoice->status_id = Invoice::STATUS_SENT;
|
||||||
|
|
||||||
|
$this->markInvitationsSent();
|
||||||
|
|
||||||
$invoice->save();
|
$invoice->save();
|
||||||
|
|
||||||
return $invoice;
|
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