. */ /** @noinspection MultipleReturnStatementsInspection */ declare(strict_types=1); namespace FireflyIII\Factory; use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Recurrence; use FireflyIII\Services\Internal\Support\RecurringTransactionTrait; use FireflyIII\Services\Internal\Support\TransactionServiceTrait; use FireflyIII\Services\Internal\Support\TransactionTypeTrait; use FireflyIII\User; use Log; /** * Class RecurrenceFactory */ class RecurrenceFactory { use TransactionTypeTrait, TransactionServiceTrait, RecurringTransactionTrait; /** @var User */ private $user; /** * @param array $data * * @return Recurrence */ public function create(array $data): ?Recurrence { try { $type = $this->findTransactionType(ucfirst($data['recurrence']['type'])); } catch (FireflyException $e) { Log::error($e->getMessage()); return null; } /** @var Carbon $firstDate */ $firstDate = $data['recurrence']['first_date']; $repetitions = (int)$data['recurrence']['repetitions']; $recurrence = new Recurrence( [ 'user_id' => $this->user->id, 'transaction_type_id' => $type->id, 'title' => $data['recurrence']['title'], 'description' => $data['recurrence']['description'], 'first_date' => $firstDate->format('Y-m-d'), 'repeat_until' => $repetitions > 0 ? null : $data['recurrence']['repeat_until'], 'latest_date' => null, 'repetitions' => $data['recurrence']['repetitions'], 'apply_rules' => $data['recurrence']['apply_rules'], 'active' => $data['recurrence']['active'], ] ); $recurrence->save(); $this->updateMetaData($recurrence, $data); $this->createRepetitions($recurrence, $data['repetitions'] ?? []); $this->createTransactions($recurrence, $data['transactions'] ?? []); return $recurrence; } /** * @param User $user */ public function setUser(User $user): void { $this->user = $user; } }