💦 FULL SET: Changeset/ - Complete Album!

Changeset 3004945


Ignore:
Timestamp:
12/04/2023 06:47:28 AM (2 years ago)
Author:
redmonkey73
Message:

2.6 version update

Location:
bonus-plus-wp/trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • bonus-plus-wp/trunk/README.md

    r2975143 r3004945  
    66* Requires at least: 4.0
    77* Tested up to: 6.1.1
    8 * Stable tag: 2.5
     8* Stable tag: 2.6
    99* Requires PHP: 7.1
    1010* License: GPLv2 or later
     
    9393# Changelog
    9494
     95## 2.6
     96- настройки виджета перенесены на отдельную вкладку в админке https://github.com/evgrezanov/bonus-plus-wp/issues/32
     97- исправлены предупреджения https://github.com/evgrezanov/bonus-plus-wp/issues/31
     98- реализовано списание бонусов https://github.com/evgrezanov/bonus-plus-wp/issues/40
     99- исправлена ошибка с отображением бонусов в корзине https://github.com/evgrezanov/bonus-plus-wp/issues/37
     100
    95101## 2.5
    96102- исправлена проблема с экспортом товаров и категорий https://github.com/evgrezanov/bonus-plus-wp/issues/28
  • bonus-plus-wp/trunk/bonus-plus-wp.php

    r2975143 r3004945  
    1515 * WP requires at least: 5.0
    1616 * Tested up to: 6.1.1
    17  * Version: 2.5
     17 * Version: 2.6
    1818 */
    1919namespace BPWP;
     
    2828    public static function init()
    2929    {
    30         define('BPWP_PLUGIN_VERSION', '2.5');
     30        define('BPWP_PLUGIN_VERSION', '2.6');
    3131
    3232        require_once __DIR__ . '/functions.php';
  • bonus-plus-wp/trunk/inc/ApiHelper.php

    r2975146 r3004945  
    77class BPWPApiHelper
    88{
     9    private static $maxDebitBonuses;
    910
    1011    /**
     
    1314    public static function init()
    1415    {
    15         add_action('woocommerce_before_add_to_cart_quantity', [__CLASS__, 'bpwp_single__bonusplus_price']);
    16         add_action('woocommerce_before_cart_totals', [__CLASS__, 'bpwp_single__bonusplus_price']);
    17         add_action('woocommerce_checkout_before_order_review', [__CLASS__, 'bpwp_single__bonusplus_price']);
    18         add_action('woocommerce_after_shop_loop_item', [__CLASS__, 'bpwp_single__bonusplus_price']);
     16        self::$maxDebitBonuses = 0;
     17
     18        add_action('woocommerce_before_cart_totals', [__CLASS__, 'bpwp_cart_checkout_bonusplus_price']);
     19        add_action('woocommerce_checkout_before_order_review', [__CLASS__, 'bpwp_cart_checkout_bonusplus_price']);
     20        add_action('woocommerce_short_description', [__CLASS__, 'bpwp_single_product_bonusplus_price'], 10, 1);
     21        add_action('woocommerce_cart_calculate_fees', [__CLASS__, 'add_custom_fee_on_checkout']);
     22       
     23    }
     24
     25    public static function add_custom_fee_on_checkout()
     26    {
     27        // TODO: Если юзер выбрал Да( списать), то уменьшаем сумму заказа
     28
     29        // Получить maxDebitBonus
     30        $data = self::bpwp_get_calc_bonusplus_price();
     31
     32        if (is_array($data) && isset($data['request'])) {
     33            $fee_amount = -(int)$data['request']['maxDebitBonuses'];
     34            $fee_name = 'Списание бонусов';
     35            $taxable = true;
     36            $tax_class = 'bpwp-bonuses-reserved';
     37       
     38            WC()->cart->add_fee($fee_name, $fee_amount, $taxable, $tax_class);
     39
     40        }
    1941    }
    2042
     
    2244     *  Возвращает товары в формате RetailItem по ИД
    2345     *
    24      *  @param array $product_ids ИД товаров по которым необходимо расчитать чек
     46     *  @param array $product_ids ИД товаров по которым необходимо расчитать чек и количество товаров
    2547     *
    2648     *  @return object RetailItem для переданных товаров https://bonusplus.pro/api/Help/ResourceModel?modelName=RetailItem
     
    3153        $ext = 0;
    3254
    33         foreach ($product_ids as $product_id) {
    34             $product = wc_get_product($product_id);
    35 
     55        foreach ($product_ids as $product_item) {
     56
     57            $product = wc_get_product($product_item['id']);
     58            $quantity = $product_item['quantity'];
     59           
    3660            if ($product) {
    3761                $ext++;
     
    3963                $product_price = $product->get_price();
    4064
    41                 $categories = wp_get_post_terms($product_id, 'product_cat');
     65                $categories = wp_get_post_terms($product_item['id'], 'product_cat');
    4266                $category_id = null;
    4367
     
    5579                    }
    5680                }
     81                $sum = $product_price * $quantity;
    5782
    5883                $product_data = [
    59                     "sum"       => 1.0,
    60                     "qnt"       => 1.0,
    61                     "product"   => $product_id,
     84                    "sum"       => (float) $sum,
     85                    "qnt"       => (float) $quantity,
     86                    "product"   => $product_item['id'],
    6287                    "ds"        => 0.0,
    63                     "cat"       => $category_id,
    6488                    "ext"       => $ext,
    65                     "price"     => (float) $product_price,
    66                     /*"sellMode" => "sample string 7",*/
     89                    "price"     => (float) $product_price
    6790                ];
    6891
     92               
    6993                $products_data[] = $product_data;
    7094            }
     95           
    7196        }
    7297        return $products_data;
     
    90115            $items[] = $product->get_id();
    91116            $quantity = 1;
     117            $items[] = array(
     118                'id'        => $product->get_id(),
     119                'quantity'  => $quantity
     120            );
    92121        }
    93122
     
    97126            $cart_items = $cart->get_cart();
    98127            foreach ($cart_items as $cart_item_key => $cart_item) {
    99                 $items[] = $cart_item['product_id'];
    100                 $quantity = $cart_item['quantity'];
    101             }
    102 
     128                $items[] = array(
     129                    'id'        => $cart_item['product_id'],
     130                    'quantity'  => $cart_item['quantity']
     131                );
     132            }
    103133        }
    104134
     
    113143            'level'         => 0,
    114144            'store'         => $store,
    115             'certificate'   => true
    116145        ];
    117 
     146       
    118147        $params['items'] = $items;
    119148
     
    126155           
    127156            $response_code = wp_remote_retrieve_response_code($retailcalc);
    128            
     157
    129158            return $retailcalc;
    130159        }
     
    140169     */
    141170    public static function bpwp_render_calc_bonusplus_price($data) {
    142         $output = '<ul>';
    143 
     171       
     172        $output = '';
     173       
     174        if (isset($_GET['testrequest'])) {
     175           
     176            $output .= '<ul>';
     177       
     178            if (is_array($data) && isset($data['request']) && isset($data['request']['discount'])) {
     179
     180                foreach ($data['request']['discount'] as $discount) {
     181                    $output .= '<li>';
     182                    $output .= '<strong>ext:</strong> ' . $discount['ext'] . '<br>';
     183
     184                    if (is_array($discount['messages']) && !empty($discount['messages'])) {
     185                        $output .= '<strong>messages:</strong> <ul>';
     186                        foreach ($discount['messages'] as $message) {
     187                            $output .= '<li>' . $message . '</li>';
     188                        }
     189                        $output .= '</ul>';
     190                    }
     191               
     192                    $output .= '<strong>cb:</strong> ' . $discount['cb'] . ' - Сумма бонусов, которые будут начислены на данную позицию<br>';
     193                    $output .= '<strong>db:</strong> ' . $discount['db'] . ' - Сумма бонусов, которые будут списаны для данной позиции<br>';
     194                    $output .= '<strong>ds:</strong> ' . $discount['ds'] . ' - Общая сумма скидки для позиции (без учета бонусов)<br>';
     195                    $output .= '<strong>dp:</strong> ' . $discount['dp'] . ' - Процент скидки для позиции (без учета бонусов)<br>';
     196                    $output .= '<strong>ids:</strong> ' . $discount['ids'] . ' - Сумма скидки, примененная на стороне БонусПлюс для данной позиции (внутренняя скидка)<br>';
     197                    $output .= '<strong>idp:</strong> ' . $discount['idp'] . ' - Процент скидки, примененный на стороне БонусПлюс для данной позиции (внутренняя скидка)<br>';
     198                    $output .= '<strong>dbp:</strong> ' . $discount['dbp'] . ' - Процент списания бонусов<br>';
     199                    $output .= '<strong>cbp:</strong> ' . $discount['cbp'] . ' - Процент начисления бонусов<br>';
     200                    $output .= '</li>';
     201                }
     202            } else {
     203                $output .= '<li>Invalid data format</li>';
     204            }
     205       
     206            $output .= '</ul>';
     207            $maxDebitBonuses = $data['request']['maxDebitBonuses'];
     208            $multiplicityDebitBonus = $data['request']['multiplicityDebitBonus'];
     209            $output .= '<strong>maxDebitBonuses:</strong> ';
     210            $output .= $maxDebitBonuses . '<br>';
     211            $output .= '<strong>multiplicityDebitBonus:</strong> ';
     212            $output .= $multiplicityDebitBonus . '<br>';
     213       
     214        }
     215
     216       
     217        $info = bpwp_api_get_customer_data();
     218        if ($info && is_array($info)) {
     219
     220            $available_bonuses = $info['availableBonuses'];
     221
     222            if (is_array($data) && isset($data['request']) && isset($data['request']['discount'])) {
     223               
     224                $bonuses = 0;
     225
     226                foreach ($data['request']['discount'] as $discount) {
     227                    if (isset($discount['cb']) && !empty($discount['cb'])){
     228                        $bonuses = $bonuses + $discount['cb'];
     229                    }
     230                }
     231
     232                $maxDebitBonuses = $data['request']['maxDebitBonuses'];
     233
     234            }
     235
     236            $output .= '<div class="bonus-plus-price">';
     237            $output .= '<p>Ваш бонусный баланс '. $available_bonuses .'.</p><p>Сумма бонусов, которые будут начислены '. $bonuses .'.</p><p> На эту покупку будет списано '. $maxDebitBonuses .' бон.</p>';
     238            $output .= '</div>';
     239           
     240        }
     241
     242        echo $output;
     243    }
     244
     245    public static function bpwp_render_retailitems_calc($data)
     246    {
    144247        if (is_array($data) && isset($data['request']) && is_array($data['request']['discount'])) {
     248           
     249            $output = '<div class="bonus-plus-price">';
    145250            foreach ($data['request']['discount'] as $discount) {
    146                 $output .= '<li>';
    147                 $output .= '<strong>ext:</strong> ' . $discount['ext'] . '<br>';
    148                
    149                 if (is_array($discount['messages']) && !empty($discount['messages'])) {
    150                     $output .= '<strong>messages:</strong> <ul>';
    151                     foreach ($discount['messages'] as $message) {
    152                         $output .= '<li>' . $message . '</li>';
    153                     }
    154                     $output .= '</ul>';
    155                 }
    156    
    157                 $output .= '<strong>cb:</strong> ' . $discount['cb'] . ' - Сумма бонусов, которые будут начислены на данную позицию<br>';
    158                 $output .= '<strong>db:</strong> ' . $discount['db'] . ' - Сумма бонусов, которые будут списаны для данной позиции<br>';
    159                 $output .= '<strong>ds:</strong> ' . $discount['ds'] . ' - Общая сумма скидки для позиции (без учета бонусов)<br>';
    160                 $output .= '<strong>dp:</strong> ' . $discount['dp'] . ' - Процент скидки для позиции (без учета бонусов)<br>';
    161                 $output .= '<strong>ids:</strong> ' . $discount['ids'] . ' - Сумма скидки, примененная на стороне БонусПлюс для данной позиции (внутренняя скидка)<br>';
    162                 $output .= '<strong>idp:</strong> ' . $discount['idp'] . ' - Процент скидки, примененный на стороне БонусПлюс для данной позиции (внутренняя скидка)<br>';
    163                 $output .= '<strong>dbp:</strong> ' . $discount['dbp'] . ' - Процент списания бонусов<br>';
    164                 $output .= '<strong>cbp:</strong> ' . $discount['cbp'] . ' - Процент начисления бонусов<br>';
    165                 $output .= '</li>';
    166             }
    167         } else {
    168             $output .= '<li>Invalid data format</li>';
    169         }
    170    
    171         $output .= '</ul>';
    172         $output .= '<strong>maxDebitBonuses:</strong> ' . $data['request']['maxDebitBonuses'] . '<br>';
    173         $output .= '<strong>multiplicityDebitBonus:</strong> ' . $data['request']['multiplicityDebitBonus'] . '<br>';
    174    
    175         return $output;
    176     }
    177 
    178     public static function bpwp_render_retailitems_calc($data)
    179     {
    180         if (is_array($data) && isset($data['request']) && is_array($data['request']['discount'])) {
    181             foreach ($data['request']['discount'] as $discount) {
     251                $output .= '<ul>';
    182252                if (isset($discount['cb']) && !empty($discount['cb'])){
    183                     return '+' . $discount['cb'] . ' бонусов';
    184                 }
    185             }
     253                    $output .= '<li> +' . $discount['cb'] . ' бонусов</li>';
     254                }
     255
     256                if (isset($discount['db']) && !empty($discount['db'])){
     257                    $output .= '<li> -' . $discount['db'] . ' бонусов</li>';
     258                }
     259                $output .= '</ul>';
     260            }
     261            $output .= '</div>';
     262
     263            echo $output;
    186264        }
    187265    }
     
    194272        echo self::bpwp_render_retailitems_calc($price_data);
    195273    }
     274
     275    /**
     276     *
     277     */
     278    public static function bpwp_single_product_bonusplus_price($post_excerpt){
     279        $content = '';
     280       
     281        if (is_product()) {
     282            $price_data = self::bpwp_get_calc_bonusplus_price();
     283            $content = $post_excerpt . self::bpwp_render_retailitems_calc($price_data);
     284        }
     285
     286        return $content;
     287    }
     288
     289    /**
     290     * Выводим бонусы, доступные для начисления и списания
     291     */
     292    public static function bpwp_cart_checkout_bonusplus_price(){
     293        $content = '';
     294
     295        if (is_cart() || is_checkout() ) {
     296            $price_data = self::bpwp_get_calc_bonusplus_price();
     297            //$content = self::bpwp_render_retailitems_calc($price_data);
     298            $content = self::bpwp_render_calc_bonusplus_price($price_data);
     299        }
     300        return $content;
     301    }
     302
     303    public function bpwp_get_max_debit_bonuses($data) {
     304        if (is_array($data) && isset($data['request']) && isset($data['request']['discount'])) {
     305            $this->maxDebitBonuses = $data['request']['maxDebitBonuses'];
     306        }
     307    }
     308
    196309}
    197310
  • bonus-plus-wp/trunk/inc/ClientProfile.php

    r2886810 r3004945  
    111111
    112112            $tavailablekeys = [
    113                 $data['discountCardName'],
    114                 $data['purchasesTotalSum'],
    115                 $data['purchasesSumToNextCard'],
    116                 $data['nextCardName'],
     113                isset($data['discountCardName']) ? $data['discountCardName'] : null,
     114                isset($data['purchasesTotalSum']) ? $data['purchasesTotalSum'] : null,
     115                isset($data['purchasesSumToNextCard']) ? $data['purchasesSumToNextCard'] : null,
     116                isset($data['nextCardName']) ? $data['nextCardName'] : null,
    117117                $data['availableBonuses'],
    118118                $data['notActiveBonuses'],
  • bonus-plus-wp/trunk/inc/CustomerBalance.php

    r2975146 r3004945  
    1212    public static function init()
    1313    {
     14        // Создание заказа - Резервирование бонусов на счету клиента
     15        add_action( 'woocommerce_new_order', [__CLASS__, 'bpwp_balance_reserve_bonusplus'], 10, 2);
     16
    1417        // Заказ выполнен, запрос с начислением бонусов. Комментарий в заказ - "бонусы начисены"
    1518        add_action('woocommerce_order_status_completed', [__CLASS__, 'bpwp_customer_balance_bonusplus']);
    16     }
    17 
    18     /**
    19      *  Начисляем бонусы клиенту
     19       
     20    }
     21
     22    /**
     23     *  Резервируем бонусы
    2024     */
     25    public static function bpwp_balance_reserve_bonusplus($order_id, $order)
     26    {
     27        $user_id = $order->get_user_id();
     28               
     29        // TODO Получить бонусы для списания и добавить в мета заказа
     30        $data = BPWPApiHelper::bpwp_get_calc_bonusplus_price();
     31
     32        if (is_array($data) && isset($data['request'])) {
     33        $bonus_debit = $data['request']['maxDebitBonuses'];
     34        }
     35
     36        // Запрос Резервируем бонусы
     37        /*
     38        https://bonusplus.pro/api/Help/Api/PATCH-customer-phoneNumber-balance-reserve
     39        */
     40
     41        // Резервируем бонусы, передаем положительное число
     42
     43        $order_data = array(
     44            'billing_phone' => bpwp_api_get_customer_phone($user_id),
     45            'order_id' => $order_id,
     46            'bonus_debit' => $bonus_debit,
     47        );
     48       
     49        $balance_reserve = self::bpwp_balance_reserve($order_data);
     50
     51       
     52        $info = bpwp_api_get_customer_data();
     53       
     54        if ($info && is_array($info)) {
     55            $info['availableBonuses'] = $info['availableBonuses'] - $bonus_debit;