This commit is contained in:
2025-11-03 11:54:07 +05:00
parent 870aba0bcf
commit 38b9908e1e
21 changed files with 150 additions and 75 deletions

View File

@@ -2,13 +2,14 @@
namespace App\Filament\Clusters\Cards\Cards; namespace App\Filament\Clusters\Cards\Cards;
use App\Filament\Clusters\Cards\Cards\Pages\ManageCards;
use App\Filament\Clusters\Cards\CardsCluster; use App\Filament\Clusters\Cards\CardsCluster;
use App\Filament\Clusters\Cards\Cards\Pages\ManageCards;
use App\Modules\AppHelpers\Repositories\DateHelper; use App\Modules\AppHelpers\Repositories\DateHelper;
use App\Modules\Card\Filament\Actions\CheckCardBalanceAction; use App\Modules\Card\Filament\Actions\CheckCardBalanceAction;
use App\Modules\Card\Filament\Actions\DownloadCardRequisteAction; use App\Modules\Card\Filament\Actions\DownloadCardRequisteAction;
use App\Modules\Card\Filament\Actions\DownloadCardTransactionAction; use App\Modules\Card\Filament\Actions\DownloadCardTransactionAction;
use App\Modules\Card\Models\Card; use App\Modules\Card\Models\Card;
use App\Modules\DefaultQueryForResourceIndex\Repositories\DefaultQueryForResourceIndexRepository;
use BackedEnum; use BackedEnum;
use Filament\Actions\BulkActionGroup; use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction; use Filament\Actions\DeleteAction;
@@ -90,7 +91,7 @@ class CardResource extends Resource
{ {
return $table return $table
->modifyQueryUsing(function (Builder $query) { ->modifyQueryUsing(function (Builder $query) {
$query->where('user_id', user()->id); DefaultQueryForResourceIndexRepository::make($query);
}) })
->columns([ ->columns([
TextColumn::make('number') TextColumn::make('number')

View File

@@ -6,12 +6,9 @@ use App\Filament\Clusters\Loans\LoansCluster;
use App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Pages\CreateLoanOrderMobile; use App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Pages\CreateLoanOrderMobile;
use App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Pages\EditLoanOrderMobile; use App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Pages\EditLoanOrderMobile;
use App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Pages\ListLoanOrderMobiles; use App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Pages\ListLoanOrderMobiles;
use App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Pages\ViewLoanOrderMobile;
use App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Schemas\LoanOrderMobileForm; use App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Schemas\LoanOrderMobileForm;
use App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Schemas\LoanOrderMobileInfolist;
use App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Tables\LoanOrderMobilesTable; use App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Tables\LoanOrderMobilesTable;
use App\Modules\LoanOrder\Models\LoanOrder; use App\Modules\LoanOrder\Models\LoanOrder;
use App\Modules\LoanOrder\Models\LoanOrderMobile;
use BackedEnum; use BackedEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
@@ -41,7 +38,7 @@ class LoanOrderMobileResource extends Resource
public static function getModelLabel(): string public static function getModelLabel(): string
{ {
return __('module.loan-order::loan-order.loan_order'). ' (mobile app)'; return __('module.loan-order::loan-order.loan_order').' (mobile app)';
} }
public static function getPluralModelLabel(): string public static function getPluralModelLabel(): string

View File

@@ -3,7 +3,6 @@
namespace App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Schemas; namespace App\Filament\Clusters\Loans\Resources\LoanOrderMobiles\Schemas;
use App\Modules\AppHelpers\Repositories\DateHelper; use App\Modules\AppHelpers\Repositories\DateHelper;
use App\Modules\LoanOrder\Models\LoanOrder;
use App\Modules\LoanOrder\Models\LoanOrderRequiredDocs; use App\Modules\LoanOrder\Models\LoanOrderRequiredDocs;
use App\Modules\LoanOrder\Repositories\LoanOrderRepository; use App\Modules\LoanOrder\Repositories\LoanOrderRepository;
use App\Modules\OrderStatus\Repositories\OrderStatusRepository; use App\Modules\OrderStatus\Repositories\OrderStatusRepository;
@@ -380,23 +379,23 @@ class LoanOrderMobileForm
->required() ->required()
->columnSpan(1), ->columnSpan(1),
]), ]),
Tab::make(__('Guarantor'). ' 1') Tab::make(__('Guarantor').' 1')
->columns(6) ->columns(6)
->schema([ ->schema([
TextInput::make('guarantor_name') TextInput::make('guarantor_name')
->label(__('Guarantor').' '. __('Name')) ->label(__('Guarantor').' '.__('Name'))
->columnSpan(2) ->columnSpan(2)
->required() ->required()
->maxLength(255), ->maxLength(255),
TextInput::make('guarantor_surname') TextInput::make('guarantor_surname')
->label(__('Guarantor').' '. __('Surname')) ->label(__('Guarantor').' '.__('Surname'))
->columnSpan(2) ->columnSpan(2)
->required() ->required()
->maxLength(255), ->maxLength(255),
TextInput::make('guarantor_patronic_name') TextInput::make('guarantor_patronic_name')
->label(__('Guarantor').' '. __('Patronic name')) ->label(__('Guarantor').' '.__('Patronic name'))
->columnSpan(2) ->columnSpan(2)
->maxLength(255), ->maxLength(255),
@@ -419,7 +418,7 @@ class LoanOrderMobileForm
->columns(2), ->columns(2),
TextInput::make('guarantor_note') TextInput::make('guarantor_note')
->label(__('Guarantor').' '. __('Salary')) ->label(__('Guarantor').' '.__('Salary'))
->columnSpan(3) ->columnSpan(3)
->required() ->required()
->maxLength(255), ->maxLength(255),
@@ -451,7 +450,7 @@ class LoanOrderMobileForm
->columnSpan(1) ->columnSpan(1)
->required(), ->required(),
]), ]),
Tab::make(__('Guarantor'). ' 2') Tab::make(__('Guarantor').' 2')
->columns(6) ->columns(6)
->hidden(function (Get $get): bool { ->hidden(function (Get $get): bool {
$loan_amount = $get('loan_amount'); $loan_amount = $get('loan_amount');
@@ -460,19 +459,19 @@ class LoanOrderMobileForm
}) })
->schema([ ->schema([
TextInput::make('guarantor_2_name') TextInput::make('guarantor_2_name')
->label(__('Guarantor').' '. __('Name')) ->label(__('Guarantor').' '.__('Name'))
->columnSpan(2) ->columnSpan(2)
->required() ->required()
->maxLength(255), ->maxLength(255),
TextInput::make('guarantor_2_surname') TextInput::make('guarantor_2_surname')
->label(__('Guarantor').' '. __('Surname')) ->label(__('Guarantor').' '.__('Surname'))
->columnSpan(2) ->columnSpan(2)
->required() ->required()
->maxLength(255), ->maxLength(255),
TextInput::make('guarantor_2_patronic_name') TextInput::make('guarantor_2_patronic_name')
->label(__('Guarantor').' '. __('Patronic name')) ->label(__('Guarantor').' '.__('Patronic name'))
->columnSpan(2) ->columnSpan(2)
->maxLength(255), ->maxLength(255),
@@ -495,7 +494,7 @@ class LoanOrderMobileForm
->columns(2), ->columns(2),
TextInput::make('guarantor_2_note') TextInput::make('guarantor_2_note')
->label(__('Guarantor').' '. __('Salary')) ->label(__('Guarantor').' '.__('Salary'))
->columnSpan(3) ->columnSpan(3)
->required() ->required()
->maxLength(255), ->maxLength(255),

View File

@@ -161,7 +161,7 @@ class LoanPaidOffLetterForm
->required() ->required()
->maxLength(255) ->maxLength(255)
->columnSpan(6), ->columnSpan(6),
FileUpload::make('loan_file') FileUpload::make('loan_file')
->label(__('Loan paid off letter file')) ->label(__('Loan paid off letter file'))
->columnSpan(2) ->columnSpan(2)

View File

@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace App\Modules\Branch\Policies; namespace App\Modules\Branch\Policies;
use Illuminate\Foundation\Auth\User as AuthUser;
use App\Modules\Branch\Models\Branch; use App\Modules\Branch\Models\Branch;
use Illuminate\Auth\Access\HandlesAuthorization; use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Foundation\Auth\User as AuthUser;
class BranchPolicy class BranchPolicy
{ {
use HandlesAuthorization; use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool public function viewAny(AuthUser $authUser): bool
{ {
return $authUser->can('ViewAny:Branch'); return $authUser->can('ViewAny:Branch');
@@ -66,5 +66,4 @@ class BranchPolicy
{ {
return $authUser->can('Reorder:Branch'); return $authUser->can('Reorder:Branch');
} }
}
}

View File

@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace App\Modules\Card\Policies; namespace App\Modules\Card\Policies;
use Illuminate\Foundation\Auth\User as AuthUser;
use App\Modules\Card\Models\Card; use App\Modules\Card\Models\Card;
use Illuminate\Auth\Access\HandlesAuthorization; use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Foundation\Auth\User as AuthUser;
class CardPolicy class CardPolicy
{ {
use HandlesAuthorization; use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool public function viewAny(AuthUser $authUser): bool
{ {
return $authUser->can('ViewAny:Card'); return $authUser->can('ViewAny:Card');
@@ -66,5 +66,4 @@ class CardPolicy
{ {
return $authUser->can('Reorder:Card'); return $authUser->can('Reorder:Card');
} }
}
}

View File

@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace App\Modules\CardOrder\Policies; namespace App\Modules\CardOrder\Policies;
use Illuminate\Foundation\Auth\User as AuthUser;
use App\Modules\CardOrder\Models\CardOrder; use App\Modules\CardOrder\Models\CardOrder;
use Illuminate\Auth\Access\HandlesAuthorization; use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Foundation\Auth\User as AuthUser;
class CardOrderPolicy class CardOrderPolicy
{ {
use HandlesAuthorization; use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool public function viewAny(AuthUser $authUser): bool
{ {
return $authUser->can('ViewAny:CardOrder'); return $authUser->can('ViewAny:CardOrder');
@@ -66,5 +66,4 @@ class CardOrderPolicy
{ {
return $authUser->can('Reorder:CardOrder'); return $authUser->can('Reorder:CardOrder');
} }
}
}

View File

@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace App\Modules\CardOrder\Policies; namespace App\Modules\CardOrder\Policies;
use Illuminate\Foundation\Auth\User as AuthUser;
use App\Modules\CardOrder\Models\CardState; use App\Modules\CardOrder\Models\CardState;
use Illuminate\Auth\Access\HandlesAuthorization; use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Foundation\Auth\User as AuthUser;
class CardStatePolicy class CardStatePolicy
{ {
use HandlesAuthorization; use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool public function viewAny(AuthUser $authUser): bool
{ {
return $authUser->can('ViewAny:CardState'); return $authUser->can('ViewAny:CardState');
@@ -66,5 +66,4 @@ class CardStatePolicy
{ {
return $authUser->can('Reorder:CardState'); return $authUser->can('Reorder:CardState');
} }
}
}

View File

@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace App\Modules\CardOrder\Policies; namespace App\Modules\CardOrder\Policies;
use Illuminate\Foundation\Auth\User as AuthUser;
use App\Modules\CardOrder\Models\CardType; use App\Modules\CardOrder\Models\CardType;
use Illuminate\Auth\Access\HandlesAuthorization; use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Foundation\Auth\User as AuthUser;
class CardTypePolicy class CardTypePolicy
{ {
use HandlesAuthorization; use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool public function viewAny(AuthUser $authUser): bool
{ {
return $authUser->can('ViewAny:CardType'); return $authUser->can('ViewAny:CardType');
@@ -66,5 +66,4 @@ class CardTypePolicy
{ {
return $authUser->can('Reorder:CardType'); return $authUser->can('Reorder:CardType');
} }
}
}

View File

@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace App\Modules\CardPinOrder\Policies; namespace App\Modules\CardPinOrder\Policies;
use Illuminate\Foundation\Auth\User as AuthUser;
use App\Modules\CardPinOrder\Models\CardPinOrder; use App\Modules\CardPinOrder\Models\CardPinOrder;
use Illuminate\Auth\Access\HandlesAuthorization; use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Foundation\Auth\User as AuthUser;
class CardPinOrderPolicy class CardPinOrderPolicy
{ {
use HandlesAuthorization; use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool public function viewAny(AuthUser $authUser): bool
{ {
return $authUser->can('ViewAny:CardPinOrder'); return $authUser->can('ViewAny:CardPinOrder');
@@ -66,5 +66,4 @@ class CardPinOrderPolicy
{ {
return $authUser->can('Reorder:CardPinOrder'); return $authUser->can('Reorder:CardPinOrder');
} }
}
}

View File

@@ -0,0 +1,64 @@
<?php
namespace App\Modules\DefaultQueryForResourceIndex;
use App\Modules\Makeable;
use App\Modules\ModuleContract;
class DefaultQueryForResourceIndexModule implements ModuleContract
{
use Makeable;
/**
* Module is enabled
*/
protected bool $enabled = true;
/**
* Check if is module enabled
*/
public function isEnabled(): bool
{
return $this->enabled;
}
/**
* Disable module
*/
public function disable(): void
{
$this->enabled = false;
}
/**
* Enable module
*/
public function enable(): void
{
$this->enabled = true;
}
/**
* Check if module has a filament resource
*/
public function hasFilamentResource(): bool
{
return false;
}
/**
* Get module composer requirements
*/
public function getComposerRequirements(): array
{
return [];
}
/**
* Get module composer suggestions
*/
public function getComposerSuggestions(): array
{
return [];
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Modules\DefaultQueryForResourceIndex\Repositories;
use App\Modules\DefaultQueryForResourceIndex\Models\DefaultQueryForResourceIndex;
use Illuminate\Database\Eloquent\Builder;
class DefaultQueryForResourceIndexRepository
{
/**
* Default filament table query builder
* @param Builder $query
*/
public static function make(Builder $query): void
{
if (user()->isAdmin()) {
return;
}
if (user()->isSystemUser()) {
$query->whereIn('branch_id', user()->branches()->pluck('branches.id'));
return;
}
$query->where('user_id', user()->id);
}
}

View File

@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace App\Modules\Loan\Policies; namespace App\Modules\Loan\Policies;
use Illuminate\Foundation\Auth\User as AuthUser;
use App\Modules\Loan\Models\Loan; use App\Modules\Loan\Models\Loan;
use Illuminate\Auth\Access\HandlesAuthorization; use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Foundation\Auth\User as AuthUser;
class LoanPolicy class LoanPolicy
{ {
use HandlesAuthorization; use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool public function viewAny(AuthUser $authUser): bool
{ {
return $authUser->can('ViewAny:Loan'); return $authUser->can('ViewAny:Loan');
@@ -66,5 +66,4 @@ class LoanPolicy
{ {
return $authUser->can('Reorder:Loan'); return $authUser->can('Reorder:Loan');
} }
}
}

View File

@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace App\Modules\LoanOrder\Policies; namespace App\Modules\LoanOrder\Policies;
use Illuminate\Foundation\Auth\User as AuthUser;
use App\Modules\LoanOrder\Models\LoanOrder; use App\Modules\LoanOrder\Models\LoanOrder;
use Illuminate\Auth\Access\HandlesAuthorization; use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Foundation\Auth\User as AuthUser;
class LoanOrderPolicy class LoanOrderPolicy
{ {
use HandlesAuthorization; use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool public function viewAny(AuthUser $authUser): bool
{ {
return $authUser->can('ViewAny:LoanOrder'); return $authUser->can('ViewAny:LoanOrder');
@@ -66,5 +66,4 @@ class LoanOrderPolicy
{ {
return $authUser->can('Reorder:LoanOrder'); return $authUser->can('Reorder:LoanOrder');
} }
}
}

View File

@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace App\Modules\LoanOrder\Policies; namespace App\Modules\LoanOrder\Policies;
use Illuminate\Foundation\Auth\User as AuthUser;
use App\Modules\LoanOrder\Models\LoanOrderRequiredDocs; use App\Modules\LoanOrder\Models\LoanOrderRequiredDocs;
use Illuminate\Auth\Access\HandlesAuthorization; use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Foundation\Auth\User as AuthUser;
class LoanOrderRequiredDocsPolicy class LoanOrderRequiredDocsPolicy
{ {
use HandlesAuthorization; use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool public function viewAny(AuthUser $authUser): bool
{ {
return $authUser->can('ViewAny:LoanOrderRequiredDocs'); return $authUser->can('ViewAny:LoanOrderRequiredDocs');
@@ -66,5 +66,4 @@ class LoanOrderRequiredDocsPolicy
{ {
return $authUser->can('Reorder:LoanOrderRequiredDocs'); return $authUser->can('Reorder:LoanOrderRequiredDocs');
} }
}
}

View File

@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace App\Modules\LoanOrder\Policies; namespace App\Modules\LoanOrder\Policies;
use Illuminate\Foundation\Auth\User as AuthUser;
use App\Modules\LoanOrder\Models\LoanType; use App\Modules\LoanOrder\Models\LoanType;
use Illuminate\Auth\Access\HandlesAuthorization; use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Foundation\Auth\User as AuthUser;
class LoanTypePolicy class LoanTypePolicy
{ {
use HandlesAuthorization; use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool public function viewAny(AuthUser $authUser): bool
{ {
return $authUser->can('ViewAny:LoanType'); return $authUser->can('ViewAny:LoanType');
@@ -66,5 +66,4 @@ class LoanTypePolicy
{ {
return $authUser->can('Reorder:LoanType'); return $authUser->can('Reorder:LoanType');
} }
}
}

View File

@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace App\Modules\LoanPaidOffLetter\Policies; namespace App\Modules\LoanPaidOffLetter\Policies;
use Illuminate\Foundation\Auth\User as AuthUser;
use App\Modules\LoanPaidOffLetter\Models\LoanPaidOffLetter; use App\Modules\LoanPaidOffLetter\Models\LoanPaidOffLetter;
use Illuminate\Auth\Access\HandlesAuthorization; use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Foundation\Auth\User as AuthUser;
class LoanPaidOffLetterPolicy class LoanPaidOffLetterPolicy
{ {
use HandlesAuthorization; use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool public function viewAny(AuthUser $authUser): bool
{ {
return $authUser->can('ViewAny:LoanPaidOffLetter'); return $authUser->can('ViewAny:LoanPaidOffLetter');
@@ -66,5 +66,4 @@ class LoanPaidOffLetterPolicy
{ {
return $authUser->can('Reorder:LoanPaidOffLetter'); return $authUser->can('Reorder:LoanPaidOffLetter');
} }
}
}

View File

@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace App\Modules\Province\Policies; namespace App\Modules\Province\Policies;
use Illuminate\Foundation\Auth\User as AuthUser;
use App\Modules\Province\Models\Province; use App\Modules\Province\Models\Province;
use Illuminate\Auth\Access\HandlesAuthorization; use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Foundation\Auth\User as AuthUser;
class ProvincePolicy class ProvincePolicy
{ {
use HandlesAuthorization; use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool public function viewAny(AuthUser $authUser): bool
{ {
return $authUser->can('ViewAny:Province'); return $authUser->can('ViewAny:Province');
@@ -66,5 +66,4 @@ class ProvincePolicy
{ {
return $authUser->can('Reorder:Province'); return $authUser->can('Reorder:Province');
} }
}
}

View File

@@ -57,6 +57,6 @@ trait RoleCheckers
*/ */
public function isSystemUser(): bool public function isSystemUser(): bool
{ {
return $this->isAdmin() || $this->isOperator() || $this->isCurrencyMaintainer(); return $this->roles->count > 0;
} }
} }

View File

@@ -4,14 +4,14 @@ declare(strict_types=1);
namespace App\Policies; namespace App\Policies;
use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Foundation\Auth\User as AuthUser; use Illuminate\Foundation\Auth\User as AuthUser;
use Spatie\Permission\Models\Role; use Spatie\Permission\Models\Role;
use Illuminate\Auth\Access\HandlesAuthorization;
class RolePolicy class RolePolicy
{ {
use HandlesAuthorization; use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool public function viewAny(AuthUser $authUser): bool
{ {
return $authUser->can('ViewAny:Role'); return $authUser->can('ViewAny:Role');
@@ -66,5 +66,4 @@ class RolePolicy
{ {
return $authUser->can('Reorder:Role'); return $authUser->can('Reorder:Role');
} }
}
}

View File

@@ -2,13 +2,13 @@
namespace App\Policies; namespace App\Policies;
use Illuminate\Foundation\Auth\User as AuthUser;
use Illuminate\Auth\Access\HandlesAuthorization; use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Foundation\Auth\User as AuthUser;
class UserPolicy class UserPolicy
{ {
use HandlesAuthorization; use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool public function viewAny(AuthUser $authUser): bool
{ {
return $authUser->can('ViewAny:User'); return $authUser->can('ViewAny:User');
@@ -63,5 +63,4 @@ class UserPolicy
{ {
return $authUser->can('Reorder:User'); return $authUser->can('Reorder:User');
} }
}
}