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
- {
- $companyFyStartDate = Carbon::parse($this->company->locale->fiscalYearStartDate());
- $companyFyEndDate = Carbon::parse($this->company->locale->fiscalYearEndDate())->endOfDay();
- $dateRange = 'FY-' . company_today()->year;
- $startDate = $companyFyStartDate->startOfDay();
- $endDate = $companyFyEndDate->isFuture() ? company_today()->endOfDay() : $companyFyEndDate->endOfDay();
-
- // Calculate the earliest transaction date based on the company's transactions
- $earliestDate = $this->company->transactions()->min('posted_at')
- ? Carbon::parse($this->company->transactions()->min('posted_at'))->startOfDay()
- : $startDate;
-
- // Assign values to properties
- $this->fiscalYearStartDate = $companyFyStartDate;
- $this->fiscalYearEndDate = $companyFyEndDate;
- $this->defaultDateRange = $dateRange;
- $this->defaultStartDate = $startDate;
- $this->defaultEndDate = $endDate;
- $this->earliestTransactionDate = $earliestDate;
- }
-
- public function refresh(): self
- {
- $this->buildReportDates();
-
- return $this;
- }
-
- public static function create(Company $company): self
- {
- return new static($company);
- }
- }
|