228 lines
10 KiB
PHP
228 lines
10 KiB
PHP
<?php
|
|
|
|
namespace App\Filament\Resources\Projektes\Pages;
|
|
|
|
use App\Actions\Validation\GutachtenValidation;
|
|
use App\Filament\Imports\ProjektAllgemeinflaechenImporter;
|
|
use App\Filament\Imports\ProjektRaeumealleImporter;
|
|
use App\Filament\Resources\Projektes\ProjekteResource;
|
|
use App\Models\Konto;
|
|
use App\Models\ProjektAllgemeinflaechen;
|
|
use App\Models\Projekte;
|
|
use App\Models\ProjektOrientierungZuAbschlaege;
|
|
use App\Models\ProjektRaeumealle;
|
|
use Filament\Actions\Action;
|
|
use Filament\Actions\ActionGroup;
|
|
use Filament\Actions\DeleteAction;
|
|
use Filament\Actions\ImportAction;
|
|
use Filament\Notifications\Notification;
|
|
use Filament\Resources\Pages\EditRecord;
|
|
use Illuminate\Validation\Rules\File;
|
|
use Livewire\Attributes\On;
|
|
|
|
class EditProjekte extends EditRecord
|
|
{
|
|
protected static string $resource = ProjekteResource::class;
|
|
|
|
#[On('refreshProjektAllgemeinflaechen'), On('refreshProjektRaeumealle'), On('refreshMethods'), On('refreshOrientierung')]
|
|
public function refresh(): void {}
|
|
|
|
protected function getHeaderActions(): array
|
|
{
|
|
return [
|
|
/**
|
|
* IMPORT
|
|
*/
|
|
ActionGroup::make([
|
|
ImportAction::make('allgemeinflaechen')
|
|
->hidden(fn ($record): bool => $record->bezahlt_am ? false : true)
|
|
->importer(ProjektAllgemeinflaechenImporter::class)
|
|
->modalHeading('Allgemeinflächen Import')
|
|
->modalContent(view('filament.pages.actions.import-allgemeinflaechen'))
|
|
->modalContentFooter(view('filament.pages.actions.footer-allgemeinflaechen'))
|
|
->label('Allgemeinflächen')
|
|
->icon('phosphor-upload')
|
|
->extraModalFooterActions([
|
|
Action::make('delete')
|
|
->label('Tabelle leeren')
|
|
->color('danger')
|
|
->requiresConfirmation()
|
|
->action(function ($record) {
|
|
ProjektAllgemeinflaechen::where('projekte_id', $record->id)->delete();
|
|
|
|
$this->record->refresh();
|
|
|
|
Notification::make()
|
|
->title('Tabelle geleert')
|
|
->success()
|
|
->send();
|
|
}),
|
|
])
|
|
->options(function ($record) {
|
|
return ['projekte_id' => $record->id];
|
|
})
|
|
->fileRules([
|
|
File::types(['csv', 'txt'])->max(1024),
|
|
]),
|
|
ImportAction::make()
|
|
->hidden(fn ($record): bool => $record->bezahlt_am ? false : true)
|
|
->importer(ProjektRaeumealleImporter::class)
|
|
->modalHeading('Objekte im Detail Import')
|
|
->modalContent(view('filament.pages.actions.import-objektemitraeumen'))
|
|
->modalContentFooter(view('filament.pages.actions.footer-objektemitraeumen'))
|
|
->label('Objekte')
|
|
->icon('phosphor-upload')
|
|
->extraModalFooterActions([
|
|
Action::make('delete')
|
|
->label('Tabellen leeren')
|
|
->color('danger')
|
|
->requiresConfirmation()
|
|
->action(function ($record) {
|
|
ProjektRaeumealle::where('projekte_id', $record->id)->delete();
|
|
ProjektOrientierungZuAbschlaege::where('projekte_id', $record->id)->delete();
|
|
|
|
$this->record->refresh();
|
|
|
|
Notification::make()
|
|
->title('Tabellen geleert')
|
|
->success()
|
|
->send();
|
|
}),
|
|
])
|
|
->options(function ($record) {
|
|
return ['projekte_id' => $record->id];
|
|
})
|
|
->fileRules([
|
|
File::types(['csv', 'txt'])->max(1024),
|
|
]),
|
|
])->label('Importieren')
|
|
->icon('phosphor-upload')
|
|
->color('info')
|
|
->button(),
|
|
/**
|
|
* FREISCHALTEN
|
|
* auth()->user()->konto->guthaben
|
|
*/
|
|
Action::make('freischalten')
|
|
->hidden(fn ($record): bool => $record->bezahlt_am ? true : false)
|
|
->visible(fn (): bool => auth()->user()->konto->guthaben)
|
|
->requiresConfirmation()
|
|
->modalHeading('Gutachten freischalten?')
|
|
->tooltip('Von Ihrem Guthaben wird ein Punkt abgezogen.')
|
|
->modalIcon('phosphor-coins')
|
|
->modalDescription('Von Ihrem Guthaben wird ein Punkt abgezogen.')
|
|
->modalSubmitActionLabel('Bezahlen')
|
|
->action(function ($record) {
|
|
if (Konto::where('id', $record['konto_id'])->where('guthaben', '>', 0)->get()) {
|
|
Konto::where('id', $record['konto_id'])->decrement('guthaben', 1);
|
|
Projekte::where('id', $record['id'])->update(['bezahlt_am' => \Carbon\Carbon::now()]);
|
|
|
|
$this->record->refresh();
|
|
|
|
Notification::make()
|
|
->title('Gutachten freischaltet')
|
|
->success()
|
|
->send();
|
|
}
|
|
}),
|
|
Action::make('bezahlen')
|
|
->color('danger')
|
|
->hidden(fn ($record): bool => $record->bezahlt_am ? true : false)
|
|
->visible(fn (): bool => ! auth()->user()->konto->guthaben)
|
|
->label('Konto laden')
|
|
->tooltip('Konto laden um Gutachten freizuschalten.')
|
|
->requiresConfirmation()
|
|
->modalHeading('Kein Guthaben')
|
|
->modalIcon('heroicon-o-exclamation-triangle')
|
|
->modalDescription('Bitte laden sie Ihr Konto auf')
|
|
->modalSubmitActionLabel('Konto aufladen'),
|
|
/**
|
|
* EVALUATE
|
|
*/
|
|
Action::make('evaluate_gutachten')
|
|
->hidden(fn ($record): bool => $record->bezahlt_am && ! $record->evaluation_gutachten ? false : true)
|
|
->color('success')
|
|
->label('Evaluieren')
|
|
->icon('phosphor-eye')
|
|
->action(function ($record): void {
|
|
GutachtenValidation::controll($record);
|
|
$this->record->refresh();
|
|
}),
|
|
|
|
/**
|
|
* BERECHNEN
|
|
*/
|
|
ActionGroup::make([
|
|
Action::make('make_gutachten')
|
|
->hidden(fn ($record): bool => (! $record->bezahlt_am || $record->pdf_gutachten_status || ! $record->evaluation_gutachten) ? true : false)
|
|
->label('Gutachten berechnen')
|
|
->icon('phosphor-calculator')
|
|
->url(fn ($record) => route('standard.download', ['record' => $record, 'mode' => 'new']))
|
|
->openUrlInNewTab(),
|
|
/**
|
|
* NUTZWERTE
|
|
*/
|
|
Action::make('make_nutzwerte')
|
|
->hidden(fn ($record): bool => (! $record->bezahlt_am || $record->pdf_nutzwerte_status || ! $record->evaluation_gutachten) ? true : false)
|
|
->label('Nutzwerte berechnen')
|
|
->icon('phosphor-calculator')
|
|
->url(fn ($record) => route('nutzwerte.download', ['record' => $record, 'mode' => 'new']))
|
|
->openUrlInNewTab(),
|
|
])->label('Berechnen')
|
|
->icon('phosphor-calculator')
|
|
->color('info')
|
|
->button(),
|
|
|
|
/**
|
|
* DOWNLOAD
|
|
*/
|
|
ActionGroup::make([
|
|
/**
|
|
* GUTACHTEN
|
|
*/
|
|
Action::make('download-gutachten')
|
|
->hidden(fn ($record): bool => (! $record->bezahlt_am || ! $record->pdf_gutachten_status) ? true : false)
|
|
->color('success')
|
|
->label('Download Gutachten')
|
|
->icon('icon-pdf')
|
|
->url(fn ($record) => route('standard.download', ['record' => $record, 'mode' => 'file']))
|
|
->openUrlInNewTab(),
|
|
/**
|
|
* NUTZWERTE
|
|
*/
|
|
Action::make('download-nutzwerte')
|
|
->hidden(fn ($record): bool => (! $record->bezahlt_am || ! $record->pdf_nutzwerte_status) ? true : false)
|
|
->color('success')
|
|
->label('Download Nutzwerte')
|
|
->icon('icon-pdf')
|
|
->url(fn ($record) => route('nutzwerte.download', ['record' => $record, 'mode' => 'file']))
|
|
->openUrlInNewTab(),
|
|
/**
|
|
* EXCEL
|
|
*/
|
|
Action::make('excel-nutzflaeche-nutzwerte')
|
|
->label('Nutzfläche & Nutzwerte')
|
|
->icon('icon-excel')
|
|
->url(fn ($record) => route('excel.download', ['record' => $record, 'mode' => 'file']))
|
|
->hidden(fn ($record): bool => (! $record->bezahlt_am || ! $record->evaluation_gutachten) ? true : false)
|
|
->openUrlInNewTab(),
|
|
Action::make('excel-nutzflaechen-aufstellung')
|
|
->label('Nutzflächen Aufstellung')
|
|
->icon('icon-excel')
|
|
->url(fn ($record) => route('excel.download', ['record' => $record, 'mode' => 'file']))
|
|
->hidden(fn ($record): bool => (! $record->bezahlt_am || ! $record->evaluation_gutachten) ? true : false)
|
|
->openUrlInNewTab(),
|
|
])->label('Export')
|
|
->icon('phosphor-download')
|
|
->color('info')
|
|
->button(),
|
|
DeleteAction::make()->icon('heroicon-o-trash'),
|
|
];
|
|
}
|
|
|
|
protected function getSavedNotificationTitle(): ?string
|
|
{
|
|
return 'Projekt Änderungen gespeichert';
|
|
}
|
|
}
|