예제 #1
0
 function updateProductStatus($items_id, $new_status, $updater = '', $cancelby = 'J', $add_to_prod_target = true)
 {
     /*==============================================================
       * PURPOSE  :   TO CHANGE PROCESS STATUS ORDER OF PRODUCTS
       * PARAMS   :   $items_id (NUMBER) >> e.g: 1234
       *              $new_status (NUMBER) >> e.g: 1
       *              $updater (STRING) "OPTIONAL" >> e.g: 'mbosse'
       *              $cancelby (STRING) "OPTIONAL" >> e.g: 'S'
       ===============================================================*/
     use_class('production_target');
     $pt = new production_target();
     list($new_status, $sub_status) = explode('-', $new_status);
     $item = $this->retrieveProductDetail($items_id);
     $itemMode = modeName($item['mode']);
     $timestamp = date('Y-m-d H:i:s');
     $is_reviving = statusIsCancelled($item['status']) && !statusIsCancelled($new_status);
     //Revive Item should move to in HH directly if other items are already in HH
     if ($is_reviving) {
         $item_others = $this->retrieveProducts($item['orders_id']);
         $others_in_hh = false;
         //If there's other items are already in HH set new status directly to HH
         foreach ($item_others as $io) {
             if ($io['status'] == '8') {
                 $new_status = '8';
                 $others_in_hh = true;
                 break;
             }
         }
         //If there's no items are already in HH (Full MTO)
         if (!$others_in_hh) {
             use_class('depot_orders');
             $class_do = new depot_orders();
             $item_do = $class_do->retrieveDetailTransmigran('JG', $items_id);
             if (!is_null($item_do)) {
                 if ($item_do['status'] < 6) {
                     /*  Order status is before in Package, do below steps:
                            1) Set real status same with last status of DP
                            2) Consider also set sub production status "only" when main status is in production
                            3) Cancel "directly" DP order, means we not use doCancelOrder
                         */
                     $new_status = $item_do['status'];
                     $sub_status = $new_status == '4' ? $item_do['prod_status'] : '';
                     $class_do->updateStatus($item_do['depot_orders_id'], '12', 'auto-set');
                     $reviving_need_next_update = true;
                     $revived_stock_status = $item_do['stock_status'];
                     $revived_mode = 'MTO';
                 } else {
                     /* Order status is >= "in Package"
                           1) Set real status to New
                        */
                     $new_status = '1';
                 }
             }
         }
     }
     //Only "Sent" and "Complete" status can be updated to "Returned"
     if ($new_status == '14' && !($item['status'] == '9' || $item['status'] == '11')) {
         return false;
     }
     //KPI Logging
     if ($add_to_prod_target) {
         if ($new_status == '5') {
             $pt->addDataToField($timestamp, 'finish', $item['products_quantity']);
         }
         if ($new_status == '6') {
             $pt->addDataToField($timestamp, 'package', $item['products_quantity']);
         }
         if ($new_status == '7') {
             $pt->addDataToField($timestamp, 'sent', $item['products_quantity']);
         }
         if ($new_status == '16') {
             $pt->addDataToField($timestamp, 'log_return_to_bali', $item['products_quantity']);
         }
         if ($new_status == '19') {
             $pt->addDataToField($timestamp, 'log_return_missing', $item['products_quantity']);
         }
         if ($new_status == '20') {
             $pt->addDataToField($timestamp, 'log_return_to_bin_in', $item['products_quantity']);
         }
         if ($new_status == '9') {
             $pt->addDataToField($timestamp, 'log_products_sent_b2c', $item['products_quantity']);
             if ($itemMode == 'DSO') {
                 $pt->addDataToField($timestamp, 'log_products_sent_full_dso', $item['products_quantity']);
             } elseif ($itemMode == 'MTO') {
                 $pt->addDataToField($timestamp, 'log_products_sent_full_mto', $item['products_quantity']);
             } elseif ($itemMode == 'WMO' || $itemMode == 'MMO') {
                 $pt->addDataToField($timestamp, 'log_products_sent_mo', $item['products_quantity']);
             }
         }
     }
     //Update Status and create Status History
     $sda_op = array('status' => $new_status);
     $sda_op['status'] = $new_status;
     if ($new_status == '10') {
         $sda_op['products_problem'] = $cancelby;
     } elseif ($this->productStatusIsCancelled($item['status']) && !$this->productStatusIsCancelled($new_status)) {
         $sda_op['products_problem'] = '0';
     }
     $sub_status = trim(strtoupper($sub_status));
     if ($new_status == '4' && $sub_status != '') {
         $sda_op['prod_status'] = $sub_status;
     }
     //PS: please don't set empty prod_status when it updated to status > 4,
     //since this will used for check whether order could transferred to DP or not
     //when real order taken over by HH when it from production
     tep_db_perform('orders_products', $sda_op, 'update', "orders_products_id={$items_id}");
     $save_main_status_history = true;
     if (in_array($item['status'], array('3', '4', '5')) && $new_status == '4' && ($sub_status != '' && trim(strtoupper($item['prod_status'])) != $sub_status) || $is_reviving && $new_status == '4') {
         $psh = array();
         $psh['orders_items_id'] = $items_id;
         $psh['type'] = 'JG';
         $psh['status'] = $sub_status;
         $psh['status_quantity'] = $item['products_quantity'];
         $psh['status_date'] = $timestamp;
         $psh['update_by'] = $updater;
         saveProductionStatusHistory($psh);
         if ($item['status'] == '4') {
             $save_main_status_history = false;
         }
     }
     if ($save_main_status_history) {
         $sda = array();
         $sda['orders_products_id'] = $items_id;
         $sda['status'] = $new_status;
         $sda['status_quantity'] = $item['products_quantity'];
         $sda['status_date'] = $timestamp;
         $sda['update_by'] = $updater;
         tep_db_perform('orders_products_status_history', $sda);
     }
     //Revive Additional Action
     if ($is_reviving) {
         //Revive Items from Cancel Request Status
         $this->recalcProductsCounter($item['orders_id']);
         if ($new_status == '8') {
             $this->printCountReset($items_id);
             $this->updateOrderItemMode($items_id, 'MMO');
             use_class('depot_orders');
             $class_do = new depot_orders();
             $item_do = $class_do->transferFromRealOrder(SEGMENT_ID_HAMBURG, 'JG', $items_id);
             if ($item_do['status'] > 7) {
                 $class_do->updateStatus($item_do['depot_orders_id'], '1');
                 $class_do->printCountReset($item_do['depot_orders_id']);
             }
         }
         if ($reviving_need_next_update) {
             $this->updateProductStockStatus($items_id, $revived_stock_status);
             if ($revived_mode != '') {
                 $this->updateOrderItemMode($items_id, $revived_mode);
             }
         }
         //Set need repackaging flag if needed
         use_class('products_minierp');
         $class_pm = new products_minierp();
         $p_data = $class_pm->retrieveDetail($item['products_id'], 'p');
         if ($p_data['p']['need_repackaging'] == 1) {
             $this->setNeedRepackaging($item['orders_id']);
         }
     }
     //Check other available products of this order which need repackage "nr" on cancel
     if ($new_status == '10') {
         use_class('products_minierp');
         $class_pm = new products_minierp();
         $need_repackaging = false;
         $nr_q = "SELECT products_id FROM orders_products WHERE orders_id = {$item['orders_id']} AND status NOT IN (10, 12)" . " AND orders_products_id != {$items_id}";
         $nr_dbq = tep_db_query($nr_q);
         while ($nr_r = tep_db_fetch_array($nr_dbq)) {
             $p_data = $class_pm->retrieveDetail($nr_r['products_id'], 'p');
             if ($p_data['p']['need_repackaging'] == 1) {
                 $need_repackaging = true;
                 break;
             }
         }
         if (!$need_repackaging) {
             $this->resetNeedRepackaging($item['orders_id']);
         }
     }
     //Recalculate Orders Total, Products Counter on cancellation and reviving
     if ($new_status == '10' || $is_reviving) {
         $this->recalcTotals($item['orders_id']);
         $this->recalcProductsCounter($item['orders_id']);
         $this->recalcVouchersAndShippingCost($item['orders_id'], false);
     }
     //Update Stock Status and Elements Stock if necessary
     if ($new_status == '2' && $item['stock_status'] != 'S') {
         $this->updateProductStockStatus($items_id, false);
         $this->prodStatusReset($items_id);
         $this->eanPrintedReset($items_id);
         //$this->printCountReset($items_id);    //now we don't need to reset print_count for reprint pi when move to ready again.
     } elseif ($new_status == '3' && $item['stock_status'] == 'S' || $new_status == '4' && $item['stock_status'] == 'W') {
         $eu = $this->countElementsUsage($item['products_id'], $item['products_articles_id']);
         $jng_warehouses_id = '1';
         use_class('elements_stock');
         $class_es = new elements_stock();
         foreach ($eu as $elements_id => $euqty) {
             $reduce_amount = $item['products_quantity'] * $euqty;
             $class_es->reduceStockByPieces($jng_warehouses_id, $elements_id, $reduce_amount, 'RED JG-' . $items_id);
         }
         $this->updateProductStockStatus($items_id, 'R');
     } elseif ($new_status == '1') {
         //IF THERES ORDERS NEEDS RESET BACK TO NEW
         $this->printCountReset($items_id);
         $this->printConfirmReset($items_id);
         $this->prodStatusReset($items_id);
         $this->eanPrintedReset($items_id);
         $this->updateProductStockStatus($items_id, 0);
         $this->updateOrderItemMode($items_id, 'UNSET');
     }
     //Production Target Flag Counter
     if ($item['status'] == '1' && ($new_status == '2' || $new_status == '3')) {
         $this->productionTargetIn($timestamp, $item);
     } elseif ($new_status == '6') {
         $this->productionTargetOut($timestamp, $item);
     } elseif ($new_status == '10') {
         $this->productionTargetInReset($item);
     }
     //Auto Print PI rules
     if ($new_status == '3' || $new_status == '12') {
         $orders_id = $item['orders_id'];
         //$q_pi_status = tep_db_query("SELECT COUNT(1)=order_item_total AS pi_ready_to_print FROM orders_products WHERE orders_id = $orders_id AND status = 3 AND print_count = 0 GROUP BY orders_id");
         //ALSO CONSIDER GIFT/VOUCHER THAT DIRECTLY SET AS "SENT TO CUSTOMER" BUT print_count still zero
         $q_pi_status = tep_db_query("SELECT COUNT(1)=order_item_total AS pi_ready_to_print FROM orders_products WHERE orders_id = {$orders_id} AND status IN (3, 9) AND print_count = 0 GROUP BY orders_id");
         $pi_status = tep_db_fetch_array($q_pi_status);
         if ($pi_status['pi_ready_to_print'] == 1) {
             //PI PRINTED FOR THE FIRST TIME
             /* HANDLED BY BATCH PRINTING CRON cron/print-pi.php
                use_class('production_instruction_pdf');
                $class_pi = new production_instruction_pdf();
                $class_pi->addOrder('JG', $orders_id);
                $class_pi->createPDF(false, 'F', true);
                 */
         } else {
             if ($item['print_count'] > 0 && $item['print_confirmed'] > 0) {
                 //SECOND OR MORE PI PRINTED, could happen when there product by stock_status is "OK" but in real stock is "0" so this will set back to "NS". And when ready this will reprinted by using this block
                 $this->printConfirmReset($item['orders_products_id']);
                 $this->printCountReset($item['orders_products_id']);
                 /*
                                         use_class('production_instruction_pdf');
                                         $class_pi = new production_instruction_pdf();
                                         $class_pi->addItem('JG', $item['orders_products_id']);
                                         $class_pi->createPDF(false, 'F', false);    //not add to daily statistic, we consider this as not "NEW"
                 */
             }
         }
     }
     $q = tep_db_query("SELECT o.orders_id, o.orders_status, o.payment_method FROM orders_products op LEFT JOIN orders o ON o.orders_id=op.orders_id WHERE op.orders_products_id={$items_id}");
     $order = tep_db_fetch_array($q);
     if ($new_status == '12' || $item['products_problem'] == '0') {
         $status_to_update_orders = array('2' => '6', '4' => '5', '13' => '6', '5' => '7', '7' => '8', '9' => '10', '12' => '12');
         //cancelled
         if (array_key_exists($new_status, $status_to_update_orders)) {
             $changeorderstatus = true;
             if ($new_status == '12') {
                 //dont update order status if not all products are cancelled
                 if (!$this->isAllProductsCancelled($order['orders_id'])) {
                     $changeorderstatus = false;
                 }
             }
             if ($changeorderstatus) {
                 $order_new_status = $status_to_update_orders[$new_status];
                 if ($order['orders_status'] < $order_new_status) {
                     $this->updateOrderStatus($order['orders_id'], $order_new_status);
                 }
             }
         }
         if ($new_status == '12' && (strtoupper($order['payment_method']) == strtoupper(PAYMENT_METHOD_BANK_TRANSFER) || strtoupper($order['payment_method']) == strtoupper(PAYMENT_METHOD_PAYPAL))) {
             /*----------------------------------------------------------------------------------------
               * MAKE RETURN ENTRY FOR "PREPAYMENT ONLY" ON "CANCEL CONFIRM", SINCE FOR NON-PREPAYMENT, 
               * PAYONE INVOICE WILL CREATED WHEN PRODUCTS IS SENT, 
               * SO NO NEED TO ADJUST IT OR CREATE RETURN CONTAINER WHEN CANCEL CONFIRM PROCESS
               -----------------------------------------------------------------------------------------*/
             use_class('payone');
             use_class('payone_invoice');
             $class_payone = new payone();
             $payi = new payone_invoice('invoice_order_id', $order['orders_id'], "invoice_order_type = 'J'");
             if ($payi->isUncapturedPrePayment()) {
                 //UNCAPTURED PREAUTH VORKASSE NEED TO RECALCULATE INVOICE
                 $payi->recalculate();
                 //SET AS PAID WHEN OPEN BALANCE LEAVE SMALL AMOUNT OR THIS CANCEL PROCESS MAKES UNDERPAID BALANCE BECOMES PAID/OVERPAID
                 if ($payi->getBalance() * 100 <= PAYONE_MAX_RETURNED_OPEN_PAYMENT) {
                     $this->updatePaymentStatus($item['orders_id'], '1', 'auto-set');
                 }
             } else {
                 //AUTH VORKASSE, CAPTURED PREAUTH VORKASSE, PAYPAL ORDER WILL ADD TO RETURN CONTAINER
                 $class_payone->createReturnContainer('NULL', $item['products_quantity'], $items_id);
             }
         }
     }
     //NEED TO RECALCULATE INVOICE WHEN REVIVING UNCAPTURED PREAUTH VORKASSE
     if ($is_reviving && strtoupper($order['payment_method']) == strtoupper(PAYMENT_METHOD_PREPAYMENT)) {
         use_class('payone_invoice');
         $payi = new payone_invoice('invoice_order_id', $order['jng_sp_orders_id'], "invoice_order_type = 'S'");
         if ($payi->isUncapturedPrePayment()) {
             $payi->recalculate();
         }
     }
     //SET READY TO CAPTURED FOR PREPAYMENT PREAUTH THAT ALREADY SENT
     if ($new_status == '9' && strtoupper($order['payment_method']) == strtoupper(PAYMENT_METHOD_BANK_TRANSFER)) {
         use_class('payone_invoice');
         $payi = new payone_invoice('invoice_order_id', $item['orders_id'], "invoice_order_type = 'J'");
         $payi->setIsCaptured('2');
     }
     return $new_status;
 }
 */
