OwlCyberSecurity - MANAGER
Edit File: PaidInvoiceResource.php
<?php namespace App\Filament\Resources; use App\Filament\Resources\PaidInvoiceResource\Pages; use App\Helpers\InvoiceGlobalSearch; use App\Models\Invoice; use App\Models\Logistic; use App\Models\Transaction; use App\Models\User; use App\Notifications\SendSuccessfullySendOrder; use Filament\Tables\Actions\Action; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Grid; 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\EditAction; use Filament\Tables\Filters\Filter; use Filament\Tables\Table; use Filament\Tables\Columns\TextColumn; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\Auth; class PaidInvoiceResource extends Resource { use InvoiceGlobalSearch; protected static ?string $model = Invoice::class; protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; protected static ?string $modelLabel = 'آماده تحویل به مشتری'; protected static ?string $pluralModelLabel = 'آماده تحویل به مشتری'; protected static ?string $navigationGroup = 'لاجیستیک'; protected static ?string $slug = 'paid-invoice'; protected static ?int $navigationSort = 9; public static function getEloquentQuery(): Builder { return parent::getEloquentQuery() ->where('invoices.status', 'تحویل دفتر ایران') ->where('invoices.orderlevel', 'پرداخت شده'); } public static function form(Form $form): Form { return $form->schema([ Grid::make(1)->schema([ TextInput::make('SendToCustomerTrackCode')->label('کد رهگیری ارسال کالا به مشتری')->required(), TextInput::make('SendToCustomerCost')->numeric()->label('هزینه ارسال کالا به مشتری')->required(), Select::make('SentToCustomerBy')->label('روش ارسال کالا به مشتری')->required()->options([ 'حضوری' => 'حضوری', 'تیپاکس' => 'تیپاکس', 'پست' => 'پست', 'پیک' => 'پیک', 'غیره' => 'غیره', ]), DatePicker::make('DeliveredToCustomer')->label('تاریخ ارسال کالا به مشتری')->required(), Textarea::make('description')->label('توضیحات') ]), ]); } public static function table(Table $table): Table { return $table ->columns([ TextColumn::make('user.name')->label('نام مشتری'), TextColumn::make('user.cell_number')->label('تلفن همراه'), TextColumn::make('code')->label('کد رهگیری'), TextColumn::make('created_at')->label('تاریخ'), // TextColumn::make('agent.name')->label('کارشناس'), TextColumn::make('finalTotaltransportprice')->label('مجموع هزینه ارسال')->money('irr'), TextColumn::make('finalTotalitemprice')->label('مجموع هزینه ایتم ها')->money('irr'), TextColumn::make('finalOthercosts')->label('مجموع هزینه های اضافی')->money('irr'), TextColumn::make('sumFinalCost')->label('مجموع هزینه ها')->getStateUsing(fn(Invoice $record): float => $record->finalTotaltransportprice + $record->finalTotalitemprice + $record->finalOthercosts)->money('irr'), ]) ->filters([ Filter::make('code')->form([ TextInput::make('code')->label('کد رهگیری'), ])->query(function (Builder $query, array $data): Builder { return $query->when( $data['code'], fn(Builder $query, $date): Builder => $query->where('code', $date), ); }), Filter::make('username')->form([ TextInput::make('name')->label('نام مشتری'), ])->query(fn(Builder $query, array $data): Builder => $query->when( $data['name'], fn(Builder $query, $data): Builder => $query->whereHas( 'user', function ($q) use ($data) { $q->where('users.name', 'like', '%' . $data . '%'); }), )), Filter::make('cell_number')->form([ TextInput::make('cell_number')->label('تلفن همراه'), ])->query(fn(Builder $query, array $data): Builder => $query->when( $data['cell_number'], fn(Builder $query, $data): Builder => $query->whereHas( 'user', function ($q) use ($data) { $q->where('users.cell_number', 'like', '%' . $data . '%'); }), )), Filter::make('created_at')->form([ DatePicker::make('created_from')->label('از تاریخ')->displayFormat('Y-m-d')->required(), DatePicker::make('created_until')->label('تا تاریخ')->displayFormat('Y-m-d')->required(), ])->query(function (Builder $query, array $data): Builder { return $query ->when( $data['created_from'], fn(Builder $query, $date): Builder => $query->whereDate('created_at', '>=', $date), ) ->when( $data['created_until'], fn(Builder $query, $date): Builder => $query->whereDate('created_at', '<=', $date), ); }), ]) ->actions([ Action::make('final-factor')->label('مشاهده فاکتور')->color('primary')->icon('heroicon-o-currency-dollar') ->url(fn(Invoice $item) => config('app.url') . "/admin/invoice-search/view-factor/" . "{$item->id}") ->openUrlInNewTab() ->icon('heroicon-o-link') ->color('primary'), EditAction::make()->label('ارسال به مشتری')->using(function (Invoice $record, array $data) { $record->update([ 'status' => 'تحویل مشتری', 'orderlevel' => 'تحویل مشتری', 'DeliveredToCustomer' => $data['DeliveredToCustomer'] ]); Transaction::create([ 'amount' => $data['SendToCustomerCost'] * -1, 'comment' => $data['SendToCustomerTrackCode'], 'date' => now(), 'invoice_id' => $record->id, 'method' => 'ارسال', 'payment_method_id' => 4, 'issuccess' => 1, 'user_id' => $record->user_id, 'admin_user_id' => Auth::id(), ]); Logistic::where('invoice_id', $record->id)->update([ 'SendToCustomerTrackCode' => $data['SendToCustomerTrackCode'], 'SendToCustomerCost' => $data['SendToCustomerCost'], 'SentToCustomerBy' => $data['SentToCustomerBy'], 'description' => $data['description'], ]); //todo: send sms if ($data['SentToCustomerBy'] == 'پست') User::find($record->user_id)->notify(new SendSuccessfullySendOrder(Invoice::find($record->id), $data['SendToCustomerTrackCode'])); return $record; }), ]) ->bulkActions([]) ->defaultSort('id', 'desc'); } public static function getPages(): array { return [ 'index' => Pages\ListPaidInvoices::route('/'), ]; } public static function canViewAny(): bool { return auth()->user()->can('paid-invoice::view'); } }