|
Server : Apache/2.4.41 (Ubuntu) System : Linux vmi1525618.contaboserver.net 5.4.0-105-generic #119-Ubuntu SMP Mon Mar 7 18:49:24 UTC 2022 x86_64 User : www-data ( 33) PHP Version : 8.2.12 Disable Function : NONE Directory : /var/www/lecturebazaar.com/app/Mixins/RegistrationBonus/ |
Upload File : |
<?php
namespace App\Mixins\RegistrationBonus;
use App\Models\Accounting;
use App\Models\Affiliate;
use App\Models\Sale;
use App\User;
use Illuminate\Support\Facades\DB;
class RegistrationBonusAccounting
{
public function __construct()
{
}
public function storeRegistrationBonusInstantly($user)
{
$registrationBonusSettings = getRegistrationBonusSettings();
if (!$user->enable_registration_bonus or empty($registrationBonusSettings['status']) or empty($registrationBonusSettings['registration_bonus_amount'])) {
return false;
}
$bonusAmount = !empty($user->registration_bonus_amount) ? $user->registration_bonus_amount : $registrationBonusSettings['registration_bonus_amount'];
$bonusWallet = $registrationBonusSettings['bonus_wallet'];
$typeAccount = ($bonusWallet == 'income_wallet') ? Accounting::$income : Accounting::$asset;
if (!empty($registrationBonusSettings['unlock_registration_bonus_instantly'])) {
// As soon as the user registers, the bonus will be activated.
Accounting::createRegistrationBonusUserAmountAccounting($user->id, $bonusAmount, $typeAccount);
}
}
public function storeRegistrationBonus($user)
{
$registrationBonusSettings = getRegistrationBonusSettings();
if (!$user->enable_registration_bonus or empty($registrationBonusSettings['status']) or empty($registrationBonusSettings['registration_bonus_amount'])) {
return false;
}
$bonusAmount = !empty($user->registration_bonus_amount) ? $user->registration_bonus_amount : $registrationBonusSettings['registration_bonus_amount'];
$bonusWallet = $registrationBonusSettings['bonus_wallet'];
$typeAccount = ($bonusWallet == 'income_wallet') ? Accounting::$income : Accounting::$asset;
if (empty($registrationBonusSettings['unlock_registration_bonus_instantly'])) {
$numberOfReferredUsers = 0; // How many people must register through the link or individual code to unlock the prize
$purchaseAmountForUnlockingBonus = 0;
$checkJustHasPurchase = false;
if (!empty($registrationBonusSettings['unlock_registration_bonus_with_referral']) and !empty($registrationBonusSettings['number_of_referred_users'])) {
$numberOfReferredUsers = $registrationBonusSettings['number_of_referred_users'];
}
if (!empty($registrationBonusSettings['enable_referred_users_purchase']) and !empty($registrationBonusSettings['purchase_amount_for_unlocking_bonus'])) {
$purchaseAmountForUnlockingBonus = $registrationBonusSettings['purchase_amount_for_unlocking_bonus'];
/*
* Users who are referred by the individual link must buy that amount in order for the condition of money release to be established
* (this amount is calculated separately for each user).
* Also, if this field is empty, it means that the amount is not a criterion for us,
* the only thing that matters is that the user has made a purchase.
* with any amount (the amount charged to the purchase account is not taken into account)
* */
} elseif (!empty($registrationBonusSettings['enable_referred_users_purchase'])) {
$checkJustHasPurchase = true;
}
$unlockedBonus = true;
if (!empty($numberOfReferredUsers)) {
$referredUsersCount = Affiliate::query()->where('affiliate_user_id', $user->id)->count();
if ($referredUsersCount < $numberOfReferredUsers) {
$unlockedBonus = false;
}
if ($unlockedBonus and (!empty($purchaseAmountForUnlockingBonus) or $checkJustHasPurchase)) {
$referredUsersId = Affiliate::query()->where('affiliate_user_id', $user->id)
->pluck('referred_user_id')
->toArray();
if (!empty($referredUsersId)) {
$sales = Sale::query()->select('buyer_id', DB::raw('sum(total_amount) as totalAmount'))
->whereIn('buyer_id', $referredUsersId)
->whereNull('refund_at')
->groupBy('buyer_id')
->orderBy('totalAmount', 'desc')
->get();
$reachedCount = 0;
foreach ($sales as $sale) {
if ($checkJustHasPurchase and $sale->totalAmount > 0) {
$reachedCount += 1;
} else if (!empty($purchaseAmountForUnlockingBonus) and $sale->totalAmount >= $purchaseAmountForUnlockingBonus) {
$reachedCount += 1;
}
}
if ($reachedCount < $numberOfReferredUsers) {
$unlockedBonus = false;
}
} else {
$unlockedBonus = false;
}
}
} else {
$unlockedBonus = false;
}
if ($unlockedBonus) {
Accounting::createRegistrationBonusUserAmountAccounting($user->id, $bonusAmount, $typeAccount);
$notifyOptions = [
'[u.name]' => $user->full_name,
'[amount]' => handlePrice($bonusAmount),
];
sendNotification("registration_bonus_unlocked", $notifyOptions, $user->id);
sendNotification("registration_bonus_unlocked_for_admin", $notifyOptions, 1);
}
}
}
public function checkBonusAfterSale($buyerId)
{
$checkReferred = Affiliate::query()
->where('referred_user_id', $buyerId)
->first();
if (!empty($checkReferred)) {
$affiliateUser = User::query()->where('id', $checkReferred->affiliate_user_id)->first();
if (!empty($affiliateUser)) {
$this->storeRegistrationBonus($affiliateUser);
}
}
}
}