123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- <?php
-
- namespace App\Factories;
-
- use App\Models\Company;
- use Illuminate\Support\Carbon;
-
- class ReportDateFactory
- {
- public Carbon $fiscalYearStartDate;
-
- public Carbon $fiscalYearEndDate;
-
- public string $defaultDateRange;
-
- public Carbon $defaultStartDate;
-
- public Carbon $defaultEndDate;
-
- public Carbon $earliestTransactionDate;
-
- protected Company $company;
-
- public function __construct(Company $company)
- {
- $this->company = $company;
- $this->buildReportDates();
- }
-
- protected function buildReportDates(): void
- {
- $fiscalYearStartDate = Carbon::parse($this->company->locale->fiscalYearStartDate())->startOfDay();
- $fiscalYearEndDate = Carbon::parse($this->company->locale->fiscalYearEndDate())->endOfDay();
- $defaultDateRange = 'FY-' . now()->year;
- $defaultStartDate = $fiscalYearStartDate->startOfDay();
- $defaultEndDate = $fiscalYearEndDate->isFuture() ? now()->endOfDay() : $fiscalYearEndDate->endOfDay();
-
- // Calculate the earliest transaction date based on the company's transactions
- $earliestTransactionDate = $this->company->transactions()->min('posted_at')
- ? Carbon::parse($this->company->transactions()->min('posted_at'))->startOfDay()
- : $defaultStartDate;
-
- // Assign values to properties
- $this->fiscalYearStartDate = $fiscalYearStartDate;
- $this->fiscalYearEndDate = $fiscalYearEndDate;
- $this->defaultDateRange = $defaultDateRange;
- $this->defaultStartDate = $defaultStartDate;
- $this->defaultEndDate = $defaultEndDate;
- $this->earliestTransactionDate = $earliestTransactionDate;
- }
-
- public function refresh(): self
- {
- $this->buildReportDates();
-
- return $this;
- }
-
- public static function create(Company $company): self
- {
- return new static($company);
- }
- }
|