diff --git a/app/Livewire/Printer/CreatePrinter.php b/app/Livewire/Printer/CreatePrinter.php new file mode 100644 index 0000000..7a3f79f --- /dev/null +++ b/app/Livewire/Printer/CreatePrinter.php @@ -0,0 +1,46 @@ +validate([ + 'name' => ['required', 'string', 'max:255'], + 'description' => ['nullable', 'string', 'max:255'], + 'printertype_id' => ['required', 'integer'], + ]); + + $printer = new Model(); + $printer->name = $this->name; + $printer->description = $this->description; + $printer->printertype_id = $this->printertype_id; + $printer->save(); + + return $this->redirectRoute('printers.show', $printer->id, navigate: true); + } + + public function cancel(){ + return $this->redirectRoute('printers.index', navigate: true); + } + + public function render() + { + return view('livewire.printer.create', [ + ]); + } +} diff --git a/app/Livewire/Printer/EditPrinter.php b/app/Livewire/Printer/EditPrinter.php new file mode 100644 index 0000000..0b720fd --- /dev/null +++ b/app/Livewire/Printer/EditPrinter.php @@ -0,0 +1,52 @@ +validate([ + 'name' => ['required', 'string', 'max:255'], + 'description' => ['nullable', 'string', 'max:255'], + 'printertype_id' => ['required', 'integer'], + ]); + + $this->printertype->update([ + 'name' => $this->name, + 'description' => $this->description, + 'printertype_id' => $this->printertype_id, + ]); + + return $this->redirectRoute('printers.show', $this->printer->id, navigate: true); + } + + public function cancel(){ + return $this->redirectRoute('printers.index', navigate: true); + } + + public function mount(Model $printer){ + $this->printer = $printer; + $this->name = $printer->name; + $this->description = $printer->description; + $this->printertype_id = $printer->printertype_id; + } + + public function render() + { + return view('livewire.printer.create', [ + ]); + } +} diff --git a/app/Livewire/Printer/Printer.php b/app/Livewire/Printer/Printer.php new file mode 100644 index 0000000..2f38059 --- /dev/null +++ b/app/Livewire/Printer/Printer.php @@ -0,0 +1,44 @@ +redirectRoute('printers.create', navigate: true); + } + + public function show($id){ + return $this->redirectRoute('printers.show', $id); + } + + public function edit($id){ + return $this->redirectRoute('printers.edit', $id); + } + + public function delete($id){ + @Auth::check(); + Model::destroy($id); + } + + public function render() + { + return view('livewire.printer.index', [ + 'printers' => Model::search('name', $this->search)->paginate(25) + ]); + } +} diff --git a/app/Livewire/Printer/ShowPrinter.php b/app/Livewire/Printer/ShowPrinter.php new file mode 100644 index 0000000..dcd6efa --- /dev/null +++ b/app/Livewire/Printer/ShowPrinter.php @@ -0,0 +1,29 @@ +route('printers.index'); + } + + public function edit($id){ + return redirect()->route('printers.edit', $id); + } + + public function render() + { + return view('livewire.printer.show', [ + + ]); + } +} diff --git a/app/Livewire/Printertype/CreatePrintertype.php b/app/Livewire/Printertype/CreatePrintertype.php new file mode 100644 index 0000000..092c3bc --- /dev/null +++ b/app/Livewire/Printertype/CreatePrintertype.php @@ -0,0 +1,58 @@ +validate([ + 'name' => ['required', 'string', 'max:255'], + 'description' => ['nullable', 'string', 'max:255'], + 'manufacturer_id' => ['required', 'integer'], + 'temp_max' => ['required', 'integer'], + 'bed_size_x' => ['nullable', 'numeric'], + 'bed_size_y' => ['nullable', 'numeric'], + 'price' => ['nullable', 'numeric'] + ]); + + $printertype = new Model(); + $printertype->name = $this->name; + $printertype->description = $this->description; + $printertype->manufacturer_id = $this->manufacturer_id; + $printertype->temp_max = $this->temp_max; + $printertype->bed_size_x = $this->bed_size_x; + $printertype->bed_size_y = $this->bed_size_y; + $printertype->price = $this->price; + $printertype->save(); + + return $this->redirectRoute('printertypes.show', $printertype->id, navigate: true); + } + + public function cancel(){ + return $this->redirectRoute('printertypes.index', navigate: true); + } + + public function render() + { + return view('livewire.printertype.create', [ + ]); + } +} diff --git a/app/Livewire/Printertype/EditPrintertype.php b/app/Livewire/Printertype/EditPrintertype.php new file mode 100644 index 0000000..9aec602 --- /dev/null +++ b/app/Livewire/Printertype/EditPrintertype.php @@ -0,0 +1,68 @@ +validate([ + 'name' => ['required', 'string', 'max:255'], + 'description' => ['nullable', 'string', 'max:255'], + 'manufacturer_id' => ['required', 'integer'], + 'temp_max' => ['required', 'integer'], + 'bed_size_x' => ['nullable', 'numeric'], + 'bed_size_y' => ['nullable', 'numeric'], + 'price' => ['nullable', 'numeric'] + ]); + + $this->printertype->update([ + 'name' => $this->name, + 'description' => $this->description, + 'manufacturer_id' => $this->manufacturer_id, + 'temp_max' => $this->temp_max, + 'bed_size_x' => $this->bed_size_x, + 'bed_size_y' => $this->bed_size_y, + 'price' => $this->price + ]); + + return $this->redirectRoute('printertypes.show', $this->printertype->id, navigate: true); + } + + public function cancel(){ + return $this->redirectRoute('printertypes.index', navigate: true); + } + + public function mount(Model $printertype){ + $this->printertype = $printertype; + $this->name = $printertype->name; + $this->description = $printertype->description; + $this->manufacturer_id = $printertype->manufacturer_id; + $this->temp_max = $printertype->temp_max; + $this->bed_size_x = $printertype->bed_size_x; + $this->bed_size_y = $printertype->bed_size_y; + $this->price = $printertype->price; + } + + public function render() + { + return view('livewire.printertype.create', [ + ]); + } +} diff --git a/app/Livewire/Printertype/Printertype.php b/app/Livewire/Printertype/Printertype.php new file mode 100644 index 0000000..924f96e --- /dev/null +++ b/app/Livewire/Printertype/Printertype.php @@ -0,0 +1,44 @@ +redirectRoute('printertypes.create', navigate: true); + } + + public function show($id){ + return $this->redirectRoute('printertypes.show', $id); + } + + public function edit($id){ + return $this->redirectRoute('printertypes.edit', $id); + } + + public function delete($id){ + @Auth::check(); + Model::destroy($id); + } + + public function render() + { + return view('livewire.printertype.index', [ + 'printertypes' => Model::search('name', $this->search)->paginate(25) + ]); + } +} diff --git a/app/Livewire/Printertype/ShowPrintertype.php b/app/Livewire/Printertype/ShowPrintertype.php new file mode 100644 index 0000000..b988689 --- /dev/null +++ b/app/Livewire/Printertype/ShowPrintertype.php @@ -0,0 +1,29 @@ +route('printertypes.index'); + } + + public function edit($id){ + return redirect()->route('printertypes.edit', $id); + } + + public function render() + { + return view('livewire.printertype.show', [ + + ]); + } +} diff --git a/app/Livewire/Sparepart/EditSparepart.php b/app/Livewire/Sparepart/EditSparepart.php index 39a28ca..77d8a54 100644 --- a/app/Livewire/Sparepart/EditSparepart.php +++ b/app/Livewire/Sparepart/EditSparepart.php @@ -38,7 +38,7 @@ class EditSparepart extends Component } public function mount(Model $sparepart){ - $this->filament = $sparepart; + $this->sparepart = $sparepart; $this->name = $sparepart->name; $this->description = $sparepart->description; $this->manufacturer_id = $sparepart->manufacturer_id; diff --git a/app/Livewire/Sparepart/ShowSparepart.php b/app/Livewire/Sparepart/ShowSparepart.php index 39df0fd..265961e 100644 --- a/app/Livewire/Sparepart/ShowSparepart.php +++ b/app/Livewire/Sparepart/ShowSparepart.php @@ -6,7 +6,7 @@ use Livewire\Component; use App\Models\Sparepart as Model; use Livewire\Attributes\title; -#[title('Show Filament')] +#[title('Show Sparepart')] class ShowSparepart extends Component { diff --git a/app/Livewire/Sparepart/Sparepart.php b/app/Livewire/Sparepart/Sparepart.php index 519646a..1b961b7 100644 --- a/app/Livewire/Sparepart/Sparepart.php +++ b/app/Livewire/Sparepart/Sparepart.php @@ -9,7 +9,7 @@ use App\Models\Manufacturer as Manufacturer; use Livewire\WithPagination; use Livewire\Attributes\title; -#[title('Filaments')] +#[title('Spareparts')] class Sparepart extends Component { use WithPagination; diff --git a/app/Models/Printer.php b/app/Models/Printer.php new file mode 100644 index 0000000..aa55b88 --- /dev/null +++ b/app/Models/Printer.php @@ -0,0 +1,21 @@ +belongsTo(Printertype::class); + } +} diff --git a/app/Models/Printertype.php b/app/Models/Printertype.php new file mode 100644 index 0000000..07348ac --- /dev/null +++ b/app/Models/Printertype.php @@ -0,0 +1,25 @@ +belongsTo(Manufacturer::class); + } +} diff --git a/database/migrations/2026_01_24_091316_create_printertypes_table.php b/database/migrations/2026_01_24_091316_create_printertypes_table.php new file mode 100644 index 0000000..ebf8947 --- /dev/null +++ b/database/migrations/2026_01_24_091316_create_printertypes_table.php @@ -0,0 +1,34 @@ +id(); + $table->string('name'); + $table->string('description')->nullable(); + $table->foreignId('manufacturer_id')->constrained('manufacturers')->onUpdate('cascade')->onDelete('cascade'); + $table->string('temp_max')->nullable(); + $table->decimal('bed_size_x', 5, 2)->default(0); + $table->decimal('bed_size_y', 5, 2)->default(0); + $table->decimal('price', 10, 2)->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('printertypes'); + } +}; diff --git a/database/migrations/2026_01_24_091321_create_printers_table.php b/database/migrations/2026_01_24_091321_create_printers_table.php new file mode 100644 index 0000000..4234938 --- /dev/null +++ b/database/migrations/2026_01_24_091321_create_printers_table.php @@ -0,0 +1,30 @@ +id(); + $table->string('name'); + $table->string('description')->nullable(); + $table->foreignId('printertype_id')->constrained('printertypes')->onUpdate('cascade')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('printers'); + } +}; diff --git a/resources/views/components/navbar.blade.php b/resources/views/components/navbar.blade.php index b1a3f14..204e077 100644 --- a/resources/views/components/navbar.blade.php +++ b/resources/views/components/navbar.blade.php @@ -9,12 +9,21 @@ Dashboard + + Calculator + Orders + + Customers + Filaments + + Printers + SpareParts @@ -36,9 +45,16 @@ Manufacturers + + PrinterTypes + + + Calculation Presets + + Colors - Types + Materials BuildPlates diff --git a/resources/views/livewire/printer/create.blade.php b/resources/views/livewire/printer/create.blade.php new file mode 100644 index 0000000..4c48087 --- /dev/null +++ b/resources/views/livewire/printer/create.blade.php @@ -0,0 +1,49 @@ +
+
+ + {{ __('Create Printer') }} + + + Save + Cancel + + + +
+
+
+

Printer Information

+

Printer details.

+
+
+
+
+
Name
+
+ +
+
+
+
Description
+
+ +
+
+
+
Printertype
+
+ + Select Printertype + @foreach(\App\Models\Printertype::all() as $printertype) + {{$printertype->name}} + @endforeach + +
+
+
+
+
+ +
+
+
diff --git a/resources/views/livewire/printer/edit.blade.php b/resources/views/livewire/printer/edit.blade.php new file mode 100644 index 0000000..4c4d248 --- /dev/null +++ b/resources/views/livewire/printer/edit.blade.php @@ -0,0 +1,49 @@ +
+
+ + {{ __('Edit Printer') }} + + + Save + Cancel + + + +
+
+
+

Printer Information

+

Printer details.

+
+
+
+
+
Name
+
+ +
+
+
+
Description
+
+ +
+
+
+
Printertype
+
+ + Select Printertype + @foreach(\App\Models\Printertype::all() as $printertype) + {{$printertype->name}} + @endforeach + +
+
+
+
+
+ +
+
+
diff --git a/resources/views/livewire/printer/index.blade.php b/resources/views/livewire/printer/index.blade.php new file mode 100644 index 0000000..45bfe8f --- /dev/null +++ b/resources/views/livewire/printer/index.blade.php @@ -0,0 +1,54 @@ +
+ + {{ __('Printer') }} + + + + + + + Create Printer + + + +
+
+ +
+ + + ID + Name + Printertype + Actions + + + @foreach ($printers as $printer) + +

{{ $printer->id }}

+

{{ $printer->name }}

+

+ @if ($printer->printertype_id !== 0) + + {{ App\Models\Printertype::find($printer->printertype_id)->name }} + + + @endif +

+ +
+ + + +
+
+ + @endforeach + + + {{ $printers->links() }} + +
+ +
+
diff --git a/resources/views/livewire/printer/show.blade.php b/resources/views/livewire/printer/show.blade.php new file mode 100644 index 0000000..07cbe5d --- /dev/null +++ b/resources/views/livewire/printer/show.blade.php @@ -0,0 +1,47 @@ +
+
+ + {{ __('Show Printer') }} + + + Back + Edit + + + +
+
+
+

Filament Information

+

Filament details.

+
+
+
+
+
Name
+
+ {{ $printer->name }} +
+
+
+
Description
+
+ {{ $printer->description }} +
+
+ +
+
+
+ +
+
+
diff --git a/resources/views/livewire/printertype/create.blade.php b/resources/views/livewire/printertype/create.blade.php new file mode 100644 index 0000000..4143ec0 --- /dev/null +++ b/resources/views/livewire/printertype/create.blade.php @@ -0,0 +1,85 @@ +
+
+ + {{ __('Create Printertype') }} + + + Save + Cancel + + + +
+
+
+

Printertype Information

+

Printertype details.

+
+
+
+
+
Name
+
+ +
+
+
+
Description
+
+ +
+
+
+
Manufacturer
+
+ + Select Manufacturer + @foreach(\App\Models\Manufacturer::all() as $manufacturer) + {{$manufacturer->name}} + @endforeach + +
+
+
+
Max Tempertaure
+
+ + + °C + +
+
+
+
Printbed Size X
+
+ + + cm + +
+
+
+
Printbed Size Y
+
+ + + cm + +
+
+
+
Price
+
+ + + + +
+
+
+
+
+ +
+
+
diff --git a/resources/views/livewire/printertype/edit.blade.php b/resources/views/livewire/printertype/edit.blade.php new file mode 100644 index 0000000..642ae13 --- /dev/null +++ b/resources/views/livewire/printertype/edit.blade.php @@ -0,0 +1,85 @@ +
+
+ + {{ __('Edit Printertype') }} + + + Save + Cancel + + + +
+
+
+

Printertype Information

+

Printertype details.

+
+
+
+
+
Name
+
+ +
+
+
+
Description
+
+ +
+
+
+
Manufacturer
+
+ + Select Manufacturer + @foreach(\App\Models\Manufacturer::all() as $manufacturer) + {{$manufacturer->name}} + @endforeach + +
+
+
+
Max Temperature
+
+ + + °C + +
+
+
+
Printbed Size X
+
+ + + cm + +
+
+
+
Printbed Size Y
+
+ + + mm + +
+
+
+
Price
+
+ + + + +
+
+
+
+
+ +
+
+
diff --git a/resources/views/livewire/printertype/index.blade.php b/resources/views/livewire/printertype/index.blade.php new file mode 100644 index 0000000..12f0ce5 --- /dev/null +++ b/resources/views/livewire/printertype/index.blade.php @@ -0,0 +1,62 @@ +
+ + {{ __('Printertype') }} + + + + + + + Create Printertype + + + +
+
+ +
+ + + ID + Name + Manufacturer + Temp Max + Bed Size X + Bed Size Y + Price + Actions + + + @foreach ($printertypes as $printertype) + +

{{ $printertype->id }}

+

{{ $printertype->name }}

+

+ @if ($printertype->manufacturer_id !== 0) + + {{ App\Models\Manufacturer::find($printertype->manufacturer_id)->name }} + + + @endif +

+

{{ $printertype->temp_max }}°C

+

{{ $printertype->bed_size_x }}cm

+

{{ $printertype->bed_size_y }}cm

+

{{ $printertype->price }}€

+ +
+ + + +
+
+ + @endforeach + + + {{ $printertypes->links() }} + +
+ +
+
diff --git a/resources/views/livewire/printertype/show.blade.php b/resources/views/livewire/printertype/show.blade.php new file mode 100644 index 0000000..d052cfe --- /dev/null +++ b/resources/views/livewire/printertype/show.blade.php @@ -0,0 +1,71 @@ +
+
+ + {{ __('Show Printertype') }} + + + Back + Edit + + + +
+
+
+

Filament Information

+

Filament details.

+
+
+
+
+
Name
+
+ {{ $printertype->name }} +
+
+
+
Description
+
+ {{ $printertype->description }} +
+
+ +
+
Max Temperature
+
+ {{ $printertype->temp_max }}°C +
+
+
+
Printbed Size X
+
+ {{ $printertype->bed_size_x }}cm +
+
+
+
Printbetd Size Y
+
+ {{ $printertype->bed_size_y }}cm +
+
+
+
Price
+
+ {{ $printertype->price }}€ +
+
+
+
+
+ +
+
+
diff --git a/routes/web.php b/routes/web.php index 553dc8f..bcffe5d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -11,6 +11,9 @@ use App\Livewire\Orders\Orders; use App\Livewire\Settings\Settings; use App\Livewire\Type\EditType; use App\Livewire\Type\Type; +use App\Livewire\Printertype\Printertype; +use App\Livewire\Printer\Printer; + use Illuminate\Support\Facades\Route; Route::get('/', function () { @@ -62,6 +65,18 @@ Route::middleware([ Route::get('manufacturer/{manufacturer}/edit', \App\Livewire\Manufacturer\EditManufacturer::class)->name('manufacturer.edit'); Route::get('manufacturer/{manufacturer}', \App\Livewire\Manufacturer\ShowManufacturer::class)->name('manufacturer.show'); + // Printertypes + Route::get('printertypes', Printertype::class)->name('printertypes.index'); + Route::get('printertypes/create', \App\Livewire\Printertype\CreatePrintertype::class)->name('printertypes.create'); + Route::get('printertypes/{printertype}/edit', \App\Livewire\Printertype\EditPrintertype::class)->name('printertypes.edit'); + Route::get('printertypes/{printertype}', \App\Livewire\Printertype\ShowPrintertype::class)->name('printertypes.show'); + + // Printertypes + Route::get('printers', Printer::class)->name('printers.index'); + Route::get('printers/create', \App\Livewire\Printer\CreatePrinter::class)->name('printers.create'); + Route::get('printers/{printer}/edit', \App\Livewire\Printer\EditPrinter::class)->name('printers.edit'); + Route::get('printers/{printer}', \App\Livewire\Printer\ShowPrinter::class)->name('printers.show'); + // Extruders Route::get('extruder', Extruder::class)->name('extruder.index'); Route::get('extruder/create', \App\Livewire\Extruder\CreateExtruder::class)->name('extruder.create');