Refactor imports and formatting in various Filament resources; add SMS sending helper function

This commit is contained in:
2025-09-22 16:31:13 +05:00
parent 60afe0c441
commit f14defeebd
27 changed files with 251 additions and 85 deletions

View File

@@ -33,7 +33,7 @@ class Login extends BaseLogin
return [
$login_type => $data['login'],
'password' => $data['password'],
'password' => $data['password'],
];
}

View File

@@ -0,0 +1,47 @@
<?php
namespace App\Filament\Pages\Auth;
use App\Modules\PhoneNumberVerification\Rules\PhoneNumberVerificationRule;
use Filament\Auth\Pages\Register as BaseRegister;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Schema;
class Register extends BaseRegister
{
public function form(Schema $schema): Schema
{
return $schema
->schema([
$this->getNameFormComponent(),
$this->getPhoneNumberFormComponent(),
$this->getPasswordFormComponent(),
$this->getPasswordConfirmationFormComponent(),
]);
}
protected function getPhoneNumberFormComponent(): TextInput
{
return TextInput::make('phone_number')
->prefix('+993')
->label('Telefon')
->mask('99 99 99 99')
->rules(['bail', 'required', new PhoneNumberVerificationRule, 'unique:users,phone_number'])
->autofocus();
}
protected function beforeValidate(): void
{
if (isset($this->data['phone_number'])) {
$this->data['phone_number'] = str_replace(' ', '', $this->data['phone_number']);
}
}
protected function mutateFormDataBeforeRegister(array $data): array
{
$data['phone_number'] = str_replace(' ', '', $data['phone_number']);
$data['email'] = $data['phone_number'] . '@telekechi.com';
return $data;
}
}

View File

