diff --git a/app/Filament/Resources/Orders/Pages/EditOrder.php b/app/Filament/Resources/Orders/Pages/EditOrder.php index b5562eb..68f248a 100644 --- a/app/Filament/Resources/Orders/Pages/EditOrder.php +++ b/app/Filament/Resources/Orders/Pages/EditOrder.php @@ -3,8 +3,12 @@ namespace App\Filament\Resources\Orders\Pages; use App\Filament\Resources\Orders\OrderResource; +use App\Models\Orderstatus; +use Filament\Actions\Action; use Filament\Actions\DeleteAction; use Filament\Resources\Pages\EditRecord; +use Filament\Support\Icons\Heroicon; +use Illuminate\Database\Eloquent\Model; class EditOrder extends EditRecord { @@ -13,6 +17,25 @@ class EditOrder extends EditRecord protected function getHeaderActions(): array { return [ + Action::make('bestellt_single') + ->icon(Heroicon::ShoppingCart)->label("Bestellt")->action(function(Model $record) { + $orderstatusBestellt = Orderstatus::where("name", "bestellt")->first(); + $record->orderstatus_id = $orderstatusBestellt->id; + $record->save(); + })->visible(function(Model $record) {$orderstatusErfasst = Orderstatus::where("name", "erfasst")->first();return ($orderstatusErfasst->id == $record->orderstatus_id);}), + Action::make('angekommen_single') + ->icon(Heroicon::BuildingOffice)->label("Angekommen")->action(function(Model $record) { + $orderstatusAngekommen = Orderstatus::where("name", "angekommen")->first(); + $record->orderstatus_id = $orderstatusAngekommen->id; + $record->save(); + })->visible(function(Model $record) {$orderstatusBestellt = Orderstatus::where("name", "bestellt")->first();return ($orderstatusBestellt->id == $record->orderstatus_id);}), + Action::make('genommen_single') + ->icon(Heroicon::Check)->label("Genommen")->action(function(Model $record) { + $orderstatusGenommen = Orderstatus::where("name", "genommen")->first(); + $record->orderstatus_id = $orderstatusGenommen->id; + $record->save(); + })->visible(function(Model $record) {$orderstatusAngekommen = Orderstatus::where("name", "angekommen")->first();return ($orderstatusAngekommen->id == $record->orderstatus_id);}), + Action::make("url_oeffnen")->icon(Heroicon::Link)->label("URL öffnen")->url(function (Model $record) { return $record->url;}, true), DeleteAction::make(), ]; } diff --git a/app/Filament/Resources/Orders/Tables/OrdersTable.php b/app/Filament/Resources/Orders/Tables/OrdersTable.php index 8bb6625..f26fd11 100644 --- a/app/Filament/Resources/Orders/Tables/OrdersTable.php +++ b/app/Filament/Resources/Orders/Tables/OrdersTable.php @@ -9,7 +9,6 @@ use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction; use Illuminate\Database\Eloquent\Collection; use Filament\Support\Icons\Heroicon; -use Filament\Tables\Columns\SelectColumn; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Model; @@ -47,18 +46,37 @@ class OrdersTable // ]) ->recordActions([ + Action::make('bestellt_single') + ->icon(Heroicon::ShoppingCart)->iconButton()->label("Bestellt")->action(function(Model $record) { + $orderstatusBestellt = Orderstatus::where("name", "bestellt")->first(); + $record->orderstatus_id = $orderstatusBestellt->id; + $record->save(); + })->visible(function(Model $record) {$orderstatusErfasst = Orderstatus::where("name", "erfasst")->first();return ($orderstatusErfasst->id == $record->orderstatus_id);}), + Action::make('angekommen_single') + ->icon(Heroicon::BuildingOffice)->iconButton()->label("Angekommen")->action(function(Model $record) { + $orderstatusAngekommen = Orderstatus::where("name", "angekommen")->first(); + $record->orderstatus_id = $orderstatusAngekommen->id; + $record->save(); + })->visible(function(Model $record) {$orderstatusBestellt = Orderstatus::where("name", "bestellt")->first();return ($orderstatusBestellt->id == $record->orderstatus_id);}), + Action::make('genommen_single') + ->icon(Heroicon::Check)->iconButton()->label("Genommen")->action(function(Model $record) { + $orderstatusGenommen = Orderstatus::where("name", "genommen")->first(); + $record->orderstatus_id = $orderstatusGenommen->id; + $record->save(); + })->visible(function(Model $record) {$orderstatusAngekommen = Orderstatus::where("name", "angekommen")->first();return ($orderstatusAngekommen->id == $record->orderstatus_id);}), Action::make("url_oeffnen")->icon(Heroicon::Link)->iconButton()->label("URL öffnen")->url(function (Model $record) { return $record->url;}, true), EditAction::make()->iconButton()->label("Bearbeiten"), ]) ->toolbarActions([ BulkActionGroup::make([ DeleteBulkAction::make(), - Action::make('bestellt') + Action::make('bestellt_bulk') ->accessSelectedRecords() ->action(function (Collection $selectedRecords) { + $orderstatusBestellt = Orderstatus::where("name", "bestellt")->first(); $selectedRecords->each( fn (Model $selectedRecord) => $selectedRecord->update([ - 'orderstatus' => Orderstatus::ORDERED, + 'orderstatus_id' => $orderstatusBestellt->id ]), ); })->requiresConfirmation()->icon(Heroicon::ShoppingCart), diff --git a/app/Observers/OrderObserver.php b/app/Observers/OrderObserver.php index 2f8ac76..c2822b5 100644 --- a/app/Observers/OrderObserver.php +++ b/app/Observers/OrderObserver.php @@ -8,6 +8,7 @@ use App\Models\Order; use App\Models\User; use Illuminate\Support\Facades\Mail; use App\Models\Orderstatus; +use Carbon\Carbon; class OrderObserver { @@ -25,10 +26,18 @@ class OrderObserver */ public function updated(Order $order): void { - $orderstatusArrived = Orderstatus::where("name", "angekommen")->first(); - if($order->orderstatus_id == $orderstatusArrived->id) { - $user = User::find($order->user_id); - Mail::to($user)->send(new OrderArrived($order)); + $hasChanged = array_diff($order->getOriginal(), $order->getAttributes()); + if($hasChanged && isset($hasChanged['orderstatus_id'])) { + $orderstatusOrdered = Orderstatus::where("name", "bestellt")->first(); + if($order->orderstatus_id == $orderstatusOrdered->id) { + $order->orderdatetime = Carbon::now()->toDateTimeString(); + $order->saveQuietly(); + } + $orderstatusArrived = Orderstatus::where("name", "angekommen")->first(); + if($order->orderstatus_id == $orderstatusArrived->id) { + $user = User::find($order->user_id); + Mail::to($user)->send(new OrderArrived($order)); + } } }