Initial commit

This commit is contained in:
root
2026-05-09 17:28:23 +02:00
commit 9d73f82529
5575 changed files with 281989 additions and 0 deletions
+137
View File
@@ -0,0 +1,137 @@
<?php
namespace App\Filament\Resources\Shop;
use App\Filament\Resources\Shop\PayPalTransactionResource\Pages\ListPayPalTransactions;
use App\Filament\Traits\TranslatableResource;
use App\Models\Shop\WebsitePaypalTransaction;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
class PayPalTransactionResource extends Resource
{
use TranslatableResource;
#[\Override]
protected static ?string $model = WebsitePaypalTransaction::class;
protected static string $translateIdentifier = 'paypal-transactions';
#[\Override]
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-credit-card';
#[\Override]
protected static string|\UnitEnum|null $navigationGroup = 'Shop';
#[\Override]
protected static ?string $slug = 'shop/paypal-transactions';
#[\Override]
protected static ?string $modelLabel = 'PayPal Transaction';
#[\Override]
protected static ?string $pluralModelLabel = 'PayPal Transactions';
#[\Override]
public static function form(Schema $schema): Schema
{
return $schema
->components(static::getForm());
}
public static function getForm(): array
{
return [
Select::make('user_id')
->label(__('User'))
->relationship('user', 'username')
->required(),
TextInput::make('transaction_id')
->label(__('Transaction ID'))
->required()
->maxLength(255),
TextInput::make('status')
->label(__('Status'))
->required()
->maxLength(255),
TextInput::make('description')
->label(__('Description'))
->maxLength(512),
TextInput::make('amount')
->label(__('Amount'))
->numeric()
->required(),
TextInput::make('currency')
->label(__('Currency'))
->maxLength(255)
->default('USD'),
];
}
#[\Override]
public static function table(Table $table): Table
{
return $table
->columns(static::getTable());
}
public static function getTable(): array
{
return [
TextColumn::make('id')
->label(__('ID'))
->sortable(),
TextColumn::make('user.username')
->label(__('User'))
->searchable(),
TextColumn::make('transaction_id')
->label(__('Transaction ID'))
->searchable()
->limit(20),
TextColumn::make('status')
->label(__('Status'))
->badge()
->color(fn (string $state): string => match ($state) {
'completed' => 'success',
'pending' => 'warning',
'failed' => 'danger',
default => 'gray',
}),
TextColumn::make('description')
->label(__('Description'))
->limit(50),
TextColumn::make('amount')
->label(__('Amount'))
->money(fn (WebsitePaypalTransaction $record): string => $record->currency),
TextColumn::make('currency')
->label(__('Currency')),
TextColumn::make('created_at')
->label(__('Created'))
->dateTime(),
];
}
#[\Override]
public static function getPages(): array
{
return [
'index' => ListPayPalTransactions::route('/'),
];
}
}
@@ -0,0 +1,22 @@
<?php
declare(strict_types=1);
namespace App\Filament\Resources\Shop\PayPalTransactionResource\Pages;
use App\Filament\Resources\Shop\PayPalTransactionResource;
use Filament\Resources\Pages\ListRecords;
use Filament\Tables\Table;
class ListPayPalTransactions extends ListRecords
{
#[\Override]
protected static string $resource = PayPalTransactionResource::class;
#[\Override]
public function table(Table $table): Table
{
return parent::table($table)
->defaultSort('created_at', 'desc');
}
}
+111
View File
@@ -0,0 +1,111 @@
<?php
namespace App\Filament\Resources\Shop;
use App\Filament\Resources\Shop\ShopOrderResource\Pages\ListShopOrders;
use App\Filament\Traits\TranslatableResource;
use App\Models\User\UserOrder;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
class ShopOrderResource extends Resource
{
use TranslatableResource;
#[\Override]
protected static ?string $model = UserOrder::class;
#[\Override]
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-shopping-cart';
#[\Override]
protected static string|\UnitEnum|null $navigationGroup = 'Shop';
#[\Override]
protected static ?string $slug = 'shop/orders';
public static string $translateIdentifier = 'shop-orders';
#[\Override]
public static function form(Schema $schema): Schema
{
return $schema
->components(static::getForm());
}
public static function getForm(): array
{
return [
Select::make('user_id')
->label(__('User'))
->relationship('user', 'username')
->required(),
TextInput::make('product_name')
->label(__('Product'))
->required()
->maxLength(255),
TextInput::make('amount')
->label(__('Amount'))
->numeric()
->required(),
TextInput::make('status')
->label(__('Status'))
->required()
->default('pending'),
TextInput::make('payment_method')
->label(__('Payment Method'))
->maxLength(255),
];
}
#[\Override]
public static function table(Table $table): Table
{
return $table
->columns(static::getTable());
}
public static function getTable(): array
{
return [
TextColumn::make('id')
->label(__('ID'))
->sortable(),
TextColumn::make('user.username')
->label(__('User'))
->searchable(),
TextColumn::make('product_name')
->label(__('Product'))
->searchable(),
TextColumn::make('amount')
->label(__('Amount')),
TextColumn::make('status')
->label(__('Status'))
->badge(),
TextColumn::make('created_at')
->label(__('Created'))
->dateTime(),
];
}
#[\Override]
public static function getPages(): array
{
return [
'index' => ListShopOrders::route('/'),
];
}
}
@@ -0,0 +1,14 @@
<?php
declare(strict_types=1);
namespace App\Filament\Resources\Shop\ShopOrderResource\Pages;
use App\Filament\Resources\Shop\ShopOrderResource;
use Filament\Resources\Pages\ListRecords;
class ListShopOrders extends ListRecords
{
#[\Override]
protected static string $resource = ShopOrderResource::class;
}