global $db;
require_once '../confy.php';
require_once '../functions.php';
require_once '../functions-2.php';
tep_db_connect();
use_class('ProductCOGS');
use_class('products_minierp');
$class_pm = new products_minierp();
$year = '2014';
$date_ranges = array();
$date_ranges['Jan'] = "'{$year}-01-01 00:00:00' AND '{$year}-01-31 23:59:59'";
$date_ranges['Feb'] = "'{$year}-02-01 00:00:00' AND '{$year}-02-28 23:59:59'";
$date_ranges['Mar'] = "'{$year}-03-01 00:00:00' AND '{$year}-03-31 23:59:59'";
$bgst = $class_pm->retrieveBestGoodSettings();
echo "<h3>Total COGS Products Sent to HH {$year}</h3>";
foreach ($date_ranges as $m => $date_range) {
    echo "{$m}: ";
    $q = "SELECT op.products_id, opsh.status_quantity qty FROM orders_products op\r\n    INNER JOIN `orders_products_status_history` opsh ON opsh.orders_products_id = op.orders_products_id\r\n    WHERE opsh.status = 7 AND opsh.status_date BETWEEN {$date_range}\r\n    UNION ALL\r\n    SELECT joi.products_id, status_quantity qty FROM jng_sp_orders_items joi\r\n    INNER JOIN `jng_sp_orders_items_status_history` joish ON joish.jng_sp_orders_items_id = joi.jng_sp_orders_items_id\r\n    WHERE joish.status = 7 AND joish.status_date BETWEEN {$date_range}\r\n    UNION ALL\r\n    SELECT do.products_id, quantity qty FROM depot_orders do\r\n    INNER JOIN depot_orders_status_history dosh ON dosh.depot_orders_id = do.depot_orders_id AND dosh.status = 7\r\n    WHERE dosh.update_time BETWEEN {$date_range}\r\n    ";
    $dbq = tep_db_query($q);
    $total_cogs = 0;
    while ($r = tep_db_fetch_array($dbq)) {
        $pid = $r['products_id'];
        $qty = $r['qty'];
        $products = $class_pm->retrieveDetail($pid, 'p');
        $cogs = new ProductCOGS($products['p']['material_expenses'], $products['p']['complexity']);
        $total_cogs += $cogs->value * $qty;
    }
    echo number_format($total_cogs, 2) . "<br/>";
}
tep_db_close();
        ajaxReturn($result);
        exit;
    } elseif ($_POST['me_action'] == 'COPYELEMENTS') {
        $pid_to_applied = tep_db_prepare_input($_POST['pid']);
        $pid_to_copied = tep_db_prepare_input($_POST['pidcopy']);
        $el_id_excluded = tep_db_prepare_input($_POST['elidexcluded']);
        $elidcopy = tep_db_prepare_input($_POST['elidcopy']);
        $qtycopy = tep_db_prepare_input($_POST['qtycopy']);
        //        $el_added = $class_pm->addElementToProducts($pid_to_applied, $elidcopy, $qtycopy);
        $class_pm->copyFromProducts($pid_to_copied, $pid_to_applied, 'eu', $el_id_excluded);
        echo utf8_encode("{$pid_to_copied}-{$pid_to_applied}");
        exit;
    }
}
//TEMPLATE
$eu_p = $class_pm->retrieveDetail($products_id, 'p,pd,pei');
$content .= '<div class="ui-corner-all" style="text-align:center;position:fixed;left:10px;width:212px;padding:5px;">';
if ($is_accessed_from_design_mgmt) {
    use_class('design_draft');
    $draft = new design_draft(null, $products_id);
    $content .= webImageWithDetailLink($draft->image_1, IMAGE_SIZE_THUMBNAIL_3, IMAGE_SIZE_THUMBNAIL_3, 'Product ' . $products_id, 'img-border');
} else {
    $content .= webImageWithDetailLink($eu_p['p']['products_image'], IMAGE_SIZE_THUMBNAIL_3, IMAGE_SIZE_THUMBNAIL_3, 'Product ' . $products_id, 'img-border');
    $content .= '<div style="width:100%;float:left;">';
    foreach ($eu_p['pei'] as $peid => $products_extra_images) {
        $content .= '<div style="float:left;margin:10px 0 10px 10px;">' . webImageWithDetailLink($products_extra_images, IMAGE_SIZE_THUMBNAIL_1, IMAGE_SIZE_THUMBNAIL_1, 'Product ' . $products_id . ' Additional Image', 'img-border') . '</div>';
    }
    $content .= '</div>';
}
$content .= '<div>' . $eu_p['p']['products_model'] . ' / ' . $eu_p['pd'][2]['products_name'] . '</div>';
$content .= '</div>';
예제 #4
0
 function isPhotoProductComplete($products = array())
 {
     use_class('products_minierp');
     $class_pm = new products_minierp();
     if (count($products) == 0) {
         $products = $this->retrieveProducts();
     }
     $photos_is_complete = count($products) > 0 ? true : false;
     foreach ($products as $p) {
         $dt_p = $class_pm->retrieveDetail($p['products_id'], 'p');
         if ($dt_p['p']['products_image'] == '') {
             $photos_is_complete = false;
             break;
         }
     }
     return $photos_is_complete;
 }
