Skip to content
This repository was archived by the owner on Mar 16, 2024. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions project/app/Console/Commands/ListUsersWithDevices.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\Costumer;

class ListUsersWithDevices extends Command
{
protected $signature = 'users:list';

protected $description = 'List users with their devices';

public function handle()
{
$costumers = Costumer::all();

foreach ($costumers as $costumer) {
$this->info("Nombre: {$costumer->name}");

if ($costumer->devices->isNotEmpty()) {
$this->info(" Dispositivos");
foreach ($costumer->devices as $index => $device) {
$this->info(" " . ($index + 1) . ". {$device->brand} {$device->model}");
}
} else {
$this->info(" No tiene dispositivos.");
}
}
}
}
82 changes: 82 additions & 0 deletions project/app/Filament/Resources/CostumerResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
<?php

namespace App\Filament\Resources;

use App\Filament\Resources\CostumerResource\Pages;
use App\Filament\Resources\CostumerResource\RelationManagers;
use App\Models\Costumer;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;

class CostumerResource extends Resource
{
protected static ?string $model = Costumer::class;

protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';

public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('name')
->required(),
Forms\Components\TextInput::make('address')
->required(),
Forms\Components\Select::make('level')
->required()
->options([
'1'=>'1',
'2'=>'2',
'3'=>'3',
'4'=>'4',
'5'=>'5',
]),
]);
}

public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('name')
->sortable()
-> searchable(),
Tables\Columns\TextColumn::make('level')
->sortable(),
Tables\Columns\TextColumn::make('address'),

])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}

public static function getRelations(): array
{
return [
RelationManagers\DevicesRelationManager::class,
];
}

public static function getPages(): array
{
return [
'index' => Pages\ListCostumers::route('/'),
'create' => Pages\CreateCostumer::route('/create'),
'edit' => Pages\EditCostumer::route('/{record}/edit'),
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

namespace App\Filament\Resources\CostumerResource\Pages;

use App\Filament\Resources\CostumerResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;

class CreateCostumer extends CreateRecord
{
protected static string $resource = CostumerResource::class;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace App\Filament\Resources\CostumerResource\Pages;

use App\Filament\Resources\CostumerResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;

class EditCostumer extends EditRecord
{
protected static string $resource = CostumerResource::class;

protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace App\Filament\Resources\CostumerResource\Pages;

use App\Filament\Resources\CostumerResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;

class ListCostumers extends ListRecords
{
protected static string $resource = CostumerResource::class;

protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<?php

namespace App\Filament\Resources\CostumerResource\RelationManagers;

use Filament\Tables\Actions\CreateAction;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use App\Models\Device;
use Filament\Notifications\Notification;

class DevicesRelationManager extends RelationManager
{
protected static string $relationship = 'devices';

public function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('brand')
->required()
->maxLength(255),
Forms\Components\TextInput::make('model')
->required()
->maxLength(255),
]);
}

public function table(Table $table): Table
{
return $table
->recordTitleAttribute('model')
->columns([
Tables\Columns\TextColumn::make('brand'),
Tables\Columns\TextColumn::make('model'),
])
->filters([
//
])
->headerActions([
Tables\Actions\CreateAction::make()
->before(function (CreateAction $action) {
$record = $this->getOwnerRecord();
$customerId = optional($record)->getKey();
if (!$customerId) {
return;
}

$deviceCount = Device::where('costumer_id', $customerId)->count();

if ($deviceCount >= 2) {
Notification::make()
->warning()
->title('No se pueden agregar más de dos dispositivos por cliente.')
->body('Seleccione un cliente diferente o elimine dispositivos existentes.')
->persistent()
->send();

$action->cancel();
}
}),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
}
69 changes: 69 additions & 0 deletions project/app/Filament/Resources/DeviceResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?php

namespace App\Filament\Resources;

use App\Filament\Resources\DeviceResource\Pages;
use App\Filament\Resources\DeviceResource\RelationManagers;
use App\Models\Device;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;

class DeviceResource extends Resource
{
protected static ?string $model = Device::class;

protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';

public static function form(Form $form): Form
{
return $form
->schema([
//
]);
}

public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('costumer_id')
->sortable()
-> searchable(),
Tables\Columns\TextColumn::make('brand')
->sortable(),
Tables\Columns\TextColumn::make('model'),
])
->filters([
//
])
->actions([
//Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}

public static function getRelations(): array
{
return [
//
];
}

public static function getPages(): array
{
return [
'index' => Pages\ListDevices::route('/'),
'create' => Pages\CreateDevice::route('/create'),
'edit' => Pages\EditDevice::route('/{record}/edit'),
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

namespace App\Filament\Resources\DeviceResource\Pages;

use App\Filament\Resources\DeviceResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;

class CreateDevice extends CreateRecord
{
protected static string $resource = DeviceResource::class;
}
19 changes: 19 additions & 0 deletions project/app/Filament/Resources/DeviceResource/Pages/EditDevice.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace App\Filament\Resources\DeviceResource\Pages;

use App\Filament\Resources\DeviceResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;

class EditDevice extends EditRecord
{
protected static string $resource = DeviceResource::class;

protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace App\Filament\Resources\DeviceResource\Pages;

use App\Filament\Resources\DeviceResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;

class ListDevices extends ListRecords
{
protected static string $resource = DeviceResource::class;

protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}
26 changes: 26 additions & 0 deletions project/app/Models/Costumer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace App\Models;

use Illuminate\Validation\Rule;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Costumer extends Model
{
use HasFactory;

protected $fillable = ['name', 'level', 'address'];

public function rules(){
return [
'level' => ['required','integer', Rule::in([0, 1, 2, 3, 4, 5])],
];
}

public function devices(){

return $this -> hasMany(Device::class);

}
}
Loading