+ /*
+ Returns true for documents issued in prepayment cycle.
+ */
+ function is_prepaid()
+ {
+ return $this->prepaid;
+ }
+ /*
+ Order is ready for delivery in prepament mode.
+ */
+ function is_released()
+ {
+ return floatcmp($this->sum_paid, $this->prep_amount) >= 0;
+ }
+
+ /*
+ Check whether order has been already invoiced/send or not.
+ */
+ function is_started()
+ {
+ if ($this->trans_no==0)
+ return false;
+ $order_no = array_keys($this->trans_no);
+
+ return is_sales_order_started(reset($order_no));
+ }
+
+ /*
+ Check payment terms and prepayments selected for this invoice,
+ and updates partial/final invoice value respectively.
+ */
+ function update_payments()
+ {
+ $remainder = prepaid_invoice_remainder($this->order_no);
+
+ // recalculate prepaid part from payments
+ if ($this->payment_terms['days_before_due'] == -1)
+ { // this is partial invoice for selected prepayments made.
+ $paid = 0;
+ foreach($this->prepayments as $payment)
+ $paid += $payment['amt'];
+ $this->prep_amount = $this->trans_no ? $paid : min($remainder, $paid);
+ } else // this is final invoice
+ $this->prep_amount = $remainder;
+ }