/**
  * get products based on filter (family, main element, symbol, color, and brand)
  * @param Int $product_id Products ID
  * @return Array Array of products ID
  */
 function getProductsCrossSelling($product_id)
 {
     use_class('products_brand');
     use_class('styles_php4');
     use_class('products_minierp');
     use_class('products_family_php4');
     $class_s = new styles();
     $class_pb = new products_brand();
     $class_pm = new products_minierp();
     $max_products = 50;
     $max_products_by_family = 20;
     $max_products_by_main_element = 10;
     $max_products_by_symbol = 30;
     //            $max_products_by_color = 5;
     //            $max_products_by_brand = 5;
     $max_products_by_category = 40;
     $pids = array();
     $p_data = $class_pm->retrieveDetail($product_id, 'p,cat');
     //FAMILY
     $family_id = $p_data['p']['family_id'];
     $obj_family = new products_family(null, $product_id);
     $pid_family = $obj_family->retrieveMembers();
     $pid_family_exclude_kill_prod = $class_pm->filterExcludeKilledProducts($pid_family);
     $pid_similar = $obj_family->getSimilarProducts($product_id, false, false);
     $pids = array_merge($pid_family_exclude_kill_prod, $pid_similar);
     $key = array_search($product_id, $pids);
     unset($pids[$key]);
     $pids = array_slice($pids, 0, 20);
     //MAIN ELEMENT
     $pid_family_filter = implode(",", $pids);
     if ($pid_family_filter == '') {
         if ($p_data['p']['products_brand_id'] == 14) {
             $pid_family_filters = "AND pue.products_id NOT IN ({$product_id}) AND p.products_brand_id = 14 ";
         } else {
             $pid_family_filters = "AND pue.products_id NOT IN ({$product_id})";
         }
     } else {
         if ($p_data['p']['products_brand_id'] == 14) {
             $pid_family_filters = "AND pue.products_id NOT IN ({$pid_family_filter}, {$product_id}) AND p.products_brand_id = 14 ";
         } else {
             $pid_family_filters = "AND pue.products_id NOT IN ({$pid_family_filter}, {$product_id})";
         }
     }
     $main_element_id = $class_pm->getMainElement($product_id);
     if ($main_element_id != NULL) {
         $pid_main_element = $class_pm->getProductsByMainElement($main_element_id, false, $pid_family_filters, "ORDER BY pl.sold_monthly_3 DESC LIMIT {$max_products_by_main_element}");
         $pids = array_merge($pids, $pid_main_element);
     }
     //SYMBOL
     $symbol_id = $class_s->getProductStyle($product_id);
     $pid_main_element_filter = implode(",", $pids);
     if ($pid_main_element_filter == '') {
         if ($p_data['p']['products_brand_id'] == 14) {
             $pid_main_element_filters = "AND shp.products_id NOT IN ({$product_id}) AND p.products_brand_id = 14 ";
         } else {
             $pid_main_element_filters = "AND shp.products_id NOT IN ({$product_id})";
         }
     } else {
         if ($p_data['p']['products_brand_id'] == 14) {
             $pid_main_element_filters = "AND shp.products_id NOT IN ({$pid_main_element_filter}, {$product_id}) AND p.products_brand_id = 14 ";
         } else {
             $pid_main_element_filters = "AND shp.products_id NOT IN ({$pid_main_element_filter}, {$product_id})";
         }
     }
     if ($symbol_id['Symbol'] != '') {
         $pid_symbol = array_keys($class_s->retrieveProducts($symbol_id['Symbol'], false, $pid_main_element_filters, "ORDER BY pl.sold_monthly_3 DESC LIMIT {$max_products_by_symbol}"));
         $pids = array_merge($pids, $pid_symbol);
     }
     //COLOR
     //            $color_id = $class_pm->loadColorPattern($product_id);
     //            if ($color_id) {
     //                $pids_symbol_filter = implode(",", $pids);
     //                if ($pids_symbol_filter == '') {
     //                    $pid_symbol_filters = "AND ptcp.products_id NOT IN ($product_id)";
     //                } else {
     //                    $pid_symbol_filters = "AND ptcp.products_id NOT IN ($pids_symbol_filter, $product_id)";
     //                }
     //                $pid_color = $class_pm->getProductsByColor(
     //                        $color_id[0],
     //                        false,
     //                        $pid_symbol_filters,
     //                        "ORDER BY pl.sold_monthly_3 DESC LIMIT $max_products_by_color");
     //                $pids = array_merge($pids, $pid_color);
     //            }
     //BRAND
     //            $brand_id = $p_data['p']['products_brand_id'];
     //            if ($brand_id) {
     //                $pids_color_filter = implode(",", $pids);
     //                if ($pids_color_filter == '') {
     //                    $pid_color_filters = "AND p.products_id NOT IN ($product_id)";
     //                } else {
     //                    $pid_color_filters = "AND p.products_id NOT IN ($pids_color_filter, $product_id)";
     //                }
     //                $pid_brand = $class_pb->getProducts(
     //                        $brand_id,
     //                        false,
     //                        $pid_color_filters,
     //                        "ORDER BY pl.sold_monthly_3 DESC LIMIT $max_products_by_brand");
     //                $pids = array_merge($pids, $pid_brand);
     //            }
     //CATEGORY
     $cat_id = $p_data['categories_id'];
     $pids_color_filter = implode(",", $pids);
     if ($pids_color_filter == '') {
         if ($p_data['p']['products_brand_id'] == 14) {
             $pid_color_filters = "AND p.products_id NOT IN ({$product_id}) AND p.products_brand_id = 14 ";
         } else {
             $pid_color_filters = "AND p.products_id NOT IN ({$product_id})";
         }
     } else {
         if ($p_data['p']['products_brand_id'] == 14) {
             $pid_color_filters = "AND p.products_id NOT IN ({$pids_color_filter}, {$product_id}) AND p.products_brand_id = 14 ";
         } else {
             $pid_color_filters = "AND p.products_id NOT IN ({$pids_color_filter}, {$product_id})";
         }
     }
     $pid_cat = $class_pm->getProductsByCategory($cat_id, false, $pid_color_filters, "ORDER BY pl.sold_monthly_3 DESC LIMIT {$max_products_by_category}");
     $pids = array_merge($pids, $pid_cat);
     //LIMIT ALL PRODUCTS BY 50
     $pids = array_slice($pids, 0, $max_products);
     $pids_implode = implode(",", $pids);
     if ($p_data['p']['products_brand_id'] == 14) {
         $pids = $class_pb->getProducts($p_data['p']['products_brand_id'], false, "AND p.products_id IN ({$pids_implode})", "ORDER BY pl.sold_monthly_3 DESC LIMIT {$max_products}");
     }
     return $pids;
 }
