Merge pull request #37954 from ruthra-kumar/expense_claim_repost
refactor: expand repost to `Expense Claim` and make it configurable
This commit is contained in:
commit
6210b24c64
@ -1903,6 +1903,12 @@ class TestPurchaseInvoice(FrappeTestCase, StockTestMixin):
|
|||||||
disable_dimension()
|
disable_dimension()
|
||||||
|
|
||||||
def test_repost_accounting_entries(self):
|
def test_repost_accounting_entries(self):
|
||||||
|
# update repost settings
|
||||||
|
settings = frappe.get_doc("Repost Accounting Ledger Settings")
|
||||||
|
if not [x for x in settings.allowed_types if x.document_type == "Purchase Invoice"]:
|
||||||
|
settings.append("allowed_types", {"document_type": "Purchase Invoice", "allowed": True})
|
||||||
|
settings.save()
|
||||||
|
|
||||||
pi = make_purchase_invoice(
|
pi = make_purchase_invoice(
|
||||||
rate=1000,
|
rate=1000,
|
||||||
price_list_rate=1000,
|
price_list_rate=1000,
|
||||||
|
@ -5,9 +5,7 @@ frappe.ui.form.on("Repost Accounting Ledger", {
|
|||||||
setup: function(frm) {
|
setup: function(frm) {
|
||||||
frm.fields_dict['vouchers'].grid.get_field('voucher_type').get_query = function(doc) {
|
frm.fields_dict['vouchers'].grid.get_field('voucher_type').get_query = function(doc) {
|
||||||
return {
|
return {
|
||||||
filters: {
|
query: "erpnext.accounts.doctype.repost_accounting_ledger.repost_accounting_ledger.get_repost_allowed_types"
|
||||||
name: ['in', ['Purchase Invoice', 'Sales Invoice', 'Payment Entry', 'Journal Entry']],
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,9 +10,12 @@ from frappe.utils.data import comma_and
|
|||||||
class RepostAccountingLedger(Document):
|
class RepostAccountingLedger(Document):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(RepostAccountingLedger, self).__init__(*args, **kwargs)
|
super(RepostAccountingLedger, self).__init__(*args, **kwargs)
|
||||||
self._allowed_types = set(
|
self._allowed_types = [
|
||||||
["Purchase Invoice", "Sales Invoice", "Payment Entry", "Journal Entry"]
|
x.document_type
|
||||||
|
for x in frappe.db.get_all(
|
||||||
|
"Repost Allowed Types", filters={"allowed": True}, fields=["distinct(document_type)"]
|
||||||
)
|
)
|
||||||
|
]
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
self.validate_vouchers()
|
self.validate_vouchers()
|
||||||
@ -157,7 +160,7 @@ def start_repost(account_repost_doc=str) -> None:
|
|||||||
doc.docstatus = 1
|
doc.docstatus = 1
|
||||||
doc.make_gl_entries()
|
doc.make_gl_entries()
|
||||||
|
|
||||||
elif doc.doctype in ["Payment Entry", "Journal Entry"]:
|
elif doc.doctype in ["Payment Entry", "Journal Entry", "Expense Claim"]:
|
||||||
if not repost_doc.delete_cancelled_entries:
|
if not repost_doc.delete_cancelled_entries:
|
||||||
doc.make_gl_entries(1)
|
doc.make_gl_entries(1)
|
||||||
doc.make_gl_entries()
|
doc.make_gl_entries()
|
||||||
@ -186,3 +189,18 @@ def validate_docs_for_deferred_accounting(sales_docs, purchase_docs):
|
|||||||
frappe.bold(comma_and([x[0] for x in docs_with_deferred_expense + docs_with_deferred_revenue]))
|
frappe.bold(comma_and([x[0] for x in docs_with_deferred_expense + docs_with_deferred_revenue]))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
@frappe.validate_and_sanitize_search_inputs
|
||||||
|
def get_repost_allowed_types(doctype, txt, searchfield, start, page_len, filters):
|
||||||
|
filters = {"allowed": True}
|
||||||
|
|
||||||
|
if txt:
|
||||||
|
filters.update({"document_type": ("like", f"%{txt}%")})
|
||||||
|
|
||||||
|
if allowed_types := frappe.db.get_all(
|
||||||
|
"Repost Allowed Types", filters=filters, fields=["distinct(document_type)"], as_list=1
|
||||||
|
):
|
||||||
|
return allowed_types
|
||||||
|
return []
|
||||||
|
@ -20,10 +20,18 @@ class TestRepostAccountingLedger(AccountsTestMixin, FrappeTestCase):
|
|||||||
self.create_company()
|
self.create_company()
|
||||||
self.create_customer()
|
self.create_customer()
|
||||||
self.create_item()
|
self.create_item()
|
||||||
|
self.update_repost_settings()
|
||||||
|
|
||||||
def teadDown(self):
|
def teadDown(self):
|
||||||
frappe.db.rollback()
|
frappe.db.rollback()
|
||||||
|
|
||||||
|
def update_repost_settings(self):
|
||||||
|
allowed_types = ["Sales Invoice", "Purchase Invoice", "Payment Entry", "Journal Entry"]
|
||||||
|
repost_settings = frappe.get_doc("Repost Accounting Ledger Settings")
|
||||||
|
for x in allowed_types:
|
||||||
|
repost_settings.append("allowed_types", {"document_type": x, "allowed": True})
|
||||||
|
repost_settings.save()
|
||||||
|
|
||||||
def test_01_basic_functions(self):
|
def test_01_basic_functions(self):
|
||||||
si = create_sales_invoice(
|
si = create_sales_invoice(
|
||||||
item=self.item,
|
item=self.item,
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
// Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
|
||||||
|
// For license information, please see license.txt
|
||||||
|
|
||||||
|
// frappe.ui.form.on("Repost Accounting Ledger Settings", {
|
||||||
|
// refresh(frm) {
|
||||||
|
|
||||||
|
// },
|
||||||
|
// });
|
@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"creation": "2023-11-07 09:57:20.619939",
|
||||||
|
"doctype": "DocType",
|
||||||
|
"engine": "InnoDB",
|
||||||
|
"field_order": [
|
||||||
|
"allowed_types"
|
||||||
|
],
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldname": "allowed_types",
|
||||||
|
"fieldtype": "Table",
|
||||||
|
"label": "Allowed Doctypes",
|
||||||
|
"options": "Repost Allowed Types"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"in_create": 1,
|
||||||
|
"issingle": 1,
|
||||||
|
"links": [],
|
||||||
|
"modified": "2023-11-07 14:24:13.321522",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"module": "Accounts",
|
||||||
|
"name": "Repost Accounting Ledger Settings",
|
||||||
|
"owner": "Administrator",
|
||||||
|
"permissions": [
|
||||||
|
{
|
||||||
|
"create": 1,
|
||||||
|
"delete": 1,
|
||||||
|
"email": 1,
|
||||||
|
"print": 1,
|
||||||
|
"read": 1,
|
||||||
|
"role": "Administrator",
|
||||||
|
"share": 1,
|
||||||
|
"write": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"read": 1,
|
||||||
|
"role": "System Manager",
|
||||||
|
"select": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"sort_field": "modified",
|
||||||
|
"sort_order": "DESC",
|
||||||
|
"states": [],
|
||||||
|
"track_changes": 1
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
|
||||||
|
# For license information, please see license.txt
|
||||||
|
|
||||||
|
# import frappe
|
||||||
|
from frappe.model.document import Document
|
||||||
|
|
||||||
|
|
||||||
|
class RepostAccountingLedgerSettings(Document):
|
||||||
|
pass
|
@ -0,0 +1,9 @@
|
|||||||
|
# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and Contributors
|
||||||
|
# See license.txt
|
||||||
|
|
||||||
|
# import frappe
|
||||||
|
from frappe.tests.utils import FrappeTestCase
|
||||||
|
|
||||||
|
|
||||||
|
class TestRepostAccountingLedgerSettings(FrappeTestCase):
|
||||||
|
pass
|
@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"allow_rename": 1,
|
||||||
|
"creation": "2023-11-07 09:58:03.595382",
|
||||||
|
"doctype": "DocType",
|
||||||
|
"editable_grid": 1,
|
||||||
|
"engine": "InnoDB",
|
||||||
|
"field_order": [
|
||||||
|
"document_type",
|
||||||
|
"column_break_sfzb",
|
||||||
|
"allowed"
|
||||||
|
],
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldname": "document_type",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"in_list_view": 1,
|
||||||
|
"label": "Doctype",
|
||||||
|
"options": "DocType"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "0",
|
||||||
|
"fieldname": "allowed",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"in_list_view": 1,
|
||||||
|
"label": "Allowed"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "column_break_sfzb",
|
||||||
|
"fieldtype": "Column Break"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"index_web_pages_for_search": 1,
|
||||||
|
"istable": 1,
|
||||||
|
"links": [],
|
||||||
|
"modified": "2023-11-07 10:01:39.217861",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"module": "Accounts",
|
||||||
|
"name": "Repost Allowed Types",
|
||||||
|
"owner": "Administrator",
|
||||||
|
"permissions": [],
|
||||||
|
"sort_field": "modified",
|
||||||
|
"sort_order": "DESC",
|
||||||
|
"states": []
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
|
||||||
|
# For license information, please see license.txt
|
||||||
|
|
||||||
|
# import frappe
|
||||||
|
from frappe.model.document import Document
|
||||||
|
|
||||||
|
|
||||||
|
class RepostAllowedTypes(Document):
|
||||||
|
pass
|
@ -345,6 +345,7 @@ erpnext.patches.v14_0.rename_over_order_allowance_field
|
|||||||
erpnext.patches.v14_0.migrate_delivery_stop_lock_field
|
erpnext.patches.v14_0.migrate_delivery_stop_lock_field
|
||||||
execute:frappe.db.set_single_value("Payment Reconciliation", "invoice_limit", 50)
|
execute:frappe.db.set_single_value("Payment Reconciliation", "invoice_limit", 50)
|
||||||
execute:frappe.db.set_single_value("Payment Reconciliation", "payment_limit", 50)
|
execute:frappe.db.set_single_value("Payment Reconciliation", "payment_limit", 50)
|
||||||
|
erpnext.patches.v14_0.add_default_for_repost_settings
|
||||||
erpnext.patches.v15_0.rename_daily_depreciation_to_depreciation_amount_based_on_num_days_in_month
|
erpnext.patches.v15_0.rename_daily_depreciation_to_depreciation_amount_based_on_num_days_in_month
|
||||||
erpnext.patches.v15_0.rename_depreciation_amount_based_on_num_days_in_month_to_daily_prorata_based
|
erpnext.patches.v15_0.rename_depreciation_amount_based_on_num_days_in_month_to_daily_prorata_based
|
||||||
erpnext.patches.v15_0.set_reserved_stock_in_bin
|
erpnext.patches.v15_0.set_reserved_stock_in_bin
|
||||||
|
12
erpnext/patches/v14_0/add_default_for_repost_settings.py
Normal file
12
erpnext/patches/v14_0/add_default_for_repost_settings.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import frappe
|
||||||
|
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
"""
|
||||||
|
Update Repost Accounting Ledger Settings with default values
|
||||||
|
"""
|
||||||
|
allowed_types = ["Sales Invoice", "Purchase Invoice", "Payment Entry", "Journal Entry"]
|
||||||
|
repost_settings = frappe.get_doc("Repost Accounting Ledger Settings")
|
||||||
|
for x in allowed_types:
|
||||||
|
repost_settings.append("allowed_types", {"document_type": x, "allowed": True})
|
||||||
|
repost_settings.save()
|
Loading…
x
Reference in New Issue
Block a user