예제 #1
0
function cancelOrderStockHandler($type, $oiid, $stock_status, $status, $print_count, $print_confirmed, $products_id, $articles_id, $quantity, $is_promotion_order = false)
{
    global $STOCKLESS_ELEMENTS_CATEGORY;
    use_class('products_minierp');
    use_class('elements_stock');
    use_class('element');
    $class_pm = new products_minierp();
    $class_es = new elements_stock();
    $timestamp = date('Y-m-d H:i:s');
    if (in_array($status, array('1', '2', '3')) && $print_confirmed == 0 || $status == '8' && $print_count == 0) {
        switch ($stock_status) {
            case 'D':
                //DEPOT STOCK
                $class_pm->stockAdd(WAREHOUSE_ID_FOR_HANDLING_ORDERS, $products_id, $articles_id, $quantity, 'ADD CANCEL ' . $type . '-' . $oiid);
                break;
            case 'P':
                //FG STOCK
                $class_pm->stockAdd(WAREHOUSE_ID_PRODUCTS_BALI, $products_id, $articles_id, $quantity, 'ADD CANCEL ' . $type . '-' . $oiid);
                break;
            case 'R':
                //ELEMENTS STOCK
                $elements_used = array();
                $el_usage = $class_pm->retrieveElementsUsage($products_id, $articles_id);
                foreach ($el_usage as $e) {
                    $elements_used[$e['elements_id']] = $e['quantity'];
                }
                foreach ($elements_used as $eid => $el_qty) {
                    $el = new element($eid);
                    $el_cat_id = !is_null($el->attributes['category']['id']) ? $el->attributes['category']['id'] : '';
                    if (!in_array($el_cat_id, $STOCKLESS_ELEMENTS_CATEGORY)) {
                        $stock_qty = $quantity * $el_qty;
                        $current_stock = $class_es->addStockByPieces(WAREHOUSE_ID_ELEMENTS, $eid, $stock_qty, 'ADD CANCEL ' . $type . '-' . $oiid, $is_promotion_order);
                    }
                }
                break;
        }
    }
}
            $products_id = $row['products_id'];
            $articles_id = $row['products_articles_id'];
            if (!isset($total_products[$jng_warehouses_id][$products_id])) {
                $total_products[$jng_warehouses_id][$products_id] = array();
            }
            if (!isset($total_products[$jng_warehouses_id][$products_id][$articles_id])) {
                $total_products[$jng_warehouses_id][$products_id][$articles_id] = 0;
            }
            $total_products[$jng_warehouses_id][$products_id][$articles_id] += $row['order_quantity'];
        }
    }
}
foreach ($total_products as $jng_warehouses_id => $products) {
    foreach ($products as $products_id => $articles) {
        foreach ($articles as $aid => $add_amount) {
            $class_pm->stockAdd($jng_warehouses_id, $products_id, $add_amount, $aid);
            $class_ms->products_state($jng_warehouses_id, $products_id, $period, true);
        }
    }
}
//ELEMENTS
$jng_warehouses_id = 1;
$stocks = $class_es->retrieveAll($jng_warehouses_id);
foreach ($stocks as $eid => $stock) {
    $class_ms->elements_state($jng_warehouses_id, $eid, $period, true);
}
//FG Bali
$jng_warehouses_id = 7;
$stocks = $class_pm->stockRetrieveList($jng_warehouses_id);
foreach ($stocks as $s) {
    if ($s['stock'] > 0) {
     $ean = tep_db_prepare_input($_POST['ean']);
     $qty = tep_db_prepare_input($_POST['qty']);
     use_class('products_ean');
     $class_ean = new products_ean();
     $article = $class_ean->getProductArticle($ean);
     if ($article['products_id'] == '0') {
         $messagebox->add("<strong>Manual Bin In Failed: UNKNOWN EAN</strong><br />Please check if correct EAN Label is used");
     } else {
         $segment = $class_bin->retrieveSegmentDetail($bin['bin_segments_id']);
         $jng_warehouses_id = $segment['warehouses_id'];
         $products_id = $article['products_id'];
         $articles_id = $article['products_articles_id'];
         $stock = $class_pm->stockRetrieveDetail($jng_warehouses_id, $products_id, $articles_id);
         $bin_current = $class_bin->getBinProductStock($stock['products_stock_id']);
         if (is_null($bin_current)) {
             $class_pm->stockAdd($jng_warehouses_id, $products_id, $articles_id, $qty, "MANUAL BIN-IN by {$session_userinfo['username']}");
             $class_bin->bookBinForProduct($bins_id, $stock['products_stock_id']);
             header("Location: ?open=products-stock-detail&id={$stock['products_stock_id']}" . ($hidemenuscript != '' ? '&hidemenu=true' : ''));
             exit;
         } else {
             $messagebox->add("<strong>Manual Bin In Failed: EXISTING ARTICLE</strong><br />This article has booked another bin: " . $bin_current['code_clean']);
         }
     }
 } elseif ($_POST['me_action'] == 'GETPRODUCTSTOCKHISTORY') {
     $psid = tep_db_prepare_input($_POST['psid']);
     $period = tep_db_prepare_input($_POST['period']);
     $daily_summary = tep_db_prepare_input($_POST['daily_summary']);
     $ps = $class_pm->stockRetrieveDetailByPSID($psid);
     $whid = $ps['jng_warehouses_id'];
     $pid = $ps['products_id'];
     $aid = $ps['articles_id'];
     if ($oi['stock_status'] == 'R') {
         //ADD BACK ELEMENTS STOCK AUTOMATICALLY
         $eu = countElementsUsage($oi);
         foreach ($eu as $e_id => $e_qty) {
             if (!in_array($elements_categories[$e_id], $STOCKLESS_ELEMENTS_CATEGORY)) {
                 $stock_id = $e_id;
                 $order_qty = $oi['order_quantity'] * $e_qty;
                 $class_es->addStockByPieces($whid_elements, $e_id, $order_qty, 'ADD-EL ' . $order_type . '-' . $oiid);
                 $elements_stock[$stock_id] += $order_qty;
             }
         }
     } elseif ($oi['stock_status'] == 'P') {
         //ADD BACK FG STOCK AUTOMATICALLY
         $stock_id = $oi['products_id'] . $oi['products_articles_id'];
         $order_qty = $oi['order_quantity'];
         $class_pm->stockAdd($whid_prod, $oi['products_id'], $oi['products_articles_id'], $order_qty, 'ADD-FG ' . $order_type . '-' . $oiid);
         $products_stock_bali[$stock_id] += $order_qty;
     }
 }
 $oi_trans = null;
 //PRODUCT IS ALREADY MOVED TO IN HH TAB (MMO) - Retrieve MMO details as $oi_trans
 if ($oi['status'] == $new_status) {
     $oi_trans = $class_do->retrieveDetailTransmigran($order_type, $oiid);
 }
 //CANCEL MMO IF NOT YET IN PRODUCTION
 if (!is_null($oi_trans) && $oi_trans['status'] < 4) {
     $class_do->doCancelOrders($oi_trans['depot_orders_id'], $oi_trans['status'], 'auto-set');
 }
 //REQUEST DEPOT REFILL IF ORDER WAS NOT YET IN PRODUCTION
 if (is_null($oi_trans) && $oi['status'] < 4 || !is_null($oi_trans) && $oi_trans['status'] < 4) {
     $refill_type = depot_orders::AUTO_REFILL_ID_DSO;