Sometimes when amount tax details was zero and net amount was set an empty gl transac...
[fa-stable.git] / sales / includes / db / sales_invoice_db.inc
index d4fda212743ccecb616148e1a1b4526f81e1fbde..a072076940326041f532f1cec17225b167b83d04 100644 (file)
@@ -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");
@@ -197,14 +203,14 @@ function write_sales_invoice(&$invoice)
                                $Refs->get_next(ST_CUSTPAYMENT, null, array('customer' => $invoice->customer_id,
                                        'branch' => $invoice->Branch, 'date' => $date_)),
                                $amount-$discount, $discount,
-                               _('Cash invoice').' '.$invoice_no);
+                               $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();