OwlCyberSecurity - MANAGER
Edit File: LogisticIsInDubaiResource.php
<?php namespace App\Filament\Resources; use App\Filament\Resources\LogisticIsInDubaiResource\Pages; use App\Helpers\LogisticGlobalSearch; use App\Models\Invoice; use App\Models\InvoiceDescription; use App\Models\Logistic; use App\Models\Path; use Carbon\Carbon; 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 Filament\Tables\Actions\BulkAction; use Filament\Tables\Actions\EditAction; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Filters\Filter; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; class LogisticIsInDubaiResource 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-send-to-tehran'; protected static ?string $navigationGroup = 'لاجیستیک'; protected static ?int $navigationSort = 5; public static function getEloquentQuery(): Builder { // return parent::getEloquentQuery() // ->whereNotNull('logistics.datearrivetodubai') // ->where(fn($query) => $query->whereNull('logistics.transporter')->orwhere('logistics.transporter', '=', '')) // ->where(fn($query) => $query->wherenull('logistics.iscancel')->orwhere('logistics.iscancel', '=', 0)); return parent::getEloquentQuery() ->where('logistics.status_id', 5) ->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), Select::make('transporter')->label('مسیر')->required()->options(Path::all()->pluck('name', 'id')), TextInput::make('sendPackNumber')->label('شماره پک ارسالی')->required(), DatePicker::make('estimatedDateToTehran')->label('تاریخ تخمینی رسیدن به تهران')->displayFormat('Y-m-d')->required(), Textarea::make('invoiceDescriptionLevelIsInDubai')->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('buyingdate')->label('تاریخ خرید'), TextColumn::make('tracknumber')->label('ترک نامبر'), TextColumn::make('officenumber')->label('شماره دفتری'), TextColumn::make('dubaitracknumber')->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('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('dubaitracknumber')->form([ TextInput::make('dubaitracknumber')->label('ترک کد دوبی'), ])->query(function (Builder $query, array $data): Builder { return $query->when( $data['dubaitracknumber'], fn(Builder $query, $data): Builder => $query->where('dubaitracknumber', '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) { }), Action::make('back')->label('برگشت به مرحله قبل')->icon('heroicon-o-arrow-uturn-left') ->form([ Placeholder::make('code')->label('آیا برای بازگشت سفارش با کد رهگیری زیر به مرحله قبل مطمعن هستین؟') ->content(fn(Logistic $record): string => $record->invoice->code) ]) ->action(function (Logistic $record, array $data) { $record->update([ 'status_id' => $record->status_id - 1, ]); }), ]) ->bulkActions([ BulkAction::make('edition')->label('ثبت گروهی') ->form([ Select::make('transporter')->label('مسیر')->required()->options(Path::all()->pluck('name', 'id')), TextInput::make('sendPackNumber')->label('شماره پک ارسالی')->required(), DatePicker::make('estimatedDateToTehran')->label('تاریخ تخمینی رسیدن به تهران')->displayFormat('Y-m-d')->required(), Textarea::make('invoiceDescriptionLevelIsInDubai')->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\ListLogisticIsInDubais::route('/'), ]; } private static function updateRecord($record, $data) { InvoiceDescription::updateOrCreate([ 'logistics_id' => $record->id, 'level' => 'send-to-tehran', ], [ 'invoice_id' => $record->invoice_id, 'invoice_item_id' => $record->invoice_item_id, 'description' => $data['invoiceDescriptionLevelIsInDubai'], 'agent_id' => auth()->id(), ]); $record->update([ 'status_id' => 6, 'transporter' => $data['transporter'], 'sendPackNumber' => $data['sendPackNumber'], 'estimatedDateToTehran' => $data['estimatedDateToTehran'], ]); Invoice::where('id', $record->invoice_id)->update(['status' => 'ارسال به ایران']); return $record; } public static function canViewAny(): bool { return auth()->user()->can('logistic-send-to-tehran::view'); } }