<?php
require_once($path_to_root.'/'.'includes/date_functions.inc');
+class SqlSet {
+ protected $pairs;
+ function __construct($set=null) {
+ $this->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;
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'];
}
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() {
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;
+
+
+ }
+
}
?>
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();
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();