<?php
namespace Give\Subscriptions\DataTransferObjects;
use DateTime;
use Give\Framework\Support\Facades\DateTime\Temporal;
use Give\Framework\Support\ValueObjects\Money;
use Give\Subscriptions\Models\Subscription;
use Give\Subscriptions\ValueObjects\SubscriptionMode;
use Give\Subscriptions\ValueObjects\SubscriptionPeriod;
use Give\Subscriptions\ValueObjects\SubscriptionStatus;
/**
* Class SubscriptionObjectData
*
* @since 4.11.0 add campaign_id prop
* @since 2.19.6
*/
final class SubscriptionQueryData
{
/**
* @var int
*/
public $id;
/**
* @var DateTime
*/
public $createdAt;
/**
* @var DateTime
*/
public $renewsAt;
/**
* @var string
*/
public $status;
/**
* @var int
*/
public $donorId;
/**
* @var SubscriptionPeriod
*/
public $period;
/**
* @var string
*/
public $frequency;
/**
* @var int
*/
public $installments;
/**
* @var string
*/
public $transactionId;
/**
* @var SubscriptionMode
*/
public $mode;
/**
* @var Money
*/
public $amount;
/**
* @var Money
*/
public $feeAmountRecovered;
/**
* @var string
*/
public $gatewayId;
/**
* @var string
*/
public $gatewaySubscriptionId;
/**
* @var int
*/
public $donationFormId;
/**
* @var int
*/
public $campaignId;
/**
* Convert data from Subscription Object to Subscription Model
*
* @since 2.19.6
*/
public static function fromObject($subscriptionQueryObject): self
{
$self = new static();
$self->id = (int)$subscriptionQueryObject->id;
$self->createdAt = Temporal::toDateTime($subscriptionQueryObject->createdAt);
$self->renewsAt = isset($subscriptionQueryObject->renewsAt) ? Temporal::toDateTime(
$subscriptionQueryObject->renewsAt
) : null;
$self->donorId = (int)$subscriptionQueryObject->donorId;
$self->period = new SubscriptionPeriod($subscriptionQueryObject->period);
$self->frequency = (int)$subscriptionQueryObject->frequency;
$self->installments = (int)$subscriptionQueryObject->installments;
$self->transactionId = $subscriptionQueryObject->transactionId;
$self->mode = new SubscriptionMode($subscriptionQueryObject->mode);
$self->amount = Money::fromDecimal($subscriptionQueryObject->amount, $subscriptionQueryObject->currency ?? give_get_currency());
$self->feeAmountRecovered = Money::fromDecimal($subscriptionQueryObject->feeAmount,
$subscriptionQueryObject->currency ?? give_get_currency());
$self->status = new SubscriptionStatus($subscriptionQueryObject->status);
$self->gatewayId = $subscriptionQueryObject->gatewayId;
$self->gatewaySubscriptionId = $subscriptionQueryObject->gatewaySubscriptionId;
$self->donationFormId = (int)$subscriptionQueryObject->donationFormId;
$self->campaignId = (int)$subscriptionQueryObject->campaignId;
return $self;
}
/**
* Convert DTO to Subscription
*/
public function toSubscription(): Subscription
{
$attributes = get_object_vars($this);
return new Subscription($attributes);
}
}