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 @@
@@ -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'));
+ }
+}