OwlCyberSecurity - MANAGER
Edit File: LogisticSetOrderIdResource.php
<?php namespace App\Filament\Resources; use App\Filament\Resources\LogisticSetOrderIdResource\Pages; use App\Helpers\LogisticGlobalSearch; use App\Models\Carrier; use App\Models\Invoice; use App\Models\InvoiceDescription; use App\Models\Logistic; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Grid; use Filament\Forms\Components\Placeholder; use Filament\Forms\Components\Select; use Filament\Forms\Components\Textarea; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Actions\Action; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Collection; use Filament\Tables\Actions\BulkAction; use Filament\Tables\Actions\EditAction; use Filament\Tables\Columns\BadgeColumn; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Filters\Filter; use Illuminate\Database\Eloquent\Builder; class LogisticSetOrderIdResource extends Resource { use LogisticGlobalSearch; protected static ?string $model = Logistic::class; protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; protected static ?string $modelLabel = 'ثبت ترک نامبر'; protected static ?string $pluralModelLabel = 'ثبت ترک نامبر'; protected static ?string $slug = 'logistic-set-track-number'; protected static ?string $navigationGroup = 'لاجیستیک'; protected static ?int $navigationSort = 1; public static function getEloquentQuery(): Builder { // return parent::getEloquentQuery() // ->where('logistics.iswithouttracking', false) // ->whereNotNull('logistics.orderId') // ->where('logistics.orderId', '!=', '') // ->where(fn($query) => $query->wherenull('logistics.tracknumber')->orwherenull('logistics.estimateddatetobase')) // ->where(fn($query) => $query->wherenull('logistics.iscancel')->orwhere('logistics.iscancel', '=', 0)); return parent::getEloquentQuery() ->where('logistics.status_id', 1) ->where(fn($query) => $query->wherenull('logistics.iscancel')->orwhere('logistics.iscancel', '=', 0)); } public static function form(Form $form): Form { return $form->schema([ Grid::make(1)->schema([ Placeholder::make('invoice_id')->label('کد رهگیری') ->content(fn(Logistic $record): string => $record->invoice->code), TextInput::make('orderId')->label('شماره سفارش')->disabled(), DatePicker::make('estimateddatetobase')->label('تاریخ تخمینی به بیس')->displayFormat('Y-m-d')->required(), TextInput::make('tracknumber')->label('شماره ترک')->required(), Select::make('carrier_id')->label('حامل')->options(Carrier::all()->pluck('name', 'id')->toArray()), Textarea::make('invoiceDescriptionLevelOrderIdTaken')->label('توضیحات'), ]), ]); } public static function table(Table $table): Table { return $table ->columns([ TextColumn::make('invoice.code')->label('کد رهگیری')->copyable(), TextColumn::make('invoiceItem.name')->label('نام کالا')->toggleable(isToggledHiddenByDefault: true), TextColumn::make('price')->label('قیمت'), TextColumn::make('exchange.name')->label('ارز'), TextColumn::make('singleItemfullprice')->label('قیمت ریالی')->money('IRR'), TextColumn::make('orderId')->label('شماره سفارش'), TextColumn::make('base.title')->label('بیس'), TextColumn::make('buyingdate')->label('تاریخ خرید'), TextColumn::make('invoiceDescriptionLevelBuyInvoice.description')->label('توضیحات مرحله خرید')->color('danger') ->icon(static function ($state) { if (!is_null($state)) return 'heroicon-o-exclamation-triangle'; }) ]) ->filters([ Filter::make('code')->form([ TextInput::make('code')->label('کد رهگیری'), ])->query(fn(Builder $query, array $data): Builder => $query->when( $data['code'], fn(Builder $query, $data): Builder => $query->whereHas( 'invoice', fn($q) => $q->where('invoices.code', 'like', '%' . $data . '%')), )), Filter::make('orderId')->form([ TextInput::make('orderId')->label('شماره سفارش'), ])->query(function (Builder $query, array $data): Builder { return $query->when( $data['orderId'], fn(Builder $query, $data): Builder => $query->where('orderId', 'like', '%' . $data . '%') ); }), Filter::make('name')->form([ TextInput::make('name')->label('نام کالا'), ])->query(fn(Builder $query, array $data): Builder => $query->when( $data['name'], fn(Builder $query, $data): Builder => $query->whereHas( 'invoiceItem', fn($q) => $q->where('invoice_items.name', 'like', '%' . $data . '%')), )), ]) ->actions([ Action::make('final-factor')->label('مشاهده فاکتور')->color('primary')->icon('heroicon-o-currency-dollar') ->url(fn(Logistic $item) => config('app.url') . "/admin/invoice-search/view-factor/" . "{$item->invoice_id}") ->openUrlInNewTab() ->icon('heroicon-o-link') ->color('primary'), EditAction::make()->label('ثبت')->using(function (Logistic $record, array $data) { self::updateRecord($record, $data); return $record; }), Action::make('invoiceDescription')->label('توضیحات')->icon('heroicon-o-chat-bubble-bottom-center-text')->color('grey') ->mountUsing(function (Form $form, Logistic $record) { $form->fill([ 'invoiceDescriptionLevelBuyInvoice' => $record->invoiceDescriptionLevelBuyInvoice()->first()?->description, 'invoiceDescriptionLevelSetTrackNumber' => $record->invoiceDescriptionLevelSetTrackNumber()->first()?->description, 'invoiceDescriptionLevelSetOfficeNumber' => $record->invoiceDescriptionLevelSetOfficeNumber()->first()?->description, 'invoiceDescriptionLevelSetDubaiTrackNumber' => $record->invoiceDescriptionLevelSetDubaiTrackNumber()->first()?->description, 'invoiceDescriptionLevelIsInDubai' => $record->invoiceDescriptionLevelIsInDubai()->first()?->description, 'invoiceDescriptionLevelSendToTehran' => $record->invoiceDescriptionLevelSendToTehran()->first()?->description, 'invoiceDescriptionLevelIsInTehran' => $record->invoiceDescriptionLevelIsInTehran()->first()?->description, ]); }) ->form([ Textarea::make('invoiceDescriptionLevelBuyInvoice')->label('توضیحات مرحله خرید')->disabled(), Textarea::make('invoiceDescriptionLevelSetTrackNumber')->label('توضیحات ثبت ترک نامبر')->disabled(), Textarea::make('invoiceDescriptionLevelSetOfficeNumber')->label('توضیحات ثبت شماره دفتری')->disabled(), Textarea::make('invoiceDescriptionLevelSetDubaiTrackNumber')->label('توضیحات ثبت ترک دبی')->disabled(), Textarea::make('invoiceDescriptionLevelIsInDubai')->label('توضیحات درون دبی')->disabled(), Textarea::make('invoiceDescriptionLevelSendToTehran')->label('توضیحات ارسال به تهران')->disabled(), Textarea::make('invoiceDescriptionLevelIsInTehran')->label('توضیحات درون تهران')->disabled(), ]) ->modalCancelAction(false) ->modalSubmitAction(false) ->action(function (array $data) { }) ]) ->bulkActions([ BulkAction::make('edition')->label('ثبت گروهی') ->form([ DatePicker::make('estimateddatetobase')->label('تاریخ تخمینی به بیس')->displayFormat('Y-m-d')->required(), TextInput::make('tracknumber')->label('شماره ترک')->required(), Select::make('carrier_id')->label('حامل')->options(Carrier::all()->pluck('name', 'id')->toArray()), Textarea::make('invoiceDescriptionLevelOrderIdTaken')->label('توضیحات'), ]) ->action(function (Collection $records, array $data) { foreach ($records as $record) { self::updateRecord($record, $data); } return $records; }) ]) ->defaultSort('updated_at', 'desc'); } public static function getPages(): array { return [ 'index' => Pages\ListLogisticSetOrderIds::route('/'), ]; } private static function updateRecord($record, $data) { InvoiceDescription::updateOrCreate([ 'logistics_id' => $record->id, 'level' => 'set-track-number', ], [ 'invoice_id' => $record->invoice_id, 'invoice_item_id' => $record->invoice_item_id, 'description' => $data['invoiceDescriptionLevelOrderIdTaken'], 'agent_id' => auth()->id(), ]); $record->update([ 'status_id' => 2, 'tracknumber' => $data['tracknumber'], 'carrier_id' => $data['carrier_id'], 'estimateddatetobase' => $data['estimateddatetobase'], ]); } public static function canViewAny(): bool { return auth()->user()->can('logistic-set-track-number::view'); } }