From 4c611accdad255c87aa52739fb3e6540ad1b43a5 Mon Sep 17 00:00:00 2001 From: Maxime Bourget Date: Sun, 9 Jun 2013 09:46:48 +0100 Subject: [PATCH] Hook only modify what's needed. MUCH faster. --- hooks.php | 23 ++++++++++++++++++++--- includes/order_lines.inc | 15 ++++++++++++--- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/hooks.php b/hooks.php index 099d11c..6cb3ff8 100644 --- a/hooks.php +++ b/hooks.php @@ -93,12 +93,14 @@ class hooks_order_line_extra extends hooks { } } else if (isset($trans_type) && $trans_type == "order_xtra") { - update_queue_quantities(); - update_qoh_for_item(); + $stock_ids = stock_id_from_detail($cart); + if($stock_ids) foreach($stock_ids as $stock_id) { + update_queue_quantity_for_item($stock_id); + update_qoh_for_item($stock_id); + } } // update null fields of new entered orders. - // $types = array(ST_SALESORDER, 'order_xtra'); if(in_array($trans_type, $types)) update_order_detail_defaults(); @@ -115,4 +117,19 @@ class hooks_order_line_extra extends hooks { } } } + +function stock_id_from_detail($detail_ids) { + if(empty($detail_ids)) return null; + $stock_ids = array(); + $ids = implode(', ', $detail_ids); + $sql = " SELECT DISTINCT stk_code + FROM ".TB_PREF."sales_order_details + WHERE id IN ($ids)"; + $result = db_query($sql); + while($row=db_fetch($result)) { + array_push($stock_ids, $row['stk_code']); + } + + return $stock_ids; +} ?> diff --git a/includes/order_lines.inc b/includes/order_lines.inc index 02787d6..87a83f0 100644 --- a/includes/order_lines.inc +++ b/includes/order_lines.inc @@ -28,11 +28,20 @@ print_r('cacou'); } } +function post_to_detail_ids() { + $detail_ids = array(); + foreach($_POST['detail'] as $detail_id => $values) { + array_push($detail_ids, $detail_id); + } + + return $detail_ids; +} + function update_extra_order_details() { if(!isset($_POST['Update']) || $_POST['Update'] != 'Update') return; + $cart = post_to_detail_ids(); begin_transaction(); - $cart = null; hook_db_prewrite($cart, 'order_xtra'); // update in database all field $date_fields = array('hold_until_date', 'required_date', 'expiry_date', 'priority'); @@ -61,10 +70,10 @@ begin_transaction(); return; } } + } hook_db_postwrite($cart, 'order_xtra'); commit_transaction(); - } display_notification('Order details updated'); @@ -74,7 +83,7 @@ function split_order_details() { if(!isset($_POST['Split']) || $_POST['Split'] != 'Split') return; $splitter = new Splitter($_POST); begin_transaction(); - $cart = null; + $cart = post_to_detail_ids(); hook_db_prewrite($cart, 'order_xtra'); if($splitter->splitAll()) display_warning("Items have been split."); hook_db_postwrite($cart, 'order_xtra'); -- 2.30.2