112 lines
4.4 KiB
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);
|
|
}
|
|
}
|