This commit is contained in:
2025-05-29 22:39:52 +05:00
parent 0035c604e1
commit 9123eed007
14 changed files with 413 additions and 62 deletions

View File

@@ -1,38 +0,0 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Order\Card\CardTransaction\CardTransaction;
use App\Nova\Resources\Order\Card\CardTransaction\Actions\DownloadCardTransaction;
use Carbon\Carbon;
use Illuminate\Support\Str;
class CardTransactionController extends Controller
{
public function show(CardTransaction $transaction)
{
// $a = new DownloadCardTransaction;
// $start_date = Carbon::create(date('Y-m-d', strtotime('-12 months')));
// $end_date = Carbon::create(date('Y-m-d'));
// $response = $a->fetchApi(
// passport_serie: $transaction->passport_serie,
// passport_id: $transaction->passport_id,
// card_number_masked: Str::mask($transaction->card_number, '*', 6, 6),
// card_expire_date: $transaction->card_month.'/'.substr($transaction->card_year, 2),
// start_date: $start_date->format('d.m.Y'),
// end_date: $end_date->format('d.m.Y'),
// );
// /** @var ResponseTypes\AzatApiClientInfoAllResponse */
// $data = Str::isJson($response)
// ? json_decode($response)
// : emptyClass(errCode: 1, message: 'Connection issue to VP');
// return view('orders.cards.card-transaction.download-card-transaction', [
// 'transaction' => $data
// ]);
}
}

View File

