Merge pull request #48575 from aerele/company-payment-gateway

feat(payment gateway account): add company
This commit is contained in:
Ravibharathi
2025-08-04 14:23:56 +05:30
committed by GitHub
parent 655aff7c92
commit 02380c3eab
9 changed files with 75 additions and 23 deletions

View File

@@ -8,4 +8,14 @@ frappe.ui.form.on("Payment Gateway Account", {
frm.set_df_property("payment_gateway", "read_only", 1); frm.set_df_property("payment_gateway", "read_only", 1);
} }
}, },
setup(frm) {
frm.set_query("payment_account", function () {
return {
filters: {
company: frm.doc.company,
},
};
});
},
}); });

View File

@@ -7,6 +7,7 @@
"field_order": [ "field_order": [
"payment_gateway", "payment_gateway",
"payment_channel", "payment_channel",
"company",
"is_default", "is_default",
"column_break_4", "column_break_4",
"payment_account", "payment_account",
@@ -71,11 +72,21 @@
"fieldtype": "Select", "fieldtype": "Select",
"label": "Payment Channel", "label": "Payment Channel",
"options": "\nEmail\nPhone\nOther" "options": "\nEmail\nPhone\nOther"
},
{
"fieldname": "company",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Company",
"options": "Company",
"print_hide": 1,
"remember_last_selected_value": 1,
"reqd": 1
} }
], ],
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
"links": [], "links": [],
"modified": "2024-03-29 18:53:09.836254", "modified": "2025-07-14 16:49:55.210352",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Accounts", "module": "Accounts",
"name": "Payment Gateway Account", "name": "Payment Gateway Account",
@@ -94,6 +105,7 @@
"write": 1 "write": 1
} }
], ],
"row_format": "Dynamic",
"sort_field": "creation", "sort_field": "creation",
"sort_order": "DESC", "sort_order": "DESC",
"states": [] "states": []

View File

@@ -15,6 +15,7 @@ class PaymentGatewayAccount(Document):
if TYPE_CHECKING: if TYPE_CHECKING:
from frappe.types import DF from frappe.types import DF
company: DF.Link
currency: DF.ReadOnly | None currency: DF.ReadOnly | None
is_default: DF.Check is_default: DF.Check
message: DF.SmallText | None message: DF.SmallText | None
@@ -24,7 +25,8 @@ class PaymentGatewayAccount(Document):
# end: auto-generated types # end: auto-generated types
def autoname(self): def autoname(self):
self.name = self.payment_gateway + " - " + self.currency abbr = frappe.db.get_value("Company", self.company, "abbr")
self.name = self.payment_gateway + " - " + self.currency + " - " + abbr
def validate(self): def validate(self):
self.currency = frappe.get_cached_value("Account", self.payment_account, "account_currency") self.currency = frappe.get_cached_value("Account", self.payment_account, "account_currency")
@@ -34,13 +36,15 @@ class PaymentGatewayAccount(Document):
def update_default_payment_gateway(self): def update_default_payment_gateway(self):
if self.is_default: if self.is_default:
frappe.db.sql( frappe.db.set_value(
"""update `tabPayment Gateway Account` set is_default = 0 "Payment Gateway Account",
where is_default = 1 """ {"is_default": 1, "name": ["!=", self.name], "company": self.company},
"is_default",
0,
) )
def set_as_default_if_not_set(self): def set_as_default_if_not_set(self):
if not frappe.db.get_value( if not frappe.db.exists(
"Payment Gateway Account", {"is_default": 1, "name": ("!=", self.name)}, "name" "Payment Gateway Account", {"is_default": 1, "name": ("!=", self.name), "company": self.company}
): ):
self.is_default = 1 self.is_default = 1

View File

@@ -9,6 +9,14 @@ frappe.ui.form.on("Payment Request", {
query: "erpnext.setup.doctype.party_type.party_type.get_party_type", query: "erpnext.setup.doctype.party_type.party_type.get_party_type",
}; };
}); });
frm.set_query("payment_gateway_account", function () {
return {
filters: {
company: frm.doc.company,
},
};
});
}, },
}); });

View File

@@ -534,7 +534,8 @@ def make_payment_request(**args):
frappe.throw(_("Payment Requests cannot be created against: {0}").format(frappe.bold(args.dt))) frappe.throw(_("Payment Requests cannot be created against: {0}").format(frappe.bold(args.dt)))
ref_doc = args.ref_doc or frappe.get_doc(args.dt, args.dn) ref_doc = args.ref_doc or frappe.get_doc(args.dt, args.dn)
if not args.get("company"):
args.company = ref_doc.company
gateway_account = get_gateway_details(args) or frappe._dict() gateway_account = get_gateway_details(args) or frappe._dict()
grand_total = get_amount(ref_doc, gateway_account.get("payment_account")) grand_total = get_amount(ref_doc, gateway_account.get("payment_account"))
@@ -781,7 +782,7 @@ def get_gateway_details(args): # nosemgrep
""" """
Return gateway and payment account of default payment gateway Return gateway and payment account of default payment gateway
""" """
gateway_account = args.get("payment_gateway_account", {"is_default": 1}) gateway_account = args.get("payment_gateway_account", {"is_default": 1, "company": args.company})
return get_payment_gateway_account(gateway_account) return get_payment_gateway_account(gateway_account)

