/**
  * For handling submitted POST
  * @global array $session_userinfo
  * @param array $post_vars
  */
 public function postProcess($post_vars)
 {
     global $session_userinfo;
     $result = array();
     if ($post_vars['me_action'] == 'SEARCH') {
         $type = $post_vars['type'];
         $jng_sp_id = $post_vars['jng_sp_id'];
         //another strange case, in live datepicker filter is always given as \'datevalue\' instead of 'datevalue'
         //still cant find the root cause (and it's ok in local dev), so for quickwin workaround we simple replace
         //the \' value into ' with below update (sahat 11.02.2014)
         //$post_filters = explode("|", $post_vars['post_filters']);
         $post_filters = explode("|", str_replace('\\\'', "'", $post_vars['post_filters']));
         $post_sorts = explode("|", $post_vars['post_sorts']);
         $filters = array();
         foreach ($post_filters as $f) {
             $f_temp = explode('-', $f);
             $field = $f_temp[0];
             unset($f_temp[0]);
             $value = implode('-', $f_temp);
             //explode to array for input on field $multivalue_fields which allowed multivalue separated by $multivalue_separator
             if (in_array($field, $this->multivalue_fields)) {
                 $mv_temp = explode(current($this->multivalue_separator), $value);
                 if (is_array($mv_temp) && $mv_temp > 0) {
                     foreach ($mv_temp as $mv) {
                         $mv = trim($mv);
                         if (!isset($filters[$field]) || !in_array($mv, $filters[$field])) {
                             $filters[$field][] = $mv;
                         }
                     }
                 } else {
                     $filters[$field][] = $value;
                 }
             } else {
                 $filters[$field][] = $value;
             }
         }
         $sorts = array();
         foreach ($post_sorts as $s) {
             list($field, $value) = explode("-", $s);
             $sorts[$field][] = $value;
         }
         $query = $this->constructQuery($jng_sp_id, $filters, $sorts);
         //die($query);
         $dbq = tep_db_query($query);
         $result = '';
         $products_ids = array();
         $total_stock = 0;
         $total_stock_value = 0;
         $total_margin = 0;
         $total_sold = 0;
         $total_rets = 0;
         $total_sales = 0;
         $total_vc = 0;
         $total_sold_l30d = 0;
         $total_sold_l60d = 0;
         $total_sold_l90d = 0;
         $total_sales_l30d = 0;
         $total_sales_l60d = 0;
         $total_sales_l90d = 0;
         $display_spot = '';
         while ($r = tep_db_fetch_array($dbq)) {
             $products_ids[] = $r['products_id'];
             $total_stock += $r['hh_stock'];
             $total_stock_value += $r['hh_stock_value'];
             $total_margin += $r['margin'];
             $total_sold += $r['total_sold'];
             $total_rets += $r['total_returned'];
             $total_sales += $r['total_sales'];
             $vc += $r['vc_now'];
             //$total_vc += $r['total_vc'];
             $total_vc += $r['vc_total'];
             $total_sold_l30d += $r['sold_monthly_1'];
             $total_sold_l60d += $r['sold_monthly_2'];
             $total_sold_l90d += $r['sold_monthly_3'];
             $total_sales_l30d += $r['sales_monthly_1'];
             $total_sales_l60d += $r['sales_monthly_2'];
             $total_sales_l90d += $r['sales_monthly_3'];
         }
         $jng_nodata = '<span class="notice">N/A&nbsp;for&nbsp;J&amp;G</span>';
         $returned_rate = number_format($total_sold > 0 ? $total_rets / $total_sold * 100 : 0, 1);
         $n_products_ids = count($products_ids);
         $result['type'] = $type;
         $result['spid'] = $jng_sp_id;
         $result['avg_margin'] = ($n_products_ids > 0 ? number_format($total_margin / $n_products_ids, 1) : 0) . '%';
         $result['total'] = $n_products_ids;
         $result['total_stock'] = $total_stock;
         $result['total_stock_value'] = displayCurrency(CURRENCY_DEFAULT, convertCurrency($total_stock_value, CURRENCY_CODE_EURO, CURRENCY_DEFAULT));
         $result['total_sold'] = $jng_sp_id == '0' ? $jng_nodata : $total_sold;
         $result['total_rets'] = $jng_sp_id == '0' ? $jng_nodata : $total_rets . " ({$returned_rate}%)";
         $result['total_sales'] = $jng_sp_id == '0' ? $jng_nodata : displayCurrency(DEFAULT_CURRENCY, $total_sales);
         $result['vc'] = $jng_sp_id == '0' ? $jng_nodata : number_format($vc, 2);
         //$result['total_vc'] = number_format($total_vc, 2);
         $result['vc_total'] = $jng_sp_id == '0' ? $jng_nodata : number_format($total_vc, 2);
         $result['total_sales_l30d'] = displayCurrency(DEFAULT_CURRENCY, $total_sales_l30d);
         $result['total_sales_l60d'] = displayCurrency(DEFAULT_CURRENCY, $total_sales_l60d);
         $result['total_sales_l90d'] = displayCurrency(DEFAULT_CURRENCY, $total_sales_l90d);
         $result['total_sold_l30d'] = $total_sold_l30d;
         $result['total_sold_l60d'] = $total_sold_l60d;
         $result['total_sold_l90d'] = $total_sold_l90d;
         $result['products_ids'] = implode(',', $products_ids);
     } elseif ($post_vars['me_action'] == 'DISPLAY') {
         use_class('products_minierp');
         use_class('minierp_users');
         use_class('Product');
         $class_pm = new products_minierp();
         $class_mu = new minierp_users();
         $jng_sp_id = $post_vars['jng_sp_id'];
         $type = $post_vars['type'];
         $products_id = $post_vars['products_id'];
         $is_killed = $post_vars['is_killed'];
         $is_sp_not_yet_added = $post_vars['is_sp_not_yet_added'];
         $added_post_vars = array('is_killed' => $is_killed, 'is_sp_not_yet_added' => $is_sp_not_yet_added);
         $display_type = $post_vars['display_type'];
         $row_number = $post_vars['row_number'];
         $showing_id = $post_vars['showing_id'];
         $obj_product = new Product($products_id);
         $display_res = $this->retrieveDataForDisplay($jng_sp_id, $products_id, $added_post_vars, $display_type);
         $res = $display_res[0];
         $img_size = $display_type == 'thumbnail' ? IMAGE_SIZE_THUMBNAIL_2 : IMAGE_SIZE_THUMBNAIL_1;
         //SHOW PURE IMAGE FOR SP THAT USED IT AS MAIN IMAGE
         if (in_array($jng_sp_id, $this->sp_use_pure_image)) {
             $obj_product->setDisplayImage(Product::IMAGE_TYPE_ZALANDO);
         } else {
             if (in_array($jng_sp_id, $this->sp_use_clear_image)) {
                 $obj_product->setDisplayImage(Product::IMAGE_TYPE_AMAZON);
             }
         }
         //$products_image = webImageWithDetailLinkStars($image_used, $img_size, $img_size, 'Product '.$products_id, 'img-border', 'View Larger Image', IMAGE_SIZE_BIG_1, '', $res['stars'], 3, '', '', $res['products_brand_id']);
         $products_image = $obj_product->displayImage($img_size, $img_size);
         $position_padding = $display_type == 'thumbnail' ? '2px 0 0 15px;' : '';
         $products_image = webImageAddPosition($row_number, $products_image, $position_padding);
         $products_complexity = productComplexityName($res['complexity']);
         $products_stars = drawStars($res['stars']);
         $products_is_watched = $class_mu->isOnWatchlist($session_userinfo['id'], $products_id);
         $resultsdt = array();
         if ($display_type == 'table' || $type == 'displaytooltip') {
             if ($type == 'thumbnail_tooltip') {
                 //HTML Version result
                 $sales_partner_id = $jng_sp_id == 'allsp' ? '0' : $jng_sp_id;
                 //TODO: seperate B2C and B2b calculation, or even better is if
                 //      we can calculate it by the object directly
                 $price = $obj_product->getPriceSelling($sales_partner_id);
                 $net_price = Product::calculateNetPrice($price, VAT);
                 $cogs = $obj_product->getProductCOGSValue();
                 $profit = Product::calculateProfit($net_price, $cogs);
                 $margin = Product::calculateMargin($profit, $net_price);
                 $jng_nodata = '<span class="notice">N/A for J&amp;G</span>';
                 $infos = array();
                 $infos[] = $obj_product->displayIDAndCode();
                 $infos[] = $res['products_name'];
                 if ($res['hh_stock'] > 0) {
                     $infos[] = '<strong class="green">Depot Stock = ' . $res['hh_stock'] . '</strong>';
                 } else {
                     $infos[] = '<strong>Depot Stock = 0</strong>';
                 }
                 $infos[] = 'Complexity = ' . $products_complexity;
                 if ($res['sample_created'] == '1') {
                     $infos[] = '<span class="green">Sample order created</span>';
                 } else {
                     $infos[] = '<span class="notice">No sample order created</span>';
                 }
                 if ($jng_sp_id == '0') {
                     $total_sold = $jng_nodata;
                     $return_info = $jng_nodata;
                     $qty_sold = $jng_nodata;
                 } else {
                     $returned_rate = number_format($res['returned_rate'], 1);
                     $sales_monthly = number_format($res['sales_monthly'], 1);
                     $sales_weekly = number_format($res['sales_weekly'], 1);
                     $total_sold = $res['total_sold'];
                     $return_info = $res['total_returned'] . ' (' . $returned_rate . '%)';
                     $qty_sold = "per Week: {$sales_weekly} &sdot; per Month: {$sales_monthly}";
                 }
                 $tooltip = '<div class="draw-table"><table border="0" cellpadding="0" cellspacing="0">';
                 $tooltip .= '<tr class="o"><td class="w200 bold">Brand</td><td class="w300 bold">' . $res['brand_name'] . '</td></tr>';
                 $tooltip .= '<tr class="e"><td>Info</td><td>&bull; ' . implode('<br />&bull; ', $infos) . '</td></tr>';
                 $tooltip .= '<tr class="o"><td>Price Preview</td><td>' . $obj_product->displayPricePreview($sales_partner_id) . '</td></tr>';
                 $tooltip .= '<tr class="e"><td>Margin in %</td><td>' . $obj_product->displayMargin($price, $margin) . '</td></tr>';
                 $tooltip .= '<tr class="o"><td>Age JG (finalized)</td><td>' . $res['jng_products_age'] . ' days</td></tr>';
                 $tooltip .= '<tr class="e"><td>Age (selected SP filter)</td><td>' . $res['products_age'] . ' days</td></tr>';
                 $tooltip .= '<tr class="o"><td>Total Sold (excl. JG)</td><td>' . $total_sold . '</td></tr>';
                 $tooltip .= '<tr class="e"><td>Total Returns (excl. JG)</td><td>' . $return_info . '</td></tr>';
                 $tooltip .= '<tr class="o"><td>Pieces Sold</td><td>' . str_replace('align="center"', 'align="left"', $obj_product->displayRecentSoldTable()) . '</div></td></tr>';
                 $tooltip .= '<tr class="e"><td>Qty. Sold (excl. JG)</td><td>' . $qty_sold . '</td></tr>';
                 $tooltip .= '</table></div>';
                 $ajaxResult = array();
                 $ajaxResult['type'] = $type;
                 $ajaxResult['spid'] = $jng_sp_id;
                 $ajaxResult['products_id'] = $products_id;
                 $ajaxResult['tooltip'] = $tooltip;
                 $ajaxResult['rownumber'] = $row_number;
                 $ajaxResult['showingid'] = $showing_id;
                 ajaxReturn($ajaxResult);
             } else {
                 $sales_partner_id = $jng_sp_id == 'allsp' ? '0' : $jng_sp_id;
                 $price = $obj_product->getPriceSelling($sales_partner_id);
                 $net_price = Product::calculateNetPrice($price, VAT);
                 $cogs = $obj_product->getProductCOGSValue();
                 $profit = Product::calculateProfit($net_price, $cogs);
                 $margin = Product::calculateMargin($profit, $net_price);
                 $material_expenses = displayCurrency(DEFAULT_CURRENCY, convertCurrency($res['material_expenses'], 'EUR', DEFAULT_CURRENCY), false);
                 $products_price = displayCurrency(DEFAULT_CURRENCY, $res['products_price'], false);
                 $products_price_old = displayCurrency(DEFAULT_CURRENCY, $res['products_price_old'], false);
                 $products_created = date('d-M-Y', strtotime($res['products_date_added']));
                 $vc_now = number_format($res['vc_now'], 2);
                 $total_vc = number_format($res['vc_total'], 2);
                 $vc_percent = number_format($res['vc_percent'], 1);
                 //$margin = $res['margin'];
                 //$margin = '<span class="'.(($class_pm->priceMargindIsGood($res['products_price'], $margin)) ? 'green' : 'red') . '">' .
                 //    number_format($margin, 1) . '%</span>';
                 $margin = $obj_product->displayMargin($price, $margin);
                 $returned_rate = number_format($res['returned_rate'], 1);
                 $discount = number_format($res['products_discount'], 2);
                 $total_sales = number_format($res['total_sales'], 2);
                 $sales_monthly = number_format($res['sales_monthly'], 1);
                 $sales_weekly = number_format($res['sales_weekly'], 1);
                 $jng_nodata = '<span class="notice">N/A' . ($type == 'displaytooltip' ? '&nbsp;' : '<br />') . 'for&nbsp;J&amp;G</span>';
                 //0-4
                 $resultsdt[] = $products_image;
                 $resultsdt[] = $products_id;
                 $resultsdt[] = $res['products_model'];
                 $resultsdt[] = $res['products_name'];
                 //$resultsdt[] = $class_pm->displayProductName($products_id);
                 $resultsdt[] = $products_price_old;
                 //5-9
                 $resultsdt[] = $products_price;
                 $resultsdt[] = $discount;
                 $resultsdt[] = $jng_sp_id == '0' ? $jng_nodata : $vc_now;
                 $resultsdt[] = $jng_sp_id == '0' ? $jng_nodata : $vc_percent;
                 $resultsdt[] = $margin;
                 //10-14
                 $resultsdt[] = $res['products_age'];
                 $resultsdt[] = $jng_sp_id == '0' ? $jng_nodata : $res['total_sold'];
                 $resultsdt[] = $jng_sp_id == '0' ? $jng_nodata : $total_vc;
                 $resultsdt[] = $res['total_returned'];
                 $resultsdt[] = $jng_sp_id == '0' ? $jng_nodata : $returned_rate;
                 //15-19
                 $resultsdt[] = $jng_sp_id == '0' ? $jng_nodata : $total_sales;
                 $resultsdt[] = $res['sold_monthly_1'];
                 $resultsdt[] = $res['sold_monthly_2'];
                 $resultsdt[] = $res['sold_monthly_3'];
                 $resultsdt[] = $jng_sp_id == '0' ? $jng_nodata : $sales_weekly;
                 //20-24
                 $resultsdt[] = $jng_sp_id == '0' ? $jng_nodata : $sales_monthly;
                 $resultsdt[] = $res['brand_name'];
                 $resultsdt[] = $res['kill_status'];
                 $resultsdt[] = $products_created;
                 $resultsdt[] = $res['hh_stock'];
                 //25-28
                 $resultsdt[] = $products_complexity;
                 $resultsdt[] = $products_stars;
                 $resultsdt[] = $products_is_watched;
                 $resultsdt[] = $res['sample_created'];
                 //29
                 $resultsdt[] = $res['jng_products_age'];
                 $resultsdt[] = $material_expenses;
                 $resultsdt[] = $res['products_length'];
             }
         } elseif ($display_type == 'thumbnail') {
             //0-4
             $resultsdt[] = $products_image;
             $resultsdt[] = $products_id;
             $resultsdt[] = $res['products_model'];
             $resultsdt[] = $products_stars;
             $resultsdt[] = $products_is_watched;
             //5
             $resultsdt[] = $res['sample_created'];
         }
         $result['type'] = $type;
         $result['spid'] = $jng_sp_id;
         $result['result'] = implode($this->result_separator, $resultsdt);
         $result['rownumber'] = $row_number;
         $result['showingid'] = $showing_id;
     }
     ajaxReturn($result);
 }