예제 #2
0
 function overrideReset($products_articles_id, $products_use_elements_id)
 {
     tep_db_query("DELETE FROM `products_articles_use_elements` WHERE products_articles_id = {$products_articles_id} AND products_use_elements_id = {$products_use_elements_id}");
     use_class('products_family');
     $class_pf = new products_family();
     $class_pf->refreshFamilyMatchKey(null, $products_articles_id);
 }
예제 #3
0
 /**
  * Set brand of a specific product. This fnction will update brand for all families of the given products.
  * However, it will return only total successful products from the give products (updated familes are not included).
  * Updated products will also be automatically included in next catalog upload.
  * @param Int $products_id Product ID
  * @param Int $brand_id Brand ID
  * @return Int Total products updated
  */
 function updateProductBrand($products_id, $brand_id)
 {
     use_class('products_family');
     $pids = explode(',', $products_id);
     $n_pid = count($pids);
     $n_pid_success = 0;
     $break_the_rules = true;
     foreach ($pids as $products_id) {
         $obj_family = new products_family(null, $products_id);
         $is_family_locked = $obj_family->productIsFamilyLocked($products_id);
         if (!$is_family_locked || $break_the_rules) {
             $mother_is_locked = $obj_family->mother > 0 ? $obj_family->productIsFamilyLocked($obj_family->mother) : false;
             if (!$mother_is_locked || $break_the_rules) {
                 $members = $obj_family->retrieveMembers();
                 $sda = array('products_brand_id' => $brand_id);
                 $products_ids = is_array($members) && count($members) > 0 ? implode(',', $members) : $products_id;
                 tep_db_perform('products', $sda, 'update', "products_id IN ({$products_ids})");
                 //refresh family search key to all members
                 //we stop it since brand is already excluded from family search key
                 //                            $pids_m = explode(',', $products_ids);
                 //                            foreach($pids_m as $pid_m) $obj_family->refreshFamilyMatchKey($pid_m);
                 use_class('products_minierp');
                 $class_pm = new products_minierp();
                 $class_pm->autoUpdateSalesPartnerCatalog($products_id);
                 $n_pid_success++;
             }
         }
     }
     return $n_pid_success;
 }
   $fid = $r['family_id'];
   if($fid!='') {
       $class_pf = new products_family($fid);
       $total_members = $class_pf->recalcTotalMembers();
       echo "$fid (total-$total_members) \n";
       $success++;
   }
}
echo "<h3>TOTAL FAMILY RECALC FOR TOTAL MEMBERS = $success</h3>";
* 
*/
///*
//UPDATE FAMILY SEARCH KEY
use_class('products_articles');
use_class('products_family');
$class_pf = new products_family();
$class_pa = new products_articles();
$dbq = tep_db_query("SELECT products_id FROM products WHERE active_status = 1 AND products_id < 55072 ORDER BY products_id DESC");
$success = 0;
while ($r = tep_db_fetch_array($dbq)) {
    $pid = $r['products_id'];
    $key = $class_pf->refreshFamilyMatchKey($pid);
    echo "Key {$key} added to {$pid}\n";
    $success++;
    $articles = $class_pa->retrieveList($pid);
    foreach ($articles as $article) {
        $aid = $article['products_articles_id'];
        $key = $class_pf->refreshFamilyMatchKey($pid, $aid);
        echo "Key {$key} added to {$pid}-{$aid}\n";
        $success++;
    }
예제 #5
0
 function finalizeProduct($products_id, $username)
 {
     use_class('products_family');
     $obj_family = new products_family(null, $products_id);
     $obj_family->refreshFamilyMatchKey($products_id);
     $sda = array();
     $sda['finalized_time'] = time();
     $sda['finalized_by'] = $username;
     tep_db_perform('designs_products', $sda, 'update', "products_id={$products_id}");
 }
예제 #6
0
 function refreshProductDataSupport($data)
 {
     //MUST UPDATES AFTER ADD-UPDATE-DELETE ELEMENTS
     $pid = $data['pid'];
     use_class('jng_sp_catalog_params');
     $class_jcp = new jng_sp_catalog_params();
     $class_jcp->setParams($pid, 'M');
     $this->calculateMaterialExpenses($pid);
     if ($data['contain_stones']) {
         $this->calculateStoneTotal($pid);
     }
     $this->updateComplexity($pid);
     $this->setSellingPointToProducts($pid);
     use_class('products_family');
     $family = new products_family();
     $family->refreshFamilyMatchKey($pid);
 }
예제 #7
0
     $result['pid'] = $pid;
     $result['pimage'] = $products_image;
     $result['fisdef'] = $is_mother;
     $result['islocked'] = $is_locked;
     $result['target'] = "#{$pid}";
     $result['pminfo'] = implode('<br/>', $pminfo);
     ajaxReturn($result);
 } elseif ($_POST['me_action'] == 'ADDTOFAMILY') {
     $tmp_pids = tep_db_prepare_input($_POST['pids']);
     $tmp = explode('|', $tmp_pids);
     $pids = array();
     if ($fid == "" || is_null($fid)) {
         if (!isset($tmp[1])) {
             $tmp[1] = $tmp[0];
         }
         $obj_family = new products_family(null, $tmp[1]);
         $obj_family->create($tmp[1]);
         $fid = $obj_family->id;
         $pids[] = "#box-pids-family|{$tmp['1']}";
     }
     //Add to family if there products and family
     if (isset($tmp[0]) && $obj_family->id != '') {
         $status = $obj_family->addToFamily($tmp);
         $pids[] = "#box-pids-family|{$tmp['0']}";
     } else {
         $status = false;
     }
     $result = array();
     $result['status'] = (int) $status;
     $result['fid'] = $fid;
     $result['pids'] = implode(',', $pids);