diff --git a/database/migrations/2026_07_02_000001_sync_fee_deduct_from_gold_setting_metadata.php b/database/migrations/2026_07_02_000001_sync_fee_deduct_from_gold_setting_metadata.php new file mode 100644 index 0000000..ff941eb --- /dev/null +++ b/database/migrations/2026_07_02_000001_sync_fee_deduct_from_gold_setting_metadata.php @@ -0,0 +1,58 @@ + self::TITLE_FA, + 'description' => self::DESCRIPTION, + 'can_edit' => 1, + 'updated_at' => now(), + ]; + + if (Schema::hasColumn('settings', 'type')) { + $payload['type'] = 'switch'; + } + + $exists = DB::table('settings')->where('key', self::KEY)->exists(); + + if ($exists) { + DB::table('settings')->where('key', self::KEY)->update($payload); + + return; + } + + $insert = array_merge($payload, [ + 'key' => self::KEY, + 'value' => 'false', + 'is_active' => 1, + 'created_at' => now(), + ]); + + if (Schema::hasColumn('settings', 'is_exist')) { + $insert['is_exist'] = 0; + } + + DB::table('settings')->insert($insert); + } + + public function down(): void + { + // متادیتا را عمداً برنمی‌گردانیم — value مشتری حفظ شود. + } +}; diff --git a/database/sql/deploy_settings_const.sql b/database/sql/deploy_settings_const.sql index f8184bf..e606c1c 100644 --- a/database/sql/deploy_settings_const.sql +++ b/database/sql/deploy_settings_const.sql @@ -428,7 +428,9 @@ WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'fee_service_charge_per -- 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' +SELECT 'fee_deduct_from_gold', 'false', 'اعمال مبلغ دقیق در معامله مشتری', 1, 1, + 'روشن: مشتری دقیقاً همان مبلغ یا وزنی را که وارد کرده دریافت می‌کند. در فروش، مثلاً ۱۰۰ میلیون ریال درخواست → همان ۱۰۰ میلیون واریز و کارمزد از طلای کیف کسر می‌شود. در خرید، مثلاً ۱۰ گرم درخواست → همان ۱۰ گرم واریز و کارمزد به ریال قابل پرداخت اضافه می‌شود. خاموش (پیش‌فرض): در فروش کارمزد از مبلغ ریالی واریزی کم می‌شود (مشتری مبلغ کمتری می‌گیرد). در خرید کارمزد از وزن طلای واریزی کم می‌شود (مشتری طلای کمتری می‌گیرد).', + 'switch' WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'fee_deduct_from_gold' LIMIT 1); INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`) @@ -901,7 +903,9 @@ UPDATE `settings` SET `description` = 'مبلغ اضافه (ریال) روی ق UPDATE `settings` SET `description` = 'مبلغ کسر (ریال) از قیمت پایه برای سمت فروش. خالی = استفاده از «اختلاف پایه».' WHERE `key` = 'sell_fee'; UPDATE `settings` SET `description` = 'درصد کارمزد هر سفارش از مبلغ معامله (اعشاری؛ مثلاً ۰٫۰۰۵ یعنی نیم در هزار).' WHERE `key` = 'fee_service_charge_percentage'; UPDATE `settings` SET + `title_fa` = 'اعمال مبلغ دقیق در معامله مشتری', `type` = 'switch', + `can_edit` = 1, `description` = 'روشن: مشتری دقیقاً همان مبلغ یا وزنی را که وارد کرده دریافت می‌کند. در فروش، مثلاً ۱۰۰ میلیون ریال درخواست → همان ۱۰۰ میلیون واریز و کارمزد از طلای کیف کسر می‌شود. در خرید، مثلاً ۱۰ گرم درخواست → همان ۱۰ گرم واریز و کارمزد به ریال قابل پرداخت اضافه می‌شود. خاموش (پیش‌فرض): در فروش کارمزد از مبلغ ریالی واریزی کم می‌شود (مشتری مبلغ کمتری می‌گیرد). در خرید کارمزد از وزن طلای واریزی کم می‌شود (مشتری طلای کمتری می‌گیرد).' WHERE `key` = 'fee_deduct_from_gold'; UPDATE `settings` SET `description` = 'تعداد اولین سفارش‌های هر کاربر که از کارمزد معاف می‌شوند. ۰ = غیرفعال.' WHERE `key` = 'fee_free'; @@ -1200,10 +1204,26 @@ UPDATE `settings` SET `type` = 'number' WHERE `key` IN ( 'deposit_sms_support_number' ); +-- --------------------------------------------------------------------------- +-- تثبیت نهایی fee_deduct_from_gold — آخرین override قبل از COMMIT +-- (title_fa / description / type / can_edit — value و is_active دست نمی‌خورند) +-- --------------------------------------------------------------------------- +UPDATE `settings` SET + `title_fa` = 'اعمال مبلغ دقیق در معامله مشتری', + `type` = 'switch', + `can_edit` = 1, + `description` = 'روشن: مشتری دقیقاً همان مبلغ یا وزنی را که وارد کرده دریافت می‌کند. در فروش، مثلاً ۱۰۰ میلیون ریال درخواست → همان ۱۰۰ میلیون واریز و کارمزد از طلای کیف کسر می‌شود. در خرید، مثلاً ۱۰ گرم درخواست → همان ۱۰ گرم واریز و کارمزد به ریال قابل پرداخت اضافه می‌شود. خاموش (پیش‌فرض): در فروش کارمزد از مبلغ ریالی واریزی کم می‌شود (مشتری مبلغ کمتری می‌گیرد). در خرید کارمزد از وزن طلای واریزی کم می‌شود (مشتری طلای کمتری می‌گیرد).' +WHERE `key` = 'fee_deduct_from_gold'; + COMMIT; SELECT 'deploy_settings_const.sql finished' AS status; +-- بررسی fee_deduct_from_gold (desc_preview باید با «مشتری دقیقاً» شروع شود): +SELECT `key`, `title_fa`, LEFT(`description`, 60) AS desc_preview, `can_edit`, `type`, `value` +FROM `settings` +WHERE `key` = 'fee_deduct_from_gold'; + -- بعد از اجرا (اختیاری): -- SELECT `key`, `title_fa`, `value`, `type`, `is_active` FROM `settings` ORDER BY `key`; -- SELECT `key`, `value`, `title_fa` FROM `const` ORDER BY `key`; 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 edfd7aa..7d7a985 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 @@ -426,7 +426,9 @@ WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'fee_service_charge_per -- 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' +SELECT 'fee_deduct_from_gold', 'false', 'اعمال مبلغ دقیق در معامله مشتری', 1, 1, + 'روشن: مشتری دقیقاً همان مبلغ یا وزنی را که وارد کرده دریافت می‌کند. در فروش، مثلاً ۱۰۰ میلیون ریال درخواست → همان ۱۰۰ میلیون واریز و کارمزد از طلای کیف کسر می‌شود. در خرید، مثلاً ۱۰ گرم درخواست → همان ۱۰ گرم واریز و کارمزد به ریال قابل پرداخت اضافه می‌شود. خاموش (پیش‌فرض): در فروش کارمزد از مبلغ ریالی واریزی کم می‌شود (مشتری مبلغ کمتری می‌گیرد). در خرید کارمزد از وزن طلای واریزی کم می‌شود (مشتری طلای کمتری می‌گیرد).', + 'switch' WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'fee_deduct_from_gold' LIMIT 1); INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`) @@ -929,8 +931,9 @@ UPDATE `settings` SET `description` = 'مبلغ اضافه (ریال) روی ق UPDATE `settings` SET `description` = 'مبلغ کسر (ریال) از قیمت پایه برای سمت فروش. خالی = استفاده از «اختلاف پایه».' WHERE `key` = 'sell_fee'; UPDATE `settings` SET `description` = 'درصد کارمزد هر سفارش از مبلغ معامله (اعشاری؛ مثلاً ۰٫۰۰۵ یعنی نیم در هزار).' WHERE `key` = 'fee_service_charge_percentage'; UPDATE `settings` SET - `type` = 'switch', `title_fa` = 'اعمال مبلغ دقیق در معامله مشتری', + `type` = 'switch', + `can_edit` = 1, `description` = 'روشن: مشتری دقیقاً همان مبلغ یا وزنی را که وارد کرده دریافت می‌کند. در فروش، مثلاً ۱۰۰ میلیون ریال درخواست → همان ۱۰۰ میلیون واریز و کارمزد از طلای کیف کسر می‌شود. در خرید، مثلاً ۱۰ گرم درخواست → همان ۱۰ گرم واریز و کارمزد به ریال قابل پرداخت اضافه می‌شود. خاموش (پیش‌فرض): در فروش کارمزد از مبلغ ریالی واریزی کم می‌شود (مشتری مبلغ کمتری می‌گیرد). در خرید کارمزد از وزن طلای واریزی کم می‌شود (مشتری طلای کمتری می‌گیرد).' WHERE `key` = 'fee_deduct_from_gold'; UPDATE `settings` SET `description` = 'تعداد اولین سفارش‌های هر کاربر که از کارمزد معاف می‌شوند. ۰ = غیرفعال.' WHERE `key` = 'fee_free'; @@ -1042,21 +1045,61 @@ WHERE `key` IN ('text_rule', 'text_about', 'support_messenger_text', 'invite_lin -- --------------------------------------------------------------------------- --- sync can_edit — برای کلیدهای موجود هم طبق ساختار همین SQL تنظیم شود +-- sync can_edit — برای کلیدهای موجود هم طبق ساختار deploy_settings_const.sql -- نکته: value اینجا عمداً آپدیت نمی‌شود؛ مقدار موجود کارفرما/پنل حفظ می‌شود. -- --------------------------------------------------------------------------- -UPDATE `settings` s -JOIN ( - SELECT 'admin_url' AS `key`, 1 AS `can_edit` - UNION ALL SELECT 'app_url', 1 - UNION ALL SELECT 'auto_active_customer', 1 - UNION ALL SELECT 'balance_report_exclude_customer_id', 1 - UNION ALL SELECT 'bale_bot_token', 0 - UNION ALL SELECT 'buy_fee', 1 - UNION ALL SELECT 'charge_notif', 1 - UNION ALL SELECT 'chart_id', 1 - UNION ALL SELECT 'chart_use_local_data', 1 - UNION ALL SELECT 'close_price', 1 + +UPDATE `settings` SET `can_edit` = 0 WHERE `key` IN ( + 'admin_url', 'apk_download_link', 'app_url', + 'bale_bot_token', 'banner_enabled', + 'chart_id', 'chart_use_local_data', + 'external_order_api_enabled', + 'group_sms', + 'has_page_earn_money', + 'is_store', + 'logo_login', 'logo_register', 'title_pwa', 'title_fav', + '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', + 'montzar_order_response', 'montzar_token', + 'montzar_truly_buy_mazaneh', 'montzar_truly_sell_mazaneh', + 'node_client_id', 'node_shared_secret', + 'payping_fin_customer_id', 'payping_fin_sync_enabled', 'payping_fin_token', 'payping_fin_url', + 'payping_gateway_items', 'payping_gateway_name', + 'payping_round_toman', 'payping_start_url', 'payping_strict_failed_withdraw', 'payping_verify_url', + 'price_extreme_date', 'price_provider', 'profit_gold_api_enabled', + 'send_to_tahesab', 'service_charge_percentage', + 'sse_path', + 'tahesab_bank_account', 'tahesab_db', 'tahesab_host', 'tahesab_port', 'tahesab_token', + 'telegram_bot_token', + 'unit', + 'up_price', 'down_price', + 'wss_enabled', + 'zaarbox_api_url', 'zaarbox_price_key' +); + +UPDATE `settings` SET `can_edit` = 1 WHERE `key` IN ( + 'name_fa', + 'auto_active_customer', 'balance_report_exclude_customer_id', + 'buy_fee', 'charge_notif', 'close_price', + 'deposit_sms_support_number', 'endDay', + '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', + '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_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', + 'text_about', 'text_rule' +); + -- تفکیک نهایی type (بعد از همه batchها — override روی دیتابیس موجود) UPDATE `settings` SET `type` = 'price' WHERE `key` IN ( 'fee_single', 'buy_fee', 'sell_fee', diff --git a/database/sql/fee_deduct_from_gold_patch.sql b/database/sql/fee_deduct_from_gold_patch.sql index 5fb3459..bd0914b 100644 --- a/database/sql/fee_deduct_from_gold_patch.sql +++ b/database/sql/fee_deduct_from_gold_patch.sql @@ -1,7 +1,9 @@ --- سوییچ «اعمال مبلغ دقیق در معامله مشتری» — برای نصب‌های موجود (مثلاً abshodehrahimi) +-- سوییچ «اعمال مبلغ دقیق در معامله مشتری» — برای نصب‌های موجود -- idempotent: چند بار قابل اجرا -- • اولین بار: INSERT با value='false' (پیش‌فرض خاموش) --- • اجرای مجدد: value و is_active دست نمی‌خورند — فقط title_fa / description / type / can_edit +-- • اجرای مجدد: value و is_active دست نمی‌خورند — title_fa / description / type / can_edit همیشه override می‌شوند + +START TRANSACTION; INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`) SELECT 'fee_deduct_from_gold', 'false', 'اعمال مبلغ دقیق در معامله مشتری', 1, 1, @@ -15,3 +17,10 @@ SET `title_fa` = 'اعمال مبلغ دقیق در معامله مشتری', `type` = 'switch', `can_edit` = 1 WHERE `key` = 'fee_deduct_from_gold'; + +COMMIT; + +-- بررسی (باید desc_preview با «مشتری دقیقاً» شروع شود): +SELECT `key`, `title_fa`, LEFT(`description`, 60) AS desc_preview, `can_edit`, `type` +FROM `settings` +WHERE `key` = 'fee_deduct_from_gold';