layer-chicken/app/Filament/Resources/Manage/FeedPurchases/Schemas/FeedPurchaseForm.php

112 lines
4.4 KiB
PHP

<?php
namespace App\Filament\Resources\Manage\FeedPurchases\Schemas;
use App\Models\Feed;
use App\Models\FeedPurchaseItem;
use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Components\Grid;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Components\View;
use Filament\Schemas\Schema;
class FeedPurchaseForm
{
public static function configure(Schema $schema): Schema
{
$feeds = Feed::with('unit')
->latest()
->get()
->map(function ($feed) {
$feed->image = $feed->getFirstMediaUrl('feeds');
return $feed;
});
$cartItems = FeedPurchaseItem::with('feed')
->whereNull('feed_purchase_id')
->latest()
->get()
->map(function ($cartItem) {
$cartItem->subtotal = $cartItem->unit_price * $cartItem->quantity;
$cartItem->feedImage = $cartItem->feed?->getFirstMediaUrl('feeds');
return $cartItem;
});
return $schema
->components([
Section::make('Informasi Belanja')
->schema([
Grid::make(3)
->schema([
TextInput::make('reference_number')
->label('Nomor Referensi')
->placeholder('...')
->nullable()
->autocomplete(false)
->autofocus()
->helperText('Silakan masukan nomor belanja, invoice atau lainnya.'),
DatePicker::make('purchase_date')
->label('Tanggal Belanja')
->default(now())
->required()
->native(false)
->displayFormat('l, d F Y'),
TextInput::make('total_price')
->label('Total Harga')
->placeholder('0')
->readOnly()
->live()
->currencyMask(thousandSeparator: '.', decimalSeparator: ',', precision: 0)
->prefix('Rp')
->required()
->dehydrateStateUsing(fn ($state) => (int) str()->replace(',', '', (string) ($state ?? 0)))
->default(fn () => (int) FeedPurchaseItem::whereNull('feed_purchase_id')->sum('subtotal')),
Textarea::make('notes')
->label('Catatan')
->placeholder('...')
->columnSpanFull(),
]),
])
->collapsible(),
Grid::make([
'default' => 1,
'lg' => 3,
])
->schema([
Section::make('Daftar Pakan')
->schema([
View::make('filament.resources.manage.feed-purchases.feed-items-grid')
->viewData([
'feeds' => $feeds,
]),
])
->columnSpan([
'default' => 1,
'lg' => 2,
]),
Section::make('Keranjang')
->schema([
View::make('filament.resources.manage.feed-purchases.cart')
->viewData([
'cartItems' => $cartItems,
]),
])
->columnSpan([
'default' => 1,
'lg' => 1,
]),
]),
])
->columns(1);
}
}