@@ -2,19 +2,17 @@
namespace App\Filament\Resources\Banks\Banks;
use Filament\Schemas\Schema;
use Filament\Actions\EditAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use App\Filament\Resources\Banks\Pages\ListBanks;
use App\Filament\Resources\Banks\Pages\CreateBank;
use App\Filament\Resources\Banks\Pages\EditBank;
use App\Filament\Resources\BankResource\Pages;
use App\Filament\Resources\Banks\Pages\ListBanks;
use App\Modules\Bank\Models\Bank;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Schemas\Schema;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Support\Carbon;
@@ -23,9 +21,9 @@ class BankResource extends Resource
{
protected static ?string $model = Bank::class;
protected static string | \UnitEnum | null $navigationGroup = 'Settings';
protected static string|\UnitEnum|null $navigationGroup = 'Settings';
protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-building-library';
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-building-library';
public static function form(Schema $schema): Schema
{

View File

@@ -2,9 +2,8 @@
namespace App\Filament\Resources\Banks\Pages;
use Filament\Actions\DeleteAction;
use App\Filament\Resources\Banks\Banks\BankResource;
use Filament\Actions;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditBank extends EditRecord

View File

@@ -2,9 +2,8 @@
namespace App\Filament\Resources\Banks\Pages;
use Filament\Actions\CreateAction;
use App\Filament\Resources\Banks\Banks\BankResource;
use Filament\Actions;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListBanks extends ListRecords

View File

@@ -2,9 +2,8 @@
namespace App\Filament\Resources\Codes\PaymentPurposeCodes\Pages;
use Filament\Actions\DeleteAction;
use App\Filament\Resources\Codes\PaymentPurposeCodes\PaymentPurposeCodes\PaymentPurposeCodeResource;
use Filament\Actions;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditPaymentPurposeCode extends EditRecord

View File

@@ -2,9 +2,8 @@
namespace App\Filament\Resources\Codes\PaymentPurposeCodes\Pages;
use Filament\Actions\CreateAction;
use App\Filament\Resources\Codes\PaymentPurposeCodes\PaymentPurposeCodes\PaymentPurposeCodeResource;
use Filament\Actions;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListPaymentPurposeCodes extends ListRecords

View File

@@ -2,19 +2,17 @@
namespace App\Filament\Resources\Codes\PaymentPurposeCodes\PaymentPurposeCodes;
use Filament\Schemas\Schema;
use Filament\Actions\EditAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use App\Filament\Resources\Codes\PaymentPurposeCodes\Pages\ListPaymentPurposeCodes;
use App\Filament\Resources\Codes\PaymentPurposeCodes\Pages\CreatePaymentPurposeCode;
use App\Filament\Resources\Codes\PaymentPurposeCodes\Pages\EditPaymentPurposeCode;
use App\Filament\Resources\Codes\PaymentPurposeCodeResource\Pages;
use App\Filament\Resources\Codes\PaymentPurposeCodes\Pages\ListPaymentPurposeCodes;
use App\Modules\PaymentPurposeCode\Models\PaymentPurposeCode;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Schemas\Schema;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
@@ -22,9 +20,9 @@ class PaymentPurposeCodeResource extends Resource
{
protected static ?string $model = PaymentPurposeCode::class;
protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-cube';
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-cube';
protected static string | \UnitEnum | null $navigationGroup = 'Settings';
protected static string|\UnitEnum|null $navigationGroup = 'Settings';
public static function form(Schema $schema): Schema
{

View File

@@ -2,9 +2,8 @@
namespace App\Filament\Resources\Company\UserCompanies\Pages;
use Filament\Actions\DeleteAction;
use App\Filament\Resources\Company\UserCompanies\UserCompanies\UserCompanyResource;
use Filament\Actions;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditUserCompany extends EditRecord

View File

@@ -2,9 +2,8 @@
namespace App\Filament\Resources\Company\UserCompanies\Pages;
use Filament\Actions\CreateAction;
use App\Filament\Resources\Company\UserCompanies\UserCompanies\UserCompanyResource;
use Filament\Actions;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListUserCompanies extends ListRecords

View File

@@ -2,22 +2,20 @@
namespace App\Filament\Resources\Company\UserCompanies\UserCompanies;
use Filament\Schemas\Schema;
use Filament\Actions\EditAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use App\Filament\Resources\Company\UserCompanies\Pages\ListUserCompanies;
use App\Filament\Resources\Company\UserCompanies\Pages\CreateUserCompany;
use App\Filament\Resources\Company\UserCompanies\Pages\EditUserCompany;
use App\Filament\Resources\Company\UserCompanyResource\Pages;
use App\Filament\Resources\Company\UserCompanies\Pages\ListUserCompanies;
use App\Modules\Bank\Repositories\BankRepository;
use App\Modules\UserCompany\Models\UserCompany;
use App\Modules\UserCompany\Types\CompanyType;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Schemas\Schema;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Columns\ToggleColumn;
use Filament\Tables\Filters\Filter;
@@ -27,9 +25,9 @@ class UserCompanyResource extends Resource
{
protected static ?string $model = UserCompany::class;
protected static string | \UnitEnum | null $navigationGroup = 'Company';
protected static string|\UnitEnum|null $navigationGroup = 'Company';
protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-building-office';
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-building-office';
public static function form(Schema $schema): Schema
{

View File

@@ -2,20 +2,18 @@
namespace App\Filament\Resources\IncomingLetters\IncomingLetters;
use Filament\Schemas\Schema;
use Filament\Actions\EditAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use App\Filament\Resources\IncomingLetters\Pages\ListIncomingLetters;
use App\Filament\Resources\IncomingLetters\Pages\CreateIncomingLetter;
use App\Filament\Resources\IncomingLetters\Pages\EditIncomingLetter;
use App\Filament\Resources\IncomingLetterResource\Pages;
use App\Filament\Resources\IncomingLetters\Pages\ListIncomingLetters;
use App\Modules\IncomingLetter\Models\IncomingLetter;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Schemas\Schema;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
@@ -25,7 +23,7 @@ class IncomingLetterResource extends Resource
{
protected static ?string $model = IncomingLetter::class;
protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-document-arrow-down';
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-document-arrow-down';
public static function form(Schema $schema): Schema
{

View File

@@ -2,9 +2,8 @@
namespace App\Filament\Resources\IncomingLetters\Pages;
use Filament\Actions\DeleteAction;
use App\Filament\Resources\IncomingLetters\IncomingLetters\IncomingLetterResource;
use Filament\Actions;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditIncomingLetter extends EditRecord

View File

@@ -2,9 +2,8 @@
namespace App\Filament\Resources\IncomingLetters\Pages;
use Filament\Actions\CreateAction;
use App\Filament\Resources\IncomingLetters\IncomingLetters\IncomingLetterResource;
use Filament\Actions;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListIncomingLetters extends ListRecords

View File

@@ -2,19 +2,17 @@
namespace App\Filament\Resources\OutgoingLetters\OutgoingLetters;
use Filament\Schemas\Schema;
use Filament\Actions\EditAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use App\Filament\Resources\OutgoingLetters\Pages\ListOutgoingLetters;
use App\Filament\Resources\OutgoingLetters\Pages\CreateOutgoingLetter;
use App\Filament\Resources\OutgoingLetters\Pages\EditOutgoingLetter;
use App\Filament\Resources\OutgoingLetterResource\Pages;
use App\Filament\Resources\OutgoingLetters\Pages\ListOutgoingLetters;
use App\Modules\OutgoingLetter\Models\OutgoingLetter;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Schemas\Schema;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
@@ -24,7 +22,7 @@ class OutgoingLetterResource extends Resource
{
protected static ?string $model = OutgoingLetter::class;
protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-document-arrow-up';
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-document-arrow-up';
public static function form(Schema $schema): Schema
{

View File

@@ -2,9 +2,8 @@
namespace App\Filament\Resources\OutgoingLetters\Pages;
use Filament\Actions\DeleteAction;
use App\Filament\Resources\OutgoingLetters\OutgoingLetters\OutgoingLetterResource;
use Filament\Actions;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditOutgoingLetter extends EditRecord

View File

@@ -2,9 +2,8 @@
namespace App\Filament\Resources\OutgoingLetters\Pages;
use Filament\Actions\CreateAction;
use App\Filament\Resources\OutgoingLetters\OutgoingLetters\OutgoingLetterResource;
use Filament\Actions;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListOutgoingLetters extends ListRecords

View File

@@ -2,11 +2,11 @@
namespace App\Filament\Resources\PaymentOrder\PaymentOrders\Pages;
use Filament\Actions\DeleteAction;
use App\Filament\Resources\PaymentOrder\PaymentOrders\PaymentOrders\PaymentOrderResource;
use App\Filament\Resources\PaymentOrder\PaymentOrders\Actions\ExportToWord;
use App\Filament\Resources\PaymentOrder\PaymentOrders\PaymentOrders\PaymentOrderResource;
use Filament\Actions;
use Filament\Actions\Action;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditPaymentOrder extends EditRecord

View File

@@ -2,9 +2,8 @@
namespace App\Filament\Resources\PaymentOrder\PaymentOrders\Pages;
use Filament\Actions\CreateAction;
use App\Filament\Resources\PaymentOrder\PaymentOrders\PaymentOrders\PaymentOrderResource;
use Filament\Actions;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListPaymentOrders extends ListRecords

View File

@@ -2,20 +2,18 @@
namespace App\Filament\Resources\PaymentOrder\PaymentOrders\PaymentOrders;
use Filament\Schemas\Schema;
use Filament\Schemas\Components\Fieldset;
use Filament\Actions\EditAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use App\Filament\Resources\PaymentOrder\PaymentOrders\Pages\ListPaymentOrders;
use App\Filament\Resources\PaymentOrder\PaymentOrders\Pages\CreatePaymentOrder;
use App\Filament\Resources\PaymentOrder\PaymentOrders\Pages\EditPaymentOrder;
use App\Filament\Resources\PaymentOrder\PaymentOrderResource\Pages;
use App\Filament\Resources\PaymentOrder\PaymentOrders\Pages\ListPaymentOrders;
use App\Modules\PaymentOrder\Models\PaymentOrder;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Schemas\Components\Fieldset;
use Filament\Schemas\Schema;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
@@ -23,7 +21,7 @@ class PaymentOrderResource extends Resource
{
protected static ?string $model = PaymentOrder::class;
protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-receipt-percent';
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-receipt-percent';
public static function form(Schema $schema): Schema
{

View File

@@ -6,8 +6,10 @@ use App\Modules\ModuleContract;
use App\Modules\ModuleRepository;
use App\Modules\TurkmenNumberFormatter\Repositories\TurkmenNumberFormatter;
use Illuminate\Contracts\Cache\Repository as CacheRepository;
use Illuminate\Http\Client\PendingRequest;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
/**
@@ -106,3 +108,29 @@ function moneyFormatInTurkmenLetter(int|float|string $money): string
{
return TurkmenNumberFormatter::format(floatval($money));
}
/**
* Send a sms
*/
function sendSMS(string|int $phone, string|int $message): mixed
{
$response = Http::retry(
times: 3,
sleepMilliseconds: 50,
throw: false,
when: function (Exception $exception, PendingRequest $request) {
Log::channel('sms_api_error')
->error('Exception: ', [
'message' => $exception->getMessage(),
'line' => $exception->getLine(),
]);
return true;
})
->post('http://216.250.14.144:3000/api/data', [
'phone' => '+993'.$phone,
'code' => $message,
]);
return $response->body();
}

View File

@@ -0,0 +1,48 @@
<?php
namespace App\Modules\PhoneNumberVerification;
use App\Modules\Makeable;
use App\Modules\ModuleContract;
class PhoneNumberVerificationModule 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;
}
}

View File

@@ -0,0 +1,5 @@
<?php
namespace App\Modules\PhoneNumberVerification\Repositories;
class PhoneNumberVerificationRepository {}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Modules\PhoneNumberVerification\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class PhoneNumberVerificationRule implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string, ?string=): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (! is_numeric($value)) {
$fail('Telefon belgisi diňe sanlardan ybarat bolmaly.');
return;
}
$number = (int) $value;
$isValid = ($number >= 61000000 && $number <= 65999999) || ($number >= 71000000 && $number <= 71999999);
if (! $isValid) {
$fail('Telefon belgisi nädogry aralykda.');
}
}
}

View File

@@ -2,12 +2,12 @@
namespace App\Modules\UserCompany\Models;
use App\Modules\UserCompany\Types\CompanyType;
use Illuminate\Support\Carbon;
use App\Models\User;
use App\Modules\Bank\Models\Bank;
use App\Modules\UserCompany\Types\CompanyType;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Carbon;
/**
* @property int $id [primary,unique]

View File

@@ -3,11 +3,11 @@
namespace App\Providers\Filament;
use App\Filament\Pages\Auth\Login;
use Filament\Pages\Dashboard;
use App\Filament\Pages\Auth\Register;
use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Pages;
use Filament\Pages\Dashboard;
use Filament\Panel;
use Filament\PanelProvider;
use Filament\Support\Colors\Color;
@@ -29,7 +29,7 @@ class AdminPanelProvider extends PanelProvider
->id('panel')
->path('panel')
->login(Login::class)
->registration()
->registration(Register::class)
->colors([
'primary' => Color::Amber,
])

View File

@@ -0,0 +1,30 @@
<?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::table('users', function (Blueprint $table) {
$table->softDeletes()->after('updated_at');
$table->json('meta')->nullable()->after('remember_token');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropSoftDeletes();
$table->dropColumn('meta');
});
}
};