invoiceninja/app/Listeners/ActivityListener.php
2016-05-17 14:55:53 +03:00

375 lines
9.5 KiB
PHP

<?php namespace App\Listeners;
use App\Models\Invoice;
use App\Events\ClientWasCreated;
use App\Events\ClientWasDeleted;
use App\Events\ClientWasArchived;
use App\Events\ClientWasRestored;
use App\Events\InvoiceWasCreated;
use App\Events\InvoiceWasUpdated;
use App\Events\InvoiceWasDeleted;
use App\Events\InvoiceWasArchived;
use App\Events\InvoiceWasRestored;
use App\Events\InvoiceInvitationWasEmailed;
use App\Events\InvoiceInvitationWasViewed;
use App\Events\QuoteWasCreated;
use App\Events\QuoteWasUpdated;
use App\Events\QuoteWasDeleted;
use App\Events\QuoteWasArchived;
use App\Events\QuoteWasRestored;
use App\Events\QuoteInvitationWasEmailed;
use App\Events\QuoteInvitationWasViewed;
use App\Events\QuoteInvitationWasApproved;
use App\Events\PaymentWasCreated;
use App\Events\PaymentWasDeleted;
use App\Events\PaymentWasRefunded;
use App\Events\PaymentWasVoided;
use App\Events\PaymentWasArchived;
use App\Events\PaymentWasRestored;
use App\Events\PaymentFailed;
use App\Events\CreditWasCreated;
use App\Events\CreditWasDeleted;
use App\Events\CreditWasArchived;
use App\Events\CreditWasRestored;
use App\Ninja\Repositories\ActivityRepository;
class ActivityListener
{
protected $activityRepo;
public function __construct(ActivityRepository $activityRepo)
{
$this->activityRepo = $activityRepo;
}
// Clients
public function createdClient(ClientWasCreated $event)
{
$this->activityRepo->create(
$event->client,
ACTIVITY_TYPE_CREATE_CLIENT
);
}
public function deletedClient(ClientWasDeleted $event)
{
$this->activityRepo->create(
$event->client,
ACTIVITY_TYPE_DELETE_CLIENT
);
}
public function archivedClient(ClientWasArchived $event)
{
if ($event->client->is_deleted) {
return;
}
$this->activityRepo->create(
$event->client,
ACTIVITY_TYPE_ARCHIVE_CLIENT
);
}
public function restoredClient(ClientWasRestored $event)
{
$this->activityRepo->create(
$event->client,
ACTIVITY_TYPE_RESTORE_CLIENT
);
}
// Invoices
public function createdInvoice(InvoiceWasCreated $event)
{
$this->activityRepo->create(
$event->invoice,
ACTIVITY_TYPE_CREATE_INVOICE,
$event->invoice->getAdjustment()
);
}
public function updatedInvoice(InvoiceWasUpdated $event)
{
if (! $event->invoice->isChanged()) {
return;
}
$backupInvoice = Invoice::with('invoice_items', 'client.account', 'client.contacts')->find($event->invoice->id);
$activity = $this->activityRepo->create(
$event->invoice,
ACTIVITY_TYPE_UPDATE_INVOICE,
$event->invoice->getAdjustment()
);
$activity->json_backup = $backupInvoice->hidePrivateFields()->toJSON();
$activity->save();
}
public function deletedInvoice(InvoiceWasDeleted $event)
{
$invoice = $event->invoice;
$this->activityRepo->create(
$invoice,
ACTIVITY_TYPE_DELETE_INVOICE,
$invoice->affectsBalance() ? $invoice->balance * -1 : 0,
$invoice->affectsBalance() ? $invoice->getAmountPaid() * -1 : 0
);
}
public function archivedInvoice(InvoiceWasArchived $event)
{
if ($event->invoice->is_deleted) {
return;
}
$this->activityRepo->create(
$event->invoice,
ACTIVITY_TYPE_ARCHIVE_INVOICE
);
}
public function restoredInvoice(InvoiceWasRestored $event)
{
$invoice = $event->invoice;
$this->activityRepo->create(
$invoice,
ACTIVITY_TYPE_RESTORE_INVOICE,
$invoice->affectsBalance() && $event->fromDeleted ? $invoice->balance : 0,
$invoice->affectsBalance() && $event->fromDeleted ? $invoice->getAmountPaid() : 0
);
}
public function emailedInvoice(InvoiceInvitationWasEmailed $event)
{
$this->activityRepo->create(
$event->invitation->invoice,
ACTIVITY_TYPE_EMAIL_INVOICE,
false,
false,
$event->invitation
);
}
public function viewedInvoice(InvoiceInvitationWasViewed $event)
{
$this->activityRepo->create(
$event->invoice,
ACTIVITY_TYPE_VIEW_INVOICE,
false,
false,
$event->invitation
);
}
// Quotes
public function createdQuote(QuoteWasCreated $event)
{
$this->activityRepo->create(
$event->quote,
ACTIVITY_TYPE_CREATE_QUOTE
);
}
public function updatedQuote(QuoteWasUpdated $event)
{
if (! $event->quote->isChanged()) {
return;
}
$backupQuote = Invoice::with('invoice_items', 'client.account', 'client.contacts')->find($event->quote->id);
$activity = $this->activityRepo->create(
$event->quote,
ACTIVITY_TYPE_UPDATE_QUOTE
);
$activity->json_backup = $backupQuote->hidePrivateFields()->toJSON();
$activity->save();
}
public function deletedQuote(QuoteWasDeleted $event)
{
$this->activityRepo->create(
$event->quote,
ACTIVITY_TYPE_DELETE_QUOTE
);
}
public function archivedQuote(QuoteWasArchived $event)
{
if ($event->quote->is_deleted) {
return;
}
$this->activityRepo->create(
$event->quote,
ACTIVITY_TYPE_ARCHIVE_QUOTE
);
}
public function restoredQuote(QuoteWasRestored $event)
{
$this->activityRepo->create(
$event->quote,
ACTIVITY_TYPE_RESTORE_QUOTE
);
}
public function emailedQuote(QuoteInvitationWasEmailed $event)
{
$this->activityRepo->create(
$event->invitation->invoice,
ACTIVITY_TYPE_EMAIL_QUOTE,
false,
false,
$event->invitation
);
}
public function viewedQuote(QuoteInvitationWasViewed $event)
{
$this->activityRepo->create(
$event->quote,
ACTIVITY_TYPE_VIEW_QUOTE,
false,
false,
$event->invitation
);
}
public function approvedQuote(QuoteInvitationWasApproved $event)
{
$this->activityRepo->create(
$event->quote,
ACTIVITY_TYPE_APPROVE_QUOTE,
false,
false,
$event->invitation
);
}
// Credits
public function createdCredit(CreditWasCreated $event)
{
$this->activityRepo->create(
$event->credit,
ACTIVITY_TYPE_CREATE_CREDIT
);
}
public function deletedCredit(CreditWasDeleted $event)
{
$this->activityRepo->create(
$event->credit,
ACTIVITY_TYPE_DELETE_CREDIT
);
}
public function archivedCredit(CreditWasArchived $event)
{
if ($event->credit->is_deleted) {
return;
}
$this->activityRepo->create(
$event->credit,
ACTIVITY_TYPE_ARCHIVE_CREDIT
);
}
public function restoredCredit(CreditWasRestored $event)
{
$this->activityRepo->create(
$event->credit,
ACTIVITY_TYPE_RESTORE_CREDIT
);
}
// Payments
public function createdPayment(PaymentWasCreated $event)
{
$this->activityRepo->create(
$event->payment,
ACTIVITY_TYPE_CREATE_PAYMENT,
$event->payment->amount * -1,
$event->payment->amount
);
}
public function deletedPayment(PaymentWasDeleted $event)
{
$payment = $event->payment;
$this->activityRepo->create(
$payment,
ACTIVITY_TYPE_DELETE_PAYMENT,
$payment->getCompletedAmount(),
$payment->getCompletedAmount() * -1
);
}
public function refundedPayment(PaymentWasRefunded $event)
{
$payment = $event->payment;
$this->activityRepo->create(
$payment,
ACTIVITY_TYPE_REFUNDED_PAYMENT,
$event->refundAmount,
$event->refundAmount * -1
);
}
public function voidedPayment(PaymentWasVoided $event)
{
$payment = $event->payment;
$this->activityRepo->create(
$payment,
ACTIVITY_TYPE_VOIDED_PAYMENT,
$payment->amount,
$payment->amount * -1
);
}
public function failedPayment(PaymentFailed $event)
{
$payment = $event->payment;
$this->activityRepo->create(
$payment,
ACTIVITY_TYPE_FAILED_PAYMENT,
$payment->getCompletedAmount(),
$payment->getCompletedAmount() * -1
);
}
public function archivedPayment(PaymentWasArchived $event)
{
if ($event->payment->is_deleted) {
return;
}
$this->activityRepo->create(
$event->payment,
ACTIVITY_TYPE_ARCHIVE_PAYMENT
);
}
public function restoredPayment(PaymentWasRestored $event)
{
$payment = $event->payment;
$this->activityRepo->create(
$payment,
ACTIVITY_TYPE_RESTORE_PAYMENT,
$event->fromDeleted ? $payment->getCompletedAmount() * -1 : 0,
$event->fromDeleted ? $payment->getCompletedAmount() : 0
);
}
}