diff --git a/app/DataMapper/Transactions/BaseTransaction.php b/app/DataMapper/Transactions/BaseTransaction.php new file mode 100644 index 000000000000..80d211d90733 --- /dev/null +++ b/app/DataMapper/Transactions/BaseTransaction.php @@ -0,0 +1,100 @@ + $this->event_id, 'timestamp' =>time()], + ); + // return [ + // 'event_id' => $this->event_id, + // 'client_id' => $client?->id, + // 'invoice_id' => $invoice?->id, + // 'payment_id' => $payment?->id, + // 'credit_id' => $credit?->creditid, + // 'client_balance' => $client?->balance, + // 'client_paid_to_date' => $client?->paid_to_date, + // 'client_credit_balance' => $client?->credit_balance, + // 'invoice_balance' => $invoice?->balance, + // 'invoice_amount' => $invoice?->amount, + // 'invoice_partial' => $invoice?->partial, + // 'invoice_paid_to_date' => $invoice?->paid_to_date, + // 'invoice_status' => $invoice?->status_id, + // 'payment_amount' => $payment?->amount, + // 'payment_applied' => $payment?->applied, + // 'payment_refunded' => $payment?->refunded, + // 'payment_status' => $payment?->status_id, + // 'paymentables' => $payment?->paymentables, + // 'payment_request' => $payment_request, + // 'metadata' => $metadata, + // 'credit_balance' => $credit?->balance, + // 'credit_amount' => $credit?->amount, + // 'credit_status' => $credit?->status_id, + // 'timestamp' => time(), + // ]; + + } +} diff --git a/app/DataMapper/Transactions/ClientStatusTransaction.php b/app/DataMapper/Transactions/ClientStatusTransaction.php new file mode 100644 index 000000000000..a6f327f8bbc0 --- /dev/null +++ b/app/DataMapper/Transactions/ClientStatusTransaction.php @@ -0,0 +1,28 @@ + $this->event_id, - 'client_id' => $client?->id, - 'invoice_id' => $invoice?->id, - 'payment_id' => $payment?->id, - 'credit_id' => $credit?->id, - 'client_balance' => $client?->balance, - 'client_paid_to_date' => $client?->paid_to_date, - 'client_credit_balance' => $client?->credit_balance, - 'invoice_balance' => $invoice?->balance, - 'invoice_amount' => $invoice?->amount, - 'invoice_partial' => $invoice?->partial, - 'invoice_paid_to_date' => $invoice?->paid_to_date, - 'invoice_status' => $invoice?->status_id, - 'payment_amount' => $payment?->amount, - 'payment_applied' => $payment?->applied, - 'payment_refunded' => $payment?->refunded, - 'payment_status' => $payment?->status_id, - 'paymentables' => $payment?->paymentables, - 'payment_request' => $payment_request, - 'metadata' => $metadata, - 'credit_balance' => $credit?->balance, - 'credit_amount' => $credit?->amount, - 'credit_status' => $credit?->status_id, - 'timestamp' => time(), - ]; - - } } diff --git a/app/DataMapper/Transactions/PaymentAppliedTransaction.php b/app/DataMapper/Transactions/PaymentAppliedTransaction.php new file mode 100644 index 000000000000..1daf45fb8b39 --- /dev/null +++ b/app/DataMapper/Transactions/PaymentAppliedTransaction.php @@ -0,0 +1,28 @@ +company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); + $transaction = [ + 'invoice' => $invoice->transaction_event(), + 'payment' => [], + 'client' => $invoice->client->transaction_event(), + 'credit' => [], + 'metadata' => [], + ]; + + TransactionLog::dispatch(TransactionEvent::INVOICE_UPDATED, $transaction, $invoice->company->db); + return $this->itemResponse($invoice); } @@ -405,6 +417,16 @@ class InvoiceController extends BaseController event(new InvoiceWasUpdated($invoice, $invoice->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); + $transaction = [ + 'invoice' => $invoice->transaction_event(), + 'payment' => [], + 'client' => $invoice->client->transaction_event(), + 'credit' => [], + 'metadata' => [], + ]; + + TransactionLog::dispatch(TransactionEvent::INVOICE_UPDATED, $transaction, $invoice->company->db); + return $this->itemResponse($invoice); } diff --git a/app/Jobs/Ninja/TransactionLog.php b/app/Jobs/Ninja/TransactionLog.php index a304cbc54f15..cdf113a61b5f 100644 --- a/app/Jobs/Ninja/TransactionLog.php +++ b/app/Jobs/Ninja/TransactionLog.php @@ -11,7 +11,19 @@ namespace App\Jobs\Ninja; +use App\DataMapper\Transactions\ClientStatusTransaction; +use App\DataMapper\Transactions\GatewayPaymentMadeTransaction; +use App\DataMapper\Transactions\InvoiceCancelledTransaction; +use App\DataMapper\Transactions\InvoiceDeletedTransaction; +use App\DataMapper\Transactions\InvoiceFeeAppliedTransaction; +use App\DataMapper\Transactions\InvoicePaymentTransaction; +use App\DataMapper\Transactions\InvoiceUpdatedTransaction; use App\DataMapper\Transactions\MarkPaidTransaction; +use App\DataMapper\Transactions\PaymentAppliedTransaction; +use App\DataMapper\Transactions\PaymentDeletedTransaction; +use App\DataMapper\Transactions\PaymentFailedTransaction; +use App\DataMapper\Transactions\PaymentMadeTransaction; +use App\DataMapper\Transactions\PaymentRefundedTransaction; use App\Libraries\MultiDB; use App\Models\TransactionEvent; use App\Utils\Ninja; @@ -38,15 +50,18 @@ class TransactionLog implements ShouldQueue private array $transformer_array = [ TransactionEvent::INVOICE_MARK_PAID => MarkPaidTransaction::class, - TransactionEvent::INVOICE_UPDATED => MarkPaidTransaction::class, - TransactionEvent::INVOICE_DELETED => MarkPaidTransaction::class, - TransactionEvent::INVOICE_PAYMENT_APPLIED => MarkPaidTransaction::class, - TransactionEvent::INVOICE_CANCELLED => MarkPaidTransaction::class, - TransactionEvent::INVOICE_FEE_APPLIED => MarkPaidTransaction::class, - TransactionEvent::PAYMENT_MADE => MarkPaidTransaction::class, - TransactionEvent::PAYMENT_APPLIED => MarkPaidTransaction::class, - TransactionEvent::PAYMENT_REFUND => MarkPaidTransaction::class, - TransactionEvent::PAYMENT_FAILED => MarkPaidTransaction::class, + TransactionEvent::INVOICE_UPDATED => InvoiceUpdatedTransaction::class, + TransactionEvent::INVOICE_DELETED => InvoiceDeletedTransaction::class, + TransactionEvent::INVOICE_PAYMENT_APPLIED => InvoicePaymentTransaction::class, + TransactionEvent::INVOICE_CANCELLED => InvoiceCancelledTransaction::class, + TransactionEvent::INVOICE_FEE_APPLIED => InvoiceFeeAppliedTransaction::class, + TransactionEvent::PAYMENT_MADE => PaymentMadeTransaction::class, + TransactionEvent::GATEWAY_PAYMENT_MADE => GatewayPaymentMadeTransaction::class, + TransactionEvent::PAYMENT_APPLIED => PaymentAppliedTransaction::class, + TransactionEvent::PAYMENT_REFUND => PaymentRefundedTransaction::class, + TransactionEvent::PAYMENT_FAILED => PaymentFailedTransaction::class, + TransactionEvent::PAYMENT_DELETED => PaymentDeletedTransaction::class, + TransactionEvent::CLIENT_STATUS => ClientStatusTransaction::class, ]; /** @@ -69,8 +84,8 @@ class TransactionLog implements ShouldQueue */ public function handle() { - if(!Ninja::isHosted()) - return; + // if(!Ninja::isHosted()) + // return; $this->setTransformer(); diff --git a/app/Models/Client.php b/app/Models/Client.php index da37ade5773b..b4005ca44a6d 100644 --- a/app/Models/Client.php +++ b/app/Models/Client.php @@ -840,4 +840,17 @@ class Client extends BaseModel implements HasLocalePreference return $offset; } + + public function transaction_event() + { + $this->fresh(); + + return [ + 'client_id' => $this->id, + 'client_balance' => $this->balance ?: 0, + 'client_paid_to_date' => $this->paid_to_date ?: 0, + 'client_credit_balance' => $this->credit_balance ?: 0 + ]; + } + } diff --git a/app/Models/Credit.php b/app/Models/Credit.php index dec71136476d..fbecaca907c7 100644 --- a/app/Models/Credit.php +++ b/app/Models/Credit.php @@ -302,4 +302,16 @@ class Credit extends BaseModel }); } + public function transaction_event() + { + + $this->fresh(); + + return [ + 'credit_id' => $this->id, + 'credit_amount' => $this->amount ?: 0, + 'credit_balance' => $this->balance ?: 0, + 'credit_status' => $this->status_id ?: 1, + ]; + } } diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index 9269d6174255..66917320695c 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -538,13 +538,16 @@ class Invoice extends BaseModel public function transaction_event() { + + $this->fresh(); + return [ - 'id' => $this->id, - 'amount' => $this->amount, - 'partial' => $this->partial, - 'balance' => $this->balance, - 'paid_to_date' => $this->paid_to_date, - 'status_id' => $this->status_id, + 'invoice_id' => $this->id, + 'invoice_amount' => $this->amount ?: 0, + 'invoice_partial' => $this->partial ?: 0, + 'invoice_balance' => $this->balance ?: 0, + 'invoice_paid_to_date' => $this->paid_to_date ?: 0, + 'invoice_status' => $this->status_id ?: 1, ]; } } diff --git a/app/Models/Payment.php b/app/Models/Payment.php index 826594043dea..fa033cbaf583 100644 --- a/app/Models/Payment.php +++ b/app/Models/Payment.php @@ -326,13 +326,16 @@ class Payment extends BaseModel public function transaction_event() { + $this->fresh(); + return [ 'payment_id' => $this->id, - 'payment_amount' => $this->amount, - 'payment_applied' => $this->applied, - 'payment_refunded' => $this->refunded, - 'payment_status' => $this->status_id, + 'payment_amount' => $this->amount ?: 0, + 'payment_applied' => $this->applied ?: 0, + 'payment_refunded' => $this->refunded ?: 0, + 'payment_status' => $this->status_id ?: 1, 'paymentables' => $this->paymentables->toArray(), + 'payment_request' => request() ? request()->all() : [], ]; } diff --git a/app/Models/TransactionEvent.php b/app/Models/TransactionEvent.php index 15aee6827e99..cfba96915bd6 100644 --- a/app/Models/TransactionEvent.php +++ b/app/Models/TransactionEvent.php @@ -22,7 +22,7 @@ class TransactionEvent extends StaticModel public $guarded = ['id']; public $casts = [ - 'metadata' => 'object', + 'metadata' => 'array', 'payment_request' => 'array', 'paymentables' => 'array', ]; @@ -38,6 +38,8 @@ class TransactionEvent extends StaticModel public const PAYMENT_APPLIED = 101; public const PAYMENT_REFUND = 102; public const PAYMENT_FAILED = 103; + public const GATEWAY_PAYMENT_MADE = 104; + public const PAYMENT_DELETED = 105; - + public const CLIENT_STATUS = 200; } diff --git a/app/PaymentDrivers/BaseDriver.php b/app/PaymentDrivers/BaseDriver.php index 4cf6aa938587..7718c478acb7 100644 --- a/app/PaymentDrivers/BaseDriver.php +++ b/app/PaymentDrivers/BaseDriver.php @@ -20,6 +20,7 @@ use App\Jobs\Mail\NinjaMailer; use App\Jobs\Mail\NinjaMailerJob; use App\Jobs\Mail\NinjaMailerObject; use App\Jobs\Mail\PaymentFailedMailer; +use App\Jobs\Ninja\TransactionLog; use App\Jobs\Util\SystemLogger; use App\Mail\Admin\ClientPaymentFailureObject; use App\Models\Client; @@ -32,6 +33,7 @@ use App\Models\Payment; use App\Models\PaymentHash; use App\Models\PaymentType; use App\Models\SystemLog; +use App\Models\TransactionEvent; use App\Services\Subscription\SubscriptionService; use App\Utils\Ninja; use App\Utils\Traits\MakesHash; @@ -317,11 +319,23 @@ class BaseDriver extends AbstractPaymentDriver $invoices = Invoice::whereIn('id', $this->transformKeys(array_column($payment_invoices, 'invoice_id')))->withTrashed()->get(); $invoices->each(function ($invoice) use ($fee_total) { + if (collect($invoice->line_items)->contains('type_id', '3')) { $invoice->service()->toggleFeesPaid()->save(); $invoice->client->service()->updateBalance($fee_total)->save(); $invoice->ledger()->updateInvoiceBalance($fee_total, "Gateway fee adjustment for invoice {$invoice->number}"); } + + $transaction = [ + 'invoice' => $invoice->transaction_event(), + 'payment' => [], + 'client' => $invoice->client->transaction_event(), + 'credit' => [], + 'metadata' => [], + ]; + + TransactionLog::dispatch(TransactionEvent::INVOICE_FEE_APPLIED, $transaction, $invoice->company->db); + }); } diff --git a/app/Repositories/PaymentRepository.php b/app/Repositories/PaymentRepository.php index 19f71a58ea52..fa02bec8e00f 100644 --- a/app/Repositories/PaymentRepository.php +++ b/app/Repositories/PaymentRepository.php @@ -14,11 +14,13 @@ namespace App\Repositories; use App\Events\Payment\PaymentWasCreated; use App\Events\Payment\PaymentWasDeleted; use App\Jobs\Credit\ApplyCreditPayment; +use App\Jobs\Ninja\TransactionLog; use App\Libraries\Currency\Conversion\CurrencyApi; use App\Models\Client; use App\Models\Credit; use App\Models\Invoice; use App\Models\Payment; +use App\Models\TransactionEvent; use App\Utils\Ninja; use App\Utils\Traits\MakesHash; use App\Utils\Traits\SavesDocuments; @@ -66,8 +68,6 @@ class PaymentRepository extends BaseRepository { */ private function applyPayment(array $data, Payment $payment): ?Payment { - nlog("applying payment"); - nlog($data); $is_existing_payment = true; $client = false; @@ -96,11 +96,8 @@ class PaymentRepository extends BaseRepository { if (array_key_exists('credits', $data) && is_array($data['credits']) && count($data['credits']) > 0) { $_credit_totals = array_sum(array_column($data['credits'], 'amount')); - // if ($data['amount'] == $_credit_totals) { - // $data['amount'] = 0; - // } else { - $client->service()->updatePaidToDate($_credit_totals)->save(); - // } + $client->service()->updatePaidToDate($_credit_totals)->save(); + } } @@ -183,10 +180,19 @@ class PaymentRepository extends BaseRepository { } $payment->applied += ($invoice_totals - $credit_totals); //wont work because - check tests - // $payment->applied += $invoice_totals; //wont work because - check tests $payment->save(); + $transaction = [ + 'invoice' => [], + 'payment' => $payment->transaction_event(), + 'client' => $payment->client->transaction_event(), + 'credit' => [], + 'metadata' => [], + ]; + + TransactionLog::dispatch(TransactionEvent::PAYMENT_MADE, $transaction, $payment->company->db); + return $payment->fresh(); } diff --git a/app/Services/Invoice/ApplyPayment.php b/app/Services/Invoice/ApplyPayment.php index 65a6b901a51f..fa67f871f31d 100644 --- a/app/Services/Invoice/ApplyPayment.php +++ b/app/Services/Invoice/ApplyPayment.php @@ -11,8 +11,10 @@ namespace App\Services\Invoice; +use App\Jobs\Ninja\TransactionLog; use App\Models\Invoice; use App\Models\Payment; +use App\Models\TransactionEvent; use App\Services\AbstractService; class ApplyPayment extends AbstractService @@ -128,6 +130,16 @@ class ApplyPayment extends AbstractService $this->invoice->service()->applyNumber()->workFlow()->save(); + $transaction = [ + 'invoice' => $this->invoice->transaction_event(), + 'payment' => $this->payment->transaction_event(), + 'client' => $this->invoice->client->transaction_event(), + 'credit' => [], + 'metadata' => [], + ]; + + TransactionLog::dispatch(TransactionEvent::INVOICE_PAYMENT_APPLIED, $transaction, $this->invoice->company->db); + return $this->invoice; } } diff --git a/app/Services/Invoice/HandleCancellation.php b/app/Services/Invoice/HandleCancellation.php index e380d69f7549..fb93aca67ac7 100644 --- a/app/Services/Invoice/HandleCancellation.php +++ b/app/Services/Invoice/HandleCancellation.php @@ -12,8 +12,10 @@ namespace App\Services\Invoice; use App\Events\Invoice\InvoiceWasCancelled; +use App\Jobs\Ninja\TransactionLog; use App\Models\Client; use App\Models\Invoice; +use App\Models\TransactionEvent; use App\Services\AbstractService; use App\Utils\Ninja; use App\Utils\Traits\GeneratesCounter; @@ -52,6 +54,16 @@ class HandleCancellation extends AbstractService event(new InvoiceWasCancelled($this->invoice, $this->invoice->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); + $transaction = [ + 'invoice' => $this->invoice->transaction_event(), + 'payment' => [], + 'client' => $this->invoice->client->transaction_event(), + 'credit' => [], + 'metadata' => [], + ]; + + TransactionLog::dispatch(TransactionEvent::INVOICE_CANCELLED, $transaction, $this->invoice->company->db); + return $this->invoice; } diff --git a/app/Services/Invoice/MarkInvoiceDeleted.php b/app/Services/Invoice/MarkInvoiceDeleted.php index 51b7c3ccc12c..ee5dafb2ff32 100644 --- a/app/Services/Invoice/MarkInvoiceDeleted.php +++ b/app/Services/Invoice/MarkInvoiceDeleted.php @@ -11,7 +11,9 @@ namespace App\Services\Invoice; +use App\Jobs\Ninja\TransactionLog; use App\Models\Invoice; +use App\Models\TransactionEvent; use App\Services\AbstractService; use App\Utils\Traits\GeneratesCounter; use Illuminate\Support\Facades\DB; @@ -47,6 +49,16 @@ class MarkInvoiceDeleted extends AbstractService ->adjustBalance() ->adjustLedger(); + $transaction = [ + 'invoice' => $this->invoice->transaction_event(), + 'payment' => $this->invoice->payments()->exists() ? $this->invoice->payments()->first()->transaction_event() : [], + 'client' => $this->invoice->client->transaction_event(), + 'credit' => [], + 'metadata' => ['total_payments' => $this->total_payments, 'balance_adjustment' => $this->balance_adjustment, 'adjustment_amount' => $this->adjustment_amount], + ]; + + TransactionLog::dispatch(TransactionEvent::INVOICE_DELETED, $transaction, $this->invoice->company->db); + return $this->invoice; } @@ -127,11 +139,6 @@ class MarkInvoiceDeleted extends AbstractService $this->total_payments = $this->invoice->payments->sum('amount') - $this->invoice->payments->sum('refunded'); $this->balance_adjustment = $this->invoice->balance; - - //$this->total_payments = $this->invoice->payments->sum('amount - refunded'); - - // nlog("adjustment amount = {$this->adjustment_amount}"); - // nlog("total payments = {$this->total_payments}"); return $this; } diff --git a/app/Services/Invoice/MarkPaid.php b/app/Services/Invoice/MarkPaid.php index 205c5cee57ab..b39679ad3c8d 100644 --- a/app/Services/Invoice/MarkPaid.php +++ b/app/Services/Invoice/MarkPaid.php @@ -15,10 +15,12 @@ use App\Events\Invoice\InvoiceWasPaid; use App\Events\Payment\PaymentWasCreated; use App\Factory\PaymentFactory; use App\Jobs\Invoice\InvoiceWorkflowSettings; +use App\Jobs\Ninja\TransactionLog; use App\Jobs\Payment\EmailPayment; use App\Libraries\Currency\Conversion\CurrencyApi; use App\Models\Invoice; use App\Models\Payment; +use App\Models\TransactionEvent; use App\Services\AbstractService; use App\Services\Client\ClientService; use App\Utils\Ninja; @@ -110,6 +112,16 @@ class MarkPaid extends AbstractService event(new PaymentWasCreated($payment, $payment->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); event(new InvoiceWasPaid($this->invoice, $payment, $payment->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); + $transaction = [ + 'invoice' => $this->invoice->transaction_event(), + 'payment' => $payment->transaction_event(), + 'client' => $this->invoice->client->transaction_event(), + 'credit' => [], + 'metadata' => [], + ]; + + TransactionLog::dispatch(TransactionEvent::INVOICE_MARK_PAID, $transaction, $this->invoice->company->db); + return $this->invoice; } diff --git a/app/Services/Payment/DeletePayment.php b/app/Services/Payment/DeletePayment.php index 481e2d5a3147..654448a8d6d4 100644 --- a/app/Services/Payment/DeletePayment.php +++ b/app/Services/Payment/DeletePayment.php @@ -11,9 +11,11 @@ namespace App\Services\Payment; +use App\Jobs\Ninja\TransactionLog; use App\Models\Credit; use App\Models\Invoice; use App\Models\Payment; +use App\Models\TransactionEvent; use App\Repositories\ActivityRepository; class DeletePayment @@ -106,6 +108,7 @@ class DeletePayment } else { $paymentable_invoice->service()->setStatus(Invoice::STATUS_PARTIAL)->save(); } + } else { @@ -118,19 +121,36 @@ class DeletePayment } + $transaction = [ + 'invoice' => $paymentable_invoice->transaction_event(), + 'payment' => $this->payment->transaction_event(), + 'client' => $client->transaction_event(), + 'credit' => [], + 'metadata' => [], + ]; + + TransactionLog::dispatch(TransactionEvent::PAYMENT_DELETED, $transaction, $paymentable_invoice->company->db); + }); } - // else { - /* If there are no invoices - then we need to still adjust the total client->paid_to_date amount*/ + $this->payment + ->client + ->service() + ->updatePaidToDate(($this->payment->amount - $this->payment->refunded)*-1) + ->save(); - $this->payment - ->client - ->service() - ->updatePaidToDate(($this->payment->amount - $this->payment->refunded)*-1) - ->save(); + $transaction = [ + 'invoice' => [], + 'payment' => [], + 'client' => $this->payment->client->transaction_event(), + 'credit' => [], + 'metadata' => [], + ]; - // } + TransactionLog::dispatch(TransactionEvent::CLIENT_STATUS, $transaction, $this->payment->company->db); + + return $this; } diff --git a/app/Services/Payment/RefundPayment.php b/app/Services/Payment/RefundPayment.php index 0dfa6fa355eb..0e8dd1a87745 100644 --- a/app/Services/Payment/RefundPayment.php +++ b/app/Services/Payment/RefundPayment.php @@ -14,10 +14,12 @@ namespace App\Services\Payment; use App\Exceptions\PaymentRefundFailed; use App\Factory\CreditFactory; use App\Factory\InvoiceItemFactory; +use App\Jobs\Ninja\TransactionLog; use App\Models\Activity; use App\Models\Credit; use App\Models\Invoice; use App\Models\Payment; +use App\Models\TransactionEvent; use App\Repositories\ActivityRepository; use App\Utils\Ninja; use stdClass; @@ -61,6 +63,17 @@ class RefundPayment ->adjustInvoices() ->processGatewayRefund() //process the gateway refund if needed ->save(); + + + $transaction = [ + 'invoice' => [], + 'payment' => $this->payment->transaction_event(), + 'client' => $this->payment->client->transaction_event(), + 'credit' => [], + 'metadata' => [], + ]; + + TransactionLog::dispatch(TransactionEvent::PAYMENT_REFUND, $transaction, $this->payment->company->db); } /** diff --git a/app/Services/Payment/UpdateInvoicePayment.php b/app/Services/Payment/UpdateInvoicePayment.php index 556ddd817eb1..a41d146a7f9a 100644 --- a/app/Services/Payment/UpdateInvoicePayment.php +++ b/app/Services/Payment/UpdateInvoicePayment.php @@ -13,9 +13,11 @@ namespace App\Services\Payment; use App\Events\Invoice\InvoiceWasUpdated; use App\Jobs\Invoice\InvoiceWorkflowSettings; +use App\Jobs\Ninja\TransactionLog; use App\Models\Invoice; use App\Models\Payment; use App\Models\PaymentHash; +use App\Models\TransactionEvent; use App\Utils\Ninja; use App\Utils\Traits\MakesHash; @@ -88,6 +90,17 @@ class UpdateInvoicePayment $this->payment->applied += $paid_amount; + $transaction = [ + 'invoice' => $this->invoice->transaction_event(), + 'payment' => $this->payment->transaction_event(), + 'client' => $client->transaction_event(), + 'credit' => [], + 'metadata' => [], + ]; + + TransactionLog::dispatch(TransactionEvent::GATEWAY_PAYMENT_MADE, $transaction, $this->invoice->company->db); + + }); /* Remove the event updater from within the loop to prevent race conditions */ diff --git a/app/Utils/HtmlEngine.php b/app/Utils/HtmlEngine.php index beb8c79f49e6..9e20a2ff9d9b 100644 --- a/app/Utils/HtmlEngine.php +++ b/app/Utils/HtmlEngine.php @@ -317,6 +317,7 @@ class HtmlEngine $data['$website'] = ['value' => $this->client->present()->website() ?: ' ', 'label' => ctrans('texts.website')]; $data['$phone'] = ['value' => $this->client->present()->phone() ?: ' ', 'label' => ctrans('texts.phone')]; $data['$country'] = ['value' => isset($this->client->country->name) ? ctrans('texts.country_' . $this->client->country->name) : '', 'label' => ctrans('texts.country')]; + $data['$country_2'] = ['value' => isset($this->client->country) ? $this->client->country->iso_3166_2 : '', 'label' => ctrans('texts.country')]; $data['$email'] = ['value' => isset($this->contact) ? $this->contact->email : 'no contact email on record', 'label' => ctrans('texts.email')]; $data['$client_name'] = ['value' => $this->entity->present()->clientName() ?: ' ', 'label' => ctrans('texts.client_name')]; $data['$client.name'] = &$data['$client_name']; @@ -392,6 +393,7 @@ class HtmlEngine $data['$company.state'] = ['value' => $this->settings->state ?: ' ', 'label' => ctrans('texts.state')]; $data['$company.postal_code'] = ['value' => $this->settings->postal_code ?: ' ', 'label' => ctrans('texts.postal_code')]; $data['$company.country'] = ['value' => $this->getCountryName(), 'label' => ctrans('texts.country')]; + $data['$company.country_2'] = ['value' => $this->getCountryCode(), 'label' => ctrans('texts.country')]; $data['$company.phone'] = ['value' => $this->settings->phone ?: ' ', 'label' => ctrans('texts.phone')]; $data['$company.email'] = ['value' => $this->settings->email ?: ' ', 'label' => ctrans('texts.email')]; $data['$company.vat_number'] = ['value' => $this->settings->vat_number ?: ' ', 'label' => ctrans('texts.vat_number')]; @@ -617,6 +619,17 @@ class HtmlEngine return ' '; } + + private function getCountryCode() :string + { + $country = Country::find($this->settings->country_id); + + if ($country) { + return ctrans('texts.country_' . $country->iso_3166_2); + } + + return ' '; + } /** * Due to the way we are compiling the blade template we * have no ability to iterate, so in the case