X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=sales%2Fincludes%2Fdb%2Fsales_invoice_db.inc;h=b858652e98cefd07c3582ca84c015c40215ab986;hb=159af00183e3732314b508729b06eae88721954c;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..b858652e 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 { @@ -170,7 +176,7 @@ function write_sales_invoice(&$invoice) add_trans_tax_details(ST_SALESINVOICE, $invoice_no, $taxitem['tax_type_id'], $taxitem['rate'], $invoice->tax_included, $prepaid_factor*$taxitem['Value'], $taxitem['Net'], $ex_rate, $date_, $invoice->reference, TR_OUTPUT); - if (isset($taxitem['sales_gl_code'])) + if (isset($taxitem['sales_gl_code']) && !empty($taxitem['sales_gl_code']) && $taxitem['Value'] != 0) $total += add_gl_trans_customer(ST_SALESINVOICE, $invoice_no, $date_, $taxitem['sales_gl_code'], 0, 0, (-$taxitem['Value'])*$prepaid_factor, $invoice->customer_id, "A tax GL posting could not be inserted"); @@ -187,24 +193,25 @@ function write_sales_invoice(&$invoice) if ($invoice->payment_terms['cash_sale'] && $invoice->pos['pos_account']) { $amount = $items_total + $items_added_tax + $invoice->freight_cost + $freight_added_tax; - - // to use debtors.pmt_discount on cash sale: - // extend invoice entry page with final amount after discount - // and change line below. - $discount = 0; // $invoice->cash_discount*$amount; - $pmtno = write_customer_payment(0, $invoice->customer_id, - $invoice->Branch, $invoice->pos['pos_account'], $date_, - $Refs->get_next(ST_CUSTPAYMENT, null, array('customer' => $invoice->customer_id, - 'branch' => $invoice->Branch, 'date' => $date_)), - $amount-$discount, $discount, - _('Cash invoice').' '.$invoice_no); - add_cust_allocation($amount, ST_CUSTPAYMENT, $pmtno, ST_SALESINVOICE, $invoice_no, $invoice->customer_id, $date_); - - update_debtor_trans_allocation(ST_SALESINVOICE, $invoice_no, $invoice->customer_id); - update_debtor_trans_allocation(ST_CUSTPAYMENT, $pmtno, $invoice->customer_id); + if ($amount != 0) { + // to use debtors.pmt_discount on cash sale: + // extend invoice entry page with final amount after discount + // and change line below. + $discount = 0; // $invoice->cash_discount*$amount; + $pmtno = write_customer_payment(0, $invoice->customer_id, + $invoice->Branch, $invoice->pos['pos_account'], $date_, + $Refs->get_next(ST_CUSTPAYMENT, null, array('customer' => $invoice->customer_id, + 'branch' => $invoice->Branch, 'date' => $date_)), + $amount-$discount, $discount, + $invoice->pos['pos_name'].' #'.$invoice_no); + add_cust_allocation($amount, ST_CUSTPAYMENT, $pmtno, ST_SALESINVOICE, $invoice_no, $invoice->customer_id, $date_); + + update_debtor_trans_allocation(ST_SALESINVOICE, $invoice_no, $invoice->customer_id); + 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 +291,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 */