Sign up customer for autopay? feature when manual payment is ran. Version 1
This commit is contained in:
@@ -158,6 +158,59 @@ def run_token_payment(invoice, token):
|
||||
return {"success": True}
|
||||
|
||||
return {"success": False, "error": result.get("responsetext", ["Error"])[0]}
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def save_to_autopay(customer, token):
|
||||
import requests
|
||||
import urllib.parse
|
||||
|
||||
inv_customer = frappe.get_doc("Customer", customer)
|
||||
|
||||
customer_name = (inv_customer.customer_name or "Customer").strip()
|
||||
|
||||
if " " in customer_name:
|
||||
first_name, last_name = customer_name.split(" ", 1)
|
||||
else:
|
||||
first_name = customer_name
|
||||
last_name = "."
|
||||
|
||||
data = {
|
||||
"security_key": frappe.conf.get("nmi_security_key"),
|
||||
"type": "add_customer",
|
||||
"payment_token": token,
|
||||
|
||||
"first_name": first_name,
|
||||
"last_name": last_name,
|
||||
"customer_vault": "add_customer"
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.post(
|
||||
"https://secure.nmi.com/api/transact.php",
|
||||
data=data,
|
||||
timeout=30
|
||||
)
|
||||
|
||||
result = urllib.parse.parse_qs(response.text)
|
||||
|
||||
success = result.get("response", ["0"])[0]
|
||||
vault_id = result.get("customer_vault_id", [""])[0]
|
||||
message = result.get("responsetext", ["Failed"])[0]
|
||||
|
||||
except Exception:
|
||||
frappe.log_error(frappe.get_traceback(), "NMI Vault Error")
|
||||
return {"success": False, "error": "Vault request failed"}
|
||||
|
||||
if success == "1" and vault_id:
|
||||
# Save to customer
|
||||
inv_customer.custom_auto_pay_id = vault_id
|
||||
inv_customer.custom_auto_pay_status = 1
|
||||
inv_customer.save(ignore_permissions=True)
|
||||
|
||||
return {"success": True}
|
||||
|
||||
return {"success": False, "error": message}
|
||||
|
||||
|
||||
@frappe.whitelist(allow_guest=True)
|
||||
|
||||
@@ -225,15 +225,43 @@ function run_token_payment(frm, token, dialog) {
|
||||
token: token
|
||||
},
|
||||
callback(r) {
|
||||
if (r.message?.success) {
|
||||
if (r.message?.success) {
|
||||
|
||||
frappe.confirm(
|
||||
"Payment successful. Save this card for AutoPay?",
|
||||
() => {
|
||||
// YES → save to vault
|
||||
frappe.call({
|
||||
method: "ns_app.api.payments.save_to_autopay",
|
||||
args: {
|
||||
customer: frm.doc.customer,
|
||||
token: token
|
||||
},
|
||||
callback(res) {
|
||||
if (res.message?.success) {
|
||||
frappe.show_alert({
|
||||
message: "AutoPay enabled",
|
||||
indicator: "green"
|
||||
});
|
||||
} else {
|
||||
frappe.msgprint(res.message?.error || "Failed to save AutoPay");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
() => {
|
||||
// NO
|
||||
frappe.show_alert({
|
||||
message: "Payment completed (not saved)",
|
||||
indicator: "blue"
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
dialog.hide();
|
||||
frm.reload_doc();
|
||||
|
||||
frappe.show_alert({
|
||||
message: "Payment successful",
|
||||
indicator: "green"
|
||||
});
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
frappe.msgprint(r.message?.error || "Payment failed");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user