예제 #5
0
    $class_pa->processAction();
    $class_jc->processCommentAction();
}
//CHECK WHETHER PRODUCTS IS REMOVED OR NOT
$loadform = '<div style="margin-bottom:20px;"><form name="open_product" action="?open=sp-product" method="post">';
$loadform .= 'Product ID <input type="text" name="product_id" value="" /><input type="submit" name="submit" value="Load Product" />';
$loadform .= '</form></div>';
$products_removed = productIsRemoved($product_id);
if ($products_removed['is_removed']) {
    $content .= $loadform;
    $content .= $products_removed['msg_removed'];
} else {
    //START TEMPLATE
    $show_product_status_box = true;
    if (isset($product_id) && intval($product_id > 0)) {
        $product = $class_pm->retrieveDetail($product_id, 'p,pc');
        $spinfo = $class_jc->retrieveDetail(null, $jng_sp_id, $product_id);
        if (is_array($product) || is_array($spinfo)) {
            $show_product_status_box = false;
        }
    }
    $content = '';
    if ($show_product_status_box) {
        $content .= $loadform;
    }
    if (isset($product) && is_array($product)) {
        $image = webImage($product['p']['products_image'], '500', '', '', 'img-border img-padding');
        if (!is_array($spinfo)) {
            $article_number = $product['p']['products_model'];
            $suppliers_products_id = '';
            $content .= '<div style="float:left;margin: 0px 10px 20px 0px;">' . $image . '</div>';
예제 #6
0
             $header = str_replace("|n|", "\n", $ch);
             $colsize += $colwidth;
         } else {
             $colsize = 0;
         }
         $pdf->setXY($margin + $colsize, $pdf->ypos);
         $pdf->MultiCell($colwidth, $lineheight_header, $header, 1, 'C', true);
     }
 } else {
     $pdf->ypos += $key == 1 ? $lineheight_header + 5.2 : $lineheight;
     $pdf->setXY($margin, $pdf->ypos);
     foreach ($cols_value as $rkey => $cr) {
         if ($rkey == $col_image - 1) {
             $pdf->Cell($colwidth, $lineheight, '', 1, 0, 'C');
             //                die($cols_value[0]);
             $items = $class_pm->retrieveDetail($cols_value[0], 'p');
             $img_path = DIR_WS_IMAGES . 'imagecache/';
             $img_file = basename(webImageSource($items['p']['products_image'], IMAGE_SIZE_THUMBNAIL_1, IMAGE_SIZE_THUMBNAIL_1));
             $img = $img_path . $img_file;
             $x_col = $margin + ($col_image - 1) * $colwidth;
             $posx_image = $x_col + 3;
             $pdf->Image($img, $posx_image, $pdf->ypos + 4, 20);
             //PRINT TEXT BELOW IMAGE
             $pdf->setXY($x_col, $pdf->ypos + $lineheight - ($lineheight / 2 + 2));
             $text_under_image_height = $lineheight;
             if ($pdf->PageNo() > 1) {
                 $text_under_image_height -= 3.1;
             } else {
                 $text_under_image_height -= 2;
             }
             $pdf->Cell($colwidth, $text_under_image_height, $cr, 0, 0, 'C');
$content .= '<th rowspan="2">No</th>';
$content .= '<th rowspan="2">Product</th>';
$content .= '<th rowspan="2">Articles</th>';
$content .= '<th rowspan="2">Stock</th>';
$content .= '<th colspan="2">Acive Booking</th>';
$content .= '<th rowspan="2">Cache<br />Status</th>';
$content .= '</tr><tr>';
$content .= '<th>Query</th>';
$content .= '<th>Cache</th>';
$content .= '</tr></thead>';
$content .= '<tbody>';
$rowcount = 0;
foreach ($articles_result as $pid => $articles) {
    $rowcount++;
    $rowclass = $rowcount % 2 == 0 ? 'e' : 'o';
    $pdata = $class_pm->retrieveDetail($pid, 'p,pnc');
    $alist = $class_pa->retrieveList($pid);
    $adata = array();
    foreach ($alist as $al) {
        $adata[$al['products_articles_id']] = $al;
    }
    $content .= '<tr class="' . $rowclass . '">';
    $content .= '<td class="id">' . $rowcount . '</td>';
    $content .= '<td>';
    $content .= webImage($pdata['p']['products_image'], IMAGE_SIZE_THUMBNAIL_1, IMAGE_SIZE_THUMBNAIL_1, 'Product ' . $pid);
    $content .= '<br /><a href="?open=product-detail&amp;products_id=' . $pid . '">' . $pid . '</a>';
    $content .= '</td>';
    $col_ean = '';
    $col_stock = '';
    $col_booked_query = '';
    $col_booked_cache = '';
 $total_products_canceled = 0;
 $worst_status = 12;
 $worst_status_date = 0;
 $tables = array();
 $tables[] = $header;
 foreach ($items as $ikey => $i) {
     $total_products++;
     $item_object = $order_object->getItem($i[$items_colname_id]);
     if (statusIsCancelled($i['status'])) {
         $total_products_canceled++;
     } else {
         if ($i['status'] > 8) {
             $total_products_sent++;
         }
     }
     $product = $class_pm->retrieveDetail($i['products_id'], 'p,pnc');
     $article = $i['products_articles_id'] > 0 ? $class_pa->retrieveDetail($i['products_articles_id']) : null;
     $ordered_qty = intval($i[$items_colname_qty]);
     if ($i['status'] == 8) {
         if ($i['stock_status'] == 'D') {
             $total_products_depot_ready++;
             if ($i['print_count'] == '1') {
                 $total_products_depot_ready_printed++;
             }
         }
         if ($i['mode'] == modeKey('MMO')) {
             $do = $class_do->retrieveDetailTransmigran($source, $i[$items_colname_id]);
             if ($i['stock_status'] != 'D' || $i['stock_status'] == 'D' && $do['status'] == 8) {
                 $i['status'] = $do['status'];
                 $i['status_date'] = $do['status_date'];
             }
예제 #9
0
 function deleteProduct($products_id, $username)
 {
     use_class('products_minierp');
     use_class('minierp_users');
     $class_pm = new products_minierp();
     $class_mu = new minierp_users();
     $p = $class_pm->retrieveDetail($products_id, 'pd');
     $class_pm->deleteNewProduct($products_id);
     tep_db_query("DELETE FROM designs_products WHERE products_id={$products_id}");
     $class_mu->removeFromWatchlist('*', $products_id);
     if ($username != 'draft-deletion') {
         $comment = 'I delete Product ID ' . $products_id . ' (' . $p['pd']['2']['products_name'] . ')';
         $this->comments->addComment($username, $comment);
     }
 }
 $lineheight = 5;
 $pdf->setXY($colpos, $pdf->ypos);
 $pdf->setFont('Arial', 'B', $fontsize_med);
 $pdf->SetFillColor(191, 191, 191);
 $pdf->Cell($col_subcol_width[1], $lineheight, 'Pos.', 1, 0, 'C', true);
 $pdf->Cell($col_subcol_width[2], $lineheight, 'Bild', 1, 0, 'C', true);
 $pdf->Cell($col_subcol_width[3], $lineheight, 'Größe', 1, 0, 'C', true);
 $pdf->Cell($col_subcol_width[4], $lineheight, 'Produktkategorie', 1, 0, 'C', true);
 $pdf->Cell($col_subcol_width[5], $lineheight, 'Article', 1, 0, 'C', true);
 $pdf->Cell($col_subcol_width[6], $lineheight, 'EAN', 1, 0, 'C', true);
 $pdf->Cell($col_subcol_width[7], $lineheight, 'Preis', 1, 0, 'C', true);
 $pdf->Cell($col_subcol_width[8], $lineheight, 'Menge', 1, 0, 'C', true);
 $pdf->ypos += $lineheight;
 $item_counter = 0;
 foreach ($items as $item) {
     $product = $class_pm->retrieveDetail($item['products_id'], 'p,pd,pnc,cat');
     if ($item['products_articles_id'] == 0) {
         $size = $product['pnc']['products_length'] > 0 ? textLength($product['pnc']['products_length']) : '-';
     } else {
         $article = $class_pa->retrieveDetail($item['products_articles_id']);
         $size = textLength($article['length']);
     }
     //            echo '<pre>';
     //            var_dump($product);
     //            echo '</pre>';
     $item_counter++;
     $img_pdf = '';
     $img_path = DIR_WS_IMAGES . 'imagecache/';
     $img_file = basename(webImageSource($product['p']['products_image'], IMAGE_SIZE_THUMBNAIL_2, IMAGE_SIZE_THUMBNAIL_2));
     $img = $img_path . $img_file;
     if ($img != $img_path) {
 /**
  * Generate family match key
  * @param Int $products_id
  * @param Int $articles_id
  * @return String
  */
 function refreshFamilyMatchKey($products_id, $articles_id = null)
 {
     //$group_ref_el_cat = array('casting', 'findings', 'handmade', 'chains', 'pearl');
     $group_ref_el_cat = $this->el_cat_searchkey;
     //Old Key formula : brand_id-categories_id-[el_id-qty] >> 13.12.10 changed to exclude brand_id
     //New Key formula : categories_id-[el_id-qty]
     use_class('element');
     use_class('products_minierp');
     use_class('products_articles');
     $class_pa = new products_articles();
     $class_pm = new products_minierp();
     if (is_null($products_id)) {
         $articles = $class_pa->retrieveDetail($articles_id);
         $products_id = $articles['products_id'];
     }
     $family_searchkey = '';
     $key1 = array();
     $key2 = array();
     $el_used = $class_pm->retrieveElementsUsage($products_id, $articles_id);
     if (count($el_used) > 0) {
         //$p_data = $class_pm->retrieveDetail($products_id, 'p,cat');
         $p_data = $class_pm->retrieveDetail($products_id, 'cat');
         //$key1[] = $p_data['p']['products_brand_id'];
         $key1[] = $p_data['categories_id'];
         foreach ($el_used as $dt) {
             $elid = $dt['elements_id'];
             $el = new element($elid);
             if (in_array($el->attributes['category']['id'], $group_ref_el_cat)) {
                 $key2[] = $elid;
                 $key2[] = $dt['quantity'];
             }
         }
         if (count($key2) > 0) {
             $family_searchkey = implode('-', array_merge($key1, $key2));
             if (is_null($articles_id)) {
                 tep_db_perform('products', array('family_searchkey' => $family_searchkey), 'update', "products_id={$products_id}");
                 //update also articles if exist
                 $articles = $class_pa->retrieveList($products_id);
                 foreach ($articles as $article) {
                     $articles_id = $article['products_articles_id'];
                     $this->refreshFamilyMatchKey($products_id, $articles_id);
                 }
             } else {
                 tep_db_perform('products_articles', array('family_searchkey' => $family_searchkey), 'update', "products_articles_id={$articles_id}");
             }
         }
     }
     return $family_searchkey;
 }
예제 #12
0
     $result = false;
     $q_pnc = "SELECT * FROM products_non_configurator WHERE products_id = {$pid}";
     $r_pnc = tep_db_query($q_pnc);
     $pnc = tep_db_fetch_array($r_pnc);
     $production_instruction_id = explode(",", $pnc['production_instruction_id']);
     $key = array_search($piid, $production_instruction_id);
     unset($production_instruction_id[$key]);
     $data['production_instruction_id'] = implode(",", $production_instruction_id);
     tep_db_perform('products_non_configurator', $data, 'update', "products_id={$pid}");
     $result['piid'] = $piid;
     ajaxReturn($result);
     exit;
 } elseif ($_POST['me_action'] == 'DETAILCOMPLETE') {
     $products_id = tep_db_prepare_input($_POST['products_id']);
     $make_template = tep_db_prepare_input($_POST['make_template']);
     $product = $class_pm->retrieveDetail($products_id, 'p,pd,pnc');
     $articles = $class_pa->retrieveList($products_id);
     if ($make_template == 'true') {
         use_class('products_linking');
         use_class('products_articles');
         $class_pl = new products_linking();
         $class_pa = new products_articles();
         $products_to_update = array();
         $draft = new design_draft(null, $products_id);
         $ucd_products = $draft->retrieveProducts("detailed_time IS NULL AND detailed_by IS NULL");
         //uncomplete detail products
         foreach ($ucd_products as $ucdp) {
             if ($ucdp['products_id'] != $products_id) {
                 $products_to_update[] = $ucdp['products_id'];
             }
         }
 $maxkeywords = 94 - (strlen($brand_id) + strlen($properName));
 if ($maxkeywords > 64) {
     $maxkeywords = 64;
 }
 //don't send manual keywords to otto.de
 //$keywords = $p['keywords'];
 $keywords = '';
 $keywords_name = $properName == '' ? $p['name'] : '';
 $keywords = addAutoKeywords($keywords, $maxkeywords, $keywords_name, '', ', ');
 if ($keywords == '') {
     $keywords = $product_categories_name[$p['categories_id']];
 }
 $xml_content .= writeXMLline('KeyWord', $keywords, 2);
 //Product description
 $p['description'] .= str_replace("\n", '<br>', categoryExtraDescription($p['categories_id'], $sp_detail['languages_id']));
 $pd2data = $class_pm->retrieveDetail($p['products_id'], 'pd2');
 $desc2_label = $class_pm->description2_label($pd2data['pd2']);
 $proddesc2 = array();
 foreach ($desc2_label as $label => $value) {
     $proddesc2[] = $label . ': ' . $value;
 }
 $p['description'] .= '<br><br>Produktdetails:<br><ul><li>' . implode('</li><li>', $proddesc2) . '</li></ul>';
 $html_long_desc = $p['description'];
 $long_desc = strip_tags(str_replace('<li>', ' ', $html_long_desc));
 $xml_content .= writeXMLline('LongDesc', $long_desc, 2);
 $xml_content .= writeXMLline('HTMLLongDesc', $html_long_desc, 2);
 //Warengruppe / Class of Goods
 $warengruppe = translateOttoCategory($p['categories_id']);
 $xml_content .= writeXMLline('ClassOfGoods', $warengruppe, 2);
 //Product Navigatins (nav ids) / Cluster
 $sp_navid = $navids[$p['navigation']];
     $label_image = tep_db_prepare_input($_POST['type']);
     $key_id = tep_db_prepare_input($_POST['keyid']);
     $img_name = tep_db_prepare_input($_POST['img_name']);
     $pid = tep_db_prepare_input($_GET['products_id']);
     if ($label_image == 'mi2') {
         $check_ci_exists = tep_db_query("SELECT products_clear_image FROM products_clear_images WHERE products_id={$pid}");
         if (tep_db_num_rows($check_ci_exists) > 0) {
             $ci_rem = tep_db_fetch_array($check_ci_exists);
             $delete_file = $uploaddir . $ci_rem['products_clear_image'];
             if (file_exists($delete_file)) {
                 unlink($delete_file);
                 tep_db_query("DELETE FROM products_clear_images WHERE products_id={$pid}");
             }
         }
     } elseif ($label_image == 'mi3') {
         $p_data = $class_pm->retrieveDetail($pid, 'p');
         $delete_file = $uploaddir . $p_data['p']['products_pure_image'];
         if (file_exists($delete_file)) {
             unlink($delete_file);
             tep_db_perform('products', array('products_pure_image' => ''), 'update', 'products_id=' . $pid);
         }
     } elseif ($label_image == 'pei') {
         if (delete_extra_image($key_id)) {
             tep_db_query("DELETE FROM products_extra_images WHERE products_extra_images_id={$key_id}");
         }
         $label_image = 'Additional Image ' . str_replace('products_extra_image_', '', $img_name);
     }
     $class_pm->autoUpdateSalesPartnerCatalog($pid);
     echo "OK";
     exit;
 }
예제 #15
0
        if ($stock == 0) {
            //KILL PRODUCT AND REMOVE IT FROM DTK COLLECTION
            $username = '******';
            $class_pm->killProduct($pid, $username);
            $class_s->remProduct($style_id, $pid, $username);
            $killed[] = $pid;
        }
    }
    $killed_total = count($killed);
    //Notify Design and IT Team
    if ($killed_total > 0 || date('N') == 7) {
        $subject = 'Auto Kill DTK Collection (' . $killed_total . ')';
        $send_message = '<div>' . $killed_total . ' Product' . ($killed_total > 1 ? 's are' : ' is') . ' auto killed today from DTK collection</div>';
        if ($killed_total > 0) {
            foreach ($killed as $pid_killed) {
                $product = $class_pm->retrieveDetail($pid_killed, 'p');
                $image = webImage($product['p']['products_image'], IMAGE_SIZE_THUMBNAIL_1, IMAGE_SIZE_THUMBNAIL_1);
                $send_message .= '<div style="float:left;margin-right:15px;">' . '<div>' . $image . '</div><div style="text-align:center;">' . $pid_killed . '</div></div>';
            }
            //$send_message .= ':<br />' . implode(', ', $killed);
        }
        tep_mail(EMAIL_DESIGNTEAM_NAME, EMAIL_DESIGNTEAM_ADDRESS, $subject, $send_message, FROM_EMAIL_NAME, FROM_EMAIL_ADDRESS, false);
        tep_mail(EMAIL_SALESMARKETINGTEAM_NAME, EMAIL_SALESMARKETINGTEAM_ADDRESS, $subject, $send_message, FROM_EMAIL_NAME, FROM_EMAIL_ADDRESS, false);
    }
}
$logger->write("Task 6 - End");
$logger->write("Task 7 (AMAZON ORDER MISSED SHIPPING WINDOW) - Start");
/////////////////////////////////////////
// AMAZON ORDER MISSED SHIPPING WINDOW //
/////////////////////////////////////////
$today = date('Y-m-d');
$class_pm = new products_minierp();
$class_pa = new products_articles();
$preorder_id = tep_db_prepare_input($_GET['id']);
$preorder = new jng_sp_preorders($preorder_id);
$ean_collection = array();
foreach ($preorder->items as $i) {
    $ean_collection[] = $i['products_ean'];
}
$dest_path = 'BuyVIP-' . date('ymd') . '/';
if (!is_dir($dest_path)) {
    mkdir($dest_path, 0750);
}
foreach ($ean_collection as $ean) {
    $pdata = $class_ean->getProductArticle($ean);
    $pid = $pdata['products_id'];
    $p = $class_pm->retrieveDetail($pid, 'p,pci,pei,pnc,cat');
    $product_images = array();
    if ($p['p']['products_image'] != '' || $p['pci']['products_clear_image'] != '') {
        $img_location = DIR_WS_IMAGES . ($p['pci']['products_clear_image'] != '' ? $p['pci']['products_clear_image'] : $p['p']['products_image']);
        if (is_file($img_location)) {
            $product_images[] = $p['pci']['products_clear_image'] != '' ? $p['pci']['products_clear_image'] : $p['p']['products_image'];
            foreach ($p['pei'] as $ei) {
                $product_images[] = $ei;
            }
            if ($p['categories_id'] == '2') {
                $product_images[] = DIR_FS_SUPPORTS . 'AM.VD-ImageAdditional-Necklace.jpg';
            }
        }
    }
    if ($pdata['products_articles_id'] == '0') {
        $img_counter = 0;
 $r[2][35] = 'CareLabel';
 $r[2][36] = 'ProductWarranty';
 $upload_timestamp = time();
 $prefix_date = date('Ymd', $upload_timestamp);
 $csv_bulk_item_filename = $prefix_date . '-LazadaBulkItem.csv';
 $csv_bulk_item_location = SP_LAZADAID_UPLOAD_PATH . $csv_bulk_item_filename;
 if (file_exists($csv_bulk_item_location)) {
     unlink($csv_bulk_item_location);
 }
 lazadaIDWriteToFile($csv_bulk_item_filename, $r, 'w');
 $temp_images = array();
 $csvdata = array();
 foreach ($pids_explode as $pid) {
     $csvdata = lazadaTemplate(false, $pid, '', '');
     lazadaIDWriteToFile($csv_bulk_item_filename, $csvdata['data'], 'a');
     $product = $class_pm->retrieveDetail($pid, 'p,pd,pd2,pc,pnc,cat,pei,pci');
     if ($product['categories_id'] == 29) {
         $articles = $class_pa->retrieveList($pid);
         $articles_total = count($articles);
         if ($articles_total > 0) {
             foreach ($articles as $a) {
                 if ($a['active_status'] != '0') {
                     if ($a['length'] > 4.6 && $a['length'] < 6.0) {
                         $csvdata = lazadaTemplate(true, $pid, $a['products_ean'], $a['length']);
                         lazadaIDWriteToFile($csv_bulk_item_filename, $csvdata['data'], 'a');
                     }
                 }
             }
         }
     }
     $product_images = array();
$class_ean = new products_ean();
$class_pm = new products_minierp();
$class_pa = new products_articles();
if (isset($_POST['me_action'])) {
    if ($_POST['me_action'] == 'GETPRODUCTDETAIL') {
        $product_input = tep_db_prepare_input($_POST['product_input']);
        $result = false;
        $elements_datas = array();
        $jng_warehouses_id = 1;
        if (strlen($product_input) == 13) {
            $ean = $product_input;
            $product_info = $class_ean->getProductArticle($ean);
            if (!empty($product_info['products_id']) && !is_null($product_info['products_id'])) {
                $products_id = $product_info['products_id'];
                $articles_id = $product_info['products_articles_id'];
                $product_data = $class_pm->retrieveDetail($products_id, 'p');
                $elements_used = $class_pm->retrieveElementsUsage($products_id, $articles_id);
                foreach ($elements_used as $element) {
                    $element_stock_query = "SELECT es.stock";
                    $element_stock_query .= " FROM elements_stock es";
                    $element_stock_query .= " WHERE es.jng_warehouses_id={$jng_warehouses_id}";
                    $element_stock_query .= " AND es.elements_id=" . $element['elements_id'];
                    $element_stock_result = tep_db_query($element_stock_query);
                    if (tep_db_num_rows($element_stock_result) > 0) {
                        $element_stock = tep_db_fetch_array($element_stock_result);
                        $el_stock = $element_stock[stock];
                    }
                    $elements_datas[] = $element['elements_id'] . "-" . $element['quantity'] . "-" . $el_stock;
                }
                $result['products_id'] = $product_data['p']['products_id'];
                $result['products_length'] = $product_info['length'] > 0 ? textLength($product_info['length']) : textLength("-");
$content .= '</div>';
$content .= '<div class="draw-table" style="clear:both;">';
$content .= '<table class="sticky-tablehead" border="0" cellpadding="0" cellspacing="0">';
$content .= '<thead><tr>';
foreach ($product_table_header as $k => $v) {
    $content .= '<th>' . $v . '</th>';
}
$content .= '</tr></thead>';
$content .= '<tbody id="table-loader">';
$items_as_products = array();
$products = array();
$articles = array();
foreach ($booking->items as $psid => $qty) {
    $stock = $class_pm->stockRetrieveDetailByPSID($psid);
    $items_as_products[$stock['products_id']][$stock['articles_id']] = $stock;
    $products[$stock['products_id']] = $class_pm->retrieveDetail($stock['products_id'], 'p,pnc');
    if ($stock['articles_id'] > 0) {
        $article = $class_pa->retrieveDetail($stock['articles_id']);
        $articles[$stock['products_id']][$stock['articles_id']] = textLength($article['length']);
    } else {
        $articles[$stock['products_id']][$stock['articles_id']] = textLength($products[$stock['products_id']]['pnc']['products_length']);
    }
}
$counter = 0;
foreach ($items_as_products as $pid => $adata) {
    $counter++;
    $product = $products[$pid];
    $alist = $articles[$pid];
    $content .= '<tr class="' . ($counter % 2 == 0 ? 'e' : 'o') . '">';
    foreach ($product_table_header as $k => $v) {
        switch ($v) {
예제 #20
0
         }
     }
 } elseif ($_POST['me_action'] == 'UPDATEFLAGIMAGEIMPROVED') {
     $status = tep_db_prepare_input($_POST['status']);
     $class_pm->updateFlagImageImproved($pid, $status);
     echo 'OK';
     exit;
 } elseif ($_POST['me_action'] == 'MAKESHAREABLE') {
     tep_db_query("UPDATE products_configurator SET visible_status='A', allow_modification='1' WHERE products_id={$pid}");
     $messagebox->add("This Product is now shareable.", 'green');
 } elseif ($_POST['me_action'] == 'MAKENOTSHAREABLE') {
     tep_db_query("UPDATE products_configurator SET visible_status='N', allow_modification='0' WHERE products_id={$pid}");
     $messagebox->add("This Product is set to not shareable.", 'green');
 } elseif ($_POST['me_action'] == 'SETFINISH') {
     tep_db_query("UPDATE products_configurator SET is_finish='1' WHERE products_id={$pid}");
     $product = $class_pm->retrieveDetail($pid, 'p');
     if ($product['p']['products_model'] == '') {
         $promod = $class_pm->generateNewCode($product['categories_id']);
         tep_db_query("UPDATE products SET products_model='{$promod}' WHERE products_id={$pid}");
     }
     $messagebox->add("This Product is now set as a finish product.", 'green');
 } elseif ($_POST['me_action'] == 'UPDATESPCATALOG') {
     //Add product to SP catalog, removing is not possible from this page
     if (isset($_POST['sp_catalog']) && is_array($_POST['sp_catalog']) && count($_POST['sp_catalog']) > 0) {
         foreach ($_POST['sp_catalog'] as $sp_id) {
             $jng_sp_id = tep_db_prepare_input($sp_id);
             sp_addProductToCatalog($jng_sp_id, $pid);
         }
     }
     $messagebox->add("Product is added to the selected catalog.", 'green');
 } elseif ($_POST['me_action'] == 'MANUALPI') {
$class_pb = new products_brand();
$class_pm = new products_minierp();
$class_jc = new jng_sp_catalog();
$class_do = new depot_orders();
$pid_array = array(24072, 25467, 48792, 51556, 51557, 51572, 58013, 60749, 60836, 60872, 64643, 64668, 65804, 66250, 66775, 67450, 68262, 68611, 70142, 71771, 72667, 72996, 73126, 73185, 73186, 73321, 73603, 73658, 73660, 73685, 74005, 74016, 74070, 74123, 74211, 74324, 74395, 74452, 74721, 74759, 74761, 74771, 74793, 74794, 74804, 74836, 74838, 74842, 74844, 74847, 74850, 74851, 74853, 74854, 74857, 74859, 74861, 74862, 74865, 74869, 74874, 74879, 74882, 74884, 74898, 74899, 74901, 74902, 74903, 74907, 74908, 74933, 74946, 74949, 74955, 74957, 74959, 74963, 74967, 74970, 74971, 74972, 74976, 74977, 74980, 74981, 74982, 74983, 74984, 74989, 74995, 74996, 75003, 75006, 75008, 75009, 75016, 75018, 75019, 75022, 75024, 75025, 75032, 75033, 75035, 75058, 75060, 75062, 75072, 75081, 75085, 75097, 75098, 75116, 75118, 75120, 75122, 75123, 75128, 75129, 75130, 75131, 75133, 75135, 75137, 75149, 75150, 75151, 75153, 75172, 75182, 75186, 75191, 75193, 75198, 75200, 75203, 75205, 75207, 75222, 75232, 75238, 75241, 75244, 75245, 75246, 75247, 75249);
//var_dump($pid_array);
//die();
$p = array();
$p['pid'] = 'Product ID';
$p['name'] = 'Product Name';
$p['desc'] = 'Product Description';
$p['keywords w200'] = 'Product Keyword';
$p['cogs'] = 'Product COGS';
$table_product[] = $p;
foreach ($pid_array as $pid) {
    $product_data = $class_pm->retrieveDetail($pid, 'p,pd');
    $product_name = $product_data['pd'][2]['products_name'];
    $product_desc = $product_data['pd'][2]['products_description'];
    $product_key = $product_data['pd'][2]['products_head_keywords_tag'];
    $bgst = $class_pm->retrieveBestGoodSettings();
    $cogs = new ProductCOGS($product_data['p']['material_expenses'], $products['p']['complexity']);
    $p['pid'] = $pid;
    $p['name'] = $product_name;
    $p['desc'] = $product_desc;
    $p['keywords w200'] = $product_key;
    $p['cogs'] = $cogs->value;
    $table_product[] = $p;
}
$table = tep_draw_table('main_center', $table_product, true);
echo $table;
tep_db_close();
예제 #22
0
        $element = new element($thumbid);
        $result = '<div style="text-align:left;">';
        $result .= $element->id . ' - ' . $element->detail['name'] . '<br/><br/>';
        $result .= ' &bull; Weight = ' . $element->detail['weight'] . ' Gram<br/>';
        $result .= ' &bull; Size = ' . $element->attributes['size']['name'];
        $result .= '</div>';
        echo $result;
        exit;
    }
}
$products_id = isset($_GET['id']) && $_GET['id'] != '' ? tep_db_prepare_input($_GET['id']) : null;
if (is_null($products_id)) {
    exit;
}
$draft = new design_draft(null, $products_id);
$product = $class_pm->retrieveDetail($products_id, 'p,pd,pei,pci');
$products_id = $product['p']['products_id'];
$material_swarovski_id = '4';
$materials = $class_pm->retrieveProductMaterialsUsed($products_id);
$materials_need_clearimage = array($material_swarovski_id);
$need_clearimage = count(array_intersect($materials, $materials_need_clearimage)) > 0;
function imageButtons($image, $title, $no, $pei_id)
{
    return '<div id="img-' . $no . '">' . webImageWithDetailLink($image, IMAGE_SIZE_THUMBNAIL_2, IMAGE_SIZE_THUMBNAIL_2, $title, 'img-border') . '</div>' . '<div id="dg-act-' . $no . '" class="dg-act">' . '<input type="hidden" name="imgno" value="' . $no . '"/>' . '<input type="hidden" name="pei_id" value="' . $pei_id . '" />' . '</div>';
}
$content .= '<div style="margin-bottom:20px;border:solid 1px #ccc;"><table class="form" style="width:100%" border="0" cellpadding="0" cellspacing="0">';
$content .= '<tr>';
$content .= '<th style="border-right:solid 1px #fff;">Product Name</th>';
$content .= '<th>Product Description</th>';
$content .= '</tr>';
$content .= '<tr>';
 $q .= " FROM depot_orders do";
 $q .= " WHERE do.leadtime_start_date IS NOT NULL AND do.trans_type != 'SP' AND do.trans_type != 'JG' ";
 $q .= " AND do.leadtime_start_date < '{$day_filter}' AND do.status = 2";
 $q .= ") a";
 $q .= " ORDER BY a.leadtime_start_date DESC";
 $result = tep_db_query($q);
 $el_id = array();
 $el = array();
 $element_name_max_chars = 30;
 while ($row = tep_db_fetch_array($result)) {
     $products_id = $row['products_id'];
     $articles_id = $row['articles_id'];
     $status = $row['stock_status'];
     $qty = $row['quantity'];
     if ($products_id != '') {
         $product = $class_pm->retrieveDetail($products_id);
         $elements = $class_pm->retrieveElementsUsage($products_id, $articles_id);
     }
     if (is_array($elements) && count($elements) > 0) {
         $elements_stock = $class_es->retrieveAll($whid);
         foreach ($elements as $eid => $usage) {
             $e = new element($eid);
             $stock = $elements_stock[$eid];
             $elusage = $qty * $usage['quantity'];
             if (isset($status) && $status == 'S') {
                 if ($stock < $elusage && !in_array($e->attributes['category']['id'], $STOCKLESS_ELEMENTS_CATEGORY)) {
                     $el['id1'] = $eid;
                     $el['tar q'] = $elusage;
                     $el_id[] = $el;
                     break;
                 }
 $dbqcat = tep_db_query($qcat);
 //================= VALIDATION SECTION START =================
 $products = array('m' => null, 'c' => null);
 $catalogs = array();
 $ignore_family = false;
 //LOOPING FOR PRODUCTS OF A FAMILY
 //In this loop we validate product and catalog data and
 //rearrange the products in each familiy
 $products_processed_status = array();
 while ($r_catalog = tep_db_fetch_array($dbqcat)) {
     $pid = $r_catalog['products_id'];
     $is_mother = $pid == $family->mother;
     if (!array_key_exists($pid, $products_processed_status)) {
         //Process product data
         $product_errors = array();
         $pdata = $class_pm->retrieveDetail($pid, 'p,pd,pd2,pci,pei,pnc,cat');
         $category = new Category($pdata['categories_id']);
         $category_name = $category->getName($lid);
         $mat_ids = $class_pm->loadProductMaterials($pid);
         $pdata['materials'] = array();
         foreach ($mat_ids as $mat_id) {
             if ($materials_name[$mat_id] != '') {
                 $pdata['materials'][] = $materials_name[$mat_id];
             }
         }
         //MATERIALS CHECK
         if (count($pdata['materials']) == 0) {
             $product_errors[] = 'Product has no Materials';
         }
         //BRAND CHECK
         if ($pdata['p']['products_brand_name'] == '') {
 /**
  * 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;
 }
예제 #26
0
<?php

use_class('orders');
$class_o = new orders();
use_class('products_minierp');
$class_pm = new products_minierp();
$opid = tep_db_prepare_input($_GET['opid']);
$statusName = $class_o->productStatusName();
$item = $class_o->retrieveProductDetail($opid);
$product = $class_pm->retrieveDetail($item['products_id'], 'p');
$order = $class_o->retrieveDetail($item['orders_id']);
$history = $class_o->retrieveProductHistory($opid);
$history_prod = retrieveProductionHistory('JG', $opid);
$htable = array();
$ht = array();
$ht['sort'] = 'No';
$ht['date_add'] = 'Date';
$ht['status'] = 'Status';
//$ht['qty'] = 'Qty';
$ht['login'] = '******';
$htable[] = $ht;
$count = 0;
$total_history = count($history);
$prev_info = array();
foreach ($history as $hk => $h) {
    $count++;
    $timestamp = strtotime($h['status_date']);
    $ht = array();
    $ht['sort'] = $count;
    $ht['date_add'] = date('d.m.y H:i:s', $timestamp);
    $ht['status'] = $statusName[$h['status']];
예제 #27
0
$sp_specsets = load_config('sp-specific-settings');
use_class('products_ean');
use_class('products_minierp');
use_class('jng_sp_orders');
$class_pe = new products_ean();
$class_pm = new products_minierp();
$class_jo = new jng_sp_orders();
$ean_pid = array();
$orders = array();
$products = array();
foreach ($eanlist as $ean) {
    $p_info = $class_pe->getProductArticle($ean);
    $pid = $p_info['products_id'];
    $ean_pid[$ean] = $pid;
    if (!isset($products[$pid])) {
        $pdata = $class_pm->retrieveDetail($pid, 'sp');
        $products[$pid] = $pdata['sp']['5'];
    }
}
$ean_detail_info = $class_jo->getAMVD_AutoCancelSupportingData($ean_pid);
echo "<table id='ean_table' border='1'>";
echo "<tr>";
echo "<th>PID</th>";
echo "<th>EAN</th>";
echo "<th>Status</th>";
echo "<th>Age</th>";
echo "<th>Article Sold</th>";
echo "<th>Products Sold</th>";
echo "</tr>";
foreach ($eanlist as $ean) {
    echo "<tr>";
$r[2][29] = 'PackageWidth';
$r[2][30] = 'PackageLength';
$r[2][31] = 'PackageWeight';
$r[2][32] = 'Certifications';
$r[2][33] = 'ProductionCountry';
$r[2][34] = 'ManufacturerTxt';
$r[2][35] = 'CareLabel';
$r[2][36] = 'ProductWarranty';
$temp_images = array();
//$productArticles = array();
//foreach ($pids as $pidArticle) {
//    $productArticles[$pidArticle] = $class_pa->retrieveList($pidArticle);
//}
foreach ($pids as $pid) {
    $product_materials_name = '';
    $product = $class_pm->retrieveDetail($pid, 'p,pd,pd2,pc,pnc,cat,pei,pci');
    $product_name = $product['pd'][3]['products_name'];
    //    $productLength = ($product['pc']['products_length'] !== false) ? $product['pc']['products_length']/10 : $product['pnc']['products_length']/10;
    if ($product['pc'] !== false) {
        $product_length = $product['pc']['products_length'];
        //        $productLengthForVar = number_format($productLength, 0);
        $product_length_for_var = 'One size';
        //FOR NOW WE ALWAYS USE One Size for every Categories except ring
        $length_code = '_' . number_format($product_length, 0);
    } else {
        $product_length = $product['pnc']['products_length'];
        //        $productLengthForVar = number_format($productLength, 0);
        $product_length_for_var = 'One size';
        //FOR NOW WE ALWAYS USE One Size for every Categories except ring
        $length_code = '_' . number_format($product_length, 0);
    }
예제 #29
0
function actualStockReportRetrieveProductDetail($products_id)
{
    use_class('products_minierp');
    $class_pm = new products_minierp();
    $lastyear = date('Y', strtotime('last year'));
    $thisyear = date('Y');
    $product = $class_pm->retrieveDetail($products_id, 'p,pl,pls');
    $pdet_needed = array();
    $pdet_needed['weight'] = $product['p']['products_weight'];
    $pdet_needed['stars'] = $product['p']['stars'];
    $pdet_needed['complexity'] = $product['p']['complexity'];
    $pdet_needed['age'] = $product['p']['age'];
    //$pdet_needed['total_sold'] = $product['sp']['0']['total_sold'];
    $pdet_needed['total_sold_lastyear'] = $product['pls']['sold_' . $lastyear];
    $pdet_needed['total_sold_thisyear'] = $product['pls']['sold_' . $thisyear];
    $pdet_needed['total_sold_l30d'] = $product['pl']['sold_monthly_1'];
    $pdet_needed['is_wholesale'] = $product['p']['is_wholesale'] == 1;
    return $pdet_needed;
}
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;
}