@@ -3,6 +3,8 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Blade;
use Mpdf\Mpdf;
class ApiTesterController extends Controller
{

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Models\Order\Card\CardBalance;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Laravel\Nova\Actions\Actionable;
/**
* @property int $id
* @property string $passport_serie
* @property string $passport_id
* @property string $card_number
* @property string $card_month
* @property string $card_year
* @property \Illuminate\Support\Carbon $created_at
* @property \Illuminate\Support\Carbon $updated_at
*/
class CardBalance extends Model
{
use Actionable;
use HasFactory;
use SoftDeletes;
}

View File

@@ -36,7 +36,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @property string $ready_files
* @property \Illuminate\Support\Carbon $created_at
* @property \Illuminate\Support\Carbon $updated_at
*/
*/
class CardRequisite extends Model
{
use HasFactory;

View File

@@ -0,0 +1,94 @@
<?php
namespace App\Nova\Resources\Order\Card\CardBalance\Actions;
use App\Nova\Resources\Order\Card\CardTransaction\Actions\DownloadCardTransaction;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Str;
use Laravel\Nova\Actions\Action;
use Laravel\Nova\Actions\ActionResponse;
use Laravel\Nova\Fields\ActionFields;
use Laravel\Nova\Fields\Date;
use Laravel\Nova\Http\Requests\NovaRequest;
use Markwalet\NovaModalResponse\ModalResponse;
use Mpdf\Mpdf;
class DownloadCardBalance extends Action
{
use InteractsWithQueue, Queueable;
/**
* Name.
*/
public function name(): string
{
return __('Download');
}
/**
* 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)
{
/** @var \App\Models\Order\Card\CardBalance\CardBalance */
$model = $models->first();
/** @var \App\Nova\Resources\Order\Card\CardTransaction\Actions\ResponseTypes\AzatApiClientInfoAllResponse */
$data = $this->fetchApi($model);
if ($data->errCode != 0) {
return ActionResponse::danger($data->message);
}
return Action::modal('modal-response', [
'title' => __('Card balance'),
'html' => Blade::render(
file_get_contents(app_path('Nova/Resources/Order/Card/CardBalance/Views/card-balance.blade.php')),
['data' => $data]
)
]);
}
/**
* Get the fields available on the action.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function fields(NovaRequest $request)
{
return [];
}
/**
* Fetch api
*
* @param \App\Models\Order\Card\Requisite\CardRequisite $model
*/
public function fetchApi($model)
{
$date = today()->format('d.m.Y');
$response = DownloadCardTransaction::make()->fetchApi(
passport_serie: $model->passport_serie,
passport_id: $model->passport_id,
card_number_masked: Str::mask($model->card_number, '*', 6, 6),
card_expire_date: $model->card_month.'/'.substr($model->card_year, 2),
start_date: $date,
end_date: $date,
);
return Str::isJson($response)
? json_decode($response)
: emptyClass(errCode: 1, message: 'Connection issue to VP');
}
}

View File

@@ -0,0 +1,174 @@
<?php
namespace App\Nova\Resources\Order\Card\CardBalance;
use App\Modules\DateHelper\Repositories\DateHelperRepository;
use App\Nova\Resource;
use App\Nova\Resources\Order\Card\CardBalance\Actions\DownloadCardBalance;
use App\Repos\System\Settings\Legal\PassportRepo;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\Hidden;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Http\Requests\NovaRequest;
use Nurmuhammet\NovaInputmask\NovaInputmask;
class CardBalance extends Resource
{
/**
* The model the resource corresponds to.
*
* @var class-string<\App\Models\Order\Card\CardBalance\CardBalance>
*/
public static $model = \App\Models\Order\Card\CardBalance\CardBalance::class;
/**
* The single value that should be used to represent the resource when being displayed.
*
* @var string
*/
public static $title = 'unique_id';
/**
* The columns that should be searched.
*
* @var array
*/
public static $search = [
'unique_id',
];
/**
* Get the displayable label of the resource.
*/
public static function label(): string
{
return __('Card balances');
}
/**
* Get the displayable singular label of the resource.
*/
public static function singularLabel(): string
{
return __('Card balance');
}
/**
* Build an "index" query for the given resource.
*
* @param \Illuminate\Database\Eloquent\Builder<\App\Models\Order\Card\CardBalance\CardBalance> $query
* @return \Illuminate\Database\Eloquent\Builder<\App\Models\Order\Card\CardBalance\CardBalance>
*/
public static function indexQuery(NovaRequest $request, $query): Builder
{
/** @var \App\Models\User */
$user = $request->user();
if ($user->isAdmin()) {
return $query;
}
if ($user->isOperator() && count($user->branches()->pluck('branches.id')) < 1) {
return $query->whereIn('branch_id', $user->branches()->pluck('branches.id'));
}
return $query->where('user_id', $user->id);
}
/**
* Get the fields displayed by the resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function fields(NovaRequest $request): array
{
return [
ID::make()->sortable(),
Hidden::make('user_id')
->default(auth()->id())
->hideWhenUpdating(),
Select::make(__('Passport serie'), 'passport_serie')
->displayUsingLabels()
->searchable()
->options(PassportRepo::values())
->size('w-1/2')
->rules('required'),
NovaInputmask::make(__('Passport id'), 'passport_id')
->mask('999999')
->size('w-1/2')
->rules('required', 'numeric', 'digits:6'),
NovaInputmask::make(__('Card number'), 'card_number')
->mask('9999-9999-9999-9999')
->storeRawValue()
->size('md:w-1/2')
->rules('required', 'digits:16'),
Select::make(__('Card').' '.__('Expiration month'), 'card_month')
->searchable()
->options(DateHelperRepository::staticNumberMonths())
->size('md:w-1/4')
->rules('required'),
Select::make(__('Card').' '.__('Expiration year'), 'card_year')
->searchable()
->options(DateHelperRepository::staticNumberYears())
->size('md:w-1/4')
->rules('required'),
];
}
/**
* Get the cards available for the request.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function cards(NovaRequest $request)
{
return [];
}
/**
* Get the filters available for the resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function filters(NovaRequest $request)
{
return [];
}
/**
* Get the lenses available for the resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function lenses(NovaRequest $request)
{
return [];
}
/**
* Get the actions available for the resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function actions(NovaRequest $request)
{
return [
DownloadCardBalance::make()
->icon('arrow-down-tray')
->sole(),
];
}
}

File diff suppressed because one or more lines are too long

View File

@@ -5,7 +5,6 @@ namespace App\Nova\Resources\Order\Card\Requisite\Actions;
use App\Nova\Resources\Order\Card\CardTransaction\Actions\DownloadCardTransaction;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Str;
@@ -77,7 +76,7 @@ class DownloadCardRequisite extends Action
return Str::isJson($response)
? json_decode($response)
: emptyClass(errCode: 1, message: 'Connection issue to VP');;
: emptyClass(errCode: 1, message: 'Connection issue to VP');
}
/**

View File

@@ -13,7 +13,6 @@ use App\Nova\Resources\Order\Card\Requisite\Actions\DownloadCardRequisite;
use App\Nova\Resources\Order\Card\Requisite\Concerns\CardRequisiteFieldsForDetail;
use App\Nova\Resources\Order\Card\Requisite\Concerns\CardRequisiteFieldsForIndex;
use App\Repos\Order\Card\CardOrderRepo;
use App\Repos\Order\Card\CardTypeRepo;
use App\Repos\Order\OrderRepo;
use App\Repos\System\Nova\NovaRepo;
use App\Repos\System\Settings\Legal\PassportRepo;
@@ -23,7 +22,6 @@ use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Gate;
use Laravel\Nova\Fields\Date;
use Laravel\Nova\Fields\File;
use Laravel\Nova\Fields\Hidden;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Image;

View File

@@ -4,7 +4,6 @@ namespace App\Nova\Resources\Order\Card\Requisite\Concerns;
use App\Modules\DateHelper\Repositories\DateHelperRepository;
use App\Nova\Resources\Branch\Branch;
use App\Nova\Resources\Order\Card\CardType;
use App\Nova\User;
use App\Repos\Order\OrderRepo;
use App\Repos\System\Settings\Legal\PassportRepo;
@@ -13,7 +12,6 @@ use Laravel\Nova\Fields\Badge;
use Laravel\Nova\Fields\BelongsTo;
use Laravel\Nova\Fields\Date;
use Laravel\Nova\Fields\DateTime;
use Laravel\Nova\Fields\File;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Image;
use Laravel\Nova\Fields\Number;
@@ -60,7 +58,7 @@ class CardRequisiteFieldsForDetail
->options(DateHelperRepository::staticNumberMonths()),
Select::make(__('Card').' '.__('Expiration year'), 'card_year')
->options(DateHelperRepository::staticNumberYears())
->options(DateHelperRepository::staticNumberYears()),
]),
new Panel(__('Location'), [

View File

@@ -9,6 +9,7 @@ use App\Nova\Dashboards\Main;
use App\Nova\Resources\Branch\Branch;
use App\Nova\Resources\CurrencyRate;
use App\Nova\Resources\NovaVisaMasterSetting;
use App\Nova\Resources\Order\Card\CardBalance\CardBalance;
use App\Nova\Resources\Order\Card\CardOrder;
use App\Nova\Resources\Order\Card\CardState;
use App\Nova\Resources\Order\Card\CardTransaction\CardTransaction;
@@ -59,6 +60,7 @@ class NovaMenuRepo
MenuItem::resource(CardOrder::class)->name(__('Order new card')),
MenuItem::resource(CardTransaction::class),
MenuItem::resource(CardRequisite::class),
MenuItem::resource(CardBalance::class),
MenuItem::resource(CardPin::class),
])->collapsedByDefault(),

View File

@@ -0,0 +1,38 @@
<?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::create('card_balances', function (Blueprint $table) {
$table->id();
$table->string('unique_id')->nullable()->unique();
$table->string('passport_serie');
$table->string('passport_id');
$table->string('card_number');
$table->string('card_month');
$table->string('card_year');
$table->foreignId('user_id')->constrained('users')->restrictOnDelete();
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('card_balances');
}
};

View File

@@ -344,5 +344,9 @@
"Loan order updated": "Karz sargydy üýtgedildi",
"Loan order deleted": "Karz sargydy pozuldy",
"Card transaction": "Kart herekedi",
"Card transactions": "Kart hereketleri"
"Card transactions": "Kart hereketleri",
"Card balance": "Kart galyndysy",
"Card balances": "Kart galyndylary",
"Card holder name": "Kartyň eýesiniň ady",
"Money Balance": "Galyndy"
}

12
ok.html
View File

@@ -1,12 +0,0 @@
$printLocation = "/var/www/sirk/backend/storage/app/public/tickets/{$booking->orderId}.pdf";
$url = route('booking-ticket', ['q' => $request->q]);
$result = Process::run("/home/ubuntu/chrome-linux/chrome --headless --print-to-pdf=$printLocation $url --no-sandbox");
if ($result->successful()) {
return redirect("https://atchylyksirk.gov.tm/storage/tickets/{$booking->orderId}.pdf");
} else {
return back();
}