function loadProductRow($pid, $pos, $curgroup_id)
{
    global $class_s, $header, $maxnav;
    use_class('products_minierp');
    $class_pm = new products_minierp();
    $product = $class_pm->retrieveDetail($pid, 'p,pl,sp');
    $cols = array();
    foreach ($header as $hk => $hv) {
        $value = '';
        switch ($hk) {
            case 'img':
                $value .= webImageAddPosition($pos, webImageWithDetailLink($product['p']['products_image'], IMAGE_SIZE_THUMBNAIL_2, IMAGE_SIZE_THUMBNAIL_2, "Product {$pid}"));
                break;
            case 'name':
                $value .= $pid . ' / ' . $product['p']['products_model'];
                $value .= '<br />' . $product['pd']['2']['products_name'];
                $value .= '<br />' . $class_pm->getDisplayStars('', $product['p']['stars']);
                $value .= '<br /><br />&raquo; Complexity = ' . productComplexityName($product['p']['complexity']);
                break;
            case 'age':
                $value .= $product['sp']['0']['active_age'] . '<br />days';
                break;
            case 'ts1':
                $value .= $product['sp']['0']['total_sold'];
                break;
            case 'ts2':
                $value .= displayCurrency('EUR', $product['sp']['0']['total_sales'], false);
                break;
            case 'ps':
                $value .= 'L30D=' . intval($product['pl']['sold_monthly_1']);
                $value .= '<br />L60D=' . intval($product['pl']['sold_monthly_2']);
                $value .= '<br />L90D=' . intval($product['pl']['sold_monthly_3']);
                break;
            case 'pspw':
                $value .= round($product['sp']['0']['sales_weekly'], 1);
                break;
            case 'pspm':
                $value .= round($product['sp']['0']['sales_monthly'], 1);
                break;
            case 'pb':
                use_class('products_brand');
                $value .= $product['p']['products_brand_name'];
                break;
            case 'cur':
                $attrs = $class_s->getProductStyles($pid);
                if (count($attrs[$curgroup_id]) > 0) {
                    foreach ($attrs[$curgroup_id] as $attr_id => $attr) {
                        $value .= drawAttribute($pid, $attr_id, $attr);
                    }
                }
                break;
            case 'act':
                $combo = array();
                for ($x = 1; $x <= $maxnav; $x++) {
                    $combo[] = '<select name="cmb-onebyone" class="input"></select>';
                }
                $value .= implode('<br />', $combo);
                $value .= '<br /><input type="button" class="input" name="save" value="Save" />';
        }
        if ($value == '') {
            $value = '&nbsp;';
        }
        $cols[$hk] = $value;
    }
    $productrow = '<tr id="temp-' . $pid . '">';
    foreach ($cols as $ck => $cv) {
        $productrow .= '<td class="' . $ck . '">' . $cv . '</td>';
    }
    $productrow .= '</tr>';
    return $productrow;
}
     echo "REM-{$pid}";
     exit;
 } elseif ($_POST['me_action'] == 'LOADPRODUCT') {
     $pid = tep_db_prepare_input($_POST['pid']);
     $pos = tep_db_prepare_input($_POST['pos']) + 1;
     $obj_product = new Product($pid);
     $product = $class_pm->retrieveDetail($pid, 'p,pd,pl,sp');
     $product_sp = $class_jc->retrieveDetail(null, $jng_sp_id, $pid);
     $added = is_array($product_sp) && isset($product_sp['active_status']);
     $stock = $class_pm->stockRetrieve(WAREHOUSE_ID_PRODUCTS_HAMBURG, $pid);
     $cols = array();
     foreach ($header as $hk => $hv) {
         $value = '';
         switch ($hk) {
             case 'img':
                 $value .= webImageAddPosition($pos, $obj_product->displayImage(IMAGE_SIZE_THUMBNAIL_2, IMAGE_SIZE_THUMBNAIL_2_PORTRAIT));
                 break;
             case 'nm w300':
                 $value .= $product['p']['products_brand_name'];
                 $value .= '<br />' . $obj_product->displayIDAndCode();
                 $value .= '<br />' . $product['pd']['2']['products_name'];
                 $value .= '<br /><br /><a href="?open=products-price&amp;pids=' . $pid . '&amp;hidemenu=true&amp;hidecopyurl=true"';
                 $value .= ' class="bold view_webpage">&raquo; Click here to manage price details!</a>';
                 break;
             case 'ps w150':
                 $value .= $obj_product->displayRecentSoldTable();
                 $value .= '<br /><br />';
                 $value .= $obj_product->displayYearlySoldTable();
                 break;
             case 'st w100':
                 $value .= strval($stock);