Применять другую ставку налога в зависимости от роли пользователя клиента - PullRequest
0 голосов
/ 16 июня 2019

У меня есть постоянные клиенты и постоянные и оптовые торговцы уровня. Я живу в Канаде, и у меня есть два налога (GST & PST). У нас также есть клиенты / оптовики, которые освобождаются только от одного налога (PST) или обоих налогов.

У меня есть одна обычная оптовая роль с двумя ролями освобождения от налогов: wholesale_customer, wholesale_pst_exempt, wholesale_tax_exempt.

У меня есть 4 уровня уровней оптовых ролей, каждая из которых имеет свои роли освобождения от налогов:

'wholesale_silvia_silver', 'wholesale_silvia_gold', 'wholesale_silvia_premium', 'wholesale_silvia_union'

'wholesale_silvia_silver_pst_exempt', 'wholesale_silvia_gold_pst_exempt', 'wholesale_silvia_premium_pst_exempt', 'wholesale_silvia_union_pst_exempt'

'wholesale_silvia_silver_tax_exempt', 'wholesale_silvia_gold_tax_exempt', 'wholesale_silvia_premium_tax_exempt', 'wholesale_silvia_union_tax_exempt'

Уровни нового уровня, и я пытаюсь обновить свою существующую функцию, которая применяет различные налоговые ставки в зависимости от ролей пользователей клиента. У меня также есть фильтры для изменения налога на доставку для другого налогового класса в зависимости от роли клиента.

Вот функция и фильтр, которые я обновил, чтобы добавить дополнительные оптовые роли уровня. Внесенные мной изменения не работают, потому что я не вижу налоговых льгот. Оба налога применяются всегда.

