add f payment
This commit is contained in:
@@ -5,7 +5,6 @@ namespace App\Http\Controllers;
|
|||||||
use App\Models\Order\Loan\LoanOrder;
|
use App\Models\Order\Loan\LoanOrder;
|
||||||
use App\Repos\Order\OrderRepo;
|
use App\Repos\Order\OrderRepo;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
|
||||||
|
|
||||||
class MetricsController extends Controller
|
class MetricsController extends Controller
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -168,4 +168,12 @@ class VisaMasterPaymentOrder extends Model implements HasMedia
|
|||||||
|
|
||||||
static::creating(LoanOrderRepo::creating());
|
static::creating(LoanOrderRepo::creating());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Price for order
|
||||||
|
*/
|
||||||
|
public function priceAmount(): float
|
||||||
|
{
|
||||||
|
return 250;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,6 +61,9 @@ class VisaMasterPaymentOrderFieldsForDetail
|
|||||||
Text::make(__('Note'), 'notes')
|
Text::make(__('Note'), 'notes')
|
||||||
->fullWidth()
|
->fullWidth()
|
||||||
->canSeeWhen('systemUser', $resource),
|
->canSeeWhen('systemUser', $resource),
|
||||||
|
]),
|
||||||
|
new Panel(__('Payment'), [
|
||||||
|
|
||||||
]),
|
]),
|
||||||
new Panel(__('Application type'), [
|
new Panel(__('Application type'), [
|
||||||
Select::make(__('Application type'), '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\Models\VisaMasterPaymentOrder;
|
||||||
use App\Modules\VisaMasterPaymentOrder\Nova\Resources\Concerns\VisaMasterPaymentOrderFieldsForDetail;
|
use App\Modules\VisaMasterPaymentOrder\Nova\Resources\Concerns\VisaMasterPaymentOrderFieldsForDetail;
|
||||||
use App\Modules\VisaMasterPaymentOrder\Nova\Resources\Concerns\VisaMasterPaymentOrderFieldsForIndex;
|
use App\Modules\VisaMasterPaymentOrder\Nova\Resources\Concerns\VisaMasterPaymentOrderFieldsForIndex;
|
||||||
|
use App\Nova\Actions\MakePaymentNovaVisaMaster;
|
||||||
use App\Nova\Resource;
|
use App\Nova\Resource;
|
||||||
use App\Repos\Order\Card\CardOrderRepo;
|
use App\Repos\Order\Card\CardOrderRepo;
|
||||||
use App\Repos\Order\OrderRepo;
|
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 App\Models\Payment\OnlinePaymentHistory;
|
||||||
use Illuminate\Support\Facades\Http;
|
use Illuminate\Support\Facades\Http;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Laravel\Nova\Makeable;
|
||||||
|
|
||||||
class OnlinePaymentRepo
|
class OnlinePaymentRepo
|
||||||
{
|
{
|
||||||
|
use Makeable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pending orders are brand new orders that have not been processed yet.
|
* Pending orders are brand new orders that have not been processed yet.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
"php": "^8.1",
|
"php": "^8.1",
|
||||||
"dedoc/scramble": "^0.11.11",
|
"dedoc/scramble": "^0.11.11",
|
||||||
"denniseilander/pulse-about-application": "^0.1.1",
|
"denniseilander/pulse-about-application": "^0.1.1",
|
||||||
|
"digital-creative/icon-action-toolbar": "^0.1.2",
|
||||||
"ebess/advanced-nova-media-library": "^4.2",
|
"ebess/advanced-nova-media-library": "^4.2",
|
||||||
"eminiarts/nova-tabs": "*",
|
"eminiarts/nova-tabs": "*",
|
||||||
"eolica/nova-locale-switcher": "dev-support-nova-4",
|
"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",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "a659769fcebee0f25a04da70449c4ac0",
|
"content-hash": "68508766b98f10cf8e0c0188d45a572e",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "adoy/fastcgi-client",
|
"name": "adoy/fastcgi-client",
|
||||||
@@ -606,6 +606,65 @@
|
|||||||
},
|
},
|
||||||
"time": "2024-07-08T12:26:09+00:00"
|
"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",
|
"name": "doctrine/cache",
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
|
|||||||
@@ -313,5 +313,8 @@
|
|||||||
"Guarantor Patronic name": "Zamunyň atasynyň ady",
|
"Guarantor Patronic name": "Zamunyň atasynyň ady",
|
||||||
"Satisfiable": "Kanagatlanarly",
|
"Satisfiable": "Kanagatlanarly",
|
||||||
"Insufficient": "Kanagatlanarsyz",
|
"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\Branch\Controllers\BranchController;
|
||||||
use App\Modules\LoanOrder\Controllers\LoanOrderController;
|
use App\Modules\LoanOrder\Controllers\LoanOrderController;
|
||||||
use App\Modules\Province\Controllers\ProvinceController;
|
use App\Modules\Province\Controllers\ProvinceController;
|
||||||
use ArchTech\Enums\Meta\Meta;
|
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user