From: Maxime Bourget Date: Sat, 8 Jun 2013 15:00:56 +0000 (+0100) Subject: Basic split, seems to work (and save). X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=commitdiff_plain;h=25a5b3f1d11f626d4d20033f0c942d71beb3abf5;p=order_line_extra.git Basic split, seems to work (and save). --- diff --git a/includes/order_lines.inc b/includes/order_lines.inc index 8c0373b..9366ecb 100644 --- a/includes/order_lines.inc +++ b/includes/order_lines.inc @@ -71,7 +71,7 @@ function split_order_details() { if(!isset($_POST['Split']) || $_POST['Split'] != 'Split') return; $splitter = new Splitter($_POST); begin_transaction(); - $splitter->splitAll(); + if($splitter->splitAll()) display_warning("Items have been split."); commit_transaction(); } diff --git a/includes/splitter.inc b/includes/splitter.inc index 7804483..1350f9f 100644 --- a/includes/splitter.inc +++ b/includes/splitter.inc @@ -1,5 +1,28 @@ 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"); + } + + 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; @@ -26,9 +49,9 @@ class Splitter { public $max_quantity; public function __construct(array $data) { - $this->details_id = array(); + $this->detail_ids = array(); foreach($data['detail'] as $detail_id => $detail) { - array_push($this->details_id, $detail_id); + array_push($this->detail_ids, $detail_id); } $this->start_date = $data['start_date']; $this->end_date = $data['end_date']; @@ -46,11 +69,15 @@ class Splitter { } public function splitAll() { + $ok = true; foreach($this->detail_ids as $detail_id) { +display_warning("processing $detail_id"); $detail = $this->loadDetail($detail_id); $splits = $this->split($detail); - $this->saveSplits($detail, $splits); + $ok &= $this->saveSplits($detail, $splits); } + + return $ok; } public function days() { @@ -104,5 +131,55 @@ class Splitter { return $splits; } + public function saveSplits($detail, $splits) { + if(empty($splits)) return true; + + $detail_id = $detail['id']; + $priority = $detail['priority']; + $order_no = $detail['order_no']; + $trans_type = $detail['trans_type']; + + /* We need to update the first one (as it exists already in the database) + * but insert the following one. + */ + $first = array_shift($splits); + $set = new SqlSet(); + $set->addDate($first->start_date, 'hold_until_date') + ->addDate($first->end_date, 'expiry_date') + ->add($first->quantity, 'quantity', false) + ->add($priority, 'priority'); + display_warning($set->toString()); + db_query("UPDATE ".TB_PREF."sales_order_details + SET {$set->toString()} + WHERE id = $detail_id", "Problem splitting order details $detail_id"); + + // Compute common field for each split + $common_set = new SqlSet(); + $common_set->add($order_no, 'order_no', false) + ->add($priority, 'priority') + ->add($trans_type, 'trans_type') + ->add($detail['required_date'], 'required_date') + ->add($detail['comment'], 'comment') + ->add($detail['stk_code'], 'stk_code') + ->add($detail['description'], 'description') + ->add($detail['unit_price'], 'unit_price', false) + ->add($detail['discount_percent'], 'discount_percent', false); + + foreach($splits as $split) { + $set = new SqlSet($common_set); + $set->addDate($split->start_date, 'hold_until_date') + ->addDate($split->end_date, 'expiry_date') + ->add($split->quantity, 'quantity', false); + display_warning($set->toString()); + db_query("INSERT INTO ".TB_PREF."sales_order_details + SET {$set->toString()}" + ,"Problem spliting order details $detail_id"); + } + + return true; + + + } + } ?> diff --git a/order_lines_view.php b/order_lines_view.php index 362b3f0..926a8a9 100644 --- a/order_lines_view.php +++ b/order_lines_view.php @@ -17,6 +17,7 @@ include_once($path_to_root . "/sales/includes/sales_ui.inc"); include_once($path_to_root . "/reporting/includes/reporting.inc"); include_once("includes/order_lines.inc"); +include_once("includes/splitter.inc"); $page_security = 'SA_ORDERLINEX_EDIT'; add_access_extensions(); @@ -111,9 +112,9 @@ display_db_pager($table); function display_split_area() { start_table(TABLESTYLE_NOBORDER); -date_cells('Start', 'name', 'title'); -date_cells('End', 'name', 'title'); -qty_cells('Max', 'huu', 6); +date_cells('Start', 'start_date'); +date_cells('End', 'end_date'); +qty_cells('Max', 'max_quantity', 6); submit_cells('Split', 'Split'); end_table();