feat: new banking module (#54720)
* feat: initial SPA setup for banking * wip: bring over new banking module * feat: added Espresso design tokens * feat: button styles * fix: add all ink colors * wip: espresso design system changes * feat: button and badge espresso components * fix: button styling for reconcile * feat: Espresso progress bar * feat: Espresso toggle switch * feat: Espresso tabs design * fix: vertical tab support * fix: button sizing across modals * feat: Espresso style table layout * feat: Espresso tooltip * feat: Espresso elevations and checkbox * feat: Dialog with Espresso styles * feat: Espresso textarea * fix: input styles * fix: colors on bank picker * fix: breadcrumb styling * fix: bank picker styling * feat: create doctypes and fields for bank reconciliation * feat: APIs for banking * fix: use date format parser * fix: font styling to match Espresso * wip: settings modal * feat: settings dialog component * fix: icons and invalid requests * feat: preferences tab * fix: adjust icon stroke width to 1.5 * feat: rule configuration in settings * fix: remove sheet component * feat: alert and error banner component * feat: dropdown in Espresso * feat: popover and select in Espresso * fix: cleanup more styles * fix: match size of link fields * feat: command styling * fix: remove unused style tokens * fix: styles for global date picker dropdown * fix: styles for match and reconcile * feat: table Espresso component * feat: remove all other design tokens * fix: remove unused tokens * fix: form elements * fix: remove unused styles and fix filters in bank transaction list * feat: fetch bank rec doctypes for filtering * fix: record payment modal * feat: support for dark mode switching * fix: move bank logos to public folder * feat: add support for RTL * feat: support for RTL * chore: send layout direction in dev boot * fix: make checkbox work in RTL * feat: dark mode support * fix: dark mode style * feat: bank logos in dark mode * feat: dark mode bank logos * chore: use dark mode bank logos everywhere * chore: move rule evaluation to controller * chore: add tests for bank transaction rules * fix: move deps to fix actions errors * fix: move tw-animate-css to deps * fix: remove shadcn * fix: do not open modal if no transactions selected * fix: add translation strings * feat: add banner on existing bank reconciliation tool * feat: bank statement import * fix: translations and layout directions * fix: validation for transaction matching rule * fix: styles * fix: show conflicting transactions in alert * fix: show help text for new banking module forms * feat: show total debits and credits * fix: dark mode colors in automatic config * feat: add keyboard shortcuts help * feat: added keyboard shortcut for settings * fix: decrease size of progress bar * chore: bump packages * feat: add tests for statement import * fix: settings dialog * fix: show banner on small screens * fix: show banner when no bank account set
@@ -106,6 +106,8 @@
|
||||
"banking_section",
|
||||
"enable_party_matching",
|
||||
"enable_fuzzy_matching",
|
||||
"transfer_match_days",
|
||||
"automatically_run_rules_on_unreconciled_transactions",
|
||||
"payment_request_section",
|
||||
"create_pr_in_draft_status",
|
||||
"budget_section",
|
||||
@@ -707,6 +709,21 @@
|
||||
"fieldtype": "Check",
|
||||
"label": "Fetch Payment Schedule In Payment Request"
|
||||
},
|
||||
{
|
||||
"default": "3",
|
||||
"description": "Number of days to consider for matching transfers across bank accounts",
|
||||
"fieldname": "transfer_match_days",
|
||||
"fieldtype": "Int",
|
||||
"label": "Match transfers within 'N' days",
|
||||
"non_negative": 1
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"description": "If enabled, rule matching algorithm will run every hour",
|
||||
"fieldname": "automatically_run_rules_on_unreconciled_transactions",
|
||||
"fieldtype": "Check",
|
||||
"label": "Automatically run rules on unreconciled transactions"
|
||||
},
|
||||
{
|
||||
"fieldname": "repost_section",
|
||||
"fieldtype": "Section Break",
|
||||
|
||||
@@ -58,6 +58,7 @@ class AccountsSettings(Document):
|
||||
auto_reconciliation_job_trigger: DF.Int
|
||||
automatically_fetch_payment_terms: DF.Check
|
||||
automatically_process_deferred_accounting_entry: DF.Check
|
||||
automatically_run_rules_on_unreconciled_transactions: DF.Check
|
||||
book_asset_depreciation_entry_automatically: DF.Check
|
||||
book_deferred_entries_based_on: DF.Literal["Days", "Months"]
|
||||
book_deferred_entries_via_journal_entry: DF.Check
|
||||
@@ -104,6 +105,7 @@ class AccountsSettings(Document):
|
||||
show_taxes_as_table_in_print: DF.Check
|
||||
stale_days: DF.Int
|
||||
submit_journal_entries: DF.Check
|
||||
transfer_match_days: DF.Int
|
||||
unlink_advance_payment_on_cancelation_of_order: DF.Check
|
||||
unlink_payment_on_cancellation_of_invoice: DF.Check
|
||||
use_legacy_budget_controller: DF.Check
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"is_default",
|
||||
"is_company_account",
|
||||
"company",
|
||||
"is_credit_card",
|
||||
"section_break_11",
|
||||
"party_type",
|
||||
"column_break_14",
|
||||
@@ -209,6 +210,13 @@
|
||||
"fieldname": "disabled",
|
||||
"fieldtype": "Check",
|
||||
"label": "Disabled"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"description": "If checked, journal entries made using bank reconciliation will be of type \"Credit Card Entry\"",
|
||||
"fieldname": "is_credit_card",
|
||||
"fieldtype": "Check",
|
||||
"label": "Is Credit Card"
|
||||
}
|
||||
],
|
||||
"grid_page_length": 50,
|
||||
@@ -254,7 +262,7 @@
|
||||
"link_fieldname": "default_bank_account"
|
||||
}
|
||||
],
|
||||
"modified": "2026-01-20 00:46:16.633364",
|
||||
"modified": "2026-04-11 19:46:27.609994",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Bank Account",
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
# For license information, please see license.txt
|
||||
|
||||
|
||||
import datetime
|
||||
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.contacts.address_and_contact import (
|
||||
@@ -10,6 +12,7 @@ from frappe.contacts.address_and_contact import (
|
||||
)
|
||||
from frappe.model.document import Document
|
||||
from frappe.utils import comma_and, get_link_to_form
|
||||
from pypika import Order
|
||||
|
||||
|
||||
class BankAccount(Document):
|
||||
@@ -33,6 +36,7 @@ class BankAccount(Document):
|
||||
iban: DF.Data | None
|
||||
integration_id: DF.Data | None
|
||||
is_company_account: DF.Check
|
||||
is_credit_card: DF.Check
|
||||
is_default: DF.Check
|
||||
last_integration_date: DF.Date | None
|
||||
mask: DF.Data | None
|
||||
@@ -50,6 +54,9 @@ class BankAccount(Document):
|
||||
def on_trash(self):
|
||||
delete_contact_and_address("Bank Account", self.name)
|
||||
|
||||
# Delete all bank balances
|
||||
frappe.db.delete("Bank Account Balance", filters={"bank_account": self.name})
|
||||
|
||||
def validate(self):
|
||||
self.validate_is_company_account()
|
||||
self.update_default_bank_account()
|
||||
@@ -120,3 +127,85 @@ def get_bank_account_details(bank_account: str):
|
||||
return frappe.get_cached_value(
|
||||
"Bank Account", bank_account, ["account", "bank", "bank_account_no"], as_dict=1
|
||||
)
|
||||
|
||||
|
||||
@frappe.whitelist(methods=["GET"])
|
||||
def get_list(company: str, show_disabled: bool = False):
|
||||
"""
|
||||
Returns a list of bank accounts for a company - with the account currency
|
||||
|
||||
@param company: The company to get the bank accounts for
|
||||
@param show_disabled: Whether to show disabled bank accounts
|
||||
@return: A list of bank accounts
|
||||
"""
|
||||
|
||||
frappe.has_permission("Bank Account", ptype="read", throw=True)
|
||||
|
||||
bank_account = frappe.qb.DocType("Bank Account")
|
||||
account = frappe.qb.DocType("Account")
|
||||
|
||||
query = (
|
||||
frappe.qb.from_(bank_account)
|
||||
.join(account)
|
||||
.on(bank_account.account == account.name)
|
||||
.select(
|
||||
bank_account.name,
|
||||
account.account_currency,
|
||||
bank_account.account,
|
||||
bank_account.company,
|
||||
bank_account.account_name,
|
||||
bank_account.is_default,
|
||||
bank_account.bank,
|
||||
bank_account.account_type,
|
||||
bank_account.account_subtype,
|
||||
bank_account.bank_account_no,
|
||||
bank_account.last_integration_date,
|
||||
bank_account.is_credit_card,
|
||||
)
|
||||
.where(bank_account.is_company_account == 1)
|
||||
.where(bank_account.company == company)
|
||||
.orderby(bank_account.is_default, order=Order.desc)
|
||||
)
|
||||
|
||||
if not show_disabled:
|
||||
query = query.where(bank_account.disabled == 0)
|
||||
|
||||
return query.run(as_dict=True)
|
||||
|
||||
|
||||
@frappe.whitelist(methods=["GET"])
|
||||
def get_closing_balance_as_per_statement(bank_account: str, date: str):
|
||||
"""
|
||||
Get the closing balance as per statement for a bank account and date
|
||||
"""
|
||||
latest_balance = frappe.get_list(
|
||||
"Bank Account Balance",
|
||||
filters={"bank_account": bank_account, "date": ["<=", date]},
|
||||
fields=["balance", "date"],
|
||||
order_by="date desc",
|
||||
limit=1,
|
||||
)
|
||||
|
||||
if latest_balance:
|
||||
return {"balance": latest_balance[0].balance, "date": latest_balance[0].date}
|
||||
return {"balance": 0, "date": None}
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def set_closing_balance_as_per_statement(bank_account: str, date: str | datetime.date, balance: float):
|
||||
"""
|
||||
Set the closing balance as per statement for a bank account and date
|
||||
"""
|
||||
|
||||
existing = frappe.db.exists("Bank Account Balance", {"bank_account": bank_account, "date": date})
|
||||
|
||||
if existing:
|
||||
doc = frappe.get_doc("Bank Account Balance", existing)
|
||||
doc.balance = balance
|
||||
doc.save()
|
||||
else:
|
||||
doc = frappe.new_doc("Bank Account Balance")
|
||||
doc.bank_account = bank_account
|
||||
doc.date = date
|
||||
doc.balance = balance
|
||||
doc.save()
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
// Copyright (c) 2026, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
// frappe.ui.form.on("Bank Account Balance", {
|
||||
// refresh(frm) {
|
||||
|
||||
// },
|
||||
// });
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"creation": "2026-04-11 19:48:13.622253",
|
||||
"doctype": "DocType",
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"bank_account",
|
||||
"date",
|
||||
"balance"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "bank_account",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Bank Account",
|
||||
"options": "Bank Account",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "date",
|
||||
"fieldtype": "Date",
|
||||
"in_list_view": 1,
|
||||
"label": "Date",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "balance",
|
||||
"fieldtype": "Currency",
|
||||
"in_list_view": 1,
|
||||
"label": "Balance",
|
||||
"reqd": 1
|
||||
}
|
||||
],
|
||||
"grid_page_length": 50,
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2026-04-11 19:49:45.374695",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Bank Account Balance",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Accounts User",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Accounts Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Auditor",
|
||||
"share": 1
|
||||
}
|
||||
],
|
||||
"row_format": "Dynamic",
|
||||
"rows_threshold_for_grid_search": 20,
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
# Copyright (c) 2026, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class BankAccountBalance(Document):
|
||||
# begin: auto-generated types
|
||||
# This code is auto-generated. Do not modify anything in this block.
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from frappe.types import DF
|
||||
|
||||
balance: DF.Currency
|
||||
bank_account: DF.Link
|
||||
date: DF.Date
|
||||
# end: auto-generated types
|
||||
|
||||
pass
|
||||
@@ -0,0 +1,20 @@
|
||||
# Copyright (c) 2026, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# See license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.tests import IntegrationTestCase
|
||||
|
||||
# On IntegrationTestCase, the doctype test records and all
|
||||
# link-field test record dependencies are recursively loaded
|
||||
# Use these module variables to add/remove to/from that list
|
||||
EXTRA_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"]
|
||||
IGNORE_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"]
|
||||
|
||||
|
||||
class IntegrationTestBankAccountBalance(IntegrationTestCase):
|
||||
"""
|
||||
Integration tests for BankAccountBalance.
|
||||
Use this class for testing interactions between multiple components.
|
||||
"""
|
||||
|
||||
pass
|
||||
@@ -85,6 +85,11 @@ frappe.ui.form.on("Bank Reconciliation Tool", {
|
||||
frm.trigger("make_reconciliation_tool");
|
||||
});
|
||||
frm.change_custom_button_type(__("Get Unreconciled Entries"), null, "primary");
|
||||
|
||||
frm.set_intro(
|
||||
__("Try the {0} for a better experience.", ["<a href='/banking'>new Banking module</a>"]),
|
||||
"info"
|
||||
);
|
||||
},
|
||||
|
||||
bank_account: function (frm) {
|
||||
|
||||
@@ -48,13 +48,17 @@ class BankReconciliationTool(Document):
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_bank_transactions(
|
||||
bank_account: str, from_date: str | date | None = None, to_date: str | date | None = None
|
||||
bank_account: str,
|
||||
from_date: str | date | None = None,
|
||||
to_date: str | date | None = None,
|
||||
all_transactions: bool = False,
|
||||
):
|
||||
# returns bank transactions for a bank account
|
||||
filters = []
|
||||
filters.append(["bank_account", "=", bank_account])
|
||||
filters.append(["docstatus", "=", 1])
|
||||
filters.append(["unallocated_amount", ">", 0.0])
|
||||
if not all_transactions:
|
||||
filters.append(["unallocated_amount", ">", 0.0])
|
||||
if to_date:
|
||||
filters.append(["date", "<=", to_date])
|
||||
if from_date:
|
||||
@@ -67,13 +71,17 @@ def get_bank_transactions(
|
||||
"withdrawal",
|
||||
"currency",
|
||||
"description",
|
||||
"transaction_type",
|
||||
"name",
|
||||
"bank_account",
|
||||
"company",
|
||||
"allocated_amount",
|
||||
"unallocated_amount",
|
||||
"reference_number",
|
||||
"party_type",
|
||||
"party",
|
||||
"status",
|
||||
"matched_transaction_rule",
|
||||
],
|
||||
filters=filters,
|
||||
order_by="date",
|
||||
@@ -294,7 +302,7 @@ def create_journal_entry_bts(
|
||||
]
|
||||
)
|
||||
|
||||
return reconcile_vouchers(bank_transaction_name, vouchers)
|
||||
return reconcile_vouchers(bank_transaction_name, vouchers, is_new_voucher=True)
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
@@ -371,7 +379,581 @@ def create_payment_entry_bts(
|
||||
}
|
||||
]
|
||||
)
|
||||
return reconcile_vouchers(bank_transaction_name, vouchers)
|
||||
return reconcile_vouchers(bank_transaction_name, vouchers, is_new_voucher=True)
|
||||
|
||||
|
||||
# APIs for new bank reconciliation tool (/banking)
|
||||
|
||||
|
||||
@frappe.whitelist(methods=["GET"])
|
||||
def get_older_unreconciled_transactions(bank_account: str, from_date: str):
|
||||
"""
|
||||
Get number of unreconciled transactions before a given date for a bank account
|
||||
"""
|
||||
count = frappe.db.count(
|
||||
"Bank Transaction",
|
||||
filters={
|
||||
"bank_account": bank_account,
|
||||
"date": ["<", from_date],
|
||||
"docstatus": 1,
|
||||
"unallocated_amount": [">", 0.0],
|
||||
},
|
||||
)
|
||||
|
||||
if count > 0:
|
||||
oldest_transaction = frappe.db.get_list(
|
||||
"Bank Transaction",
|
||||
filters={
|
||||
"bank_account": bank_account,
|
||||
"date": ["<", from_date],
|
||||
"docstatus": 1,
|
||||
"unallocated_amount": [">", 0.0],
|
||||
},
|
||||
fields=["date"],
|
||||
order_by="date",
|
||||
limit=1,
|
||||
)
|
||||
|
||||
return {"count": count, "oldest_date": oldest_transaction[0].date}
|
||||
return {"count": 0, "oldest_date": None}
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def update_clearance_date(
|
||||
payment_document: str, payment_entry: str, account: str, clearance_date: str | None
|
||||
):
|
||||
"""
|
||||
Update the clearance date of a voucher
|
||||
"""
|
||||
|
||||
if not clearance_date:
|
||||
clearance_date = None
|
||||
|
||||
# Check for permissions
|
||||
frappe.has_permission("Bank Clearance", ptype="write", throw=True)
|
||||
|
||||
if payment_document == "Sales Invoice":
|
||||
frappe.db.set_value(
|
||||
"Sales Invoice Payment",
|
||||
{"parent": payment_entry, "account": account, "amount": [">", 0]},
|
||||
"clearance_date",
|
||||
clearance_date,
|
||||
)
|
||||
|
||||
else:
|
||||
frappe.db.set_value(payment_document, payment_entry, "clearance_date", clearance_date)
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def clear_clearing_date(voucher_type: str, voucher_name: str):
|
||||
"""
|
||||
Clear the clearing date of a voucher
|
||||
"""
|
||||
# using db_set to trigger notification
|
||||
payment_entry = frappe.get_doc(voucher_type, voucher_name)
|
||||
|
||||
if payment_entry.has_permission("write"):
|
||||
payment_entry.db_set("clearance_date", None)
|
||||
|
||||
|
||||
@frappe.whitelist(methods=["POST"])
|
||||
def create_bulk_internal_transfer(bank_transaction_names: list[str | int], bank_account: str):
|
||||
"""
|
||||
Create an internal transfer for multiple bank transactions
|
||||
"""
|
||||
output = []
|
||||
|
||||
for bank_transaction_name in bank_transaction_names:
|
||||
bank_transaction = frappe.db.get_value(
|
||||
"Bank Transaction",
|
||||
bank_transaction_name,
|
||||
["name", "withdrawal", "bank_account", "date", "reference_number", "description"],
|
||||
as_dict=True,
|
||||
)
|
||||
|
||||
transaction_account = frappe.get_cached_value(
|
||||
"Bank Account", bank_transaction.bank_account, "account"
|
||||
)
|
||||
|
||||
is_withdrawal = bank_transaction.withdrawal > 0.0
|
||||
|
||||
if is_withdrawal:
|
||||
paid_from = transaction_account
|
||||
paid_to = bank_account
|
||||
else:
|
||||
paid_from = bank_account
|
||||
paid_to = transaction_account
|
||||
|
||||
reference_no = (bank_transaction.reference_number or bank_transaction.description or "")[:140]
|
||||
|
||||
final_transaction = create_internal_transfer(
|
||||
bank_transaction_name=bank_transaction.name,
|
||||
posting_date=bank_transaction.date,
|
||||
reference_date=bank_transaction.date,
|
||||
reference_no=reference_no,
|
||||
paid_from=paid_from,
|
||||
paid_to=paid_to,
|
||||
)
|
||||
|
||||
output.append(final_transaction)
|
||||
|
||||
return output
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def create_internal_transfer(
|
||||
bank_transaction_name: str | int,
|
||||
posting_date: str | date,
|
||||
reference_date: str | date,
|
||||
reference_no: str,
|
||||
paid_from: str,
|
||||
paid_to: str,
|
||||
custom_remarks: bool = False,
|
||||
remarks: str | None = None,
|
||||
mirror_transaction_name: str | int | None = None,
|
||||
dimensions: dict | None = None,
|
||||
):
|
||||
"""
|
||||
Create an internal transfer payment entry
|
||||
"""
|
||||
|
||||
bank_transaction = frappe.get_doc("Bank Transaction", bank_transaction_name)
|
||||
|
||||
bank_account = frappe.get_cached_value("Bank Account", bank_transaction.bank_account, "account")
|
||||
company = frappe.get_cached_value("Account", bank_account, "company")
|
||||
|
||||
is_withdrawal = bank_transaction.withdrawal > 0.0
|
||||
|
||||
pe = frappe.new_doc("Payment Entry")
|
||||
|
||||
pe.company = company
|
||||
pe.payment_type = "Internal Transfer"
|
||||
pe.posting_date = posting_date
|
||||
pe.reference_date = reference_date
|
||||
pe.reference_no = reference_no
|
||||
pe.custom_remarks = custom_remarks
|
||||
pe.paid_amount = bank_transaction.unallocated_amount
|
||||
pe.received_amount = bank_transaction.unallocated_amount
|
||||
|
||||
# TODO: Support multi-currency transactions
|
||||
pe.target_exchange_rate = 1.0
|
||||
|
||||
if custom_remarks:
|
||||
pe.remarks = remarks
|
||||
|
||||
if dimensions:
|
||||
pe.update(dimensions)
|
||||
|
||||
if is_withdrawal:
|
||||
pe.paid_to = paid_to
|
||||
pe.paid_from = bank_account
|
||||
else:
|
||||
pe.paid_from = paid_from
|
||||
pe.paid_to = bank_account
|
||||
|
||||
pe.insert()
|
||||
pe.submit()
|
||||
|
||||
vouchers = json.dumps(
|
||||
[
|
||||
{
|
||||
"payment_doctype": "Payment Entry",
|
||||
"payment_name": pe.name,
|
||||
"amount": bank_transaction.unallocated_amount,
|
||||
}
|
||||
]
|
||||
)
|
||||
|
||||
transaction_id = reconcile_vouchers(bank_transaction_name, vouchers, is_new_voucher=True)
|
||||
|
||||
if mirror_transaction_name:
|
||||
# Reconcile the mirror transaction
|
||||
reconcile_vouchers(mirror_transaction_name, vouchers, is_new_voucher=False)
|
||||
|
||||
return {
|
||||
"transaction": transaction_id,
|
||||
"payment_entry": pe,
|
||||
}
|
||||
|
||||
|
||||
@frappe.whitelist(methods=["POST"])
|
||||
def create_bulk_bank_entry_and_reconcile(bank_transactions: list[str | int], account: str):
|
||||
"""
|
||||
Create bank entries for all transactions and reconcile them
|
||||
"""
|
||||
|
||||
output = []
|
||||
|
||||
for bank_transaction in bank_transactions:
|
||||
transactions_details = frappe.db.get_value(
|
||||
"Bank Transaction",
|
||||
bank_transaction,
|
||||
[
|
||||
"name",
|
||||
"deposit",
|
||||
"withdrawal",
|
||||
"bank_account",
|
||||
"currency",
|
||||
"unallocated_amount",
|
||||
"date",
|
||||
"reference_number",
|
||||
"description",
|
||||
],
|
||||
as_dict=True,
|
||||
)
|
||||
|
||||
is_credit_card = frappe.get_cached_value(
|
||||
"Bank Account", transactions_details.bank_account, "is_credit_card"
|
||||
)
|
||||
|
||||
# Check Number will be limited to 140 characters
|
||||
cheque_no = (transactions_details.reference_number or transactions_details.description or "")[:140]
|
||||
|
||||
is_withdrawal = transactions_details.withdrawal > 0.0
|
||||
|
||||
entries = []
|
||||
|
||||
gl_account = frappe.get_cached_value("Bank Account", transactions_details.bank_account, "account")
|
||||
|
||||
if is_withdrawal:
|
||||
entries.append(
|
||||
{
|
||||
"account": gl_account,
|
||||
"bank_account": transactions_details.bank_account,
|
||||
"credit_in_account_currency": transactions_details.unallocated_amount,
|
||||
"credit": transactions_details.unallocated_amount,
|
||||
"debit_in_account_currency": 0,
|
||||
"debit": 0,
|
||||
}
|
||||
)
|
||||
|
||||
entries.append(
|
||||
{
|
||||
"account": account,
|
||||
"credit": 0,
|
||||
"debit": transactions_details.unallocated_amount,
|
||||
}
|
||||
)
|
||||
else:
|
||||
entries.append(
|
||||
{
|
||||
"account": gl_account,
|
||||
"bank_account": transactions_details.bank_account,
|
||||
"debit_in_account_currency": transactions_details.unallocated_amount,
|
||||
"debit": transactions_details.unallocated_amount,
|
||||
"credit_in_account_currency": 0,
|
||||
"credit": 0,
|
||||
}
|
||||
)
|
||||
|
||||
entries.append(
|
||||
{
|
||||
"account": account,
|
||||
"debit": 0,
|
||||
"credit": transactions_details.unallocated_amount,
|
||||
}
|
||||
)
|
||||
|
||||
final_transaction = create_bank_entry_and_reconcile(
|
||||
bank_transaction_name=bank_transaction,
|
||||
cheque_date=transactions_details.date,
|
||||
posting_date=transactions_details.date,
|
||||
cheque_no=cheque_no,
|
||||
user_remark=transactions_details.description,
|
||||
entries=entries,
|
||||
voucher_type=("Credit Card Entry" if is_credit_card else "Bank Entry"),
|
||||
)
|
||||
|
||||
output.append(final_transaction)
|
||||
|
||||
return output
|
||||
|
||||
|
||||
@frappe.whitelist(methods=["POST"])
|
||||
def create_bank_entry_and_reconcile(
|
||||
bank_transaction_name: str | int,
|
||||
cheque_date: str | date,
|
||||
posting_date: str | date,
|
||||
cheque_no: str,
|
||||
entries: list,
|
||||
user_remark: str | None = None,
|
||||
voucher_type: str = "Bank Entry",
|
||||
dimensions: dict | None = None,
|
||||
):
|
||||
"""
|
||||
Create a bank entry and reconcile it with the bank transaction
|
||||
"""
|
||||
# Create a new journal entry based on the bank transaction
|
||||
bank_transaction = frappe.db.get_values(
|
||||
"Bank Transaction",
|
||||
bank_transaction_name,
|
||||
fieldname=["name", "deposit", "withdrawal", "bank_account", "currency", "unallocated_amount"],
|
||||
as_dict=True,
|
||||
)[0]
|
||||
|
||||
bank_account = frappe.get_cached_value("Bank Account", bank_transaction.bank_account, "account")
|
||||
company = frappe.get_cached_value("Account", bank_account, "company")
|
||||
|
||||
default_cost_center = get_default_cost_center(company)
|
||||
|
||||
bank_entry = frappe.get_doc(
|
||||
{
|
||||
"doctype": "Journal Entry",
|
||||
"voucher_type": voucher_type,
|
||||
"company": company,
|
||||
"cheque_date": cheque_date,
|
||||
"posting_date": posting_date,
|
||||
"cheque_no": cheque_no,
|
||||
"user_remark": user_remark,
|
||||
}
|
||||
)
|
||||
|
||||
if not dimensions:
|
||||
dimensions = {}
|
||||
|
||||
for entry in entries:
|
||||
# Check if this account is a Income or Expense Account
|
||||
# If it is, and no cost center is added, select the company default cost center
|
||||
cost_center = entry.get("cost_center")
|
||||
|
||||
if not cost_center:
|
||||
report_type = frappe.get_cached_value("Account", entry["account"], "report_type")
|
||||
if report_type == "Profit and Loss":
|
||||
# Cost center is required
|
||||
cost_center = default_cost_center
|
||||
|
||||
bank_entry.append(
|
||||
"accounts",
|
||||
{
|
||||
"account": entry["account"],
|
||||
# TODO: Multi currency support
|
||||
"debit_in_account_currency": entry.get("debit"),
|
||||
"credit_in_account_currency": entry.get("credit"),
|
||||
"debit": entry.get("debit"),
|
||||
"credit": entry.get("credit"),
|
||||
"party_type": entry.get("party_type") if entry.get("party") else None,
|
||||
"party": entry.get("party"),
|
||||
"user_remark": entry.get("user_remark"),
|
||||
**entry,
|
||||
"cost_center": cost_center,
|
||||
},
|
||||
)
|
||||
|
||||
bank_entry.insert()
|
||||
bank_entry.submit()
|
||||
|
||||
if bank_transaction.deposit > 0.0:
|
||||
paid_amount = bank_transaction.deposit
|
||||
else:
|
||||
paid_amount = bank_transaction.withdrawal
|
||||
|
||||
transaction = reconcile_vouchers(
|
||||
bank_transaction_name,
|
||||
json.dumps(
|
||||
[
|
||||
{
|
||||
"payment_doctype": "Journal Entry",
|
||||
"payment_name": bank_entry.name,
|
||||
"amount": paid_amount,
|
||||
}
|
||||
]
|
||||
),
|
||||
is_new_voucher=True,
|
||||
)
|
||||
|
||||
return {
|
||||
"transaction": transaction,
|
||||
"journal_entry": bank_entry,
|
||||
}
|
||||
|
||||
|
||||
@frappe.whitelist(methods=["POST"])
|
||||
def create_bulk_payment_entry_and_reconcile(
|
||||
bank_transaction_names: list[str | int],
|
||||
party_type: str,
|
||||
party: str | int,
|
||||
account: str,
|
||||
mode_of_payment: str | None = None,
|
||||
):
|
||||
"""
|
||||
Create a payment entry and reconcile it with the bank transaction
|
||||
"""
|
||||
|
||||
output = []
|
||||
|
||||
for bank_transaction_name in bank_transaction_names:
|
||||
bank_transaction = frappe.db.get_value(
|
||||
"Bank Transaction",
|
||||
bank_transaction_name,
|
||||
[
|
||||
"name",
|
||||
"deposit",
|
||||
"withdrawal",
|
||||
"bank_account",
|
||||
"currency",
|
||||
"unallocated_amount",
|
||||
"date",
|
||||
"reference_number",
|
||||
"description",
|
||||
],
|
||||
as_dict=True,
|
||||
)
|
||||
|
||||
transaction_account = frappe.get_cached_value(
|
||||
"Bank Account", bank_transaction.bank_account, "account"
|
||||
)
|
||||
|
||||
is_withdrawal = bank_transaction.withdrawal > 0.0
|
||||
|
||||
if is_withdrawal:
|
||||
paid_from = transaction_account
|
||||
paid_to = account
|
||||
else:
|
||||
paid_from = account
|
||||
paid_to = transaction_account
|
||||
|
||||
payment_entry_doc = frappe.get_doc(
|
||||
{
|
||||
"doctype": "Payment Entry",
|
||||
"payment_type": "Pay" if is_withdrawal else "Receive",
|
||||
"bank_account": bank_transaction.bank_account,
|
||||
"company": bank_transaction.company,
|
||||
"mode_of_payment": mode_of_payment,
|
||||
"party_type": party_type,
|
||||
"party": party,
|
||||
"paid_from": paid_from,
|
||||
"paid_to": paid_to,
|
||||
"paid_amount": bank_transaction.unallocated_amount,
|
||||
"base_paid_amount": bank_transaction.unallocated_amount,
|
||||
"received_amount": bank_transaction.unallocated_amount,
|
||||
"base_received_amount": bank_transaction.unallocated_amount,
|
||||
"target_exchange_rate": 1,
|
||||
"source_exchange_rate": 1,
|
||||
"reference_date": bank_transaction.date,
|
||||
"posting_date": bank_transaction.date,
|
||||
"reference_no": (bank_transaction.reference_number or bank_transaction.description or "")[
|
||||
:140
|
||||
],
|
||||
}
|
||||
)
|
||||
|
||||
payment_entry_doc.insert()
|
||||
payment_entry_doc.submit()
|
||||
|
||||
final_transaction = reconcile_vouchers(
|
||||
bank_transaction_name,
|
||||
json.dumps(
|
||||
[
|
||||
{
|
||||
"payment_doctype": "Payment Entry",
|
||||
"payment_name": payment_entry_doc.name,
|
||||
"amount": payment_entry_doc.paid_amount,
|
||||
}
|
||||
]
|
||||
),
|
||||
is_new_voucher=True,
|
||||
)
|
||||
|
||||
output.append(
|
||||
{
|
||||
"transaction": final_transaction,
|
||||
"payment_entry": payment_entry_doc,
|
||||
}
|
||||
)
|
||||
|
||||
return output
|
||||
|
||||
|
||||
@frappe.whitelist(methods=["POST"])
|
||||
def create_payment_entry_and_reconcile(bank_transaction_name: str | int, payment_entry_doc: dict):
|
||||
"""
|
||||
Create a payment entry and reconcile it with the bank transaction
|
||||
"""
|
||||
payment_entry = frappe.get_doc(
|
||||
{
|
||||
**payment_entry_doc,
|
||||
"doctype": "Payment Entry",
|
||||
}
|
||||
)
|
||||
payment_entry.insert()
|
||||
payment_entry.submit()
|
||||
transaction = reconcile_vouchers(
|
||||
bank_transaction_name,
|
||||
json.dumps(
|
||||
[
|
||||
{
|
||||
"payment_doctype": "Payment Entry",
|
||||
"payment_name": payment_entry.name,
|
||||
"amount": payment_entry.paid_amount,
|
||||
}
|
||||
]
|
||||
),
|
||||
is_new_voucher=True,
|
||||
)
|
||||
|
||||
return {
|
||||
"transaction": transaction,
|
||||
"payment_entry": payment_entry,
|
||||
}
|
||||
|
||||
|
||||
@frappe.whitelist(methods=["GET"])
|
||||
def search_for_transfer_transaction(transaction_id: str | int):
|
||||
"""
|
||||
When users try to create a transfer, we could help them by searching for the mirror transaction.
|
||||
|
||||
So for a withdrawal of 1000, we could search for a deposit of 1000 on the same date.
|
||||
|
||||
If the mirror transaction is found, we return the bank account and account details.
|
||||
"""
|
||||
company, withdrawal, deposit, date, bank_account = frappe.db.get_value(
|
||||
"Bank Transaction", transaction_id, ["company", "withdrawal", "deposit", "date", "bank_account"]
|
||||
)
|
||||
|
||||
days = frappe.db.get_single_value("Accounts Settings", "transfer_match_days")
|
||||
|
||||
if not days:
|
||||
days = 3
|
||||
|
||||
min_date = frappe.utils.add_days(date, -days)
|
||||
max_date = frappe.utils.add_days(date, days)
|
||||
mirror_tx = frappe.db.get_list(
|
||||
"Bank Transaction",
|
||||
filters={
|
||||
"company": company,
|
||||
"date": ["between", [min_date, max_date]],
|
||||
"withdrawal": deposit,
|
||||
"bank_account": ["!=", bank_account],
|
||||
"deposit": withdrawal,
|
||||
"docstatus": 1,
|
||||
"status": "Unreconciled",
|
||||
},
|
||||
fields=[
|
||||
"name",
|
||||
"bank_account",
|
||||
"reference_number",
|
||||
"date",
|
||||
"description",
|
||||
"withdrawal",
|
||||
"deposit",
|
||||
"currency",
|
||||
],
|
||||
)
|
||||
|
||||
if len(mirror_tx) == 1:
|
||||
return {
|
||||
"name": mirror_tx[0].name,
|
||||
"reference_number": mirror_tx[0].reference_number,
|
||||
"description": mirror_tx[0].description,
|
||||
"currency": mirror_tx[0].currency,
|
||||
"withdrawal": mirror_tx[0].withdrawal,
|
||||
"deposit": mirror_tx[0].deposit,
|
||||
"date": mirror_tx[0].date,
|
||||
"bank_account": mirror_tx[0].bank_account,
|
||||
"account": frappe.get_cached_value("Bank Account", mirror_tx[0].bank_account, "account"),
|
||||
}
|
||||
|
||||
return None
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
@@ -476,11 +1058,11 @@ def get_auto_reconcile_message(partially_reconciled, reconciled):
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def reconcile_vouchers(bank_transaction_name: str, vouchers: str):
|
||||
def reconcile_vouchers(bank_transaction_name: str | int, vouchers: str, is_new_voucher: bool = False):
|
||||
# updated clear date of all the vouchers based on the bank transaction
|
||||
vouchers = json.loads(vouchers)
|
||||
transaction = frappe.get_doc("Bank Transaction", bank_transaction_name)
|
||||
transaction.add_payment_entries(vouchers)
|
||||
transaction.add_payment_entries(vouchers, is_new_voucher)
|
||||
transaction.validate_duplicate_references()
|
||||
transaction.allocate_payment_entries()
|
||||
transaction.update_allocated_amount()
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
// Copyright (c) 2026, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on("Bank Statement Import Log", {
|
||||
refresh(frm) {
|
||||
frm.set_intro(
|
||||
__(
|
||||
"Go to <a href='/banking/statement-importer' target='_blank' style='text-decoration: underline;'>Bank Statement Importer</a> in the Banking module to use this importer."
|
||||
)
|
||||
);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,211 @@
|
||||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"autoname": "hash",
|
||||
"creation": "2026-04-11 20:57:11.214959",
|
||||
"doctype": "DocType",
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"bank_account",
|
||||
"file",
|
||||
"status",
|
||||
"currency",
|
||||
"column_break_zhdv",
|
||||
"number_of_transactions",
|
||||
"start_date",
|
||||
"end_date",
|
||||
"closing_balance",
|
||||
"section_break_xomd",
|
||||
"total_debits",
|
||||
"total_credits",
|
||||
"column_break_mydu",
|
||||
"total_debit_transactions",
|
||||
"total_credit_transactions",
|
||||
"statement_format_section",
|
||||
"detected_date_format",
|
||||
"detected_amount_format",
|
||||
"detected_header_index",
|
||||
"detected_transaction_starting_index",
|
||||
"detected_transaction_ending_index",
|
||||
"section_break_yulq",
|
||||
"column_mapping"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "bank_account",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Bank Account",
|
||||
"link_filters": "[[\"Bank Account\",\"is_company_account\",\"=\",1]]",
|
||||
"options": "Bank Account",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "number_of_transactions",
|
||||
"fieldtype": "Int",
|
||||
"in_list_view": 1,
|
||||
"label": "Number of Transactions",
|
||||
"non_negative": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "closing_balance",
|
||||
"fieldtype": "Currency",
|
||||
"in_list_view": 1,
|
||||
"label": "Closing Balance",
|
||||
"non_negative": 1,
|
||||
"options": "currency"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_zhdv",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "start_date",
|
||||
"fieldtype": "Date",
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 1,
|
||||
"label": "Start Date",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "end_date",
|
||||
"fieldtype": "Date",
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 1,
|
||||
"label": "End Date",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "file",
|
||||
"fieldtype": "Attach",
|
||||
"label": "File",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "statement_format_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Statement Format"
|
||||
},
|
||||
{
|
||||
"fieldname": "detected_date_format",
|
||||
"fieldtype": "Data",
|
||||
"label": "Detected Date Format",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "detected_amount_format",
|
||||
"fieldtype": "Select",
|
||||
"label": "Detected Amount Format",
|
||||
"options": "Separate columns for withdrawal and deposit\nAmount column has \"CR\"/\"DR\" values\nAmount column has positive/negative values\nTransaction type column has \"CR\"/\"DR\" values\nTransaction type column has \"Deposit\"/\"Withdrawal\" values\nTransaction type column has \"C\"/\"D\" values",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "detected_header_index",
|
||||
"fieldtype": "Int",
|
||||
"label": "Detected Header Index",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "detected_transaction_starting_index",
|
||||
"fieldtype": "Int",
|
||||
"label": "Detected Transaction Starting Index",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "detected_transaction_ending_index",
|
||||
"fieldtype": "Int",
|
||||
"label": "Detected Transaction Ending Index",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "section_break_yulq",
|
||||
"fieldtype": "Section Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_mapping",
|
||||
"fieldtype": "Table",
|
||||
"label": "Column Mapping",
|
||||
"options": "Bank Statement Import Log Column Map"
|
||||
},
|
||||
{
|
||||
"default": "Not Started",
|
||||
"fieldname": "status",
|
||||
"fieldtype": "Select",
|
||||
"label": "Status",
|
||||
"options": "Not Started\nCompleted",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "currency",
|
||||
"fieldtype": "Link",
|
||||
"label": "Currency",
|
||||
"options": "Currency",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "section_break_xomd",
|
||||
"fieldtype": "Section Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "total_debits",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Total Debits",
|
||||
"options": "currency",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "total_credits",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Total Credits",
|
||||
"options": "currency",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_mydu",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "total_debit_transactions",
|
||||
"fieldtype": "Int",
|
||||
"label": "Total Debit Transactions",
|
||||
"non_negative": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "total_credit_transactions",
|
||||
"fieldtype": "Int",
|
||||
"label": "Total Credit Transactions",
|
||||
"non_negative": 1,
|
||||
"read_only": 1
|
||||
}
|
||||
],
|
||||
"grid_page_length": 50,
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2026-05-08 17:55:25.615942",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Bank Statement Import Log",
|
||||
"naming_rule": "Random",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"row_format": "Dynamic",
|
||||
"rows_threshold_for_grid_search": 20,
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
||||
@@ -0,0 +1,743 @@
|
||||
# Copyright (c) 2026, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
import re
|
||||
from datetime import datetime
|
||||
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.model.document import Document
|
||||
from frappe.utils import getdate
|
||||
from frappe.utils.csvutils import read_csv_content
|
||||
from frappe.utils.xlsxutils import (
|
||||
read_xls_file_from_attached_file,
|
||||
read_xlsx_file_from_attached_file,
|
||||
)
|
||||
|
||||
from erpnext.accounts.doctype.bank_account.bank_account import set_closing_balance_as_per_statement
|
||||
|
||||
|
||||
class BankStatementImportLog(Document):
|
||||
# begin: auto-generated types
|
||||
# This code is auto-generated. Do not modify anything in this block.
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from frappe.types import DF
|
||||
|
||||
from erpnext.accounts.doctype.bank_statement_import_log_column_map.bank_statement_import_log_column_map import (
|
||||
BankStatementImportLogColumnMap,
|
||||
)
|
||||
|
||||
bank_account: DF.Link
|
||||
closing_balance: DF.Currency
|
||||
column_mapping: DF.Table[BankStatementImportLogColumnMap]
|
||||
currency: DF.Link | None
|
||||
detected_amount_format: DF.Literal[
|
||||
"Separate columns for withdrawal and deposit",
|
||||
'Amount column has "CR"/"DR" values',
|
||||
"Amount column has positive/negative values",
|
||||
'Transaction type column has "CR"/"DR" values',
|
||||
'Transaction type column has "Deposit"/"Withdrawal" values',
|
||||
'Transaction type column has "C"/"D" values',
|
||||
]
|
||||
detected_date_format: DF.Data | None
|
||||
detected_header_index: DF.Int
|
||||
detected_transaction_ending_index: DF.Int
|
||||
detected_transaction_starting_index: DF.Int
|
||||
end_date: DF.Date | None
|
||||
file: DF.Attach
|
||||
number_of_transactions: DF.Int
|
||||
start_date: DF.Date | None
|
||||
status: DF.Literal["Not Started", "Completed"]
|
||||
total_credit_transactions: DF.Int
|
||||
total_credits: DF.Currency
|
||||
total_debit_transactions: DF.Int
|
||||
total_debits: DF.Currency
|
||||
# end: auto-generated types
|
||||
|
||||
def before_validate(self):
|
||||
self.set_currency()
|
||||
|
||||
def set_currency(self):
|
||||
account = frappe.get_cached_value("Bank Account", self.bank_account, "account")
|
||||
self.currency = frappe.get_cached_value("Account", account, "account_currency")
|
||||
|
||||
def validate(self):
|
||||
if not frappe.has_permission("Bank Transaction", "write"):
|
||||
frappe.throw(
|
||||
_("You do not have permission to import bank transactions"), title=_("Permission Denied")
|
||||
)
|
||||
if not frappe.has_permission("Bank Transaction", "create"):
|
||||
frappe.throw(
|
||||
_("You do not have permission to import bank transactions"), title=_("Permission Denied")
|
||||
)
|
||||
|
||||
if not frappe.has_permission("Bank Transaction", "submit"):
|
||||
frappe.throw(
|
||||
_("You do not have permission to import and submit bank transactions"),
|
||||
title=_("Permission Denied"),
|
||||
)
|
||||
|
||||
is_company_account, disabled = frappe.get_value(
|
||||
"Bank Account", self.bank_account, ["is_company_account", "disabled"]
|
||||
)
|
||||
if not is_company_account:
|
||||
frappe.throw(
|
||||
_("The bank account is not a company account. Please select a company account"),
|
||||
title=_("Invalid Bank Account"),
|
||||
)
|
||||
|
||||
if disabled:
|
||||
frappe.throw(
|
||||
_("The bank account is disabled. Please enable it"), title=_("Disabled Bank Account")
|
||||
)
|
||||
|
||||
def before_insert(self):
|
||||
data = self.get_data()
|
||||
|
||||
self.set_file_properties(data)
|
||||
|
||||
def set_file_properties(self, raw_data: list[list]):
|
||||
self.set_header_row_index(raw_data)
|
||||
|
||||
self.set_column_mapping(raw_data)
|
||||
|
||||
transaction_rows, transaction_starting_index, transaction_ending_index = self.get_transaction_rows(
|
||||
raw_data
|
||||
)
|
||||
|
||||
self.detected_transaction_starting_index = transaction_starting_index
|
||||
self.detected_transaction_ending_index = transaction_ending_index
|
||||
|
||||
self.number_of_transactions = len(transaction_rows)
|
||||
|
||||
date_format, amount_format = get_file_properties(transaction_rows)
|
||||
|
||||
self.detected_amount_format = amount_format
|
||||
self.detected_date_format = date_format
|
||||
|
||||
self.set_closing_balance(transaction_rows)
|
||||
|
||||
self.set_total_debits_and_credits(transaction_rows=transaction_rows)
|
||||
|
||||
def set_total_debits_and_credits(self, transaction_rows: list):
|
||||
"""
|
||||
Given the transaction rows, try to set the total debits and credits
|
||||
"""
|
||||
|
||||
total_debits = 0
|
||||
total_credits = 0
|
||||
debit_transactions = 0
|
||||
credit_transactions = 0
|
||||
|
||||
final_transactions = self.get_final_transactions(transaction_rows=transaction_rows)
|
||||
|
||||
for transaction in final_transactions:
|
||||
withdrawal = transaction.get("withdrawal", 0) or 0
|
||||
deposit = transaction.get("deposit", 0) or 0
|
||||
if withdrawal > 0:
|
||||
total_debits += withdrawal
|
||||
debit_transactions += 1
|
||||
if deposit > 0:
|
||||
total_credits += deposit
|
||||
credit_transactions += 1
|
||||
|
||||
self.total_debits = total_debits
|
||||
self.total_credits = total_credits
|
||||
self.total_debit_transactions = debit_transactions
|
||||
self.total_credit_transactions = credit_transactions
|
||||
|
||||
def get_data(self):
|
||||
"""
|
||||
Extract the data from the attached file
|
||||
"""
|
||||
|
||||
file_doc = frappe.get_doc("File", {"file_url": self.file})
|
||||
|
||||
parts = file_doc.get_extension()
|
||||
extension = parts[1]
|
||||
content = file_doc.get_content()
|
||||
|
||||
if extension.lower() not in (".csv", ".xlsx", ".xls"):
|
||||
frappe.throw(
|
||||
_("Import template should be of type .csv, .xlsx or .xls"), title=_("Invalid File Type")
|
||||
)
|
||||
|
||||
if extension.lower() == ".csv":
|
||||
data = read_csv_content(content)
|
||||
elif extension.lower() == ".xlsx":
|
||||
data = read_xlsx_file_from_attached_file(fcontent=content)
|
||||
elif extension.lower() == ".xls":
|
||||
data = read_xls_file_from_attached_file(content)
|
||||
|
||||
return data
|
||||
|
||||
def set_header_row_index(self, data: list[list[str]]):
|
||||
"""
|
||||
Given the data, try to get the row index of the header row.
|
||||
"""
|
||||
|
||||
row_index = 0
|
||||
max_valid_columns = 0
|
||||
|
||||
# Loop over rows and find the first row that has the most number of "valid" column headers
|
||||
# Valid columns is based on keywords present in each cell
|
||||
|
||||
for idx, row in enumerate(data):
|
||||
valid_columns = 0
|
||||
for cell in row:
|
||||
if not cell:
|
||||
continue
|
||||
|
||||
# If cell is a string, then we need to check if it contains any of the keywords
|
||||
if not isinstance(cell, str):
|
||||
continue
|
||||
|
||||
if any(
|
||||
keyword in cell.lower()
|
||||
for keyword in [
|
||||
"date",
|
||||
"amount",
|
||||
"description",
|
||||
"reference",
|
||||
"transaction",
|
||||
"type",
|
||||
"cr",
|
||||
"dr",
|
||||
"deposit",
|
||||
"withdrawal",
|
||||
"balance",
|
||||
]
|
||||
):
|
||||
valid_columns += 1
|
||||
if valid_columns > max_valid_columns:
|
||||
max_valid_columns = valid_columns
|
||||
row_index = idx
|
||||
|
||||
self.detected_header_index = row_index
|
||||
|
||||
def set_column_mapping(self, data: list[list[str]]):
|
||||
"""
|
||||
Given the header row, try to map each column index to a standard variable, or set it to "Do not import"
|
||||
"""
|
||||
|
||||
header_row = data[self.detected_header_index]
|
||||
|
||||
standard_variables = {
|
||||
"Date": ["date", "transaction date"],
|
||||
"Debit/Credit": [
|
||||
"transaction type",
|
||||
"cr/dr",
|
||||
"dr/cr",
|
||||
"debit/credit",
|
||||
"credit/debit",
|
||||
"debit / credit",
|
||||
"credit / debit",
|
||||
],
|
||||
"Withdrawal": ["withdrawal", "debit"],
|
||||
"Deposit": ["deposit", "credit"],
|
||||
"Amount": ["amount"],
|
||||
"Description": ["description", "particulars", "remarks", "narration", "detail", "reference"],
|
||||
"Reference": ["reference", "ref", "tran id", "transaction id", "cheque", "check", "id", "chq"],
|
||||
"Balance": ["balance"],
|
||||
}
|
||||
|
||||
# A standard variable can be represented by multiple names
|
||||
|
||||
column_mapping = {}
|
||||
|
||||
# Loop over all columns and check if they contain any of the standard variable names
|
||||
# If not, we do not import it
|
||||
# If they do, we map the column index to the standard variable
|
||||
|
||||
columns = []
|
||||
|
||||
for idx, cell in enumerate(header_row):
|
||||
if not cell:
|
||||
continue
|
||||
|
||||
if not isinstance(cell, str):
|
||||
continue
|
||||
|
||||
column = {
|
||||
"index": idx,
|
||||
"header_text": cell,
|
||||
"variable": cell.strip().lower().replace(" ", "_").replace("?", "").replace(".", ""),
|
||||
"maps_to": "Do not import",
|
||||
}
|
||||
|
||||
for standard_variable, names in standard_variables.items():
|
||||
if any(name in cell.lower().replace(".", "") for name in names):
|
||||
if column_mapping.get(standard_variable, None) is None:
|
||||
column["maps_to"] = standard_variable
|
||||
|
||||
column_mapping[standard_variable] = idx
|
||||
|
||||
break
|
||||
|
||||
columns.append(column)
|
||||
|
||||
self.column_mapping = []
|
||||
|
||||
for col in columns:
|
||||
self.append(
|
||||
"column_mapping",
|
||||
{
|
||||
"header_text": col["header_text"],
|
||||
"variable": col["variable"],
|
||||
"maps_to": col["maps_to"],
|
||||
"index": col["index"],
|
||||
},
|
||||
)
|
||||
|
||||
def get_transaction_rows(self, data: list[list[str]]):
|
||||
"""
|
||||
Given the data, header index and column mapping, try to get the transaction rows
|
||||
|
||||
For each row after the header row, check if the data makes sense - date column should have a date,
|
||||
amount column should be a number after removing any special charatcers, spaces and "CR/DR" text.
|
||||
Balance column should be a number after removing any special charatcers, spaces and "CR/DR" text.
|
||||
"""
|
||||
|
||||
column_mapping: dict[str, int] = {}
|
||||
for column in self.column_mapping:
|
||||
if column.maps_to != "Do not import":
|
||||
column_mapping[column.maps_to] = column.index
|
||||
|
||||
transaction_rows = []
|
||||
|
||||
transaction_starting_index = None
|
||||
transaction_ending_index = None
|
||||
|
||||
valid_rows = data[self.detected_header_index + 1 :]
|
||||
|
||||
column_map_keys = column_mapping.keys()
|
||||
|
||||
for row_index, row in enumerate(valid_rows):
|
||||
date = row[column_mapping["Date"]] if "Date" in column_map_keys else None
|
||||
amount = row[column_mapping["Amount"]] if "Amount" in column_map_keys else None
|
||||
withdrawal = row[column_mapping["Withdrawal"]] if "Withdrawal" in column_map_keys else None
|
||||
deposit = row[column_mapping["Deposit"]] if "Deposit" in column_map_keys else None
|
||||
balance = row[column_mapping["Balance"]] if "Balance" in column_map_keys else None
|
||||
|
||||
if not date:
|
||||
continue
|
||||
|
||||
if isinstance(date, datetime):
|
||||
date = date.strftime("%Y-%m-%d")
|
||||
|
||||
if not isinstance(date, str):
|
||||
continue
|
||||
|
||||
if not amount and not withdrawal and not deposit:
|
||||
continue
|
||||
|
||||
# Check if date column is a valid date
|
||||
row_date_format = frappe.utils.guess_date_format(date)
|
||||
|
||||
if not row_date_format:
|
||||
continue
|
||||
|
||||
# Check if either the amount, withdrawal or deposit column is a valid number
|
||||
amount = get_float_amount(amount)
|
||||
withdrawal = get_float_amount(withdrawal)
|
||||
deposit = get_float_amount(deposit)
|
||||
balance = get_float_amount(balance)
|
||||
|
||||
if not amount and not withdrawal and not deposit:
|
||||
continue
|
||||
|
||||
if transaction_starting_index is None:
|
||||
transaction_starting_index = row_index
|
||||
|
||||
transaction_ending_index = row_index
|
||||
|
||||
transaction_row = {
|
||||
"date_format": row_date_format,
|
||||
}
|
||||
|
||||
# Populate the raw transaction row as is - without any formatting
|
||||
|
||||
field_map = {
|
||||
"Date": "date",
|
||||
"Amount": "amount",
|
||||
"Withdrawal": "withdrawal",
|
||||
"Deposit": "deposit",
|
||||
"Balance": "balance",
|
||||
"Reference": "reference",
|
||||
"Description": "description",
|
||||
"Debit/Credit": "debit_credit",
|
||||
"Transaction Type": "transaction_type",
|
||||
"Included Fee": "included_fee",
|
||||
"Excluded Fee": "excluded_fee",
|
||||
"Party Name/Account Holder": "party_name",
|
||||
"Party Account No.": "party_account_number",
|
||||
"Party IBAN": "party_iban",
|
||||
}
|
||||
|
||||
for source_field, target_field in field_map.items():
|
||||
if source_field in column_map_keys:
|
||||
transaction_row[target_field] = row[column_mapping[source_field]]
|
||||
|
||||
transaction_rows.append(transaction_row)
|
||||
|
||||
base_index = self.detected_header_index + 1
|
||||
|
||||
if transaction_starting_index is not None:
|
||||
transaction_starting_index += base_index
|
||||
|
||||
if transaction_ending_index is not None:
|
||||
transaction_ending_index += base_index
|
||||
|
||||
return transaction_rows, transaction_starting_index, transaction_ending_index
|
||||
|
||||
def set_closing_balance(self, transactions: list):
|
||||
"""
|
||||
Given the transactions and date format, try to get the statement start date, end date and closing balance
|
||||
"""
|
||||
|
||||
statement_start_date = None
|
||||
statement_end_date = None
|
||||
closing_balance = None
|
||||
|
||||
date_format = self.detected_date_format
|
||||
|
||||
for transaction in transactions:
|
||||
date = transaction.get("date")
|
||||
if not date:
|
||||
continue
|
||||
|
||||
if isinstance(date, datetime):
|
||||
tx_date = date
|
||||
else:
|
||||
tx_date = datetime.strptime(date, date_format)
|
||||
|
||||
if statement_start_date is None or tx_date < statement_start_date:
|
||||
statement_start_date = tx_date
|
||||
|
||||
if statement_end_date is None or tx_date >= statement_end_date:
|
||||
statement_end_date = tx_date
|
||||
|
||||
closing_balance = transaction.get("balance")
|
||||
|
||||
self.start_date = getdate(statement_start_date)
|
||||
self.end_date = getdate(statement_end_date)
|
||||
self.closing_balance = get_float_amount(closing_balance)
|
||||
|
||||
def get_final_transactions(self, transaction_rows: list):
|
||||
"""
|
||||
Given the parameters detected in the statement (including overrides) try to get the final transactions
|
||||
"""
|
||||
|
||||
date_format = self.detected_date_format
|
||||
amount_format = self.detected_amount_format
|
||||
|
||||
final_transactions = []
|
||||
|
||||
def parse_amount(transaction_row: dict):
|
||||
"""
|
||||
Given a transaction row, try to parse the amount - returns tuple of (withdrawal, deposit)
|
||||
"""
|
||||
|
||||
if amount_format == "Separate columns for withdrawal and deposit":
|
||||
return get_float_amount(transaction_row.get("withdrawal")), get_float_amount(
|
||||
transaction_row.get("deposit")
|
||||
)
|
||||
|
||||
if amount_format == 'Amount column has "CR"/"DR" values':
|
||||
amount = transaction_row.get("amount")
|
||||
float_amount = get_float_amount(amount)
|
||||
if "cr" in amount.lower():
|
||||
return 0, float_amount
|
||||
else:
|
||||
return float_amount, 0
|
||||
|
||||
if amount_format == "Amount column has positive/negative values":
|
||||
amount = get_float_amount(transaction_row.get("amount", "0"))
|
||||
if amount > 0:
|
||||
return 0, abs(amount)
|
||||
else:
|
||||
return abs(amount), 0
|
||||
|
||||
if amount_format == 'Transaction type column has "CR"/"DR" values':
|
||||
transaction_type = transaction_row.get("debit_credit")
|
||||
amount = get_float_amount(transaction_row.get("amount", "0"))
|
||||
if "cr" in transaction_type.lower():
|
||||
return 0, abs(amount)
|
||||
else:
|
||||
return abs(amount), 0
|
||||
|
||||
if amount_format == 'Transaction type column has "C"/"D" values':
|
||||
transaction_type = transaction_row.get("debit_credit")
|
||||
amount = get_float_amount(transaction_row.get("amount", "0"))
|
||||
if transaction_type.lower().strip() == "c":
|
||||
return 0, abs(amount)
|
||||
else:
|
||||
return abs(amount), 0
|
||||
|
||||
if amount_format == 'Transaction type column has "Deposit"/"Withdrawal" values':
|
||||
transaction_type = transaction_row.get("debit_credit")
|
||||
amount = get_float_amount(transaction_row.get("amount", "0"))
|
||||
if "deposit" in transaction_type.lower():
|
||||
return 0, abs(amount)
|
||||
else:
|
||||
return abs(amount), 0
|
||||
|
||||
return 0, 0
|
||||
|
||||
for transaction in transaction_rows:
|
||||
date = transaction.get("date")
|
||||
|
||||
if isinstance(date, datetime):
|
||||
date = date.strftime("%Y-%m-%d")
|
||||
else:
|
||||
date = datetime.strptime(date, date_format).strftime("%Y-%m-%d")
|
||||
|
||||
withdrawal, deposit = parse_amount(transaction)
|
||||
final_transactions.append(
|
||||
{
|
||||
**transaction,
|
||||
"date": date,
|
||||
"withdrawal": withdrawal,
|
||||
"deposit": deposit,
|
||||
}
|
||||
)
|
||||
|
||||
return final_transactions
|
||||
|
||||
@frappe.whitelist(methods=["POST"])
|
||||
def insert_transactions(self):
|
||||
if self.status == "Completed":
|
||||
return
|
||||
|
||||
company, account, is_company_account, disabled = frappe.get_value(
|
||||
"Bank Account", self.bank_account, ["company", "account", "is_company_account", "disabled"]
|
||||
)
|
||||
if not is_company_account:
|
||||
frappe.throw(
|
||||
_("The bank account is not a company account. Please select a company account"),
|
||||
title=_("Invalid Bank Account"),
|
||||
)
|
||||
|
||||
if disabled:
|
||||
frappe.throw(
|
||||
_("The bank account is disabled. Please enable it"), title=_("Disabled Bank Account")
|
||||
)
|
||||
|
||||
currency = frappe.get_value("Account", account, "account_currency")
|
||||
|
||||
progress = 0
|
||||
|
||||
raw_data = self.get_data()
|
||||
transaction_rows, transaction_starting_index, transaction_ending_index = self.get_transaction_rows(
|
||||
raw_data
|
||||
)
|
||||
|
||||
final_transactions = self.get_final_transactions(transaction_rows=transaction_rows)
|
||||
|
||||
total_transactions = len(final_transactions)
|
||||
|
||||
for transaction in final_transactions:
|
||||
bank_tx = frappe.get_doc(
|
||||
{
|
||||
"doctype": "Bank Transaction",
|
||||
"date": transaction.get("date"),
|
||||
"status": "Unreconciled",
|
||||
"bank_account": self.bank_account,
|
||||
"withdrawal": transaction.get("withdrawal"),
|
||||
"deposit": transaction.get("deposit"),
|
||||
"description": transaction.get("description"),
|
||||
"reference_number": transaction.get("reference"),
|
||||
"transaction_type": transaction.get("transaction_type"),
|
||||
"currency": currency,
|
||||
"company": company,
|
||||
}
|
||||
)
|
||||
bank_tx.insert()
|
||||
bank_tx.submit()
|
||||
progress += 1
|
||||
|
||||
frappe.publish_realtime(
|
||||
"bank-rec-statement-import-progress",
|
||||
{
|
||||
"progress": round(progress / total_transactions * 100),
|
||||
},
|
||||
doctype="Bank Statement Import Log",
|
||||
docname=self.name,
|
||||
)
|
||||
|
||||
frappe.publish_realtime(
|
||||
"bank-rec-statement-import-progress",
|
||||
{
|
||||
"progress": 100,
|
||||
"total": total_transactions,
|
||||
},
|
||||
doctype="Bank Statement Import Log",
|
||||
docname=self.name,
|
||||
)
|
||||
|
||||
if self.closing_balance and self.closing_balance > 0 and self.end_date:
|
||||
set_closing_balance_as_per_statement(
|
||||
self.bank_account, frappe.utils.getdate(self.end_date), self.closing_balance
|
||||
)
|
||||
|
||||
from erpnext.accounts.doctype.bank_transaction_rule.bank_transaction_rule import run_rule_evaluation
|
||||
|
||||
run_rule_evaluation()
|
||||
|
||||
self.status = "Completed"
|
||||
self.save()
|
||||
|
||||
|
||||
def get_float_amount(amount):
|
||||
if not amount:
|
||||
return None
|
||||
|
||||
if isinstance(amount, str):
|
||||
amount = amount.lower().replace(",", "").replace(" ", "").replace("cr", "").replace("dr", "")
|
||||
# Remove any other alphabets and currency symbols - do not remove the minus or decimal sign
|
||||
amount = re.sub(r"[^\d.-]", "", amount)
|
||||
try:
|
||||
amount = float(amount)
|
||||
except ValueError:
|
||||
return None
|
||||
elif isinstance(amount, int):
|
||||
amount = float(amount)
|
||||
else:
|
||||
try:
|
||||
amount = float(amount)
|
||||
except ValueError:
|
||||
return None
|
||||
|
||||
return amount
|
||||
|
||||
|
||||
def get_file_properties(transactions: list):
|
||||
"""
|
||||
From the transaction rows, try to figure out the following:
|
||||
1. Most common date format
|
||||
2. Amount format - does it contain "CR/Dr" text or is it in a separate column (maybe transaction type?). Amount could also be positive and negative.
|
||||
"""
|
||||
|
||||
date_format_frequency = {
|
||||
"%d/%m/%Y": 0,
|
||||
}
|
||||
|
||||
amount_format_frequency = {
|
||||
"Separate columns for withdrawal and deposit": 0,
|
||||
'Amount column has "CR"/"DR" values': 0,
|
||||
"Amount column has positive/negative values": 0,
|
||||
'Transaction type column has "CR"/"DR" values': 0,
|
||||
'Transaction type column has "Deposit"/"Withdrawal" values': 0,
|
||||
'Transaction type column has "C"/"D" values': 0,
|
||||
}
|
||||
|
||||
for transaction in transactions:
|
||||
date_format = transaction.get("date_format")
|
||||
|
||||
if date_format:
|
||||
date_format_frequency[date_format] = date_format_frequency.get(date_format, 0) + 1
|
||||
|
||||
# Check if there's an amount column
|
||||
# If there's a separate column for withdrawal and deposit, we can skip this
|
||||
if transaction.get("withdrawal", None) or transaction.get("deposit", None):
|
||||
amount_format_frequency["Separate columns for withdrawal and deposit"] += 1
|
||||
continue
|
||||
|
||||
amount = transaction.get("amount", None)
|
||||
|
||||
if not amount:
|
||||
continue
|
||||
|
||||
if isinstance(amount, str) and ("cr" in amount.lower() or "dr" in amount.lower()):
|
||||
amount_format_frequency['Amount column has "CR"/"DR" values'] += 1
|
||||
|
||||
# Check if there's a debit_credit column containing "cr"/"dr"
|
||||
if transaction.get("debit_credit", None):
|
||||
if (
|
||||
"cr" in transaction.get("debit_credit", "").lower()
|
||||
or "dr" in transaction.get("debit_credit", "").lower()
|
||||
):
|
||||
amount_format_frequency['Transaction type column has "CR"/"DR" values'] += 1
|
||||
elif (
|
||||
"deposit" in transaction.get("debit_credit", "").lower()
|
||||
or "withdrawal" in transaction.get("debit_credit", "").lower()
|
||||
):
|
||||
amount_format_frequency['Transaction type column has "Deposit"/"Withdrawal" values'] += 1
|
||||
elif (transaction.get("debit_credit", "").lower().strip() == "c") or (
|
||||
transaction.get("debit_credit", "").lower().strip() == "d"
|
||||
):
|
||||
amount_format_frequency['Transaction type column has "C"/"D" values'] += 1
|
||||
|
||||
# Else assume that the amount is expressed as positive/negative value
|
||||
else:
|
||||
amount_format_frequency["Amount column has positive/negative values"] += 1
|
||||
|
||||
most_common_date_format = max(date_format_frequency, key=date_format_frequency.get)
|
||||
most_common_amount_format = max(amount_format_frequency, key=amount_format_frequency.get)
|
||||
|
||||
return most_common_date_format, most_common_amount_format
|
||||
|
||||
|
||||
@frappe.whitelist(methods=["GET"])
|
||||
def get_statement_details(statement_import_id: str):
|
||||
doc = frappe.get_doc("Bank Statement Import Log", statement_import_id)
|
||||
|
||||
doc.check_permission()
|
||||
|
||||
# Get the final transactions and check for conflicts
|
||||
|
||||
char_map = {
|
||||
"%d": "DD",
|
||||
"%m": "MM",
|
||||
"%Y": "YYYY",
|
||||
"%y": "YY",
|
||||
"%b": "MMM",
|
||||
"%B": "MMMM",
|
||||
"%H": "HH",
|
||||
"%M": "mm",
|
||||
"%S": "ss",
|
||||
}
|
||||
formatted_date_format = doc.detected_date_format
|
||||
|
||||
for char, replacement in char_map.items():
|
||||
formatted_date_format = formatted_date_format.replace(char, replacement)
|
||||
|
||||
conflicting_transactions = check_for_conflicts(doc.bank_account, doc.start_date, doc.end_date)
|
||||
|
||||
raw_data = doc.get_data()
|
||||
|
||||
transaction_rows, transaction_starting_index, transaction_ending_index = doc.get_transaction_rows(
|
||||
raw_data
|
||||
)
|
||||
|
||||
final_transactions = doc.get_final_transactions(transaction_rows=transaction_rows)
|
||||
|
||||
return {
|
||||
"doc": doc,
|
||||
"date_format": formatted_date_format,
|
||||
"conflicting_transactions": conflicting_transactions,
|
||||
"final_transactions": final_transactions,
|
||||
"raw_data": raw_data,
|
||||
}
|
||||
|
||||
|
||||
def check_for_conflicts(bank_account: str, start_date: str, end_date: str):
|
||||
"""
|
||||
Given a bank account, start date and end date, check if there are any conflicts with existing bank transactions
|
||||
"""
|
||||
|
||||
conflicts = frappe.get_all(
|
||||
"Bank Transaction",
|
||||
filters={
|
||||
"bank_account": bank_account,
|
||||
"date": ["between", [start_date, end_date]],
|
||||
"docstatus": 1,
|
||||
},
|
||||
fields=["name", "date", "withdrawal", "deposit", "description", "reference_number", "currency"],
|
||||
order_by="date",
|
||||
)
|
||||
|
||||
return conflicts
|
||||
@@ -0,0 +1,349 @@
|
||||
# Copyright (c) 2026, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# See license.txt
|
||||
|
||||
import frappe
|
||||
from frappe import qb
|
||||
from frappe.utils import getdate
|
||||
|
||||
from erpnext.accounts.doctype.bank_statement_import_log.bank_statement_import_log import (
|
||||
BankStatementImportLog,
|
||||
get_float_amount,
|
||||
)
|
||||
from erpnext.accounts.test.accounts_mixin import AccountsTestMixin
|
||||
from erpnext.tests.utils import ERPNextTestSuite
|
||||
|
||||
|
||||
class TestBankStatementImportLog(ERPNextTestSuite, AccountsTestMixin):
|
||||
def setUp(self):
|
||||
self.create_company()
|
||||
self.create_customer()
|
||||
self.clear_old_entries()
|
||||
bank_dt = qb.DocType("Bank")
|
||||
qb.from_(bank_dt).delete().where(bank_dt.name == "HDFC").run()
|
||||
self.create_bank_account()
|
||||
|
||||
def create_bank_account(self):
|
||||
bank = frappe.get_doc(
|
||||
{
|
||||
"doctype": "Bank",
|
||||
"bank_name": "HDFC",
|
||||
}
|
||||
).save()
|
||||
|
||||
self.bank_account = (
|
||||
frappe.get_doc(
|
||||
{
|
||||
"doctype": "Bank Account",
|
||||
"account_name": "HDFC _current_",
|
||||
"bank": bank.name,
|
||||
"is_company_account": True,
|
||||
"account": self.bank,
|
||||
"company": self.company,
|
||||
}
|
||||
)
|
||||
.insert()
|
||||
.name
|
||||
)
|
||||
|
||||
def _create_bank_statement_import_log(self, test_data: list[list[str]]):
|
||||
doc = frappe.get_doc(
|
||||
{
|
||||
"doctype": "Bank Statement Import Log",
|
||||
"bank_account": self.bank_account,
|
||||
}
|
||||
)
|
||||
|
||||
doc.set_file_properties(test_data)
|
||||
return doc
|
||||
|
||||
def get_column_map(self, doc: BankStatementImportLog):
|
||||
column_map: dict[str, int] = {}
|
||||
for column in doc.column_mapping:
|
||||
column_map[column.maps_to] = column.index
|
||||
return column_map
|
||||
|
||||
def _check_output(self, doc: BankStatementImportLog, expected_output: dict):
|
||||
fields_to_check = [
|
||||
"number_of_transactions",
|
||||
"detected_date_format",
|
||||
"detected_amount_format",
|
||||
"detected_header_index",
|
||||
"detected_transaction_starting_index",
|
||||
"detected_transaction_ending_index",
|
||||
"closing_balance",
|
||||
"total_debits",
|
||||
"total_credits",
|
||||
"total_debit_transactions",
|
||||
"total_credit_transactions",
|
||||
"start_date",
|
||||
"end_date",
|
||||
]
|
||||
for field in fields_to_check:
|
||||
self.assertEqual(getattr(doc, field), expected_output[field])
|
||||
|
||||
column_map = self.get_column_map(doc)
|
||||
|
||||
for field, column_index in expected_output["column_mapping"].items():
|
||||
self.assertEqual(column_map[field], column_index)
|
||||
|
||||
def test_sample_statement_import_log(self):
|
||||
test_data = [
|
||||
[test_hdfc_sample_statement_data, test_hdfc_expected_output],
|
||||
[test_icici_sample_statement_data, test_icici_expected_output],
|
||||
[test_axis_sample_statement_data, test_axis_expected_output],
|
||||
[test_amount_with_currency_data, test_amount_with_currency_expected_output],
|
||||
]
|
||||
for data, expected_output in test_data:
|
||||
doc = self._create_bank_statement_import_log(data)
|
||||
self._check_output(doc, expected_output)
|
||||
|
||||
def test_amount_parser(self):
|
||||
# Parse numeric strings after removing all characters except digits, decimal point, and minus sign
|
||||
self.assertEqual(get_float_amount("100.27"), 100.27)
|
||||
self.assertEqual(get_float_amount("100.20 INR"), 100.20)
|
||||
self.assertEqual(get_float_amount("1,000.20 INR"), 1000.20)
|
||||
self.assertEqual(get_float_amount("-1,000.34 INR"), -1000.34)
|
||||
self.assertEqual(get_float_amount("100.00 CR"), 100.00)
|
||||
self.assertEqual(get_float_amount("100.00 DR"), 100.00)
|
||||
|
||||
# Numbers should be returned as floats
|
||||
self.assertEqual(get_float_amount(100), 100.00)
|
||||
|
||||
# Random strings and characters should not throw a ValueError but return None
|
||||
self.assertIsNone(get_float_amount("ABCD"))
|
||||
self.assertIsNone(get_float_amount("****"))
|
||||
|
||||
|
||||
test_hdfc_sample_statement_data = [
|
||||
["HDFC BANK Ltd. Page No .: 1 Statement of accounts", "", "", "", "", "", ""],
|
||||
["", "", "", "", "Account Branch :SOBO", "", ""],
|
||||
["Test Company", "", "", "", "Address :Some Address", "", ""],
|
||||
["********", "", "", "", "", "", ""],
|
||||
["Date", "Narration", "Chq./Ref.No.", "Value Dt", "Withdrawal Amt.", "Deposit Amt.", "Closing Balance"],
|
||||
["********", "*********", "************", "********", "*********", "**********", "**********"],
|
||||
["08/08/25", "CRAFTSMAN", "0000252193", "08/08/25", "", 10.0, 574318.9],
|
||||
["08/08/25", "ACH C- PID", "00000020", "08/08/25", "", 100.0, 573918.9],
|
||||
["09/08/25", "UPI-APPLE SERVICES-BILLDESKPG", "0000101169070023", "09/08/25", 5000.0, "", 568918.9],
|
||||
["09/08/25", "UPI-APPLE SERVICES-BILLDESKPG", "0000101174017987", "09/08/25", 10000.0, "", 558518.9],
|
||||
["10/08/25", "UPI-ENTERPRIS-9082053531", "0000109578171801", "10/08/25", 300.0, "", 558218.9],
|
||||
["11/08/25", "HDFC BANK SPL INT DIV 2025-26", "00920", "11/08/25", "", 35.0, 558253.9],
|
||||
["", "", "", "", "", "", ""],
|
||||
["********", "****************", "************", "********", "************", "*********", "*********"],
|
||||
["*********", "", "", "", "", "", ""],
|
||||
["--- End Of Statement ---", "", "", "", "", "", ""],
|
||||
]
|
||||
test_hdfc_expected_output = {
|
||||
"number_of_transactions": 6,
|
||||
"detected_date_format": "%d/%m/%y",
|
||||
"detected_amount_format": "Separate columns for withdrawal and deposit",
|
||||
"detected_header_index": 4,
|
||||
"detected_transaction_starting_index": 6,
|
||||
"detected_transaction_ending_index": 11,
|
||||
"closing_balance": 558253.9,
|
||||
"total_debits": 15300,
|
||||
"total_credits": 145,
|
||||
"total_debit_transactions": 3,
|
||||
"total_credit_transactions": 3,
|
||||
"start_date": getdate("2025-08-08"),
|
||||
"end_date": getdate("2025-08-11"),
|
||||
"column_mapping": {
|
||||
"Date": 0,
|
||||
"Description": 1,
|
||||
"Reference": 2,
|
||||
"Withdrawal": 4,
|
||||
"Deposit": 5,
|
||||
"Balance": 6,
|
||||
},
|
||||
}
|
||||
|
||||
test_icici_sample_statement_data = [
|
||||
["DETAILED STATEMENT", "", "", "", "", "", "", "", ""],
|
||||
[" ", "", "", "", "", "", "", "", ""],
|
||||
[" ", "", "", "", "", "", "", "", ""],
|
||||
[" ", "", "", "", "", "", "", "", ""],
|
||||
[" ", "", "", "", "", "", "", "", ""],
|
||||
["Transactions List -Test Company", "", "", "", "", "", "", "", ""],
|
||||
[
|
||||
"No.",
|
||||
"Transaction ID",
|
||||
"Value Date",
|
||||
"Txn Posted Date",
|
||||
"ChequeNo.",
|
||||
"Description",
|
||||
"Cr/Dr",
|
||||
"Transaction Amount(INR)",
|
||||
"Available Balance(INR)",
|
||||
],
|
||||
[1.0, "S00000001", "15/04/2024", "15/04/2024 02:05:31 PM ", "-", "Mob alrt", "DR", 29.5, 261454.89],
|
||||
[2.0, "S00000002", "19/04/2024", "19/04/2024 04:08:02 PM ", "-", "GIB/0020", "DR", 12600.0, 248854.89],
|
||||
[3.0, "S00000003", "10/05/2024", "10/05/2024 03:32:02 PM ", "-", "Test Co", "CR", 3000000.0, 3248854.89],
|
||||
[4.0, "S00000004", "10/05/2024", "10/05/2024 03:40:50 PM ", "-", "TRF TO", "DR", 3000000.0, 248854.89],
|
||||
[5.0, "S00000005", "20/05/2024", "20/05/2024 03:52:17 PM ", "-", "BIL/MAKE", "DR", 68811.0, 180043.89],
|
||||
[6.0, "S00000006", "20/05/2024", "20/05/2024 03:55:27 PM ", "-", "BIL/MAKE", "DR", 40126.0, 139917.89],
|
||||
[7.0, "S00000007", "31/05/2024", "31/05/2024 03:42:34 PM ", "-", "NEFT-FRAPPE", "CR", 32400.0, 172317.89],
|
||||
[8.0, "S00000008", "24/06/2024", "24/06/2024 04:09:25 PM ", "-", "GIB/STAX", "DR", 2500.0, 169817.89],
|
||||
[
|
||||
9.0,
|
||||
"S00000009",
|
||||
"24/06/2024",
|
||||
"24/06/2024 04:15:37 PM ",
|
||||
"-",
|
||||
"BIL/ONL/00085",
|
||||
"DR",
|
||||
2150.0,
|
||||
167667.89,
|
||||
],
|
||||
[
|
||||
10.0,
|
||||
"S00000010",
|
||||
"05/07/2024",
|
||||
"05/07/2024 05:50:10 PM ",
|
||||
"-",
|
||||
"NEFT-N18724",
|
||||
"CR",
|
||||
75600.0,
|
||||
243267.89,
|
||||
],
|
||||
[11.0, "S00000011", "30/07/2024", "30/07/2024 12:18:01 PM ", "-", "Mob al", "DR", 29.5, 243238.39],
|
||||
[12.0, "S00000012", "01/08/2024", "01/08/2024 12:45:49 PM ", "-", "NEFT-N214", "CR", 117720.0, 360958.39],
|
||||
]
|
||||
test_icici_expected_output = {
|
||||
"number_of_transactions": 12,
|
||||
"detected_date_format": "%d/%m/%Y",
|
||||
"detected_amount_format": 'Transaction type column has "CR"/"DR" values',
|
||||
"detected_header_index": 6,
|
||||
"detected_transaction_starting_index": 7,
|
||||
"detected_transaction_ending_index": 18,
|
||||
"closing_balance": 360958.39,
|
||||
"total_debits": 3126246.0,
|
||||
"total_credits": 3225720.0,
|
||||
"total_debit_transactions": 8,
|
||||
"total_credit_transactions": 4,
|
||||
"start_date": getdate("2024-04-15"),
|
||||
"end_date": getdate("2024-08-01"),
|
||||
"column_mapping": {
|
||||
"Date": 2,
|
||||
"Description": 5,
|
||||
"Reference": 1,
|
||||
"Debit/Credit": 6,
|
||||
"Amount": 7,
|
||||
"Balance": 8,
|
||||
},
|
||||
}
|
||||
|
||||
test_axis_sample_statement_data = [
|
||||
["Name :- XXXXXXXX", None, None, None, None, None, None, None, None, None, None],
|
||||
["Joint Holder :-- ", None, None, None, None, None, None, None, None, None, None],
|
||||
[None, None, None, None, None, None, None, None, None, None, None],
|
||||
[None, None, None, None, None, None, None, None, None, None, None],
|
||||
[
|
||||
"Statement",
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
],
|
||||
[None, None, None, None, None, None, None, None, None, None, None],
|
||||
[
|
||||
"S.NO",
|
||||
"Transaction Date (dd/mm/yyyy)",
|
||||
"Value Date (dd/mm/yyyy)",
|
||||
"Particulars",
|
||||
"Amount(INR)",
|
||||
"Debit/Credit",
|
||||
"Balance(INR)",
|
||||
"Cheque Number",
|
||||
"Branch Name(SOL)",
|
||||
None,
|
||||
None,
|
||||
],
|
||||
["1", "", "", "OPENING BAL", "", "", "3,25,867.05", "", "NAG MH", None, None],
|
||||
["2", "05/04/2026", "05/04/2026", "NEFT", "59,000.00", "CR", "3,84,867.05", "", "NAG", None, None],
|
||||
[
|
||||
"3",
|
||||
"05/04/2026",
|
||||
"05/04/2026",
|
||||
"XXXInt.Coll",
|
||||
"1,13,969.00",
|
||||
"DR",
|
||||
"2,70,898.05",
|
||||
"",
|
||||
"NAG",
|
||||
None,
|
||||
None,
|
||||
],
|
||||
["4", "", "", "TOTAL DR/CR", "1,13,969.00/59,000.00", "", "", "", "NAG", None, None],
|
||||
["5", "", "", "CLOSING BAL", "", "", "2,70,898.05", "", "NAG", None, None],
|
||||
]
|
||||
test_axis_expected_output = {
|
||||
"number_of_transactions": 2,
|
||||
"detected_date_format": "%d/%m/%Y",
|
||||
"detected_amount_format": 'Transaction type column has "CR"/"DR" values',
|
||||
"detected_header_index": 6,
|
||||
"detected_transaction_starting_index": 8,
|
||||
"detected_transaction_ending_index": 9,
|
||||
"closing_balance": 270898.05,
|
||||
"total_debits": 113969.00,
|
||||
"total_credits": 59000.00,
|
||||
"total_debit_transactions": 1,
|
||||
"total_credit_transactions": 1,
|
||||
"start_date": getdate("2026-04-05"),
|
||||
"end_date": getdate("2026-04-05"),
|
||||
"column_mapping": {
|
||||
"Date": 1,
|
||||
"Description": 3,
|
||||
"Reference": 7,
|
||||
"Debit/Credit": 5,
|
||||
"Amount": 4,
|
||||
"Balance": 6,
|
||||
},
|
||||
}
|
||||
|
||||
test_amount_with_currency_data = [
|
||||
["Statement"],
|
||||
["Opening Balance: INR 1,11,71,360.24"],
|
||||
[
|
||||
"S. No.",
|
||||
"Transaction Date",
|
||||
"Transaction ID",
|
||||
"Transaction Serial Number",
|
||||
"Cheque Number",
|
||||
"Transaction Particulars",
|
||||
"Remarks",
|
||||
"Debit Amount",
|
||||
"Credit Amount",
|
||||
],
|
||||
[2, "01/04/2026", "S68420508", "1", "", "INB/NEFT/AXODH091982", "GP2026", "INR 25,236.00", ""],
|
||||
[3, "01/04/2026", "S68517082", "1", "", "INB/RTGS/UTIBR620", "GP202", "INR 5,52,386.00", ""],
|
||||
[4, "01/04/2026", "S68543043", "1", "", "INB/RTGS/UTIBR62", "7072L", "INR 3,55,791.00", ""],
|
||||
[None, None, None, None, None, None, None, None, None],
|
||||
["Closing Balance: INR -5,89,376.74", None, None, None, None, None, None, None, None],
|
||||
]
|
||||
test_amount_with_currency_expected_output = {
|
||||
"number_of_transactions": 3,
|
||||
"detected_date_format": "%d/%m/%Y",
|
||||
"detected_amount_format": "Separate columns for withdrawal and deposit",
|
||||
"detected_header_index": 2,
|
||||
"detected_transaction_starting_index": 3,
|
||||
"detected_transaction_ending_index": 5,
|
||||
"closing_balance": None,
|
||||
"total_debits": 933413.00,
|
||||
"total_credits": 0,
|
||||
"total_debit_transactions": 3,
|
||||
"total_credit_transactions": 0,
|
||||
"start_date": getdate("2026-04-01"),
|
||||
"end_date": getdate("2026-04-01"),
|
||||
"column_mapping": {
|
||||
"Date": 1,
|
||||
"Description": 5,
|
||||
"Reference": 2,
|
||||
"Withdrawal": 7,
|
||||
"Deposit": 8,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"actions": [],
|
||||
"allow_bulk_edit": 1,
|
||||
"allow_rename": 1,
|
||||
"creation": "2026-05-06 11:02:27.133576",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"header_text",
|
||||
"index",
|
||||
"maps_to",
|
||||
"variable"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "header_text",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 1,
|
||||
"label": "Header Text",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "maps_to",
|
||||
"fieldtype": "Select",
|
||||
"in_list_view": 1,
|
||||
"label": "Maps To",
|
||||
"options": "Do not import\nDate\nWithdrawal\nDeposit\nAmount\nDescription\nReference\nTransaction Type\nDebit/Credit\nBalance\nIncluded Fee\nExcluded Fee\nParty Name/Account Holder\nParty Account No.\nParty IBAN",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "index",
|
||||
"fieldtype": "Int",
|
||||
"in_list_view": 1,
|
||||
"label": "Index",
|
||||
"non_negative": 1,
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "variable",
|
||||
"fieldtype": "Data",
|
||||
"label": "Variable"
|
||||
}
|
||||
],
|
||||
"grid_page_length": 50,
|
||||
"index_web_pages_for_search": 1,
|
||||
"istable": 1,
|
||||
"links": [],
|
||||
"modified": "2026-05-06 15:59:12.465092",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Bank Statement Import Log Column Map",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"row_format": "Dynamic",
|
||||
"rows_threshold_for_grid_search": 20,
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
# Copyright (c) 2026, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class BankStatementImportLogColumnMap(Document):
|
||||
# begin: auto-generated types
|
||||
# This code is auto-generated. Do not modify anything in this block.
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from frappe.types import DF
|
||||
|
||||
header_text: DF.Data
|
||||
index: DF.Int
|
||||
maps_to: DF.Literal[
|
||||
"Do not import",
|
||||
"Date",
|
||||
"Withdrawal",
|
||||
"Deposit",
|
||||
"Amount",
|
||||
"Description",
|
||||
"Reference",
|
||||
"Transaction Type",
|
||||
"Debit/Credit",
|
||||
"Balance",
|
||||
"Included Fee",
|
||||
"Excluded Fee",
|
||||
"Party Name/Account Holder",
|
||||
"Party Account No.",
|
||||
"Party IBAN",
|
||||
]
|
||||
parent: DF.Data
|
||||
parentfield: DF.Data
|
||||
parenttype: DF.Data
|
||||
variable: DF.Data | None
|
||||
# end: auto-generated types
|
||||
|
||||
pass
|
||||
@@ -9,6 +9,8 @@
|
||||
"field_order": [
|
||||
"naming_series",
|
||||
"date",
|
||||
"is_rule_evaluated",
|
||||
"matched_transaction_rule",
|
||||
"column_break_2",
|
||||
"status",
|
||||
"bank_account",
|
||||
@@ -256,12 +258,28 @@
|
||||
"label": "Excluded Fee",
|
||||
"non_negative": 1,
|
||||
"options": "currency"
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 1,
|
||||
"default": "0",
|
||||
"fieldname": "is_rule_evaluated",
|
||||
"fieldtype": "Check",
|
||||
"label": "Is Rule Evaluated",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 1,
|
||||
"fieldname": "matched_transaction_rule",
|
||||
"fieldtype": "Link",
|
||||
"label": "Matched Transaction Rule",
|
||||
"options": "Bank Transaction Rule",
|
||||
"read_only": 1
|
||||
}
|
||||
],
|
||||
"grid_page_length": 50,
|
||||
"is_submittable": 1,
|
||||
"links": [],
|
||||
"modified": "2025-12-07 20:49:18.600757",
|
||||
"modified": "2026-04-11 20:41:15.124085",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Bank Transaction",
|
||||
|
||||
@@ -34,6 +34,8 @@ class BankTransaction(Document):
|
||||
description: DF.SmallText | None
|
||||
excluded_fee: DF.Currency
|
||||
included_fee: DF.Currency
|
||||
is_rule_evaluated: DF.Check
|
||||
matched_transaction_rule: DF.Link | None
|
||||
naming_series: DF.Literal["ACC-BTN-.YYYY.-"]
|
||||
party: DF.DynamicLink | None
|
||||
party_type: DF.Link | None
|
||||
@@ -146,8 +148,13 @@ class BankTransaction(Document):
|
||||
|
||||
self.set_status()
|
||||
|
||||
def add_payment_entries(self, vouchers):
|
||||
"Add the vouchers with zero allocation. Save() will perform the allocations and clearance"
|
||||
def add_payment_entries(self, vouchers, is_new_voucher: bool = False):
|
||||
"""
|
||||
Add the vouchers with zero allocation. Save() will perform the allocations and clearance
|
||||
|
||||
is_new_voucher - is used to set the reonciliation type - whether the voucher was added as a result of "Matching" or a new voucher was created.
|
||||
Used in bank reconciliation
|
||||
"""
|
||||
if 0.0 >= self.unallocated_amount:
|
||||
frappe.throw(_("Bank Transaction {0} is already fully reconciled").format(self.name))
|
||||
|
||||
@@ -158,6 +165,7 @@ class BankTransaction(Document):
|
||||
"payment_document": voucher["payment_doctype"],
|
||||
"payment_entry": voucher["payment_name"],
|
||||
"allocated_amount": 0.0, # Temporary
|
||||
"reconciliation_type": "Voucher Created" if is_new_voucher else "Matched",
|
||||
},
|
||||
)
|
||||
|
||||
@@ -357,6 +365,55 @@ def get_doctypes_for_bank_reconciliation():
|
||||
return frappe.get_hooks("bank_reconciliation_doctypes")
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def unreconcile_transaction(transaction_name: str | int):
|
||||
"""
|
||||
Unreconcile an entire bank transaction - this does not handle individual entries but clears the entire transaction
|
||||
|
||||
If the individual entries in the bank transaction are matched, just remove the payment entries
|
||||
Else, cancel the individual entries
|
||||
"""
|
||||
transaction = frappe.get_doc("Bank Transaction", transaction_name)
|
||||
|
||||
vouchers_to_cancel = []
|
||||
|
||||
for entry in transaction.payment_entries:
|
||||
if entry.reconciliation_type == "Voucher Created":
|
||||
vouchers_to_cancel.append(
|
||||
{
|
||||
"doctype": entry.payment_document,
|
||||
"name": entry.payment_entry,
|
||||
}
|
||||
)
|
||||
|
||||
transaction.remove_payment_entries()
|
||||
|
||||
# Any accounting vouchers that were created as a result of bank reconciliation will be cancelled
|
||||
|
||||
for voucher in vouchers_to_cancel:
|
||||
frappe.get_doc(voucher["doctype"], voucher["name"]).cancel()
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def unreconcile_transaction_entry(bank_transaction_id: str | int, voucher_type: str, voucher_id: str | int):
|
||||
"""
|
||||
Removes a single payment entry from a bank transaction - for example only undoing one voucher instead of undoing the entire transaction
|
||||
"""
|
||||
|
||||
bank_transaction = frappe.get_doc("Bank Transaction", bank_transaction_id)
|
||||
|
||||
# Find the voucher in the bank transaction and depending on the action, either remove it or cancel the voucher
|
||||
for entry in bank_transaction.payment_entries:
|
||||
if entry.payment_document == voucher_type and entry.payment_entry == voucher_id:
|
||||
if entry.reconciliation_type == "Voucher Created":
|
||||
frappe.get_doc(voucher_type, voucher_id).cancel()
|
||||
else:
|
||||
bank_transaction.remove_payment_entry(entry)
|
||||
bank_transaction.save()
|
||||
|
||||
return {"success": True}
|
||||
|
||||
|
||||
def get_clearance_details(transaction, payment_entry, bt_allocations, gl_entries, gl_bank_account):
|
||||
"""
|
||||
There should only be one bank gl entry for a voucher, except for JE.
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
"payment_document",
|
||||
"payment_entry",
|
||||
"allocated_amount",
|
||||
"clearance_date"
|
||||
"clearance_date",
|
||||
"reconciliation_type"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
@@ -42,19 +43,28 @@
|
||||
"no_copy": 1,
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"default": "Matched",
|
||||
"fieldname": "reconciliation_type",
|
||||
"fieldtype": "Select",
|
||||
"label": "Reconciliation Type",
|
||||
"options": "Matched\nVoucher Created",
|
||||
"read_only": 1
|
||||
}
|
||||
],
|
||||
"istable": 1,
|
||||
"links": [],
|
||||
"modified": "2024-03-27 13:06:38.549438",
|
||||
"modified": "2026-04-11 19:44:46.646966",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Bank Transaction Payments",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"quick_entry": 1,
|
||||
"row_format": "Dynamic",
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": [],
|
||||
"track_changes": 1
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ class BankTransactionPayments(Document):
|
||||
parenttype: DF.Data
|
||||
payment_document: DF.Link
|
||||
payment_entry: DF.DynamicLink
|
||||
reconciliation_type: DF.Literal["Matched", "Voucher Created"]
|
||||
# end: auto-generated types
|
||||
|
||||
pass
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
// Copyright (c) 2026, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on("Bank Transaction Rule", {
|
||||
refresh: function (frm) {
|
||||
frm.set_query("account", function () {
|
||||
return {
|
||||
filters: {
|
||||
company: frm.doc.company,
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
frm.set_intro(
|
||||
__(
|
||||
"Go to the <a href='/banking' target='_blank' style='text-decoration: underline;'>Banking module</a> to setup this rule."
|
||||
)
|
||||
);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,194 @@
|
||||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"autoname": "field:rule_name",
|
||||
"creation": "2026-04-11 20:23:16.159855",
|
||||
"doctype": "DocType",
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"rule_name",
|
||||
"transaction_type",
|
||||
"priority",
|
||||
"min_amount",
|
||||
"max_amount",
|
||||
"column_break_zcez",
|
||||
"rule_description",
|
||||
"company",
|
||||
"section_break_licn",
|
||||
"description_rules",
|
||||
"action_section",
|
||||
"classify_as",
|
||||
"account",
|
||||
"bank_entry_type",
|
||||
"column_break_jdyr",
|
||||
"party_type",
|
||||
"party",
|
||||
"section_break_zdro",
|
||||
"accounts"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "rule_name",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 1,
|
||||
"label": "Rule Name",
|
||||
"reqd": 1,
|
||||
"unique": 1
|
||||
},
|
||||
{
|
||||
"default": "Any",
|
||||
"fieldname": "transaction_type",
|
||||
"fieldtype": "Select",
|
||||
"label": "Transaction Type",
|
||||
"options": "Any\nWithdrawal\nDeposit",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "min_amount",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Min Amount",
|
||||
"non_negative": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "max_amount",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Max Amount",
|
||||
"non_negative": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_zcez",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "rule_description",
|
||||
"fieldtype": "Small Text",
|
||||
"label": "Rule Description"
|
||||
},
|
||||
{
|
||||
"fieldname": "section_break_licn",
|
||||
"fieldtype": "Section Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "description_rules",
|
||||
"fieldtype": "Table",
|
||||
"label": "Description Rules",
|
||||
"options": "Bank Transaction Rule Description Conditions",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "action_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Action"
|
||||
},
|
||||
{
|
||||
"fieldname": "classify_as",
|
||||
"fieldtype": "Select",
|
||||
"label": "Classify As",
|
||||
"options": "Bank Entry\nPayment Entry\nTransfer",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "account",
|
||||
"fieldtype": "Link",
|
||||
"label": "Account",
|
||||
"options": "Account"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_jdyr",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "party_type",
|
||||
"fieldtype": "Link",
|
||||
"label": "Party Type",
|
||||
"options": "DocType"
|
||||
},
|
||||
{
|
||||
"fieldname": "party",
|
||||
"fieldtype": "Dynamic Link",
|
||||
"label": "Party",
|
||||
"options": "party_type"
|
||||
},
|
||||
{
|
||||
"fieldname": "priority",
|
||||
"fieldtype": "Int",
|
||||
"label": "Priority",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "company",
|
||||
"fieldtype": "Link",
|
||||
"label": "Company",
|
||||
"options": "Company",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "bank_entry_type",
|
||||
"fieldtype": "Select",
|
||||
"label": "Bank Entry Type",
|
||||
"options": "Single Account\nMultiple Accounts"
|
||||
},
|
||||
{
|
||||
"fieldname": "section_break_zdro",
|
||||
"fieldtype": "Section Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "accounts",
|
||||
"fieldtype": "Table",
|
||||
"label": "Accounts",
|
||||
"options": "Bank Transaction Rule Accounts"
|
||||
}
|
||||
],
|
||||
"grid_page_length": 50,
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2026-04-11 21:36:26.754667",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Bank Transaction Rule",
|
||||
"naming_rule": "By fieldname",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Accounts User",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Accounts Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"row_format": "Dynamic",
|
||||
"rows_threshold_for_grid_search": 20,
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
||||
@@ -0,0 +1,249 @@
|
||||
# Copyright (c) 2026, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
import re
|
||||
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.model.document import Document
|
||||
|
||||
from erpnext.accounts.doctype.bank_transaction.bank_transaction import BankTransaction
|
||||
|
||||
|
||||
class BankTransactionRule(Document):
|
||||
# begin: auto-generated types
|
||||
# This code is auto-generated. Do not modify anything in this block.
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from frappe.types import DF
|
||||
|
||||
from erpnext.accounts.doctype.bank_transaction_rule_accounts.bank_transaction_rule_accounts import (
|
||||
BankTransactionRuleAccounts,
|
||||
)
|
||||
from erpnext.accounts.doctype.bank_transaction_rule_description_conditions.bank_transaction_rule_description_conditions import (
|
||||
BankTransactionRuleDescriptionConditions,
|
||||
)
|
||||
|
||||
account: DF.Link | None
|
||||
accounts: DF.Table[BankTransactionRuleAccounts]
|
||||
bank_entry_type: DF.Literal["Single Account", "Multiple Accounts"]
|
||||
classify_as: DF.Literal["Bank Entry", "Payment Entry", "Transfer"]
|
||||
company: DF.Link
|
||||
description_rules: DF.Table[BankTransactionRuleDescriptionConditions]
|
||||
max_amount: DF.Currency
|
||||
min_amount: DF.Currency
|
||||
party: DF.DynamicLink | None
|
||||
party_type: DF.Link | None
|
||||
priority: DF.Int
|
||||
rule_description: DF.SmallText | None
|
||||
rule_name: DF.Data
|
||||
transaction_type: DF.Literal["Any", "Withdrawal", "Deposit"]
|
||||
# end: auto-generated types
|
||||
|
||||
def before_insert(self):
|
||||
"""Assign the next priority number for the new rule"""
|
||||
if not self.priority:
|
||||
# Get the highest priority for rules in the same company
|
||||
highest_priority = frappe.db.get_value(
|
||||
"Bank Transaction Rule",
|
||||
filters={"company": self.company},
|
||||
fieldname="priority",
|
||||
order_by="priority DESC",
|
||||
)
|
||||
|
||||
# Set priority to 1 if no rules exist, otherwise increment by 1
|
||||
self.priority = (highest_priority or 0) + 1
|
||||
|
||||
def validate(self):
|
||||
if self.min_amount and self.max_amount:
|
||||
if self.min_amount > self.max_amount:
|
||||
frappe.throw(_("Min amount cannot be greater than max amount."))
|
||||
|
||||
if self.classify_as == "Payment Entry":
|
||||
if not self.party_type:
|
||||
frappe.throw(_("Party type is required to create a payment entry."))
|
||||
|
||||
if not self.party:
|
||||
frappe.throw(_("Party is required create a payment entry."))
|
||||
|
||||
if not self.account:
|
||||
frappe.throw(_("Party account is required to create a payment entry."))
|
||||
|
||||
if self.classify_as == "Bank Entry":
|
||||
if not self.bank_entry_type or self.bank_entry_type == "Single Account":
|
||||
if not self.account:
|
||||
frappe.throw(_("Please add an account for the Bank Entry rule."))
|
||||
elif self.bank_entry_type == "Multiple Accounts":
|
||||
if not self.accounts:
|
||||
frappe.throw(_("Please configure accounts for the Bank Entry rule."))
|
||||
|
||||
# Last row should not have any debit or credit set, since it will be computed via formula
|
||||
for index, account in enumerate(self.accounts):
|
||||
if index == len(self.accounts) - 1:
|
||||
if account.debit or account.credit:
|
||||
frappe.throw(
|
||||
_("The last account row must not have any debit or credit amounts set.")
|
||||
)
|
||||
|
||||
# Validate regex
|
||||
for rule in self.description_rules:
|
||||
if rule.check == "Regex":
|
||||
try:
|
||||
re.compile(rule.value)
|
||||
except re.error:
|
||||
frappe.throw(_("Invalid regex pattern."))
|
||||
|
||||
if self.bank_entry_type == "Single Account":
|
||||
account_company = frappe.get_cached_value("Account", self.account, "company")
|
||||
if account_company != self.company:
|
||||
frappe.throw(_("Account company does not match with the rule company."))
|
||||
|
||||
if self.bank_entry_type == "Multiple Accounts":
|
||||
for account in self.accounts:
|
||||
account_company = frappe.get_cached_value("Account", account.account, "company")
|
||||
if account_company != self.company:
|
||||
frappe.throw(_("Account company does not match with the rule company."))
|
||||
|
||||
def on_trash(self):
|
||||
"""
|
||||
Delete the matched rule from the bank transaction
|
||||
"""
|
||||
try:
|
||||
frappe.db.set_value(
|
||||
"Bank Transaction", {"matched_transaction_rule": self.name}, "matched_transaction_rule", None
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def after_delete(self):
|
||||
"""
|
||||
Rearrange the priorities of the rules
|
||||
"""
|
||||
rules = frappe.get_all(
|
||||
"Bank Transaction Rule",
|
||||
filters={"company": self.company, "name": ["!=", self.name]},
|
||||
order_by="priority asc",
|
||||
)
|
||||
for i, rule in enumerate(rules):
|
||||
frappe.db.set_value("Bank Transaction Rule", rule.name, "priority", i + 1)
|
||||
|
||||
def evaluate_rule(self, transaction: BankTransaction) -> bool:
|
||||
"""
|
||||
Helper function to evaluate the rule for a given transaction
|
||||
"""
|
||||
if self.company != transaction.company:
|
||||
return False
|
||||
|
||||
# Transaction type rule
|
||||
if self.transaction_type == "Withdrawal":
|
||||
if transaction.withdrawal == 0.0:
|
||||
return False
|
||||
|
||||
if self.transaction_type == "Deposit":
|
||||
if transaction.deposit == 0.0:
|
||||
return False
|
||||
|
||||
# Checking transaction amount limits
|
||||
transaction_amount = transaction.withdrawal or transaction.deposit
|
||||
|
||||
if self.min_amount and transaction_amount < self.min_amount:
|
||||
return False
|
||||
|
||||
if self.max_amount and transaction_amount > self.max_amount:
|
||||
return False
|
||||
|
||||
# Checking description rules
|
||||
for rule_desc_rule in self.description_rules:
|
||||
desc = (transaction.description or "").lower()
|
||||
value = (rule_desc_rule.value or "").lower()
|
||||
|
||||
if rule_desc_rule.check == "Contains":
|
||||
if value in desc:
|
||||
return True
|
||||
|
||||
if rule_desc_rule.check == "Starts With":
|
||||
if desc.startswith(value):
|
||||
return True
|
||||
|
||||
if rule_desc_rule.check == "Ends With":
|
||||
if desc.endswith(value):
|
||||
return True
|
||||
|
||||
if rule_desc_rule.check == "Regex":
|
||||
if re.search(value, desc):
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def scheduler_run_rule_evaluation():
|
||||
automatically_run_rules_on_unreconciled_transactions = frappe.db.get_single_value(
|
||||
"Accounts Settings", "automatically_run_rules_on_unreconciled_transactions"
|
||||
)
|
||||
|
||||
if automatically_run_rules_on_unreconciled_transactions:
|
||||
_run_rule_evaluation(force_evaluate=False)
|
||||
|
||||
|
||||
@frappe.whitelist(methods=["POST"])
|
||||
def run_rule_evaluation(force_evaluate: bool = False):
|
||||
frappe.has_permission("Bank Transaction", ptype="read", throw=True)
|
||||
frappe.enqueue(method=_run_rule_evaluation, force_evaluate=force_evaluate)
|
||||
|
||||
|
||||
def _run_rule_evaluation(force_evaluate=False):
|
||||
"""
|
||||
Run the rule evaluation for all bank transactions
|
||||
|
||||
If force evaluate is set to True, then transactions that were previously evaluated will be evaluated again.
|
||||
"""
|
||||
rules = frappe.get_all("Bank Transaction Rule", fields=["name"], order_by="priority asc")
|
||||
|
||||
if not rules:
|
||||
return
|
||||
|
||||
filters = {"status": "Unreconciled", "docstatus": 1}
|
||||
|
||||
if not force_evaluate:
|
||||
filters["is_rule_evaluated"] = 0
|
||||
|
||||
unreconciled_transactions = frappe.get_all(
|
||||
"Bank Transaction",
|
||||
filters=filters,
|
||||
fields=[
|
||||
"name",
|
||||
"bank_account",
|
||||
"company",
|
||||
"date",
|
||||
"withdrawal",
|
||||
"deposit",
|
||||
"description",
|
||||
"reference_number",
|
||||
],
|
||||
)
|
||||
|
||||
if not unreconciled_transactions:
|
||||
return
|
||||
|
||||
rule_docs = []
|
||||
|
||||
for rule in rules:
|
||||
rule_doc = frappe.get_doc("Bank Transaction Rule", rule.name)
|
||||
rule_docs.append(rule_doc)
|
||||
|
||||
# Run evaluation for each transaction
|
||||
for transaction in unreconciled_transactions:
|
||||
matched_rule = None
|
||||
|
||||
for rule in rule_docs:
|
||||
if rule.evaluate_rule(transaction):
|
||||
matched_rule = rule
|
||||
break
|
||||
|
||||
frappe.db.set_value(
|
||||
"Bank Transaction",
|
||||
transaction.name,
|
||||
{"is_rule_evaluated": 1, "matched_transaction_rule": matched_rule.name if matched_rule else None},
|
||||
)
|
||||
@@ -0,0 +1,231 @@
|
||||
# Copyright (c) 2026, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# See license.txt
|
||||
|
||||
import frappe
|
||||
from frappe import qb
|
||||
from frappe.exceptions import ValidationError
|
||||
|
||||
from erpnext.accounts.test.accounts_mixin import AccountsTestMixin
|
||||
from erpnext.tests.utils import ERPNextTestSuite
|
||||
|
||||
|
||||
class TestBankTransactionRule(ERPNextTestSuite, AccountsTestMixin):
|
||||
def setUp(self):
|
||||
self.create_company()
|
||||
self.create_customer()
|
||||
self.clear_old_entries()
|
||||
bank_dt = qb.DocType("Bank")
|
||||
qb.from_(bank_dt).delete().where(bank_dt.name == "HDFC").run()
|
||||
self.create_bank_account()
|
||||
|
||||
def create_bank_account(self):
|
||||
bank = frappe.get_doc(
|
||||
{
|
||||
"doctype": "Bank",
|
||||
"bank_name": "HDFC",
|
||||
}
|
||||
).save()
|
||||
|
||||
self.bank_account = (
|
||||
frappe.get_doc(
|
||||
{
|
||||
"doctype": "Bank Account",
|
||||
"account_name": "HDFC _current_",
|
||||
"bank": bank.name,
|
||||
"is_company_account": True,
|
||||
"account": self.bank,
|
||||
"company": self.company,
|
||||
}
|
||||
)
|
||||
.insert()
|
||||
.name
|
||||
)
|
||||
|
||||
def _unique_rule_name(self, prefix: str) -> str:
|
||||
return f"{prefix}-{frappe.generate_hash(length=8)}"
|
||||
|
||||
def _make_transaction(self, company=None, withdrawal=0, deposit=0, description=None):
|
||||
doc = frappe.new_doc("Bank Transaction")
|
||||
doc.company = company or self.company
|
||||
doc.withdrawal = withdrawal
|
||||
doc.deposit = deposit
|
||||
doc.description = description
|
||||
return doc
|
||||
|
||||
def _make_rule_doc(self, rule_name, description_rules, **fields):
|
||||
data = {
|
||||
"doctype": "Bank Transaction Rule",
|
||||
"rule_name": rule_name,
|
||||
"company": self.company,
|
||||
"classify_as": "Bank Entry",
|
||||
"transaction_type": "Any",
|
||||
"account": self.bank,
|
||||
"description_rules": description_rules,
|
||||
**fields,
|
||||
}
|
||||
return frappe.get_doc(data)
|
||||
|
||||
def _rule(self, prefix: str, description_rules, **fields):
|
||||
return self._make_rule_doc(self._unique_rule_name(prefix), description_rules, **fields)
|
||||
|
||||
# --- evaluate_rule ---
|
||||
|
||||
def test_evaluate_rule_company_mismatch(self):
|
||||
doc = self._rule("co", [{"check": "Contains", "value": "foo"}])
|
||||
tx = self._make_transaction(company="Nonexistent Company XYZ", deposit=1, description="foo")
|
||||
self.assertFalse(doc.evaluate_rule(tx))
|
||||
|
||||
def test_evaluate_rule_withdrawal_type(self):
|
||||
doc = self._rule("wd", [{"check": "Contains", "value": "pay"}], transaction_type="Withdrawal")
|
||||
self.assertFalse(
|
||||
doc.evaluate_rule(self._make_transaction(withdrawal=0, deposit=100, description="payment"))
|
||||
)
|
||||
self.assertTrue(
|
||||
doc.evaluate_rule(self._make_transaction(withdrawal=50, deposit=0, description="payment"))
|
||||
)
|
||||
|
||||
def test_evaluate_rule_deposit_type(self):
|
||||
doc = self._rule("dep", [{"check": "Contains", "value": "inc"}], transaction_type="Deposit")
|
||||
self.assertFalse(
|
||||
doc.evaluate_rule(self._make_transaction(withdrawal=50, deposit=0, description="income"))
|
||||
)
|
||||
self.assertTrue(
|
||||
doc.evaluate_rule(self._make_transaction(withdrawal=0, deposit=50, description="income"))
|
||||
)
|
||||
|
||||
def test_evaluate_rule_min_max_amount(self):
|
||||
doc = self._rule("amt", [{"check": "Contains", "value": "x"}], min_amount=10, max_amount=100)
|
||||
self.assertFalse(doc.evaluate_rule(self._make_transaction(deposit=5, description="x")))
|
||||
self.assertTrue(doc.evaluate_rule(self._make_transaction(deposit=10, description="x")))
|
||||
self.assertTrue(doc.evaluate_rule(self._make_transaction(deposit=50, description="x")))
|
||||
self.assertTrue(doc.evaluate_rule(self._make_transaction(deposit=100, description="x")))
|
||||
self.assertFalse(doc.evaluate_rule(self._make_transaction(deposit=101, description="x")))
|
||||
doc_w = self._rule("amt_wd", [{"check": "Contains", "value": "x"}], min_amount=10, max_amount=100)
|
||||
self.assertTrue(doc_w.evaluate_rule(self._make_transaction(withdrawal=10, description="x")))
|
||||
|
||||
def test_evaluate_rule_description_contains(self):
|
||||
doc = self._rule("ct", [{"check": "Contains", "value": "amazon"}])
|
||||
self.assertTrue(
|
||||
doc.evaluate_rule(self._make_transaction(deposit=1, description="AMAZON marketplace"))
|
||||
)
|
||||
self.assertFalse(doc.evaluate_rule(self._make_transaction(deposit=1, description="other vendor")))
|
||||
|
||||
def test_evaluate_rule_description_starts_with(self):
|
||||
doc = self._rule("sw", [{"check": "Starts With", "value": "wire"}])
|
||||
self.assertTrue(doc.evaluate_rule(self._make_transaction(deposit=1, description="WIRE transfer in")))
|
||||
self.assertFalse(doc.evaluate_rule(self._make_transaction(deposit=1, description="in wire")))
|
||||
|
||||
def test_evaluate_rule_description_ends_with(self):
|
||||
doc = self._rule("ew", [{"check": "Ends With", "value": "fee"}])
|
||||
self.assertTrue(doc.evaluate_rule(self._make_transaction(deposit=1, description="Bank monthly FEE")))
|
||||
self.assertFalse(doc.evaluate_rule(self._make_transaction(deposit=1, description="fee reversed")))
|
||||
|
||||
def test_evaluate_rule_description_regex(self):
|
||||
doc = self._rule("rx", [{"check": "Regex", "value": r"inv-\d+"}])
|
||||
self.assertTrue(doc.evaluate_rule(self._make_transaction(deposit=1, description="INV-12345 payment")))
|
||||
self.assertFalse(doc.evaluate_rule(self._make_transaction(deposit=1, description="invoice abc")))
|
||||
|
||||
def test_evaluate_rule_composite_fails_on_description(self):
|
||||
doc = self._rule(
|
||||
"cmp",
|
||||
[{"check": "Contains", "value": "target"}],
|
||||
transaction_type="Deposit",
|
||||
min_amount=10,
|
||||
max_amount=100,
|
||||
)
|
||||
self.assertFalse(doc.evaluate_rule(self._make_transaction(deposit=50, description="other merchant")))
|
||||
|
||||
def test_evaluate_rule_empty_description_rules_returns_false(self):
|
||||
doc = frappe.get_doc(
|
||||
{
|
||||
"doctype": "Bank Transaction Rule",
|
||||
"rule_name": "tmp-empty",
|
||||
"company": self.company,
|
||||
"classify_as": "Bank Entry",
|
||||
"transaction_type": "Any",
|
||||
"account": self.bank,
|
||||
"description_rules": [],
|
||||
}
|
||||
)
|
||||
self.assertFalse(doc.evaluate_rule(self._make_transaction(deposit=10, description="anything")))
|
||||
|
||||
# --- validate ---
|
||||
|
||||
def test_validate_min_amount_greater_than_max(self):
|
||||
doc = self._rule("minmax", [{"check": "Contains", "value": "x"}], min_amount=200, max_amount=100)
|
||||
with self.assertRaises(ValidationError):
|
||||
doc.insert()
|
||||
|
||||
def test_validate_payment_entry_requires_party_type(self):
|
||||
doc = self._rule(
|
||||
"pe_pt",
|
||||
[{"check": "Contains", "value": "x"}],
|
||||
classify_as="Payment Entry",
|
||||
party=self.customer,
|
||||
account=self.debit_to,
|
||||
)
|
||||
with self.assertRaises(ValidationError):
|
||||
doc.insert()
|
||||
|
||||
def test_validate_payment_entry_requires_party(self):
|
||||
doc = self._rule(
|
||||
"pe_p",
|
||||
[{"check": "Contains", "value": "x"}],
|
||||
classify_as="Payment Entry",
|
||||
party_type="Customer",
|
||||
account=self.debit_to,
|
||||
)
|
||||
with self.assertRaises(ValidationError):
|
||||
doc.insert()
|
||||
|
||||
def test_validate_payment_entry_requires_account(self):
|
||||
doc = self._rule(
|
||||
"pe_a",
|
||||
[{"check": "Contains", "value": "x"}],
|
||||
classify_as="Payment Entry",
|
||||
party_type="Customer",
|
||||
party=self.customer,
|
||||
)
|
||||
doc.account = None
|
||||
with self.assertRaises(ValidationError):
|
||||
doc.insert()
|
||||
|
||||
def test_validate_bank_entry_single_requires_account(self):
|
||||
doc = self._rule(
|
||||
"be_acc",
|
||||
[{"check": "Contains", "value": "x"}],
|
||||
bank_entry_type="Single Account",
|
||||
)
|
||||
doc.account = None
|
||||
with self.assertRaises(ValidationError):
|
||||
doc.insert()
|
||||
|
||||
def test_validate_bank_entry_multiple_requires_accounts(self):
|
||||
doc = self._rule(
|
||||
"be_ma",
|
||||
[{"check": "Contains", "value": "x"}],
|
||||
classify_as="Bank Entry",
|
||||
bank_entry_type="Multiple Accounts",
|
||||
accounts=[],
|
||||
)
|
||||
with self.assertRaises(ValidationError):
|
||||
doc.insert()
|
||||
|
||||
def test_validate_bank_entry_multiple_last_row_must_not_have_debit_or_credit(self):
|
||||
doc = self._rule(
|
||||
"be_last",
|
||||
[{"check": "Contains", "value": "x"}],
|
||||
classify_as="Bank Entry",
|
||||
bank_entry_type="Multiple Accounts",
|
||||
accounts=[
|
||||
{"account": self.bank, "debit": "", "credit": ""},
|
||||
{"account": self.cash, "debit": "10", "credit": ""},
|
||||
],
|
||||
)
|
||||
with self.assertRaises(ValidationError):
|
||||
doc.insert()
|
||||
|
||||
def test_validate_invalid_regex(self):
|
||||
doc = self._rule("bad_rx", [{"check": "Regex", "value": "["}])
|
||||
with self.assertRaises(ValidationError):
|
||||
doc.insert()
|
||||
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"creation": "2026-04-11 20:18:19.629653",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"account",
|
||||
"party_type",
|
||||
"party",
|
||||
"debit",
|
||||
"credit",
|
||||
"user_remark"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "account",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Account",
|
||||
"options": "Account",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "party_type",
|
||||
"fieldtype": "Link",
|
||||
"label": "Party Type",
|
||||
"options": "Party Type"
|
||||
},
|
||||
{
|
||||
"fieldname": "party",
|
||||
"fieldtype": "Dynamic Link",
|
||||
"label": "Party",
|
||||
"options": "party_type"
|
||||
},
|
||||
{
|
||||
"fieldname": "debit",
|
||||
"fieldtype": "Data",
|
||||
"label": "Debit"
|
||||
},
|
||||
{
|
||||
"fieldname": "credit",
|
||||
"fieldtype": "Data",
|
||||
"label": "Credit"
|
||||
},
|
||||
{
|
||||
"fieldname": "user_remark",
|
||||
"fieldtype": "Small Text",
|
||||
"label": "User Remark"
|
||||
}
|
||||
],
|
||||
"grid_page_length": 50,
|
||||
"index_web_pages_for_search": 1,
|
||||
"istable": 1,
|
||||
"links": [],
|
||||
"modified": "2026-04-11 20:20:07.721723",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Bank Transaction Rule Accounts",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"row_format": "Dynamic",
|
||||
"rows_threshold_for_grid_search": 20,
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
# Copyright (c) 2026, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class BankTransactionRuleAccounts(Document):
|
||||
# begin: auto-generated types
|
||||
# This code is auto-generated. Do not modify anything in this block.
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from frappe.types import DF
|
||||
|
||||
account: DF.Link
|
||||
credit: DF.Data | None
|
||||
debit: DF.Data | None
|
||||
parent: DF.Data
|
||||
parentfield: DF.Data
|
||||
parenttype: DF.Data
|
||||
party: DF.DynamicLink | None
|
||||
party_type: DF.Link | None
|
||||
user_remark: DF.SmallText | None
|
||||
# end: auto-generated types
|
||||
|
||||
pass
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"creation": "2026-04-11 20:22:02.241424",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"check",
|
||||
"value"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "check",
|
||||
"fieldtype": "Select",
|
||||
"in_list_view": 1,
|
||||
"label": "Check",
|
||||
"options": "Contains\nStarts With\nEnds With\nRegex",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "value",
|
||||
"fieldtype": "Small Text",
|
||||
"in_list_view": 1,
|
||||
"label": "Value",
|
||||
"reqd": 1
|
||||
}
|
||||
],
|
||||
"grid_page_length": 50,
|
||||
"index_web_pages_for_search": 1,
|
||||
"istable": 1,
|
||||
"links": [],
|
||||
"modified": "2026-04-11 20:22:38.274393",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Bank Transaction Rule Description Conditions",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"row_format": "Dynamic",
|
||||
"rows_threshold_for_grid_search": 20,
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
# Copyright (c) 2026, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class BankTransactionRuleDescriptionConditions(Document):
|
||||
# begin: auto-generated types
|
||||
# This code is auto-generated. Do not modify anything in this block.
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from frappe.types import DF
|
||||
|
||||
check: DF.Literal["Contains", "Starts With", "Ends With", "Regex"]
|
||||
parent: DF.Data
|
||||
parentfield: DF.Data
|
||||
parenttype: DF.Data
|
||||
value: DF.SmallText
|
||||
# end: auto-generated types
|
||||
|
||||
pass
|
||||
@@ -215,6 +215,7 @@ website_route_rules = [
|
||||
},
|
||||
{"from_route": "/project", "to_route": "Project"},
|
||||
{"from_route": "/tasks", "to_route": "Task"},
|
||||
{"from_route": "/banking/<path:app_path>", "to_route": "banking"},
|
||||
]
|
||||
|
||||
standard_navbar_items = [
|
||||
@@ -467,6 +468,7 @@ scheduler_events = {
|
||||
"erpnext.projects.doctype.project.project.project_status_update_reminder",
|
||||
"erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.automatic_synchronization",
|
||||
"erpnext.utilities.doctype.video.video.update_youtube_data",
|
||||
"erpnext.accounts.doctype.bank_transaction_rule.bank_transaction_rule.scheduler_run_rule_evaluation",
|
||||
],
|
||||
"daily": [],
|
||||
"daily_long": [],
|
||||
|
||||
BIN
erpnext/public/images/bank-logos/ABSA.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
erpnext/public/images/bank-logos/ANZ.png
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
erpnext/public/images/bank-logos/Airwallex-dark.png
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
erpnext/public/images/bank-logos/Airwallex.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
17
erpnext/public/images/bank-logos/Alpha_Bank.svg
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="170px" height="42px" viewBox="0 0 170 42" style="enable-background:new 0 0 170 42;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#1E8676;}
|
||||
</style>
|
||||
<g>
|
||||
<rect y="38.4" class="st0" width="32.9" height="3.6"/>
|
||||
<path class="st0" d="M27.8,33.7l-3-7.5H8.1l-3,7.5H0.3L13.8,0H19l13.6,33.7H27.8z M16.5,4.3L9.3,22.5h14.3L16.5,4.3z"/>
|
||||
<path class="st0" d="M40.1,33.7V0h4.2v30h15.7v3.7H40.1z"/>
|
||||
<path class="st0" d="M68.9,33.7V0h13.5C89.2,0,93,4.6,93,10.2c0,5.5-3.9,10.2-10.6,10.2h-9.3v13.4H68.9z M88.6,10.2
|
||||
c0-3.8-2.7-6.4-6.7-6.4h-8.8v12.8h8.8C85.9,16.6,88.6,13.9,88.6,10.2z"/>
|
||||
<path class="st0" d="M125.4,33.7V18.2h-19.7v15.5h-4.2V0h4.2v14.5h19.7V0h4.2v33.7H125.4z"/>
|
||||
<path class="st0" d="M164.6,33.7l-3-7.5h-16.8l-3,7.5h-4.8L150.6,0h5.2l13.6,33.7H164.6z M153.2,4.3l-7.2,18.1h14.3L153.2,4.3z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
BIN
erpnext/public/images/bank-logos/Amex.svg
Normal file
BIN
erpnext/public/images/bank-logos/Australian_Tax_Office.png
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
43
erpnext/public/images/bank-logos/Avanz-dark.svg
Normal file
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="412px" height="214px" viewBox="0 0 412 214" enable-background="new 0 0 412 214" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#FFF" d="M14.108,207.014H5.162l37.044-90.522h8.15L14.108,207.014z M63.479,175.271l2.981,7.422H27.693
|
||||
l2.851-7.422H63.479z M88.859,207.014h-8.944l-30.948-77.602l4.241-10.866L88.859,207.014z"/>
|
||||
<path fill="#FFF" d="M106.457,207.014l-27.7-65.539h7.886l27.304,65.539H106.457z M134.158,141.475h8.019l-26.231,61.631
|
||||
l-3.712-9.014L134.158,141.475z"/>
|
||||
<path fill="#FFF" d="M169.887,201.979c7.013,0,14.292-4.813,16.369-6.627v8.019c-2.607,1.987-8.354,5.301-18.821,5.301
|
||||
s-22.929-7.153-22.929-21.869c0-14.87,13.087-22.53,25.381-22.53c8.894,0,14.778,2.85,16.369,3.646v8.416
|
||||
c-2.431-1.633-8.964-5.303-16.369-5.303c-7.78,0-17.959,3.831-17.959,15.905S162.875,201.979,169.887,201.979z M189.702,161.156
|
||||
c0-9.262-6.139-14.977-17.099-14.977c-10.961,0-17.362,6.803-20.278,9.807l-4.705-5.168c4.032-4.086,10.685-11,25.249-11
|
||||
c14.563,0,23.856,7.381,23.856,21.074c0,13.69,0,46.121,0,46.121h-7.023C189.702,207.014,189.702,169.531,189.702,161.156z"/>
|
||||
<path fill="#FFF" d="M211.189,141.475h7.289v65.539h-7.289V141.475z M240.746,139.818c8.269,0,13.495,3.377,15.438,4.971
|
||||
c1.944,1.588,6.296,6.133,6.296,13.252c0,7.121,0,48.973,0,48.973h-7.355c0,0,0-37.885,0-47.25
|
||||
c0-9.363-7.813-12.324-15.705-12.324c-7.894,0-15.331,4.814-17.495,6.894v-8.949
|
||||
C224.089,143.838,232.476,139.818,240.746,139.818z"/>
|
||||
<path fill="#FFF" d="M321.786,141.475v6.229h-47.91v-6.229H321.786z M322.318,200.785v6.229h-48.441v-6.229H322.318z
|
||||
M310.256,151.084h8.682l-33.928,46.32h-8.418L310.256,151.084z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#D7891F" d="M340.191,92.813c-1.723-2.268-4.178-4.438-7.146-6.526c-3.455,14.234-16.604,27.085-9.812,34.438
|
||||
c2.943,3.188,10.771,1.729,20.437-2.522C345.064,109.588,345.811,100.221,340.191,92.813z"/>
|
||||
<path fill="#D7891F" d="M401.793,57.725C386.075,29.149,296.418-3.551,280.084,9.149c-7.056,5.484,5.297,16.508,19.895,28.951
|
||||
C333.688,34.94,385.561,41.822,401.793,57.725z"/>
|
||||
<path fill="#E1A700" d="M332.641,72.942c-3.814-10.671-19.193-23.362-32.662-34.842c-14.444,1.354-25.558,4.554-29.095,9.677
|
||||
c-8.589,12.432,40.493,23.277,62.161,38.51C334.102,81.929,334.25,77.442,332.641,72.942z"/>
|
||||
<path fill="#E1A700" d="M402.229,58.159c-0.141-0.146-0.287-0.29-0.436-0.434c0.149,0.274,0.297,0.548,0.436,0.82
|
||||
c7.857,15.673-32.199,48.06-58.559,59.656c-1.664,10.275-4.257,19.48,1.918,23.012C359.629,149.244,418.909,75.356,402.229,58.159
|
||||
z"/>
|
||||
<path fill="#B5002C" d="M402.229,58.545c-0.139-0.272-0.285-0.546-0.436-0.82C385.561,41.822,333.688,34.94,299.979,38.1
|
||||
c13.469,11.48,28.848,24.171,32.662,34.842c1.609,4.5,1.461,8.986,0.404,13.345c2.969,2.088,5.424,4.259,7.146,6.526
|
||||
c5.619,7.407,4.873,16.774,3.479,25.388C370.029,106.605,410.086,74.219,402.229,58.545z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
43
erpnext/public/images/bank-logos/Avanz.svg
Normal file
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="412px" height="214px" viewBox="0 0 412 214" enable-background="new 0 0 412 214" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#646569" d="M14.108,207.014H5.162l37.044-90.522h8.15L14.108,207.014z M63.479,175.271l2.981,7.422H27.693
|
||||
l2.851-7.422H63.479z M88.859,207.014h-8.944l-30.948-77.602l4.241-10.866L88.859,207.014z"/>
|
||||
<path fill="#646569" d="M106.457,207.014l-27.7-65.539h7.886l27.304,65.539H106.457z M134.158,141.475h8.019l-26.231,61.631
|
||||
l-3.712-9.014L134.158,141.475z"/>
|
||||
<path fill="#646569" d="M169.887,201.979c7.013,0,14.292-4.813,16.369-6.627v8.019c-2.607,1.987-8.354,5.301-18.821,5.301
|
||||
s-22.929-7.153-22.929-21.869c0-14.87,13.087-22.53,25.381-22.53c8.894,0,14.778,2.85,16.369,3.646v8.416
|
||||
c-2.431-1.633-8.964-5.303-16.369-5.303c-7.78,0-17.959,3.831-17.959,15.905S162.875,201.979,169.887,201.979z M189.702,161.156
|
||||
c0-9.262-6.139-14.977-17.099-14.977c-10.961,0-17.362,6.803-20.278,9.807l-4.705-5.168c4.032-4.086,10.685-11,25.249-11
|
||||
c14.563,0,23.856,7.381,23.856,21.074c0,13.69,0,46.121,0,46.121h-7.023C189.702,207.014,189.702,169.531,189.702,161.156z"/>
|
||||
<path fill="#646569" d="M211.189,141.475h7.289v65.539h-7.289V141.475z M240.746,139.818c8.269,0,13.495,3.377,15.438,4.971
|
||||
c1.944,1.588,6.296,6.133,6.296,13.252c0,7.121,0,48.973,0,48.973h-7.355c0,0,0-37.885,0-47.25
|
||||
c0-9.363-7.813-12.324-15.705-12.324c-7.894,0-15.331,4.814-17.495,6.894v-8.949
|
||||
C224.089,143.838,232.476,139.818,240.746,139.818z"/>
|
||||
<path fill="#646569" d="M321.786,141.475v6.229h-47.91v-6.229H321.786z M322.318,200.785v6.229h-48.441v-6.229H322.318z
|
||||
M310.256,151.084h8.682l-33.928,46.32h-8.418L310.256,151.084z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#D7891F" d="M340.191,92.813c-1.723-2.268-4.178-4.438-7.146-6.526c-3.455,14.234-16.604,27.085-9.812,34.438
|
||||
c2.943,3.188,10.771,1.729,20.437-2.522C345.064,109.588,345.811,100.221,340.191,92.813z"/>
|
||||
<path fill="#D7891F" d="M401.793,57.725C386.075,29.149,296.418-3.551,280.084,9.149c-7.056,5.484,5.297,16.508,19.895,28.951
|
||||
C333.688,34.94,385.561,41.822,401.793,57.725z"/>
|
||||
<path fill="#E1A700" d="M332.641,72.942c-3.814-10.671-19.193-23.362-32.662-34.842c-14.444,1.354-25.558,4.554-29.095,9.677
|
||||
c-8.589,12.432,40.493,23.277,62.161,38.51C334.102,81.929,334.25,77.442,332.641,72.942z"/>
|
||||
<path fill="#E1A700" d="M402.229,58.159c-0.141-0.146-0.287-0.29-0.436-0.434c0.149,0.274,0.297,0.548,0.436,0.82
|
||||
c7.857,15.673-32.199,48.06-58.559,59.656c-1.664,10.275-4.257,19.48,1.918,23.012C359.629,149.244,418.909,75.356,402.229,58.159
|
||||
z"/>
|
||||
<path fill="#B5002C" d="M402.229,58.545c-0.139-0.272-0.285-0.546-0.436-0.82C385.561,41.822,333.688,34.94,299.979,38.1
|
||||
c13.469,11.48,28.848,24.171,32.662,34.842c1.609,4.5,1.461,8.986,0.404,13.345c2.969,2.088,5.424,4.259,7.146,6.526
|
||||
c5.619,7.407,4.873,16.774,3.479,25.388C370.029,106.605,410.086,74.219,402.229,58.545z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
105
erpnext/public/images/bank-logos/Axis_Bank.svg
Normal file
@@ -0,0 +1,105 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="300"
|
||||
height="78"
|
||||
viewBox="0 0 1000 257"
|
||||
version="1.0"
|
||||
id="svg2"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.46"
|
||||
sodipodi:docname="1000px-Axis_Bank_Logo.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<metadata
|
||||
id="metadata28">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs26">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 160.625 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="1250 : 160.625 : 1"
|
||||
inkscape:persp3d-origin="625 : 107.08333 : 1"
|
||||
id="perspective30" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:window-height="669"
|
||||
inkscape:window-width="640"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
guidetolerance="10.0"
|
||||
gridtolerance="10.0"
|
||||
objecttolerance="10.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
showgrid="false"
|
||||
borderlayer="false"
|
||||
inkscape:showpageshadow="false"
|
||||
showborder="true"
|
||||
inkscape:zoom="0.61546574"
|
||||
inkscape:cx="401.35343"
|
||||
inkscape:cy="82.827844"
|
||||
inkscape:window-x="138"
|
||||
inkscape:window-y="95"
|
||||
inkscape:current-layer="svg2" />
|
||||
<g
|
||||
id="#ae285dff">
|
||||
<path
|
||||
d="M 142.27,10.47 C 156.13,34.28 170.11,58.02 183.82,81.92 C 161.66,121.01 139.82,160.29 116.91,198.95 C 108.12,213.79 99.57,228.77 90.88,243.66 C 62.7,243.83 34.52,243.82 6.34,243.78 C 7.2,241.85 8.05,239.91 9.09,238.07 C 53.46,162.19 98,86.41 142.27,10.47 z"
|
||||
id="path5"
|
||||
style="opacity:1;fill:#ae285d" />
|
||||
<path
|
||||
d="M 755.46,69 C 771.04,98.04 786.61,127.07 802.17,156.12 C 796.68,156.23 791.19,155.95 785.71,156.14 C 782.03,149.74 778.84,143.07 775.24,136.63 C 761.4,136.22 747.55,136.5 733.7,136.47 C 730.36,143.1 726.72,149.56 723.18,156.07 C 717.77,156.02 712.36,156.18 706.96,156.13 C 722.9,126.96 738.89,97.81 755.46,69 M 740.63,124.05 C 750.07,124.18 759.52,124.16 768.97,124.24 C 764.24,115.44 759.98,106.39 754.91,97.78 C 750.05,106.49 745.29,115.24 740.63,124.05 z"
|
||||
id="path7"
|
||||
style="opacity:1;fill:#ae285d" />
|
||||
<path
|
||||
d="M 811.25,68.66 C 834.77,89.1 858.29,109.55 881.52,130.33 C 882.16,111.58 881.44,92.83 882.01,74.08 C 887.04,74.18 892.07,74.26 897.1,74.35 C 896.94,103.23 897.02,132.12 896.99,161 C 881.54,148.15 866.7,134.58 851.44,121.49 C 842.95,114.23 834.54,106.89 826.43,99.22 C 826.23,118.21 826.52,137.21 826.11,156.2 C 821.11,156.22 816.11,156.09 811.12,156.13 C 811.16,126.97 810.91,97.82 811.25,68.66 z"
|
||||
id="path9"
|
||||
style="opacity:1;fill:#ae285d" />
|
||||
<path
|
||||
d="M 314.14,156.01 C 330.39,127 346.22,97.76 362.84,68.97 C 378.32,98.04 393.89,127.07 409.55,156.04 C 403.98,156.17 398.42,156.16 392.85,156.05 C 389.47,149.56 386.01,143.11 382.78,136.54 C 368.89,136.36 355.01,136.51 341.12,136.51 C 337.5,143.06 334.23,149.82 330.32,156.21 C 324.92,156.06 319.53,156.17 314.14,156.01 M 347.87,124.13 C 357.36,124.09 366.86,124.22 376.36,124.19 C 371.58,115.44 367.38,106.38 362.25,97.82 C 357.42,106.58 352.65,115.35 347.87,124.13 z"
|
||||
id="path11"
|
||||
style="opacity:1;fill:#ae285d" />
|
||||
<path
|
||||
d="M 545.39,76.49 C 553.33,72.58 562.63,72.07 571.22,73.8 C 578.66,75.37 584.64,80.66 589.18,86.52 C 585.15,88.56 581.15,90.63 577.19,92.8 C 571.85,84.45 559.14,81.79 551.39,88.3 C 547.28,91.24 547.61,98.48 552.25,100.72 C 562.65,106.45 575.3,107.68 584.52,115.61 C 593.92,123.58 593.56,139.51 584.85,147.87 C 575.5,157.35 560.69,159.41 548.26,155.86 C 537.85,153.23 530.02,143.66 528.63,133.14 C 533.66,132.04 538.74,131.13 543.83,130.34 C 544.44,135.27 546.31,140.7 550.96,143.18 C 558.32,147.13 568.99,146.14 574.07,139.01 C 577.65,134.16 576.59,126.71 571.7,123.16 C 561.48,116.31 547.91,115.89 538.74,107.26 C 533.9,103.14 531.89,96.26 533.54,90.15 C 534.85,83.92 539.94,79.31 545.39,76.49 z"
|
||||
id="path13"
|
||||
style="opacity:1;fill:#ae285d" />
|
||||
<path
|
||||
d="M 414.41,74.65 C 420.12,73.9 425.89,74.16 431.63,74.22 C 437.77,83.36 443.9,92.5 450.05,101.63 C 456.52,92.61 462.81,83.46 469.19,74.38 C 475.08,74.19 480.97,74.09 486.86,74.27 C 477.52,87.26 468.12,100.22 458.76,113.2 C 468.29,127.65 478.69,141.53 488,156.13 C 482.39,156.16 476.78,156.11 471.17,156.06 C 464.03,145.79 456.94,135.48 449.8,125.21 C 442.42,135.52 434.98,145.78 427.69,156.15 C 422.01,156.26 416.32,156.18 410.64,156.19 C 420.52,141.71 430.92,127.6 441.19,113.39 C 432.36,100.41 423.36,87.55 414.41,74.65 z"
|
||||
id="path15"
|
||||
style="opacity:1;fill:#ae285d" />
|
||||
<path
|
||||
d="M 500.7,74.29 C 505.76,74.14 510.81,74.15 515.87,74.26 C 515.9,101.55 515.88,128.84 515.88,156.13 C 510.74,156.14 505.61,156.13 500.47,156.13 C 500.66,128.85 500.57,101.57 500.7,74.29 z"
|
||||
id="path17"
|
||||
style="opacity:1;fill:#ae285d" />
|
||||
<path
|
||||
d="M 648.34,74.22 C 661.32,74.78 675.32,72.43 687.28,78.79 C 698.94,85.03 701.63,103.54 690.88,111.92 C 697.65,114.59 704.2,119.62 705.98,127.03 C 708.83,136.12 703.8,146.18 695.85,150.89 C 681.36,158.85 664.29,155.14 648.56,156.22 C 648.07,128.89 648.38,101.56 648.34,74.22 M 663.4,86 C 663.43,93.8 663.41,101.59 663.36,109.38 C 669,109.15 675.25,109.49 680.06,106.01 C 684.97,101.64 684.79,92.59 679.37,88.7 C 674.63,85.7 668.78,86.04 663.4,86 M 663.49,120.09 C 663.43,128.04 663.46,136 663.61,143.95 C 671.18,143.55 679.33,144.95 686.31,141.2 C 692.5,138.16 693.64,128.22 687.89,124.16 C 680.96,118.78 671.66,120.26 663.49,120.09 z"
|
||||
id="path19"
|
||||
style="opacity:1;fill:#ae285d" />
|
||||
<path
|
||||
d="M 914.58,74.22 C 919.62,74.18 924.66,74.2 929.71,74.21 C 929.73,84.99 929.61,95.78 929.84,106.57 C 942.26,95.64 954.92,84.99 967.41,74.15 C 974.31,74.19 981.21,74.22 988.11,74.2 C 973.21,86.42 958.43,98.77 943.79,111.29 C 958.19,126.49 973.11,141.18 987.84,156.06 C 981,155.99 974.15,156.53 967.34,155.74 C 955.62,143.78 943.98,131.75 932.37,119.69 C 931.52,120.81 930.68,121.93 929.85,123.05 C 929.55,134.08 929.82,145.1 929.63,156.13 C 924.56,156.1 919.49,156.23 914.43,156.2 C 914.47,128.88 914.54,101.55 914.58,74.22 z"
|
||||
id="path21"
|
||||
style="opacity:1;fill:#ae285d" />
|
||||
<path
|
||||
d="M 142.28,155.63 C 170.56,155.62 198.84,155.42 227.12,155.89 C 243.96,185.25 261.34,214.29 278.03,243.73 C 249.75,243.87 221.48,243.76 193.2,243.74 C 176.37,214.28 158.79,185.27 142.28,155.63 z"
|
||||
id="path23"
|
||||
style="opacity:1;fill:#ae285d" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.9 KiB |
17
erpnext/public/images/bank-logos/BAC_Credomatic.svg
Normal file
@@ -0,0 +1,17 @@
|
||||
<svg width="157" height="42" viewBox="0 0 157 42" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_238_1291)">
|
||||
<path d="M29.6016 7.53321L45.4604 20.2299L41.231 30.6794H29.6016V7.53321Z" fill="#E4002B"/>
|
||||
<path d="M27.4872 0.0203934L0 7.42153V19.8348L27.4872 8.00027V0.0203934Z" fill="#E4002B"/>
|
||||
<path d="M27.4872 10.3023L0 22.1369V35.8751L27.4872 19.0832V10.3023Z" fill="#E4002B"/>
|
||||
<path d="M20.0386 41.2512H38.0588V32.7935H28.8162L20.0386 41.2512Z" fill="#E4002B"/>
|
||||
<path d="M27.4872 21.5614L0 38.3522V41.2512H16.9916L27.4872 31.1389V21.5614Z" fill="#E4002B"/>
|
||||
<path d="M83.3445 19.8251V19.7177C86.5774 18.3713 88.7324 15.5689 88.7324 11.0442C88.7324 4.63306 84.3151 0.635605 75.5332 0.635605H59.1021V41.1695H75.749C85.9311 41.1695 90.1873 36.6331 90.1873 29.3608C90.1873 24.2435 87.8165 21.0642 83.3455 19.8251H83.3445ZM67.8292 8.28585H75.2089C78.6029 8.28585 80.0578 9.48197 80.0578 12.6602C80.0578 15.8384 78.6577 17.1322 75.4247 17.1322H67.8292V8.28692V8.28585ZM75.8553 33.7351H67.8282V23.8655H75.6395C79.5725 23.8655 81.0811 25.2667 81.0811 28.6607C81.0811 32.4853 79.4651 33.7351 75.8553 33.7351Z" fill="#E4002B"/>
|
||||
<path d="M115.057 0.635605H104.228L90.2271 41.1695H99.8164L102.127 33.2391H116.781L119.092 41.1695H129.22L115.057 0.635605ZM104.336 25.6436L108.376 11.798L109.507 7.54176H109.669L110.746 11.798L114.625 25.6436H104.335H104.336Z" fill="#E4002B"/>
|
||||
<path d="M147.515 33.6493C140.134 33.6493 137.511 30.8157 137.511 20.6873C137.511 11.098 140.027 8.13449 147.354 8.13449C150.371 8.13449 153.951 8.6735 156.052 9.48093V1.66963C153.736 0.75375 150.048 0 146.816 0C133.886 0 127.977 7.16492 127.977 20.6336C127.977 35.0719 133.995 41.86 146.224 41.86C149.779 41.86 153.659 40.9441 156.298 39.6513V31.8132C154.036 32.7828 150.48 33.6503 147.517 33.6503L147.515 33.6493Z" fill="#E4002B"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_238_1291">
|
||||
<rect width="156.296" height="41.86" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
124
erpnext/public/images/bank-logos/BNP_Paribas-Dark.svg
Normal file
@@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
|
||||
<!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
|
||||
<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
|
||||
<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
|
||||
<!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
|
||||
<!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
|
||||
<!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
|
||||
<!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
|
||||
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
|
||||
]>
|
||||
<svg version="1.1" id="Calque_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 219.1 45.4"
|
||||
style="enable-background:new 0 0 219.1 45.4;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:url(#SVGID_1_);}
|
||||
.st1{fill:url(#SVGID_2_);}
|
||||
.st2{fill:url(#SVGID_3_);}
|
||||
.st3{fill:url(#SVGID_4_);}
|
||||
.st4{fill:url(#SVGID_5_);}
|
||||
.st5{fill:url(#SVGID_6_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
</style>
|
||||
<switch>
|
||||
<foreignObject requiredExtensions="&ns_ai;" x="0" y="0" width="1" height="1">
|
||||
<i:pgfRef xlink:href="#adobe_illustrator_pgf">
|
||||
</i:pgfRef>
|
||||
</foreignObject>
|
||||
<g i:extraneous="self">
|
||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="22.6772" y1="-1.1157" x2="22.6772" y2="46.7615">
|
||||
<stop offset="0" style="stop-color:#008053"/>
|
||||
<stop offset="0.6" style="stop-color:#7FCBAE"/>
|
||||
<stop offset="1" style="stop-color:#00A76D"/>
|
||||
</linearGradient>
|
||||
<rect class="st0" width="45.4" height="45.4"/>
|
||||
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="22.6057" y1="-11.2666" x2="22.6057" y2="42.5342">
|
||||
<stop offset="0" style="stop-color:#00A76D"/>
|
||||
<stop offset="0.3" style="stop-color:#7FCBAE"/>
|
||||
<stop offset="0.55" style="stop-color:#00A76D"/>
|
||||
<stop offset="0.8352" style="stop-color:#008053"/>
|
||||
<stop offset="0.8691" style="stop-color:#008558"/>
|
||||
<stop offset="0.9244" style="stop-color:#009264"/>
|
||||
<stop offset="0.9939" style="stop-color:#00A97A"/>
|
||||
<stop offset="1" style="stop-color:#00AD7D"/>
|
||||
</linearGradient>
|
||||
<path class="st1" d="M44,22.9c0,9.5,0.4,19.2,0.4,19.2c0,1.1-0.7,1.8-1.6,1.8H3.5c-0.9,0-1.5-0.8-1.6-1.8c0,0-1.1-8.3-1.1-20.9
|
||||
C0.8,8.5,2,2.6,2,2.6c0.1-1,0.7-1.8,1.6-1.8h39.3c0.9,0,1.6,0.8,1.6,1.8C44.4,2.6,44,13.5,44,22.9z"/>
|
||||
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="31.2236" y1="39.563" x2="31.2236" y2="4.7475">
|
||||
<stop offset="0" style="stop-color:#00B387"/>
|
||||
<stop offset="1" style="stop-color:#00A76D"/>
|
||||
</linearGradient>
|
||||
<path class="st2" d="M35.2,12.2c-2.8,1.6-3.7,1.8-6.7,3.6l0.1-0.3c1.6-1.7,2.3-2.5,3.3-4c-2.8,0.2-6.9,0.5-9.8,1.1l0.2-0.3
|
||||
C25,11,29.9,9.7,32.4,9.4c-0.6-0.9-5.6-3.6-6.8-4.1L25.7,5c3.8,0.4,8.8,2.2,10.9,3.5c0.9-0.3,1.9-0.3,3.6-0.5c0,0-0.3,1-2.1,2.3
|
||||
c0.5,1.2-0.6,8.1-1.6,9.9C36.5,17.4,36.3,13.8,35.2,12.2z"/>
|
||||
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="9.6226" y1="39.5649" x2="9.6226" y2="4.7389">
|
||||
<stop offset="0" style="stop-color:#00B387"/>
|
||||
<stop offset="1" style="stop-color:#00A76D"/>
|
||||
</linearGradient>
|
||||
<path class="st3" d="M14.7,36.8l0.1-0.3c-1.5-0.6-3-1-4.2-2.2c0.4-1.1,0.8-1.9,1.5-2.9l0.1-0.3c-1.3,0.2-2.4,0.7-3.5,0.9
|
||||
c-0.9-1.5-1.2-3.6-1.7-5.6L7,26.6c-0.2,2.3-0.3,3.9,0,5.7c-0.9,0.3-1.7,0.3-2.5,0.6l-0.1,0.3c1.2,0.7,2.1,1.3,3.5,1.9
|
||||
c0.7,1.5,1.5,2.6,2.7,3.8l0.1-0.3c-0.2-0.9-0.5-1.6-0.4-2.6C11.8,36.5,13,36.7,14.7,36.8z"/>
|
||||
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="16.3516" y1="39.5571" x2="16.3516" y2="4.754">
|
||||
<stop offset="0" style="stop-color:#00B387"/>
|
||||
<stop offset="1" style="stop-color:#00A76D"/>
|
||||
</linearGradient>
|
||||
<path class="st4" d="M18.9,14c0,0-0.6,1.1-1.1,2.5h-0.1c3.5,0.5,6.8,1.9,7.6,2.4l-0.1,0.3c-3.6-0.6-5.5-0.6-6.9-0.4
|
||||
c-1.3,0.1-1.6,0.3-1.6,0.3c-0.8,1.7-1.2,4.5-1.4,5.5l-0.1,0.3c-0.7-1.6-1.6-4.8-1.6-4.8c-1.8,1-6,4.9-6,4.9
|
||||
c2.3-4.6,4.7-6.7,4.7-6.7c-0.8-0.8-2.9-1.2-4.5-1.3l0.1-0.3c1-0.3,3-0.4,4.3-0.5c1.6,0,2.5,0,2.5,0C16,15.1,18.1,14.1,18.9,14z"/>
|
||||
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="22.1694" y1="39.562" x2="22.1694" y2="4.7469">
|
||||
<stop offset="0" style="stop-color:#00B387"/>
|
||||
<stop offset="1" style="stop-color:#00A76D"/>
|
||||
</linearGradient>
|
||||
<path class="st5" d="M23.3,33.9c-0.7,1-1.4,1.8-2.2,2.7c-1.2,0.3-2.6,0.2-3.7,0.2l-0.1,0.3c0.8,0.4,1.6,0.7,2.5,0.9
|
||||
c-0.7,0.6-1.6,1.1-2.3,1.6l-0.1,0.3c1.4-0.3,3.3-0.9,4.7-1.8c0.7,0,1.4,0,1.9-0.1c0,0,0.1-0.3,0.1-0.3c-0.1-0.3-0.4-0.5-0.5-1
|
||||
c1.3-1,2.2-1.9,3.3-3l0.2-0.3c-1.1,0.7-2.4,1.8-3.6,2.4C23.4,35.1,23.3,34.6,23.3,33.9z"/>
|
||||
<path class="st6" d="M35.4,11.9c-2.8,1.6-3.7,1.8-6.7,3.6c1.8-1.9,2.4-2.7,3.5-4.4c-2.8,0.1-6.9,0.5-9.8,1.1
|
||||
c2.5-1.4,7.6-2.9,10.2-3.2C32,8.2,27,5.6,25.7,5c3.9,0.3,8.8,1.8,11.1,3.2c0.9-0.3,1.9-0.3,3.6-0.5C40,8.5,40,9,38.3,10.1
|
||||
c0.5,1.2-0.6,8.1-1.6,9.9C36.7,17.1,36.4,13.5,35.4,11.9z"/>
|
||||
<path class="st6" d="M14.9,36.5c-1.6-0.6-2.8-1.3-4-2.5c0.4-1.1,0.8-1.9,1.5-2.9c-1.3,0.2-2.3,0.3-3.4,0.6C8,30,7.6,28.4,7.2,26.3
|
||||
c-0.3,2.3-0.3,3.9,0,5.7c-1,0.3-1.8,0.5-2.6,0.9c1.2,0.7,2.2,1.3,3.5,1.9c0.7,1.5,1.5,2.6,2.7,3.8c-0.3-1-0.4-1.8-0.2-2.9
|
||||
C11.9,36.2,13.2,36.4,14.9,36.5z"/>
|
||||
<path class="st6" d="M19.1,13.7L19.1,13.7c-0.5,0.7-1.1,1.9-1.2,2.4c4.1,0.6,7.5,2.7,7.5,2.7c-3.6-0.6-5.5-0.6-6.9-0.4
|
||||
c-1.3,0.1-1.6,0.3-1.6,0.3c-1,2.1-1.6,5.8-1.6,5.8c-0.7-1.6-1.6-4.8-1.6-4.8c-1.8,1-6,4.9-6,4.9c2.3-4.6,4.7-6.7,4.7-6.7
|
||||
c-0.8-0.8-2.9-1.2-4.5-1.3c0.8-0.3,2.9-0.7,4.5-0.8c1.6,0,2.5,0,2.5,0C16.2,14.8,18.3,13.8,19.1,13.7z"/>
|
||||
<path class="st6" d="M23.5,33.6c-0.7,1-1.4,1.8-2.2,2.7c-1.4,0.4-2.5,0.5-3.9,0.5c0.8,0.4,1.6,0.7,2.5,0.9
|
||||
c-0.9,0.8-1.6,1.3-2.5,1.9c1.4-0.3,3.3-0.9,4.7-1.8c0.7,0,1.4,0,1.9-0.1c-0.1-0.4-0.2-0.7-0.3-1.3c1.3-1,2.3-1.9,3.3-3
|
||||
c-1.2,0.8-2.2,1.4-3.5,2C23.5,34.8,23.5,34.3,23.5,33.6z"/>
|
||||
<path fill="#FFFFFF" d="M62.4,16.6c3.1,0,4.2,0.6,4.2,2.3c0,0.5-0.1,0.9-0.4,1.2c-0.6,0.7-1.7,1.1-3.2,1h-0.1l-0.9,2.2h0.9c1.7,0,3.2,0.5,3.9,1.4
|
||||
c0.3,0.4,0.5,0.9,0.5,1.4c0,1.7-1.5,2.6-4.5,2.6c-0.5,0-1.3,0-1.8,0c-0.1-2.3-0.1-5.5-0.1-6.4c0-1.1,0.1-3.5,0.1-5.6
|
||||
C61.3,16.6,61.9,16.6,62.4,16.6z M56.8,15c0.1,1.6,0.2,5.8,0.2,7.3c0,1.4,0,6.1-0.2,8.1l0,0.2H64c3.6,0,7.4-1.1,7.4-4.3
|
||||
c0-2-1.5-3.5-4.2-4.3c2-0.5,3.4-1.9,3.4-3.5c0-2.6-3-3.6-5.8-3.7h-8.1L56.8,15"/>
|
||||
<path fill="#FFFFFF" d="M88.3,14.8h-3.6l0.1,4c0.1,2,0.1,4,0.3,5.9c-0.2-0.6-0.4-0.9-1.5-2.5c0-0.1-3.7-5.8-5-7.4l0,0h-4.1V15
|
||||
c0.1,1.6,0.2,5.8,0.2,7.3c0,1.4,0,6.1-0.2,8.1l0,0.2h3.7v-0.2c-0.2-3.8-0.2-7.7-0.2-11.5c0.1,0.5,0.3,0.8,0.9,1.7
|
||||
c0,0.1,6.4,9.3,6.7,9.9l0,0.1h3l0-0.2c-0.2-2-0.2-6.7-0.2-8.1c0-1.5,0.1-5.7,0.2-7.3l0-0.1H88.3z"/>
|
||||
<path fill="#FFFFFF" d="M98,16.7c2.1,0,3.5,0.4,4.2,1.2c0.3,0.4,0.5,0.9,0.5,1.4c0,2.3-2.6,2.8-4.7,2.8l-0.9,0c0,0-0.2,0-0.4,0c0-0.5,0-1.2,0-2
|
||||
c0-1,0-2.2,0-3.3C97,16.8,97.5,16.7,98,16.7z M92.6,15c0.1,1.6,0.2,5.8,0.2,7.3c0,1.4,0,6.1-0.2,8.1v0.2H97l0-0.2
|
||||
c-0.1-1.5-0.2-4.2-0.2-6.3c0.2,0,0.8,0,0.8,0l0.6,0c5.8,0,8.6-1.5,8.6-4.7c0-3.7-3.9-4.5-7.2-4.6h-6.9V15"/>
|
||||
<path fill="#FFFFFF" d="M120.5,16.7c2.1,0,3.5,0.4,4.2,1.2c0.3,0.4,0.5,0.9,0.5,1.4c0,2.3-2.6,2.8-4.7,2.8l-0.9,0c0,0-0.2,0-0.4,0
|
||||
c0-0.5,0-1.2,0-2c0-1,0-2.2,0-3.3C119.5,16.8,120,16.7,120.5,16.7z M115.1,15c0.1,1.6,0.2,5.8,0.2,7.3c0,1.4,0,6.1-0.2,8.1v0.2
|
||||
h4.4l0-0.2c-0.1-1.5-0.2-4.2-0.2-6.3c0.2,0,0.8,0,0.8,0l0.6,0c5.8,0,8.6-1.5,8.6-4.7c0-3.7-4-4.5-7.3-4.6h-6.9V15"/>
|
||||
<path fill="#FFFFFF" d="M136.2,19.5c0.3,0.8,1.3,2.8,2.3,5.3c-0.2,0-0.4,0-0.4,0l-1.9,0c0,0-2,0-2.3,0C134.7,22.8,135.5,21,136.2,19.5z
|
||||
M135.1,14.8L135.1,14.8L135.1,14.8c-0.9,2.3-6.2,13.8-7,15.6l-0.1,0.2h3.7l0-0.1c0.3-1.1,0.8-2.3,1.3-3.6c0.2,0,3.1,0,3.1,0
|
||||
l2.6,0c0,0,0.4,0,0.5,0c0.7,1.7,1.2,3,1.4,3.6l0,0.1h4.3l-7-15.8H138H135.1"/>
|
||||
<path fill="#FFFFFF" d="M146.8,15c0.1,1.6,0.2,5.8,0.2,7.3c0,1.4,0,6.1-0.2,8.1v0.2h4.4l0-0.2c-0.2-2-0.3-6.7-0.3-8.1c0-1.1,0-3.5,0.1-5.5
|
||||
c0.3,0,0.8-0.1,1.2-0.1c2,0,3.5,0.4,4.2,1.2c0.3,0.4,0.5,0.9,0.5,1.4c0,1.8-1.7,2.7-3.3,2.8c-0.5,0-0.9,0-0.9,0l-0.3-0.1l0.2,0.3
|
||||
c1.6,2.3,3.9,6.2,4.9,8.1l0,0.1h4.7l-0.1-0.2c-0.2-0.3-3.3-4.8-4.6-6.7c0,0-0.1-0.1-0.1-0.1c2.4-0.7,3.6-2.1,3.6-4.1
|
||||
c0-3.6-3.9-4.5-7.3-4.6h-6.9L146.8,15z"/>
|
||||
<path fill="#FFFFFF" d="M168.4,14.8h-4.2l0,0.1c0.1,1.6,0.2,5.8,0.2,7.3c0,1.4,0,6.1-0.2,8.1l0,0.2h4.4l0-0.2c-0.2-2-0.2-6.7-0.2-8.1
|
||||
c0-1.5,0.1-5.7,0.2-7.3v-0.1H168.4z"/>
|
||||
<path fill="#FFFFFF" d="M178.1,16.6L178.1,16.6c3.1,0,4.2,0.6,4.2,2.3c0,0.5-0.1,0.9-0.4,1.2c-0.6,0.7-1.7,1.1-3.2,1h-0.1l-0.8,2.2h0.8
|
||||
c1.7,0,3.1,0.5,3.9,1.4c0.4,0.4,0.5,0.9,0.5,1.4c0,1.7-1.5,2.6-4.6,2.6c-0.5,0-1.3,0-1.8,0c-0.1-2.3-0.1-5.5-0.1-6.4
|
||||
c0-1.1,0-3.5,0.1-5.6C177,16.6,177.6,16.6,178.1,16.6z M172.5,15c0.1,1.6,0.2,5.8,0.2,7.3c0,1.4,0,6.1-0.2,8.1l0,0.2h7.3
|
||||
c3.6,0,7.4-1.1,7.4-4.3c0-2-1.5-3.5-4.2-4.3c2-0.5,3.4-1.9,3.4-3.5c0-2.6-3-3.6-5.8-3.7h-8.1L172.5,15"/>
|
||||
<path fill="#FFFFFF" d="M196.1,19.4c0.4,0.7,1.3,2.8,2.3,5.3c-0.2,0-0.3,0-0.3,0l-1.9,0c0,0-2,0-2.3,0C194.6,22.8,195.4,21,196.1,19.4z
|
||||
M197.9,14.8H195l0,0.1c-0.9,2.4-6.4,14.5-6.9,15.5l-0.1,0.2h3.8l0-0.1c0.3-1.1,0.7-2.3,1.2-3.6c0.1,0,3.1,0,3.1,0l2.6,0
|
||||
c0,0,0.5,0,0.5,0c0.7,1.7,1.2,3,1.4,3.6l0,0.1h4.3L197.9,14.8L197.9,14.8"/>
|
||||
<path fill="#FFFFFF" d="M206.3,18.9c0,2.8,2.8,3.9,5.2,4.9c1.9,0.8,3.9,1.6,3.9,2.9c0,0.4-0.1,0.7-0.3,1c-0.5,0.5-1.4,0.8-2.9,0.7
|
||||
c-1.5-0.1-3.1-0.5-5-1.4l-0.7-0.4v0.6V30l0.5,0.1l0.3,0c0.9,0.2,2.7,0.6,4.4,0.6c4.6,0,7.4-1.8,7.4-4.9c0-2.9-2.8-4-5.4-5
|
||||
c-1.9-0.8-3.8-1.5-3.8-2.7c0-0.4,0-1.4,2.4-1.4c1.8,0,3.5,0.7,4.5,1.1l0.9,0.4l0-0.6v-2.9l-0.9-0.2c-0.9-0.2-2.4-0.5-3.9-0.5
|
||||
C208.9,14.2,206.3,16.1,206.3,18.9z"/>
|
||||
</g>
|
||||
</switch>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.5 KiB |
124
erpnext/public/images/bank-logos/BNP_Paribas.svg
Normal file
@@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
|
||||
<!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
|
||||
<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
|
||||
<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
|
||||
<!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
|
||||
<!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
|
||||
<!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
|
||||
<!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
|
||||
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
|
||||
]>
|
||||
<svg version="1.1" id="Calque_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 219.1 45.4"
|
||||
style="enable-background:new 0 0 219.1 45.4;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:url(#SVGID_1_);}
|
||||
.st1{fill:url(#SVGID_2_);}
|
||||
.st2{fill:url(#SVGID_3_);}
|
||||
.st3{fill:url(#SVGID_4_);}
|
||||
.st4{fill:url(#SVGID_5_);}
|
||||
.st5{fill:url(#SVGID_6_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
</style>
|
||||
<switch>
|
||||
<foreignObject requiredExtensions="&ns_ai;" x="0" y="0" width="1" height="1">
|
||||
<i:pgfRef xlink:href="#adobe_illustrator_pgf">
|
||||
</i:pgfRef>
|
||||
</foreignObject>
|
||||
<g i:extraneous="self">
|
||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="22.6772" y1="-1.1157" x2="22.6772" y2="46.7615">
|
||||
<stop offset="0" style="stop-color:#008053"/>
|
||||
<stop offset="0.6" style="stop-color:#7FCBAE"/>
|
||||
<stop offset="1" style="stop-color:#00A76D"/>
|
||||
</linearGradient>
|
||||
<rect class="st0" width="45.4" height="45.4"/>
|
||||
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="22.6057" y1="-11.2666" x2="22.6057" y2="42.5342">
|
||||
<stop offset="0" style="stop-color:#00A76D"/>
|
||||
<stop offset="0.3" style="stop-color:#7FCBAE"/>
|
||||
<stop offset="0.55" style="stop-color:#00A76D"/>
|
||||
<stop offset="0.8352" style="stop-color:#008053"/>
|
||||
<stop offset="0.8691" style="stop-color:#008558"/>
|
||||
<stop offset="0.9244" style="stop-color:#009264"/>
|
||||
<stop offset="0.9939" style="stop-color:#00A97A"/>
|
||||
<stop offset="1" style="stop-color:#00AD7D"/>
|
||||
</linearGradient>
|
||||
<path class="st1" d="M44,22.9c0,9.5,0.4,19.2,0.4,19.2c0,1.1-0.7,1.8-1.6,1.8H3.5c-0.9,0-1.5-0.8-1.6-1.8c0,0-1.1-8.3-1.1-20.9
|
||||
C0.8,8.5,2,2.6,2,2.6c0.1-1,0.7-1.8,1.6-1.8h39.3c0.9,0,1.6,0.8,1.6,1.8C44.4,2.6,44,13.5,44,22.9z"/>
|
||||
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="31.2236" y1="39.563" x2="31.2236" y2="4.7475">
|
||||
<stop offset="0" style="stop-color:#00B387"/>
|
||||
<stop offset="1" style="stop-color:#00A76D"/>
|
||||
</linearGradient>
|
||||
<path class="st2" d="M35.2,12.2c-2.8,1.6-3.7,1.8-6.7,3.6l0.1-0.3c1.6-1.7,2.3-2.5,3.3-4c-2.8,0.2-6.9,0.5-9.8,1.1l0.2-0.3
|
||||
C25,11,29.9,9.7,32.4,9.4c-0.6-0.9-5.6-3.6-6.8-4.1L25.7,5c3.8,0.4,8.8,2.2,10.9,3.5c0.9-0.3,1.9-0.3,3.6-0.5c0,0-0.3,1-2.1,2.3
|
||||
c0.5,1.2-0.6,8.1-1.6,9.9C36.5,17.4,36.3,13.8,35.2,12.2z"/>
|
||||
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="9.6226" y1="39.5649" x2="9.6226" y2="4.7389">
|
||||
<stop offset="0" style="stop-color:#00B387"/>
|
||||
<stop offset="1" style="stop-color:#00A76D"/>
|
||||
</linearGradient>
|
||||
<path class="st3" d="M14.7,36.8l0.1-0.3c-1.5-0.6-3-1-4.2-2.2c0.4-1.1,0.8-1.9,1.5-2.9l0.1-0.3c-1.3,0.2-2.4,0.7-3.5,0.9
|
||||
c-0.9-1.5-1.2-3.6-1.7-5.6L7,26.6c-0.2,2.3-0.3,3.9,0,5.7c-0.9,0.3-1.7,0.3-2.5,0.6l-0.1,0.3c1.2,0.7,2.1,1.3,3.5,1.9
|
||||
c0.7,1.5,1.5,2.6,2.7,3.8l0.1-0.3c-0.2-0.9-0.5-1.6-0.4-2.6C11.8,36.5,13,36.7,14.7,36.8z"/>
|
||||
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="16.3516" y1="39.5571" x2="16.3516" y2="4.754">
|
||||
<stop offset="0" style="stop-color:#00B387"/>
|
||||
<stop offset="1" style="stop-color:#00A76D"/>
|
||||
</linearGradient>
|
||||
<path class="st4" d="M18.9,14c0,0-0.6,1.1-1.1,2.5h-0.1c3.5,0.5,6.8,1.9,7.6,2.4l-0.1,0.3c-3.6-0.6-5.5-0.6-6.9-0.4
|
||||
c-1.3,0.1-1.6,0.3-1.6,0.3c-0.8,1.7-1.2,4.5-1.4,5.5l-0.1,0.3c-0.7-1.6-1.6-4.8-1.6-4.8c-1.8,1-6,4.9-6,4.9
|
||||
c2.3-4.6,4.7-6.7,4.7-6.7c-0.8-0.8-2.9-1.2-4.5-1.3l0.1-0.3c1-0.3,3-0.4,4.3-0.5c1.6,0,2.5,0,2.5,0C16,15.1,18.1,14.1,18.9,14z"/>
|
||||
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="22.1694" y1="39.562" x2="22.1694" y2="4.7469">
|
||||
<stop offset="0" style="stop-color:#00B387"/>
|
||||
<stop offset="1" style="stop-color:#00A76D"/>
|
||||
</linearGradient>
|
||||
<path class="st5" d="M23.3,33.9c-0.7,1-1.4,1.8-2.2,2.7c-1.2,0.3-2.6,0.2-3.7,0.2l-0.1,0.3c0.8,0.4,1.6,0.7,2.5,0.9
|
||||
c-0.7,0.6-1.6,1.1-2.3,1.6l-0.1,0.3c1.4-0.3,3.3-0.9,4.7-1.8c0.7,0,1.4,0,1.9-0.1c0,0,0.1-0.3,0.1-0.3c-0.1-0.3-0.4-0.5-0.5-1
|
||||
c1.3-1,2.2-1.9,3.3-3l0.2-0.3c-1.1,0.7-2.4,1.8-3.6,2.4C23.4,35.1,23.3,34.6,23.3,33.9z"/>
|
||||
<path class="st6" d="M35.4,11.9c-2.8,1.6-3.7,1.8-6.7,3.6c1.8-1.9,2.4-2.7,3.5-4.4c-2.8,0.1-6.9,0.5-9.8,1.1
|
||||
c2.5-1.4,7.6-2.9,10.2-3.2C32,8.2,27,5.6,25.7,5c3.9,0.3,8.8,1.8,11.1,3.2c0.9-0.3,1.9-0.3,3.6-0.5C40,8.5,40,9,38.3,10.1
|
||||
c0.5,1.2-0.6,8.1-1.6,9.9C36.7,17.1,36.4,13.5,35.4,11.9z"/>
|
||||
<path class="st6" d="M14.9,36.5c-1.6-0.6-2.8-1.3-4-2.5c0.4-1.1,0.8-1.9,1.5-2.9c-1.3,0.2-2.3,0.3-3.4,0.6C8,30,7.6,28.4,7.2,26.3
|
||||
c-0.3,2.3-0.3,3.9,0,5.7c-1,0.3-1.8,0.5-2.6,0.9c1.2,0.7,2.2,1.3,3.5,1.9c0.7,1.5,1.5,2.6,2.7,3.8c-0.3-1-0.4-1.8-0.2-2.9
|
||||
C11.9,36.2,13.2,36.4,14.9,36.5z"/>
|
||||
<path class="st6" d="M19.1,13.7L19.1,13.7c-0.5,0.7-1.1,1.9-1.2,2.4c4.1,0.6,7.5,2.7,7.5,2.7c-3.6-0.6-5.5-0.6-6.9-0.4
|
||||
c-1.3,0.1-1.6,0.3-1.6,0.3c-1,2.1-1.6,5.8-1.6,5.8c-0.7-1.6-1.6-4.8-1.6-4.8c-1.8,1-6,4.9-6,4.9c2.3-4.6,4.7-6.7,4.7-6.7
|
||||
c-0.8-0.8-2.9-1.2-4.5-1.3c0.8-0.3,2.9-0.7,4.5-0.8c1.6,0,2.5,0,2.5,0C16.2,14.8,18.3,13.8,19.1,13.7z"/>
|
||||
<path class="st6" d="M23.5,33.6c-0.7,1-1.4,1.8-2.2,2.7c-1.4,0.4-2.5,0.5-3.9,0.5c0.8,0.4,1.6,0.7,2.5,0.9
|
||||
c-0.9,0.8-1.6,1.3-2.5,1.9c1.4-0.3,3.3-0.9,4.7-1.8c0.7,0,1.4,0,1.9-0.1c-0.1-0.4-0.2-0.7-0.3-1.3c1.3-1,2.3-1.9,3.3-3
|
||||
c-1.2,0.8-2.2,1.4-3.5,2C23.5,34.8,23.5,34.3,23.5,33.6z"/>
|
||||
<path d="M62.4,16.6c3.1,0,4.2,0.6,4.2,2.3c0,0.5-0.1,0.9-0.4,1.2c-0.6,0.7-1.7,1.1-3.2,1h-0.1l-0.9,2.2h0.9c1.7,0,3.2,0.5,3.9,1.4
|
||||
c0.3,0.4,0.5,0.9,0.5,1.4c0,1.7-1.5,2.6-4.5,2.6c-0.5,0-1.3,0-1.8,0c-0.1-2.3-0.1-5.5-0.1-6.4c0-1.1,0.1-3.5,0.1-5.6
|
||||
C61.3,16.6,61.9,16.6,62.4,16.6z M56.8,15c0.1,1.6,0.2,5.8,0.2,7.3c0,1.4,0,6.1-0.2,8.1l0,0.2H64c3.6,0,7.4-1.1,7.4-4.3
|
||||
c0-2-1.5-3.5-4.2-4.3c2-0.5,3.4-1.9,3.4-3.5c0-2.6-3-3.6-5.8-3.7h-8.1L56.8,15"/>
|
||||
<path d="M88.3,14.8h-3.6l0.1,4c0.1,2,0.1,4,0.3,5.9c-0.2-0.6-0.4-0.9-1.5-2.5c0-0.1-3.7-5.8-5-7.4l0,0h-4.1V15
|
||||
c0.1,1.6,0.2,5.8,0.2,7.3c0,1.4,0,6.1-0.2,8.1l0,0.2h3.7v-0.2c-0.2-3.8-0.2-7.7-0.2-11.5c0.1,0.5,0.3,0.8,0.9,1.7
|
||||
c0,0.1,6.4,9.3,6.7,9.9l0,0.1h3l0-0.2c-0.2-2-0.2-6.7-0.2-8.1c0-1.5,0.1-5.7,0.2-7.3l0-0.1H88.3z"/>
|
||||
<path d="M98,16.7c2.1,0,3.5,0.4,4.2,1.2c0.3,0.4,0.5,0.9,0.5,1.4c0,2.3-2.6,2.8-4.7,2.8l-0.9,0c0,0-0.2,0-0.4,0c0-0.5,0-1.2,0-2
|
||||
c0-1,0-2.2,0-3.3C97,16.8,97.5,16.7,98,16.7z M92.6,15c0.1,1.6,0.2,5.8,0.2,7.3c0,1.4,0,6.1-0.2,8.1v0.2H97l0-0.2
|
||||
c-0.1-1.5-0.2-4.2-0.2-6.3c0.2,0,0.8,0,0.8,0l0.6,0c5.8,0,8.6-1.5,8.6-4.7c0-3.7-3.9-4.5-7.2-4.6h-6.9V15"/>
|
||||
<path d="M120.5,16.7c2.1,0,3.5,0.4,4.2,1.2c0.3,0.4,0.5,0.9,0.5,1.4c0,2.3-2.6,2.8-4.7,2.8l-0.9,0c0,0-0.2,0-0.4,0
|
||||
c0-0.5,0-1.2,0-2c0-1,0-2.2,0-3.3C119.5,16.8,120,16.7,120.5,16.7z M115.1,15c0.1,1.6,0.2,5.8,0.2,7.3c0,1.4,0,6.1-0.2,8.1v0.2
|
||||
h4.4l0-0.2c-0.1-1.5-0.2-4.2-0.2-6.3c0.2,0,0.8,0,0.8,0l0.6,0c5.8,0,8.6-1.5,8.6-4.7c0-3.7-4-4.5-7.3-4.6h-6.9V15"/>
|
||||
<path d="M136.2,19.5c0.3,0.8,1.3,2.8,2.3,5.3c-0.2,0-0.4,0-0.4,0l-1.9,0c0,0-2,0-2.3,0C134.7,22.8,135.5,21,136.2,19.5z
|
||||
M135.1,14.8L135.1,14.8L135.1,14.8c-0.9,2.3-6.2,13.8-7,15.6l-0.1,0.2h3.7l0-0.1c0.3-1.1,0.8-2.3,1.3-3.6c0.2,0,3.1,0,3.1,0
|
||||
l2.6,0c0,0,0.4,0,0.5,0c0.7,1.7,1.2,3,1.4,3.6l0,0.1h4.3l-7-15.8H138H135.1"/>
|
||||
<path d="M146.8,15c0.1,1.6,0.2,5.8,0.2,7.3c0,1.4,0,6.1-0.2,8.1v0.2h4.4l0-0.2c-0.2-2-0.3-6.7-0.3-8.1c0-1.1,0-3.5,0.1-5.5
|
||||
c0.3,0,0.8-0.1,1.2-0.1c2,0,3.5,0.4,4.2,1.2c0.3,0.4,0.5,0.9,0.5,1.4c0,1.8-1.7,2.7-3.3,2.8c-0.5,0-0.9,0-0.9,0l-0.3-0.1l0.2,0.3
|
||||
c1.6,2.3,3.9,6.2,4.9,8.1l0,0.1h4.7l-0.1-0.2c-0.2-0.3-3.3-4.8-4.6-6.7c0,0-0.1-0.1-0.1-0.1c2.4-0.7,3.6-2.1,3.6-4.1
|
||||
c0-3.6-3.9-4.5-7.3-4.6h-6.9L146.8,15z"/>
|
||||
<path d="M168.4,14.8h-4.2l0,0.1c0.1,1.6,0.2,5.8,0.2,7.3c0,1.4,0,6.1-0.2,8.1l0,0.2h4.4l0-0.2c-0.2-2-0.2-6.7-0.2-8.1
|
||||
c0-1.5,0.1-5.7,0.2-7.3v-0.1H168.4z"/>
|
||||
<path d="M178.1,16.6L178.1,16.6c3.1,0,4.2,0.6,4.2,2.3c0,0.5-0.1,0.9-0.4,1.2c-0.6,0.7-1.7,1.1-3.2,1h-0.1l-0.8,2.2h0.8
|
||||
c1.7,0,3.1,0.5,3.9,1.4c0.4,0.4,0.5,0.9,0.5,1.4c0,1.7-1.5,2.6-4.6,2.6c-0.5,0-1.3,0-1.8,0c-0.1-2.3-0.1-5.5-0.1-6.4
|
||||
c0-1.1,0-3.5,0.1-5.6C177,16.6,177.6,16.6,178.1,16.6z M172.5,15c0.1,1.6,0.2,5.8,0.2,7.3c0,1.4,0,6.1-0.2,8.1l0,0.2h7.3
|
||||
c3.6,0,7.4-1.1,7.4-4.3c0-2-1.5-3.5-4.2-4.3c2-0.5,3.4-1.9,3.4-3.5c0-2.6-3-3.6-5.8-3.7h-8.1L172.5,15"/>
|
||||
<path d="M196.1,19.4c0.4,0.7,1.3,2.8,2.3,5.3c-0.2,0-0.3,0-0.3,0l-1.9,0c0,0-2,0-2.3,0C194.6,22.8,195.4,21,196.1,19.4z
|
||||
M197.9,14.8H195l0,0.1c-0.9,2.4-6.4,14.5-6.9,15.5l-0.1,0.2h3.8l0-0.1c0.3-1.1,0.7-2.3,1.2-3.6c0.1,0,3.1,0,3.1,0l2.6,0
|
||||
c0,0,0.5,0,0.5,0c0.7,1.7,1.2,3,1.4,3.6l0,0.1h4.3L197.9,14.8L197.9,14.8"/>
|
||||
<path d="M206.3,18.9c0,2.8,2.8,3.9,5.2,4.9c1.9,0.8,3.9,1.6,3.9,2.9c0,0.4-0.1,0.7-0.3,1c-0.5,0.5-1.4,0.8-2.9,0.7
|
||||
c-1.5-0.1-3.1-0.5-5-1.4l-0.7-0.4v0.6V30l0.5,0.1l0.3,0c0.9,0.2,2.7,0.6,4.4,0.6c4.6,0,7.4-1.8,7.4-4.9c0-2.9-2.8-4-5.4-5
|
||||
c-1.9-0.8-3.8-1.5-3.8-2.7c0-0.4,0-1.4,2.4-1.4c1.8,0,3.5,0.7,4.5,1.1l0.9,0.4l0-0.6v-2.9l-0.9-0.2c-0.9-0.2-2.4-0.5-3.9-0.5
|
||||
C208.9,14.2,206.3,16.1,206.3,18.9z"/>
|
||||
</g>
|
||||
</switch>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.5 KiB |
18
erpnext/public/images/bank-logos/BNY_Mellon-Dark.svg
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Logo_with_Clear_Space" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
x="0px" y="0px" width="206.088px" height="44.668px" viewBox="30.189 372.742 206.088 44.668"
|
||||
enable-background="new 30.189 372.742 206.088 44.668" xml:space="preserve">
|
||||
<g>
|
||||
<polygon fill="#2B9CAE" points="74.549,395.23 49.699,404.677 30.189,412.275 42.717,395.23 30.189,378.184 49.699,385.578 "/>
|
||||
<path fill="#FFFFFF" d="M81.429,372.947h32.141c12.425,0,15.505,5.34,15.505,10.269v0.616c0,5.339-4.724,8.728-8.01,9.036
|
||||
c4.826,0.616,10.166,4.313,10.166,11.192v0.616c0,5.956-3.594,12.527-17.457,12.527H81.429v-44.462l0,0V372.947z M94.983,382.189
|
||||
v7.701h15.197c3.594,0,4.723-1.746,4.723-3.799l0,0c0-2.054-1.232-3.902-4.723-3.902H94.983z M94.983,398.721v8.421h16.019
|
||||
c4.21,0,5.34-2.156,5.34-4.416l0,0c0-2.156-1.232-4.005-5.34-4.005H94.983z"/>
|
||||
<path fill="#FFFFFF" d="M151.665,372.947l18.175,24.747v-24.747h13.554v44.463h-16.019l-17.97-24.439v24.439h-13.555v-44.463
|
||||
H151.665L151.665,372.947z"/>
|
||||
<path fill="#FFFFFF" d="M202.597,398.824l-19.1-25.877h16.84l9.55,13.041l9.55-13.041h16.84l-19.1,25.877v18.482h-14.684v-18.482
|
||||
H202.597z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
18
erpnext/public/images/bank-logos/BNY_Mellon.svg
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Logo_with_Clear_Space" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
x="0px" y="0px" width="206.088px" height="44.668px" viewBox="30.189 372.742 206.088 44.668"
|
||||
enable-background="new 30.189 372.742 206.088 44.668" xml:space="preserve">
|
||||
<g>
|
||||
<polygon fill="#2B9CAE" points="74.549,395.23 49.699,404.677 30.189,412.275 42.717,395.23 30.189,378.184 49.699,385.578 "/>
|
||||
<path fill="#04243C" d="M81.429,372.947h32.141c12.425,0,15.505,5.34,15.505,10.269v0.616c0,5.339-4.724,8.728-8.01,9.036
|
||||
c4.826,0.616,10.166,4.313,10.166,11.192v0.616c0,5.956-3.594,12.527-17.457,12.527H81.429v-44.462l0,0V372.947z M94.983,382.189
|
||||
v7.701h15.197c3.594,0,4.723-1.746,4.723-3.799l0,0c0-2.054-1.232-3.902-4.723-3.902H94.983z M94.983,398.721v8.421h16.019
|
||||
c4.21,0,5.34-2.156,5.34-4.416l0,0c0-2.156-1.232-4.005-5.34-4.005H94.983z"/>
|
||||
<path fill="#04243C" d="M151.665,372.947l18.175,24.747v-24.747h13.554v44.463h-16.019l-17.97-24.439v24.439h-13.555v-44.463
|
||||
H151.665L151.665,372.947z"/>
|
||||
<path fill="#04243C" d="M202.597,398.824l-19.1-25.877h16.84l9.55,13.041l9.55-13.041h16.84l-19.1,25.877v18.482h-14.684v-18.482
|
||||
H202.597z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
BIN
erpnext/public/images/bank-logos/Banco_Atlantida.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
erpnext/public/images/bank-logos/Banco_Lafise.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
1
erpnext/public/images/bank-logos/Banco_de_Finanzas.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 132.64 32.92"><defs><style>.cls-1{fill:#056eb5;}</style></defs><title>logoAzul-responsive</title><polygon class="cls-1" points="98.96 32.84 116.74 32.84 116.74 21.79 130.71 21.79 130.71 14.25 116.74 14.25 116.74 9.7 132.64 9.7 132.64 0 98.96 0 98.96 32.84"/><path class="cls-1" d="M80.13,8.54H56V41.38H77.62c.28,0,1.21,0,2.51-.07,6.66-.3,23.93-2.46,23.93-15.68,0-15.44-15.26-16.95-23.93-17.09m0,23.59c-1,.08-1.94.08-2.51.08H73.75V18.15h3.87a16.84,16.84,0,0,1,2.51.15c2.72.3,6.38,2,6.38,6.88s-3.59,6.56-6.38,6.94" transform="translate(-8.54 -8.54)"/><path class="cls-1" d="M41.29,25C46.81,23.92,51,20.78,51,17.19c0-4.55-6.6-8.65-14.69-8.65H8.54V41.38l23.79.07h4C45.44,41,52,37.43,52,32.95c0-3.66-4.44-6.73-10.68-7.91m-8.6,9.46H26.31V16.59h6c2.71,0,4.92,1.7,4.92,3.8s-2.2,3.8-4.92,3.8H28.09v2h4.6c3.18,0,5.75,1.86,5.75,4.16s-2.57,4.16-5.75,4.16" transform="translate(-8.54 -8.54)"/></svg>
|
||||
|
After Width: | Height: | Size: 972 B |
BIN
erpnext/public/images/bank-logos/Bank_of_America.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
101
erpnext/public/images/bank-logos/Bank_of_Baroda.svg
Normal file
@@ -0,0 +1,101 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="186.631885"
|
||||
viewBox="0 0 88.723236 30.587624"
|
||||
width="535.814123"
|
||||
version="1.1"
|
||||
id="svg167"
|
||||
sodipodi:docname="BankOfBarodaLogo.svg"
|
||||
xml:space="preserve"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs171" /><sodipodi:namedview
|
||||
id="namedview169"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#999999"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.2645214"
|
||||
inkscape:cx="191.37676"
|
||||
inkscape:cy="93.711347"
|
||||
inkscape:current-layer="svg167" /><clipPath
|
||||
id="a"><path
|
||||
d="m22.324 841.676v-819.352"
|
||||
id="path2" /></clipPath><g
|
||||
clip-path="url(#a)"
|
||||
transform="matrix(1.25,0,0,-1.25,-363.12194,733.82119)"
|
||||
id="g11"><g
|
||||
fill="none"
|
||||
stroke="#000000"
|
||||
stroke-width="0.498"
|
||||
transform="translate(22.174,45)"
|
||||
id="g9"><path
|
||||
d="M 0,0 H -22.526"
|
||||
id="path5" /><path
|
||||
d="M 0,0 H -22.301"
|
||||
transform="translate(-0.225,774)"
|
||||
id="path7" /></g></g><g
|
||||
id="g742"
|
||||
transform="matrix(1.1619796,0,0,1.1619796,-7.1856781,-2.4772859)"><g
|
||||
id="g551"
|
||||
transform="matrix(0.60570503,0,0,0.60570503,8.1854591,6.0191764)"><path
|
||||
d="M 19.80738,29.57715 6.0650418,29.58764 6.0598018,29.219202 16.178076,28.816674 c 1.920859,-0.07343 3.785338,-0.173074 5.589503,-0.7867 3.700113,-1.237741 6.648927,-3.756492 7.515608,-6.877069 0.932239,-3.343475 -1.207585,-6.595169 -5.238111,-6.875758 3.414278,-1.001732 6.326379,-3.163845 7.099967,-5.9513859 1.008288,-3.6161977 -0.814234,-5.4426529 -3.887609,-6.1126591 5.112239,-0.081292 9.112609,1.636336 7.751618,6.5309213 -0.773589,2.7849177 -3.755182,4.9050747 -7.145859,5.8294467 3.983325,0.297635 6.166417,4.092152 5.109617,7.397603 -1.097447,3.444435 -3.875809,5.582948 -7.575921,6.816756 -1.805477,0.614937 -3.667334,0.715897 -5.589504,0.789322"
|
||||
id="path13"
|
||||
style="fill:#f15a29;stroke-width:1.31117" /><path
|
||||
d="m 12.59597,27.8451 -6.4915863,0.308124 c -0.00262,-0.166518 -0.00918,-0.216342 -0.027534,-0.376305 L 22.467744,23.047541 22.478233,22.783997 5.8618178,26.781744 C 5.8106823,26.625715 5.7962595,26.582446 5.7267677,26.434285 L 23.178396,16.743452 23.066947,16.474662 5.2193461,25.600383 C 5.1092081,25.446976 5.1262533,25.44042 5.0030036,25.30537 L 25.748283,5.7453853 25.567342,5.5251093 4.2149925,24.640609 C 4.116655,24.568494 4.0628971,24.510803 3.9553814,24.446556 L 19.107224,2.3442189 18.838435,2.2694823 3.0467429,24.040094 c -0.087848,-0.02885 -0.1756963,-0.05769 -0.2635445,-0.0826 L 11.452633,2.5789177 11.223178,2.5540055 1.4471195,23.768683 c -0.1206273,0 -0.2412546,0.0026 -0.3645043,0.01049 l -0.082604,0.0066 6.2988448,-22.7552982 11.76641,0.036713 c 5.565902,-0.31861352 9.962245,1.1852947 8.517339,6.3827595 -0.77621,2.7849177 -3.685689,4.9496537 -7.081611,5.8753377 l -0.01967,0.07342 c 4.030526,0.28059 6.298843,3.524416 5.370538,6.869203 -0.867993,3.117954 -3.967591,5.552791 -7.667703,6.789221 -1.806787,0.614937 -3.671266,0.717208 -5.588192,0.788011"
|
||||
id="path15"
|
||||
style="fill:#f15a29;stroke-width:1.31117" /></g><path
|
||||
id="path631"
|
||||
style="fill:#f15a29;stroke-width:0.868073"
|
||||
d="m 38.517895,13.255897 c 0.379348,0 0.540809,-0.349833 0.756959,-1.184052 0.170143,-0.665812 0.296881,-1.12589 -0.164933,-1.12589 -0.485253,0 -0.595499,0.460078 -0.765641,1.12589 -0.215282,0.834219 -0.23438,1.184052 0.173615,1.184052 z m -3.319511,-3.9992124 -0.931443,-1.152801 0.778662,-0.5694559 0.993075,1.7222569 h 0.299485 l -0.793418,-2.0946602 0.938387,-0.416675 0.548622,2.5113352 h 6.212798 l -0.158857,0.5095589 h -2.15803 l -0.266498,1.0772785 c 0.289068,-0.323791 0.646714,-0.447057 1.076411,-0.447057 1.160613,0 0.907136,1.098112 0.730049,1.782153 -0.170142,0.671889 -0.464419,1.641527 -1.592914,1.641527 -0.223095,0 -0.424488,-0.0434 -0.539073,-0.147573 l 0.07986,-0.300353 c 0.02951,0.0035 0.07205,0.02778 0.105037,0.02778 0.485253,0 0.618068,-0.581609 0.789079,-1.246553 0.215282,-0.835086 0.232643,-1.184052 -0.173615,-1.184052 -0.338549,0 -0.537337,0.251742 -0.728313,0.892379 l -0.632824,2.544323 -1.059049,-8.68e-4 0.274311,-1.011305 c -0.305561,0.323791 -0.645846,0.434036 -1.073806,0.434036 -1.16235,0 -0.897587,-1.158009 -0.721369,-1.842919 0.171879,-0.67102 0.454003,-1.610275 1.583366,-1.610275 0.406258,0 0.659735,0.09809 0.818592,0.380216 l 0.249137,-0.9887355 h -2.873321 l -1.192733,4.6398505 h -1.067729 l 0.281255,-1.012173 c -0.30643,0.323791 -0.839426,0.425355 -1.270859,0.425355 -1.159745,0 -0.930574,-1.185787 -0.754355,-1.869829 0.173615,-0.670152 0.489593,-1.585969 1.618088,-1.585969 0.407126,0 0.856788,0.109377 1.014777,0.391501 l 0.250005,-0.9887355 h -2.599878 l 0.158857,-0.5095589 z m 3.517431,5.1485414 c 0.280388,-1.013041 0.274311,-1.011305 0.274311,-1.011305 z m -3.699727,-1.564268 -0.851579,-1.103321 c -0.02952,0.103301 -0.05903,0.212678 -0.08854,0.330736 -0.21615,0.835954 -0.205733,1.178843 0.305562,1.178843 0.300353,0 0.486121,-0.124134 0.634561,-0.406258 z m -0.638034,-1.607671 0.833351,1.081619 0.06597,-0.243061 c 0.170145,-0.665812 0.303829,-1.127626 -0.302086,-1.132835 -0.288201,-0.0043 -0.467892,0.106773 -0.597235,0.294277 z m 3.08166,-3.2422529 h 1.015645 l -0.226567,0.8463712 h -1.015645 z" /><path
|
||||
id="path627"
|
||||
style="fill:#f15a29;stroke-width:0.868073"
|
||||
d="m 64.921347,12.882626 -0.843767,-1.0903 -0.07292,0.276047 c -0.21615,0.835954 -0.205733,1.178843 0.30643,1.178843 0.284728,0 0.467024,-0.111113 0.610257,-0.36459 z m 4.908084,-2.156294 0.225699,-0.9600885 h -3.154577 l -1.192732,4.6398505 h -1.066862 l 0.281256,-1.012173 c -0.304694,0.323791 -0.840295,0.425355 -1.269123,0.425355 -1.16235,0 -0.97311,-1.118078 -0.796023,-1.803855 0.172746,-0.671021 0.530393,-1.651943 1.659756,-1.651943 0.40539,0 0.852447,0.109377 1.011305,0.391501 l 0.252609,-0.9887355 h -2.584254 l 0.159726,-0.5095589 h 7.583486 l -0.931443,-1.152801 0.776058,-0.5694559 0.993943,1.7222569 h 0.30209 l -0.796891,-2.0946602 0.939255,-0.416675 0.548622,2.5113352 h 7.160734 L 79.77234,9.7662435 h -0.598102 l -1.193601,4.6450585 h -1.065994 l 1.191865,-4.6450585 h -0.92363 l -0.370667,1.1797115 h -1.490482 c -0.485252,0 -0.618068,0.580741 -0.816856,1.436661 -0.23872,1.030402 -0.42362,1.651074 0.245664,1.651074 0.04688,0 0.121531,-0.01823 0.214414,-0.05035 -0.07031,-0.634561 0.293409,-1.373291 1.043424,-1.373291 0.686646,0 0.687514,0.375007 0.593762,0.706611 -0.130211,0.467024 -0.369799,0.717897 -0.831614,0.84724 0.237852,0.447057 0.81078,0.482648 0.81078,0.482648 l -1.145856,0.630221 c -0.264762,-0.312506 -0.421883,-0.585949 -0.467891,-0.9054 -0.282124,0.07465 -0.59463,0.09636 -0.830746,0.09636 -1.375028,0 -1.145857,-1.346381 -0.914081,-2.255254 0.236984,-0.936651 0.645846,-1.757848 1.776077,-1.757848 0.40539,0 0.862865,0.02604 0.862865,0.02604 l 0.201393,-0.7144235 h -3.002665 l -1.1936,4.6450585 h -1.065994 l 1.192732,-4.6450585 h -0.854183 l -0.425356,1.6363175 h -1.069466 c 0.09115,-0.357646 -0.07552,-0.491329 -0.530393,-0.491329 -0.411466,0 -0.532997,0.05816 -0.703139,0.644978 -0.12153,0.501746 0.02257,0.608519 0.519108,0.596366 h 0.851579 c 0.625013,0 0.738731,0.233512 0.515636,1.164086 -0.274311,1.046896 -0.78387,1.107661 -1.42364,1.107661 H 67.62713 c -1.089431,0 -1.129363,-0.486121 -0.883698,-1.279539 h 1.230059 c -0.112849,0.418411 -0.359382,0.830746 0.354174,0.830746 0.4323,0 0.577269,-0.105037 0.740466,-0.706612 0.13542,-0.433168 0.169275,-0.658867 -0.486989,-0.658867 0,0 -0.583345,-0.0078 -0.861128,-0.0078 -0.730917,0 -0.614596,-0.618936 -0.482649,-1.131099 0.260422,-0.944464 0.444454,-1.06773 1.533017,-1.06773 0.669285,0 0.965298,0.07465 1.059049,0.322923 z m -5.54959,0.546886 0.842899,1.097245 0.08334,-0.298618 c 0.170142,-0.665812 0.303825,-1.127626 -0.30209,-1.132835 -0.307298,-0.0043 -0.492197,0.120662 -0.624144,0.334208 z m 3.329928,3.623337 h 1.014777 l -0.229171,0.845503 h -1.013909 z" /><path
|
||||
id="path17"
|
||||
style="fill:#f15a29;stroke-width:0.868073"
|
||||
d="m 54.255762,7.5693197 c -0.263026,1.0069647 -0.724841,1.0625214 -1.301241,1.0625214 h -1.123287 c -0.939255,0 -1.015645,-0.4027859 -0.825537,-1.0625214 h 1.111133 c -0.107641,0.3428888 -0.243928,0.6562632 0.346361,0.6562632 0.389765,0 0.519976,-0.093752 0.670153,-0.6371656 z M 46.952664,14.332477 H 45.35975 l 0.135419,-0.525185 h 1.387181 c 0.351569,0 0.870677,-0.19792 1.050368,-0.894115 0.110245,-0.440981 -0.079,-0.95054 -0.71182,-0.95054 h -1.042555 l 0.138023,-0.575532 h 1.208358 c 0.42796,0 0.756091,-0.365459 0.88283,-0.846371 0.09375,-0.365459 0.07205,-0.8550523 -0.564247,-0.8550523 h -1.296033 l 0.134551,-0.5251842 h 1.559059 c 0.790815,0 1.649339,0.3402847 1.419299,1.2882205 -0.170142,0.706611 -0.533864,1.060785 -1.366347,1.1936 0.861997,0.118058 1.032139,0.690986 0.858525,1.375028 -0.325528,1.258706 -1.664964,1.315131 -2.199697,1.315131 z m 9.606964,-4.6355103 h -0.843767 l -0.658,2.5339053 c -0.07552,0.295145 -0.06771,0.513031 0.289937,0.513031 0.358514,0 0.494801,-0.33768 0.570324,-0.634561 z M 50.228771,9.1874078 h 9.545331 l -0.159725,0.5095589 h -1.930595 l -0.319451,1.2231153 c 0.29775,-0.290805 0.658,-0.421884 1.077279,-0.421884 0.533865,0 0.934915,0.263894 0.817725,0.723105 l -0.685778,2.66672 h -1.123286 l 0.589421,-2.289976 c 0.07639,-0.297749 0.07205,-0.527789 -0.286464,-0.527789 -0.258686,0 -0.435772,0.217018 -0.544282,0.448794 l -0.278651,1.07207 c -0.05469,0.217886 -0.368063,1.527809 -0.398446,1.745695 h -1.161481 l 0.355042,-1.422772 c -0.314243,0.296881 -0.643242,0.402786 -1.065994,0.402786 -0.533865,0 -0.934915,-0.26563 -0.815121,-0.725709 L 54.59431,9.6969667 h -0.888038 l -1.194469,4.6450583 h -1.066861 l 1.1936,-4.6450583 h -0.844635 l -1.190996,4.6450583 h -1.066862 l 0.627617,-2.440153 h -0.866337 l 0.146704,-0.519976 h 0.853316 L 50.731386,9.6969667 H 50.06731 Z m 3.504411,4.8073882 h 1.013909 l -0.227435,0.843767 h -1.015645 z" /><g
|
||||
id="g721"
|
||||
transform="translate(-8.5122459,5.8762939)"><path
|
||||
d="m 42.76877,15.36941 h 0.728754 c 0.630014,0 0.759337,0.322434 0.64749,0.853708 -0.177383,0.835358 -0.77594,0.845844 -1.04245,0.845844 h -0.693802 z m 0.520788,-2.444908 h 0.770696 c 0.421175,0 0.650986,0.325056 0.557488,0.762832 -0.12408,0.580207 -0.543507,0.761959 -0.817008,0.761959 h -0.836232 z m -0.116216,5.061955 c 0.5304,0 1.862953,-0.06554 2.18364,-1.581588 0.175635,-0.817881 0.06466,-1.392845 -0.795163,-1.516052 l 0.0026,-0.01748 c 0.707783,-0.131945 1.153423,-0.62914 1.300223,-1.316825 0.271753,-1.274882 -0.457874,-1.550131 -1.412944,-1.550131 h -2.218592 l -1.270513,5.982072 h 2.210728"
|
||||
id="path19"
|
||||
style="fill:#f15a29;stroke-width:0.873805" /><path
|
||||
d="m 48.05791,15.96622 c -0.09699,0.455253 -0.184373,1.384108 -0.873805,1.384108 -0.38098,0 -0.354766,-0.366125 -0.290978,-0.662345 0.158159,-0.748851 0.579333,-0.697296 1.164783,-0.721763 z m 1.322941,-0.84497 c 0.161655,-0.763706 0.105731,-1.40071 -1.375369,-1.40071 -0.448263,0 -0.84497,0.07427 -1.15255,0.273501 -0.312822,0.19049 -0.540885,0.514671 -0.646616,1.017983 h 1.142938 c 0.07165,-0.32855 0.169518,-0.637004 0.57409,-0.637004 0.423796,0 0.417679,0.257773 0.341658,0.615159 l -0.06728,0.320687 c -1.080898,-0.01573 -2.163542,0.04107 -2.456267,1.425177 -0.156412,0.728753 0.01311,1.334301 0.824872,1.334301 0.50506,0 0.889534,-0.207092 1.230318,-0.637005 h 0.0166 l -0.06903,0.553119 h 1.08614 c 0.02884,-0.256025 0.05156,-0.521662 0.106604,-0.777687 z"
|
||||
id="path21"
|
||||
style="fill:#f15a29;stroke-width:0.873805" /><path
|
||||
d="m 51.44916,13.80443 h -1.168278 l -0.887786,4.182033 H 50.5605 l 0.613411,-2.882684 c 0.07864,-0.372241 0.206218,-0.663219 0.57846,-0.663219 0.373988,0 0.377483,0.290978 0.298841,0.663219 l -0.613411,2.882684 h 1.168277 l 0.7139,-3.353665 c 0.123206,-0.579333 -0.295347,-0.912253 -0.850213,-0.912253 -0.440398,0 -0.782056,0.131944 -1.094005,0.505933 h -0.01573 z"
|
||||
id="path23"
|
||||
style="fill:#f15a29;stroke-width:0.873805" /><path
|
||||
d="m 54.32834,17.98734 0.484088,-2.278011 h 0.0166 l 0.602052,2.278011 h 1.318572 l -0.82662,-2.31908 1.580714,-1.862953 h -1.217211 l -1.426924,1.762466 h -0.01573 l 0.75759,-3.562505 h -1.170026 l -1.270513,5.982072 z"
|
||||
id="path25"
|
||||
style="fill:#f15a29;stroke-width:0.873805" /><path
|
||||
d="m 59.85341,17.32499 c -0.430786,0 -0.479719,-0.273501 -0.20884,-1.550131 0.184373,-0.87031 0.319813,-1.308961 0.817009,-1.308961 0.497195,0 0.44564,0.438651 0.260394,1.308961 -0.271754,1.27663 -0.437777,1.550131 -0.868563,1.550131 z m -0.156411,0.745356 c 1.50644,0 1.900527,-0.919243 2.180144,-2.229078 0.241171,-1.143811 0.283113,-2.120726 -1.256532,-2.120726 -1.542266,0 -1.915381,0.976915 -2.158299,2.120726 -0.27787,1.309835 -0.274375,2.229078 1.234687,2.229078"
|
||||
id="path27"
|
||||
style="fill:#f15a29;stroke-width:0.873805" /><path
|
||||
d="m 64.97479,11.9808 c -0.138935,-0.0087 -0.271754,-0.01573 -0.411562,-0.01573 -1.426051,0 -1.461003,0.637004 -1.70829,1.83936 h -0.5304 l -0.152916,0.719142 h 0.521662 l -0.735744,3.462891 h 1.168278 l 0.73487,-3.462891 h 0.547876 L 64.56148,13.80443 h -0.547002 l 0.107478,-0.505933 c 0.09088,-0.423796 0.227189,-0.606421 0.692928,-0.572343 z"
|
||||
id="path29"
|
||||
style="fill:#f15a29;stroke-width:0.873805" /><path
|
||||
d="m 67.22221,15.36941 h 0.728754 c 0.62914,0 0.759337,0.322434 0.64749,0.853708 -0.17913,0.835358 -0.777687,0.845844 -1.04245,0.845844 h -0.695549 z m 0.51904,-2.444908 h 0.769823 c 0.422922,0 0.652733,0.325056 0.559236,0.762832 -0.122333,0.580207 -0.543507,0.761959 -0.816135,0.761959 h -0.837105 z m -0.115342,5.061955 c 0.529526,0 1.86208,-0.06554 2.184514,-1.581588 0.173887,-0.817881 0.06379,-1.392845 -0.796037,-1.516052 l 0.0026,-0.01748 c 0.706909,-0.131945 1.15255,-0.62914 1.300223,-1.316825 0.270006,-1.274882 -0.457874,-1.550131 -1.41207,-1.550131 H 66.68482 l -1.270514,5.982072 z"
|
||||
id="path31"
|
||||
style="fill:#f15a29;stroke-width:0.873805" /><path
|
||||
d="m 72.51049,15.96622 c -0.09874,0.455253 -0.186121,1.384108 -0.873805,1.384108 -0.38098,0 -0.353018,-0.366125 -0.288356,-0.662345 0.157285,-0.748851 0.577585,-0.697296 1.162161,-0.721763 z m 1.323815,-0.84497 c 0.161654,-0.763706 0.106605,-1.40071 -1.377117,-1.40071 -0.446515,0 -0.843222,0.07427 -1.150802,0.273501 -0.31457,0.19049 -0.540886,0.514671 -0.648364,1.017983 h 1.143812 c 0.07078,-0.32855 0.169518,-0.637004 0.57409,-0.637004 0.422922,0 0.417679,0.257773 0.342532,0.615159 l -0.06903,0.320687 c -1.081771,-0.01573 -2.162668,0.04107 -2.456267,1.425177 -0.15379,0.728753 0.01485,1.334301 0.825746,1.334301 0.505933,0 0.890408,-0.207092 1.230318,-0.637005 h 0.0166 l -0.06816,0.553119 h 1.083518 c 0.03146,-0.256025 0.05505,-0.521662 0.109226,-0.777687 z"
|
||||
id="path33"
|
||||
style="fill:#f15a29;stroke-width:0.873805" /><path
|
||||
d="m 74.73345,13.80443 -0.887786,4.182033 h 1.168278 l 0.484088,-2.277137 c 0.08738,-0.414184 0.230684,-1.011867 1.244299,-0.944584 l 0.221073,-1.044197 c -0.471855,0 -0.899146,0.140682 -1.217211,0.621275 h -0.0166 l 0.114469,-0.53739 z"
|
||||
id="path35"
|
||||
style="fill:#f15a29;stroke-width:0.873805" /><path
|
||||
d="m 77.99887,17.32499 c -0.429912,0 -0.480593,-0.273501 -0.207966,-1.550131 0.184373,-0.87031 0.319813,-1.308961 0.817008,-1.308961 0.497196,0 0.444767,0.438651 0.259521,1.308961 -0.271754,1.27663 -0.436029,1.550131 -0.868563,1.550131 z m -0.156411,0.745356 c 1.50644,0 1.899653,-0.919243 2.178397,-2.229078 0.244665,-1.143811 0.285734,-2.120726 -1.255659,-2.120726 -1.540519,0 -1.914507,0.976915 -2.157425,2.120726 -0.27787,1.309835 -0.273501,2.229078 1.234687,2.229078"
|
||||
id="path37"
|
||||
style="fill:#f15a29;stroke-width:0.873805" /><path
|
||||
d="m 81.737,17.35033 c -0.421174,0 -0.401077,-0.43865 -0.17913,-1.49246 0.177382,-0.836232 0.292725,-1.417312 0.799532,-1.417312 0.478845,0 0.347774,0.58108 0.171266,1.417312 -0.222821,1.05381 -0.393213,1.49246 -0.791668,1.49246 z m 1.506441,0.63613 1.271387,-5.981198 h -1.169152 l -0.467486,2.195873 h -0.01398 c -0.166023,-0.357386 -0.429912,-0.480593 -0.85196,-0.480593 -1.177016,0 -1.41906,1.301096 -1.599064,2.144319 -0.182626,0.864193 -0.510303,2.205485 0.699918,2.205485 0.447388,0 0.80128,-0.140683 1.102742,-0.547003 h 0.01485 l -0.09612,0.463117 z"
|
||||
id="path39"
|
||||
style="fill:#f15a29;stroke-width:0.873805" /><path
|
||||
d="m 86.2974,15.96622 c -0.09612,0.455253 -0.186121,1.384108 -0.873805,1.384108 -0.380106,0 -0.353892,-0.366125 -0.290104,-0.662345 0.159033,-0.748851 0.578459,-0.697296 1.163909,-0.721763 z m 1.324689,-0.84497 c 0.161654,-0.763706 0.106604,-1.40071 -1.377117,-1.40071 -0.447389,0 -0.843223,0.07427 -1.151676,0.273501 -0.313696,0.19049 -0.540886,0.514671 -0.646616,1.017983 h 1.142938 c 0.0699,-0.32855 0.16777,-0.637004 0.574964,-0.637004 0.422048,0 0.417679,0.257773 0.342531,0.615159 l -0.07078,0.320687 c -1.07915,-0.01573 -2.162668,0.04107 -2.457141,1.425177 -0.154664,0.728753 0.01573,1.334301 0.827494,1.334301 0.505059,0 0.889534,-0.207092 1.227697,-0.637005 h 0.0166 l -0.06728,0.553119 h 1.087014 c 0.02796,-0.256025 0.05068,-0.521662 0.108352,-0.777687 z"
|
||||
id="path41"
|
||||
style="fill:#f15a29;stroke-width:0.873805" /></g></g></svg>
|
||||
|
After Width: | Height: | Size: 17 KiB |
BIN
erpnext/public/images/bank-logos/Bank_of_India.png
Normal file
|
After Width: | Height: | Size: 119 KiB |
BIN
erpnext/public/images/bank-logos/Bank_of_Maharashtra.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
63
erpnext/public/images/bank-logos/Barclays.svg
Normal file
@@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="katman_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 560 400" style="enable-background:new 0 0 560 400;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#00AEEF;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M163.33,226.75H143.3c2.59-2.36,3.3-10.84,4.24-26.16l0.24-3.54c0.71-8.49,0.94-15.32,0.94-20.03
|
||||
c0-4.01-0.47-6.6-1.65-7.54h22.39c5.42,0,16.03,0.24,16.03,11.31c0,7.54-6.84,12.02-13.2,13.67c8.96,0.71,15.56,5.18,15.56,14.38
|
||||
C188.08,218.74,178.65,226.75,163.33,226.75 M162.62,198.94h-4.01l-0.71,8.49c-0.24,3.77-0.47,6.84-0.47,10.61
|
||||
c0,0.47,1.65,1.65,5.42,1.65c8.01,0,13.2-4.01,13.2-10.61C176.29,201.77,169.93,198.94,162.62,198.94 M164.27,176.31
|
||||
c-1.18,0-2.59,0-4.01,0.24c-0.71,4.01-0.94,7.78-1.18,12.26c0,0-0.24,3.54-0.24,3.3h1.41c7.31,0,13.91-2.59,13.91-9.19
|
||||
C174.41,179.14,171.11,176.31,164.27,176.31 M234.98,227.22c-4.95,0-5.42-0.24-9.19-13.67l-1.41-4.95
|
||||
c-2.36,1.18-6.6,1.65-13.2,1.65h-6.84l-1.18,2.59c-1.18,2.59-4.01,8.01-4.01,11.31c0,0.71,0,1.41,0.24,2.59h-13.67
|
||||
c3.77-3.77,8.96-12.96,15.79-27.58l4.01-8.49c3.54-7.78,7.54-16.5,7.54-17.68c0-1.18-0.24-2.12-0.71-3.3h12.49
|
||||
c0,0,3.3,12.26,6.13,22.63l2.36,8.96c4.24,15.32,7.07,22.63,10.37,25.46C240.4,226.99,236.4,227.22,234.98,227.22 M217.07,182.91
|
||||
l-9.43,20.04h15.09L217.07,182.91z M289.19,229.11c-4.24,0-5.18-0.71-6.6-2.59l-16.26-22.16c-1.18-1.88-2.36-3.06-4.24-3.06h-0.23
|
||||
l-0.24,4.48c-0.23,5.89-0.71,10.61-0.71,14.14c0,3.77,0.47,6.13,1.65,7.07H247c2.36-1.89,3.06-8.49,4.48-26.16l0.24-3.54
|
||||
c0.71-8.49,0.94-15.32,0.94-20.03c0-4.01-0.47-6.6-1.65-7.54h20.98c7.07,0,16.26,1.18,16.26,12.26c0,9.19-6.13,14.14-13.67,16.5
|
||||
c0.71,0.71,2.12,2.36,2.83,3.3l11.55,15.32c7.31,9.66,7.78,10.14,10.37,11.31C296.26,228.87,292.02,229.11,289.19,229.11
|
||||
M268.45,176.55c-1.42,0-3.07,0-4.48,0.24c-0.47,2.36-0.71,6.6-1.18,13.43l-0.23,4.01c0.71,0.24,1.89,0.24,2.59,0.24
|
||||
c7.07,0,12.02-4.48,12.02-10.84C276.94,179.14,273.87,176.55,268.45,176.55 M319.6,227.93c-14.85,0-23.33-12.26-23.33-25.69
|
||||
c0-18.85,10.37-33.71,29.93-33.71c6.13,0,8.96,1.18,14.14,1.18l-1.41,14.61c-2.83-5.19-7.54-8.49-13.67-8.49
|
||||
c-12.26,0-17.2,13.2-17.2,24.51c0,12.26,7.07,19.09,16.03,19.09c4.95,0,9.43-1.18,16.73-6.36
|
||||
C337.75,222.04,330.91,227.93,319.6,227.93 M420.47,227.22c-4.95,0-5.18-0.24-9.19-13.67l-1.41-4.95c-2.36,1.18-6.6,1.65-13.2,1.65
|
||||
h-7.07l-1.18,2.59c-1.89,3.77-4.01,8.25-4.01,11.31c0,0.71,0.24,1.65,0.24,2.59h-40.54c2.36-2.59,3.06-11.08,4.24-26.16l0.24-3.54
|
||||
c0.71-8.72,0.94-15.32,0.94-20.03c0-3.77-0.47-6.36-1.41-7.54h15.79c-2.36,1.65-3.06,10.84-4.01,26.16l-0.23,3.54
|
||||
c-0.24,5.66-1.18,11.55-1.18,16.97c0,2.59,0.94,3.3,3.77,3.3c9.66,0,11.78-0.24,16.26-3.06c2.83-4.95,5.66-11.08,8.72-17.44
|
||||
l4.01-8.49c3.77-8.01,7.54-16.26,7.54-17.68c0-1.18-0.23-2.12-0.71-3.3h12.49c0,0,4.95,18.62,6.13,22.63l2.36,8.96
|
||||
c4.24,15.32,6.84,22.63,10.61,25.46C426.37,226.99,421.89,227.22,420.47,227.22 M402.56,182.91l-9.19,20.04h14.85L402.56,182.91z
|
||||
M456.3,195.87c-1.18,2.36-3.07,5.18-4.01,7.54c-0.94,4.24-1.18,9.9-1.18,16.03c0,2.59,0.47,6.13,1.65,7.31h-15.56
|
||||
c2.83-2.59,3.77-18.38,3.77-23.57c-2.12-7.07-4.95-14.14-9.19-22.63c-2.83-5.19-5.89-10.14-8.01-11.08
|
||||
c3.54-0.24,8.01-0.47,10.14-0.47c3.77,0,4.95,0.47,7.31,5.66c3.77,8.49,6.36,14.85,8.01,19.33c3.77-6.13,6.6-10.37,10.14-16.26
|
||||
c0.71-1.41,1.65-3.3,1.65-4.95c0-1.18-0.23-2.83-0.71-3.3h15.32C472.33,170.18,459.13,191.16,456.3,195.87 M508.15,182.91
|
||||
c-2.36-4.24-7.54-7.54-13.2-7.54c-4.95,0-9.19,1.88-9.19,7.07c0,4.48,5.42,7.31,11.08,11.08c6.13,3.77,12.49,8.49,12.49,16.74
|
||||
c0,10.61-10.37,17.44-22.63,17.44c-4.95,0-10.13-0.94-16.03-3.06l0.94-14.14c2.83,5.66,8.01,10.13,15.79,10.13
|
||||
c5.89,0,10.61-2.83,10.61-8.01c0-4.24-3.54-7.07-8.01-9.66c-9.43-5.66-15.32-10.13-15.32-18.38c0-12.26,10.13-16.26,20.98-16.26
|
||||
c6.13,0,10.14,1.18,13.91,1.18L508.15,182.91z"/>
|
||||
<path class="st0" d="M120.43,177.73c-0.71-1.65-1.89-3.54-4.01-4.95c-0.94-0.71-2.12-1.41-3.3-1.89c-0.94-0.24-1.89-0.47-3.06-0.47
|
||||
h-0.24c-1.42,0-4.01,0.24-5.42,2.36c-0.71,0.71-0.94,2.12-0.71,3.3c0.24,0.94,0.94,1.89,1.89,2.12c0,0,0.24,0.24,0.71,0.24
|
||||
c0,0.24-0.24,0.71-0.24,0.71c-0.71,0.71-1.89,1.88-5.42,1.88h-0.24c-1.89-0.24-3.3-0.71-5.42-2.83c-1.18-1.41-1.89-4.01-1.89-8.01
|
||||
c0-2.12-0.24-3.77-0.71-5.18c-0.24-0.94-1.18-1.89-1.89-2.36c-0.71-0.47-1.18-0.71-2.36-1.18c-1.42-0.24-2.83-0.47-4.01-0.47
|
||||
c-1.41,0-2.36,0.24-2.83,0.94h-1.41l-2.36,0.24c-1.42,0.24-2.36,0.94-3.3,1.65c-0.24,0.24-1.18,1.18-1.41,2.12
|
||||
c0,0.71,0.24,1.41,0.24,1.65l0.24,0.24c0.47-0.47,1.41-0.71,2.59-0.71c1.65,0,4.01,0.71,4.48,1.88c1.18,1.89,0.71,3.3,0.71,4.95
|
||||
c-0.71,4.48-2.36,6.6-5.89,7.07c-0.71,0.24-1.41,0.24-1.89,0.24c-2.59,0-4.48-0.71-5.42-2.36v-0.47c0,0,0.24,0,0.47-0.24
|
||||
c0.94-0.47,1.65-1.18,1.89-2.12c0.24-1.18,0-2.36-0.71-3.3c-1.41-1.41-3.3-2.36-5.42-2.36c-1.41,0-2.36,0.24-3.3,0.47
|
||||
c-2.83,0.71-5.42,3.06-7.31,6.84c-1.41,2.83-2.36,6.13-2.59,9.9c-0.24,3.77-0.24,6.84,0,9.66c0.24,4.71,1.18,7.54,2.36,10.61
|
||||
c1.18,3.06,2.59,5.89,4.24,8.49c0.47,0.71,0.71,1.41,1.18,1.89l0.24-0.24c0.24-0.24,0.47-0.47,0.71-0.94
|
||||
c0.94-0.71,2.59-3.06,3.06-3.77c0.47-0.71,1.18-1.89,1.65-3.06l0.24-0.47l0.47,0.24c0.47,0.47,0.71,1.18,0.71,1.89
|
||||
c0,0.71-0.24,1.41-0.71,2.83c-0.47,1.65-1.42,3.54-2.36,5.42c0.24,0.24,0.24,0.71,0,0.71c-0.71,1.18-0.71,1.65-0.71,2.12h0.24
|
||||
c0.24,0,1.18-0.24,1.89-0.94c0.71-0.47,2.59-2.12,4.95-5.42c1.89-2.36,3.07-4.95,4.48-7.78l0.24-0.47l0.47,0.24l0.71,0.47
|
||||
c0.24,0.47,0.24,1.18,0.24,1.88c-0.24,1.89-1.41,4.48-2.12,6.37c-1.41,3.3-4.01,6.84-5.89,9.43c0,0.24-0.47,0.71-0.71,0.71
|
||||
c0.24,0.24,0.47,0.47,0.94,0.71l0.71,0.71c2.59,2.12,4.95,3.77,8.01,5.42c2.36,1.41,7.07,3.77,10.37,4.71
|
||||
c3.3-0.71,8.01-3.3,10.37-4.71c3.06-1.65,5.42-3.3,8.01-5.42l0.71-0.71l0.94-0.71c0.24-0.47,0.24-0.71,0.24-0.94l-0.24-0.24
|
||||
c-1.89-2.36-4.48-6.13-5.89-9.43c-0.71-1.88-1.89-4.48-2.12-6.36c-0.24-0.71,0-1.41,0.24-1.89l0.47-0.47
|
||||
c0.24-0.24,0.71-0.24,0.71-0.24l0.24,0.47c1.41,2.83,2.83,5.42,4.48,7.78c2.36,3.3,4.24,4.95,4.95,5.42
|
||||
c0.71,0.71,1.41,0.94,1.89,0.94h0.24c0.24-0.24,0-0.71-0.71-1.89c-0.24-0.24-0.24-0.47-0.24-0.71c-0.94-1.89-1.89-3.77-2.36-5.42
|
||||
c-0.47-1.41-0.71-2.36-0.71-2.83c0-0.71,0.24-1.41,0.71-1.89l0.47-0.24l0.24,0.47c0.47,1.18,1.42,2.59,1.89,3.3l2.83,3.54
|
||||
c0.47,0.47,0.71,0.71,0.71,0.94l0.24,0.24c0.24-0.24,0.47-0.71,0.94-1.65l0.24-0.24c1.42-2.36,2.83-5.42,4.01-8.49
|
||||
c1.18-2.83,1.89-5.89,2.36-10.61c0.24-2.83,0.47-5.89,0-9.66C122.55,183.85,121.61,180.32,120.43,177.73L120.43,177.73z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.4 KiB |
BIN
erpnext/public/images/bank-logos/Capital_One.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
1
erpnext/public/images/bank-logos/Charles_Schwab.svg
Normal file
|
After Width: | Height: | Size: 13 KiB |
11
erpnext/public/images/bank-logos/Citi.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 56 33" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<g transform="matrix(1,0,0,1,-16.5485,-28.4944)">
|
||||
<path d="M16.549,50.274C16.549,44.5 21.277,40.005 27.438,40.005C31.004,40.005 34.259,41.593 36.119,43.996L33.445,46.67C32.736,45.762 31.831,45.026 30.798,44.516C29.765,44.006 28.629,43.736 27.477,43.725C23.796,43.725 20.85,46.477 20.85,50.274C20.85,54.111 23.796,56.863 27.477,56.863C28.671,56.861 29.848,56.584 30.917,56.053C31.985,55.522 32.917,54.751 33.639,53.801L36.274,56.398C34.492,58.917 31.081,60.583 27.438,60.583C21.277,60.583 16.549,56.088 16.549,50.274Z" style="fill:rgb(37,91,227);fill-rule:nonzero;"/>
|
||||
<rect x="39.762" y="40.702" width="4.224" height="19.183" style="fill:rgb(37,91,227);fill-rule:nonzero;"/>
|
||||
<path d="M51.854,54.731L51.854,44.268L47.242,44.268L47.242,40.702L52.047,40.702L52.047,36.594L56,34.656L56,40.702L62.279,40.702L62.279,44.268L56,44.268L56,54.034C56,55.971 57.086,56.824 59.14,56.824C60.208,56.829 61.266,56.605 62.24,56.165L62.24,59.808C61.019,60.344 59.697,60.608 58.364,60.583C54.605,60.583 51.854,58.529 51.854,54.731Z" style="fill:rgb(37,91,227);fill-rule:nonzero;"/>
|
||||
<rect x="65.612" y="40.702" width="4.224" height="19.183" style="fill:rgb(37,91,227);fill-rule:nonzero;"/>
|
||||
<path d="M54.76,28.494C58.23,28.486 61.65,29.313 64.732,30.905C67.815,32.497 70.469,34.807 72.471,37.641L67.549,37.641C65.936,35.847 63.964,34.414 61.761,33.432C59.557,32.451 57.172,31.943 54.76,31.943C52.348,31.943 49.963,32.451 47.76,33.432C45.557,34.414 43.585,35.847 41.971,37.641L37.05,37.641C39.051,34.807 41.706,32.497 44.788,30.905C47.871,29.313 51.291,28.486 54.76,28.494Z" style="fill:rgb(255,60,40);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
1
erpnext/public/images/bank-logos/Commonwealth_Bank.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg id="artwork" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 64 64"><defs><style>.cls-1{fill:url(#linear-gradient);}.cls-2{fill:url(#linear-gradient-2);}</style><linearGradient id="linear-gradient" x1="13.22" y1="-130.02" x2="50.78" y2="-161.53" gradientTransform="matrix(1, 0, 0, -1, 0, -113.78)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff0"/><stop offset="0.27" stop-color="#fef10c"/><stop offset="0.45" stop-color="#fde516"/><stop offset="0.64" stop-color="#fde113"/><stop offset="0.82" stop-color="#fed508"/><stop offset="0.92" stop-color="#fc0"/></linearGradient><linearGradient id="linear-gradient-2" x1="38.93" y1="-154.54" x2="50.6" y2="-161.84" gradientTransform="matrix(1, 0, 0, -1, 0, -113.78)" gradientUnits="userSpaceOnUse"><stop offset="0.1" stop-color="#874400"/><stop offset="0.26" stop-color="#d88a00"/><stop offset="0.37" stop-color="#e79d00"/><stop offset="0.52" stop-color="#f2b400"/><stop offset="0.7" stop-color="#fad202"/><stop offset="0.9" stop-color="#fedf03"/></linearGradient></defs><polyline class="cls-1" points="32 0 64 32 32 64 0 32 32 0"/><polygon class="cls-2" points="44.15 35.24 32 64 32 64 64 32 55.69 23.68 44.15 35.24"/></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
125
erpnext/public/images/bank-logos/Deutsche_Bank.svg
Normal file
@@ -0,0 +1,125 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.0"
|
||||
width="250"
|
||||
height="52"
|
||||
id="svg2"
|
||||
inkscape:version="0.47 r22583"
|
||||
sodipodi:docname="CoatFlag.svg">
|
||||
<metadata
|
||||
id="metadata22">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="1004"
|
||||
id="namedview20"
|
||||
showgrid="false"
|
||||
inkscape:zoom="2.16"
|
||||
inkscape:cx="52.777778"
|
||||
inkscape:cy="26"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" />
|
||||
<defs
|
||||
id="defs4">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 26 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="250 : 26 : 1"
|
||||
inkscape:persp3d-origin="125 : 17.333333 : 1"
|
||||
id="perspective24" />
|
||||
</defs>
|
||||
<g
|
||||
transform="translate(-173.76543,-272.64083)"
|
||||
id="layer1"
|
||||
style="fill:#000088;fill-opacity:1">
|
||||
<g
|
||||
transform="matrix(1.0806398,0,0,1.0806398,-170.89662,249.83272)"
|
||||
id="g2420"
|
||||
style="fill:#000088;fill-opacity:1">
|
||||
<path
|
||||
d="M 514.58,57.04 L 531.72,33.53 L 539.821,33.53 L 522.68,57.04 L 514.58,57.04 z M 504.65,22.7 L 549.75,22.7 L 549.75,67.85 L 504.65,67.85 L 504.65,22.7 z M 510.96,29.02 L 510.96,61.52 L 543.4,61.52 L 543.4,29.02 L 510.96,29.02 L 510.96,29.02 z"
|
||||
id="path2384"
|
||||
style="fill:#000088;fill-rule:evenodd;fill-opacity:1" />
|
||||
<g
|
||||
id="g2386"
|
||||
style="fill:#000088;fill-opacity:1">
|
||||
<path
|
||||
d="M 330.12,51.542 L 329.26,51.036 L 328.326,50.706 L 327.32,50.485 L 326.352,50.397 L 322.507,50.397 L 322.507,65.589 L 325.776,65.589 L 327.213,65.48 L 328.398,65.259 L 329.475,64.863 L 330.374,64.335 L 331.126,63.652 L 331.702,62.749 L 332.133,61.78 L 332.455,60.658 L 332.636,59.381 L 332.707,57.927 L 332.636,56.739 L 332.455,55.528 L 332.133,54.383 L 331.702,53.326 L 330.982,52.358 L 330.12,51.542 z M 327.606,67.417 L 326.028,67.527 L 320.138,67.527 L 320.138,48.482 L 325.488,48.482 L 326.746,48.548 L 328.111,48.657 L 329.367,48.922 L 330.589,49.275 L 331.81,49.914 L 332.744,50.75 L 333.569,51.652 L 334.215,52.753 L 334.684,53.899 L 334.972,55.175 L 335.187,56.54 L 335.221,57.927 L 335.187,59.446 L 334.936,60.878 L 334.575,62.177 L 334.074,63.387 L 333.355,64.445 L 332.564,65.325 L 331.558,66.117 L 330.446,66.733 L 329.081,67.174 L 327.606,67.417 z"
|
||||
id="path2388"
|
||||
style="fill:#000088;fill-rule:evenodd;fill-opacity:1" />
|
||||
<path
|
||||
d="M 342.943,55.638 L 342.002,55.748 L 341.206,56.144 L 340.52,56.606 L 340.014,57.267 L 339.617,58.059 L 339.365,58.895 L 339.221,59.821 L 346.336,59.821 L 346.263,58.918 L 346.082,58.059 L 345.76,57.267 L 345.252,56.628 L 344.64,56.143 L 343.88,55.747 L 342.943,55.638 z M 339.186,61.384 L 339.186,61.648 L 339.222,62.529 L 339.437,63.344 L 339.727,64.136 L 340.123,64.884 L 340.701,65.457 L 341.352,65.919 L 342.109,66.182 L 343.012,66.293 L 343.88,66.182 L 344.64,65.919 L 345.252,65.5 L 345.76,64.884 L 346.121,64.136 L 346.336,63.277 L 348.469,63.277 L 348.144,64.532 L 347.639,65.567 L 346.916,66.382 L 346.121,67.042 L 345.144,67.504 L 344.024,67.747 L 342.831,67.856 L 341.566,67.747 L 340.482,67.438 L 339.508,66.953 L 338.715,66.358 L 338.061,65.566 L 337.558,64.642 L 337.197,63.562 L 336.943,62.395 L 336.87,61.141 L 336.943,59.885 L 337.197,58.675 L 337.558,57.551 L 338.061,56.604 L 338.749,55.746 L 339.579,55.019 L 340.592,54.49 L 341.712,54.204 L 343.011,54.094 L 344.24,54.204 L 345.251,54.447 L 346.12,54.909 L 346.842,55.569 L 347.384,56.273 L 347.853,57.176 L 348.214,58.1 L 348.395,59.136 L 348.504,60.237 L 348.541,61.382 L 339.186,61.382 L 339.186,61.384 z"
|
||||
id="path2390"
|
||||
style="fill:#000088;fill-rule:evenodd;fill-opacity:1" />
|
||||
<polygon
|
||||
points="359.677,67.571 359.604,65.501 358.92,66.316 358.24,66.955 357.414,67.351 356.52,67.637 355.445,67.748 354.297,67.637 353.329,67.351 352.538,66.955 351.932,66.382 351.429,65.633 351.141,64.731 350.925,63.696 350.853,62.551 350.853,54.316 353.148,54.316 353.148,62.418 353.185,63.124 353.29,63.807 353.506,64.378 353.759,64.907 354.082,65.391 354.585,65.7 355.265,65.92 356.056,65.963 357.021,65.854 357.773,65.589 358.382,65.127 358.816,64.555 359.174,63.872 359.425,63.102 359.53,62.198 359.604,61.296 359.604,54.316 361.79,54.316 361.79,64.158 361.861,67.571 359.677,67.571 "
|
||||
id="polygon2392"
|
||||
style="fill:#000088;fill-rule:evenodd;fill-opacity:1" />
|
||||
<polygon
|
||||
points="369.142,67.748 368.211,67.681 367.456,67.417 366.848,66.999 366.381,66.427 366.129,65.633 366.023,64.665 366.023,55.924 363.513,55.924 363.513,54.316 366.023,54.316 366.023,51.718 368.245,50.793 368.245,54.316 371.111,54.316 371.111,55.924 368.245,55.924 368.245,64.378 368.354,64.95 368.496,65.391 368.855,65.7 369.32,65.854 370.002,65.92 371.219,65.81 371.219,67.571 370.183,67.681 369.142,67.748 "
|
||||
id="polygon2394"
|
||||
style="fill:#000088;fill-rule:evenodd;fill-opacity:1" />
|
||||
<polygon
|
||||
points="377.441,67.857 376.431,67.813 375.532,67.637 374.665,67.329 373.908,66.866 373.296,66.294 372.827,65.567 372.539,64.643 372.432,63.542 374.665,63.542 374.738,64.357 375.063,65.039 375.459,65.567 376.035,65.92 376.719,66.184 377.549,66.25 378.234,66.184 378.921,66.03 379.533,65.721 379.966,65.237 380.327,64.708 380.435,64.004 380.327,63.431 380.112,62.881 379.712,62.529 379.245,62.198 378.415,61.912 377.478,61.626 376.611,61.428 375.928,61.252 375.207,60.966 374.558,60.679 373.979,60.283 373.477,59.821 373.115,59.315 372.861,58.632 372.793,57.773 372.861,56.849 373.223,56.034 373.729,55.374 374.341,54.889 375.1,54.449 375.928,54.206 376.792,54.03 377.658,53.986 378.596,54.03 379.463,54.206 380.22,54.492 380.938,54.889 381.479,55.461 381.948,56.122 382.236,56.981 382.346,57.994 380.112,57.994 379.966,57.179 379.678,56.496 379.102,56.034 378.452,55.704 377.586,55.593 376.973,55.638 376.362,55.813 375.82,56.034 375.352,56.386 375.063,56.914 374.956,57.531 375.063,58.103 375.244,58.521 375.605,58.874 376.108,59.204 377.046,59.557 377.91,59.777 378.813,60.019 379.533,60.239 380.22,60.504 380.864,60.79 381.443,61.164 381.948,61.626 382.31,62.177 382.561,62.881 382.671,63.74 382.561,64.665 382.31,65.458 381.841,66.14 381.335,66.647 380.687,67.152 379.932,67.439 379.102,67.725 378.308,67.813 377.441,67.857 "
|
||||
id="polygon2396"
|
||||
style="fill:#000088;fill-rule:evenodd;fill-opacity:1" />
|
||||
<polygon
|
||||
points="390.42,67.857 389.16,67.748 388.003,67.417 387.029,66.955 386.162,66.36 385.475,65.567 384.898,64.621 384.498,63.52 384.283,62.375 384.21,61.054 384.283,59.754 384.498,58.5 384.898,57.399 385.475,56.386 386.162,55.527 387.029,54.845 388.04,54.316 389.233,53.986 390.529,53.876 391.609,53.941 392.555,54.162 393.413,54.515 394.14,55.021 394.802,55.66 395.308,56.496 395.639,57.464 395.813,58.544 393.568,58.544 393.413,57.641 393.172,56.914 392.731,56.342 392.114,55.924 391.409,55.66 390.529,55.571 389.595,55.66 388.799,55.924 388.149,56.342 387.605,56.914 387.173,57.597 386.885,58.39 386.668,59.183 386.595,60.084 386.523,60.943 386.595,61.803 386.668,62.618 386.92,63.454 387.246,64.202 387.642,64.885 388.149,65.391 388.799,65.876 389.595,66.14 390.42,66.25 391.302,66.14 392.05,65.81 392.731,65.391 393.172,64.775 393.503,63.982 393.635,63.08 395.882,63.08 395.66,64.202 395.308,65.215 394.802,66.03 394.14,66.647 393.392,67.175 392.488,67.527 391.499,67.813 390.42,67.857 "
|
||||
id="polygon2398"
|
||||
style="fill:#000088;fill-rule:evenodd;fill-opacity:1" />
|
||||
<polygon
|
||||
points="406.8,67.527 406.8,59.403 406.714,58.698 406.624,58.015 406.426,57.42 406.186,56.893 405.79,56.43 405.261,56.1 404.599,55.88 403.829,55.857 402.883,55.945 402.199,56.21 401.518,56.672 401.098,57.244 400.724,58.015 400.483,58.786 400.35,59.622 400.262,60.525 400.262,67.527 398.083,67.527 398.083,48.482 400.262,48.482 400.262,56.319 400.943,55.483 401.627,54.845 402.463,54.404 403.388,54.162 404.422,54.052 405.568,54.162 406.538,54.404 407.329,54.845 407.968,55.417 408.451,56.166 408.739,57.025 408.938,58.103 408.98,59.271 408.98,67.527 406.8,67.527 "
|
||||
id="polygon2400"
|
||||
style="fill:#000088;fill-rule:evenodd;fill-opacity:1" />
|
||||
<path
|
||||
d="M 417.393,55.638 L 416.468,55.748 L 415.674,56.144 L 415.035,56.606 L 414.552,57.267 L 414.112,58.059 L 413.871,58.895 L 413.716,59.821 L 420.761,59.821 L 420.674,58.918 L 420.498,58.059 L 420.188,57.267 L 419.682,56.628 L 419.065,56.143 L 418.317,55.747 L 417.393,55.638 z M 413.693,61.384 L 413.693,61.648 L 413.714,62.529 L 413.934,63.344 L 414.222,64.136 L 414.618,64.884 L 415.19,65.457 L 415.829,65.919 L 416.577,66.182 L 417.457,66.293 L 418.316,66.182 L 419.064,65.919 L 419.681,65.5 L 420.187,64.884 L 420.54,64.136 L 420.76,63.277 L 422.854,63.277 L 422.544,64.532 L 422.036,65.567 L 421.354,66.382 L 420.54,67.042 L 419.572,67.504 L 418.493,67.747 L 417.28,67.856 L 416.048,67.747 L 414.971,67.438 L 414.047,66.953 L 413.23,66.358 L 412.572,65.566 L 412.086,64.642 L 411.733,63.562 L 411.471,62.395 L 411.402,61.141 L 411.471,59.885 L 411.733,58.675 L 412.086,57.551 L 412.572,56.604 L 413.254,55.746 L 414.091,55.019 L 415.079,54.49 L 416.181,54.204 L 417.458,54.094 L 418.691,54.204 L 419.682,54.447 L 420.54,54.909 L 421.245,55.569 L 421.796,56.273 L 422.258,57.176 L 422.611,58.1 L 422.786,59.136 L 422.897,60.237 L 422.961,61.382 L 413.693,61.382 L 413.693,61.384 z"
|
||||
id="path2402"
|
||||
style="fill:#000088;fill-rule:evenodd;fill-opacity:1" />
|
||||
<path
|
||||
d="M 437.692,58.609 L 433.794,58.609 L 433.794,65.588 L 437.647,65.588 L 438.398,65.545 L 439.125,65.435 L 439.785,65.258 L 440.424,65.082 L 440.929,64.752 L 441.394,64.29 L 441.768,63.718 L 441.945,63.035 L 442.052,62.132 L 441.945,61.207 L 441.702,60.415 L 441.283,59.754 L 440.799,59.292 L 440.139,58.983 L 439.391,58.785 L 438.552,58.697 L 437.692,58.609 z M 437.692,50.419 L 433.794,50.419 L 433.794,56.781 L 437.318,56.781 L 438.089,56.738 L 438.88,56.627 L 439.519,56.429 L 440.136,56.054 L 440.574,55.637 L 440.994,55.064 L 441.193,54.293 L 441.28,53.478 L 441.193,52.642 L 440.926,51.894 L 440.488,51.388 L 439.917,50.97 L 439.275,50.639 L 438.505,50.485 L 437.692,50.419 z M 437.646,67.527 L 431.439,67.527 L 431.439,48.482 L 437.935,48.482 L 438.902,48.548 L 439.805,48.701 L 440.751,48.987 L 441.544,49.34 L 442.272,49.846 L 442.91,50.485 L 443.396,51.277 L 443.68,52.18 L 443.791,53.259 L 443.68,54.382 L 443.396,55.306 L 442.888,56.099 L 442.161,56.738 L 441.325,57.222 L 440.312,57.575 L 441.325,57.817 L 442.271,58.191 L 443.064,58.72 L 443.679,59.38 L 444.143,60.129 L 444.427,61.12 L 444.538,62.243 L 444.427,63.431 L 444.143,64.445 L 443.679,65.258 L 443.064,65.941 L 442.38,66.491 L 441.5,66.91 L 440.575,67.197 L 439.63,67.372 L 438.662,67.483 L 437.646,67.527 z"
|
||||
id="path2404"
|
||||
style="fill:#000088;fill-rule:evenodd;fill-opacity:1" />
|
||||
<path
|
||||
d="M 453.679,60.834 L 453.017,60.834 L 452.378,60.899 L 451.653,60.943 L 450.948,61.12 L 450.286,61.34 L 449.671,61.582 L 449.185,61.935 L 448.789,62.419 L 448.524,63.058 L 448.415,63.762 L 448.524,64.533 L 448.81,65.128 L 449.296,65.678 L 449.89,65.964 L 450.552,66.251 L 451.255,66.272 L 452.157,66.251 L 452.885,65.964 L 453.411,65.678 L 453.897,65.216 L 454.205,64.622 L 454.49,63.983 L 454.645,63.278 L 454.754,62.507 L 454.799,61.736 L 454.799,60.9 L 454.403,60.9 L 454.027,60.835 L 453.679,60.835 L 453.679,60.834 z M 455.262,67.527 L 455.042,65.677 L 454.315,66.492 L 453.567,67.131 L 452.709,67.527 L 451.761,67.813 L 450.684,67.857 L 449.826,67.813 L 448.967,67.614 L 448.219,67.328 L 447.556,66.932 L 447.03,66.359 L 446.547,65.676 L 446.304,64.818 L 446.194,63.871 L 446.304,62.88 L 446.59,62.044 L 447.03,61.361 L 447.602,60.789 L 448.307,60.327 L 449.077,59.996 L 449.935,59.754 L 450.837,59.578 L 451.762,59.469 L 452.665,59.425 L 453.525,59.425 L 454.185,59.469 L 454.801,59.469 L 454.801,58.72 L 454.756,57.861 L 454.58,57.178 L 454.315,56.605 L 453.962,56.143 L 453.411,55.769 L 452.774,55.571 L 451.936,55.527 L 451.254,55.571 L 450.572,55.703 L 450.152,56.033 L 449.712,56.495 L 449.471,57.068 L 449.317,57.86 L 447.093,57.86 L 447.27,56.891 L 447.599,56.032 L 448.061,55.349 L 448.678,54.843 L 449.381,54.447 L 450.174,54.204 L 451.056,54.05 L 451.914,53.984 L 453.058,54.05 L 454.073,54.27 L 454.886,54.556 L 455.57,55.085 L 456.077,55.701 L 456.515,56.56 L 456.692,57.529 L 456.804,58.762 L 456.804,63.672 L 456.868,64.926 L 456.956,66.027 L 457.044,66.93 L 457.199,67.524 L 455.262,67.524 L 455.262,67.527 z"
|
||||
id="path2406"
|
||||
style="fill:#000088;fill-rule:evenodd;fill-opacity:1" />
|
||||
<polygon
|
||||
points="468.648,67.527 468.648,59.424 468.605,58.72 468.518,58.038 468.298,57.464 468.033,56.937 467.702,56.452 467.197,56.143 466.516,55.924 465.72,55.88 464.864,55.989 464.138,56.254 463.519,56.672 463.101,57.179 462.727,57.817 462.486,58.544 462.265,59.292 462.22,60.107 462.155,60.899 462.155,67.527 459.953,67.527 459.953,56.826 459.887,55.813 459.887,55 459.841,54.272 462.088,54.272 462.112,56.386 462.77,55.571 463.519,54.954 464.356,54.449 465.26,54.206 466.339,54.096 467.505,54.206 468.473,54.449 469.268,54.889 469.883,55.461 470.391,56.21 470.719,57.069 470.896,58.147 470.962,59.292 470.962,67.527 468.648,67.527 "
|
||||
id="polygon2408"
|
||||
style="fill:#000088;fill-rule:evenodd;fill-opacity:1" />
|
||||
<path
|
||||
d="M 482.609,67.527 L 476.354,60.063 L 482.125,54.229 L 484.984,54.229 L 479,59.954 L 485.493,67.528 L 482.609,67.528 L 482.609,67.527 z M 474.046,67.527 L 474.046,48.482 L 476.247,48.482 L 476.247,67.527 L 474.046,67.527 z"
|
||||
id="path2410"
|
||||
style="fill:#000088;fill-rule:evenodd;fill-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
BIN
erpnext/public/images/bank-logos/Diamond_Trust_Bank.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
erpnext/public/images/bank-logos/Equity_Bank-dark.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
erpnext/public/images/bank-logos/Equity_Bank.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
erpnext/public/images/bank-logos/Federal_Bank-Dark.png
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
erpnext/public/images/bank-logos/Federal_Bank.png
Normal file
|
After Width: | Height: | Size: 77 KiB |
1
erpnext/public/images/bank-logos/Fi_Bank.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="52" height="52" fill="none" xmlns:v="https://vecta.io/nano"><path d="M31.331 12.825c0-3.206 2.699-5.797 6.024-5.797s6.027 2.596 6.027 5.797-2.699 5.797-6.027 5.797-6.024-2.591-6.024-5.797zM48 35.662h-1.347c-2.763 0-4.156-1.96-4.156-5.047v-5.797h-10.21v8.216c0 8.927 5.918 12.674 11.646 12.674H48V35.662zM14.226 38.42c0-2.986 1.652-4.344 5.007-4.344h8.325v-9.284H14.226v-3.833c0-3.032 2.617-4.68 5.742-4.68h7.577V7H17.363C9.362 7 4 11.234 4 20.11v25.575h10.226V38.42z" fill="#00b899"/></svg>
|
||||
|
After Width: | Height: | Size: 538 B |
13
erpnext/public/images/bank-logos/Ficohsa.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg width="164" height="58" viewBox="0 0 164 58" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M129.008 35.5399C127.202 35.1621 125.788 34.8457 125.788 33.6769C125.788 32.6048 126.895 32.0512 129.11 32.0512C130.55 32.0512 131.828 32.2973 133.063 32.7103L133.966 29.1161C132.859 28.7031 131.283 28.29 129.102 28.29C124.68 28.29 121.724 30.5749 121.724 33.9581C121.724 37.7281 124.91 38.4838 127.458 39.0726C129.264 39.4856 130.806 39.8372 130.806 41.0762C130.806 42.4559 129.332 42.9129 127.585 42.9129C125.839 42.9129 124.57 42.3592 123.394 41.0499L120.949 44.1607C122.593 45.8216 124.868 46.6477 127.449 46.6477C131.836 46.6477 134.895 44.2662 134.895 40.8741C134.895 36.8669 131.606 36.1375 128.991 35.5487L129.008 35.5399Z" fill="#0058CB"/>
|
||||
<path d="M146.779 28.2817C140.815 28.2817 136.956 32.0868 136.956 37.9659C136.956 43.01 140.372 46.6482 145.1 46.6482C147.315 46.6482 149.053 45.8221 150.297 44.6446V46.1297H153.918V30.0481C151.805 28.8705 149.428 28.2817 146.779 28.2817ZM149.965 42.0082C149.028 42.6673 147.75 43.0452 146.31 43.0452C143.056 43.0452 141.079 40.9713 141.079 37.6495C141.079 34.1256 143.124 32.0517 146.574 32.0517C147.852 32.0517 149.019 32.2626 149.956 32.6405V42.0082H149.965Z" fill="#0058CB"/>
|
||||
<path d="M33.1028 12.7319C16.3089 14.3256 9.61774 20.0611 11.8393 25.4815L13.9198 30.4067C14.7132 27.0392 18.2924 22.042 32.2036 20.1332L34.531 19.818C35.6065 19.674 36.0208 18.7556 35.536 17.7291L33.1116 12.7319H33.1028Z" fill="#0058CB"/>
|
||||
<path d="M32.7851 22.4023C17.4898 24.5273 14.1575 31.0101 15.6561 34.5216L17.913 39.87C17.913 35.1969 24.0487 31.7214 33.6226 29.8756C34.8744 29.6235 35.5268 28.7411 35.0419 27.6066L32.7851 22.4023Z" fill="#0058CB"/>
|
||||
<path d="M20.999 38.0615C20.2055 38.8719 19.6501 40.0064 19.6501 41.0058C19.6501 43.9501 22.5946 45.895 29.7794 46.039L27.1435 40.7267C22.8414 41.0058 21.5632 39.5922 21.0078 38.0705L20.999 38.0615Z" fill="#0058CB"/>
|
||||
<path d="M111.875 28.2818C109.899 28.2818 108.152 28.8706 106.917 30.013V22.0249H102.964V46.1209H106.917V33.0184C108.22 32.3242 109.43 32.0166 110.742 32.0166C112.991 32.0166 114.329 33.1238 114.329 34.9517V46.1209H118.282V34.8462C118.282 30.7336 115.905 28.273 111.875 28.273V28.2818Z" fill="#0058CB"/>
|
||||
<path d="M90.4255 28.2817C85.1947 28.2817 81.2078 32.2274 81.2078 37.4825C81.2078 42.7376 85.1947 46.6833 90.4255 46.6833C95.6563 46.6833 99.6432 42.7376 99.6432 37.4825C99.6432 32.2274 95.6903 28.2817 90.4255 28.2817ZM90.4255 42.9046C87.9123 42.9046 85.3651 41.0416 85.3651 37.4737C85.3651 33.9059 87.9123 32.0078 90.4255 32.0078C92.9386 32.0078 95.5199 33.8708 95.5199 37.4737C95.5199 41.0767 92.9727 42.9046 90.4255 42.9046Z" fill="#0058CB"/>
|
||||
<path d="M74.17 42.868C71.6228 42.868 68.9052 41.1719 68.9052 37.4371C68.9052 34.2911 71.0861 32.0766 74.2041 32.0766C75.9846 32.0766 77.0495 32.806 77.8247 33.4914L80.1334 30.5827C79.1281 29.37 76.8109 28.2627 74.1359 28.2627C68.7092 28.2627 64.7478 32.1732 64.7478 37.5601C64.7478 42.947 68.4707 46.6555 73.7611 46.6555C76.5809 46.6555 79.0941 45.5834 80.4316 43.9225L78.0888 41.2246C76.9813 42.3671 75.712 42.8504 74.17 42.8504V42.868Z" fill="#0058CB"/>
|
||||
<path d="M61.562 28.8345H57.6091V46.12H61.562V28.8345Z" fill="#0058CB"/>
|
||||
<path d="M59.586 26.9988C60.9175 26.9988 61.9969 25.8853 61.9969 24.5118C61.9969 23.1383 60.9175 22.0249 59.586 22.0249C58.2545 22.0249 57.175 23.1383 57.175 24.5118C57.175 25.8853 58.2545 26.9988 59.586 26.9988Z" fill="#0058CB"/>
|
||||
<path d="M39.48 46.1196H43.7992V36.8573H54.0903V32.9819H43.7992V26.4438H54.7293V22.6123H39.48V46.1196Z" fill="#0058CB"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.5 KiB |
3
erpnext/public/images/bank-logos/Goldman_Sachs.svg
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
37
erpnext/public/images/bank-logos/HDFC.svg
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="289" height="50" id="svg11053" version="1.1" inkscape:version="0.47 r22583" sodipodi:docname="New document 3">
|
||||
<defs id="defs11055">
|
||||
<inkscape:perspective sodipodi:type="inkscape:persp3d" inkscape:vp_x="0 : 526.18109 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="744.09448 : 526.18109 : 1" inkscape:persp3d-origin="372.04724 : 350.78739 : 1" id="perspective11061"/>
|
||||
<inkscape:perspective id="perspective11033" inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d"/>
|
||||
</defs>
|
||||
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="2.8" inkscape:cx="149.08562" inkscape:cy="8.2254134" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:window-width="1280" inkscape:window-height="750" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1"/>
|
||||
<metadata id="metadata11058">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(-227.317, -407.333)">
|
||||
<g transform="matrix(6.01697, 0, 0, -6.01697, -1957.41, 2763.93)" id="g11008">
|
||||
<path id="path1556" style="fill:#004c8f;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 363.272,391.479 47.722,0 0,-7.953 -47.722,0 0,7.953 z"/>
|
||||
<path id="path1558" style="fill:#004c8f;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 371.226,391.479 39.768,0 0,-7.953 -39.768,0 0,7.953 z"/>
|
||||
<path id="path1560" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 373.755,385.621 0,3.763 1.238,0 0,-1.27 1.16,0 0,1.27 1.24,0 0,-3.763 -1.24,0 0,1.46 -1.16,0 0,-1.46 -1.238,0"/>
|
||||
<path id="path1562" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 379.352,388.449 0.321,0 c 0.231,0 0.4,-0.024 0.508,-0.072 0.08,-0.035 0.145,-0.087 0.202,-0.165 0.052,-0.077 0.094,-0.174 0.125,-0.296 0.028,-0.121 0.043,-0.249 0.043,-0.384 0,-0.22 -0.03,-0.404 -0.095,-0.553 -0.063,-0.149 -0.154,-0.256 -0.271,-0.322 -0.117,-0.067 -0.291,-0.099 -0.521,-0.099 l -0.312,-0.002 0,1.893 z m 0.478,-2.828 0,0 c 0.292,0 0.534,0.024 0.732,0.077 0.199,0.051 0.361,0.119 0.485,0.2 0.126,0.083 0.24,0.195 0.345,0.334 0.104,0.144 0.195,0.325 0.266,0.547 0.073,0.221 0.108,0.47 0.108,0.752 0,0.414 -0.079,0.764 -0.239,1.056 -0.162,0.286 -0.382,0.493 -0.663,0.615 -0.28,0.122 -0.614,0.182 -1.002,0.182 l -1.721,0 0,-3.763 1.689,0"/>
|
||||
<path id="path1564" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 382.333,385.621 0,3.763 2.936,0 0,-0.928 -1.714,0 0,-0.603 1.371,0 0,-0.903 -1.371,0 0,-1.329 -1.222,0"/>
|
||||
<path id="path1566" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 389.415,387.945 -1.169,0 c -0.022,0.187 -0.09,0.335 -0.203,0.441 -0.114,0.104 -0.257,0.155 -0.433,0.155 -0.219,0 -0.397,-0.085 -0.534,-0.253 -0.138,-0.17 -0.207,-0.445 -0.207,-0.823 0,-0.264 0.031,-0.462 0.088,-0.597 0.059,-0.139 0.142,-0.239 0.245,-0.306 0.106,-0.067 0.235,-0.098 0.394,-0.098 0.19,0 0.342,0.048 0.453,0.158 0.114,0.103 0.18,0.257 0.202,0.463 l 1.19,0 c -0.026,-0.234 -0.073,-0.43 -0.141,-0.59 -0.065,-0.159 -0.181,-0.317 -0.338,-0.476 -0.159,-0.161 -0.349,-0.285 -0.568,-0.371 -0.219,-0.087 -0.472,-0.128 -0.762,-0.128 -0.286,0 -0.553,0.041 -0.794,0.125 -0.244,0.086 -0.45,0.208 -0.614,0.361 -0.167,0.159 -0.297,0.337 -0.39,0.538 -0.134,0.283 -0.197,0.594 -0.197,0.941 0,0.29 0.047,0.565 0.142,0.817 0.095,0.25 0.226,0.463 0.393,0.635 0.168,0.171 0.351,0.299 0.555,0.385 0.258,0.11 0.542,0.163 0.857,0.163 0.274,0 0.528,-0.04 0.768,-0.121 0.239,-0.081 0.435,-0.199 0.588,-0.356 0.155,-0.157 0.274,-0.337 0.357,-0.542 0.06,-0.143 0.098,-0.316 0.118,-0.521"/>
|
||||
<path id="path1568" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 393.38,388.537 c 0.175,0 0.288,-0.008 0.344,-0.024 0.072,-0.021 0.132,-0.062 0.175,-0.116 0.044,-0.056 0.067,-0.121 0.067,-0.196 0,-0.096 -0.038,-0.175 -0.111,-0.235 -0.078,-0.063 -0.211,-0.092 -0.402,-0.092 l -0.466,0 0,0.663 0.393,0 z m 0.311,-2.916 0,0 c 0.293,0 0.499,0.014 0.62,0.04 0.119,0.028 0.242,0.072 0.367,0.13 0.122,0.064 0.216,0.124 0.278,0.19 0.096,0.089 0.167,0.197 0.219,0.327 0.052,0.131 0.078,0.279 0.078,0.438 0,0.227 -0.056,0.414 -0.17,0.566 -0.114,0.153 -0.267,0.254 -0.46,0.309 0.327,0.206 0.49,0.472 0.49,0.796 0,0.335 -0.144,0.591 -0.429,0.765 -0.22,0.134 -0.563,0.202 -1.028,0.202 l -1.867,0 0,-3.763 1.902,0 z m -0.199,1.576 0,0 c 0.245,0 0.404,-0.03 0.484,-0.093 0.074,-0.061 0.114,-0.145 0.114,-0.258 0,-0.114 -0.04,-0.204 -0.121,-0.267 -0.077,-0.067 -0.238,-0.095 -0.477,-0.095 l -0.505,0 0,0.713 0.505,0"/>
|
||||
<path id="path1570" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 397.972,386.886 -0.787,0 0.388,1.369 0.399,-1.369 z m -1.157,-1.265 0,0 0.143,0.494 1.232,0 0.144,-0.494 1.231,0 -1.35,3.763 -1.257,0 -1.351,-3.763 1.208,0"/>
|
||||
<path id="path1572" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 400.085,385.621 0,3.763 1.153,0 1.301,-2.015 0,2.015 1.186,0 0,-3.763 -1.178,0 -1.273,1.965 0,-1.965 -1.189,0"/>
|
||||
<path id="path1574" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 404.55,385.621 0,3.763 1.199,0 0,-1.241 1.119,1.241 1.454,0 -1.379,-1.417 1.522,-2.346 -1.482,0 -0.905,1.499 -0.329,-0.325 0,-1.174 -1.199,0"/>
|
||||
<path id="path1576" style="fill:#ed232a;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 363.272,391.479 7.953,0 0,-7.953 -7.953,0 0,7.953 z"/>
|
||||
<path id="path1578" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 364.664,390.087 5.17,0 0,-5.17 -5.17,0 0,5.17 z"/>
|
||||
<path id="path1580" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 366.851,391.479 0.795,0 0,-7.953 -0.795,0 0,7.953 z"/>
|
||||
<path id="path1582" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 363.272,387.899 7.953,0 0,-0.795 -7.953,0 0,0.795 z"/>
|
||||
<path id="path1584" style="fill:#004c8f;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 366.056,388.695 2.386,0 0,-2.386 -2.386,0 0,2.386 z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.8 KiB |
21
erpnext/public/images/bank-logos/HSBC-dark.svg
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="HSBC_MASTERBRAND_LOGO_WW_RGB"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 315.9 85"
|
||||
style="enable-background:new 0 0 315.9 85;" xml:space="preserve">
|
||||
<rect x="42.6" width="85" height="85" fill="#ffffff"/>
|
||||
<title>HSBC_MASTERBRAND_LOGO_WW_RGB</title>
|
||||
<polygon points="170.1,42.6 127.6,0 127.6,85.1" fill="#db0011"/>
|
||||
<polygon points="85.1,42.6 127.6,0 42.6,0" fill="#db0011"/>
|
||||
<polygon points="0,42.6 42.6,85.1 42.6,0" fill="#db0011"/>
|
||||
<polygon points="85.1,42.6 42.6,85.1 127.6,85.1" fill="#db0011"/>
|
||||
<path fill="#FFFFFF" d="M207.4,45.1H192v15.2h-7.7V24.7h7.7v14.6h15.4V24.7h7.7v35.6h-7.7V45.1z"/>
|
||||
<path fill="#FFFFFF" d="M233.7,61c-7.7,0-14-3.1-14.1-11.6h7.7c0.1,3.8,2.3,6.1,6.5,6.1c3.1,0,6.7-1.6,6.7-5.1c0-2.8-2.4-3.6-6.4-4.8l-2.6-0.7
|
||||
c-5.6-1.6-11.2-3.8-11.2-10.2c0-7.9,7.4-10.6,14.1-10.6c6.9,0,12.9,2.4,13,10.3h-7.7c-0.3-3.2-2.2-5.1-5.8-5.1
|
||||
c-2.9,0-5.7,1.5-5.7,4.7c0,2.6,2.4,3.4,7.4,5l3,0.9c6.1,1.9,10,4,10,10C248.5,57.9,240.7,61,233.7,61z"/>
|
||||
<path fill="#FFFFFF" d="M252.9,24.8h12.4c2.3-0.1,4.7,0,7,0.4c4.3,1,7.6,3.8,7.6,8.6c0,4.6-2.9,6.9-7.1,8c4.8,0.9,8.4,3.3,8.4,8.6
|
||||
c0,8.1-8,9.9-14.2,9.9h-14L252.9,24.8z M265.3,39.6c3.4,0,6.9-0.7,6.9-4.8c0-3.7-3.2-4.7-6.4-4.7h-5.4v9.5H265.3z M266,55
|
||||
c3.6,0,7.1-0.8,7.1-5.2s-3-5.2-6.7-5.2h-6.1V55H266z"/>
|
||||
<path fill="#FFFFFF" d="M301.2,61c-11.5,0-16.6-7.3-16.6-18.2s5.7-18.8,17-18.8c7.1,0,14,3.2,14.2,11.2h-8c-0.4-3.6-2.8-5.4-6.2-5.4
|
||||
c-7,0-9.1,7.5-9.1,13.2c0,5.7,2.1,12.3,8.8,12.3c3.5,0,6.1-1.9,6.6-5.5h8C315.1,58,308.6,61,301.2,61z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
21
erpnext/public/images/bank-logos/HSBC.svg
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="HSBC_MASTERBRAND_LOGO_WW_RGB"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 315.9 85"
|
||||
style="enable-background:new 0 0 315.9 85;" xml:space="preserve">
|
||||
<rect x="42.6" width="85" height="85" fill="#ffffff"/>
|
||||
<title>HSBC_MASTERBRAND_LOGO_WW_RGB</title>
|
||||
<polygon points="170.1,42.6 127.6,0 127.6,85.1" fill="#db0011"/>
|
||||
<polygon points="85.1,42.6 127.6,0 42.6,0" fill="#db0011"/>
|
||||
<polygon points="0,42.6 42.6,85.1 42.6,0" fill="#db0011"/>
|
||||
<polygon points="85.1,42.6 42.6,85.1 127.6,85.1" fill="#db0011"/>
|
||||
<path d="M207.4,45.1H192v15.2h-7.7V24.7h7.7v14.6h15.4V24.7h7.7v35.6h-7.7V45.1z"/>
|
||||
<path d="M233.7,61c-7.7,0-14-3.1-14.1-11.6h7.7c0.1,3.8,2.3,6.1,6.5,6.1c3.1,0,6.7-1.6,6.7-5.1c0-2.8-2.4-3.6-6.4-4.8l-2.6-0.7
|
||||
c-5.6-1.6-11.2-3.8-11.2-10.2c0-7.9,7.4-10.6,14.1-10.6c6.9,0,12.9,2.4,13,10.3h-7.7c-0.3-3.2-2.2-5.1-5.8-5.1
|
||||
c-2.9,0-5.7,1.5-5.7,4.7c0,2.6,2.4,3.4,7.4,5l3,0.9c6.1,1.9,10,4,10,10C248.5,57.9,240.7,61,233.7,61z"/>
|
||||
<path d="M252.9,24.8h12.4c2.3-0.1,4.7,0,7,0.4c4.3,1,7.6,3.8,7.6,8.6c0,4.6-2.9,6.9-7.1,8c4.8,0.9,8.4,3.3,8.4,8.6
|
||||
c0,8.1-8,9.9-14.2,9.9h-14L252.9,24.8z M265.3,39.6c3.4,0,6.9-0.7,6.9-4.8c0-3.7-3.2-4.7-6.4-4.7h-5.4v9.5H265.3z M266,55
|
||||
c3.6,0,7.1-0.8,7.1-5.2s-3-5.2-6.7-5.2h-6.1V55H266z"/>
|
||||
<path d="M301.2,61c-11.5,0-16.6-7.3-16.6-18.2s5.7-18.8,17-18.8c7.1,0,14,3.2,14.2,11.2h-8c-0.4-3.6-2.8-5.4-6.2-5.4
|
||||
c-7,0-9.1,7.5-9.1,13.2c0,5.7,2.1,12.3,8.8,12.3c3.5,0,6.1-1.9,6.6-5.5h8C315.1,58,308.6,61,301.2,61z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
BIN
erpnext/public/images/bank-logos/I&M.png
Normal file
|
After Width: | Height: | Size: 160 KiB |
567
erpnext/public/images/bank-logos/ICICI-dark.svg
Normal file
|
After Width: | Height: | Size: 124 KiB |
567
erpnext/public/images/bank-logos/ICICI.svg
Normal file
|
After Width: | Height: | Size: 124 KiB |
1
erpnext/public/images/bank-logos/IDBI_Bank.svg
Normal file
|
After Width: | Height: | Size: 19 KiB |
26
erpnext/public/images/bank-logos/IDFC_First_Bank.svg
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200px" height="71px" viewBox="0 0 201 71" version="1.1">
|
||||
<defs>
|
||||
<filter id="alpha" filterUnits="objectBoundingBox" x="0%" y="0%" width="100%" height="100%">
|
||||
<feColorMatrix type="matrix" in="SourceGraphic" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
|
||||
</filter>
|
||||
<image id="image7" width="201" height="71" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMkAAABHCAYAAACtfGOtAAAABmJLR0QA/wD/AP+gvaeTAAAA20lEQVR4nO3TsREBUQAA0X9GAwJi/ahHGwKjTCUYlLDZfWfeq2CTHQMAAAAAAAAAAAAAAP7KMjtgTZ/X9THG7TS7g23Zzw5Y1+syxjjPrmBbdrMD4NeZBIJJIJgEgkkgmASCSSCYBIJJIJgEgkkgmASCSSCYBIJJIJgEgkkgmASCSSCYBIJJIJgEgkkgmASCSSCYBIJJIJgEgkkgmASCSSCYBIJJIJgEgkkgmASCSSCYBIJJIJgEgkkgmASCSSCYBIJJIJgEwn52wKrex/tYnofZGQAAAAAAwE/4AvtgCBhgYvVcAAAAAElFTkSuQmCC"/>
|
||||
<mask id="mask0">
|
||||
<g filter="url(#alpha)">
|
||||
<use xlink:href="#image7"/>
|
||||
</g>
|
||||
</mask>
|
||||
<clipPath id="clip1">
|
||||
<rect x="0" y="0" width="201" height="71"/>
|
||||
</clipPath>
|
||||
<g id="surface6" clip-path="url(#clip1)">
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 141.480469 35.539062 L 144.746094 35.539062 L 144.746094 19.703125 L 141.480469 19.703125 Z M 151.082031 22.421875 L 151.082031 26.59375 L 154.015625 26.59375 C 156.640625 26.59375 157.523438 26.328125 157.523438 24.339844 C 157.523438 22.75 156.972656 22.421875 154.214844 22.421875 Z M 147.816406 19.703125 L 154.679688 19.703125 C 157.964844 19.703125 160.835938 19.792969 160.835938 24.453125 C 160.835938 27.542969 159.554688 28.691406 157.746094 29.113281 L 161.871094 35.539062 L 157.898438 35.539062 L 154.015625 29.308594 L 151.082031 29.308594 L 151.082031 35.539062 L 147.816406 35.539062 Z M 166 30.570312 C 166.128906 32.226562 166.375 33.109375 169.507812 33.109375 C 171.164062 33.109375 172.375 32.867188 172.375 31.253906 C 172.375 30.28125 171.933594 29.753906 170.542969 29.375 L 166.703125 28.339844 C 164.785156 27.832031 163.085938 26.902344 163.085938 24.011719 C 163.085938 21.734375 164.121094 19.351562 169.019531 19.351562 C 173.675781 19.351562 175.132812 21.515625 175.199219 24.339844 L 171.933594 24.339844 C 171.777344 23.019531 171.714844 22.132812 168.886719 22.132812 C 167.234375 22.132812 166.394531 22.441406 166.394531 23.699219 C 166.394531 24.851562 167.078125 25.179688 168.007812 25.425781 L 171.535156 26.375 C 173.789062 26.96875 175.683594 27.851562 175.683594 31.007812 C 175.683594 35.472656 171.867188 35.890625 169.507812 35.890625 C 164.34375 35.890625 162.929688 33.859375 162.734375 30.570312 Z M 181.222656 22.488281 L 176.457031 22.488281 L 176.457031 19.703125 L 189.234375 19.703125 L 189.234375 22.488281 L 184.488281 22.488281 L 184.488281 35.535156 L 181.222656 35.535156 Z M 74.222656 52.316406 L 74.222656 56.492188 L 77.160156 56.492188 C 80.136719 56.492188 80.796875 56.269531 80.796875 54.460938 C 80.796875 52.558594 80.183594 52.316406 77.796875 52.316406 Z M 74.222656 46.09375 L 74.222656 49.601562 L 77.886719 49.601562 C 79.851562 49.601562 80.335938 49.359375 80.335938 47.726562 C 80.335938 46.402344 80.027344 46.089844 77.269531 46.089844 L 74.222656 46.089844 Z M 78.679688 43.375 C 81.792969 43.375 83.492188 44.476562 83.492188 47.484375 C 83.492188 49.933594 82.367188 50.441406 81.683594 50.726562 C 83.625 51.476562 84.109375 52.980469 84.109375 54.636719 C 84.109375 57.242188 82.917969 59.207031 78.546875 59.207031 L 70.957031 59.207031 L 70.957031 43.375 Z M 93.136719 53.84375 L 90.992188 54.195312 C 89.824219 54.371094 88.988281 54.613281 88.988281 55.851562 C 88.988281 56.734375 89.425781 57.222656 90.792969 57.222656 C 92.671875 57.222656 93.136719 56.203125 93.136719 54.769531 Z M 86.273438 51.105469 C 86.425781 48.097656 88.144531 47.285156 91.28125 47.285156 C 94.5 47.285156 96.199219 48.144531 96.199219 50.683594 L 96.199219 59.207031 L 93.265625 59.207031 L 93.265625 58.324219 C 92.671875 58.941406 91.542969 59.496094 89.691406 59.496094 C 86.910156 59.496094 85.917969 58.257812 85.917969 56.273438 C 85.917969 53.6875 87.59375 52.714844 89.296875 52.449219 L 93.136719 51.851562 L 93.136719 51.148438 C 93.136719 50.066406 92.582031 49.753906 91.148438 49.753906 C 89.625 49.753906 89.316406 50.109375 89.164062 51.105469 Z M 106.394531 52.515625 C 106.394531 50.730469 106.375 49.800781 104.410156 49.800781 C 102.222656 49.800781 101.980469 50.949219 101.980469 53.6875 L 101.980469 59.207031 L 98.914062 59.207031 L 98.914062 47.570312 L 101.828125 47.570312 L 101.828125 49.070312 C 102.664062 47.945312 103.574219 47.285156 105.710938 47.285156 C 108.691406 47.285156 109.464844 48.5625 109.464844 52.097656 L 109.464844 59.207031 L 106.394531 59.207031 Z M 112.421875 43.375 L 115.488281 43.375 L 115.488281 51.875 L 119.261719 47.570312 L 123.035156 47.570312 L 118.976562 51.988281 L 123.191406 59.207031 L 119.636719 59.207031 L 116.8125 54.152344 L 115.488281 55.519531 L 115.488281 59.207031 L 112.421875 59.207031 Z M 112.421875 43.375 "/>
|
||||
</g>
|
||||
</defs>
|
||||
<g id="surface1">
|
||||
<rect x="0" y="0" width="201" height="71" style="fill:rgb(61.56863%,11.372549%,15.294118%);fill-opacity:1;stroke:none;"/>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 15.367188 15.367188 L 55.625 15.367188 L 55.625 55.636719 L 15.363281 55.636719 Z M 59.015625 11.976562 L 11.972656 11.976562 L 11.972656 59.023438 L 59.015625 59.023438 Z M 59.015625 11.976562 "/>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 19.671875 27.375 L 51.320312 27.375 L 51.320312 19.675781 L 19.671875 19.675781 Z M 19.671875 51.324219 L 27.371094 51.324219 L 27.371094 43.625 L 19.671875 43.625 Z M 19.671875 39.347656 L 39.34375 39.347656 L 39.34375 31.652344 L 19.671875 31.652344 Z M 70.992188 35.925781 L 74.414062 35.925781 L 74.414062 19.675781 L 70.992188 19.675781 Z M 80.554688 22.421875 L 80.554688 32.820312 L 83.449219 32.820312 C 86.625 32.820312 87.355469 31.605469 87.355469 27.566406 C 87.355469 23.261719 86.890625 22.421875 83.09375 22.421875 Z M 83.890625 19.703125 C 88.875 19.703125 90.664062 21.867188 90.664062 27.542969 C 90.664062 32.996094 88.765625 35.539062 83.867188 35.539062 L 77.289062 35.539062 L 77.289062 19.703125 Z M 93.199219 19.703125 L 104.320312 19.703125 L 104.320312 22.421875 L 96.464844 22.421875 L 96.464844 26.128906 L 103.328125 26.128906 L 103.328125 28.847656 L 96.464844 28.847656 L 96.464844 35.539062 L 93.199219 35.539062 Z M 119.546875 30.324219 C 119.328125 33.417969 117.605469 35.890625 112.730469 35.890625 C 107.960938 35.890625 105.558594 33.527344 105.558594 27.699219 C 105.558594 22 107.832031 19.351562 112.75 19.351562 C 116.636719 19.351562 119.019531 21.007812 119.546875 24.628906 L 116.28125 24.628906 C 115.90625 23.214844 115.445312 22.132812 112.75 22.132812 C 110.058594 22.132812 108.867188 23.746094 108.867188 27.984375 C 108.867188 31.273438 109.75 33.109375 112.792969 33.109375 C 114.980469 33.109375 116.019531 32.425781 116.28125 30.324219 Z M 128.242188 19.703125 L 139.363281 19.703125 L 139.363281 22.421875 L 131.507812 22.421875 L 131.507812 26.128906 L 138.371094 26.128906 L 138.371094 28.847656 L 131.507812 28.847656 L 131.507812 35.539062 L 128.242188 35.539062 Z M 128.242188 19.703125 "/>
|
||||
<use xlink:href="#surface6" mask="url(#mask0)"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.3 KiB |
83
erpnext/public/images/bank-logos/IndusInd_Bank.svg
Normal file
@@ -0,0 +1,83 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 425 46"
|
||||
height="46"
|
||||
width="425"
|
||||
xml:space="preserve"
|
||||
id="svg10"
|
||||
version="1.1"><metadata
|
||||
id="metadata16"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs14"><clipPath
|
||||
id="clipPath26"
|
||||
clipPathUnits="userSpaceOnUse"><path
|
||||
id="path24"
|
||||
d="M 0,774 H 594 V 0.06 H 0 Z" /></clipPath></defs><g
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,0,46)"
|
||||
id="g18"><g
|
||||
transform="matrix(1.6141776,0,0,1.5345379,41.674325,9.8903597)"
|
||||
id="g32"><path
|
||||
id="path34"
|
||||
style="fill:#98272a;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 0,0 -1.168,-5.891 h -5.105 c 0.388,1.95 0.777,4.041 1.218,6.036 0.09,0.433 0.19,0.876 0.285,1.359 0,0.342 0.047,0.682 0.1,1.023 C -4.477,4.91 -6.178,5.35 -7.826,4.619 -8.807,4.23 -9.244,3.551 -9.723,2.672 -10.166,1.893 -10.305,1.166 -10.506,0.193 l -1.265,-6.084 h -5.059 l 2.965,14.5 c 1.558,0.049 3.111,0.098 4.672,0.143 -0.192,-0.922 -0.436,-1.799 -0.582,-2.723 1.9,2.287 4.322,3.453 7.15,2.629 C 0.195,7.879 0.783,5.053 0.338,2.334 0.283,1.504 0.195,0.777 0,0" /></g><g
|
||||
transform="matrix(1.6141776,0,0,1.5345379,190.60479,33.172368)"
|
||||
id="g36"><path
|
||||
id="path38"
|
||||
style="fill:#98272a;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="M 0,0 H 4.963 L 0.537,-21.109 h -4.568 c 0.191,0.779 0.383,1.554 0.631,2.339 -0.928,-0.88 -1.702,-1.607 -2.725,-2.097 v 3.164 c 0.389,0.094 0.783,0.244 1.119,0.435 1.465,0.926 2.039,2.58 2.039,4.235 l -0.094,0.826 c -0.095,0.775 -0.433,1.461 -1.314,1.846 -0.48,0.295 -1.166,0.295 -1.75,0.195 v 3.748 c 0.289,0 0.533,-0.096 0.783,-0.096 1.408,-0.341 2.619,-1.269 3.309,-2.677 z m -6.125,-20.867 c -0.338,-0.195 -0.723,-0.291 -1.17,-0.385 -1.353,-0.34 -2.141,-0.439 -3.549,0.094 -1.65,0.586 -2.474,1.703 -3.107,3.211 -1.459,3.695 0.14,8.949 3.74,10.75 1.166,0.586 2.672,0.922 4.086,0.779 v -3.748 c -0.387,-0.049 -0.82,-0.195 -1.117,-0.387 -0.828,-0.537 -1.365,-1.314 -1.654,-2.236 -0.336,-0.922 -0.54,-2.238 -0.243,-3.209 0.094,-0.488 0.293,-0.834 0.58,-1.121 0.68,-0.584 1.614,-0.729 2.434,-0.584" /></g><g
|
||||
transform="matrix(1.6141776,0,0,1.5345379,124.02968,22.795823)"
|
||||
id="g40"><path
|
||||
id="path42"
|
||||
style="fill:#98272a;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 0,0 -1.02,-3.111 c -1.408,0.386 -2.435,0.586 -3.89,0.681 -0.442,0 -0.774,0.049 -1.113,-0.045 -1.028,-0.25 -1.467,-1.17 -0.686,-1.853 0.969,-0.971 2.674,-1.211 3.889,-1.992 0.297,-0.198 0.634,-0.489 0.972,-0.78 0.965,-1.507 0.828,-3.113 -0.191,-4.673 -1.609,-2.379 -4.67,-2.623 -7.443,-2.428 -1.508,0.101 -2.774,0.39 -4.284,0.681 l 0.93,3.504 c 1.846,-0.49 3.016,-0.929 4.756,-0.728 0.785,0.047 1.91,0 1.91,1.066 -0.199,0.78 -0.926,1.268 -1.709,1.606 -1.162,0.535 -2.428,0.875 -3.351,1.801 -0.543,0.777 -0.692,1.361 -0.692,2.333 0,0.973 0.299,1.651 0.736,2.286 C -8.701,1.895 -3.592,0.875 0,0" /></g><g
|
||||
transform="matrix(1.6141776,0,0,1.5345379,77.476783,23.323704)"
|
||||
id="g44"><path
|
||||
id="path46"
|
||||
style="fill:#98272a;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="M 0,0 5.154,0.096 C 4.766,-1.705 4.373,-3.504 3.984,-5.398 3.748,-6.615 3.26,-8.176 3.602,-9.389 c 0.197,-0.679 0.429,-0.924 1.068,-1.117 0.73,-0.246 1.66,-0.098 2.242,0.34 1.746,1.262 2.233,3.357 2.67,5.4 l 1.07,4.862 h 5.012 l -3.117,-14.741 c -1.457,-0.046 -2.918,0.049 -4.426,0 0.145,0.831 0.344,2.047 0.537,2.874 -0.537,-0.489 -0.971,-1.026 -1.556,-1.461 -0.727,-0.582 -1.606,-0.973 -2.528,-1.217 -1.072,-0.242 -2.531,-0.242 -3.553,0.197 -1.121,0.438 -1.945,1.455 -2.384,2.578 -0.582,1.508 -0.342,2.526 -0.096,4.086 C -1.072,-5.061 -0.533,-2.482 0,0" /></g><g
|
||||
transform="matrix(1.6141776,0,0,1.5345379,68.208174,33.172368)"
|
||||
id="g48"><path
|
||||
id="path50"
|
||||
style="fill:#98272a;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="M 0,0 H 4.963 L 0.49,-21.109 h -4.574 c 0.195,0.779 0.438,1.554 0.629,2.339 -0.869,-0.88 -1.695,-1.607 -2.67,-2.097 v 3.164 c 0.391,0.094 0.775,0.244 1.121,0.435 1.404,0.926 1.994,2.58 1.994,4.235 l -0.056,0.826 c -0.094,0.775 -0.483,1.461 -1.35,1.846 -0.498,0.295 -1.176,0.295 -1.709,0.195 v 3.748 c 0.244,0 0.48,-0.096 0.775,-0.096 1.364,-0.341 2.579,-1.269 3.309,-2.677 z m -6.125,-20.867 c -0.387,-0.195 -0.779,-0.291 -1.174,-0.385 -1.353,-0.34 -2.176,-0.439 -3.588,0.094 -1.613,0.586 -2.488,1.703 -3.123,3.211 -1.414,3.695 0.207,8.949 3.752,10.75 1.166,0.586 2.721,0.922 4.133,0.779 v -3.748 c -0.437,-0.049 -0.824,-0.195 -1.174,-0.387 -0.771,-0.537 -1.353,-1.314 -1.65,-2.236 -0.336,-0.922 -0.526,-2.238 -0.244,-3.209 0.101,-0.488 0.295,-0.834 0.629,-1.121 0.689,-0.584 1.558,-0.729 2.439,-0.584" /></g><g
|
||||
transform="matrix(1.6141776,0,0,1.5345379,8.4642356,33.172368)"
|
||||
id="g52"><path
|
||||
id="path54"
|
||||
style="fill:#98272a;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="M 0,0 H 5.203 L 0.877,-21.062 h -5.252" /></g><g
|
||||
transform="matrix(1.6141776,0,0,1.5345379,164.23559,9.8903597)"
|
||||
id="g56"><path
|
||||
id="path58"
|
||||
style="fill:#98272a;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 0,0 -1.221,-5.891 h -5.154 c 0.436,1.95 0.873,4.041 1.266,6.036 0.097,0.433 0.199,0.876 0.343,1.308 0,0.393 0,0.733 0.043,1.074 C -4.473,4.91 -6.285,5.35 -7.885,4.619 -8.809,4.182 -9.246,3.551 -9.73,2.672 -10.213,1.893 -10.363,1.115 -10.508,0.193 l -1.318,-6.084 h -4.959 l 2.871,14.5 c 1.551,0.049 3.119,0.049 4.668,0.143 C -9.438,7.83 -9.637,6.953 -9.834,6.029 -7.936,8.316 -5.502,9.482 -2.682,8.658 0.143,7.879 0.729,5.053 0.34,2.283 0.24,1.504 0.143,0.777 0,0" /></g><g
|
||||
transform="matrix(1.6141776,0,0,1.5345379,130.467,33.172368)"
|
||||
id="g60"><path
|
||||
id="path62"
|
||||
style="fill:#98272a;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="M 0,0 H 5.254 L 0.928,-21.062 h -5.26" /></g><g
|
||||
transform="matrix(1.6141776,0,0,1.5345379,287.6443,9.6601787)"
|
||||
id="g64"><path
|
||||
id="path66"
|
||||
style="fill:#98272a;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 0,0 -1.213,-5.93 h -5.156 c 0.389,1.992 0.877,4.133 1.271,6.08 0.086,0.485 0.188,0.92 0.289,1.409 0,0.341 0.041,0.681 0.094,1.027 C -4.516,4.969 -6.27,5.4 -7.928,4.676 -8.852,4.281 -9.285,3.602 -9.814,2.725 -10.258,1.947 -10.402,1.215 -10.596,0.246 l -1.273,-6.131 h -5.057 l 2.924,14.596 c 1.547,0.049 3.158,0.098 4.717,0.146 C -9.482,7.934 -9.68,7.006 -9.871,6.131 -8.02,8.418 -5.492,9.586 -2.717,8.809 0.197,7.98 0.732,5.107 0.344,2.383 0.291,1.559 0.146,0.83 0,0" /></g><g
|
||||
transform="matrix(1.6141776,0,0,1.5345379,297.07111,33.172368)"
|
||||
id="g68"><path
|
||||
id="path70"
|
||||
style="fill:#98272a;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 0,0 h 5.105 l -2.628,-12.549 5.16,6.035 h 5.736 l -6.025,-6.666 3.787,-7.978 H 5.686 l -3.35,7.736 -1.607,-7.736 h -5.008" /></g><g
|
||||
transform="matrix(1.6141776,0,0,1.5345379,258.83931,12.575801)"
|
||||
id="g72"><path
|
||||
id="path74"
|
||||
style="fill:#98272a;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 0,0 c -0.438,-2.092 -0.875,-4.135 -1.271,-6.18 l -0.19,-1.65 h -4.232 l 0.298,2.236 c -0.73,-0.728 -1.513,-1.361 -2.337,-1.801 v 2.53 c 0.044,0.049 0.139,0.049 0.234,0.101 0.543,0.289 0.934,0.483 1.221,0.778 0.683,0.726 1.027,1.841 1.309,2.769 h -0.725 c -0.625,0 -1.362,0.045 -2.039,0 v 2.432 c 1.017,0.096 2.186,0.051 3.349,0.051 0,1.267 -0.484,2.234 -1.797,2.523 -0.582,0.1 -1.113,0.1 -1.552,0.1 V 6.908 C -4.57,7.293 -1.214,6.76 -0.047,3.889 0.532,2.432 0.199,1.508 0,0 m -7.732,-7.395 c -0.78,-0.39 -1.659,-0.636 -2.483,-0.728 -1.9,-0.193 -3.891,0.678 -4.717,2.432 -0.588,0.974 -0.435,2.041 -0.2,3.158 0.25,1.07 0.739,1.656 1.993,2.533 1.803,0.873 3.563,1.168 5.407,1.215 v -2.432 c -0.732,-0.049 -1.461,-0.246 -1.947,-0.588 -0.971,-0.728 -1.356,-2.09 -0.294,-2.912 0.633,-0.437 1.509,-0.396 2.241,-0.148 z m 0,11.284 c -0.686,0 -1.272,-0.047 -2.043,-0.244 -0.875,-0.192 -1.508,-0.485 -2.34,-0.87 l 0.584,3.401 c 1.174,0.289 2.427,0.584 3.799,0.732" /></g><g
|
||||
transform="matrix(1.6141776,0,0,1.5345379,218.56234,30.55905)"
|
||||
id="g76"><path
|
||||
id="path78"
|
||||
style="fill:#98272a;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 0,0 h 2.674 c 2.34,0 5.937,-0.34 6.609,-3.064 0.149,-0.438 0.196,-0.872 0.196,-1.309 v -0.053 c 0,-1.599 -0.772,-3.013 -2.231,-3.99 C 6.223,-8.898 5.354,-9.143 4.332,-9.434 6.953,-9.871 8.662,-11.672 8.123,-14.543 7.338,-18.529 3.598,-19.158 0,-19.406 v 3.5 c 0.193,0 0.393,0.052 0.537,0.103 3.012,0.485 3.69,3.987 0.828,4.617 -0.445,0.1 -0.875,0.153 -1.365,0.1 v 3.115 c 0.584,0 1.217,0.049 1.748,0.141 1.609,0.391 3.744,2.043 1.992,3.894 C 3.01,-3.164 1.264,-3.258 0,-3.354 Z M -4.863,0 H 0 v -3.354 h -0.439 l -1.024,-4.568 c 0.44,0 0.981,-0.049 1.463,-0.049 v -3.115 c -0.682,0 -1.412,-0.1 -2.092,-0.15 l -1.021,-4.86 c 0.871,0.049 2.045,0.049 3.113,0.19 v -3.5 c -0.295,-0.049 -0.625,-0.049 -0.93,-0.098 h -7.875" /></g></g></svg>
|
||||
|
After Width: | Height: | Size: 9.2 KiB |
1
erpnext/public/images/bank-logos/Judo_Bank-dark.svg
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
1
erpnext/public/images/bank-logos/Judo_Bank.svg
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
erpnext/public/images/bank-logos/KCB_Bank_Kenya.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
1
erpnext/public/images/bank-logos/Kotak_Mahindra.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 90.192" width="578px" height="173px"><g fill-rule="evenodd"><path d="M0 45.096C0 20.192 23.474 0 52.434 0s52.432 20.192 52.432 45.096-23.474 45.096-52.432 45.096S0 70.003 0 45.096" fill="#003874"/><g fill="#ed1c24"><path d="M46.067 14.483l12.182-4.025.06 65.853-12.285 4.116.044-65.944m126.716 56.682c11.707 0 20.623-6.808 20.623-18.524 0-11.78-8.916-18.6-20.623-18.6-11.7 0-20.617 6.8-20.617 18.6 0 11.717 8.916 18.524 20.617 18.524zm0-8.578c-5.646 0-7.957-4.7-7.957-9.946 0-5.315 2.3-10 7.957-10s7.963 4.694 7.963 10c0 5.246-2.3 9.946-7.963 9.946m19.498-19.14h7v14.44c0 8.44 2.654 13.278 13.606 13.278 3.063 0 5.38-.4 7.7-.68l-.4-7.966c-1.224.203-2.517.475-3.74.475-3.88 0-4.903-2.18-4.903-6.47V43.447h8.575v-8.58h-8.575l-.003-12.27-12.038 4.3v7.97h-7.214v8.58m70.7 26.903h12.25V52.78h.134l9.802 17.57H300l-13.34-19.205 12.316-16.276h-13.403l-10.208 14.914h-.134v-27.14L262.98 26.9v43.46"/><path d="M119.55 70.35h12.254V52.78h.134l9.802 17.57h14.833l-13.34-19.205L155.55 34.87h-13.403L131.94 49.784h-.134v-27.14l-12.254 4.04V70.35m139.08.165c-.553-2.823-.7-5.65-.7-8.478v-13.37c0-10.96-7.923-14.9-17.082-14.9-5.302 0-9.918.756-14.324 2.55l.2 8.407c3.438-1.927 7.435-2.7 11.43-2.7 4.478 0 8.125 1.312 8.194 6.205a36.35 36.35 0 0 0-5.783-.481c-6.6 0-18.524 1.312-18.524 12.27 0 7.788 6.336 11.3 13.428 11.3 5.096 0 8.538-2 11.364-6.477H247c0 1.86.206 3.722.275 5.65h11.367zm-25.004-11.37c0-3.448 3.307-4.756 7.507-4.756 1.86 0 3.654.137 5.234.206 0 4.206-2.96 8.475-7.64 8.475-2.895 0-5.1-1.446-5.1-3.925"/></g><path d="M91.866 49.636c-1.143 9.42-6.427 18.937-17.965 18.955-6.736.012-11.998-4.6-15.642-10.243v-6.536c4.56 2.264 8.822 4.694 13.993 4.768 6.37.094 12.13-2.355 14.512-6.945h5.103zm-38.57 5.915c-5.293 6.38-10.408 12.897-19.992 12.897-13.537 0-19.958-13.088-19.958-24.03 0-10.514 5.018-22.96 18.206-22.96 5.72 0 11.226 3.498 14.508 7.198l-.01 8.925c-2.742-1.846-8.884-3.657-12.894-3.722-8.363-.14-15.736 3.485-15.608 11.74.087 5.683 5.718 9.546 11.32 9.546 8.58 0 13.778-7.838 18.122-13.787a490.38 490.38 0 0 0 5.165-6.858c4.825-6.742 10.408-12.897 19.992-12.897 11.29 0 17.628 9.1 19.42 18.468h-5.1c-2.05-3.038-5.993-4.897-9.877-4.897-8.87 0-14.17 8.16-18.606 14.168l-4.7 6.208" fill="#fff"/></g><path d="M119.573 48.56l.114-21.96 5.74-1.886 6.066-1.89c.18-.002.377 6.01.442 13.356l.117 13.36 10.092-14.795h6.547c3.6 0 6.547.142 6.547.315s-2.692 3.856-5.983 8.183l-5.983 7.868 6.34 9.15 6.672 9.703c.26.433-1.27.552-7.092.552h-7.425l-9.712-17.444-.24 17.444h-12.355l.114-21.96z" opacity="0" stroke="#000" stroke-width=".04"/></svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
1
erpnext/public/images/bank-logos/Macquarie.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1641" height="291"><g fill-rule="evenodd"><path d="M1443.06 116c.21 4.84-.5 9.68-2.09 14.26a38.395 38.395 0 0 1-18.54 21.42c-4.31 2.24-9 3.65-13.83 4.14l40.15 59.47h-23.22l-39.14-58.53h-44.1v58.86h-20.07V75.3h74.67c32.39 0 46.17 18.04 46.17 40.7m-46.84 22.31c17.27 0 26.77-8.15 26.77-22.31 0-14.17-9.64-21.99-26.77-21.99h-53.53v44.3zM1129.25 75.3h20.07v80.92c0 37.42-22.95 61.94-62.09 61.94s-62.09-24.52-62.09-61.94V75.3h20.07v78.78c0 28.73 14.85 44.57 41.89 44.57 27.03 0 41.88-15.84 41.88-44.57zm420.2 121.21h91.13v18.78h-111.27V75.3h110v18.78h-89.86v39.49h80.49v18.57h-80.49zM1474.78 75.3h20.14v140.06h-20.14zm-834.65-.33 64.44 140.32H684.5l-16.53-36.55h-71.46l-16.6 36.55h-20.07l64.7-139.99zm20.08 85.73-27.37-60.87-27.57 60.87zm579.78-85.4 64.43 140.32h-20.41l-16.52-36.55h-71.46l-16.53 36.55h-20.48l64.44-140.32zm19.33 85.4-27.56-60.87-27.57 60.87zM465.1 189.03 511.87 75.3h30.44v139.99h-19.14V96.02l-49.38 119.27H456.4L407.02 96.02v119.27h-19.14V75.3h30.51zm317.62-97.82c-7.08-.11-14.1 1.23-20.64 3.92-6.55 2.69-12.47 6.68-17.42 11.73s-8.83 11.05-11.38 17.64a52.1 52.1 0 0 0-3.49 20.7c-.26 7.06.92 14.11 3.47 20.71s6.42 12.61 11.37 17.67a52.3 52.3 0 0 0 17.43 11.75 52.3 52.3 0 0 0 20.66 3.92c4.34-.02 8.65-.6 12.84-1.72 4.19-1.13 8.22-2.79 11.99-4.94 3.76-2.15 7.23-4.77 10.33-7.81a50.8 50.8 0 0 0 8-10.18l15.45 11.82a69 69 0 0 1-11.15 13.26 69 69 0 0 1-14.09 10.07 69 69 0 0 1-16.16 6.27 69 69 0 0 1-17.21 2.07c-9.67.22-19.29-1.51-28.28-5.09s-17.16-8.93-24.03-15.74a71.9 71.9 0 0 1-15.96-23.87 71.8 71.8 0 0 1-5.33-28.19 71.8 71.8 0 0 1 5.33-28.19c3.66-8.95 9.09-17.06 15.96-23.86s15.05-12.14 24.03-15.72a72.2 72.2 0 0 1 28.28-5.07c5.8-.03 11.58.67 17.21 2.07a69.8 69.8 0 0 1 16.16 6.27c5.1 2.76 9.84 6.15 14.09 10.08a69 69 0 0 1 11.15 13.26l-15.45 11.76a50.5 50.5 0 0 0-8.02-10.16 50.3 50.3 0 0 0-10.33-7.79 50.3 50.3 0 0 0-11.98-4.92 50.5 50.5 0 0 0-12.83-1.72m216.32 54.05c.04 3.7-.2 7.39-.72 11.05s-1.32 7.28-2.38 10.82c-1.07 3.54-2.4 7-3.99 10.34a72.6 72.6 0 0 1-5.49 9.62l31.12 28.2h-27.71l-15.85-14.3a71 71 0 0 1-10.36 7.39c-3.66 2.15-7.51 3.97-11.5 5.43s-8.11 2.57-12.3 3.3c-4.18.73-8.43 1.08-12.68 1.05a72.1 72.1 0 0 1-27.73-5.62c-8.79-3.69-16.75-9.08-23.43-15.86s-11.95-14.81-15.51-23.64a71.8 71.8 0 0 1-5.19-27.78 71.7 71.7 0 0 1 21.05-50.74c13.47-13.46 31.75-21.02 50.81-21.02s37.34 7.56 50.81 21.02a71.7 71.7 0 0 1 21.05 50.74m-27.77 28.2c1.19-2.13 2.23-4.34 3.14-6.61.9-2.27 1.65-4.6 2.26-6.96.6-2.37 1.05-4.77 1.35-7.19.29-2.42.43-4.86.41-7.3a51.35 51.35 0 0 0-14.08-38.02 51.5 51.5 0 0 0-37.3-15.99c-14.11 0-27.59 5.78-37.3 15.99a51.32 51.32 0 0 0-14.09 38.02c-.25 6.93.89 13.84 3.35 20.33s6.19 12.42 10.98 17.45a52.1 52.1 0 0 0 16.89 11.83 52.3 52.3 0 0 0 20.17 4.38c2.89.01 5.79-.23 8.64-.72 2.86-.49 5.67-1.23 8.4-2.21a49.788 49.788 0 0 0 15.01-8.57l-19.61-17.77 13.38-13.36zM311 145.26c0 81.59-68.25 145.27-155.5 145.27S0 226.91 0 145.26 68.25 0 155.5 0 311 63.68 311 145.26M61.29 245.49a141.7 141.7 0 0 1-16.44-21.71c-4.78-7.74-8.79-15.92-12-24.43s-5.6-17.31-7.12-26.27c-1.53-8.97-2.19-18.06-1.98-27.15-.25-9.15.38-18.29 1.88-27.32 1.51-9.02 3.88-17.88 7.09-26.45s7.24-16.81 12.03-24.61c4.8-7.8 10.34-15.11 16.54-21.85.13-.11.23-.25.3-.4a1.17 1.17 0 0 0 0-.99c-.07-.16-.17-.3-.3-.41-.4-.74-1.2-.67-2.01 0a130.4 130.4 0 0 0-35.99 45.31c-8.45 17.6-12.84 36.87-12.84 56.39s4.39 38.79 12.84 56.39 20.75 33.08 35.99 45.3h2.01c.13-.11.23-.25.3-.4a1.17 1.17 0 0 0 0-.99c-.07-.16-.17-.3-.3-.41m47.77-39.62a80 80 0 0 1-11.69-12.59 79.5 79.5 0 0 1-8.71-14.81c-2.36-5.23-4.15-10.7-5.33-16.32s-1.75-11.35-1.7-17.09a79.29 79.29 0 0 1 7.02-33.41c2.36-5.24 5.28-10.2 8.72-14.81a79.6 79.6 0 0 1 11.69-12.58c.34-.54.67-1.14.34-1.54-.34-.4-1.14-.53-2.08 0-21.67 13.1-38.87 34.15-38.87 62.48s17.2 49.37 38.87 62.4c.94.67 1.74.54 2.08 0 .33-.46.2-1-.34-1.73m109.54-60.61c0-38.48-29.38-67.42-63.1-67.42s-63.23 28.94-63.23 67.42c0 38.49 29.77 67.69 63.23 67.69 33.72 0 63.1-29.2 63.1-67.69m23.95.2c0-28.33-17.2-49.11-38.94-62.47-.87-.67-1.67-.47-2.01 0-.33.47-.2 1 .34 1.54a79.6 79.6 0 0 1 11.69 12.58c3.44 4.61 6.36 9.57 8.72 14.8 2.36 5.24 4.15 10.71 5.33 16.33s1.75 11.35 1.69 17.09a79.488 79.488 0 0 1-7.03 33.41 79.4 79.4 0 0 1-8.71 14.8 79.3 79.3 0 0 1-11.69 12.59c-.34.54-.67 1.07-.34 1.54.34.47 1.14.6 2.01 0 21.68-13.03 38.94-33.88 38.94-62.21m9.03 100.83a130.6 130.6 0 0 0 35.97-45.31 130.41 130.41 0 0 0 0-112.77 130.6 130.6 0 0 0-35.97-45.31c-.8-.34-1.6-.4-2 0-.13.11-.23.25-.3.4a1.17 1.17 0 0 0 0 .99c.07.16.17.3.3.41a142 142 0 0 1 16.53 21.85 141.56 141.56 0 0 1 19.12 51.06c1.51 9.02 2.14 18.17 1.88 27.32.26 9.14-.37 18.29-1.88 27.32-1.5 9.02-3.87 17.88-7.08 26.45s-7.24 16.81-12.04 24.61a142 142 0 0 1-16.53 21.85c-.13.11-.23.25-.3.4a1.17 1.17 0 0 0 0 .99c.07.16.17.3.3.41.4.67 1.2.67 2 0z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 4.7 KiB |
BIN
erpnext/public/images/bank-logos/Morgan_Stanley.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
erpnext/public/images/bank-logos/Oakstar-dark.webp
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
erpnext/public/images/bank-logos/Oakstar.png
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
erpnext/public/images/bank-logos/PNC.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
erpnext/public/images/bank-logos/PlainsCapitalBank.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
erpnext/public/images/bank-logos/Prime_Bank.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
@@ -0,0 +1 @@
|
||||
<svg height="201.556444" viewBox="0 0 151.415 61.565" width="496.138938" xmlns="http://www.w3.org/2000/svg"><path d="m68.046.868h75.24c4.018 0 7.336 3.476 7.336 7.718v44.47c0 4.241-3.318 7.718-7.335 7.718h-75.24c-4.027 0-7.317-3.477-7.317-7.717v-44.471c0-4.242 3.29-7.718 7.316-7.718" fill="#fab90c" fill-rule="evenodd"/><path d="m68.046 1.663c-3.597 0-6.522 3.105-6.522 6.923v44.471c0 3.816 2.925 6.923 6.522 6.923h75.24c3.609 0 6.544-3.107 6.544-6.923v-44.47c0-3.82-2.935-6.924-6.543-6.924zm75.24 59.902h-75.24c-4.467 0-8.105-3.816-8.105-8.508v-44.47c0-4.69 3.638-8.51 8.105-8.51h75.24c4.484 0 8.129 3.82 8.129 8.51v44.47c0 4.692-3.645 8.508-8.128 8.508" fill="#fff"/><path d="m53.114.795h-44.707c-4.178 0-7.613 3.47-7.613 7.71v44.511c0 4.238 3.435 7.709 7.613 7.709h44.707c4.203 0 7.615-3.471 7.615-7.709v-44.51c0-4.24-3.412-7.71-7.615-7.71" fill="#9e173b" fill-rule="evenodd"/><path d="m8.407 1.589c-3.762 0-6.818 3.102-6.818 6.917v44.51c0 3.814 3.056 6.915 6.818 6.915h44.707c3.76 0 6.827-3.101 6.827-6.916v-44.509c0-3.815-3.068-6.917-6.827-6.917zm44.707 59.928h-44.707c-4.637 0-8.407-3.815-8.407-8.502v-44.509c0-4.689 3.77-8.506 8.407-8.506h44.707c4.634 0 8.41 3.817 8.41 8.506v44.51c0 4.686-3.776 8.501-8.41 8.501" fill="#fff"/><g fill-rule="evenodd"><path d="m130.72 42.915c6.725 0 12.222-5.409 12.222-12.019 0-8.084-8.228-13.335-16.007-10.844v5.407c4.243-2.49 9.925 0 9.925 5.008 0 3.507-3.07 6.455-6.578 6.455-3.654 0-6.573-2.948-6.573-6.455 0-7.347-.158-14.68-.158-22.024h-5.16l.006 22.453.123 1.167c.19 5.873 5.649 10.698 12.2 10.852m-35.83-.861h5.286v-11.773c-.432-6.882 10.85-7.469 10.542 0v11.773h5.344v-12.045c.457-15.095-22.088-14.107-21.172 0zm-14.312-23.327c6.728 0 12.194 5.409 12.194 12.017 0 8.084-8.076 13.372-15.849 10.849v-5.413c4.118 2.492 9.739 0 9.739-4.977 0-3.532-2.892-6.483-6.542-6.483-3.662 0-6.544 2.951-6.544 6.483 0 7.314-.152 14.502-.152 21.843h-5.044v-23.469c.152-5.87 5.654-10.726 12.197-10.85" fill="#9e173b"/><path d="m42 8.622h10.913v44.286h-10.913v-12.54c-9.613 3.515-18.602 3.825-26.86-4.266-3.421-3.56-5.35-8.41-4.543-16.86.138-1.294-.467-7.296-1.986-10.632h9.693c4.541 7.21-1.41 16.412 5.547 22.286 9.482 6.138 17.749-1.202 18.149-7.829zm-10.873 4.57c5.168 0 9.343 4.181 9.343 9.249 0 5.115-4.175 9.255-9.343 9.255-5.167 0-9.387-4.14-9.387-9.255 0-5.068 4.22-9.249 9.387-9.249" fill="#fab90c"/></g></svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
17
erpnext/public/images/bank-logos/RBL_Bank-dark.svg
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 1549 480">
|
||||
<!-- Generator: Adobe Illustrator 30.2.1, SVG Export Plug-In . SVG Version: 2.1.1 Build 1) -->
|
||||
<defs>
|
||||
<style>
|
||||
.st0 {
|
||||
fill: #fff;
|
||||
fill-rule: evenodd;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path class="st0" d="M175.1,162.1c0,6.9,4.7,5.1,11.5,6.7,5.8,1.4,9.6,3,14.6,5.4,11.3,5.5,15.1,8.2,23.4,16.5,31.4,31.5,31.9,81.7-1.8,115.6-29,29.3-74.5,30.8-107,6.1-6-4.5-6.5-8.3-13.5-10.2v98.3c24.2,12.8,46.7,12.7,74.6,12.7,75.8,0,148.7-71.2,154.4-145.7,1.8-22.4,3.1-29.8-2.7-55.2-11.4-49.2-44.6-91.1-88.6-113.3-14.4-7.2-44.5-16.9-64.9-16.9v80Z"/>
|
||||
<path class="st0" d="M16.8,174.9c10.4-20.6,17.6-29.4,33.2-45.1,26.3-26.4,69.1-47.7,106.9-47.7,0,111.1,8.2,75.3-27.4,92.7-25.5,12.5-45.4,39.8-45.4,71v189.3H.5v-198.4c0-22.7,8.7-46.6,16.3-61.8h0ZM589.7,240.4h69.1c26.3,0,47.1,7.7,54,27.8,5,14.4,5.9,35.9-6.1,47.4-6.3,6-7.6,3.1-11.5,8.5,9.4.8,19.4,8.4,23.7,14.4,22.3,31.2,2.5,76.5-41.9,76.5h-92.8v-169.2c0-4.2,1.3-5.4,5.5-5.4h0ZM667.9,295c0-19.7-15.9-16.4-36.4-16.4v30.9h18.2c10.9,0,18.2-3.7,18.2-14.5ZM673.4,364.1c0-25.5-9.6-21.8-41.9-21.8v36.4h20c12.3,0,21.9-2.2,21.9-14.6Z"/>
|
||||
<path class="st0" d="M422.4,240.4c48.2,0,113.7-8.8,128.3,33.5,10.4,29.9,1.7,51.9-22.8,68.4,20.2,30.2,12.3,36.4,40,36.4v36.4c-21.5,1.7-51,8.7-66-23.2-14.2-30.1-9.6-35.1-37.7-35.1v58.3h-47.3v-169.3c0-4.2,1.3-5.4,5.5-5.4h0ZM509,301.6c1.9-13.7-9.2-23-23-23h-21.8v41.8h16.4c15.1,0,26.4-5,28.4-18.8ZM1228,240.4c38.9,0,31.5-2.9,40.2,12.6l59.9,103.8v-116.4h32.7v174.7c-40.5,0-32.4,3.7-41.7-12.9-6.4-11.3-53.4-94.5-58.3-98.2v111.1h-32.8v-174.7Z"/>
|
||||
<path class="st0" d="M906.2,240.4h63.6c69.4,0,63.8,62.5,44.1,78.7l-7.7,5c49,11.4,43.1,91-20,91h-80v-174.7ZM993.4,289.5c0-26.7-36.7-21.8-54.5-21.8v45.4h32.7c14.9,0,21.8-8.9,21.8-23.6ZM1002.5,367.7c0-35.6-22.5-29.1-63.6-29.1v51h20c20.1,0,43.6-2.2,43.6-21.9ZM1402.6,240.4h32.8v76.4c14.1-16.3,27.6-32.3,42.2-48.7l20.8-24.7c6.3-5.2,29.3-3,42.5-3-1.8,6.7-11.1,14.9-15.9,20.5-5.7,6.8-10.4,13.6-16.4,20l-16.9,19.5c-4.2,5.5-12.6,13-14.5,20,17.3,1.5,29.1,21.7,35.8,35.2,8.5,17.1,9.9,35.8,35.1,35.8,0,17.8,2.5,25.5-5.4,25.5-32.1,0-38-3.3-53.4-34-7.6-15.2-12.6-38.8-33.9-38.8-1.8,0-9.3,10-11.3,12.3-13.5,15.2-8.7,20.5-8.7,58.6h-32.8v-174.6Z"/>
|
||||
<path class="st0" d="M1102.3,262c2.8-7.6,5.6-13.3,7.5-21.6h32.8c2.8,5.9,5.8,15.3,8.4,22.5,2.8,7.8,5.1,14.2,7.7,21.4l40.2,108.9c2,5,6.9,16.3,7.3,21.9h-32.7c-3.4-7-6.4-16.5-8.9-23.9-8.3-25.3,2.2-19.8-65.7-19.8-7.3,0-18.2,43.6-18.2,43.7h-34.5l56.1-153.1ZM1104.3,345.9h43.7l-15.4-46.6c-2.3-5.9-4-8.2-4.6-15.3-5.4,3.9-22.1,55-23.7,61.9ZM747.9,240.3h41.8c4.2,0,5.5,1.3,5.5,5.5v132.8h69.1v36.4h-116.4v-174.7ZM.4.1h83.7v78.3c0,5.8-6.9,6.8-12,9.8-21.7,12.7-39.1,29.6-54.8,48.9-9.2,11.4-11.5,21-16.9,25V.1Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
9704
erpnext/public/images/bank-logos/RBL_Bank.svg
Normal file
|
After Width: | Height: | Size: 417 KiB |
21
erpnext/public/images/bank-logos/Razorpay-dark.svg
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1896px" height="401px" viewBox="0 0 1896 401" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Group</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Group">
|
||||
<path d="M451.9209,151.4937 C448.9309,162.6497 443.1359,170.8377 434.5349,176.0657 C425.9239,181.2927 413.8469,183.9117 398.2689,183.9117 L348.7769,183.9117 L366.1509,119.0807 L415.6429,119.0807 C431.2089,119.0807 441.8959,121.6947 447.7019,126.9217 C453.4969,132.1547 454.9109,140.3437 451.9209,151.4937 M503.1739,150.0967 C509.4679,126.6377 506.8589,108.6267 495.3509,96.0797 C483.8409,83.5327 463.6739,77.2627 434.8709,77.2627 L324.3909,77.2627 L257.8969,325.4027 L311.5719,325.4027 L338.3809,225.3777 L373.5809,225.3777 C381.4739,225.3777 387.6869,226.6577 392.2309,229.2137 C396.7849,231.7747 399.4509,236.3067 400.2739,242.8037 L409.8479,325.4027 L467.3589,325.4027 L458.0289,248.3847 C456.1279,231.1897 448.2589,221.0827 434.4309,218.0637 C452.0599,212.9577 466.8259,204.4677 478.7179,192.6167 C490.5989,180.7717 498.7579,166.6017 503.1739,150.0967" id="Fill-1" fill="#FFF"></path>
|
||||
<path d="M633.625,236.533 C629.14,253.258 622.231,266.042 612.901,274.868 C603.56,283.7 592.386,288.111 579.382,288.111 C566.122,288.111 557.128,283.758 552.387,275.042 C547.623,266.332 547.461,253.733 551.889,237.228 C556.305,220.735 563.352,207.841 573.053,198.539 C582.742,189.255 594.09,184.602 607.105,184.602 C620.11,184.602 628.919,189.082 633.485,198.024 C638.053,206.966 638.11,219.802 633.625,236.533 L633.625,236.533 Z M657.153,148.706 L650.431,173.8 C647.521,164.736 641.9,157.538 633.578,152.195 C625.245,146.852 614.918,144.174 602.608,144.174 C587.506,144.174 572.983,148.069 559.052,155.852 C545.12,163.64 532.938,174.617 522.519,188.786 C512.099,202.961 504.461,219.107 499.604,237.228 C494.748,255.356 493.774,271.328 496.695,285.149 C499.616,298.977 505.944,309.605 515.691,317.04 C525.428,324.481 537.969,328.19 553.303,328.19 C565.612,328.19 577.342,325.635 588.469,320.523 C599.595,315.418 609.041,308.325 616.818,299.266 L609.807,325.403 L661.731,325.403 L709.079,148.706 L657.153,148.706 Z" id="Fill-3" fill="#FFF"></path>
|
||||
<polygon id="Fill-5" fill="#FFFFFF" points="895.79 148.7061 744.882 148.7061 734.334 188.0911 822.155 188.0911 706.042 288.4581 696.132 325.4031 851.92 325.4031 862.478 286.0241 768.388 286.0241 886.263 184.2541"></polygon>
|
||||
<path d="M1028.6514,236.1853 C1023.9804,253.6053 1017.0604,266.6273 1007.9044,275.2223 C998.7484,283.8163 987.6674,288.1103 974.6634,288.1103 C947.4714,288.1103 938.5234,270.8113 947.7964,236.1853 C952.4094,218.9903 959.3634,206.0383 968.6594,197.3283 C977.9654,188.6123 989.2324,184.2543 1002.4804,184.2543 C1015.4844,184.2543 1024.2584,188.6123 1028.7794,197.3283 C1033.2984,206.0383 1033.2644,218.9903 1028.6514,236.1853 M1059.0304,155.3243 C1047.0804,147.8943 1031.8154,144.1743 1013.2244,144.1743 C994.4014,144.1743 976.9694,147.8943 960.9174,155.3243 C944.8644,162.7653 931.1984,173.4523 919.9214,187.3893 C908.6314,201.3323 900.4954,217.5943 895.5114,236.1853 C890.5274,254.7763 889.9484,271.0323 893.7734,284.9753 C897.5864,298.9183 905.5144,309.6053 917.5914,317.0403 C929.6574,324.4813 945.0954,328.1903 963.9194,328.1903 C982.5094,328.1903 999.7674,324.4813 1015.7054,317.0403 C1031.6184,309.6053 1045.2374,298.9183 1056.5264,284.9753 C1067.8034,271.0323 1075.9404,254.7763 1080.9244,236.1853 C1085.9084,217.5943 1086.4884,201.3323 1082.6744,187.3893 C1078.8494,173.4523 1070.9674,162.7653 1059.0304,155.3243" id="Fill-7" fill="#FFF"></path>
|
||||
<path d="M1602.1367,236.533 C1597.6517,253.258 1590.7427,266.042 1581.4127,274.868 C1572.0817,283.7 1560.8857,288.111 1547.8817,288.111 C1534.6457,288.111 1525.6397,283.758 1520.8987,275.042 C1516.1347,266.332 1515.9727,253.733 1520.4007,237.228 C1524.8167,220.735 1531.8637,207.841 1541.5647,198.539 C1551.2537,189.255 1562.6017,184.602 1575.6167,184.602 C1588.6217,184.602 1597.4307,189.082 1601.9967,198.024 C1606.5647,206.966 1606.6217,219.802 1602.1367,236.533 L1602.1367,236.533 Z M1625.6647,148.706 L1618.9427,173.8 C1616.0327,164.736 1610.4117,157.538 1602.0897,152.195 C1593.7567,146.852 1583.4297,144.174 1571.1197,144.174 C1556.0177,144.174 1541.4947,148.069 1527.5637,155.852 C1513.6317,163.64 1501.4497,174.617 1491.0307,188.786 C1480.6107,202.961 1472.9717,219.107 1468.1157,237.228 C1463.2597,255.356 1462.2967,271.328 1465.2067,285.149 C1468.1267,298.977 1474.4447,309.605 1484.2027,317.04 C1493.9397,324.481 1506.4807,328.19 1521.8147,328.19 C1534.1227,328.19 1545.8537,325.635 1556.9797,320.523 C1568.1067,315.418 1577.5527,308.325 1585.3297,299.266 L1578.3187,325.403 L1630.2427,325.403 L1677.5907,148.706 L1625.6647,148.706 Z" id="Fill-9" fill="#FFF"></path>
|
||||
<path d="M1244.165,196.1055 L1257.401,148.0105 C1252.904,145.6865 1246.946,144.5225 1239.517,144.5225 C1227.66,144.5225 1216.243,147.4835 1205.244,153.4115 C1195.798,158.4975 1187.754,165.6365 1180.962,174.5815 L1187.847,148.6815 L1172.813,148.7065 L1135.938,148.7065 L1088.227,325.4025 L1140.87,325.4025 L1165.616,233.0505 C1169.221,219.5765 1175.688,209.0635 1185.042,201.5125 C1194.372,193.9615 1206.02,190.1825 1219.964,190.1825 C1228.563,190.1825 1236.619,192.1585 1244.165,196.1055" id="Fill-11" fill="#FFF"></path>
|
||||
<path d="M1390.6973,237.2256 C1386.2693,253.7306 1379.4083,266.3296 1370.1123,275.0396 C1360.7943,283.7556 1349.6433,288.1076 1336.6393,288.1076 C1323.6233,288.1076 1314.7573,283.6976 1310.0393,274.8656 C1305.3103,266.0396 1305.1943,253.2606 1309.6793,236.5296 C1314.1653,219.7996 1321.1423,206.9626 1330.6243,198.0206 C1340.1043,189.0786 1351.3593,184.5986 1364.3753,184.5986 C1377.1473,184.5986 1385.8293,189.2526 1390.4303,198.5426 C1395.0203,207.8376 1395.1133,220.7376 1390.6973,237.2256 M1427.4853,155.8486 C1417.7153,148.0656 1405.2783,144.1776 1390.1873,144.1776 C1376.9393,144.1776 1364.3293,147.1966 1352.3903,153.2356 C1340.4183,159.2856 1330.7173,167.5206 1323.2753,177.9806 L1323.4433,176.8216 L1332.2873,148.6786 L1322.1103,148.6786 L1322.1103,148.7036 L1280.9003,148.7036 L1267.8153,197.5656 C1267.6643,198.1336 1267.5373,198.6636 1267.3853,199.2376 L1213.4093,400.6806 L1266.0423,400.6806 L1293.2213,299.2696 C1295.8863,308.3216 1301.4273,315.4146 1309.8193,320.5206 C1318.2103,325.6316 1328.5603,328.1876 1340.8813,328.1876 C1356.2163,328.1876 1370.7963,324.4786 1384.6463,317.0376 C1398.4863,309.6076 1410.5163,298.9736 1420.7173,285.1466 C1430.9273,271.3306 1438.4623,255.3526 1443.3183,237.2256 C1448.1753,219.1036 1449.1823,202.9586 1446.3663,188.7836 C1443.5503,174.6136 1437.2443,163.6376 1427.4853,155.8486" id="Fill-13" fill="#FFF"></path>
|
||||
<path d="M1895.5381,148.7554 L1895.5721,148.7064 L1863.6921,148.7064 C1862.6731,148.7064 1861.7741,148.7354 1860.8421,148.7554 L1844.2961,148.7554 L1835.8351,160.5434 C1835.1571,161.4314 1834.4791,162.3254 1833.7491,163.3624 L1832.8271,164.7274 L1765.5851,258.3754 L1751.6421,148.7064 L1696.5641,148.7064 L1724.4561,315.3544 L1662.8591,400.6834 L1664.6151,400.6834 L1696.0651,400.6834 L1717.7341,400.6834 L1732.6621,379.5374 C1733.1021,378.9074 1733.4791,378.3914 1733.9491,377.7254 L1751.3691,353.0284 L1751.8681,352.3214 L1829.8131,241.8274 L1895.4851,148.8284 L1895.5721,148.7554 L1895.5381,148.7554 Z" id="Fill-15" fill="#FFF"></path>
|
||||
<polygon id="Fill-17" fill="#3395FF" points="122.6338 105.6902 106.8778 163.6732 197.0338 105.3642 138.0748 325.3482 197.9478 325.4032 285.0458 0.4822"></polygon>
|
||||
<path d="M25.5947,232.9246 L0.8077,325.4026 L123.5337,325.4026 C123.5337,325.4026 173.7317,137.3196 173.7457,137.2656 C173.6987,137.2956 25.5947,232.9246 25.5947,232.9246" id="Fill-19" fill="#FFF"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.8 KiB |
21
erpnext/public/images/bank-logos/Razorpay.svg
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1896px" height="401px" viewBox="0 0 1896 401" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Group</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Group">
|
||||
<path d="M451.9209,151.4937 C448.9309,162.6497 443.1359,170.8377 434.5349,176.0657 C425.9239,181.2927 413.8469,183.9117 398.2689,183.9117 L348.7769,183.9117 L366.1509,119.0807 L415.6429,119.0807 C431.2089,119.0807 441.8959,121.6947 447.7019,126.9217 C453.4969,132.1547 454.9109,140.3437 451.9209,151.4937 M503.1739,150.0967 C509.4679,126.6377 506.8589,108.6267 495.3509,96.0797 C483.8409,83.5327 463.6739,77.2627 434.8709,77.2627 L324.3909,77.2627 L257.8969,325.4027 L311.5719,325.4027 L338.3809,225.3777 L373.5809,225.3777 C381.4739,225.3777 387.6869,226.6577 392.2309,229.2137 C396.7849,231.7747 399.4509,236.3067 400.2739,242.8037 L409.8479,325.4027 L467.3589,325.4027 L458.0289,248.3847 C456.1279,231.1897 448.2589,221.0827 434.4309,218.0637 C452.0599,212.9577 466.8259,204.4677 478.7179,192.6167 C490.5989,180.7717 498.7579,166.6017 503.1739,150.0967" id="Fill-1" fill="#072654"></path>
|
||||
<path d="M633.625,236.533 C629.14,253.258 622.231,266.042 612.901,274.868 C603.56,283.7 592.386,288.111 579.382,288.111 C566.122,288.111 557.128,283.758 552.387,275.042 C547.623,266.332 547.461,253.733 551.889,237.228 C556.305,220.735 563.352,207.841 573.053,198.539 C582.742,189.255 594.09,184.602 607.105,184.602 C620.11,184.602 628.919,189.082 633.485,198.024 C638.053,206.966 638.11,219.802 633.625,236.533 L633.625,236.533 Z M657.153,148.706 L650.431,173.8 C647.521,164.736 641.9,157.538 633.578,152.195 C625.245,146.852 614.918,144.174 602.608,144.174 C587.506,144.174 572.983,148.069 559.052,155.852 C545.12,163.64 532.938,174.617 522.519,188.786 C512.099,202.961 504.461,219.107 499.604,237.228 C494.748,255.356 493.774,271.328 496.695,285.149 C499.616,298.977 505.944,309.605 515.691,317.04 C525.428,324.481 537.969,328.19 553.303,328.19 C565.612,328.19 577.342,325.635 588.469,320.523 C599.595,315.418 609.041,308.325 616.818,299.266 L609.807,325.403 L661.731,325.403 L709.079,148.706 L657.153,148.706 Z" id="Fill-3" fill="#072654"></path>
|
||||
<polygon id="Fill-5" fill="#072654" points="895.79 148.7061 744.882 148.7061 734.334 188.0911 822.155 188.0911 706.042 288.4581 696.132 325.4031 851.92 325.4031 862.478 286.0241 768.388 286.0241 886.263 184.2541"></polygon>
|
||||
<path d="M1028.6514,236.1853 C1023.9804,253.6053 1017.0604,266.6273 1007.9044,275.2223 C998.7484,283.8163 987.6674,288.1103 974.6634,288.1103 C947.4714,288.1103 938.5234,270.8113 947.7964,236.1853 C952.4094,218.9903 959.3634,206.0383 968.6594,197.3283 C977.9654,188.6123 989.2324,184.2543 1002.4804,184.2543 C1015.4844,184.2543 1024.2584,188.6123 1028.7794,197.3283 C1033.2984,206.0383 1033.2644,218.9903 1028.6514,236.1853 M1059.0304,155.3243 C1047.0804,147.8943 1031.8154,144.1743 1013.2244,144.1743 C994.4014,144.1743 976.9694,147.8943 960.9174,155.3243 C944.8644,162.7653 931.1984,173.4523 919.9214,187.3893 C908.6314,201.3323 900.4954,217.5943 895.5114,236.1853 C890.5274,254.7763 889.9484,271.0323 893.7734,284.9753 C897.5864,298.9183 905.5144,309.6053 917.5914,317.0403 C929.6574,324.4813 945.0954,328.1903 963.9194,328.1903 C982.5094,328.1903 999.7674,324.4813 1015.7054,317.0403 C1031.6184,309.6053 1045.2374,298.9183 1056.5264,284.9753 C1067.8034,271.0323 1075.9404,254.7763 1080.9244,236.1853 C1085.9084,217.5943 1086.4884,201.3323 1082.6744,187.3893 C1078.8494,173.4523 1070.9674,162.7653 1059.0304,155.3243" id="Fill-7" fill="#072654"></path>
|
||||
<path d="M1602.1367,236.533 C1597.6517,253.258 1590.7427,266.042 1581.4127,274.868 C1572.0817,283.7 1560.8857,288.111 1547.8817,288.111 C1534.6457,288.111 1525.6397,283.758 1520.8987,275.042 C1516.1347,266.332 1515.9727,253.733 1520.4007,237.228 C1524.8167,220.735 1531.8637,207.841 1541.5647,198.539 C1551.2537,189.255 1562.6017,184.602 1575.6167,184.602 C1588.6217,184.602 1597.4307,189.082 1601.9967,198.024 C1606.5647,206.966 1606.6217,219.802 1602.1367,236.533 L1602.1367,236.533 Z M1625.6647,148.706 L1618.9427,173.8 C1616.0327,164.736 1610.4117,157.538 1602.0897,152.195 C1593.7567,146.852 1583.4297,144.174 1571.1197,144.174 C1556.0177,144.174 1541.4947,148.069 1527.5637,155.852 C1513.6317,163.64 1501.4497,174.617 1491.0307,188.786 C1480.6107,202.961 1472.9717,219.107 1468.1157,237.228 C1463.2597,255.356 1462.2967,271.328 1465.2067,285.149 C1468.1267,298.977 1474.4447,309.605 1484.2027,317.04 C1493.9397,324.481 1506.4807,328.19 1521.8147,328.19 C1534.1227,328.19 1545.8537,325.635 1556.9797,320.523 C1568.1067,315.418 1577.5527,308.325 1585.3297,299.266 L1578.3187,325.403 L1630.2427,325.403 L1677.5907,148.706 L1625.6647,148.706 Z" id="Fill-9" fill="#072654"></path>
|
||||
<path d="M1244.165,196.1055 L1257.401,148.0105 C1252.904,145.6865 1246.946,144.5225 1239.517,144.5225 C1227.66,144.5225 1216.243,147.4835 1205.244,153.4115 C1195.798,158.4975 1187.754,165.6365 1180.962,174.5815 L1187.847,148.6815 L1172.813,148.7065 L1135.938,148.7065 L1088.227,325.4025 L1140.87,325.4025 L1165.616,233.0505 C1169.221,219.5765 1175.688,209.0635 1185.042,201.5125 C1194.372,193.9615 1206.02,190.1825 1219.964,190.1825 C1228.563,190.1825 1236.619,192.1585 1244.165,196.1055" id="Fill-11" fill="#072654"></path>
|
||||
<path d="M1390.6973,237.2256 C1386.2693,253.7306 1379.4083,266.3296 1370.1123,275.0396 C1360.7943,283.7556 1349.6433,288.1076 1336.6393,288.1076 C1323.6233,288.1076 1314.7573,283.6976 1310.0393,274.8656 C1305.3103,266.0396 1305.1943,253.2606 1309.6793,236.5296 C1314.1653,219.7996 1321.1423,206.9626 1330.6243,198.0206 C1340.1043,189.0786 1351.3593,184.5986 1364.3753,184.5986 C1377.1473,184.5986 1385.8293,189.2526 1390.4303,198.5426 C1395.0203,207.8376 1395.1133,220.7376 1390.6973,237.2256 M1427.4853,155.8486 C1417.7153,148.0656 1405.2783,144.1776 1390.1873,144.1776 C1376.9393,144.1776 1364.3293,147.1966 1352.3903,153.2356 C1340.4183,159.2856 1330.7173,167.5206 1323.2753,177.9806 L1323.4433,176.8216 L1332.2873,148.6786 L1322.1103,148.6786 L1322.1103,148.7036 L1280.9003,148.7036 L1267.8153,197.5656 C1267.6643,198.1336 1267.5373,198.6636 1267.3853,199.2376 L1213.4093,400.6806 L1266.0423,400.6806 L1293.2213,299.2696 C1295.8863,308.3216 1301.4273,315.4146 1309.8193,320.5206 C1318.2103,325.6316 1328.5603,328.1876 1340.8813,328.1876 C1356.2163,328.1876 1370.7963,324.4786 1384.6463,317.0376 C1398.4863,309.6076 1410.5163,298.9736 1420.7173,285.1466 C1430.9273,271.3306 1438.4623,255.3526 1443.3183,237.2256 C1448.1753,219.1036 1449.1823,202.9586 1446.3663,188.7836 C1443.5503,174.6136 1437.2443,163.6376 1427.4853,155.8486" id="Fill-13" fill="#072654"></path>
|
||||
<path d="M1895.5381,148.7554 L1895.5721,148.7064 L1863.6921,148.7064 C1862.6731,148.7064 1861.7741,148.7354 1860.8421,148.7554 L1844.2961,148.7554 L1835.8351,160.5434 C1835.1571,161.4314 1834.4791,162.3254 1833.7491,163.3624 L1832.8271,164.7274 L1765.5851,258.3754 L1751.6421,148.7064 L1696.5641,148.7064 L1724.4561,315.3544 L1662.8591,400.6834 L1664.6151,400.6834 L1696.0651,400.6834 L1717.7341,400.6834 L1732.6621,379.5374 C1733.1021,378.9074 1733.4791,378.3914 1733.9491,377.7254 L1751.3691,353.0284 L1751.8681,352.3214 L1829.8131,241.8274 L1895.4851,148.8284 L1895.5721,148.7554 L1895.5381,148.7554 Z" id="Fill-15" fill="#072654"></path>
|
||||
<polygon id="Fill-17" fill="#3395FF" points="122.6338 105.6902 106.8778 163.6732 197.0338 105.3642 138.0748 325.3482 197.9478 325.4032 285.0458 0.4822"></polygon>
|
||||
<path d="M25.5947,232.9246 L0.8077,325.4026 L123.5337,325.4026 C123.5337,325.4026 173.7317,137.3196 173.7457,137.2656 C173.6987,137.2956 25.5947,232.9246 25.5947,232.9246" id="Fill-19" fill="#072654"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.8 KiB |
BIN
erpnext/public/images/bank-logos/Revolut.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
12
erpnext/public/images/bank-logos/Santander.svg
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="816px" height="144px" viewBox="0 0 816 144" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 51.1 (57501) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>FA_SANTANDER_PV_POS_RGB</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="FA_SANTANDER_PV_POS_RGB" fill="#EC0000" fill-rule="nonzero">
|
||||
<path d="M107.8,66.3 C107.6,61.2 106.1,56 103.5,51.4 L80,10.7 C78.2,7.6 77,4.3 76.3,0.9 L75.3,2.6 C69.5,12.7 69.5,25.1 75.3,35.2 L94.1,67.8 C99.9,77.9 99.9,90.3 94.1,100.4 L93.1,102.1 C92.4,98.7 91.2,95.4 89.4,92.3 L72.2,62.5 L61.2,43.5 C59.4,40.4 58.2,37.1 57.5,33.7 L56.5,35.4 C50.7,45.4 50.7,57.8 56.4,67.9 L75.3,100.6 C81.1,110.7 81.1,123.1 75.3,133.2 L74.3,134.9 C73.6,131.5 72.4,128.2 70.6,125.1 L47.1,84 C43.9,78.5 42.5,72.4 42.8,66.3 C17.6,72.9 0.3,86.8 0.3,103 C0.3,125.5 33.9,143.7 75.4,143.7 C116.9,143.7 150.5,125.5 150.5,103 C150.4,86.8 133,72.9 107.8,66.3 Z M178.7,135.8 C179,130 179.8,126.1 181.4,121.6 C189.3,125.3 199.5,127.1 207.2,127.1 C220.3,127.1 227.7,122.9 227.7,114.5 C227.7,106.3 222.3,102.5 209.1,96.7 L201.9,93.6 C188.6,87.8 179.6,80.3 179.6,65.4 C179.6,49.3 190.7,39 213.6,39 C222.8,39 231.4,40.3 239.4,43.1 C239,48.7 238,53.1 236.6,57.2 C229,54.4 220,53.1 213.5,53.1 C201.2,53.1 195.6,57.9 195.6,65.4 C195.6,72.7 201.1,77 211,81.2 L218.6,84.4 C236.5,92 244,100.1 244,113.7 C244,129.9 231.7,141.1 207.8,141.1 C196.1,141.2 186.6,139.5 178.7,135.8 Z M319.6,68.4 L319.6,138.9 L305.4,138.9 L304.6,130.4 C300.7,136.6 294.6,140.6 284.7,140.6 C266.1,140.6 253.7,127.1 253.7,103.4 C253.7,78.6 267,64.5 293.1,64.5 C303.1,64.4 311.5,65.6 319.6,68.4 Z M304.1,122.8 L304.1,78.5 C300.9,77.9 297.3,77.7 293,77.7 C276.9,77.7 269.4,87.6 269.4,103.4 C269.4,117.8 275.2,127.9 289,127.9 C295.1,127.9 300,125.9 304.1,122.8 Z M399.1,91.5 L399.1,138.9 L383.6,138.9 L383.6,94.2 C383.6,83.1 379.9,77.7 364.4,77.7 C360.7,77.7 356.4,78.1 352.1,78.8 L352.1,138.9 L336.6,138.9 L336.6,68.4 C346.5,66 357.3,64.5 364.8,64.5 C390.7,64.4 399.1,74.5 399.1,91.5 Z M442.1,127.4 C446.6,127.4 450.8,126.6 454.2,125.3 C453.8,129.5 453.2,134.3 452.4,138.4 C448.2,140.1 443.7,140.7 439.3,140.7 C424.2,140.7 414.6,133.8 414.6,116.6 L414.6,42.5 C419.4,40.9 425.3,40.2 430.1,40.2 L430.1,66.9 L454.6,66.9 C454.3,71.7 453.9,76.1 453.2,80.2 L430.1,80.2 L430.1,114.8 C430.1,123.8 434.6,127.4 442.1,127.4 Z M525.3,68.4 L525.3,138.9 L511.1,138.9 L510.3,130.4 C506.3,136.6 500.3,140.6 490.4,140.6 C471.8,140.6 459.4,127.1 459.4,103.4 C459.4,78.6 472.7,64.5 498.8,64.5 C508.8,64.4 517.1,65.6 525.3,68.4 Z M509.8,122.8 L509.8,78.5 C506.6,77.9 503,77.7 498.7,77.7 C482.6,77.7 475.1,87.6 475.1,103.4 C475.1,117.8 480.9,127.9 494.7,127.9 C500.8,127.9 505.7,125.9 509.8,122.8 Z M604.7,91.5 L604.7,138.9 L589.2,138.9 L589.2,94.2 C589.2,83.1 585.5,77.7 570,77.7 C566.3,77.7 562,78.1 557.7,78.8 L557.7,138.9 L542.2,138.9 L542.2,68.4 C552.1,66 562.9,64.5 570.4,64.5 C596.4,64.4 604.7,74.5 604.7,91.5 Z M683.4,40.2 L683.4,138.9 L669.2,138.9 L668.4,129.9 C664.4,136.5 658.4,140.6 648.2,140.6 C629.6,140.6 617.2,127.1 617.2,103.4 C617.2,78.6 630.5,64.5 656.6,64.5 C660.7,64.5 664.5,64.9 668.2,65.6 L668.2,42.3 C672.8,40.6 678.3,40.2 683.4,40.2 Z M668.1,122.6 L668.1,79.2 C664,78.4 659.8,77.8 655.7,77.8 C640.3,77.8 633,87.4 633,103.5 C633,117.9 638.8,128 652.6,128 C658.7,127.9 663.8,125.8 668.1,122.6 Z M761.4,108.7 L711.9,108.7 C713.9,121.3 721.2,127.3 735,127.3 C743.5,127.3 752.1,125.5 759.8,121.9 C759.2,126 758.4,131.4 757.4,136 C750.3,139.2 742.9,140.5 734.5,140.5 C708.5,140.5 696,126.1 696,102 C696,81 705.7,64.3 730.4,64.3 C752.5,64.3 762.1,78.8 762.1,96.6 C762.3,101.1 762,104.6 761.4,108.7 Z M711.6,95.8 L746.6,95.8 C746.6,84.2 740.4,77.5 729.7,77.5 C718.7,77.4 712.9,83.8 711.6,95.8 Z M815.7,65 C815.7,69.7 815.1,75.3 814.3,78.3 C810.6,77.9 807,77.7 802.6,77.7 C798.8,77.7 795,78 791.2,78.5 L791.2,138.9 L775.7,138.9 L775.7,68.4 C782.3,66.1 793.5,64.5 802.2,64.5 C807,64.4 812.4,64.6 815.7,65 Z" id="Shape"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
BIN
erpnext/public/images/bank-logos/Sparkasse.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
erpnext/public/images/bank-logos/Stanbic.png
Normal file
|
After Width: | Height: | Size: 69 KiB |