X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=sales%2Fincludes%2Fdb%2Fsales_invoice_db.inc;h=90be614ef1425b867c21fac7cfb57bf49243145e;hb=5cd2769b439929e59a8a56da1f42ba5bdb582d09;hp=54e4374a8fb3b9a755c5ba0bbb2357f572a68750;hpb=fd069bba86276f15311ff6ab10b22d4a06a55513;p=fa-stable.git diff --git a/sales/includes/db/sales_invoice_db.inc b/sales/includes/db/sales_invoice_db.inc index 54e4374a..90be614e 100644 --- a/sales/includes/db/sales_invoice_db.inc +++ b/sales/includes/db/sales_invoice_db.inc @@ -40,6 +40,12 @@ function write_sales_invoice(&$invoice) if (!$invoice->is_prepaid()) update_customer_trans_version(get_parent_type(ST_SALESINVOICE), $invoice->src_docs); + elseif (count($invoice->prepayments)) { // partial invoice + $last_payment = end($invoice->prepayments); + $gl_date = sql2date($last_payment['tran_date']); + } else { // final invoice + $gl_date = $invoice->document_date; + } $ov_gst = 0; $taxes = $invoice->get_taxes(); // all taxes with freight_tax @@ -63,12 +69,12 @@ function write_sales_invoice(&$invoice) $sales_order = $sales_order[0]; // assume all crucial SO data are same for every delivery if ($trans_no) { - $allocs = get_payments_for($trans_no, ST_SALESINVOICE); + $allocs = get_payments_for($trans_no, ST_SALESINVOICE, $invoice->customer_id); delete_comments(ST_SALESINVOICE, $trans_no); void_gl_trans(ST_SALESINVOICE, $trans_no, true); void_trans_tax_details(ST_SALESINVOICE, $trans_no); } else - $allocs = get_payments_for($invoice->order_no, ST_SALESORDER); + $allocs = get_payments_for($invoice->order_no, ST_SALESORDER, $invoice->customer_id); if ($invoice->is_prepaid()) // selected prepayment is already in cart { @@ -204,7 +210,7 @@ function write_sales_invoice(&$invoice) update_debtor_trans_allocation(ST_CUSTPAYMENT, $pmtno, $invoice->customer_id); } } - reallocate_payments($invoice_no, ST_SALESINVOICE, $date_, $to_allocate, $allocs); + reallocate_payments($invoice_no, ST_SALESINVOICE, $date_, $to_allocate, $allocs, $invoice->customer_id); hook_db_postwrite($invoice, ST_SALESINVOICE); commit_transaction(); @@ -284,22 +290,28 @@ function get_cust_prepayment_invoice_factor($trans_no) return $row[0]; } +/* + Return yet not invoiced amount of prepayment invoice (or 0 if normal invoice) +*/ function prepaid_invoice_remainder($order) { $sql = "SELECT so.total - IFNULL(SUM(inv.prep_amount),0) FROM " .TB_PREF."sales_orders so, - ".TB_PREF."debtor_trans inv - LEFT JOIN ".TB_PREF."payment_terms pt ON inv.payment_terms=pt.terms_indicator + ".TB_PREF."debtor_trans inv, + ".TB_PREF."payment_terms pt WHERE so.order_no=".db_escape($order) ." AND so.trans_type=".ST_SALESORDER ." AND inv.type=".ST_SALESINVOICE ." AND inv.order_=so.order_no" - ." AND pt.days_before_due<0"; + ." AND so.payment_terms=pt.terms_indicator" + ." AND inv.payment_terms=pt.terms_indicator" + ." AND pt.days_before_due = -1"; $result = db_fetch(db_query($sql, "cannot find final invoice value")); - return $result[0]; + return $result[0] ? $result[0] : 0; } + /* Find oldest delivery date for sales invoice */