. ***********************************************************************/ /* Write/update customer payment. Warning: $rate is leaved here for extensions compatibility reasons, will be removed in 2.4 since 2.3.17 is not used: use $bank_amount instead. $amount - in customer currency (ex. discount) $discount - in customer currency $bank_amount - in bank currency (before charge) $charge - in bank currency */ function write_customer_payment($trans_no, $customer_id, $branch_id, $bank_account, $date_, $ref, $amount, $discount, $memo_, $rate=0, $charge=0, $bank_amount=0) { global $Refs; begin_transaction(); $args = func_get_args(); while (count($args) < 12) $args[] = 0; $args = (object)array_combine(array('trans_no', 'customer_id', 'branch_id', 'bank_account', 'date_', 'ref', 'amount', 'discount', 'memo_','rate','charge', 'bank_amount'), $args); hook_db_prewrite($args, ST_CUSTPAYMENT); $company_record = get_company_prefs(); if ($trans_no != 0) { delete_comments(ST_CUSTPAYMENT, $trans_no); void_bank_trans(ST_CUSTPAYMENT, $trans_no, true); void_gl_trans(ST_CUSTPAYMENT, $trans_no, true); void_cust_allocations(ST_CUSTPAYMENT, $trans_no, $date_); } $bank = get_bank_account($bank_account); if (!$bank_amount) // backward compatibility workaround { if(!$rate) $rate = get_exchange_rate_from_to(get_customer_currency($customer_id), $bank['bank_curr_code'], $date_ ); $bank_amount = $amount/$rate; } // do not use $rate here: global rate stored in exrate table is always used $payment_no = write_customer_trans(ST_CUSTPAYMENT, $trans_no, $customer_id, $branch_id, $date_, $ref, $amount, $discount); $bank_gl_account = get_bank_gl_account($bank_account); $total = 0; /* Bank account entry first */ $total += add_gl_trans(ST_CUSTPAYMENT, $payment_no, $date_, $bank_gl_account, 0, 0, '', ($bank_amount - $charge), $bank['bank_curr_code'], PT_CUSTOMER, $customer_id); if ($branch_id != ANY_NUMERIC) { $branch_data = get_branch_accounts($branch_id); $debtors_account = $branch_data["receivables_account"]; $discount_account = $branch_data["payment_discount_account"]; } else { $debtors_account = $company_record["debtors_act"]; $discount_account = $company_record["default_prompt_payment_act"]; } if (($discount + $amount) != 0) { /* Now Credit Debtors account with receipts + discounts */ $total += add_gl_trans_customer(ST_CUSTPAYMENT, $payment_no, $date_, $debtors_account, 0, 0, -($discount + $amount), $customer_id, "Cannot insert a GL transaction for the debtors account credit"); } if ($discount != 0) { /* Now Debit discount account with discounts allowed*/ $total += add_gl_trans_customer(ST_CUSTPAYMENT, $payment_no, $date_, $discount_account, 0, 0, $discount, $customer_id, "Cannot insert a GL transaction for the payment discount debit"); } if ($charge != 0) { /* Now Debit bank charge account with charges */ $charge_act = get_company_pref('bank_charge_act'); $total += add_gl_trans(ST_CUSTPAYMENT, $payment_no, $date_, $charge_act, 0, 0, '', $charge, $bank['bank_curr_code'], PT_CUSTOMER, $customer_id); } /*Post a balance post if $total != 0 due to variance in AR and bank posted values*/ if ($total != 0) { $variance_act = get_company_pref('exchange_diff_act'); add_gl_trans(ST_CUSTPAYMENT, $payment_no, $date_, $variance_act, 0, 0, '', -$total, null, PT_CUSTOMER, $customer_id); } /*now enter the bank_trans entry */ add_bank_trans(ST_CUSTPAYMENT, $payment_no, $bank_account, $ref, $date_, $bank_amount - $charge, PT_CUSTOMER, $customer_id); add_comments(ST_CUSTPAYMENT, $payment_no, $date_, $memo_); $Refs->save(ST_CUSTPAYMENT, $payment_no, $ref); $args->trans_no = $payment_no; hook_db_postwrite($args, ST_CUSTPAYMENT); commit_transaction(); return $payment_no; } //------------------------------------------------------------------------------------------------- function void_customer_payment($type, $type_no) { begin_transaction(); hook_db_prevoid($type, $type_no); void_bank_trans($type, $type_no, true); void_gl_trans($type, $type_no, true); void_cust_allocations($type, $type_no); void_customer_trans($type, $type_no); commit_transaction(); } ?>