From 41236ed0e5a73ed3c767cd9812ddaf7cc6b51e90 Mon Sep 17 00:00:00 2001 From: Saif Ur Rehman Date: Wed, 12 Dec 2018 05:12:20 +0500 Subject: [PATCH 01/86] feat: Customer Ledger Summary report --- .../customer_ledger_summary/__init__.py | 0 .../customer_ledger_summary.js | 97 +++++++ .../customer_ledger_summary.json | 26 ++ .../customer_ledger_summary.py | 264 ++++++++++++++++++ 4 files changed, 387 insertions(+) create mode 100644 erpnext/accounts/report/customer_ledger_summary/__init__.py create mode 100644 erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js create mode 100644 erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.json create mode 100644 erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py diff --git a/erpnext/accounts/report/customer_ledger_summary/__init__.py b/erpnext/accounts/report/customer_ledger_summary/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js new file mode 100644 index 0000000000..105977b6e4 --- /dev/null +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js @@ -0,0 +1,97 @@ +// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt +/* eslint-disable */ + +frappe.query_reports["Customer Ledger Summary"] = { + "filters": [ + { + "fieldname":"company", + "label": __("Company"), + "fieldtype": "Link", + "options": "Company", + "default": frappe.defaults.get_user_default("Company") + }, + { + "fieldname":"from_date", + "label": __("From Date"), + "fieldtype": "Date", + "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1), + "reqd": 1, + "width": "60px" + }, + { + "fieldname":"to_date", + "label": __("To Date"), + "fieldtype": "Date", + "default": frappe.datetime.get_today(), + "reqd": 1, + "width": "60px" + }, + { + "fieldname":"finance_book", + "label": __("Finance Book"), + "fieldtype": "Link", + "options": "Finance Book" + }, + { + "fieldname":"party", + "label": __("Customer"), + "fieldtype": "Link", + "options": "Customer", + on_change: () => { + var customer = frappe.query_report.get_filter_value('customer'); + if (customer) { + frappe.db.get_value('Customer', customer, ["tax_id", "customer_name", "credit_limit", "payment_terms"], function(value) { + frappe.query_report.set_filter_value('tax_id', value["tax_id"]); + frappe.query_report.set_filter_value('customer_name', value["customer_name"]); + }); + } else { + frappe.query_report.set_filter_value('tax_id', ""); + frappe.query_report.set_filter_value('customer_name', ""); + } + } + }, + { + "fieldname":"customer_group", + "label": __("Customer Group"), + "fieldtype": "Link", + "options": "Customer Group" + }, + { + "fieldname":"payment_terms_template", + "label": __("Payment Terms Template"), + "fieldtype": "Link", + "options": "Payment Terms Template" + }, + { + "fieldname":"territory", + "label": __("Territory"), + "fieldtype": "Link", + "options": "Territory" + }, + { + "fieldname":"sales_partner", + "label": __("Sales Partner"), + "fieldtype": "Link", + "options": "Sales Partner" + }, + { + "fieldname":"sales_person", + "label": __("Sales Person"), + "fieldtype": "Link", + "options": "Sales Person" + }, + { + "fieldname":"tax_id", + "label": __("Tax Id"), + "fieldtype": "Data", + "hidden": 1 + }, + { + "fieldname":"customer_name", + "label": __("Customer Name"), + "fieldtype": "Data", + "hidden": 1 + } + ] +}; diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.json b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.json new file mode 100644 index 0000000000..91e4e197d3 --- /dev/null +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.json @@ -0,0 +1,26 @@ +{ + "add_total_row": 1, + "creation": "2018-12-11 00:58:19.078506", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "idx": 0, + "is_standard": "Yes", + "modified": "2018-12-11 00:59:21.708343", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Customer Ledger Summary", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "Sales Invoice", + "report_name": "Customer Ledger Summary", + "report_type": "Script Report", + "roles": [ + { + "role": "Accounts Manager" + }, + { + "role": "Accounts User" + } + ] +} \ No newline at end of file diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py new file mode 100644 index 0000000000..0b590db49d --- /dev/null +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py @@ -0,0 +1,264 @@ +# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +import erpnext +from frappe import _, scrub +from frappe.utils import getdate, nowdate, flt, cint + +class PartyLedgerSummaryReport(object): + def __init__(self, filters=None): + self.filters = frappe._dict(filters or {}) + self.filters.from_date = getdate(self.filters.from_date or nowdate()) + self.filters.to_date = getdate(self.filters.to_date or nowdate()) + + def run(self, args): + if self.filters.from_date > self.filters.to_date: + frappe.throw(_("From Date must be before To Date")) + + self.filters.party_type = args.get("party_type") + self.party_naming_by = frappe.db.get_value(args.get("naming_by")[0], None, args.get("naming_by")[1]) + + columns = self.get_columns() + data = self.get_data() + return columns, data + + def get_columns(self): + columns = [{ + "label": _(self.filters.party_type), + "fieldtype": "Link", + "fieldname": "party", + "options": self.filters.party_type, + "width": 200 + }] + + if self.party_naming_by == "Naming Series": + columns.append({ + "label": _(self.filters.party_type + "Name"), + "fieldtype": "Data", + "fieldname": "party_name", + "width": 110 + }) + + credit_or_debit_note = "Credit Note" if self.filters.party_type == "Customer" else "Debit Note" + columns += [ + { + "label": _("Opening Balance"), + "fieldname": "opening_balance", + "fieldtype": "Currency", + "width": 120 + }, + { + "label": _("Invoiced Amount"), + "fieldname": "invoiced_amount", + "fieldtype": "Currency", + "width": 120 + }, + { + "label": _("Paid Amount"), + "fieldname": "paid_amount", + "fieldtype": "Currency", + "width": 120 + }, + { + "label": _(credit_or_debit_note), + "fieldname": "return_amount", + "fieldtype": "Currency", + "width": 120 + }, + { + "label": _("Write Off Amount"), + "fieldname": "write_off_amount", + "fieldtype": "Currency", + "width": 120 + }, + { + "label": _("Closing Balance"), + "fieldname": "closing_balance", + "fieldtype": "Currency", + "width": 120 + } + ] + + return columns + + def get_data(self): + if not self.filters.get("company"): + self.filters["company"] = frappe.db.get_single_value('Global Defaults', 'default_company') + + credit_or_debit_note = "Credit Note" if self.filters.party_type == "Customer" else "Debit Note" + invoice_dr_or_cr = "debit" if self.filters.party_type == "Customer" else "credit" + reverse_dr_or_cr = "credit" if self.filters.party_type == "Customer" else "debit" + + self.get_gl_entries() + self.get_return_invoices() + self.get_party_write_off_amounts() + + self.party_data = frappe._dict({}) + for gle in self.gl_entries: + self.party_data.setdefault(gle.party, frappe._dict({ + "party": gle.party, + "party_name": "", # TODO add party_name + "opening_balance": 0, + "invoiced_amount": 0, + "paid_amount": -self.party_write_off_amounts.get(gle.party, 0), + "return_amount": 0, + "write_off_amount": self.party_write_off_amounts.get(gle.party, 0), + "closing_balance": 0 + })) + + amount = gle.get(invoice_dr_or_cr) - gle.get(reverse_dr_or_cr) + self.party_data[gle.party].closing_balance += amount + + if gle.posting_date < self.filters.from_date: + self.party_data[gle.party].opening_balance += amount + else: + if amount > 0: + self.party_data[gle.party].invoiced_amount += amount + elif gle.voucher_no in self.return_invoices: + self.party_data[gle.party].return_amount -= amount + else: + self.party_data[gle.party].paid_amount -= amount + + return [d for d in self.party_data.values() if d.opening_balance or d.invoiced_amount or d.paid_amount + or d.return_amount or d.write_off_amount or d.closing_amount] + + def get_gl_entries(self): + conditions = self.prepare_conditions() + + self.gl_entries = frappe.db.sql(""" + select + posting_date, party, voucher_type, voucher_no, against_voucher_type, against_voucher, debit, credit + from + `tabGL Entry` + where + docstatus < 2 and party_type=%(party_type)s and ifnull(party, '') != '' and posting_date <= %(to_date)s + {0} + order by posting_date""".format(conditions), self.filters, as_dict=True) + + def prepare_conditions(self): + conditions = [""] + + if self.filters.company: + conditions.append("company=%(company)s") + + self.filters.company_finance_book = erpnext.get_default_finance_book(self.filters.company) + + if not self.filters.finance_book or (self.filters.finance_book == self.filters.company_finance_book): + conditions.append("ifnull(finance_book,'') in (%(company_finance_book)s, '')") + elif self.filters.finance_book: + conditions.append("ifnull(finance_book,'') = %(finance_book)s") + + if self.filters.get("party"): + conditions.append("party=%(party)s") + + if self.filters.party_type == "Customer": + if self.filters.get("customer_group"): + lft, rgt = frappe.db.get_value("Customer Group", + self.filters.get("customer_group"), ["lft", "rgt"]) + + conditions.append("""party in (select name from tabCustomer + where exists(select name from `tabCustomer Group` where lft >= {0} and rgt <= {1} + and name=tabCustomer.customer_group))""".format(lft, rgt)) + + if self.filters.get("territory"): + lft, rgt = frappe.db.get_value("Territory", + self.filters.get("territory"), ["lft", "rgt"]) + + conditions.append("""party in (select name from tabCustomer + where exists(select name from `tabTerritory` where lft >= {0} and rgt <= {1} + and name=tabCustomer.territory))""".format(lft, rgt)) + + if self.filters.get("payment_terms_template"): + conditions.append("party in (select name from tabCustomer where payment_terms=%(payment_terms_template)s)") + + if self.filters.get("sales_partner"): + conditions.append("party in (select name from tabCustomer where default_sales_partner=%(sales_partner)s)") + + if self.filters.get("sales_person"): + lft, rgt = frappe.db.get_value("Sales Person", + self.filters.get("sales_person"), ["lft", "rgt"]) + + conditions.append("""party in (select parent from `tabSales Team` + where parenttype = 'Customer' and exists(select name from `tabSales Person` + where lft >= {0} and rgt <= {1} and name=`tabSales Team`.sales_person))""".format(lft, rgt)) + + if self.filters.party_type == "Supplier": + if self.filters.get("supplier_group"): + conditions.append("""party in (select name from tabSupplier + where supplier_group=%(supplier_group)s)""") + + return " and ".join(conditions) + + def get_return_invoices(self): + doctype = "Sales Invoice" if self.filters.party_type == "Customer" else "Purchase Invoice" + self.return_invoices = [d.name for d in frappe.get_all(doctype, filters={"is_return": 1, "docstatus": 1, + "posting_date": ["between", [self.filters.from_date, self.filters.to_date]]})] + + def get_party_write_off_amounts(self): + conditions = self.prepare_conditions() + income_or_expense = "Expense Account" if self.filters.party_type == "Customer" else "Income Account" + invoice_dr_or_cr = "debit" if self.filters.party_type == "Customer" else "credit" + reverse_dr_or_cr = "credit" if self.filters.party_type == "Customer" else "debit" + round_off_account = frappe.get_cached_value('Company', self.filters.company, "round_off_account") + + gl_entries = frappe.db.sql(""" + select + posting_date, account, party, voucher_type, voucher_no, debit, credit + from + `tabGL Entry` + where + docstatus < 2 + and (voucher_type, voucher_no) in ( + select voucher_type, voucher_no from `tabGL Entry` gle, `tabAccount` acc + where acc.name = gle.account and acc.account_type = '{income_or_expense}' + and gle.posting_date between %(from_date)s and %(to_date)s and gle.docstatus < 2 + ) and (voucher_type, voucher_no) in ( + select voucher_type, voucher_no from `tabGL Entry` gle + where gle.party_type=%(party_type)s and ifnull(party, '') != '' + and gle.posting_date between %(from_date)s and %(to_date)s and gle.docstatus < 2 {conditions} + ) + order by posting_date + """.format(conditions=conditions, income_or_expense=income_or_expense), self.filters, as_dict=True) + + self.party_write_off_amounts = {} + write_off_voucher_entries = {} + for gle in gl_entries: + write_off_voucher_entries.setdefault((gle.voucher_type, gle.voucher_no), []) + write_off_voucher_entries[(gle.voucher_type, gle.voucher_no)].append(gle) + + for voucher, voucher_gl_entries in write_off_voucher_entries.iteritems(): + parties = {} + write_offs = {} + has_irrelevant_entry = False + + for gle in voucher_gl_entries: + if gle.account == round_off_account: + continue + elif gle.party: + parties.setdefault(gle.party, 0) + parties[gle.party] += gle.get(reverse_dr_or_cr) - gle.get(invoice_dr_or_cr) + elif frappe.get_cached_value("Account", gle.account, "account_type") == income_or_expense: + write_offs.setdefault(gle.account, 0) + write_offs[gle.account] += gle.get(invoice_dr_or_cr) - gle.get(reverse_dr_or_cr) + else: + has_irrelevant_entry = True + + if parties and write_offs: + if len(parties) == 1: + for account, amount in write_offs.iteritems(): + party = parties.keys()[0] + self.party_write_off_amounts.setdefault(party, 0) + self.party_write_off_amounts[party] += amount + elif len(write_offs) == 1 and not has_irrelevant_entry: + for party, amount in parties.iteritems(): + self.party_write_off_amounts.setdefault(party, 0) + self.party_write_off_amounts[party] += amount + +def execute(filters=None): + args = { + "party_type": "Customer", + "naming_by": ["Selling Settings", "cust_master_name"], + } + return PartyLedgerSummaryReport(filters).run(args) \ No newline at end of file From b07d108beeb361309df1cb11d3be831e5f24841c Mon Sep 17 00:00:00 2001 From: Saif Ur Rehman Date: Wed, 12 Dec 2018 05:45:49 +0500 Subject: [PATCH 02/86] feat: Supplier Ledger Summary --- .../customer_ledger_summary.js | 6 +- .../customer_ledger_summary.py | 18 +++- .../supplier_ledger_summary/__init__.py | 0 .../supplier_ledger_summary.js | 97 +++++++++++++++++++ .../supplier_ledger_summary.json | 27 ++++++ .../supplier_ledger_summary.py | 13 +++ 6 files changed, 156 insertions(+), 5 deletions(-) create mode 100644 erpnext/accounts/report/supplier_ledger_summary/__init__.py create mode 100644 erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js create mode 100644 erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.json create mode 100644 erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.py diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js index 105977b6e4..a123631663 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js @@ -39,9 +39,9 @@ frappe.query_reports["Customer Ledger Summary"] = { "fieldtype": "Link", "options": "Customer", on_change: () => { - var customer = frappe.query_report.get_filter_value('customer'); - if (customer) { - frappe.db.get_value('Customer', customer, ["tax_id", "customer_name", "credit_limit", "payment_terms"], function(value) { + var party = frappe.query_report.get_filter_value('party'); + if (party) { + frappe.db.get_value('Customer', party, ["tax_id", "customer_name"], function(value) { frappe.query_report.set_filter_value('tax_id', value["tax_id"]); frappe.query_report.set_filter_value('customer_name', value["customer_name"]); }); diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py index 0b590db49d..63a3498f00 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py @@ -47,37 +47,50 @@ class PartyLedgerSummaryReport(object): "label": _("Opening Balance"), "fieldname": "opening_balance", "fieldtype": "Currency", + "options": "currency", "width": 120 }, { "label": _("Invoiced Amount"), "fieldname": "invoiced_amount", "fieldtype": "Currency", + "options": "currency", "width": 120 }, { "label": _("Paid Amount"), "fieldname": "paid_amount", "fieldtype": "Currency", + "options": "currency", "width": 120 }, { "label": _(credit_or_debit_note), "fieldname": "return_amount", "fieldtype": "Currency", + "options": "currency", "width": 120 }, { "label": _("Write Off Amount"), "fieldname": "write_off_amount", "fieldtype": "Currency", + "options": "currency", "width": 120 }, { "label": _("Closing Balance"), "fieldname": "closing_balance", "fieldtype": "Currency", + "options": "currency", "width": 120 + }, + { + "label": _("Currency"), + "fieldname": "currency", + "fieldtype": "Link", + "options": "Currency", + "width": 50 } ] @@ -87,7 +100,7 @@ class PartyLedgerSummaryReport(object): if not self.filters.get("company"): self.filters["company"] = frappe.db.get_single_value('Global Defaults', 'default_company') - credit_or_debit_note = "Credit Note" if self.filters.party_type == "Customer" else "Debit Note" + company_currency = frappe.get_cached_value('Company', self.filters.get("company"), "default_currency") invoice_dr_or_cr = "debit" if self.filters.party_type == "Customer" else "credit" reverse_dr_or_cr = "credit" if self.filters.party_type == "Customer" else "debit" @@ -105,7 +118,8 @@ class PartyLedgerSummaryReport(object): "paid_amount": -self.party_write_off_amounts.get(gle.party, 0), "return_amount": 0, "write_off_amount": self.party_write_off_amounts.get(gle.party, 0), - "closing_balance": 0 + "closing_balance": 0, + "currency": company_currency })) amount = gle.get(invoice_dr_or_cr) - gle.get(reverse_dr_or_cr) diff --git a/erpnext/accounts/report/supplier_ledger_summary/__init__.py b/erpnext/accounts/report/supplier_ledger_summary/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js new file mode 100644 index 0000000000..6fd16f2090 --- /dev/null +++ b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js @@ -0,0 +1,97 @@ +// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt +/* eslint-disable */ + +frappe.query_reports["Supplier Ledger Summary"] = { + "filters": [ + { + "fieldname":"company", + "label": __("Company"), + "fieldtype": "Link", + "options": "Company", + "default": frappe.defaults.get_user_default("Company") + }, + { + "fieldname":"from_date", + "label": __("From Date"), + "fieldtype": "Date", + "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1), + "reqd": 1, + "width": "60px" + }, + { + "fieldname":"to_date", + "label": __("To Date"), + "fieldtype": "Date", + "default": frappe.datetime.get_today(), + "reqd": 1, + "width": "60px" + }, + { + "fieldname":"finance_book", + "label": __("Finance Book"), + "fieldtype": "Link", + "options": "Finance Book" + }, + { + "fieldname":"party", + "label": __("Customer"), + "fieldtype": "Link", + "options": "Customer", + on_change: () => { + var party = frappe.query_report.get_filter_value('party'); + if (party) { + frappe.db.get_value('Supplier', party, ["tax_id", "supplier_name"], function(value) { + frappe.query_report.set_filter_value('tax_id', value["tax_id"]); + frappe.query_report.set_filter_value('supplier_name', value["supplier_name"]); + }); + } else { + frappe.query_report.set_filter_value('tax_id', ""); + frappe.query_report.set_filter_value('supplier_name', ""); + } + } + }, + { + "fieldname":"supplier_group", + "label": __("Supplier Group"), + "fieldtype": "Link", + "options": "Supplier Group" + }, + { + "fieldname":"payment_terms_template", + "label": __("Payment Terms Template"), + "fieldtype": "Link", + "options": "Payment Terms Template" + }, + { + "fieldname":"territory", + "label": __("Territory"), + "fieldtype": "Link", + "options": "Territory" + }, + { + "fieldname":"sales_partner", + "label": __("Sales Partner"), + "fieldtype": "Link", + "options": "Sales Partner" + }, + { + "fieldname":"sales_person", + "label": __("Sales Person"), + "fieldtype": "Link", + "options": "Sales Person" + }, + { + "fieldname":"tax_id", + "label": __("Tax Id"), + "fieldtype": "Data", + "hidden": 1 + }, + { + "fieldname":"supplier_name", + "label": __("Supplier Name"), + "fieldtype": "Data", + "hidden": 1 + } + ] +}; diff --git a/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.json b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.json new file mode 100644 index 0000000000..eb3b4123e2 --- /dev/null +++ b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.json @@ -0,0 +1,27 @@ +{ + "add_total_row": 1, + "creation": "2018-12-12 05:10:02.987274", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "idx": 0, + "is_standard": "Yes", + "letter_head": "Capital Traders", + "modified": "2018-12-12 05:10:02.987274", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Supplier Ledger Summary", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "Purchase Invoice", + "report_name": "Supplier Ledger Summary", + "report_type": "Script Report", + "roles": [ + { + "role": "Accounts Manager" + }, + { + "role": "Accounts User" + } + ] +} \ No newline at end of file diff --git a/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.py b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.py new file mode 100644 index 0000000000..d2c23ee4e7 --- /dev/null +++ b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.py @@ -0,0 +1,13 @@ +# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from erpnext.accounts.report.customer_ledger_summary.customer_ledger_summary import PartyLedgerSummaryReport + +def execute(filters=None): + args = { + "party_type": "Supplier", + "naming_by": ["Buying Settings", "supp_master_name"], + } + return PartyLedgerSummaryReport(filters).run(args) \ No newline at end of file From b53231595d5649ed9fb3d45853ab46ae73240e52 Mon Sep 17 00:00:00 2001 From: Saif Ur Rehman Date: Wed, 12 Dec 2018 15:46:50 +0500 Subject: [PATCH 03/86] Using same filter for Sales Person from Accounts Receivable Added Customer/Supplier Ledger Summary in Accounts Module page --- .../customer_ledger_summary.py | 11 +++-- erpnext/config/accounts.py | 48 ++++++++++++------- 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py index 63a3498f00..2b228fd6b6 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py @@ -194,9 +194,14 @@ class PartyLedgerSummaryReport(object): lft, rgt = frappe.db.get_value("Sales Person", self.filters.get("sales_person"), ["lft", "rgt"]) - conditions.append("""party in (select parent from `tabSales Team` - where parenttype = 'Customer' and exists(select name from `tabSales Person` - where lft >= {0} and rgt <= {1} and name=`tabSales Team`.sales_person))""".format(lft, rgt)) + conditions.append("""exists(select name from `tabSales Team` steam where + steam.sales_person in (select name from `tabSales Person` where lft >= {0} and rgt <= {1}) + and ((steam.parent = voucher_no and steam.parenttype = voucher_type) + or (steam.parent = against_voucher and steam.parenttype = against_voucher_type) + or (steam.parent = party and steam.parenttype = 'Customer')))""".format(lft, rgt)) + #conditions.append("""party in (select parent from `tabSales Team` + # where parenttype = 'Customer' and exists(select name from `tabSales Person` + # where lft >= {0} and rgt <= {1} and name=`tabSales Team`.sales_person))""".format(lft, rgt)) if self.filters.party_type == "Supplier": if self.filters.get("supplier_group"): diff --git a/erpnext/config/accounts.py b/erpnext/config/accounts.py index 15996c3a44..bfa7162400 100644 --- a/erpnext/config/accounts.py +++ b/erpnext/config/accounts.py @@ -351,6 +351,36 @@ def get_data(): "is_query_report": True, "doctype": "Sales Invoice" }, + { + "type": "report", + "name": "Item-wise Sales Register", + "is_query_report": True, + "doctype": "Sales Invoice" + }, + { + "type": "report", + "name": "Item-wise Purchase Register", + "is_query_report": True, + "doctype": "Purchase Invoice" + }, + { + "type": "report", + "name": "Profitability Analysis", + "doctype": "GL Entry", + "is_query_report": True, + }, + { + "type": "report", + "name": "Customer Ledger Summary", + "doctype": "Sales Invoice", + "is_query_report": True, + }, + { + "type": "report", + "name": "Supplier Ledger Summary", + "doctype": "Sales Invoice", + "is_query_report": True, + } ] }, { @@ -363,12 +393,6 @@ def get_data(): "doctype": "GL Entry", "is_query_report": True, }, - { - "type": "report", - "name": "Profitability Analysis", - "doctype": "GL Entry", - "is_query_report": True, - }, { "type": "report", "name": "Payment Period Based On Invoice Date", @@ -381,18 +405,6 @@ def get_data(): "is_query_report": True, "doctype": "Sales Invoice" }, - { - "type": "report", - "name": "Item-wise Sales Register", - "is_query_report": True, - "doctype": "Sales Invoice" - }, - { - "type": "report", - "name": "Item-wise Purchase Register", - "is_query_report": True, - "doctype": "Purchase Invoice" - }, { "type": "report", "name": "Accounts Receivable Summary", From f6f503a1f658cabe031c9b7a62253844e862cfc3 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 19 Dec 2018 15:06:44 +0530 Subject: [PATCH 04/86] [Fix] Is fixed asset checkbox not checked if user duplicate the existing invoice --- erpnext/assets/doctype/asset/test_asset.py | 12 +++++++++++- erpnext/controllers/accounts_controller.py | 3 +++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/erpnext/assets/doctype/asset/test_asset.py b/erpnext/assets/doctype/asset/test_asset.py index 76c46cff7a..de164762ff 100644 --- a/erpnext/assets/doctype/asset/test_asset.py +++ b/erpnext/assets/doctype/asset/test_asset.py @@ -49,7 +49,17 @@ class TestAsset(unittest.TestCase): self.assertFalse(frappe.db.get_value("GL Entry", {"voucher_type": "Purchase Invoice", "voucher_no": pi.name})) - + + def test_is_fixed_asset_set(self): + doc = frappe.new_doc('Purchase Invoice') + doc.supplier = '_Test Supplier' + doc.append('items', { + 'item_code': 'Macbook Pro', + 'qty': 1 + }) + + doc.set_missing_values() + self.assertEquals(doc.items[0].is_fixed_asset, 1) def test_schedule_for_straight_line_method(self): asset = frappe.get_doc("Asset", "Macbook Pro 1") diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 68f4f73147..97536e7e82 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -218,6 +218,9 @@ class AccountsController(TransactionBase): if stock_qty != len(get_serial_nos(item.get('serial_no'))): item.set(fieldname, value) + if self.doctype in ["Purchase Invoice", "Sales Invoice"] and item.meta.get_field('is_fixed_asset'): + item.set('is_fixed_asset', ret.get('is_fixed_asset', 0)) + if ret.get("pricing_rule"): # if user changed the discount percentage then set user's discount percentage ? item.set("discount_percentage", ret.get("discount_percentage")) From e2762df90be03f4829b23c827f2ba9a9b06804df Mon Sep 17 00:00:00 2001 From: scmmishra Date: Tue, 8 Jan 2019 17:38:28 +0530 Subject: [PATCH 05/86] Fix: Naming series not reflecting in leave application --- erpnext/hr/doctype/leave_application/leave_application.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/hr/doctype/leave_application/leave_application.json b/erpnext/hr/doctype/leave_application/leave_application.json index 7afbc4da89..eaef60cb62 100644 --- a/erpnext/hr/doctype/leave_application/leave_application.json +++ b/erpnext/hr/doctype/leave_application/leave_application.json @@ -3,7 +3,7 @@ "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, - "autoname": "LAP/.#####", + "autoname": "naming_series:", "beta": 0, "creation": "2013-02-20 11:18:11", "custom": 0, @@ -796,7 +796,7 @@ "issingle": 0, "istable": 0, "max_attachments": 3, - "modified": "2017-06-13 14:28:52.426044", + "modified": "2019-01-08 17:35:10.795225", "modified_by": "Administrator", "module": "HR", "name": "Leave Application", From b2c9268ece2feaef11dab0aaa07f60e576f771c9 Mon Sep 17 00:00:00 2001 From: Jamsheer Date: Mon, 19 Nov 2018 16:05:34 +0530 Subject: [PATCH 06/86] fix: Patient Appointment - Calendar - set color from appointment type --- .../patient_appointment/patient_appointment.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py index 5364031fce..7ac44b6cc2 100755 --- a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py +++ b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py @@ -337,11 +337,19 @@ def get_events(start, end, filters=None): from frappe.desk.calendar import get_event_conditions conditions = get_event_conditions("Patient Appointment", filters) - data = frappe.db.sql("""select name, patient, practitioner, status, - duration, timestamp(appointment_date, appointment_time) as - 'start' from `tabPatient Appointment` where - (appointment_date between %(start)s and %(end)s) - and docstatus < 2 {conditions}""".format(conditions=conditions), + data = frappe.db.sql(""" + select + `tabPatient Appointment`.name, `tabPatient Appointment`.patient, + `tabPatient Appointment`.practitioner, `tabPatient Appointment`.status, + `tabPatient Appointment`.duration, + timestamp(`tabPatient Appointment`.appointment_date, `tabPatient Appointment`.appointment_time) as 'start', + `tabAppointment Type`.color + from + `tabPatient Appointment` + left join `tabAppointment Type` on `tabPatient Appointment`.appointment_type=`tabAppointment Type`.name + where + (`tabPatient Appointment`.appointment_date between %(start)s and %(end)s) + and `tabPatient Appointment`.docstatus < 2 {conditions}""".format(conditions=conditions), {"start": start, "end": end}, as_dict=True, update={"allDay": 0}) for item in data: From f4d0fcb8361cd92a6f1df75322670f7875b7ae0b Mon Sep 17 00:00:00 2001 From: Jamsheer Date: Mon, 19 Nov 2018 16:10:13 +0530 Subject: [PATCH 07/86] fix: patient - user welcome email configuration --- erpnext/healthcare/doctype/patient/patient.py | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/healthcare/doctype/patient/patient.py b/erpnext/healthcare/doctype/patient/patient.py index bff24f7ab2..bf15cad5d5 100644 --- a/erpnext/healthcare/doctype/patient/patient.py +++ b/erpnext/healthcare/doctype/patient/patient.py @@ -33,7 +33,6 @@ class Patient(Document): "email": self.email, "user_type": "Website User" }) - user.flags.no_welcome_email = True user.flags.ignore_permissions = True user.add_roles("Patient") From f3c4f5a901ab256a7eaf5699ff748b3850927992 Mon Sep 17 00:00:00 2001 From: Jamsheer Date: Mon, 19 Nov 2018 16:29:32 +0530 Subject: [PATCH 08/86] fix: Clinical Procedure - copy fields from appointment --- .../doctype/clinical_procedure/clinical_procedure.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py index a21f5acb7e..beffe367d8 100644 --- a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py +++ b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py @@ -183,13 +183,15 @@ def create_procedure(appointment): procedure.patient_age = appointment.patient_age procedure.patient_sex = appointment.patient_sex procedure.procedure_template = appointment.procedure_template - procedure.procedure_prescription = appointment.procedure_prescription + procedure.prescription = appointment.procedure_prescription + procedure.practitioner = appointment.practitioner procedure.invoiced = appointment.invoiced procedure.medical_department = appointment.department procedure.start_date = appointment.appointment_date procedure.start_time = appointment.appointment_time procedure.notes = appointment.notes procedure.service_unit = appointment.service_unit + procedure.company = appointment.company consume_stock = frappe.db.get_value("Clinical Procedure Template", appointment.procedure_template, "consume_stock") if consume_stock == 1: procedure.consume_stock = True @@ -203,7 +205,9 @@ def create_procedure(appointment): return procedure.as_dict() def insert_clinical_procedure_to_medical_record(doc): - subject = cstr(doc.procedure_template) +" "+ doc.practitioner + subject = cstr(doc.procedure_template) + if doc.practitioner: + subject += " "+doc.practitioner if subject and doc.notes: subject += "
"+doc.notes From 3e01891e229b966401d46050ffdf10779f57d228 Mon Sep 17 00:00:00 2001 From: Jamsheer Date: Mon, 19 Nov 2018 17:02:48 +0530 Subject: [PATCH 09/86] fix: Traverse note from procedure prescription to appointment --- .../doctype/patient_appointment/patient_appointment.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py index 7ac44b6cc2..117608234e 100755 --- a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py +++ b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py @@ -27,6 +27,10 @@ class PatientAppointment(Document): def after_insert(self): if self.procedure_prescription: frappe.db.set_value("Procedure Prescription", self.procedure_prescription, "appointment_booked", True) + if self.procedure_template: + comments = frappe.db.get_value("Procedure Prescription", self.procedure_prescription, "comments") + if comments: + frappe.db.set_value("Patient Appointment", self.name, "notes", comments) # Check fee validity exists appointment = self validity_exist = validity_exists(appointment.practitioner, appointment.patient) From fb7b5292b3e207ddcf7060f2c18d2c6f7842ead5 Mon Sep 17 00:00:00 2001 From: Jamsheer Date: Mon, 19 Nov 2018 17:07:35 +0530 Subject: [PATCH 10/86] fix: Clinical Procedure - consume stock if items present --- .../healthcare/doctype/clinical_procedure/clinical_procedure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py index beffe367d8..7c6f4d5999 100644 --- a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py +++ b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.py @@ -43,7 +43,7 @@ class ClinicalProcedure(Document): self.reload() def complete(self): - if self.consume_stock: + if self.consume_stock and self.items: create_stock_entry(self) frappe.db.set_value("Clinical Procedure", self.name, "status", 'Completed') From c0097ad72935959164a3524d36e131fc98169832 Mon Sep 17 00:00:00 2001 From: Jamsheer Date: Fri, 23 Nov 2018 11:37:58 +0530 Subject: [PATCH 11/86] feat: Filter active Healthcare Practitioner --- .../healthcare_practitioner.json | 1910 +++++++++-------- .../healthcare_practitioner.py | 21 + erpnext/hooks.py | 3 +- 3 files changed, 995 insertions(+), 939 deletions(-) diff --git a/erpnext/healthcare/doctype/healthcare_practitioner/healthcare_practitioner.json b/erpnext/healthcare/doctype/healthcare_practitioner/healthcare_practitioner.json index ad68924d5a..4a848a081d 100644 --- a/erpnext/healthcare/doctype/healthcare_practitioner/healthcare_practitioner.json +++ b/erpnext/healthcare/doctype/healthcare_practitioner/healthcare_practitioner.json @@ -1,1007 +1,1041 @@ { - "allow_copy": 1, - "allow_guest_to_view": 0, - "allow_import": 1, - "allow_rename": 1, - "autoname": "", - "beta": 1, - "creation": "2016-02-23 11:20:53.565119", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "Setup", - "editable_grid": 0, + "allow_copy": 1, + "allow_events_in_timeline": 0, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "", + "beta": 1, + "creation": "2016-02-23 11:20:53.565119", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Setup", + "editable_grid": 0, "fields": [ { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "first_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 1, - "label": "First Name", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "first_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "First Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "middle_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Middle Name (Optional)", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "middle_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Middle Name (Optional)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "last_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Last Name", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "last_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Last Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "image", - "fieldtype": "Attach Image", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Image", - "length": 0, - "no_copy": 1, - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "image", + "fieldtype": "Attach Image", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Image", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "employee", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Employee", - "length": 0, - "no_copy": 0, - "options": "Employee", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "employee", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Employee", + "length": 0, + "no_copy": 0, + "options": "Employee", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "user_id", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "User", - "length": 0, - "no_copy": 0, - "options": "User", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 1, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "user_id", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "User", + "length": 0, + "no_copy": 0, + "options": "User", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "designation", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Designation", - "length": 0, - "no_copy": 0, - "options": "Designation", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "designation", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Designation", + "length": 0, + "no_copy": 0, + "options": "Designation", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "department", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 1, - "label": "Department", - "length": 0, - "no_copy": 0, - "options": "Medical Department", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "department", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 1, + "label": "Department", + "length": 0, + "no_copy": 0, + "options": "Medical Department", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_7", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_7", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "hospital", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Hospital", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "hospital", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Hospital", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "mobile_phone", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Mobile", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "mobile_phone", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Mobile", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "residence_phone", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Phone (R)", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "residence_phone", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Phone (R)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "office_phone", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Phone (Office)", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "office_phone", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Phone (Office)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "appointments", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Appointments", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "fieldname": "active", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Active", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "practitioner_schedules", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Practitioner Schedules", - "length": 0, - "no_copy": 0, - "options": "Practitioner Service Unit Schedule", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "appointments", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Appointments", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "charges", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Charges", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "practitioner_schedules", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Practitioner Schedules", + "length": 0, + "no_copy": 0, + "options": "Practitioner Service Unit Schedule", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "op_consulting_charge_item", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Out Patient Consulting Charge Item", - "length": 0, - "no_copy": 0, - "options": "Item", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "charges", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Charges", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "op_consulting_charge", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "OP Consulting Charge", - "length": 0, - "no_copy": 0, - "options": "Currency", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "op_consulting_charge_item", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Out Patient Consulting Charge Item", + "length": 0, + "no_copy": 0, + "options": "Item", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_18", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "op_consulting_charge", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "OP Consulting Charge", + "length": 0, + "no_copy": 0, + "options": "Currency", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "inpatient_visit_charge_item", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Inpatient Visit Charge Item", - "length": 0, - "no_copy": 0, - "options": "Item", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_18", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "inpatient_visit_charge", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Inpatient Visit Charge", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "inpatient_visit_charge_item", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Inpatient Visit Charge Item", + "length": 0, + "no_copy": 0, + "options": "Item", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "contacts_and_address", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Contacts and Address", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "inpatient_visit_charge", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Inpatient Visit Charge", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "address_html", - "fieldtype": "HTML", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Address HTML", - "length": 0, - "no_copy": 1, - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 1, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "contacts_and_address", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Contacts and Address", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_19", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "address_html", + "fieldtype": "HTML", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Address HTML", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 1, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "contact_html", - "fieldtype": "HTML", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Contact HTML", - "length": 0, - "no_copy": 1, - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 1, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_19", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "account_details", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Account Details", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "contact_html", + "fieldtype": "HTML", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Contact HTML", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 1, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "accounts", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Income Account", - "length": 0, - "no_copy": 0, - "options": "Party Account", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "account_details", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Account Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "default_currency", - "fieldtype": "Link", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Currency", - "length": 0, - "no_copy": 1, - "options": "Currency", - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 1, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "accounts", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Income Account", + "length": 0, + "no_copy": 0, + "options": "Party Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "default_currency", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Currency", + "length": 0, + "no_copy": 1, + "options": "Currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 1, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_field": "image", - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2018-08-06 16:45:37.899084", - "modified_by": "Administrator", - "module": "Healthcare", - "name": "Healthcare Practitioner", - "name_case": "", - "owner": "Administrator", + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_field": "image", + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2018-11-23 08:54:51.442105", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Healthcare Practitioner", + "name_case": "", + "owner": "Administrator", "permissions": [ { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Laboratory User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Laboratory User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, "write": 1 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Physician", - "set_user_permissions": 0, - "share": 1, - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 0, "write": 1 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Nursing User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Nursing User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, "write": 1 } - ], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "restrict_to_domain": "Healthcare", - "search_fields": "first_name,mobile_phone,office_phone", - "show_name_in_global_search": 1, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "first_name", - "track_changes": 1, - "track_seen": 0, + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "first_name,mobile_phone,office_phone", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "first_name", + "track_changes": 1, + "track_seen": 0, "track_views": 0 } \ No newline at end of file diff --git a/erpnext/healthcare/doctype/healthcare_practitioner/healthcare_practitioner.py b/erpnext/healthcare/doctype/healthcare_practitioner/healthcare_practitioner.py index 8a087dd1b2..891d86557f 100644 --- a/erpnext/healthcare/doctype/healthcare_practitioner/healthcare_practitioner.py +++ b/erpnext/healthcare/doctype/healthcare_practitioner/healthcare_practitioner.py @@ -9,6 +9,7 @@ from frappe import throw, _ from frappe.utils import cstr from erpnext.accounts.party import validate_party_accounts from frappe.contacts.address_and_contact import load_address_and_contact, delete_contact_and_address +from frappe.desk.reportview import build_match_conditions, get_filters_cond class HealthcarePractitioner(Document): def onload(self): @@ -65,3 +66,23 @@ class HealthcarePractitioner(Document): def validate_service_item(item, msg): if frappe.db.get_value("Item", item, "is_stock_item") == 1: frappe.throw(_(msg)) + +def get_practitioner_list(doctype, txt, searchfield, start, page_len, filters=None): + fields = ["name", "first_name", "mobile_phone"] + match_conditions = build_match_conditions("Healthcare Practitioner") + match_conditions = "and {}".format(match_conditions) if match_conditions else "" + + if filters: + filter_conditions = get_filters_cond(doctype, filters, []) + match_conditions += "{}".format(filter_conditions) + + return frappe.db.sql("""select %s from `tabHealthcare Practitioner` where docstatus < 2 + and (%s like %s or first_name like %s) + and active = 1 + {match_conditions} + order by + case when name like %s then 0 else 1 end, + case when first_name like %s then 0 else 1 end, + name, first_name limit %s, %s""".format(match_conditions=match_conditions) % + (", ".join(fields), searchfield, "%s", "%s", "%s", "%s", "%s", "%s"), + ("%%%s%%" % txt, "%%%s%%" % txt, "%%%s%%" % txt, "%%%s%%" % txt, start, page_len)) diff --git a/erpnext/hooks.py b/erpnext/hooks.py index bf7e32ab78..e8d3b07698 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -182,7 +182,8 @@ dump_report_map = "erpnext.startup.report_data_map.data_map" before_tests = "erpnext.setup.utils.before_tests" standard_queries = { - "Customer": "erpnext.selling.doctype.customer.customer.get_customer_list" + "Customer": "erpnext.selling.doctype.customer.customer.get_customer_list", + "Healthcare Practitioner": "erpnext.healthcare.doctype.healthcare_practitioner.healthcare_practitioner.get_practitioner_list" } doc_events = { From 52ac72e63e82b6502b325e29e06fabb55d09e896 Mon Sep 17 00:00:00 2001 From: Jamsheer Date: Fri, 23 Nov 2018 14:16:42 +0530 Subject: [PATCH 12/86] fix: Validate Patient Appointment --- .../patient_appointment.py | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py index 117608234e..1f7e1b7f42 100755 --- a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py +++ b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py @@ -6,7 +6,7 @@ from __future__ import unicode_literals import frappe from frappe.model.document import Document import json -from frappe.utils import getdate, add_days +from frappe.utils import getdate, add_days, get_time from frappe import _ import datetime from frappe.core.doctype.sms_settings.sms_settings import send_sms @@ -24,6 +24,27 @@ class PatientAppointment(Document): frappe.db.set_value("Patient Appointment", self.name, "status", "Open") self.reload() + def validate(self): + end_time = datetime.datetime.combine(getdate(self.appointment_date), get_time(self.appointment_time)) + datetime.timedelta(minutes=float(self.duration)) + overlaps = frappe.db.sql(""" + select + name, practitioner, patient, appointment_time, duration + from + `tabPatient Appointment` + where + appointment_date=%s and name!=%s and status NOT IN ("Closed", "Cancelled") + and (practitioner=%s or patient=%s) and + ((appointment_time<%s and appointment_time + INTERVAL duration MINUTE>%s) or + (appointment_time>%s and appointment_time<%s) or + (appointment_time=%s)) + """, (self.appointment_date, self.name, self.practitioner, self.patient, + self.appointment_time, end_time.time(), self.appointment_time, end_time.time(), self.appointment_time)) + + print (overlaps) + if overlaps: + frappe.throw(_("""Appointment overlaps with {0}.
{1} has appointment scheduled + with {2} at {3} having {4} minute(s) duration.""").format(overlaps[0][0], overlaps[0][1], overlaps[0][2], overlaps[0][3], overlaps[0][4])) + def after_insert(self): if self.procedure_prescription: frappe.db.set_value("Procedure Prescription", self.procedure_prescription, "appointment_booked", True) From c3804230cdcad17c24f1d1409c8996194a4912fd Mon Sep 17 00:00:00 2001 From: Jamsheer Date: Fri, 23 Nov 2018 14:43:52 +0530 Subject: [PATCH 13/86] fix: Patient - Quick Entry enabled --- erpnext/healthcare/doctype/patient/patient.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/erpnext/healthcare/doctype/patient/patient.json b/erpnext/healthcare/doctype/patient/patient.json index 28e5351e67..c195f4ddc7 100644 --- a/erpnext/healthcare/doctype/patient/patient.json +++ b/erpnext/healthcare/doctype/patient/patient.json @@ -219,7 +219,7 @@ "allow_bulk_edit": 0, "allow_in_quick_entry": 0, "allow_on_submit": 0, - "bold": 0, + "bold": 1, "collapsible": 0, "columns": 0, "fieldname": "blood_group", @@ -252,7 +252,7 @@ "allow_bulk_edit": 0, "allow_in_quick_entry": 0, "allow_on_submit": 0, - "bold": 0, + "bold": 1, "collapsible": 0, "columns": 0, "fieldname": "dob", @@ -480,7 +480,7 @@ "allow_bulk_edit": 0, "allow_in_quick_entry": 0, "allow_on_submit": 0, - "bold": 0, + "bold": 1, "collapsible": 0, "columns": 0, "fieldname": "mobile", @@ -512,7 +512,7 @@ "allow_bulk_edit": 0, "allow_in_quick_entry": 0, "allow_on_submit": 0, - "bold": 0, + "bold": 1, "collapsible": 0, "columns": 0, "fieldname": "email", @@ -1391,7 +1391,7 @@ "issingle": 0, "istable": 0, "max_attachments": 50, - "modified": "2018-10-14 22:09:39.849116", + "modified": "2018-11-23 12:11:14.336657", "modified_by": "Administrator", "module": "Healthcare", "name": "Patient", @@ -1456,7 +1456,7 @@ "write": 1 } ], - "quick_entry": 0, + "quick_entry": 1, "read_only": 0, "read_only_onload": 0, "restrict_to_domain": "Healthcare", From 17bb0da27863dec52cdf1199959b26b6935b8c38 Mon Sep 17 00:00:00 2001 From: Jamsheer Date: Fri, 23 Nov 2018 15:39:11 +0530 Subject: [PATCH 14/86] fix: remove print statement --- .../doctype/patient_appointment/patient_appointment.py | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py index 1f7e1b7f42..dbc302e418 100755 --- a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py +++ b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py @@ -40,7 +40,6 @@ class PatientAppointment(Document): """, (self.appointment_date, self.name, self.practitioner, self.patient, self.appointment_time, end_time.time(), self.appointment_time, end_time.time(), self.appointment_time)) - print (overlaps) if overlaps: frappe.throw(_("""Appointment overlaps with {0}.
{1} has appointment scheduled with {2} at {3} having {4} minute(s) duration.""").format(overlaps[0][0], overlaps[0][1], overlaps[0][2], overlaps[0][3], overlaps[0][4])) From f2d7e3309f87cd6f8b7dce59a7eba0e95c740e9a Mon Sep 17 00:00:00 2001 From: Jamsheer Date: Fri, 23 Nov 2018 16:29:30 +0530 Subject: [PATCH 15/86] fix: Patient Appointment - Calendar - status != Cancelled --- .../doctype/patient_appointment/patient_appointment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py index dbc302e418..7aa41c546c 100755 --- a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py +++ b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py @@ -373,7 +373,7 @@ def get_events(start, end, filters=None): left join `tabAppointment Type` on `tabPatient Appointment`.appointment_type=`tabAppointment Type`.name where (`tabPatient Appointment`.appointment_date between %(start)s and %(end)s) - and `tabPatient Appointment`.docstatus < 2 {conditions}""".format(conditions=conditions), + and `tabPatient Appointment`.status != 'Cancelled' and `tabPatient Appointment`.docstatus < 2 {conditions}""".format(conditions=conditions), {"start": start, "end": end}, as_dict=True, update={"allDay": 0}) for item in data: From 45c5138eafe6d2c21f1773de73ee9aa21f6f125b Mon Sep 17 00:00:00 2001 From: Jamsheer Date: Fri, 23 Nov 2018 16:48:10 +0530 Subject: [PATCH 16/86] fix: updated options for abdomen in Vital Signs --- .../doctype/vital_signs/vital_signs.json | 1861 +++++++++-------- 1 file changed, 931 insertions(+), 930 deletions(-) diff --git a/erpnext/healthcare/doctype/vital_signs/vital_signs.json b/erpnext/healthcare/doctype/vital_signs/vital_signs.json index 234871c75b..1503f835a4 100644 --- a/erpnext/healthcare/doctype/vital_signs/vital_signs.json +++ b/erpnext/healthcare/doctype/vital_signs/vital_signs.json @@ -1,997 +1,998 @@ { - "allow_copy": 1, - "allow_guest_to_view": 0, - "allow_import": 1, - "allow_rename": 0, - "beta": 1, - "creation": "2017-02-02 11:00:24.853005", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", + "allow_copy": 1, + "allow_events_in_timeline": 0, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 0, + "beta": 1, + "creation": "2017-02-02 11:00:24.853005", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", "fields": [ { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_from": "patient.inpatient_record", - "fieldname": "inpatient_record", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Inpatient Record", - "length": 0, - "no_copy": 0, - "options": "Inpatient Record", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fetch_from": "patient.inpatient_record", + "fieldname": "inpatient_record", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Inpatient Record", + "length": 0, + "no_copy": 0, + "options": "Inpatient Record", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_from": "inpatient_record.patient", - "fieldname": "patient", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Patient", - "length": 0, - "no_copy": 0, - "options": "Patient", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fetch_from": "inpatient_record.patient", + "fieldname": "patient", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Patient", + "length": 0, + "no_copy": 0, + "options": "Patient", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_from": "patient.patient_name", - "fieldname": "patient_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Patient Name", - "length": 0, - "no_copy": 0, - "options": "", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fetch_from": "patient.patient_name", + "fieldname": "patient_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient Name", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "appointment", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 1, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Appointment", - "length": 0, - "no_copy": 1, - "options": "Patient Appointment", - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 1, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "appointment", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Appointment", + "length": 0, + "no_copy": 1, + "options": "Patient Appointment", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 1, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "encounter", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 1, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Patient Encounter", - "length": 0, - "no_copy": 1, - "options": "Patient Encounter", - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 1, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "encounter", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient Encounter", + "length": 0, + "no_copy": 1, + "options": "Patient Encounter", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 1, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_2", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_2", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "Today", - "fieldname": "signs_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Today", + "fieldname": "signs_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "", - "fieldname": "signs_time", - "fieldtype": "Time", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Time", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "", + "fieldname": "signs_time", + "fieldtype": "Time", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Time", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "sb_vs", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Vital Signs", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sb_vs", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Vital Signs", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Presence of a fever (temp > 38.5 \u00b0C/101.3 \u00b0F or sustained temp > 38 \u00b0C/100.4 \u00b0F)", - "fieldname": "temperature", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 1, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Body Temperature", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Presence of a fever (temp > 38.5 \u00b0C/101.3 \u00b0F or sustained temp > 38 \u00b0C/100.4 \u00b0F)", + "fieldname": "temperature", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 1, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Body Temperature", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Adults' pulse rate is anywhere between 50 and 80 beats per minute.", - "fieldname": "pulse", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 1, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Heart Rate / Pulse", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Adults' pulse rate is anywhere between 50 and 80 beats per minute.", + "fieldname": "pulse", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 1, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Heart Rate / Pulse", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Normal reference range for an adult is 16\u201320 breaths/minute (RCP 2012)", - "fieldname": "respiratory_rate", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 1, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Respiratory rate", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Normal reference range for an adult is 16\u201320 breaths/minute (RCP 2012)", + "fieldname": "respiratory_rate", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 1, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Respiratory rate", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "tongue", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Tongue", - "length": 0, - "no_copy": 0, - "options": "\nCoated\nVery Coated\nNormal\nFurry\nCuts", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "tongue", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Tongue", + "length": 0, + "no_copy": 0, + "options": "\nCoated\nVery Coated\nNormal\nFurry\nCuts", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "abdomen", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Abdomen", - "length": 0, - "no_copy": 0, - "options": "\nBloated\nFull\nFluid\nConstipated", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "abdomen", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Abdomen", + "length": 0, + "no_copy": 0, + "options": "\nNormal\nBloated\nFull\nFluid\nConstipated", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_8", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_8", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "reflexes", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Reflexes", - "length": 0, - "no_copy": 0, - "options": "\nNormal\nHyper\nVery Hyper\nOne Sided", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "reflexes", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Reflexes", + "length": 0, + "no_copy": 0, + "options": "\nNormal\nHyper\nVery Hyper\nOne Sided", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "bp_systolic", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 1, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Blood Pressure (systolic)", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "bp_systolic", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 1, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Blood Pressure (systolic)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "", - "fieldname": "bp_diastolic", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 1, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Blood Pressure (diastolic)", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "", + "fieldname": "bp_diastolic", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 1, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Blood Pressure (diastolic)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Normal resting blood pressure in an adult is approximately 120 mmHg systolic, and 80 mmHg diastolic, abbreviated \"120/80 mmHg\"", - "fieldname": "bp", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Blood Pressure", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Normal resting blood pressure in an adult is approximately 120 mmHg systolic, and 80 mmHg diastolic, abbreviated \"120/80 mmHg\"", + "fieldname": "bp", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Blood Pressure", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "vital_signs_note", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 1, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Notes", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "vital_signs_note", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 1, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Notes", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "sb_nutrition_values", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Nutrition Values", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sb_nutrition_values", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Nutrition Values", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "height", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Height (In Meter)", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "height", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Height (In Meter)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "weight", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Weight (In Kilogram)", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "weight", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Weight (In Kilogram)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "0.00", - "fieldname": "bmi", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "BMI", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0.00", + "fieldname": "bmi", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "BMI", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_14", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_14", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "nutrition_note", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 1, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Notes", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "nutrition_note", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 1, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Notes", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "company", - "fieldtype": "Link", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Company", - "length": 0, - "no_copy": 0, - "options": "Company", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Company", + "length": 0, + "no_copy": 0, + "options": "Company", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "amended_from", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Amended From", - "length": 0, - "no_copy": 1, - "options": "Vital Signs", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amended_from", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amended From", + "length": 0, + "no_copy": 1, + "options": "Vital Signs", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 1, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2018-08-26 10:26:20.896305", - "modified_by": "Administrator", - "module": "Healthcare", - "name": "Vital Signs", - "name_case": "", - "owner": "Administrator", + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 1, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2018-11-23 14:14:05.933292", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Vital Signs", + "name_case": "", + "owner": "Administrator", "permissions": [ { - "amend": 0, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Physician", - "set_user_permissions": 0, - "share": 1, - "submit": 1, + "amend": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 1, "write": 1 - }, + }, { - "amend": 0, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Nursing User", - "set_user_permissions": 0, - "share": 1, - "submit": 1, + "amend": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Nursing User", + "set_user_permissions": 0, + "share": 1, + "submit": 1, "write": 1 } - ], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "restrict_to_domain": "Healthcare", - "search_fields": "patient, signs_date", - "show_name_in_global_search": 1, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "patient", - "track_changes": 1, - "track_seen": 1, + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "patient, signs_date", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "patient", + "track_changes": 1, + "track_seen": 1, "track_views": 0 } \ No newline at end of file From c0ac84977683cce7caa28048413c5ca91f245997 Mon Sep 17 00:00:00 2001 From: Jamsheer Date: Wed, 9 Jan 2019 11:48:41 +0530 Subject: [PATCH 17/86] fix: Helathcare Prcatitioner custom query escaped --- .../healthcare_practitioner.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/erpnext/healthcare/doctype/healthcare_practitioner/healthcare_practitioner.py b/erpnext/healthcare/doctype/healthcare_practitioner/healthcare_practitioner.py index 891d86557f..ed9eae3529 100644 --- a/erpnext/healthcare/doctype/healthcare_practitioner/healthcare_practitioner.py +++ b/erpnext/healthcare/doctype/healthcare_practitioner/healthcare_practitioner.py @@ -83,6 +83,19 @@ def get_practitioner_list(doctype, txt, searchfield, start, page_len, filters=No order by case when name like %s then 0 else 1 end, case when first_name like %s then 0 else 1 end, - name, first_name limit %s, %s""".format(match_conditions=match_conditions) % - (", ".join(fields), searchfield, "%s", "%s", "%s", "%s", "%s", "%s"), - ("%%%s%%" % txt, "%%%s%%" % txt, "%%%s%%" % txt, "%%%s%%" % txt, start, page_len)) + name, first_name limit %s, %s""".format( + match_conditions=match_conditions) % + ( + ", ".join(fields), + frappe.db.escape(searchfield), + "%s", "%s", "%s", "%s", "%s", "%s" + ), + ( + "%%%s%%" % frappe.db.escape(txt), + "%%%s%%" % frappe.db.escape(txt), + "%%%s%%" % frappe.db.escape(txt), + "%%%s%%" % frappe.db.escape(txt), + start, + page_len + ) + ) From 319ca86c81b0992369bde8cb883b630a8ee05599 Mon Sep 17 00:00:00 2001 From: Jamsheer Date: Wed, 9 Jan 2019 13:29:20 +0530 Subject: [PATCH 18/86] fix: Test Fee Validity --- erpnext/healthcare/doctype/fee_validity/test_fee_validity.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/healthcare/doctype/fee_validity/test_fee_validity.py b/erpnext/healthcare/doctype/fee_validity/test_fee_validity.py index b8305d748f..26b1450463 100644 --- a/erpnext/healthcare/doctype/fee_validity/test_fee_validity.py +++ b/erpnext/healthcare/doctype/fee_validity/test_fee_validity.py @@ -68,6 +68,7 @@ def create_appointment(patient, practitioner, appointment_date, department): appointment.department = department appointment.appointment_date = appointment_date appointment.company = "_Test Company" + appointment.duration = 15 appointment.save(ignore_permissions=True) return appointment From 701c762a68d6d88f1a8553aa1f67b01cc5ba643a Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 9 Jan 2019 14:07:55 +0530 Subject: [PATCH 19/86] Show outward entries in negative for Bank Clearance Summary report --- .../report/bank_clearance_summary/bank_clearance_summary.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py index 13424dbcb5..0861b20f14 100644 --- a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py +++ b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py @@ -36,8 +36,8 @@ def get_conditions(filters): def get_entries(filters): conditions = get_conditions(filters) journal_entries = frappe.db.sql("""SELECT - "Journal Entry", jv.name, jv.posting_date, jv.cheque_no, jv.clearance_date, jvd.against_account, - if((jvd.debit - jvd.credit) < 0, (jvd.debit - jvd.credit) * -1, (jvd.debit - jvd.credit)) + "Journal Entry", jv.name, jv.posting_date, jv.cheque_no, + jv.clearance_date, jvd.against_account, jvd.debit - jvd.credit FROM `tabJournal Entry Account` jvd, `tabJournal Entry` jv WHERE @@ -46,7 +46,7 @@ def get_entries(filters): payment_entries = frappe.db.sql("""SELECT "Payment Entry", name, posting_date, reference_no, clearance_date, party, - if(paid_from=%(account)s, paid_amount, received_amount) + if(paid_from=%(account)s, paid_amount * -1, received_amount) FROM `tabPayment Entry` WHERE From f86123ad5a5a0da9be7e74f7b6e1360f3f9733f9 Mon Sep 17 00:00:00 2001 From: Saif Ur Rehman Date: Tue, 15 Jan 2019 15:18:43 +0500 Subject: [PATCH 20/86] feat(Party Ledger Summary): Include columns for discount and other adjustments --- .../customer_ledger_summary.py | 91 +++++++++++++------ erpnext/setup/doctype/company/company.js | 2 + erpnext/setup/doctype/company/company.json | 68 +++++++++++++- 3 files changed, 131 insertions(+), 30 deletions(-) diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py index 2b228fd6b6..c8044c532a 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py @@ -6,6 +6,7 @@ import frappe import erpnext from frappe import _, scrub from frappe.utils import getdate, nowdate, flt, cint +from six import iteritems class PartyLedgerSummaryReport(object): def __init__(self, filters=None): @@ -20,6 +21,11 @@ class PartyLedgerSummaryReport(object): self.filters.party_type = args.get("party_type") self.party_naming_by = frappe.db.get_value(args.get("naming_by")[0], None, args.get("naming_by")[1]) + discount_account_field = "discount_allowed_account" if self.filters.party_type == "Customer" \ + else "discount_received_account" + self.round_off_account, self.write_off_account, self.discount_account = frappe.get_cached_value('Company', + self.filters.company, ["round_off_account", "write_off_account", discount_account_field]) + columns = self.get_columns() data = self.get_data() return columns, data @@ -42,6 +48,8 @@ class PartyLedgerSummaryReport(object): }) credit_or_debit_note = "Credit Note" if self.filters.party_type == "Customer" else "Debit Note" + discount_allowed_or_received = "Discount Allowed" if self.filters.party_type == "Customer" else "Discount Received" + columns += [ { "label": _("Opening Balance"), @@ -71,6 +79,13 @@ class PartyLedgerSummaryReport(object): "options": "currency", "width": 120 }, + { + "label": _(discount_allowed_or_received), + "fieldname": "discount_amount", + "fieldtype": "Currency", + "options": "currency", + "width": 120 + }, { "label": _("Write Off Amount"), "fieldname": "write_off_amount", @@ -78,6 +93,13 @@ class PartyLedgerSummaryReport(object): "options": "currency", "width": 120 }, + { + "label": _("Other Adjustments"), + "fieldname": "adjustment_amount", + "fieldtype": "Currency", + "options": "currency", + "width": 120 + }, { "label": _("Closing Balance"), "fieldname": "closing_balance", @@ -106,18 +128,17 @@ class PartyLedgerSummaryReport(object): self.get_gl_entries() self.get_return_invoices() - self.get_party_write_off_amounts() + self.get_party_adjustment_amounts() self.party_data = frappe._dict({}) for gle in self.gl_entries: self.party_data.setdefault(gle.party, frappe._dict({ "party": gle.party, - "party_name": "", # TODO add party_name + "party_name": "", # TODO add party_name "opening_balance": 0, "invoiced_amount": 0, - "paid_amount": -self.party_write_off_amounts.get(gle.party, 0), + "paid_amount": 0, "return_amount": 0, - "write_off_amount": self.party_write_off_amounts.get(gle.party, 0), "closing_balance": 0, "currency": company_currency })) @@ -135,8 +156,18 @@ class PartyLedgerSummaryReport(object): else: self.party_data[gle.party].paid_amount -= amount - return [d for d in self.party_data.values() if d.opening_balance or d.invoiced_amount or d.paid_amount - or d.return_amount or d.write_off_amount or d.closing_amount] + out = [] + for party, row in iteritems(self.party_data): + if row.opening_balance or row.invoiced_amount or row.paid_amount or row.return_amount or row.closing_amount: + total_party_adjustment = sum([amount for account, amount in iteritems(self.party_adjustment_details.get(party, {}))]) + row.paid_amount -= total_party_adjustment + row.discount_amount = self.party_adjustment_details.get(party, {}).get(self.discount_account, 0) + row.write_off_amount = self.party_adjustment_details.get(party, {}).get(self.write_off_account, 0) + row.adjustment_amount = total_party_adjustment - row.discount_amount - row.write_off_amount + + out.append(row) + + return out def get_gl_entries(self): conditions = self.prepare_conditions() @@ -215,12 +246,11 @@ class PartyLedgerSummaryReport(object): self.return_invoices = [d.name for d in frappe.get_all(doctype, filters={"is_return": 1, "docstatus": 1, "posting_date": ["between", [self.filters.from_date, self.filters.to_date]]})] - def get_party_write_off_amounts(self): + def get_party_adjustment_amounts(self): conditions = self.prepare_conditions() - income_or_expense = "Expense Account" if self.filters.party_type == "Customer" else "Income Account" + income_or_expense = "Expense" if self.filters.party_type == "Customer" else "Income" invoice_dr_or_cr = "debit" if self.filters.party_type == "Customer" else "credit" reverse_dr_or_cr = "credit" if self.filters.party_type == "Customer" else "debit" - round_off_account = frappe.get_cached_value('Company', self.filters.company, "round_off_account") gl_entries = frappe.db.sql(""" select @@ -231,7 +261,7 @@ class PartyLedgerSummaryReport(object): docstatus < 2 and (voucher_type, voucher_no) in ( select voucher_type, voucher_no from `tabGL Entry` gle, `tabAccount` acc - where acc.name = gle.account and acc.account_type = '{income_or_expense}' + where acc.name = gle.account and acc.root_type = '{income_or_expense}' and gle.posting_date between %(from_date)s and %(to_date)s and gle.docstatus < 2 ) and (voucher_type, voucher_no) in ( select voucher_type, voucher_no from `tabGL Entry` gle @@ -241,39 +271,42 @@ class PartyLedgerSummaryReport(object): order by posting_date """.format(conditions=conditions, income_or_expense=income_or_expense), self.filters, as_dict=True) - self.party_write_off_amounts = {} - write_off_voucher_entries = {} + self.party_adjustment_details = {} + adjustment_voucher_entries = {} for gle in gl_entries: - write_off_voucher_entries.setdefault((gle.voucher_type, gle.voucher_no), []) - write_off_voucher_entries[(gle.voucher_type, gle.voucher_no)].append(gle) + adjustment_voucher_entries.setdefault((gle.voucher_type, gle.voucher_no), []) + adjustment_voucher_entries[(gle.voucher_type, gle.voucher_no)].append(gle) - for voucher, voucher_gl_entries in write_off_voucher_entries.iteritems(): + for voucher, voucher_gl_entries in iteritems(adjustment_voucher_entries): parties = {} - write_offs = {} + accounts = {} has_irrelevant_entry = False for gle in voucher_gl_entries: - if gle.account == round_off_account: + if gle.account == self.round_off_account: continue elif gle.party: parties.setdefault(gle.party, 0) parties[gle.party] += gle.get(reverse_dr_or_cr) - gle.get(invoice_dr_or_cr) - elif frappe.get_cached_value("Account", gle.account, "account_type") == income_or_expense: - write_offs.setdefault(gle.account, 0) - write_offs[gle.account] += gle.get(invoice_dr_or_cr) - gle.get(reverse_dr_or_cr) + elif frappe.get_cached_value("Account", gle.account, "root_type") == income_or_expense: + accounts.setdefault(gle.account, 0) + accounts[gle.account] += gle.get(invoice_dr_or_cr) - gle.get(reverse_dr_or_cr) else: has_irrelevant_entry = True - if parties and write_offs: + if parties and accounts: if len(parties) == 1: - for account, amount in write_offs.iteritems(): - party = parties.keys()[0] - self.party_write_off_amounts.setdefault(party, 0) - self.party_write_off_amounts[party] += amount - elif len(write_offs) == 1 and not has_irrelevant_entry: - for party, amount in parties.iteritems(): - self.party_write_off_amounts.setdefault(party, 0) - self.party_write_off_amounts[party] += amount + party = parties.keys()[0] + for account, amount in iteritems(accounts): + self.party_adjustment_details.setdefault(party, {}) + self.party_adjustment_details[party].setdefault(account, 0) + self.party_adjustment_details[party][account] += amount + elif len(accounts) == 1 and not has_irrelevant_entry: + account = accounts.keys()[0] + for party, amount in iteritems(parties): + self.party_adjustment_details.setdefault(party, {}) + self.party_adjustment_details[party].setdefault(account, 0) + self.party_adjustment_details[party][account] += amount def execute(filters=None): args = { diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js index 16676ac78a..70e047a4e8 100644 --- a/erpnext/setup/doctype/company/company.js +++ b/erpnext/setup/doctype/company/company.js @@ -206,6 +206,8 @@ erpnext.company.setup_queries = function(frm) { ["default_payroll_payable_account", {"root_type": "Liability"}], ["round_off_account", {"root_type": "Expense"}], ["write_off_account", {"root_type": "Expense"}], + ["discount_allowed_account", {"root_type": "Expense"}], + ["discount_received_account", {"root_type": "Income"}], ["exchange_gain_loss_account", {"root_type": "Expense"}], ["unrealized_exchange_gain_loss_account", {"root_type": "Expense"}], ["accumulated_depreciation_account", diff --git a/erpnext/setup/doctype/company/company.json b/erpnext/setup/doctype/company/company.json index 01f8956a82..77c371e0cd 100644 --- a/erpnext/setup/doctype/company/company.json +++ b/erpnext/setup/doctype/company/company.json @@ -1250,6 +1250,72 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "discount_allowed_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Discount Allowed Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "discount_received_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Discount Received Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, @@ -2903,7 +2969,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2018-10-24 12:57:46.776452", + "modified": "2019-01-15 13:29:54.510379", "modified_by": "Administrator", "module": "Setup", "name": "Company", From 55566b7f8e838fbeb349d754e6235737581af032 Mon Sep 17 00:00:00 2001 From: Saif Ur Rehman Date: Sat, 19 Jan 2019 15:12:08 +0500 Subject: [PATCH 21/86] fix(Party Ledger Summary): Codacy fix --- .../customer_ledger_summary.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py index c8044c532a..47116cf336 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py @@ -4,9 +4,9 @@ from __future__ import unicode_literals import frappe import erpnext -from frappe import _, scrub -from frappe.utils import getdate, nowdate, flt, cint -from six import iteritems +from frappe import _ +from frappe.utils import getdate, nowdate +from six import iteritems, itervalues class PartyLedgerSummaryReport(object): def __init__(self, filters=None): @@ -159,7 +159,7 @@ class PartyLedgerSummaryReport(object): out = [] for party, row in iteritems(self.party_data): if row.opening_balance or row.invoiced_amount or row.paid_amount or row.return_amount or row.closing_amount: - total_party_adjustment = sum([amount for account, amount in iteritems(self.party_adjustment_details.get(party, {}))]) + total_party_adjustment = sum([amount for amount in itervalues(self.party_adjustment_details.get(party, {}))]) row.paid_amount -= total_party_adjustment row.discount_amount = self.party_adjustment_details.get(party, {}).get(self.discount_account, 0) row.write_off_amount = self.party_adjustment_details.get(party, {}).get(self.write_off_account, 0) @@ -230,9 +230,6 @@ class PartyLedgerSummaryReport(object): and ((steam.parent = voucher_no and steam.parenttype = voucher_type) or (steam.parent = against_voucher and steam.parenttype = against_voucher_type) or (steam.parent = party and steam.parenttype = 'Customer')))""".format(lft, rgt)) - #conditions.append("""party in (select parent from `tabSales Team` - # where parenttype = 'Customer' and exists(select name from `tabSales Person` - # where lft >= {0} and rgt <= {1} and name=`tabSales Team`.sales_person))""".format(lft, rgt)) if self.filters.party_type == "Supplier": if self.filters.get("supplier_group"): @@ -277,7 +274,7 @@ class PartyLedgerSummaryReport(object): adjustment_voucher_entries.setdefault((gle.voucher_type, gle.voucher_no), []) adjustment_voucher_entries[(gle.voucher_type, gle.voucher_no)].append(gle) - for voucher, voucher_gl_entries in iteritems(adjustment_voucher_entries): + for voucher_gl_entries in itervalues(adjustment_voucher_entries): parties = {} accounts = {} has_irrelevant_entry = False @@ -313,4 +310,4 @@ def execute(filters=None): "party_type": "Customer", "naming_by": ["Selling Settings", "cust_master_name"], } - return PartyLedgerSummaryReport(filters).run(args) \ No newline at end of file + return PartyLedgerSummaryReport(filters).run(args) From 31d58eac01d2ef5f96185be15295e0f08172ccb7 Mon Sep 17 00:00:00 2001 From: Saif Ur Rehman Date: Sat, 19 Jan 2019 15:28:40 +0500 Subject: [PATCH 22/86] fix(Party Ledger Summary): Added Supplier/Customer Name column --- .../customer_ledger_summary.py | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py index 47116cf336..e33bd61411 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py @@ -134,7 +134,7 @@ class PartyLedgerSummaryReport(object): for gle in self.gl_entries: self.party_data.setdefault(gle.party, frappe._dict({ "party": gle.party, - "party_name": "", # TODO add party_name + "party_name": gle.party_name, "opening_balance": 0, "invoiced_amount": 0, "paid_amount": 0, @@ -171,16 +171,25 @@ class PartyLedgerSummaryReport(object): def get_gl_entries(self): conditions = self.prepare_conditions() + join = join_field = "" + if self.filters.party_type == "Customer": + join_field = ", p.customer_name as party_name" + join = "left join `tabCustomer` p on gle.party = p.name" + elif self.filters.party_type == "Supplier": + join_field = ", p.supplier_name as party_name" + join = "left join `tabSupplier` p on gle.party = p.name" self.gl_entries = frappe.db.sql(""" select - posting_date, party, voucher_type, voucher_no, against_voucher_type, against_voucher, debit, credit - from - `tabGL Entry` + gle.posting_date, gle.party, gle.voucher_type, gle.voucher_no, gle.against_voucher_type, + gle.against_voucher, gle.debit, gle.credit {join_field} + from `tabGL Entry` gle + {join} where - docstatus < 2 and party_type=%(party_type)s and ifnull(party, '') != '' and posting_date <= %(to_date)s - {0} - order by posting_date""".format(conditions), self.filters, as_dict=True) + gle.docstatus < 2 and gle.party_type=%(party_type)s and ifnull(gle.party, '') != '' + and gle.posting_date <= %(to_date)s {conditions} + order by gle.posting_date + """.format(join=join, join_field=join_field, conditions=conditions), self.filters, as_dict=True) def prepare_conditions(self): conditions = [""] @@ -265,7 +274,6 @@ class PartyLedgerSummaryReport(object): where gle.party_type=%(party_type)s and ifnull(party, '') != '' and gle.posting_date between %(from_date)s and %(to_date)s and gle.docstatus < 2 {conditions} ) - order by posting_date """.format(conditions=conditions, income_or_expense=income_or_expense), self.filters, as_dict=True) self.party_adjustment_details = {} From dd461636e3067c33a14210d70582ef822684e6cc Mon Sep 17 00:00:00 2001 From: scmmishra Date: Mon, 21 Jan 2019 19:35:02 +0530 Subject: [PATCH 23/86] [feat] Updated all help_links --- erpnext/public/js/help_links.js | 356 ++++++++++++++++---------------- 1 file changed, 178 insertions(+), 178 deletions(-) diff --git a/erpnext/public/js/help_links.js b/erpnext/public/js/help_links.js index b8d0019e28..20ba56a5ec 100644 --- a/erpnext/public/js/help_links.js +++ b/erpnext/public/js/help_links.js @@ -1,524 +1,524 @@ frappe.provide('frappe.help.help_links'); frappe.help.help_links['Form/Rename Tool'] = [ - { label: 'Bulk Rename', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/data/bulk-rename' }, + { label: 'Bulk Rename', url: 'https://erpnext.com/docs/user/manual/en/setting-up/data/bulk-rename' }, ] //Setup frappe.help.help_links['List/User'] = [ - { label: 'New User', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/users-and-permissions/adding-users' }, - { label: 'Rename User', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/rename-user' }, + { label: 'New User', url: 'https://erpnext.com/docs/user/manual/en/setting-up/users-and-permissions/adding-users' }, + { label: 'Rename User', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/rename-user' }, ] frappe.help.help_links['permission-manager'] = [ - { label: 'Role Permissions Manager', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/users-and-permissions/role-based-permissions' }, - { label: 'Managing Perm Level in Permissions Manager', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/managing-perm-level' }, - { label: 'User Permissions', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/users-and-permissions/user-permissions' }, - { label: 'Sharing', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/users-and-permissions/sharing' }, - { label: 'Password', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/change-password' }, + { label: 'Role Permissions Manager', url: 'https://erpnext.com/docs/user/manual/en/setting-up/users-and-permissions/role-based-permissions' }, + { label: 'Managing Perm Level in Permissions Manager', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/managing-perm-level' }, + { label: 'User Permissions', url: 'https://erpnext.com/docs/user/manual/en/setting-up/users-and-permissions/user-permissions' }, + { label: 'Sharing', url: 'https://erpnext.com/docs/user/manual/en/setting-up/users-and-permissions/sharing' }, + { label: 'Password', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/change-password' }, ] frappe.help.help_links['Form/System Settings'] = [ - { label: 'Naming Series', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/settings/system-settings' }, + { label: 'Naming Series', url: 'https://erpnext.com/docs/user/manual/en/setting-up/settings/system-settings' }, ] frappe.help.help_links['data-import-tool'] = [ - { label: 'Importing and Exporting Data', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/data/data-import-tool' }, - { label: 'Overwriting Data from Data Import Tool', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/overwriting-data-from-data-import-tool' }, + { label: 'Importing and Exporting Data', url: 'https://erpnext.com/docs/user/manual/en/setting-up/data/data-import-tool' }, + { label: 'Overwriting Data from Data Import Tool', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/overwriting-data-from-data-import-tool' }, ] frappe.help.help_links['module_setup'] = [ - { label: 'Role Permissions Manager', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/users-and-permissions/role-based-permissions' }, + { label: 'Role Permissions Manager', url: 'https://erpnext.com/docs/user/manual/en/setting-up/users-and-permissions/role-based-permissions' }, ] frappe.help.help_links['Form/Naming Series'] = [ - { label: 'Naming Series', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/settings/naming-series' }, - { label: 'Setting the Current Value for Naming Series', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/naming-series-current-value' }, + { label: 'Naming Series', url: 'https://erpnext.com/docs/user/manual/en/setting-up/settings/naming-series' }, + { label: 'Setting the Current Value for Naming Series', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/naming-series-current-value' }, ] frappe.help.help_links['Form/Global Defaults'] = [ - { label: 'Global Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/settings/global-defaults' }, + { label: 'Global Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/settings/global-defaults' }, ] frappe.help.help_links['Form/Email Digest'] = [ - { label: 'Email Digest', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/email/email-digest' }, + { label: 'Email Digest', url: 'https://erpnext.com/docs/user/manual/en/setting-up/email/email-digest' }, ] frappe.help.help_links['List/Print Heading'] = [ - { label: 'Print Heading', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/print-headings' }, + { label: 'Print Heading', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/print-headings' }, ] frappe.help.help_links['List/Letter Head'] = [ - { label: 'Letter Head', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/letter-head' }, + { label: 'Letter Head', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/letter-head' }, ] frappe.help.help_links['List/Address Template'] = [ - { label: 'Address Template', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/address-template' }, + { label: 'Address Template', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/address-template' }, ] frappe.help.help_links['List/Terms and Conditions'] = [ - { label: 'Terms and Conditions', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/terms-and-conditions' }, + { label: 'Terms and Conditions', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/terms-and-conditions' }, ] frappe.help.help_links['List/Cheque Print Template'] = [ - { label: 'Cheque Print Template', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/cheque-print-template' }, + { label: 'Cheque Print Template', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/cheque-print-template' }, ] frappe.help.help_links['List/Email Account'] = [ - { label: 'Email Account', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/email/email-account' }, + { label: 'Email Account', url: 'https://erpnext.com/docs/user/manual/en/setting-up/email/email-account' }, ] frappe.help.help_links['List/Notification'] = [ - { label: 'Notification', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/email/notifications' }, + { label: 'Notification', url: 'https://erpnext.com/docs/user/manual/en/setting-up/email/notifications' }, ] frappe.help.help_links['Form/Notification'] = [ - { label: 'Notification', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/email/notifications' }, + { label: 'Notification', url: 'https://erpnext.com/docs/user/manual/en/setting-up/email/notifications' }, ] frappe.help.help_links['List/Email Digest'] = [ - { label: 'Email Digest', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/email/email-digest' }, + { label: 'Email Digest', url: 'https://erpnext.com/docs/user/manual/en/setting-up/email/email-digest' }, ] frappe.help.help_links['List/Auto Email Report'] = [ - { label: 'Auto Email Reports', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/email/email-reports' }, + { label: 'Auto Email Reports', url: 'https://erpnext.com/docs/user/manual/en/setting-up/email/email-reports' }, ] frappe.help.help_links['Form/Print Settings'] = [ - { label: 'Print Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/print-settings' }, + { label: 'Print Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/print-settings' }, ] frappe.help.help_links['print-format-builder'] = [ - { label: 'Print Format Builder', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/print-settings' }, + { label: 'Print Format Builder', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/print-settings' }, ] frappe.help.help_links['List/Print Heading'] = [ - { label: 'Print Heading', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/print-headings' }, + { label: 'Print Heading', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/print-headings' }, ] //setup-integrations frappe.help.help_links['Form/PayPal Settings'] = [ - { label: 'PayPal Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/integrations/paypal-integration' }, + { label: 'PayPal Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/integrations/paypal-integration' }, ] frappe.help.help_links['Form/Razorpay Settings'] = [ - { label: 'Razorpay Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/integrations/razorpay-integration' }, + { label: 'Razorpay Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/integrations/razorpay-integration' }, ] frappe.help.help_links['Form/Dropbox Settings'] = [ - { label: 'Dropbox Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/integrations/dropbox-backup' }, + { label: 'Dropbox Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/integrations/dropbox-backup' }, ] frappe.help.help_links['Form/LDAP Settings'] = [ - { label: 'LDAP Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/integrations/ldap-integration' }, + { label: 'LDAP Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/integrations/ldap-integration' }, ] frappe.help.help_links['Form/Stripe Settings'] = [ - { label: 'Stripe Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/integrations/stripe-integration' }, + { label: 'Stripe Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/integrations/stripe-integration' }, ] //Sales frappe.help.help_links['Form/Quotation'] = [ - { label: 'Quotation', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/quotation' }, - { label: 'Applying Discount', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/applying-discount' }, - { label: 'Sales Person', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/sales-persons-in-the-sales-transactions' }, - { label: 'Applying Margin', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/adding-margin' }, + { label: 'Quotation', url: 'https://erpnext.com/docs/user/manual/en/selling/quotation' }, + { label: 'Applying Discount', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/applying-discount' }, + { label: 'Sales Person', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/sales-persons-in-the-sales-transactions' }, + { label: 'Applying Margin', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/adding-margin' }, ] frappe.help.help_links['List/Customer'] = [ - { label: 'Customer', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/customer' }, - { label: 'Credit Limit', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/credit-limit' }, + { label: 'Customer', url: 'https://erpnext.com/docs/user/manual/en/CRM/customer' }, + { label: 'Credit Limit', url: 'https://erpnext.com/docs/user/manual/en/accounts/credit-limit' }, ] frappe.help.help_links['Form/Customer'] = [ - { label: 'Customer', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/customer' }, - { label: 'Credit Limit', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/credit-limit' }, + { label: 'Customer', url: 'https://erpnext.com/docs/user/manual/en/CRM/customer' }, + { label: 'Credit Limit', url: 'https://erpnext.com/docs/user/manual/en/accounts/credit-limit' }, ] frappe.help.help_links['List/Sales Taxes and Charges Template'] = [ - { label: 'Setting Up Taxes', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/setting-up-taxes' }, + { label: 'Setting Up Taxes', url: 'https://erpnext.com/docs/user/manual/en/setting-up/setting-up-taxes' }, ] frappe.help.help_links['Form/Sales Taxes and Charges Template'] = [ - { label: 'Setting Up Taxes', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/setting-up-taxes' }, + { label: 'Setting Up Taxes', url: 'https://erpnext.com/docs/user/manual/en/setting-up/setting-up-taxes' }, ] frappe.help.help_links['List/Sales Order'] = [ - { label: 'Sales Order', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/sales-order' }, - { label: 'Recurring Sales Order', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/recurring-orders-and-invoices' }, - { label: 'Applying Discount', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/applying-discount' }, + { label: 'Sales Order', url: 'https://erpnext.com/docs/user/manual/en/selling/sales-order' }, + { label: 'Recurring Sales Order', url: 'https://erpnext.com/docs/user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Applying Discount', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/applying-discount' }, ] frappe.help.help_links['Form/Sales Order'] = [ - { label: 'Sales Order', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/sales-order' }, - { label: 'Recurring Sales Order', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/recurring-orders-and-invoices' }, - { label: 'Applying Discount', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/applying-discount' }, - { label: 'Drop Shipping', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/drop-shipping' }, - { label: 'Sales Person', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/sales-persons-in-the-sales-transactions' }, - { label: 'Close Sales Order', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/close-sales-order' }, - { label: 'Applying Margin', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/adding-margin' }, + { label: 'Sales Order', url: 'https://erpnext.com/docs/user/manual/en/selling/sales-order' }, + { label: 'Recurring Sales Order', url: 'https://erpnext.com/docs/user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Applying Discount', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/applying-discount' }, + { label: 'Drop Shipping', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/drop-shipping' }, + { label: 'Sales Person', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/sales-persons-in-the-sales-transactions' }, + { label: 'Close Sales Order', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/close-sales-order' }, + { label: 'Applying Margin', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/adding-margin' }, ] frappe.help.help_links['Form/Product Bundle'] = [ - { label: 'Product Bundle', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/setup/product-bundle' }, + { label: 'Product Bundle', url: 'https://erpnext.com/docs/user/manual/en/selling/setup/product-bundle' }, ] frappe.help.help_links['Form/Selling Settings'] = [ - { label: 'Selling Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/setup/selling-settings' }, + { label: 'Selling Settings', url: 'https://erpnext.com/docs/user/manual/en/selling/setup/selling-settings' }, ] //Buying frappe.help.help_links['List/Supplier'] = [ - { label: 'Supplier', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/supplier' }, + { label: 'Supplier', url: 'https://erpnext.com/docs/user/manual/en/buying/supplier' }, ] frappe.help.help_links['Form/Supplier'] = [ - { label: 'Supplier', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/supplier' }, + { label: 'Supplier', url: 'https://erpnext.com/docs/user/manual/en/buying/supplier' }, ] frappe.help.help_links['Form/Request for Quotation'] = [ - { label: 'Request for Quotation', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/request-for-quotation' }, - { label: 'RFQ Video', url: 'https://frappe.github.io/erpnext/user/videos/learn/request-for-quotation.html' }, + { label: 'Request for Quotation', url: 'https://erpnext.com/docs/user/manual/en/buying/request-for-quotation' }, + { label: 'RFQ Video', url: 'https://erpnext.com/docs/user/videos/learn/request-for-quotation.html' }, ] frappe.help.help_links['Form/Supplier Quotation'] = [ - { label: 'Supplier Quotation', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/supplier-quotation' }, + { label: 'Supplier Quotation', url: 'https://erpnext.com/docs/user/manual/en/buying/supplier-quotation' }, ] frappe.help.help_links['Form/Buying Settings'] = [ - { label: 'Buying Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/setup/buying-settings' }, + { label: 'Buying Settings', url: 'https://erpnext.com/docs/user/manual/en/buying/setup/buying-settings' }, ] frappe.help.help_links['List/Purchase Order'] = [ - { label: 'Purchase Order', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/purchase-order' }, - { label: 'Recurring Purchase Order', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Purchase Order', url: 'https://erpnext.com/docs/user/manual/en/buying/purchase-order' }, + { label: 'Recurring Purchase Order', url: 'https://erpnext.com/docs/user/manual/en/accounts/recurring-orders-and-invoices' }, ] frappe.help.help_links['Form/Purchase Order'] = [ - { label: 'Purchase Order', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/purchase-order' }, - { label: 'Item UoM', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/articles/purchasing-in-different-unit' }, - { label: 'Supplier Item Code', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/articles/maintaining-suppliers-part-no-in-item' }, - { label: 'Recurring Purchase Order', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/recurring-orders-and-invoices' }, - { label: 'Subcontracting', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/subcontracting' }, + { label: 'Purchase Order', url: 'https://erpnext.com/docs/user/manual/en/buying/purchase-order' }, + { label: 'Item UoM', url: 'https://erpnext.com/docs/user/manual/en/buying/articles/purchasing-in-different-unit' }, + { label: 'Supplier Item Code', url: 'https://erpnext.com/docs/user/manual/en/buying/articles/maintaining-suppliers-part-no-in-item' }, + { label: 'Recurring Purchase Order', url: 'https://erpnext.com/docs/user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Subcontracting', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/subcontracting' }, ] frappe.help.help_links['List/Purchase Taxes and Charges Template'] = [ - { label: 'Setting Up Taxes', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/setting-up-taxes' }, + { label: 'Setting Up Taxes', url: 'https://erpnext.com/docs/user/manual/en/setting-up/setting-up-taxes' }, ] frappe.help.help_links['List/POS Profile'] = [ - { label: 'POS Profile', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/pos-setting' }, + { label: 'POS Profile', url: 'https://erpnext.com/docs/user/manual/en/setting-up/pos-setting' }, ] frappe.help.help_links['List/Price List'] = [ - { label: 'Price List', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/price-lists' }, + { label: 'Price List', url: 'https://erpnext.com/docs/user/manual/en/setting-up/price-lists' }, ] frappe.help.help_links['List/Authorization Rule'] = [ - { label: 'Authorization Rule', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/authorization-rule' }, + { label: 'Authorization Rule', url: 'https://erpnext.com/docs/user/manual/en/setting-up/authorization-rule' }, ] frappe.help.help_links['Form/SMS Settings'] = [ - { label: 'SMS Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/sms-setting' }, + { label: 'SMS Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/sms-setting' }, ] frappe.help.help_links['List/Stock Reconciliation'] = [ - { label: 'Stock Reconciliation', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/stock-reconciliation-for-non-serialized-item' }, + { label: 'Stock Reconciliation', url: 'https://erpnext.com/docs/user/manual/en/setting-up/stock-reconciliation-for-non-serialized-item' }, ] frappe.help.help_links['Tree/Territory'] = [ - { label: 'Territory', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/territory' }, + { label: 'Territory', url: 'https://erpnext.com/docs/user/manual/en/setting-up/territory' }, ] frappe.help.help_links['Form/Dropbox Backup'] = [ - { label: 'Dropbox Backup', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/third-party-backups' }, - { label: 'Setting Up Dropbox Backup', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/setting-up-dropbox-backups' }, + { label: 'Dropbox Backup', url: 'https://erpnext.com/docs/user/manual/en/setting-up/third-party-backups' }, + { label: 'Setting Up Dropbox Backup', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/setting-up-dropbox-backups' }, ] frappe.help.help_links['List/Workflow'] = [ - { label: 'Workflow', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/workflows' }, + { label: 'Workflow', url: 'https://erpnext.com/docs/user/manual/en/setting-up/workflows' }, ] frappe.help.help_links['List/Company'] = [ - { label: 'Company', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/company-setup' }, - { label: 'Managing Multiple Companies', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/managing-multiple-companies' }, - { label: 'Delete All Related Transactions for a Company', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/delete-a-company-and-all-related-transactions' }, + { label: 'Company', url: 'https://erpnext.com/docs/user/manual/en/setting-up/company-setup' }, + { label: 'Managing Multiple Companies', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/managing-multiple-companies' }, + { label: 'Delete All Related Transactions for a Company', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/delete-a-company-and-all-related-transactions' }, ] //Accounts frappe.help.help_links['modules/Accounts'] = [ - { label: 'Introduction to Accounts', url: 'http://frappe.github.io/erpnext/user/manual/en/accounts/' }, - { label: 'Chart of Accounts', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/chart-of-accounts.html' }, - { label: 'Multi Currency Accounting', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/multi-currency-accounting' }, + { label: 'Introduction to Accounts', url: 'http://erpnext.com/docs/user/manual/en/accounts/' }, + { label: 'Chart of Accounts', url: 'https://erpnext.com/docs/user/manual/en/accounts/chart-of-accounts.html' }, + { label: 'Multi Currency Accounting', url: 'https://erpnext.com/docs/user/manual/en/accounts/multi-currency-accounting' }, ] frappe.help.help_links['Tree/Account'] = [ - { label: 'Chart of Accounts', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/chart-of-accounts' }, - { label: 'Managing Tree Mastes', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/managing-tree-structure-masters' }, + { label: 'Chart of Accounts', url: 'https://erpnext.com/docs/user/manual/en/accounts/chart-of-accounts' }, + { label: 'Managing Tree Mastes', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/managing-tree-structure-masters' }, ] frappe.help.help_links['Form/Sales Invoice'] = [ - { label: 'Sales Invoice', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/sales-invoice' }, - { label: 'Accounts Opening Balance', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/opening-accounts' }, - { label: 'Sales Return', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/sales-return' }, - { label: 'Recurring Sales Invoice', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Sales Invoice', url: 'https://erpnext.com/docs/user/manual/en/accounts/sales-invoice' }, + { label: 'Accounts Opening Balance', url: 'https://erpnext.com/docs/user/manual/en/accounts/opening-accounts' }, + { label: 'Sales Return', url: 'https://erpnext.com/docs/user/manual/en/stock/sales-return' }, + { label: 'Recurring Sales Invoice', url: 'https://erpnext.com/docs/user/manual/en/accounts/recurring-orders-and-invoices' }, ] frappe.help.help_links['List/Sales Invoice'] = [ - { label: 'Sales Invoice', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/sales-invoice' }, - { label: 'Accounts Opening Balance', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/opening-accounts' }, - { label: 'Sales Return', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/sales-return' }, - { label: 'Recurring Sales Invoice', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Sales Invoice', url: 'https://erpnext.com/docs/user/manual/en/accounts/sales-invoice' }, + { label: 'Accounts Opening Balance', url: 'https://erpnext.com/docs/user/manual/en/accounts/opening-accounts' }, + { label: 'Sales Return', url: 'https://erpnext.com/docs/user/manual/en/stock/sales-return' }, + { label: 'Recurring Sales Invoice', url: 'https://erpnext.com/docs/user/manual/en/accounts/recurring-orders-and-invoices' }, ] frappe.help.help_links['pos'] = [ - { label: 'Point of Sale Invoice', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/point-of-sale-pos-invoice' }, + { label: 'Point of Sale Invoice', url: 'https://erpnext.com/docs/user/manual/en/accounts/point-of-sale-pos-invoice' }, ] frappe.help.help_links['List/POS Profile'] = [ - { label: 'Point of Sale Profile', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/pos-setting' }, + { label: 'Point of Sale Profile', url: 'https://erpnext.com/docs/user/manual/en/setting-up/pos-setting' }, ] frappe.help.help_links['List/Purchase Invoice'] = [ - { label: 'Purchase Invoice', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/purchase-invoice' }, - { label: 'Accounts Opening Balance', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/opening-accounts' }, - { label: 'Recurring Purchase Invoice', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Purchase Invoice', url: 'https://erpnext.com/docs/user/manual/en/accounts/purchase-invoice' }, + { label: 'Accounts Opening Balance', url: 'https://erpnext.com/docs/user/manual/en/accounts/opening-accounts' }, + { label: 'Recurring Purchase Invoice', url: 'https://erpnext.com/docs/user/manual/en/accounts/recurring-orders-and-invoices' }, ] frappe.help.help_links['List/Journal Entry'] = [ - { label: 'Journal Entry', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/journal-entry' }, - { label: 'Advance Payment Entry', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/advance-payment-entry' }, - { label: 'Accounts Opening Balance', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/opening-accounts' }, + { label: 'Journal Entry', url: 'https://erpnext.com/docs/user/manual/en/accounts/journal-entry' }, + { label: 'Advance Payment Entry', url: 'https://erpnext.com/docs/user/manual/en/accounts/advance-payment-entry' }, + { label: 'Accounts Opening Balance', url: 'https://erpnext.com/docs/user/manual/en/accounts/opening-accounts' }, ] frappe.help.help_links['List/Payment Entry'] = [ - { label: 'Payment Entry', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/payment-entry' }, + { label: 'Payment Entry', url: 'https://erpnext.com/docs/user/manual/en/accounts/payment-entry' }, ] frappe.help.help_links['List/Payment Request'] = [ - { label: 'Payment Request', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/payment-request' }, + { label: 'Payment Request', url: 'https://erpnext.com/docs/user/manual/en/accounts/payment-request' }, ] frappe.help.help_links['List/Asset'] = [ - { label: 'Managing Fixed Assets', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/managing-fixed-assets' }, + { label: 'Managing Fixed Assets', url: 'https://erpnext.com/docs/user/manual/en/accounts/managing-fixed-assets' }, ] frappe.help.help_links['List/Asset Category'] = [ - { label: 'Asset Category', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/managing-fixed-assets' }, + { label: 'Asset Category', url: 'https://erpnext.com/docs/user/manual/en/accounts/managing-fixed-assets' }, ] frappe.help.help_links['Tree/Cost Center'] = [ - { label: 'Budgeting', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/budgeting' }, + { label: 'Budgeting', url: 'https://erpnext.com/docs/user/manual/en/accounts/budgeting' }, ] frappe.help.help_links['List/Item'] = [ - { label: 'Item', url: 'http://frappe.github.io/erpnext/user/manual/en/stock/item' }, - { label: 'Item Price', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-price' }, - { label: 'Barcode', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/track-items-using-barcode' }, - { label: 'Item Wise Taxation', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/item-wise-taxation' }, - { label: 'Managing Fixed Assets', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/managing-fixed-assets' }, - { label: 'Item Codification', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-codification' }, - { label: 'Item Variants', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-variants' }, - { label: 'Item Valuation', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, + { label: 'Item', url: 'http://erpnext.com/docs/user/manual/en/stock/item' }, + { label: 'Item Price', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-price' }, + { label: 'Barcode', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/track-items-using-barcode' }, + { label: 'Item Wise Taxation', url: 'https://erpnext.com/docs/user/manual/en/accounts/item-wise-taxation' }, + { label: 'Managing Fixed Assets', url: 'https://erpnext.com/docs/user/manual/en/accounts/managing-fixed-assets' }, + { label: 'Item Codification', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-codification' }, + { label: 'Item Variants', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-variants' }, + { label: 'Item Valuation', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, ] frappe.help.help_links['Form/Item'] = [ - { label: 'Item', url: 'http://frappe.github.io/erpnext/user/manual/en/stock/item' }, - { label: 'Item Price', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-price' }, - { label: 'Barcode', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/track-items-using-barcode' }, - { label: 'Item Wise Taxation', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/item-wise-taxation' }, - { label: 'Managing Fixed Assets', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/managing-fixed-assets' }, - { label: 'Item Codification', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-codification' }, - { label: 'Item Variants', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-variants' }, - { label: 'Item Valuation', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, + { label: 'Item', url: 'http://erpnext.com/docs/user/manual/en/stock/item' }, + { label: 'Item Price', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-price' }, + { label: 'Barcode', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/track-items-using-barcode' }, + { label: 'Item Wise Taxation', url: 'https://erpnext.com/docs/user/manual/en/accounts/item-wise-taxation' }, + { label: 'Managing Fixed Assets', url: 'https://erpnext.com/docs/user/manual/en/accounts/managing-fixed-assets' }, + { label: 'Item Codification', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-codification' }, + { label: 'Item Variants', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-variants' }, + { label: 'Item Valuation', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, ] frappe.help.help_links['List/Purchase Receipt'] = [ - { label: 'Purchase Receipt', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/purchase-receipt' }, - { label: 'Barcode', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/track-items-using-barcode' }, + { label: 'Purchase Receipt', url: 'https://erpnext.com/docs/user/manual/en/stock/purchase-receipt' }, + { label: 'Barcode', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/track-items-using-barcode' }, ] frappe.help.help_links['List/Delivery Note'] = [ - { label: 'Delivery Note', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/delivery-note' }, - { label: 'Barcode', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/track-items-using-barcode' }, - { label: 'Sales Return', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/sales-return' }, + { label: 'Delivery Note', url: 'https://erpnext.com/docs/user/manual/en/stock/delivery-note' }, + { label: 'Barcode', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/track-items-using-barcode' }, + { label: 'Sales Return', url: 'https://erpnext.com/docs/user/manual/en/stock/sales-return' }, ] frappe.help.help_links['Form/Delivery Note'] = [ - { label: 'Delivery Note', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/delivery-note' }, - { label: 'Sales Return', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/sales-return' }, - { label: 'Barcode', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/track-items-using-barcode' }, - { label: 'Subcontracting', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/subcontracting' }, + { label: 'Delivery Note', url: 'https://erpnext.com/docs/user/manual/en/stock/delivery-note' }, + { label: 'Sales Return', url: 'https://erpnext.com/docs/user/manual/en/stock/sales-return' }, + { label: 'Barcode', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/track-items-using-barcode' }, + { label: 'Subcontracting', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/subcontracting' }, ] frappe.help.help_links['List/Installation Note'] = [ - { label: 'Installation Note', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/installation-note' }, + { label: 'Installation Note', url: 'https://erpnext.com/docs/user/manual/en/stock/installation-note' }, ] frappe.help.help_links['Tree'] = [ - { label: 'Managing Tree Structure Masters', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/managing-tree-structure-masters' }, + { label: 'Managing Tree Structure Masters', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/managing-tree-structure-masters' }, ] frappe.help.help_links['List/Budget'] = [ - { label: 'Budgeting', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/budgeting' }, + { label: 'Budgeting', url: 'https://erpnext.com/docs/user/manual/en/accounts/budgeting' }, ] //Stock frappe.help.help_links['List/Material Request'] = [ - { label: 'Material Request', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/material-request' }, - { label: 'Auto-creation of Material Request', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/auto-creation-of-material-request' }, + { label: 'Material Request', url: 'https://erpnext.com/docs/user/manual/en/stock/material-request' }, + { label: 'Auto-creation of Material Request', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/auto-creation-of-material-request' }, ] frappe.help.help_links['Form/Material Request'] = [ - { label: 'Material Request', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/material-request' }, - { label: 'Auto-creation of Material Request', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/auto-creation-of-material-request' }, + { label: 'Material Request', url: 'https://erpnext.com/docs/user/manual/en/stock/material-request' }, + { label: 'Auto-creation of Material Request', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/auto-creation-of-material-request' }, ] frappe.help.help_links['Form/Stock Entry'] = [ - { label: 'Stock Entry', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/stock-entry' }, - { label: 'Stock Entry Types', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/stock-entry-purpose' }, - { label: 'Repack Entry', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/repack-entry' }, - { label: 'Opening Stock', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/opening-stock' }, - { label: 'Subcontracting', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/subcontracting' }, + { label: 'Stock Entry', url: 'https://erpnext.com/docs/user/manual/en/stock/stock-entry' }, + { label: 'Stock Entry Types', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/stock-entry-purpose' }, + { label: 'Repack Entry', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/repack-entry' }, + { label: 'Opening Stock', url: 'https://erpnext.com/docs/user/manual/en/stock/opening-stock' }, + { label: 'Subcontracting', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/subcontracting' }, ] frappe.help.help_links['List/Stock Entry'] = [ - { label: 'Stock Entry', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/stock-entry' }, + { label: 'Stock Entry', url: 'https://erpnext.com/docs/user/manual/en/stock/stock-entry' }, ] frappe.help.help_links['Tree/Warehouse'] = [ - { label: 'Warehouse', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/warehouse' }, + { label: 'Warehouse', url: 'https://erpnext.com/docs/user/manual/en/stock/warehouse' }, ] frappe.help.help_links['List/Serial No'] = [ - { label: 'Serial No', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/serial-no' }, + { label: 'Serial No', url: 'https://erpnext.com/docs/user/manual/en/stock/serial-no' }, ] frappe.help.help_links['Form/Serial No'] = [ - { label: 'Serial No', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/serial-no' }, + { label: 'Serial No', url: 'https://erpnext.com/docs/user/manual/en/stock/serial-no' }, ] frappe.help.help_links['Form/Batch'] = [ - { label: 'Batch', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/batch' }, + { label: 'Batch', url: 'https://erpnext.com/docs/user/manual/en/stock/batch' }, ] frappe.help.help_links['Form/Packing Slip'] = [ - { label: 'Packing Slip', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/tools/packing-slip' }, + { label: 'Packing Slip', url: 'https://erpnext.com/docs/user/manual/en/stock/tools/packing-slip' }, ] frappe.help.help_links['Form/Quality Inspection'] = [ - { label: 'Quality Inspection', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/tools/quality-inspection' }, + { label: 'Quality Inspection', url: 'https://erpnext.com/docs/user/manual/en/stock/tools/quality-inspection' }, ] frappe.help.help_links['Form/Landed Cost Voucher'] = [ - { label: 'Landed Cost Voucher', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/tools/landed-cost-voucher' }, + { label: 'Landed Cost Voucher', url: 'https://erpnext.com/docs/user/manual/en/stock/tools/landed-cost-voucher' }, ] frappe.help.help_links['Tree/Item Group'] = [ - { label: 'Item Group', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/setup/item-group' }, + { label: 'Item Group', url: 'https://erpnext.com/docs/user/manual/en/stock/setup/item-group' }, ] frappe.help.help_links['Form/Item Attribute'] = [ - { label: 'Item Attribute', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/setup/item-attribute' }, + { label: 'Item Attribute', url: 'https://erpnext.com/docs/user/manual/en/stock/setup/item-attribute' }, ] frappe.help.help_links['Form/UOM'] = [ - { label: 'Fractions in UOM', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/managing-fractions-in-uom' }, + { label: 'Fractions in UOM', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/managing-fractions-in-uom' }, ] frappe.help.help_links['Form/Stock Reconciliation'] = [ - { label: 'Opening Stock Entry', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/opening-stock' }, + { label: 'Opening Stock Entry', url: 'https://erpnext.com/docs/user/manual/en/stock/opening-stock' }, ] //CRM frappe.help.help_links['Form/Lead'] = [ - { label: 'Lead', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/lead' }, + { label: 'Lead', url: 'https://erpnext.com/docs/user/manual/en/CRM/lead' }, ] frappe.help.help_links['Form/Opportunity'] = [ - { label: 'Opportunity', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/opportunity' }, + { label: 'Opportunity', url: 'https://erpnext.com/docs/user/manual/en/CRM/opportunity' }, ] frappe.help.help_links['Form/Address'] = [ - { label: 'Address', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/contact' }, + { label: 'Address', url: 'https://erpnext.com/docs/user/manual/en/CRM/contact' }, ] frappe.help.help_links['Form/Contact'] = [ - { label: 'Contact', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/contact' }, + { label: 'Contact', url: 'https://erpnext.com/docs/user/manual/en/CRM/contact' }, ] frappe.help.help_links['Form/Newsletter'] = [ - { label: 'Newsletter', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/newsletter' }, + { label: 'Newsletter', url: 'https://erpnext.com/docs/user/manual/en/CRM/newsletter' }, ] frappe.help.help_links['Form/Campaign'] = [ - { label: 'Campaign', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/setup/campaign' }, + { label: 'Campaign', url: 'https://erpnext.com/docs/user/manual/en/CRM/setup/campaign' }, ] frappe.help.help_links['Tree/Sales Person'] = [ - { label: 'Sales Person', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/setup/sales-person' }, + { label: 'Sales Person', url: 'https://erpnext.com/docs/user/manual/en/CRM/setup/sales-person' }, ] frappe.help.help_links['Form/Sales Person'] = [ - { label: 'Sales Person Target', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/setup/sales-person-target-allocation' }, + { label: 'Sales Person Target', url: 'https://erpnext.com/docs/user/manual/en/selling/setup/sales-person-target-allocation' }, ] //Support frappe.help.help_links['List/Feedback Trigger'] = [ - { label: 'Feedback Trigger', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/feedback/setting-up-feedback' }, + { label: 'Feedback Trigger', url: 'https://erpnext.com/docs/user/manual/en/setting-up/feedback/setting-up-feedback' }, ] frappe.help.help_links['List/Feedback Request'] = [ - { label: 'Feedback Request', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/feedback/submit-feedback' }, + { label: 'Feedback Request', url: 'https://erpnext.com/docs/user/manual/en/setting-up/feedback/submit-feedback' }, ] frappe.help.help_links['List/Feedback Request'] = [ - { label: 'Feedback Request', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/feedback/submit-feedback' }, + { label: 'Feedback Request', url: 'https://erpnext.com/docs/user/manual/en/setting-up/feedback/submit-feedback' }, ] //Manufacturing frappe.help.help_links['Form/BOM'] = [ - { label: 'Bill of Material', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/bill-of-materials' }, - { label: 'Nested BOM Structure', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/articles/nested-bom-structure' }, + { label: 'Bill of Material', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/bill-of-materials' }, + { label: 'Nested BOM Structure', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/articles/nested-bom-structure' }, ] frappe.help.help_links['Form/Work Order'] = [ - { label: 'Work Order', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/work-order' }, + { label: 'Work Order', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/work-order' }, ] frappe.help.help_links['Form/Workstation'] = [ - { label: 'Workstation', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/workstation' }, + { label: 'Workstation', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/workstation' }, ] frappe.help.help_links['Form/Operation'] = [ - { label: 'Operation', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/operation' }, + { label: 'Operation', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/operation' }, ] frappe.help.help_links['Form/BOM Update Tool'] = [ - { label: 'BOM Update Tool', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/tools/bom-update-tool' }, + { label: 'BOM Update Tool', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/tools/bom-update-tool' }, ] //Customize frappe.help.help_links['Form/Customize Form'] = [ - { label: 'Custom Field', url: 'https://frappe.github.io/erpnext/user/manual/en/customize-erpnext/custom-field' }, - { label: 'Customize Field', url: 'https://frappe.github.io/erpnext/user/manual/en/customize-erpnext/customize-form' }, + { label: 'Custom Field', url: 'https://erpnext.com/docs/user/manual/en/customize-erpnext/custom-field' }, + { label: 'Customize Field', url: 'https://erpnext.com/docs/user/manual/en/customize-erpnext/customize-form' }, ] frappe.help.help_links['Form/Custom Field'] = [ - { label: 'Custom Field', url: 'https://frappe.github.io/erpnext/user/manual/en/customize-erpnext/custom-field' }, + { label: 'Custom Field', url: 'https://erpnext.com/docs/user/manual/en/customize-erpnext/custom-field' }, ] frappe.help.help_links['Form/Custom Field'] = [ - { label: 'Custom Field', url: 'https://frappe.github.io/erpnext/user/manual/en/customize-erpnext/custom-field' }, + { label: 'Custom Field', url: 'https://erpnext.com/docs/user/manual/en/customize-erpnext/custom-field' }, ] \ No newline at end of file From f2d0be729978bc85ca9b79bcac755337699e468f Mon Sep 17 00:00:00 2001 From: scmmishra Date: Mon, 21 Jan 2019 19:35:46 +0530 Subject: [PATCH 24/86] [feat] Modified help config --- erpnext/public/js/conf.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/public/js/conf.js b/erpnext/public/js/conf.js index 32081550e6..7eb59e0489 100644 --- a/erpnext/public/js/conf.js +++ b/erpnext/public/js/conf.js @@ -14,7 +14,7 @@ $(document).bind('toolbar_setup', function() { $('.navbar-home').html(''); - $('[data-link="docs"]').attr("href", "https://frappe.github.io/erpnext/") + $('[data-link="docs"]').attr("href", "https://erpnext.com/docs") $('[data-link="issues"]').attr("href", "https://github.com/frappe/erpnext/issues") @@ -23,7 +23,8 @@ $(document).bind('toolbar_setup', function() { // additional help links for erpnext var $help_menu = $('.dropdown-help ul .documentation-links'); - + $('
  • '+__('Documentation')+'
  • ').insertBefore($help_menu); $('
  • '+__('User Forum')+'
  • ').insertBefore($help_menu); $('
  • '+__('Documentation')+'
  • ').insertBefore($help_menu); $('
  • '+__('User Forum')+'
  • ').insertBefore($help_menu); diff --git a/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html b/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html index 57fce28eeb..5808ce73ee 100644 --- a/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html +++ b/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html @@ -22,7 +22,7 @@ diff --git a/erpnext/utilities/user_progress.py b/erpnext/utilities/user_progress.py index 2901d52276..71a5f90464 100644 --- a/erpnext/utilities/user_progress.py +++ b/erpnext/utilities/user_progress.py @@ -33,7 +33,7 @@ def get_slide_settings(): help_links=[ { "label": _("Chart of Accounts"), - "url": ["https://erpnext.org/docs/user/manual/en/accounts/chart-of-accounts"] + "url": ["https://erpnext.com/docs/user/manual/en/accounts/chart-of-accounts"] }, { "label": _("Opening Balances"), @@ -56,7 +56,7 @@ def get_slide_settings(): help_links=[ { "label": _('Learn More'), - "url": ["https://erpnext.org/docs/user/manual/en/setting-up/setting-company-sales-goal"] + "url": ["https://erpnext.com/docs/user/manual/en/setting-up/setting-company-sales-goal"] } ] ), @@ -80,7 +80,7 @@ def get_slide_settings(): help_links=[ { "label": _('Learn More'), - "url": ["https://erpnext.org/docs/user/manual/en/CRM/customer.html"] + "url": ["https://erpnext.com/docs/user/manual/en/CRM/customer.html"] } ] ), @@ -123,7 +123,7 @@ def get_slide_settings(): help_links=[ { "label": _('Learn More'), - "url": ["https://erpnext.org/docs/user/manual/en/buying/supplier"] + "url": ["https://erpnext.com/docs/user/manual/en/buying/supplier"] }, { "label": _('Customers and Suppliers'), @@ -261,7 +261,7 @@ def get_slide_settings(): help_links=[ { "label": _('Learn More'), - "url": ["https://erpnext.org/docs/user/manual/en/setting-up/users-and-permissions"] + "url": ["https://erpnext.com/docs/user/manual/en/setting-up/users-and-permissions"] }, { "label": _('Users and Permissions'), From 9731a02657026132ada006505e61fb5e7d9eba4d Mon Sep 17 00:00:00 2001 From: scmmishra Date: Fri, 25 Jan 2019 13:14:11 +0530 Subject: [PATCH 53/86] [feat] Added docsUrl variable to configure help_links --- erpnext/public/js/help_links.js | 352 ++++++++++++++++---------------- 1 file changed, 177 insertions(+), 175 deletions(-) diff --git a/erpnext/public/js/help_links.js b/erpnext/public/js/help_links.js index 20ba56a5ec..d3cc688cd2 100644 --- a/erpnext/public/js/help_links.js +++ b/erpnext/public/js/help_links.js @@ -1,524 +1,526 @@ frappe.provide('frappe.help.help_links'); +const docsUrl = 'https://erpnext.com/docs/' + frappe.help.help_links['Form/Rename Tool'] = [ - { label: 'Bulk Rename', url: 'https://erpnext.com/docs/user/manual/en/setting-up/data/bulk-rename' }, + { label: 'Bulk Rename', url: docsUrl + 'user/manual/en/setting-up/data/bulk-rename' }, ] //Setup frappe.help.help_links['List/User'] = [ - { label: 'New User', url: 'https://erpnext.com/docs/user/manual/en/setting-up/users-and-permissions/adding-users' }, - { label: 'Rename User', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/rename-user' }, + { label: 'New User', url: docsUrl + 'user/manual/en/setting-up/users-and-permissions/adding-users' }, + { label: 'Rename User', url: docsUrl + 'user/manual/en/setting-up/articles/rename-user' }, ] frappe.help.help_links['permission-manager'] = [ - { label: 'Role Permissions Manager', url: 'https://erpnext.com/docs/user/manual/en/setting-up/users-and-permissions/role-based-permissions' }, - { label: 'Managing Perm Level in Permissions Manager', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/managing-perm-level' }, - { label: 'User Permissions', url: 'https://erpnext.com/docs/user/manual/en/setting-up/users-and-permissions/user-permissions' }, - { label: 'Sharing', url: 'https://erpnext.com/docs/user/manual/en/setting-up/users-and-permissions/sharing' }, - { label: 'Password', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/change-password' }, + { label: 'Role Permissions Manager', url: docsUrl + 'user/manual/en/setting-up/users-and-permissions/role-based-permissions' }, + { label: 'Managing Perm Level in Permissions Manager', url: docsUrl + 'user/manual/en/setting-up/articles/managing-perm-level' }, + { label: 'User Permissions', url: docsUrl + 'user/manual/en/setting-up/users-and-permissions/user-permissions' }, + { label: 'Sharing', url: docsUrl + 'user/manual/en/setting-up/users-and-permissions/sharing' }, + { label: 'Password', url: docsUrl + 'user/manual/en/setting-up/articles/change-password' }, ] frappe.help.help_links['Form/System Settings'] = [ - { label: 'Naming Series', url: 'https://erpnext.com/docs/user/manual/en/setting-up/settings/system-settings' }, + { label: 'Naming Series', url: docsUrl + 'user/manual/en/setting-up/settings/system-settings' }, ] frappe.help.help_links['data-import-tool'] = [ - { label: 'Importing and Exporting Data', url: 'https://erpnext.com/docs/user/manual/en/setting-up/data/data-import-tool' }, - { label: 'Overwriting Data from Data Import Tool', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/overwriting-data-from-data-import-tool' }, + { label: 'Importing and Exporting Data', url: docsUrl + 'user/manual/en/setting-up/data/data-import-tool' }, + { label: 'Overwriting Data from Data Import Tool', url: docsUrl + 'user/manual/en/setting-up/articles/overwriting-data-from-data-import-tool' }, ] frappe.help.help_links['module_setup'] = [ - { label: 'Role Permissions Manager', url: 'https://erpnext.com/docs/user/manual/en/setting-up/users-and-permissions/role-based-permissions' }, + { label: 'Role Permissions Manager', url: docsUrl + 'user/manual/en/setting-up/users-and-permissions/role-based-permissions' }, ] frappe.help.help_links['Form/Naming Series'] = [ - { label: 'Naming Series', url: 'https://erpnext.com/docs/user/manual/en/setting-up/settings/naming-series' }, - { label: 'Setting the Current Value for Naming Series', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/naming-series-current-value' }, + { label: 'Naming Series', url: docsUrl + 'user/manual/en/setting-up/settings/naming-series' }, + { label: 'Setting the Current Value for Naming Series', url: docsUrl + 'user/manual/en/setting-up/articles/naming-series-current-value' }, ] frappe.help.help_links['Form/Global Defaults'] = [ - { label: 'Global Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/settings/global-defaults' }, + { label: 'Global Settings', url: docsUrl + 'user/manual/en/setting-up/settings/global-defaults' }, ] frappe.help.help_links['Form/Email Digest'] = [ - { label: 'Email Digest', url: 'https://erpnext.com/docs/user/manual/en/setting-up/email/email-digest' }, + { label: 'Email Digest', url: docsUrl + 'user/manual/en/setting-up/email/email-digest' }, ] frappe.help.help_links['List/Print Heading'] = [ - { label: 'Print Heading', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/print-headings' }, + { label: 'Print Heading', url: docsUrl + 'user/manual/en/setting-up/print/print-headings' }, ] frappe.help.help_links['List/Letter Head'] = [ - { label: 'Letter Head', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/letter-head' }, + { label: 'Letter Head', url: docsUrl + 'user/manual/en/setting-up/print/letter-head' }, ] frappe.help.help_links['List/Address Template'] = [ - { label: 'Address Template', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/address-template' }, + { label: 'Address Template', url: docsUrl + 'user/manual/en/setting-up/print/address-template' }, ] frappe.help.help_links['List/Terms and Conditions'] = [ - { label: 'Terms and Conditions', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/terms-and-conditions' }, + { label: 'Terms and Conditions', url: docsUrl + 'user/manual/en/setting-up/print/terms-and-conditions' }, ] frappe.help.help_links['List/Cheque Print Template'] = [ - { label: 'Cheque Print Template', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/cheque-print-template' }, + { label: 'Cheque Print Template', url: docsUrl + 'user/manual/en/setting-up/print/cheque-print-template' }, ] frappe.help.help_links['List/Email Account'] = [ - { label: 'Email Account', url: 'https://erpnext.com/docs/user/manual/en/setting-up/email/email-account' }, + { label: 'Email Account', url: docsUrl + 'user/manual/en/setting-up/email/email-account' }, ] frappe.help.help_links['List/Notification'] = [ - { label: 'Notification', url: 'https://erpnext.com/docs/user/manual/en/setting-up/email/notifications' }, + { label: 'Notification', url: docsUrl + 'user/manual/en/setting-up/email/notifications' }, ] frappe.help.help_links['Form/Notification'] = [ - { label: 'Notification', url: 'https://erpnext.com/docs/user/manual/en/setting-up/email/notifications' }, + { label: 'Notification', url: docsUrl + 'user/manual/en/setting-up/email/notifications' }, ] frappe.help.help_links['List/Email Digest'] = [ - { label: 'Email Digest', url: 'https://erpnext.com/docs/user/manual/en/setting-up/email/email-digest' }, + { label: 'Email Digest', url: docsUrl + 'user/manual/en/setting-up/email/email-digest' }, ] frappe.help.help_links['List/Auto Email Report'] = [ - { label: 'Auto Email Reports', url: 'https://erpnext.com/docs/user/manual/en/setting-up/email/email-reports' }, + { label: 'Auto Email Reports', url: docsUrl + 'user/manual/en/setting-up/email/email-reports' }, ] frappe.help.help_links['Form/Print Settings'] = [ - { label: 'Print Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/print-settings' }, + { label: 'Print Settings', url: docsUrl + 'user/manual/en/setting-up/print/print-settings' }, ] frappe.help.help_links['print-format-builder'] = [ - { label: 'Print Format Builder', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/print-settings' }, + { label: 'Print Format Builder', url: docsUrl + 'user/manual/en/setting-up/print/print-settings' }, ] frappe.help.help_links['List/Print Heading'] = [ - { label: 'Print Heading', url: 'https://erpnext.com/docs/user/manual/en/setting-up/print/print-headings' }, + { label: 'Print Heading', url: docsUrl + 'user/manual/en/setting-up/print/print-headings' }, ] //setup-integrations frappe.help.help_links['Form/PayPal Settings'] = [ - { label: 'PayPal Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/integrations/paypal-integration' }, + { label: 'PayPal Settings', url: docsUrl + 'user/manual/en/setting-up/integrations/paypal-integration' }, ] frappe.help.help_links['Form/Razorpay Settings'] = [ - { label: 'Razorpay Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/integrations/razorpay-integration' }, + { label: 'Razorpay Settings', url: docsUrl + 'user/manual/en/setting-up/integrations/razorpay-integration' }, ] frappe.help.help_links['Form/Dropbox Settings'] = [ - { label: 'Dropbox Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/integrations/dropbox-backup' }, + { label: 'Dropbox Settings', url: docsUrl + 'user/manual/en/setting-up/integrations/dropbox-backup' }, ] frappe.help.help_links['Form/LDAP Settings'] = [ - { label: 'LDAP Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/integrations/ldap-integration' }, + { label: 'LDAP Settings', url: docsUrl + 'user/manual/en/setting-up/integrations/ldap-integration' }, ] frappe.help.help_links['Form/Stripe Settings'] = [ - { label: 'Stripe Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/integrations/stripe-integration' }, + { label: 'Stripe Settings', url: docsUrl + 'user/manual/en/setting-up/integrations/stripe-integration' }, ] //Sales frappe.help.help_links['Form/Quotation'] = [ - { label: 'Quotation', url: 'https://erpnext.com/docs/user/manual/en/selling/quotation' }, - { label: 'Applying Discount', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/applying-discount' }, - { label: 'Sales Person', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/sales-persons-in-the-sales-transactions' }, - { label: 'Applying Margin', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/adding-margin' }, + { label: 'Quotation', url: docsUrl + 'user/manual/en/selling/quotation' }, + { label: 'Applying Discount', url: docsUrl + 'user/manual/en/selling/articles/applying-discount' }, + { label: 'Sales Person', url: docsUrl + 'user/manual/en/selling/articles/sales-persons-in-the-sales-transactions' }, + { label: 'Applying Margin', url: docsUrl + 'user/manual/en/selling/articles/adding-margin' }, ] frappe.help.help_links['List/Customer'] = [ - { label: 'Customer', url: 'https://erpnext.com/docs/user/manual/en/CRM/customer' }, - { label: 'Credit Limit', url: 'https://erpnext.com/docs/user/manual/en/accounts/credit-limit' }, + { label: 'Customer', url: docsUrl + 'user/manual/en/CRM/customer' }, + { label: 'Credit Limit', url: docsUrl + 'user/manual/en/accounts/credit-limit' }, ] frappe.help.help_links['Form/Customer'] = [ - { label: 'Customer', url: 'https://erpnext.com/docs/user/manual/en/CRM/customer' }, - { label: 'Credit Limit', url: 'https://erpnext.com/docs/user/manual/en/accounts/credit-limit' }, + { label: 'Customer', url: docsUrl + 'user/manual/en/CRM/customer' }, + { label: 'Credit Limit', url: docsUrl + 'user/manual/en/accounts/credit-limit' }, ] frappe.help.help_links['List/Sales Taxes and Charges Template'] = [ - { label: 'Setting Up Taxes', url: 'https://erpnext.com/docs/user/manual/en/setting-up/setting-up-taxes' }, + { label: 'Setting Up Taxes', url: docsUrl + 'user/manual/en/setting-up/setting-up-taxes' }, ] frappe.help.help_links['Form/Sales Taxes and Charges Template'] = [ - { label: 'Setting Up Taxes', url: 'https://erpnext.com/docs/user/manual/en/setting-up/setting-up-taxes' }, + { label: 'Setting Up Taxes', url: docsUrl + 'user/manual/en/setting-up/setting-up-taxes' }, ] frappe.help.help_links['List/Sales Order'] = [ - { label: 'Sales Order', url: 'https://erpnext.com/docs/user/manual/en/selling/sales-order' }, - { label: 'Recurring Sales Order', url: 'https://erpnext.com/docs/user/manual/en/accounts/recurring-orders-and-invoices' }, - { label: 'Applying Discount', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/applying-discount' }, + { label: 'Sales Order', url: docsUrl + 'user/manual/en/selling/sales-order' }, + { label: 'Recurring Sales Order', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Applying Discount', url: docsUrl + 'user/manual/en/selling/articles/applying-discount' }, ] frappe.help.help_links['Form/Sales Order'] = [ - { label: 'Sales Order', url: 'https://erpnext.com/docs/user/manual/en/selling/sales-order' }, - { label: 'Recurring Sales Order', url: 'https://erpnext.com/docs/user/manual/en/accounts/recurring-orders-and-invoices' }, - { label: 'Applying Discount', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/applying-discount' }, - { label: 'Drop Shipping', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/drop-shipping' }, - { label: 'Sales Person', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/sales-persons-in-the-sales-transactions' }, - { label: 'Close Sales Order', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/close-sales-order' }, - { label: 'Applying Margin', url: 'https://erpnext.com/docs/user/manual/en/selling/articles/adding-margin' }, + { label: 'Sales Order', url: docsUrl + 'user/manual/en/selling/sales-order' }, + { label: 'Recurring Sales Order', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Applying Discount', url: docsUrl + 'user/manual/en/selling/articles/applying-discount' }, + { label: 'Drop Shipping', url: docsUrl + 'user/manual/en/selling/articles/drop-shipping' }, + { label: 'Sales Person', url: docsUrl + 'user/manual/en/selling/articles/sales-persons-in-the-sales-transactions' }, + { label: 'Close Sales Order', url: docsUrl + 'user/manual/en/selling/articles/close-sales-order' }, + { label: 'Applying Margin', url: docsUrl + 'user/manual/en/selling/articles/adding-margin' }, ] frappe.help.help_links['Form/Product Bundle'] = [ - { label: 'Product Bundle', url: 'https://erpnext.com/docs/user/manual/en/selling/setup/product-bundle' }, + { label: 'Product Bundle', url: docsUrl + 'user/manual/en/selling/setup/product-bundle' }, ] frappe.help.help_links['Form/Selling Settings'] = [ - { label: 'Selling Settings', url: 'https://erpnext.com/docs/user/manual/en/selling/setup/selling-settings' }, + { label: 'Selling Settings', url: docsUrl + 'user/manual/en/selling/setup/selling-settings' }, ] //Buying frappe.help.help_links['List/Supplier'] = [ - { label: 'Supplier', url: 'https://erpnext.com/docs/user/manual/en/buying/supplier' }, + { label: 'Supplier', url: docsUrl + 'user/manual/en/buying/supplier' }, ] frappe.help.help_links['Form/Supplier'] = [ - { label: 'Supplier', url: 'https://erpnext.com/docs/user/manual/en/buying/supplier' }, + { label: 'Supplier', url: docsUrl + 'user/manual/en/buying/supplier' }, ] frappe.help.help_links['Form/Request for Quotation'] = [ - { label: 'Request for Quotation', url: 'https://erpnext.com/docs/user/manual/en/buying/request-for-quotation' }, - { label: 'RFQ Video', url: 'https://erpnext.com/docs/user/videos/learn/request-for-quotation.html' }, + { label: 'Request for Quotation', url: docsUrl + 'user/manual/en/buying/request-for-quotation' }, + { label: 'RFQ Video', url: docsUrl + 'user/videos/learn/request-for-quotation.html' }, ] frappe.help.help_links['Form/Supplier Quotation'] = [ - { label: 'Supplier Quotation', url: 'https://erpnext.com/docs/user/manual/en/buying/supplier-quotation' }, + { label: 'Supplier Quotation', url: docsUrl + 'user/manual/en/buying/supplier-quotation' }, ] frappe.help.help_links['Form/Buying Settings'] = [ - { label: 'Buying Settings', url: 'https://erpnext.com/docs/user/manual/en/buying/setup/buying-settings' }, + { label: 'Buying Settings', url: docsUrl + 'user/manual/en/buying/setup/buying-settings' }, ] frappe.help.help_links['List/Purchase Order'] = [ - { label: 'Purchase Order', url: 'https://erpnext.com/docs/user/manual/en/buying/purchase-order' }, - { label: 'Recurring Purchase Order', url: 'https://erpnext.com/docs/user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Purchase Order', url: docsUrl + 'user/manual/en/buying/purchase-order' }, + { label: 'Recurring Purchase Order', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' }, ] frappe.help.help_links['Form/Purchase Order'] = [ - { label: 'Purchase Order', url: 'https://erpnext.com/docs/user/manual/en/buying/purchase-order' }, - { label: 'Item UoM', url: 'https://erpnext.com/docs/user/manual/en/buying/articles/purchasing-in-different-unit' }, - { label: 'Supplier Item Code', url: 'https://erpnext.com/docs/user/manual/en/buying/articles/maintaining-suppliers-part-no-in-item' }, - { label: 'Recurring Purchase Order', url: 'https://erpnext.com/docs/user/manual/en/accounts/recurring-orders-and-invoices' }, - { label: 'Subcontracting', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/subcontracting' }, + { label: 'Purchase Order', url: docsUrl + 'user/manual/en/buying/purchase-order' }, + { label: 'Item UoM', url: docsUrl + 'user/manual/en/buying/articles/purchasing-in-different-unit' }, + { label: 'Supplier Item Code', url: docsUrl + 'user/manual/en/buying/articles/maintaining-suppliers-part-no-in-item' }, + { label: 'Recurring Purchase Order', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Subcontracting', url: docsUrl + 'user/manual/en/manufacturing/subcontracting' }, ] frappe.help.help_links['List/Purchase Taxes and Charges Template'] = [ - { label: 'Setting Up Taxes', url: 'https://erpnext.com/docs/user/manual/en/setting-up/setting-up-taxes' }, + { label: 'Setting Up Taxes', url: docsUrl + 'user/manual/en/setting-up/setting-up-taxes' }, ] frappe.help.help_links['List/POS Profile'] = [ - { label: 'POS Profile', url: 'https://erpnext.com/docs/user/manual/en/setting-up/pos-setting' }, + { label: 'POS Profile', url: docsUrl + 'user/manual/en/setting-up/pos-setting' }, ] frappe.help.help_links['List/Price List'] = [ - { label: 'Price List', url: 'https://erpnext.com/docs/user/manual/en/setting-up/price-lists' }, + { label: 'Price List', url: docsUrl + 'user/manual/en/setting-up/price-lists' }, ] frappe.help.help_links['List/Authorization Rule'] = [ - { label: 'Authorization Rule', url: 'https://erpnext.com/docs/user/manual/en/setting-up/authorization-rule' }, + { label: 'Authorization Rule', url: docsUrl + 'user/manual/en/setting-up/authorization-rule' }, ] frappe.help.help_links['Form/SMS Settings'] = [ - { label: 'SMS Settings', url: 'https://erpnext.com/docs/user/manual/en/setting-up/sms-setting' }, + { label: 'SMS Settings', url: docsUrl + 'user/manual/en/setting-up/sms-setting' }, ] frappe.help.help_links['List/Stock Reconciliation'] = [ - { label: 'Stock Reconciliation', url: 'https://erpnext.com/docs/user/manual/en/setting-up/stock-reconciliation-for-non-serialized-item' }, + { label: 'Stock Reconciliation', url: docsUrl + 'user/manual/en/setting-up/stock-reconciliation-for-non-serialized-item' }, ] frappe.help.help_links['Tree/Territory'] = [ - { label: 'Territory', url: 'https://erpnext.com/docs/user/manual/en/setting-up/territory' }, + { label: 'Territory', url: docsUrl + 'user/manual/en/setting-up/territory' }, ] frappe.help.help_links['Form/Dropbox Backup'] = [ - { label: 'Dropbox Backup', url: 'https://erpnext.com/docs/user/manual/en/setting-up/third-party-backups' }, - { label: 'Setting Up Dropbox Backup', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/setting-up-dropbox-backups' }, + { label: 'Dropbox Backup', url: docsUrl + 'user/manual/en/setting-up/third-party-backups' }, + { label: 'Setting Up Dropbox Backup', url: docsUrl + 'user/manual/en/setting-up/articles/setting-up-dropbox-backups' }, ] frappe.help.help_links['List/Workflow'] = [ - { label: 'Workflow', url: 'https://erpnext.com/docs/user/manual/en/setting-up/workflows' }, + { label: 'Workflow', url: docsUrl + 'user/manual/en/setting-up/workflows' }, ] frappe.help.help_links['List/Company'] = [ - { label: 'Company', url: 'https://erpnext.com/docs/user/manual/en/setting-up/company-setup' }, - { label: 'Managing Multiple Companies', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/managing-multiple-companies' }, - { label: 'Delete All Related Transactions for a Company', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/delete-a-company-and-all-related-transactions' }, + { label: 'Company', url: docsUrl + 'user/manual/en/setting-up/company-setup' }, + { label: 'Managing Multiple Companies', url: docsUrl + 'user/manual/en/setting-up/articles/managing-multiple-companies' }, + { label: 'Delete All Related Transactions for a Company', url: docsUrl + 'user/manual/en/setting-up/articles/delete-a-company-and-all-related-transactions' }, ] //Accounts frappe.help.help_links['modules/Accounts'] = [ { label: 'Introduction to Accounts', url: 'http://erpnext.com/docs/user/manual/en/accounts/' }, - { label: 'Chart of Accounts', url: 'https://erpnext.com/docs/user/manual/en/accounts/chart-of-accounts.html' }, - { label: 'Multi Currency Accounting', url: 'https://erpnext.com/docs/user/manual/en/accounts/multi-currency-accounting' }, + { label: 'Chart of Accounts', url: docsUrl + 'user/manual/en/accounts/chart-of-accounts.html' }, + { label: 'Multi Currency Accounting', url: docsUrl + 'user/manual/en/accounts/multi-currency-accounting' }, ] frappe.help.help_links['Tree/Account'] = [ - { label: 'Chart of Accounts', url: 'https://erpnext.com/docs/user/manual/en/accounts/chart-of-accounts' }, - { label: 'Managing Tree Mastes', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/managing-tree-structure-masters' }, + { label: 'Chart of Accounts', url: docsUrl + 'user/manual/en/accounts/chart-of-accounts' }, + { label: 'Managing Tree Mastes', url: docsUrl + 'user/manual/en/setting-up/articles/managing-tree-structure-masters' }, ] frappe.help.help_links['Form/Sales Invoice'] = [ - { label: 'Sales Invoice', url: 'https://erpnext.com/docs/user/manual/en/accounts/sales-invoice' }, - { label: 'Accounts Opening Balance', url: 'https://erpnext.com/docs/user/manual/en/accounts/opening-accounts' }, - { label: 'Sales Return', url: 'https://erpnext.com/docs/user/manual/en/stock/sales-return' }, - { label: 'Recurring Sales Invoice', url: 'https://erpnext.com/docs/user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Sales Invoice', url: docsUrl + 'user/manual/en/accounts/sales-invoice' }, + { label: 'Accounts Opening Balance', url: docsUrl + 'user/manual/en/accounts/opening-accounts' }, + { label: 'Sales Return', url: docsUrl + 'user/manual/en/stock/sales-return' }, + { label: 'Recurring Sales Invoice', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' }, ] frappe.help.help_links['List/Sales Invoice'] = [ - { label: 'Sales Invoice', url: 'https://erpnext.com/docs/user/manual/en/accounts/sales-invoice' }, - { label: 'Accounts Opening Balance', url: 'https://erpnext.com/docs/user/manual/en/accounts/opening-accounts' }, - { label: 'Sales Return', url: 'https://erpnext.com/docs/user/manual/en/stock/sales-return' }, - { label: 'Recurring Sales Invoice', url: 'https://erpnext.com/docs/user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Sales Invoice', url: docsUrl + 'user/manual/en/accounts/sales-invoice' }, + { label: 'Accounts Opening Balance', url: docsUrl + 'user/manual/en/accounts/opening-accounts' }, + { label: 'Sales Return', url: docsUrl + 'user/manual/en/stock/sales-return' }, + { label: 'Recurring Sales Invoice', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' }, ] frappe.help.help_links['pos'] = [ - { label: 'Point of Sale Invoice', url: 'https://erpnext.com/docs/user/manual/en/accounts/point-of-sale-pos-invoice' }, + { label: 'Point of Sale Invoice', url: docsUrl + 'user/manual/en/accounts/point-of-sale-pos-invoice' }, ] frappe.help.help_links['List/POS Profile'] = [ - { label: 'Point of Sale Profile', url: 'https://erpnext.com/docs/user/manual/en/setting-up/pos-setting' }, + { label: 'Point of Sale Profile', url: docsUrl + 'user/manual/en/setting-up/pos-setting' }, ] frappe.help.help_links['List/Purchase Invoice'] = [ - { label: 'Purchase Invoice', url: 'https://erpnext.com/docs/user/manual/en/accounts/purchase-invoice' }, - { label: 'Accounts Opening Balance', url: 'https://erpnext.com/docs/user/manual/en/accounts/opening-accounts' }, - { label: 'Recurring Purchase Invoice', url: 'https://erpnext.com/docs/user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Purchase Invoice', url: docsUrl + 'user/manual/en/accounts/purchase-invoice' }, + { label: 'Accounts Opening Balance', url: docsUrl + 'user/manual/en/accounts/opening-accounts' }, + { label: 'Recurring Purchase Invoice', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' }, ] frappe.help.help_links['List/Journal Entry'] = [ - { label: 'Journal Entry', url: 'https://erpnext.com/docs/user/manual/en/accounts/journal-entry' }, - { label: 'Advance Payment Entry', url: 'https://erpnext.com/docs/user/manual/en/accounts/advance-payment-entry' }, - { label: 'Accounts Opening Balance', url: 'https://erpnext.com/docs/user/manual/en/accounts/opening-accounts' }, + { label: 'Journal Entry', url: docsUrl + 'user/manual/en/accounts/journal-entry' }, + { label: 'Advance Payment Entry', url: docsUrl + 'user/manual/en/accounts/advance-payment-entry' }, + { label: 'Accounts Opening Balance', url: docsUrl + 'user/manual/en/accounts/opening-accounts' }, ] frappe.help.help_links['List/Payment Entry'] = [ - { label: 'Payment Entry', url: 'https://erpnext.com/docs/user/manual/en/accounts/payment-entry' }, + { label: 'Payment Entry', url: docsUrl + 'user/manual/en/accounts/payment-entry' }, ] frappe.help.help_links['List/Payment Request'] = [ - { label: 'Payment Request', url: 'https://erpnext.com/docs/user/manual/en/accounts/payment-request' }, + { label: 'Payment Request', url: docsUrl + 'user/manual/en/accounts/payment-request' }, ] frappe.help.help_links['List/Asset'] = [ - { label: 'Managing Fixed Assets', url: 'https://erpnext.com/docs/user/manual/en/accounts/managing-fixed-assets' }, + { label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, ] frappe.help.help_links['List/Asset Category'] = [ - { label: 'Asset Category', url: 'https://erpnext.com/docs/user/manual/en/accounts/managing-fixed-assets' }, + { label: 'Asset Category', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, ] frappe.help.help_links['Tree/Cost Center'] = [ - { label: 'Budgeting', url: 'https://erpnext.com/docs/user/manual/en/accounts/budgeting' }, + { label: 'Budgeting', url: docsUrl + 'user/manual/en/accounts/budgeting' }, ] frappe.help.help_links['List/Item'] = [ { label: 'Item', url: 'http://erpnext.com/docs/user/manual/en/stock/item' }, - { label: 'Item Price', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-price' }, - { label: 'Barcode', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/track-items-using-barcode' }, - { label: 'Item Wise Taxation', url: 'https://erpnext.com/docs/user/manual/en/accounts/item-wise-taxation' }, - { label: 'Managing Fixed Assets', url: 'https://erpnext.com/docs/user/manual/en/accounts/managing-fixed-assets' }, - { label: 'Item Codification', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-codification' }, - { label: 'Item Variants', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-variants' }, - { label: 'Item Valuation', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, + { label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' }, + { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, + { label: 'Item Wise Taxation', url: docsUrl + 'user/manual/en/accounts/item-wise-taxation' }, + { label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, + { label: 'Item Codification', url: docsUrl + 'user/manual/en/stock/item/item-codification' }, + { label: 'Item Variants', url: docsUrl + 'user/manual/en/stock/item/item-variants' }, + { label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, ] frappe.help.help_links['Form/Item'] = [ { label: 'Item', url: 'http://erpnext.com/docs/user/manual/en/stock/item' }, - { label: 'Item Price', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-price' }, - { label: 'Barcode', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/track-items-using-barcode' }, - { label: 'Item Wise Taxation', url: 'https://erpnext.com/docs/user/manual/en/accounts/item-wise-taxation' }, - { label: 'Managing Fixed Assets', url: 'https://erpnext.com/docs/user/manual/en/accounts/managing-fixed-assets' }, - { label: 'Item Codification', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-codification' }, - { label: 'Item Variants', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-variants' }, - { label: 'Item Valuation', url: 'https://erpnext.com/docs/user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, + { label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' }, + { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, + { label: 'Item Wise Taxation', url: docsUrl + 'user/manual/en/accounts/item-wise-taxation' }, + { label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, + { label: 'Item Codification', url: docsUrl + 'user/manual/en/stock/item/item-codification' }, + { label: 'Item Variants', url: docsUrl + 'user/manual/en/stock/item/item-variants' }, + { label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, ] frappe.help.help_links['List/Purchase Receipt'] = [ - { label: 'Purchase Receipt', url: 'https://erpnext.com/docs/user/manual/en/stock/purchase-receipt' }, - { label: 'Barcode', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/track-items-using-barcode' }, + { label: 'Purchase Receipt', url: docsUrl + 'user/manual/en/stock/purchase-receipt' }, + { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, ] frappe.help.help_links['List/Delivery Note'] = [ - { label: 'Delivery Note', url: 'https://erpnext.com/docs/user/manual/en/stock/delivery-note' }, - { label: 'Barcode', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/track-items-using-barcode' }, - { label: 'Sales Return', url: 'https://erpnext.com/docs/user/manual/en/stock/sales-return' }, + { label: 'Delivery Note', url: docsUrl + 'user/manual/en/stock/delivery-note' }, + { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, + { label: 'Sales Return', url: docsUrl + 'user/manual/en/stock/sales-return' }, ] frappe.help.help_links['Form/Delivery Note'] = [ - { label: 'Delivery Note', url: 'https://erpnext.com/docs/user/manual/en/stock/delivery-note' }, - { label: 'Sales Return', url: 'https://erpnext.com/docs/user/manual/en/stock/sales-return' }, - { label: 'Barcode', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/track-items-using-barcode' }, - { label: 'Subcontracting', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/subcontracting' }, + { label: 'Delivery Note', url: docsUrl + 'user/manual/en/stock/delivery-note' }, + { label: 'Sales Return', url: docsUrl + 'user/manual/en/stock/sales-return' }, + { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, + { label: 'Subcontracting', url: docsUrl + 'user/manual/en/manufacturing/subcontracting' }, ] frappe.help.help_links['List/Installation Note'] = [ - { label: 'Installation Note', url: 'https://erpnext.com/docs/user/manual/en/stock/installation-note' }, + { label: 'Installation Note', url: docsUrl + 'user/manual/en/stock/installation-note' }, ] frappe.help.help_links['Tree'] = [ - { label: 'Managing Tree Structure Masters', url: 'https://erpnext.com/docs/user/manual/en/setting-up/articles/managing-tree-structure-masters' }, + { label: 'Managing Tree Structure Masters', url: docsUrl + 'user/manual/en/setting-up/articles/managing-tree-structure-masters' }, ] frappe.help.help_links['List/Budget'] = [ - { label: 'Budgeting', url: 'https://erpnext.com/docs/user/manual/en/accounts/budgeting' }, + { label: 'Budgeting', url: docsUrl + 'user/manual/en/accounts/budgeting' }, ] //Stock frappe.help.help_links['List/Material Request'] = [ - { label: 'Material Request', url: 'https://erpnext.com/docs/user/manual/en/stock/material-request' }, - { label: 'Auto-creation of Material Request', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/auto-creation-of-material-request' }, + { label: 'Material Request', url: docsUrl + 'user/manual/en/stock/material-request' }, + { label: 'Auto-creation of Material Request', url: docsUrl + 'user/manual/en/stock/articles/auto-creation-of-material-request' }, ] frappe.help.help_links['Form/Material Request'] = [ - { label: 'Material Request', url: 'https://erpnext.com/docs/user/manual/en/stock/material-request' }, - { label: 'Auto-creation of Material Request', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/auto-creation-of-material-request' }, + { label: 'Material Request', url: docsUrl + 'user/manual/en/stock/material-request' }, + { label: 'Auto-creation of Material Request', url: docsUrl + 'user/manual/en/stock/articles/auto-creation-of-material-request' }, ] frappe.help.help_links['Form/Stock Entry'] = [ - { label: 'Stock Entry', url: 'https://erpnext.com/docs/user/manual/en/stock/stock-entry' }, - { label: 'Stock Entry Types', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/stock-entry-purpose' }, - { label: 'Repack Entry', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/repack-entry' }, - { label: 'Opening Stock', url: 'https://erpnext.com/docs/user/manual/en/stock/opening-stock' }, - { label: 'Subcontracting', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/subcontracting' }, + { label: 'Stock Entry', url: docsUrl + 'user/manual/en/stock/stock-entry' }, + { label: 'Stock Entry Types', url: docsUrl + 'user/manual/en/stock/articles/stock-entry-purpose' }, + { label: 'Repack Entry', url: docsUrl + 'user/manual/en/stock/articles/repack-entry' }, + { label: 'Opening Stock', url: docsUrl + 'user/manual/en/stock/opening-stock' }, + { label: 'Subcontracting', url: docsUrl + 'user/manual/en/manufacturing/subcontracting' }, ] frappe.help.help_links['List/Stock Entry'] = [ - { label: 'Stock Entry', url: 'https://erpnext.com/docs/user/manual/en/stock/stock-entry' }, + { label: 'Stock Entry', url: docsUrl + 'user/manual/en/stock/stock-entry' }, ] frappe.help.help_links['Tree/Warehouse'] = [ - { label: 'Warehouse', url: 'https://erpnext.com/docs/user/manual/en/stock/warehouse' }, + { label: 'Warehouse', url: docsUrl + 'user/manual/en/stock/warehouse' }, ] frappe.help.help_links['List/Serial No'] = [ - { label: 'Serial No', url: 'https://erpnext.com/docs/user/manual/en/stock/serial-no' }, + { label: 'Serial No', url: docsUrl + 'user/manual/en/stock/serial-no' }, ] frappe.help.help_links['Form/Serial No'] = [ - { label: 'Serial No', url: 'https://erpnext.com/docs/user/manual/en/stock/serial-no' }, + { label: 'Serial No', url: docsUrl + 'user/manual/en/stock/serial-no' }, ] frappe.help.help_links['Form/Batch'] = [ - { label: 'Batch', url: 'https://erpnext.com/docs/user/manual/en/stock/batch' }, + { label: 'Batch', url: docsUrl + 'user/manual/en/stock/batch' }, ] frappe.help.help_links['Form/Packing Slip'] = [ - { label: 'Packing Slip', url: 'https://erpnext.com/docs/user/manual/en/stock/tools/packing-slip' }, + { label: 'Packing Slip', url: docsUrl + 'user/manual/en/stock/tools/packing-slip' }, ] frappe.help.help_links['Form/Quality Inspection'] = [ - { label: 'Quality Inspection', url: 'https://erpnext.com/docs/user/manual/en/stock/tools/quality-inspection' }, + { label: 'Quality Inspection', url: docsUrl + 'user/manual/en/stock/tools/quality-inspection' }, ] frappe.help.help_links['Form/Landed Cost Voucher'] = [ - { label: 'Landed Cost Voucher', url: 'https://erpnext.com/docs/user/manual/en/stock/tools/landed-cost-voucher' }, + { label: 'Landed Cost Voucher', url: docsUrl + 'user/manual/en/stock/tools/landed-cost-voucher' }, ] frappe.help.help_links['Tree/Item Group'] = [ - { label: 'Item Group', url: 'https://erpnext.com/docs/user/manual/en/stock/setup/item-group' }, + { label: 'Item Group', url: docsUrl + 'user/manual/en/stock/setup/item-group' }, ] frappe.help.help_links['Form/Item Attribute'] = [ - { label: 'Item Attribute', url: 'https://erpnext.com/docs/user/manual/en/stock/setup/item-attribute' }, + { label: 'Item Attribute', url: docsUrl + 'user/manual/en/stock/setup/item-attribute' }, ] frappe.help.help_links['Form/UOM'] = [ - { label: 'Fractions in UOM', url: 'https://erpnext.com/docs/user/manual/en/stock/articles/managing-fractions-in-uom' }, + { label: 'Fractions in UOM', url: docsUrl + 'user/manual/en/stock/articles/managing-fractions-in-uom' }, ] frappe.help.help_links['Form/Stock Reconciliation'] = [ - { label: 'Opening Stock Entry', url: 'https://erpnext.com/docs/user/manual/en/stock/opening-stock' }, + { label: 'Opening Stock Entry', url: docsUrl + 'user/manual/en/stock/opening-stock' }, ] //CRM frappe.help.help_links['Form/Lead'] = [ - { label: 'Lead', url: 'https://erpnext.com/docs/user/manual/en/CRM/lead' }, + { label: 'Lead', url: docsUrl + 'user/manual/en/CRM/lead' }, ] frappe.help.help_links['Form/Opportunity'] = [ - { label: 'Opportunity', url: 'https://erpnext.com/docs/user/manual/en/CRM/opportunity' }, + { label: 'Opportunity', url: docsUrl + 'user/manual/en/CRM/opportunity' }, ] frappe.help.help_links['Form/Address'] = [ - { label: 'Address', url: 'https://erpnext.com/docs/user/manual/en/CRM/contact' }, + { label: 'Address', url: docsUrl + 'user/manual/en/CRM/contact' }, ] frappe.help.help_links['Form/Contact'] = [ - { label: 'Contact', url: 'https://erpnext.com/docs/user/manual/en/CRM/contact' }, + { label: 'Contact', url: docsUrl + 'user/manual/en/CRM/contact' }, ] frappe.help.help_links['Form/Newsletter'] = [ - { label: 'Newsletter', url: 'https://erpnext.com/docs/user/manual/en/CRM/newsletter' }, + { label: 'Newsletter', url: docsUrl + 'user/manual/en/CRM/newsletter' }, ] frappe.help.help_links['Form/Campaign'] = [ - { label: 'Campaign', url: 'https://erpnext.com/docs/user/manual/en/CRM/setup/campaign' }, + { label: 'Campaign', url: docsUrl + 'user/manual/en/CRM/setup/campaign' }, ] frappe.help.help_links['Tree/Sales Person'] = [ - { label: 'Sales Person', url: 'https://erpnext.com/docs/user/manual/en/CRM/setup/sales-person' }, + { label: 'Sales Person', url: docsUrl + 'user/manual/en/CRM/setup/sales-person' }, ] frappe.help.help_links['Form/Sales Person'] = [ - { label: 'Sales Person Target', url: 'https://erpnext.com/docs/user/manual/en/selling/setup/sales-person-target-allocation' }, + { label: 'Sales Person Target', url: docsUrl + 'user/manual/en/selling/setup/sales-person-target-allocation' }, ] //Support frappe.help.help_links['List/Feedback Trigger'] = [ - { label: 'Feedback Trigger', url: 'https://erpnext.com/docs/user/manual/en/setting-up/feedback/setting-up-feedback' }, + { label: 'Feedback Trigger', url: docsUrl + 'user/manual/en/setting-up/feedback/setting-up-feedback' }, ] frappe.help.help_links['List/Feedback Request'] = [ - { label: 'Feedback Request', url: 'https://erpnext.com/docs/user/manual/en/setting-up/feedback/submit-feedback' }, + { label: 'Feedback Request', url: docsUrl + 'user/manual/en/setting-up/feedback/submit-feedback' }, ] frappe.help.help_links['List/Feedback Request'] = [ - { label: 'Feedback Request', url: 'https://erpnext.com/docs/user/manual/en/setting-up/feedback/submit-feedback' }, + { label: 'Feedback Request', url: docsUrl + 'user/manual/en/setting-up/feedback/submit-feedback' }, ] //Manufacturing frappe.help.help_links['Form/BOM'] = [ - { label: 'Bill of Material', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/bill-of-materials' }, - { label: 'Nested BOM Structure', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/articles/nested-bom-structure' }, + { label: 'Bill of Material', url: docsUrl + 'user/manual/en/manufacturing/bill-of-materials' }, + { label: 'Nested BOM Structure', url: docsUrl + 'user/manual/en/manufacturing/articles/nested-bom-structure' }, ] frappe.help.help_links['Form/Work Order'] = [ - { label: 'Work Order', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/work-order' }, + { label: 'Work Order', url: docsUrl + 'user/manual/en/manufacturing/work-order' }, ] frappe.help.help_links['Form/Workstation'] = [ - { label: 'Workstation', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/workstation' }, + { label: 'Workstation', url: docsUrl + 'user/manual/en/manufacturing/workstation' }, ] frappe.help.help_links['Form/Operation'] = [ - { label: 'Operation', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/operation' }, + { label: 'Operation', url: docsUrl + 'user/manual/en/manufacturing/operation' }, ] frappe.help.help_links['Form/BOM Update Tool'] = [ - { label: 'BOM Update Tool', url: 'https://erpnext.com/docs/user/manual/en/manufacturing/tools/bom-update-tool' }, + { label: 'BOM Update Tool', url: docsUrl + 'user/manual/en/manufacturing/tools/bom-update-tool' }, ] //Customize frappe.help.help_links['Form/Customize Form'] = [ - { label: 'Custom Field', url: 'https://erpnext.com/docs/user/manual/en/customize-erpnext/custom-field' }, - { label: 'Customize Field', url: 'https://erpnext.com/docs/user/manual/en/customize-erpnext/customize-form' }, + { label: 'Custom Field', url: docsUrl + 'user/manual/en/customize-erpnext/custom-field' }, + { label: 'Customize Field', url: docsUrl + 'user/manual/en/customize-erpnext/customize-form' }, ] frappe.help.help_links['Form/Custom Field'] = [ - { label: 'Custom Field', url: 'https://erpnext.com/docs/user/manual/en/customize-erpnext/custom-field' }, + { label: 'Custom Field', url: docsUrl + 'user/manual/en/customize-erpnext/custom-field' }, ] frappe.help.help_links['Form/Custom Field'] = [ - { label: 'Custom Field', url: 'https://erpnext.com/docs/user/manual/en/customize-erpnext/custom-field' }, + { label: 'Custom Field', url: docsUrl + 'user/manual/en/customize-erpnext/custom-field' }, ] \ No newline at end of file From d71de2a23e1dd3d1f7a3b866f8b0a73a90207cf5 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Fri, 25 Jan 2019 14:27:23 +0530 Subject: [PATCH 54/86] [fix] Code formatting, removed trailing spaces --- erpnext/public/js/help_links.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/erpnext/public/js/help_links.js b/erpnext/public/js/help_links.js index d3cc688cd2..23e7deb6e9 100644 --- a/erpnext/public/js/help_links.js +++ b/erpnext/public/js/help_links.js @@ -1,6 +1,6 @@ frappe.provide('frappe.help.help_links'); -const docsUrl = 'https://erpnext.com/docs/' +const docsUrl = 'https://erpnext.com/docs/'; frappe.help.help_links['Form/Rename Tool'] = [ { label: 'Bulk Rename', url: docsUrl + 'user/manual/en/setting-up/data/bulk-rename' }, @@ -320,12 +320,12 @@ frappe.help.help_links['Tree/Cost Center'] = [ frappe.help.help_links['List/Item'] = [ { label: 'Item', url: 'http://erpnext.com/docs/user/manual/en/stock/item' }, - { label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' }, + { label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' }, { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, { label: 'Item Wise Taxation', url: docsUrl + 'user/manual/en/accounts/item-wise-taxation' }, { label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, { label: 'Item Codification', url: docsUrl + 'user/manual/en/stock/item/item-codification' }, - { label: 'Item Variants', url: docsUrl + 'user/manual/en/stock/item/item-variants' }, + { label: 'Item Variants', url: docsUrl + 'user/manual/en/stock/item/item-variants' }, { label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, ] @@ -336,8 +336,8 @@ frappe.help.help_links['Form/Item'] = [ { label: 'Item Wise Taxation', url: docsUrl + 'user/manual/en/accounts/item-wise-taxation' }, { label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, { label: 'Item Codification', url: docsUrl + 'user/manual/en/stock/item/item-codification' }, - { label: 'Item Variants', url: docsUrl + 'user/manual/en/stock/item/item-variants' }, - { label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, + { label: 'Item Variants', url: docsUrl + 'user/manual/en/stock/item/item-variants' }, + { label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, ] frappe.help.help_links['List/Purchase Receipt'] = [ From f44dfb158287726d0f60613796855f1404e6917d Mon Sep 17 00:00:00 2001 From: scmmishra Date: Fri, 25 Jan 2019 14:56:30 +0530 Subject: [PATCH 55/86] [fix] Formatting issues --- erpnext/public/js/help_links.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/public/js/help_links.js b/erpnext/public/js/help_links.js index 23e7deb6e9..458276eceb 100644 --- a/erpnext/public/js/help_links.js +++ b/erpnext/public/js/help_links.js @@ -326,12 +326,12 @@ frappe.help.help_links['List/Item'] = [ { label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, { label: 'Item Codification', url: docsUrl + 'user/manual/en/stock/item/item-codification' }, { label: 'Item Variants', url: docsUrl + 'user/manual/en/stock/item/item-variants' }, - { label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, + { label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, ] frappe.help.help_links['Form/Item'] = [ { label: 'Item', url: 'http://erpnext.com/docs/user/manual/en/stock/item' }, - { label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' }, + { label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' }, { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, { label: 'Item Wise Taxation', url: docsUrl + 'user/manual/en/accounts/item-wise-taxation' }, { label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, From 67c338fd51f46ef263c3ab9cb0ba49854f32e8a5 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Fri, 25 Jan 2019 15:17:44 +0530 Subject: [PATCH 56/86] [fix] Fixed links Previous commit missed the links starting with `http://` --- erpnext/public/js/help_links.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/public/js/help_links.js b/erpnext/public/js/help_links.js index 458276eceb..17b726ee18 100644 --- a/erpnext/public/js/help_links.js +++ b/erpnext/public/js/help_links.js @@ -254,7 +254,7 @@ frappe.help.help_links['List/Company'] = [ //Accounts frappe.help.help_links['modules/Accounts'] = [ - { label: 'Introduction to Accounts', url: 'http://erpnext.com/docs/user/manual/en/accounts/' }, + { label: 'Introduction to Accounts', url: docsUrl + 'user/manual/en/accounts/' }, { label: 'Chart of Accounts', url: docsUrl + 'user/manual/en/accounts/chart-of-accounts.html' }, { label: 'Multi Currency Accounting', url: docsUrl + 'user/manual/en/accounts/multi-currency-accounting' }, ] @@ -319,7 +319,7 @@ frappe.help.help_links['Tree/Cost Center'] = [ ] frappe.help.help_links['List/Item'] = [ - { label: 'Item', url: 'http://erpnext.com/docs/user/manual/en/stock/item' }, + { label: 'Item', url: docsUrl + 'user/manual/en/stock/item' }, { label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' }, { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, { label: 'Item Wise Taxation', url: docsUrl + 'user/manual/en/accounts/item-wise-taxation' }, @@ -330,7 +330,7 @@ frappe.help.help_links['List/Item'] = [ ] frappe.help.help_links['Form/Item'] = [ - { label: 'Item', url: 'http://erpnext.com/docs/user/manual/en/stock/item' }, + { label: 'Item', url: docsUrl + 'user/manual/en/stock/item' }, { label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' }, { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, { label: 'Item Wise Taxation', url: docsUrl + 'user/manual/en/accounts/item-wise-taxation' }, @@ -523,4 +523,4 @@ frappe.help.help_links['Form/Custom Field'] = [ frappe.help.help_links['Form/Custom Field'] = [ { label: 'Custom Field', url: docsUrl + 'user/manual/en/customize-erpnext/custom-field' }, -] \ No newline at end of file +] From 3476a457ad8448cc5648d3027d76fb0a97cc4c5c Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 25 Jan 2019 16:22:36 +0530 Subject: [PATCH 57/86] fix: minor --- erpnext/accounts/deferred_revenue.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/deferred_revenue.py b/erpnext/accounts/deferred_revenue.py index 2ff2644d18..9ff8b04281 100644 --- a/erpnext/accounts/deferred_revenue.py +++ b/erpnext/accounts/deferred_revenue.py @@ -29,7 +29,7 @@ def validate_service_stop_date(doc): if date_diff(item.service_stop_date, item.service_end_date) > 0: frappe.throw(_("Service Stop Date cannot be after Service End Date")) - if old_stop_dates and old_stop_dates[item.name] and item.service_stop_date!=old_stop_dates[item.name]: + if old_stop_dates and old_stop_dates.get(item.name) and item.service_stop_date!=old_stop_dates[item.name]: frappe.throw(_("Cannot change Service Stop Date for item in row {0}".format(item.idx))) def convert_deferred_expense_to_expense(start_date=None, end_date=None): From 01ca3e5e362f05bc80884ce5c2198f00f1d9a2d1 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 25 Jan 2019 16:25:15 +0530 Subject: [PATCH 58/86] fix(manufacturing): Get raw materials rate from price list ignoring party --- erpnext/manufacturing/doctype/bom/bom.py | 7 +++++-- erpnext/stock/get_item_details.py | 23 +++++++++++++---------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index 57a1cc2593..2317634cfc 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -189,7 +189,8 @@ class BOM(WebsiteGenerator): "currency": self.currency, "conversion_rate": self.conversion_rate or 1, "conversion_factor": arg.get("conversion_factor") or 1, - "plc_conversion_rate": 1 + "plc_conversion_rate": 1, + "ignore_party": True }) item_doc = frappe.get_doc("Item", arg.get("item_code")) out = frappe._dict() @@ -213,7 +214,7 @@ class BOM(WebsiteGenerator): existing_bom_cost = self.total_cost for d in self.get("items"): - d.rate = self.get_rm_rate({ + rate = self.get_rm_rate({ "item_code": d.item_code, "bom_no": d.bom_no, "qty": d.qty, @@ -221,6 +222,8 @@ class BOM(WebsiteGenerator): "stock_uom": d.stock_uom, "conversion_factor": d.conversion_factor }) + if rate: + d.rate = rate d.amount = flt(d.rate) * flt(d.qty) if self.docstatus == 1: diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 9db04cd0ab..e1607a927f 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -424,7 +424,7 @@ def insert_item_price(args): frappe.msgprint(_("Item Price added for {0} in Price List {1}").format(args.item_code, args.price_list), alert=True) -def get_item_price(args, item_code): +def get_item_price(args, item_code, ignore_party=False): """ Get name, price_list_rate from Item Price based on conditions Check if the Derised qty is within the increment of the packing list. @@ -434,17 +434,20 @@ def get_item_price(args, item_code): """ args['item_code'] = item_code - conditions = "where (customer is null or customer = '') and (supplier is null or supplier = '')" - if args.get("customer"): - conditions = "where customer=%(customer)s" - if args.get("supplier"): - conditions = "where supplier=%(supplier)s" - - conditions += """ and item_code=%(item_code)s + conditions = """where item_code=%(item_code)s and price_list=%(price_list)s and ifnull(uom, '') in ('', %(uom)s)""" + if not ignore_party: + conditions += " and (customer is null or customer = '') and (supplier is null or supplier = '')" + if args.get("customer"): + conditions += " and customer=%(customer)s" + + if args.get("supplier"): + conditions += " and supplier=%(supplier)s" + + if args.get('min_qty'): conditions += " and ifnull(min_qty, 0) <= %(min_qty)s" @@ -490,10 +493,10 @@ def get_price_list_rate_for(args, item_code): for field in ["customer", "supplier", "min_qty"]: del item_price_args[field] - general_price_list_rate = get_item_price(item_price_args, item_code) + general_price_list_rate = get_item_price(item_price_args, item_code, ignore_party=args.get("ignore_party")) if not general_price_list_rate and args.get("uom") != args.get("stock_uom"): item_price_args["args"] = args.get("stock_uom") - general_price_list_rate = get_item_price(item_price_args, item_code) + general_price_list_rate = get_item_price(item_price_args, item_code, ignore_party=args.get("ignore_party")) if general_price_list_rate: item_price_data = general_price_list_rate From 49cca7ac76f85f1e7449468d1fb6dae0cb249899 Mon Sep 17 00:00:00 2001 From: deepeshgarg007 Date: Fri, 25 Jan 2019 16:41:01 +0530 Subject: [PATCH 59/86] fix: Customer based price_list in online POS --- erpnext/public/js/controllers/transaction.js | 2 +- erpnext/selling/page/point_of_sale/point_of_sale.js | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 4ef8b2e8be..20e1098806 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -477,7 +477,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ var me = this; var item = frappe.get_doc(cdt, cdn); - if (item.serial_no) { + if (item && item.serial_no) { if (!item.item_code) { this.frm.trigger("item_code", cdt, cdn); } diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.js b/erpnext/selling/page/point_of_sale/point_of_sale.js index 1ee5971271..8b4d684466 100644 --- a/erpnext/selling/page/point_of_sale/point_of_sale.js +++ b/erpnext/selling/page/point_of_sale/point_of_sale.js @@ -164,6 +164,12 @@ erpnext.pos.PointOfSale = class PointOfSale { } } }); + + frappe.ui.form.on('Sales Invoice', 'selling_price_list', (frm) => { + if(this.items) { + this.items.reset_items(); + } + }) } toggle_editing(flag) { @@ -1384,6 +1390,7 @@ class POSItems { } get_items({start = 0, page_length = 40, search_value='', item_group=this.parent_item_group}={}) { + const price_list = this.frm.doc.selling_price_list; return new Promise(res => { frappe.call({ method: "erpnext.selling.page.point_of_sale.point_of_sale.get_items", @@ -1391,10 +1398,10 @@ class POSItems { args: { start, page_length, - 'price_list': this.frm.doc.selling_price_list, + price_list, item_group, search_value, - 'pos_profile': this.frm.doc.pos_profile + pos_profile: this.frm.doc.pos_profile } }).then(r => { // const { items, serial_no, batch_no } = r.message; From 8c84b7b8884746966b735a187d681c4253eef6ed Mon Sep 17 00:00:00 2001 From: deepeshgarg007 Date: Fri, 25 Jan 2019 16:44:45 +0530 Subject: [PATCH 60/86] fix: Doctype Name correction --- erpnext/accounts/party.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index f412506a7c..5855ac3bcd 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -163,7 +163,7 @@ def set_price_list(out, party, party_type, given_price_list, pos=None): if customer_price_list: price_list = customer_price_list else: - pos_price_list = frappe.get_value('Pos Profile', pos, 'selling_price_list') + pos_price_list = frappe.get_value('POS Profile', pos, 'selling_price_list') price_list = pos_price_list or given_price_list else: price_list = get_default_price_list(party) or given_price_list From 1187d61b5663d81efc1a4b8ef160c290defaf394 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 25 Jan 2019 17:07:29 +0530 Subject: [PATCH 61/86] fix(stock): Escaping issue in stock ledger report --- .../stock/report/stock_ledger/stock_ledger.py | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py index 578000bfa1..ef9fbe41c0 100644 --- a/erpnext/stock/report/stock_ledger/stock_ledger.py +++ b/erpnext/stock/report/stock_ledger/stock_ledger.py @@ -110,16 +110,22 @@ def get_item_details(items, sl_entries, include_uom): cf_field = cf_join = "" if include_uom: cf_field = ", ucd.conversion_factor" - cf_join = "left join `tabUOM Conversion Detail` ucd on ucd.parent=item.name and ucd.uom=%(include_uom)s" + cf_join = "left join `tabUOM Conversion Detail` ucd on ucd.parent=item.name and ucd.uom='%s'" \ + % frappe.db.escape(include_uom) - for item in frappe.db.sql(""" - select item.name, item.item_name, item.description, item.item_group, item.brand, item.stock_uom{cf_field} - from `tabItem` item - {cf_join} - where item.name in ({names}) - """.format(cf_field=cf_field, cf_join=cf_join, names=', '.join(['"' + frappe.db.escape(i, percent=False) + '"' for i in items])), - {"include_uom": include_uom}, as_dict=1): - item_details.setdefault(item.name, item) + item_codes = ', '.join(['"' + frappe.db.escape(i, percent=False) + '"' for i in items]) + res = frappe.db.sql(""" + select + item.name, item.item_name, item.description, item.item_group, item.brand, item.stock_uom {cf_field} + from + `tabItem` item + {cf_join} + where + item.name in ({item_codes}) + """.format(cf_field=cf_field, cf_join=cf_join, item_codes=item_codes), as_dict=1) + + for item in res: + item_details.setdefault(item.name, item) return item_details From c6c1628c8a4363fdcda2e6dadb84cf7cf6670276 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Mon, 21 Jan 2019 19:35:46 +0530 Subject: [PATCH 62/86] [feat] Modified help config --- erpnext/public/js/conf.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/public/js/conf.js b/erpnext/public/js/conf.js index d256c08e13..040726957b 100644 --- a/erpnext/public/js/conf.js +++ b/erpnext/public/js/conf.js @@ -14,7 +14,7 @@ $(document).bind('toolbar_setup', function() { $('.navbar-home').html(''); - $('[data-link="docs"]').attr("href", "https://frappe.github.io/erpnext/") + $('[data-link="docs"]').attr("href", "https://erpnext.com/docs") $('[data-link="issues"]').attr("href", "https://github.com/frappe/erpnext/issues") @@ -23,7 +23,8 @@ $(document).bind('toolbar_setup', function() { // additional help links for erpnext var $help_menu = $('.dropdown-help ul .documentation-links'); - + $('
  • '+__('Documentation')+'
  • ').insertBefore($help_menu); $('
  • '+__('User Forum')+'
  • ').insertBefore($help_menu); $('
  • Date: Fri, 25 Jan 2019 12:56:27 +0530 Subject: [PATCH 63/86] [fix] Links now redirect to erpnext.com --- README.md | 2 +- erpnext/change_log/v6/v6_13_1.md | 2 +- erpnext/hooks.py | 2 -- erpnext/public/js/conf.js | 2 +- .../page/welcome_to_erpnext/welcome_to_erpnext.html | 2 +- erpnext/utilities/user_progress.py | 10 +++++----- 6 files changed, 9 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 74ea7fc8a5..d719873c76 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Includes: Accounting, Inventory, Manufacturing, CRM, Sales, Purchase, Project Ma ERPNext is built on the [Frappé](https://github.com/frappe/frappe) Framework, a full-stack web app framework in Python & JavaScript. -- [User Guide](https://erpnext.org/docs/user) +- [User Guide](https://erpnext.com/docs/user) - [Discussion Forum](https://discuss.erpnext.com/) --- diff --git a/erpnext/change_log/v6/v6_13_1.md b/erpnext/change_log/v6/v6_13_1.md index 4b2c4a9cca..d5a930e3b9 100644 --- a/erpnext/change_log/v6/v6_13_1.md +++ b/erpnext/change_log/v6/v6_13_1.md @@ -1 +1 @@ -- [ERPNext Manual in German](http://erpnext.org/docs/user/manual/de/) contributed by [CWT Connector & Wire Technology GmbH](http://www.cwt-assembly.com/) +- [ERPNext Manual in German](http://erpnext.com/docs/user/manual/de/) contributed by [CWT Connector & Wire Technology GmbH](http://www.cwt-assembly.com/) diff --git a/erpnext/hooks.py b/erpnext/hooks.py index ee31e32a3b..5f1e7d4243 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -15,8 +15,6 @@ develop_version = '10.x.x-develop' error_report_email = "support@erpnext.com" -docs_app = "foundation" - app_include_js = "assets/js/erpnext.min.js" app_include_css = "assets/css/erpnext.css" web_include_js = "assets/js/erpnext-web.min.js" diff --git a/erpnext/public/js/conf.js b/erpnext/public/js/conf.js index 040726957b..32cf065169 100644 --- a/erpnext/public/js/conf.js +++ b/erpnext/public/js/conf.js @@ -23,7 +23,7 @@ $(document).bind('toolbar_setup', function() { // additional help links for erpnext var $help_menu = $('.dropdown-help ul .documentation-links'); - $('
  • '+__('Documentation')+'
  • ').insertBefore($help_menu); $('
  • '+__('User Forum')+'
  • ').insertBefore($help_menu); diff --git a/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html b/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html index 57fce28eeb..5808ce73ee 100644 --- a/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html +++ b/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html @@ -22,7 +22,7 @@ diff --git a/erpnext/utilities/user_progress.py b/erpnext/utilities/user_progress.py index 9f5935e3cb..a6b5b49f08 100644 --- a/erpnext/utilities/user_progress.py +++ b/erpnext/utilities/user_progress.py @@ -33,7 +33,7 @@ def get_slide_settings(): help_links=[ { "label": _("Chart of Accounts"), - "url": ["https://erpnext.org/docs/user/manual/en/accounts/chart-of-accounts"] + "url": ["https://erpnext.com/docs/user/manual/en/accounts/chart-of-accounts"] }, { "label": _("Opening Balances"), @@ -56,7 +56,7 @@ def get_slide_settings(): help_links=[ { "label": _('Learn More'), - "url": ["https://erpnext.org/docs/user/manual/en/setting-up/setting-company-sales-goal"] + "url": ["https://erpnext.com/docs/user/manual/en/setting-up/setting-company-sales-goal"] } ] ), @@ -80,7 +80,7 @@ def get_slide_settings(): help_links=[ { "label": _('Learn More'), - "url": ["https://erpnext.org/docs/user/manual/en/CRM/customer.html"] + "url": ["https://erpnext.com/docs/user/manual/en/CRM/customer.html"] } ] ), @@ -123,7 +123,7 @@ def get_slide_settings(): help_links=[ { "label": _('Learn More'), - "url": ["https://erpnext.org/docs/user/manual/en/buying/supplier"] + "url": ["https://erpnext.com/docs/user/manual/en/buying/supplier"] }, { "label": _('Customers and Suppliers'), @@ -261,7 +261,7 @@ def get_slide_settings(): help_links=[ { "label": _('Learn More'), - "url": ["https://erpnext.org/docs/user/manual/en/setting-up/users-and-permissions"] + "url": ["https://erpnext.com/docs/user/manual/en/setting-up/users-and-permissions"] }, { "label": _('Users and Permissions'), From 000e2163548e6cb26f5d98e7c2475c06dcb6d2f2 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Fri, 25 Jan 2019 13:14:11 +0530 Subject: [PATCH 64/86] [feat] Added docsUrl variable to configure help_links --- erpnext/public/js/help_links.js | 368 ++++++++++++++++---------------- 1 file changed, 183 insertions(+), 185 deletions(-) diff --git a/erpnext/public/js/help_links.js b/erpnext/public/js/help_links.js index d8af0e516d..d3cc688cd2 100644 --- a/erpnext/public/js/help_links.js +++ b/erpnext/public/js/help_links.js @@ -1,528 +1,526 @@ frappe.provide('frappe.help.help_links'); +const docsUrl = 'https://erpnext.com/docs/' + frappe.help.help_links['Form/Rename Tool'] = [ - { label: 'Bulk Rename', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/data/bulk-rename' }, + { label: 'Bulk Rename', url: docsUrl + 'user/manual/en/setting-up/data/bulk-rename' }, ] //Setup frappe.help.help_links['List/User'] = [ - { label: 'New User', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/users-and-permissions/adding-users' }, - { label: 'Rename User', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/rename-user' }, + { label: 'New User', url: docsUrl + 'user/manual/en/setting-up/users-and-permissions/adding-users' }, + { label: 'Rename User', url: docsUrl + 'user/manual/en/setting-up/articles/rename-user' }, ] frappe.help.help_links['permission-manager'] = [ - { label: 'Role Permissions Manager', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/users-and-permissions/role-based-permissions' }, - { label: 'Managing Perm Level in Permissions Manager', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/managing-perm-level' }, - { label: 'User Permissions', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/users-and-permissions/user-permissions' }, - { label: 'Sharing', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/users-and-permissions/sharing' }, - { label: 'Password', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/change-password' }, + { label: 'Role Permissions Manager', url: docsUrl + 'user/manual/en/setting-up/users-and-permissions/role-based-permissions' }, + { label: 'Managing Perm Level in Permissions Manager', url: docsUrl + 'user/manual/en/setting-up/articles/managing-perm-level' }, + { label: 'User Permissions', url: docsUrl + 'user/manual/en/setting-up/users-and-permissions/user-permissions' }, + { label: 'Sharing', url: docsUrl + 'user/manual/en/setting-up/users-and-permissions/sharing' }, + { label: 'Password', url: docsUrl + 'user/manual/en/setting-up/articles/change-password' }, ] frappe.help.help_links['Form/System Settings'] = [ - { label: 'Naming Series', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/settings/system-settings' }, + { label: 'Naming Series', url: docsUrl + 'user/manual/en/setting-up/settings/system-settings' }, ] frappe.help.help_links['data-import-tool'] = [ - { label: 'Importing and Exporting Data', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/data/data-import-tool' }, - { label: 'Overwriting Data from Data Import Tool', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/overwriting-data-from-data-import-tool' }, + { label: 'Importing and Exporting Data', url: docsUrl + 'user/manual/en/setting-up/data/data-import-tool' }, + { label: 'Overwriting Data from Data Import Tool', url: docsUrl + 'user/manual/en/setting-up/articles/overwriting-data-from-data-import-tool' }, ] frappe.help.help_links['module_setup'] = [ - { label: 'Role Permissions Manager', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/users-and-permissions/role-based-permissions' }, + { label: 'Role Permissions Manager', url: docsUrl + 'user/manual/en/setting-up/users-and-permissions/role-based-permissions' }, ] frappe.help.help_links['Form/Naming Series'] = [ - { label: 'Naming Series', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/settings/naming-series' }, - { label: 'Setting the Current Value for Naming Series', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/naming-series-current-value' }, + { label: 'Naming Series', url: docsUrl + 'user/manual/en/setting-up/settings/naming-series' }, + { label: 'Setting the Current Value for Naming Series', url: docsUrl + 'user/manual/en/setting-up/articles/naming-series-current-value' }, ] frappe.help.help_links['Form/Global Defaults'] = [ - { label: 'Global Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/settings/global-defaults' }, + { label: 'Global Settings', url: docsUrl + 'user/manual/en/setting-up/settings/global-defaults' }, ] frappe.help.help_links['Form/Email Digest'] = [ - { label: 'Email Digest', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/email/email-digest' }, + { label: 'Email Digest', url: docsUrl + 'user/manual/en/setting-up/email/email-digest' }, ] frappe.help.help_links['List/Print Heading'] = [ - { label: 'Print Heading', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/print-headings' }, + { label: 'Print Heading', url: docsUrl + 'user/manual/en/setting-up/print/print-headings' }, ] frappe.help.help_links['List/Letter Head'] = [ - { label: 'Letter Head', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/letter-head' }, + { label: 'Letter Head', url: docsUrl + 'user/manual/en/setting-up/print/letter-head' }, ] frappe.help.help_links['List/Address Template'] = [ - { label: 'Address Template', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/address-template' }, + { label: 'Address Template', url: docsUrl + 'user/manual/en/setting-up/print/address-template' }, ] frappe.help.help_links['List/Terms and Conditions'] = [ - { label: 'Terms and Conditions', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/terms-and-conditions' }, + { label: 'Terms and Conditions', url: docsUrl + 'user/manual/en/setting-up/print/terms-and-conditions' }, ] frappe.help.help_links['List/Cheque Print Template'] = [ - { label: 'Cheque Print Template', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/cheque-print-template' }, + { label: 'Cheque Print Template', url: docsUrl + 'user/manual/en/setting-up/print/cheque-print-template' }, ] frappe.help.help_links['List/Email Account'] = [ - { label: 'Email Account', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/email/email-account' }, + { label: 'Email Account', url: docsUrl + 'user/manual/en/setting-up/email/email-account' }, ] -frappe.help.help_links['List/Email Alert'] = [ - { label: 'Email Alert', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/email/email-alerts' }, +frappe.help.help_links['List/Notification'] = [ + { label: 'Notification', url: docsUrl + 'user/manual/en/setting-up/email/notifications' }, ] -frappe.help.help_links['Form/Email Alert'] = [ - { label: 'Email Alert', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/email/email-alerts' }, +frappe.help.help_links['Form/Notification'] = [ + { label: 'Notification', url: docsUrl + 'user/manual/en/setting-up/email/notifications' }, ] frappe.help.help_links['List/Email Digest'] = [ - { label: 'Email Digest', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/email/email-digest' }, + { label: 'Email Digest', url: docsUrl + 'user/manual/en/setting-up/email/email-digest' }, ] frappe.help.help_links['List/Auto Email Report'] = [ - { label: 'Auto Email Reports', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/email/email-reports' }, + { label: 'Auto Email Reports', url: docsUrl + 'user/manual/en/setting-up/email/email-reports' }, ] frappe.help.help_links['Form/Print Settings'] = [ - { label: 'Print Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/print-settings' }, + { label: 'Print Settings', url: docsUrl + 'user/manual/en/setting-up/print/print-settings' }, ] frappe.help.help_links['print-format-builder'] = [ - { label: 'Print Format Builder', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/print-settings' }, + { label: 'Print Format Builder', url: docsUrl + 'user/manual/en/setting-up/print/print-settings' }, ] frappe.help.help_links['List/Print Heading'] = [ - { label: 'Print Heading', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/print/print-headings' }, + { label: 'Print Heading', url: docsUrl + 'user/manual/en/setting-up/print/print-headings' }, ] //setup-integrations frappe.help.help_links['Form/PayPal Settings'] = [ - { label: 'PayPal Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/integrations/paypal-integration' }, + { label: 'PayPal Settings', url: docsUrl + 'user/manual/en/setting-up/integrations/paypal-integration' }, ] frappe.help.help_links['Form/Razorpay Settings'] = [ - { label: 'Razorpay Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/integrations/razorpay-integration' }, + { label: 'Razorpay Settings', url: docsUrl + 'user/manual/en/setting-up/integrations/razorpay-integration' }, ] frappe.help.help_links['Form/Dropbox Settings'] = [ - { label: 'Dropbox Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/integrations/dropbox-backup' }, + { label: 'Dropbox Settings', url: docsUrl + 'user/manual/en/setting-up/integrations/dropbox-backup' }, ] frappe.help.help_links['Form/LDAP Settings'] = [ - { label: 'LDAP Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/integrations/ldap-integration' }, + { label: 'LDAP Settings', url: docsUrl + 'user/manual/en/setting-up/integrations/ldap-integration' }, ] frappe.help.help_links['Form/Stripe Settings'] = [ - { label: 'Stripe Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/integrations/stripe-integration' }, + { label: 'Stripe Settings', url: docsUrl + 'user/manual/en/setting-up/integrations/stripe-integration' }, ] //Sales frappe.help.help_links['Form/Quotation'] = [ - { label: 'Quotation', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/quotation' }, - { label: 'Applying Discount', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/applying-discount' }, - { label: 'Sales Person', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/sales-persons-in-the-sales-transactions' }, - { label: 'Applying Margin', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/adding-margin' }, + { label: 'Quotation', url: docsUrl + 'user/manual/en/selling/quotation' }, + { label: 'Applying Discount', url: docsUrl + 'user/manual/en/selling/articles/applying-discount' }, + { label: 'Sales Person', url: docsUrl + 'user/manual/en/selling/articles/sales-persons-in-the-sales-transactions' }, + { label: 'Applying Margin', url: docsUrl + 'user/manual/en/selling/articles/adding-margin' }, ] frappe.help.help_links['List/Customer'] = [ - { label: 'Customer', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/customer' }, - { label: 'Credit Limit', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/credit-limit' }, + { label: 'Customer', url: docsUrl + 'user/manual/en/CRM/customer' }, + { label: 'Credit Limit', url: docsUrl + 'user/manual/en/accounts/credit-limit' }, ] frappe.help.help_links['Form/Customer'] = [ - { label: 'Customer', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/customer' }, - { label: 'Credit Limit', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/credit-limit' }, + { label: 'Customer', url: docsUrl + 'user/manual/en/CRM/customer' }, + { label: 'Credit Limit', url: docsUrl + 'user/manual/en/accounts/credit-limit' }, ] frappe.help.help_links['List/Sales Taxes and Charges Template'] = [ - { label: 'Setting Up Taxes', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/setting-up-taxes' }, + { label: 'Setting Up Taxes', url: docsUrl + 'user/manual/en/setting-up/setting-up-taxes' }, ] frappe.help.help_links['Form/Sales Taxes and Charges Template'] = [ - { label: 'Setting Up Taxes', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/setting-up-taxes' }, + { label: 'Setting Up Taxes', url: docsUrl + 'user/manual/en/setting-up/setting-up-taxes' }, ] frappe.help.help_links['List/Sales Order'] = [ - { label: 'Sales Order', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/sales-order' }, - { label: 'Recurring Sales Order', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/recurring-orders-and-invoices' }, - { label: 'Applying Discount', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/applying-discount' }, + { label: 'Sales Order', url: docsUrl + 'user/manual/en/selling/sales-order' }, + { label: 'Recurring Sales Order', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Applying Discount', url: docsUrl + 'user/manual/en/selling/articles/applying-discount' }, ] frappe.help.help_links['Form/Sales Order'] = [ - { label: 'Sales Order', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/sales-order' }, - { label: 'Recurring Sales Order', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/recurring-orders-and-invoices' }, - { label: 'Applying Discount', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/applying-discount' }, - { label: 'Drop Shipping', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/drop-shipping' }, - { label: 'Sales Person', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/sales-persons-in-the-sales-transactions' }, - { label: 'Close Sales Order', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/close-sales-order' }, - { label: 'Applying Margin', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/articles/adding-margin' }, + { label: 'Sales Order', url: docsUrl + 'user/manual/en/selling/sales-order' }, + { label: 'Recurring Sales Order', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Applying Discount', url: docsUrl + 'user/manual/en/selling/articles/applying-discount' }, + { label: 'Drop Shipping', url: docsUrl + 'user/manual/en/selling/articles/drop-shipping' }, + { label: 'Sales Person', url: docsUrl + 'user/manual/en/selling/articles/sales-persons-in-the-sales-transactions' }, + { label: 'Close Sales Order', url: docsUrl + 'user/manual/en/selling/articles/close-sales-order' }, + { label: 'Applying Margin', url: docsUrl + 'user/manual/en/selling/articles/adding-margin' }, ] frappe.help.help_links['Form/Product Bundle'] = [ - { label: 'Product Bundle', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/setup/product-bundle' }, + { label: 'Product Bundle', url: docsUrl + 'user/manual/en/selling/setup/product-bundle' }, ] frappe.help.help_links['Form/Selling Settings'] = [ - { label: 'Selling Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/setup/selling-settings' }, + { label: 'Selling Settings', url: docsUrl + 'user/manual/en/selling/setup/selling-settings' }, ] //Buying frappe.help.help_links['List/Supplier'] = [ - { label: 'Supplier', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/supplier' }, + { label: 'Supplier', url: docsUrl + 'user/manual/en/buying/supplier' }, ] frappe.help.help_links['Form/Supplier'] = [ - { label: 'Supplier', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/supplier' }, + { label: 'Supplier', url: docsUrl + 'user/manual/en/buying/supplier' }, ] frappe.help.help_links['Form/Request for Quotation'] = [ - { label: 'Request for Quotation', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/request-for-quotation' }, - { label: 'RFQ Video', url: 'https://frappe.github.io/erpnext/user/videos/learn/request-for-quotation.html' }, + { label: 'Request for Quotation', url: docsUrl + 'user/manual/en/buying/request-for-quotation' }, + { label: 'RFQ Video', url: docsUrl + 'user/videos/learn/request-for-quotation.html' }, ] frappe.help.help_links['Form/Supplier Quotation'] = [ - { label: 'Supplier Quotation', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/supplier-quotation' }, + { label: 'Supplier Quotation', url: docsUrl + 'user/manual/en/buying/supplier-quotation' }, ] frappe.help.help_links['Form/Buying Settings'] = [ - { label: 'Buying Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/setup/buying-settings' }, + { label: 'Buying Settings', url: docsUrl + 'user/manual/en/buying/setup/buying-settings' }, ] frappe.help.help_links['List/Purchase Order'] = [ - { label: 'Purchase Order', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/purchase-order' }, - { label: 'Recurring Purchase Order', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Purchase Order', url: docsUrl + 'user/manual/en/buying/purchase-order' }, + { label: 'Recurring Purchase Order', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' }, ] frappe.help.help_links['Form/Purchase Order'] = [ - { label: 'Purchase Order', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/purchase-order' }, - { label: 'Item UoM', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/articles/purchasing-in-different-unit' }, - { label: 'Supplier Item Code', url: 'https://frappe.github.io/erpnext/user/manual/en/buying/articles/maintaining-suppliers-part-no-in-item' }, - { label: 'Recurring Purchase Order', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/recurring-orders-and-invoices' }, - { label: 'Subcontracting', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/subcontracting' }, + { label: 'Purchase Order', url: docsUrl + 'user/manual/en/buying/purchase-order' }, + { label: 'Item UoM', url: docsUrl + 'user/manual/en/buying/articles/purchasing-in-different-unit' }, + { label: 'Supplier Item Code', url: docsUrl + 'user/manual/en/buying/articles/maintaining-suppliers-part-no-in-item' }, + { label: 'Recurring Purchase Order', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Subcontracting', url: docsUrl + 'user/manual/en/manufacturing/subcontracting' }, ] frappe.help.help_links['List/Purchase Taxes and Charges Template'] = [ - { label: 'Setting Up Taxes', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/setting-up-taxes' }, + { label: 'Setting Up Taxes', url: docsUrl + 'user/manual/en/setting-up/setting-up-taxes' }, ] frappe.help.help_links['List/POS Profile'] = [ - { label: 'POS Profile', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/pos-setting' }, + { label: 'POS Profile', url: docsUrl + 'user/manual/en/setting-up/pos-setting' }, ] frappe.help.help_links['List/Price List'] = [ - { label: 'Price List', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/price-lists' }, + { label: 'Price List', url: docsUrl + 'user/manual/en/setting-up/price-lists' }, ] frappe.help.help_links['List/Authorization Rule'] = [ - { label: 'Authorization Rule', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/authorization-rule' }, + { label: 'Authorization Rule', url: docsUrl + 'user/manual/en/setting-up/authorization-rule' }, ] frappe.help.help_links['Form/SMS Settings'] = [ - { label: 'SMS Settings', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/sms-setting' }, + { label: 'SMS Settings', url: docsUrl + 'user/manual/en/setting-up/sms-setting' }, ] frappe.help.help_links['List/Stock Reconciliation'] = [ - { label: 'Stock Reconciliation', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/stock-reconciliation-for-non-serialized-item' }, + { label: 'Stock Reconciliation', url: docsUrl + 'user/manual/en/setting-up/stock-reconciliation-for-non-serialized-item' }, ] frappe.help.help_links['Tree/Territory'] = [ - { label: 'Territory', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/territory' }, + { label: 'Territory', url: docsUrl + 'user/manual/en/setting-up/territory' }, ] frappe.help.help_links['Form/Dropbox Backup'] = [ - { label: 'Dropbox Backup', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/third-party-backups' }, - { label: 'Setting Up Dropbox Backup', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/setting-up-dropbox-backups' }, + { label: 'Dropbox Backup', url: docsUrl + 'user/manual/en/setting-up/third-party-backups' }, + { label: 'Setting Up Dropbox Backup', url: docsUrl + 'user/manual/en/setting-up/articles/setting-up-dropbox-backups' }, ] frappe.help.help_links['List/Workflow'] = [ - { label: 'Workflow', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/workflows' }, + { label: 'Workflow', url: docsUrl + 'user/manual/en/setting-up/workflows' }, ] frappe.help.help_links['List/Company'] = [ - { label: 'Company', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/company-setup' }, - { label: 'Managing Multiple Companies', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/managing-multiple-companies' }, - { label: 'Delete All Related Transactions for a Company', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/delete-a-company-and-all-related-transactions' }, + { label: 'Company', url: docsUrl + 'user/manual/en/setting-up/company-setup' }, + { label: 'Managing Multiple Companies', url: docsUrl + 'user/manual/en/setting-up/articles/managing-multiple-companies' }, + { label: 'Delete All Related Transactions for a Company', url: docsUrl + 'user/manual/en/setting-up/articles/delete-a-company-and-all-related-transactions' }, ] //Accounts frappe.help.help_links['modules/Accounts'] = [ - { label: 'Introduction to Accounts', url: 'http://frappe.github.io/erpnext/user/manual/en/accounts/' }, - { label: 'Chart of Accounts', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/chart-of-accounts.html' }, - { label: 'Multi Currency Accounting', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/multi-currency-accounting' }, + { label: 'Introduction to Accounts', url: 'http://erpnext.com/docs/user/manual/en/accounts/' }, + { label: 'Chart of Accounts', url: docsUrl + 'user/manual/en/accounts/chart-of-accounts.html' }, + { label: 'Multi Currency Accounting', url: docsUrl + 'user/manual/en/accounts/multi-currency-accounting' }, ] frappe.help.help_links['Tree/Account'] = [ - { label: 'Chart of Accounts', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/chart-of-accounts' }, - { label: 'Managing Tree Mastes', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/managing-tree-structure-masters' }, + { label: 'Chart of Accounts', url: docsUrl + 'user/manual/en/accounts/chart-of-accounts' }, + { label: 'Managing Tree Mastes', url: docsUrl + 'user/manual/en/setting-up/articles/managing-tree-structure-masters' }, ] frappe.help.help_links['Form/Sales Invoice'] = [ - { label: 'Sales Invoice', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/sales-invoice' }, - { label: 'Accounts Opening Balance', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/opening-accounts' }, - { label: 'Sales Return', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/sales-return' }, - { label: 'Recurring Sales Invoice', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Sales Invoice', url: docsUrl + 'user/manual/en/accounts/sales-invoice' }, + { label: 'Accounts Opening Balance', url: docsUrl + 'user/manual/en/accounts/opening-accounts' }, + { label: 'Sales Return', url: docsUrl + 'user/manual/en/stock/sales-return' }, + { label: 'Recurring Sales Invoice', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' }, ] frappe.help.help_links['List/Sales Invoice'] = [ - { label: 'Sales Invoice', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/sales-invoice' }, - { label: 'Accounts Opening Balance', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/opening-accounts' }, - { label: 'Sales Return', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/sales-return' }, - { label: 'Recurring Sales Invoice', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Sales Invoice', url: docsUrl + 'user/manual/en/accounts/sales-invoice' }, + { label: 'Accounts Opening Balance', url: docsUrl + 'user/manual/en/accounts/opening-accounts' }, + { label: 'Sales Return', url: docsUrl + 'user/manual/en/stock/sales-return' }, + { label: 'Recurring Sales Invoice', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' }, ] frappe.help.help_links['pos'] = [ - { label: 'Point of Sale Invoice', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/point-of-sale-pos-invoice' }, + { label: 'Point of Sale Invoice', url: docsUrl + 'user/manual/en/accounts/point-of-sale-pos-invoice' }, ] frappe.help.help_links['List/POS Profile'] = [ - { label: 'Point of Sale Profile', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/pos-setting' }, + { label: 'Point of Sale Profile', url: docsUrl + 'user/manual/en/setting-up/pos-setting' }, ] frappe.help.help_links['List/Purchase Invoice'] = [ - { label: 'Purchase Invoice', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/purchase-invoice' }, - { label: 'Accounts Opening Balance', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/opening-accounts' }, - { label: 'Recurring Purchase Invoice', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/recurring-orders-and-invoices' }, + { label: 'Purchase Invoice', url: docsUrl + 'user/manual/en/accounts/purchase-invoice' }, + { label: 'Accounts Opening Balance', url: docsUrl + 'user/manual/en/accounts/opening-accounts' }, + { label: 'Recurring Purchase Invoice', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' }, ] frappe.help.help_links['List/Journal Entry'] = [ - { label: 'Journal Entry', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/journal-entry' }, - { label: 'Advance Payment Entry', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/advance-payment-entry' }, - { label: 'Accounts Opening Balance', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/opening-accounts' }, + { label: 'Journal Entry', url: docsUrl + 'user/manual/en/accounts/journal-entry' }, + { label: 'Advance Payment Entry', url: docsUrl + 'user/manual/en/accounts/advance-payment-entry' }, + { label: 'Accounts Opening Balance', url: docsUrl + 'user/manual/en/accounts/opening-accounts' }, ] frappe.help.help_links['List/Payment Entry'] = [ - { label: 'Payment Entry', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/payment-entry' }, + { label: 'Payment Entry', url: docsUrl + 'user/manual/en/accounts/payment-entry' }, ] frappe.help.help_links['List/Payment Request'] = [ - { label: 'Payment Request', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/payment-request' }, + { label: 'Payment Request', url: docsUrl + 'user/manual/en/accounts/payment-request' }, ] frappe.help.help_links['List/Asset'] = [ - { label: 'Managing Fixed Assets', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/managing-fixed-assets' }, + { label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, ] frappe.help.help_links['List/Asset Category'] = [ - { label: 'Asset Category', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/managing-fixed-assets' }, + { label: 'Asset Category', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, ] frappe.help.help_links['Tree/Cost Center'] = [ - { label: 'Budgeting', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/budgeting' }, + { label: 'Budgeting', url: docsUrl + 'user/manual/en/accounts/budgeting' }, ] frappe.help.help_links['List/Item'] = [ - { label: 'Item', url: 'http://frappe.github.io/erpnext/user/manual/en/stock/item' }, - { label: 'Item Price', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-price' }, - { label: 'Barcode', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/track-items-using-barcode' }, - { label: 'Item Wise Taxation', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/item-wise-taxation' }, - { label: 'Managing Fixed Assets', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/managing-fixed-assets' }, - { label: 'Item Codification', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-codification' }, - { label: 'Item Variants', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-variants' }, - { label: 'Item Valuation', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, + { label: 'Item', url: 'http://erpnext.com/docs/user/manual/en/stock/item' }, + { label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' }, + { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, + { label: 'Item Wise Taxation', url: docsUrl + 'user/manual/en/accounts/item-wise-taxation' }, + { label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, + { label: 'Item Codification', url: docsUrl + 'user/manual/en/stock/item/item-codification' }, + { label: 'Item Variants', url: docsUrl + 'user/manual/en/stock/item/item-variants' }, + { label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, ] frappe.help.help_links['Form/Item'] = [ - { label: 'Item', url: 'http://frappe.github.io/erpnext/user/manual/en/stock/item' }, - { label: 'Item Price', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-price' }, - { label: 'Barcode', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/track-items-using-barcode' }, - { label: 'Item Wise Taxation', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/item-wise-taxation' }, - { label: 'Managing Fixed Assets', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/managing-fixed-assets' }, - { label: 'Item Codification', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-codification' }, - { label: 'Item Variants', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-variants' }, - { label: 'Item Valuation', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, + { label: 'Item', url: 'http://erpnext.com/docs/user/manual/en/stock/item' }, + { label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' }, + { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, + { label: 'Item Wise Taxation', url: docsUrl + 'user/manual/en/accounts/item-wise-taxation' }, + { label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, + { label: 'Item Codification', url: docsUrl + 'user/manual/en/stock/item/item-codification' }, + { label: 'Item Variants', url: docsUrl + 'user/manual/en/stock/item/item-variants' }, + { label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, ] frappe.help.help_links['List/Purchase Receipt'] = [ - { label: 'Purchase Receipt', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/purchase-receipt' }, - { label: 'Barcode', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/track-items-using-barcode' }, + { label: 'Purchase Receipt', url: docsUrl + 'user/manual/en/stock/purchase-receipt' }, + { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, ] frappe.help.help_links['List/Delivery Note'] = [ - { label: 'Delivery Note', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/delivery-note' }, - { label: 'Barcode', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/track-items-using-barcode' }, - { label: 'Sales Return', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/sales-return' }, + { label: 'Delivery Note', url: docsUrl + 'user/manual/en/stock/delivery-note' }, + { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, + { label: 'Sales Return', url: docsUrl + 'user/manual/en/stock/sales-return' }, ] frappe.help.help_links['Form/Delivery Note'] = [ - { label: 'Delivery Note', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/delivery-note' }, - { label: 'Sales Return', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/sales-return' }, - { label: 'Barcode', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/track-items-using-barcode' }, - { label: 'Subcontracting', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/subcontracting' }, + { label: 'Delivery Note', url: docsUrl + 'user/manual/en/stock/delivery-note' }, + { label: 'Sales Return', url: docsUrl + 'user/manual/en/stock/sales-return' }, + { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, + { label: 'Subcontracting', url: docsUrl + 'user/manual/en/manufacturing/subcontracting' }, ] frappe.help.help_links['List/Installation Note'] = [ - { label: 'Installation Note', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/installation-note' }, + { label: 'Installation Note', url: docsUrl + 'user/manual/en/stock/installation-note' }, ] frappe.help.help_links['Tree'] = [ - { label: 'Managing Tree Structure Masters', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/articles/managing-tree-structure-masters' }, + { label: 'Managing Tree Structure Masters', url: docsUrl + 'user/manual/en/setting-up/articles/managing-tree-structure-masters' }, ] frappe.help.help_links['List/Budget'] = [ - { label: 'Budgeting', url: 'https://frappe.github.io/erpnext/user/manual/en/accounts/budgeting' }, + { label: 'Budgeting', url: docsUrl + 'user/manual/en/accounts/budgeting' }, ] //Stock frappe.help.help_links['List/Material Request'] = [ - { label: 'Material Request', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/material-request' }, - { label: 'Auto-creation of Material Request', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/auto-creation-of-material-request' }, + { label: 'Material Request', url: docsUrl + 'user/manual/en/stock/material-request' }, + { label: 'Auto-creation of Material Request', url: docsUrl + 'user/manual/en/stock/articles/auto-creation-of-material-request' }, ] frappe.help.help_links['Form/Material Request'] = [ - { label: 'Material Request', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/material-request' }, - { label: 'Auto-creation of Material Request', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/auto-creation-of-material-request' }, + { label: 'Material Request', url: docsUrl + 'user/manual/en/stock/material-request' }, + { label: 'Auto-creation of Material Request', url: docsUrl + 'user/manual/en/stock/articles/auto-creation-of-material-request' }, ] frappe.help.help_links['Form/Stock Entry'] = [ - { label: 'Stock Entry', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/stock-entry' }, - { label: 'Stock Entry Types', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/stock-entry-purpose' }, - { label: 'Repack Entry', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/repack-entry' }, - { label: 'Opening Stock', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/opening-stock' }, - { label: 'Subcontracting', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/subcontracting' }, + { label: 'Stock Entry', url: docsUrl + 'user/manual/en/stock/stock-entry' }, + { label: 'Stock Entry Types', url: docsUrl + 'user/manual/en/stock/articles/stock-entry-purpose' }, + { label: 'Repack Entry', url: docsUrl + 'user/manual/en/stock/articles/repack-entry' }, + { label: 'Opening Stock', url: docsUrl + 'user/manual/en/stock/opening-stock' }, + { label: 'Subcontracting', url: docsUrl + 'user/manual/en/manufacturing/subcontracting' }, ] frappe.help.help_links['List/Stock Entry'] = [ - { label: 'Stock Entry', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/stock-entry' }, + { label: 'Stock Entry', url: docsUrl + 'user/manual/en/stock/stock-entry' }, ] frappe.help.help_links['Tree/Warehouse'] = [ - { label: 'Warehouse', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/warehouse' }, + { label: 'Warehouse', url: docsUrl + 'user/manual/en/stock/warehouse' }, ] frappe.help.help_links['List/Serial No'] = [ - { label: 'Serial No', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/serial-no' }, + { label: 'Serial No', url: docsUrl + 'user/manual/en/stock/serial-no' }, ] frappe.help.help_links['Form/Serial No'] = [ - { label: 'Serial No', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/serial-no' }, + { label: 'Serial No', url: docsUrl + 'user/manual/en/stock/serial-no' }, ] frappe.help.help_links['Form/Batch'] = [ - { label: 'Batch', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/batch' }, + { label: 'Batch', url: docsUrl + 'user/manual/en/stock/batch' }, ] frappe.help.help_links['Form/Packing Slip'] = [ - { label: 'Packing Slip', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/tools/packing-slip' }, + { label: 'Packing Slip', url: docsUrl + 'user/manual/en/stock/tools/packing-slip' }, ] frappe.help.help_links['Form/Quality Inspection'] = [ - { label: 'Quality Inspection', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/tools/quality-inspection' }, + { label: 'Quality Inspection', url: docsUrl + 'user/manual/en/stock/tools/quality-inspection' }, ] frappe.help.help_links['Form/Landed Cost Voucher'] = [ - { label: 'Landed Cost Voucher', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/tools/landed-cost-voucher' }, + { label: 'Landed Cost Voucher', url: docsUrl + 'user/manual/en/stock/tools/landed-cost-voucher' }, ] frappe.help.help_links['Tree/Item Group'] = [ - { label: 'Item Group', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/setup/item-group' }, + { label: 'Item Group', url: docsUrl + 'user/manual/en/stock/setup/item-group' }, ] frappe.help.help_links['Form/Item Attribute'] = [ - { label: 'Item Attribute', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/setup/item-attribute' }, + { label: 'Item Attribute', url: docsUrl + 'user/manual/en/stock/setup/item-attribute' }, ] frappe.help.help_links['Form/UOM'] = [ - { label: 'Fractions in UOM', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/articles/managing-fractions-in-uom' }, + { label: 'Fractions in UOM', url: docsUrl + 'user/manual/en/stock/articles/managing-fractions-in-uom' }, ] frappe.help.help_links['Form/Stock Reconciliation'] = [ - { label: 'Opening Stock Entry', url: 'https://frappe.github.io/erpnext/user/manual/en/stock/opening-stock' }, + { label: 'Opening Stock Entry', url: docsUrl + 'user/manual/en/stock/opening-stock' }, ] //CRM frappe.help.help_links['Form/Lead'] = [ - { label: 'Lead', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/lead' }, + { label: 'Lead', url: docsUrl + 'user/manual/en/CRM/lead' }, ] frappe.help.help_links['Form/Opportunity'] = [ - { label: 'Opportunity', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/opportunity' }, + { label: 'Opportunity', url: docsUrl + 'user/manual/en/CRM/opportunity' }, ] frappe.help.help_links['Form/Address'] = [ - { label: 'Address', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/contact' }, + { label: 'Address', url: docsUrl + 'user/manual/en/CRM/contact' }, ] frappe.help.help_links['Form/Contact'] = [ - { label: 'Contact', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/contact' }, + { label: 'Contact', url: docsUrl + 'user/manual/en/CRM/contact' }, ] frappe.help.help_links['Form/Newsletter'] = [ - { label: 'Newsletter', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/newsletter' }, + { label: 'Newsletter', url: docsUrl + 'user/manual/en/CRM/newsletter' }, ] frappe.help.help_links['Form/Campaign'] = [ - { label: 'Campaign', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/setup/campaign' }, + { label: 'Campaign', url: docsUrl + 'user/manual/en/CRM/setup/campaign' }, ] frappe.help.help_links['Tree/Sales Person'] = [ - { label: 'Sales Person', url: 'https://frappe.github.io/erpnext/user/manual/en/CRM/setup/sales-person' }, + { label: 'Sales Person', url: docsUrl + 'user/manual/en/CRM/setup/sales-person' }, ] frappe.help.help_links['Form/Sales Person'] = [ - { label: 'Sales Person Target', url: 'https://frappe.github.io/erpnext/user/manual/en/selling/setup/sales-person-target-allocation' }, + { label: 'Sales Person Target', url: docsUrl + 'user/manual/en/selling/setup/sales-person-target-allocation' }, ] //Support frappe.help.help_links['List/Feedback Trigger'] = [ - { label: 'Feedback Trigger', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/feedback/setting-up-feedback' }, + { label: 'Feedback Trigger', url: docsUrl + 'user/manual/en/setting-up/feedback/setting-up-feedback' }, ] frappe.help.help_links['List/Feedback Request'] = [ - { label: 'Feedback Request', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/feedback/submit-feedback' }, + { label: 'Feedback Request', url: docsUrl + 'user/manual/en/setting-up/feedback/submit-feedback' }, ] frappe.help.help_links['List/Feedback Request'] = [ - { label: 'Feedback Request', url: 'https://frappe.github.io/erpnext/user/manual/en/setting-up/feedback/submit-feedback' }, + { label: 'Feedback Request', url: docsUrl + 'user/manual/en/setting-up/feedback/submit-feedback' }, ] //Manufacturing frappe.help.help_links['Form/BOM'] = [ - { label: 'Bill of Material', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/bill-of-materials' }, - { label: 'Nested BOM Structure', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/articles/nested-bom-structure' }, + { label: 'Bill of Material', url: docsUrl + 'user/manual/en/manufacturing/bill-of-materials' }, + { label: 'Nested BOM Structure', url: docsUrl + 'user/manual/en/manufacturing/articles/nested-bom-structure' }, ] -frappe.help.help_links['Form/Production Order'] = [ - { label: 'Production Order', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/production-order' }, +frappe.help.help_links['Form/Work Order'] = [ + { label: 'Work Order', url: docsUrl + 'user/manual/en/manufacturing/work-order' }, ] frappe.help.help_links['Form/Workstation'] = [ - { label: 'Workstation', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/workstation' }, + { label: 'Workstation', url: docsUrl + 'user/manual/en/manufacturing/workstation' }, ] frappe.help.help_links['Form/Operation'] = [ - { label: 'Operation', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/operation' }, -] - -frappe.help.help_links['Form/Production Planning Tool'] = [ - { label: 'Production Planning Tool', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/tools/production-planning-tool' }, + { label: 'Operation', url: docsUrl + 'user/manual/en/manufacturing/operation' }, ] frappe.help.help_links['Form/BOM Update Tool'] = [ - { label: 'BOM Update Tool', url: 'https://frappe.github.io/erpnext/user/manual/en/manufacturing/tools/bom-update-tool' }, + { label: 'BOM Update Tool', url: docsUrl + 'user/manual/en/manufacturing/tools/bom-update-tool' }, ] //Customize frappe.help.help_links['Form/Customize Form'] = [ - { label: 'Custom Field', url: 'https://frappe.github.io/erpnext/user/manual/en/customize-erpnext/custom-field' }, - { label: 'Customize Field', url: 'https://frappe.github.io/erpnext/user/manual/en/customize-erpnext/customize-form' }, + { label: 'Custom Field', url: docsUrl + 'user/manual/en/customize-erpnext/custom-field' }, + { label: 'Customize Field', url: docsUrl + 'user/manual/en/customize-erpnext/customize-form' }, ] frappe.help.help_links['Form/Custom Field'] = [ - { label: 'Custom Field', url: 'https://frappe.github.io/erpnext/user/manual/en/customize-erpnext/custom-field' }, + { label: 'Custom Field', url: docsUrl + 'user/manual/en/customize-erpnext/custom-field' }, ] frappe.help.help_links['Form/Custom Field'] = [ - { label: 'Custom Field', url: 'https://frappe.github.io/erpnext/user/manual/en/customize-erpnext/custom-field' }, + { label: 'Custom Field', url: docsUrl + 'user/manual/en/customize-erpnext/custom-field' }, ] \ No newline at end of file From e1f5d22a02e2a139867c296edfc5b0b09a0035c2 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Fri, 25 Jan 2019 14:27:23 +0530 Subject: [PATCH 65/86] [fix] Code formatting, removed trailing spaces --- erpnext/public/js/help_links.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/erpnext/public/js/help_links.js b/erpnext/public/js/help_links.js index d3cc688cd2..23e7deb6e9 100644 --- a/erpnext/public/js/help_links.js +++ b/erpnext/public/js/help_links.js @@ -1,6 +1,6 @@ frappe.provide('frappe.help.help_links'); -const docsUrl = 'https://erpnext.com/docs/' +const docsUrl = 'https://erpnext.com/docs/'; frappe.help.help_links['Form/Rename Tool'] = [ { label: 'Bulk Rename', url: docsUrl + 'user/manual/en/setting-up/data/bulk-rename' }, @@ -320,12 +320,12 @@ frappe.help.help_links['Tree/Cost Center'] = [ frappe.help.help_links['List/Item'] = [ { label: 'Item', url: 'http://erpnext.com/docs/user/manual/en/stock/item' }, - { label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' }, + { label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' }, { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, { label: 'Item Wise Taxation', url: docsUrl + 'user/manual/en/accounts/item-wise-taxation' }, { label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, { label: 'Item Codification', url: docsUrl + 'user/manual/en/stock/item/item-codification' }, - { label: 'Item Variants', url: docsUrl + 'user/manual/en/stock/item/item-variants' }, + { label: 'Item Variants', url: docsUrl + 'user/manual/en/stock/item/item-variants' }, { label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, ] @@ -336,8 +336,8 @@ frappe.help.help_links['Form/Item'] = [ { label: 'Item Wise Taxation', url: docsUrl + 'user/manual/en/accounts/item-wise-taxation' }, { label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, { label: 'Item Codification', url: docsUrl + 'user/manual/en/stock/item/item-codification' }, - { label: 'Item Variants', url: docsUrl + 'user/manual/en/stock/item/item-variants' }, - { label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, + { label: 'Item Variants', url: docsUrl + 'user/manual/en/stock/item/item-variants' }, + { label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, ] frappe.help.help_links['List/Purchase Receipt'] = [ From 1b63fa19207977cc5c7ccdf0343afc30fe914b0a Mon Sep 17 00:00:00 2001 From: scmmishra Date: Fri, 25 Jan 2019 14:56:30 +0530 Subject: [PATCH 66/86] [fix] Formatting issues --- erpnext/public/js/help_links.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/public/js/help_links.js b/erpnext/public/js/help_links.js index 23e7deb6e9..458276eceb 100644 --- a/erpnext/public/js/help_links.js +++ b/erpnext/public/js/help_links.js @@ -326,12 +326,12 @@ frappe.help.help_links['List/Item'] = [ { label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, { label: 'Item Codification', url: docsUrl + 'user/manual/en/stock/item/item-codification' }, { label: 'Item Variants', url: docsUrl + 'user/manual/en/stock/item/item-variants' }, - { label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, + { label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' }, ] frappe.help.help_links['Form/Item'] = [ { label: 'Item', url: 'http://erpnext.com/docs/user/manual/en/stock/item' }, - { label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' }, + { label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' }, { label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' }, { label: 'Item Wise Taxation', url: docsUrl + 'user/manual/en/accounts/item-wise-taxation' }, { label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' }, From c2ffcc5e71a0112c0044a023200263a783fe4beb Mon Sep 17 00:00:00 2001 From: deepeshgarg007 Date: Sun, 27 Jan 2019 16:09:07 +0530 Subject: [PATCH 67/86] feat(POS): Customer wise price list in offline mode and enhancement in POS closing voucher --- erpnext/accounts/doctype/sales_invoice/pos.py | 16 ++ erpnext/accounts/page/pos/pos.js | 31 ++- .../pos_closing_voucher.js | 14 ++ .../pos_closing_voucher.json | 194 +++++++++++++++++- 4 files changed, 249 insertions(+), 6 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py index 287da08ef5..74ec0b30c7 100755 --- a/erpnext/accounts/doctype/sales_invoice/pos.py +++ b/erpnext/accounts/doctype/sales_invoice/pos.py @@ -55,6 +55,7 @@ def get_pos_data(): 'barcode_data': get_barcode_data(items_list), 'tax_data': get_item_tax_data(), 'price_list_data': get_price_list_data(doc.selling_price_list), + 'customer_wise_price_list': get_customer_wise_price_list(), 'bin_data': get_bin_data(pos_profile), 'pricing_rules': get_pricing_rule_data(doc), 'print_template': print_template, @@ -328,6 +329,21 @@ def get_price_list_data(selling_price_list): return itemwise_price_list +def get_customer_wise_price_list(): + customer_wise_price = {} + customer_price_list_mapping = frappe._dict(frappe.get_all('Customer',fields = ['default_price_list', 'name'], as_list=1)) + + price_lists = frappe.db.sql(""" Select ifnull(price_list_rate, 0) as price_list_rate, + item_code, price_list from `tabItem Price` """, as_dict=1) + + for item in price_lists: + if item.price_list and customer_price_list_mapping.get(item.price_list): + + customer_wise_price.setdefault(customer_price_list_mapping.get(item.price_list),{}).setdefault( + item.item_code, item.price_list_rate + ) + + return customer_wise_price def get_bin_data(pos_profile): itemwise_bin_data = {} diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index c89035c33f..17d6d0ddfc 100755 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -125,7 +125,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.page.add_menu_item(__("Cashier Closing"), function () { frappe.set_route('List', 'Cashier Closing'); - }); + }); this.page.add_menu_item(__("POS Profile"), function () { frappe.set_route('List', 'POS Profile'); @@ -313,6 +313,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.contacts = r.message.contacts; this.address = r.message.address || {}; this.price_list_data = r.message.price_list_data; + this.customer_wise_price_list = r.message.customer_wise_price_list this.bin_data = r.message.bin_data; this.pricing_rules = r.message.pricing_rules; this.print_template = r.message.print_template; @@ -798,6 +799,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ if (item.action) { $(this).val(""); } + me.make_item_list(item.customer_name); }); }, @@ -1037,7 +1039,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.numeric_keypad.show(); }, - make_item_list: function () { + make_item_list: function (customer=null) { var me = this; if (!this.price_list) { frappe.msgprint(__("Price List not found or disabled")); @@ -1051,10 +1053,17 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ if (this.items.length > 0) { $.each(this.items, function(index, obj) { + let customer_price_list = me.customer_wise_price_list[customer]; + let item_price + if (customer && customer_price_list && customer_price_list[obj.name]) { + item_price = format_currency(customer_price_list[obj.name], me.frm.doc.currency); + } else { + item_price = format_currency(me.price_list_data[obj.name], me.frm.doc.currency); + } if(index < me.page_len) { $(frappe.render_template("pos_item", { item_code: obj.name, - item_price: format_currency(me.price_list_data[obj.name], me.frm.doc.currency), + item_price: item_price, item_name: obj.name === obj.item_name ? "" : obj.item_name, item_image: obj.image, item_stock: __('Stock Qty') + ": " + me.get_actual_qty(obj), @@ -1417,8 +1426,20 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.child.income_account = this.pos_profile_data['income_account'] || this.items[0].income_account; this.child.warehouse = (this.item_serial_no[this.child.item_code] ? this.item_serial_no[this.child.item_code][1] : (this.pos_profile_data['warehouse'] || this.items[0].default_warehouse)); - this.child.price_list_rate = flt(this.price_list_data[this.child.item_code] * this.child.conversion_factor, 9) / flt(this.frm.doc.conversion_rate, 9); - this.child.rate = flt(this.price_list_data[this.child.item_code] * this.child.conversion_factor, 9) / flt(this.frm.doc.conversion_rate, 9); + + customer = this.frm.doc.customer; + let rate + + customer_price_list = this.customer_wise_price_list[customer] + if (customer_price_list && customer_price_list[this.child.item_code]){ + rate = flt(this.customer_wise_price_list[customer][this.child.item_code] * this.child.conversion_factor, 9) / flt(this.frm.doc.conversion_rate, 9); + } + else{ + rate = flt(this.price_list_data[this.child.item_code] * this.child.conversion_factor, 9) / flt(this.frm.doc.conversion_rate, 9); + } + + this.child.price_list_rate = rate; + this.child.rate = rate; this.child.actual_qty = me.get_actual_qty(this.items[0]); this.child.amount = flt(this.child.qty) * flt(this.child.rate); this.child.batch_no = this.item_batch_no[this.child.item_code]; diff --git a/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.js b/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.js index 67ff8cb649..13bd87867b 100644 --- a/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.js +++ b/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.js @@ -20,6 +20,16 @@ frappe.ui.form.on('POS Closing Voucher', { }; }); }, + + total_amount: function(frm) { + get_difference_amount(frm); + }, + custody_amount: function(frm){ + get_difference_amount(frm); + }, + expense_amount: function(frm){ + get_difference_amount(frm); + }, refresh: function(frm) { get_closing_voucher_details(frm); }, @@ -47,6 +57,10 @@ frappe.ui.form.on('POS Closing Voucher Details', { } }); +var get_difference_amount = function(frm){ + frm.doc.difference = frm.doc.total_amount - frm.doc.custody_amount - frm.doc.expense_amount; + refresh_field("difference"); +}; var get_closing_voucher_details = function(frm) { if (frm.doc.period_end_date && frm.doc.period_start_date && frm.doc.company && frm.doc.pos_profile && frm.doc.user) { diff --git a/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.json b/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.json index e24239526a..0ebea83e60 100644 --- a/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.json +++ b/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_events_in_timeline": 0, "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, @@ -307,6 +308,197 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "expense_details_section", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Expense Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "expense_amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Expense Amount", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "custody_amount", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amount in Custody", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_13", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "total_amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Total Collected Amount", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "difference", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Difference", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, @@ -766,7 +958,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-08-21 16:15:54.363636", + "modified": "2019-01-26 13:23:49.192650", "modified_by": "Administrator", "module": "Selling", "name": "POS Closing Voucher", From aac404a155c5d0d3b2a7cfcc5b940ee2aa33248d Mon Sep 17 00:00:00 2001 From: navdeepghai1 Date: Mon, 28 Jan 2019 10:42:16 +0400 Subject: [PATCH 68/86] Fixed net_pay calculation issue --- erpnext/hr/doctype/salary_slip/salary_slip.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index 3ee98e6be0..901ede1197 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -360,7 +360,7 @@ class SalarySlip(TransactionBase): elif not d.amount: d.amount = d.default_amount if not d.do_not_include_in_total: - self.set(total_field, self.get(total_field) + flt(d.amount)) + self.set(total_field, self.get(total_field) + flt(d.amount, 2)) def calculate_net_pay(self): if self.salary_structure: @@ -473,4 +473,4 @@ def unlink_ref_doc_from_salary_slip(ref_no): if linked_ss: for ss in linked_ss: ss_doc = frappe.get_doc("Salary Slip", ss) - frappe.db.set_value("Salary Slip", ss_doc.name, "journal_entry", "") \ No newline at end of file + frappe.db.set_value("Salary Slip", ss_doc.name, "journal_entry", "") From 0bee62b460865fda32ad5f1d2a32ec1c387402e2 Mon Sep 17 00:00:00 2001 From: deepeshgarg007 Date: Mon, 28 Jan 2019 12:45:11 +0530 Subject: [PATCH 69/86] fix: Made period fields read only and added validation for multiple entries by same user --- .../pos_closing_voucher/pos_closing_voucher.js | 1 + .../pos_closing_voucher.json | 6 +++--- .../pos_closing_voucher/pos_closing_voucher.py | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.js b/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.js index 13bd87867b..f24caf767f 100644 --- a/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.js +++ b/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.js @@ -76,6 +76,7 @@ var get_closing_voucher_details = function(frm) { refresh_field("grand_total"); refresh_field("net_total"); refresh_field("total_quantity"); + refresh_field("total_amount"); frm.get_field("payment_reconciliation_details").$wrapper.html(r.message); } diff --git a/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.json b/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.json index 0ebea83e60..2ac57794b4 100644 --- a/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.json +++ b/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.json @@ -39,7 +39,7 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 1, @@ -72,7 +72,7 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 1, @@ -958,7 +958,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2019-01-26 13:23:49.192650", + "modified": "2019-01-28 12:33:45.217813", "modified_by": "Administrator", "module": "Selling", "name": "POS Closing Voucher", diff --git a/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.py b/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.py index e7fc85e05a..c45571f57c 100644 --- a/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.py +++ b/erpnext/selling/doctype/pos_closing_voucher/pos_closing_voucher.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe +from frappe import _ from frappe.model.document import Document from collections import defaultdict from erpnext.controllers.taxes_and_totals import get_itemised_tax_breakup_data @@ -26,6 +27,7 @@ class POSClosingVoucher(Document): sales_summary = get_sales_summary(invoice_list) self.set_sales_summary_values(sales_summary) + self.total_amount = sales_summary['grand_total'] if not self.get('payment_reconciliation'): mop = get_mode_of_payment_details(invoice_list) @@ -36,6 +38,21 @@ class POSClosingVoucher(Document): return self.get_payment_reconciliation_details() + def validate(self): + user = frappe.get_all('POS Closing Voucher', + filters = { + 'user': self.user, + 'docstatus': 1 + }, + or_filters = { + 'period_start_date': ('between', [self.period_start_date, self.period_end_date]), + 'period_end_date': ('between', [self.period_start_date, self.period_end_date]) + }) + + if user: + frappe.throw(_("POS Closing Voucher alreday exists for {0} between date {1} and {2}" + .format(self.user, self.period_start_date, self.period_end_date))) + def set_invoice_list(self, invoice_list): self.sales_invoices_summary = [] for invoice in invoice_list: From f0cfe98860b468a7ca72c6094d871a630bf4adec Mon Sep 17 00:00:00 2001 From: deepeshgarg007 Date: Mon, 28 Jan 2019 17:58:44 +0530 Subject: [PATCH 70/86] fix: Added missing semicolon and removed null from parameter --- erpnext/accounts/page/pos/pos.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index 17d6d0ddfc..1dcbdc6789 100755 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -1039,7 +1039,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.numeric_keypad.show(); }, - make_item_list: function (customer=null) { + make_item_list: function (customer) { var me = this; if (!this.price_list) { frappe.msgprint(__("Price List not found or disabled")); @@ -1428,7 +1428,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ ? this.item_serial_no[this.child.item_code][1] : (this.pos_profile_data['warehouse'] || this.items[0].default_warehouse)); customer = this.frm.doc.customer; - let rate + let rate; customer_price_list = this.customer_wise_price_list[customer] if (customer_price_list && customer_price_list[this.child.item_code]){ From 92bb84aa70270a8f6b278c040eff9dbd1097b1b5 Mon Sep 17 00:00:00 2001 From: navdeepghai1 Date: Mon, 28 Jan 2019 16:54:58 +0400 Subject: [PATCH 71/86] Changed static precision(2) value to system setting currency_precision value --- erpnext/hr/doctype/salary_slip/salary_slip.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index 901ede1197..11538cc368 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -330,7 +330,7 @@ class SalarySlip(TransactionBase): if frappe.db.get_value('Timesheet', data.time_sheet, 'status') == 'Payrolled': frappe.throw(_("Salary Slip of employee {0} already created for time sheet {1}").format(self.employee, data.time_sheet)) - def sum_components(self, component_type, total_field): + def sum_components(self, component_type, total_field, precision): joining_date, relieving_date = frappe.db.get_value("Employee", self.employee, ["date_of_joining", "relieving_date"]) @@ -350,7 +350,7 @@ class SalarySlip(TransactionBase): )): d.amount = rounded( - (flt(d.default_amount) * flt(self.payment_days) + (flt(d.default_amount, precision) * flt(self.payment_days) / cint(self.total_working_days)), self.precision("amount", component_type) ) @@ -360,19 +360,19 @@ class SalarySlip(TransactionBase): elif not d.amount: d.amount = d.default_amount if not d.do_not_include_in_total: - self.set(total_field, self.get(total_field) + flt(d.amount, 2)) + self.set(total_field, self.get(total_field) + flt(d.amount, precision)) def calculate_net_pay(self): if self.salary_structure: self.calculate_component_amounts() disable_rounded_total = cint(frappe.db.get_value("Global Defaults", None, "disable_rounded_total")) - + precision = frappe.defaults.get_global_default("currency_precision") self.total_deduction = 0 self.gross_pay = 0 - self.sum_components('earnings', 'gross_pay') - self.sum_components('deductions', 'total_deduction') + self.sum_components('earnings', 'gross_pay', precision) + self.sum_components('deductions', 'total_deduction', precision) self.set_loan_repayment() From 9acb885e60f77cd4e9ea8c98bdc39c18abcac731 Mon Sep 17 00:00:00 2001 From: Aditya Hase Date: Tue, 29 Jan 2019 10:52:37 +0530 Subject: [PATCH 72/86] fix(sqli): Avoid SQL Injection with sender param (#16509) --- erpnext/templates/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/templates/utils.py b/erpnext/templates/utils.py index eb84bcc8d8..8e14c067f1 100644 --- a/erpnext/templates/utils.py +++ b/erpnext/templates/utils.py @@ -16,7 +16,7 @@ def send_message(subject="Website Query", message="", sender="", status="Open"): customer = frappe.db.sql("""select distinct dl.link_name from `tabDynamic Link` dl left join `tabContact` c on dl.parent=c.name where dl.link_doctype='Customer' - and c.email_id='{email_id}'""".format(email_id=sender)) + and c.email_id = %s""", sender) if not customer: lead = frappe.db.get_value('Lead', dict(email_id=sender)) From a8e743e3c42b3d48ab443384c76279c30a2324a1 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 28 Jan 2019 11:27:35 +0530 Subject: [PATCH 73/86] fix: fiscal year always be for 12 months --- erpnext/accounts/doctype/fiscal_year/fiscal_year.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/fiscal_year/fiscal_year.py b/erpnext/accounts/doctype/fiscal_year/fiscal_year.py index a00aebe5a2..d749c89f34 100644 --- a/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +++ b/erpnext/accounts/doctype/fiscal_year/fiscal_year.py @@ -37,9 +37,10 @@ class FiscalYear(Document): if getdate(self.year_start_date) > getdate(self.year_end_date): frappe.throw(_("Fiscal Year Start Date should not be greater than Fiscal Year End Date")) - if (getdate(self.year_end_date) - getdate(self.year_start_date)).days > 366: - date = getdate(self.year_start_date) + relativedelta(years=1) - relativedelta(days=1) - self.year_end_date = date.strftime("%Y-%m-%d") + date = getdate(self.year_start_date) + relativedelta(years=1) - relativedelta(days=1) + + if getdate(self.year_end_date) != date: + frappe.throw(_("The difference between the year start date and year end date must be 12 months.")) def on_update(self): check_duplicate_fiscal_year(self) From 07f75a3e549c4a5ee7b6edd8d0f2bb3aa92e9e6f Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 29 Jan 2019 12:01:54 +0530 Subject: [PATCH 74/86] feat: on click of pay button and on focus out of qty field remove the zero qty items from the cart --- erpnext/accounts/page/pos/pos.js | 46 +++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index c89035c33f..7fcd2cb27d 100755 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -602,7 +602,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.remove_item = [] idx = $(this.wrapper).find(".pos-selected-item-action").attr("data-idx") this.remove_item.push(idx) - this.remove_zero_qty_item() + this.remove_zero_qty_items_from_cart() this.update_paid_amount_status(false) }, @@ -1167,20 +1167,27 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ $(this.wrapper).on("change", ".pos-item-qty", function () { var item_code = $(this).parents(".pos-selected-item-action").attr("data-item-code"); var qty = $(this).val(); - me.update_qty(item_code, qty) - me.update_value() + me.update_qty(item_code, qty); + me.update_value(); + }) + + $(this.wrapper).on("focusout", ".pos-item-qty", function () { + var item_code = $(this).parents(".pos-selected-item-action").attr("data-item-code"); + var qty = $(this).val(); + me.update_qty(item_code, qty, true); + me.update_value(); }) $(this.wrapper).find("[data-action='increase-qty']").on("click", function () { var item_code = $(this).parents(".pos-bill-item").attr("data-item-code"); var qty = flt($(this).parents(".pos-bill-item").find('.pos-item-qty').val()) + 1; - me.update_qty(item_code, qty) + me.update_qty(item_code, qty); }) $(this.wrapper).find("[data-action='decrease-qty']").on("click", function () { var item_code = $(this).parents(".pos-bill-item").attr("data-item-code"); var qty = flt($(this).parents(".pos-bill-item").find('.pos-item-qty').val()) - 1; - me.update_qty(item_code, qty) + me.update_qty(item_code, qty); }) $(this.wrapper).on("change", ".pos-item-disc", function () { @@ -1219,11 +1226,11 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ me.bind_delete_event() }, - update_qty: function (item_code, qty) { + update_qty: function (item_code, qty, remove_zero_qty_items) { var me = this; this.items = this.get_items(item_code); this.validate_serial_no() - this.set_item_details(item_code, "qty", qty); + this.set_item_details(item_code, "qty", qty, remove_zero_qty_items); }, update_discount: function(item_code, discount) { @@ -1284,7 +1291,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ }) }, - set_item_details: function (item_code, field, value) { + set_item_details: function (item_code, field, value, remove_zero_qty_items) { var me = this; if (value < 0) { frappe.throw(__("Enter value must be positive")); @@ -1299,7 +1306,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ d[field] = flt(value); d.amount = flt(d.rate) * flt(d.qty); - if (d.qty == 0) { + if (d.qty == 0 && remove_zero_qty_items) { me.remove_item.push(d.idx) } @@ -1309,10 +1316,14 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ } }); + if (field == 'qty') { + this.remove_zero_qty_items_from_cart(); + } + this.update_paid_amount_status(false) }, - remove_zero_qty_item: function () { + remove_zero_qty_items_from_cart: function () { var me = this; var idx = 0; this.items = [] @@ -1826,10 +1837,25 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ validate: function () { var me = this; this.customer_validate(); + this.validate_zero_qty_items(); this.item_validate(); this.validate_mode_of_payments(); }, + validate_zero_qty_items: function() { + this.remove_item = []; + + this.frm.doc.items.forEach(d => { + if (d.qty == 0) { + this.remove_item.push(d.idx); + } + }); + + if(this.remove_item) { + this.remove_zero_qty_items_from_cart(); + } + }, + item_validate: function () { if (this.frm.doc.items.length == 0) { frappe.throw(__("Select items to save the invoice")) From 9520e345bd1f61e242c3f8d3e2a1c2b4d1cded17 Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Tue, 29 Jan 2019 13:03:46 +0530 Subject: [PATCH 75/86] fix: better error messages --- erpnext/accounts/doctype/fiscal_year/fiscal_year.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/fiscal_year/fiscal_year.py b/erpnext/accounts/doctype/fiscal_year/fiscal_year.py index d749c89f34..6bb71b667f 100644 --- a/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +++ b/erpnext/accounts/doctype/fiscal_year/fiscal_year.py @@ -35,12 +35,12 @@ class FiscalYear(Document): def validate_dates(self): if getdate(self.year_start_date) > getdate(self.year_end_date): - frappe.throw(_("Fiscal Year Start Date should not be greater than Fiscal Year End Date")) + frappe.throw(_("Fiscal Year Start Date should be one year earlier than Fiscal Year End Date")) date = getdate(self.year_start_date) + relativedelta(years=1) - relativedelta(days=1) if getdate(self.year_end_date) != date: - frappe.throw(_("The difference between the year start date and year end date must be 12 months.")) + frappe.throw(_("Fiscal Year End Date should be one year after Fiscal Year Start Date")) def on_update(self): check_duplicate_fiscal_year(self) From 4e45663297d01d2621e2ed2cdd6aa9702481cc67 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 29 Jan 2019 14:02:08 +0530 Subject: [PATCH 76/86] fix(stock): get item price based on party --- erpnext/stock/get_item_details.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index e1607a927f..ec1031c70f 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -440,13 +440,12 @@ def get_item_price(args, item_code, ignore_party=False): and ifnull(uom, '') in ('', %(uom)s)""" if not ignore_party: - conditions += " and (customer is null or customer = '') and (supplier is null or supplier = '')" if args.get("customer"): conditions += " and customer=%(customer)s" - - if args.get("supplier"): + elif args.get("supplier"): conditions += " and supplier=%(supplier)s" - + else: + conditions += " and (customer is null or customer = '') and (supplier is null or supplier = '')" if args.get('min_qty'): conditions += " and ifnull(min_qty, 0) <= %(min_qty)s" From 115a252f55393b3753b6fddbdb8cbfa5b669be0c Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Tue, 29 Jan 2019 14:40:10 +0530 Subject: [PATCH 77/86] docs: changelog for v11.0.4 --- erpnext/change_log/v11/v11_0_4.md | 72 +++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 erpnext/change_log/v11/v11_0_4.md diff --git a/erpnext/change_log/v11/v11_0_4.md b/erpnext/change_log/v11/v11_0_4.md new file mode 100644 index 0000000000..0c4325f3b4 --- /dev/null +++ b/erpnext/change_log/v11/v11_0_4.md @@ -0,0 +1,72 @@ +- Enhancements + + - Accounting + + - Company Tree + - Multiple Finance Books + - Bank Statement Upload + - Tax Withholding + - Subscriptions and Deferred Revenue + - Inter Company Transactions + - Standalone Credit / Debit Note + - Reverse Journal Entry + - Enhanced Bank Guarantee + - Cost Center Numbering + + - Human Resource + + - Department Hierarchy + - Leave Management + - Leave Period + - New Leave Types + - Leave Encashment + - Compensatory Leave + - Attendance Request + - Enhanced Payroll + - New Salary Structure + - Additional Salary + - Payroll Period + - Employee Benefits + - Employee Tax Exemptions + - Auto Calculation of Tax Deduction + - Enhanced Salary Processing + - Employee Lifecycle + - Employee Onboarding + - Employee Separation + - Employee Transfer and Promotion + - Shift Planning + - Staffing Plan + + - Asset Management + + - Capital-Work-in-Progress (CWIP) Accounting + - Multiple depreciation schedule based on finance book + - Asset Value Adjustment + - Improved Asset Movement between location or employee + - New Depreciation method Written Down Value (WDV) + + - POS + + - Allow draft mode print in online POS + - Allowed print before pay + - Save the invoice before print + + - Other Features + + - A free marketplace where any ERPNext user can list their products and be discovered by thousands of other companies using ERPNext + - Loyalty Management + - Subscriptions + - Shareholder Management + - Production Plan and Job Card + - Delivery Trip + - Updated Timesheets + - Lead Notes + + - GST (India) + - Auto selection of GST tax template based on company and shipping address + - GSTR-1 based on the address + - HSN-wise summary of outwards supplies + +- Changes have been made to ensure ERPNext is compatible with Python 3 +- Better documentation is now available with support for more languages +- A lot of other fixes have been done to ensure a better overall user experience \ No newline at end of file From 7ef69b68f80ca3cda0055aeb4b1014c69d332758 Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Tue, 29 Jan 2019 15:52:57 +0530 Subject: [PATCH 78/86] Update v11_0_4.md --- erpnext/change_log/v11/v11_0_4.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/erpnext/change_log/v11/v11_0_4.md b/erpnext/change_log/v11/v11_0_4.md index 0c4325f3b4..771c80be01 100644 --- a/erpnext/change_log/v11/v11_0_4.md +++ b/erpnext/change_log/v11/v11_0_4.md @@ -6,14 +6,17 @@ - Multiple Finance Books - Bank Statement Upload - Tax Withholding - - Subscriptions and Deferred Revenue + - Subscriptions + - Deferred Revenue and Expenses + - Exchange Rate Revaluation - Inter Company Transactions - Standalone Credit / Debit Note - Reverse Journal Entry - Enhanced Bank Guarantee - Cost Center Numbering + - Loyalty Points Management - - Human Resource + - Human Resources - Department Hierarchy - Leave Management @@ -30,10 +33,12 @@ - Employee Tax Exemptions - Auto Calculation of Tax Deduction - Enhanced Salary Processing - - Employee Lifecycle - Employee Onboarding - Employee Separation - - Employee Transfer and Promotion + - Employee Transfer + - Employee Promotion + - Employee Incentive + - Retention Bonus - Shift Planning - Staffing Plan @@ -54,8 +59,8 @@ - Other Features - A free marketplace where any ERPNext user can list their products and be discovered by thousands of other companies using ERPNext - - Loyalty Management - - Subscriptions + - Add/Update quantity in Sales & Purchase Order without amending document + - Enhanced Item Price (Based on UOM, Party, Min. Qty, etc.) - Shareholder Management - Production Plan and Job Card - Delivery Trip @@ -69,4 +74,4 @@ - Changes have been made to ensure ERPNext is compatible with Python 3 - Better documentation is now available with support for more languages -- A lot of other fixes have been done to ensure a better overall user experience \ No newline at end of file +- A lot of other fixes have been done to ensure a better overall user experience From bad36ef3efbef8c724d6e5c1fa0d4d9aad47bfed Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Tue, 29 Jan 2019 16:00:45 +0530 Subject: [PATCH 79/86] fix: add node_modules to gitignore (#16515) --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 68272c7d4d..16522447c2 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ erpnext/docs/current *.swo __pycache__ *~ +node_modules/ \ No newline at end of file From 9f33c208d7bb0ea9c2af6c5f8d29daa70b9c2225 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 29 Jan 2019 16:07:07 +0530 Subject: [PATCH 80/86] Update v11_0_4.md --- erpnext/change_log/v11/v11_0_4.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/erpnext/change_log/v11/v11_0_4.md b/erpnext/change_log/v11/v11_0_4.md index 771c80be01..f4dfe16faf 100644 --- a/erpnext/change_log/v11/v11_0_4.md +++ b/erpnext/change_log/v11/v11_0_4.md @@ -15,6 +15,7 @@ - Enhanced Bank Guarantee - Cost Center Numbering - Loyalty Points Management + - Enhanced General ledger report - Human Resources @@ -66,6 +67,8 @@ - Delivery Trip - Updated Timesheets - Lead Notes + - Better Sales / Purchase / Stock Analytics report + - Currency exchange API is changed to frankfurter public domain - GST (India) - Auto selection of GST tax template based on company and shipping address From a95ed44d3df7f8534956db71ddf8c5cc37e8783f Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 29 Jan 2019 16:24:53 +0530 Subject: [PATCH 81/86] fix: test case for fiscal year (#16516) --- erpnext/accounts/doctype/fiscal_year/fiscal_year.py | 8 ++++++-- erpnext/accounts/doctype/fiscal_year/test_fiscal_year.py | 6 ++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/doctype/fiscal_year/fiscal_year.py b/erpnext/accounts/doctype/fiscal_year/fiscal_year.py index 6bb71b667f..d80bc7fad1 100644 --- a/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +++ b/erpnext/accounts/doctype/fiscal_year/fiscal_year.py @@ -9,6 +9,8 @@ from dateutil.relativedelta import relativedelta from frappe.model.document import Document +class FiscalYearIncorrectDate(frappe.ValidationError): pass + class FiscalYear(Document): def set_as_default(self): frappe.db.set_value("Global Defaults", None, "current_fiscal_year", self.name) @@ -35,12 +37,14 @@ class FiscalYear(Document): def validate_dates(self): if getdate(self.year_start_date) > getdate(self.year_end_date): - frappe.throw(_("Fiscal Year Start Date should be one year earlier than Fiscal Year End Date")) + frappe.throw(_("Fiscal Year Start Date should be one year earlier than Fiscal Year End Date"), + FiscalYearIncorrectDate) date = getdate(self.year_start_date) + relativedelta(years=1) - relativedelta(days=1) if getdate(self.year_end_date) != date: - frappe.throw(_("Fiscal Year End Date should be one year after Fiscal Year Start Date")) + frappe.throw(_("Fiscal Year End Date should be one year after Fiscal Year Start Date"), + FiscalYearIncorrectDate) def on_update(self): check_duplicate_fiscal_year(self) diff --git a/erpnext/accounts/doctype/fiscal_year/test_fiscal_year.py b/erpnext/accounts/doctype/fiscal_year/test_fiscal_year.py index 5f90bb3867..f7b7782766 100644 --- a/erpnext/accounts/doctype/fiscal_year/test_fiscal_year.py +++ b/erpnext/accounts/doctype/fiscal_year/test_fiscal_year.py @@ -5,6 +5,8 @@ from __future__ import unicode_literals import frappe, unittest +from erpnext.accounts.doctype.fiscal_year.fiscal_year import FiscalYearIncorrectDate + test_records = frappe.get_test_records('Fiscal Year') test_ignore = ["Company"] @@ -12,12 +14,12 @@ class TestFiscalYear(unittest.TestCase): def test_extra_year(self): if frappe.db.exists("Fiscal Year", "_Test Fiscal Year 2000"): frappe.delete_doc("Fiscal Year", "_Test Fiscal Year 2000") + fy = frappe.get_doc({ "doctype": "Fiscal Year", "year": "_Test Fiscal Year 2000", "year_end_date": "2002-12-31", "year_start_date": "2000-04-01" }) - fy.insert() - self.assertEqual(fy.year_end_date, '2001-03-31') + self.assertRaises(FiscalYearIncorrectDate, fy.insert) From b32d9458b5ed456fbb3c629cfd886fcb7eb1375d Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Tue, 29 Jan 2019 17:30:19 +0550 Subject: [PATCH 82/86] bumped to version 10.1.81 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 847618232c..c1090e9e0a 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -5,7 +5,7 @@ import frappe from erpnext.hooks import regional_overrides from frappe.utils import getdate -__version__ = '10.1.80' +__version__ = '10.1.81' def get_default_company(user=None): '''Get default company for user''' From 51a27b3524d79adee63b3a0d86fcc091f89581d3 Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Tue, 29 Jan 2019 17:52:47 +0530 Subject: [PATCH 83/86] fix: unsaved merge conflict --- .../hr/doctype/payroll_entry/payroll_entry.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/erpnext/hr/doctype/payroll_entry/payroll_entry.py b/erpnext/hr/doctype/payroll_entry/payroll_entry.py index 9dbca5ec66..af5e3d0570 100644 --- a/erpnext/hr/doctype/payroll_entry/payroll_entry.py +++ b/erpnext/hr/doctype/payroll_entry/payroll_entry.py @@ -115,7 +115,7 @@ class PayrollEntry(Document): frappe.enqueue(create_salary_slips_for_employees, timeout=600, employees=emp_list, args=args) else: create_salary_slips_for_employees(emp_list, args, publish_progress=False) - + def get_sal_slip_list(self, ss_status, as_dict=False): """ Returns list of salary slips based on selected criteria @@ -196,7 +196,7 @@ class PayrollEntry(Document): return account_dict def get_default_payroll_payable_account(self): - payroll_payable_account = frappe.get_cached_value('Company', + payroll_payable_account = frappe.get_cached_value('Company', {"company_name": self.company}, "default_payroll_payable_account") if not payroll_payable_account: @@ -482,7 +482,6 @@ def payroll_entry_has_bank_entries(name): return response -<<<<<<< HEAD def create_salary_slips_for_employees(employees, args, publish_progress=True): salary_slips_exists_for = get_existing_salary_slips(employees, args) count=0 @@ -505,9 +504,9 @@ def create_salary_slips_for_employees(employees, args, publish_progress=True): def get_existing_salary_slips(employees, args): return frappe.db.sql_list(""" - select distinct employee from `tabSalary Slip` + select distinct employee from `tabSalary Slip` where docstatus!= 2 and company = %s - and start_date >= %s and end_date <= %s + and start_date >= %s and end_date <= %s and employee in (%s) """ % ('%s', '%s', '%s', ', '.join(['%s']*len(employees))), [args.company, args.start_date, args.end_date] + employees) @@ -528,7 +527,7 @@ def submit_salary_slips_for_employees(payroll_entry, salary_slips, publish_progr submitted_ss.append(ss_obj) except frappe.ValidationError: not_submitted_ss.append(ss[0]) - + count += 1 if publish_progress: frappe.publish_progress(count*100/len(salary_slips), title = _("Submitting Salary Slips...")) @@ -539,7 +538,7 @@ def submit_salary_slips_for_employees(payroll_entry, salary_slips, publish_progr .format(ss_obj.start_date, ss_obj.end_date)) payroll_entry.email_salary_slip(submitted_ss) - + payroll_entry.db_set("salary_slips_submitted", 1) payroll_entry.notify_update() @@ -547,8 +546,7 @@ def submit_salary_slips_for_employees(payroll_entry, salary_slips, publish_progr frappe.msgprint(_("No salary slip found to submit for the above selected criteria OR salary slip already submitted")) if not_submitted_ss: - frappe.msgprint(_("Could not submit some Salary Slips")) -======= + frappe.msgprint(_("Could not submit some Salary Slips")) def get_payroll_entries_for_jv(doctype, txt, searchfield, start, page_len, filters): return frappe.db.sql(""" select name from `tabPayroll Entry` @@ -561,4 +559,3 @@ def get_payroll_entries_for_jv(doctype, txt, searchfield, start, page_len, filte 'txt': "%%%s%%" % frappe.db.escape(txt), 'start': start, 'page_len': page_len }) ->>>>>>> master From b5dda63dddf6bddc9acb660b01bd36e84d33aa72 Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Tue, 29 Jan 2019 17:54:47 +0530 Subject: [PATCH 84/86] fix: change changelog version to 11.1.0 --- erpnext/change_log/v11/v11_0_4.md | 80 ------------------------------- 1 file changed, 80 deletions(-) delete mode 100644 erpnext/change_log/v11/v11_0_4.md diff --git a/erpnext/change_log/v11/v11_0_4.md b/erpnext/change_log/v11/v11_0_4.md deleted file mode 100644 index f4dfe16faf..0000000000 --- a/erpnext/change_log/v11/v11_0_4.md +++ /dev/null @@ -1,80 +0,0 @@ -- Enhancements - - - Accounting - - - Company Tree - - Multiple Finance Books - - Bank Statement Upload - - Tax Withholding - - Subscriptions - - Deferred Revenue and Expenses - - Exchange Rate Revaluation - - Inter Company Transactions - - Standalone Credit / Debit Note - - Reverse Journal Entry - - Enhanced Bank Guarantee - - Cost Center Numbering - - Loyalty Points Management - - Enhanced General ledger report - - - Human Resources - - - Department Hierarchy - - Leave Management - - Leave Period - - New Leave Types - - Leave Encashment - - Compensatory Leave - - Attendance Request - - Enhanced Payroll - - New Salary Structure - - Additional Salary - - Payroll Period - - Employee Benefits - - Employee Tax Exemptions - - Auto Calculation of Tax Deduction - - Enhanced Salary Processing - - Employee Onboarding - - Employee Separation - - Employee Transfer - - Employee Promotion - - Employee Incentive - - Retention Bonus - - Shift Planning - - Staffing Plan - - - Asset Management - - - Capital-Work-in-Progress (CWIP) Accounting - - Multiple depreciation schedule based on finance book - - Asset Value Adjustment - - Improved Asset Movement between location or employee - - New Depreciation method Written Down Value (WDV) - - - POS - - - Allow draft mode print in online POS - - Allowed print before pay - - Save the invoice before print - - - Other Features - - - A free marketplace where any ERPNext user can list their products and be discovered by thousands of other companies using ERPNext - - Add/Update quantity in Sales & Purchase Order without amending document - - Enhanced Item Price (Based on UOM, Party, Min. Qty, etc.) - - Shareholder Management - - Production Plan and Job Card - - Delivery Trip - - Updated Timesheets - - Lead Notes - - Better Sales / Purchase / Stock Analytics report - - Currency exchange API is changed to frankfurter public domain - - - GST (India) - - Auto selection of GST tax template based on company and shipping address - - GSTR-1 based on the address - - HSN-wise summary of outwards supplies - -- Changes have been made to ensure ERPNext is compatible with Python 3 -- Better documentation is now available with support for more languages -- A lot of other fixes have been done to ensure a better overall user experience From 606bd37316c96b9e2750610c3638adcfc4f260eb Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Tue, 29 Jan 2019 17:55:46 +0530 Subject: [PATCH 85/86] fix: change changelog version to 11.1.0 --- erpnext/change_log/v11/v11_1_0.md | 80 +++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 erpnext/change_log/v11/v11_1_0.md diff --git a/erpnext/change_log/v11/v11_1_0.md b/erpnext/change_log/v11/v11_1_0.md new file mode 100644 index 0000000000..f4dfe16faf --- /dev/null +++ b/erpnext/change_log/v11/v11_1_0.md @@ -0,0 +1,80 @@ +- Enhancements + + - Accounting + + - Company Tree + - Multiple Finance Books + - Bank Statement Upload + - Tax Withholding + - Subscriptions + - Deferred Revenue and Expenses + - Exchange Rate Revaluation + - Inter Company Transactions + - Standalone Credit / Debit Note + - Reverse Journal Entry + - Enhanced Bank Guarantee + - Cost Center Numbering + - Loyalty Points Management + - Enhanced General ledger report + + - Human Resources + + - Department Hierarchy + - Leave Management + - Leave Period + - New Leave Types + - Leave Encashment + - Compensatory Leave + - Attendance Request + - Enhanced Payroll + - New Salary Structure + - Additional Salary + - Payroll Period + - Employee Benefits + - Employee Tax Exemptions + - Auto Calculation of Tax Deduction + - Enhanced Salary Processing + - Employee Onboarding + - Employee Separation + - Employee Transfer + - Employee Promotion + - Employee Incentive + - Retention Bonus + - Shift Planning + - Staffing Plan + + - Asset Management + + - Capital-Work-in-Progress (CWIP) Accounting + - Multiple depreciation schedule based on finance book + - Asset Value Adjustment + - Improved Asset Movement between location or employee + - New Depreciation method Written Down Value (WDV) + + - POS + + - Allow draft mode print in online POS + - Allowed print before pay + - Save the invoice before print + + - Other Features + + - A free marketplace where any ERPNext user can list their products and be discovered by thousands of other companies using ERPNext + - Add/Update quantity in Sales & Purchase Order without amending document + - Enhanced Item Price (Based on UOM, Party, Min. Qty, etc.) + - Shareholder Management + - Production Plan and Job Card + - Delivery Trip + - Updated Timesheets + - Lead Notes + - Better Sales / Purchase / Stock Analytics report + - Currency exchange API is changed to frankfurter public domain + + - GST (India) + - Auto selection of GST tax template based on company and shipping address + - GSTR-1 based on the address + - HSN-wise summary of outwards supplies + +- Changes have been made to ensure ERPNext is compatible with Python 3 +- Better documentation is now available with support for more languages +- A lot of other fixes have been done to ensure a better overall user experience From 1a4cd3b66a1fdb835eb7991e4e400a27ab4cd335 Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Tue, 29 Jan 2019 18:46:34 +0550 Subject: [PATCH 86/86] bumped to version 11.1.0 --- erpnext/hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/hooks.py b/erpnext/hooks.py index fd129e5b8e..5fdef885ff 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -12,7 +12,7 @@ app_license = "GNU General Public License (v3)" source_link = "https://github.com/frappe/erpnext" develop_version = '12.x.x-develop' -staging_version = '11.0.3-beta.37' +staging_version = '11.1.0' error_report_email = "support@erpnext.com"