View File

@@ -34,12 +34,14 @@ payment_method = [
"payment_gateway": "_Test Gateway", "payment_gateway": "_Test Gateway",
"payment_account": "_Test Bank - _TC", "payment_account": "_Test Bank - _TC",
"currency": "INR", "currency": "INR",
"company": "_Test Company",
}, },
{ {
"doctype": "Payment Gateway Account", "doctype": "Payment Gateway Account",
"payment_gateway": "_Test Gateway", "payment_gateway": "_Test Gateway",
"payment_account": "_Test Bank USD - _TC", "payment_account": "_Test Bank USD - _TC",
"currency": "USD", "currency": "USD",
"company": "_Test Company",
}, },
{ {
"doctype": "Payment Gateway Account", "doctype": "Payment Gateway Account",
@@ -47,6 +49,7 @@ payment_method = [
"payment_account": "_Test Bank USD - _TC", "payment_account": "_Test Bank USD - _TC",
"payment_channel": "Other", "payment_channel": "Other",
"currency": "USD", "currency": "USD",
"company": "_Test Company",
}, },
{ {
"doctype": "Payment Gateway Account", "doctype": "Payment Gateway Account",
@@ -54,6 +57,7 @@ payment_method = [
"payment_account": "_Test Bank USD - _TC", "payment_account": "_Test Bank USD - _TC",
"payment_channel": "Phone", "payment_channel": "Phone",
"currency": "USD", "currency": "USD",
"company": "_Test Company",
}, },
] ]
@@ -67,7 +71,11 @@ class TestPaymentRequest(IntegrationTestCase):
for method in payment_method: for method in payment_method:
if not frappe.db.get_value( if not frappe.db.get_value(
"Payment Gateway Account", "Payment Gateway Account",
{"payment_gateway": method["payment_gateway"], "currency": method["currency"]}, {
"payment_gateway": method["payment_gateway"],
"currency": method["currency"],
"company": method["company"],
},
"name", "name",
): ):
frappe.get_doc(method).insert(ignore_permissions=True) frappe.get_doc(method).insert(ignore_permissions=True)
@@ -103,7 +111,7 @@ class TestPaymentRequest(IntegrationTestCase):
dt="Sales Order", dt="Sales Order",
dn=so_inr.name, dn=so_inr.name,
recipient_id="saurabh@erpnext.com", recipient_id="saurabh@erpnext.com",
payment_gateway_account="_Test Gateway - INR", payment_gateway_account="_Test Gateway - INR - _TC",
) )
self.assertEqual(pr.reference_doctype, "Sales Order") self.assertEqual(pr.reference_doctype, "Sales Order")
@@ -117,7 +125,7 @@ class TestPaymentRequest(IntegrationTestCase):
dt="Sales Invoice", dt="Sales Invoice",
dn=si_usd.name, dn=si_usd.name,
recipient_id="saurabh@erpnext.com", recipient_id="saurabh@erpnext.com",
payment_gateway_account="_Test Gateway - USD", payment_gateway_account="_Test Gateway - USD - _TC",
) )
self.assertEqual(pr.reference_doctype, "Sales Invoice") self.assertEqual(pr.reference_doctype, "Sales Invoice")
@@ -130,7 +138,7 @@ class TestPaymentRequest(IntegrationTestCase):
pr = make_payment_request( pr = make_payment_request(
dt="Sales Order", dt="Sales Order",
dn=so.name, dn=so.name,
payment_gateway_account="_Test Gateway Other - USD", payment_gateway_account="_Test Gateway Other - USD - _TC",
submit_doc=True, submit_doc=True,
return_doc=True, return_doc=True,
) )
@@ -145,7 +153,7 @@ class TestPaymentRequest(IntegrationTestCase):
pr = make_payment_request( pr = make_payment_request(
dt="Sales Order", dt="Sales Order",
dn=so.name, dn=so.name,
payment_gateway_account="_Test Gateway - USD", # email channel payment_gateway_account="_Test Gateway - USD - _TC", # email channel
submit_doc=False, submit_doc=False,
return_doc=True, return_doc=True,
) )
@@ -163,7 +171,7 @@ class TestPaymentRequest(IntegrationTestCase):
pr = make_payment_request( pr = make_payment_request(
dt="Sales Order", dt="Sales Order",
dn=so.name, dn=so.name,
payment_gateway_account="_Test Gateway Phone - USD", payment_gateway_account="_Test Gateway Phone - USD - _TC",
submit_doc=True, submit_doc=True,
return_doc=True, return_doc=True,
) )
@@ -180,7 +188,7 @@ class TestPaymentRequest(IntegrationTestCase):
pr = make_payment_request( pr = make_payment_request(
dt="Sales Order", dt="Sales Order",
dn=so.name, dn=so.name,
payment_gateway_account="_Test Gateway - USD", # email channel payment_gateway_account="_Test Gateway - USD - _TC", # email channel
submit_doc=True, submit_doc=True,
return_doc=True, return_doc=True,
) )
@@ -201,7 +209,7 @@ class TestPaymentRequest(IntegrationTestCase):
pr = make_payment_request( pr = make_payment_request(
dt="Sales Order", dt="Sales Order",
dn=so.name, dn=so.name,
payment_gateway_account="_Test Gateway - USD", # email channel payment_gateway_account="_Test Gateway - USD - _TC", # email channel
make_sales_invoice=True, make_sales_invoice=True,
mute_email=True, mute_email=True,
submit_doc=True, submit_doc=True,
@@ -232,7 +240,7 @@ class TestPaymentRequest(IntegrationTestCase):
party="_Test Supplier USD", party="_Test Supplier USD",
recipient_id="user@example.com", recipient_id="user@example.com",
mute_email=1, mute_email=1,
payment_gateway_account="_Test Gateway - USD", payment_gateway_account="_Test Gateway - USD - _TC",
submit_doc=1, submit_doc=1,
return_doc=1, return_doc=1,
) )
@@ -257,7 +265,7 @@ class TestPaymentRequest(IntegrationTestCase):
dn=purchase_invoice.name, dn=purchase_invoice.name,
recipient_id="user@example.com", recipient_id="user@example.com",
mute_email=1, mute_email=1,
payment_gateway_account="_Test Gateway - USD", payment_gateway_account="_Test Gateway - USD - _TC",
return_doc=1, return_doc=1,
) )
@@ -276,7 +284,7 @@ class TestPaymentRequest(IntegrationTestCase):
dn=purchase_invoice.name, dn=purchase_invoice.name,
recipient_id="user@example.com", recipient_id="user@example.com",
mute_email=1, mute_email=1,
payment_gateway_account="_Test Gateway - USD", payment_gateway_account="_Test Gateway - USD - _TC",
return_doc=1, return_doc=1,
) )
@@ -300,7 +308,7 @@ class TestPaymentRequest(IntegrationTestCase):
dn=so_inr.name, dn=so_inr.name,
recipient_id="saurabh@erpnext.com", recipient_id="saurabh@erpnext.com",
mute_email=1, mute_email=1,
payment_gateway_account="_Test Gateway - INR", payment_gateway_account="_Test Gateway - INR - _TC",
submit_doc=1, submit_doc=1,
return_doc=1, return_doc=1,
) )
@@ -322,7 +330,7 @@ class TestPaymentRequest(IntegrationTestCase):
dn=si_usd.name, dn=si_usd.name,
recipient_id="saurabh@erpnext.com", recipient_id="saurabh@erpnext.com",
mute_email=1, mute_email=1,
payment_gateway_account="_Test Gateway - USD", payment_gateway_account="_Test Gateway - USD - _TC",
submit_doc=1, submit_doc=1,
return_doc=1, return_doc=1,
) )
@@ -366,7 +374,7 @@ class TestPaymentRequest(IntegrationTestCase):
dn=si_usd.name, dn=si_usd.name,
recipient_id="saurabh@erpnext.com", recipient_id="saurabh@erpnext.com",
mute_email=1, mute_email=1,
payment_gateway_account="_Test Gateway - USD", payment_gateway_account="_Test Gateway - USD - _TC",
submit_doc=1, submit_doc=1,
return_doc=1, return_doc=1,
) )

