chore: Removed payroll dependencies from Loan Management, moved to hrms app
- Salary Slip Loan dt moved to hrms, removed from erpnext app - Repay from Salary field removed from Loan and Loan Repayment, installed on hrms app setup - fixed references to salary slip loan fields
This commit is contained in:
parent
fbc1330ab0
commit
f6fbcc99a3
@ -104,7 +104,7 @@ class BankClearance(Document):
|
|||||||
|
|
||||||
loan_repayment = frappe.qb.DocType("Loan Repayment")
|
loan_repayment = frappe.qb.DocType("Loan Repayment")
|
||||||
|
|
||||||
loan_repayments = (
|
query = (
|
||||||
frappe.qb.from_(loan_repayment)
|
frappe.qb.from_(loan_repayment)
|
||||||
.select(
|
.select(
|
||||||
ConstantColumn("Loan Repayment").as_("payment_document"),
|
ConstantColumn("Loan Repayment").as_("payment_document"),
|
||||||
@ -118,13 +118,17 @@ class BankClearance(Document):
|
|||||||
)
|
)
|
||||||
.where(loan_repayment.docstatus == 1)
|
.where(loan_repayment.docstatus == 1)
|
||||||
.where(loan_repayment.clearance_date.isnull())
|
.where(loan_repayment.clearance_date.isnull())
|
||||||
.where(loan_repayment.repay_from_salary == 0)
|
|
||||||
.where(loan_repayment.posting_date >= self.from_date)
|
.where(loan_repayment.posting_date >= self.from_date)
|
||||||
.where(loan_repayment.posting_date <= self.to_date)
|
.where(loan_repayment.posting_date <= self.to_date)
|
||||||
.where(loan_repayment.payment_account.isin([self.bank_account, self.account]))
|
.where(loan_repayment.payment_account.isin([self.bank_account, self.account]))
|
||||||
.orderby(loan_repayment.posting_date)
|
)
|
||||||
.orderby(loan_repayment.name, frappe.qb.desc)
|
|
||||||
).run(as_dict=1)
|
if frappe.db.has_column("Loan Repayment", "repay_from_salary"):
|
||||||
|
query = query.where((loan_repayment.repay_from_salary == 0))
|
||||||
|
|
||||||
|
query = query.orderby(loan_repayment.posting_date).orderby(loan_repayment.name, frappe.qb.desc)
|
||||||
|
|
||||||
|
loan_repayments = query.run(as_dict=True)
|
||||||
|
|
||||||
pos_sales_invoices, pos_purchase_invoices = [], []
|
pos_sales_invoices, pos_purchase_invoices = [], []
|
||||||
if self.include_pos_transactions:
|
if self.include_pos_transactions:
|
||||||
|
@ -467,11 +467,13 @@ def get_lr_matching_query(bank_account, amount_condition, filters):
|
|||||||
loan_repayment.posting_date,
|
loan_repayment.posting_date,
|
||||||
)
|
)
|
||||||
.where(loan_repayment.docstatus == 1)
|
.where(loan_repayment.docstatus == 1)
|
||||||
.where(loan_repayment.repay_from_salary == 0)
|
|
||||||
.where(loan_repayment.clearance_date.isnull())
|
.where(loan_repayment.clearance_date.isnull())
|
||||||
.where(loan_repayment.payment_account == bank_account)
|
.where(loan_repayment.payment_account == bank_account)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if frappe.db.has_column("Loan Repayment", "repay_from_salary"):
|
||||||
|
query = query.where((loan_repayment.repay_from_salary == 0))
|
||||||
|
|
||||||
if amount_condition:
|
if amount_condition:
|
||||||
query.where(loan_repayment.amount_paid == filters.get("amount"))
|
query.where(loan_repayment.amount_paid == filters.get("amount"))
|
||||||
else:
|
else:
|
||||||
|
@ -198,12 +198,10 @@ def get_loan_entries(filters):
|
|||||||
amount_field = (loan_doc.disbursed_amount).as_("credit")
|
amount_field = (loan_doc.disbursed_amount).as_("credit")
|
||||||
posting_date = (loan_doc.disbursement_date).as_("posting_date")
|
posting_date = (loan_doc.disbursement_date).as_("posting_date")
|
||||||
account = loan_doc.disbursement_account
|
account = loan_doc.disbursement_account
|
||||||
salary_condition = loan_doc.docstatus == 1
|
|
||||||
else:
|
else:
|
||||||
amount_field = (loan_doc.amount_paid).as_("debit")
|
amount_field = (loan_doc.amount_paid).as_("debit")
|
||||||
posting_date = (loan_doc.posting_date).as_("posting_date")
|
posting_date = (loan_doc.posting_date).as_("posting_date")
|
||||||
account = loan_doc.payment_account
|
account = loan_doc.payment_account
|
||||||
salary_condition = loan_doc.repay_from_salary == 0
|
|
||||||
|
|
||||||
query = (
|
query = (
|
||||||
frappe.qb.from_(loan_doc)
|
frappe.qb.from_(loan_doc)
|
||||||
@ -216,12 +214,14 @@ def get_loan_entries(filters):
|
|||||||
posting_date,
|
posting_date,
|
||||||
)
|
)
|
||||||
.where(loan_doc.docstatus == 1)
|
.where(loan_doc.docstatus == 1)
|
||||||
.where(salary_condition)
|
|
||||||
.where(account == filters.get("account"))
|
.where(account == filters.get("account"))
|
||||||
.where(posting_date <= getdate(filters.get("report_date")))
|
.where(posting_date <= getdate(filters.get("report_date")))
|
||||||
.where(ifnull(loan_doc.clearance_date, "4000-01-01") > getdate(filters.get("report_date")))
|
.where(ifnull(loan_doc.clearance_date, "4000-01-01") > getdate(filters.get("report_date")))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if doctype == "Loan Repayment" and frappe.db.has_column("Loan Repayment", "repay_from_salary"):
|
||||||
|
query = query.where((loan_doc.repay_from_salary == 0))
|
||||||
|
|
||||||
entries = query.run(as_dict=1)
|
entries = query.run(as_dict=1)
|
||||||
loan_docs.extend(entries)
|
loan_docs.extend(entries)
|
||||||
|
|
||||||
@ -267,13 +267,12 @@ def get_loan_amount(filters):
|
|||||||
amount_field = Sum(loan_doc.disbursed_amount)
|
amount_field = Sum(loan_doc.disbursed_amount)
|
||||||
posting_date = (loan_doc.disbursement_date).as_("posting_date")
|
posting_date = (loan_doc.disbursement_date).as_("posting_date")
|
||||||
account = loan_doc.disbursement_account
|
account = loan_doc.disbursement_account
|
||||||
salary_condition = loan_doc.docstatus == 1
|
|
||||||
else:
|
else:
|
||||||
amount_field = Sum(loan_doc.amount_paid)
|
amount_field = Sum(loan_doc.amount_paid)
|
||||||
posting_date = (loan_doc.posting_date).as_("posting_date")
|
posting_date = (loan_doc.posting_date).as_("posting_date")
|
||||||
account = loan_doc.payment_account
|
account = loan_doc.payment_account
|
||||||
salary_condition = loan_doc.repay_from_salary == 0
|
|
||||||
amount = (
|
query = (
|
||||||
frappe.qb.from_(loan_doc)
|
frappe.qb.from_(loan_doc)
|
||||||
.select(amount_field)
|
.select(amount_field)
|
||||||
.where(loan_doc.docstatus == 1)
|
.where(loan_doc.docstatus == 1)
|
||||||
@ -281,9 +280,12 @@ def get_loan_amount(filters):
|
|||||||
.where(account == filters.get("account"))
|
.where(account == filters.get("account"))
|
||||||
.where(posting_date > getdate(filters.get("report_date")))
|
.where(posting_date > getdate(filters.get("report_date")))
|
||||||
.where(ifnull(loan_doc.clearance_date, "4000-01-01") <= getdate(filters.get("report_date")))
|
.where(ifnull(loan_doc.clearance_date, "4000-01-01") <= getdate(filters.get("report_date")))
|
||||||
.run()[0][0]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if doctype == "Loan Repayment" and frappe.db.has_column("Loan Repayment", "repay_from_salary"):
|
||||||
|
query = query.run((loan_doc.repay_from_salary == 0))
|
||||||
|
|
||||||
|
amount = query.run()[0][0]
|
||||||
total_amount += flt(amount)
|
total_amount += flt(amount)
|
||||||
|
|
||||||
return total_amount
|
return total_amount
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
"company",
|
"company",
|
||||||
"posting_date",
|
"posting_date",
|
||||||
"status",
|
"status",
|
||||||
"repay_from_salary",
|
|
||||||
"section_break_8",
|
"section_break_8",
|
||||||
"loan_type",
|
"loan_type",
|
||||||
"loan_amount",
|
"loan_amount",
|
||||||
@ -124,13 +123,6 @@
|
|||||||
"options": "Sanctioned\nPartially Disbursed\nDisbursed\nLoan Closure Requested\nClosed",
|
"options": "Sanctioned\nPartially Disbursed\nDisbursed\nLoan Closure Requested\nClosed",
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"default": "0",
|
|
||||||
"depends_on": "eval:doc.applicant_type==\"Employee\"",
|
|
||||||
"fieldname": "repay_from_salary",
|
|
||||||
"fieldtype": "Check",
|
|
||||||
"label": "Repay From Salary"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"fieldname": "section_break_8",
|
"fieldname": "section_break_8",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
@ -384,7 +376,7 @@
|
|||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2022-03-10 11:50:31.957360",
|
"modified": "2022-06-21 11:50:31.957360",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Loan Management",
|
"module": "Loan Management",
|
||||||
"name": "Loan",
|
"name": "Loan",
|
||||||
|
@ -20,15 +20,12 @@ from erpnext.loan_management.doctype.loan_security_unpledge.loan_security_unpled
|
|||||||
|
|
||||||
class Loan(AccountsController):
|
class Loan(AccountsController):
|
||||||
def validate(self):
|
def validate(self):
|
||||||
if self.applicant_type == "Employee" and self.repay_from_salary:
|
|
||||||
validate_employee_currency_with_company_currency(self.applicant, self.company)
|
|
||||||
self.set_loan_amount()
|
self.set_loan_amount()
|
||||||
self.validate_loan_amount()
|
self.validate_loan_amount()
|
||||||
self.set_missing_fields()
|
self.set_missing_fields()
|
||||||
self.validate_cost_center()
|
self.validate_cost_center()
|
||||||
self.validate_accounts()
|
self.validate_accounts()
|
||||||
self.check_sanctioned_amount_limit()
|
self.check_sanctioned_amount_limit()
|
||||||
self.validate_repay_from_salary()
|
|
||||||
|
|
||||||
if self.is_term_loan:
|
if self.is_term_loan:
|
||||||
validate_repayment_method(
|
validate_repayment_method(
|
||||||
@ -106,10 +103,6 @@ class Loan(AccountsController):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
def validate_repay_from_salary(self):
|
|
||||||
if not self.is_term_loan and self.repay_from_salary:
|
|
||||||
frappe.throw(_("Repay From Salary can be selected only for term loans"))
|
|
||||||
|
|
||||||
def make_repayment_schedule(self):
|
def make_repayment_schedule(self):
|
||||||
if not self.repayment_start_date:
|
if not self.repayment_start_date:
|
||||||
frappe.throw(_("Repayment Start Date is mandatory for term loans"))
|
frappe.throw(_("Repayment Start Date is mandatory for term loans"))
|
||||||
@ -491,25 +484,6 @@ def create_loan_security_unpledge(unpledge_map, loan, company, applicant_type, a
|
|||||||
return unpledge_request
|
return unpledge_request
|
||||||
|
|
||||||
|
|
||||||
def validate_employee_currency_with_company_currency(applicant, company):
|
|
||||||
from erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment import (
|
|
||||||
get_employee_currency,
|
|
||||||
)
|
|
||||||
|
|
||||||
if not applicant:
|
|
||||||
frappe.throw(_("Please select Applicant"))
|
|
||||||
if not company:
|
|
||||||
frappe.throw(_("Please select Company"))
|
|
||||||
employee_currency = get_employee_currency(applicant)
|
|
||||||
company_currency = erpnext.get_company_currency(company)
|
|
||||||
if employee_currency != company_currency:
|
|
||||||
frappe.throw(
|
|
||||||
_(
|
|
||||||
"Loan cannot be repayed from salary for Employee {0} because salary is processed in currency {1}"
|
|
||||||
).format(applicant, employee_currency)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_shortfall_applicants():
|
def get_shortfall_applicants():
|
||||||
loans = frappe.get_all("Loan Security Shortfall", {"status": "Pending"}, pluck="loan")
|
loans = frappe.get_all("Loan Security Shortfall", {"status": "Pending"}, pluck="loan")
|
||||||
|
@ -29,11 +29,8 @@ from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_
|
|||||||
from erpnext.loan_management.doctype.process_loan_security_shortfall.process_loan_security_shortfall import (
|
from erpnext.loan_management.doctype.process_loan_security_shortfall.process_loan_security_shortfall import (
|
||||||
create_process_loan_security_shortfall,
|
create_process_loan_security_shortfall,
|
||||||
)
|
)
|
||||||
from erpnext.payroll.doctype.salary_structure.test_salary_structure import (
|
|
||||||
make_employee,
|
|
||||||
make_salary_structure,
|
|
||||||
)
|
|
||||||
from erpnext.selling.doctype.customer.test_customer import get_customer_dict
|
from erpnext.selling.doctype.customer.test_customer import get_customer_dict
|
||||||
|
from erpnext.setup.doctype.employee.test_employee import make_employee
|
||||||
|
|
||||||
|
|
||||||
class TestLoan(unittest.TestCase):
|
class TestLoan(unittest.TestCase):
|
||||||
@ -93,13 +90,6 @@ class TestLoan(unittest.TestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.applicant1 = make_employee("robert_loan@loan.com")
|
self.applicant1 = make_employee("robert_loan@loan.com")
|
||||||
make_salary_structure(
|
|
||||||
"Test Salary Structure Loan",
|
|
||||||
"Monthly",
|
|
||||||
employee=self.applicant1,
|
|
||||||
currency="INR",
|
|
||||||
company="_Test Company",
|
|
||||||
)
|
|
||||||
if not frappe.db.exists("Customer", "_Test Loan Customer"):
|
if not frappe.db.exists("Customer", "_Test Loan Customer"):
|
||||||
frappe.get_doc(get_customer_dict("_Test Loan Customer")).insert(ignore_permissions=True)
|
frappe.get_doc(get_customer_dict("_Test Loan Customer")).insert(ignore_permissions=True)
|
||||||
|
|
||||||
|
@ -6,10 +6,7 @@ import unittest
|
|||||||
import frappe
|
import frappe
|
||||||
|
|
||||||
from erpnext.loan_management.doctype.loan.test_loan import create_loan_accounts, create_loan_type
|
from erpnext.loan_management.doctype.loan.test_loan import create_loan_accounts, create_loan_type
|
||||||
from erpnext.payroll.doctype.salary_structure.test_salary_structure import (
|
from erpnext.setup.doctype.employee.employee import make_employee
|
||||||
make_employee,
|
|
||||||
make_salary_structure,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class TestLoanApplication(unittest.TestCase):
|
class TestLoanApplication(unittest.TestCase):
|
||||||
@ -32,9 +29,6 @@ class TestLoanApplication(unittest.TestCase):
|
|||||||
18,
|
18,
|
||||||
)
|
)
|
||||||
self.applicant = make_employee("kate_loan@loan.com", "_Test Company")
|
self.applicant = make_employee("kate_loan@loan.com", "_Test Company")
|
||||||
make_salary_structure(
|
|
||||||
"Test Salary Structure Loan", "Monthly", employee=self.applicant, currency="INR"
|
|
||||||
)
|
|
||||||
self.create_loan_application()
|
self.create_loan_application()
|
||||||
|
|
||||||
def create_loan_application(self):
|
def create_loan_application(self):
|
||||||
|
@ -15,9 +15,7 @@
|
|||||||
"posting_date",
|
"posting_date",
|
||||||
"clearance_date",
|
"clearance_date",
|
||||||
"rate_of_interest",
|
"rate_of_interest",
|
||||||
"payroll_payable_account",
|
|
||||||
"is_term_loan",
|
"is_term_loan",
|
||||||
"repay_from_salary",
|
|
||||||
"payment_details_section",
|
"payment_details_section",
|
||||||
"due_date",
|
"due_date",
|
||||||
"pending_principal_amount",
|
"pending_principal_amount",
|
||||||
@ -252,21 +250,6 @@
|
|||||||
"options": "Company:company:default_currency",
|
"options": "Company:company:default_currency",
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"depends_on": "eval:doc.repay_from_salary",
|
|
||||||
"fieldname": "payroll_payable_account",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"label": "Payroll Payable Account",
|
|
||||||
"mandatory_depends_on": "eval:doc.repay_from_salary",
|
|
||||||
"options": "Account"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"default": "0",
|
|
||||||
"fetch_from": "against_loan.repay_from_salary",
|
|
||||||
"fieldname": "repay_from_salary",
|
|
||||||
"fieldtype": "Check",
|
|
||||||
"label": "Repay From Salary"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"fieldname": "clearance_date",
|
"fieldname": "clearance_date",
|
||||||
"fieldtype": "Date",
|
"fieldtype": "Date",
|
||||||
@ -311,7 +294,7 @@
|
|||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2022-02-18 19:10:07.742298",
|
"modified": "2022-06-21 10:10:07.742298",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Loan Management",
|
"module": "Loan Management",
|
||||||
"name": "Loan Repayment",
|
"name": "Loan Repayment",
|
||||||
|
@ -396,7 +396,7 @@ class LoanRepayment(AccountsController):
|
|||||||
else:
|
else:
|
||||||
remarks = _("Repayment against Loan:") + " " + self.against_loan
|
remarks = _("Repayment against Loan:") + " " + self.against_loan
|
||||||
|
|
||||||
if self.repay_from_salary:
|
if hasattr(self, "repay_from_salary") and self.repay_from_salary:
|
||||||
payment_account = self.payroll_payable_account
|
payment_account = self.payroll_payable_account
|
||||||
else:
|
else:
|
||||||
payment_account = self.payment_account
|
payment_account = self.payment_account
|
||||||
@ -674,7 +674,9 @@ def get_amounts(amounts, against_loan, posting_date):
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
no_of_late_days > 0
|
no_of_late_days > 0
|
||||||
and (not against_loan_doc.repay_from_salary)
|
and (
|
||||||
|
not (hasattr(against_loan_doc, "repay_from_salary") and against_loan_doc.repay_from_salary)
|
||||||
|
)
|
||||||
and entry.accrual_type == "Regular"
|
and entry.accrual_type == "Regular"
|
||||||
):
|
):
|
||||||
penalty_amount += (
|
penalty_amount += (
|
||||||
|
@ -1,101 +0,0 @@
|
|||||||
{
|
|
||||||
"actions": [],
|
|
||||||
"creation": "2019-08-29 18:11:36.829526",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"editable_grid": 1,
|
|
||||||
"engine": "InnoDB",
|
|
||||||
"field_order": [
|
|
||||||
"loan",
|
|
||||||
"loan_type",
|
|
||||||
"loan_account",
|
|
||||||
"interest_income_account",
|
|
||||||
"column_break_4",
|
|
||||||
"principal_amount",
|
|
||||||
"interest_amount",
|
|
||||||
"total_payment",
|
|
||||||
"loan_repayment_entry"
|
|
||||||
],
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldname": "loan",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Loan",
|
|
||||||
"options": "Loan",
|
|
||||||
"read_only": 1,
|
|
||||||
"reqd": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "loan_account",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"label": "Loan Account",
|
|
||||||
"options": "Account",
|
|
||||||
"read_only": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "interest_income_account",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Interest Income Account",
|
|
||||||
"options": "Account",
|
|
||||||
"read_only": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "column_break_4",
|
|
||||||
"fieldtype": "Column Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "principal_amount",
|
|
||||||
"fieldtype": "Currency",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Principal Amount",
|
|
||||||
"options": "Company:company:default_currency",
|
|
||||||
"read_only": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "interest_amount",
|
|
||||||
"fieldtype": "Currency",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Interest Amount",
|
|
||||||
"options": "Company:company:default_currency",
|
|
||||||
"read_only": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "total_payment",
|
|
||||||
"fieldtype": "Currency",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Total Payment",
|
|
||||||
"options": "Company:company:default_currency"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "loan_repayment_entry",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"label": "Loan Repayment Entry",
|
|
||||||
"no_copy": 1,
|
|
||||||
"options": "Loan Repayment",
|
|
||||||
"read_only": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fetch_from": "loan.loan_type",
|
|
||||||
"fieldname": "loan_type",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"label": "Loan Type",
|
|
||||||
"options": "Loan Type",
|
|
||||||
"read_only": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"index_web_pages_for_search": 1,
|
|
||||||
"istable": 1,
|
|
||||||
"links": [],
|
|
||||||
"modified": "2022-01-31 14:50:14.823213",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Loan Management",
|
|
||||||
"name": "Salary Slip Loan",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [],
|
|
||||||
"quick_entry": 1,
|
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"states": [],
|
|
||||||
"track_changes": 1
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
from frappe.model.document import Document
|
|
||||||
|
|
||||||
|
|
||||||
class SalarySlipLoan(Document):
|
|
||||||
pass
|
|
@ -36,9 +36,6 @@ def before_tests():
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
frappe.db.sql("delete from `tabLeave Allocation`")
|
|
||||||
frappe.db.sql("delete from `tabLeave Application`")
|
|
||||||
frappe.db.sql("delete from `tabSalary Slip`")
|
|
||||||
frappe.db.sql("delete from `tabItem Price`")
|
frappe.db.sql("delete from `tabItem Price`")
|
||||||
|
|
||||||
_enable_all_roles_for_admin()
|
_enable_all_roles_for_admin()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user