. */ declare(strict_types=1); namespace FireflyIII\Generator\Report\Account; use Carbon\Carbon; use FireflyIII\Generator\Report\ReportGeneratorInterface; use Illuminate\Support\Collection; use Log; use Throwable; /** * Class MonthReportGenerator. * * @codeCoverageIgnore */ class MonthReportGenerator implements ReportGeneratorInterface { private Collection $accounts; private Carbon $end; private Collection $expense; private Carbon $start; /** * Generate the report. * * @return string */ public function generate(): string { $accountIds = implode(',', $this->accounts->pluck('id')->toArray()); $doubleIds = implode(',', $this->expense->pluck('id')->toArray()); $reportType = 'account'; $preferredPeriod = $this->preferredPeriod(); try { $result = view('reports.double.report', compact('accountIds', 'reportType', 'doubleIds', 'preferredPeriod')) ->with('start', $this->start)->with('end', $this->end) ->with('doubles', $this->expense) ->render(); } catch (Throwable $e) { Log::error(sprintf('Cannot render reports.double.report: %s', $e->getMessage())); $result = sprintf('Could not render report view: %s', $e->getMessage()); } return $result; } /** * Return the preferred period. * * @return string */ protected function preferredPeriod(): string { return 'day'; } /** * Set accounts. * * @param Collection $accounts * * @return ReportGeneratorInterface */ public function setAccounts(Collection $accounts): ReportGeneratorInterface { $this->accounts = $accounts; return $this; } /** * Set budgets. * * @param Collection $budgets * * @return ReportGeneratorInterface */ public function setBudgets(Collection $budgets): ReportGeneratorInterface { return $this; } /** * Set categories. * * @param Collection $categories * * @return ReportGeneratorInterface */ public function setCategories(Collection $categories): ReportGeneratorInterface { return $this; } /** * Set end date. * * @param Carbon $date * * @return ReportGeneratorInterface */ public function setEndDate(Carbon $date): ReportGeneratorInterface { $this->end = $date; return $this; } /** * Set expense collection. * * @param Collection $expense * * @return ReportGeneratorInterface */ public function setExpense(Collection $expense): ReportGeneratorInterface { $this->expense = $expense; return $this; } /** * Set start date. * * @param Carbon $date * * @return ReportGeneratorInterface */ public function setStartDate(Carbon $date): ReportGeneratorInterface { $this->start = $date; return $this; } /** * Set collection of tags. * * @param Collection $tags * * @return ReportGeneratorInterface */ public function setTags(Collection $tags): ReportGeneratorInterface { return $this; } }