Files
boursecu_server/database/sql/deploy_settings_const.sql
T
mohmdsdgandCursor b7eed369c6 fix(settings): force can_edit=1 for runtime keys in API and DB writes
editable_only now includes RUNTIME_KEYS; normalize can_edit in responses.
UpdateConfig and montzar login persist can_edit=1. SQL override moved before COMMIT.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-19 20:15:28 +03:30

2183 lines
178 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =============================================================================
-- deploy_settings_const.sql — آپدیت settings + const (بدون تغییر schema)
--
-- workflow deploy (DB موجود):
-- 0) بکاپ
-- 1) mysql ... < database/sql/baseline_migrations.sql ← حتماً قبل از migrate
-- 2) php artisan migrate
-- 3) php artisan settings:deploy
-- (یا: bash database/sql/run_deploy_settings.sh)
--
-- workflow نصب از صفر (DB خالی):
-- 1) php artisan migrate ← schema dump + incremental
-- 2) php artisan settings:deploy
--
-- اصول:
-- • چند بار قابل اجرا (idempotent)
-- • value / is_active ردیف‌های موجود هرگز دست نخورده — فقط INSERT برای کلید جدید
-- • can_edit / title_fa / description / type هر deploy از این فایل به‌روز می‌شوند
-- • schema (جدول/ستون) فقط با migrate — نه این فایل
--
-- ⚠️ هرگز UPDATE روی `value` برای ردیف موجود ننویس (مگر شرط خالی بودن صریح و مستند).
-- ادمین/کارفرما مقدار را در پنل تنظیم می‌کند؛ این فایل فقط کلید جدید با default می‌سازد.
--
-- قبل از اجرا: USE `نام_دیتابیس`; + بکاپ
-- =============================================================================
START TRANSACTION;
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
SET @db = DATABASE();
-- متن پیش‌فرض invite_link_text (تک‌خطی با CHAR(10) — سازگار با همه کلاینت‌های SQL)
SET @invite_link_default_text = CONCAT(
'⭐️الان طلا بخر؛ آخر ماه سودشو ببر!', CHAR(10),
'با خرید طلای آبشده در مقدارهای کم ولی مستمر، سود بیشتری ببر!', CHAR(10),
CHAR(10),
'این دعوت نامه از طرف "٪نام" عزیز برای شما ارسال شده تا شما هم از بازار طلای ما جا نمونید.', CHAR(10),
'روی لینک زیر کلیک کنید و ثبت نام خود را تکمیل کنید.', CHAR(10),
CHAR(10),
'٪لینک'
);
SET @invite_link_desc = CONCAT(
'متن پیام اشتراک‌گذاری دعوت در اپ کاربر (دکمه «اشتراک با دوستان»، پروفایل، کسب درآمد و مودال اشتراک).', CHAR(10),
CHAR(10),
'متغیرها:', CHAR(10),
'• %نام یا ٪نام = نام کامل کاربر دعوت‌کننده', CHAR(10),
'• %لینک یا ٪لینک = آدرس ثبت‌نام با کد معرف', CHAR(10),
CHAR(10),
'فاصله اختیاری بعد از % مجاز است (مثلاً % نام).', CHAR(10),
'خالی = متن پیش‌فرض اپ.'
);
SET @deposit_guide_desc = CONCAT(
'متن راهنمای واریز در مودال شارژ حساب.', CHAR(10),
CHAR(10),
'متغیرها:', CHAR(10),
'• %نام یا ٪نام = نام صاحب حساب', CHAR(10),
'• %کارت یا ٪کارت = شماره کارت', CHAR(10),
'• %شبا یا ٪شبا = شماره شبا', CHAR(10),
CHAR(10),
'فاصله بعد از % اختیاری است.', CHAR(10),
'خالی = متن پیش‌فرض اپ.'
);
SET @deposit_support_msg_desc = CONCAT(
'متن پیام هنگام کلیک «پیام به پشتیبانی» در مودال واریز.', CHAR(10),
CHAR(10),
'متغیر:', CHAR(10),
'• %نام یا ٪نام = نام صاحب حساب', CHAR(10),
CHAR(10),
'پیش‌فرض اپ: باسلام، %نام هستم. کدپیگیری و مبلغ واریزی من:'
);
SET @price_channel_message_desc = CONCAT(
'متن پیامی که با تغییر قیمت به کانال فرستاده می‌شود.', CHAR(10),
'هر متغیر را عیناً در قالب بنویسید (با % یا ٪).', CHAR(10),
CHAR(10),
'قیمت تابلو — مثل اپ:', CHAR(10),
'• %گرم_فروش = عدد بزرگ صفحهٔ اصلی (فروش هر گرم)', CHAR(10),
'• %گرم_خرید = خرید هر گرم', CHAR(10),
'• %مثقال_فروش = فروش هر مثقال', CHAR(10),
'• %مثقال_خرید = خرید هر مثقال', CHAR(10),
CHAR(10),
'زمان ارسال:', CHAR(10),
'• %تاریخ = تاریخ شمسی', CHAR(10),
'• %ساعت = ساعت', CHAR(10),
CHAR(10),
'نام فروشگاه:', CHAR(10),
'• %نام = فقط نام فروشگاه', CHAR(10),
'• %عنوان = خط آماده: 📊 قیمت لحظه‌ای + نام', CHAR(10),
CHAR(10),
'تماس (از فیلدهای پایین همین بخش):', CHAR(10),
'• %شماره = شماره تماس', CHAR(10),
'• %آیدی = آیدی کانال', CHAR(10),
'• %لینک = لینک', CHAR(10),
CHAR(10),
'اختیاری:', CHAR(10),
'• %محصولات = لیست همهٔ محصولات', CHAR(10),
'• %فوتر = شماره + آیدی + لینک با هم', CHAR(10),
CHAR(10),
'خالی = قالب پیش‌فرض.'
);
SET @price_channel_default_text = CONCAT(
'سلام 👋', CHAR(10),
'%عنوان', CHAR(10),
'📅 %تاریخ 🕐 %ساعت', CHAR(10),
CHAR(10),
'🔴 خرید گرم: %گرم_خرید', CHAR(10),
'🟢 فروش گرم: %گرم_فروش', CHAR(10),
'🔴 خرید مثقال: %مثقال_خرید', CHAR(10),
'🟢 فروش مثقال: %مثقال_فروش', CHAR(10),
CHAR(10),
'📞 %شماره', CHAR(10),
'%آیدی', CHAR(10),
'%لینک'
);
-- ستون‌های اختیاری settings (بعضی DBهای قدیمی ندارند)
SET @sql = IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'settings' AND COLUMN_NAME = 'is_exist') = 0,
'ALTER TABLE `settings` ADD COLUMN `is_exist` TINYINT(1) NOT NULL DEFAULT 0',
'SELECT 1'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @sql = IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'settings' AND COLUMN_NAME = 'type') = 0,
IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'settings' AND COLUMN_NAME = 'description') > 0,
'ALTER TABLE `settings` ADD COLUMN `type` VARCHAR(50) NULL DEFAULT NULL AFTER `description`',
'ALTER TABLE `settings` ADD COLUMN `type` VARCHAR(50) NULL DEFAULT NULL'
),
'SELECT 1'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------------------------------------------------------------------------
-- charset — نمایش فارسی در پنل ادمین
-- ---------------------------------------------------------------------------
ALTER TABLE `settings`
MODIFY COLUMN `description` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
MODIFY COLUMN `title_fa` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
MODIFY COLUMN `type` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL;
ALTER TABLE `const`
MODIFY COLUMN `title_fa` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL;
-- ---------------------------------------------------------------------------
-- اصلاح باگ‌ها / rename کلیدهای قدیمی
-- ---------------------------------------------------------------------------
UPDATE `settings` SET `key` = 'logo_login' WHERE `key` LIKE 'logo_login%' AND `key` <> 'logo_login';
DELETE s1 FROM `settings` s1
INNER JOIN `settings` s2 ON s1.`key` = s2.`key` AND s1.`id` < s2.`id`
WHERE s1.`key` = 'montzar_closed';
UPDATE `settings` SET `key` = 'support_messenger_id' WHERE `key` = 'bale_support_id';
UPDATE `settings` SET `key` = 'support_messenger_text' WHERE `key` = 'bale_support_text';
-- legacy is_requaire_referral → referral_id: فقط rename کلید؛ value/is_active دست نمی‌خورد
-- SETTINGS — کلیدهای جدید (INSERT فقط اگر key نبود)
-- =============================================================================
-- کلیدهای پایه برند (هر DB — value خالی؛ از پنل پر می‌شود)
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'name_fa', '', 'نام فارسی اپ', 1, 1, NULL, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'name_fa' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'app_url', '', 'آدرس اپ (کاربر)', 1, 1, NULL, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'app_url' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'admin_url', '', 'آدرس پنل ادمین', 1, 1, NULL, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'admin_url' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'logo_login', '', 'لوگوی صفحه ورود', 0, 0, NULL, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'logo_login' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'logo_register', '', 'لوگوی ثبت‌نام', 0, 0, NULL, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'logo_register' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'has_page_earn_money', 'false', 'صفحه کسب درآمد', 1, 1, NULL, 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'has_page_earn_money' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'montzar_order_response', '[]', 'پاسخ سفارش همکار', 1, 1, NULL, 'longtext'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montzar_order_response' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'montzar_last_product_log', '{}', 'لاگ محصول همکار', 1, 1, NULL, 'longtext'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montzar_last_product_log' LIMIT 1);
-- قیمت zaarbox (اگر از قبل دارید value دست نخورده)
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'chart_use_local_data', 'false', 'نمودار از داده خود سایت', 1, 1,
'خاموش = Zaarbox (chart_id) | روشن = تاریخچه ذخیره‌شده prices', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'chart_use_local_data' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'chart_id', '', 'UUID نمودار Zaarbox', 1, 1, 'خالی = UUID پیش‌فرض سرویس', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'chart_id' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'show_last_price', 'true', 'نمایش آخرین قیمت DB اگر API قطع شد', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'show_last_price' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'show_gold_ounce_price', 'false', 'نمایش قیمت انس طلا', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'show_gold_ounce_price' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'show_home_price_when_closed', 'false', 'نمایش قیمت صفحه اصلی خارج از ساعت کاری', 1, 1,
'روشن: وقتی فروشگاه خارج از ساعت کاری است، قیمت صفحه اصلی اپ همچنان نمایش داده می‌شود و پیام «فروشگاه بسته است» نشان داده نمی‌شود. خرید/فروش همچنان بسته می‌ماند. خاموش: مثل قبل، خارج از ساعت پیام بسته بودن و قیمت صفر نشان داده می‌شود.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'show_home_price_when_closed' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'show_product_details', 'true', 'نمایش جزئیات اطلاعات محصول', 1, 1,
'روشن: بعد از انتخاب محصول در صفحه خرید/فروش، متن توضیح محصول نمایش داده می‌شود. خاموش: توضیح نشان داده نمی‌شود.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'show_product_details' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'products_site_link_enabled', 'false', 'دکمه لینک خارجی در خرید/فروش', 1, 1,
'روشن: در صفحه خرید/فروش (بالای تب دسته‌ها) یک دکمه تمام‌عرض نشان داده می‌شود که با کلیک، لینک تنظیم‌شده را در تب جدید مرورگر باز می‌کند. خاموش: دکمه مخفی است.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'products_site_link_enabled' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'products_site_link_url', '', 'آدرس لینک دکمه خرید/فروش', 1, 1,
'آدرس کامل سایت یا صفحه خارجی (مثلاً https://example.com). با کلیک روی دکمه در اپ کاربر، همین آدرس در تب جدید مرورگر باز می‌شود. اگر خالی باشد، با وجود روشن بودن سوییچ، دکمه کاری انجام نمی‌دهد.',
'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'products_site_link_url' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'products_site_link_text', '', 'متن دکمه لینک خرید/فروش', 1, 1,
'متنی که روی دکمه لینک خارجی در صفحه خرید/فروش نمایش داده می‌شود. اگر خالی باشد، پیش‌فرض «ورود به سایت» همراه آیکون کره زمین نشان داده می‌شود.',
'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'products_site_link_text' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'show_product_trade_status', 'false', 'نمایش خرید/فروش باز روی کارت محصول', 1, 1,
'روشن: روی کارت محصول برچسب خرید باز/بسته و فروش باز/بسته نمایش داده می‌شود. خاموش: مخفی است.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'show_product_trade_status' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'show_product_card_meta', 'true', 'نمایش دسته و تحویل و مقدار روی کارت محصول', 1, 1,
'روشن: روی کارت محصول دسته‌بندی، وضعیت تحویل فیزیکی و مقدار/وزن نمایش داده می‌شود. خاموش: مخفی است.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'show_product_card_meta' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'main_product_price', 'false', 'قیمت از محصول (legacy)', 1, 1, 'از price_provider استفاده کنید'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'main_product_price' LIMIT 1);
-- montzar_price حذف شد — منبع همکار فقط با price_provider=montzar
-- Montzar — برای تعویض provider یا پر شدن خودکار توسط cron
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'montzar_mobile', '', 'موبایل API همکار', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montzar_mobile' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'montzar_password', '', 'رمز API همکار', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montzar_password' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'montzar_product_id', '25', 'کد محصول همکار', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montzar_product_id' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'montzar_base_url', 'https://limangold.ir', 'آدرس سرور همکار', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montzar_base_url' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'montzar_token', '', 'توکن همکار (خودکار)', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montzar_token' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'montzar_open_buy', 'true', 'باز بودن خرید همکار', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montzar_open_buy' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'montzar_open_sell', 'true', 'باز بودن فروش همکار', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montzar_open_sell' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'montzar_diff', '0', 'اختلاف قیمت همکار', 1, 1, 'سیستم پر می‌کند'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montzar_diff' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'montzar_live_price', '0', 'قیمت لحظه‌ای همکار', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montzar_live_price' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'montzar_mazaneh', '0', 'مظنه همکار', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montzar_mazaneh' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'montzar_truly_buy_mazaneh', '0', 'مظنه خرید همکار', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montzar_truly_buy_mazaneh' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'montzar_truly_sell_mazaneh', '0', 'مظنه فروش همکار', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montzar_truly_sell_mazaneh' LIMIT 1);
-- API خارجی Node (HMAC)
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'node_client_id', '', 'شناسه کلاینت API خارجی (X-Client-Id)', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'node_client_id' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'node_shared_secret', '', 'کلید امضای HMAC API خارجی', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'node_shared_secret' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'external_order_api_enabled', 'true', 'فعال‌سازی API سفارش خارجی (get_wallet / order)', 1, 1, 'true + node_client_id + node_shared_secret'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'external_order_api_enabled' LIMIT 1);
-- SSE قیمت (last/list از لاراول)
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'wss_enabled', 'true', 'قیمت لحظه‌ای (SSE)', 0, 1, 'روشن: اپ به sse_path وصل می‌شود؛ خاموش: polling /api/price/last و /customer/product/list', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'wss_enabled' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'sse_path', '/api/price/stream', 'مسیر SSE قیمت', 0, 1, 'GET لاراول — استریم event:last و event:list با payload کامل', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sse_path' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'tracking_systems', '[]', 'سایت‌های ری‌گیری', 1, 1,
'JSON لیست سایت‌های ری‌گیری — هر مورد: id، name، url. از منوی «سایت‌های ری‌گیری» ویرایش می‌شود.', 'longtext'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'tracking_systems' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'tracking_systems_enabled', 'false', 'نمایش سایت‌های ری‌گیری', 1, 1,
'روشن: منوی «سایت‌های ری‌گیری» در ادمین و اپ مشتری نمایش داده می‌شود. خاموش: مخفی است.', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'tracking_systems_enabled' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'montify_name', '', 'نام فروشگاه در درگاه', 0, 1, NULL, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montify_name' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'is_store', 'false', 'حالت فروشگاهی', 0, 1, 'فعال = سبد خرید، دسته‌بندی، حواله، تخفیف', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'is_store' LIMIT 1);
-- Jibit
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'jibit_verification', 'true', 'تأیید کارت بانکی با جیبیت', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'jibit_verification' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'register_jibit_verify', 'true', 'تأیید کدملی/موبایل در ثبت‌نام', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'register_jibit_verify' LIMIT 1);
-- ساعات معامله
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'close_price', 'false', 'بستن قیمت در بازه زمانی', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'close_price' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'startDay', '09:00', 'شروع بازه معامله', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'startDay' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'endDay', '22:00', 'پایان بازه معامله', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'endDay' LIMIT 1);
-- ثبت‌نام / معرف
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'auto_active_customer', 'false', 'فعال‌سازی خودکار کاربر', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'auto_active_customer' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'fee_free', '0', 'تعداد سفارش اول بدون کارمزد', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'fee_free' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'charge_notif', 'true', 'پیامک شارژ ادمین', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'charge_notif' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'customer_direct_sms', 'false', 'پیامک تکی به مشتری از لیست', 0, 1,
'روشن: در لیست مشتریان دکمه ارسال پیامک تکی نمایش داده می‌شود. خاموش: مخفی است. فقط از صفحه دیپلوی قابل تغییر است.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'customer_direct_sms' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'enable_conditional_order', 'false', 'سفارش شرطی', 0, 1,
'روشن: قابلیت سفارش شرطی سراسری فعال است. خاموش: منو و ارزیابی اجرا نمی‌شود. فقط از دیپلوی قابل تغییر است.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'enable_conditional_order' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'enable_product_funds', 'false', 'قلک محصول', 0, 1,
'روشن: ساخت و مدیریت قلک per-product در اپ مشتری فعال است (یک محصول در هر قلک؛ انتقال بدون سند حسابداری). خاموش: منو و API ساخت قلک جدید در دسترس نیست. فقط از دیپلوی قابل تغییر است.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'enable_product_funds' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'has_page_gift_card', 'false', 'کارت هدیه', 0, 1,
'روشن: منوی «ثبت کارت هدیه» و صفحه ثبت کد در اپ کاربر فعال است. خاموش: منو و صفحه مخفی است و API استفاده از کد هدیه در دسترس نیست. فقط از دیپلوی قابل تغییر است.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'has_page_gift_card' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'enable_customer_level_profit', 'false', 'سود چندسطحی معرف', 0, 1,
'روشن: در لیست مشتریان آیکون تنظیم درصد سود هر سطح زیرمجموعه فعال است و پس از سفارش، سهم کارمزد طبق درصدهای هر معرف به کیف طلا واریز می‌شود. خاموش: آیکون و واریز سود چندسطحی غیرفعال است. فقط از دیپلوی قابل تغییر است.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'enable_customer_level_profit' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'has_page_price_trigger', 'true', 'هشدار قیمت', 0, 1,
'روشن: منوی هشدار قیمت در اپ کاربر نمایش داده می‌شود. خاموش: منو و صفحه مخفی است. فقط از دیپلوی قابل تغییر است.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'has_page_price_trigger' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'has_page_notification', 'true', 'اعلان داخل اپ', 0, 1,
'روشن: زنگوله اعلان در اپ کاربر و منوی ثبت اعلان در ادمین فعال است. خاموش: مخفی است. فقط از دیپلوی قابل تغییر است.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'has_page_notification' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'jibit_enabled', 'true', 'احراز هویت جیبیت', 0, 1,
'روشن: سرویس احراز هویت جیبیت (تطبیق کد ملی/موبایل و کارت بانکی) فعال است. خاموش: هیچ فراخوانی به جیبیت انجام نمی‌شود و احراز هویت خودکار کار نمی‌کند. فقط از صفحه دیپلوی قابل تغییر است.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'jibit_enabled' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'fee_conditional_order', '0', 'کارمزد سفارش شرطی', 1, 1,
'مبلغ ریالی که با هر بار ثبت تریگر از کیف پول ریالی مشتری کم می‌شود. صفر = رایگان.',
'number'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'fee_conditional_order' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_order_admin', 'true', 'پیامک خرید/فروش به ادمین', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_order_admin' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_order_customer', 'true', 'پیامک خرید/فروش به مشتری', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_order_customer' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_withdraw_admin', 'true', 'پیامک درخواست برداشت به ادمین', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_withdraw_admin' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_withdraw_otp', 'true', 'پیامک رمز برداشت', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_withdraw_otp' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_login_otp', 'true', 'پیامک رمز ورود', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_login_otp' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_gateway_charge_admin', 'true', 'پیامک شارژ درگاه به ادمین', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_gateway_charge_admin' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_register_customer', 'true', 'پیامک خوش‌آمد ثبت‌نام', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_register_customer' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_register_admin', 'true', 'پیامک ثبت‌نام به ادمین', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_register_admin' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_jibit_admin', 'true', 'پیامک احراز هویت به ادمین', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_jibit_admin' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_bank_card_admin', 'true', 'پیامک کارت بانکی به ادمین', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_bank_card_admin' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_bank_card_customer', 'true', 'پیامک تایید کارت به مشتری', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_bank_card_customer' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_fund_withdraw_admin', 'true', 'پیامک برداشت قلک به ادمین', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_fund_withdraw_admin' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_fund_withdraw_customer', 'true', 'پیامک برداشت قلک به مشتری', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_fund_withdraw_customer' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_price_trigger', 'true', 'پیامک هشدار قیمت', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_price_trigger' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_wallet_alert', 'true', 'پیامک هشدار اعتبار پنل پیامک', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_wallet_alert' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'sms_notif_support_admin', 'true', 'پیامک پیام پشتیبانی به ادمین', 1, 1,
'روشن: وقتی مشتری اولین پیام خوانده‌نشده را در چت پشتیبانی می‌فرستد و ادمین همان اتاق را باز و visible ندارد، پیامک به ادمین‌های دارای «ارسال پیامک» می‌رود. خاموش: اعلان پیامک چت نمی‌رود.'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_notif_support_admin' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'chat_webhook_secret', '', 'رمز وب‌هوک چت', 0, 1,
'رمز مشترک بین لاراول و سرور چت برای اعلان پیام پشتیبانی. فقط سرور؛ در صورت خالی بودن به‌صورت خودکار ساخته می‌شود.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'chat_webhook_secret' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'chat_webhook_base_url', '', 'آدرس پایه وب‌هوک چت', 0, 1,
'اگر APP_URL فرانت است (مثلاً https://niazitala.ir) اینجا آدرس لاراول را بگذار (مثلاً https://niazitala.ir/server). خالی = همان APP_URL.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'chat_webhook_base_url' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'gift_for_referrer', '0.005', 'پاداش معرف', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'gift_for_referrer' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'gift_for_referral', '0', 'پاداش معرف‌شونده', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'gift_for_referral' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'register_referral_sms_to_referrer', 'false', 'SMS به معرف هنگام ثبت‌نام', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'register_referral_sms_to_referrer' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
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);
-- default: true — وقتی montzar روشن است پاداش معرفی از همکار خرید می‌شود؛ خاموش = واریز محلی مثل قبل
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'referral_gift_buy_from_montzar', 'true', 'خرید پاداش معرفی از همکار', 1, 1,
'روشن: اگر منبع قیمت montzar باشد، قبل از واریز پاداش معرف/معرف‌شونده همان وزن از همکار خرید می‌شود؛ شکست خرید = واریز نمی‌شود. خاموش: مثل قبل فقط به کیف واریز می‌شود بدون خرید از همکار.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'referral_gift_buy_from_montzar' 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);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'group_sms', 'false', 'پیامک گروهی', 0, 1,
'روشن: دکمه ارسال پیامک گروهی در پنل ادمین فعال است (ارسال ۱۰تایی). خاموش: ارسال پیامک گروهی غیرفعال است. فقط از تنظیمات پیشرفته.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'group_sms' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'customer_special_pricing', 'false', 'قیمت ویژه مشتری', 0, 1,
'روشن: زیرمنوی قیمت ویژه در مشتریان و اعمال سود خرید/فروش پکیج روی مظنه و سفارش برای کاربران انتخاب‌شده. خاموش: غیرفعال. فقط از دیپلوی قابل تغییر است.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'customer_special_pricing' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'sms_panel', 'true', 'پنل پیامک (کیف پول)', 0, 1, 'روشن: پنل پیامک و کیف پول billing فعال است. خاموش: پیامک‌ها مثل قبل ارسال می‌شوند بدون billing.', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sms_panel' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'tahesab_host', '', 'آدرس IP سرور ته‌حساب', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'tahesab_host' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'tahesab_port', '', 'پورت سرور ته‌حساب', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'tahesab_port' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'tahesab_token', '', 'توکن ته‌حساب', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'tahesab_token' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'tahesab_db', '', 'دیتابیس ته‌حساب', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'tahesab_db' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'tahesab_bank_account', '', 'حساب بانکی ته‌حساب', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'tahesab_bank_account' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'send_to_tahesab', 'false', 'ارسال به ته‌حساب (قدیمی)', 0, 0, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'send_to_tahesab' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'accounting_provider', 'none', 'سیستم حسابداری', 0, 1, 'none,pargar,tahesab,zarin'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'accounting_provider' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'zarin_api', '', 'آدرس API زرین', 0, 1, 'آدرس پایه وب‌سرویس زرین (بدون /ZarrinService/accounting).', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zarin_api' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'zarin_token', '', 'توکن زرین', 0, 1, 'توکن مکمل API زرین که در نرم‌افزار زرین تعریف می‌شود.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zarin_token' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'zarin_noe_kar', '16', 'نوع کار پیش‌فرض زرین', 0, 1, 'کد noeKar هنگام ساخت کار ساخته در زرین. مقدار ۱۶ معمولاً گرمی است و برای sabtSanadTedadi مناسب نیست.', 'number'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zarin_noe_kar' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'zarin_noe_kar_tedadi', '17', 'نوع کار تعدادی زرین', 0, 1, 'noeKar برای سند تعدادی (سکه/شمش/گوی/مکعب). روی زرین معمولاً ۱۷=سکه-تعدادی یا ۱۸=اجرت تعدادی. اگر خالی/نامعتبر باشد کد از ۱۷ استفاده می‌کند.', 'number'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zarin_noe_kar_tedadi' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'zarin_gorohe_kar', '52', 'گروه کار پیش‌فرض زرین', 0, 1, 'کد gorooheKar هنگام ساخت/جستجوی کار در زرین. برای جداسازی چند پنل روی یک زرین، برای هر پنل مقدار متفاوت بگذارید.', 'number'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zarin_gorohe_kar' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'zarin_name_g', 'مشتری نقدی (خریدار)', 'نام گروه حساب مشتریان زرین', 0, 1, 'پارامتر nameG در addhesab — گروه حساب زرین. برای اپ خانگی: مشتری نقدی (خریدار) = گروه ۶. گروه همکار استفاده نشود (مظنه متفاوت است).', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zarin_name_g' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'zarin_uid_prefix', '', 'پیشوند عددی uid زرین', 0, 1, 'فقط عدد. وقتی چند پنل یک زرین دارند باید متفاوت باشد تا uid تکراری نشود.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zarin_uid_prefix' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'send_to_pargar', 'false', 'ارسال به پرگار (قدیمی)', 0, 0, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'send_to_pargar' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'pargar_username', '', 'نام کاربری API پرگار', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'pargar_username' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'pargar_password', '', 'رمز عبور API پرگار', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'pargar_password' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'pargar_api_token', '', 'توکن ثابت API پرگار', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'pargar_api_token' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'pargar_item_id_rial', '0', 'کد کالای ریال پرگار', 0, 1,
'کد کالا برای اسناد واریز/برداشت ریالی در پرگار. صفر = استفاده از کد طلا با وزن صفر.', 'number'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'pargar_item_id_rial' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'pargar_item_id_gold', '11', 'کد کالای طلا پرگار', 0, 1,
'کد کالای طلا (کیف اصلی / آبشده) در پرگار برای اسناد وزن‌دار.', 'number'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'pargar_item_id_gold' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'telegram_bot_token', '', 'توکن بات تلگرام', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'telegram_bot_token' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'bale_bot_token', '', 'توکن بات بله', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'bale_bot_token' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'rubika_bot_token', '', 'توکن بات روبیکا', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'rubika_bot_token' LIMIT 1);
-- ===========================================================================
-- ارسال قیمت به کانال‌های پیام‌رسان (بله / تلگرام / روبیکا)
-- • دسترسی (can_edit=0): price_channel_access — تا روشن نشود، گروه کانال در تنظیمات عادی مخفی است
-- • محتوا (can_edit=1): روشن/خاموش، انتخاب پیام‌رسان، اختلاف، خطوط پایانی، فاصله
-- • سیستمی (can_edit=0): مقصد ارسال هر پیام‌رسان (آیدی چنل/گروه)
-- • توکن‌ها همان bale_bot_token / telegram_bot_token / rubika_bot_token (can_edit=0)
-- ===========================================================================
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'price_channel_access', 'false', 'دسترسی ارسال قیمت به کانال', 0, 1,
'روشن: گروه «ارسال قیمت به کانال» در تنظیمات عادی پنل دیده می‌شود. خاموش: مخفی است (فقط از تنظیمات پیشرفته).', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'price_channel_access' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'price_channel_enabled', 'false', 'ارسال قیمت به کانال', 1, 1,
'روشن: بعد از هر تغییر قیمت، مظنه به کانال‌های پیام‌رسان انتخاب‌شده ارسال می‌شود.', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'price_channel_enabled' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'price_channel_messengers', '', 'پیام‌رسان‌های ارسال قیمت', 1, 1,
'کدام پیام‌رسان‌ها قیمت بگیرند؟ می‌توانید چند مورد را انتخاب کنید. گزینه‌ها: بله، تلگرام، روبیکا.', 'multiselect'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'price_channel_messengers' LIMIT 1);
-- نوع multiselect را روی ردیف‌های موجود هم اعمال کن (نصب‌هایی که قبلاً text گرفته بودند)
UPDATE `settings` SET `type` = 'multiselect' WHERE `key` = 'price_channel_messengers';
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'price_channel_diff', '0', 'اختلاف قیمت کانال (ریال)', 1, 1,
'مبلغی که به قیمت خرید کانال اضافه و از قیمت فروش کم می‌شود (اسپرد اضافه فقط برای کانال).', 'price'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'price_channel_diff' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'price_channel_min_seconds', '120', 'حداقل فاصله ارسال (ثانیه)', 1, 1,
'حداقل فاصله بین دو ارسال به کانال؛ جلوی سیل پیام را می‌گیرد. صفر = هر تغییر قیمت.', 'number'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'price_channel_min_seconds' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'price_channel_message_text', @price_channel_default_text, 'قالب متن پیام کانال', 1, 1, @price_channel_message_desc, 'longtext'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'price_channel_message_text' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'price_channel_footer_id', '', 'آیدی کانال در پیام', 1, 1,
'آیدی/یوزرنیم کانال برای متغیر %آیدی در قالب پیام. خالی = خط خالی.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'price_channel_footer_id' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'price_channel_footer_phone', '', 'شماره تماس در پیام', 1, 1,
'شماره تماس برای متغیر %شماره در قالب پیام. خالی = خط خالی.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'price_channel_footer_phone' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'price_channel_footer_link', '', 'لینک در پیام', 1, 1,
'لینک برای متغیر %لینک در قالب پیام. خالی = خط خالی.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'price_channel_footer_link' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'price_channel_bale_to', '', 'مقصد ارسال بله', 0, 1,
'آیدی چنل/گروه بله برای ارسال قیمت (چند مقصد با ویرگول).', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'price_channel_bale_to' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'price_channel_telegram_to', '', 'مقصد ارسال تلگرام', 0, 1,
'آیدی چنل/گروه تلگرام برای ارسال قیمت (چند مقصد با ویرگول).', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'price_channel_telegram_to' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'price_channel_rubika_to', '', 'مقصد ارسال روبیکا', 0, 1,
'آیدی چنل/گروه روبیکا برای ارسال قیمت (چند مقصد با ویرگول).', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'price_channel_rubika_to' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'change_mesghal', '4.3318', 'وزن مثقال (گرم)', 1, 1,
'ضریب تبدیل قیمت مثقال به گرم برای نمایش خط «هر گرم» در پیام کانال.', 'number'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'change_mesghal' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'support_messenger_id', '', 'شناسه پشتیبانی پیام‌رسان', 1, 0, 'یوزرنیم یا شماره تماس بسته به پیام‌رسان انتخاب‌شده'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'support_messenger_id' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'support_messenger_text', '', 'متن پشتیبانی پیام‌رسان', 1, 0, 'متن دکمه یا توضیح پشتیبانی در اپ کاربر'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'support_messenger_text' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'invite_link_text', @invite_link_default_text, 'متن دعوتنامه اشتراک‌گذاری', 1, 1, @invite_link_desc, 'longtext'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'invite_link_text' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'support_messenger', '', 'پیام‌رسان پشتیبانی', 1, 1, 'bale,telegram,whatsapp,rubika,eitaa,soroush'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'support_messenger' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'show_to_users_chat', 'deactivate', 'نمایش چت به کاربران', 0, 1,
'روشن: قابلیت چت پشتیبانی برای این دیپلوی فعال است (منوی ادمین و پیش‌نیاز نمایش به کاربر). خاموش: چت در ادمین و اپ کاربر مخفی است و سوییچ «چت پشتیبانی» (has_chat) از تنظیمات عادی هم برداشته می‌شود.', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'show_to_users_chat' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'chat_api', '', 'API چت', 0, 1,
'هاست سرور چت جدا (بدون https)، مثلاً chat.example.ir — برای WS و ساخت روم.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'chat_api' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'chat_api_key', '', 'کلید API چت', 0, 1,
'کلید API سرور چت جدا.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'chat_api_key' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'chat_upload_url', '', 'آدرس آپلود فایل چت', 0, 1,
'URL کامل آپلود مدیا برای چت پشتیبانی.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'chat_upload_url' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'chat_download_url', '', 'آدرس دانلود فایل چت', 0, 1,
'پایهٔ URL دانلود/نمایش فایل‌های چت پشتیبانی.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'chat_download_url' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'has_chat', 'true', 'چت پشتیبانی', 1, 1,
'روشن: چت پشتیبانی در اپ مشتری نمایش داده می‌شود (فقط وقتی show_to_users_chat هم روشن باشد). خاموش: دکمه و صفحه چت برای کاربر مخفی است.', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'has_chat' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'deposit_sms_support_number', '', 'شماره تماس پشتیبانی', 1, 1,
'شماره تماس پشتیبانی که در صفحه واریز، درباره ما و قوانین به مشتری نشان داده می‌شود. با کلیک، تماس تلفنی برقرار می‌شود.', 'number'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'deposit_sms_support_number' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'deposit_account_holder', '', 'نام صاحب حساب واریز', 1, 1,
'نام صاحب حساب واریز — در متن راهنما و پیام پشتیبانی با ٪نام یا %نام جایگزین می‌شود.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'deposit_account_holder' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'deposit_card_number', '', 'شماره کارت واریز', 1, 1,
'شماره کارت واریز — در متن‌ها با ٪کارت یا %کارت جایگزین می‌شود.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'deposit_card_number' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'deposit_account_number', '', 'شماره حساب واریز', 1, 1,
'شماره حساب بانکی واریز — در مودال راهنمای شارژ کنار کارت و شبا نمایش داده می‌شود. در متن‌ها با ٪حساب یا %حساب جایگزین می‌شود.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'deposit_account_number' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'deposit_sheba', '', 'شبا واریز', 1, 1,
'شماره شبا واریز — در متن‌ها با ٪شبا یا %شبا جایگزین می‌شود.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'deposit_sheba' LIMIT 1);
-- روش‌های واریز (قابل ویرایش؛ کارت به کارت پیش‌فرض روشن)
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'deposit_method_card_to_card', 'true', 'فعال‌سازی کارت به کارت', 1, 1,
'روشن (پیش‌فرض): روش کارت به کارت در صفحه واریز اپ نمایش داده می‌شود. خاموش: این روش از لیست روش‌های واریز حذف می‌شود.', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'deposit_method_card_to_card' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'deposit_method_gateway', 'false', 'فعال‌سازی درگاه پرداخت', 1, 1,
'روشن: روش درگاه پرداخت در صفحه واریز نمایش داده می‌شود. خاموش: مخفی است. اتصال و کدهای درگاه در تنظیمات پیشرفته → روش‌های واریز تنظیم می‌شوند.', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'deposit_method_gateway' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'deposit_method_identified', 'false', 'فعال‌سازی شناسه واریز', 1, 1,
'روشن: روش شناسه واریز در صفحه واریز نمایش داده می‌شود. خاموش: مخفی است.', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'deposit_method_identified' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'deposit_method_shetab', 'false', 'فعال‌سازی شبکه شتابی', 1, 1,
'روشن: روش شبکه شتابی در صفحه واریز نمایش داده می‌شود. خاموش: مخفی است.', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'deposit_method_shetab' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'deposit_support_message_text', 'شماره حساب', 'متن پیام به پشتیبانی (واریز)', 1, 1, @deposit_support_msg_desc, 'longtext'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'deposit_support_message_text' LIMIT 1);
-- min/max قیمت روز (سیستم)
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'up_price', '0', 'بیشترین قیمت امروز', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'up_price' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'down_price', '0', 'کمترین قیمت امروز', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'down_price' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'price_extreme_date', '', 'تاریخ min/max روز', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'price_extreme_date' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'metal_type', 'طلای آبشده', 'عنوان فلز در UI', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'metal_type' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'main_metal', 'طلا', 'نام فلز اصلی (ادمین)', 0, 1, NULL, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'main_metal' LIMIT 1);
-- ---------------------------------------------------------------------------
-- درگاه شارژ آنلاین (Montify / external_payment) — فقط تنظیمات پیشرفته (can_edit=0)
-- پیش‌فرض enabled خاموش؛ value ردیف موجود دست نخورده می‌ماند.
-- ---------------------------------------------------------------------------
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'external_payment_enabled', 'false', 'فعال‌سازی شارژ آنلاین', 0, 1,
'روشن: در صورت کامل بودن BASE_URL و client_id و client_secret و gateway، دکمه پرداخت آنلاین در اپ نمایش داده می‌شود. خاموش: فقط واریز دستی.',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'external_payment_enabled' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'wallet_payment_provider', 'none', 'نوع درگاه شارژ آنلاین', 0, 1,
'none=خاموش، montify=پارتنر Montify|none,montify',
'select'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'wallet_payment_provider' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'external_payment_base_url', '', 'آدرس API درگاه (BASE_URL)', 0, 1,
'آدرس پایه API سرویس Montify (بدون اسلش انتهایی)، مثلاً https://node.example.com — فقط سرور؛ در اپ کاربر ارسال نمی‌شود.',
'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'external_payment_base_url' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'external_payment_client_id', '', 'شناسه کلاینت (client_id)', 0, 1,
'شناسه partner (client_id) — فقط سرور؛ در اپ کاربر یا پاسخ get_settings عمومی نیست.',
'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'external_payment_client_id' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'external_payment_client_secret', '', 'رمز کلاینت (client_secret)', 0, 1,
'رمز مخفی partner (client_secret) — فقط سرور. در فرانت و Network تب کاربر دیده نمی‌شود.',
'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'external_payment_client_secret' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'external_payment_gateway', 'zarinpall', 'نام درگاه داخل Montify', 0, 1,
'نام درگاه فعال داخل Montify: zarinpall، zibal، payping یا sepal|zarinpall,zibal,payping,sepal',
'select'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'external_payment_gateway' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'external_payment_return_url', '', 'آدرس برگشت (return_url)', 0, 1,
'آدرس صفحه فرانت بعد از پرداخت. خالی = دامنه سایت + /wallet/payment-result',
'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'external_payment_return_url' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'external_payment_webhook_url', '', 'آدرس Webhook', 0, 1,
'آدرس بک‌اند برای webhook (شارژ قطعی کیف). خالی = مسیر پیش‌فرض سرور.',
'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'external_payment_webhook_url' LIMIT 1);
-- درگاه — کلیدهای اختیاری payping
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'payping_fin_sync_enabled', 'false', 'همگام‌سازی fin', 0, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'payping_fin_sync_enabled' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'payping_fin_url', 'https://limangold.ir/kernel/admin/fin', 'URL fin', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'payping_fin_url' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'payping_fin_token', '', 'توکن fin', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'payping_fin_token' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`)
SELECT 'payping_fin_customer_id', '23', 'customer_id fin', 1, 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'payping_fin_customer_id' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'payping_start_url', 'https://payping.limangold.ir/payment/start', 'آدرس شروع درگاه', 1, 1, NULL, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'payping_start_url' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'payping_verify_url', 'https://payping.limangold.ir/payment/verify', 'آدرس تأیید درگاه', 1, 1, NULL, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'payping_verify_url' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'payping_gateway_name', '', 'نام gateway درگاه', 1, 1, 'sepal,', 'select'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'payping_gateway_name' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'payping_gateway_items', '', 'لیست item (چرخشی)', 1, 1, NULL, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'payping_gateway_items' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'payping_round_toman', 'false', 'گرد کردن مبلغ به تومان', 1, 1, NULL, 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'payping_round_toman' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'payping_strict_failed_withdraw', 'false', 'اولویت تراکنش ناموفق', 1, 1, NULL, 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'payping_strict_failed_withdraw' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'open_register', 'true', 'ثبت‌نام باز', 1, 1, NULL, 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'open_register' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'referral_id', 'required', 'کد معرف اجباری', 1, 1, 'روشن = اجباری در ثبت‌نام | خاموش = اختیاری', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'referral_id' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'referral_show', 'true', 'نمایش فیلد کد معرف', 1, 1,
'روشن: فیلد کد معرف در صفحه ثبت‌نام اپ کاربر نمایش داده می‌شود. خاموش: فیلد مخفی است (لینک دعوت با ?id= همچنان اعمال می‌شود).',
'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'referral_show' LIMIT 1);
-- fee_single حذف شد — اختلاف فقط buy_fee / sell_fee (خالی = صفر)
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'buy_fee', '', 'سود خرید نمایش', 1, 1, NULL, 'price'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'buy_fee' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'sell_fee', '', 'سود فروش نمایش', 1, 1, NULL, 'price'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'sell_fee' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
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', 'اعمال مبلغ دقیق در معامله مشتری', 0, 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`)
SELECT 'min_withdraw', '', 'حداقل برداشت (ریال)', 1, 1, NULL, 'price'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'min_withdraw' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'min_deposit', '1000000', 'حداقل واریز کیف پول (ریال)', 1, 1,
'حداقل مبلغ واریز به کیف پول (ریال). مبالغ کمتر در اپ و درگاه پذیرفته نمی‌شوند.',
'price'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'min_deposit' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'min_first_buy', '', 'حداقل اولین خرید (ریال)', 1, 1, NULL, 'price'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'min_first_buy' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'minimum_sell', '', 'حداقل فروش', 1, 1, NULL, 'price'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'minimum_sell' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'referral_bonus_amount', '', 'مقدار پاداش معرف', 0, 1, NULL, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'referral_bonus_amount' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'balance_report_exclude_customer_id', '', 'حذف مشتری از تراز', 1, 1, NULL, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'balance_report_exclude_customer_id' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'montzar_closed', 'false', 'بسته بودن همکار', 1, 1, NULL, 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'montzar_closed' LIMIT 1);
-- =============================================================================
-- عنوان فارسی — backfill اولیه (فقط اگر title_fa خالی باشد؛ override نهایی در انتهای فایل)
-- =============================================================================
-- backfill عنوان فارسی کلیدهای قدیمی (فقط اگر title_fa خالی/NULL باشد)
UPDATE `settings` SET `title_fa` = 'نام فارسی اپ' WHERE `key` = 'name_fa' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'نام انگلیسی اپ' WHERE `key` = 'name_en' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'آدرس اپ (کاربر)' WHERE `key` = 'app_url' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'آدرس پایه' WHERE `key` = 'bace_url' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'لوگوی صفحه ورود' WHERE `key` = 'logo_login' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'لوگوی ثبت‌نام' WHERE `key` = 'logo_register' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'آدرس پنل ادمین' WHERE `key` = 'admin_url' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'عنوان PWA' WHERE `key` = 'title_pwa' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'عنوان favicon' WHERE `key` = 'title_fav' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'متن قوانین' WHERE `key` = 'text_rule' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'متن درباره ما' WHERE `key` = 'text_about' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'صفحه کسب درآمد' WHERE `key` = 'has_page_earn_money' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'صفحه صندوق' WHERE `key` = 'has_page_fund' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'صفحه مجوزها' WHERE `key` = 'has_page_permission' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'هشدار قیمت' WHERE `key` = 'has_page_price_trigger' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'صفحه طلای فیزیکی' WHERE `key` = 'has_page_physical_gold' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'رنگ اصلی' WHERE `key` = 'color_primary' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'رنگ ثانویه' WHERE `key` = 'color_secondary' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'کارمزد (قدیمی — درصد)' WHERE `key` = 'fee' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'چت پشتیبانی' WHERE `key` = 'has_chat' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'آدرس API سرور' WHERE `key` = 'server_url' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'کلید داخلی اپ' WHERE `key` = 'key' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'تعداد معرف برای هدیه' WHERE `key` = 'referral_count_for_gift' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'مقدار پاداش معرف' WHERE `key` = 'referral_bonus_amount' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '' OR `title_fa` = 'مبلغ پاداش معرف');
UPDATE `settings` SET `title_fa` = 'حداقل برداشت (ریال)' WHERE `key` = 'min_withdraw' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'حداقل واریز کیف پول (ریال)' WHERE `key` = 'min_deposit' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'حداقل اولین خرید (ریال)' WHERE `key` = 'min_first_buy' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `value` = '1000000' WHERE `key` = 'min_deposit' AND (`value` IS NULL OR TRIM(`value`) = '');
UPDATE `settings` SET `title_fa` = 'حداقل فروش' WHERE `key` = 'minimum_sell' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'ثبت‌نام باز' WHERE `key` = 'open_register' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'ارسال به ته‌حساب' WHERE `key` = 'send_to_tahesab' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'گرد کردن تومان پی‌پینگ' WHERE `key` = 'payping_round_toman' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'برداشت ناموفق سخت‌گیرانه' WHERE `key` = 'payping_strict_failed_withdraw' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'وضعیت فروشگاه' WHERE `key` = 'store_status' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'حالت فروشگاهی' WHERE `key` = 'is_store' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'محصولات متصل به کیف اصلی' WHERE `key` = 'main_wallet_products' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'واحد وزن' WHERE `key` = 'unit' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = 'حذف مشتری از تراز' WHERE `key` = 'balance_report_exclude_customer_id' AND (`title_fa` IS NULL OR TRIM(`title_fa`) = '');
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'منبع قیمت'),
`description` = 'منبع فعال قیمت|montzar,zaarbox,main_product'
WHERE `key` = 'price_provider';
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'محصول / UUID تابلو')
WHERE `key` = 'main_product';
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'آدرس API Zaarbox')
WHERE `key` = 'zaarbox_api_url';
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'شناسه ردیف Zaarbox')
WHERE `key` = 'zaarbox_price_key';
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'سود خرید نمایش')
WHERE `key` = 'buy_fee';
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'سود فروش نمایش')
WHERE `key` = 'sell_fee';
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'درصد کارمزد سفارش')
WHERE `key` = 'fee_service_charge_percentage';
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'تأیید کارت جیبیت')
WHERE `key` = 'jibit_verification';
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'تأیید ثبت‌نام جیبیت')
WHERE `key` = 'register_jibit_verify';
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'شناسه کلاینت API خارجی')
WHERE `key` = 'node_client_id';
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'کلید HMAC API خارجی')
WHERE `key` = 'node_shared_secret';
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'API سفارش خارجی')
WHERE `key` = 'external_order_api_enabled';
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'قیمت لحظه‌ای (SSE)')
WHERE `key` = 'wss_enabled';
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'مسیر SSE قیمت')
WHERE `key` = 'sse_path';
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'بسته بودن همکار')
WHERE `key` = 'montzar_closed';
UPDATE `settings` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'نام فروشگاه در درگاه')
WHERE `key` = 'montify_name';
-- =============================================================================
-- CONST — کلیدهای مورد استفاده کد
-- =============================================================================
INSERT INTO `const` (`key`, `value`, `title_fa`)
SELECT 'jibit_counter', '0', 'شمارنده API جیبیت'
WHERE NOT EXISTS (SELECT 1 FROM `const` WHERE `key` = 'jibit_counter' LIMIT 1);
INSERT INTO `const` (`key`, `value`, `title_fa`)
SELECT 'app_closed', 'false', 'بسته بودن اپ (ساعات)'
WHERE NOT EXISTS (SELECT 1 FROM `const` WHERE `key` = 'app_closed' LIMIT 1);
INSERT INTO `const` (`key`, `value`, `title_fa`)
SELECT 'gram', '1', 'گرم هدیه ثبت‌نام'
WHERE NOT EXISTS (SELECT 1 FROM `const` WHERE `key` = 'gram' LIMIT 1);
INSERT INTO `const` (`key`, `value`, `title_fa`)
SELECT 'price', '[]', 'لیست قیمت TGJU (JSON)'
WHERE NOT EXISTS (SELECT 1 FROM `const` WHERE `key` = 'price' LIMIT 1);
INSERT INTO `const` (`key`, `value`, `title_fa`)
SELECT 'main_product', '', 'محصول آبشده (fallback)'
WHERE NOT EXISTS (SELECT 1 FROM `const` WHERE `key` = 'main_product' LIMIT 1);
UPDATE `const` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'شمارنده جیبیت')
WHERE `key` = 'jibit_counter';
UPDATE `const` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'باز بودن درگاه')
WHERE `key` = 'is_gateway_open';
UPDATE `const` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'محصول آبشده (fallback)')
WHERE `key` = 'main_product';
-- =============================================================================
-- نوع فیلد پنل ادمین (type) — value دست نخورده
-- =============================================================================
-- longtext
UPDATE `settings` SET `type` = 'longtext' WHERE `key` IN (
'text_rule', 'text_about', 'support_messenger_text', 'invite_link_text',
'deposit_support_message_text', 'price_channel_message_text',
'montzar_order_response', 'montzar_last_product_log', 'tracking_systems'
);
-- select (+ گزینه‌ها در description)
UPDATE `settings` SET `type` = 'select', `description` = 'none,pargar,tahesab,zarin' WHERE `key` = 'accounting_provider';
UPDATE `settings` SET `type` = 'select', `description` = 'منبع فعال قیمت|montzar,zaarbox,main_product' WHERE `key` = 'price_provider';
UPDATE `settings` SET `type` = 'switch', `title_fa` = 'کد معرف اجباری', `description` = 'روشن = اجباری در ثبت‌نام | خاموش = اختیاری' WHERE `key` = 'referral_id';
UPDATE `settings` SET `type` = 'switch', `title_fa` = 'نمایش فیلد کد معرف', `description` = 'روشن: فیلد کد معرف در صفحه ثبت‌نام اپ کاربر نمایش داده می‌شود. خاموش: فیلد مخفی است (لینک دعوت با ?id= همچنان اعمال می‌شود).' WHERE `key` = 'referral_show';
UPDATE `settings` SET `type` = 'select', `description` = 'sepal,' WHERE `key` = 'payping_gateway_name';
UPDATE `settings` SET `type` = 'select', `description` = 'bale,telegram,whatsapp,rubika,eitaa,soroush' WHERE `key` = 'support_messenger';
-- switch
UPDATE `settings` SET `type` = 'switch' WHERE `key` IN (
'chart_use_local_data',
'jibit_enabled', 'jibit_verification', 'register_jibit_verify', 'open_register', 'auto_active_customer',
'referral_show',
'close_price', 'show_last_price', 'show_gold_ounce_price', 'show_home_price_when_closed', 'show_product_details',
'show_product_trade_status', 'show_product_card_meta',
'products_site_link_enabled',
'fee_deduct_from_gold',
'require_zero_main_gold_before_other_buy',
'profit_gold_api_enabled', 'payping_round_toman', 'payping_strict_failed_withdraw',
'has_page_earn_money', 'has_page_price_trigger', 'has_page_notification', 'has_page_gift_card',
'enable_customer_level_profit', 'charge_notif', 'group_sms', 'customer_special_pricing', 'sms_panel', 'customer_direct_sms',
'enable_conditional_order', 'enable_product_funds',
'sms_notif_order_admin', 'sms_notif_order_customer',
'sms_notif_withdraw_admin', 'sms_notif_withdraw_otp', 'sms_notif_login_otp',
'sms_notif_gateway_charge_admin', 'sms_notif_register_customer', 'sms_notif_register_admin',
'sms_notif_jibit_admin', 'sms_notif_bank_card_admin', 'sms_notif_bank_card_customer',
'sms_notif_fund_withdraw_admin', 'sms_notif_fund_withdraw_customer',
'sms_notif_price_trigger', 'sms_notif_wallet_alert', 'sms_notif_support_admin',
'montzar_closed', 'montzar_open_buy', 'montzar_open_sell',
'payping_fin_sync_enabled', 'external_order_api_enabled', 'is_store', 'wss_enabled', 'tracking_systems_enabled',
'register_referral_sms_to_referrer', 'register_referral_bonus_message',
'referral_gift_on_first_order', 'referral_gift_buy_from_montzar',
'banner_enabled', 'permision__enabled'
);
-- price (مبالغ ریالی)
UPDATE `settings` SET `type` = 'price' WHERE `key` IN (
'buy_fee', 'sell_fee',
'min_withdraw', 'min_deposit', 'min_first_buy', 'minimum_sell',
'up_price', 'down_price'
);
-- number (شماره، شناسه، درصد، تعداد — بدون جداکننده هزارگان)
UPDATE `settings` SET `type` = 'number' WHERE `key` IN (
'fee_service_charge_percentage', 'fee_free',
'montzar_product_id', 'gift_for_referrer', 'gift_for_referral',
'payping_fin_customer_id', 'tahesab_port', 'referral_limit',
'deposit_sms_support_number',
'pargar_item_id_rial', 'pargar_item_id_gold'
);
-- text (بقیه — URL، توکن، کلید API، ساعت، ...)
UPDATE `settings` SET `type` = 'text' WHERE `key` IN (
'name_fa', 'name_en', 'app_url', 'bace_url', 'logo_login', 'logo_register', 'admin_url', 'title_pwa', 'title_fav',
'server_url', 'key', 'main_product', 'zaarbox_api_url', 'zaarbox_price_key', 'chart_id',
'etehadie_api_url', 'montzar_mobile', 'montzar_password', 'montzar_base_url',
'montzar_token', 'montzar_diff', 'montzar_live_price', 'montzar_mazaneh',
'montzar_truly_buy_mazaneh', 'montzar_truly_sell_mazaneh', 'startDay', 'endDay',
'payping_start_url', 'payping_verify_url', 'payping_gateway_items', 'payping_fin_url',
'payping_fin_token', 'tahesab_host', 'tahesab_token', 'tahesab_db',
'pargar_username', 'pargar_password', 'pargar_api_token',
'pargar_item_id_rial', 'pargar_item_id_gold',
'node_client_id', 'node_shared_secret',
'sse_path',
'tahesab_bank_account', 'telegram_bot_token', 'bale_bot_token', 'support_messenger_id',
'referral_bonus_amount', 'balance_report_exclude_customer_id', 'metal_type', 'main_metal', 'montify_name', 'price_extreme_date',
'liman_token',
'products_site_link_url', 'products_site_link_text'
);
-- پیش‌فرض برای ردیف‌های بدون type
UPDATE `settings` SET `type` = 'text' WHERE `type` IS NULL OR TRIM(`type`) = '';
-- =============================================================================
-- ---------------------------------------------------------------------------
-- کلیدهای modular اضافی (INSERT اگر نبود)
-- ---------------------------------------------------------------------------
INSERT INTO `settings` (`key`, `title_fa`, `value`, `can_edit`, `is_exist`, `is_active`, `type`, `description`)
SELECT 'price_provider', 'منبع قیمت', 'montzar', 1, 0, 1, 'select', 'منبع فعال قیمت|montzar,zaarbox,main_product'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'price_provider' LIMIT 1);
-- حذف alias قدیمی؛ منبع واحد: fee_service_charge_percentage
DELETE FROM `settings` WHERE `key` = 'service_charge_percentage';
INSERT INTO `settings` (`key`, `title_fa`, `value`, `can_edit`, `is_exist`, `is_active`, `type`)
SELECT 'title_pwa', 'عنوان PWA', '', 0, 0, 0, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'title_pwa' LIMIT 1);
INSERT INTO `settings` (`key`, `title_fa`, `value`, `can_edit`, `is_exist`, `is_active`, `type`)
SELECT 'title_fav', 'عنوان favicon', '', 0, 0, 0, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'title_fav' LIMIT 1);
INSERT INTO `settings` (`key`, `title_fa`, `value`, `can_edit`, `is_exist`, `is_active`, `type`)
SELECT 'text_rule', 'متن قوانین', '', 1, 0, 1, 'longtext'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'text_rule' LIMIT 1);
INSERT INTO `settings` (`key`, `title_fa`, `value`, `can_edit`, `is_exist`, `is_active`, `type`)
SELECT 'text_about', 'متن درباره ما', '', 1, 0, 1, 'longtext'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'text_about' LIMIT 1);
INSERT INTO `settings` (`key`, `title_fa`, `value`, `can_edit`, `is_exist`, `is_active`, `type`)
SELECT 'zaarbox_api_url', 'آدرس API تابلو Zaarbox', '', 1, 0, 1, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zaarbox_api_url' LIMIT 1);
INSERT INTO `settings` (`key`, `title_fa`, `value`, `can_edit`, `is_exist`, `is_active`, `type`)
SELECT 'zaarbox_price_key', 'شناسه ردیف تابلو (key یا UUID)', '', 1, 0, 1, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zaarbox_price_key' LIMIT 1);
INSERT INTO `settings` (`key`, `title_fa`, `value`, `can_edit`, `is_exist`, `is_active`, `type`)
SELECT 'main_product', 'محصول آبشده', '', 1, 0, 1, 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'main_product' LIMIT 1);
INSERT INTO `settings` (`key`, `title_fa`, `value`, `can_edit`, `is_exist`, `is_active`, `type`)
SELECT 'profit_gold_api_enabled', 'API سود طلا', 'false', 1, 0, 0, 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'profit_gold_api_enabled' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'unit', '', 'واحد وزن دارایی و معاملات', 1, 1,
'واحد نمایش وزن فلز در دارایی‌ها، کیف پول و تراکنش‌ها|گرم,کیلوگرم', 'select'
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', 'محصولات متصل به کیف اصلی', 0, 1,
'محصولاتی که موجودی‌شان از کیف طلای اصلی خوانده می‌شود. چند محصول با کاما. پیش‌فرض: 13'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'main_wallet_products' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'require_zero_main_gold_before_other_buy', 'true', 'الزام صفر بودن کیف اصلی قبل از خرید محصول دیگر', 1, 1,
'روشن: اگر مانده طلای کیف اصلی صفر یا زیر صفر باشد (بدهی)، مشتری ابتدا باید آبشده/مانده کیف اصلی را صفر کند و بعد می‌تواند محصول دیگر بخرد. خاموش: بدون این محدودیت. معامله خودِ محصولات کیف اصلی همیشه مجاز است.', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'require_zero_main_gold_before_other_buy' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'apk_download_link', '', 'لینک دانلود اپ اندروید', 0, 1,
'آدرس کامل فایل APK اندروید (https). اگر خالی باشد لینک دانلود در اپ نمایش داده نمی‌شود.', 'text'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'apk_download_link' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'banner_enabled', 'true', 'نمایش بنرها', 1, 1,
'روشن: منوی «بنرها» در ادمین و اسلایدر صفحه اصلی اپ مشتری نمایش داده می‌شود. خاموش: مخفی است (محتوای بنر از همان منو مدیریت می‌شود).', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'banner_enabled' LIMIT 1);
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'permision__enabled', 'false', 'نمایش منوی مجوزها', 0, 1,
'روشن: آیتم «مجوز ها» در منوی تنظیمات اپ خانگی (تم جدید) نمایش داده می‌شود. خاموش: مخفی است.', 'switch'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'permision__enabled' LIMIT 1);
-- ---------------------------------------------------------------------------
-- const — کلیدهای اضافی
-- ---------------------------------------------------------------------------
INSERT INTO `const` (`key`, `value`, `title_fa`)
SELECT 'is_gateway_open', 'true', 'باز بودن درگاه پرداخت'
WHERE NOT EXISTS (SELECT 1 FROM `const` WHERE `key` = 'is_gateway_open' LIMIT 1);
INSERT INTO `const` (`key`, `value`, `title_fa`)
SELECT 'header_banner', '', 'بنر بالای صفحه'
WHERE NOT EXISTS (SELECT 1 FROM `const` WHERE `key` = 'header_banner' LIMIT 1);
INSERT INTO `const` (`key`, `value`, `title_fa`)
SELECT 'last_order_log', '', 'لاگ آخرین سفارش همکار'
WHERE NOT EXISTS (SELECT 1 FROM `const` WHERE `key` = 'last_order_log' LIMIT 1);
INSERT INTO `const` (`key`, `value`, `title_fa`)
SELECT 'liman', '', 'توکن fin (legacy)'
WHERE NOT EXISTS (SELECT 1 FROM `const` WHERE `key` = 'liman' LIMIT 1);
-- ---------------------------------------------------------------------------
-- پاکسازی کلیدهای legacy / تست
-- ---------------------------------------------------------------------------
DELETE FROM `settings` WHERE `key` IN (
'test', 'test2', 'test22', 'test3', 'test33', 'longtest', 'longtest2', 'test*',
'is_requaire_referral', 'send_to_goldir', 'goldir_price', 'liman_token',
'melted_product_id', 'display_montzar', 'tabanGohar_price', 'etehadie_api_url',
'price_method', 'price_primary_source',
'has_page_fund', 'has_page_permission', 'has_page_physical_gold',
'product_update_price_on_list', 'product_auto_close_open_on_list',
'referral_count_for_gift', 'store_status',
'name_en', 'bace_url', 'server_url', 'key', 'color_primary', 'color_secondary',
'price_from_nasiryan',
'montzar_price',
'fee_single',
'goldir_base_url', 'fee_cash', 'default_vc_number', 'payping_gateway_item',
'wss_path', 'wss_link', 'wss_trigger_path',
'wss_trigger_host', 'wss_trigger_scheme', 'wss_http_port', 'wss_socket_port'
);
DELETE FROM `const` WHERE `key` = 'log' OR `key` LIKE 'goldir%' OR `key` IN (
'limited_price',
'first_customer_wallet_value',
'nasiryan',
'nasiryan_price',
'nasiryan_diff',
'nasiryan_mazaneh',
'nasiryan_truly_buy_mazaneh',
'nasiryan_truly_sell_mazaneh',
'nasiryan_closed'
);
-- ---------------------------------------------------------------------------
-- metadata — type / title_fa / description (value / is_active دست نمی‌خورند؛ can_edit در انتها)
-- ---------------------------------------------------------------------------
UPDATE `settings` SET `description` = NULL
WHERE LOWER(TRIM(COALESCE(`description`, ''))) IN ('true', 'false', '0', '1', 'yes', 'no', 'in server')
OR TRIM(COALESCE(`description`, '')) LIKE 'count of%';
UPDATE `settings` SET `description` = 'منبع فعال قیمت. montzar = همکار|montzar,zaarbox,main_product'
WHERE `key` = 'price_provider';
UPDATE `settings` SET
`type` = 'switch',
`title_fa` = 'کد معرف اجباری',
`description` = 'روشن = اجباری در ثبت‌نام | خاموش = اختیاری'
WHERE `key` = 'referral_id';
UPDATE `settings` SET
`type` = 'switch',
`title_fa` = 'نمایش فیلد کد معرف',
`description` = 'روشن: فیلد کد معرف در صفحه ثبت‌نام اپ کاربر نمایش داده می‌شود. خاموش: فیلد مخفی است (لینک دعوت با ?id= همچنان اعمال می‌شود).'
WHERE `key` = 'referral_show';
UPDATE `settings` SET `type` = 'switch'
WHERE `key` IN ('register_referral_sms_to_referrer', 'register_referral_bonus_message', 'referral_gift_on_first_order', 'referral_gift_buy_from_montzar');
UPDATE `settings` SET
`type` = 'switch',
`title_fa` = 'نمودار از داده خود سایت',
`description` = 'خاموش = Zaarbox (chart_id) | روشن = تاریخچه prices'
WHERE `key` = 'chart_use_local_data';
UPDATE `settings` SET `type` = 'number', `title_fa` = 'تعداد سفارش اول بدون کارمزد', `description` = 'عدد — ۰ یعنی غیرفعال'
WHERE `key` = 'fee_free';
UPDATE `settings` SET `description` = 'تعداد سفارش اول بدون کارمزد' WHERE `key` = 'fee_free';
UPDATE `settings` SET `description` = 'id یا reading_method محصول آبشده' WHERE `key` = 'main_product';
UPDATE `settings` SET
`title_fa` = 'شناسه پشتیبانی پیام‌رسان',
`type` = 'text',
`description` = 'یوزرنیم یا شماره تماس بسته به پیام‌رسان انتخاب‌شده'
WHERE `key` = 'support_messenger_id';
UPDATE `settings` SET
`title_fa` = 'متن راهنمای واریز',
`type` = 'longtext',
`can_edit` = 1,
`description` = @deposit_guide_desc
WHERE `key` = 'support_messenger_text';
UPDATE `settings` SET
`title_fa` = 'متن پیام به پشتیبانی (واریز)',
`type` = 'longtext',
`can_edit` = 1,
`description` = @deposit_support_msg_desc
WHERE `key` = 'deposit_support_message_text';
UPDATE `settings` SET
`title_fa` = 'نام صاحب حساب واریز',
`type` = 'text',
`can_edit` = 1,
`description` = 'نام صاحب حساب واریز — در متن راهنما و پیام پشتیبانی با ٪نام یا %نام جایگزین می‌شود.'
WHERE `key` = 'deposit_account_holder';
UPDATE `settings` SET
`title_fa` = 'شماره کارت واریز',
`type` = 'text',
`can_edit` = 1,
`description` = 'شماره کارت واریز — در متن‌ها با ٪کارت یا %کارت جایگزین می‌شود.'
WHERE `key` = 'deposit_card_number';
UPDATE `settings` SET
`title_fa` = 'شماره حساب واریز',
`type` = 'text',
`can_edit` = 1,
`description` = 'شماره حساب بانکی واریز — در مودال راهنمای شارژ کنار کارت و شبا نمایش داده می‌شود. در متن‌ها با ٪حساب یا %حساب جایگزین می‌شود.'
WHERE `key` = 'deposit_account_number';
UPDATE `settings` SET
`title_fa` = 'شبا واریز',
`type` = 'text',
`can_edit` = 1,
`description` = 'شماره شبا واریز — در متن‌ها با ٪شبا یا %شبا جایگزین می‌شود.'
WHERE `key` = 'deposit_sheba';
UPDATE `settings` SET
`title_fa` = 'متن دعوتنامه اشتراک‌گذاری',
`type` = 'longtext',
`description` = @invite_link_desc
WHERE `key` = 'invite_link_text';
UPDATE `settings` SET
`title_fa` = 'پیام‌رسان پشتیبانی',
`type` = 'select',
`description` = 'bale,telegram,whatsapp,rubika,eitaa,soroush'
WHERE `key` = 'support_messenger';
UPDATE `settings` SET
`title_fa` = 'آدرس IP سرور ته‌حساب',
`type` = 'text',
`description` = NULL
WHERE `key` = 'tahesab_host';
UPDATE `settings` SET
`title_fa` = 'پورت سرور ته‌حساب',
`type` = 'number',
`description` = NULL
WHERE `key` = 'tahesab_port';
UPDATE `settings` SET
`title_fa` = 'نام دیتابیس ته‌حساب',
`type` = 'text',
`description` = 'مثال: TahesabDB'
WHERE `key` = 'tahesab_db';
UPDATE `settings` SET
`title_fa` = 'حساب بانکی ته‌حساب',
`type` = 'text',
`description` = 'نام حساب بانکی در سند واریز'
WHERE `key` = 'tahesab_bank_account';
UPDATE `settings` SET `title_fa` = 'مقدار پاداش معرف' WHERE `key` = 'referral_bonus_amount';
UPDATE `settings` SET `type` = 'text' WHERE `key` = 'balance_report_exclude_customer_id';
-- پاکسازی title_fa / description از نام پروژه یا ارجاع کد
UPDATE `settings` SET `title_fa` = 'حالت فروشگاهی'
WHERE `key` = 'is_store' AND (`title_fa` LIKE '%قطره%' OR `title_fa` LIKE '%کشکول%');
UPDATE `settings` SET `title_fa` = 'همگام‌سازی fin'
WHERE `key` = 'payping_fin_sync_enabled' AND `title_fa` LIKE '%لیمان%';
UPDATE `settings` SET `title_fa` = 'نام فروشگاه در درگاه', `description` = 'نام فروشگاه که در درگاه پرداخت و رسید بانکی به کاربر نمایش داده می‌شود.'
WHERE `key` = 'montify_name';
-- descriptionهای قدیمی که عمداً NULL می‌شدند — در بلوک پایانی بازنویسی می‌شوند
UPDATE `const` SET `title_fa` = 'توکن fin (legacy)' WHERE `key` = 'liman' AND `title_fa` LIKE '%لیمان%';
UPDATE `const` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'بنر بالای صفحه') WHERE `key` = 'header_banner';
UPDATE `const` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'باز بودن درگاه') WHERE `key` = 'is_gateway_open';
UPDATE `const` SET `title_fa` = COALESCE(NULLIF(TRIM(`title_fa`), ''), 'لاگ آخرین سفارش') WHERE `key` = 'last_order_log';
-- ---------------------------------------------------------------------------
-- راهنمای کامل تنظیمات (description) — برای نمایش در پنل ادمین
-- فرمت select: «متن راهنما|گزینه۱,گزینه۲»
-- ---------------------------------------------------------------------------
UPDATE `settings` SET `description` = 'نام فارسی برند که در پیامک‌ها، عنوان صفحات و بخش‌های عمومی اپ کاربر نمایش داده می‌شود.' WHERE `key` = 'name_fa';
UPDATE `settings` SET `description` = 'آدرس کامل وب‌اپ کاربر (با https). در لینک‌های پیامک، بازگشت از درگاه و ارجاعات داخلی استفاده می‌شود.' WHERE `key` = 'app_url';
UPDATE `settings` SET `description` = 'آدرس کامل پنل مدیریت (با https). برای لینک‌های ادمین و تنظیمات CORS در صورت نیاز.' WHERE `key` = 'admin_url';
UPDATE `settings` SET `description` = 'آدرس تصویر لوگو در صفحه ورود. معمولاً از طریق دیپلوی یا آپلود فایل تنظیم می‌شود؛ در پنل قابل ویرایش نیست.' WHERE `key` = 'logo_login';
UPDATE `settings` SET `description` = 'آدرس تصویر لوگو در صفحه ثبت‌نام. معمولاً از طریق دیپلوی تنظیم می‌شود؛ در پنل قابل ویرایش نیست.' WHERE `key` = 'logo_register';
UPDATE `settings` SET `description` = 'عنوان کوتاه برای نصب PWA روی موبایل. از دیپلوی مدیریت می‌شود.' WHERE `key` = 'title_pwa';
UPDATE `settings` SET `description` = 'عنوان نمایش‌داده‌شده در تب مرورگر (favicon). از دیپلوی مدیریت می‌شود.' WHERE `key` = 'title_fav';
UPDATE `settings` SET `description` = 'عنوان فلز اصلی در رابط کاربر (مثلاً «طلای آبشده» یا «کاتد مس»). در دارایی، کیف پول و برچسب‌های معامله دیده می‌شود. فقط از دیپلوی/SQL تغییر می‌کند.' WHERE `key` = 'metal_type';
UPDATE `settings` SET `title_fa` = 'نام فلز اصلی (ادمین)', `description` = 'نام کوتاه فلز برای برچسب‌های پنل ادمین (مثلاً «مس» یا «طلا»). «تراز طلایی» می‌شود «تراز مس» — نه «تراز مسی». فقط از دیپلوی/SQL تغییر می‌کند.' WHERE `key` = 'main_metal';
UPDATE `settings` SET `description` = 'واحد نمایش وزن در دارایی‌ها، کیف پول و جزئیات معاملات|گرم,کیلوگرم' WHERE `key` = 'unit';
UPDATE `settings` SET `description` = 'روشن: کاربران جدید می‌توانند ثبت‌نام کنند. خاموش: فقط ورود کاربران موجود مجاز است.' WHERE `key` = 'open_register';
UPDATE `settings` SET `description` = 'روشن: بعد از ثبت‌نام کاربر می‌تواند وارد اپ شود (بدون تأیید دستی ادمین). خاموش: ورود فقط بعد از فعال‌سازی دستی در پنل. این سوییچ اجازهٔ خرید/فروش نمی‌دهد — معامله فقط بعد از احراز هویت ممکن است.' WHERE `key` = 'auto_active_customer';
UPDATE `settings` SET `title_fa` = 'فعال‌سازی خودکار پس از ثبت‌نام' WHERE `key` = 'auto_active_customer';
UPDATE `settings` SET `description` = 'نوع چیدمان اپ: روشن = حالت فروشگاهی (سبد، دسته‌بندی، حواله و …). خاموش = حالت معامله آبشده/محصولات کلاسیک. فقط از دیپلوی تغییر می‌کند.' WHERE `key` = 'is_store';
UPDATE `settings` SET `description` = 'روشن: نمودار قیمت از تاریخچه ذخیره‌شده در دیتابیس خودتان. خاموش: از سرویس تابلو آنلاین (با شناسه chart_id) استفاده می‌شود.' WHERE `key` = 'chart_use_local_data';
UPDATE `settings` SET `description` = 'شناسه یکتا (UUID) نمودار در سرویس تابلو. اگر خالی باشد از شناسه پیش‌فرض سرویس استفاده می‌شود.' WHERE `key` = 'chart_id';
UPDATE `settings` SET `description` = 'منبع دریافت قیمت لحظه‌ای برای اپ کاربر و همگام‌سازی محصولات. مقدار montzar = قیمت از همکار (Montzar).|montzar,zaarbox,main_product' WHERE `key` = 'price_provider';
UPDATE `settings` SET `description` = 'شناسه عددی یا نام reading_method محصول آبشده مرجع. وقتی منبع قیمت روی main_product باشد برای محاسبه استفاده می‌شود.' WHERE `key` = 'main_product';
UPDATE `settings` SET `description` = 'آدرس سرور(های) فید قیمت (/api/free). تا ۵ آدرس (JSON آرایه) پشتیبانی می‌شود؛ اگر آدرس اول پاسخ ندهد به‌ترتیب سراغ بعدی می‌رود. مقدار تکی قبلی حفظ می‌شود.' WHERE `key` = 'zaarbox_api_url';
UPDATE `settings` SET `description` = 'کلید یا UUID ردیف قیمت در پاسخ API تابلو. باید با محصول/ردیف موردنظر در سرویس خارجی یکسان باشد.' WHERE `key` = 'zaarbox_price_key';
UPDATE `settings` SET `description` = 'روشن: اگر API قیمت در دسترس نباشد، آخرین قیمت ذخیره‌شده در دیتابیس به کاربر نشان داده می‌شود. خاموش: در قطعی API ممکن است قیمت صفر نمایش داده شود.' WHERE `key` = 'show_last_price';
UPDATE `settings` SET `description` = 'روشن: اگر آدرس API تابلو (zaarbox_api_url) تنظیم شده باشد، قیمت انس طلا در اپ مشتری نمایش داده می‌شود. خاموش: نمایش داده نمی‌شود.' WHERE `key` = 'show_gold_ounce_price';
UPDATE `settings` SET `description` = 'روشن: وقتی فروشگاه خارج از ساعت کاری است، قیمت صفحه اصلی اپ همچنان نمایش داده می‌شود و پیام «فروشگاه بسته است» نشان داده نمی‌شود. خرید/فروش همچنان بسته می‌ماند. خاموش: مثل قبل، خارج از ساعت پیام بسته بودن و قیمت صفر نشان داده می‌شود.' WHERE `key` = 'show_home_price_when_closed';
UPDATE `settings` SET `description` = 'روشن: بعد از انتخاب محصول در صفحه خرید/فروش، متن توضیح محصول نمایش داده می‌شود. خاموش: توضیح نشان داده نمی‌شود.' WHERE `key` = 'show_product_details';
UPDATE `settings` SET `description` = 'روشن: در صفحه خرید/فروش (بالای تب دسته‌ها) یک دکمه تمام‌عرض نشان داده می‌شود که با کلیک، لینک تنظیم‌شده را در تب جدید مرورگر باز می‌کند. خاموش: دکمه مخفی است.' WHERE `key` = 'products_site_link_enabled';
UPDATE `settings` SET `description` = 'آدرس کامل سایت یا صفحه خارجی (مثلاً https://example.com). با کلیک روی دکمه در اپ کاربر، همین آدرس در تب جدید مرورگر باز می‌شود. اگر خالی باشد، با وجود روشن بودن سوییچ، دکمه کاری انجام نمی‌دهد.' WHERE `key` = 'products_site_link_url';
UPDATE `settings` SET `description` = 'متنی که روی دکمه لینک خارجی در صفحه خرید/فروش نمایش داده می‌شود. اگر خالی باشد، پیش‌فرض «ورود به سایت» همراه آیکون کره زمین نشان داده می‌شود.' WHERE `key` = 'products_site_link_text';
UPDATE `settings` SET `description` = 'روشن: روی کارت محصول برچسب خرید باز/بسته و فروش باز/بسته نمایش داده می‌شود. خاموش: مخفی است.' WHERE `key` = 'show_product_trade_status';
UPDATE `settings` SET `description` = 'روشن: روی کارت محصول دسته‌بندی، وضعیت تحویل فیزیکی و مقدار/وزن نمایش داده می‌شود. خاموش: مخفی است.' WHERE `key` = 'show_product_card_meta';
UPDATE `settings` SET `description` = 'روشن: خارج از بازه «ساعت شروع» تا «ساعت پایان» معامله و نمایش قیمت بسته می‌شود. خاموش: محدودیت ساعتی سراسری اعمال نمی‌شود.' WHERE `key` = 'close_price';
UPDATE `settings` SET `description` = 'ساعت شروع فعالیت روزانه. فقط وقتی «بستن خودکار خارج از ساعت کاری» روشن باشد اعمال می‌شود (مثلاً ۰۹:۰۰).' WHERE `key` = 'startDay';
UPDATE `settings` SET `description` = 'ساعت پایان فعالیت روزانه. فقط وقتی «بستن خودکار خارج از ساعت کاری» روشن باشد اعمال می‌شود (مثلاً ۲۲:۰۰).' WHERE `key` = 'endDay';
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
`title_fa` = 'اعمال مبلغ دقیق در معامله مشتری',
`type` = 'switch',
`can_edit` = 0,
`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_deposit';
UPDATE `settings` SET `description` = 'حداقل مبلغ اولین خرید هر کاربر (ریال). برای فعال‌سازی کیف یا احراز سطح اول استفاده می‌شود.' WHERE `key` = 'min_first_buy';
UPDATE `settings` SET `description` = 'حداقل مقدار/مبلغ مجاز برای ثبت سفارش فروش. بسته به نوع محصول می‌تواند وزن یا ریال باشد.' WHERE `key` = 'minimum_sell';
UPDATE `settings` SET `description` = 'بیشترین قیمت ثبت‌شده در روز جاری (ریال). توسط سیستم به‌روز می‌شود؛ دستی تغییر ندهید.' WHERE `key` = 'up_price';
UPDATE `settings` SET `description` = 'کمترین قیمت ثبت‌شده در روز جاری (ریال). توسط سیستم به‌روز می‌شود؛ دستی تغییر ندهید.' WHERE `key` = 'down_price';
UPDATE `settings` SET `description` = 'تاریخ آخرین به‌روزرسانی بیشترین/کمترین قیمت روز. توسط سیستم پر می‌شود.' WHERE `key` = 'price_extreme_date';
UPDATE `settings` SET `description` = 'شناسه عددی مشتری که از گزارش تراز و آمار تجمیعی حذف می‌شود (مثلاً حساب تست). چند id با کاما.' WHERE `key` = 'balance_report_exclude_customer_id';
UPDATE `settings` SET `description` = 'تنظیم legacy — از price_provider استفاده کنید. روشن بودن این گزینه دیگر توصیه نمی‌شود.' WHERE `key` = 'main_product_price';
UPDATE `settings` SET `description` = 'متن کامل قوانین و مقررات استفاده از اپ که در صفحه قوانین به کاربر نشان داده می‌شود. HTML ساده مجاز است.' WHERE `key` = 'text_rule';
UPDATE `settings` SET `description` = 'متن «درباره ما» شامل معرفی مجموعه، راه‌های ارتباطی و توضیح خدمات. در صفحه مربوطه در اپ کاربر نمایش داده می‌شود.' WHERE `key` = 'text_about';
UPDATE `settings` SET `description` = 'روشن: وارد کردن کد معرف در ثبت‌نام اجباری است. خاموش: کد معرف اختیاری است. اگر «نمایش فیلد کد معرف» خاموش باشد، اجباری بودن اعمال نمی‌شود.' WHERE `key` = 'referral_id';
UPDATE `settings` SET `description` = 'روشن: فیلد کد معرف در صفحه ثبت‌نام اپ کاربر نمایش داده می‌شود. خاموش: فیلد مخفی است (لینک دعوت با ?id= همچنان اعمال می‌شود). اگر خاموش است و اجباری روشن باشد، فقط ثبت‌نام از لینک دعوت ممکن است.' WHERE `key` = 'referral_show';
UPDATE `settings` SET `description` = 'مقدار پاداش (گرم) به کیف معرف. ۰ = بدون پاداش. زمان واریز بسته به «پاداش معرف پس از اولین سفارش» است. خرید پوشش از همکار با کلید «خرید پاداش معرفی از همکار» کنترل می‌شود.' WHERE `key` = 'gift_for_referrer';
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
`title_fa` = 'خرید پاداش معرفی از همکار',
`can_edit` = 1,
`type` = 'switch',
`description` = 'روشن: اگر منبع قیمت montzar باشد، قبل از واریز پاداش معرف/معرف‌شونده همان وزن از همکار خرید می‌شود؛ شکست خرید = واریز نمی‌شود. خاموش: مثل قبل فقط به کیف واریز می‌شود بدون خرید از همکار.'
WHERE `key` = 'referral_gift_buy_from_montzar';
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';
UPDATE `settings` SET `description` = 'روشن: تطبیق کد ملی و موبایل در فرآیند ثبت‌نام از طریق سرویس جیبیت.' WHERE `key` = 'register_jibit_verify';
UPDATE `settings` SET `description` = 'روشن: منوی «کسب درآمد / دعوت دوستان» در اپ کاربر نمایش داده می‌شود.' WHERE `key` = 'has_page_earn_money';
UPDATE `settings` SET `description` = 'روشن: منوی هشدار قیمت در اپ کاربر نمایش داده می‌شود. خاموش: منو و صفحه مخفی است. فقط از دیپلوی قابل تغییر است.' WHERE `key` = 'has_page_price_trigger';
UPDATE `settings` SET `description` = 'روشن: زنگوله اعلان در اپ کاربر و منوی ثبت اعلان در ادمین فعال است. خاموش: مخفی است. فقط از دیپلوی قابل تغییر است.' WHERE `key` = 'has_page_notification';
UPDATE `settings` SET `title_fa` = 'اعلان داخل اپ' WHERE `key` = 'has_page_notification';
UPDATE `settings` SET
`title_fa` = 'دسترسی ارسال قیمت به کانال',
`type` = 'switch',
`can_edit` = 0,
`description` = 'روشن: گروه «ارسال قیمت به کانال» در تنظیمات عادی پنل دیده می‌شود. خاموش: مخفی است (فقط از تنظیمات پیشرفته).'
WHERE `key` = 'price_channel_access';
-- محصول: اعلان داخل اپ پیش‌فرض روشن برای همه دیپلوی‌ها (can_edit=0؛ فقط از دیپلوی)
UPDATE `settings` SET `value` = 'true' WHERE `key` = 'has_page_notification';
UPDATE `settings` SET `description` = 'شماره موبایل حساب API سرویس همکار قیمت. برای دریافت توکن و لیست محصولات.' WHERE `key` = 'montzar_mobile';
UPDATE `settings` SET `description` = 'رمز عبور حساب API سرویس همکار قیمت. محرمانه نگه دارید.' WHERE `key` = 'montzar_password';
UPDATE `settings` SET `description` = 'شناسه محصول آبشده در API همکار. باید با محصول مرجع در سرویس خارجی یکسان باشد.' WHERE `key` = 'montzar_product_id';
UPDATE `settings` SET `description` = 'آدرس پایه سرور API همکار (بدون اسلش انتهایی). مثال: https://example.com' WHERE `key` = 'montzar_base_url';
UPDATE `settings` SET `description` = 'توکن دسترسی API همکار. پس از ورود موفق توسط سیستم پر می‌شود؛ دستی ویرایش نکنید.' WHERE `key` = 'montzar_token';
UPDATE `settings` SET `description` = 'اختلاف قیمت دریافتی از همکار (ریال). توسط cron/همگام‌سازی پر می‌شود.' WHERE `key` = 'montzar_diff';
UPDATE `settings` SET `description` = 'آخرین قیمت لحظه‌ای دریافت‌شده از همکار (ریال). فقط خواندنی — توسط سیستم به‌روز می‌شود.' WHERE `key` = 'montzar_live_price';
UPDATE `settings` SET `description` = 'مظنه میانی دریافت‌شده از همکار. توسط سیستم به‌روز می‌شود.' WHERE `key` = 'montzar_mazaneh';
UPDATE `settings` SET `description` = 'مظنه واقعی سمت خرید از همکار. توسط سیستم به‌روز می‌شود.' WHERE `key` = 'montzar_truly_buy_mazaneh';
UPDATE `settings` SET `description` = 'مظنه واقعی سمت فروش از همکار. توسط سیستم به‌روز می‌شود.' WHERE `key` = 'montzar_truly_sell_mazaneh';
UPDATE `settings` SET `description` = 'روشن: امکان ثبت سفارش خرید از طریق قیمت همکار باز است (طبق وضعیت سرویس خارجی).' WHERE `key` = 'montzar_open_buy';
UPDATE `settings` SET `description` = 'روشن: امکان ثبت سفارش فروش از طریق قیمت همکار باز است.' WHERE `key` = 'montzar_open_sell';
UPDATE `settings` SET `description` = 'روشن: سرویس همکار در حال حاضر بسته/غیرفعال گزارش شده است.' WHERE `key` = 'montzar_closed';
UPDATE `settings` SET `description` = 'پاسخ JSON آخرین سفارش ارسالی به همکار. برای عیب‌یابی؛ توسط سیستم پر می‌شود.' WHERE `key` = 'montzar_order_response';
UPDATE `settings` SET `description` = 'لاگ JSON آخرین محصول دریافت‌شده از API همکار. توسط سیستم پر می‌شود.' WHERE `key` = 'montzar_last_product_log';
UPDATE `settings` SET `description` = 'آدرس کامل فایل APK اندروید (https). اگر خالی باشد لینک دانلود در اپ نمایش داده نمی‌شود.' WHERE `key` = 'apk_download_link';
UPDATE `settings` SET `description` = 'روشن: منوی «بنرها» در ادمین و اسلایدر صفحه اصلی اپ مشتری نمایش داده می‌شود. خاموش: مخفی است (محتوای بنر از همان منو مدیریت می‌شود).' WHERE `key` = 'banner_enabled';
UPDATE `settings` SET `description` = 'روشن: آیتم «مجوز ها» در منوی تنظیمات اپ خانگی (تم جدید) نمایش داده می‌شود. خاموش: مخفی است.' WHERE `key` = 'permision__enabled';
UPDATE `settings` SET `description` = 'شناسه کلاینت برای API سفارش خارجی (هدر X-Client-Id). باید با مقدار تنظیم‌شده در سرویس مقصد یکسان باشد.' WHERE `key` = 'node_client_id';
UPDATE `settings` SET `description` = 'کلید مشترک امضای HMAC برای احراز درخواست‌های API سفارش خارجی. محرمانه نگه دارید.' WHERE `key` = 'node_shared_secret';
UPDATE `settings` SET `description` = 'روشن: API دریافت کیف پول و ثبت سفارش از سرویس فروشگاه خارجی فعال است. نیاز به node_client_id و node_shared_secret دارد.' WHERE `key` = 'external_order_api_enabled';
UPDATE `settings` SET `description` = 'روشن: اپ به SSE (sse_path) وصل می‌شود و last/list با payload می‌آید؛ خاموش: polling.' WHERE `key` = 'wss_enabled';
UPDATE `settings` SET `description` = 'مسیر GET لاراول برای استریم قیمت — پیش‌فرض /api/price/stream' WHERE `key` = 'sse_path';
UPDATE `settings` SET `description` = 'JSON لیست سایت‌های ری‌گیری — هر مورد: id، name، url. از منوی «سایت‌های ری‌گیری» ویرایش می‌شود.' WHERE `key` = 'tracking_systems';
UPDATE `settings` SET `description` = 'روشن: منوی «سایت‌های ری‌گیری» در ادمین و اپ مشتری نمایش داده می‌شود. خاموش: مخفی است.' WHERE `key` = 'tracking_systems_enabled';
UPDATE `settings` SET `description` = 'نام فروشگاه که در درگاه پرداخت و رسید بانکی به کاربر نمایش داده می‌شود.' WHERE `key` = 'montify_name';
UPDATE `settings` SET `description` = 'روشن: پس از واریز/برداشت، تراکنش به سامانه حسابداری fin همگام‌سازی می‌شود.' WHERE `key` = 'payping_fin_sync_enabled';
UPDATE `settings` SET `description` = 'آدرس کامل endpoint ثبت تراکنش در سامانه fin (POST).' WHERE `key` = 'payping_fin_url';
UPDATE `settings` SET `description` = 'توکن احراز هویت برای API سامانه fin.' WHERE `key` = 'payping_fin_token';
UPDATE `settings` SET `description` = 'شناسه مشتری/حساب در سامانه fin که تراکنش‌ها به نام آن ثبت می‌شوند.' WHERE `key` = 'payping_fin_customer_id';
UPDATE `settings` SET `description` = 'آدرس API شروع پرداخت (redirect کاربر به درگاه).' WHERE `key` = 'payping_start_url';
UPDATE `settings` SET `description` = 'آدرس API تأیید و نهایی‌سازی پرداخت پس از بازگشت از درگاه.' WHERE `key` = 'payping_verify_url';
UPDATE `settings` SET `description` = 'نام درگاه پرداخت فعال که به سرویس واسط درگاه ارسال می‌شود|sepal,' WHERE `key` = 'payping_gateway_name';
UPDATE `settings` SET `description` = 'لیست کدهای item درگاه (با کاما) برای چرخش بین چند merchant.' WHERE `key` = 'payping_gateway_items';
UPDATE `settings` SET `description` = 'روشن: مبلغ پرداخت به نزدیک‌ترین تومان گرد می‌شود. خاموش: مبلغ دقیق ریالی.' WHERE `key` = 'payping_round_toman';
UPDATE `settings` SET `description` = 'روشن: در صورت وجود برداشت ناموفق قبلی، تسویه جدید با احتیاط بیشتر انجام می‌شود.' WHERE `key` = 'payping_strict_failed_withdraw';
UPDATE `settings` SET `description` = 'آدرس IP یا hostname سرور نرم‌افزار ته‌حساب روی شبکه داخلی.' WHERE `key` = 'tahesab_host';
UPDATE `settings` SET `description` = 'شماره پورت اتصال به API ته‌حساب (معمولاً 8080 یا مقدار مستندات ته‌حساب).' WHERE `key` = 'tahesab_port';
UPDATE `settings` SET `description` = 'توکن/API Key اتصال به ته‌حساب. از پنل ته‌حساب دریافت می‌شود.' WHERE `key` = 'tahesab_token';
UPDATE `settings` SET `description` = 'نام دیتابیس یا شناسه پایگاه در ته‌حساب که سند به آن ارسال می‌شود.' WHERE `key` = 'tahesab_db';
UPDATE `settings` SET `description` = 'نام یا کد حساب بانکی در سند واریز/برداشت ته‌حساب.' WHERE `key` = 'tahesab_bank_account';
UPDATE `settings` SET `description` = 'روشن: واریز و برداشت مشتریان به‌صورت خودکار به ته‌حساب ارسال می‌شود.' WHERE `key` = 'send_to_tahesab';
UPDATE `settings` SET `description` = 'نوع پیام‌رسان برای دکمه پشتیبانی در اپ کاربر|bale,telegram,whatsapp,rubika,eitaa,soroush' WHERE `key` = 'support_messenger';
UPDATE `settings` SET `description` = 'شناسه تماس پشتیبانی: یوزرنیم (تلگرام)، شماره (واتساپ/بله) یا آیدی بسته به پیام‌رسان انتخاب‌شده.' WHERE `key` = 'support_messenger_id';
UPDATE `settings` SET `description` = @deposit_guide_desc WHERE `key` = 'support_messenger_text';
UPDATE `settings` SET `description` = @deposit_support_msg_desc WHERE `key` = 'deposit_support_message_text';
UPDATE `settings` SET `description` = @price_channel_message_desc WHERE `key` = 'price_channel_message_text';
UPDATE `settings` SET
`title_fa` = 'قالب متن پیام کانال',
`type` = 'longtext',
`can_edit` = 1,
`description` = @price_channel_message_desc
WHERE `key` = 'price_channel_message_text';
UPDATE `settings` SET `description` = @invite_link_desc WHERE `key` = 'invite_link_text';
UPDATE `settings` SET `description` = 'شماره تماس پشتیبانی. اگر پر باشد، در منوی شناور پشتیبانی آیتم‌های «تماس» و «پیام» اضافه می‌شود؛ متن پیام از «متن پیام به پشتیبانی (واریز)» خوانده می‌شود.' WHERE `key` = 'deposit_sms_support_number';
UPDATE `settings` SET `description` = 'توکن ربات تلگرام برای ارسال اعلان‌ها. از BotFather دریافت می‌شود. محرمانه.' WHERE `key` = 'telegram_bot_token';
UPDATE `settings` SET `description` = 'توکن ربات بله برای ارسال اعلان‌ها. محرمانه.' WHERE `key` = 'bale_bot_token';
UPDATE `settings` SET `description` = 'روشن: بعد از شارژ یا کسر کیف توسط ادمین، پیامک به مشتری و ادمین‌های دارای «ارسال پیامک» می‌رود. خاموش: هیچ‌کدام ارسال نمی‌شود.' WHERE `key` = 'charge_notif';
UPDATE `settings` SET `description` = 'روشن: بعد از خرید یا فروش موفق، پیامک خلاصه معامله به ادمین‌های دارای «ارسال پیامک» می‌رود. خاموش: ادمین پیامک معامله نمی‌گیرد.' WHERE `key` = 'sms_notif_order_admin';
UPDATE `settings` SET `description` = 'روشن: بعد از خرید یا فروش موفق، پیامک رسید (مقدار، مبلغ، موجودی) به مشتری می‌رود. خاموش: مشتری پیامک معامله نمی‌گیرد.' WHERE `key` = 'sms_notif_order_customer';
UPDATE `settings` SET `description` = 'روشن: وقتی مشتری درخواست برداشت ریالی می‌دهد، پیامک به ادمین‌های دارای «ارسال پیامک» می‌رود. خاموش: اعلان برداشت به ادمین نمی‌رود.' WHERE `key` = 'sms_notif_withdraw_admin';
UPDATE `settings` SET `description` = 'روشن: رمز یکبارمصرف برداشت برای مشتری پیامک می‌شود. خاموش: رمز پیامک نمی‌شود (برداشت با OTP عملاً کار نمی‌کند). خاموش کردن توصیه نمی‌شود.' WHERE `key` = 'sms_notif_withdraw_otp';
UPDATE `settings` SET `description` = 'روشن: رمز یکبارمصرف ورود برای کاربر/مشتری پیامک می‌شود. خاموش: ورود با OTP ممکن نیست. خاموش کردن توصیه نمی‌شود.' WHERE `key` = 'sms_notif_login_otp';
UPDATE `settings` SET `description` = 'روشن: بعد از شارژ موفق کیف از درگاه پرداخت، پیامک به ادمین‌های دارای «ارسال پیامک» می‌رود. خاموش: اعلان شارژ درگاه نمی‌رود.' WHERE `key` = 'sms_notif_gateway_charge_admin';
UPDATE `settings` SET `description` = 'روشن: بعد از ثبت‌نام، پیامک خوش‌آمد (نام کاربری و لینک ورود) به مشتری می‌رود. خاموش: پیامک خوش‌آمد ارسال نمی‌شود.' WHERE `key` = 'sms_notif_register_customer';
UPDATE `settings` SET `description` = 'روشن: وقتی کسی با کد معرف ثبت‌نام می‌کند و پیامک به معرف خاموش است، اعلان ثبت‌نام به ادمین می‌رود. خاموش: این اعلان ادمین نمی‌رود.' WHERE `key` = 'sms_notif_register_admin';
UPDATE `settings` SET `description` = 'روشن: نتیجه احراز هویت جیبیت در ثبت‌نام برای ادمین‌های دارای «ارسال پیامک» پیامک می‌شود. خاموش: اعلان جیبیت نمی‌رود.' WHERE `key` = 'sms_notif_jibit_admin';
UPDATE `settings` SET `description` = 'روشن: وقتی مشتری کارت بانکی جدید ثبت می‌کند یا احراز کارت ناموفق است، پیامک به ادمین می‌رود. خاموش: اعلان کارت به ادمین نمی‌رود.' WHERE `key` = 'sms_notif_bank_card_admin';
UPDATE `settings` SET `description` = 'روشن: بعد از تایید کارت بانکی توسط ادمین، پیامک تایید به مشتری می‌رود. خاموش: مشتری از تایید کارت پیامک نمی‌گیرد.' WHERE `key` = 'sms_notif_bank_card_customer';
UPDATE `settings` SET `description` = 'روشن: برداشت از قلک (ریالی یا طلایی) برای ادمین‌های دارای «ارسال پیامک» پیامک می‌شود. خاموش: اعلان برداشت قلک به ادمین نمی‌رود.' WHERE `key` = 'sms_notif_fund_withdraw_admin';
UPDATE `settings` SET `description` = 'روشن: بعد از برداشت از قلک، پیامک رسید به مشتری می‌رود. خاموش: مشتری پیامک برداشت قلک نمی‌گیرد.' WHERE `key` = 'sms_notif_fund_withdraw_customer';
UPDATE `settings` SET `description` = 'روشن: وقتی هشدار قیمت مشتری (اقدام=پیامک) فعال می‌شود، پیامک به مشتری می‌رود. خاموش: هشدار قیمت پیامک نمی‌فرستد.' WHERE `key` = 'sms_notif_price_trigger';
UPDATE `settings` SET `description` = 'روشن: وقتی اعتبار کیف پول پنل پیامک صفر یا منفی شود، هشدار به سوپرادمین و ادمین‌های دارای «ارسال پیامک» می‌رود. خاموش: این هشدار نمی‌رود.' WHERE `key` = 'sms_notif_wallet_alert';
UPDATE `settings` SET `description` = 'روشن: وقتی مشتری اولین پیام خوانده‌نشده را در چت پشتیبانی می‌فرستد و ادمین همان اتاق را باز و visible ندارد، پیامک به ادمین‌های دارای «ارسال پیامک» می‌رود. خاموش: اعلان پیامک چت نمی‌رود.' WHERE `key` = 'sms_notif_support_admin';
UPDATE `settings` SET `description` = 'رمز مشترک بین لاراول و سرور چت برای اعلان پیام پشتیبانی. فقط سرور؛ در صورت خالی بودن به‌صورت خودکار ساخته می‌شود.' WHERE `key` = 'chat_webhook_secret';
UPDATE `settings` SET `description` = 'اگر APP_URL فرانت است (مثلاً https://niazitala.ir) اینجا آدرس لاراول را بگذار (مثلاً https://niazitala.ir/server). خالی = همان APP_URL.' WHERE `key` = 'chat_webhook_base_url';
UPDATE `settings` SET `title_fa` = 'آدرس پایه وب‌هوک چت' WHERE `key` = 'chat_webhook_base_url';
UPDATE `settings` SET `description` = 'روشن: در لیست مشتریان دکمه ارسال پیامک تکی نمایش داده می‌شود و ادمین می‌تواند برای هر مشتری متن دلخواه بفرستد. خاموش: دکمه مخفی است. فقط از صفحه دیپلوی تغییر می‌کند.' WHERE `key` = 'customer_direct_sms';
UPDATE `settings` SET `title_fa` = 'پیامک تکی به مشتری از لیست' WHERE `key` = 'customer_direct_sms';
UPDATE `settings` SET `description` = 'روشن: سرویس احراز هویت جیبیت (تطبیق کد ملی/موبایل و کارت بانکی) فعال است. خاموش: هیچ فراخوانی به جیبیت انجام نمی‌شود و احراز هویت خودکار کار نمی‌کند. فقط از صفحه دیپلوی قابل تغییر است.' WHERE `key` = 'jibit_enabled';
UPDATE `settings` SET `title_fa` = 'احراز هویت جیبیت' WHERE `key` = 'jibit_enabled';
UPDATE `settings` SET `title_fa` = 'سفارش شرطی' WHERE `key` = 'enable_conditional_order';
UPDATE `settings` SET `title_fa` = 'قلک محصول' WHERE `key` = 'enable_product_funds';
UPDATE `settings` SET `description` = 'روشن: ساخت و مدیریت قلک per-product در اپ مشتری فعال است (یک محصول در هر قلک؛ انتقال بدون سند حسابداری). خاموش: منو و API ساخت قلک جدید در دسترس نیست. فقط از دیپلوی قابل تغییر است.' WHERE `key` = 'enable_product_funds';
UPDATE `settings` SET `title_fa` = 'کارت هدیه' WHERE `key` = 'has_page_gift_card';
UPDATE `settings` SET `description` = 'روشن: منوی «ثبت کارت هدیه» و صفحه ثبت کد در اپ کاربر فعال است. خاموش: منو و صفحه مخفی است و API استفاده از کد هدیه در دسترس نیست. فقط از دیپلوی قابل تغییر است.' WHERE `key` = 'has_page_gift_card';
UPDATE `settings` SET `title_fa` = 'سود چندسطحی معرف' WHERE `key` = 'enable_customer_level_profit';
UPDATE `settings` SET `description` = 'روشن: در لیست مشتریان آیکون تنظیم درصد سود هر سطح زیرمجموعه فعال است و پس از سفارش، سهم کارمزد طبق درصدهای هر معرف به کیف طلا واریز می‌شود. خاموش: آیکون و واریز سود چندسطحی غیرفعال است. فقط از دیپلوی قابل تغییر است.' WHERE `key` = 'enable_customer_level_profit';
UPDATE `settings` SET `description` = 'روشن: دکمه ارسال پیامک گروهی در پنل ادمین فعال است (ارسال ۱۰تایی). خاموش: ارسال پیامک گروهی غیرفعال است. فقط از تنظیمات پیشرفته.' WHERE `key` = 'group_sms';
UPDATE `settings` SET `description` = 'روشن: پنل پیامک و کیف پول billing فعال است. خاموش: پیامک‌ها مثل قبل ارسال می‌شوند بدون billing.' WHERE `key` = 'sms_panel';
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` = 0 WHERE `key` = 'main_wallet_products';
UPDATE `settings` SET
`title_fa` = 'الزام صفر بودن کیف اصلی قبل از خرید محصول دیگر',
`type` = 'switch',
`can_edit` = 1,
`description` = 'روشن: اگر مانده طلای کیف اصلی صفر یا زیر صفر باشد (بدهی)، مشتری ابتدا باید آبشده/مانده کیف اصلی را صفر کند و بعد می‌تواند محصول دیگر بخرد. خاموش: بدون این محدودیت. معامله خودِ محصولات کیف اصلی همیشه مجاز است.'
WHERE `key` = 'require_zero_main_gold_before_other_buy';
UPDATE `settings` SET `title_fa` = 'الزام صفر بودن کیف اصلی قبل از خرید محصول دیگر' WHERE `key` = 'require_zero_main_gold_before_other_buy';
UPDATE `settings` SET `description` = 'روشن: API محاسبه سود طلا فعال است. در اکثر نصب‌ها خاموش می‌ماند.' WHERE `key` = 'profit_gold_api_enabled';
-- ---------------------------------------------------------------------------
-- ensure — کلیدهای longtext (INSERT نهایی + تثبیت type بعد از batchهای type=text)
-- ---------------------------------------------------------------------------
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'invite_link_text', @invite_link_default_text, 'متن دعوتنامه اشتراک‌گذاری', 1, 1, @invite_link_desc, 'longtext'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'invite_link_text' LIMIT 1);
UPDATE `settings` SET
`title_fa` = 'متن دعوتنامه اشتراک‌گذاری',
`type` = 'longtext',
`description` = @invite_link_desc
WHERE `key` = 'invite_link_text';
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'deposit_support_message_text', 'شماره حساب', 'متن پیام به پشتیبانی (واریز)', 1, 1, @deposit_support_msg_desc, 'longtext'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'deposit_support_message_text' LIMIT 1);
UPDATE `settings` SET
`title_fa` = 'متن پیام به پشتیبانی (واریز)',
`type` = 'longtext',
`can_edit` = 1,
`description` = @deposit_support_msg_desc
WHERE `key` = 'deposit_support_message_text';
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
SELECT 'price_channel_message_text', @price_channel_default_text, 'قالب متن پیام کانال', 1, 1, @price_channel_message_desc, 'longtext'
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'price_channel_message_text' LIMIT 1);
UPDATE `settings` SET
`title_fa` = 'قالب متن پیام کانال',
`type` = 'longtext',
`can_edit` = 1,
`description` = @price_channel_message_desc
WHERE `key` = 'price_channel_message_text';
UPDATE `settings` SET `type` = 'longtext'
WHERE `key` IN (
'text_rule', 'text_about', 'support_messenger_text', 'invite_link_text',
'deposit_support_message_text', 'price_channel_message_text',
'montzar_order_response', 'montzar_last_product_log'
);
-- ---------------------------------------------------------------------------
-- title_fa — استاندارد مشترک (override؛ value / is_active دست نمی‌خورند)
-- ---------------------------------------------------------------------------
UPDATE `settings` SET `title_fa` = 'آدرس پنل ادمین' WHERE `key` = 'admin_url';
UPDATE `settings` SET `title_fa` = 'لینک دانلود اپ اندروید' WHERE `key` = 'apk_download_link';
UPDATE `settings` SET `title_fa` = 'آدرس اپ (کاربر)' WHERE `key` = 'app_url';
UPDATE `settings` SET `title_fa` = 'فعال‌سازی خودکار پس از ثبت‌نام' WHERE `key` = 'auto_active_customer';
UPDATE `settings` SET `title_fa` = 'آدرس پایه' WHERE `key` = 'bace_url';
UPDATE `settings` SET `title_fa` = 'حذف مشتری از تراز' WHERE `key` = 'balance_report_exclude_customer_id';
UPDATE `settings` SET `title_fa` = 'توکن بات بله' WHERE `key` = 'bale_bot_token';
UPDATE `settings` SET `title_fa` = 'نمایش بنرها' WHERE `key` = 'banner_enabled';
UPDATE `settings` SET `title_fa` = 'سود خرید نمایش' WHERE `key` = 'buy_fee';
UPDATE `settings` SET `title_fa` = 'پیامک شارژ ادمین' WHERE `key` = 'charge_notif';
UPDATE `settings` SET `title_fa` = 'پیامک خرید/فروش به ادمین' WHERE `key` = 'sms_notif_order_admin';
UPDATE `settings` SET `title_fa` = 'پیامک خرید/فروش به مشتری' WHERE `key` = 'sms_notif_order_customer';
UPDATE `settings` SET `title_fa` = 'پیامک درخواست برداشت به ادمین' WHERE `key` = 'sms_notif_withdraw_admin';
UPDATE `settings` SET `title_fa` = 'پیامک رمز برداشت' WHERE `key` = 'sms_notif_withdraw_otp';
UPDATE `settings` SET `title_fa` = 'پیامک رمز ورود' WHERE `key` = 'sms_notif_login_otp';
UPDATE `settings` SET `title_fa` = 'پیامک شارژ درگاه به ادمین' WHERE `key` = 'sms_notif_gateway_charge_admin';
UPDATE `settings` SET `title_fa` = 'پیامک خوش‌آمد ثبت‌نام' WHERE `key` = 'sms_notif_register_customer';
UPDATE `settings` SET `title_fa` = 'پیامک ثبت‌نام به ادمین' WHERE `key` = 'sms_notif_register_admin';
UPDATE `settings` SET `title_fa` = 'پیامک احراز هویت به ادمین' WHERE `key` = 'sms_notif_jibit_admin';
UPDATE `settings` SET `title_fa` = 'پیامک کارت بانکی به ادمین' WHERE `key` = 'sms_notif_bank_card_admin';
UPDATE `settings` SET `title_fa` = 'پیامک تایید کارت به مشتری' WHERE `key` = 'sms_notif_bank_card_customer';
UPDATE `settings` SET `title_fa` = 'پیامک برداشت قلک به ادمین' WHERE `key` = 'sms_notif_fund_withdraw_admin';
UPDATE `settings` SET `title_fa` = 'پیامک برداشت قلک به مشتری' WHERE `key` = 'sms_notif_fund_withdraw_customer';
UPDATE `settings` SET `title_fa` = 'پیامک هشدار قیمت' WHERE `key` = 'sms_notif_price_trigger';
UPDATE `settings` SET `title_fa` = 'پیامک هشدار اعتبار پنل پیامک' WHERE `key` = 'sms_notif_wallet_alert';
UPDATE `settings` SET `title_fa` = 'پیامک پیام پشتیبانی به ادمین' WHERE `key` = 'sms_notif_support_admin';
UPDATE `settings` SET `title_fa` = 'رمز وب‌هوک چت' WHERE `key` = 'chat_webhook_secret';
UPDATE `settings` SET `title_fa` = 'UUID نمودار Zaarbox' WHERE `key` = 'chart_id';
UPDATE `settings` SET `title_fa` = 'نمودار از داده خود سایت' WHERE `key` = 'chart_use_local_data';
UPDATE `settings` SET `title_fa` = 'بستن خودکار خارج از ساعت کاری' WHERE `key` = 'close_price';
UPDATE `settings` SET `title_fa` = 'رنگ اصلی' WHERE `key` = 'color_primary';
UPDATE `settings` SET `title_fa` = 'رنگ ثانویه' WHERE `key` = 'color_secondary';
UPDATE `settings` SET `title_fa` = 'شماره تماس پشتیبانی' WHERE `key` = 'deposit_sms_support_number';
UPDATE `settings` SET `title_fa` = 'کمترین قیمت امروز' WHERE `key` = 'down_price';
UPDATE `settings` SET `title_fa` = 'ساعت پایان' WHERE `key` = 'endDay';
UPDATE `settings` SET `title_fa` = 'فعال‌سازی API سفارش خارجی (get_wallet / order)' WHERE `key` = 'external_order_api_enabled';
UPDATE `settings` SET `title_fa` = 'کارمزد (قدیمی — درصد)' WHERE `key` = 'fee';
UPDATE `settings` SET `title_fa` = 'تعداد سفارش اول بدون کارمزد' WHERE `key` = 'fee_free';
UPDATE `settings` SET `title_fa` = 'درصد کارمزد سفارش' WHERE `key` = 'fee_service_charge_percentage';
UPDATE `settings` SET `title_fa` = 'اعمال مبلغ دقیق در معامله مشتری' WHERE `key` = 'fee_deduct_from_gold';
UPDATE `settings` SET `title_fa` = 'پاداش معرف‌شونده' WHERE `key` = 'gift_for_referral';
UPDATE `settings` SET `title_fa` = 'پاداش معرف' WHERE `key` = 'gift_for_referrer';
UPDATE `settings` SET `title_fa` = 'پیامک گروهی' WHERE `key` = 'group_sms';
UPDATE `settings` SET
`title_fa` = 'قیمت ویژه مشتری',
`type` = 'switch',
`can_edit` = 0,
`description` = 'روشن: زیرمنوی قیمت ویژه در مشتریان و اعمال سود خرید/فروش پکیج روی مظنه و سفارش برای کاربران انتخاب‌شده. خاموش: غیرفعال. فقط از دیپلوی قابل تغییر است.'
WHERE `key` = 'customer_special_pricing';
UPDATE `settings` SET `title_fa` = 'پنل پیامک (کیف پول)' WHERE `key` = 'sms_panel';
UPDATE `settings` SET
`title_fa` = 'چت پشتیبانی',
`type` = 'switch',
`can_edit` = 1,
`description` = 'روشن: چت پشتیبانی در اپ مشتری نمایش داده می‌شود (فقط وقتی show_to_users_chat هم روشن باشد). خاموش: دکمه و صفحه چت برای کاربر مخفی است.'
WHERE `key` = 'has_chat';
UPDATE `settings` SET
`title_fa` = 'نمایش چت به کاربران',
`type` = 'switch',
`description` = 'روشن: قابلیت چت پشتیبانی برای این دیپلوی فعال است (منوی ادمین و پیش‌نیاز نمایش به کاربر). خاموش: چت در ادمین و اپ کاربر مخفی است و سوییچ «چت پشتیبانی» (has_chat) از تنظیمات عادی هم برداشته می‌شود.',
`can_edit` = 0
WHERE `key` = 'show_to_users_chat';
UPDATE `settings` SET `title_fa` = 'API چت', `type` = 'text', `can_edit` = 0
WHERE `key` = 'chat_api';
UPDATE `settings` SET `title_fa` = 'کلید API چت', `type` = 'text', `can_edit` = 0
WHERE `key` = 'chat_api_key';
UPDATE `settings` SET `title_fa` = 'آدرس آپلود فایل چت', `type` = 'text', `can_edit` = 0
WHERE `key` = 'chat_upload_url';
UPDATE `settings` SET `title_fa` = 'آدرس دانلود فایل چت', `type` = 'text', `can_edit` = 0
WHERE `key` = 'chat_download_url';
UPDATE `settings` SET `title_fa` = 'صفحه کسب درآمد' WHERE `key` = 'has_page_earn_money';
UPDATE `settings` SET `title_fa` = 'صفحه صندوق' WHERE `key` = 'has_page_fund';
UPDATE `settings` SET `title_fa` = 'صفحه مجوزها' WHERE `key` = 'has_page_permission';
UPDATE `settings` SET `title_fa` = 'صفحه طلای فیزیکی' WHERE `key` = 'has_page_physical_gold';
UPDATE `settings` SET `title_fa` = 'هشدار قیمت' WHERE `key` = 'has_page_price_trigger';
UPDATE `settings` SET `title_fa` = 'متن دعوتنامه اشتراک‌گذاری' WHERE `key` = 'invite_link_text';
UPDATE `settings` SET `title_fa` = 'حالت فروشگاهی' WHERE `key` = 'is_store';
UPDATE `settings` SET `title_fa` = 'تأیید کارت بانکی با جیبیت' WHERE `key` = 'jibit_verification';
UPDATE `settings` SET `title_fa` = 'کلید داخلی اپ' WHERE `key` = 'key';
UPDATE `settings` SET `title_fa` = 'لوگوی صفحه ورود' WHERE `key` = 'logo_login';
UPDATE `settings` SET `title_fa` = 'لوگوی ثبت‌نام' WHERE `key` = 'logo_register';
UPDATE `settings` SET `title_fa` = 'نام فلز اصلی (ادمین)' WHERE `key` = 'main_metal';
UPDATE `settings` SET `title_fa` = 'محصول آبشده' WHERE `key` = 'main_product';
UPDATE `settings` SET `title_fa` = 'قیمت از محصول (legacy)' WHERE `key` = 'main_product_price';
UPDATE `settings` SET `title_fa` = 'محصولات متصل به کیف اصلی' WHERE `key` = 'main_wallet_products';
UPDATE `settings` SET `title_fa` = 'الزام صفر بودن کیف اصلی قبل از خرید محصول دیگر' WHERE `key` = 'require_zero_main_gold_before_other_buy';
UPDATE `settings` SET `title_fa` = 'عنوان فلز در UI' WHERE `key` = 'metal_type';
UPDATE `settings` SET `title_fa` = 'حداقل اولین خرید (ریال)' WHERE `key` = 'min_first_buy';
UPDATE `settings` SET `title_fa` = 'حداقل برداشت (ریال)' WHERE `key` = 'min_withdraw';
UPDATE `settings` SET `title_fa` = 'حداقل واریز کیف پول (ریال)' WHERE `key` = 'min_deposit';
UPDATE `settings` SET `can_edit` = 1 WHERE `key` = 'min_deposit';
UPDATE `settings` SET `title_fa` = 'حداقل فروش' WHERE `key` = 'minimum_sell';
UPDATE `settings` SET `title_fa` = 'نام فروشگاه در درگاه' WHERE `key` = 'montify_name';
UPDATE `settings` SET `title_fa` = 'آدرس سرور همکار' WHERE `key` = 'montzar_base_url';
UPDATE `settings` SET `title_fa` = 'بسته بودن همکار' WHERE `key` = 'montzar_closed';
UPDATE `settings` SET `title_fa` = 'اختلاف قیمت همکار' WHERE `key` = 'montzar_diff';
UPDATE `settings` SET `title_fa` = 'لاگ محصول همکار' WHERE `key` = 'montzar_last_product_log';
UPDATE `settings` SET `title_fa` = 'قیمت لحظه‌ای همکار' WHERE `key` = 'montzar_live_price';
UPDATE `settings` SET `title_fa` = 'مظنه همکار' WHERE `key` = 'montzar_mazaneh';
UPDATE `settings` SET `title_fa` = 'موبایل API همکار' WHERE `key` = 'montzar_mobile';
UPDATE `settings` SET `title_fa` = 'باز بودن خرید همکار' WHERE `key` = 'montzar_open_buy';
UPDATE `settings` SET `title_fa` = 'باز بودن فروش همکار' WHERE `key` = 'montzar_open_sell';
UPDATE `settings` SET `title_fa` = 'پاسخ سفارش همکار' WHERE `key` = 'montzar_order_response';
UPDATE `settings` SET `title_fa` = 'رمز API همکار' WHERE `key` = 'montzar_password';
UPDATE `settings` SET `title_fa` = 'کد محصول همکار' WHERE `key` = 'montzar_product_id';
UPDATE `settings` SET `title_fa` = 'توکن همکار (خودکار)' WHERE `key` = 'montzar_token';
UPDATE `settings` SET `title_fa` = 'مظنه خرید همکار' WHERE `key` = 'montzar_truly_buy_mazaneh';
UPDATE `settings` SET `title_fa` = 'مظنه فروش همکار' WHERE `key` = 'montzar_truly_sell_mazaneh';
UPDATE `settings` SET `title_fa` = 'نام انگلیسی اپ' WHERE `key` = 'name_en';
UPDATE `settings` SET `title_fa` = 'نام فارسی اپ' WHERE `key` = 'name_fa';
UPDATE `settings` SET `title_fa` = 'شناسه کلاینت API خارجی (X-Client-Id)' WHERE `key` = 'node_client_id';
UPDATE `settings` SET `title_fa` = 'کلید امضای HMAC API خارجی' WHERE `key` = 'node_shared_secret';
UPDATE `settings` SET `title_fa` = 'ثبت‌نام باز' WHERE `key` = 'open_register';
UPDATE `settings` SET `title_fa` = 'customer_id fin' WHERE `key` = 'payping_fin_customer_id';
UPDATE `settings` SET `title_fa` = 'همگام‌سازی fin' WHERE `key` = 'payping_fin_sync_enabled';
UPDATE `settings` SET `title_fa` = 'توکن fin' WHERE `key` = 'payping_fin_token';
UPDATE `settings` SET `title_fa` = 'URL fin' WHERE `key` = 'payping_fin_url';
UPDATE `settings` SET `title_fa` = 'لیست item (چرخشی)' WHERE `key` = 'payping_gateway_items';
UPDATE `settings` SET `title_fa` = 'نام gateway درگاه' WHERE `key` = 'payping_gateway_name';
UPDATE `settings` SET `title_fa` = 'گرد کردن مبلغ به تومان' WHERE `key` = 'payping_round_toman';
UPDATE `settings` SET `title_fa` = 'آدرس شروع درگاه' WHERE `key` = 'payping_start_url';
UPDATE `settings` SET `title_fa` = 'برداشت ناموفق سخت‌گیرانه' WHERE `key` = 'payping_strict_failed_withdraw';
UPDATE `settings` SET `title_fa` = 'آدرس تأیید درگاه' WHERE `key` = 'payping_verify_url';
UPDATE `settings` SET `title_fa` = 'تاریخ min/max روز' WHERE `key` = 'price_extreme_date';
UPDATE `settings` SET `title_fa` = 'منبع قیمت' WHERE `key` = 'price_provider';
UPDATE `settings` SET `title_fa` = 'API سود طلا' WHERE `key` = 'profit_gold_api_enabled';
UPDATE `settings` SET `title_fa` = 'مقدار پاداش معرف' WHERE `key` = 'referral_bonus_amount';
UPDATE `settings` SET `title_fa` = 'تعداد معرف برای هدیه' WHERE `key` = 'referral_count_for_gift';
UPDATE `settings` SET `title_fa` = 'کد معرف اجباری' WHERE `key` = 'referral_id';
UPDATE `settings` SET `title_fa` = 'نمایش فیلد کد معرف' WHERE `key` = 'referral_show';
UPDATE `settings` SET `title_fa` = 'محدودیت دعوت' WHERE `key` = 'referral_limit';
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` = 'referral_gift_buy_from_montzar';
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';
UPDATE `settings` SET `title_fa` = 'نمایش آخرین قیمت ذخیره‌شده' WHERE `key` = 'show_last_price';
UPDATE `settings` SET `title_fa` = 'نمایش قیمت انس طلا' WHERE `key` = 'show_gold_ounce_price';
UPDATE `settings` SET `title_fa` = 'نمایش قیمت صفحه اصلی خارج از ساعت کاری' WHERE `key` = 'show_home_price_when_closed';
UPDATE `settings` SET `title_fa` = 'نمایش جزئیات اطلاعات محصول' WHERE `key` = 'show_product_details';
UPDATE `settings` SET `title_fa` = 'دکمه لینک خارجی در خرید/فروش' WHERE `key` = 'products_site_link_enabled';
UPDATE `settings` SET `title_fa` = 'آدرس لینک دکمه خرید/فروش' WHERE `key` = 'products_site_link_url';
UPDATE `settings` SET `title_fa` = 'متن دکمه لینک خرید/فروش' WHERE `key` = 'products_site_link_text';
UPDATE `settings` SET `title_fa` = 'نمایش خرید/فروش باز روی کارت محصول' WHERE `key` = 'show_product_trade_status';
UPDATE `settings` SET `title_fa` = 'نمایش دسته و تحویل و مقدار روی کارت محصول' WHERE `key` = 'show_product_card_meta';
UPDATE `settings` SET `title_fa` = 'مسیر SSE قیمت' WHERE `key` = 'sse_path';
UPDATE `settings` SET `title_fa` = 'ساعت شروع' WHERE `key` = 'startDay';
UPDATE `settings` SET `title_fa` = 'وضعیت فروشگاه' WHERE `key` = 'store_status';
UPDATE `settings` SET `title_fa` = 'پیام‌رسان پشتیبانی' WHERE `key` = 'support_messenger';
UPDATE `settings` SET `title_fa` = 'شناسه پشتیبانی پیام‌رسان' WHERE `key` = 'support_messenger_id';
UPDATE `settings` SET `title_fa` = 'متن راهنمای واریز' WHERE `key` = 'support_messenger_text';
UPDATE `settings` SET `title_fa` = 'متن پیام به پشتیبانی (واریز)' WHERE `key` = 'deposit_support_message_text';
UPDATE `settings` SET `title_fa` = 'نام صاحب حساب واریز' WHERE `key` = 'deposit_account_holder';
UPDATE `settings` SET `title_fa` = 'شماره کارت واریز' WHERE `key` = 'deposit_card_number';
UPDATE `settings` SET `title_fa` = 'شماره حساب واریز' WHERE `key` = 'deposit_account_number';
UPDATE `settings` SET `title_fa` = 'شبا واریز' WHERE `key` = 'deposit_sheba';
UPDATE `settings` SET `title_fa` = 'فعال‌سازی کارت به کارت' WHERE `key` = 'deposit_method_card_to_card';
UPDATE `settings` SET `title_fa` = 'فعال‌سازی درگاه پرداخت' WHERE `key` = 'deposit_method_gateway';
UPDATE `settings` SET `title_fa` = 'فعال‌سازی شناسه واریز' WHERE `key` = 'deposit_method_identified';
UPDATE `settings` SET `title_fa` = 'فعال‌سازی شبکه شتابی' WHERE `key` = 'deposit_method_shetab';
UPDATE `settings` SET `title_fa` = 'حساب بانکی ته‌حساب' WHERE `key` = 'tahesab_bank_account';
UPDATE `settings` SET `title_fa` = 'نام دیتابیس ته‌حساب' WHERE `key` = 'tahesab_db';
UPDATE `settings` SET `title_fa` = 'آدرس IP سرور ته‌حساب' WHERE `key` = 'tahesab_host';
UPDATE `settings` SET `title_fa` = 'پورت سرور ته‌حساب' WHERE `key` = 'tahesab_port';
UPDATE `settings` SET `title_fa` = 'توکن ته‌حساب' WHERE `key` = 'tahesab_token';
UPDATE `settings` SET `title_fa` = 'توکن بات تلگرام' WHERE `key` = 'telegram_bot_token';
UPDATE `settings` SET `title_fa` = 'متن درباره ما' WHERE `key` = 'text_about';
UPDATE `settings` SET `title_fa` = 'متن قوانین' WHERE `key` = 'text_rule';
UPDATE `settings` SET `title_fa` = 'عنوان favicon' WHERE `key` = 'title_fav';
UPDATE `settings` SET `title_fa` = 'عنوان PWA' WHERE `key` = 'title_pwa';
UPDATE `settings` SET `title_fa` = 'واحد وزن دارایی و معاملات' WHERE `key` = 'unit';
UPDATE `settings` SET `title_fa` = 'بیشترین قیمت امروز' WHERE `key` = 'up_price';
UPDATE `settings` SET `title_fa` = 'قیمت لحظه‌ای (SSE)' WHERE `key` = 'wss_enabled';
UPDATE `settings` SET `title_fa` = 'سایت‌های ری‌گیری' WHERE `key` = 'tracking_systems';
UPDATE `settings` SET `title_fa` = 'نمایش سایت‌های ری‌گیری' WHERE `key` = 'tracking_systems_enabled';
UPDATE `settings` SET `title_fa` = 'نمایش منوی مجوزها' WHERE `key` = 'permision__enabled';
UPDATE `settings` SET `title_fa` = 'آدرس API تابلو Zaarbox' WHERE `key` = 'zaarbox_api_url';
UPDATE `settings` SET `title_fa` = 'شناسه ردیف تابلو (key یا UUID)' WHERE `key` = 'zaarbox_price_key';
-- ---------------------------------------------------------------------------
-- can_edit — استاندارد مشترک (override؛ value دست نمی‌خورد)
-- ---------------------------------------------------------------------------
-- غیرقابل ویرایش در پنل (can_edit = 0)
UPDATE `settings` SET `can_edit` = 0 WHERE `key` IN (
'admin_url', 'apk_download_link', 'app_url',
'bale_bot_token',
'chart_id', 'chart_use_local_data',
'external_order_api_enabled',
'external_payment_enabled',
'external_payment_base_url',
'external_payment_client_id',
'external_payment_client_secret',
'external_payment_gateway',
'external_payment_return_url',
'external_payment_webhook_url',
'wallet_payment_provider',
'fee_deduct_from_gold',
'referral_bonus_amount',
'group_sms',
'customer_special_pricing',
'customer_direct_sms',
'enable_conditional_order',
'enable_product_funds',
'has_page_price_trigger',
'has_page_notification',
'has_page_gift_card',
'enable_customer_level_profit',
'jibit_enabled',
'has_page_earn_money',
'is_store',
'sms_panel',
'logo_login', 'logo_register', 'title_pwa', 'title_fav',
'main_product', 'main_wallet_products', 'metal_type', 'main_metal',
'montify_name',
'montzar_base_url',
'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',
'permision__enabled',
'price_provider', 'profit_gold_api_enabled',
'send_to_tahesab',
'sse_path',
'tahesab_bank_account', 'tahesab_db', 'tahesab_host', 'tahesab_port', 'tahesab_token',
'telegram_bot_token', 'rubika_bot_token',
'price_channel_access',
'price_channel_bale_to', 'price_channel_telegram_to', 'price_channel_rubika_to',
'unit',
'wss_enabled',
'zaarbox_api_url',
'show_to_users_chat', 'chat_api', 'chat_api_key', 'chat_upload_url', 'chat_download_url', 'chat_webhook_secret', 'chat_webhook_base_url'
);
-- قابل ویرایش در پنل (can_edit = 1)
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',
'require_zero_main_gold_before_other_buy',
'sms_notif_order_admin', 'sms_notif_order_customer',
'sms_notif_withdraw_admin', 'sms_notif_withdraw_otp', 'sms_notif_login_otp',
'sms_notif_gateway_charge_admin', 'sms_notif_register_customer', 'sms_notif_register_admin',
'sms_notif_jibit_admin', 'sms_notif_bank_card_admin', 'sms_notif_bank_card_customer',
'sms_notif_fund_withdraw_admin', 'sms_notif_fund_withdraw_customer',
'sms_notif_price_trigger', 'sms_notif_wallet_alert', 'sms_notif_support_admin',
'deposit_sms_support_number', 'deposit_support_message_text',
'deposit_account_holder', 'deposit_card_number', 'deposit_account_number', 'deposit_sheba',
'deposit_method_card_to_card', 'deposit_method_gateway', 'deposit_method_identified', 'deposit_method_shetab',
'endDay',
'fee_free', 'fee_service_charge_percentage',
'gift_for_referral', 'gift_for_referrer',
'invite_link_text',
'jibit_verification',
'main_product_price',
'min_first_buy', 'min_withdraw', 'min_deposit', 'minimum_sell',
'montzar_mobile', 'montzar_open_buy', 'montzar_open_sell',
'montzar_password', 'montzar_product_id',
'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',
'open_register',
'referral_id', 'referral_show', 'referral_limit', 'referral_gift_on_first_order', 'referral_gift_buy_from_montzar',
'register_jibit_verify', 'register_referral_bonus_message', 'register_referral_sms_to_referrer',
'sell_fee', 'show_last_price', 'show_home_price_when_closed', 'show_gold_ounce_price', 'show_product_details',
'show_product_trade_status', 'show_product_card_meta',
'products_site_link_enabled', 'products_site_link_url', 'products_site_link_text',
'startDay',
'support_messenger', 'support_messenger_id', 'support_messenger_text', 'support_messengers',
'up_price', 'down_price', 'price_extreme_date', 'do_send_liman',
'has_chat',
'deposit_support_message_text', 'deposit_account_holder', 'deposit_card_number', 'deposit_account_number', 'deposit_sheba',
'deposit_method_card_to_card', 'deposit_method_gateway', 'deposit_method_identified', 'deposit_method_shetab',
'text_about', 'text_rule',
'price_channel_enabled', 'price_channel_messengers', 'price_channel_diff',
'price_channel_min_seconds', 'price_channel_message_text',
'price_channel_footer_id', 'price_channel_footer_phone',
'price_channel_footer_link', 'change_mesghal',
'tracking_systems', 'tracking_systems_enabled',
'banner_enabled',
'zaarbox_price_key'
);
-- کلیدهای runtime — فقط tenant DB؛ can_edit=1 (خارج از سوپرادمین)
UPDATE `settings` SET `can_edit` = 1 WHERE `key` IN (
'montzar_last_product_log', 'montzar_order_response',
'montzar_live_price', 'montzar_mazaneh', 'montzar_diff',
'montzar_truly_buy_mazaneh', 'montzar_truly_sell_mazaneh',
'montzar_token', 'montzar_closed',
'up_price', 'down_price', 'price_extreme_date', 'do_send_liman'
);
-- تفکیک نهایی type (بعد از همه batchها — override روی دیتابیس موجود)
UPDATE `settings` SET `type` = 'price' WHERE `key` IN (
'buy_fee', 'sell_fee',
'min_withdraw', 'min_deposit', 'min_first_buy', 'minimum_sell',
'up_price', 'down_price'
);
UPDATE `settings` SET `type` = 'number' WHERE `key` IN (
'fee_service_charge_percentage', 'fee_free',
'montzar_product_id', 'gift_for_referrer', 'gift_for_referral',
'payping_fin_customer_id', 'tahesab_port', 'referral_limit',
'deposit_sms_support_number',
'pargar_item_id_rial', 'pargar_item_id_gold'
);
UPDATE `settings` SET `type` = 'switch' WHERE `key` IN (
'deposit_method_card_to_card',
'deposit_method_gateway',
'deposit_method_identified',
'deposit_method_shetab'
);
UPDATE `settings` SET `description` = 'روشن (پیش‌فرض): روش کارت به کارت در صفحه واریز اپ نمایش داده می‌شود. خاموش: این روش از لیست روش‌های واریز حذف می‌شود.'
WHERE `key` = 'deposit_method_card_to_card';
UPDATE `settings` SET `description` = 'روشن: روش درگاه پرداخت در صفحه واریز نمایش داده می‌شود. خاموش: مخفی است. اتصال و کدهای درگاه در تنظیمات پیشرفته → روش‌های واریز تنظیم می‌شوند.'
WHERE `key` = 'deposit_method_gateway';
UPDATE `settings` SET `description` = 'روشن: روش شناسه واریز در صفحه واریز نمایش داده می‌شود. خاموش: مخفی است.'
WHERE `key` = 'deposit_method_identified';
UPDATE `settings` SET `description` = 'روشن: روش شبکه شتابی در صفحه واریز نمایش داده می‌شود. خاموش: مخفی است.'
WHERE `key` = 'deposit_method_shetab';
-- ---------------------------------------------------------------------------
-- تثبیت نهایی fee_deduct_from_gold — آخرین override قبل از COMMIT
-- (title_fa / description / type / can_edit — value و is_active دست نمی‌خورند)
-- ---------------------------------------------------------------------------
UPDATE `settings` SET
`title_fa` = 'اعمال مبلغ دقیق در معامله مشتری',
`type` = 'switch',
`can_edit` = 0,
`description` = 'روشن: مشتری دقیقاً همان مبلغ یا وزنی را که وارد کرده دریافت می‌کند. در فروش، مثلاً ۱۰۰ میلیون ریال درخواست → همان ۱۰۰ میلیون واریز و کارمزد از طلای کیف کسر می‌شود. در خرید، مثلاً ۱۰ گرم درخواست → همان ۱۰ گرم واریز و کارمزد به ریال قابل پرداخت اضافه می‌شود. خاموش (پیش‌فرض): در فروش کارمزد از مبلغ ریالی واریزی کم می‌شود (مشتری مبلغ کمتری می‌گیرد). در خرید کارمزد از وزن طلای واریزی کم می‌شود (مشتری طلای کمتری می‌گیرد).'
WHERE `key` = 'fee_deduct_from_gold';
-- حسابداری: یک select مرکزی + can_edit=0
UPDATE `settings` SET `can_edit` = 0, `is_active` = 0 WHERE `key` IN ('send_to_tahesab', 'send_to_pargar');
UPDATE `settings` SET `can_edit` = 0 WHERE `key` IN (
'accounting_provider',
'tahesab_host', 'tahesab_port', 'tahesab_token', 'tahesab_db', 'tahesab_bank_account',
'zarin_api', 'zarin_token', 'zarin_noe_kar', 'zarin_noe_kar_tedadi', 'zarin_gorohe_kar', 'zarin_name_g', 'zarin_uid_prefix',
'pargar_username', 'pargar_password', 'pargar_api_token',
'pargar_item_id_rial', 'pargar_item_id_gold'
);
UPDATE `settings` SET `can_edit` = 0, `is_active` = 1 WHERE `key` LIKE 'zarin_%';
UPDATE `settings` SET `type` = 'text', `can_edit` = 0 WHERE `key` IN ('zarin_api', 'zarin_token', 'zarin_name_g', 'zarin_uid_prefix');
UPDATE `settings` SET `type` = 'number', `can_edit` = 0 WHERE `key` IN ('zarin_noe_kar', 'zarin_noe_kar_tedadi', 'zarin_gorohe_kar');
-- درگاه شارژ آنلاین (Montify) — متادیتا + can_edit=0 (value دست نخورده)
UPDATE `settings` SET
`title_fa` = 'فعال‌سازی شارژ آنلاین',
`type` = 'switch',
`can_edit` = 0,
`description` = 'روشن: در صورت کامل بودن BASE_URL و client_id و client_secret و gateway، دکمه پرداخت آنلاین در اپ نمایش داده می‌شود. خاموش: فقط واریز دستی.'
WHERE `key` = 'external_payment_enabled';
UPDATE `settings` SET
`title_fa` = 'نوع درگاه شارژ آنلاین',
`type` = 'select',
`can_edit` = 0,
`description` = 'none=خاموش، montify=پارتنر Montify|none,montify'
WHERE `key` = 'wallet_payment_provider';
UPDATE `settings` SET
`title_fa` = 'آدرس API درگاه (BASE_URL)',
`type` = 'text',
`can_edit` = 0,
`description` = 'آدرس پایه API سرویس Montify (بدون اسلش انتهایی)، مثلاً https://node.example.com — فقط سرور؛ در اپ کاربر ارسال نمی‌شود.'
WHERE `key` = 'external_payment_base_url';
UPDATE `settings` SET
`title_fa` = 'شناسه کلاینت (client_id)',
`type` = 'text',
`can_edit` = 0,
`description` = 'شناسه partner (client_id) — فقط سرور؛ در اپ کاربر یا پاسخ get_settings عمومی نیست.'
WHERE `key` = 'external_payment_client_id';
UPDATE `settings` SET
`title_fa` = 'رمز کلاینت (client_secret)',
`type` = 'text',
`can_edit` = 0,
`description` = 'رمز مخفی partner (client_secret) — فقط سرور. در فرانت و Network تب کاربر دیده نمی‌شود.'
WHERE `key` = 'external_payment_client_secret';
UPDATE `settings` SET
`title_fa` = 'نام درگاه داخل Montify',
`type` = 'select',
`can_edit` = 0,
`description` = 'نام درگاه فعال داخل Montify: zarinpall، zibal، payping یا sepal|zarinpall,zibal,payping,sepal'
WHERE `key` = 'external_payment_gateway';
UPDATE `settings` SET
`title_fa` = 'آدرس برگشت (return_url)',
`type` = 'text',
`can_edit` = 0,
`description` = 'آدرس صفحه فرانت بعد از پرداخت. خالی = دامنه سایت + /wallet/payment-result'
WHERE `key` = 'external_payment_return_url';
UPDATE `settings` SET
`title_fa` = 'آدرس Webhook',
`type` = 'text',
`can_edit` = 0,
`description` = 'آدرس بک‌اند برای webhook (شارژ قطعی کیف). خالی = مسیر پیش‌فرض سرور.'
WHERE `key` = 'external_payment_webhook_url';
-- فقط برای ردیف تازه/خالی: پیش‌فرض خاموش (value موجود ادمین حفظ می‌شود)
UPDATE `settings` SET `value` = 'false'
WHERE `key` = 'external_payment_enabled' AND (`value` IS NULL OR TRIM(`value`) = '');
UPDATE `settings` SET `value` = 'none'
WHERE `key` = 'wallet_payment_provider' AND (`value` IS NULL OR TRIM(`value`) = '');
UPDATE `settings` SET `title_fa` = 'سیستم حسابداری', `type` = 'select', `description` = 'none,pargar,tahesab,zarin'
WHERE `key` = 'accounting_provider';
UPDATE `settings` SET `description` = 'سیستم حسابداری: none=هیچکدام، pargar=API پرگار، tahesab=ارسال خودکار ته‌حساب، zarin=ارسال خودکار زرین.' WHERE `key` = 'accounting_provider';
UPDATE `settings` SET `title_fa` = 'آدرس API زرین', `description` = 'آدرس پایه وب‌سرویس زرین (بدون /ZarrinService/accounting).' WHERE `key` = 'zarin_api';
UPDATE `settings` SET `title_fa` = 'توکن زرین', `description` = 'توکن مکمل API زرین که در نرم‌افزار زرین تعریف می‌شود.' WHERE `key` = 'zarin_token';
UPDATE `settings` SET `title_fa` = 'نوع کار پیش‌فرض زرین', `type` = 'number', `description` = 'noeKar عمومی. مقدار ۱۶ معمولاً گرمی است و برای sabtSanadTedadi مناسب نیست؛ سند تعدادی از zarin_noe_kar_tedadi استفاده می‌کند.' WHERE `key` = 'zarin_noe_kar';
UPDATE `settings` SET `title_fa` = 'نوع کار تعدادی زرین', `type` = 'number', `description` = 'noeKar برای سند تعدادی (سکه/شمش/گوی/مکعب). معمولاً ۱۷=سکه-تعدادی یا ۱۸=اجرت تعدادی.' WHERE `key` = 'zarin_noe_kar_tedadi';
UPDATE `settings` SET `title_fa` = 'گروه کار پیش‌فرض زرین', `type` = 'number', `description` = 'کد gorooheKar هنگام ساخت/جستجوی کار در زرین. برای جداسازی چند پنل روی یک زرین، برای هر پنل مقدار متفاوت بگذارید.' WHERE `key` = 'zarin_gorohe_kar';
UPDATE `settings` SET `title_fa` = 'نام گروه حساب مشتریان زرین', `type` = 'text', `description` = 'پارامتر nameG در addhesab — گروه حساب زرین. برای اپ خانگی: مشتری نقدی (خریدار) = گروه ۶. گروه همکار استفاده نشود (مظنه متفاوت است).' WHERE `key` = 'zarin_name_g';
-- فقط اگر خالی است، پیش‌فرض گروه ۶ را بگذار (value موجود دست نخورده)
UPDATE `settings` SET `value` = 'مشتری نقدی (خریدار)' WHERE `key` = 'zarin_name_g' AND (`value` IS NULL OR TRIM(`value`) = '');
UPDATE `settings` SET `title_fa` = 'پیشوند عددی uid زرین', `type` = 'text', `description` = 'فقط عدد. وقتی چند پنل یک زرین دارند باید متفاوت باشد تا uid تکراری نشود.' WHERE `key` = 'zarin_uid_prefix';
UPDATE `settings` SET `value` = 'pargar'
WHERE `key` = 'accounting_provider'
AND TRIM(COALESCE(`value`, '')) IN ('', 'none')
AND EXISTS (SELECT 1 FROM (SELECT `value` FROM `settings` WHERE `key` = 'send_to_pargar') AS s WHERE s.`value` IN ('true', '1', 'yes'));
UPDATE `settings` SET `value` = 'tahesab'
WHERE `key` = 'accounting_provider'
AND TRIM(COALESCE(`value`, '')) IN ('', 'none')
AND EXISTS (SELECT 1 FROM (SELECT `value` FROM `settings` WHERE `key` = 'send_to_tahesab') AS s WHERE s.`value` IN ('true', '1', 'yes'));
-- آخرین override: کلیدهای runtime همیشه can_edit=1 (tenant-only)
UPDATE `settings` SET `can_edit` = 1 WHERE `key` IN (
'montzar_last_product_log', 'montzar_order_response',
'montzar_live_price', 'montzar_mazaneh', 'montzar_diff',
'montzar_truly_buy_mazaneh', 'montzar_truly_sell_mazaneh',
'montzar_token', 'montzar_closed',
'up_price', 'down_price', 'price_extreme_date', 'do_send_liman'
);
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`;