refactor: configurable posting date for Exc Gain / Loss journal
(cherry picked from commit 3fbd2ca0d9)
# Conflicts:
# erpnext/accounts/doctype/accounts_settings/accounts_settings.json
# erpnext/accounts/doctype/accounts_settings/accounts_settings.py
This commit is contained in:
@@ -43,7 +43,14 @@
|
|||||||
"allow_stale",
|
"allow_stale",
|
||||||
"section_break_jpd0",
|
"section_break_jpd0",
|
||||||
"auto_reconcile_payments",
|
"auto_reconcile_payments",
|
||||||
|
<<<<<<< HEAD
|
||||||
"stale_days",
|
"stale_days",
|
||||||
|
=======
|
||||||
|
"auto_reconciliation_job_trigger",
|
||||||
|
"reconciliation_queue_size",
|
||||||
|
"column_break_resa",
|
||||||
|
"exchange_gain_loss_posting_date",
|
||||||
|
>>>>>>> 3fbd2ca0d9 (refactor: configurable posting date for Exc Gain / Loss journal)
|
||||||
"invoicing_settings_tab",
|
"invoicing_settings_tab",
|
||||||
"accounts_transactions_settings_section",
|
"accounts_transactions_settings_section",
|
||||||
"over_billing_allowance",
|
"over_billing_allowance",
|
||||||
@@ -462,6 +469,76 @@
|
|||||||
"fieldname": "remarks_section",
|
"fieldname": "remarks_section",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"label": "Remarks Column Length"
|
"label": "Remarks Column Length"
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "0",
|
||||||
|
"description": "On enabling this cancellation entries will be posted on the actual cancellation date and reports will consider cancelled entries as well",
|
||||||
|
"fieldname": "enable_immutable_ledger",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"label": "Enable Immutable Ledger"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "column_break_gjcc",
|
||||||
|
"fieldtype": "Column Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "0",
|
||||||
|
"description": "Enable this option to calculate daily depreciation by considering the total number of days in the entire depreciation period, (including leap years) while using daily pro-rata based depreciation",
|
||||||
|
"fieldname": "calculate_depr_using_total_days",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"label": "Calculate daily depreciation using total days in depreciation period"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Payment Request created from Sales Order or Purchase Order will be in Draft status. When disabled document will be in unsaved state.",
|
||||||
|
"fieldname": "payment_request_settings",
|
||||||
|
"fieldtype": "Tab Break",
|
||||||
|
"label": "Payment Request"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "1",
|
||||||
|
"fieldname": "create_pr_in_draft_status",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"label": "Create in Draft Status"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "column_break_yuug",
|
||||||
|
"fieldtype": "Column Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "column_break_resa",
|
||||||
|
"fieldtype": "Column Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "15",
|
||||||
|
"description": "Interval should be between 1 to 59 MInutes",
|
||||||
|
"fieldname": "auto_reconciliation_job_trigger",
|
||||||
|
"fieldtype": "Int",
|
||||||
|
"label": "Auto Reconciliation Job Trigger"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "5",
|
||||||
|
"description": "Documents Processed on each trigger. Queue Size should be between 5 and 100",
|
||||||
|
"fieldname": "reconciliation_queue_size",
|
||||||
|
"fieldtype": "Int",
|
||||||
|
"label": "Reconciliation Queue Size"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "0",
|
||||||
|
"description": "Ignores legacy Is Opening field in GL Entry that allows adding opening balance post the system is in use while generating reports",
|
||||||
|
"fieldname": "ignore_is_opening_check_for_reporting",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"label": "Ignore Is Opening check for reporting"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "Payment",
|
||||||
|
"description": "Only applies for Normal Payments",
|
||||||
|
"fieldname": "exchange_gain_loss_posting_date",
|
||||||
|
"fieldtype": "Select",
|
||||||
|
"label": "Posting Date Inheritance for Exchange Gain / Loss",
|
||||||
|
"options": "Invoice\nPayment"
|
||||||
|
>>>>>>> 3fbd2ca0d9 (refactor: configurable posting date for Exc Gain / Loss journal)
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"icon": "icon-cog",
|
"icon": "icon-cog",
|
||||||
@@ -469,7 +546,11 @@
|
|||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"issingle": 1,
|
"issingle": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
|
<<<<<<< HEAD
|
||||||
"modified": "2024-01-22 12:10:10.151819",
|
"modified": "2024-01-22 12:10:10.151819",
|
||||||
|
=======
|
||||||
|
"modified": "2025-01-22 17:53:47.968079",
|
||||||
|
>>>>>>> 3fbd2ca0d9 (refactor: configurable posting date for Exc Gain / Loss journal)
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Accounts Settings",
|
"name": "Accounts Settings",
|
||||||
|
|||||||
@@ -14,6 +14,62 @@ from erpnext.stock.utils import check_pending_reposting
|
|||||||
|
|
||||||
|
|
||||||
class AccountsSettings(Document):
|
class AccountsSettings(Document):
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
# 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
|
||||||
|
|
||||||
|
acc_frozen_upto: DF.Date | None
|
||||||
|
add_taxes_from_item_tax_template: DF.Check
|
||||||
|
allow_multi_currency_invoices_against_single_party_account: DF.Check
|
||||||
|
allow_stale: DF.Check
|
||||||
|
auto_reconcile_payments: DF.Check
|
||||||
|
auto_reconciliation_job_trigger: DF.Int
|
||||||
|
automatically_fetch_payment_terms: DF.Check
|
||||||
|
automatically_process_deferred_accounting_entry: 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
|
||||||
|
book_tax_discount_loss: DF.Check
|
||||||
|
calculate_depr_using_total_days: DF.Check
|
||||||
|
check_supplier_invoice_uniqueness: DF.Check
|
||||||
|
create_pr_in_draft_status: DF.Check
|
||||||
|
credit_controller: DF.Link | None
|
||||||
|
delete_linked_ledger_entries: DF.Check
|
||||||
|
determine_address_tax_category_from: DF.Literal["Billing Address", "Shipping Address"]
|
||||||
|
enable_common_party_accounting: DF.Check
|
||||||
|
enable_fuzzy_matching: DF.Check
|
||||||
|
enable_immutable_ledger: DF.Check
|
||||||
|
enable_party_matching: DF.Check
|
||||||
|
exchange_gain_loss_posting_date: DF.Literal["Invoice", "Payment"]
|
||||||
|
frozen_accounts_modifier: DF.Link | None
|
||||||
|
general_ledger_remarks_length: DF.Int
|
||||||
|
ignore_account_closing_balance: DF.Check
|
||||||
|
ignore_is_opening_check_for_reporting: DF.Check
|
||||||
|
make_payment_via_journal_entry: DF.Check
|
||||||
|
merge_similar_account_heads: DF.Check
|
||||||
|
over_billing_allowance: DF.Currency
|
||||||
|
post_change_gl_entries: DF.Check
|
||||||
|
receivable_payable_remarks_length: DF.Int
|
||||||
|
reconciliation_queue_size: DF.Int
|
||||||
|
role_allowed_to_over_bill: DF.Link | None
|
||||||
|
round_row_wise_tax: DF.Check
|
||||||
|
show_balance_in_coa: DF.Check
|
||||||
|
show_inclusive_tax_in_print: DF.Check
|
||||||
|
show_payment_schedule_in_print: DF.Check
|
||||||
|
show_taxes_as_table_in_print: DF.Check
|
||||||
|
stale_days: DF.Int
|
||||||
|
submit_journal_entries: DF.Check
|
||||||
|
unlink_advance_payment_on_cancelation_of_order: DF.Check
|
||||||
|
unlink_payment_on_cancellation_of_invoice: DF.Check
|
||||||
|
# end: auto-generated types
|
||||||
|
|
||||||
|
>>>>>>> 3fbd2ca0d9 (refactor: configurable posting date for Exc Gain / Loss journal)
|
||||||
def validate(self):
|
def validate(self):
|
||||||
old_doc = self.get_doc_before_save()
|
old_doc = self.get_doc_before_save()
|
||||||
clear_cache = False
|
clear_cache = False
|
||||||
|
|||||||
@@ -354,6 +354,9 @@ class PaymentReconciliation(Document):
|
|||||||
def allocate_entries(self, args):
|
def allocate_entries(self, args):
|
||||||
self.validate_entries()
|
self.validate_entries()
|
||||||
|
|
||||||
|
exc_gain_loss_posting_date = frappe.db.get_single_value(
|
||||||
|
"Accounts Settings", "exchange_gain_loss_posting_date", cache=True
|
||||||
|
)
|
||||||
invoice_exchange_map = self.get_invoice_exchange_map(args.get("invoices"), args.get("payments"))
|
invoice_exchange_map = self.get_invoice_exchange_map(args.get("invoices"), args.get("payments"))
|
||||||
default_exchange_gain_loss_account = frappe.get_cached_value(
|
default_exchange_gain_loss_account = frappe.get_cached_value(
|
||||||
"Company", self.company, "exchange_gain_loss_account"
|
"Company", self.company, "exchange_gain_loss_account"
|
||||||
@@ -380,6 +383,8 @@ class PaymentReconciliation(Document):
|
|||||||
res.difference_account = default_exchange_gain_loss_account
|
res.difference_account = default_exchange_gain_loss_account
|
||||||
res.exchange_rate = inv.get("exchange_rate")
|
res.exchange_rate = inv.get("exchange_rate")
|
||||||
res.update({"gain_loss_posting_date": pay.get("posting_date")})
|
res.update({"gain_loss_posting_date": pay.get("posting_date")})
|
||||||
|
if exc_gain_loss_posting_date == "Invoice":
|
||||||
|
res.update({"gain_loss_posting_date": inv.get("invoice_date")})
|
||||||
|
|
||||||
if pay.get("amount") == 0:
|
if pay.get("amount") == 0:
|
||||||
entries.append(res)
|
entries.append(res)
|
||||||
|
|||||||
Reference in New Issue
Block a user