add f payment
This commit is contained in:
@@ -5,7 +5,6 @@ namespace App\Http\Controllers;
|
||||
use App\Models\Order\Loan\LoanOrder;
|
||||
use App\Repos\Order\OrderRepo;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class MetricsController extends Controller
|
||||
{
|
||||
|
||||
@@ -168,4 +168,12 @@ class VisaMasterPaymentOrder extends Model implements HasMedia
|
||||
|
||||
static::creating(LoanOrderRepo::creating());
|
||||
}
|
||||
|
||||
/**
|
||||
* Price for order
|
||||
*/
|
||||
public function priceAmount(): float
|
||||
{
|
||||
return 250;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,6 +61,9 @@ class VisaMasterPaymentOrderFieldsForDetail
|
||||
Text::make(__('Note'), 'notes')
|
||||
->fullWidth()
|
||||
->canSeeWhen('systemUser', $resource),
|
||||
]),
|
||||
new Panel(__('Payment'), [
|
||||
|
||||
]),
|
||||
new Panel(__('Application type'), [
|
||||
Select::make(__('Application type'), 'type')
|
||||
|
||||
@@ -6,6 +6,7 @@ use App\Models\Branch\Branch;
|
||||
use App\Modules\VisaMasterPaymentOrder\Models\VisaMasterPaymentOrder;
|
||||
use App\Modules\VisaMasterPaymentOrder\Nova\Resources\Concerns\VisaMasterPaymentOrderFieldsForDetail;
|
||||
use App\Modules\VisaMasterPaymentOrder\Nova\Resources\Concerns\VisaMasterPaymentOrderFieldsForIndex;
|
||||
use App\Nova\Actions\MakePaymentNovaVisaMaster;
|
||||
use App\Nova\Resource;
|
||||
use App\Repos\Order\Card\CardOrderRepo;
|
||||
use App\Repos\Order\OrderRepo;
|
||||
@@ -333,4 +334,16 @@ class NovaVisaMasterPaymentOrder extends Resource
|
||||
]),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Actions
|
||||
*/
|
||||
public function actions(NovaRequest $request): array
|
||||
{
|
||||
return [
|
||||
MakePaymentNovaVisaMaster::make()
|
||||
->icon('credit-card')
|
||||
->sole(),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
120
app/Nova/Actions/MakePaymentNovaVisaMaster.php
Normal file
120
app/Nova/Actions/MakePaymentNovaVisaMaster.php
Normal file
@@ -0,0 +1,120 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova\Actions;
|
||||
|
||||
use App\Models\Payment\OnlinePaymentHistory;
|
||||
use App\Repos\Payment\OnlinePaymentRepo;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Laravel\Nova\Actions\Action;
|
||||
use Laravel\Nova\Actions\ActionResponse;
|
||||
use Laravel\Nova\Fields\ActionFields;
|
||||
use Laravel\Nova\Fields\Select;
|
||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||
|
||||
class MakePaymentNovaVisaMaster extends Action
|
||||
{
|
||||
use InteractsWithQueue, Queueable;
|
||||
|
||||
/**
|
||||
* Perform the action on the given models.
|
||||
*
|
||||
* @param \Laravel\Nova\Fields\ActionFields $fields
|
||||
* @param \Illuminate\Support\Collection $models
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle(ActionFields $fields, Collection $models)
|
||||
{
|
||||
$resource = $models->first();
|
||||
|
||||
$payment = $this->order($resource, $fields->payment_method);
|
||||
|
||||
if (! $resource->branch) {
|
||||
return ActionResponse::danger('Şahamça visa/master tölegi kabul edip bilmeýär.');
|
||||
}
|
||||
|
||||
return $payment['status'] === 'success'
|
||||
? ActionResponse::redirect($payment['url'])
|
||||
: ActionResponse::danger('Töleg ýerinde näsazlyk!');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the fields available on the action.
|
||||
*
|
||||
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
|
||||
* @return array
|
||||
*/
|
||||
public function fields(NovaRequest $request): array
|
||||
{
|
||||
return [
|
||||
Select::make(__('Select payment method'), 'payment_method')
|
||||
->displayUsingLabels()
|
||||
->searchable()
|
||||
->options([
|
||||
'usd' => __('USD'),
|
||||
'rubl' => __('RUBL'),
|
||||
])
|
||||
->rules('required')
|
||||
->fullWidth(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Order a payment page
|
||||
*/
|
||||
public function order($resource, $paymentMethod)
|
||||
{
|
||||
$onlinePaymentRepo = OnlinePaymentRepo::make();
|
||||
|
||||
$orderNumber = $onlinePaymentRepo->generateOrderNumber();
|
||||
|
||||
$paymentResponse = Http::get('https://mpi.gov.tm/payment/rest/register.do', [
|
||||
'orderNumber' => $orderNumber,
|
||||
'amount' => $onlinePaymentRepo->getPrice($paymentMethod == 'usd' ? '902.38' : '1058,60'),
|
||||
'currency' => 934,
|
||||
'language' => 'ru',
|
||||
'userName' => $resource->branch->billing_username,
|
||||
'password' => $resource->branch->billing_password,
|
||||
'returnUrl' => route('online-payment-store'),
|
||||
'pageView' => 'DESKTOP',
|
||||
'description' => 'Kart tölegi',
|
||||
])->onError(function ($response) {
|
||||
Log::channel('halkbank_payment_error')
|
||||
->error('Payment error', [
|
||||
'response' => [
|
||||
'body' => $response->body(),
|
||||
],
|
||||
]);
|
||||
});
|
||||
|
||||
if ($paymentResponse->failed()) {
|
||||
return [
|
||||
'status' => 'failed',
|
||||
'url' => '',
|
||||
];
|
||||
}
|
||||
|
||||
OnlinePaymentHistory::create([
|
||||
'online_paymantable_id' => $resource->id,
|
||||
'online_paymantable_type' => $resource::$model,
|
||||
'amount' => $resource->priceAmount(),
|
||||
'orderNumber' => $orderNumber,
|
||||
'description' => 'Kart tölegi',
|
||||
'orderId' => $paymentResponse['orderId'],
|
||||
'formUrl' => $paymentResponse['formUrl'],
|
||||
'successUrl' => route('online-payment-store'),
|
||||
'errorUrl' => route('online-payment-store'),
|
||||
'api_client' => config('app.url'),
|
||||
'username' => $resource->branch->billing_username,
|
||||
'paymentStatus' => OnlinePaymentRepo::PENDING,
|
||||
]);
|
||||
|
||||
return [
|
||||
'status' => 'success',
|
||||
'url' => $paymentResponse['formUrl'],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -5,9 +5,12 @@ namespace App\Repos\Payment;
|
||||
use App\Models\Payment\OnlinePaymentHistory;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Laravel\Nova\Makeable;
|
||||
|
||||
class OnlinePaymentRepo
|
||||
{
|
||||
use Makeable;
|
||||
|
||||
/**
|
||||
* Pending orders are brand new orders that have not been processed yet.
|
||||
*/
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"php": "^8.1",
|
||||
"dedoc/scramble": "^0.11.11",
|
||||
"denniseilander/pulse-about-application": "^0.1.1",
|
||||
"digital-creative/icon-action-toolbar": "^0.1.2",
|
||||
"ebess/advanced-nova-media-library": "^4.2",
|
||||
"eminiarts/nova-tabs": "*",
|
||||
"eolica/nova-locale-switcher": "dev-support-nova-4",
|
||||
|
||||
61
composer.lock
generated
61
composer.lock
generated
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "a659769fcebee0f25a04da70449c4ac0",
|
||||
"content-hash": "68508766b98f10cf8e0c0188d45a572e",
|
||||
"packages": [
|
||||
{
|
||||
"name": "adoy/fastcgi-client",
|
||||
@@ -606,6 +606,65 @@
|
||||
},
|
||||
"time": "2024-07-08T12:26:09+00:00"
|
||||
},
|
||||
{
|
||||
"name": "digital-creative/icon-action-toolbar",
|
||||
"version": "v0.1.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/dcasia/icon-action-toolbar.git",
|
||||
"reference": "2929c90d153553c0bc1d6072d8bdca4399848f23"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/dcasia/icon-action-toolbar/zipball/2929c90d153553c0bc1d6072d8bdca4399848f23",
|
||||
"reference": "2929c90d153553c0bc1d6072d8bdca4399848f23",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"laravel/nova": "^4.28.0",
|
||||
"php": ">=8.1"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"DigitalCreative\\IconActionToolbar\\IconActionToolbarServiceProvider"
|
||||
]
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"DigitalCreative\\IconActionToolbar\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Rafael Milewski"
|
||||
}
|
||||
],
|
||||
"description": "Allows you to update a single column of a resource all at once.",
|
||||
"keywords": [
|
||||
"batch-edit",
|
||||
"laravel",
|
||||
"nova",
|
||||
"toolbar"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/dcasia/icon-action-toolbar/issues",
|
||||
"source": "https://github.com/dcasia/icon-action-toolbar/tree/v0.1.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/milewski",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-06T08:23:56+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/cache",
|
||||
"version": "2.2.0",
|
||||
|
||||
@@ -313,5 +313,8 @@
|
||||
"Guarantor Patronic name": "Zamunyň atasynyň ady",
|
||||
"Satisfiable": "Kanagatlanarly",
|
||||
"Insufficient": "Kanagatlanarsyz",
|
||||
"Unknown": "Näbelli"
|
||||
"Unknown": "Näbelli",
|
||||
"Sber payments": "Sber tölegler",
|
||||
"Sber payment": "Sber töleg",
|
||||
"Select payment method": "Töleg görnüşini saýlaň"
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ use App\Modules\BaseAppEnum\Controllers\BaseAppEnumController;
|
||||
use App\Modules\Branch\Controllers\BranchController;
|
||||
use App\Modules\LoanOrder\Controllers\LoanOrderController;
|
||||
use App\Modules\Province\Controllers\ProvinceController;
|
||||
use ArchTech\Enums\Meta\Meta;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user