From b176854bc374fb159353f40b4f4cc495c16579a9 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Wed, 17 Jun 2026 22:58:36 +0700 Subject: [PATCH] refactor: update marketplace fee structure for TikTok and Shopee, replacing old fee keys with new ones and adjusting related settings --- .../System/Setting/MarketplaceRequest.php | 26 ++-- .../System/Setting/MarketplaceService.php | 90 ++++++------ app/Settings/MarketplaceSettings.php | 28 ++-- .../2026_06_11_085959_create_app_settings.php | 28 ++-- ...7_000001_update_marketplace_fee_fields.php | 70 +++++++++ .../admin/setting/MarketplaceSection.vue | 136 ++++++++++-------- resources/js/types/setting.ts | 26 ++-- 7 files changed, 254 insertions(+), 150 deletions(-) create mode 100644 database/settings/2026_06_17_000001_update_marketplace_fee_fields.php diff --git a/app/Http/Requests/Admin/System/Setting/MarketplaceRequest.php b/app/Http/Requests/Admin/System/Setting/MarketplaceRequest.php index c2188d9..c3bf976 100644 --- a/app/Http/Requests/Admin/System/Setting/MarketplaceRequest.php +++ b/app/Http/Requests/Admin/System/Setting/MarketplaceRequest.php @@ -72,19 +72,21 @@ public function attributes(): array private function feeFieldKeys(): array { return [ - 'tiktok_shop_admin_fee' => 'biaya admin TikTok Shop', - 'tiktok_shop_transaction_fee' => 'biaya transaksi TikTok Shop', - 'tiktok_shop_payment_fee' => 'biaya pembayaran TikTok Shop', - 'tiktok_shop_affiliate_commission' => 'komisi afiliasi TikTok Shop', - 'tiktok_shop_shipping_subsidy' => 'subsidi ongkir TikTok Shop', - 'tiktok_shop_vat_rate' => 'PPN / pajak TikTok Shop', - 'shopee_commission_fee' => 'komisi Shopee', - 'shopee_transaction_fee' => 'biaya transaksi Shopee', + 'tiktok_shop_platform_commission' => 'biaya komisi platform TikTok Shop', + 'tiktok_shop_logistics_service_fee' => 'biaya layanan logistik TikTok Shop', + 'tiktok_shop_dynamic_commission' => 'komisi dinamis TikTok Shop', + 'tiktok_shop_order_processing_fee' => 'biaya pemrosesan pesanan TikTok Shop', + 'tiktok_shop_affiliate' => 'affiliate TikTok Shop', + 'tiktok_shop_pre_order_service_fee' => 'biaya layanan pre order TikTok Shop', + 'shopee_admin_fee' => 'biaya administrasi Shopee', + 'shopee_program_fee' => 'biaya program Shopee', + 'shopee_shipping_savings' => 'hemat biaya kirim Shopee', + 'shopee_premium' => 'premi Shopee', 'shopee_service_fee' => 'biaya layanan Shopee', - 'shopee_payment_fee' => 'biaya pembayaran Shopee', - 'shopee_affiliate_commission' => 'komisi afiliasi Shopee', - 'shopee_shipping_subsidy' => 'subsidi ongkir Shopee', - 'shopee_voucher_fee' => 'biaya voucher / diskon Shopee', + 'shopee_order_processing_fee' => 'biaya proses pesanan Shopee', + 'shopee_ams_commission_fee' => 'biaya komisi AMS Shopee', + 'shopee_pre_order' => 'pre order Shopee', + 'shopee_live_extra' => 'live extra Shopee', ]; } } diff --git a/app/Services/System/Setting/MarketplaceService.php b/app/Services/System/Setting/MarketplaceService.php index 2c86e6e..a05f1f9 100644 --- a/app/Services/System/Setting/MarketplaceService.php +++ b/app/Services/System/Setting/MarketplaceService.php @@ -15,12 +15,12 @@ class MarketplaceService private function tiktokFeeKeys(): array { return [ - 'tiktok_shop_admin_fee', - 'tiktok_shop_transaction_fee', - 'tiktok_shop_payment_fee', - 'tiktok_shop_affiliate_commission', - 'tiktok_shop_shipping_subsidy', - 'tiktok_shop_vat_rate', + 'tiktok_shop_platform_commission', + 'tiktok_shop_logistics_service_fee', + 'tiktok_shop_dynamic_commission', + 'tiktok_shop_order_processing_fee', + 'tiktok_shop_affiliate', + 'tiktok_shop_pre_order_service_fee', ]; } @@ -30,13 +30,15 @@ private function tiktokFeeKeys(): array private function shopeeFeeKeys(): array { return [ - 'shopee_commission_fee', - 'shopee_transaction_fee', + 'shopee_admin_fee', + 'shopee_program_fee', + 'shopee_shipping_savings', + 'shopee_premium', 'shopee_service_fee', - 'shopee_payment_fee', - 'shopee_affiliate_commission', - 'shopee_shipping_subsidy', - 'shopee_voucher_fee', + 'shopee_order_processing_fee', + 'shopee_ams_commission_fee', + 'shopee_pre_order', + 'shopee_live_extra', ]; } @@ -45,19 +47,21 @@ public function marketplaceData(): array $settings = app(MarketplaceSettings::class); return [ - 'tiktok_shop_admin_fee' => $this->presentFeeRule($settings->tiktok_shop_admin_fee), - 'tiktok_shop_transaction_fee' => $this->presentFeeRule($settings->tiktok_shop_transaction_fee), - 'tiktok_shop_payment_fee' => $this->presentFeeRule($settings->tiktok_shop_payment_fee), - 'tiktok_shop_affiliate_commission' => $this->presentFeeRule($settings->tiktok_shop_affiliate_commission), - 'tiktok_shop_shipping_subsidy' => $this->presentFeeRule($settings->tiktok_shop_shipping_subsidy), - 'tiktok_shop_vat_rate' => $this->presentFeeRule($settings->tiktok_shop_vat_rate), - 'shopee_commission_fee' => $this->presentFeeRule($settings->shopee_commission_fee), - 'shopee_transaction_fee' => $this->presentFeeRule($settings->shopee_transaction_fee), + 'tiktok_shop_platform_commission' => $this->presentFeeRule($settings->tiktok_shop_platform_commission), + 'tiktok_shop_logistics_service_fee' => $this->presentFeeRule($settings->tiktok_shop_logistics_service_fee), + 'tiktok_shop_dynamic_commission' => $this->presentFeeRule($settings->tiktok_shop_dynamic_commission), + 'tiktok_shop_order_processing_fee' => $this->presentFeeRule($settings->tiktok_shop_order_processing_fee), + 'tiktok_shop_affiliate' => $this->presentFeeRule($settings->tiktok_shop_affiliate), + 'tiktok_shop_pre_order_service_fee' => $this->presentFeeRule($settings->tiktok_shop_pre_order_service_fee), + 'shopee_admin_fee' => $this->presentFeeRule($settings->shopee_admin_fee), + 'shopee_program_fee' => $this->presentFeeRule($settings->shopee_program_fee), + 'shopee_shipping_savings' => $this->presentFeeRule($settings->shopee_shipping_savings), + 'shopee_premium' => $this->presentFeeRule($settings->shopee_premium), 'shopee_service_fee' => $this->presentFeeRule($settings->shopee_service_fee), - 'shopee_payment_fee' => $this->presentFeeRule($settings->shopee_payment_fee), - 'shopee_affiliate_commission' => $this->presentFeeRule($settings->shopee_affiliate_commission), - 'shopee_shipping_subsidy' => $this->presentFeeRule($settings->shopee_shipping_subsidy), - 'shopee_voucher_fee' => $this->presentFeeRule($settings->shopee_voucher_fee), + 'shopee_order_processing_fee' => $this->presentFeeRule($settings->shopee_order_processing_fee), + 'shopee_ams_commission_fee' => $this->presentFeeRule($settings->shopee_ams_commission_fee), + 'shopee_pre_order' => $this->presentFeeRule($settings->shopee_pre_order), + 'shopee_live_extra' => $this->presentFeeRule($settings->shopee_live_extra), ]; } @@ -112,27 +116,29 @@ private function feeRulesForChannel(OrderChannel $channel): ?array $settings = app(MarketplaceSettings::class); return match ($channel) { - OrderChannel::SHOPEE => [ - 'platform' => 'shopee', - 'fees' => [ - 'commission_fee' => $this->presentFeeRule($settings->shopee_commission_fee), - 'transaction_fee' => $this->presentFeeRule($settings->shopee_transaction_fee), - 'service_fee' => $this->presentFeeRule($settings->shopee_service_fee), - 'payment_fee' => $this->presentFeeRule($settings->shopee_payment_fee), - 'affiliate_commission' => $this->presentFeeRule($settings->shopee_affiliate_commission), - 'shipping_subsidy' => $this->presentFeeRule($settings->shopee_shipping_subsidy), - 'voucher_fee' => $this->presentFeeRule($settings->shopee_voucher_fee), - ], - ], OrderChannel::TIKTOK => [ 'platform' => 'tiktok', 'fees' => [ - 'admin_fee' => $this->presentFeeRule($settings->tiktok_shop_admin_fee), - 'transaction_fee' => $this->presentFeeRule($settings->tiktok_shop_transaction_fee), - 'payment_fee' => $this->presentFeeRule($settings->tiktok_shop_payment_fee), - 'affiliate_commission' => $this->presentFeeRule($settings->tiktok_shop_affiliate_commission), - 'shipping_subsidy' => $this->presentFeeRule($settings->tiktok_shop_shipping_subsidy), - 'vat_rate' => $this->presentFeeRule($settings->tiktok_shop_vat_rate), + 'platform_commission' => $this->presentFeeRule($settings->tiktok_shop_platform_commission), + 'logistics_service_fee' => $this->presentFeeRule($settings->tiktok_shop_logistics_service_fee), + 'dynamic_commission' => $this->presentFeeRule($settings->tiktok_shop_dynamic_commission), + 'order_processing_fee' => $this->presentFeeRule($settings->tiktok_shop_order_processing_fee), + 'affiliate' => $this->presentFeeRule($settings->tiktok_shop_affiliate), + 'pre_order_service_fee' => $this->presentFeeRule($settings->tiktok_shop_pre_order_service_fee), + ], + ], + OrderChannel::SHOPEE => [ + 'platform' => 'shopee', + 'fees' => [ + 'admin_fee' => $this->presentFeeRule($settings->shopee_admin_fee), + 'program_fee' => $this->presentFeeRule($settings->shopee_program_fee), + 'shipping_savings' => $this->presentFeeRule($settings->shopee_shipping_savings), + 'premium' => $this->presentFeeRule($settings->shopee_premium), + 'service_fee' => $this->presentFeeRule($settings->shopee_service_fee), + 'order_processing_fee' => $this->presentFeeRule($settings->shopee_order_processing_fee), + 'ams_commission_fee' => $this->presentFeeRule($settings->shopee_ams_commission_fee), + 'pre_order' => $this->presentFeeRule($settings->shopee_pre_order), + 'live_extra' => $this->presentFeeRule($settings->shopee_live_extra), ], ], OrderChannel::STORE => null, diff --git a/app/Settings/MarketplaceSettings.php b/app/Settings/MarketplaceSettings.php index 855b51d..8c52498 100644 --- a/app/Settings/MarketplaceSettings.php +++ b/app/Settings/MarketplaceSettings.php @@ -6,31 +6,35 @@ class MarketplaceSettings extends Settings { - public array $tiktok_shop_admin_fee; + public array $tiktok_shop_platform_commission; - public array $tiktok_shop_transaction_fee; + public array $tiktok_shop_logistics_service_fee; - public array $tiktok_shop_payment_fee; + public array $tiktok_shop_dynamic_commission; - public array $tiktok_shop_affiliate_commission; + public array $tiktok_shop_order_processing_fee; - public array $tiktok_shop_shipping_subsidy; + public array $tiktok_shop_affiliate; - public array $tiktok_shop_vat_rate; + public array $tiktok_shop_pre_order_service_fee; - public array $shopee_commission_fee; + public array $shopee_admin_fee; - public array $shopee_transaction_fee; + public array $shopee_program_fee; + + public array $shopee_shipping_savings; + + public array $shopee_premium; public array $shopee_service_fee; - public array $shopee_payment_fee; + public array $shopee_order_processing_fee; - public array $shopee_affiliate_commission; + public array $shopee_ams_commission_fee; - public array $shopee_shipping_subsidy; + public array $shopee_pre_order; - public array $shopee_voucher_fee; + public array $shopee_live_extra; public static function group(): string { diff --git a/database/settings/2026_06_11_085959_create_app_settings.php b/database/settings/2026_06_11_085959_create_app_settings.php index 6067825..6eeb8f3 100644 --- a/database/settings/2026_06_11_085959_create_app_settings.php +++ b/database/settings/2026_06_11_085959_create_app_settings.php @@ -25,20 +25,24 @@ public function up(): void }); $this->migrator->inGroup('marketplace', function (SettingsBlueprint $blueprint): void { - $blueprint->add('tiktok_shop_admin_fee', MarketplaceFeeRule::defaultPercent(5.0)->toArray()); - $blueprint->add('tiktok_shop_transaction_fee', MarketplaceFeeRule::defaultPercent(1.0)->toArray()); - $blueprint->add('tiktok_shop_payment_fee', MarketplaceFeeRule::defaultPercent(0.7)->toArray()); - $blueprint->add('tiktok_shop_affiliate_commission', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); - $blueprint->add('tiktok_shop_shipping_subsidy', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); - $blueprint->add('tiktok_shop_vat_rate', MarketplaceFeeRule::defaultPercent(11.0)->toArray()); + // TikTok Shop + $blueprint->add('tiktok_shop_platform_commission', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); + $blueprint->add('tiktok_shop_logistics_service_fee', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); + $blueprint->add('tiktok_shop_dynamic_commission', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); + $blueprint->add('tiktok_shop_order_processing_fee', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); + $blueprint->add('tiktok_shop_affiliate', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); + $blueprint->add('tiktok_shop_pre_order_service_fee', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); - $blueprint->add('shopee_commission_fee', MarketplaceFeeRule::defaultPercent(6.0)->toArray()); - $blueprint->add('shopee_transaction_fee', MarketplaceFeeRule::defaultPercent(2.0)->toArray()); + // Shopee + $blueprint->add('shopee_admin_fee', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); + $blueprint->add('shopee_program_fee', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); + $blueprint->add('shopee_shipping_savings', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); + $blueprint->add('shopee_premium', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); $blueprint->add('shopee_service_fee', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); - $blueprint->add('shopee_payment_fee', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); - $blueprint->add('shopee_affiliate_commission', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); - $blueprint->add('shopee_shipping_subsidy', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); - $blueprint->add('shopee_voucher_fee', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); + $blueprint->add('shopee_order_processing_fee', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); + $blueprint->add('shopee_ams_commission_fee', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); + $blueprint->add('shopee_pre_order', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); + $blueprint->add('shopee_live_extra', MarketplaceFeeRule::defaultPercent(0.0)->toArray()); }); } }; diff --git a/database/settings/2026_06_17_000001_update_marketplace_fee_fields.php b/database/settings/2026_06_17_000001_update_marketplace_fee_fields.php new file mode 100644 index 0000000..c22dc98 --- /dev/null +++ b/database/settings/2026_06_17_000001_update_marketplace_fee_fields.php @@ -0,0 +1,70 @@ +migrator->inGroup('marketplace', function (SettingsBlueprint $blueprint): void { + $oldKeys = [ + 'tiktok_shop_admin_fee', + 'tiktok_shop_transaction_fee', + 'tiktok_shop_payment_fee', + 'tiktok_shop_affiliate_commission', + 'tiktok_shop_shipping_subsidy', + 'tiktok_shop_vat_rate', + 'shopee_commission_fee', + 'shopee_transaction_fee', + 'shopee_service_fee', + 'shopee_payment_fee', + 'shopee_affiliate_commission', + 'shopee_shipping_subsidy', + 'shopee_voucher_fee', + ]; + + $existing = DB::table('settings') + ->where('group', 'marketplace') + ->pluck('name') + ->toArray(); + + foreach ($oldKeys as $key) { + if (in_array($key, $existing)) { + $blueprint->delete($key); + } + } + + $newFields = [ + 'tiktok_shop_platform_commission', + 'tiktok_shop_logistics_service_fee', + 'tiktok_shop_dynamic_commission', + 'tiktok_shop_order_processing_fee', + 'tiktok_shop_affiliate', + 'tiktok_shop_pre_order_service_fee', + 'shopee_admin_fee', + 'shopee_program_fee', + 'shopee_shipping_savings', + 'shopee_premium', + 'shopee_service_fee', + 'shopee_order_processing_fee', + 'shopee_ams_commission_fee', + 'shopee_pre_order', + 'shopee_live_extra', + ]; + + $current = DB::table('settings') + ->where('group', 'marketplace') + ->pluck('name') + ->toArray(); + + foreach ($newFields as $key) { + if (! in_array($key, $current)) { + $blueprint->add($key, MarketplaceFeeRule::defaultPercent(0.0)->toArray()); + } + } + }); + } +}; diff --git a/resources/js/components/admin/setting/MarketplaceSection.vue b/resources/js/components/admin/setting/MarketplaceSection.vue index a0d2524..e925fcb 100644 --- a/resources/js/components/admin/setting/MarketplaceSection.vue +++ b/resources/js/components/admin/setting/MarketplaceSection.vue @@ -36,20 +36,22 @@ const platformItems: Array<{ ]; const form = useForm({ - tiktok_shop_admin_fee: { ...props.data.tiktok_shop_admin_fee }, - tiktok_shop_transaction_fee: { ...props.data.tiktok_shop_transaction_fee }, - tiktok_shop_payment_fee: { ...props.data.tiktok_shop_payment_fee }, - tiktok_shop_affiliate_commission: { ...props.data.tiktok_shop_affiliate_commission }, - tiktok_shop_shipping_subsidy: { ...props.data.tiktok_shop_shipping_subsidy }, - tiktok_shop_vat_rate: { ...props.data.tiktok_shop_vat_rate }, + tiktok_shop_platform_commission: { ...props.data.tiktok_shop_platform_commission }, + tiktok_shop_logistics_service_fee: { ...props.data.tiktok_shop_logistics_service_fee }, + tiktok_shop_dynamic_commission: { ...props.data.tiktok_shop_dynamic_commission }, + tiktok_shop_order_processing_fee: { ...props.data.tiktok_shop_order_processing_fee }, + tiktok_shop_affiliate: { ...props.data.tiktok_shop_affiliate }, + tiktok_shop_pre_order_service_fee: { ...props.data.tiktok_shop_pre_order_service_fee }, - shopee_commission_fee: { ...props.data.shopee_commission_fee }, - shopee_transaction_fee: { ...props.data.shopee_transaction_fee }, + shopee_admin_fee: { ...props.data.shopee_admin_fee }, + shopee_program_fee: { ...props.data.shopee_program_fee }, + shopee_shipping_savings: { ...props.data.shopee_shipping_savings }, + shopee_premium: { ...props.data.shopee_premium }, shopee_service_fee: { ...props.data.shopee_service_fee }, - shopee_payment_fee: { ...props.data.shopee_payment_fee }, - shopee_affiliate_commission: { ...props.data.shopee_affiliate_commission }, - shopee_shipping_subsidy: { ...props.data.shopee_shipping_subsidy }, - shopee_voucher_fee: { ...props.data.shopee_voucher_fee }, + shopee_order_processing_fee: { ...props.data.shopee_order_processing_fee }, + shopee_ams_commission_fee: { ...props.data.shopee_ams_commission_fee }, + shopee_pre_order: { ...props.data.shopee_pre_order }, + shopee_live_extra: { ...props.data.shopee_live_extra }, }); function feeErrors(key: string): string[] { @@ -91,45 +93,45 @@ function submit() {
@@ -141,17 +143,31 @@ function submit() {
+ + + +
diff --git a/resources/js/types/setting.ts b/resources/js/types/setting.ts index 290cb29..10001b2 100644 --- a/resources/js/types/setting.ts +++ b/resources/js/types/setting.ts @@ -29,17 +29,19 @@ export type SocialMediaSettingsData = { }; export type MarketplaceSettingsData = { - tiktok_shop_admin_fee: MarketplaceFeeRule; - tiktok_shop_transaction_fee: MarketplaceFeeRule; - tiktok_shop_payment_fee: MarketplaceFeeRule; - tiktok_shop_affiliate_commission: MarketplaceFeeRule; - tiktok_shop_shipping_subsidy: MarketplaceFeeRule; - tiktok_shop_vat_rate: MarketplaceFeeRule; - shopee_commission_fee: MarketplaceFeeRule; - shopee_transaction_fee: MarketplaceFeeRule; + tiktok_shop_platform_commission: MarketplaceFeeRule; + tiktok_shop_logistics_service_fee: MarketplaceFeeRule; + tiktok_shop_dynamic_commission: MarketplaceFeeRule; + tiktok_shop_order_processing_fee: MarketplaceFeeRule; + tiktok_shop_affiliate: MarketplaceFeeRule; + tiktok_shop_pre_order_service_fee: MarketplaceFeeRule; + shopee_admin_fee: MarketplaceFeeRule; + shopee_program_fee: MarketplaceFeeRule; + shopee_shipping_savings: MarketplaceFeeRule; + shopee_premium: MarketplaceFeeRule; shopee_service_fee: MarketplaceFeeRule; - shopee_payment_fee: MarketplaceFeeRule; - shopee_affiliate_commission: MarketplaceFeeRule; - shopee_shipping_subsidy: MarketplaceFeeRule; - shopee_voucher_fee: MarketplaceFeeRule; + shopee_order_processing_fee: MarketplaceFeeRule; + shopee_ams_commission_fee: MarketplaceFeeRule; + shopee_pre_order: MarketplaceFeeRule; + shopee_live_extra: MarketplaceFeeRule; };