Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

ReportDateFactory.php 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace App\Factories;
  3. use App\Models\Company;
  4. use Illuminate\Support\Carbon;
  5. class ReportDateFactory
  6. {
  7. public Carbon $fiscalYearStartDate;
  8. public Carbon $fiscalYearEndDate;
  9. public string $defaultDateRange;
  10. public Carbon $defaultStartDate;
  11. public Carbon $defaultEndDate;
  12. public Carbon $earliestTransactionDate;
  13. protected Company $company;
  14. public function __construct(Company $company)
  15. {
  16. $this->company = $company;
  17. $this->buildReportDates();
  18. }
  19. protected function buildReportDates(): void
  20. {
  21. $companyFyStartDate = Carbon::parse($this->company->locale->fiscalYearStartDate());
  22. $companyFyEndDate = Carbon::parse($this->company->locale->fiscalYearEndDate())->endOfDay();
  23. $dateRange = 'FY-' . company_today()->year;
  24. $startDate = $companyFyStartDate->startOfDay();
  25. $endDate = $companyFyEndDate->isFuture() ? company_today()->endOfDay() : $companyFyEndDate->endOfDay();
  26. // Calculate the earliest transaction date based on the company's transactions
  27. $earliestDate = $this->company->transactions()->min('posted_at')
  28. ? Carbon::parse($this->company->transactions()->min('posted_at'))->startOfDay()
  29. : $startDate;
  30. // Assign values to properties
  31. $this->fiscalYearStartDate = $companyFyStartDate;
  32. $this->fiscalYearEndDate = $companyFyEndDate;
  33. $this->defaultDateRange = $dateRange;
  34. $this->defaultStartDate = $startDate;
  35. $this->defaultEndDate = $endDate;
  36. $this->earliestTransactionDate = $earliestDate;
  37. }
  38. public function refresh(): self
  39. {
  40. $this->buildReportDates();
  41. return $this;
  42. }
  43. public static function create(Company $company): self
  44. {
  45. return new static($company);
  46. }
  47. }