and from a string * generated by the above *_cell function. * This is usefull to use the result of the function within a pager * which already include the ... * However, for function which doesn't return a string * but echo, we need to capture the output of the echo first. */ function start_extract_cell() { // We need ob_start(); } function end_extract_cell() { $content = ob_get_contents(); ob_end_clean(); return extract_cell($content); } function extract_cell($td) { if(preg_match('/\s*(.*)<\/td>\s*/s', $td, $matches)) { return $matches[1]; } else { print_r('cacou'); return $td; } } function update_extra_order_details() { if(!isset($_POST['Update']) || $_POST['Update'] != 'Update') return; begin_transaction(); // update in database all field $date_fields = array('hold_until_date', 'required_date', 'expiry_date', 'priority'); foreach($_POST['detail'] as $detail_id => $values) { $set = array(); if($comment = $values['comment']) array_push($set, " comment='$comment' "); foreach($date_fields as $date_field) { if(isset($values[$date_field])) { $input_date = trim($values[$date_field]); if($input_date == "") { // Only the priority field can be set to null. if($date_field == 'priority') array_push($set," $date_field = NULL"); } else { $date = date2sql($input_date); array_push($set," $date_field='$date' "); } } } if(!empty($set)) { $sql = "UPDATE ".TB_PREF."sales_order_details SET ".implode($set,', ')." WHERE id = $detail_id "; if(!db_query($sql)) { display_error('Problem while updating order details. Try again'); cancel_transaction(); return; } } commit_transaction(); } display_notification('Order details updated'); } function split_order_details() { if(!isset($_POST['Split']) || $_POST['Split'] != 'Split') return; $splitter = new Splitter($_POST); begin_transaction(); $cart = null; hook_db_prewrite($cart, 'order_xtra'); if($splitter->splitAll()) display_warning("Items have been split."); hook_db_postwrite($cart, 'order_xtra'); commit_transaction(); } function compute_input_name($row, $field) { $row_id = $row['id']; return "detail[$row_id][$field]"; } function view_link($dummy, $order_no) { return get_customer_trans_view_str(ST_SALESORDER, $order_no); } function item_link($dummy, $stock_id) { return pager_link( _($stock_id), "/modules/order_line_extra/item_schedule.php?stock_id=" .$stock_id); } function order_link($row) { return pager_link( _("Sales Order"), "/sales/sales_order_entry.php?NewQuoteToSalesOrder=" .$row['order_no'], ICON_DOC); } function customer_link($row) { return customer_link2($row['debtor_ref'], $row['debtor_no']); } function customer_link2($name, $id) { return pager_link(_($name), "/modules/order_line_extra/order_lines_view.php?customer_id=${id}"); } function aggregate_comment($row) { $comment = $row['order_comment'].";".$row['detail_comment']; if($comment) { $comments = array_map('trim', explode(';', $comment)); $comments = array_filter($comments); $first = array_shift($comments); if(count($comments) == 0) return $first; else { $tooltip = implode('
- ', $comments); return "$first more $tooltip"; } } return ''; } function available_quantity($row, $available) { $quantity = $row['quantity']; $class = ''; if($available== 0) $class = 'limited'; else if($quantity > $available) $class = 'partial'; return "$available"; } function input_date_details($row, $field_name, $date) { $row_id = $row['id']; $name = compute_input_name($row, $field_name); $_POST[$name] = sql2date($date); start_extract_cell(); date_cells (null, $name, 'title', null, 0,0,1001); return end_extract_cell(); return " "; } function input_priority_date_details($row, $date) { return input_date_details($row, 'priority', $date); } function input_hold_until_date_details($row, $date) { return input_date_details($row, 'hold_until_date', $date); } function input_required_date_details($row, $date) { return input_date_details($row, 'required_date', $date); } function input_expiry_date_details($row, $date) { return input_date_details($row, 'expiry_date', $date); } function input_comment_details($row, $comment) { $row_id = $row['id']; return " "; } function get_order_details_extra($customer_id, $location) { $sql = "SELECT sod.id , so.order_no , stk_code , sod.quantity - qty_sent quantity , GREATEST(0, LEAST(qoh.quantity - quantity_before, sod.quantity - qty_sent)) , quantity_before , sod.`priority` , hold_until_date , required_date , expiry_date ,comment FROM ".TB_PREF."sales_order_details sod JOIN ".TB_PREF."sales_orders so ON (so.order_no = sod.order_no AND so.trans_type = sod.trans_type AND so.trans_type = ".ST_SALESORDER." AND so.debtor_no = $customer_id ) JOIN ".TB_PREF."denorm_qoh qoh ON (stock_id = stk_code AND loc_code = '$location') LEFT JOIN ".TB_PREF."denorm_order_details_queue d ON (d.id = sod.id) WHERE sod.quantity > qty_sent "; return $sql; } function get_order_summary($location) { /* $sub = "SELECT debtor_no, debtor_ref, branch_ref, stk_code , min(delivery_date) , sum(sod.quantity - qty_sent) as quantity , sum((sod.quantity - qty_sent)*unit_price*(1-discount_percent/100)) as amount , min(required_date) , group_concat(distinct comments separator ';') as order_comment , group_concat(distinct comment separator ';') as detail_comment , max(quantity_before) as quantity_before FROM ".TB_PREF."sales_order_details sod JOIN ".TB_PREF."sales_orders so ON (so.order_no = sod.order_no AND so.trans_type = sod.trans_type AND so.trans_type = ".ST_SALESORDER." ) NATURAL JOIN ".TB_PREF."debtors_master NATURAL JOIN ".TB_PREF."cust_branch JOIN ".TB_PREF."denorm_order_details_queue d ON (d.id = sod.id) WHERE sod.quantity > qty_sent AND ".ST_SALESORDER." GROUP BY debtor_no, branch_code, stk_code "; */ $sub = TB_PREF."order_summary_view"; $sql = "SELECT debtor_no, debtor_ref, branch_ref , `min(delivery_date)` , sum(sub.quantity) as quantity , sum(sub.amount) as amount , sum(greatest(least(sub.quantity, qoh.quantity - quantity_before), 0)) , sum(sub.amount*greatest(least(sub.quantity, qoh.quantity - quantity_before), 0)/sub.quantity) , min(`min(required_date)`) , group_concat(distinct order_comment separator ';') as order_comment , group_concat(distinct detail_comment separator ';') as detail_comment FROM $sub sub LEFT JOIN ".TB_PREF."denorm_qoh qoh ON (stock_id = stk_code AND loc_code = '$location') GROUP BY debtor_no, debtor_ref "; return $sql; } ?>