1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-09-20 00:11:35 +02:00
invoiceninja/app/Listeners/InvoiceListener.php
2019-01-30 22:25:37 +11:00

194 lines
5.1 KiB
PHP

<?php
namespace App\Listeners;
use Illuminate\Queue\Events\JobExceptionOccurred;
use App\Events\InvoiceInvitationWasViewed;
use App\Events\InvoiceWasCreated;
use App\Events\InvoiceWasUpdated;
use App\Events\InvoiceWasEmailed;
use App\Events\PaymentFailed;
use App\Events\PaymentWasCreated;
use App\Events\PaymentWasDeleted;
use App\Events\PaymentWasRefunded;
use App\Events\PaymentWasRestored;
use App\Events\PaymentWasVoided;
use App\Models\Activity;
use Auth;
use Utils;
/**
* Class InvoiceListener.
*/
class InvoiceListener
{
/**
* @param InvoiceWasCreated $event
*/
public function createdInvoice(InvoiceWasCreated $event)
{
if (Utils::hasFeature(FEATURE_DIFFERENT_DESIGNS)) {
return;
}
// Make sure the account has the same design set as the invoice does
if (Auth::check()) {
$invoice = $event->invoice;
$account = Auth::user()->account;
if ($invoice->invoice_design_id && $account->invoice_design_id != $invoice->invoice_design_id) {
$account->invoice_design_id = $invoice->invoice_design_id;
$account->save();
}
}
}
/**
* @param InvoiceWasUpdated $event
*/
public function updatedInvoice(InvoiceWasUpdated $event)
{
$invoice = $event->invoice;
$invoice->updatePaidStatus(false, false);
}
/**
* @param InvoiceInvitationWasViewed $event
*/
public function viewedInvoice(InvoiceInvitationWasViewed $event)
{
$invitation = $event->invitation;
$invitation->markViewed();
}
/**
* @param InvoiceWasEmailed $event
*/
public function emailedInvoice(InvoiceWasEmailed $event)
{
$invoice = $event->invoice;
$invoice->last_sent_date = date('Y-m-d');
$invoice->save();
}
/**
* @param PaymentWasCreated $event
*/
public function createdPayment(PaymentWasCreated $event)
{
$payment = $event->payment;
$invoice = $payment->invoice;
$adjustment = $payment->amount * -1;
$partial = max(0, $invoice->partial - $payment->amount);
$invoice->updateBalances($adjustment, $partial);
$invoice->updatePaidStatus(true);
// store a backup of the invoice
$activity = Activity::wherePaymentId($payment->id)
->whereActivityTypeId(ACTIVITY_TYPE_CREATE_PAYMENT)
->first();
$activity->json_backup = $invoice->hidePrivateFields()->toJSON();
$activity->save();
if ($invoice->balance == 0 && $payment->account->auto_archive_invoice) {
$invoiceRepo = app('App\Ninja\Repositories\InvoiceRepository');
$invoiceRepo->archive($invoice);
}
}
/**
* @param PaymentWasDeleted $event
*/
public function deletedPayment(PaymentWasDeleted $event)
{
$payment = $event->payment;
if ($payment->isFailedOrVoided()) {
return;
}
$invoice = $payment->invoice;
$adjustment = $payment->getCompletedAmount();
$invoice->updateBalances($adjustment);
$invoice->updatePaidStatus();
}
/**
* @param PaymentWasRefunded $event
*/
public function refundedPayment(PaymentWasRefunded $event)
{
$payment = $event->payment;
$invoice = $payment->invoice;
$adjustment = $event->refundAmount;
$invoice->updateBalances($adjustment);
$invoice->updatePaidStatus();
}
/**
* @param PaymentWasVoided $event
*/
public function voidedPayment(PaymentWasVoided $event)
{
$payment = $event->payment;
$invoice = $payment->invoice;
$adjustment = $payment->amount;
$invoice->updateBalances($adjustment);
$invoice->updatePaidStatus();
}
/**
* @param PaymentFailed $event
*/
public function failedPayment(PaymentFailed $event)
{
$payment = $event->payment;
$invoice = $payment->invoice;
$adjustment = $payment->getCompletedAmount();
$invoice->updateBalances($adjustment);
$invoice->updatePaidStatus();
}
/**
* @param PaymentWasRestored $event
*/
public function restoredPayment(PaymentWasRestored $event)
{
if (! $event->fromDeleted) {
return;
}
$payment = $event->payment;
if ($payment->isFailedOrVoided()) {
return;
}
$invoice = $payment->invoice;
$adjustment = $payment->getCompletedAmount() * -1;
$invoice->updateBalances($adjustment);
$invoice->updatePaidStatus();
}
public function jobFailed(JobExceptionOccurred $exception)
{
/*
if ($errorEmail = env('ERROR_EMAIL')) {
\Mail::raw(print_r($exception->data, true), function ($message) use ($errorEmail) {
$message->to($errorEmail)
->from(CONTACT_EMAIL)
->subject('Job failed');
});
}
*/
Utils::logError($exception->exception);
}
}