- if ($trans_no[0]) {
- if ($type == 30) { // sales order
- read_sales_order($trans_no[0], $this);
- if ($view) { // prepare for DN/IV entry
- for($line_no = 0; $line_no < count($this->line_items); $line_no++) {
- $line = &$this->line_items[$line_no];
- $line->src_id = $line->id; // save src line ids for update
- $line->qty_dispatched = $line->quantity - $line->qty_done;
- }
- }
- } else { // derivative transaction
- read_sales_trans($type, $trans_no, $this);
- if ($this->order_no) { // free hand credit notes have no order_no
- $sodata = get_sales_order_header($this->order_no);
- $this->cust_ref = $sodata["customer_ref"];
- // currently currency is hard linked to debtor account
- // $this->customer_currency = $sodata["curr_code"];
- $this->delivery_to = $sodata["deliver_to"];
- $this->delivery_address = $sodata["delivery_address"];
- }
- if (!$view && ($type!=11 || $this->trans_link!=0)) {
- $src_type = get_parent_type($type);
- $src_details = 0;
- if ($src_type == 30) { // get src data from sales_orders
- $this->src_docs = array( $sodata['order_no']=>$sodata['version']);
- $srcdetails = get_sales_order_details($this->order_no);
- } else { // get src_data from debtor_trans
- $this->src_docs = get_customer_trans_version($src_type, get_parent_trans($type,$trans_no[0]));
- $srcdetails = get_customer_trans_details($src_type,array_keys($this->src_docs));
- }
- // calculate & save: qtys on other docs and free qtys on src doc
- $line_no = 0;
- for($line_no = 0; $srcline = db_fetch($srcdetails); $line_no++) {
- $sign = 1; // $type==13 ? 1 : -1; // this is strange debtor_trans atavism
- $line = &$this->line_items[$line_no];
-
- $line->src_id = $srcline['id']; // save src line ids for update
- $line->qty_old = $line->qty_dispatched = $line->quantity;
- $line->quantity += $sign * ($srcline['quantity'] - $srcline['qty_done']); // add free qty on src doc
- }
- } else {
- for($line_no = 0; $line_no < count($this->line_items); $line_no++) {
- $line = &$this->line_items[$line_no];
- $line->src_id = $line->id; // save src line ids for update
- $line->qty_dispatched = $line->quantity;
- }
- }
- }
- } else {
- $this->trans_type = $type;
- $this->trans_no = 0;
- // set new sales document defaults here
- if (get_global_customer() != reserved_words::get_all())
- $this->customer_id = get_global_customer();
- else
- $this->customer_id = '';
- $this->document_date = Today();
- if (!is_date_in_fiscalyear($this->document_date))
- $this->document_date = end_fiscalyear();
- $this->reference = references::get_next($this->trans_type);
- if ($type == 10) {
- $this->due_date =
- get_invoice_duedate($this->customer_id, $this->document_date);
- $this->pos = user_pos();
- $pos = get_sales_point($this->pos);
- $this->cash = !$pos['credit_sale'];
- if (!$pos['cash_sale'] || !$pos['credit_sale'])
- $this->pos = -1; // mark not editable payment type
- else
- $this->cash = date_diff($this->due_date, Today(), 'd')<2;
- if ($this->cash) {
- $this->Location = $pos['pos_location'];
- $this->location_name = $pos['location_name'];
- $this->cash_account = $pos['account_code'];
- $this->account_name = $pos['bank_account_name'];
+
+ if ($trans_no[0]) { // read old transaction
+ if ($type == ST_SALESORDER || $type == ST_SALESQUOTE) { // sales order || sales quotation
+ read_sales_order($trans_no[0], $this, $type);
+ } else { // other type of sales transaction
+ read_sales_trans($type, $trans_no, $this);
+ $this->prepayments = get_payments_for($trans_no[0], $type, $this->customer_id);
+ $this->update_payments();
+ if ($this->order_no) { // free hand credit notes have no order_no
+ $sodata = get_sales_order_header($this->order_no, ST_SALESORDER);
+ $this->cust_ref = $sodata["customer_ref"];
+ // currently currency is hard linked to debtor account
+ $this->delivery_to = $sodata["deliver_to"];
+ $this->delivery_address = $sodata["delivery_address"];
+ // child transaction reedition - update with parent info unless it is freehand
+ if (!$this->is_prepaid() && !$prepare_child) // this is read for view/reedition
+ $this->set_parent_constraints($sodata, $trans_no[0]);