add types

This commit is contained in:
2024-05-06 17:13:38 +05:00
parent 88b934bda1
commit e5907fe3a9
46 changed files with 465 additions and 184 deletions

View File

@@ -48,6 +48,8 @@ class EventType
/**
* Laravel's default events
*
* @return array<string, string>
*/
public static function laravelDefaultEvents(): array
{
@@ -60,6 +62,8 @@ class EventType
/**
* Laravel nova events
*
* @return array<int, string>
*/
public static function laravelNovaEvents(): array
{

View File

@@ -11,7 +11,7 @@ use Stevebauman\Location\Facades\Location;
/**
* Check if a client IP is in our Server subnet
*
* @param string $server_ip
* @param string $ip
*/
function isLocalIp(string $ip = ''): bool
{
@@ -39,13 +39,13 @@ function isTurkmenIp(string $ip = ''): bool
*/
function unMaskPhone(string|int $phone): string
{
return substr(str_replace(['+', '(', ')', '-', '_'], '', $phone), 3);
return substr(str_replace(['+', '(', ')', '-', '_'], '', strval($phone)), 3);
}
/**
* Send a sms
*
* @return void
* @return mixed|void
*/
function sendSMS(string|int $phone, string|int $message)
{

View File

@@ -8,6 +8,7 @@ use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\View\View;
use Laravel\Nova\Nova;
class LoginController extends Controller
@@ -37,8 +38,6 @@ class LoginController extends Controller
/**
* Show the application's login form.
*
* @return \Inertia\Response|\Symfony\Component\HttpFoundation\Response
*/
public function showLoginForm()
{
@@ -81,9 +80,9 @@ class LoginController extends Controller
*
* @return string
*/
public function redirectPath()
public function redirectPath(): string
{
return Nova::url(Nova::$initialPath);
return Nova::url(is_callable(Nova::$initialPath) ? call_user_func(Nova::$initialPath) : Nova::$initialPath);
}
/**

View File

@@ -2,12 +2,14 @@
namespace App\Http\Controllers;
use Illuminate\Http\RedirectResponse;
class LocaleController extends Controller
{
/**
* @return RedirectResponse
*/
public function __invoke($locale)
public function __invoke(string $locale): RedirectResponse
{
if (array_key_exists($locale, config('app.locales'))) {
session()->put('locale', $locale);

View File

@@ -5,6 +5,7 @@ namespace App\Models\Branch;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Spatie\Translatable\HasTranslations;
class Branch extends Model

View File

@@ -127,6 +127,7 @@ class CardOrder extends Model
{
return match ($type) {
'index' => sprintf('%s/resources/card-orders', config('nova.path')),
default => config('nova.path'),
};
}
}

View File

@@ -65,7 +65,7 @@ class LoanOrder extends Model
/**
* The attributes that should be cast.
*
* @var array
* @var array<string, string>
*/
protected $casts = [
'born_at' => 'date',

View File

@@ -30,7 +30,7 @@ class ApiKeyHalkbank extends Model
/**
* Generate unique order number
*/
public static function generateOrderNumber($resource): int
public static function generateOrderNumber(mixed $resource): int
{
$order_number = static::firstOrCreate([
'billing_username' => $resource->billing_username ?? 'asdasd',
@@ -38,9 +38,9 @@ class ApiKeyHalkbank extends Model
], ['order_number' => '01122017270']);
$order_number->update([
'order_number' => $order_number->order_number + 1,
'order_number' => intval($order_number->order_number) + 1,
]);
return $order_number->order_number;
return (int) $order_number->order_number;
}
}

View File

@@ -146,6 +146,14 @@ class User extends Authenticatable
return $this->id === $loanOrder->user_id;
}
/**
* Check if user owns loan order.
*/
public function ownsCardOrder(CardOrder $cardOrder): bool
{
return $this->id === $cardOrder->user_id;
}
/**
* Check if phone is verified
*/

View File

@@ -2,9 +2,11 @@
namespace App\Nova;
use DragonCode\Contracts\Cashier\Config\Payments\Map;
use Illuminate\Http\Request;
use Laravel\Nova\Http\Requests\NovaRequest;
use Laravel\Nova\Resource as NovaResource;
use Illuminate\Database\Eloquent\Builder;
abstract class Resource extends NovaResource
{
@@ -36,18 +38,15 @@ abstract class Resource extends NovaResource
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public static function indexQuery(NovaRequest $request, $query)
public static function indexQuery(NovaRequest $request, mixed $query): Builder
{
return $query;
}
/**
* Build a Scout search query for the given resource.
*
* @param \Laravel\Scout\Builder $query
* @return \Laravel\Scout\Builder
*/
public static function scoutQuery(NovaRequest $request, $query)
public static function scoutQuery(NovaRequest $request, mixed $query) // @phpstan-ignore-line
{
return $query;
}

View File

@@ -21,6 +21,7 @@ use App\Repos\System\Settings\Legal\PassportRepo;
use App\Repos\System\Settings\Location\RegionRepo;
use App\Rules\DowranAgaAllowed;
use App\Rules\OnlyLetters;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
@@ -112,7 +113,7 @@ class CardOrder extends Resource
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public static function indexQuery(NovaRequest $request, $query)
public static function indexQuery(NovaRequest $request, mixed $query): Builder
{
$user = $request->user();
@@ -130,8 +131,8 @@ class CardOrder extends Resource
/**
* After resource created
*
* @param Laravel\Nova\Http\Requests\NovaRequest $request
* @param Illuminate\Database\Eloquent\Model $model
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @param \Illuminate\Database\Eloquent\Model $model
*/
public static function afterCreate(NovaRequest $request, Model $model): void
{
@@ -372,7 +373,7 @@ class CardOrder extends Resource
{
return [
RegionFilter::make()
->canSee(fn () => Gate::allows('isAdmin'), auth()->user()),
->canSee(fn () => Gate::allows('isAdmin', auth()->user())),
new StatusFilter(),
];

View File

@@ -6,6 +6,7 @@ use App\Models\Branch\Branch;
use App\Models\Order\Card\CardPin\CardPin as CardPinModel;
use App\Nova\Filters\RegionFilter;
use App\Nova\Filters\StatusFilter;
use Illuminate\Database\Eloquent\Builder;
use App\Nova\Nova;
use App\Nova\Resource;
use App\Nova\Resources\Order\Card\Requisite\Concerns\CardRequisiteFieldsForDetail;
@@ -55,7 +56,7 @@ class CardPin extends Resource
/**
* The columns that should be searched.
*
* @var array
* @var array<int, string>
*/
public static $search = [
'unique_id', 'customer_name', 'customer_surname', 'phone',
@@ -124,7 +125,7 @@ class CardPin extends Resource
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public static function indexQuery(NovaRequest $request, $query)
public static function indexQuery(NovaRequest $request, mixed $query): Builder
{
$user = $request->user();
@@ -142,8 +143,8 @@ class CardPin extends Resource
/**
* After resource created
*
* @param Laravel\Nova\Http\Requests\NovaRequest $request
* @param Illuminate\Database\Eloquent\Model $model
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @param \Illuminate\Database\Eloquent\Model $model
*/
public static function afterCreate(NovaRequest $request, Model $model): void
{
@@ -310,7 +311,7 @@ class CardPin extends Resource
{
return [
RegionFilter::make()
->canSee(fn () => Gate::allows('isAdmin'), auth()->user()),
->canSee(fn () => Gate::allows('isAdmin', auth()->user())),
new StatusFilter(),
];

View File

@@ -17,6 +17,7 @@ use App\Repos\System\Nova\NovaRepo;
use App\Repos\System\Settings\Legal\PassportRepo;
use App\Repos\System\Settings\Location\RegionRepo;
use App\Rules\OnlyLetters;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
@@ -106,7 +107,7 @@ class CardRequisite extends Resource
/**
* Get the text for the create resource button.
*
* @return string|null
* @return string
*/
public static function createButtonLabel(): string
{
@@ -116,7 +117,7 @@ class CardRequisite extends Resource
/**
* Get the text for the update resource button.
*
* @return string|null
* @return string
*/
public static function updateButtonLabel(): string
{
@@ -129,7 +130,7 @@ class CardRequisite extends Resource
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public static function indexQuery(NovaRequest $request, $query)
public static function indexQuery(NovaRequest $request, mixed $query): Builder
{
$user = $request->user();
@@ -147,8 +148,8 @@ class CardRequisite extends Resource
/**
* After resource created
*
* @param Laravel\Nova\Http\Requests\NovaRequest $request
* @param Illuminate\Database\Eloquent\Model $model
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @param \Illuminate\Database\Eloquent\Model $model
*/
public static function afterCreate(NovaRequest $request, Model $model): void
{
@@ -322,7 +323,7 @@ class CardRequisite extends Resource
{
return [
RegionFilter::make()
->canSee(fn () => Gate::allows('isAdmin'), auth()->user()),
->canSee(fn () => Gate::allows('isAdmin', auth()->user())),
new StatusFilter(),
];

View File

@@ -25,8 +25,11 @@ class CardRequisiteFieldsForDetail
{
/**
* Fields for index
*
* @param mixed $resource
* @return array<int, object>
*/
public static function make($resource): array
public static function make(mixed $resource): array
{
return [
ID::make()->hide(),

View File

@@ -19,6 +19,7 @@ use App\Repos\System\Settings\Legal\PassportRepo;
use App\Repos\System\Settings\Location\RegionRepo;
use App\Rules\DowranAgaAllowed;
use App\Rules\OnlyLetters;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
@@ -109,7 +110,7 @@ class LoanOrder extends Resource
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public static function indexQuery(NovaRequest $request, $query)
public static function indexQuery(NovaRequest $request, mixed $query): Builder
{
$user = $request->user();
@@ -376,7 +377,7 @@ class LoanOrder extends Resource
{
return [
RegionFilter::make()
->canSee(fn () => Gate::allows('isAdmin'), auth()->user()),
->canSee(fn () => Gate::allows('isAdmin', auth()->user())),
new StatusFilter(),
];

View File

@@ -23,10 +23,9 @@ class LoanPaidOffLetterOrderFieldsForDetail
/**
* Loan paidoff letter detail fields
*
* @param $resource
* @param $request
* @param mixed $resource
*/
public static function make(): array
public static function make(mixed $resource): array
{
return [
ID::make()->hide(),

View File

@@ -15,6 +15,7 @@ use App\Repos\System\Nova\NovaRepo;
use App\Repos\System\Settings\Legal\PassportRepo;
use App\Repos\System\Settings\Location\RegionRepo;
use App\Rules\OnlyLetters;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Gate;
use Laravel\Nova\Fields\Date;
@@ -100,7 +101,7 @@ class LoanPaidOffLetterOrder extends Resource
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public static function indexQuery(NovaRequest $request, $query)
public static function indexQuery(NovaRequest $request, mixed $query): Builder
{
$user = $request->user();
@@ -118,8 +119,8 @@ class LoanPaidOffLetterOrder extends Resource
/**
* After resource created
*
* @param Laravel\Nova\Http\Requests\NovaRequest $request
* @param Illuminate\Database\Eloquent\Model $model
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @param \Illuminate\Database\Eloquent\Model $model
*/
public static function afterCreate(NovaRequest $request, Model $model): void
{
@@ -261,7 +262,7 @@ class LoanPaidOffLetterOrder extends Resource
{
return [
RegionFilter::make()
->canSee(fn () => Gate::allows('isAdmin'), auth()->user()),
->canSee(fn () => Gate::allows('isAdmin', auth()->user())),
new StatusFilter(),
];

View File

@@ -25,7 +25,6 @@ class LoanOrderPerStatus extends Partition
return $this->count($request, LoanOrder::class, 'status')
->colors(OrderRepo::statusColors())
->label(fn ($value) => match ($value) {
null => __('None'),
default => OrderRepo::statusFormatted($value)
});
}

View File

@@ -29,7 +29,7 @@ class LocaleManagerResource extends Resource
/**
* The columns that should be searched.
*
* @var array
* @var array<int, string>
*/
public static $search = [
'name',
@@ -37,6 +37,8 @@ class LocaleManagerResource extends Resource
/**
* Get the fields displayed by the resource.
*
* @return array<int, \Laravel\Nova\Fields\Field>
*/
public function fields(NovaRequest $request): array
{
@@ -50,7 +52,7 @@ class LocaleManagerResource extends Resource
/**
* Get the cards available for the request.
*
* @return array
* @return array<int, string>
*/
public function cards(NovaRequest $request)
{
@@ -60,7 +62,7 @@ class LocaleManagerResource extends Resource
/**
* Get the filters available for the resource.
*
* @return array
* @return array<int, string>
*/
public function filters(NovaRequest $request)
{
@@ -70,7 +72,7 @@ class LocaleManagerResource extends Resource
/**
* Get the lenses available for the resource.
*
* @return array
* @return array<int, string>
*/
public function lenses(NovaRequest $request)
{
@@ -79,6 +81,8 @@ class LocaleManagerResource extends Resource
/**
* Get the actions available for the resource.
*
* @return array
*/
public function actions(NovaRequest $request): array
{

View File

@@ -33,7 +33,7 @@ class Province extends Resource
/**
* The columns that should be searched.
*
* @var array
* @var array<int, string>
*/
public static $search = [
'name',
@@ -57,6 +57,8 @@ class Province extends Resource
/**
* Get the fields displayed by the resource.
*
* @return array<int, string>
*/
public function fields(NovaRequest $request): array
{
@@ -82,6 +84,8 @@ class Province extends Resource
/**
* Get the cards available for the request.
*
* @return array<int, string>
*/
public function cards(NovaRequest $request): array
{
@@ -90,6 +94,8 @@ class Province extends Resource
/**
* Get the filters available for the resource.
*
* @return array<int, \Laravel\Nova\Filters\Filter>
*/
public function filters(NovaRequest $request): array
{
@@ -101,6 +107,8 @@ class Province extends Resource
/**
* Get the lenses available for the resource.
*
* @return array<int, string>
*/
public function lenses(NovaRequest $request): array
{
@@ -109,6 +117,8 @@ class Province extends Resource
/**
* Get the actions available for the resource.
*
* @return array<int, string>
*/
public function actions(NovaRequest $request): array
{

View File

@@ -28,7 +28,7 @@ class Permission extends Resource
/**
* The columns that should be searched.
*
* @var array
* @var array<int, string>
*/
public static $search = [
'id', 'name',
@@ -52,6 +52,8 @@ class Permission extends Resource
/**
* Get the fields displayed by the resource.
*
* @return array<int, string>
*/
public function fields(NovaRequest $request): array
{
@@ -73,6 +75,8 @@ class Permission extends Resource
/**
* Get the cards available for the request.
*
* @return array<int, string>
*/
public function cards(NovaRequest $request): array
{
@@ -81,6 +85,8 @@ class Permission extends Resource
/**
* Get the filters available for the resource.
*
* @return array<int, string>
*/
public function filters(NovaRequest $request): array
{
@@ -89,6 +95,8 @@ class Permission extends Resource
/**
* Get the lenses available for the resource.
*
* @return array<int, string>
*/
public function lenses(NovaRequest $request): array
{
@@ -97,6 +105,8 @@ class Permission extends Resource
/**
* Get the actions available for the resource.
*
* @return array<int, string>
*/
public function actions(NovaRequest $request): array
{

View File

@@ -5,6 +5,7 @@ namespace App\Nova\Resources\System\Roles;
use App\Models\System\Roles\Role as RoleModel;
use App\Nova\Resource;
use App\Repos\System\Nova\NovaRepo;
use Illuminate\Database\Eloquent\Builder;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Http\Requests\NovaRequest;
@@ -28,7 +29,7 @@ class Role extends Resource
/**
* The columns that should be searched.
*
* @var array
* @var array<int, string>
*/
public static $search = [
'id', 'name',
@@ -53,10 +54,10 @@ class Role extends Resource
/**
* Build an "index" query for the given resource.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
* @param \Illuminate\Database\Eloquent\Builder<\Illuminate\Database\Eloquent\Model> $query
* @return \Illuminate\Database\Eloquent\Builder<\Illuminate\Database\Eloquent\Model>
*/
public static function indexQuery(NovaRequest $request, $query)
public static function indexQuery(NovaRequest $request, mixed $query): Builder
{
$query->where('name', '!=', 'king');
@@ -65,6 +66,8 @@ class Role extends Resource
/**
* Get the fields displayed by the resource.
*
* @return array<int, string>
*/
public function fields(NovaRequest $request): array
{
@@ -86,6 +89,8 @@ class Role extends Resource
/**
* Get the cards available for the request.
*
* @return array<int, string>
*/
public function cards(NovaRequest $request): array
{
@@ -94,6 +99,8 @@ class Role extends Resource
/**
* Get the filters available for the resource.
*
* @return array<int, string>
*/
public function filters(NovaRequest $request): array
{
@@ -102,6 +109,8 @@ class Role extends Resource
/**
* Get the lenses available for the resource.
*
* @return array<int, string>
*/
public function lenses(NovaRequest $request): array
{
@@ -110,6 +119,8 @@ class Role extends Resource
/**
* Get the actions available for the resource.
*
* @return array<int, string>
*/
public function actions(NovaRequest $request): array
{

View File

@@ -1,93 +0,0 @@
<?php
namespace App\Nova\Resources;
use App\Nova\Resource;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Http\Requests\NovaRequest;
use Nurmuhammet\NovaInputmask\NovaInputmask;
class Test extends Resource
{
/**
* The model the resource corresponds to.
*
* @var class-string<\App\Models\Test>
*/
public static $model = \App\Models\Test::class;
/**
* The single value that should be used to represent the resource when being displayed.
*
* @var string
*/
public static $title = 'id';
/**
* The columns that should be searched.
*
* @var array
*/
public static $search = [
'phone',
];
/**
* Get the fields displayed by the resource.
*
* @return array
*/
public function fields(NovaRequest $request)
{
return [
ID::make()->sortable(),
NovaInputmask::make(__('Phone'), 'phone')
->mask('+(\\9\\93)-99-99-99-99')
->storeRawValue()
->size('w-1/4')
->rules('required', 'integer', 'between:61000000,65999999'),
];
}
/**
* Get the cards available for the request.
*
* @return array
*/
public function cards(NovaRequest $request)
{
return [];
}
/**
* Get the filters available for the resource.
*
* @return array
*/
public function filters(NovaRequest $request)
{
return [];
}
/**
* Get the lenses available for the resource.
*
* @return array
*/
public function lenses(NovaRequest $request)
{
return [];
}
/**
* Get the actions available for the resource.
*
* @return array
*/
public function actions(NovaRequest $request)
{
return [];
}
}

View File

@@ -7,6 +7,7 @@ use App\Nova\Resources\Order\Card\CardOrder;
use App\Nova\Resources\Order\Loan\LoanOrder;
use App\Nova\Resources\System\Roles\Permission;
use App\Nova\Resources\System\Roles\Role;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use Illuminate\Validation\Rules;
use Laravel\Nova\Fields\BelongsToMany;
@@ -38,7 +39,7 @@ class User extends Resource
/**
* The columns that should be searched.
*
* @var array
* @var array<int, string>
*/
public static $search = [
'id', 'name', 'email',
@@ -47,14 +48,11 @@ class User extends Resource
/**
* Build an "index" query for the given resource.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
* @param \Illuminate\Database\Eloquent\Builder<\Illuminate\Database\Eloquent\Model> $query
* @return \Illuminate\Database\Eloquent\Builder<\Illuminate\Database\Eloquent\Model>
*/
public static function indexQuery(NovaRequest $request, $query)
public static function indexQuery(NovaRequest $request, mixed $query): Builder
{
// $query->where('email', '!=', 'nurmuhammet@mail.com')
// ->where('email', '!=', 'mahmyt1206@gmail.com');
return $query;
}
@@ -76,6 +74,8 @@ class User extends Resource
/**
* Get the fields displayed by the resource.
*
* @return array<int, string>
*/
public function fields(NovaRequest $request): array
{
@@ -130,7 +130,7 @@ class User extends Resource
/**
* Get the cards available for the request.
*
* @return array
* @return array<int, string>
*/
public function cards(NovaRequest $request)
{
@@ -140,7 +140,7 @@ class User extends Resource
/**
* Get the filters available for the resource.
*
* @return array
* @return array<int, string>
*/
public function filters(NovaRequest $request)
{
@@ -150,7 +150,7 @@ class User extends Resource
/**
* Get the lenses available for the resource.
*
* @return array
* @return array<int, string>
*/
public function lenses(NovaRequest $request)
{
@@ -160,7 +160,7 @@ class User extends Resource
/**
* Get the actions available for the resource.
*
* @return array
* @return array<int, string>
*/
public function actions(NovaRequest $request)
{

View File

@@ -2,8 +2,9 @@
namespace App\Policies\Order\Card;
use App\Models\CardOrder;
use App\Models\Order\Card\CardOrder;
use App\Models\User;
use App\Repos\Order\OrderRepo;
class CardOrderPolicy
{
@@ -29,10 +30,10 @@ class CardOrderPolicy
}
if ($user->isOperator() && $user->can('viewCardOrders')) {
return $user->branches()->where('branches.id', $loanOrder->branch_id)->exists();
return $user->branches()->where('branches.id', $cardOrder->branch_id)->exists();
}
if ($user->ownsLoanOrder($loanOrder)) {
if ($user->ownsCardOrder($cardOrder)) {
return true;
}
@@ -61,10 +62,10 @@ class CardOrderPolicy
}
if ($user->isOperator() && $user->can('viewCardOrders')) {
return $user->branches()->where('branches.id', $loanOrder->branch_id)->exists();
return $user->branches()->where('branches.id', $cardOrder->branch_id)->exists();
}
if ($user->ownsLoanOrder($loanOrder) && in_array($loanOrder->status, [
if ($user->ownsCardOrder($cardOrder) && in_array($cardOrder->status, [
OrderRepo::PENDING,
])) {
return true;
@@ -83,10 +84,10 @@ class CardOrderPolicy
}
if ($user->isOperator() && $user->can('viewLoanOrders')) {
return $user->branches()->where('branches.id', $loanOrder->branch_id)->exists();
return $user->branches()->where('branches.id', $cardOrder->branch_id)->exists();
}
if ($user->ownsLoanOrder($loanOrder)) {
if ($user->ownsCardOrder($cardOrder)) {
return true;
}

View File

@@ -69,6 +69,8 @@ class NovaServiceProvider extends NovaApplicationServiceProvider
/**
* Get the dashboards that should be listed in the Nova sidebar.
*
* @return array<int, \App\Nova\Dashboards\Main>
*/
protected function dashboards(): array
{
@@ -79,6 +81,8 @@ class NovaServiceProvider extends NovaApplicationServiceProvider
/**
* Get the tools that should be listed in the Nova sidebar.
*
* @return array<int, string>
*/
public function tools(): array
{
@@ -111,7 +115,7 @@ class NovaServiceProvider extends NovaApplicationServiceProvider
public function setupUserNavigation(): void
{
Nova::userMenu(function (Request $request, Menu $menu) {
$menu->prepend(MenuItem::make(__('My Profile'), $request->user()->profilePage()));
$menu->prepend(MenuItem::make(__('My Profile'), $request->user()?->profilePage()));
return $menu;
});
@@ -138,7 +142,9 @@ class NovaServiceProvider extends NovaApplicationServiceProvider
*/
public function setupFieldMacros(): void
{
// @phpstan-ignore-next-line
Date::macro('toTurkmenFormat', fn () => $this->displayUsing(fn ($value) => $value?->format('d.m.Y')));
// @phpstan-ignore-next-line
DateTime::macro('turkmenDateTime', fn () => $this->displayUsing(fn ($value) => $value?->format('H:i, d.m.Y')));
}
}

View File

@@ -9,10 +9,13 @@ class BranchRepo
{
/**
* Model
*
* @var App\Models\Branch\Branch
*/
protected $model;
protected mixed $model;
/**
* Query
*/
protected mixed $query;
/**
* New Branch Repo
@@ -45,13 +48,15 @@ class BranchRepo
/**
* Query
*/
public function query()
public function query(): mixed
{
return $this->query;
}
/**
* Branch values
*
* @return \Illuminate\Support\Collection<int, string>|array<int, string>
*/
public static function values(): Collection|array
{

View File

@@ -13,7 +13,7 @@ class CardOrderRepo
*/
public static function creating(): Closure
{
return function ($model) {
return function (mixed $model) {
$model->status = $model->status ?: OrderRepo::defaultStatus();
};
}
@@ -31,8 +31,8 @@ class CardOrderRepo
/**
* Fill unique id
*/
public static function fillUniqueId($model): string
public static function fillUniqueId(mixed $model): string
{
return sprintf('TB%s-%s', Branch::find($model->branch_id)->unique_code, $model->id) ?? uniqid();
return sprintf('TB%s-%s', Branch::find($model->branch_id)->unique_code ?? uniqid(), $model->id);
}
}

View File

@@ -9,6 +9,8 @@ class CardStateRepo
{
/**
* Card state values
*
* @return \Illuminate\Support\Collection<int, string>|array<int, string>
*/
public static function values(): Collection|array
{

View File

@@ -9,6 +9,8 @@ class CardTypeRepo
{
/**
* Card type values
*
* @return \Illuminate\Support\Collection<int, string>|array<int, string>
*/
public static function values(): Collection|array
{

View File

@@ -5,6 +5,7 @@ namespace App\Repos\Order\Loan;
use App\Models\Branch\Branch;
use App\Repos\Order\OrderRepo;
use Closure;
use Illuminate\Database\Eloquent\Model;
class LoanOrderRepo
{
@@ -13,7 +14,7 @@ class LoanOrderRepo
*/
public static function creating(): Closure
{
return function ($model) {
return function (mixed $model) {
$model->status = $model->status ?: OrderRepo::defaultStatus();
};
}
@@ -31,8 +32,12 @@ class LoanOrderRepo
/**
* Fill unique id
*/
public static function fillUniqueId($model): string
public static function fillUniqueId(mixed $model): string
{
return sprintf('TB%s-%s', Branch::find($model->branch_id)->unique_code, $model->id) ?? uniqid();
return sprintf(
'TB%s-%s',
Branch::find($model->branch_id)->unique_code ?? uniqid(),
$model->id,
);
}
}

View File

@@ -9,6 +9,8 @@ class LoanTypeRepo
{
/**
* Loan type values
*
* @return \Illuminate\Support\Collection<string, mixed>|array<int, string>
*/
public static function values(): Collection|array
{

View File

@@ -39,6 +39,8 @@ class OrderRepo
/**
* Status Values
*
* @return array<string, string>
*/
public static function statusValues(): array
{
@@ -53,6 +55,8 @@ class OrderRepo
/**
* Tailwind
*
* @return array<string, string>
*/
public static function statusClasses(): array
{
@@ -67,6 +71,8 @@ class OrderRepo
/**
* Status icons
*
* @return array<string, string>
*/
public static function statusIcons(): array
{
@@ -81,6 +87,8 @@ class OrderRepo
/**
* HEX Colors
*
* @return array<string, string>
*/
public static function statusColors(): array
{

View File

@@ -29,13 +29,16 @@ class OnlinePaymentRepo
*/
public function getPrice(int|float|string $price): string
{
return number_format($price, 2, '', '');
return number_format(floatval($price), 2, '', '');
}
/**
* Pay card order
*
* @param mixed $resource
* @return array<string, string>
*/
public function payCardOrder($resource): array
public function payCardOrder(mixed $resource): array
{
$orderNumber = $this->generateOrderNumber($resource);
@@ -89,7 +92,7 @@ class OnlinePaymentRepo
/**
* Generate order number for payment
*/
public function generateOrderNumber($resource): int
public function generateOrderNumber(mixed $resource): int
{
return ApiKeyHalkbank::generateOrderNumber($resource);
}

View File

@@ -16,6 +16,8 @@ class PaymentStatusRepo
/**
* Payment statuses
*
* @return array<string, string>
*/
public static function values(): array
{

View File

@@ -6,6 +6,8 @@ class CountryRepo
{
/**
* List of countries
*
* @return array<string, string>
*/
public static function values(): array
{

View File

@@ -26,6 +26,8 @@ class NovaMenuRepo
{
/**
* Nova menu items
*
* @return array<int, \Laravel\Nova\Menu\MenuSection>
*/
public static function items(Request $request): array
{

View File

@@ -20,7 +20,7 @@ class NovaRepo
*/
public static function serving(ServingNova $event): void
{
// static::setLocale($event);
static::setLocale($event);
}
/**
@@ -44,11 +44,11 @@ class NovaRepo
/**
* Set locales
*/
public static function setLocale($event): void
public static function setLocale(ServingNova $event): void
{
$user = $event->request->user();
if (array_key_exists($user?->locale, config('app.locales'))) {
if ($user && array_key_exists($user->locale, config('app.locales'))) {
app()->setLocale($user->locale);
}
}
@@ -61,8 +61,8 @@ class NovaRepo
return function (Request $request) {
$locale = $request->post('locale');
if (array_key_exists($locale, config('app.locales'))) {
$request->user()->update(['locale' => $locale]);
if (is_string($locale) && array_key_exists($locale, config('app.locales'))) {
$request->user()?->update(['locale' => $locale]);
}
};
}

View File

@@ -20,6 +20,8 @@ class EducationRepo
/**
* Education statuses
*
* @return array<string, string>
*/
public static function values(): array
{

View File

@@ -16,6 +16,8 @@ class MarriageRepo
/**
* Marriage values
*
* @return array<string, string>
*/
public static function values(): array
{

View File

@@ -28,6 +28,8 @@ class PassportRepo
/**
* Passport values
*
* @return array<string, string>
*/
public static function values(): array
{

View File

@@ -41,6 +41,8 @@ class RegionRepo
/**
* Regions
*
* @return array<string, string>
*/
public static function values(): array
{

View File

@@ -33,11 +33,13 @@
},
"require-dev": {
"fakerphp/faker": "^1.9.1",
"larastan/larastan": "^2.0",
"laravel-lang/common": "^5.3",
"laravel/pint": "^1.0",
"laravel/sail": "^1.18",
"mockery/mockery": "^1.4.4",
"nunomaduro/collision": "^7.0",
"phpstan/phpstan": "^1.10",
"phpunit/phpunit": "^10.1",
"spatie/laravel-ignition": "^2.0"
},

250
composer.lock generated
View File

@@ -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": "4cf553bd6d5aa731d586647720d9315c",
"content-hash": "3cd540740add5d5729bbcc32e5d8ef44",
"packages": [
{
"name": "brick/math",
@@ -9553,6 +9553,108 @@
},
"time": "2020-07-09T08:09:16+00:00"
},
{
"name": "larastan/larastan",
"version": "v2.9.5",
"source": {
"type": "git",
"url": "https://github.com/larastan/larastan.git",
"reference": "101f1a4470f87326f4d3995411d28679d8800abe"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/larastan/larastan/zipball/101f1a4470f87326f4d3995411d28679d8800abe",
"reference": "101f1a4470f87326f4d3995411d28679d8800abe",
"shasum": ""
},
"require": {
"ext-json": "*",
"illuminate/console": "^9.52.16 || ^10.28.0 || ^11.0",
"illuminate/container": "^9.52.16 || ^10.28.0 || ^11.0",
"illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.0",
"illuminate/database": "^9.52.16 || ^10.28.0 || ^11.0",
"illuminate/http": "^9.52.16 || ^10.28.0 || ^11.0",
"illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.0",
"illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0",
"php": "^8.0.2",
"phpmyadmin/sql-parser": "^5.9.0",
"phpstan/phpstan": "^1.10.66"
},
"require-dev": {
"doctrine/coding-standard": "^12.0",
"nikic/php-parser": "^4.19.1",
"orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.2",
"orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.3",
"phpunit/phpunit": "^9.6.13 || ^10.5.16"
},
"suggest": {
"orchestra/testbench": "Using Larastan for analysing a package needs Testbench"
},
"type": "phpstan-extension",
"extra": {
"branch-alias": {
"dev-master": "2.0-dev"
},
"phpstan": {
"includes": [
"extension.neon"
]
}
},
"autoload": {
"psr-4": {
"Larastan\\Larastan\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Can Vural",
"email": "can9119@gmail.com"
},
{
"name": "Nuno Maduro",
"email": "enunomaduro@gmail.com"
}
],
"description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel",
"keywords": [
"PHPStan",
"code analyse",
"code analysis",
"larastan",
"laravel",
"package",
"php",
"static analysis"
],
"support": {
"issues": "https://github.com/larastan/larastan/issues",
"source": "https://github.com/larastan/larastan/tree/v2.9.5"
},
"funding": [
{
"url": "https://www.paypal.com/paypalme/enunomaduro",
"type": "custom"
},
{
"url": "https://github.com/canvural",
"type": "github"
},
{
"url": "https://github.com/nunomaduro",
"type": "github"
},
{
"url": "https://www.patreon.com/nunomaduro",
"type": "patreon"
}
],
"time": "2024-04-16T19:13:34+00:00"
},
{
"name": "laravel-lang/actions",
"version": "1.8.0",
@@ -10752,6 +10854,152 @@
},
"time": "2022-02-21T01:04:05+00:00"
},
{
"name": "phpmyadmin/sql-parser",
"version": "5.9.0",
"source": {
"type": "git",
"url": "https://github.com/phpmyadmin/sql-parser.git",
"reference": "011fa18a4e55591fac6545a821921dd1d61c6984"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/011fa18a4e55591fac6545a821921dd1d61c6984",
"reference": "011fa18a4e55591fac6545a821921dd1d61c6984",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0",
"symfony/polyfill-mbstring": "^1.3",
"symfony/polyfill-php80": "^1.16"
},
"conflict": {
"phpmyadmin/motranslator": "<3.0"
},
"require-dev": {
"phpbench/phpbench": "^1.1",
"phpmyadmin/coding-standard": "^3.0",
"phpmyadmin/motranslator": "^4.0 || ^5.0",
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan": "^1.9.12",
"phpstan/phpstan-phpunit": "^1.3.3",
"phpunit/php-code-coverage": "*",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"psalm/plugin-phpunit": "^0.16.1",
"vimeo/psalm": "^4.11",
"zumba/json-serializer": "~3.0.2"
},
"suggest": {
"ext-mbstring": "For best performance",
"phpmyadmin/motranslator": "Translate messages to your favorite locale"
},
"bin": [
"bin/highlight-query",
"bin/lint-query",
"bin/sql-parser",
"bin/tokenize-query"
],
"type": "library",
"autoload": {
"psr-4": {
"PhpMyAdmin\\SqlParser\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"GPL-2.0-or-later"
],
"authors": [
{
"name": "The phpMyAdmin Team",
"email": "developers@phpmyadmin.net",
"homepage": "https://www.phpmyadmin.net/team/"
}
],
"description": "A validating SQL lexer and parser with a focus on MySQL dialect.",
"homepage": "https://github.com/phpmyadmin/sql-parser",
"keywords": [
"analysis",
"lexer",
"parser",
"query linter",
"sql",
"sql lexer",
"sql linter",
"sql parser",
"sql syntax highlighter",
"sql tokenizer"
],
"support": {
"issues": "https://github.com/phpmyadmin/sql-parser/issues",
"source": "https://github.com/phpmyadmin/sql-parser"
},
"funding": [
{
"url": "https://www.phpmyadmin.net/donate/",
"type": "other"
}
],
"time": "2024-01-20T20:34:02+00:00"
},
{
"name": "phpstan/phpstan",
"version": "1.10.67",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/16ddbe776f10da6a95ebd25de7c1dbed397dc493",
"reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493",
"shasum": ""
},
"require": {
"php": "^7.2|^8.0"
},
"conflict": {
"phpstan/phpstan-shim": "*"
},
"bin": [
"phpstan",
"phpstan.phar"
],
"type": "library",
"autoload": {
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "PHPStan - PHP Static Analysis Tool",
"keywords": [
"dev",
"static analysis"
],
"support": {
"docs": "https://phpstan.org/user-guide/getting-started",
"forum": "https://github.com/phpstan/phpstan/discussions",
"issues": "https://github.com/phpstan/phpstan/issues",
"security": "https://github.com/phpstan/phpstan/security/policy",
"source": "https://github.com/phpstan/phpstan-src"
},
"funding": [
{
"url": "https://github.com/ondrejmirtes",
"type": "github"
},
{
"url": "https://github.com/phpstan",
"type": "github"
}
],
"time": "2024-04-16T07:22:02+00:00"
},
{
"name": "phpunit/php-code-coverage",
"version": "10.1.14",

18
phpstan.neon Normal file
View File

@@ -0,0 +1,18 @@
includes:
- vendor/larastan/larastan/extension.neon
parameters:
paths:
- app/
# Level 9 is the highest level
level: 5
# ignoreErrors:
# - '#PHPDoc tag @var#'
#
# excludePaths:
# - ./*/*/FileToBeExcluded.php
#
# checkMissingIterableValueType: false

View File

@@ -1,4 +1,7 @@
{
"rules": {
"no_superfluous_phpdoc_tags": false
},
"exclude": [
"nova"
]