Merge branch 'develop' into income-tax-period-factor-dev
This commit is contained in:
commit
6592a6bcd4
@ -1882,6 +1882,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"collapsible_depends_on": "",
|
"collapsible_depends_on": "",
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "pricing_rule_details",
|
"fieldname": "pricing_rule_details",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -1915,6 +1916,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"collapsible_depends_on": "",
|
"collapsible_depends_on": "",
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "pricing_rules",
|
"fieldname": "pricing_rules",
|
||||||
"fieldtype": "Table",
|
"fieldtype": "Table",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -2318,6 +2320,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "tax_category",
|
"fieldname": "tax_category",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -2449,6 +2452,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "taxes_and_charges",
|
"fieldname": "taxes_and_charges",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -2483,6 +2487,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "taxes",
|
"fieldname": "taxes",
|
||||||
"fieldtype": "Table",
|
"fieldtype": "Table",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -3947,7 +3952,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"default": "1",
|
"default": "",
|
||||||
"fetch_if_empty": 0,
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "allocate_advances_automatically",
|
"fieldname": "allocate_advances_automatically",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
@ -4957,18 +4962,16 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"has_web_view": 0,
|
"has_web_view": 0,
|
||||||
"hide_heading": 0,
|
|
||||||
"hide_toolbar": 0,
|
"hide_toolbar": 0,
|
||||||
"icon": "fa fa-file-text",
|
"icon": "fa fa-file-text",
|
||||||
"idx": 204,
|
"idx": 204,
|
||||||
"image_view": 0,
|
|
||||||
"in_create": 0,
|
"in_create": 0,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"menu_index": 0,
|
"menu_index": 0,
|
||||||
"modified": "2019-04-11 16:08:22.288425",
|
"modified": "2019-04-22 12:08:12.648559",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Purchase Invoice",
|
"name": "Purchase Invoice",
|
||||||
@ -5073,7 +5076,6 @@
|
|||||||
],
|
],
|
||||||
"quick_entry": 0,
|
"quick_entry": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"read_only_onload": 1,
|
|
||||||
"search_fields": "posting_date, supplier, bill_no, base_grand_total, outstanding_amount",
|
"search_fields": "posting_date, supplier, bill_no, base_grand_total, outstanding_amount",
|
||||||
"show_name_in_global_search": 1,
|
"show_name_in_global_search": 1,
|
||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
|
@ -3731,7 +3731,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"default": "1",
|
"default": "",
|
||||||
"fetch_if_empty": 0,
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "allocate_advances_automatically",
|
"fieldname": "allocate_advances_automatically",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
@ -5915,7 +5915,7 @@
|
|||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"menu_index": 0,
|
"menu_index": 0,
|
||||||
"modified": "2019-04-11 17:08:11.629845",
|
"modified": "2019-04-22 12:07:58.168803",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Sales Invoice",
|
"name": "Sales Invoice",
|
||||||
@ -6010,4 +6010,4 @@
|
|||||||
"track_changes": 1,
|
"track_changes": 1,
|
||||||
"track_seen": 1,
|
"track_seen": 1,
|
||||||
"track_views": 0
|
"track_views": 0
|
||||||
}
|
}
|
||||||
|
@ -1,23 +1,27 @@
|
|||||||
{
|
{
|
||||||
"add_total_row": 0,
|
"add_total_row": 0,
|
||||||
"apply_user_permissions": 1,
|
|
||||||
"creation": "2017-12-27 16:15:52.615453",
|
"creation": "2017-12-27 16:15:52.615453",
|
||||||
|
"disable_prepared_report": 0,
|
||||||
"disabled": 0,
|
"disabled": 0,
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"doctype": "Report",
|
"doctype": "Report",
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"is_standard": "Yes",
|
"is_standard": "Yes",
|
||||||
"modified": "2017-12-27 16:46:54.422356",
|
"modified": "2019-04-19 10:50:36.061588",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Share Ledger",
|
"name": "Share Ledger",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
|
"prepared_report": 0,
|
||||||
"ref_doctype": "Share Transfer",
|
"ref_doctype": "Share Transfer",
|
||||||
"report_name": "Share Ledger",
|
"report_name": "Share Ledger",
|
||||||
"report_type": "Script Report",
|
"report_type": "Script Report",
|
||||||
"roles": [
|
"roles": [
|
||||||
{
|
{
|
||||||
"role": "Administrator"
|
"role": "Administrator"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "System Manager"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -78,6 +78,11 @@ def get_data():
|
|||||||
"name": "Payment Entry",
|
"name": "Payment Entry",
|
||||||
"description": _("Bank/Cash transactions against party or for internal transfer")
|
"description": _("Bank/Cash transactions against party or for internal transfer")
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "doctype",
|
||||||
|
"name": "Payment Term",
|
||||||
|
"description": _("Payment Terms based on conditions")
|
||||||
|
},
|
||||||
|
|
||||||
# Reports
|
# Reports
|
||||||
{
|
{
|
||||||
@ -131,6 +136,11 @@ def get_data():
|
|||||||
"name": "Currency Exchange",
|
"name": "Currency Exchange",
|
||||||
"description": _("Currency exchange rate master.")
|
"description": _("Currency exchange rate master.")
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "doctype",
|
||||||
|
"name": "Exchange Rate Revaluation",
|
||||||
|
"description": _("Exchange Rate Revaluation master.")
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "doctype",
|
"type": "doctype",
|
||||||
"name": "Payment Gateway Account",
|
"name": "Payment Gateway Account",
|
||||||
|
@ -10,6 +10,7 @@ from frappe.model.mapper import get_mapped_doc
|
|||||||
from erpnext.controllers.selling_controller import SellingController
|
from erpnext.controllers.selling_controller import SellingController
|
||||||
from frappe.contacts.address_and_contact import load_address_and_contact
|
from frappe.contacts.address_and_contact import load_address_and_contact
|
||||||
from erpnext.accounts.party import set_taxes
|
from erpnext.accounts.party import set_taxes
|
||||||
|
from frappe.email.inbox import link_communication_to_document
|
||||||
|
|
||||||
sender_field = "email_id"
|
sender_field = "email_id"
|
||||||
|
|
||||||
@ -199,3 +200,29 @@ def get_lead_details(lead, posting_date=None, company=None):
|
|||||||
out['taxes_and_charges'] = taxes_and_charges
|
out['taxes_and_charges'] = taxes_and_charges
|
||||||
|
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def make_lead_from_communication(communication, ignore_communication_links=False):
|
||||||
|
""" raise a issue from email """
|
||||||
|
|
||||||
|
doc = frappe.get_doc("Communication", communication)
|
||||||
|
lead_name = None
|
||||||
|
if doc.sender:
|
||||||
|
lead_name = frappe.db.get_value("Lead", {"email_id": doc.sender})
|
||||||
|
if not lead_name and doc.phone_no:
|
||||||
|
lead_name = frappe.db.get_value("Lead", {"mobile_no": doc.phone_no})
|
||||||
|
if not lead_name:
|
||||||
|
lead = frappe.get_doc({
|
||||||
|
"doctype": "Lead",
|
||||||
|
"lead_name": doc.sender_full_name,
|
||||||
|
"email_id": doc.sender,
|
||||||
|
"mobile_no": doc.phone_no
|
||||||
|
})
|
||||||
|
lead.flags.ignore_mandatory = True
|
||||||
|
lead.flags.ignore_permissions = True
|
||||||
|
lead.insert()
|
||||||
|
|
||||||
|
lead_name = lead.name
|
||||||
|
|
||||||
|
link_communication_to_document(doc, "Lead", lead_name, ignore_communication_links)
|
||||||
|
return lead_name
|
@ -10,6 +10,7 @@ from erpnext.setup.utils import get_exchange_rate
|
|||||||
from erpnext.utilities.transaction_base import TransactionBase
|
from erpnext.utilities.transaction_base import TransactionBase
|
||||||
from erpnext.accounts.party import get_party_account_currency
|
from erpnext.accounts.party import get_party_account_currency
|
||||||
from frappe.desk.form import assign_to
|
from frappe.desk.form import assign_to
|
||||||
|
from frappe.email.inbox import link_communication_to_document
|
||||||
|
|
||||||
subject_field = "title"
|
subject_field = "title"
|
||||||
sender_field = "contact_email"
|
sender_field = "contact_email"
|
||||||
@ -349,3 +350,23 @@ def assign_to_user(doc, subject_field):
|
|||||||
"name": doc.name,
|
"name": doc.name,
|
||||||
"description": doc.get(subject_field)
|
"description": doc.get(subject_field)
|
||||||
})
|
})
|
||||||
|
@frappe.whitelist()
|
||||||
|
def make_opportunity_from_communication(communication, ignore_communication_links=False):
|
||||||
|
from erpnext.crm.doctype.lead.lead import make_lead_from_communication
|
||||||
|
doc = frappe.get_doc("Communication", communication)
|
||||||
|
|
||||||
|
lead = doc.reference_name if doc.reference_doctype == "Lead" else None
|
||||||
|
if not lead:
|
||||||
|
lead = make_lead_from_communication(communication, ignore_communication_links=True)
|
||||||
|
|
||||||
|
enquiry_from = "Lead"
|
||||||
|
|
||||||
|
opportunity = frappe.get_doc({
|
||||||
|
"doctype": "Opportunity",
|
||||||
|
"enquiry_from": enquiry_from,
|
||||||
|
"lead": lead
|
||||||
|
}).insert(ignore_permissions=True)
|
||||||
|
|
||||||
|
link_communication_to_document(doc, "Opportunity", opportunity.name, ignore_communication_links)
|
||||||
|
|
||||||
|
return opportunity.name
|
||||||
|
@ -74,7 +74,7 @@ website_generators = ["Item Group", "Item", "BOM", "Sales Partner",
|
|||||||
|
|
||||||
website_context = {
|
website_context = {
|
||||||
"favicon": "/assets/erpnext/images/favicon.png",
|
"favicon": "/assets/erpnext/images/favicon.png",
|
||||||
"splash_image": "/assets/erpnext/images/erpnext-12.svg"
|
"splash_image": "/assets/erpnext/images/erp-icon.svg"
|
||||||
}
|
}
|
||||||
|
|
||||||
website_route_rules = [
|
website_route_rules = [
|
||||||
|
@ -51,7 +51,7 @@ def get_additional_salary_component(employee, start_date, end_date):
|
|||||||
for d in additional_components:
|
for d in additional_components:
|
||||||
component = frappe.get_doc("Salary Component", d.salary_component)
|
component = frappe.get_doc("Salary Component", d.salary_component)
|
||||||
struct_row = {'salary_component': d.salary_component}
|
struct_row = {'salary_component': d.salary_component}
|
||||||
for field in ["depends_on_lwp", "abbr", "is_tax_applicable", "variable_based_on_taxable_salary", "is_additional_component"]:
|
for field in ["depends_on_payment_days", "abbr", "is_tax_applicable", "variable_based_on_taxable_salary", "is_additional_component"]:
|
||||||
struct_row[field] = component.get(field)
|
struct_row[field] = component.get(field)
|
||||||
|
|
||||||
additional_components_list.append({
|
additional_components_list.append({
|
||||||
|
@ -113,7 +113,7 @@ def get_max_benefits(employee, on_date):
|
|||||||
def get_max_benefits_remaining(employee, on_date, payroll_period):
|
def get_max_benefits_remaining(employee, on_date, payroll_period):
|
||||||
max_benefits = get_max_benefits(employee, on_date)
|
max_benefits = get_max_benefits(employee, on_date)
|
||||||
if max_benefits and max_benefits > 0:
|
if max_benefits and max_benefits > 0:
|
||||||
have_depends_on_lwp = False
|
have_depends_on_payment_days = False
|
||||||
per_day_amount_total = 0
|
per_day_amount_total = 0
|
||||||
payroll_period_days = get_payroll_period_days(on_date, on_date, employee)[0]
|
payroll_period_days = get_payroll_period_days(on_date, on_date, employee)[0]
|
||||||
payroll_period_obj = frappe.get_doc("Payroll Period", payroll_period)
|
payroll_period_obj = frappe.get_doc("Payroll Period", payroll_period)
|
||||||
@ -122,22 +122,22 @@ def get_max_benefits_remaining(employee, on_date, payroll_period):
|
|||||||
prev_sal_slip_flexi_total = get_sal_slip_total_benefit_given(employee, payroll_period_obj)
|
prev_sal_slip_flexi_total = get_sal_slip_total_benefit_given(employee, payroll_period_obj)
|
||||||
|
|
||||||
if prev_sal_slip_flexi_total > 0:
|
if prev_sal_slip_flexi_total > 0:
|
||||||
# Check salary structure hold depends_on_lwp component
|
# Check salary structure hold depends_on_payment_days component
|
||||||
# If yes then find the amount per day of each component and find the sum
|
# If yes then find the amount per day of each component and find the sum
|
||||||
sal_struct_name = get_assigned_salary_structure(employee, on_date)
|
sal_struct_name = get_assigned_salary_structure(employee, on_date)
|
||||||
if sal_struct_name:
|
if sal_struct_name:
|
||||||
sal_struct = frappe.get_doc("Salary Structure", sal_struct_name)
|
sal_struct = frappe.get_doc("Salary Structure", sal_struct_name)
|
||||||
for sal_struct_row in sal_struct.get("earnings"):
|
for sal_struct_row in sal_struct.get("earnings"):
|
||||||
salary_component = frappe.get_doc("Salary Component", sal_struct_row.salary_component)
|
salary_component = frappe.get_doc("Salary Component", sal_struct_row.salary_component)
|
||||||
if salary_component.depends_on_lwp == 1 and salary_component.pay_against_benefit_claim != 1:
|
if salary_component.depends_on_payment_days == 1 and salary_component.pay_against_benefit_claim != 1:
|
||||||
have_depends_on_lwp = True
|
have_depends_on_payment_days = True
|
||||||
benefit_amount = get_benefit_pro_rata_ratio_amount(sal_struct, salary_component.max_benefit_amount)
|
benefit_amount = get_benefit_pro_rata_ratio_amount(sal_struct, salary_component.max_benefit_amount)
|
||||||
amount_per_day = benefit_amount / payroll_period_days
|
amount_per_day = benefit_amount / payroll_period_days
|
||||||
per_day_amount_total += amount_per_day
|
per_day_amount_total += amount_per_day
|
||||||
|
|
||||||
# Then the sum multiply with the no of lwp in that period
|
# Then the sum multiply with the no of lwp in that period
|
||||||
# Include that amount to the prev_sal_slip_flexi_total to get the actual
|
# Include that amount to the prev_sal_slip_flexi_total to get the actual
|
||||||
if have_depends_on_lwp and per_day_amount_total > 0:
|
if have_depends_on_payment_days and per_day_amount_total > 0:
|
||||||
holidays = get_holidays_for_employee(employee, payroll_period_obj.start_date, on_date)
|
holidays = get_holidays_for_employee(employee, payroll_period_obj.start_date, on_date)
|
||||||
working_days = date_diff(on_date, payroll_period_obj.start_date) + 1
|
working_days = date_diff(on_date, payroll_period_obj.start_date) + 1
|
||||||
leave_days = calculate_lwp(employee, payroll_period_obj.start_date, holidays, working_days)
|
leave_days = calculate_lwp(employee, payroll_period_obj.start_date, holidays, working_days)
|
||||||
@ -185,7 +185,7 @@ def get_benefit_component_amount(employee, start_date, end_date, struct_row, sal
|
|||||||
'payroll_period': payroll_period
|
'payroll_period': payroll_period
|
||||||
})
|
})
|
||||||
|
|
||||||
if frappe.db.get_value("Salary Component", struct_row.salary_component, "depends_on_lwp") != 1:
|
if frappe.db.get_value("Salary Component", struct_row.salary_component, "depends_on_payment_days") != 1:
|
||||||
if frequency == "Monthly" and actual_payroll_days in range(360, 370):
|
if frequency == "Monthly" and actual_payroll_days in range(360, 370):
|
||||||
period_length = 1
|
period_length = 1
|
||||||
period_factor = 12
|
period_factor = 12
|
||||||
|
@ -170,7 +170,7 @@ def get_last_payroll_period_benefits(employee, sal_slip_start_date, sal_slip_end
|
|||||||
amount += current_claimed_amount
|
amount += current_claimed_amount
|
||||||
struct_row = {}
|
struct_row = {}
|
||||||
salary_components_dict = {}
|
salary_components_dict = {}
|
||||||
struct_row['depends_on_lwp'] = salary_component.depends_on_lwp
|
struct_row['depends_on_payment_days'] = salary_component.depends_on_payment_days
|
||||||
struct_row['salary_component'] = salary_component.name
|
struct_row['salary_component'] = salary_component.name
|
||||||
struct_row['abbr'] = salary_component.salary_component_abbr
|
struct_row['abbr'] = salary_component.salary_component_abbr
|
||||||
struct_row['do_not_include_in_total'] = salary_component.do_not_include_in_total
|
struct_row['do_not_include_in_total'] = salary_component.do_not_include_in_total
|
||||||
|
@ -75,5 +75,5 @@ var set_value_for_condition_and_formula = function(frm) {
|
|||||||
frm.set_value("amount_based_on_formula", 0);
|
frm.set_value("amount_based_on_formula", 0);
|
||||||
frm.set_value("statistical_component", 0);
|
frm.set_value("statistical_component", 0);
|
||||||
frm.set_value("do_not_include_in_total", 0);
|
frm.set_value("do_not_include_in_total", 0);
|
||||||
frm.set_value("depends_on_lwp", 0);
|
frm.set_value("depends_on_payment_days", 0);
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_events_in_timeline": 0,
|
||||||
"allow_guest_to_view": 0,
|
"allow_guest_to_view": 0,
|
||||||
"allow_import": 1,
|
"allow_import": 1,
|
||||||
"allow_rename": 1,
|
"allow_rename": 1,
|
||||||
@ -19,6 +20,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "salary_component",
|
"fieldname": "salary_component",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -51,6 +53,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "salary_component_abbr",
|
"fieldname": "salary_component_abbr",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -85,6 +88,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "type",
|
"fieldname": "type",
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Select",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -119,6 +123,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.is_flexible_benefit != 1",
|
"depends_on": "eval:doc.is_flexible_benefit != 1",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "is_additional_component",
|
"fieldname": "is_additional_component",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -153,6 +158,7 @@
|
|||||||
"columns": 0,
|
"columns": 0,
|
||||||
"default": "1",
|
"default": "1",
|
||||||
"depends_on": "eval:doc.type == \"Earning\"",
|
"depends_on": "eval:doc.type == \"Earning\"",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "is_tax_applicable",
|
"fieldname": "is_tax_applicable",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -186,6 +192,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"default": "1",
|
"default": "1",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "is_payable",
|
"fieldname": "is_payable",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -218,7 +225,9 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"fieldname": "depends_on_lwp",
|
"default": "1",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
|
"fieldname": "depends_on_payment_days",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
@ -227,7 +236,7 @@
|
|||||||
"in_global_search": 0,
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Depends on Leave Without Pay",
|
"label": "Depends on Payment Days",
|
||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
@ -250,6 +259,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "do_not_include_in_total",
|
"fieldname": "do_not_include_in_total",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -282,6 +292,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "column_break_4",
|
"fieldname": "column_break_4",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -313,6 +324,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "disabled",
|
"fieldname": "disabled",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -345,6 +357,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "description",
|
"fieldname": "description",
|
||||||
"fieldtype": "Small Text",
|
"fieldtype": "Small Text",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -378,6 +391,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"description": "If selected, the value specified or calculated in this component will not contribute to the earnings or deductions. However, it's value can be referenced by other components that can be added or deducted. ",
|
"description": "If selected, the value specified or calculated in this component will not contribute to the earnings or deductions. However, it's value can be referenced by other components that can be added or deducted. ",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "statistical_component",
|
"fieldname": "statistical_component",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -411,6 +425,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.type==\"Earning\" && doc.is_additional_component != 1 && doc.statistical_component!=1",
|
"depends_on": "eval:doc.type==\"Earning\" && doc.is_additional_component != 1 && doc.statistical_component!=1",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "flexible_benefits",
|
"fieldname": "flexible_benefits",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -444,6 +459,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.is_additional_component != 1",
|
"depends_on": "eval:doc.is_additional_component != 1",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "is_flexible_benefit",
|
"fieldname": "is_flexible_benefit",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -477,6 +493,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "is_flexible_benefit",
|
"depends_on": "is_flexible_benefit",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "max_benefit_amount",
|
"fieldname": "max_benefit_amount",
|
||||||
"fieldtype": "Currency",
|
"fieldtype": "Currency",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -509,6 +526,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "column_break_9",
|
"fieldname": "column_break_9",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -541,6 +559,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "is_flexible_benefit",
|
"depends_on": "is_flexible_benefit",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "pay_against_benefit_claim",
|
"fieldname": "pay_against_benefit_claim",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -574,6 +593,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.is_flexible_benefit == 1 & doc.create_separate_payment_entry_against_benefit_claim !=1",
|
"depends_on": "eval:doc.is_flexible_benefit == 1 & doc.create_separate_payment_entry_against_benefit_claim !=1",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "only_tax_impact",
|
"fieldname": "only_tax_impact",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -607,6 +627,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.is_flexible_benefit == 1 & doc.only_tax_impact !=1",
|
"depends_on": "eval:doc.is_flexible_benefit == 1 & doc.only_tax_impact !=1",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "create_separate_payment_entry_against_benefit_claim",
|
"fieldname": "create_separate_payment_entry_against_benefit_claim",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -640,6 +661,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.type=='Deduction'",
|
"depends_on": "eval:doc.type=='Deduction'",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "section_break_11",
|
"fieldname": "section_break_11",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -671,6 +693,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "variable_based_on_taxable_salary",
|
"fieldname": "variable_based_on_taxable_salary",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -704,6 +727,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.statistical_component != 1",
|
"depends_on": "eval:doc.statistical_component != 1",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "section_break_5",
|
"fieldname": "section_break_5",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -736,6 +760,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "accounts",
|
"fieldname": "accounts",
|
||||||
"fieldtype": "Table",
|
"fieldtype": "Table",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -771,6 +796,7 @@
|
|||||||
"collapsible_depends_on": "",
|
"collapsible_depends_on": "",
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.is_flexible_benefit != 1 && doc.variable_based_on_taxable_salary != 1",
|
"depends_on": "eval:doc.is_flexible_benefit != 1 && doc.variable_based_on_taxable_salary != 1",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "condition_and_formula",
|
"fieldname": "condition_and_formula",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -803,6 +829,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "condition",
|
"fieldname": "condition",
|
||||||
"fieldtype": "Code",
|
"fieldtype": "Code",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -836,6 +863,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"default": "",
|
"default": "",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "amount_based_on_formula",
|
"fieldname": "amount_based_on_formula",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -869,6 +897,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.amount_based_on_formula!==0",
|
"depends_on": "eval:doc.amount_based_on_formula!==0",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "formula",
|
"fieldname": "formula",
|
||||||
"fieldtype": "Code",
|
"fieldtype": "Code",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -902,6 +931,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.amount_based_on_formula!==1",
|
"depends_on": "eval:doc.amount_based_on_formula!==1",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "amount",
|
"fieldname": "amount",
|
||||||
"fieldtype": "Currency",
|
"fieldtype": "Currency",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -934,6 +964,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "column_break_28",
|
"fieldname": "column_break_28",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -965,6 +996,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "help",
|
"fieldname": "help",
|
||||||
"fieldtype": "HTML",
|
"fieldtype": "HTML",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -1003,7 +1035,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-09-20 16:44:58.876044",
|
"modified": "2019-04-16 19:08:55.323567",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Salary Component",
|
"name": "Salary Component",
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "salary_component",
|
"fieldname": "salary_component",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -55,6 +56,7 @@
|
|||||||
"default": "",
|
"default": "",
|
||||||
"depends_on": "eval:doc.parenttype=='Salary Structure'",
|
"depends_on": "eval:doc.parenttype=='Salary Structure'",
|
||||||
"fetch_from": "salary_component.salary_component_abbr",
|
"fetch_from": "salary_component.salary_component_abbr",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "abbr",
|
"fieldname": "abbr",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -88,6 +90,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "column_break_3",
|
"fieldname": "column_break_3",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -121,6 +124,7 @@
|
|||||||
"columns": 0,
|
"columns": 0,
|
||||||
"description": "If selected, the value specified or calculated in this component will not contribute to the earnings or deductions. However, it's value can be referenced by other components that can be added or deducted. ",
|
"description": "If selected, the value specified or calculated in this component will not contribute to the earnings or deductions. However, it's value can be referenced by other components that can be added or deducted. ",
|
||||||
"fetch_from": "salary_component.statistical_component",
|
"fetch_from": "salary_component.statistical_component",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "statistical_component",
|
"fieldname": "statistical_component",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -154,6 +158,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"fetch_from": "salary_component.is_tax_applicable",
|
"fetch_from": "salary_component.is_tax_applicable",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "is_tax_applicable",
|
"fieldname": "is_tax_applicable",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -187,6 +192,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"fetch_from": "salary_component.is_flexible_benefit",
|
"fetch_from": "salary_component.is_flexible_benefit",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "is_flexible_benefit",
|
"fieldname": "is_flexible_benefit",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -221,6 +227,7 @@
|
|||||||
"columns": 0,
|
"columns": 0,
|
||||||
"default": "",
|
"default": "",
|
||||||
"fetch_from": "salary_component.is_additional_component",
|
"fetch_from": "salary_component.is_additional_component",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "is_additional_component",
|
"fieldname": "is_additional_component",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 1,
|
"hidden": 1,
|
||||||
@ -255,6 +262,7 @@
|
|||||||
"columns": 0,
|
"columns": 0,
|
||||||
"default": "",
|
"default": "",
|
||||||
"fetch_from": "salary_component.variable_based_on_taxable_salary",
|
"fetch_from": "salary_component.variable_based_on_taxable_salary",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "variable_based_on_taxable_salary",
|
"fieldname": "variable_based_on_taxable_salary",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -288,8 +296,9 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "",
|
"depends_on": "",
|
||||||
"fetch_from": "salary_component.depends_on_lwp",
|
"fetch_from": "salary_component.depends_on_payment_days",
|
||||||
"fieldname": "depends_on_lwp",
|
"fetch_if_empty": 0,
|
||||||
|
"fieldname": "depends_on_payment_days",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
@ -298,7 +307,7 @@
|
|||||||
"in_global_search": 0,
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Depends on Leave Without Pay",
|
"label": "Depends on Payment Days",
|
||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
@ -322,6 +331,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.is_flexible_benefit != 1",
|
"depends_on": "eval:doc.is_flexible_benefit != 1",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "section_break_2",
|
"fieldname": "section_break_2",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -354,6 +364,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.parenttype=='Salary Structure'",
|
"depends_on": "eval:doc.parenttype=='Salary Structure'",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "condition",
|
"fieldname": "condition",
|
||||||
"fieldtype": "Code",
|
"fieldtype": "Code",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -389,6 +400,7 @@
|
|||||||
"default": "0",
|
"default": "0",
|
||||||
"depends_on": "eval:doc.parenttype=='Salary Structure'",
|
"depends_on": "eval:doc.parenttype=='Salary Structure'",
|
||||||
"fetch_from": "",
|
"fetch_from": "",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "amount_based_on_formula",
|
"fieldname": "amount_based_on_formula",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -425,6 +437,7 @@
|
|||||||
"default": "",
|
"default": "",
|
||||||
"depends_on": "eval:doc.amount_based_on_formula!==0 && doc.parenttype==='Salary Structure'",
|
"depends_on": "eval:doc.amount_based_on_formula!==0 && doc.parenttype==='Salary Structure'",
|
||||||
"description": "",
|
"description": "",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "formula",
|
"fieldname": "formula",
|
||||||
"fieldtype": "Code",
|
"fieldtype": "Code",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -458,6 +471,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.amount_based_on_formula!==1 || doc.parenttype==='Salary Slip'",
|
"depends_on": "eval:doc.amount_based_on_formula!==1 || doc.parenttype==='Salary Slip'",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "amount",
|
"fieldname": "amount",
|
||||||
"fieldtype": "Currency",
|
"fieldtype": "Currency",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -491,6 +505,7 @@
|
|||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "do_not_include_in_total",
|
"fieldname": "do_not_include_in_total",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -524,6 +539,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.parenttype=='Salary Structure'",
|
"depends_on": "eval:doc.parenttype=='Salary Structure'",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "default_amount",
|
"fieldname": "default_amount",
|
||||||
"fieldtype": "Currency",
|
"fieldtype": "Currency",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -558,6 +574,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.parenttype=='Salary Slip' && doc.parentfield=='deductions' && doc.variable_based_on_taxable_salary == 1",
|
"depends_on": "eval:doc.parenttype=='Salary Slip' && doc.parentfield=='deductions' && doc.variable_based_on_taxable_salary == 1",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "tax_on_flexible_benefit",
|
"fieldname": "tax_on_flexible_benefit",
|
||||||
"fieldtype": "Currency",
|
"fieldtype": "Currency",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -591,6 +608,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.parenttype=='Salary Slip' && doc.parentfield=='deductions' && doc.variable_based_on_taxable_salary == 1",
|
"depends_on": "eval:doc.parenttype=='Salary Slip' && doc.parentfield=='deductions' && doc.variable_based_on_taxable_salary == 1",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "tax_on_additional_salary",
|
"fieldname": "tax_on_additional_salary",
|
||||||
"fieldtype": "Currency",
|
"fieldtype": "Currency",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -624,6 +642,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.parenttype=='Salary Structure'",
|
"depends_on": "eval:doc.parenttype=='Salary Structure'",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "section_break_11",
|
"fieldname": "section_break_11",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -656,6 +675,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"depends_on": "eval:doc.parenttype=='Salary Structure'",
|
"depends_on": "eval:doc.parenttype=='Salary Structure'",
|
||||||
|
"fetch_if_empty": 0,
|
||||||
"fieldname": "condition_and_formula_help",
|
"fieldname": "condition_and_formula_help",
|
||||||
"fieldtype": "HTML",
|
"fieldtype": "HTML",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
@ -693,7 +713,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2019-02-04 14:41:56.030991",
|
"modified": "2019-04-16 19:09:31.726597",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Salary Detail",
|
"name": "Salary Detail",
|
||||||
|
@ -132,9 +132,6 @@ var get_emp_and_leave_details = function(doc, dt, dn) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.cscript.employee = function(doc,dt,dn){
|
|
||||||
get_emp_and_leave_details(doc, dt, dn);
|
|
||||||
}
|
|
||||||
|
|
||||||
cur_frm.cscript.leave_without_pay = function(doc,dt,dn){
|
cur_frm.cscript.leave_without_pay = function(doc,dt,dn){
|
||||||
if (doc.employee && doc.start_date && doc.end_date) {
|
if (doc.employee && doc.start_date && doc.end_date) {
|
||||||
@ -160,7 +157,7 @@ cur_frm.cscript.amount = function(doc,dt,dn){
|
|||||||
calculate_all(doc, dt, dn);
|
calculate_all(doc, dt, dn);
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.cscript.depends_on_lwp = function(doc,dt,dn){
|
cur_frm.cscript.depends_on_payment_days = function(doc,dt,dn){
|
||||||
calculate_earning_total(doc, dt, dn, true);
|
calculate_earning_total(doc, dt, dn, true);
|
||||||
calculate_ded_total(doc, dt, dn, true);
|
calculate_ded_total(doc, dt, dn, true);
|
||||||
calculate_net_pay(doc, dt, dn);
|
calculate_net_pay(doc, dt, dn);
|
||||||
@ -174,7 +171,7 @@ var calculate_earning_total = function(doc, dt, dn, reset_amount) {
|
|||||||
var tbl = doc.earnings || [];
|
var tbl = doc.earnings || [];
|
||||||
var total_earn = 0;
|
var total_earn = 0;
|
||||||
for(var i = 0; i < tbl.length; i++){
|
for(var i = 0; i < tbl.length; i++){
|
||||||
if(cint(tbl[i].depends_on_lwp) == 1) {
|
if(cint(tbl[i].depends_on_payment_days) == 1) {
|
||||||
tbl[i].amount = Math.round(tbl[i].default_amount)*(flt(doc.payment_days) /
|
tbl[i].amount = Math.round(tbl[i].default_amount)*(flt(doc.payment_days) /
|
||||||
cint(doc.total_working_days)*100)/100;
|
cint(doc.total_working_days)*100)/100;
|
||||||
} else if(reset_amount && tbl[i].default_amount) {
|
} else if(reset_amount && tbl[i].default_amount) {
|
||||||
@ -196,7 +193,7 @@ var calculate_ded_total = function(doc, dt, dn, reset_amount) {
|
|||||||
var tbl = doc.deductions || [];
|
var tbl = doc.deductions || [];
|
||||||
var total_ded = 0;
|
var total_ded = 0;
|
||||||
for(var i = 0; i < tbl.length; i++){
|
for(var i = 0; i < tbl.length; i++){
|
||||||
if(cint(tbl[i].depends_on_lwp) == 1) {
|
if(cint(tbl[i].depends_on_payment_days) == 1) {
|
||||||
tbl[i].amount = Math.round(tbl[i].default_amount)*(flt(doc.payment_days)/cint(doc.total_working_days)*100)/100;
|
tbl[i].amount = Math.round(tbl[i].default_amount)*(flt(doc.payment_days)/cint(doc.total_working_days)*100)/100;
|
||||||
} else if(reset_amount && tbl[i].default_amount) {
|
} else if(reset_amount && tbl[i].default_amount) {
|
||||||
tbl[i].amount = tbl[i].default_amount;
|
tbl[i].amount = tbl[i].default_amount;
|
||||||
@ -209,16 +206,12 @@ var calculate_ded_total = function(doc, dt, dn, reset_amount) {
|
|||||||
refresh_many(['deductions', 'total_deduction']);
|
refresh_many(['deductions', 'total_deduction']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate net payable amount
|
|
||||||
// ------------------------------------------------------------------------
|
|
||||||
var calculate_net_pay = function(doc, dt, dn) {
|
var calculate_net_pay = function(doc, dt, dn) {
|
||||||
doc.net_pay = flt(doc.gross_pay) - flt(doc.total_deduction);
|
doc.net_pay = flt(doc.gross_pay) - flt(doc.total_deduction);
|
||||||
doc.rounded_total = Math.round(doc.net_pay);
|
doc.rounded_total = Math.round(doc.net_pay);
|
||||||
refresh_many(['net_pay', 'rounded_total']);
|
refresh_many(['net_pay', 'rounded_total']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate
|
|
||||||
// ------------------------------------------------------------------------
|
|
||||||
cur_frm.cscript.validate = function(doc, dt, dn) {
|
cur_frm.cscript.validate = function(doc, dt, dn) {
|
||||||
calculate_all(doc, dt, dn);
|
calculate_all(doc, dt, dn);
|
||||||
}
|
}
|
||||||
|
@ -131,11 +131,12 @@ class SalarySlip(TransactionBase):
|
|||||||
for d in self.get(key):
|
for d in self.get(key):
|
||||||
if d.salary_component == struct_row.salary_component:
|
if d.salary_component == struct_row.salary_component:
|
||||||
component_row = d
|
component_row = d
|
||||||
|
|
||||||
if not component_row:
|
if not component_row:
|
||||||
self.append(key, {
|
self.append(key, {
|
||||||
'amount': amount,
|
'amount': amount,
|
||||||
'default_amount': amount,
|
'default_amount': amount,
|
||||||
'depends_on_lwp' : struct_row.depends_on_lwp,
|
'depends_on_payment_days' : struct_row.depends_on_payment_days,
|
||||||
'salary_component' : struct_row.salary_component,
|
'salary_component' : struct_row.salary_component,
|
||||||
'abbr' : struct_row.abbr,
|
'abbr' : struct_row.abbr,
|
||||||
'do_not_include_in_total' : struct_row.do_not_include_in_total,
|
'do_not_include_in_total' : struct_row.do_not_include_in_total,
|
||||||
@ -147,12 +148,11 @@ class SalarySlip(TransactionBase):
|
|||||||
'tax_on_additional_salary': additional_tax
|
'tax_on_additional_salary': additional_tax
|
||||||
})
|
})
|
||||||
else:
|
else:
|
||||||
if overwrite:
|
if not overwrite:
|
||||||
component_row.default_amount = amount
|
amount += struct_row.get("default_amount", 0)
|
||||||
component_row.amount = amount
|
|
||||||
else:
|
component_row.default_amount = amount
|
||||||
component_row.default_amount += amount
|
component_row.amount = amount
|
||||||
component_row.amount = component_row.default_amount
|
|
||||||
|
|
||||||
component_row.tax_on_flexible_benefit = benefit_tax
|
component_row.tax_on_flexible_benefit = benefit_tax
|
||||||
component_row.tax_on_additional_salary = additional_tax
|
component_row.tax_on_additional_salary = additional_tax
|
||||||
@ -418,7 +418,7 @@ class SalarySlip(TransactionBase):
|
|||||||
|
|
||||||
for d in self.get(component_type):
|
for d in self.get(component_type):
|
||||||
if (self.salary_structure and
|
if (self.salary_structure and
|
||||||
cint(d.depends_on_lwp) and
|
cint(d.depends_on_payment_days) and
|
||||||
(not
|
(not
|
||||||
self.salary_slip_based_on_timesheet or
|
self.salary_slip_based_on_timesheet or
|
||||||
getdate(self.start_date) < joining_date or
|
getdate(self.start_date) < joining_date or
|
||||||
@ -431,7 +431,7 @@ class SalarySlip(TransactionBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
elif not self.payment_days and not self.salary_slip_based_on_timesheet and \
|
elif not self.payment_days and not self.salary_slip_based_on_timesheet and \
|
||||||
cint(d.depends_on_lwp):
|
cint(d.depends_on_payment_days):
|
||||||
d.amount = 0
|
d.amount = 0
|
||||||
elif not d.amount:
|
elif not d.amount:
|
||||||
d.amount = d.default_amount
|
d.amount = d.default_amount
|
||||||
@ -794,7 +794,7 @@ class SalarySlip(TransactionBase):
|
|||||||
component = frappe.get_doc("Salary Component", salary_component)
|
component = frappe.get_doc("Salary Component", salary_component)
|
||||||
# Data for update_component_row
|
# Data for update_component_row
|
||||||
struct_row = {}
|
struct_row = {}
|
||||||
struct_row['depends_on_lwp'] = component.depends_on_lwp
|
struct_row['depends_on_payment_days'] = component.depends_on_payment_days
|
||||||
struct_row['salary_component'] = component.name
|
struct_row['salary_component'] = component.name
|
||||||
struct_row['abbr'] = component.salary_component_abbr
|
struct_row['abbr'] = component.salary_component_abbr
|
||||||
struct_row['do_not_include_in_total'] = component.do_not_include_in_total
|
struct_row['do_not_include_in_total'] = component.do_not_include_in_total
|
||||||
|
@ -246,7 +246,7 @@ frappe.ui.form.on('Salary Detail', {
|
|||||||
frappe.model.set_value(cdt, cdn, 'amount', result.amount);
|
frappe.model.set_value(cdt, cdn, 'amount', result.amount);
|
||||||
}
|
}
|
||||||
frappe.model.set_value(cdt, cdn, 'statistical_component', result.statistical_component);
|
frappe.model.set_value(cdt, cdn, 'statistical_component', result.statistical_component);
|
||||||
frappe.model.set_value(cdt, cdn, 'depends_on_lwp', result.depends_on_lwp);
|
frappe.model.set_value(cdt, cdn, 'depends_on_payment_days', result.depends_on_payment_days);
|
||||||
frappe.model.set_value(cdt, cdn, 'do_not_include_in_total', result.do_not_include_in_total);
|
frappe.model.set_value(cdt, cdn, 'do_not_include_in_total', result.do_not_include_in_total);
|
||||||
frappe.model.set_value(cdt, cdn, 'variable_based_on_taxable_salary', result.variable_based_on_taxable_salary);
|
frappe.model.set_value(cdt, cdn, 'variable_based_on_taxable_salary', result.variable_based_on_taxable_salary);
|
||||||
frappe.model.set_value(cdt, cdn, 'is_tax_applicable', result.is_tax_applicable);
|
frappe.model.set_value(cdt, cdn, 'is_tax_applicable', result.is_tax_applicable);
|
||||||
|
@ -18,7 +18,7 @@ class SalaryStructure(Document):
|
|||||||
self.validate_max_benefits_with_flexi()
|
self.validate_max_benefits_with_flexi()
|
||||||
|
|
||||||
def set_missing_values(self):
|
def set_missing_values(self):
|
||||||
overwritten_fields = ["depends_on_lwp", "variable_based_on_taxable_salary", "is_tax_applicable", "is_flexible_benefit"]
|
overwritten_fields = ["depends_on_payment_days", "variable_based_on_taxable_salary", "is_tax_applicable", "is_flexible_benefit"]
|
||||||
overwritten_fields_if_missing = ["amount_based_on_formula", "formula", "amount"]
|
overwritten_fields_if_missing = ["amount_based_on_formula", "formula", "amount"]
|
||||||
for table in ["earnings", "deductions"]:
|
for table in ["earnings", "deductions"]:
|
||||||
for d in self.get(table):
|
for d in self.get(table):
|
||||||
@ -126,7 +126,7 @@ def create_salary_structures_assignment(employee, salary_structure, from_date, b
|
|||||||
|
|
||||||
def get_existing_assignments(employees, salary_structure,from_date):
|
def get_existing_assignments(employees, salary_structure,from_date):
|
||||||
salary_structures_assignments = frappe.db.sql_list("""
|
salary_structures_assignments = frappe.db.sql_list("""
|
||||||
select distinct employee from `tabSalary Structure Assignment`
|
select distinct employee from `tabSalary Structure Assignment`
|
||||||
where salary_structure=%s and employee in (%s)
|
where salary_structure=%s and employee in (%s)
|
||||||
and from_date=%s and docstatus=1
|
and from_date=%s and docstatus=1
|
||||||
""" % ('%s', ', '.join(['%s']*len(employees)),'%s'), [salary_structure] + employees+[from_date])
|
""" % ('%s', ', '.join(['%s']*len(employees)),'%s'), [salary_structure] + employees+[from_date])
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
{
|
{
|
||||||
"creation": "2016-07-07 12:38:32.447281",
|
"creation": "2016-07-07 12:38:32.447281",
|
||||||
"custom_format": 0,
|
"custom_format": 0,
|
||||||
"disabled": 0,
|
"disabled": 0,
|
||||||
"doc_type": "Salary Slip",
|
"doc_type": "Salary Slip",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"doctype": "Print Format",
|
"doctype": "Print Format",
|
||||||
"font": "Default",
|
"font": "Default",
|
||||||
"format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"HTML\", \"options\": \" <h3 style=\\\"text-align: right;\\\">{{doc.name}}</h3><div><hr></div> \"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\"}, {\"print_hide\": 0, \"fieldname\": \"department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_hours\"}, {\"print_hide\": 0, \"fieldname\": \"hour_rate\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"time_sheet\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"working_hours\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"timesheets\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_lwp\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_lwp\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\"}]",
|
"format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"HTML\", \"options\": \" <h3 style=\\\"text-align: right;\\\">{{doc.name}}</h3><div><hr></div> \"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\"}, {\"print_hide\": 0, \"fieldname\": \"department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_hours\"}, {\"print_hide\": 0, \"fieldname\": \"hour_rate\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"time_sheet\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"working_hours\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"timesheets\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\"}]",
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"modified": "2016-08-21 21:02:59.896033",
|
"modified": "2016-08-21 21:02:59.896033",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"name": "Salary Slip based on Timesheet",
|
"name": "Salary Slip based on Timesheet",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"print_format_builder": 1,
|
"print_format_builder": 1,
|
||||||
"print_format_type": "Server",
|
"print_format_type": "Server",
|
||||||
"standard": "Yes"
|
"standard": "Yes"
|
||||||
}
|
}
|
@ -1,22 +1,22 @@
|
|||||||
{
|
{
|
||||||
"align_labels_right": 0,
|
"align_labels_right": 0,
|
||||||
"creation": "2016-07-07 11:45:14.872204",
|
"creation": "2016-07-07 11:45:14.872204",
|
||||||
"custom_format": 0,
|
"custom_format": 0,
|
||||||
"disabled": 0,
|
"disabled": 0,
|
||||||
"doc_type": "Salary Slip",
|
"doc_type": "Salary Slip",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"doctype": "Print Format",
|
"doctype": "Print Format",
|
||||||
"font": "Default",
|
"font": "Default",
|
||||||
"format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"Custom HTML\", \"options\": \" <h3 style=\\\"text-align: right;\\\"><span style=\\\"line-height: 1.42857;\\\">{{doc.name}}</span></h3>\\n<div>\\n <hr style=\\\"text-align: center;\\\">\\n</div> \"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\", \"label\": \"Employee\"}, {\"print_hide\": 0, \"fieldname\": \"company\", \"label\": \"Company\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\", \"label\": \"Employee Name\"}, {\"print_hide\": 0, \"fieldname\": \"department\", \"label\": \"Department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\", \"label\": \"Designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\", \"label\": \"Branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\", \"label\": \"Start Date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\", \"label\": \"End Date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_days\", \"label\": \"Working Days\"}, {\"print_hide\": 0, \"fieldname\": \"leave_without_pay\", \"label\": \"Leave Without Pay\"}, {\"print_hide\": 0, \"fieldname\": \"payment_days\", \"label\": \"Payment Days\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\", \"label\": \"Earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_lwp\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\", \"label\": \"Deductions\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\", \"label\": \"Gross Pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\", \"label\": \"Total Deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\", \"label\": \"Net Pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\", \"label\": \"Rounded Total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\", \"label\": \"Total in words\"}]",
|
"format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"Custom HTML\", \"options\": \" <h3 style=\\\"text-align: right;\\\"><span style=\\\"line-height: 1.42857;\\\">{{doc.name}}</span></h3>\\n<div>\\n <hr style=\\\"text-align: center;\\\">\\n</div> \"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\", \"label\": \"Employee\"}, {\"print_hide\": 0, \"fieldname\": \"company\", \"label\": \"Company\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\", \"label\": \"Employee Name\"}, {\"print_hide\": 0, \"fieldname\": \"department\", \"label\": \"Department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\", \"label\": \"Designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\", \"label\": \"Branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\", \"label\": \"Start Date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\", \"label\": \"End Date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_days\", \"label\": \"Working Days\"}, {\"print_hide\": 0, \"fieldname\": \"leave_without_pay\", \"label\": \"Leave Without Pay\"}, {\"print_hide\": 0, \"fieldname\": \"payment_days\", \"label\": \"Payment Days\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\", \"label\": \"Earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\", \"label\": \"Deductions\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\", \"label\": \"Gross Pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\", \"label\": \"Total Deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\", \"label\": \"Net Pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\", \"label\": \"Rounded Total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\", \"label\": \"Total in words\"}]",
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"line_breaks": 0,
|
"line_breaks": 0,
|
||||||
"modified": "2018-07-24 19:31:39.040701",
|
"modified": "2018-07-24 19:31:39.040701",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Salary Slip Standard",
|
"name": "Salary Slip Standard",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"print_format_builder": 1,
|
"print_format_builder": 1,
|
||||||
"print_format_type": "Server",
|
"print_format_type": "Server",
|
||||||
"show_section_headings": 0,
|
"show_section_headings": 0,
|
||||||
"standard": "Yes"
|
"standard": "Yes"
|
||||||
}
|
}
|
@ -597,3 +597,5 @@ erpnext.patches.v10_0.item_barcode_childtable_migrate # 16-02-2019
|
|||||||
erpnext.patches.v12_0.move_item_tax_to_item_tax_template
|
erpnext.patches.v12_0.move_item_tax_to_item_tax_template
|
||||||
erpnext.patches.v11_1.set_variant_based_on
|
erpnext.patches.v11_1.set_variant_based_on
|
||||||
erpnext.patches.v11_1.woocommerce_set_creation_user
|
erpnext.patches.v11_1.woocommerce_set_creation_user
|
||||||
|
erpnext.patches.v11_1.set_salary_details_submittable
|
||||||
|
erpnext.patches.v11_1.rename_depends_on_lwp
|
||||||
|
13
erpnext/patches/v11_1/rename_depends_on_lwp.py
Normal file
13
erpnext/patches/v11_1/rename_depends_on_lwp.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||||
|
# License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
import frappe
|
||||||
|
from frappe import scrub
|
||||||
|
from frappe.model.utils.rename_field import rename_field
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
for doctype in ("Salary Component", "Salary Detail"):
|
||||||
|
if "depends_on_lwp" in frappe.db.get_table_columns(doctype):
|
||||||
|
frappe.reload_doc("hr", "doctype", scrub(doctype))
|
||||||
|
rename_field(doctype, "depends_on_lwp", "depends_on_payment_days")
|
9
erpnext/patches/v11_1/set_salary_details_submittable.py
Normal file
9
erpnext/patches/v11_1/set_salary_details_submittable.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
|
import frappe
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
frappe.db.sql("""
|
||||||
|
update `tabSalary Structure` ss, `tabSalary Detail` sd
|
||||||
|
set sd.docstatus=1
|
||||||
|
where ss.name=sd.parent and ss.docstatus=1 and sd.parenttype='Salary Structure'
|
||||||
|
""")
|
@ -5,79 +5,79 @@ from frappe.model.utils.rename_field import update_property_setters
|
|||||||
def execute():
|
def execute():
|
||||||
if not frappe.db.exists("DocType", "Salary Structure Earning"):
|
if not frappe.db.exists("DocType", "Salary Structure Earning"):
|
||||||
return
|
return
|
||||||
|
|
||||||
frappe.reload_doc("hr", "doctype", "salary_detail")
|
frappe.reload_doc("hr", "doctype", "salary_detail")
|
||||||
frappe.reload_doc("hr", "doctype", "salary_component")
|
frappe.reload_doc("hr", "doctype", "salary_component")
|
||||||
|
|
||||||
standard_cols = ["name", "creation", "modified", "owner", "modified_by", "parent", "parenttype", "parentfield", "idx"]
|
standard_cols = ["name", "creation", "modified", "owner", "modified_by", "parent", "parenttype", "parentfield", "idx"]
|
||||||
|
|
||||||
dt_cols = {
|
dt_cols = {
|
||||||
"Salary Structure Deduction": ["d_type", "d_modified_amt", "depend_on_lwp"],
|
"Salary Structure Deduction": ["d_type", "d_modified_amt", "depend_on_lwp"],
|
||||||
"Salary Structure Earning": ["e_type", "modified_value", "depend_on_lwp"],
|
"Salary Structure Earning": ["e_type", "modified_value", "depend_on_lwp"],
|
||||||
"Salary Slip Earning": ["e_type", "e_modified_amount", "e_depends_on_lwp", "e_amount"],
|
"Salary Slip Earning": ["e_type", "e_modified_amount", "e_depends_on_lwp", "e_amount"],
|
||||||
"Salary Slip Deduction": ["d_type", "d_modified_amount", "d_depends_on_lwp", "d_amount"],
|
"Salary Slip Deduction": ["d_type", "d_modified_amount", "d_depends_on_lwp", "d_amount"],
|
||||||
}
|
}
|
||||||
|
|
||||||
earning_type_exists = True if "earning_type" in frappe.db.get_table_columns("Salary Slip Earning") else False
|
earning_type_exists = True if "earning_type" in frappe.db.get_table_columns("Salary Slip Earning") else False
|
||||||
e_type_exists = True if "e_type" in frappe.db.get_table_columns("Salary Slip Earning") else False
|
e_type_exists = True if "e_type" in frappe.db.get_table_columns("Salary Slip Earning") else False
|
||||||
|
|
||||||
|
|
||||||
if e_type_exists and earning_type_exists:
|
if e_type_exists and earning_type_exists:
|
||||||
frappe.db.sql("""update `tabSalary Slip Earning`
|
frappe.db.sql("""update `tabSalary Slip Earning`
|
||||||
set e_type = earning_type, e_modified_amount = earning_amount
|
set e_type = earning_type, e_modified_amount = earning_amount
|
||||||
where e_type is null and earning_type is not null""")
|
where e_type is null and earning_type is not null""")
|
||||||
|
|
||||||
frappe.db.sql("""update `tabSalary Structure Earning` set e_type = earning_type
|
frappe.db.sql("""update `tabSalary Structure Earning` set e_type = earning_type
|
||||||
where e_type is null and earning_type is not null""")
|
where e_type is null and earning_type is not null""")
|
||||||
|
|
||||||
frappe.db.sql("""update `tabSalary Slip Deduction` set
|
frappe.db.sql("""update `tabSalary Slip Deduction` set
|
||||||
d_type = deduction_type, d_modified_amount = deduction_amount
|
d_type = deduction_type, d_modified_amount = deduction_amount
|
||||||
where d_type is null and deduction_type is not null""")
|
where d_type is null and deduction_type is not null""")
|
||||||
|
|
||||||
frappe.db.sql("""update `tabSalary Structure Deduction` set d_type = deduction_type
|
frappe.db.sql("""update `tabSalary Structure Deduction` set d_type = deduction_type
|
||||||
where d_type is null and deduction_type is not null""")
|
where d_type is null and deduction_type is not null""")
|
||||||
|
|
||||||
if earning_type_exists and not e_type_exists:
|
if earning_type_exists and not e_type_exists:
|
||||||
for val in dt_cols.values():
|
for val in dt_cols.values():
|
||||||
if val[0] == "e_type":
|
if val[0] == "e_type":
|
||||||
val[0] = "earning_type"
|
val[0] = "earning_type"
|
||||||
|
|
||||||
if val[0] == "d_type":
|
if val[0] == "d_type":
|
||||||
val[0] = "deduction_type"
|
val[0] = "deduction_type"
|
||||||
|
|
||||||
if val[1] == "e_modified_amount":
|
if val[1] == "e_modified_amount":
|
||||||
val[1] ="earning_amount"
|
val[1] ="earning_amount"
|
||||||
|
|
||||||
if val[1] == "d_modified_amount":
|
if val[1] == "d_modified_amount":
|
||||||
val[1] ="deduction_amount"
|
val[1] ="deduction_amount"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
target_cols = standard_cols + ["salary_component", "amount", "depends_on_lwp", "default_amount"]
|
|
||||||
target_cols = "`" + "`, `".join(target_cols) + "`"
|
target_cols = standard_cols + ["salary_component", "amount", "depends_on_payment_days", "default_amount"]
|
||||||
|
target_cols = "`" + "`, `".join(target_cols) + "`"
|
||||||
for doctype, cols in dt_cols.items():
|
|
||||||
|
for doctype, cols in dt_cols.items():
|
||||||
source_cols = "`" + "`, `".join(standard_cols + cols) + "`"
|
source_cols = "`" + "`, `".join(standard_cols + cols) + "`"
|
||||||
if len(cols) == 3:
|
if len(cols) == 3:
|
||||||
source_cols += ", 0"
|
source_cols += ", 0"
|
||||||
|
|
||||||
|
|
||||||
frappe.db.sql("""INSERT INTO `tabSalary Detail` ({0}) SELECT {1} FROM `tab{2}`"""
|
frappe.db.sql("""INSERT INTO `tabSalary Detail` ({0}) SELECT {1} FROM `tab{2}`"""
|
||||||
.format(target_cols, source_cols, doctype))
|
.format(target_cols, source_cols, doctype))
|
||||||
|
|
||||||
|
|
||||||
dt_cols_de = {
|
dt_cols_de = {
|
||||||
"Deduction Type": ["deduction_name", "description"],
|
"Deduction Type": ["deduction_name", "description"],
|
||||||
"Earning Type": ["earning_name", "description"],
|
"Earning Type": ["earning_name", "description"],
|
||||||
}
|
}
|
||||||
|
|
||||||
standard_cols_de = standard_cols
|
standard_cols_de = standard_cols
|
||||||
|
|
||||||
|
|
||||||
target_cols = standard_cols_de + ["salary_component", "description"]
|
target_cols = standard_cols_de + ["salary_component", "description"]
|
||||||
target_cols = "`" + "`, `".join(target_cols) + "`"
|
target_cols = "`" + "`, `".join(target_cols) + "`"
|
||||||
|
|
||||||
for doctype, cols in dt_cols_de.items():
|
for doctype, cols in dt_cols_de.items():
|
||||||
source_cols = "`" + "`, `".join(standard_cols_de + cols) + "`"
|
source_cols = "`" + "`, `".join(standard_cols_de + cols) + "`"
|
||||||
try:
|
try:
|
||||||
frappe.db.sql("""INSERT INTO `tabSalary Component` ({0}) SELECT {1} FROM `tab{2}`"""
|
frappe.db.sql("""INSERT INTO `tabSalary Component` ({0}) SELECT {1} FROM `tab{2}`"""
|
||||||
@ -85,10 +85,10 @@ def execute():
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
if e.args[0]==1062:
|
if e.args[0]==1062:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
update_customizations()
|
update_customizations()
|
||||||
|
|
||||||
for doctype in ["Salary Structure Deduction", "Salary Structure Earning", "Salary Slip Earning",
|
for doctype in ["Salary Structure Deduction", "Salary Structure Earning", "Salary Slip Earning",
|
||||||
"Salary Slip Deduction", "Deduction Type", "Earning Type"] :
|
"Salary Slip Deduction", "Deduction Type", "Earning Type"] :
|
||||||
frappe.delete_doc("DocType", doctype)
|
frappe.delete_doc("DocType", doctype)
|
||||||
|
|
||||||
@ -96,35 +96,35 @@ def execute():
|
|||||||
def update_customizations():
|
def update_customizations():
|
||||||
dt_cols = {
|
dt_cols = {
|
||||||
"Salary Structure Deduction": {
|
"Salary Structure Deduction": {
|
||||||
"d_type": "salary_component",
|
"d_type": "salary_component",
|
||||||
"deduction_type": "salary_component",
|
"deduction_type": "salary_component",
|
||||||
"d_modified_amt": "amount",
|
"d_modified_amt": "amount",
|
||||||
"depend_on_lwp": "depends_on_lwp"
|
"depend_on_lwp": "depends_on_payment_days"
|
||||||
},
|
},
|
||||||
"Salary Structure Earning": {
|
"Salary Structure Earning": {
|
||||||
"e_type": "salary_component",
|
"e_type": "salary_component",
|
||||||
"earning_type": "salary_component",
|
"earning_type": "salary_component",
|
||||||
"modified_value": "amount",
|
"modified_value": "amount",
|
||||||
"depend_on_lwp": "depends_on_lwp"
|
"depend_on_lwp": "depends_on_payment_days"
|
||||||
},
|
},
|
||||||
"Salary Slip Earning": {
|
"Salary Slip Earning": {
|
||||||
"e_type": "salary_component",
|
"e_type": "salary_component",
|
||||||
"earning_type": "salary_component",
|
"earning_type": "salary_component",
|
||||||
"e_modified_amount": "amount",
|
"e_modified_amount": "amount",
|
||||||
"e_amount" : "default_amount",
|
"e_amount" : "default_amount",
|
||||||
"e_depends_on_lwp": "depends_on_lwp"
|
"e_depends_on_lwp": "depends_on_payment_days"
|
||||||
},
|
},
|
||||||
"Salary Slip Deduction": {
|
"Salary Slip Deduction": {
|
||||||
"d_type": "salary_component",
|
"d_type": "salary_component",
|
||||||
"deduction_type": "salary_component",
|
"deduction_type": "salary_component",
|
||||||
"d_modified_amount": "amount",
|
"d_modified_amount": "amount",
|
||||||
"d_amount" : "default_amount",
|
"d_amount" : "default_amount",
|
||||||
"d_depends_on_lwp": "depends_on_lwp"
|
"d_depends_on_lwp": "depends_on_payment_days"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
update_property_setters_and_custom_fields("Salary Detail", dt_cols)
|
update_property_setters_and_custom_fields("Salary Detail", dt_cols)
|
||||||
|
|
||||||
dt_cols = {
|
dt_cols = {
|
||||||
"Earning Type": {
|
"Earning Type": {
|
||||||
"earning_name": "salary_component"
|
"earning_name": "salary_component"
|
||||||
@ -133,17 +133,17 @@ def update_customizations():
|
|||||||
"deduction_name": "salary_component"
|
"deduction_name": "salary_component"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
update_property_setters_and_custom_fields("Salary Component", dt_cols)
|
update_property_setters_and_custom_fields("Salary Component", dt_cols)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def update_property_setters_and_custom_fields(new_dt, dt_cols):
|
def update_property_setters_and_custom_fields(new_dt, dt_cols):
|
||||||
for doctype, cols in dt_cols.items():
|
for doctype, cols in dt_cols.items():
|
||||||
frappe.db.sql("update `tabProperty Setter` set doc_type = %s where doc_type=%s", (new_dt, doctype))
|
frappe.db.sql("update `tabProperty Setter` set doc_type = %s where doc_type=%s", (new_dt, doctype))
|
||||||
frappe.db.sql("update `tabCustom Field` set dt = %s where dt=%s", (new_dt, doctype))
|
frappe.db.sql("update `tabCustom Field` set dt = %s where dt=%s", (new_dt, doctype))
|
||||||
|
|
||||||
|
|
||||||
for old_fieldname, new_fieldname in cols.items():
|
for old_fieldname, new_fieldname in cols.items():
|
||||||
update_property_setters(new_dt, old_fieldname, new_fieldname)
|
update_property_setters(new_dt, old_fieldname, new_fieldname)
|
||||||
|
@ -33,7 +33,7 @@ frappe.ui.form.on("Communication", {
|
|||||||
|
|
||||||
make_lead_from_communication: (frm) => {
|
make_lead_from_communication: (frm) => {
|
||||||
return frappe.call({
|
return frappe.call({
|
||||||
method: "frappe.email.inbox.make_lead_from_communication",
|
method: "erpnext.crm.doctype.lead.lead.make_lead_from_communication",
|
||||||
args: {
|
args: {
|
||||||
communication: frm.doc.name
|
communication: frm.doc.name
|
||||||
},
|
},
|
||||||
@ -48,7 +48,7 @@ frappe.ui.form.on("Communication", {
|
|||||||
|
|
||||||
make_issue_from_communication: (frm) => {
|
make_issue_from_communication: (frm) => {
|
||||||
return frappe.call({
|
return frappe.call({
|
||||||
method: "frappe.email.inbox.make_issue_from_communication",
|
method: "erpnext.support.doctype.issue.issue.make_issue_from_communication",
|
||||||
args: {
|
args: {
|
||||||
communication: frm.doc.name
|
communication: frm.doc.name
|
||||||
},
|
},
|
||||||
@ -63,7 +63,7 @@ frappe.ui.form.on("Communication", {
|
|||||||
|
|
||||||
make_opportunity_from_communication: (frm) => {
|
make_opportunity_from_communication: (frm) => {
|
||||||
return frappe.call({
|
return frappe.call({
|
||||||
method: "frappe.email.inbox.make_opportunity_from_communication",
|
method: "erpnext.crm.doctype.opportunity.opportunity.make_opportunity_from_communication",
|
||||||
args: {
|
args: {
|
||||||
communication: frm.doc.name
|
communication: frm.doc.name
|
||||||
},
|
},
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<span class="text-muted">({%= __("Shipping") %})</span>{% } %}
|
<span class="text-muted">({%= __("Shipping") %})</span>{% } %}
|
||||||
|
|
||||||
<a href="#Form/Address/{%= encodeURIComponent(addr_list[i].name) %}"
|
<a href="#Form/Address/{%= encodeURIComponent(addr_list[i].name) %}"
|
||||||
class="btn btn-light btn-xs pull-right"
|
class="btn btn-default btn-xs pull-right"
|
||||||
style="margin-top:-3px; margin-right: -5px;">
|
style="margin-top:-3px; margin-right: -5px;">
|
||||||
{%= __("Edit") %}</a>
|
{%= __("Edit") %}</a>
|
||||||
</p>
|
</p>
|
||||||
@ -19,5 +19,5 @@
|
|||||||
{% if(!addr_list.length) { %}
|
{% if(!addr_list.length) { %}
|
||||||
<p class="text-muted small">{%= __("No address added yet.") %}</p>
|
<p class="text-muted small">{%= __("No address added yet.") %}</p>
|
||||||
{% } %}
|
{% } %}
|
||||||
<p><button class="btn btn-xs btn-light btn-address">{{ __("New Address") }}</button></p>
|
<p><button class="btn btn-xs btn-default btn-address">{{ __("New Address") }}</button></p>
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<span class="text-muted">– {%= contact_list[i].designation %}</span>
|
<span class="text-muted">– {%= contact_list[i].designation %}</span>
|
||||||
{% } %}
|
{% } %}
|
||||||
<a href="#Form/Contact/{%= encodeURIComponent(contact_list[i].name) %}"
|
<a href="#Form/Contact/{%= encodeURIComponent(contact_list[i].name) %}"
|
||||||
class="btn btn-xs btn-light pull-right"
|
class="btn btn-xs btn-default pull-right"
|
||||||
style="margin-top:-3px; margin-right: -5px;">
|
style="margin-top:-3px; margin-right: -5px;">
|
||||||
{%= __("Edit") %}</a>
|
{%= __("Edit") %}</a>
|
||||||
</p>
|
</p>
|
||||||
@ -33,6 +33,6 @@
|
|||||||
{% if(!contact_list.length) { %}
|
{% if(!contact_list.length) { %}
|
||||||
<p class="text-muted small">{%= __("No contacts added yet.") %}</p>
|
<p class="text-muted small">{%= __("No contacts added yet.") %}</p>
|
||||||
{% } %}
|
{% } %}
|
||||||
<p><button class="btn btn-xs btn-light btn-contact">
|
<p><button class="btn btn-xs btn-default btn-contact">
|
||||||
{{ __("New Contact") }}</button>
|
{{ __("New Contact") }}</button>
|
||||||
</p>
|
</p>
|
@ -227,12 +227,18 @@ class GSTR3BReport(Document):
|
|||||||
|
|
||||||
for d in inter_state_supply.get("Unregistered", []):
|
for d in inter_state_supply.get("Unregistered", []):
|
||||||
self.report_dict["inter_sup"]["unreg_details"].append(d)
|
self.report_dict["inter_sup"]["unreg_details"].append(d)
|
||||||
|
self.report_dict["sup_details"]["osup_det"]["txval"] += d["txval"]
|
||||||
|
self.report_dict["sup_details"]["osup_det"]["iamt"] += d["iamt"]
|
||||||
|
|
||||||
for d in inter_state_supply.get("Registered Composition", []):
|
for d in inter_state_supply.get("Registered Composition", []):
|
||||||
self.report_dict["inter_sup"]["comp_details"].append(d)
|
self.report_dict["inter_sup"]["comp_details"].append(d)
|
||||||
|
self.report_dict["sup_details"]["osup_det"]["txval"] += d["txval"]
|
||||||
|
self.report_dict["sup_details"]["osup_det"]["iamt"] += d["iamt"]
|
||||||
|
|
||||||
for d in inter_state_supply.get("UIN Holders", []):
|
for d in inter_state_supply.get("UIN Holders", []):
|
||||||
self.report_dict["inter_sup"]["uin_details"].append(d)
|
self.report_dict["inter_sup"]["uin_details"].append(d)
|
||||||
|
self.report_dict["sup_details"]["osup_det"]["txval"] += d["txval"]
|
||||||
|
self.report_dict["sup_details"]["osup_det"]["iamt"] += d["iamt"]
|
||||||
|
|
||||||
def get_total_taxable_value(self, doctype, reverse_charge):
|
def get_total_taxable_value(self, doctype, reverse_charge):
|
||||||
|
|
||||||
@ -296,7 +302,7 @@ class GSTR3BReport(Document):
|
|||||||
|
|
||||||
inter_state_supply_details[d.gst_category].append({
|
inter_state_supply_details[d.gst_category].append({
|
||||||
"pos": get_state_code(d.gst_state),
|
"pos": get_state_code(d.gst_state),
|
||||||
"txval": d.total,
|
"txval": d.total - d.tax_amount,
|
||||||
"iamt": d.tax_amount
|
"iamt": d.tax_amount
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ class TestGSTR3BReport(unittest.TestCase):
|
|||||||
|
|
||||||
output = json.loads(report.json_output)
|
output = json.loads(report.json_output)
|
||||||
|
|
||||||
self.assertEqual(output["sup_details"]["osup_det"]["iamt"], 18),
|
self.assertEqual(output["sup_details"]["osup_det"]["iamt"], 36),
|
||||||
self.assertEqual(output["sup_details"]["osup_zero"]["iamt"], 18),
|
self.assertEqual(output["sup_details"]["osup_zero"]["iamt"], 18),
|
||||||
self.assertEqual(output["inter_sup"]["unreg_details"][0]["iamt"], 18),
|
self.assertEqual(output["inter_sup"]["unreg_details"][0]["iamt"], 18),
|
||||||
self.assertEqual(output["sup_details"]["osup_nil_exmp"]["txval"], 100),
|
self.assertEqual(output["sup_details"]["osup_nil_exmp"]["txval"], 100),
|
||||||
|
@ -97,9 +97,7 @@ def irs_1099_print(filters):
|
|||||||
row["recipient_street_address"], row["recipient_city_state"] = get_street_address_html("Supplier", row.supplier)
|
row["recipient_street_address"], row["recipient_city_state"] = get_street_address_html("Supplier", row.supplier)
|
||||||
row["payments"] = fmt_money(row["payments"], precision=0, currency="USD")
|
row["payments"] = fmt_money(row["payments"], precision=0, currency="USD")
|
||||||
frappe._dict(row)
|
frappe._dict(row)
|
||||||
print(row)
|
|
||||||
pdf = get_pdf(render_template(template, row), output=output if output else None)
|
pdf = get_pdf(render_template(template, row), output=output if output else None)
|
||||||
print(pdf)
|
|
||||||
frappe.local.response.filename = filters.fiscal_year + " " + filters.company + " IRS 1099 Forms"
|
frappe.local.response.filename = filters.fiscal_year + " " + filters.company + " IRS 1099 Forms"
|
||||||
frappe.local.response.filecontent = read_multi_pdf(output)
|
frappe.local.response.filecontent = read_multi_pdf(output)
|
||||||
frappe.local.response.type = "download"
|
frappe.local.response.type = "download"
|
||||||
|
@ -154,10 +154,10 @@ def get_opening_balance(filters, columns):
|
|||||||
"posting_date": filters.from_date,
|
"posting_date": filters.from_date,
|
||||||
"posting_time": "00:00:00"
|
"posting_time": "00:00:00"
|
||||||
})
|
})
|
||||||
row = [""]*len(columns)
|
row = {}
|
||||||
row[1] = _("'Opening'")
|
row["item_code"] = _("'Opening'")
|
||||||
for i, v in ((9, 'qty_after_transaction'), (11, 'valuation_rate'), (12, 'stock_value')):
|
for dummy, v in ((9, 'qty_after_transaction'), (11, 'valuation_rate'), (12, 'stock_value')):
|
||||||
row[i] = last_entry.get(v, 0)
|
row[v] = last_entry.get(v, 0)
|
||||||
|
|
||||||
return row
|
return row
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ from frappe.model.mapper import get_mapped_doc
|
|||||||
from frappe.utils.user import is_website_user
|
from frappe.utils.user import is_website_user
|
||||||
from ..service_level_agreement.service_level_agreement import get_active_service_level_agreement_for
|
from ..service_level_agreement.service_level_agreement import get_active_service_level_agreement_for
|
||||||
from erpnext.crm.doctype.opportunity.opportunity import assign_to_user
|
from erpnext.crm.doctype.opportunity.opportunity import assign_to_user
|
||||||
|
from frappe.email.inbox import link_communication_to_document
|
||||||
|
|
||||||
sender_field = "raised_by"
|
sender_field = "raised_by"
|
||||||
|
|
||||||
@ -294,3 +295,19 @@ def make_task(source_name, target_doc=None):
|
|||||||
"doctype": "Task"
|
"doctype": "Task"
|
||||||
}
|
}
|
||||||
}, target_doc)
|
}, target_doc)
|
||||||
|
@frappe.whitelist()
|
||||||
|
def make_issue_from_communication(communication, ignore_communication_links=False):
|
||||||
|
""" raise a issue from email """
|
||||||
|
|
||||||
|
doc = frappe.get_doc("Communication", communication)
|
||||||
|
issue = frappe.get_doc({
|
||||||
|
"doctype": "Issue",
|
||||||
|
"subject": doc.subject,
|
||||||
|
"communication_medium": doc.communication_medium,
|
||||||
|
"raised_by": doc.sender or "",
|
||||||
|
"raised_by_phone": doc.phone_no or ""
|
||||||
|
}).insert(ignore_permissions=True)
|
||||||
|
|
||||||
|
link_communication_to_document(doc, "Issue", issue.name, ignore_communication_links)
|
||||||
|
|
||||||
|
return issue.name
|
||||||
|
Loading…
x
Reference in New Issue
Block a user