refactor: streamline Cooperation resource by consolidating partner media queries and enhancing infolist structure for improved maintainability
This commit is contained in:
parent
e5cbbe7e96
commit
ae46b93b32
@ -24,10 +24,8 @@ protected function setUp(): void
|
|||||||
->color('success')
|
->color('success')
|
||||||
->action(function (Cooperation $record): void {
|
->action(function (Cooperation $record): void {
|
||||||
$cooperationMedia = $record->cooperationMedia()
|
$cooperationMedia = $record->cooperationMedia()
|
||||||
->whereHas('partnerMedia', function (Builder $query): void {
|
->whereHas('partnerMedia.company', function (Builder $query): void {
|
||||||
$query->whereHas('company', function (Builder $subQuery): void {
|
$query->where('user_id', auth()->id());
|
||||||
$subQuery->where('user_id', auth()->id());
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
@ -40,7 +38,8 @@ protected function setUp(): void
|
|||||||
)->send();
|
)->send();
|
||||||
|
|
||||||
// Notify Admins
|
// Notify Admins
|
||||||
User::superAdmin()
|
User::query()
|
||||||
|
->superAdmin()
|
||||||
->get()
|
->get()
|
||||||
->each(function ($admin) use ($record, $cooperationMedia): void {
|
->each(function ($admin) use ($record, $cooperationMedia): void {
|
||||||
$admin->notify(new BroadcastNotification([
|
$admin->notify(new BroadcastNotification([
|
||||||
@ -63,10 +62,8 @@ protected function setUp(): void
|
|||||||
}
|
}
|
||||||
|
|
||||||
$cooperationMedia = $record->cooperationMedia()
|
$cooperationMedia = $record->cooperationMedia()
|
||||||
->whereHas('partnerMedia', function (Builder $query): void {
|
->whereHas('partnerMedia.company', function (Builder $query): void {
|
||||||
$query->whereHas('company', function (Builder $subQuery): void {
|
$query->where('user_id', auth()->id());
|
||||||
$subQuery->where('user_id', auth()->id());
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
|
|||||||
@ -22,10 +22,8 @@ protected function setUp(): void
|
|||||||
->color('danger')
|
->color('danger')
|
||||||
->action(function (Cooperation $record): void {
|
->action(function (Cooperation $record): void {
|
||||||
$cooperationMedia = $record->cooperationMedia()
|
$cooperationMedia = $record->cooperationMedia()
|
||||||
->whereHas('partnerMedia', function ($query) {
|
->whereHas('partnerMedia.company', function ($query) {
|
||||||
$query->whereHas('company', function ($subQuery) {
|
$query->where('user_id', auth()->id());
|
||||||
$subQuery->where('user_id', auth()->id());
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
@ -38,7 +36,8 @@ protected function setUp(): void
|
|||||||
)->send();
|
)->send();
|
||||||
|
|
||||||
// Notify Admins
|
// Notify Admins
|
||||||
User::superAdmin()
|
User::query()
|
||||||
|
->superAdmin()
|
||||||
->get()
|
->get()
|
||||||
->each(function ($admin) use ($record, $cooperationMedia): void {
|
->each(function ($admin) use ($record, $cooperationMedia): void {
|
||||||
$admin->notify(new BroadcastNotification([
|
$admin->notify(new BroadcastNotification([
|
||||||
@ -56,10 +55,8 @@ protected function setUp(): void
|
|||||||
}
|
}
|
||||||
|
|
||||||
$cooperationMedia = $record->cooperationMedia()
|
$cooperationMedia = $record->cooperationMedia()
|
||||||
->whereHas('partnerMedia', function ($query) {
|
->whereHas('partnerMedia.company', function ($query) {
|
||||||
$query->whereHas('company', function ($subQuery) {
|
$query->where('user_id', auth()->id());
|
||||||
$subQuery->where('user_id', auth()->id());
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
|
|||||||
@ -56,10 +56,8 @@ protected function setUp(): void
|
|||||||
])
|
])
|
||||||
->action(function (Cooperation $record, array $data): void {
|
->action(function (Cooperation $record, array $data): void {
|
||||||
$cooperationMedia = $record->cooperationMedia()
|
$cooperationMedia = $record->cooperationMedia()
|
||||||
->whereHas('partnerMedia', function (Builder $query): void {
|
->whereHas('partnerMedia.company', function (Builder $query): void {
|
||||||
$query->whereHas('company', function (Builder $subQuery): void {
|
$query->where('user_id', auth()->id());
|
||||||
$subQuery->where('user_id', auth()->id());
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
@ -99,7 +97,8 @@ protected function setUp(): void
|
|||||||
)->send();
|
)->send();
|
||||||
|
|
||||||
// Notify Admin
|
// Notify Admin
|
||||||
User::superAdmin()
|
User::query()
|
||||||
|
->superAdmin()
|
||||||
->get()
|
->get()
|
||||||
->each(function ($admin) use ($isRevision, $record, $cooperationMedia): void {
|
->each(function ($admin) use ($isRevision, $record, $cooperationMedia): void {
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
@ -131,10 +130,8 @@ protected function setUp(): void
|
|||||||
}
|
}
|
||||||
|
|
||||||
$cooperationMedia = $record->cooperationMedia()
|
$cooperationMedia = $record->cooperationMedia()
|
||||||
->whereHas('partnerMedia', function (Builder $query): void {
|
->whereHas('partnerMedia.company', function (Builder $query): void {
|
||||||
$query->whereHas('company', function (Builder $subQuery): void {
|
$query->where('user_id', auth()->id());
|
||||||
$subQuery->where('user_id', auth()->id());
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
|
|||||||
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
namespace App\Filament\Resources\Manage\Cooperations;
|
namespace App\Filament\Resources\Manage\Cooperations;
|
||||||
|
|
||||||
use App\Enums\NotifStyle;
|
|
||||||
use App\Enums\RoleEnum;
|
use App\Enums\RoleEnum;
|
||||||
|
use App\Filament\Resources\Manage\Cooperations\Infolists\CooperationInfolist;
|
||||||
use App\Filament\Resources\Manage\Cooperations\Pages\CreateCooperation;
|
use App\Filament\Resources\Manage\Cooperations\Pages\CreateCooperation;
|
||||||
use App\Filament\Resources\Manage\Cooperations\Pages\EditCooperation;
|
use App\Filament\Resources\Manage\Cooperations\Pages\EditCooperation;
|
||||||
use App\Filament\Resources\Manage\Cooperations\Pages\ListCooperations;
|
use App\Filament\Resources\Manage\Cooperations\Pages\ListCooperations;
|
||||||
@ -15,20 +15,13 @@
|
|||||||
use App\Filament\Resources\Manage\Cooperations\RelationManagers\TaskAssignmentRelationManager;
|
use App\Filament\Resources\Manage\Cooperations\RelationManagers\TaskAssignmentRelationManager;
|
||||||
use App\Filament\Resources\Manage\Cooperations\Schemas\CooperationForm;
|
use App\Filament\Resources\Manage\Cooperations\Schemas\CooperationForm;
|
||||||
use App\Filament\Resources\Manage\Cooperations\Tables\CooperationsTable;
|
use App\Filament\Resources\Manage\Cooperations\Tables\CooperationsTable;
|
||||||
use App\Filament\Support\CheerfulNotification;
|
|
||||||
use App\Models\Cooperation;
|
use App\Models\Cooperation;
|
||||||
use BackedEnum;
|
use BackedEnum;
|
||||||
use Filament\Actions\Action;
|
|
||||||
use Filament\Infolists\Components\ImageEntry;
|
|
||||||
use Filament\Infolists\Components\TextEntry;
|
|
||||||
use Filament\Resources\Resource;
|
use Filament\Resources\Resource;
|
||||||
use Filament\Schemas\Components\Grid;
|
|
||||||
use Filament\Schemas\Components\Section;
|
|
||||||
use Filament\Schemas\Schema;
|
use Filament\Schemas\Schema;
|
||||||
use Filament\Support\Icons\Heroicon;
|
use Filament\Support\Icons\Heroicon;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Joaopaulolndev\FilamentPdfViewer\Infolists\Components\PdfViewerEntry;
|
|
||||||
use UnitEnum;
|
use UnitEnum;
|
||||||
|
|
||||||
class CooperationResource extends Resource
|
class CooperationResource extends Resource
|
||||||
@ -48,10 +41,8 @@ class CooperationResource extends Resource
|
|||||||
public static function getNavigationBadge(): ?string
|
public static function getNavigationBadge(): ?string
|
||||||
{
|
{
|
||||||
return static::getModel()::when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $query): void {
|
return static::getModel()::when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $query): void {
|
||||||
$query->whereHas('partnerMedia', function (Builder $partnerMediaQuery): void {
|
$query->whereHas('partnerMedia.company', function (Builder $subQuery): void {
|
||||||
$partnerMediaQuery->whereHas('company', function (Builder $companyQuery): void {
|
$subQuery->where('user_id', auth()->id());
|
||||||
$companyQuery->where('user_id', auth()->id());
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
->count();
|
->count();
|
||||||
@ -69,75 +60,7 @@ public static function table(Table $table): Table
|
|||||||
|
|
||||||
public static function infolist(Schema $schema): Schema
|
public static function infolist(Schema $schema): Schema
|
||||||
{
|
{
|
||||||
return $schema
|
return CooperationInfolist::configure($schema);
|
||||||
->components([
|
|
||||||
Section::make(fn () => CheerfulNotification::getByKey('cooperation.info_title'))
|
|
||||||
->description(fn () => CheerfulNotification::getByKey('cooperation.info_desc'))
|
|
||||||
->icon(fn () => CheerfulNotification::getNotifStyle() === NotifStyle::CHEERFUL ? 'heroicon-o-hand-raised' : null)
|
|
||||||
->headerActions([
|
|
||||||
Action::make('status')
|
|
||||||
->label(fn (Cooperation $record): ?string => $record->status->getLabel())
|
|
||||||
->badge()
|
|
||||||
->color(fn (Cooperation $record): string|array|null => $record->status->getColor())
|
|
||||||
->disabled(),
|
|
||||||
])
|
|
||||||
->schema([
|
|
||||||
TextEntry::make('title')
|
|
||||||
->label('Judul Kerja Sama'),
|
|
||||||
|
|
||||||
Grid::make(3)
|
|
||||||
->schema([
|
|
||||||
TextEntry::make('initial_submission_date')
|
|
||||||
->label('Tanggal Pengajuan Awal')
|
|
||||||
->date('l, d F Y'),
|
|
||||||
|
|
||||||
TextEntry::make('final_submission_date')
|
|
||||||
->label('Tanggal Pengajuan Akhir')
|
|
||||||
->date('l, d F Y'),
|
|
||||||
|
|
||||||
TextEntry::make('taskAssignment.start_date')
|
|
||||||
->label('Tanggal Mulai Media Order')
|
|
||||||
->date('l, d F Y')
|
|
||||||
->placeholder('Belum ditentukan'),
|
|
||||||
|
|
||||||
TextEntry::make('taskAssignment.end_date')
|
|
||||||
->label('Tanggal Selesai Media Order')
|
|
||||||
->date('l, d F Y')
|
|
||||||
->placeholder('Belum ditentukan'),
|
|
||||||
|
|
||||||
TextEntry::make('payment_date')
|
|
||||||
->label('Tanggal Pembayaran')
|
|
||||||
->date('l, d F Y')
|
|
||||||
->placeholder('Belum dibayar'),
|
|
||||||
|
|
||||||
TextEntry::make('completed_at')
|
|
||||||
->label('Tanggal Selesai')
|
|
||||||
->date('l, d F Y')
|
|
||||||
->placeholder('Masih berjalan'),
|
|
||||||
]),
|
|
||||||
|
|
||||||
Grid::make(3)
|
|
||||||
->schema([
|
|
||||||
PdfViewerEntry::make('proposal_template')
|
|
||||||
->label('Template Proposal')
|
|
||||||
->getStateUsing(fn (Cooperation $record): ?string => optional($record->getMedia('cooperations')->where('custom_properties.doc_type', 'proposal-template')->sortByDesc('created_at')->first())->getPathRelativeToRoot())
|
|
||||||
->disk(config('filesystems.default'))
|
|
||||||
->columnSpan(2)
|
|
||||||
->visible(fn (Cooperation $record): bool => $record->getMedia('cooperations')->where('custom_properties.doc_type', 'proposal-template')->isNotEmpty()),
|
|
||||||
|
|
||||||
ImageEntry::make('banner')
|
|
||||||
->label('Banner')
|
|
||||||
->getStateUsing(fn (Cooperation $record): ?string => optional($record->getMedia('banner')->sortByDesc('created_at')->first() ?? $record->getMedia('cooperations')->where('custom_properties.doc_type', 'banner')->sortByDesc('created_at')->first())->getPathRelativeToRoot())
|
|
||||||
->disk(config('filesystems.default'))
|
|
||||||
->visible(fn (Cooperation $record): bool => $record->getMedia('banner')->isNotEmpty() || $record->getMedia('cooperations')->where('custom_properties.doc_type', 'banner')->isNotEmpty()),
|
|
||||||
])
|
|
||||||
->visible(fn (Cooperation $record): bool => $record->getMedia('banner')->isNotEmpty() || $record->getMedia('cooperations')->where('custom_properties.doc_type', 'banner')->isNotEmpty() || $record->getMedia('cooperations')->where('custom_properties.doc_type', 'proposal-template')->isNotEmpty()),
|
|
||||||
|
|
||||||
TextEntry::make('description')
|
|
||||||
->label('Deskripsi'),
|
|
||||||
]),
|
|
||||||
])
|
|
||||||
->columns(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getRelations(): array
|
public static function getRelations(): array
|
||||||
@ -155,12 +78,8 @@ public static function getEloquentQuery(): Builder
|
|||||||
{
|
{
|
||||||
return parent::getEloquentQuery()
|
return parent::getEloquentQuery()
|
||||||
->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $query): void {
|
->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $query): void {
|
||||||
$query->whereHas('cooperationMedia', function (Builder $subQuery): void {
|
$query->whereHas('cooperationMedia.partnerMedia.company', function (Builder $subQuery): void {
|
||||||
$subQuery->whereHas('partnerMedia', function (Builder $mediaQuery): void {
|
$subQuery->where('user_id', auth()->id());
|
||||||
$mediaQuery->whereHas('company', function (Builder $companyQuery): void {
|
|
||||||
$companyQuery->where('user_id', auth()->id());
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,92 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Manage\Cooperations\Infolists;
|
||||||
|
|
||||||
|
use App\Enums\NotifStyle;
|
||||||
|
use App\Filament\Support\CheerfulNotification;
|
||||||
|
use App\Models\Cooperation;
|
||||||
|
use Filament\Actions\Action;
|
||||||
|
use Filament\Infolists\Components\ImageEntry;
|
||||||
|
use Filament\Infolists\Components\TextEntry;
|
||||||
|
use Filament\Schemas\Components\Grid;
|
||||||
|
use Filament\Schemas\Components\Section;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
use Joaopaulolndev\FilamentPdfViewer\Infolists\Components\PdfViewerEntry;
|
||||||
|
|
||||||
|
class CooperationInfolist
|
||||||
|
{
|
||||||
|
public static function configure(Schema $schema): Schema
|
||||||
|
{
|
||||||
|
return $schema
|
||||||
|
->components([
|
||||||
|
Section::make(fn () => CheerfulNotification::getByKey('cooperation.info_title'))
|
||||||
|
->description(fn () => CheerfulNotification::getByKey('cooperation.info_desc'))
|
||||||
|
->icon(fn () => CheerfulNotification::getNotifStyle() === NotifStyle::CHEERFUL ? 'heroicon-o-hand-raised' : null)
|
||||||
|
->headerActions([
|
||||||
|
Action::make('status')
|
||||||
|
->label(fn (Cooperation $record): ?string => $record->status->getLabel())
|
||||||
|
->badge()
|
||||||
|
->color(fn (Cooperation $record): string|array|null => $record->status->getColor())
|
||||||
|
->disabled(),
|
||||||
|
])
|
||||||
|
->schema([
|
||||||
|
TextEntry::make('title')
|
||||||
|
->label('Judul Kerja Sama'),
|
||||||
|
|
||||||
|
Grid::make(3)
|
||||||
|
->schema([
|
||||||
|
TextEntry::make('initial_submission_date')
|
||||||
|
->label('Tanggal Pengajuan Awal')
|
||||||
|
->date('l, d F Y'),
|
||||||
|
|
||||||
|
TextEntry::make('final_submission_date')
|
||||||
|
->label('Tanggal Pengajuan Akhir')
|
||||||
|
->date('l, d F Y'),
|
||||||
|
|
||||||
|
TextEntry::make('taskAssignment.start_date')
|
||||||
|
->label('Tanggal Mulai Media Order')
|
||||||
|
->date('l, d F Y')
|
||||||
|
->placeholder('Belum ditentukan'),
|
||||||
|
|
||||||
|
TextEntry::make('taskAssignment.end_date')
|
||||||
|
->label('Tanggal Selesai Media Order')
|
||||||
|
->date('l, d F Y')
|
||||||
|
->placeholder('Belum ditentukan'),
|
||||||
|
|
||||||
|
TextEntry::make('payment_date')
|
||||||
|
->label('Tanggal Pembayaran')
|
||||||
|
->date('l, d F Y')
|
||||||
|
->placeholder('Belum dibayar'),
|
||||||
|
|
||||||
|
TextEntry::make('completed_at')
|
||||||
|
->label('Tanggal Selesai')
|
||||||
|
->date('l, d F Y')
|
||||||
|
->placeholder('Masih berjalan'),
|
||||||
|
]),
|
||||||
|
|
||||||
|
Grid::make(3)
|
||||||
|
->schema([
|
||||||
|
PdfViewerEntry::make('proposal_template')
|
||||||
|
->label('Template Proposal')
|
||||||
|
->getStateUsing(fn (Cooperation $record): ?string => optional($record->getMedia('cooperations')->where('custom_properties.doc_type', 'proposal-template')->sortByDesc('created_at')->first())->getPathRelativeToRoot())
|
||||||
|
->disk(config('filesystems.default'))
|
||||||
|
->columnSpan(2)
|
||||||
|
->visible(fn (Cooperation $record): bool => $record->getMedia('cooperations')->where('custom_properties.doc_type', 'proposal-template')->isNotEmpty()),
|
||||||
|
|
||||||
|
ImageEntry::make('banner')
|
||||||
|
->label('Banner')
|
||||||
|
->getStateUsing(fn (Cooperation $record): ?string => optional($record->getMedia('banner')->sortByDesc('created_at')->first() ?? $record->getMedia('cooperations')->where('custom_properties.doc_type', 'banner')->sortByDesc('created_at')->first())->getPathRelativeToRoot())
|
||||||
|
->disk(config('filesystems.default'))
|
||||||
|
->visible(fn (Cooperation $record): bool => $record->getMedia('banner')->isNotEmpty() || $record->getMedia('cooperations')->where('custom_properties.doc_type', 'banner')->isNotEmpty()),
|
||||||
|
])
|
||||||
|
->visible(fn (Cooperation $record): bool => $record->getMedia('banner')->isNotEmpty() || $record->getMedia('cooperations')->where('custom_properties.doc_type', 'banner')->isNotEmpty() || $record->getMedia('cooperations')->where('custom_properties.doc_type', 'proposal-template')->isNotEmpty()),
|
||||||
|
|
||||||
|
TextEntry::make('description')
|
||||||
|
->label('Deskripsi')
|
||||||
|
->html()
|
||||||
|
->prose(),
|
||||||
|
]),
|
||||||
|
])
|
||||||
|
->columns(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,9 +3,11 @@
|
|||||||
namespace App\Filament\Resources\Manage\Cooperations\Pages;
|
namespace App\Filament\Resources\Manage\Cooperations\Pages;
|
||||||
|
|
||||||
use App\Enums\RoleEnum;
|
use App\Enums\RoleEnum;
|
||||||
|
use App\Filament\Exports\CooperationExcelExport;
|
||||||
use App\Filament\Resources\Manage\Cooperations\CooperationResource;
|
use App\Filament\Resources\Manage\Cooperations\CooperationResource;
|
||||||
use Filament\Actions\CreateAction;
|
use Filament\Actions\CreateAction;
|
||||||
use Filament\Resources\Pages\ListRecords;
|
use Filament\Resources\Pages\ListRecords;
|
||||||
|
use pxlrbt\FilamentExcel\Actions\ExportAction;
|
||||||
|
|
||||||
class ListCooperations extends ListRecords
|
class ListCooperations extends ListRecords
|
||||||
{
|
{
|
||||||
@ -15,13 +17,17 @@ class ListCooperations extends ListRecords
|
|||||||
|
|
||||||
protected function getHeaderActions(): array
|
protected function getHeaderActions(): array
|
||||||
{
|
{
|
||||||
$actions = [];
|
return [
|
||||||
|
CreateAction::make()
|
||||||
|
->label('Tambah')
|
||||||
|
->visible(! auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)),
|
||||||
|
|
||||||
if (! auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)) {
|
ExportAction::make()
|
||||||
$actions[] = CreateAction::make()
|
->exports([
|
||||||
->label('Tambah');
|
CooperationExcelExport::make(),
|
||||||
}
|
])
|
||||||
|
->color('success')
|
||||||
return $actions;
|
->icon(null),
|
||||||
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -54,8 +54,6 @@ public function table(Table $table): Table
|
|||||||
->label('Status')
|
->label('Status')
|
||||||
->badge(),
|
->badge(),
|
||||||
])
|
])
|
||||||
->filters([])
|
|
||||||
->headerActions([])
|
|
||||||
->recordActions([
|
->recordActions([
|
||||||
PayAction::make('pay'),
|
PayAction::make('pay'),
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace App\Filament\Resources\Manage\Cooperations\RelationManagers;
|
namespace App\Filament\Resources\Manage\Cooperations\RelationManagers;
|
||||||
|
|
||||||
use App\Enums\ApprovalStatus;
|
|
||||||
use App\Enums\RoleEnum;
|
use App\Enums\RoleEnum;
|
||||||
use App\Filament\Columns\RowIndexColumn;
|
use App\Filament\Columns\RowIndexColumn;
|
||||||
use App\Filament\Support\CheerfulNotification;
|
use App\Filament\Support\CheerfulNotification;
|
||||||
@ -28,12 +27,10 @@ public static function canViewForRecord(Model $ownerRecord, string $pageClass):
|
|||||||
}
|
}
|
||||||
|
|
||||||
return $ownerRecord->cooperationMedia()
|
return $ownerRecord->cooperationMedia()
|
||||||
->whereHas('partnerMedia', function ($query) {
|
->whereHas('partnerMedia.company', function ($query) {
|
||||||
$query->whereHas('company', function ($query) {
|
$query->where('user_id', auth()->id());
|
||||||
$query->where('user_id', auth()->id());
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
->where('status', ApprovalStatus::ACCEPTED)
|
->accepted()
|
||||||
->exists();
|
->exists();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,9 +57,6 @@ public function table(Table $table): Table
|
|||||||
->getStateUsing(fn (CooperationPayment $record): ?string => optional($record->cooperationMedia->getMedia('cooperations')->where('custom_properties.doc_type', 'payment-proof')->sortByDesc('created_at')->first())->getPathRelativeToRoot())
|
->getStateUsing(fn (CooperationPayment $record): ?string => optional($record->cooperationMedia->getMedia('cooperations')->where('custom_properties.doc_type', 'payment-proof')->sortByDesc('created_at')->first())->getPathRelativeToRoot())
|
||||||
->disk(config('filesystems.default')),
|
->disk(config('filesystems.default')),
|
||||||
])
|
])
|
||||||
->filters([])
|
|
||||||
->headerActions([])
|
|
||||||
->recordActions([])
|
|
||||||
->emptyStateIcon(Heroicon::OutlinedCreditCard)
|
->emptyStateIcon(Heroicon::OutlinedCreditCard)
|
||||||
->emptyStateHeading(fn () => CheerfulNotification::getByKey('cooperation.payment_empty_heading'))
|
->emptyStateHeading(fn () => CheerfulNotification::getByKey('cooperation.payment_empty_heading'))
|
||||||
->emptyStateDescription(fn () => CheerfulNotification::getByKey('cooperation.payment_empty'))
|
->emptyStateDescription(fn () => CheerfulNotification::getByKey('cooperation.payment_empty'))
|
||||||
|
|||||||
@ -33,12 +33,10 @@ public static function canViewForRecord(Model $ownerRecord, string $pageClass):
|
|||||||
{
|
{
|
||||||
if (auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)) {
|
if (auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)) {
|
||||||
return $ownerRecord->cooperationMedia()
|
return $ownerRecord->cooperationMedia()
|
||||||
->whereHas('partnerMedia', function ($query) {
|
->whereHas('partnerMedia.company', function ($query) {
|
||||||
$query->whereHas('company', function ($query) {
|
$query->where('user_id', auth()->id());
|
||||||
$query->where('user_id', auth()->id());
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
->where('status', ApprovalStatus::ACCEPTED)
|
->accepted()
|
||||||
->exists();
|
->exists();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,8 +90,6 @@ public function table(Table $table): Table
|
|||||||
->label('Alasan Penolakan')
|
->label('Alasan Penolakan')
|
||||||
->searchable(),
|
->searchable(),
|
||||||
])
|
])
|
||||||
->filters([])
|
|
||||||
->headerActions([])
|
|
||||||
->recordActions([
|
->recordActions([
|
||||||
ViewAction::make(),
|
ViewAction::make(),
|
||||||
|
|
||||||
|
|||||||
@ -43,12 +43,10 @@ public static function canViewForRecord(Model $ownerRecord, string $pageClass):
|
|||||||
{
|
{
|
||||||
if (auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)) {
|
if (auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)) {
|
||||||
return $ownerRecord->cooperationMedia()
|
return $ownerRecord->cooperationMedia()
|
||||||
->whereHas('partnerMedia', function ($query) {
|
->whereHas('partnerMedia.company', function ($query) {
|
||||||
$query->whereHas('company', function ($query) {
|
$query->where('user_id', auth()->id());
|
||||||
$query->where('user_id', auth()->id());
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
->where('status', ApprovalStatus::ACCEPTED)
|
->accepted()
|
||||||
->exists();
|
->exists();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,7 +144,6 @@ public function table(Table $table): Table
|
|||||||
->label('Alasan Penolakan')
|
->label('Alasan Penolakan')
|
||||||
->searchable(),
|
->searchable(),
|
||||||
])
|
])
|
||||||
->filters([])
|
|
||||||
->recordActions([
|
->recordActions([
|
||||||
AcceptAction::make('accept'),
|
AcceptAction::make('accept'),
|
||||||
|
|
||||||
@ -181,7 +178,8 @@ public function table(Table $table): Table
|
|||||||
)->send();
|
)->send();
|
||||||
|
|
||||||
// Notify Admins
|
// Notify Admins
|
||||||
User::superAdmin()
|
User::query()
|
||||||
|
->superAdmin()
|
||||||
->get()
|
->get()
|
||||||
->each(function ($admin) use ($record): void {
|
->each(function ($admin) use ($record): void {
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
|
|||||||
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace App\Filament\Resources\Manage\Cooperations\RelationManagers;
|
namespace App\Filament\Resources\Manage\Cooperations\RelationManagers;
|
||||||
|
|
||||||
use App\Enums\ApprovalStatus;
|
|
||||||
use App\Enums\RoleEnum;
|
use App\Enums\RoleEnum;
|
||||||
use App\Filament\Actions\Cheerful\CreateAction;
|
use App\Filament\Actions\Cheerful\CreateAction;
|
||||||
use App\Filament\Actions\Cheerful\DeleteAction;
|
use App\Filament\Actions\Cheerful\DeleteAction;
|
||||||
@ -27,12 +26,10 @@ public static function canViewForRecord(Model $ownerRecord, string $pageClass):
|
|||||||
{
|
{
|
||||||
if (auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)) {
|
if (auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)) {
|
||||||
return $ownerRecord->cooperationMedia()
|
return $ownerRecord->cooperationMedia()
|
||||||
->whereHas('partnerMedia', function ($query) {
|
->whereHas('partnerMedia.company', function ($query) {
|
||||||
$query->whereHas('company', function ($query) {
|
$query->where('user_id', auth()->id());
|
||||||
$query->where('user_id', auth()->id());
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
->where('status', ApprovalStatus::ACCEPTED)
|
->accepted()
|
||||||
->exists();
|
->exists();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,9 +57,6 @@ public function table(Table $table): Table
|
|||||||
TextColumn::make('report_amount')
|
TextColumn::make('report_amount')
|
||||||
->label('Jumlah Bukti Tayang'),
|
->label('Jumlah Bukti Tayang'),
|
||||||
])
|
])
|
||||||
->filters([
|
|
||||||
//
|
|
||||||
])
|
|
||||||
->headerActions([
|
->headerActions([
|
||||||
CreateAction::make()
|
CreateAction::make()
|
||||||
->label('Buat Media Order')
|
->label('Buat Media Order')
|
||||||
@ -72,34 +66,38 @@ public function table(Table $table): Table
|
|||||||
return $cooperation->proposal()->accepted()->exists()
|
return $cooperation->proposal()->accepted()->exists()
|
||||||
&& ! $cooperation->taskAssignment()->exists();
|
&& ! $cooperation->taskAssignment()->exists();
|
||||||
})
|
})
|
||||||
->successNotification(fn () => CheerfulNotification::success(
|
->successNotification(
|
||||||
CheerfulNotification::getByKey('cooperation.assignment_success'),
|
fn () => CheerfulNotification::success(
|
||||||
CheerfulNotification::getByKey('cooperation.assignment_set_success')
|
CheerfulNotification::getByKey('cooperation.assignment_success'),
|
||||||
)
|
CheerfulNotification::getByKey('cooperation.assignment_set_success')
|
||||||
|
)
|
||||||
),
|
),
|
||||||
])
|
])
|
||||||
->recordActions([
|
->recordActions([
|
||||||
EditAction::make()
|
EditAction::make()
|
||||||
->successNotification(fn () => CheerfulNotification::success(
|
->successNotification(
|
||||||
CheerfulNotification::getByKey('cooperation.assignment_updated'),
|
fn () => CheerfulNotification::success(
|
||||||
CheerfulNotification::getByKey('cooperation.assignment_updated_desc')
|
CheerfulNotification::getByKey('cooperation.assignment_updated'),
|
||||||
)
|
CheerfulNotification::getByKey('cooperation.assignment_updated_desc')
|
||||||
|
)
|
||||||
),
|
),
|
||||||
|
|
||||||
DeleteAction::make()
|
DeleteAction::make()
|
||||||
->successNotification(fn () => CheerfulNotification::success(
|
->successNotification(
|
||||||
CheerfulNotification::getByKey('cooperation.assignment_deleted'),
|
fn () => CheerfulNotification::success(
|
||||||
CheerfulNotification::getByKey('cooperation.assignment_deleted_desc')
|
CheerfulNotification::getByKey('cooperation.assignment_deleted'),
|
||||||
)
|
CheerfulNotification::getByKey('cooperation.assignment_deleted_desc')
|
||||||
|
)
|
||||||
),
|
),
|
||||||
])
|
])
|
||||||
->toolbarActions([
|
->toolbarActions([
|
||||||
BulkActionGroup::make([
|
BulkActionGroup::make([
|
||||||
DeleteBulkAction::make()
|
DeleteBulkAction::make()
|
||||||
->successNotification(fn () => CheerfulNotification::success(
|
->successNotification(
|
||||||
CheerfulNotification::getByKey('cooperation.assignment_success_dihapus'),
|
fn () => CheerfulNotification::success(
|
||||||
CheerfulNotification::getByKey('cooperation.bulk_assignment_deleted')
|
CheerfulNotification::getByKey('cooperation.assignment_success_dihapus'),
|
||||||
)
|
CheerfulNotification::getByKey('cooperation.bulk_assignment_deleted')
|
||||||
|
)
|
||||||
),
|
),
|
||||||
]),
|
]),
|
||||||
])
|
])
|
||||||
|
|||||||
@ -8,9 +8,9 @@
|
|||||||
use Asmit\FilamentUpload\Forms\Components\AdvancedFileUpload;
|
use Asmit\FilamentUpload\Forms\Components\AdvancedFileUpload;
|
||||||
use Filament\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms\Components\DatePicker;
|
use Filament\Forms\Components\DatePicker;
|
||||||
|
use Filament\Forms\Components\RichEditor;
|
||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Forms\Components\SpatieMediaLibraryFileUpload;
|
use Filament\Forms\Components\SpatieMediaLibraryFileUpload;
|
||||||
use Filament\Forms\Components\Textarea;
|
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Schemas\Components\Grid;
|
use Filament\Schemas\Components\Grid;
|
||||||
use Filament\Schemas\Components\Section;
|
use Filament\Schemas\Components\Section;
|
||||||
@ -40,16 +40,16 @@ public static function configure(Schema $schema): Schema
|
|||||||
Grid::make(2)
|
Grid::make(2)
|
||||||
->schema([
|
->schema([
|
||||||
DatePicker::make('initial_submission_date')
|
DatePicker::make('initial_submission_date')
|
||||||
->label('Tgl Pengajuan Awal')
|
->label('Tanggal Pengajuan Awal')
|
||||||
->placeholder(fn (): string => now()->translatedFormat('l, d F Y'))
|
->placeholder(fn (): string => now()->translatedFormat('l, d F Y'))
|
||||||
->native(false)
|
->native(false)
|
||||||
->displayFormat('l, d F Y')
|
->displayFormat('l, d F Y')
|
||||||
->required()
|
->required()
|
||||||
->minDate(today())
|
->minDate(fn ($context) => $context === 'create' ? today() : null)
|
||||||
->reactive(),
|
->reactive(),
|
||||||
|
|
||||||
DatePicker::make('final_submission_date')
|
DatePicker::make('final_submission_date')
|
||||||
->label('Tgl Pengajuan Akhir')
|
->label('Tanggal Pengajuan Akhir')
|
||||||
->placeholder(fn (): string => now()->addDays(7)->translatedFormat('l, d F Y'))
|
->placeholder(fn (): string => now()->addDays(7)->translatedFormat('l, d F Y'))
|
||||||
->native(false)
|
->native(false)
|
||||||
->displayFormat('l, d F Y')
|
->displayFormat('l, d F Y')
|
||||||
@ -73,18 +73,15 @@ public static function configure(Schema $schema): Schema
|
|||||||
->label('Pilih Semua')
|
->label('Pilih Semua')
|
||||||
->icon('heroicon-o-check-circle')
|
->icon('heroicon-o-check-circle')
|
||||||
->action(function (Set $set): void {
|
->action(function (Set $set): void {
|
||||||
$allMediaIds = PartnerMedia::verified()->pluck('id')->toArray();
|
$allMediaIds = PartnerMedia::query()->verified()->pluck('id')->toArray();
|
||||||
$set('partner_media_ids', $allMediaIds);
|
$set('partner_media_ids', $allMediaIds);
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
|
|
||||||
Textarea::make('description')
|
RichEditor::make('description')
|
||||||
->label('Deskripsi Kerja Sama')
|
->label('Deskripsi Kerja Sama')
|
||||||
->placeholder('Jelaskan detail lingkup kerja sama di sini...')
|
->placeholder('Jelaskan detail lingkup kerja sama di sini...')
|
||||||
->required()
|
->required(),
|
||||||
->rows(5)
|
|
||||||
->maxLength(65535)
|
|
||||||
->autocomplete(false),
|
|
||||||
])
|
])
|
||||||
->columnSpan(2),
|
->columnSpan(2),
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,6 @@
|
|||||||
use App\Filament\Actions\DefaultBulkActions;
|
use App\Filament\Actions\DefaultBulkActions;
|
||||||
use App\Filament\Columns\RowIndexColumn;
|
use App\Filament\Columns\RowIndexColumn;
|
||||||
use App\Filament\Columns\TimestampColumns;
|
use App\Filament\Columns\TimestampColumns;
|
||||||
use App\Filament\Exports\CooperationExcelExport;
|
|
||||||
use App\Filament\Resources\Manage\Cooperations\Actions\Cooperation\AcceptAction;
|
use App\Filament\Resources\Manage\Cooperations\Actions\Cooperation\AcceptAction;
|
||||||
use App\Filament\Resources\Manage\Cooperations\Actions\Cooperation\CompleteCooperationAction;
|
use App\Filament\Resources\Manage\Cooperations\Actions\Cooperation\CompleteCooperationAction;
|
||||||
use App\Filament\Resources\Manage\Cooperations\Actions\Cooperation\CreateTaskAssignmentAction;
|
use App\Filament\Resources\Manage\Cooperations\Actions\Cooperation\CreateTaskAssignmentAction;
|
||||||
@ -33,7 +32,6 @@
|
|||||||
use Filament\Tables\Filters\TrashedFilter;
|
use Filament\Tables\Filters\TrashedFilter;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use pxlrbt\FilamentExcel\Actions\Tables\ExportAction;
|
|
||||||
|
|
||||||
class CooperationsTable
|
class CooperationsTable
|
||||||
{
|
{
|
||||||
@ -58,13 +56,13 @@ public static function configure(Table $table): Table
|
|||||||
->visible(! auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)),
|
->visible(! auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)),
|
||||||
|
|
||||||
TextColumn::make('initial_submission_date')
|
TextColumn::make('initial_submission_date')
|
||||||
->label('Tgl Pengajuan Awal')
|
->label('Tanggal Pengajuan Awal')
|
||||||
->searchable()
|
->searchable()
|
||||||
->sortable()
|
->sortable()
|
||||||
->date('l, d F Y'),
|
->date('l, d F Y'),
|
||||||
|
|
||||||
TextColumn::make('final_submission_date')
|
TextColumn::make('final_submission_date')
|
||||||
->label('Tgl Pengajuan Akhir')
|
->label('Tanggal Pengajuan Akhir')
|
||||||
->searchable()
|
->searchable()
|
||||||
->sortable()
|
->sortable()
|
||||||
->date('l, d F Y')
|
->date('l, d F Y')
|
||||||
@ -101,15 +99,13 @@ public static function configure(Table $table): Table
|
|||||||
})
|
})
|
||||||
->visible(! auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)),
|
->visible(! auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)),
|
||||||
|
|
||||||
TextColumn::make('status_tanggapan')
|
TextColumn::make('response_status')
|
||||||
->label('Tanggapan')
|
->label('Tanggapan')
|
||||||
->getStateUsing(function (Cooperation $record): ?ApprovalStatus {
|
->getStateUsing(function (Cooperation $record): ?ApprovalStatus {
|
||||||
if (auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)) {
|
if (auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)) {
|
||||||
$cooperationMedia = $record->cooperationMedia()
|
$cooperationMedia = $record->cooperationMedia()
|
||||||
->whereHas('partnerMedia', function (Builder $query): void {
|
->whereHas('partnerMedia.company', function (Builder $query): void {
|
||||||
$query->whereHas('company', function (Builder $subQuery): void {
|
$query->where('user_id', auth()->id());
|
||||||
$subQuery->where('user_id', auth()->id());
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
@ -272,15 +268,6 @@ public static function configure(Table $table): Table
|
|||||||
|
|
||||||
DeleteAction::make(),
|
DeleteAction::make(),
|
||||||
])
|
])
|
||||||
->headerActions([
|
|
||||||
ExportAction::make()
|
|
||||||
->exports([
|
|
||||||
CooperationExcelExport::make(),
|
|
||||||
])
|
|
||||||
->color('success')
|
|
||||||
->visible(fn (): bool => auth()->user()->hasRole(RoleEnum::DEVELOPER->value) || auth()->user()->hasRole(RoleEnum::ADMINISTRATOR->value)),
|
|
||||||
|
|
||||||
])
|
|
||||||
->toolbarActions([
|
->toolbarActions([
|
||||||
BulkActionGroup::make([
|
BulkActionGroup::make([
|
||||||
...DefaultBulkActions::make('Kerja Sama'),
|
...DefaultBulkActions::make('Kerja Sama'),
|
||||||
|
|||||||
@ -3,6 +3,8 @@
|
|||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
use App\Enums\ApprovalStatus;
|
use App\Enums\ApprovalStatus;
|
||||||
|
use Illuminate\Database\Eloquent\Attributes\Scope;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
@ -27,6 +29,24 @@ protected function casts(): array
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[Scope]
|
||||||
|
protected function pending(Builder $query): void
|
||||||
|
{
|
||||||
|
$query->where('status', ApprovalStatus::PENDING);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Scope]
|
||||||
|
protected function accepted(Builder $query): void
|
||||||
|
{
|
||||||
|
$query->where('status', ApprovalStatus::ACCEPTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Scope]
|
||||||
|
protected function rejected(Builder $query): void
|
||||||
|
{
|
||||||
|
$query->where('status', ApprovalStatus::REJECTED);
|
||||||
|
}
|
||||||
|
|
||||||
public function partnerMedia(): BelongsTo
|
public function partnerMedia(): BelongsTo
|
||||||
{
|
{
|
||||||
return $this->belongsTo(PartnerMedia::class);
|
return $this->belongsTo(PartnerMedia::class);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user