diff --git a/app/Http/Controllers/ReportsController.php b/app/Http/Controllers/ReportsController.php index 4b4db866ac..d60e201e77 100644 --- a/app/Http/Controllers/ReportsController.php +++ b/app/Http/Controllers/ReportsController.php @@ -394,7 +394,13 @@ class ReportsController extends Controller $customfields = CustomField::get(); $saved_reports = SavedReport::get(); - return view('reports/custom')->with('customfields', $customfields)->with('saved_reports', $saved_reports); + return view('reports/custom', [ + 'customfields' => $customfields, + 'saved_reports' => $saved_reports, + // @todo: temporary + 'savedReport' => $saved_reports->first(), + // 'savedReport' => new SavedReport, + ]); } /** diff --git a/app/Http/Controllers/SavedReportsController.php b/app/Http/Controllers/SavedReportsController.php index 31b91f0347..fcb9b54604 100644 --- a/app/Http/Controllers/SavedReportsController.php +++ b/app/Http/Controllers/SavedReportsController.php @@ -2,12 +2,20 @@ namespace App\Http\Controllers; +use App\Models\SavedReport; use Illuminate\Http\Request; class SavedReportsController extends Controller { public function store(Request $request) { - dd('saved reports', $request->all()); + $savedReport = SavedReport::first(); + + $savedReport->options = $request->except('_token'); + + $savedReport->save(); + + // @todo: should this redirect elsewhere? + return redirect()->back(); } } diff --git a/app/Models/SavedReport.php b/app/Models/SavedReport.php index cd1cdd7e58..81c5b9a66c 100644 --- a/app/Models/SavedReport.php +++ b/app/Models/SavedReport.php @@ -23,4 +23,30 @@ class SavedReport extends Model 'name', 'options', ]; + + public function checkmarkValue($property) + { + // Assuming we're using the null object pattern, + // return the default value if the object is not saved yet. + if (is_null($this->id)) { + return '1'; + } + + // Return the property's value if it exists + // and return the default value if not. + return $this->options[$property] ?? '0'; + } + + public function textValue($property) + { + // Assuming we're using the null object pattern, + // return the default value if the object is not saved yet. + if (is_null($this->id)) { + return ''; + } + + // Return the property's value if it exists + // and return the default value if not. + return $this->options[$property] ?? ''; + } } diff --git a/database/factories/SavedReportFactory.php b/database/factories/SavedReportFactory.php new file mode 100644 index 0000000000..72279bd3e5 --- /dev/null +++ b/database/factories/SavedReportFactory.php @@ -0,0 +1,21 @@ + $this->faker->word(), + 'options' => json_encode([]), + ]; + } +} diff --git a/resources/views/reports/custom.blade.php b/resources/views/reports/custom.blade.php index 94bdc37879..b9ce08a8c3 100644 --- a/resources/views/reports/custom.blade.php +++ b/resources/views/reports/custom.blade.php @@ -40,147 +40,147 @@ @@ -190,32 +190,32 @@

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

@@ -228,7 +228,7 @@ @foreach ($customfields as $customfield) @@ -258,7 +258,7 @@
- +
@@ -266,9 +266,9 @@
- + to - +
@@ -324,13 +324,13 @@
diff --git a/tests/Unit/SavedReportTest.php b/tests/Unit/SavedReportTest.php new file mode 100644 index 0000000000..a99408a846 --- /dev/null +++ b/tests/Unit/SavedReportTest.php @@ -0,0 +1,37 @@ +create([ + 'options' => [ + 'is_a_checkbox_value' => '1', + ], + ]); + + $this->assertEquals('1', $savedReport->checkmarkValue('is_a_checkbox_value')); + $this->assertEquals('0', $savedReport->checkmarkValue('non_existent_key')); + + $this->assertEquals('1', (new SavedReport)->checkmarkValue('is_a_checkbox_value')); + } + + public function testParsingTextValues() + { + $savedReport = SavedReport::factory()->create([ + 'options' => [ + 'is_a_text_value' => 'some text', + ], + ]); + + $this->assertEquals('some text', $savedReport->textValue('is_a_text_value')); + $this->assertEquals('', $savedReport->textValue('non_existent_key')); + + $this->assertEquals('', (new SavedReport)->textValue('is_a_text_value')); + } +}