diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php index 413f8213ef77..adc3500acaeb 100644 --- a/app/Http/Controllers/PaymentController.php +++ b/app/Http/Controllers/PaymentController.php @@ -14,7 +14,6 @@ namespace App\Http\Controllers; use App\Events\Payment\PaymentWasUpdated; use App\Factory\PaymentFactory; use App\Filters\PaymentFilters; -use App\Http\Requests\Payment\ActionPaymentRequest; use App\Http\Requests\Payment\CreatePaymentRequest; use App\Http\Requests\Payment\DestroyPaymentRequest; 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\UploadPaymentRequest; use App\Models\Account; -use App\Models\Invoice; use App\Models\Payment; use App\Repositories\PaymentRepository; use App\Transformers\PaymentTransformer; use App\Utils\Ninja; use App\Utils\Traits\MakesHash; use App\Utils\Traits\SavesDocuments; -use Illuminate\Http\Request; use Illuminate\Http\Response; /** diff --git a/app/Models/Payment.php b/app/Models/Payment.php index 3773e8237d99..7898f1b41d80 100644 --- a/app/Models/Payment.php +++ b/app/Models/Payment.php @@ -30,6 +30,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @property int $id * @property int $company_id * @property int $client_id + * @property int $category_id * @property int|null $project_id * @property int|null $vendor_id * @property int|null $user_id @@ -58,6 +59,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @property int|null $exchange_currency_id * @property \App\Models\Paymentable $paymentable * @property object|null $meta + * @property object|null $refund_meta * @property string|null $custom_value1 * @property string|null $custom_value2 * @property string|null $custom_value3 @@ -151,12 +153,12 @@ class Payment extends BaseModel 'number', 'exchange_currency_id', 'exchange_rate', - // 'is_manual', 'private_notes', 'custom_value1', 'custom_value2', 'custom_value3', 'custom_value4', + 'category_id', ]; protected $casts = [ @@ -167,6 +169,7 @@ class Payment extends BaseModel 'deleted_at' => 'timestamp', 'is_deleted' => 'bool', 'meta' => 'object', + 'refund_meta' => 'array', ]; protected $with = [ @@ -436,11 +439,6 @@ class Payment extends BaseModel 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()) { $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'); } + public function setRefundMeta(array $data) + { + $tmp_meta = $this->refund_meta ?? []; + $tmp_meta[] = $data; + + $this->refund_meta = $tmp_meta; + } } diff --git a/app/Services/Payment/RefundPayment.php b/app/Services/Payment/RefundPayment.php index 007f1df6efbf..c3e5c442019f 100644 --- a/app/Services/Payment/RefundPayment.php +++ b/app/Services/Payment/RefundPayment.php @@ -23,33 +23,15 @@ use stdClass; class RefundPayment { - public $payment; - public $refund_data; - - private $credit_note; - - private $total_refund; - - private $gateway_refund_status; - - private $activity_repository; + private float $total_refund = 0; private bool $refund_failed = false; 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() @@ -135,6 +117,8 @@ class RefundPayment $this->payment->refunded += $this->total_refund; } + $this->payment->setRefundMeta($this->refund_data); + return $this; } diff --git a/app/Services/Template/TemplateAction.php b/app/Services/Template/TemplateAction.php index 0449a86263ea..c1a8ebbd1054 100644 --- a/app/Services/Template/TemplateAction.php +++ b/app/Services/Template/TemplateAction.php @@ -74,7 +74,8 @@ class TemplateAction implements ShouldQueue * */ public function handle() - { nlog("inside template action"); + { + // nlog("inside template action"); MultiDB::setDb($this->db); @@ -109,7 +110,7 @@ class TemplateAction implements ShouldQueue $ts = $template_service->build($data); - nlog($ts->getHtml()); + // nlog($ts->getHtml()); if($this->send_email) { $pdf = $ts->getPdf(); diff --git a/app/Services/Template/TemplateService.php b/app/Services/Template/TemplateService.php index 36c28eeb7422..4e3a2ace4564 100644 --- a/app/Services/Template/TemplateService.php +++ b/app/Services/Template/TemplateService.php @@ -16,6 +16,7 @@ use App\Models\Client; use App\Models\Credit; use App\Models\Design; use App\Models\Company; +use App\Models\Invoice; use App\Models\Payment; use App\Models\Project; use App\Models\Activity; @@ -529,37 +530,56 @@ class TemplateService 'refund_activity' => $this->getPaymentRefundActivity($payment), ]; + nlog($this->getPaymentRefundActivity($payment)); + 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 { - return Activity::where('activity_type_id', 40) - ->where('payment_id', $payment->id) - ->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){ - } + return collect($payment->refund_meta ?? []) + ->map(function ($refund) use($payment){ + $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'); - 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(); } diff --git a/app/Utils/PaymentHtmlEngine.php b/app/Utils/PaymentHtmlEngine.php index e3b0be94c06d..eaa8e902e413 100644 --- a/app/Utils/PaymentHtmlEngine.php +++ b/app/Utils/PaymentHtmlEngine.php @@ -64,7 +64,15 @@ class PaymentHtmlEngine $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['$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['$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')]; diff --git a/database/migrations/2023_10_08_092508_add_refund_meta_and_category_to_payments_table.php b/database/migrations/2023_10_08_092508_add_refund_meta_and_category_to_payments_table.php new file mode 100644 index 000000000000..b738ff15616b --- /dev/null +++ b/database/migrations/2023_10_08_092508_add_refund_meta_and_category_to_payments_table.php @@ -0,0 +1,26 @@ +text('refund_meta')->nullable(); + $table->unsignedInteger('category_id')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + } +};