diff --git a/app/Http/Controllers/Recurring/CreateController.php b/app/Http/Controllers/Recurring/CreateController.php index 7dffe39973..c21ba97c63 100644 --- a/app/Http/Controllers/Recurring/CreateController.php +++ b/app/Http/Controllers/Recurring/CreateController.php @@ -71,6 +71,7 @@ class CreateController extends Controller */ public function create(Request $request) { + // todo create expandedform thing. $budgets = app('expandedform')->makeSelectListWithEmpty($this->budgets->getActiveBudgets()); $defaultCurrency = app('amount')->getDefaultCurrency(); $tomorrow = new Carbon; @@ -83,8 +84,8 @@ class CreateController extends Controller } $request->session()->forget('recurring.create.fromStore'); - // types of repetitions: - $typesOfRepetitions = [ + // when will it end? + $repetitionEnds = [ 'forever' => trans('firefly.repeat_forever'), 'until_date' => trans('firefly.repeat_until_date'), 'times' => trans('firefly.repeat_times'), @@ -99,7 +100,7 @@ class CreateController extends Controller ]; $request->session()->flash('preFilled', $preFilled); - return view('recurring.create', compact('tomorrow', 'oldRepetitionType', 'preFilled', 'piggies', 'typesOfRepetitions', 'defaultCurrency', 'budgets')); + return view('recurring.create', compact('tomorrow', 'oldRepetitionType', 'preFilled', 'repetitionEnds', 'defaultCurrency', 'budgets')); } /** diff --git a/app/Http/Controllers/Recurring/EditController.php b/app/Http/Controllers/Recurring/EditController.php index 9107e472e0..7ce8d77675 100644 --- a/app/Http/Controllers/Recurring/EditController.php +++ b/app/Http/Controllers/Recurring/EditController.php @@ -27,7 +27,11 @@ namespace FireflyIII\Http\Controllers\Recurring; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Recurrence; use FireflyIII\Models\RecurrenceRepetition; +use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface; +use FireflyIII\Transformers\RecurrenceTransformer; +use Illuminate\Http\Request; +use Symfony\Component\HttpFoundation\ParameterBag; /** * @@ -35,6 +39,8 @@ use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface; */ class EditController extends Controller { + /** @var BudgetRepositoryInterface */ + private $budgets; /** @var RecurringRepositoryInterface */ private $recurring; @@ -53,6 +59,7 @@ class EditController extends Controller app('view')->share('subTitle', trans('firefly.recurrences')); $this->recurring = app(RecurringRepositoryInterface::class); + $this->budgets = app(BudgetRepositoryInterface::class); return $next($request); } @@ -60,24 +67,52 @@ class EditController extends Controller } /** + * @param Request $request * @param Recurrence $recurrence * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + * @throws \FireflyIII\Exceptions\FireflyException */ - public function edit(Recurrence $recurrence) + public function edit(Request $request, Recurrence $recurrence) { + // use transformer: + $transformer = new RecurrenceTransformer(new ParameterBag); + $array = $transformer->transform($recurrence); + $budgets = app('expandedform')->makeSelectListWithEmpty($this->budgets->getActiveBudgets()); + // get recurrence type: // todo move to repository + // todo handle old repetition type as well. + + /** @var RecurrenceRepetition $repetition */ $repetition = $recurrence->recurrenceRepetitions()->first(); $currentRepetitionType = $repetition->repetition_type; if ('' !== $repetition->repetition_moment) { $currentRepetitionType .= ',' . $repetition->repetition_moment; } + // assume repeats forever: + $repetitionEnd = 'forever'; + // types of repetitions: + $repetitionEnds = [ + 'forever' => trans('firefly.repeat_forever'), + 'until_date' => trans('firefly.repeat_until_date'), + 'times' => trans('firefly.repeat_times'), + ]; + if (null !== $recurrence->repeat_until) { + $repetitionEnd = 'until_date'; + } + if ($recurrence->repetitions > 0) { + $repetitionEnd = 'times'; + } - // todo handle old repetition type as well. + // flash some data: + $preFilled = [ + 'transaction_type' => strtolower($recurrence->transactionType->type), + ]; + $request->flash('preFilled', $preFilled); - return view('recurring.edit', compact('recurrence','currentRepetitionType')); + return view('recurring.edit', compact('recurrence', 'array','budgets', 'preFilled', 'currentRepetitionType', 'repetitionEnd', 'repetitionEnds')); } diff --git a/app/Http/Controllers/Recurring/IndexController.php b/app/Http/Controllers/Recurring/IndexController.php index fd3b1c584b..79a32f02d9 100644 --- a/app/Http/Controllers/Recurring/IndexController.php +++ b/app/Http/Controllers/Recurring/IndexController.php @@ -189,9 +189,9 @@ class IndexController extends Controller $array = $transformer->transform($recurrence); // transform dates back to Carbon objects: - foreach ($array['repetitions'] as $index => $repetition) { + foreach ($array['recurrence_repetitions'] as $index => $repetition) { foreach ($repetition['occurrences'] as $item => $occurrence) { - $array['repetitions'][$index]['occurrences'][$item] = new Carbon($occurrence); + $array['recurrence_repetitions'][$index]['occurrences'][$item] = new Carbon($occurrence); } } diff --git a/app/Models/Recurrence.php b/app/Models/Recurrence.php index 521b0bd673..23269138f4 100644 --- a/app/Models/Recurrence.php +++ b/app/Models/Recurrence.php @@ -47,6 +47,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property string $repetition_type * @property string $repetition_moment * @property int $repetition_skip + * @property int $repetitions * @property bool $active * @property bool $apply_rules * @property \FireflyIII\User $user diff --git a/app/Transformers/RecurrenceTransformer.php b/app/Transformers/RecurrenceTransformer.php index 713928ac3b..1d60824b8c 100644 --- a/app/Transformers/RecurrenceTransformer.php +++ b/app/Transformers/RecurrenceTransformer.php @@ -99,23 +99,24 @@ class RecurrenceTransformer extends TransformerAbstract { $this->repository->setUser($recurrence->user); $return = [ - 'id' => (int)$recurrence->id, - 'updated_at' => $recurrence->updated_at->toAtomString(), - 'created_at' => $recurrence->created_at->toAtomString(), - 'transaction_type_id' => $recurrence->transaction_type_id, - 'transaction_type' => $recurrence->transactionType->type, - 'title' => $recurrence->title, - 'description' => $recurrence->description, - 'first_date' => $recurrence->first_date->format('Y-m-d'), - 'latest_date' => null === $recurrence->latest_date ? null : $recurrence->latest_date->format('Y-m-d'), - 'repeat_until' => null === $recurrence->repeat_until ? null : $recurrence->repeat_until->format('Y-m-d'), - 'apply_rules' => $recurrence->apply_rules, - 'active' => $recurrence->active, - 'notes' => $this->repository->getNoteText($recurrence), - 'repetitions' => [], - 'transactions' => [], - 'meta' => [], - 'links' => [ + 'id' => (int)$recurrence->id, + 'updated_at' => $recurrence->updated_at->toAtomString(), + 'created_at' => $recurrence->created_at->toAtomString(), + 'transaction_type_id' => $recurrence->transaction_type_id, + 'transaction_type' => $recurrence->transactionType->type, + 'title' => $recurrence->title, + 'description' => $recurrence->description, + 'first_date' => $recurrence->first_date->format('Y-m-d'), + 'latest_date' => null === $recurrence->latest_date ? null : $recurrence->latest_date->format('Y-m-d'), + 'repeat_until' => null === $recurrence->repeat_until ? null : $recurrence->repeat_until->format('Y-m-d'), + 'apply_rules' => $recurrence->apply_rules, + 'active' => $recurrence->active, + 'repetitions' => $recurrence->repetitions, + 'notes' => $this->repository->getNoteText($recurrence), + 'recurrence_repetitions' => [], + 'transactions' => [], + 'meta' => [], + 'links' => [ [ 'rel' => 'self', 'uri' => '/recurring/' . $recurrence->id, @@ -147,7 +148,7 @@ class RecurrenceTransformer extends TransformerAbstract $repetitionArray['occurrences'][] = $carbon->format('Y-m-d'); } - $return['repetitions'][] = $repetitionArray; + $return['recurrence_repetitions'][] = $repetitionArray; } unset($repetitionArray); diff --git a/resources/views/recurring/create.twig b/resources/views/recurring/create.twig index 644630d7d8..44c8e40e7d 100644 --- a/resources/views/recurring/create.twig +++ b/resources/views/recurring/create.twig @@ -20,7 +20,7 @@ {{ ExpandedForm.date('first_date',null, {helpText: trans('firefly.help_first_date')}) }} {{ ExpandedForm.select('repetition_type', [], null, {helpText: trans('firefly.change_date_other_options')}) }} {{ ExpandedForm.number('skip', 0) }} - {{ ExpandedForm.select('repetition_end', typesOfRepetitions) }} + {{ ExpandedForm.select('repetition_end', repetitionEnds) }} {{ ExpandedForm.date('repeat_until',null) }} {{ ExpandedForm.number('repetitions',null) }} diff --git a/resources/views/recurring/edit.twig b/resources/views/recurring/edit.twig index f9560d436a..93b8932417 100644 --- a/resources/views/recurring/edit.twig +++ b/resources/views/recurring/edit.twig @@ -16,13 +16,13 @@