View File

@@ -1361,6 +1361,7 @@ def create_payment_gateway_account(gateway, payment_channel="Email", company=Non
"payment_account": bank_account.name, "payment_account": bank_account.name,
"currency": bank_account.account_currency, "currency": bank_account.account_currency,
"payment_channel": payment_channel, "payment_channel": payment_channel,
"company": company,
} }
).insert(ignore_permissions=True, ignore_if_duplicate=True) ).insert(ignore_permissions=True, ignore_if_duplicate=True)

View File

@@ -430,3 +430,4 @@ erpnext.patches.v15_0.rename_price_list_to_buying_price_list
erpnext.patches.v15_0.repost_gl_entries_with_no_account_subcontracting #2025-07-31 erpnext.patches.v15_0.repost_gl_entries_with_no_account_subcontracting #2025-07-31
erpnext.patches.v15_0.patch_missing_buying_price_list_in_material_request erpnext.patches.v15_0.patch_missing_buying_price_list_in_material_request
erpnext.patches.v15_0.remove_sales_partner_from_consolidated_sales_invoice erpnext.patches.v15_0.remove_sales_partner_from_consolidated_sales_invoice
erpnext.patches.v15_0.add_company_payment_gateway_account

View File

@@ -0,0 +1,7 @@
import frappe
def execute():
for gateway_account in frappe.get_list("Payment Gateway Account", fields=["name", "payment_account"]):
company = frappe.db.get_value("Account", gateway_account.payment_account, "company")
frappe.db.set_value("Payment Gateway Account", gateway_account.name, "company", company)