mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-24 02:14:21 -04:00
Create or Update invitations on invoice save / creation
This commit is contained in:
parent
3860e770f6
commit
308406c0fb
60
app/Listeners/Invoice/CreateInvoiceInvitation.php
Normal file
60
app/Listeners/Invoice/CreateInvoiceInvitation.php
Normal 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();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
}
|
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -122,10 +122,7 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'cookie' => env(
|
||||
'SESSION_COOKIE',
|
||||
str_slug(env('APP_NAME', 'laravel'), '_').'_session'
|
||||
),
|
||||
'cookie' => 'ninja_session',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
@ -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();
|
||||
|
@ -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 */
|
||||
|
@ -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());
|
||||
|
Loading…
x
Reference in New Issue
Block a user