/**
     * Save the referral to the database.
     *
     * @param ReferralInterface $referral
     *
     * @return ReferralInterface
     */
    public function save(ReferralInterface $referral)
    {
        $result = $this->_query->run('
			INSERT INTO
				refer_a_friend_referral
				(
					reward_config_id,
					status,
					referrer_id,
					referred_email,
					referred_name,
					created_at,
					created_by,
					updated_at,
					updated_by
				)
			VALUES
				(
					:rewardConfigID?i,
					:status?s,
					:referrerID?i,
					:referredEmail?s,
					:referredName?s,
					:createdAt?d,
					:createdBy?in,
					:createdAt?d,
					:createdBy?in
				)
		', ['rewardConfigID' => $referral->getRewardConfig()->getID(), 'status' => $referral->getStatus(), 'referrerID' => $referral->getReferrer()->id, 'referredEmail' => $referral->getReferredEmail(), 'referredName' => $referral->getReferredName(), 'createdAt' => $referral->getCreatedAt() ?: new \DateTime(), 'createdBy' => $this->_currentUser->id]);
        $referral->setID($result->id());
        return $referral;
    }
    /**
     * Add query saving the referral to the database transaction
     *
     * @param ReferralInterface $referral
     */
    private function _addToTransaction(ReferralInterface $referral)
    {
        $this->_trans->add('
			UPDATE
				refer_a_friend_referral
			SET
				status         = :status?s,
				referrer_id    = :referrerID?i,
				referred_email = :referredEmail?s,
				updated_at     = :updatedAt?d,
				updated_by     = :updatedBy?in
			WHERE
				referral_id = :id?i
		', ['status' => $referral->getStatus(), 'referrerID' => $referral->getReferrer()->id, 'referredEmail' => $referral->getReferredEmail(), 'updatedAt' => new \DateTime(), 'updatedBy' => $this->_currentUser->id, 'id' => $referral->getID()]);
    }
 /**
  * {@inheritDoc}
  */
 public function isValid(ReferralInterface $referral)
 {
     return $referral->getReferredEmail() !== $referral->getReferrer()->email;
 }
 /**
  * {@inheritDoc}
  */
 public function isValid(ReferralInterface $referral)
 {
     $existing = $this->_loader->getByEmail($referral->getReferredEmail());
     return count($existing) <= 0;
 }
 /**
  * {@inheritDoc}
  */
 public function isValid(ReferralInterface $referral)
 {
     $users = $this->_userLoader->getByEmail($referral->getReferredEmail());
     return empty($users);
 }