Create or Update invitations on invoice save / creation

This commit is contained in:
David Bomba 2019-09-23 13:10:51 +10:00
parent 3860e770f6
commit 308406c0fb
7 changed files with 71 additions and 52 deletions

View File

@ -0,0 +1,60 @@
<?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\Listeners\Invoice;
use App\Factory\InvoiceInvitationFactory;
use App\Models\InvoiceInvitation;
use App\Utils\Traits\MakesHash;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use Spatie\Browsershot\Browsershot;
use Symfony\Component\Debug\Exception\FatalThrowableError;
class CreateInvoiceInvitation implements ShouldQueue
{
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle($event)
{
$invoice = $event->invoice;
$contacts = $invoice->client->contacts;
$contacts->each(function ($contact) use($invoice){
$invitation = InvoiceInvitation::whereCompanyId($invoice->company_id)
->whereClientContactId($contact->id)
->whereInvoiceId($invoice->id)
->first();
if(!$invitation && $contact->send_invoice) {
$ii = InvoiceInvitationFactory::create($invoice->company_id, $invoice->user_id);
$ii->invoice_id = $invoice->id;
$ii->client_contact_id = $contact->id;
$ii->save();
}
else if($invitation && !$contact->send_invoice) {
$invitation->delete();
}
});
}
}

View File

@ -23,7 +23,7 @@ use App\Listeners\Activity\CreatedClientActivity;
use App\Listeners\Activity\PaymentCreatedActivity;
use App\Listeners\Contact\UpdateContactLastLogin;
use App\Listeners\Invoice\CreateInvoiceActivity;
use App\Listeners\Invoice\CreateInvoiceInvitations;
use App\Listeners\Invoice\CreateInvoiceInvitation;
use App\Listeners\Invoice\CreateInvoicePdf;
use App\Listeners\Invoice\UpdateInvoiceActivity;
use App\Listeners\SendVerificationNotification;
@ -73,7 +73,7 @@ class EventServiceProvider extends ServiceProvider
//Invoices
InvoiceWasMarkedSent::class => [
CreateInvoiceInvitations::class,
CreateInvoiceInvitation::class,
],
InvoiceWasUpdated::class => [
UpdateInvoiceActivity::class,

View File

@ -57,8 +57,7 @@ class InvoiceRepository extends BaseRepository
$invoice->save();
if(array_key_exists('invitations', $data))
$this->saveInvitations($data['invitations'], $invoice);
event(new CreateInvoiceInvitation($invoice));
$invoice_calc = new InvoiceCalc($invoice, $invoice->settings);
@ -106,48 +105,15 @@ class InvoiceRepository extends BaseRepository
*/
private function markInvitationsSent(Invoice $invoice) :void
{
$invoice->invitations->each(function($invitation, $key) {
$invoice->invitations->each(function($invitation) {
if(!isset($invitation->sent_date))
{
$invitation->sent_date = Carbon::now()->format(config('ninja.date_time_format'));
$invitation->sent_date = Carbon::now();
$invitation->save();
}
});
}
/**
* Saves invitations.
*
* @param array $invitations The invitations
* @param \App\Models\Invoice $invoice The invoice
*
* @return Invoice|\App\Models\Invoice Return the invoice object
*/
private function saveInvitations(array $invitations, Invoice $invoice) :Invoice
{
foreach($invitations as $invitation)
{
//only insert new invitations
if(! array_key_exists('id', $invitation) || strlen($invitation['id']) == 0)
{
$invitation = InvoiceInvitationFactory::create($invoice->company_id, $invoice->user_id);
$invitation->client_contact_id = $invitation['client_contact_id'];
$invitation->invoice_id = $invoice->id;
$invitation->save();
}
}
return $invoice;
}
}

View File

@ -122,10 +122,7 @@ return [
|
*/
'cookie' => env(
'SESSION_COOKIE',
str_slug(env('APP_NAME', 'laravel'), '_').'_session'
),
'cookie' => 'ninja_session',
/*
|--------------------------------------------------------------------------

View File

@ -333,6 +333,7 @@ class CreateUsersTable extends Migration
$table->string('password');
$table->string('token')->nullable();
$table->boolean('is_locked')->default(false);
$table->boolean('send_invoice')->default(true);
$table->rememberToken();
$table->timestamps(6);
$table->softDeletes();

View File

@ -3,6 +3,7 @@
use App\DataMapper\ClientSettings;
use App\DataMapper\CompanySettings;
use App\DataMapper\DefaultSettings;
use App\Events\Invoice\InvoiceWasMarkedSent;
use App\Events\Invoice\InvoiceWasUpdated;
use App\Helpers\Invoice\InvoiceCalc;
use App\Models\Account;
@ -110,12 +111,14 @@ class RandomDataSeeder extends Seeder
$invoices = Invoice::all();
$invoices->each(function ($invoice){
$invoice_calc = new InvoiceCalc($invoice, $invoice->settings);
$invoice = $invoice_calc->build()->getInvoice();
$invoice->save();
event(new InvoiceWasMarkedSent($invoice));
});
/** Recurring Invoice Factory */

View File

@ -44,14 +44,6 @@ class RecurringInvoicesCronTest extends TestCase
//spin up 5 valid and 1 invalid recurring invoices
$recurring_invoices = RecurringInvoice::where('next_send_date', '<=', Carbon::now()->addMinutes(30))->get();
// Log::error(Carbon::now()->addMinutes(30)->format(config('ninja.date_time_format')));
$recurring_invoices->each(function ($inv, $key) {
// Log::error(Carbon::parse($inv->next_send_date)->format(config('ninja.date_time_format')));
});
$recurring_all = RecurringInvoice::all();
$this->assertEquals(5, $recurring_invoices->count());