OwlCyberSecurity - MANAGER
Edit File: CancelLogisticResource.php
<?php namespace App\Filament\Resources; use App\Filament\Resources\CancelLogisticResource\Pages; use App\Helpers\Calculator; use App\Models\CancelReason; use App\Models\InvoiceDescription; use App\Models\Logistic; use App\Models\TransitionHistory; use Filament\Forms\Components\Select; use Filament\Forms\Components\Textarea; use Filament\Forms\Components\TextInput; use Filament\Notifications\Notification; use Filament\Resources\Resource; use Filament\Tables\Actions\EditAction; use Filament\Tables\Table; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Filters\Filter; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\Auth; class CancelLogisticResource extends Resource { protected static ?string $model = Logistic::class; protected static ?string $navigationIcon = 'heroicon-o-x-circle'; protected static ?string $modelLabel = 'لغو کردن آیتم سفارش'; protected static ?string $pluralModelLabel = 'لغو کردن آیتم سفارش'; protected static ?string $slug = 'cancel-logistic'; protected static ?string $navigationGroup = 'کنسلی ها'; protected static ?int $navigationSort = 1; public static function getEloquentQuery(): Builder { return parent::getEloquentQuery() ->whereNotNull('logistics.orderId') ->where('logistics.orderId', '!=', '') ->where('logistics.iscancel', '=', 0); } public static function table(Table $table): Table { return $table ->columns([ TextColumn::make('invoice.code')->label('کد رهگیری')->copyable(), TextColumn::make('invoiceItem.name')->label('نام کالا'), TextColumn::make('iscancel')->label('کنسل شده')->formatStateUsing(fn(string|null $state): string => $state ? 'بله' : 'خیر'), TextColumn::make('finalweight')->label('وزن'), TextColumn::make('price')->label('قیمت'), TextColumn::make('exchange.name')->label('ارز'), TextColumn::make('base.title')->label('بیس'), ]) ->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('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([ EditAction::make()->label('کنسل کردن آیتم') ->form([ Select::make('transitionreason')->label('دلیل کنسلی')->options(CancelReason::all()->pluck('title', 'id'))->required(), Select::make('canceltype')->label('نوع کنسلی')->options(['توسط فروشنده' => 'توسط فروشنده', 'توسط ما' => 'توسط ما'])->required(), Textarea::make('cancelreason')->label('علت کنسلی')->required(), ])->using(function (Logistic $record, array $data) { // if ($record->invoice->status == 'تحویل مشتری' or $record->invoice->status == 'تحویل دفتر ایران' or $record->invoice->status == 'ارسال به ایران' or $record->invoice->status == 'تحویل دفتر دوبی' or $record->invoice->status == 'ارسال به دوبی') { // Notification::make()->title('سفارش از مرحله ثبت ترک دبی رد شده و امکان کنسل کردن آیتم ندارد')->danger()->send(); // return $record; // } $record->update([ 'estimateddatetobase' => now(), 'buyingdate' => now(), 'isdeclare' => false, 'orderexpireddate' => now(), 'canceldate' => now(), 'transitionmode' => 'Cancel', 'logisticstatus' => 'Cancel', 'isrebuy' => false, 'isTransitionAccessToCustomer' => true, 'iscancel' => true, 'cancelreason' => $data['cancelreason'], 'canceltype' => $data['canceltype'], 'transitionreason' => $data['transitionreason'], ]); TransitionHistory::insert([ 'last_buy_date' => now(), 'transition_agent_id' => Auth::user()->id, 'transition_date' => now(), 'transition_reason' => $data['transitionreason'], 'transition_action' => 'toCancelAction', 'logistic_id' => $record->id ]); InvoiceDescription::create([ 'invoice_id' => $record->invoice_id, 'invoice_item_id' =>$record->invoice_item_id, 'logistics_id' => $record->id, 'description' => $data['cancelreason'], 'agent_id' => Auth::user()->id ]); Calculator::reCalculateItemsBasedOnLogistic($record->invoice_id); return $record; // todo: send sms }) ]) ->bulkActions([]) ->defaultSort('id', 'desc'); } public static function getPages(): array { return [ 'index' => Pages\ListCancelLogistics::route('/'), ]; } public static function canViewAny(): bool { return auth()->user()->can('cancel-logistic::view'); } }