diff --git a/app/Http/Controllers/SavedReportsController.php b/app/Http/Controllers/ReportTemplatesController.php similarity index 66% rename from app/Http/Controllers/SavedReportsController.php rename to app/Http/Controllers/ReportTemplatesController.php index 487ded803a..5671cef244 100644 --- a/app/Http/Controllers/SavedReportsController.php +++ b/app/Http/Controllers/ReportTemplatesController.php @@ -3,18 +3,18 @@ namespace App\Http\Controllers; use App\Models\CustomField; -use App\Models\SavedReport; +use App\Models\ReportTemplate; use Illuminate\Http\Request; -class SavedReportsController extends Controller +class ReportTemplatesController extends Controller { public function store(Request $request) { $this->authorize('reports.view'); - $request->validate((new SavedReport)->getRules()); + $request->validate((new ReportTemplate)->getRules()); - $report = $request->user()->savedReports()->create([ + $report = $request->user()->reportTemplates()->create([ 'name' => $request->get('name'), 'options' => $request->except(['_token', 'name']), ]); @@ -24,19 +24,19 @@ class SavedReportsController extends Controller public function edit(Request $request, $reportId) { - $report = SavedReport::findOrFail($reportId); + $report = ReportTemplate::findOrFail($reportId); return view('reports/custom', [ 'customfields' => CustomField::get(), - 'savedReport' => $report, + 'reportTemplate' => $report, ]); } public function update(Request $request) { - $this->authorize('update',SavedReport::class); + $this->authorize('update',ReportTemplate::class); - if(is_null($reportid = SavedReport::find($request))) + if(is_null($reportid = ReportTemplate::find($request))) { return redirect()->route('reports/custom'); } @@ -44,7 +44,7 @@ class SavedReportsController extends Controller $request->validate()->report->id->getRules(); - $report = $request->user()->savedReports()->edit([ + $report = $request->user()->reportTemplates()->edit([ 'name' => $request->get('name'), 'options' => $request->except(['token','name']), ]); diff --git a/app/Http/Controllers/ReportsController.php b/app/Http/Controllers/ReportsController.php index 9ff7108280..864e889653 100644 --- a/app/Http/Controllers/ReportsController.php +++ b/app/Http/Controllers/ReportsController.php @@ -11,7 +11,7 @@ use App\Models\CheckoutAcceptance; use App\Models\CustomField; use App\Models\Depreciation; use App\Models\License; -use App\Models\SavedReport; +use App\Models\ReportTemplate; use App\Models\Setting; use App\Notifications\CheckoutAssetNotification; use Carbon\Carbon; @@ -392,12 +392,12 @@ class ReportsController extends Controller { $this->authorize('reports.view'); $customfields = CustomField::get(); - $saved_reports = SavedReport::orderBy('name')->get(); + $report_templates = ReportTemplate::orderBy('name')->get(); return view('reports/custom', [ 'customfields' => $customfields, - 'saved_reports' => $saved_reports, - 'savedReport' => $saved_reports->find($request->input('report')) ?? new SavedReport, + 'report_templates' => $report_templates, + 'reportTemplate' => $report_templates->find($request->input('report')) ?? new ReportTemplate, ]); } diff --git a/app/Models/SavedReport.php b/app/Models/ReportTemplate.php similarity index 96% rename from app/Models/SavedReport.php rename to app/Models/ReportTemplate.php index 806c9dab99..6ea8dd95ab 100644 --- a/app/Models/SavedReport.php +++ b/app/Models/ReportTemplate.php @@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Watson\Validating\ValidatingTrait; -class SavedReport extends Model +class ReportTemplate extends Model { use HasFactory; use ValidatingTrait; @@ -28,7 +28,7 @@ class SavedReport extends Model // @todo: add $rules protected $rules = [ - 'name' => 'required|unique:saved_reports,name', + 'name' => 'required|unique:report_templates,name', 'options' => 'array', ]; diff --git a/app/Models/User.php b/app/Models/User.php index 95713fb655..8355189b14 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -330,9 +330,9 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo return $this->belongsToMany(\App\Models\License::class, 'license_seats', 'assigned_to', 'license_id')->withPivot('id'); } - public function savedReports(): HasMany + public function reportTemplates(): HasMany { - return $this->hasMany(SavedReport::class); + return $this->hasMany(ReportTemplate::class); } /** diff --git a/database/factories/SavedReportFactory.php b/database/factories/ReportTemplateFactory.php similarity index 88% rename from database/factories/SavedReportFactory.php rename to database/factories/ReportTemplateFactory.php index 72279bd3e5..1ece94e410 100644 --- a/database/factories/SavedReportFactory.php +++ b/database/factories/ReportTemplateFactory.php @@ -4,7 +4,7 @@ namespace Database\Factories; use Illuminate\Database\Eloquent\Factories\Factory; -class SavedReportFactory extends Factory +class ReportTemplateFactory extends Factory { /** * Define the model's default state. diff --git a/database/migrations/2023_08_23_232739_create_saved_reports_table.php b/database/migrations/2023_08_23_232739_create_report_templates_table.php similarity index 77% rename from database/migrations/2023_08_23_232739_create_saved_reports_table.php rename to database/migrations/2023_08_23_232739_create_report_templates_table.php index 2065880095..31615b6fe4 100644 --- a/database/migrations/2023_08_23_232739_create_saved_reports_table.php +++ b/database/migrations/2023_08_23_232739_create_report_templates_table.php @@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -class CreateSavedReportsTable extends Migration +class CreateReportTemplatesTable extends Migration { /** * Run the migrations. @@ -13,7 +13,7 @@ class CreateSavedReportsTable extends Migration */ public function up() { - Schema::create('saved_reports', function (Blueprint $table) { + Schema::create('report_templates', function (Blueprint $table) { $table->id(); $table->integer('user_id')->nullable(); $table->string('name'); @@ -30,6 +30,6 @@ class CreateSavedReportsTable extends Migration */ public function down() { - Schema::dropIfExists('saved_reports'); + Schema::dropIfExists('report_templates'); } } diff --git a/resources/views/reports/custom.blade.php b/resources/views/reports/custom.blade.php index 29a9511bd9..016020a508 100644 --- a/resources/views/reports/custom.blade.php +++ b/resources/views/reports/custom.blade.php @@ -28,31 +28,31 @@

- @if ($savedReport->exists && request()->routeIs('saved-templates.edit')) - Updating: {{ $savedReport->name }} - @elseif($savedReport->exists) - Saved Template: {{ $savedReport->name }} + @if ($reportTemplate->exists && request()->routeIs('report-templates.edit')) + Updating: {{ $reportTemplate->name }} + @elseif($reportTemplate->exists) + Saved Template: {{ $reportTemplate->name }} @else {{ trans('general.customize_report') }} @endif

- @if ($savedReport->exists && request()->routeIs('saved-templates.edit')) + @if ($reportTemplate->exists && request()->routeIs('report-templates.edit'))
{{-- todo --}} -
+ id) }}"> @csrf @method('PUT') - +
- @elseif ($savedReport->exists) + @elseif ($reportTemplate->exists)
@@ -236,32 +236,32 @@

{{ trans('general.checked_out_to') }} {{ trans('general.fields') }}:

@@ -274,7 +274,7 @@ @foreach ($customfields as $customfield) @@ -290,21 +290,21 @@
- @include ('partials.forms.edit.company-select', ['translated_name' => trans('general.company'),'multiple' => 'true', 'fieldname' => 'by_company_id[]', 'hide_new' => 'true', 'selected' => $savedReport->selectValues('by_company_id')]) - @include ('partials.forms.edit.location-select', ['translated_name' => trans('general.location'), 'multiple' => 'true', 'fieldname' => 'by_location_id[]', 'hide_new' => 'true', 'selected' => $savedReport->selectValues('by_location_id')]) - @include ('partials.forms.edit.location-select', ['translated_name' => trans('admin/hardware/form.default_location'), 'multiple' => 'true', 'fieldname' => 'by_rtd_location_id[]', 'hide_new' => 'true', 'selected' => $savedReport->selectValues('by_rtd_location_id')]) - @include ('partials.forms.edit.department-select', ['translated_name' => trans('general.department'), 'fieldname' => 'by_dept_id', 'hide_new' => 'true', 'selected' => $savedReport->selectValue('by_dept_id')]) - @include ('partials.forms.edit.supplier-select', ['translated_name' => trans('general.supplier'), 'fieldname' => 'by_supplier_id[]', 'multiple' => 'true', 'hide_new' => 'true', 'selected' => $savedReport->selectValues('by_supplier_id')]) - @include ('partials.forms.edit.model-select', ['translated_name' => trans('general.asset_model'), 'fieldname' => 'by_model_id[]', 'multiple' => 'true', 'hide_new' => 'true', 'selected' => $savedReport->selectValues('by_model_id')]) - @include ('partials.forms.edit.manufacturer-select', ['translated_name' => trans('general.manufacturer'), 'fieldname' => 'by_manufacturer_id', 'hide_new' => 'true', 'selected' => $savedReport->selectValue('by_manufacturer_id')]) - @include ('partials.forms.edit.category-select', ['translated_name' => trans('general.category'), 'fieldname' => 'by_category_id', 'hide_new' => 'true', 'category_type' => 'asset', 'selected' => $savedReport->selectValue('by_category_id')]) - @include ('partials.forms.edit.status-select', ['translated_name' => trans('admin/hardware/form.status'), 'fieldname' => 'by_status_id[]', 'multiple' => 'true', 'hide_new' => 'true', 'selected' => $savedReport->selectValues('by_status_id')]) + @include ('partials.forms.edit.company-select', ['translated_name' => trans('general.company'),'multiple' => 'true', 'fieldname' => 'by_company_id[]', 'hide_new' => 'true', 'selected' => $reportTemplate->selectValues('by_company_id')]) + @include ('partials.forms.edit.location-select', ['translated_name' => trans('general.location'), 'multiple' => 'true', 'fieldname' => 'by_location_id[]', 'hide_new' => 'true', 'selected' => $reportTemplate->selectValues('by_location_id')]) + @include ('partials.forms.edit.location-select', ['translated_name' => trans('admin/hardware/form.default_location'), 'multiple' => 'true', 'fieldname' => 'by_rtd_location_id[]', 'hide_new' => 'true', 'selected' => $reportTemplate->selectValues('by_rtd_location_id')]) + @include ('partials.forms.edit.department-select', ['translated_name' => trans('general.department'), 'fieldname' => 'by_dept_id', 'hide_new' => 'true', 'selected' => $reportTemplate->selectValue('by_dept_id')]) + @include ('partials.forms.edit.supplier-select', ['translated_name' => trans('general.supplier'), 'fieldname' => 'by_supplier_id[]', 'multiple' => 'true', 'hide_new' => 'true', 'selected' => $reportTemplate->selectValues('by_supplier_id')]) + @include ('partials.forms.edit.model-select', ['translated_name' => trans('general.asset_model'), 'fieldname' => 'by_model_id[]', 'multiple' => 'true', 'hide_new' => 'true', 'selected' => $reportTemplate->selectValues('by_model_id')]) + @include ('partials.forms.edit.manufacturer-select', ['translated_name' => trans('general.manufacturer'), 'fieldname' => 'by_manufacturer_id', 'hide_new' => 'true', 'selected' => $reportTemplate->selectValue('by_manufacturer_id')]) + @include ('partials.forms.edit.category-select', ['translated_name' => trans('general.category'), 'fieldname' => 'by_category_id', 'hide_new' => 'true', 'category_type' => 'asset', 'selected' => $reportTemplate->selectValue('by_category_id')]) + @include ('partials.forms.edit.status-select', ['translated_name' => trans('admin/hardware/form.status'), 'fieldname' => 'by_status_id[]', 'multiple' => 'true', 'hide_new' => 'true', 'selected' => $reportTemplate->selectValues('by_status_id')])
- +
@@ -312,9 +312,9 @@
- + to - +
@@ -322,9 +322,9 @@
- + to - +
@@ -332,9 +332,9 @@
- + to - +
@@ -342,9 +342,9 @@
- + to - +
@@ -352,9 +352,9 @@
- + to - +
@@ -362,36 +362,36 @@
- + to - +
@@ -411,12 +411,12 @@
- @if (! request()->routeIs('saved-templates.edit')) + @if (! request()->routeIs('report-templates.edit'))
-
+ @csrf - {{--this means that the name of a loaded report is in the input box. could lead to confusion with update--}} + {{--this means that the name of a loaded report is in the input box. could lead to confusion with update--}} @@ -424,11 +424,6 @@
- {{-- --}} - {{-- {{ trans('admin/reports/general.select_template') }}--}} - {{-- --}} - {{-- --}} - {{-- {!! Form::select('brand', array('1'=>'Text','2'=>'Logo','3'=>'Logo + Text'), old('brand', $setting->brand), array('class' => 'form-control select2', 'style'=>'width: 150px ;')) !!}--}} @@ -447,10 +442,10 @@ {{-- --}} -{{-- --}} +{{-- --}} {{-- @csrf--}} {{-- --}} -{{-- --}} +{{-- --}} {{-- --}} @@ -529,7 +524,7 @@ value: $('#name').val(), }).appendTo(form); - form.attr('action', '/reports/savedtemplate').submit(); + form.attr('action', '{{ route('report-templates.store') }}').submit(); }); diff --git a/routes/web.php b/routes/web.php index b4aafaf011..d23bf83e46 100644 --- a/routes/web.php +++ b/routes/web.php @@ -16,7 +16,7 @@ use App\Http\Controllers\ManufacturersController; use App\Http\Controllers\ModalController; use App\Http\Controllers\ProfileController; use App\Http\Controllers\ReportsController; -use App\Http\Controllers\SavedReportsController; +use App\Http\Controllers\ReportTemplatesController; use App\Http\Controllers\SettingsController; use App\Http\Controllers\StatuslabelsController; use App\Http\Controllers\SuppliersController; @@ -357,11 +357,9 @@ Route::group(['middleware' => ['auth']], function () { )->name('reports/export/accessories'); Route::get('reports/custom', [ReportsController::class, 'getCustomReport'])->name('reports/custom'); Route::post('reports/custom', [ReportsController::class, 'postCustom']); - // @todo: change to saved-template? - Route::post('reports/savedtemplate', [SavedReportsController::class, 'store'])->name('savedreports/store'); - // @todo: starting the process of adding "-" to saved-template... - Route::get('reports/saved-templates/{reportId}/edit', [SavedReportsController::class, 'edit'])->name('saved-templates.edit'); - Route::put('report/savedtemplate', [SavedReportsController::class, 'update'])->name('savedreports/update'); + Route::post('reports/saved-templates', [ReportTemplatesController::class, 'store'])->name('report-templates.store'); + Route::get('reports/saved-templates/{reportId}/edit', [ReportTemplatesController::class, 'edit'])->name('report-templates.edit'); + Route::post('report/saved-templates/{reportId}', [ReportTemplatesController::class, 'update'])->name('report-templates.update'); Route::get( 'reports/activity', diff --git a/tests/Feature/SavedReports/SavedReportsTest.php b/tests/Feature/ReportTemplates/ReportTemplateTest.php similarity index 58% rename from tests/Feature/SavedReports/SavedReportsTest.php rename to tests/Feature/ReportTemplates/ReportTemplateTest.php index c68e99688d..92a6ac696d 100644 --- a/tests/Feature/SavedReports/SavedReportsTest.php +++ b/tests/Feature/ReportTemplates/ReportTemplateTest.php @@ -1,13 +1,13 @@ actingAs(User::factory()->canViewReports()->create()) ->get(route('reports/custom')) ->assertOk() - ->assertViewHas(['savedReport' => function (SavedReport $report) { + ->assertViewHas(['reportTemplate' => function (ReportTemplate $report) { // the view should have an empty report by default return $report->exists() === false; }]); @@ -25,14 +25,14 @@ class SavedReportsTest extends TestCase public function testCanLoadASavedCustomReport() { $user = User::factory()->canViewReports()->create(); - $savedReport = SavedReport::factory()->make(['name' => 'My Awesome Report']); - $user->savedReports()->save($savedReport); + $reportTemplate = ReportTemplate::factory()->make(['name' => 'My Awesome Report']); + $user->reportTemplates()->save($reportTemplate); $this->actingAs($user) - ->get(route('reports/custom', ['report' => $savedReport->id])) + ->get(route('reports/custom', ['report' => $reportTemplate->id])) ->assertOk() - ->assertViewHas(['savedReport' => function (SavedReport $viewReport) use ($savedReport) { - return $viewReport->is($savedReport); + ->assertViewHas(['reportTemplate' => function (ReportTemplate $viewReport) use ($reportTemplate) { + return $viewReport->is($reportTemplate); }]); } @@ -41,26 +41,26 @@ class SavedReportsTest extends TestCase $user = User::factory()->canViewReports()->create(); $this->actingAs($user) - ->post(route('savedreports/store'), [ + ->post(route('report-templates.store'), [ 'name' => 'My Awesome Report', 'company' => '1', 'by_company_id' => ['1', '2'], ]) ->assertRedirect(); - $report = $user->savedReports->first(function ($report) { + $template = $user->reportTemplates->first(function ($report) { return $report->name === 'My Awesome Report'; }); - $this->assertNotNull($report); - $this->assertEquals('1', $report->options['company']); - $this->assertEquals(['1', '2'], $report->options['by_company_id']); + $this->assertNotNull($template); + $this->assertEquals('1', $template->options['company']); + $this->assertEquals(['1', '2'], $template->options['by_company_id']); } public function testSavingReportRequiresValidFields() { $this->actingAs(User::factory()->canViewReports()->create()) - ->post(route('savedreports/store'), [ + ->post(route('report-templates.store'), [ // ]) ->assertSessionHasErrors('name'); @@ -69,7 +69,7 @@ class SavedReportsTest extends TestCase public function testSavingReportRequiresCorrectPermission() { $this->actingAs(User::factory()->create()) - ->post(route('savedreports/store')) + ->post(route('report-templates.store')) ->assertForbidden(); } } diff --git a/tests/Unit/SavedReportTest.php b/tests/Unit/ReportTemplateTest.php similarity index 88% rename from tests/Unit/SavedReportTest.php rename to tests/Unit/ReportTemplateTest.php index 02b8876dd4..7af41710c7 100644 --- a/tests/Unit/SavedReportTest.php +++ b/tests/Unit/ReportTemplateTest.php @@ -2,14 +2,14 @@ namespace Tests\Unit; -use App\Models\SavedReport; +use App\Models\ReportTemplate; use Tests\TestCase; -class SavedReportTest extends TestCase +class ReportTemplateTest extends TestCase { public function testParsingCheckmarkValue() { - $savedReport = SavedReport::factory()->create([ + $savedReport = ReportTemplate::factory()->create([ 'options' => [ 'is_a_checkbox_field' => '1', ], @@ -18,12 +18,12 @@ class SavedReportTest extends TestCase $this->assertEquals('1', $savedReport->checkmarkValue('is_a_checkbox_field')); $this->assertEquals('0', $savedReport->checkmarkValue('non_existent_key')); - $this->assertEquals('1', (new SavedReport)->checkmarkValue('is_a_checkbox_field')); + $this->assertEquals('1', (new ReportTemplate)->checkmarkValue('is_a_checkbox_field')); } public function testParsingTextValue() { - $savedReport = SavedReport::factory()->create([ + $savedReport = ReportTemplate::factory()->create([ 'options' => [ 'is_a_text_field' => 'some text', ], @@ -32,12 +32,12 @@ class SavedReportTest extends TestCase $this->assertEquals('some text', $savedReport->textValue('is_a_text_field')); $this->assertEquals('', $savedReport->textValue('non_existent_key')); - $this->assertEquals('', (new SavedReport)->textValue('is_a_text_field')); + $this->assertEquals('', (new ReportTemplate)->textValue('is_a_text_field')); } public function testParsingRadioValue() { - $savedReport = SavedReport::factory()->create([ + $savedReport = ReportTemplate::factory()->create([ 'options' => [ 'is_a_radio_field' => null, ], @@ -50,7 +50,7 @@ class SavedReportTest extends TestCase public function testParsingSelectValue() { - $savedReport = SavedReport::factory()->create([ + $savedReport = ReportTemplate::factory()->create([ 'options' => [ 'is_a_text_field_as_well' => '4', 'contains_a_null_value' => null, @@ -64,7 +64,7 @@ class SavedReportTest extends TestCase public function testParsingSelectValues() { - $savedReport = SavedReport::factory()->create([ + $savedReport = ReportTemplate::factory()->create([ 'options' => [ 'is_an_array' => ['2', '3', '4'], 'is_an_array_containing_null' => [null],