/** * 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; }
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); }
/** * 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++; }
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}"); }
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); }
$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);