-
Notifications
You must be signed in to change notification settings - Fork 193
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
86 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
<?php | ||
|
||
namespace Give\DonationForms; | ||
|
||
use Give\Framework\QueryBuilder\JoinQueryBuilder; | ||
use Give\Framework\QueryBuilder\QueryBuilder; | ||
|
||
/** | ||
* An opinionated Query Builder for GiveWP donations and meta fields. | ||
* | ||
* @unreleased | ||
* | ||
* Example usage: | ||
* (new DonationQuery) | ||
* ->form(1816) | ||
* ->between('2024-02-00', '2024-02-23') | ||
* ->sumIntendedAmount(); | ||
*/ | ||
class DonationQuery extends QueryBuilder | ||
{ | ||
/** | ||
* @unreleased | ||
*/ | ||
public function __construct() | ||
{ | ||
$this->from('posts', 'donation'); | ||
} | ||
|
||
/** | ||
* An opinionated join method for the donation meta table. | ||
* @unreleased | ||
*/ | ||
public function joinMeta($key, $alias) | ||
{ | ||
$this->join(function (JoinQueryBuilder $builder) use ($key, $alias) { | ||
$builder | ||
->leftJoin('give_donationmeta', $alias) | ||
->on('donation.ID', $alias . '.donation_id') | ||
->andOn($alias . '.meta_key', $key, true); | ||
}); | ||
return $this; | ||
} | ||
|
||
/** | ||
* An opinionated where method for the donation form ID meta field. | ||
* @unreleased | ||
*/ | ||
public function form($formId) | ||
{ | ||
$this->joinMeta('_give_payment_form_id', 'formId'); | ||
$this->where('formId.meta_value', $formId); | ||
return $this; | ||
} | ||
|
||
/** | ||
* An opinionated whereBetween method for the completed date meta field. | ||
* @unreleased | ||
*/ | ||
public function between($startDate, $endDate) | ||
{ | ||
$this->joinMeta('_give_completed_date', 'completed'); | ||
$this->whereBetween('completed.meta_value', $startDate, $endDate); | ||
return $this; | ||
} | ||
|
||
/** | ||
* Returns a calculated sum of the intended amounts (without recovered fees) for the donations. | ||
* @unreleased | ||
* @return int|float | ||
*/ | ||
public function sumIntendedAmount() | ||
{ | ||
$this->joinMeta('_give_payment_total', 'amount'); | ||
$this->joinMeta('_give_fee_donation_amount', 'intendedAmount'); | ||
return $this->sum( | ||
'COALESCE(intendedAmount.meta_value, amount.meta_value)' | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters