mirror of
https://github.com/itflow-org/itflow
synced 2026-08-16 20:45:12 +00:00
Cleanup Expense Code in post blocks and remove single use function since stripe payments get reconciled during nightly cron
This commit is contained in:
@@ -375,8 +375,6 @@ if (isset($_POST['add_payment_stripe'])) {
|
|||||||
$public_key = escapeSql($row['payment_provider_public_key']);
|
$public_key = escapeSql($row['payment_provider_public_key']);
|
||||||
$private_key = escapeSql($row['payment_provider_private_key']);
|
$private_key = escapeSql($row['payment_provider_private_key']);
|
||||||
$account_id = intval($row['payment_provider_account']);
|
$account_id = intval($row['payment_provider_account']);
|
||||||
$expense_category_id = intval($row['payment_provider_expense_category']);
|
|
||||||
$expense_vendor_id = intval($row['payment_provider_expense_vendor']);
|
|
||||||
$payment_provider_client = escapeSql($row['payment_provider_client']);
|
$payment_provider_client = escapeSql($row['payment_provider_client']);
|
||||||
$saved_payment_method = escapeSql($row['saved_payment_provider_method']);
|
$saved_payment_method = escapeSql($row['saved_payment_provider_method']);
|
||||||
$saved_payment_description = escapeSql($row['saved_payment_description']);
|
$saved_payment_description = escapeSql($row['saved_payment_description']);
|
||||||
@@ -410,7 +408,6 @@ if (isset($_POST['add_payment_stripe'])) {
|
|||||||
'off_session' => true,
|
'off_session' => true,
|
||||||
'confirm' => true,
|
'confirm' => true,
|
||||||
'description' => $pi_description,
|
'description' => $pi_description,
|
||||||
'expand' => ['latest_charge.balance_transaction'],
|
|
||||||
'metadata' => [
|
'metadata' => [
|
||||||
'itflow_client_id' => $client_id,
|
'itflow_client_id' => $client_id,
|
||||||
'itflow_client_name' => $client_name,
|
'itflow_client_name' => $client_name,
|
||||||
@@ -487,18 +484,6 @@ if (isset($_POST['add_payment_stripe'])) {
|
|||||||
$extended_log_desc = '(DEV MODE)';
|
$extended_log_desc = '(DEV MODE)';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create actual Stripe gateway fee as an expense (if configured)
|
|
||||||
if ($expense_vendor_id > 0 && $expense_category_id > 0) {
|
|
||||||
$stripe_fee = getStripeGatewayFee($payment_intent);
|
|
||||||
if ($stripe_fee) {
|
|
||||||
$gateway_fee = floatval($stripe_fee['fee']);
|
|
||||||
$gateway_fee_currency = escapeSql($stripe_fee['currency']);
|
|
||||||
mysqli_query($mysqli,"INSERT INTO expenses SET expense_date = '$pi_date', expense_amount = $gateway_fee, expense_currency_code = '$gateway_fee_currency', expense_account_id = $account_id, expense_vendor_id = $expense_vendor_id, expense_client_id = $client_id, expense_category_id = $expense_category_id, expense_description = 'Stripe fee for Invoice $invoice_prefix$invoice_number payment of $balance_to_pay', expense_reference = 'Stripe - $pi_id $extended_log_desc'");
|
|
||||||
} else {
|
|
||||||
logApp("Stripe", "warning", "Balance transaction unavailable for $pi_id - fee expense not recorded for invoice ID $invoice_id");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Notify/log
|
// Notify/log
|
||||||
appNotify("Invoice Paid", "Invoice $invoice_prefix$invoice_number automatically paid", "/agent/invoice.php?invoice_id=$invoice_id", $client_id);
|
appNotify("Invoice Paid", "Invoice $invoice_prefix$invoice_number automatically paid", "/agent/invoice.php?invoice_id=$invoice_id", $client_id);
|
||||||
logAudit("Invoice", "Payment", "$session_name initiated Stripe payment amount of " . numfmt_format_currency($currency_format, $invoice_amount, $invoice_currency_code) . " added to invoice $invoice_prefix$invoice_number - $pi_id $extended_log_desc", $client_id, $invoice_id);
|
logAudit("Invoice", "Payment", "$session_name initiated Stripe payment amount of " . numfmt_format_currency($currency_format, $invoice_amount, $invoice_currency_code) . " added to invoice $invoice_prefix$invoice_number - $pi_id $extended_log_desc", $client_id, $invoice_id);
|
||||||
|
|||||||
@@ -548,8 +548,6 @@ if (isset($_GET['add_payment_by_provider'])) {
|
|||||||
$public_key = escapeSql($row['payment_provider_public_key']);
|
$public_key = escapeSql($row['payment_provider_public_key']);
|
||||||
$private_key = escapeSql($row['payment_provider_private_key']);
|
$private_key = escapeSql($row['payment_provider_private_key']);
|
||||||
$account_id = intval($row['payment_provider_account']);
|
$account_id = intval($row['payment_provider_account']);
|
||||||
$expense_category_id = intval($row['payment_provider_expense_category']);
|
|
||||||
$expense_vendor_id = intval($row['payment_provider_expense_vendor']);
|
|
||||||
$payment_provider_client = escapeSql($row['payment_provider_client']);
|
$payment_provider_client = escapeSql($row['payment_provider_client']);
|
||||||
$saved_payment_method = escapeSql($row['saved_payment_provider_method']);
|
$saved_payment_method = escapeSql($row['saved_payment_provider_method']);
|
||||||
$saved_payment_description = escapeSql($row['saved_payment_description']);
|
$saved_payment_description = escapeSql($row['saved_payment_description']);
|
||||||
@@ -591,7 +589,6 @@ if (isset($_GET['add_payment_by_provider'])) {
|
|||||||
'off_session' => true,
|
'off_session' => true,
|
||||||
'confirm' => true,
|
'confirm' => true,
|
||||||
'description' => $pi_description,
|
'description' => $pi_description,
|
||||||
'expand' => ['latest_charge.balance_transaction'],
|
|
||||||
'metadata' => [
|
'metadata' => [
|
||||||
'itflow_client_id' => $client_id,
|
'itflow_client_id' => $client_id,
|
||||||
'itflow_client_name' => $client_name,
|
'itflow_client_name' => $client_name,
|
||||||
@@ -668,18 +665,6 @@ if (isset($_GET['add_payment_by_provider'])) {
|
|||||||
$extended_log_desc = '(DEV MODE)';
|
$extended_log_desc = '(DEV MODE)';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create actual Stripe gateway fee as an expense (if configured)
|
|
||||||
if ($expense_vendor_id > 0 && $expense_category_id > 0) {
|
|
||||||
$stripe_fee = getStripeGatewayFee($payment_intent);
|
|
||||||
if ($stripe_fee) {
|
|
||||||
$gateway_fee = floatval($stripe_fee['fee']);
|
|
||||||
$gateway_fee_currency = escapeSql($stripe_fee['currency']);
|
|
||||||
mysqli_query($mysqli,"INSERT INTO expenses SET expense_date = '$pi_date', expense_amount = $gateway_fee, expense_currency_code = '$gateway_fee_currency', expense_account_id = $account_id, expense_vendor_id = $expense_vendor_id, expense_client_id = $client_id, expense_category_id = $expense_category_id, expense_description = 'Stripe fee for Invoice $invoice_prefix$invoice_number payment of $balance_to_pay', expense_reference = 'Stripe - $pi_id $extended_log_desc'");
|
|
||||||
} else {
|
|
||||||
logApp("Stripe", "warning", "Balance transaction unavailable for $pi_id - fee expense not recorded for invoice ID $invoice_id");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Notify/log
|
// Notify/log
|
||||||
appNotify("Invoice Paid", "Invoice $invoice_prefix$invoice_number automatically paid", "/agent/invoice.php?invoice_id=$invoice_id", $client_id);
|
appNotify("Invoice Paid", "Invoice $invoice_prefix$invoice_number automatically paid", "/agent/invoice.php?invoice_id=$invoice_id", $client_id);
|
||||||
logAudit("Invoice", "Payment", "$session_name initiated Stripe payment amount of " . numfmt_format_currency($currency_format, $invoice_amount, $invoice_currency_code) . " added to invoice $invoice_prefix$invoice_number - $pi_id $extended_log_desc", $client_id, $invoice_id);
|
logAudit("Invoice", "Payment", "$session_name initiated Stripe payment amount of " . numfmt_format_currency($currency_format, $invoice_amount, $invoice_currency_code) . " added to invoice $invoice_prefix$invoice_number - $pi_id $extended_log_desc", $client_id, $invoice_id);
|
||||||
|
|||||||
@@ -818,8 +818,6 @@ while ($row = mysqli_fetch_assoc($sql_recurring_payments)) {
|
|||||||
$provider_name = escapeSql($saved_payment['payment_provider_name']);
|
$provider_name = escapeSql($saved_payment['payment_provider_name']);
|
||||||
$provider_private_key = $saved_payment['payment_provider_private_key'];
|
$provider_private_key = $saved_payment['payment_provider_private_key'];
|
||||||
$account_id = intval($saved_payment['payment_provider_account']);
|
$account_id = intval($saved_payment['payment_provider_account']);
|
||||||
$expense_category_id = intval($saved_payment['payment_provider_expense_category']);
|
|
||||||
$expense_vendor_id = intval($saved_payment['payment_provider_expense_vendor']);
|
|
||||||
$saved_payment_description = escapeSql($saved_payment['saved_payment_description']);
|
$saved_payment_description = escapeSql($saved_payment['saved_payment_description']);
|
||||||
$stripe_payment_method_id = $saved_payment['saved_payment_provider_method'];
|
$stripe_payment_method_id = $saved_payment['saved_payment_provider_method'];
|
||||||
|
|
||||||
@@ -851,7 +849,6 @@ while ($row = mysqli_fetch_assoc($sql_recurring_payments)) {
|
|||||||
'off_session' => true,
|
'off_session' => true,
|
||||||
'confirm' => true,
|
'confirm' => true,
|
||||||
'description' => $pi_description,
|
'description' => $pi_description,
|
||||||
'expand' => ['latest_charge.balance_transaction'],
|
|
||||||
'metadata' => [
|
'metadata' => [
|
||||||
'itflow_client_id' => $client_id,
|
'itflow_client_id' => $client_id,
|
||||||
'itflow_client_name' => $client_name,
|
'itflow_client_name' => $client_name,
|
||||||
@@ -884,18 +881,6 @@ while ($row = mysqli_fetch_assoc($sql_recurring_payments)) {
|
|||||||
mysqli_query($mysqli, "INSERT INTO payments SET payment_date = '$pi_date', payment_amount = $pi_amount_paid, payment_currency_code = '$pi_currency', payment_account_id = $account_id, payment_method = 'Stripe', payment_reference = 'Stripe - $pi_id', payment_invoice_id = $invoice_id");
|
mysqli_query($mysqli, "INSERT INTO payments SET payment_date = '$pi_date', payment_amount = $pi_amount_paid, payment_currency_code = '$pi_currency', payment_account_id = $account_id, payment_method = 'Stripe', payment_reference = 'Stripe - $pi_id', payment_invoice_id = $invoice_id");
|
||||||
mysqli_query($mysqli, "INSERT INTO history SET history_status = 'Paid', history_description = 'Online Payment added (autopay)', history_invoice_id = $invoice_id");
|
mysqli_query($mysqli, "INSERT INTO history SET history_status = 'Paid', history_description = 'Online Payment added (autopay)', history_invoice_id = $invoice_id");
|
||||||
|
|
||||||
// EXPENSE: Actual Stripe gateway fee as an expense (if configured)
|
|
||||||
if ($expense_vendor_id > 0 && $expense_category_id > 0) {
|
|
||||||
$stripe_fee = getStripeGatewayFee($payment_intent);
|
|
||||||
if ($stripe_fee) {
|
|
||||||
$gateway_fee = floatval($stripe_fee['fee']);
|
|
||||||
$gateway_fee_currency = escapeSql($stripe_fee['currency']);
|
|
||||||
mysqli_query($mysqli,"INSERT INTO expenses SET expense_date = '$pi_date', expense_amount = $gateway_fee, expense_currency_code = '$gateway_fee_currency', expense_account_id = $account_id, expense_vendor_id = $expense_vendor_id, expense_client_id = $client_id, expense_category_id = $expense_category_id, expense_description = 'Stripe fee for Invoice $invoice_prefix$invoice_number payment of $balance_to_pay', expense_reference = 'Stripe - $pi_id'");
|
|
||||||
} else {
|
|
||||||
logApp("Stripe", "warning", "Balance transaction unavailable for $pi_id - fee expense not recorded for invoice ID $invoice_id");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// RECEIPT EMAIL
|
// RECEIPT EMAIL
|
||||||
if (!empty($config_smtp_provider)) {
|
if (!empty($config_smtp_provider)) {
|
||||||
$subject = "Payment Received - Invoice $invoice_prefix$invoice_number";
|
$subject = "Payment Received - Invoice $invoice_prefix$invoice_number";
|
||||||
@@ -1006,10 +991,11 @@ if ($stripe_provider) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$stripe_fee = getStripeGatewayFee($payment_intent);
|
// Actual fee from the balance transaction (null until Stripe attaches it - retried next run)
|
||||||
if ($stripe_fee) {
|
$balance_transaction = $payment_intent->latest_charge->balance_transaction ?? null;
|
||||||
$gateway_fee = floatval($stripe_fee['fee']);
|
if ($balance_transaction && !is_string($balance_transaction)) {
|
||||||
$gateway_fee_currency = escapeSql($stripe_fee['currency']);
|
$gateway_fee = round($balance_transaction->fee / 100, 2);
|
||||||
|
$gateway_fee_currency = escapeSql(strtoupper($balance_transaction->currency));
|
||||||
mysqli_query($mysqli, "INSERT INTO expenses SET expense_date = '$payment_date', expense_amount = $gateway_fee, expense_currency_code = '$gateway_fee_currency', expense_account_id = $expense_account_id, expense_vendor_id = $expense_vendor_id, expense_client_id = $client_id, expense_category_id = $expense_category_id, expense_description = 'Stripe fee for Invoice $invoice_prefix$invoice_number payment of $payment_amount', expense_reference = '$payment_reference'");
|
mysqli_query($mysqli, "INSERT INTO expenses SET expense_date = '$payment_date', expense_amount = $gateway_fee, expense_currency_code = '$gateway_fee_currency', expense_account_id = $expense_account_id, expense_vendor_id = $expense_vendor_id, expense_client_id = $client_id, expense_category_id = $expense_category_id, expense_description = 'Stripe fee for Invoice $invoice_prefix$invoice_number payment of $payment_amount', expense_reference = '$payment_reference'");
|
||||||
logApp("Stripe", "info", "Fee reconciliation - recorded Stripe fee of $gateway_fee for $pi_id");
|
logApp("Stripe", "info", "Fee reconciliation - recorded Stripe fee of $gateway_fee for $pi_id");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,4 +16,3 @@ require_once __DIR__ . '/functions/auth.php';
|
|||||||
require_once __DIR__ . '/functions/logging.php';
|
require_once __DIR__ . '/functions/logging.php';
|
||||||
require_once __DIR__ . '/functions/app.php';
|
require_once __DIR__ . '/functions/app.php';
|
||||||
require_once __DIR__ . '/functions/db.php';
|
require_once __DIR__ . '/functions/db.php';
|
||||||
require_once __DIR__ . '/functions/payments.php';
|
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Extract the actual Stripe processing fee from a PaymentIntent.
|
|
||||||
* PI must have been created/retrieved with
|
|
||||||
* 'expand' => ['latest_charge.balance_transaction'].
|
|
||||||
* Returns ['fee' => float, 'currency' => 'USD'] or false if unavailable.
|
|
||||||
*/
|
|
||||||
function getStripeGatewayFee($payment_intent)
|
|
||||||
{
|
|
||||||
$bt = $payment_intent->latest_charge->balance_transaction ?? null;
|
|
||||||
|
|
||||||
// Not expanded or not yet created (async payment methods)
|
|
||||||
if (!$bt || is_string($bt)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return [
|
|
||||||
'fee' => round($bt->fee / 100, 2),
|
|
||||||
'currency' => strtoupper($bt->currency),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -11,8 +11,6 @@ $stripe_provider = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT * FROM payme
|
|||||||
$stripe_publishable = escapeHtml($stripe_provider['payment_provider_public_key']);
|
$stripe_publishable = escapeHtml($stripe_provider['payment_provider_public_key']);
|
||||||
$stripe_secret = escapeHtml($stripe_provider['payment_provider_private_key']);
|
$stripe_secret = escapeHtml($stripe_provider['payment_provider_private_key']);
|
||||||
$stripe_account = intval($stripe_provider['payment_provider_account']);
|
$stripe_account = intval($stripe_provider['payment_provider_account']);
|
||||||
$stripe_expense_vendor = intval($stripe_provider['payment_provider_expense_vendor']);
|
|
||||||
$stripe_expense_category = intval($stripe_provider['payment_provider_expense_category']);
|
|
||||||
|
|
||||||
// Show payment form
|
// Show payment form
|
||||||
if (isset($_GET['invoice_id'], $_GET['url_key']) && !isset($_GET['payment_intent'])) {
|
if (isset($_GET['invoice_id'], $_GET['url_key']) && !isset($_GET['payment_intent'])) {
|
||||||
@@ -161,10 +159,7 @@ if (isset($_GET['invoice_id'], $_GET['url_key']) && !isset($_GET['payment_intent
|
|||||||
require_once '../libs/stripe-php/init.php';
|
require_once '../libs/stripe-php/init.php';
|
||||||
\Stripe\Stripe::setApiKey($stripe_secret);
|
\Stripe\Stripe::setApiKey($stripe_secret);
|
||||||
|
|
||||||
$pi_obj = \Stripe\PaymentIntent::retrieve([
|
$pi_obj = \Stripe\PaymentIntent::retrieve($pi_id);
|
||||||
'id' => $pi_id,
|
|
||||||
'expand' => ['latest_charge.balance_transaction'],
|
|
||||||
]);
|
|
||||||
|
|
||||||
if ($pi_obj->client_secret !== $pi_cs) {
|
if ($pi_obj->client_secret !== $pi_cs) {
|
||||||
error_log("Stripe payment error - Payment intent ID/Secret mismatch for $pi_id");
|
error_log("Stripe payment error - Payment intent ID/Secret mismatch for $pi_id");
|
||||||
@@ -231,22 +226,11 @@ if (isset($_GET['invoice_id'], $_GET['url_key']) && !isset($_GET['payment_intent
|
|||||||
// Update Invoice Status
|
// Update Invoice Status
|
||||||
mysqli_query($mysqli, "UPDATE invoices SET invoice_status = 'Paid' WHERE invoice_id = $invoice_id");
|
mysqli_query($mysqli, "UPDATE invoices SET invoice_status = 'Paid' WHERE invoice_id = $invoice_id");
|
||||||
|
|
||||||
// Add Payment to History
|
// Add Payment to History
|
||||||
mysqli_query($mysqli, "INSERT INTO payments SET payment_date = '$pi_date', payment_amount = $pi_amount_paid, payment_currency_code = '$pi_currency', payment_account_id = $stripe_account, payment_method = 'Stripe', payment_reference = 'Stripe - $pi_id', payment_invoice_id = $invoice_id");
|
mysqli_query($mysqli, "INSERT INTO payments SET payment_date = '$pi_date', payment_amount = $pi_amount_paid, payment_currency_code = '$pi_currency', payment_account_id = $stripe_account, payment_method = 'Stripe', payment_reference = 'Stripe - $pi_id', payment_invoice_id = $invoice_id");
|
||||||
|
|
||||||
mysqli_query($mysqli, "INSERT INTO history SET history_status = 'Paid', history_description = 'Online Payment added (client) - $ip - $os - $browser', history_invoice_id = $invoice_id");
|
mysqli_query($mysqli, "INSERT INTO history SET history_status = 'Paid', history_description = 'Online Payment added (client) - $ip - $os - $browser', history_invoice_id = $invoice_id");
|
||||||
|
|
||||||
// Stripe expense (actual fee from balance transaction)
|
|
||||||
if ($stripe_expense_vendor > 0 && $stripe_expense_category > 0) {
|
|
||||||
$stripe_fee = getStripeGatewayFee($pi_obj);
|
|
||||||
if ($stripe_fee) {
|
|
||||||
$gateway_fee = floatval($stripe_fee['fee']);
|
|
||||||
$gateway_fee_currency = escapeSql($stripe_fee['currency']);
|
|
||||||
mysqli_query($mysqli, "INSERT INTO expenses SET expense_date = '$pi_date', expense_amount = $gateway_fee, expense_currency_code = '$gateway_fee_currency', expense_account_id = $stripe_account, expense_vendor_id = $stripe_expense_vendor, expense_client_id = $client_id, expense_category_id = $stripe_expense_category, expense_description = 'Stripe fee for Invoice $invoice_prefix$invoice_number payment of $balance_to_pay', expense_reference = 'Stripe - $pi_id'");
|
|
||||||
} else {
|
|
||||||
error_log("Stripe payment warning - balance transaction unavailable for $pi_id, fee expense not recorded");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Notify
|
// Notify
|
||||||
appNotify("Invoice Paid", "Invoice $invoice_prefix$invoice_number has been paid by $client_name - $ip - $os - $browser", "/agent/invoice.php?invoice_id=$invoice_id", $pi_client_id);
|
appNotify("Invoice Paid", "Invoice $invoice_prefix$invoice_number has been paid by $client_name - $ip - $os - $browser", "/agent/invoice.php?invoice_id=$invoice_id", $pi_client_id);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user