diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py b/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py index ac6240a5de4..c7d1291521f 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py +++ b/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py @@ -117,7 +117,7 @@ def get_charts_for_country(country): def get_account_tree_from_existing_company(existing_company): all_accounts = frappe.get_all('Account', - filters={'company': existing_company}, + filters={'company': existing_company, "warehouse": ""}, fields = ["name", "account_name", "parent_account", "account_type", "is_group", "root_type", "tax_rate"], order_by="lft, rgt") @@ -126,7 +126,6 @@ def get_account_tree_from_existing_company(existing_company): # fill in tree starting with root accounts (those with no parent) build_account_tree(account_tree, None, all_accounts) - return account_tree def build_account_tree(tree, parent, all_accounts): diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/ae_uae_chart_template_standard.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/ae_uae_chart_template_standard.json index 9a9342305c6..9d610dce3b0 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/ae_uae_chart_template_standard.json +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/ae_uae_chart_template_standard.json @@ -88,10 +88,7 @@ "Items Delivered to Customs on temprary Base": {} }, "Stock in Hand": { - "All Warehouses": { - "account_type": "Stock", - "is_group": 1 - }, + "is_group": 1, "account_type": "Stock" } }, diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/sg_default_coa.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/sg_default_coa.json index 58a89b53a54..976150f1280 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/sg_default_coa.json +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/sg_default_coa.json @@ -40,10 +40,7 @@ "Rental Deposits": {} }, "Stock Assets": { - "All Warehouses": { - "account_type": "Stock", - "is_group": 1 - }, + "is_group": 1, "account_type": "Stock" }, "Tax Assets": { diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 02d2b6ba7f5..d42bcd57c90 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -684,6 +684,7 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount= pe.paid_amount = paid_amount pe.received_amount = received_amount pe.allocate_payment_amount = 1 + pe.letter_head = doc.get("letter_head") pe.append("references", { "reference_doctype": dt, diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py index 3c566e9b275..8b8f257ae31 100644 --- a/erpnext/accounts/report/gross_profit/gross_profit.py +++ b/erpnext/accounts/report/gross_profit/gross_profit.py @@ -248,21 +248,31 @@ class GrossProfitGenerator(object): conditions += " and posting_date >= %(from_date)s" if self.filters.to_date: conditions += " and posting_date <= %(to_date)s" + + if self.filters.group_by=="Sales Person": + sales_person_cols = ", sales.sales_person, sales.allocated_amount, sales.incentives" + sales_team_table = "left join `tabSales Team` sales on sales.parent = si.name" + else: + sales_person_cols = "" + sales_team_table = "" self.si_list = frappe.db.sql("""select item.parenttype, item.parent, si.posting_date, si.posting_time, si.project, si.update_stock, si.customer, si.customer_group, si.territory, item.item_code, item.item_name, item.description, item.warehouse, item.item_group, item.brand, item.dn_detail, item.delivery_note, - item.stock_qty as qty, item.base_net_rate, item.base_net_amount, item.name as "item_row", - sales.sales_person, sales.allocated_amount, sales.incentives - from `tabSales Invoice` si - inner join `tabSales Invoice Item` item on item.parent = si.name - left join `tabSales Team` sales on sales.parent = si.name + item.stock_qty as qty, item.base_net_rate, item.base_net_amount, item.name as "item_row" + {sales_person_cols} + from + `tabSales Invoice` si + inner join `tabSales Invoice Item` item on item.parent = si.name + {sales_team_table} where - si.docstatus = 1 and si.is_return != 1 %s + si.docstatus = 1 and si.is_return != 1 {conditions} order by - si.posting_date desc, si.posting_time desc""" % (conditions,), self.filters, as_dict=1) + si.posting_date desc, si.posting_time desc""" + .format(conditions=conditions, sales_person_cols=sales_person_cols, + sales_team_table=sales_team_table), self.filters, as_dict=1) def load_stock_ledger_entries(self): res = frappe.db.sql("""select item_code, voucher_type, voucher_no, diff --git a/erpnext/crm/doctype/opportunity/opportunity.py b/erpnext/crm/doctype/opportunity/opportunity.py index 786a36cf6d1..913d2e4ae62 100644 --- a/erpnext/crm/doctype/opportunity/opportunity.py +++ b/erpnext/crm/doctype/opportunity/opportunity.py @@ -178,6 +178,7 @@ def get_item_details(item_code): @frappe.whitelist() def make_quotation(source_name, target_doc=None): def set_missing_values(source, target): + from erpnext.controllers.accounts_controller import get_default_taxes_and_charges quotation = frappe.get_doc(target) company_currency = frappe.db.get_value("Company", quotation.company, "default_currency") @@ -193,7 +194,11 @@ def make_quotation(source_name, target_doc=None): quotation.transaction_date) quotation.conversion_rate = exchange_rate - + + # get default taxes + taxes = get_default_taxes_and_charges("Sales Taxes and Charges Template") + quotation.extend("taxes", taxes) + quotation.run_method("set_missing_values") quotation.run_method("calculate_taxes_and_totals") diff --git a/erpnext/hr/doctype/process_payroll/process_payroll.py b/erpnext/hr/doctype/process_payroll/process_payroll.py index 0ec5717b590..915985ca4fd 100644 --- a/erpnext/hr/doctype/process_payroll/process_payroll.py +++ b/erpnext/hr/doctype/process_payroll/process_payroll.py @@ -148,8 +148,10 @@ class ProcessPayroll(Document): ss_obj = frappe.get_doc("Salary Slip",ss[0]) ss_dict = {} ss_dict["Employee Name"] = ss_obj.employee_name - ss_dict["Total Pay"] = fmt_money(ss_obj.rounded_total,currency = frappe.defaults.get_global_default("currency")) + ss_dict["Total Pay"] = fmt_money(ss_obj.net_pay, + currency = frappe.defaults.get_global_default("currency")) ss_dict["Salary Slip"] = self.format_as_links(ss_obj.name)[0] + if ss_obj.net_pay<0: not_submitted_ss.append(ss_dict) else: diff --git a/erpnext/schools/doctype/student/student.js b/erpnext/schools/doctype/student/student.js index c7b1d462880..d3d248b2cbf 100644 --- a/erpnext/schools/doctype/student/student.js +++ b/erpnext/schools/doctype/student/student.js @@ -1,6 +1,17 @@ // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors // For license information, please see license.txt +frappe.ui.form.on('Student', { + setup: function(frm) { + frm.set_query("student", "siblings", function(doc, cdt, cdn) { + return { + "filters": { + "name": ["!=", doc.name] + } + }; + }) + } +}); frappe.ui.form.on("Student Guardian", { guardian: function(frm) { diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js index 0d8b41f7e2c..0b0a02081eb 100644 --- a/erpnext/setup/doctype/company/company.js +++ b/erpnext/setup/doctype/company/company.js @@ -31,7 +31,8 @@ frappe.ui.form.on("Company", { }, onload_post_render: function(frm) { - frm.get_field("delete_company_transactions").$input.addClass("btn-danger"); + if(frm.get_field("delete_company_transactions").$input) + frm.get_field("delete_company_transactions").$input.addClass("btn-danger"); }, country: function(frm) { erpnext.company.set_chart_of_accounts_options(frm.doc); diff --git a/erpnext/setup/doctype/company/company.json b/erpnext/setup/doctype/company/company.json index f52d71edb9a..7497a81e343 100644 --- a/erpnext/setup/doctype/company/company.json +++ b/erpnext/setup/doctype/company/company.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 1, "autoname": "field:company_name", @@ -407,7 +408,7 @@ "label": "Create Chart Of Accounts Based On", "length": 0, "no_copy": 0, - "options": "Standard Template\nExisting Company", + "options": "\nStandard Template\nExisting Company", "permlevel": 0, "precision": "", "print_hide": 0, @@ -415,7 +416,7 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -1680,19 +1681,19 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "icon": "fa fa-building", "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 0, "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-03-02 15:24:52.908559", + "modified": "2017-03-12 15:50:23.099622", "modified_by": "Administrator", "module": "Setup", "name": "Company", @@ -1846,4 +1847,4 @@ "sort_order": "ASC", "track_changes": 0, "track_seen": 0 -} +} \ No newline at end of file diff --git a/erpnext/setup/doctype/company/test_company.py b/erpnext/setup/doctype/company/test_company.py index d2e7d23d928..4b864c4ca16 100644 --- a/erpnext/setup/doctype/company/test_company.py +++ b/erpnext/setup/doctype/company/test_company.py @@ -28,7 +28,7 @@ class TestCompany(unittest.TestCase): "root_type": "Asset", "parent_account": "Accounts Receivable - CFEC", }, - "_Test Cash - CFEC": { + "Cash - CFEC": { "account_type": "Cash", "is_group": 0, "root_type": "Asset",