mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-21 14:09:19 +00:00
chore: Merge branch 'develop'
This commit is contained in:
@@ -208,8 +208,54 @@
|
|||||||
"label": "Disabled"
|
"label": "Disabled"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"links": [],
|
"links": [
|
||||||
"modified": "2024-03-27 13:06:37.049542",
|
{
|
||||||
|
"group": "Transactions",
|
||||||
|
"link_doctype": "Payment Request",
|
||||||
|
"link_fieldname": "bank_account"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"group": "Transactions",
|
||||||
|
"link_doctype": "Payment Order",
|
||||||
|
"link_fieldname": "bank_account"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"group": "Transactions",
|
||||||
|
"link_doctype": "Bank Guarantee",
|
||||||
|
"link_fieldname": "bank_account"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"group": "Transactions",
|
||||||
|
"link_doctype": "Payroll Entry",
|
||||||
|
"link_fieldname": "bank_account"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"group": "Transactions",
|
||||||
|
"link_doctype": "Bank Transaction",
|
||||||
|
"link_fieldname": "bank_account"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"group": "Accounting",
|
||||||
|
"link_doctype": "Payment Entry",
|
||||||
|
"link_fieldname": "bank_account"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"group": "Accounting",
|
||||||
|
"link_doctype": "Journal Entry",
|
||||||
|
"link_fieldname": "bank_account"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"group": "Party",
|
||||||
|
"link_doctype": "Customer",
|
||||||
|
"link_fieldname": "default_bank_account"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"group": "Party",
|
||||||
|
"link_doctype": "Supplier",
|
||||||
|
"link_fieldname": "default_bank_account"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"modified": "2024-09-24 06:57:41.292970",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Bank Account",
|
"name": "Bank Account",
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
from frappe import _
|
|
||||||
|
|
||||||
|
|
||||||
def get_data():
|
|
||||||
return {
|
|
||||||
"fieldname": "bank_account",
|
|
||||||
"non_standard_fieldnames": {
|
|
||||||
"Customer": "default_bank_account",
|
|
||||||
"Supplier": "default_bank_account",
|
|
||||||
},
|
|
||||||
"transactions": [
|
|
||||||
{
|
|
||||||
"label": _("Payments"),
|
|
||||||
"items": ["Payment Entry", "Payment Request", "Payment Order", "Payroll Entry"],
|
|
||||||
},
|
|
||||||
{"label": _("Party"), "items": ["Customer", "Supplier"]},
|
|
||||||
{"items": ["Bank Guarantee"]},
|
|
||||||
{"items": ["Journal Entry"]},
|
|
||||||
],
|
|
||||||
}
|
|
||||||
@@ -108,8 +108,18 @@ class BankClearance(Document):
|
|||||||
if not d.clearance_date:
|
if not d.clearance_date:
|
||||||
d.clearance_date = None
|
d.clearance_date = None
|
||||||
|
|
||||||
payment_entry = frappe.get_doc(d.payment_document, d.payment_entry)
|
if d.payment_document == "Sales Invoice":
|
||||||
payment_entry.db_set("clearance_date", d.clearance_date)
|
frappe.db.set_value(
|
||||||
|
"Sales Invoice Payment",
|
||||||
|
{"parent": d.payment_entry, "account": self.get("account"), "amount": [">", 0]},
|
||||||
|
"clearance_date",
|
||||||
|
d.clearance_date,
|
||||||
|
)
|
||||||
|
|
||||||
|
else:
|
||||||
|
frappe.db.set_value(
|
||||||
|
d.payment_document, d.payment_entry, "clearance_date", d.clearance_date
|
||||||
|
)
|
||||||
|
|
||||||
clearance_date_updated = True
|
clearance_date_updated = True
|
||||||
|
|
||||||
|
|||||||
@@ -6,16 +6,29 @@ import unittest
|
|||||||
import frappe
|
import frappe
|
||||||
from frappe.utils import add_months, getdate
|
from frappe.utils import add_months, getdate
|
||||||
|
|
||||||
|
from erpnext.accounts.doctype.cost_center.test_cost_center import create_cost_center
|
||||||
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
|
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
|
||||||
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice
|
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice
|
||||||
|
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
|
||||||
|
from erpnext.stock.doctype.item.test_item import create_item
|
||||||
|
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
|
||||||
from erpnext.tests.utils import if_lending_app_installed, if_lending_app_not_installed
|
from erpnext.tests.utils import if_lending_app_installed, if_lending_app_not_installed
|
||||||
|
|
||||||
|
|
||||||
class TestBankClearance(unittest.TestCase):
|
class TestBankClearance(unittest.TestCase):
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
|
create_warehouse(
|
||||||
|
warehouse_name="_Test Warehouse",
|
||||||
|
properties={"parent_warehouse": "All Warehouses - _TC"},
|
||||||
|
company="_Test Company",
|
||||||
|
)
|
||||||
|
create_item("_Test Item")
|
||||||
|
create_cost_center(cost_center_name="_Test Cost Center", company="_Test Company")
|
||||||
|
|
||||||
clear_payment_entries()
|
clear_payment_entries()
|
||||||
clear_loan_transactions()
|
clear_loan_transactions()
|
||||||
|
clear_pos_sales_invoices()
|
||||||
make_bank_account()
|
make_bank_account()
|
||||||
add_transactions()
|
add_transactions()
|
||||||
|
|
||||||
@@ -83,11 +96,41 @@ class TestBankClearance(unittest.TestCase):
|
|||||||
bank_clearance.get_payment_entries()
|
bank_clearance.get_payment_entries()
|
||||||
self.assertEqual(len(bank_clearance.payment_entries), 3)
|
self.assertEqual(len(bank_clearance.payment_entries), 3)
|
||||||
|
|
||||||
|
def test_update_clearance_date_on_si(self):
|
||||||
|
sales_invoice = make_pos_sales_invoice()
|
||||||
|
|
||||||
|
date = getdate()
|
||||||
|
bank_clearance = frappe.get_doc("Bank Clearance")
|
||||||
|
bank_clearance.account = "_Test Bank Clearance - _TC"
|
||||||
|
bank_clearance.from_date = add_months(date, -1)
|
||||||
|
bank_clearance.to_date = date
|
||||||
|
bank_clearance.include_pos_transactions = 1
|
||||||
|
bank_clearance.get_payment_entries()
|
||||||
|
|
||||||
|
self.assertNotEqual(len(bank_clearance.payment_entries), 0)
|
||||||
|
for payment in bank_clearance.payment_entries:
|
||||||
|
if payment.payment_entry == sales_invoice.name:
|
||||||
|
payment.clearance_date = date
|
||||||
|
|
||||||
|
bank_clearance.update_clearance_date()
|
||||||
|
|
||||||
|
si_clearance_date = frappe.db.get_value(
|
||||||
|
"Sales Invoice Payment",
|
||||||
|
{"parent": sales_invoice.name, "account": bank_clearance.account},
|
||||||
|
"clearance_date",
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(si_clearance_date, date)
|
||||||
|
|
||||||
|
|
||||||
def clear_payment_entries():
|
def clear_payment_entries():
|
||||||
frappe.db.delete("Payment Entry")
|
frappe.db.delete("Payment Entry")
|
||||||
|
|
||||||
|
|
||||||
|
def clear_pos_sales_invoices():
|
||||||
|
frappe.db.delete("Sales Invoice", {"is_pos": 1})
|
||||||
|
|
||||||
|
|
||||||
@if_lending_app_installed
|
@if_lending_app_installed
|
||||||
def clear_loan_transactions():
|
def clear_loan_transactions():
|
||||||
for dt in [
|
for dt in [
|
||||||
@@ -115,9 +158,45 @@ def add_transactions():
|
|||||||
|
|
||||||
|
|
||||||
def make_payment_entry():
|
def make_payment_entry():
|
||||||
pi = make_purchase_invoice(supplier="_Test Supplier", qty=1, rate=690)
|
from erpnext.buying.doctype.supplier.test_supplier import create_supplier
|
||||||
|
|
||||||
|
supplier = create_supplier(supplier_name="_Test Supplier")
|
||||||
|
pi = make_purchase_invoice(
|
||||||
|
supplier=supplier,
|
||||||
|
supplier_warehouse="_Test Warehouse - _TC",
|
||||||
|
expense_account="Cost of Goods Sold - _TC",
|
||||||
|
uom="Nos",
|
||||||
|
qty=1,
|
||||||
|
rate=690,
|
||||||
|
)
|
||||||
pe = get_payment_entry("Purchase Invoice", pi.name, bank_account="_Test Bank Clearance - _TC")
|
pe = get_payment_entry("Purchase Invoice", pi.name, bank_account="_Test Bank Clearance - _TC")
|
||||||
pe.reference_no = "Conrad Oct 18"
|
pe.reference_no = "Conrad Oct 18"
|
||||||
pe.reference_date = "2018-10-24"
|
pe.reference_date = "2018-10-24"
|
||||||
pe.insert()
|
pe.insert()
|
||||||
pe.submit()
|
pe.submit()
|
||||||
|
|
||||||
|
|
||||||
|
def make_pos_sales_invoice():
|
||||||
|
from erpnext.accounts.doctype.opening_invoice_creation_tool.test_opening_invoice_creation_tool import (
|
||||||
|
make_customer,
|
||||||
|
)
|
||||||
|
|
||||||
|
mode_of_payment = frappe.get_doc({"doctype": "Mode of Payment", "name": "Cash"})
|
||||||
|
|
||||||
|
if not frappe.db.get_value("Mode of Payment Account", {"company": "_Test Company", "parent": "Cash"}):
|
||||||
|
mode_of_payment.append(
|
||||||
|
"accounts", {"company": "_Test Company", "default_account": "_Test Bank Clearance - _TC"}
|
||||||
|
)
|
||||||
|
mode_of_payment.save()
|
||||||
|
|
||||||
|
customer = make_customer(customer="_Test Customer")
|
||||||
|
|
||||||
|
si = create_sales_invoice(customer=customer, item="_Test Item", is_pos=1, qty=1, rate=1000, do_not_save=1)
|
||||||
|
si.set("payments", [])
|
||||||
|
si.append(
|
||||||
|
"payments", {"mode_of_payment": "Cash", "account": "_Test Bank Clearance - _TC", "amount": 1000}
|
||||||
|
)
|
||||||
|
si.insert()
|
||||||
|
si.submit()
|
||||||
|
|
||||||
|
return si
|
||||||
|
|||||||
@@ -194,7 +194,9 @@ function refresh_payments(d, frm) {
|
|||||||
}
|
}
|
||||||
if (payment) {
|
if (payment) {
|
||||||
payment.expected_amount += flt(p.amount);
|
payment.expected_amount += flt(p.amount);
|
||||||
payment.closing_amount = payment.expected_amount;
|
if (payment.closing_amount === 0) {
|
||||||
|
payment.closing_amount = payment.expected_amount;
|
||||||
|
}
|
||||||
payment.difference = payment.closing_amount - payment.expected_amount;
|
payment.difference = payment.closing_amount - payment.expected_amount;
|
||||||
} else {
|
} else {
|
||||||
frm.add_child("payment_reconciliation", {
|
frm.add_child("payment_reconciliation", {
|
||||||
|
|||||||
@@ -310,8 +310,8 @@ class ReceivablePayableReport:
|
|||||||
|
|
||||||
must_consider = False
|
must_consider = False
|
||||||
if self.filters.get("for_revaluation_journals"):
|
if self.filters.get("for_revaluation_journals"):
|
||||||
if (abs(row.outstanding) >= 0.0 / 10**self.currency_precision) or (
|
if (abs(row.outstanding) >= 1.0 / 10**self.currency_precision) or (
|
||||||
abs(row.outstanding_in_account_currency) >= 0.0 / 10**self.currency_precision
|
abs(row.outstanding_in_account_currency) >= 1.0 / 10**self.currency_precision
|
||||||
):
|
):
|
||||||
must_consider = True
|
must_consider = True
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ def execute(filters=None):
|
|||||||
if filters.get("party"):
|
if filters.get("party"):
|
||||||
filters.party = frappe.parse_json(filters.get("party"))
|
filters.party = frappe.parse_json(filters.get("party"))
|
||||||
|
|
||||||
|
if filters.get("voucher_no") and not filters.get("group_by"):
|
||||||
|
filters.group_by = "Group by Voucher (Consolidated)"
|
||||||
|
|
||||||
validate_filters(filters, account_details)
|
validate_filters(filters, account_details)
|
||||||
|
|
||||||
validate_party(filters)
|
validate_party(filters)
|
||||||
|
|||||||
Reference in New Issue
Block a user