From ee3469d3ffd74d2a6be87d3dd0a9541a14bcdfde Mon Sep 17 00:00:00 2001 From: Maxime Bourget Date: Sun, 9 Jun 2013 16:26:25 +0100 Subject: [PATCH] BulkUpdater work. --- includes/bulk_updater.inc | 35 ++++++++++++++++++++++++++++++++ includes/order_lines.inc | 12 +++++++++++ includes/splitter.inc | 32 +++-------------------------- includes/sql_set.inc | 42 +++++++++++++++++++++++++++++++++++++++ order_lines_view.php | 29 +++++++++++++++++++++++---- 5 files changed, 117 insertions(+), 33 deletions(-) create mode 100644 includes/bulk_updater.inc create mode 100644 includes/sql_set.inc diff --git a/includes/bulk_updater.inc b/includes/bulk_updater.inc new file mode 100644 index 0000000..480cb7e --- /dev/null +++ b/includes/bulk_updater.inc @@ -0,0 +1,35 @@ +$att = $data['bulk'][$att]; + } + } + + public function update() { + foreach($this->detail_ids as $detail_id) { + $set = new SqlSet(); + $set->addDatetime($this->priority_date, $this->priority_time, 'priority') + ->addDate($this->hold_until_date, 'hold_until_date') + ->addDate($this->required_date, 'required_date') + ->add($this->comment, 'comment'); + + db_query("UPDATE ".TB_PREF."sales_order_details + SET {$set->toString()} + WHERE id = $detail_id", "Problem update order details $detail_id"); + } + } +} +?> diff --git a/includes/order_lines.inc b/includes/order_lines.inc index c8564ed..00c1193 100644 --- a/includes/order_lines.inc +++ b/includes/order_lines.inc @@ -105,6 +105,18 @@ function split_order_details() { commit_transaction(); } +function bulk_update_order_details() { + if(!isset($_POST['Bulk']) || $_POST['Bulk'] != 'Bulk') return; + $bulk_updater = new BulkUpdater($_POST); + begin_transaction(); + $cart = post_to_detail_ids(); + if($cart === null) return; + hook_db_prewrite($cart, 'order_xtra'); + $bulk_updater->update(); + hook_db_postwrite($cart, 'order_xtra'); + commit_transaction(); +} + function compute_input_name($row, $field) { $row_id = $row['id']; return "detail[$row_id][$field]"; diff --git a/includes/splitter.inc b/includes/splitter.inc index e2138e8..3f03593 100644 --- a/includes/splitter.inc +++ b/includes/splitter.inc @@ -1,28 +1,6 @@ pairs = $set ? array_merge($set->pairs) : array(); - } - - function add($value, $field, $quote=true) { - if($value !=null) { - array_push($this->pairs, $quote ? "$field = '$value'" : "$field = $value"); - } +require_once('includes/sql_set.inc'); - return $this; - } - - function addDate($date, $field) { - return $this->add(date2sql($date), $field); - } - - function toString() { - return implode(', ', $this->pairs); - } - -} class Split { public $start_date; public $end_date; @@ -41,8 +19,7 @@ class Split { } } -class Splitter { - public $detail_ids = array() ; +class Splitter extends OrderAction { public $start_date; public $end_date; public $start_offset; @@ -51,10 +28,7 @@ class Splitter { public $max_quantity; public function __construct(array $data) { - $this->detail_ids = array(); - foreach($data['detail'] as $detail_id => $detail) { - array_push($this->detail_ids, $detail_id); - } + parent::__construct($data); $this->start_date = $data['start_date']; $this->end_date = $data['end_date']; $this->start_offset = $data['start_offset']; diff --git a/includes/sql_set.inc b/includes/sql_set.inc new file mode 100644 index 0000000..be79d08 --- /dev/null +++ b/includes/sql_set.inc @@ -0,0 +1,42 @@ +pairs = $set ? array_merge($set->pairs) : array(); + } + + function add($value, $field, $quote=true) { + if($value !=null) { + if($value == ' ') $value = ''; + array_push($this->pairs, $quote ? "$field = '$value'" : "$field = $value"); + } + + return $this; + } + + function addDate($date, $field) { + return $this->add(date2sql($date), $field); + } + + function addDatetime($date, $time, $field) { + if(!$date) return $this; + return $this->add(date2sql($date)." $time", $field); + } + + function toString() { + return implode(', ', $this->pairs); + } + +} + +class OrderAction { + public $detail_ids = array() ; + + public function __construct(array $data) { + $this->detail_ids = array(); + foreach($data['detail'] as $detail_id => $detail) { + array_push($this->detail_ids, $detail_id); + } + } +} diff --git a/order_lines_view.php b/order_lines_view.php index 2c28ba4..077e376 100644 --- a/order_lines_view.php +++ b/order_lines_view.php @@ -18,6 +18,7 @@ include_once($path_to_root . "/reporting/includes/reporting.inc"); include_once("includes/order_lines.inc"); include_once("includes/splitter.inc"); +include_once("includes/bulk_updater.inc"); $page_security = 'SA_ORDERLINEX_EDIT'; add_access_extensions(); @@ -28,6 +29,7 @@ $_SESSION['page_title'] = _($help_context = "Edit lines extra parameters"); filter_data($_POST); update_extra_order_details(); split_order_details(); +bulk_update_order_details(); $js = ""; @@ -126,17 +128,36 @@ $table->width = "80%"; display_db_pager($table); function display_split_area() { -start_table(TABLESTYLE_NOBORDER); qty_cells('Before', 'start_offset', -5); -date_cells('Start', 'start_date'); -date_cells('End', 'end_date'); +date_cells('Start', 'start_date', null, null, 0, 0, 1001); +date_cells('End', 'end_date', null, null, 0, 0, 1001); qty_cells('After', 'end_offset', 2); qty_cells('Max', 'max_quantity', 6); submit_cells('Split', 'Split'); -end_table(); } + +function display_bulk_area() { +date_cells('Priority', 'bulk[priority_date]', null, null, 0, 0, 1001); +qty_cells(null, 'bulk[priority_time]', '12:00:00'); +date_cells('Hold', 'bulk[hold_until_date]', null, null, 0, 0, 1001); +date_cells('Required', 'bulk[required_date]', null, null, 0, 0, 1001); +date_cells('Expiry', 'bulk[expiry_date]', null, null, 0, 0, 1001); +text_cells('Comment', 'bulk[comment]'); +submit_cells('Bulk', 'Bulk'); +} + + +if($customer_id !== null) { +start_table(TABLESTYLE); +start_table(TABLESTYLE_NOBORDER); display_split_area(); +end_table(); +start_table(TABLESTYLE_NOBORDER); +display_bulk_area(); +end_table(); +end_table(); +} br(1); -- 2.30.2