More work on shippingEntries
Table groupified + search working despite lack of column; create/edit form
This commit is contained in:
parent
487ea48c14
commit
74a5a43c85
@ -2,9 +2,28 @@
|
|||||||
|
|
||||||
namespace App\Enums;
|
namespace App\Enums;
|
||||||
|
|
||||||
enum ShippingType: string
|
use Filament\Support\Contracts\HasIcon;
|
||||||
|
use Filament\Support\Contracts\HasLabel;
|
||||||
|
|
||||||
|
enum ShippingType: string implements HasIcon, HasLabel
|
||||||
{
|
{
|
||||||
case THEY_SHIP = 'They ship';
|
case THEY_SHIP = 'They ship';
|
||||||
case WE_SHIP = 'We ship';
|
case WE_SHIP = 'We ship';
|
||||||
case PICKUP = 'Pickup';
|
case PICKUP = 'Pickup';
|
||||||
|
case OTHER = 'Other';
|
||||||
|
|
||||||
|
public function getLabel(): ?string
|
||||||
|
{
|
||||||
|
return $this->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIcon(): ?string
|
||||||
|
{
|
||||||
|
return match ($this) {
|
||||||
|
self::THEY_SHIP => 'lucide-truck',
|
||||||
|
self::WE_SHIP => 'lucide-house',
|
||||||
|
self::PICKUP => 'lucide-handshake',
|
||||||
|
self::OTHER => 'lucide-ellipsis'
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,12 +2,24 @@
|
|||||||
|
|
||||||
namespace App\Filament\Resources;
|
namespace App\Filament\Resources;
|
||||||
|
|
||||||
|
use App\Enums\ShippingType;
|
||||||
use App\Filament\Resources\ShippingEntryResource\Pages;
|
use App\Filament\Resources\ShippingEntryResource\Pages;
|
||||||
use App\Models\ShippingEntry;
|
use App\Models\ShippingEntry;
|
||||||
|
use Filament\Forms\Components\Fieldset;
|
||||||
|
use Filament\Forms\Components\Section;
|
||||||
|
use Filament\Forms\Components\Select;
|
||||||
|
use Filament\Forms\Components\Split;
|
||||||
|
use Filament\Forms\Components\Textarea;
|
||||||
|
use Filament\Forms\Components\TextInput;
|
||||||
|
use Filament\Forms\Components\ToggleButtons;
|
||||||
use Filament\Forms\Form;
|
use Filament\Forms\Form;
|
||||||
use Filament\Resources\Resource;
|
use Filament\Resources\Resource;
|
||||||
|
use Filament\Support\Enums\IconPosition;
|
||||||
use Filament\Tables;
|
use Filament\Tables;
|
||||||
|
use Filament\Tables\Columns\TextColumn;
|
||||||
|
use Filament\Tables\Grouping\Group;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
class ShippingEntryResource extends Resource
|
class ShippingEntryResource extends Resource
|
||||||
{
|
{
|
||||||
@ -23,7 +35,65 @@ public static function form(Form $form): Form
|
|||||||
{
|
{
|
||||||
return $form
|
return $form
|
||||||
->schema([
|
->schema([
|
||||||
//
|
Section::make([
|
||||||
|
Fieldset::make('Primary information')
|
||||||
|
->schema([
|
||||||
|
Select::make('customer')
|
||||||
|
->relationship('customer', 'company_name')
|
||||||
|
->searchable()
|
||||||
|
->required(),
|
||||||
|
|
||||||
|
ToggleButtons::make('shipping_type')
|
||||||
|
->options(ShippingType::class)
|
||||||
|
->inline()
|
||||||
|
->required(),
|
||||||
|
|
||||||
|
TextInput::make('courier')
|
||||||
|
->placeholder('UPS, Purolator...'),
|
||||||
|
]),
|
||||||
|
|
||||||
|
Split::make([
|
||||||
|
Fieldset::make('Account Details')
|
||||||
|
->schema([
|
||||||
|
TextInput::make('account_title')
|
||||||
|
->label('Title')
|
||||||
|
->prefixIcon('lucide-folder-pen')
|
||||||
|
->placeholder('What is this account used for?')
|
||||||
|
->columnSpan(2),
|
||||||
|
TextInput::make('account_url')
|
||||||
|
->label('URL')
|
||||||
|
->prefixIcon('lucide-globe')
|
||||||
|
->placeholder('Shipping website')
|
||||||
|
->url()
|
||||||
|
->columnSpan(2),
|
||||||
|
TextInput::make('account_username')
|
||||||
|
->label('Username')
|
||||||
|
->prefixIcon('lucide-circle-user')
|
||||||
|
->placeholder('...'),
|
||||||
|
TextInput::make('account_password')
|
||||||
|
->label('Password')
|
||||||
|
->prefixIcon('lucide-key-round')
|
||||||
|
->placeholder('...'),
|
||||||
|
])->columnSpan(1),
|
||||||
|
|
||||||
|
Fieldset::make('Shipping Instructions')
|
||||||
|
->schema([
|
||||||
|
TextInput::make('info_needed')
|
||||||
|
->label('Instructions')
|
||||||
|
->prefixIcon('lucide-pencil')
|
||||||
|
->placeholder('Example: put PO on box')
|
||||||
|
->columnSpan(2),
|
||||||
|
TextInput::make('notify')
|
||||||
|
->placeholder('Who to email and CC?')
|
||||||
|
->prefixIcon('lucide-users-round')
|
||||||
|
->columnSpan(2),
|
||||||
|
TextArea::make('notes')
|
||||||
|
->placeholder('Any additional information...')
|
||||||
|
->rows(2)
|
||||||
|
->columnSpan(2),
|
||||||
|
]),
|
||||||
|
])->columnSpan(2),
|
||||||
|
])->columns(2),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,19 +101,30 @@ public static function table(Table $table): Table
|
|||||||
{
|
{
|
||||||
return $table
|
return $table
|
||||||
->columns([
|
->columns([
|
||||||
Tables\Columns\TextColumn::make('customer.company_name')
|
TextColumn::make('shipping_type')
|
||||||
->searchable(),
|
|
||||||
Tables\Columns\TextColumn::make('shipping_type')
|
|
||||||
->label('Type')
|
->label('Type')
|
||||||
->sortable(),
|
->sortable(),
|
||||||
Tables\Columns\TextColumn::make('courier'),
|
TextColumn::make('courier')
|
||||||
// Tables\Columns\TextColumn::make('contact'),
|
->url(fn ($record) => $record->account_url ?? null, shouldOpenInNewTab: true)
|
||||||
Tables\Columns\TextColumn::make('account_title'),
|
->icon(fn ($record) => $record->account_url ? 'lucide-external-link' : null)
|
||||||
// Tables\Columns\TextColumn::make('account_username'),
|
->iconPosition(IconPosition::After)
|
||||||
// Tables\Columns\TextColumn::make('account_password'),
|
->searchable(query: function (Builder $query, $search) {
|
||||||
Tables\Columns\TextColumn::make('info_needed'),
|
return $query
|
||||||
Tables\Columns\TextColumn::make('notify'),
|
->where('courier', 'like', "%{$search}%")
|
||||||
|
->orWhereHas('customer', function (Builder $query) use ($search) {
|
||||||
|
return $query->where('company_name', 'like', "%{$search}%");
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
|
||||||
|
// TextColumn::make('Account Details')
|
||||||
|
// ->getStateUsing(function ($record) {
|
||||||
|
// return $record->account_username.'<br>'.$record->account_password;
|
||||||
|
// })
|
||||||
|
// ->html(),
|
||||||
|
|
||||||
|
TextColumn::make('account_title'),
|
||||||
|
TextColumn::make('info_needed'),
|
||||||
|
TextColumn::make('notify'),
|
||||||
])
|
])
|
||||||
->filters([
|
->filters([
|
||||||
//
|
//
|
||||||
@ -55,11 +136,11 @@ public static function table(Table $table): Table
|
|||||||
// Tables\Actions\BulkActionGroup::make([
|
// Tables\Actions\BulkActionGroup::make([
|
||||||
// Tables\Actions\DeleteBulkAction::make(),
|
// Tables\Actions\DeleteBulkAction::make(),
|
||||||
// ]),
|
// ]),
|
||||||
]);
|
])
|
||||||
// ->defaultGroup(
|
->defaultGroup(
|
||||||
// Group::make('customer.company_name')
|
Group::make('customer.company_name')
|
||||||
// ->titlePrefixedWithLabel(false)
|
->titlePrefixedWithLabel(false)
|
||||||
// );
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getRelations(): array
|
public static function getRelations(): array
|
||||||
|
@ -24,6 +24,7 @@ class ShippingEntry extends Model
|
|||||||
'courier',
|
'courier',
|
||||||
'contact',
|
'contact',
|
||||||
'account_title',
|
'account_title',
|
||||||
|
'account_url',
|
||||||
'account_username',
|
'account_username',
|
||||||
'account_password',
|
'account_password',
|
||||||
'info_needed',
|
'info_needed',
|
||||||
|
@ -18,6 +18,7 @@ public function definition(): array
|
|||||||
'courier' => $this->faker->randomElement(['UPS', 'Purolator', 'FreightCom', 'E-Shipper', 'ACE']),
|
'courier' => $this->faker->randomElement(['UPS', 'Purolator', 'FreightCom', 'E-Shipper', 'ACE']),
|
||||||
'contact' => $this->faker->randomElement(['courier.com', '+1 604 123 4567']),
|
'contact' => $this->faker->randomElement(['courier.com', '+1 604 123 4567']),
|
||||||
'account_title' => $this->faker->word,
|
'account_title' => $this->faker->word,
|
||||||
|
'account_url' => 'https://www.example.com',
|
||||||
'account_username' => 'username',
|
'account_username' => 'username',
|
||||||
'account_password' => 'password',
|
'account_password' => 'password',
|
||||||
'info_needed' => $this->faker->words(3, true),
|
'info_needed' => $this->faker->words(3, true),
|
||||||
|
@ -15,6 +15,7 @@ public function up(): void
|
|||||||
$table->string('courier')->nullable();
|
$table->string('courier')->nullable();
|
||||||
$table->string('contact')->nullable();
|
$table->string('contact')->nullable();
|
||||||
$table->string('account_title')->nullable();
|
$table->string('account_title')->nullable();
|
||||||
|
$table->string('account_url')->nullable();
|
||||||
$table->string('account_username')->nullable();
|
$table->string('account_username')->nullable();
|
||||||
$table->string('account_password')->nullable();
|
$table->string('account_password')->nullable();
|
||||||
$table->string('info_needed')->nullable();
|
$table->string('info_needed')->nullable();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user