Может ли кто-нибудь помочь мне понять, что я сделал неправильно с кодом, который остановил его работу? Я не разбираюсь в PHP, поэтому старался изо всех сил, чтобы сделать эту работу.

    /*
    * APPLY DIFFERENT TAX RATE BASED ON CUSTOMER USER ROLE
    * (Code compacted in one unique hook instead of 5 functions with the same              hook)
    */
    function all_custom_tax_classes( $tax_class, $product ) {
    global $current_user;

    // Getting the current user
    $curr_user = wp_get_current_user();
    $curr_user_data = get_userdata($current_user->ID);

    // 1 customer_tax_exempt 
    /* special tax rate: zero if role: Customer Tax Exempt */
    /*if ( in_array( 'customer_tax_exempt', $curr_user_data->roles ) )
        $tax_class = 'CustomerTaxExemptClass';

    // 2 customer_pst_exempt
    // special tax rate: charge only GST if role: Customer PST Exempt
    if ( in_array( 'customer_pst_exempt', $curr_user_data->roles ) )
        $tax_class = 'CustomerPSTExemptClass';      
    */
    // 3, 4 & 5 WHOLESLE SUITE SPECIAL WHOLESALE TAX RATES
    if (isset($current_user) && class_exists('WWP_Wholesale_Roles')) {
        $wwp_wholesale_roles = WWP_Wholesale_Roles::getInstance();
        $wwp_wholesale_role = $wwp_wholesale_roles->getUserWholesaleRole();

        // special tax rate: charge both PST and GST if roles: Wholesale    Customer,  Wholesale Silvia Silver, Wholesale Silvia Gold, Wholesale Silvia Premium, Wholesale Silvia Union
        if (!empty($wwp_wholesale_role) && in_array('wholesale_customer', $wwp_wholesale_role) && in_array('wholesale_silvia_silver', $wwp_wholesale_role) && in_array('wholesale_silvia_gold', $wwp_wholesale_role) && in_array('wholesale_silvia_premimum', $wwp_wholesale_role) && in_array('wholesale_silvia_union', $wwp_wholesale_role)) {
        // Where 'wholesale_customer, wholesale_silvia_silver, wholesale_silvia_gold, wholesale_silvia_premium, wholesale_silvia_union' are the names of the wholesale roles to target
            $tax_class = 'WholesalePSTGST';

        }

        // special tax rate: charge only GST if roles: Wholesale PST Exempt, Wholesale Silvia Silver PST Exempt, Wholesale Silvia Gold PST Exempt, Wholesale Silvia Premium PST Exempt, Wholesale Silvia Union PST Exempt
                if (!empty($wwp_wholesale_role) &&   in_array('wholesale_pst_exempt', $wwp_wholesale_role) && in_array('wholesale_silvia_silver_pst_exempt', $wwp_wholesale_role) && in_array('wholesale_silvia_gold_pst_exempt', $wwp_wholesale_role) && in_array('wholesale_silvia_premium_pst_exempt', $wwp_wholesale_role) && in_array('wholesale_silvia_union_pst_exempt', $wwp_wholesale_role)) {
        // Where 'wholesale_pst_exempt, wholesale_silvia_silver_pst_exempt, wholesale_silvia_gold_pst_exempt, wholesale_silvia_premium_pst_exempt, wholesale_silvia_union_pst_exempt' are the names of the wholesale roles to target
            $tax_class = 'WholesalePSTExempt';

        }

        // special tax rate: zero if roles: Wholesale Tax Exempt, Wholesale Silvia Silver Tax Exempt, Wholesale Silvia Gold Tax Exempt, Wholesale Silvia Premium Tax Exempt, Wholesale Silvia Union Tax Exempt
         if (!empty($wwp_wholesale_role) && in_array('wholesale_tax_exempt', $wwp_wholesale_role) && in_array('wholesale_silvia_silver_tax_exempt', $wwp_wholesale_role)&& in_array('wholesale_silvia_gold_tax_exempt', $wwp_wholesale_role) && in_array('wholesale_silvia_premium_tax_exempt', $wwp_wholesale_role) && in_array('wholesale_silvia_union_tax_exempt', $wwp_wholesale_role)) {
        // Where 'wholesale_tax_exempt, wholesale_silvia_silver_tax_exempt, wholesale_silvia_gold_tax_exempt, wholesale_silvia_premium_tax_exempt, wholesale_silvia_union_tax_exempt' are the names of the wholesale role to target
            $tax_class = 'WholesaleZeroTax';
                }
    }

  return $tax_class;

}

    /* ADDITIONAL FILTERS TO ALTER THE SHIPPING TAX FOR DIFFERENT TAX CLASSES BASED ON CUSTOMER USER ROLE */
    add_filter( 'woocommerce_product_get_tax_class', 'all_custom_tax_classes', 1, 2 );
    add_filter( 'woocommerce_product_variation_get_tax_class', 'all_custom_tax_classes', 1, 2 );

    add_filter( 'option_woocommerce_shipping_tax_class' , function( $option_value ) {

    global $wc_wholesale_prices;

    if ( $wc_wholesale_prices && is_a( $wc_wholesale_prices , 'WooCommerceWholeSalePrices' ) ) {

        $current_user_wholesale_roles = $wc_wholesale_prices->wwp_wholesale_roles->getUserWholesaleRole();

        if ( in_array( 'wholesale_customer', $current_user_wholesale_roles ) ){
            return 'wholesalepstgst';
        } elseif (in_array( 'wholesale_silvia_silver', $current_user_wholesale_roles) ){
            return 'wholesalepstgst';
        } elseif (in_array( 'wholesale_silvia_gold', $current_user_wholesale_roles) ){
            return 'wholesalepstgst';
        } elseif (in_array( 'wholesale_silvia_premium', $current_user_wholesale_roles) ){
            return 'wholesalepstgst';
        } elseif (in_array( 'wholesale_silvia_union', $current_user_wholesale_roles) ){
            return 'wholesalepstgst';
        } elseif (in_array( 'wholesale_pst_exempt', $current_user_wholesale_roles) ){
            return 'wholesalepstexempt';
        } elseif (in_array( 'wholesale_silvia_silver_pst_exempt', $current_user_wholesale_roles) ){
            return 'wholesalepstexempt';
        }  elseif (in_array( 'wholesale_silvia_gold_pst_exempt', $current_user_wholesale_roles) ){
            return 'wholesalepstexempt';
        }  elseif (in_array( 'wholesale_silvia_premium_pst_exempt', $current_user_wholesale_roles) ){
            return 'wholesalepstexempt';
        }  elseif (in_array( 'wholesale_silvia_union_pst_exempt', $current_user_wholesale_roles) ){
            return 'wholesalepstexempt';
        }  elseif (in_array( 'wholesale_tax_exempt', $current_user_wholesale_roles) ){
            return 'wholesalezerotax';
        }  elseif (in_array( 'wholesale_silvia_silver_tax_exempt', $current_user_wholesale_roles) ){
            return 'wholesalezerotax';
        }  elseif (in_array( 'wholesale_silvia_gold_tax_exempt', $current_user_wholesale_roles) ){
            return 'wholesalezerotax';
        }  elseif (in_array( 'wholesale_silvia_premium_tax_exempt', $current_user_wholesale_roles) ){
            return 'wholesalezerotax';
        }  elseif (in_array( 'wholesale_silvia_union_tax_exempt', $current_user_wholesale_roles) ){
            return 'wholesalezerotax';
        }

    }

    return $option_value;

} , 10 , 1 );

Спасибо Lyse

...