fix some bug

This commit is contained in:
2026-07-01 22:27:51 +03:30
parent a69316e0de
commit e738d44667
8 changed files with 301 additions and 260 deletions
@@ -6,19 +6,15 @@ use App\DB\Te\TableEngine;
use App\Http\Controllers\SuperController;
use App\Models\Cnt;
use App\Models\Customer;
use App\Models\TransactionsAdmin;
use App\Models\Withdraw;
use Carbon\Carbon;
use Hekmatinasser\Verta\Verta;
use Illuminate\Http\Request;
use Rooyesh\Wallet\interfaces\TransactionInterface;
use Rooyesh\Wallet\interfaces\WalletInterface;
use Rooyesh\Wallet\models\Transaction;
use Rooyesh\Wallet\models\Wallet;
use App\Models\Setting;
use App\Services\AssetSummaryService;
use App\Services\BalanceReportService;
use App\Services\ConfigService;
use App\Services\ReferralGiftService;
use App\Services\WalletBalanceService;
use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
@@ -257,125 +253,13 @@ class CustomerController extends SuperController
$referrer
&& Customer::where('referral_to_id', $referrer->referral_id)->where('is_legal', '!=', 0)->count() < 4
) {
$gift_for_inviter = $this->Config('gift_for_referrer');
$gift_for_invited = $this->Config('gift_for_referral');
$companyName = $this->Config('name_fa');
$companyurl = $this->Config('app_url');
$referral_limit = Setting::where('key', 'referral_limit')->first();
$limitValue = $referral_limit->value ?? null;
$gift_permision = true;
if (
$referral_limit
&& $referral_limit->is_active
&& $limitValue !== null
&& $limitValue !== ''
&& is_numeric($limitValue)
) {
$total_referrals = Customer::where('referral_to_id', $referrer->referral_id)
->where('is_legal', '!=', 0)
->count();
$gift_permision = $total_referrals < (int) $limitValue;
}
if ($gift_permision && $gift_for_inviter > 0) {
// dd($gift_for_inviter > 0, $gift_for_invited > 0);
$Withdraw = Withdraw::create([
'user_id' => $customer->id,
'customer_id' => $referrer->id,
"cash" => 0,
"gold" => $gift_for_inviter,
'sts' => 5,
]);
$wallet_interface = new WalletInterface($referrer->id, 2);
new TransactionInterface($wallet_interface, $_inp = [
"cash" => 0,
"gold" => $gift_for_inviter,
'expire_at' => now(),
'active' => true,
'title' => 'پاداش بابت معرفی',
'withdraw_id' => $Withdraw->id,
'start_at' => now(),
], 8, true, false);
$transaction = Transaction::where('customer_id', $referrer->id)->latest()->first();
TransactionsAdmin::create([
'customer_id' => $customer->id,
'customer_to_id' => $referrer->id,
'user_id' => $customer->id,
'wallet' => null, // یا مقدار مناسب دیگری
'transaction_id' => $transaction->id,
'cash' => 0,
'note' => 'پاداش بابت معرفی',
'type' => 1, // یا مقدار مناسب دیگری
'gold' => $gift_for_inviter,
'balance_cash' => 0, // یا مقدار مناسب دیگری
'withdraw_id' => $Withdraw->id,
]);
if($this->Config('send_to_tahesab') == "true"){
try {
app(TahesabController::class)->referrerGoldReward(
$customer,
(float) $gift_for_inviter,
'پاداش بابت معرفی'
);
} catch (\Exception $e) {
report($e);
}
}
$currentGold = self::formatSmsGoldWeight((float) $wallet_interface->wallet->refresh()->gold);
$message = "سلام {$referrer->name} عزیز،\n\n{$gift_for_inviter} گرم طلا بابت معرفی {$customer->name} به حساب شما واریز شد.\nموجودی فعلی: {$currentGold} گرم.\n\nاطلاعات بیشتر: $companyurl\n\nبا احترام،\n$companyName";
$this->Send($referrer->mobile, $message);
}
if($gift_for_invited > 0 ){
$Withdraw = Withdraw::create([
'user_id' => $customer->id,
'customer_id' => $customer->id,
"cash" => 0,
"gold" => $gift_for_invited,
'sts' => 5,
]);
$wallet_interface = new WalletInterface($customer->id, 2);
new TransactionInterface($wallet_interface, $_inp = [
"cash" => 0,
"gold" => $gift_for_invited,
'expire_at' => now(),
'active' => true,
'title' => 'پاداش بابت ثبت نام',
'withdraw_id' => $Withdraw->id,
'start_at' => now(),
], 8, true, false);
$transaction = Transaction::where('customer_id', $customer->id)->latest()->first();
TransactionsAdmin::create([
'customer_id' => $customer->id,
'customer_to_id' => $customer->referal->id,
'user_id' => $customer->id,
'wallet' => null, // یا مقدار مناسب دیگری
'transaction_id' => $transaction->id,
'cash' => 0,
'note' => 'پاداش بابت ثبت نام',
'type' => 1, // یا مقدار مناسب دیگری
'gold' => (float)$gift_for_invited,
'balance_cash' => 0, // یا مقدار مناسب دیگری
'withdraw_id' => $Withdraw->id,
]);
if($this->Config('send_to_tahesab') == "true"){
try {
app(TahesabController::class)->goldReward([
'customer_id' => $customer->id,
'value' => $gift_for_invited,
'desc' => 'پاداش بابت ثبت نام',
]);
} catch (\Exception $e) {
report($e);
}
}
$currentGold = self::formatSmsGoldWeight((float) $wallet_interface->wallet->refresh()->gold);
$message = "سلام " . $customer->name . " عزیز،\n\n" . $gift_for_invited . " گرم طلا بابت ثبت نام " . " به حساب شما واریز شد.\n" . "موجودی فعلی: " . $currentGold . " گرم.\n\n" . "اطلاعات بیشتر: " . $companyurl . "\n\n" . "با احترام،\n" . $companyName;
$this->Send($customer->mobile, $message);
}
$gift_permision = app(ReferralGiftService::class)->resolveReferrerGiftPermission($referrer);
app(ReferralGiftService::class)->tryGiveOnRegistration(
$customer,
$referrer,
$gift_permision,
false
);
}
}
@@ -339,7 +339,8 @@ class DashboardController extends Controller
$response['fullPriceSood'] += $ord->total_fee;
$response['fullPriceKarmozd'] += $ord->service_charge_price;
}
$response['sumAll'] = $response['fullPriceM1']-$response['GiftsPrise'];
$response['totalTradingProfit'] = $response['fullPriceSood'] + $response['fullPriceKarmozd'];
$response['sumAll'] = $response['fullPriceM1'] - $response['GiftsPrise'];
return $response;
}
@@ -18,6 +18,7 @@ use Rooyesh\Wallet\models\Transaction;
use App\Models\Setting;
use App\Http\Controllers\Admin\TahesabController;
use App\Services\ConfigService;
use App\Services\ReferralGiftService;
use Illuminate\Support\Facades\Schema;
@@ -196,128 +197,14 @@ class CustomerController extends Controller
$customer->is_legal = 1;
$customer->save();
if ($this->Config('has_page_earn_money') == 'true') {
$gift_for_inviter = $this->Config('gift_for_referrer');
$gift_for_invited = $this->Config('gift_for_referral');
$companyName = $this->Config('name_fa');
$companyurl = $this->Config('app_url');
$referrer = $customer->referrer();
$gift_permision = true;
if ($referrer) {
$referral_limit = Setting::where('key', 'referral_limit')->first();
$limitValue = $referral_limit->value ?? null;
if (
$referral_limit
&& $referral_limit->is_active
&& $limitValue !== null
&& $limitValue !== ''
&& is_numeric($limitValue)
) {
$total_referrals = Customer::where('referral_to_id', $referrer->referral_id)
->where('is_legal', '!=', 0)
->count();
$gift_permision = $total_referrals < (int) $limitValue;
}
}
if ($referrer && $gift_permision && $gift_for_inviter > 0) {
// dd($gift_for_inviter > 0, $gift_for_invited > 0);
$Withdraw = Withdraw::create([
'user_id' => $customer->id,
'customer_id' => $referrer->id,
"cash" => 0,
"gold" => $gift_for_inviter,
'sts' => 5,
]);
$wallet_interface = new WalletInterface($referrer->id, 2);
new TransactionInterface($wallet_interface, $_inp = [
"cash" => 0,
"gold" => $gift_for_inviter,
'expire_at' => now(),
'active' => true,
'title' => 'پاداش بابت معرفی',
'withdraw_id' => $Withdraw->id,
'start_at' => now(),
], 8, true, false);
$transaction = Transaction::where('customer_id', $referrer->id)->latest()->first();
TransactionsAdmin::create([
'customer_id' => $customer->id,
'customer_to_id' => $referrer->id,
'user_id' => $customer->id,
'wallet' => null, // یا مقدار مناسب دیگری
'transaction_id' => $transaction->id,
'cash' => 0,
'note' => 'پاداش بابت معرفی',
'type' => 1, // یا مقدار مناسب دیگری
'gold' => $gift_for_inviter,
'balance_cash' => 0, // یا مقدار مناسب دیگری
'withdraw_id' => $Withdraw->id,
]);
if($this->Config('send_to_tahesab') == "true"){
try {
app(TahesabController::class)->referrerGoldReward(
$customer,
(float) $gift_for_inviter,
'پاداش بابت معرفی'
);
} catch (\Exception $e) {
report($e);
}
}
$currentGold = self::formatSmsGoldWeight((float) $wallet_interface->wallet->refresh()->gold);
$message = "سلام {$referrer->name} عزیز،\n\n{$gift_for_inviter} گرم طلا بابت معرفی {$customer->name} به حساب شما واریز شد.\nموجودی فعلی: {$currentGold} گرم.\n\nاطلاعات بیشتر: $companyurl\n\nبا احترام،\n$companyName";
$this->Send($referrer->mobile, $message);
}
if($gift_for_invited > 0 ){
$Withdraw = Withdraw::create([
'user_id' => $customer->id,
'customer_id' => $customer->id,
"cash" => 0,
"gold" => $gift_for_invited,
'sts' => 5,
]);
$wallet_interface = new WalletInterface($customer->id, 2);
new TransactionInterface($wallet_interface, $_inp = [
"cash" => 0,
"gold" => $gift_for_invited,
'expire_at' => now(),
'active' => true,
'title' => 'پاداش بابت ثبت نام',
'withdraw_id' => $Withdraw->id,
'start_at' => now(),
], 8, true, false);
$transaction = Transaction::where('customer_id', $customer->id)->latest()->first();
TransactionsAdmin::create([
'customer_id' => $customer->id,
'customer_to_id' => $customer->id,
'user_id' => $customer->id,
'wallet' => null, // یا مقدار مناسب دیگری
'transaction_id' => $transaction->id,
'cash' => 0,
'note' => 'پاداش بابت ثبت نام',
'type' => 1, // یا مقدار مناسب دیگری
'gold' => (float)$gift_for_invited,
'balance_cash' => 0, // یا مقدار مناسب دیگری
'withdraw_id' => $Withdraw->id,
]);
if($this->Config('send_to_tahesab') == "true"){
try {
app(TahesabController::class)->goldReward([
'customer_id' => $customer->id,
'value' => $gift_for_invited,
'desc' => 'پاداش بابت ثبت نام',
]);
} catch (\Exception $e) {
report($e);
}
}
$currentGold = self::formatSmsGoldWeight((float) $wallet_interface->wallet->refresh()->gold);
$message = "سلام " . $customer->name . " عزیز،\n\n" . $gift_for_invited . " گرم طلا بابت ثبت نام " . " به حساب شما واریز شد.\n" . "موجودی فعلی: " . $currentGold . " گرم.\n\n" . "اطلاعات بیشتر: " . $companyurl . "\n\n" . "با احترام،\n" . $companyName;
$this->Send($customer->mobile, $message);
}
$gift_permision = app(ReferralGiftService::class)->resolveReferrerGiftPermission($referrer);
app(ReferralGiftService::class)->tryGiveOnRegistration(
$customer,
$referrer,
$gift_permision,
true
);
}
} else {
if (isset($response['matched']) && $response['matched'] === false) {
@@ -26,6 +26,7 @@ use App\Models\Cnt;
use App\Services\MontzarService;
use App\Services\ConfigService;
use App\Services\ProductDisplayPriceService;
use App\Services\ReferralGiftService;
use App\Services\WalletBroadcastService;
+245
View File
@@ -0,0 +1,245 @@
<?php
namespace App\Services;
use App\Http\Controllers\Admin\TahesabController;
use App\Http\Controllers\Controller;
use App\Models\Customer;
use App\Models\Order;
use App\Models\Setting;
use App\Models\TransactionsAdmin;
use App\Models\Withdraw;
use Rooyesh\Wallet\interfaces\TransactionInterface;
use Rooyesh\Wallet\interfaces\WalletInterface;
use Rooyesh\Wallet\models\Transaction;
class ReferralGiftService
{
public function isDeferredToFirstOrder(): bool
{
return app(ConfigService::class)->getBool('referral_gift_on_first_order', false);
}
/**
* پاداش معرف/معرف‌شونده هنگام ثبت‌نام یا تأیید احراز — مگر اینکه به اولین سفارش موکول شده باشد.
*/
public function tryGiveOnRegistration(
Customer $customer,
?Customer $referrer,
bool $referrerGiftAllowed,
bool $allowInvitedGiftWithoutReferrer = true
): void {
if ($this->isDeferredToFirstOrder()) {
return;
}
$this->depositGifts($customer, $referrer, $referrerGiftAllowed, $allowInvitedGiftWithoutReferrer);
}
/**
* پاداش معرف/معرف‌شونده پس از اولین سفارش — فقط وقتی تنظیم referral_gift_on_first_order روشن است.
*/
public function tryGiveOnFirstOrder(Customer $customer): void
{
if (!$this->isDeferredToFirstOrder()) {
return;
}
$config = app(ConfigService::class);
if ($config->getString('has_page_earn_money', 'false') !== 'true') {
return;
}
if (Order::where('customer_id', $customer->id)->count() !== 1) {
return;
}
$referrer = $customer->referrer();
$referrerGiftAllowed = $this->resolveReferrerGiftPermission($referrer);
$this->depositGifts($customer, $referrer, $referrerGiftAllowed, true);
}
public function resolveReferrerGiftPermission(?Customer $referrer): bool
{
if ($referrer === null) {
return false;
}
$referralLimit = Setting::where('key', 'referral_limit')->first();
$limitValue = $referralLimit->value ?? null;
if (
$referralLimit
&& $referralLimit->is_active
&& $limitValue !== null
&& $limitValue !== ''
&& is_numeric($limitValue)
) {
$totalReferrals = Customer::where('referral_to_id', $referrer->referral_id)
->where('is_legal', '!=', 0)
->count();
return $totalReferrals < (int) $limitValue;
}
return true;
}
private function depositGifts(
Customer $customer,
?Customer $referrer,
bool $referrerGiftAllowed,
bool $allowInvitedGiftWithoutReferrer
): void {
$config = app(ConfigService::class);
$giftForInviter = (float) $config->get('gift_for_referrer', 0);
$giftForInvited = (float) $config->get('gift_for_referral', 0);
$companyName = $config->getString('name_fa');
$companyUrl = $config->getString('app_url');
if ($referrer && $referrerGiftAllowed && $giftForInviter > 0 && !$this->referrerGiftAlreadyGiven($customer, $referrer)) {
$this->giveReferrerGift($customer, $referrer, $giftForInviter, $companyName, $companyUrl, $config);
}
$canGiveInvited = $giftForInvited > 0
&& !$this->invitedGiftAlreadyGiven($customer)
&& ($allowInvitedGiftWithoutReferrer || $referrer !== null);
if ($canGiveInvited) {
$this->giveInvitedGift($customer, $giftForInvited, $companyName, $companyUrl, $config);
}
}
private function referrerGiftAlreadyGiven(Customer $invited, Customer $referrer): bool
{
return TransactionsAdmin::where('customer_id', $invited->id)
->where('customer_to_id', $referrer->id)
->where('note', 'پاداش بابت معرفی')
->exists();
}
private function invitedGiftAlreadyGiven(Customer $customer): bool
{
return TransactionsAdmin::where('customer_id', $customer->id)
->where('note', 'پاداش بابت ثبت نام')
->exists();
}
private function giveReferrerGift(
Customer $customer,
Customer $referrer,
float $giftForInviter,
string $companyName,
string $companyUrl,
ConfigService $config
): void {
$withdraw = Withdraw::create([
'user_id' => $customer->id,
'customer_id' => $referrer->id,
'cash' => 0,
'gold' => $giftForInviter,
'sts' => 5,
]);
$walletInterface = new WalletInterface($referrer->id, 2);
new TransactionInterface($walletInterface, [
'cash' => 0,
'gold' => $giftForInviter,
'expire_at' => now(),
'active' => true,
'title' => 'پاداش بابت معرفی',
'withdraw_id' => $withdraw->id,
'start_at' => now(),
], 8, true, false);
$transaction = Transaction::where('customer_id', $referrer->id)->latest()->first();
TransactionsAdmin::create([
'customer_id' => $customer->id,
'customer_to_id' => $referrer->id,
'user_id' => $customer->id,
'wallet' => null,
'transaction_id' => $transaction->id,
'cash' => 0,
'note' => 'پاداش بابت معرفی',
'type' => 1,
'gold' => $giftForInviter,
'balance_cash' => 0,
'withdraw_id' => $withdraw->id,
]);
if ($config->getString('send_to_tahesab', 'false') === 'true') {
try {
app(TahesabController::class)->referrerGoldReward(
$customer,
$giftForInviter,
'پاداش بابت معرفی'
);
} catch (\Exception $e) {
report($e);
}
}
$currentGold = Controller::formatSmsGoldWeight((float) $walletInterface->wallet->refresh()->gold);
$message = "سلام {$referrer->name} عزیز،\n\n{$giftForInviter} گرم طلا بابت معرفی {$customer->name} به حساب شما واریز شد.\nموجودی فعلی: {$currentGold} گرم.\n\nاطلاعات بیشتر: {$companyUrl}\n\nبا احترام،\n{$companyName}";
Controller::Send($referrer->mobile, $message);
}
private function giveInvitedGift(
Customer $customer,
float $giftForInvited,
string $companyName,
string $companyUrl,
ConfigService $config
): void {
$withdraw = Withdraw::create([
'user_id' => $customer->id,
'customer_id' => $customer->id,
'cash' => 0,
'gold' => $giftForInvited,
'sts' => 5,
]);
$walletInterface = new WalletInterface($customer->id, 2);
new TransactionInterface($walletInterface, [
'cash' => 0,
'gold' => $giftForInvited,
'expire_at' => now(),
'active' => true,
'title' => 'پاداش بابت ثبت نام',
'withdraw_id' => $withdraw->id,
'start_at' => now(),
], 8, true, false);
$transaction = Transaction::where('customer_id', $customer->id)->latest()->first();
TransactionsAdmin::create([
'customer_id' => $customer->id,
'customer_to_id' => $customer->id,
'user_id' => $customer->id,
'wallet' => null,
'transaction_id' => $transaction->id,
'cash' => 0,
'note' => 'پاداش بابت ثبت نام',
'type' => 1,
'gold' => $giftForInvited,
'balance_cash' => 0,
'withdraw_id' => $withdraw->id,
]);
if ($config->getString('send_to_tahesab', 'false') === 'true') {
try {
app(TahesabController::class)->goldReward([
'customer_id' => $customer->id,
'value' => $giftForInvited,
'desc' => 'پاداش بابت ثبت نام',
]);
} catch (\Exception $e) {
report($e);
}
}
$currentGold = Controller::formatSmsGoldWeight((float) $walletInterface->wallet->refresh()->gold);
$message = "سلام {$customer->name} عزیز،\n\n{$giftForInvited} گرم طلا بابت ثبت نام به حساب شما واریز شد.\nموجودی فعلی: {$currentGold} گرم.\n\nاطلاعات بیشتر: {$companyUrl}\n\nبا احترام،\n{$companyName}";
Controller::Send($customer->mobile, $message);
}
}