Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
kjohnson committed Apr 30, 2024
1 parent 3441bf7 commit c4e4fd0
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 11 deletions.
20 changes: 19 additions & 1 deletion src/DonationForms/DataTransferObjects/DonationFormGoalData.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Give\DonationForms\Properties\FormSettings;
use Give\DonationForms\Repositories\DonationFormRepository;
use Give\DonationForms\ValueObjects\GoalProgressType;
use Give\DonationForms\ValueObjects\GoalType;
use Give\Framework\Support\Contracts\Arrayable;

Expand Down Expand Up @@ -32,6 +33,18 @@ class DonationFormGoalData implements Arrayable
* @var int
*/
public $targetAmount;
/**
* @var GoalProgressType
*/
public $goalProgressType;
/**
* @var string|null
*/
public $goalStartDate;
/**
* @var string|null
*/
public $goalEndDate;

/**
* @since 3.0.0
Expand All @@ -43,6 +56,9 @@ public function __construct(int $formId, FormSettings $formSettings)
$this->isEnabled = $formSettings->enableDonationGoal ?? false;
$this->goalType = $formSettings->goalType ?? GoalType::AMOUNT();
$this->targetAmount = $this->formSettings->goalAmount ?? 0;
$this->goalProgressType = $this->formSettings->goalProgressType ?? GoalProgressType::ALL_TIME();
$this->goalStartDate = $this->formSettings->goalStartDate ?? null;
$this->goalEndDate = $this->formSettings->goalEndDate ?? null;
}

/**
Expand All @@ -68,7 +84,9 @@ public function getCurrentAmount()
return $donationFormRepository->getTotalNumberOfDonorsFromSubscriptions($this->formId);
case GoalType::AMOUNT():
default:
return $donationFormRepository->getTotalRevenue($this->formId);
return $this->goalProgressType->isAllTime()
? $donationFormRepository->getTotalRevenue($this->formId)
: $donationFormRepository->getTotalRevenueForDateRange($this->formId,$this->goalStartDate, $this->goalEndDate);
endswitch;
}

Expand Down
25 changes: 21 additions & 4 deletions src/DonationForms/Repositories/DonationFormRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -394,10 +394,16 @@ public function getTotalNumberOfDonorsFromSubscriptions(int $formId): int
*/
public function getTotalNumberOfDonations(int $formId): int
{
return DB::table('posts')
->leftJoin('give_donationmeta', 'ID', 'donation_id')
->where('meta_key', DonationMetaKeys::FORM_ID)
->where('meta_value', $formId)
return (new DonationQuery)
->form($formId)
->count();
}

public function getTotalNumberOfDonationsForDateRange(int $formId, string $startDate, string $endDate): int
{
return (new DonationQuery)
->form($formId)
->between($startDate, $endDate)
->count();
}

Expand All @@ -422,6 +428,17 @@ public function getTotalRevenue(int $formId): int
->sumIntendedAmount();
}

/**
* @unreleased
*/
public function getTotalRevenueForDateRange(int $formId, string $startDate, string $endDate): int
{
return (int) (new DonationQuery)
->form($formId)
->between($startDate, $endDate)
->sumIntendedAmount();
}

/**
* @since 3.0.0
* @return int|float
Expand Down
17 changes: 11 additions & 6 deletions src/DonationForms/ViewModels/DonationFormViewModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Give\DonationForms\Actions\GenerateDonateRouteUrl;
use Give\DonationForms\Actions\GenerateDonationFormValidationRouteUrl;
use Give\DonationForms\DataTransferObjects\DonationFormGoalData;
use Give\DonationForms\DonationQuery;
use Give\DonationForms\Properties\FormSettings;
use Give\DonationForms\Repositories\DonationFormRepository;
use Give\DonationForms\ValueObjects\GoalType;
Expand Down Expand Up @@ -181,14 +182,18 @@ private function formStatsData(): array
{
$goalType = $this->goalType();

$totalRevenue = $this->getTotalRevenue($goalType);
$totalCountValue = $this->getTotalCountValue($goalType);
$totalCountLabel = $this->getCountLabel($goalType);
$donationQuery = (new DonationQuery)->form($this->donationFormId);

if($this->formSettings->goalProgressType->isCustom()) {
$donationQuery->between($this->formSettings->goalStartDate, $this->formSettings->goalEndDate);
}

return [
'totalRevenue' => $totalRevenue,
'totalCountValue' => $totalCountValue,
'totalCountLabel' => $totalCountLabel,
'totalRevenue' => $donationQuery->sumIntendedAmount(),
'totalCountValue' => $goalType->isDonations() || $goalType->isAmount()
? $donationQuery->count()
: $this->getTotalCountValue($goalType),
'totalCountLabel' => $this->getCountLabel($goalType),
];
}

Expand Down

0 comments on commit c4e4fd0

Please sign in to comment.