mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-20 05:29:18 +00:00
Merge pull request #43773 from frappe/version-14-hotfix
chore: release v14
This commit is contained in:
@@ -58,7 +58,7 @@ def build_conditions(process_type, account, company):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if account:
|
if account:
|
||||||
conditions += f"AND {deferred_account}='{account}'"
|
conditions += f"AND {deferred_account}='{frappe.db.escape(account)}'"
|
||||||
elif company:
|
elif company:
|
||||||
conditions += f"AND p.company = {frappe.db.escape(company)}"
|
conditions += f"AND p.company = {frappe.db.escape(company)}"
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ class BankClearance(Document):
|
|||||||
"Payment Entry" as payment_document, name as payment_entry,
|
"Payment Entry" as payment_document, name as payment_entry,
|
||||||
reference_no as cheque_number, reference_date as cheque_date,
|
reference_no as cheque_number, reference_date as cheque_date,
|
||||||
if(paid_from=%(account)s, paid_amount + total_taxes_and_charges, 0) as credit,
|
if(paid_from=%(account)s, paid_amount + total_taxes_and_charges, 0) as credit,
|
||||||
if(paid_from=%(account)s, 0, received_amount) as debit,
|
if(paid_from=%(account)s, 0, received_amount + total_taxes_and_charges) as debit,
|
||||||
posting_date, ifnull(party,if(paid_from=%(account)s,paid_to,paid_from)) as against_account, clearance_date,
|
posting_date, ifnull(party,if(paid_from=%(account)s,paid_to,paid_from)) as against_account, clearance_date,
|
||||||
if(paid_to=%(account)s, paid_to_account_currency, paid_from_account_currency) as account_currency
|
if(paid_to=%(account)s, paid_to_account_currency, paid_from_account_currency) as account_currency
|
||||||
from `tabPayment Entry`
|
from `tabPayment Entry`
|
||||||
|
|||||||
@@ -2270,7 +2270,9 @@ def get_party_details(company, party_type, party, date, cost_center=None):
|
|||||||
account_balance = get_balance_on(party_account, date, cost_center=cost_center)
|
account_balance = get_balance_on(party_account, date, cost_center=cost_center)
|
||||||
_party_name = "title" if party_type == "Shareholder" else party_type.lower() + "_name"
|
_party_name = "title" if party_type == "Shareholder" else party_type.lower() + "_name"
|
||||||
party_name = frappe.db.get_value(party_type, party, _party_name)
|
party_name = frappe.db.get_value(party_type, party, _party_name)
|
||||||
party_balance = get_balance_on(party_type=party_type, party=party, cost_center=cost_center)
|
party_balance = get_balance_on(
|
||||||
|
party_type=party_type, party=party, company=company, cost_center=cost_center
|
||||||
|
)
|
||||||
if party_type in ["Customer", "Supplier"]:
|
if party_type in ["Customer", "Supplier"]:
|
||||||
bank_account = get_party_bank_account(party_type, party)
|
bank_account = get_party_bank_account(party_type, party)
|
||||||
|
|
||||||
|
|||||||
@@ -80,8 +80,10 @@ frappe.ui.form.on("POS Closing Entry", {
|
|||||||
) {
|
) {
|
||||||
reset_values(frm);
|
reset_values(frm);
|
||||||
frappe.run_serially([
|
frappe.run_serially([
|
||||||
|
() => frappe.dom.freeze(__("Loading Invoices! Please Wait...")),
|
||||||
() => frm.trigger("set_opening_amounts"),
|
() => frm.trigger("set_opening_amounts"),
|
||||||
() => frm.trigger("get_pos_invoices"),
|
() => frm.trigger("get_pos_invoices"),
|
||||||
|
() => frappe.dom.unfreeze(),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -715,14 +715,11 @@ def get_pricing_rule_items(pr_doc, other_items=False) -> list:
|
|||||||
|
|
||||||
def validate_coupon_code(coupon_name):
|
def validate_coupon_code(coupon_name):
|
||||||
coupon = frappe.get_doc("Coupon Code", coupon_name)
|
coupon = frappe.get_doc("Coupon Code", coupon_name)
|
||||||
|
if coupon.valid_from and coupon.valid_from > getdate(today()):
|
||||||
if coupon.valid_from:
|
frappe.throw(_("Sorry, this coupon code's validity has not started"))
|
||||||
if coupon.valid_from > getdate(today()):
|
elif coupon.valid_upto and coupon.valid_upto < getdate(today()):
|
||||||
frappe.throw(_("Sorry, this coupon code's validity has not started"))
|
frappe.throw(_("Sorry, this coupon code's validity has expired"))
|
||||||
elif coupon.valid_upto:
|
elif coupon.maximum_use and coupon.used >= coupon.maximum_use:
|
||||||
if coupon.valid_upto < getdate(today()):
|
|
||||||
frappe.throw(_("Sorry, this coupon code's validity has expired"))
|
|
||||||
elif coupon.used >= coupon.maximum_use:
|
|
||||||
frappe.throw(_("Sorry, this coupon code is no longer valid"))
|
frappe.throw(_("Sorry, this coupon code is no longer valid"))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
"payment_terms_template",
|
"payment_terms_template",
|
||||||
"sales_partner",
|
"sales_partner",
|
||||||
"sales_person",
|
"sales_person",
|
||||||
|
"show_remarks",
|
||||||
"based_on_payment_terms",
|
"based_on_payment_terms",
|
||||||
"section_break_3",
|
"section_break_3",
|
||||||
"customer_collection",
|
"customer_collection",
|
||||||
@@ -388,10 +389,16 @@
|
|||||||
"fieldname": "ignore_cr_dr_notes",
|
"fieldname": "ignore_cr_dr_notes",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"label": "Ignore System Generated Credit / Debit Notes"
|
"label": "Ignore System Generated Credit / Debit Notes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "0",
|
||||||
|
"fieldname": "show_remarks",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"label": "Show Remarks"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2024-08-13 10:41:18.381165",
|
"modified": "2024-10-18 17:51:39.108481",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Process Statement Of Accounts",
|
"name": "Process Statement Of Accounts",
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ def get_common_filters(doc):
|
|||||||
"finance_book": doc.finance_book if doc.finance_book else None,
|
"finance_book": doc.finance_book if doc.finance_book else None,
|
||||||
"account": [doc.account] if doc.account else None,
|
"account": [doc.account] if doc.account else None,
|
||||||
"cost_center": [cc.cost_center_name for cc in doc.cost_center],
|
"cost_center": [cc.cost_center_name for cc in doc.cost_center],
|
||||||
|
"show_remarks": doc.show_remarks,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -122,21 +122,24 @@ class Deferred_Item:
|
|||||||
"""
|
"""
|
||||||
simulate future posting by creating dummy gl entries. starts from the last posting date.
|
simulate future posting by creating dummy gl entries. starts from the last posting date.
|
||||||
"""
|
"""
|
||||||
if self.service_start_date != self.service_end_date:
|
if (
|
||||||
if add_days(self.last_entry_date, 1) < self.period_list[-1].to_date:
|
self.service_start_date != self.service_end_date
|
||||||
self.estimate_for_period_list = get_period_list(
|
and add_days(self.last_entry_date, 1) < self.service_end_date
|
||||||
self.filters.from_fiscal_year,
|
):
|
||||||
self.filters.to_fiscal_year,
|
self.estimate_for_period_list = get_period_list(
|
||||||
add_days(self.last_entry_date, 1),
|
self.filters.from_fiscal_year,
|
||||||
self.period_list[-1].to_date,
|
self.filters.to_fiscal_year,
|
||||||
"Date Range",
|
add_days(self.last_entry_date, 1),
|
||||||
"Monthly",
|
self.service_end_date,
|
||||||
company=self.filters.company,
|
"Date Range",
|
||||||
)
|
"Monthly",
|
||||||
for period in self.estimate_for_period_list:
|
company=self.filters.company,
|
||||||
amount = self.calculate_amount(period.from_date, period.to_date)
|
)
|
||||||
gle = self.make_dummy_gle(period.key, period.to_date, amount)
|
|
||||||
self.gle_entries.append(gle)
|
for period in self.estimate_for_period_list:
|
||||||
|
amount = self.calculate_amount(period.from_date, period.to_date)
|
||||||
|
gle = self.make_dummy_gle(period.key, period.to_date, amount)
|
||||||
|
self.gle_entries.append(gle)
|
||||||
|
|
||||||
def calculate_item_revenue_expense_for_period(self):
|
def calculate_item_revenue_expense_for_period(self):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -357,12 +357,15 @@ class AccountsController(TransactionBase):
|
|||||||
def validate_return_against_account(self):
|
def validate_return_against_account(self):
|
||||||
if self.doctype in ["Sales Invoice", "Purchase Invoice"] and self.is_return and self.return_against:
|
if self.doctype in ["Sales Invoice", "Purchase Invoice"] and self.is_return and self.return_against:
|
||||||
cr_dr_account_field = "debit_to" if self.doctype == "Sales Invoice" else "credit_to"
|
cr_dr_account_field = "debit_to" if self.doctype == "Sales Invoice" else "credit_to"
|
||||||
cr_dr_account_label = "Debit To" if self.doctype == "Sales Invoice" else "Credit To"
|
original_account = frappe.get_value(self.doctype, self.return_against, cr_dr_account_field)
|
||||||
cr_dr_account = self.get(cr_dr_account_field)
|
if original_account != self.get(cr_dr_account_field):
|
||||||
if frappe.get_value(self.doctype, self.return_against, cr_dr_account_field) != cr_dr_account:
|
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("'{0}' account: '{1}' should match the Return Against Invoice").format(
|
_(
|
||||||
frappe.bold(cr_dr_account_label), frappe.bold(cr_dr_account)
|
"Please set {0} to {1}, the same account that was used in the original invoice {2}."
|
||||||
|
).format(
|
||||||
|
frappe.bold(_(self.meta.get_label(cr_dr_account_field), context=self.doctype)),
|
||||||
|
frappe.bold(original_account),
|
||||||
|
frappe.bold(self.return_against),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ erpnext.accounts.unreconcile_payment = {
|
|||||||
add_unreconcile_btn(frm) {
|
add_unreconcile_btn(frm) {
|
||||||
if (frm.doc.docstatus == 1) {
|
if (frm.doc.docstatus == 1) {
|
||||||
if (
|
if (
|
||||||
(frm.doc.doctype == "Journal Entry" && frm.doc.voucher_type != "Journal Entry") ||
|
(frm.doc.doctype == "Journal Entry" &&
|
||||||
|
!["Journal Entry", "Bank Entry", "Cash Entry"].includes(frm.doc.voucher_type)) ||
|
||||||
!["Purchase Invoice", "Sales Invoice", "Journal Entry", "Payment Entry"].includes(
|
!["Purchase Invoice", "Sales Invoice", "Journal Entry", "Payment Entry"].includes(
|
||||||
frm.doc.doctype
|
frm.doc.doctype
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user