diff --git a/app/Http/Controllers/PiggyBankController.php b/app/Http/Controllers/PiggyBankController.php index 59e79a74c7..ae9f639afb 100644 --- a/app/Http/Controllers/PiggyBankController.php +++ b/app/Http/Controllers/PiggyBankController.php @@ -168,6 +168,7 @@ class PiggyBankController extends Controller 'account_id' => $piggyBank->account_id, 'targetamount' => $piggyBank->targetamount, 'targetdate' => $targetDate, + 'note' => $piggyBank->notes()->first()->text, ]; Session::flash('preFilled', $preFilled); Session::flash('gaEventCategory', 'piggy-banks'); @@ -346,10 +347,11 @@ class PiggyBankController extends Controller */ public function show(PiggyBankRepositoryInterface $repository, PiggyBank $piggyBank) { + $note = $piggyBank->notes()->first(); $events = $repository->getEvents($piggyBank); $subTitle = e($piggyBank->name); - return view('piggy-banks.show', compact('piggyBank', 'events', 'subTitle')); + return view('piggy-banks.show', compact('piggyBank', 'events', 'subTitle', 'note')); } @@ -369,6 +371,7 @@ class PiggyBankController extends Controller 'targetamount' => round($request->get('targetamount'), 2), 'order' => $repository->getMaxOrder() + 1, 'targetdate' => strlen($request->get('targetdate')) > 0 ? new Carbon($request->get('targetdate')) : null, + 'note' => $request->get('note'), ]; $piggyBank = $repository->store($piggyBankData); @@ -402,6 +405,7 @@ class PiggyBankController extends Controller 'account_id' => intval($request->get('account_id')), 'targetamount' => round($request->get('targetamount'), 2), 'targetdate' => strlen($request->get('targetdate')) > 0 ? new Carbon($request->get('targetdate')) : null, + 'note' => $request->get('note'), ]; $piggyBank = $repository->update($piggyBank, $piggyBankData); diff --git a/app/Models/Note.php b/app/Models/Note.php new file mode 100644 index 0000000000..db1d2b4603 --- /dev/null +++ b/app/Models/Note.php @@ -0,0 +1,54 @@ +morphTo(); + } + +} \ No newline at end of file diff --git a/app/Models/PiggyBank.php b/app/Models/PiggyBank.php index f2d2ae4e50..3d5e5da150 100644 --- a/app/Models/PiggyBank.php +++ b/app/Models/PiggyBank.php @@ -56,6 +56,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @mixin \Eloquent * @property boolean $active * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\PiggyBank whereActive($value) + * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Note[] $notes */ class PiggyBank extends Model { @@ -146,6 +147,14 @@ class PiggyBank extends Model } + /** + * Get all of the piggy bank's notes. + */ + public function notes() + { + return $this->morphMany('FireflyIII\Models\Note', 'noteable'); + } + /** * @return \Illuminate\Database\Eloquent\Relations\HasMany */ diff --git a/app/Repositories/PiggyBank/PiggyBankRepository.php b/app/Repositories/PiggyBank/PiggyBankRepository.php index 9eca01a95a..2560c440de 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepository.php +++ b/app/Repositories/PiggyBank/PiggyBankRepository.php @@ -15,6 +15,7 @@ namespace FireflyIII\Repositories\PiggyBank; use Amount; use Carbon\Carbon; +use FireflyIII\Models\Note; use FireflyIII\Models\PiggyBank; use FireflyIII\Models\PiggyBankEvent; use FireflyIII\User; @@ -176,6 +177,8 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface { $piggyBank = PiggyBank::create($data); + $this->updateNote($piggyBank, $data['note']); + return $piggyBank; } @@ -196,6 +199,8 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface $piggyBank->save(); + $this->updateNote($piggyBank, $data['note']); + // if the piggy bank is now smaller than the current relevant rep, // remove money from the rep. $repetition = $piggyBank->currentRelevantRep(); @@ -210,4 +215,31 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface return $piggyBank; } + + /** + * @param PiggyBank $piggyBank + * @param string $note + * + * @return bool + */ + private function updateNote(PiggyBank $piggyBank, string $note): bool + { + if (strlen($note) === 0) { + $dbNote = $piggyBank->notes()->first(); + if (!is_null($dbNote)) { + $dbNote->delete(); + } + + return true; + } + $dbNote= $piggyBank->notes()->first(); + if (is_null($dbNote)) { + $dbNote= new Note(); + $dbNote->noteable()->associate($piggyBank); + } + $dbNote->text = trim($note); + $dbNote->save(); + + return true; + } } diff --git a/database/migrations/2016_10_22_075804_changes_for_v410.php b/database/migrations/2016_10_22_075804_changes_for_v410.php new file mode 100644 index 0000000000..bfd8c71085 --- /dev/null +++ b/database/migrations/2016_10_22_075804_changes_for_v410.php @@ -0,0 +1,41 @@ +increments('id'); + $table->timestamps(); + $table->softDeletes(); + $table->integer('noteable_id', false, true); + $table->string('noteable_type'); + $table->string('title')->nullable(); + $table->text('text')->nullable(); + } + ); + } +} diff --git a/resources/views/piggy-banks/create.twig b/resources/views/piggy-banks/create.twig index 492ff18ae8..f6d055b46e 100644 --- a/resources/views/piggy-banks/create.twig +++ b/resources/views/piggy-banks/create.twig @@ -31,6 +31,7 @@
{{ 'account'|_ }} | +{{ 'account'|_ }} | {{ piggyBank.account.name }} |
+ {{ note.text|nl2br }} +
+