mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-06-03 08:34:35 -04:00
Updates for passing refund meta into templates
This commit is contained in:
parent
aa3be06876
commit
c44310fa09
@ -14,7 +14,6 @@ namespace App\Http\Controllers;
|
|||||||
use App\Events\Payment\PaymentWasUpdated;
|
use App\Events\Payment\PaymentWasUpdated;
|
||||||
use App\Factory\PaymentFactory;
|
use App\Factory\PaymentFactory;
|
||||||
use App\Filters\PaymentFilters;
|
use App\Filters\PaymentFilters;
|
||||||
use App\Http\Requests\Payment\ActionPaymentRequest;
|
|
||||||
use App\Http\Requests\Payment\CreatePaymentRequest;
|
use App\Http\Requests\Payment\CreatePaymentRequest;
|
||||||
use App\Http\Requests\Payment\DestroyPaymentRequest;
|
use App\Http\Requests\Payment\DestroyPaymentRequest;
|
||||||
use App\Http\Requests\Payment\EditPaymentRequest;
|
use App\Http\Requests\Payment\EditPaymentRequest;
|
||||||
@ -24,14 +23,12 @@ use App\Http\Requests\Payment\StorePaymentRequest;
|
|||||||
use App\Http\Requests\Payment\UpdatePaymentRequest;
|
use App\Http\Requests\Payment\UpdatePaymentRequest;
|
||||||
use App\Http\Requests\Payment\UploadPaymentRequest;
|
use App\Http\Requests\Payment\UploadPaymentRequest;
|
||||||
use App\Models\Account;
|
use App\Models\Account;
|
||||||
use App\Models\Invoice;
|
|
||||||
use App\Models\Payment;
|
use App\Models\Payment;
|
||||||
use App\Repositories\PaymentRepository;
|
use App\Repositories\PaymentRepository;
|
||||||
use App\Transformers\PaymentTransformer;
|
use App\Transformers\PaymentTransformer;
|
||||||
use App\Utils\Ninja;
|
use App\Utils\Ninja;
|
||||||
use App\Utils\Traits\MakesHash;
|
use App\Utils\Traits\MakesHash;
|
||||||
use App\Utils\Traits\SavesDocuments;
|
use App\Utils\Traits\SavesDocuments;
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Http\Response;
|
use Illuminate\Http\Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -30,6 +30,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
|||||||
* @property int $id
|
* @property int $id
|
||||||
* @property int $company_id
|
* @property int $company_id
|
||||||
* @property int $client_id
|
* @property int $client_id
|
||||||
|
* @property int $category_id
|
||||||
* @property int|null $project_id
|
* @property int|null $project_id
|
||||||
* @property int|null $vendor_id
|
* @property int|null $vendor_id
|
||||||
* @property int|null $user_id
|
* @property int|null $user_id
|
||||||
@ -58,6 +59,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
|||||||
* @property int|null $exchange_currency_id
|
* @property int|null $exchange_currency_id
|
||||||
* @property \App\Models\Paymentable $paymentable
|
* @property \App\Models\Paymentable $paymentable
|
||||||
* @property object|null $meta
|
* @property object|null $meta
|
||||||
|
* @property object|null $refund_meta
|
||||||
* @property string|null $custom_value1
|
* @property string|null $custom_value1
|
||||||
* @property string|null $custom_value2
|
* @property string|null $custom_value2
|
||||||
* @property string|null $custom_value3
|
* @property string|null $custom_value3
|
||||||
@ -151,12 +153,12 @@ class Payment extends BaseModel
|
|||||||
'number',
|
'number',
|
||||||
'exchange_currency_id',
|
'exchange_currency_id',
|
||||||
'exchange_rate',
|
'exchange_rate',
|
||||||
// 'is_manual',
|
|
||||||
'private_notes',
|
'private_notes',
|
||||||
'custom_value1',
|
'custom_value1',
|
||||||
'custom_value2',
|
'custom_value2',
|
||||||
'custom_value3',
|
'custom_value3',
|
||||||
'custom_value4',
|
'custom_value4',
|
||||||
|
'category_id',
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
@ -167,6 +169,7 @@ class Payment extends BaseModel
|
|||||||
'deleted_at' => 'timestamp',
|
'deleted_at' => 'timestamp',
|
||||||
'is_deleted' => 'bool',
|
'is_deleted' => 'bool',
|
||||||
'meta' => 'object',
|
'meta' => 'object',
|
||||||
|
'refund_meta' => 'array',
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $with = [
|
protected $with = [
|
||||||
@ -436,11 +439,6 @@ class Payment extends BaseModel
|
|||||||
|
|
||||||
public function getLink() :string
|
public function getLink() :string
|
||||||
{
|
{
|
||||||
// if (Ninja::isHosted()) {
|
|
||||||
// $domain = isset($this->company->portal_domain) ? $this->company->portal_domain : $this->company->domain();
|
|
||||||
// } else {
|
|
||||||
// $domain = config('ninja.app_url');
|
|
||||||
// }
|
|
||||||
|
|
||||||
if (Ninja::isHosted()) {
|
if (Ninja::isHosted()) {
|
||||||
$domain = $this->company->domain();
|
$domain = $this->company->domain();
|
||||||
@ -476,4 +474,11 @@ class Payment extends BaseModel
|
|||||||
return $use_react_url ? config('ninja.react_url')."/#/payments/{$this->hashed_id}/edit" : config('ninja.app_url');
|
return $use_react_url ? config('ninja.react_url')."/#/payments/{$this->hashed_id}/edit" : config('ninja.app_url');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setRefundMeta(array $data)
|
||||||
|
{
|
||||||
|
$tmp_meta = $this->refund_meta ?? [];
|
||||||
|
$tmp_meta[] = $data;
|
||||||
|
|
||||||
|
$this->refund_meta = $tmp_meta;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,33 +23,15 @@ use stdClass;
|
|||||||
|
|
||||||
class RefundPayment
|
class RefundPayment
|
||||||
{
|
{
|
||||||
public $payment;
|
|
||||||
|
|
||||||
public $refund_data;
|
private float $total_refund = 0;
|
||||||
|
|
||||||
private $credit_note;
|
|
||||||
|
|
||||||
private $total_refund;
|
|
||||||
|
|
||||||
private $gateway_refund_status;
|
|
||||||
|
|
||||||
private $activity_repository;
|
|
||||||
|
|
||||||
private bool $refund_failed = false;
|
private bool $refund_failed = false;
|
||||||
|
|
||||||
private string $refund_failed_message = '';
|
private string $refund_failed_message = '';
|
||||||
|
|
||||||
public function __construct($payment, $refund_data)
|
public function __construct(public Payment $payment, public array $refund_data)
|
||||||
{
|
{
|
||||||
$this->payment = $payment;
|
|
||||||
|
|
||||||
$this->refund_data = $refund_data;
|
|
||||||
|
|
||||||
$this->total_refund = 0;
|
|
||||||
|
|
||||||
$this->gateway_refund_status = false;
|
|
||||||
|
|
||||||
$this->activity_repository = new ActivityRepository();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function run()
|
public function run()
|
||||||
@ -135,6 +117,8 @@ class RefundPayment
|
|||||||
$this->payment->refunded += $this->total_refund;
|
$this->payment->refunded += $this->total_refund;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->payment->setRefundMeta($this->refund_data);
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +74,8 @@ class TemplateAction implements ShouldQueue
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function handle()
|
public function handle()
|
||||||
{ nlog("inside template action");
|
{
|
||||||
|
// nlog("inside template action");
|
||||||
|
|
||||||
MultiDB::setDb($this->db);
|
MultiDB::setDb($this->db);
|
||||||
|
|
||||||
@ -109,7 +110,7 @@ class TemplateAction implements ShouldQueue
|
|||||||
|
|
||||||
$ts = $template_service->build($data);
|
$ts = $template_service->build($data);
|
||||||
|
|
||||||
nlog($ts->getHtml());
|
// nlog($ts->getHtml());
|
||||||
|
|
||||||
if($this->send_email) {
|
if($this->send_email) {
|
||||||
$pdf = $ts->getPdf();
|
$pdf = $ts->getPdf();
|
||||||
|
@ -16,6 +16,7 @@ use App\Models\Client;
|
|||||||
use App\Models\Credit;
|
use App\Models\Credit;
|
||||||
use App\Models\Design;
|
use App\Models\Design;
|
||||||
use App\Models\Company;
|
use App\Models\Company;
|
||||||
|
use App\Models\Invoice;
|
||||||
use App\Models\Payment;
|
use App\Models\Payment;
|
||||||
use App\Models\Project;
|
use App\Models\Project;
|
||||||
use App\Models\Activity;
|
use App\Models\Activity;
|
||||||
@ -529,37 +530,56 @@ class TemplateService
|
|||||||
'refund_activity' => $this->getPaymentRefundActivity($payment),
|
'refund_activity' => $this->getPaymentRefundActivity($payment),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
nlog($this->getPaymentRefundActivity($payment));
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [
|
||||||
|
"id" => 12,
|
||||||
|
"date" => "2023-10-08",
|
||||||
|
"invoices" => [
|
||||||
|
[
|
||||||
|
"amount" => 1,
|
||||||
|
"invoice_id" => 23,
|
||||||
|
"id" => null,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
"q" => "/api/v1/payments/refund",
|
||||||
|
"email_receipt" => "true",
|
||||||
|
"gateway_refund" => false,
|
||||||
|
"send_email" => false,
|
||||||
|
],
|
||||||
|
*
|
||||||
|
* @param Payment $payment
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
private function getPaymentRefundActivity(Payment $payment): array
|
private function getPaymentRefundActivity(Payment $payment): array
|
||||||
{
|
{
|
||||||
|
|
||||||
return Activity::where('activity_type_id', 40)
|
return collect($payment->refund_meta ?? [])
|
||||||
->where('payment_id', $payment->id)
|
->map(function ($refund) use($payment){
|
||||||
->where('company_id', $payment->company_id)
|
|
||||||
->orderBy('id', 'asc')
|
|
||||||
->cursor()
|
|
||||||
->map(function ($a) use ($payment){
|
|
||||||
|
|
||||||
$date = \Carbon\Carbon::parse($a->created_at)->addSeconds($a->payment->client->timezone_offset());
|
|
||||||
$date = $this->translateDate($date, $a->payment->client->date_format(), $a->payment->client->locale());
|
|
||||||
$notes = explode("-", $a->notes);
|
|
||||||
|
|
||||||
try {
|
|
||||||
$amount = explode(":", reset($notes));
|
|
||||||
$amount = Number::formatMoney(end($amount), $payment->client);
|
|
||||||
$notes = ctrans('texts.status_partially_refunded_amount', ['amount' => $amount]);
|
|
||||||
}
|
|
||||||
catch(\Exception $e){
|
|
||||||
}
|
|
||||||
|
|
||||||
|
$date = \Carbon\Carbon::parse($refund['date'])->addSeconds($payment->client->timezone_offset());
|
||||||
|
$date = $this->translateDate($date, $payment->client->date_format(), $payment->client->locale());
|
||||||
$entity = ctrans('texts.invoice');
|
$entity = ctrans('texts.invoice');
|
||||||
|
|
||||||
return "{$date} {$entity} #{$a->invoice->number} {$notes}\n";
|
$map = [];
|
||||||
|
|
||||||
})->toArray();
|
foreach($refund['invoices'] as $refunded_invoice) {
|
||||||
|
$invoice = Invoice::withTrashed()->find($refunded_invoice['invoice_id']);
|
||||||
|
$amount = Number::formatMoney($refunded_invoice['amount'], $payment->client);
|
||||||
|
$notes = ctrans('texts.status_partially_refunded_amount', ['amount' => $amount]);
|
||||||
|
|
||||||
|
array_push($map, "{$date} {$entity} #{$invoice->number} {$notes}\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return $map;
|
||||||
|
|
||||||
|
})->flatten()->toArray();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +64,15 @@ class PaymentHtmlEngine
|
|||||||
$data['$amount'] = &$data['$payment.amount'];
|
$data['$amount'] = &$data['$payment.amount'];
|
||||||
$data['$payment.date'] = ['value' => $this->translateDate($this->payment->date, $this->client->date_format(), $this->client->locale()), 'label' => ctrans('texts.payment_date')];
|
$data['$payment.date'] = ['value' => $this->translateDate($this->payment->date, $this->client->date_format(), $this->client->locale()), 'label' => ctrans('texts.payment_date')];
|
||||||
$data['$transaction_reference'] = ['value' => $this->payment->transaction_reference, 'label' => ctrans('texts.transaction_reference')];
|
$data['$transaction_reference'] = ['value' => $this->payment->transaction_reference, 'label' => ctrans('texts.transaction_reference')];
|
||||||
// $data['$public_notes'] = ['value' => $this->payment->public_notes, 'label' => ctrans('texts.notes')];
|
|
||||||
|
$data['$font_size'] = ['value' => $this->settings->font_size . 'px !important;', 'label' => ''];
|
||||||
|
$data['$font_name'] = ['value' => Helpers::resolveFont($this->settings->primary_font)['name'], 'label' => ''];
|
||||||
|
$data['$font_url'] = ['value' => Helpers::resolveFont($this->settings->primary_font)['url'], 'label' => ''];
|
||||||
|
$data['$secondary_font_name'] = ['value' => Helpers::resolveFont($this->settings->secondary_font)['name'], 'label' => ''];
|
||||||
|
$data['$secondary_font_url'] = ['value' => Helpers::resolveFont($this->settings->secondary_font)['url'], 'label' => ''];
|
||||||
|
$data['$invoiceninja.whitelabel'] = ['value' => 'https://invoicing.co/images/new_logo.png', 'label' => ''];
|
||||||
|
$data['$primary_color'] = ['value' => $this->settings->primary_color, 'label' => ''];
|
||||||
|
$data['$secondary_color'] = ['value' => $this->settings->secondary_color, 'label' => ''];
|
||||||
|
|
||||||
$data['$payment1'] = ['value' => $this->helpers->formatCustomFieldValue($this->company->custom_fields, 'payment1', $this->payment->custom_value1, $this->client) ?: ' ', 'label' => $this->helpers->makeCustomField($this->company->custom_fields, 'payment1')];
|
$data['$payment1'] = ['value' => $this->helpers->formatCustomFieldValue($this->company->custom_fields, 'payment1', $this->payment->custom_value1, $this->client) ?: ' ', 'label' => $this->helpers->makeCustomField($this->company->custom_fields, 'payment1')];
|
||||||
$data['$payment2'] = ['value' => $this->helpers->formatCustomFieldValue($this->company->custom_fields, 'payment2', $this->payment->custom_value2, $this->client) ?: ' ', 'label' => $this->helpers->makeCustomField($this->company->custom_fields, 'payment2')];
|
$data['$payment2'] = ['value' => $this->helpers->formatCustomFieldValue($this->company->custom_fields, 'payment2', $this->payment->custom_value2, $this->client) ?: ' ', 'label' => $this->helpers->makeCustomField($this->company->custom_fields, 'payment2')];
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::table('payments', function (Blueprint $table) {
|
||||||
|
$table->text('refund_meta')->nullable();
|
||||||
|
$table->unsignedInteger('category_id')->nullable();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user