From e738d446676efa093a8a38a287e44f6be02a9f2a Mon Sep 17 00:00:00 2001 From: adonis Date: Wed, 1 Jul 2026 22:27:51 +0330 Subject: [PATCH] fix some bug --- .../Controllers/Admin/CustomerController.php | 132 +--------- .../Controllers/Admin/DashboardController.php | 3 +- .../Customer/CustomerController.php | 129 +-------- .../Single/SingleOrderController.php | 1 + app/Services/ReferralGiftService.php | 245 ++++++++++++++++++ database/sql/deploy_settings_const.sql | 28 +- ...ngs_const_preserve_value_sync_can_edit.sql | 17 +- database/sql/fee_deduct_from_gold_patch.sql | 6 +- 8 files changed, 301 insertions(+), 260 deletions(-) create mode 100644 app/Services/ReferralGiftService.php diff --git a/app/Http/Controllers/Admin/CustomerController.php b/app/Http/Controllers/Admin/CustomerController.php index f96bafc..890a675 100644 --- a/app/Http/Controllers/Admin/CustomerController.php +++ b/app/Http/Controllers/Admin/CustomerController.php @@ -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 + ); } } diff --git a/app/Http/Controllers/Admin/DashboardController.php b/app/Http/Controllers/Admin/DashboardController.php index 028ad83..24ed2e3 100644 --- a/app/Http/Controllers/Admin/DashboardController.php +++ b/app/Http/Controllers/Admin/DashboardController.php @@ -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; } diff --git a/app/Http/Controllers/Customer/CustomerController.php b/app/Http/Controllers/Customer/CustomerController.php index 49ab3a8..56d9c13 100644 --- a/app/Http/Controllers/Customer/CustomerController.php +++ b/app/Http/Controllers/Customer/CustomerController.php @@ -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) { diff --git a/app/Http/Controllers/Single/SingleOrderController.php b/app/Http/Controllers/Single/SingleOrderController.php index e0b0283..7849399 100644 --- a/app/Http/Controllers/Single/SingleOrderController.php +++ b/app/Http/Controllers/Single/SingleOrderController.php @@ -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; diff --git a/app/Services/ReferralGiftService.php b/app/Services/ReferralGiftService.php new file mode 100644 index 0000000..e41aaad --- /dev/null +++ b/app/Services/ReferralGiftService.php @@ -0,0 +1,245 @@ +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); + } +} diff --git a/database/sql/deploy_settings_const.sql b/database/sql/deploy_settings_const.sql index d32b69d..f21db71 100644 --- a/database/sql/deploy_settings_const.sql +++ b/database/sql/deploy_settings_const.sql @@ -274,6 +274,11 @@ INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `de SELECT 'register_referral_bonus_message', 'false', 'پیام پاداش در SMS ثبت‌نام', 1, 1, NULL WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'register_referral_bonus_message' LIMIT 1); +-- default: false — value ردیف موجود در deploy عوض نمی‌شود (فقط INSERT اگر کلید نبود) +INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`) +SELECT 'referral_gift_on_first_order', 'false', 'پاداش معرف پس از اولین سفارش', 1, 1, NULL +WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'referral_gift_on_first_order' LIMIT 1); + INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`) SELECT 'referral_limit', '', 'محدودیت دعوت', 1, 1, NULL WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'referral_limit' LIMIT 1); @@ -421,6 +426,7 @@ INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `de SELECT 'fee_service_charge_percentage', '0.005', 'درصد کارمزد سفارش', 1, 1, NULL, 'number' WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'fee_service_charge_percentage' LIMIT 1); +-- fee_deduct_from_gold: value پیش‌فرض false فقط در INSERT اولیه؛ اجرای مجدد value/is_active را overwrite نمی‌کند INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`) SELECT 'fee_deduct_from_gold', 'false', 'کارمزد از مقدار طلا', 1, 1, NULL, 'switch' WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'fee_deduct_from_gold' LIMIT 1); @@ -598,11 +604,13 @@ UPDATE `settings` SET `type` = 'switch' WHERE `key` IN ( 'chart_use_local_data', 'jibit_verification', 'register_jibit_verify', 'open_register', 'auto_active_customer', 'close_price', 'show_last_price', + 'fee_deduct_from_gold', 'send_to_tahesab', 'profit_gold_api_enabled', 'payping_round_toman', 'payping_strict_failed_withdraw', 'has_page_earn_money', 'charge_notif', 'group_sms', 'montzar_closed', 'montzar_open_buy', 'montzar_open_sell', 'payping_fin_sync_enabled', 'external_order_api_enabled', 'is_store', 'wss_enabled', 'register_referral_sms_to_referrer', 'register_referral_bonus_message', + 'referral_gift_on_first_order', 'banner_enabled' ); @@ -695,7 +703,7 @@ SELECT 'unit', '', 'واحد وزن دارایی و معاملات', 1, 1, WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'unit' LIMIT 1); INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`) -SELECT 'main_wallet_products', '13', 'محصولات متصل به کیف اصلی', 1, 1, +SELECT 'main_wallet_products', '13', 'محصولات متصل به کیف اصلی', 0, 1, 'محصولاتی که موجودی‌شان از کیف طلای اصلی خوانده می‌شود. چند محصول با کاما. پیش‌فرض: 13' WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'main_wallet_products' LIMIT 1); @@ -775,7 +783,7 @@ UPDATE `settings` SET WHERE `key` = 'referral_id'; UPDATE `settings` SET `type` = 'switch' -WHERE `key` IN ('register_referral_sms_to_referrer', 'register_referral_bonus_message'); +WHERE `key` IN ('register_referral_sms_to_referrer', 'register_referral_bonus_message', 'referral_gift_on_first_order'); UPDATE `settings` SET `type` = 'switch', @@ -892,7 +900,10 @@ UPDATE `settings` SET `description` = 'اختلاف پایه (ریال) بین UPDATE `settings` SET `description` = 'مبلغ اضافه (ریال) روی قیمت پایه برای سمت خرید. خالی = استفاده از «اختلاف پایه».' WHERE `key` = 'buy_fee'; UPDATE `settings` SET `description` = 'مبلغ کسر (ریال) از قیمت پایه برای سمت فروش. خالی = استفاده از «اختلاف پایه».' WHERE `key` = 'sell_fee'; UPDATE `settings` SET `description` = 'درصد کارمزد هر سفارش از مبلغ معامله (اعشاری؛ مثلاً ۰٫۰۰۵ یعنی نیم در هزار).' WHERE `key` = 'fee_service_charge_percentage'; -UPDATE `settings` SET `description` = 'روشن: کارمزد از مقدار طلا کسر می‌شود — در فروش مبلغ ریالی دقیق واریز می‌شود. خاموش: کارمزد از ریال فروش کم می‌شود (رفتار قبلی).' WHERE `key` = 'fee_deduct_from_gold'; +UPDATE `settings` SET + `type` = 'switch', + `description` = 'روشن: کارمزد از مقدار طلا کسر می‌شود — در فروش مبلغ ریالی دقیق واریز می‌شود. خاموش: کارمزد از ریال فروش کم می‌شود (رفتار قبلی).' +WHERE `key` = 'fee_deduct_from_gold'; UPDATE `settings` SET `description` = 'تعداد اولین سفارش‌های هر کاربر که از کارمزد معاف می‌شوند. ۰ = غیرفعال.' WHERE `key` = 'fee_free'; UPDATE `settings` SET `description` = 'حداقل مبلغ درخواست برداشت وجه (ریال). درخواست‌های کمتر رد می‌شوند.' WHERE `key` = 'min_withdraw'; UPDATE `settings` SET `description` = 'حداقل مبلغ اولین خرید هر کاربر (ریال). برای فعال‌سازی کیف یا احراز سطح اول استفاده می‌شود.' WHERE `key` = 'min_first_buy'; @@ -912,6 +923,7 @@ UPDATE `settings` SET `description` = 'مقدار پاداش (معمولاً و UPDATE `settings` SET `description` = 'مقدار پاداش (معمولاً وزن فلز) که به کاربر تازه‌ثبت‌نام‌شده (معرف‌شونده) داده می‌شود. ۰ = بدون پاداش.' WHERE `key` = 'gift_for_referral'; UPDATE `settings` SET `description` = 'روشن: پس از ثبت‌نام کاربر جدید، پیامک اطلاع‌رسانی برای معرف ارسال می‌شود.' WHERE `key` = 'register_referral_sms_to_referrer'; UPDATE `settings` SET `description` = 'روشن: متن پاداش معرف در پیامک خوش‌آمد ثبت‌نام گنجانده می‌شود.' WHERE `key` = 'register_referral_bonus_message'; +UPDATE `settings` SET `description` = 'روشن: پاداش معرف (gift_for_referrer) و پاداش معرف‌شونده (gift_for_referral) پس از اولین سفارش معرف‌شونده واریز می‌شود؛ خاموش = واریز هنگام ثبت‌نام/تأیید احراز (رفتار قبلی).' WHERE `key` = 'referral_gift_on_first_order'; UPDATE `settings` SET `description` = 'حداکثر تعداد دعوت‌های مجاز برای هر کاربر. خالی = بدون محدودیت.' WHERE `key` = 'referral_limit'; UPDATE `settings` SET `description` = 'مبلغ یا مقدار پاداش معرف (متن آزاد — بسته به پیاده‌سازی پیامک/اعتبار). برای نمایش در پیام‌ها.' WHERE `key` = 'referral_bonus_amount'; UPDATE `settings` SET `description` = 'روشن: تطبیق شماره کارت بانکی کاربر با سرویس احراز هویت جیبیت هنگام ثبت/ویرایش کارت.' WHERE `key` = 'jibit_verification'; @@ -975,7 +987,7 @@ UPDATE `settings` SET `description` = 'روشن: امکان ارسال پیام UPDATE `settings` SET `description` = 'محصولاتی که موجودی‌شان از کیف طلای اصلی خوانده می‌شود. چند محصول با کاما. پیش‌فرض: 13' WHERE `key` = 'main_wallet_products'; UPDATE `settings` SET `value` = '13' WHERE `key` = 'main_wallet_products' AND TRIM(COALESCE(`value`, '')) = ''; -UPDATE `settings` SET `can_edit` = 1 WHERE `key` = 'main_wallet_products'; +UPDATE `settings` SET `can_edit` = 0 WHERE `key` = 'main_wallet_products'; UPDATE `settings` SET `description` = 'روشن: API محاسبه سود طلا فعال است. در اکثر نصب‌ها خاموش می‌ماند.' WHERE `key` = 'profit_gold_api_enabled'; -- --------------------------------------------------------------------------- @@ -1090,6 +1102,7 @@ UPDATE `settings` SET `title_fa` = 'محدودیت دعوت' WHERE `key` = 'refe UPDATE `settings` SET `title_fa` = 'تأیید کدملی/موبایل در ثبت‌نام' WHERE `key` = 'register_jibit_verify'; UPDATE `settings` SET `title_fa` = 'پیام پاداش در SMS ثبت‌نام' WHERE `key` = 'register_referral_bonus_message'; UPDATE `settings` SET `title_fa` = 'SMS به معرف هنگام ثبت‌نام' WHERE `key` = 'register_referral_sms_to_referrer'; +UPDATE `settings` SET `title_fa` = 'پاداش معرف پس از اولین سفارش' WHERE `key` = 'referral_gift_on_first_order'; UPDATE `settings` SET `title_fa` = 'سود فروش نمایش' WHERE `key` = 'sell_fee'; UPDATE `settings` SET `title_fa` = 'ارسال به ته‌حساب' WHERE `key` = 'send_to_tahesab'; UPDATE `settings` SET `title_fa` = 'آدرس API سرور' WHERE `key` = 'server_url'; @@ -1131,7 +1144,7 @@ UPDATE `settings` SET `can_edit` = 0 WHERE `key` IN ( 'has_page_earn_money', 'is_store', 'logo_login', 'logo_register', 'title_pwa', 'title_fav', - 'main_product', 'metal_type', 'main_metal', + 'main_product', 'main_wallet_products', 'metal_type', 'main_metal', 'montify_name', 'montzar_base_url', 'montzar_closed', 'montzar_diff', 'montzar_last_product_log', 'montzar_live_price', 'montzar_mazaneh', @@ -1158,17 +1171,16 @@ UPDATE `settings` SET `can_edit` = 1 WHERE `key` IN ( 'auto_active_customer', 'balance_report_exclude_customer_id', 'buy_fee', 'charge_notif', 'close_price', 'deposit_sms_support_number', 'endDay', - 'fee_free', 'fee_service_charge_percentage', 'fee_single', + 'fee_deduct_from_gold', 'fee_free', 'fee_service_charge_percentage', 'fee_single', 'gift_for_referral', 'gift_for_referrer', 'invite_link_text', 'jibit_verification', 'main_product_price', - 'main_wallet_products', 'min_first_buy', 'min_withdraw', 'minimum_sell', 'montzar_mobile', 'montzar_open_buy', 'montzar_open_sell', 'montzar_password', 'montzar_price', 'montzar_product_id', 'open_register', - 'referral_bonus_amount', 'referral_id', 'referral_limit', + 'referral_bonus_amount', 'referral_id', 'referral_limit', 'referral_gift_on_first_order', 'register_jibit_verify', 'register_referral_bonus_message', 'register_referral_sms_to_referrer', 'sell_fee', 'show_last_price', 'startDay', 'support_messenger', 'support_messenger_id', 'support_messenger_text', diff --git a/database/sql/deploy_settings_const_preserve_value_sync_can_edit.sql b/database/sql/deploy_settings_const_preserve_value_sync_can_edit.sql index 67f5a4d..1f7d12b 100644 --- a/database/sql/deploy_settings_const_preserve_value_sync_can_edit.sql +++ b/database/sql/deploy_settings_const_preserve_value_sync_can_edit.sql @@ -270,6 +270,11 @@ INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `de SELECT 'register_referral_bonus_message', 'false', 'پیام پاداش در SMS ثبت‌نام', 1, 1, NULL WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'register_referral_bonus_message' LIMIT 1); +-- default: false — value ردیف موجود در deploy عوض نمی‌شود (فقط INSERT اگر کلید نبود) +INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`) +SELECT 'referral_gift_on_first_order', 'false', 'پاداش معرف پس از اولین سفارش', 1, 1, NULL +WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'referral_gift_on_first_order' LIMIT 1); + INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`) SELECT 'referral_limit', '', 'محدودیت دعوت', 1, 1, NULL WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'referral_limit' LIMIT 1); @@ -419,6 +424,7 @@ INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `de SELECT 'fee_service_charge_percentage', '0.005', 'درصد کارمزد سفارش', 1, 1, NULL, 'number' WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'fee_service_charge_percentage' LIMIT 1); +-- fee_deduct_from_gold: value پیش‌فرض false فقط در INSERT اولیه؛ اجرای مجدد value/is_active را overwrite نمی‌کند INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`) SELECT 'fee_deduct_from_gold', 'false', 'کارمزد از مقدار طلا', 1, 1, NULL, 'switch' WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'fee_deduct_from_gold' LIMIT 1); @@ -595,11 +601,13 @@ UPDATE `settings` SET `type` = 'switch' WHERE `key` IN ( 'chart_use_local_data', 'jibit_verification', 'register_jibit_verify', 'open_register', 'auto_active_customer', 'close_price', 'show_last_price', + 'fee_deduct_from_gold', 'send_to_tahesab', 'profit_gold_api_enabled', 'payping_round_toman', 'payping_strict_failed_withdraw', 'has_page_earn_money', 'charge_notif', 'group_sms', 'montzar_closed', 'montzar_open_buy', 'montzar_open_sell', 'payping_fin_sync_enabled', 'external_order_api_enabled', 'is_store', 'wss_enabled', - 'register_referral_sms_to_referrer', 'register_referral_bonus_message' + 'register_referral_sms_to_referrer', 'register_referral_bonus_message', + 'referral_gift_on_first_order' ); -- price (مبالغ ریالی) @@ -690,7 +698,7 @@ SELECT 'unit', '', 'واحد وزن دارایی و معاملات', 1, 1, WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'unit' LIMIT 1); INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`) -SELECT 'main_wallet_products', '13', 'محصولات متصل به کیف اصلی', 1, 1, +SELECT 'main_wallet_products', '13', 'محصولات متصل به کیف اصلی', 0, 1, 'محصولاتی که موجودی‌شان از کیف طلای اصلی خوانده می‌شود. چند محصول با کاما. پیش‌فرض: 13' WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'main_wallet_products' LIMIT 1); @@ -768,7 +776,7 @@ UPDATE `settings` SET WHERE `key` = 'referral_id'; UPDATE `settings` SET `type` = 'switch' -WHERE `key` IN ('register_referral_sms_to_referrer', 'register_referral_bonus_message'); +WHERE `key` IN ('register_referral_sms_to_referrer', 'register_referral_bonus_message', 'referral_gift_on_first_order'); UPDATE `settings` SET `type` = 'switch', @@ -939,6 +947,7 @@ UPDATE `settings` SET `description` = 'مقدار پاداش (معمولاً و UPDATE `settings` SET `description` = 'مقدار پاداش (معمولاً وزن فلز) که به کاربر تازه‌ثبت‌نام‌شده (معرف‌شونده) داده می‌شود. ۰ = بدون پاداش.' WHERE `key` = 'gift_for_referral'; UPDATE `settings` SET `description` = 'روشن: پس از ثبت‌نام کاربر جدید، پیامک اطلاع‌رسانی برای معرف ارسال می‌شود.' WHERE `key` = 'register_referral_sms_to_referrer'; UPDATE `settings` SET `description` = 'روشن: متن پاداش معرف در پیامک خوش‌آمد ثبت‌نام گنجانده می‌شود.' WHERE `key` = 'register_referral_bonus_message'; +UPDATE `settings` SET `description` = 'روشن: پاداش معرف (gift_for_referrer) و پاداش معرف‌شونده (gift_for_referral) پس از اولین سفارش معرف‌شونده واریز می‌شود؛ خاموش = واریز هنگام ثبت‌نام/تأیید احراز (رفتار قبلی).' WHERE `key` = 'referral_gift_on_first_order'; UPDATE `settings` SET `description` = 'حداکثر تعداد دعوت‌های مجاز برای هر کاربر. خالی = بدون محدودیت.' WHERE `key` = 'referral_limit'; UPDATE `settings` SET `description` = 'مبلغ یا مقدار پاداش معرف (متن آزاد — بسته به پیاده‌سازی پیامک/اعتبار). برای نمایش در پیام‌ها.' WHERE `key` = 'referral_bonus_amount'; UPDATE `settings` SET `description` = 'روشن: تطبیق شماره کارت بانکی کاربر با سرویس احراز هویت جیبیت هنگام ثبت/ویرایش کارت.' WHERE `key` = 'jibit_verification'; @@ -999,7 +1008,7 @@ UPDATE `settings` SET `description` = 'روشن: امکان ارسال پیام UPDATE `settings` SET `description` = 'محصولاتی که موجودی‌شان از کیف طلای اصلی خوانده می‌شود. چند محصول با کاما. پیش‌فرض: 13' WHERE `key` = 'main_wallet_products'; UPDATE `settings` SET `value` = '13' WHERE `key` = 'main_wallet_products' AND TRIM(COALESCE(`value`, '')) = ''; -UPDATE `settings` SET `can_edit` = 1 WHERE `key` = 'main_wallet_products'; +UPDATE `settings` SET `can_edit` = 0 WHERE `key` = 'main_wallet_products'; UPDATE `settings` SET `description` = 'روشن: API محاسبه سود طلا فعال است. در اکثر نصب‌ها خاموش می‌ماند.' WHERE `key` = 'profit_gold_api_enabled'; -- --------------------------------------------------------------------------- diff --git a/database/sql/fee_deduct_from_gold_patch.sql b/database/sql/fee_deduct_from_gold_patch.sql index 3ea7590..73f6246 100644 --- a/database/sql/fee_deduct_from_gold_patch.sql +++ b/database/sql/fee_deduct_from_gold_patch.sql @@ -1,5 +1,7 @@ -- سوییچ «کارمزد از مقدار طلا» — برای نصب‌های موجود (مثلاً abshodehrahimi) --- پس از deploy کد، این فایل را یک‌بار روی DB اجرا کنید؛ سپس در ادمین > تنظیمات > کارمزد روشن کنید. +-- idempotent: چند بار قابل اجرا +-- • اولین بار: INSERT با value='false' (پیش‌فرض خاموش) +-- • اجرای مجدد: value و is_active دست نمی‌خورند — فقط title_fa / description / type / can_edit INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`) SELECT 'fee_deduct_from_gold', 'false', 'کارمزد از مقدار طلا', 1, 1, @@ -9,7 +11,7 @@ WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'fee_deduct_from_gold' UPDATE `settings` SET `title_fa` = 'کارمزد از مقدار طلا', - `description` = 'روشن: کارمزد از مقدار طلا کسر می‌شود — در فروش مبلغ ریالی دقیق واریز می‌شود. خاموش: کارمزد از ریال فروش کم می‌شود (رفتار قبلی).', + `description` = 'روشن: مبالغ رند — فروش = دریافت دقیق ریال (کارمزد از طلا)؛ خرید = دریافت دقیق وزن (کارمزد از ریال). خاموش: کارمزد از طرف مقابل — رفتار قبلی.', `type` = 'switch', `can_edit` = 1 WHERE `key` = 'fee_deduct_from_gold';