Exemplo n.º 1
0
 /**
  * Display Discount Chip
  * @param array $args
  * @return string
  */
 function display_discount_chip($args)
 {
     $output = '';
     if (!empty($args) && !empty($args['pid'])) {
         $wps_price = new wpshop_prices();
         $discount_data = wpshop_prices::check_discount_for_product($args['pid']);
         if (!empty($discount_data)) {
             ob_start();
             require wpshop_tools::get_template_part(WPS_PRODUCT_DIR, WPS_PRODUCT_TEMPLATES_MAIN_DIR, "frontend", "product_discount_chip");
             $output = ob_get_contents();
             ob_end_clean();
         }
     }
     return $output;
 }
 public static function get_variation_price_behaviour($product_into_cart, $product_variations, $head_product_id, $variations_options)
 {
     global $wpdb;
     if (!empty($product_variations)) {
         // Initialize variations total price datas
         $variations_total_price = array('price_et' => 0, 'vat_amount' => 0, 'price_ati' => 0);
         $variations_discount_total_price = array('price_et' => 0, 'vat_amount' => 0, 'price_ati' => 0);
         $vat_rate = 0;
         $discount_amount = $discount_rate = $special_price = 0;
         // Recover Head product metadata
         $head_product_metadata = get_post_meta($head_product_id, '_wpshop_product_metadata', true);
         $tva_rate_id = !empty($head_product_metadata['tx_tva']) ? $head_product_metadata['tx_tva'] : 0;
         if (!empty($tva_rate_id)) {
             // Recover VAT Rate of product
             $query = $wpdb->prepare('SELECT value FROM ' . WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS . ' WHERE id = %d', $tva_rate_id);
             $vat_rate = $wpdb->get_var($query);
         }
         $price_piloting = get_option('wpshop_shop_price_piloting');
         foreach ($product_variations as $product_variation) {
             $variation_metadata['product_price'] = 0;
             $variation_metadata = get_post_meta($product_variation, '_wpshop_product_metadata', true);
             if (!empty($variation_metadata)) {
                 $p_et = empty($price_piloting) || $price_piloting == 'TTC' ? (!empty($variation_metadata['product_price']) ? $variation_metadata['product_price'] : 0) / (1 + $vat_rate / 100) : $variation_metadata['price_ht'];
                 $p_ati = empty($price_piloting) || $price_piloting == 'TTC' ? !empty($variation_metadata['product_price']) ? $variation_metadata['product_price'] : 0 : $variation_metadata['price_ht'] * (1 + $vat_rate / 100);
                 $variations_total_price['price_et'] += $p_et;
                 $variations_total_price['price_ati'] += $p_ati;
                 $variations_total_price['vat_amount'] += $p_ati - $p_et;
                 $variation_metadata['tx_tva'] = $product_into_cart['tx_tva'] = $vat_rate;
                 // Check discount
                 $discount_config = wpshop_prices::check_discount_for_product($product_variation);
                 if (!empty($discount_config) && !empty($discount_config['value'])) {
                     $variation_discount_prices = wpshop_prices::calcul_discounted_price($variation_metadata, $discount_config);
                     $variations_discount_total_price['price_et'] += $variation_discount_prices['price_ht'];
                     $variations_discount_total_price['price_ati'] += $variation_discount_prices['product_price'];
                     $variations_discount_total_price['vat_amount'] += $variation_discount_prices['tva'];
                     if (!empty($discount_config['type']) && $discount_config['type'] == 'discount_amount') {
                         $product_into_cart['discount_amount'] = $discount_amount + $product_into_cart['discount_amount'];
                     } elseif (!empty($discount_config['type']) && $discount_config['type'] == 'discount_rate') {
                         $product_into_cart['discount_rate'] = $discount_rate + $discount_config['value'];
                     } elseif (!empty($discount_config['type']) && $discount_config['type'] == 'special_price') {
                         $product_into_cart['special_price'] = $special_price + $discount_config['value'];
                     }
                 }
                 $product_variation_def = wpshop_products::get_product_data($product_variation, true);
                 $product_into_cart['item_meta']['variations'][$product_variation] = $product_variation_def;
             }
         }
         // Check if add or replace variation price to head product
         $product_variation_defining = get_post_meta($head_product_id, '_wpshop_variation_defining', true);
         if (empty($product_variation_defining) || !empty($product_variation_defining) && empty($product_variation_defining['options']) || !empty($product_variation_defining) && !empty($product_variation_defining['options']) && !empty($product_variation_defining['options']['price_behaviour']) && !empty($product_variation_defining['options']['price_behaviour'][0]) && $product_variation_defining['options']['price_behaviour'][0] == 'replacement') {
             //Replace the product price
             if (!empty($variations_discount_total_price) && !empty($variations_discount_total_price['price_ati'])) {
                 $product_into_cart['price_ttc_before_discount'] = $variations_total_price['price_ati'];
                 $product_into_cart['price_ht_before_discount'] = $variations_total_price['price_et'];
                 $product_into_cart['product_price'] = $variations_discount_total_price['price_ati'];
                 $product_into_cart['price_ht'] = $variations_discount_total_price['price_et'];
                 $product_into_cart['tva'] = $variations_discount_total_price['vat_amount'];
             } else {
                 $product_into_cart['product_price'] = $variations_total_price['price_ati'];
                 $product_into_cart['price_ht'] = $variations_total_price['price_et'];
                 $product_into_cart['tva'] = $variations_total_price['vat_amount'];
             }
         } else {
             // Add variations price to product price
             if (!empty($variations_discount_total_price) && !empty($variations_discount_total_price['price_ati'])) {
                 $product_into_cart['price_ttc_before_discount'] = $product_into_cart['product_price'] + $variations_total_price['price_ati'];
                 $product_into_cart['price_ht_before_discount'] = $product_into_cart['price_ht'] + $variations_total_price['price_et'];
                 $product_into_cart['product_price'] += $variations_discount_total_price['price_ati'];
                 $product_into_cart['price_ht'] += $variations_discount_total_price['price_et'];
                 $product_into_cart['tva'] += $variations_discount_total_price['vat_amount'];
             } else {
                 $product_into_cart['product_price'] += $variations_total_price['price_ati'];
                 $product_into_cart['price_ht'] += $variations_total_price['price_et'];
                 $product_into_cart['tva'] += $variations_total_price['vat_amount'];
             }
             // Check parent discount
             $parent_discount_config = wpshop_prices::check_discount_for_product($head_product_id);
             if (!empty($parent_discount_config)) {
                 $product_into_cart['price_ttc_before_discount'] = !empty($product_into_cart['price_ttc_before_discount']) ? $product_into_cart['price_ttc_before_discount'] : $product_into_cart['product_price'];
                 $product_into_cart['price_ht_before_discount'] = !empty($product_into_cart['price_ht_before_discount']) ? $product_into_cart['price_ht_before_discount'] : $product_into_cart['price_ht'];
                 $product_into_cart = wpshop_prices::calcul_discounted_price($product_into_cart, $parent_discount_config);
                 if (!empty($parent_discount_config['type']) && $parent_discount_config['type'] == 'discount_amount') {
                     $product_into_cart['discount_amount'] = $discount_amount + $parent_discount_config['value'];
                 } elseif (!empty($parent_discount_config['type']) && $parent_discount_config['type'] == 'discount_rate') {
                     $product_into_cart['discount_rate'] = $discount_rate + $parent_discount_config['value'];
                 } elseif (!empty($parent_discount_config['type']) && $parent_discount_config['type'] == 'special_price') {
                     $product_into_cart['special_price'] = $special_price + $parent_discount_config['value'];
                 }
             }
         }
     } else {
         // If product have just Free variations
         $discount_config = wpshop_prices::check_discount_for_product($head_product_id);
         if (!empty($discount_config)) {
             $product_into_cart['price_ttc_before_discount'] = !empty($product_into_cart['price_ttc_before_discount']) ? $product_into_cart['price_ttc_before_discount'] : $product_into_cart['product_price'];
             $product_into_cart['price_ht_before_discount'] = !empty($product_into_cart['price_ht_before_discount']) ? $product_into_cart['price_ht_before_discount'] : $product_into_cart['price_ht'];
             $product_into_cart = wpshop_prices::calcul_discounted_price($product_into_cart, $discount_config);
         }
     }
     // Text From indicator
     if (!empty($variations_options) && !empty($variations_options['text_from'])) {
         $product_into_cart['text_from'] = $variations_options['text_from'];
     }
     return $product_into_cart;
 }