From e72c98dafb3c6825a66434f26cfd4dd4de66d39a Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 24 May 2017 09:01:44 +0530 Subject: [PATCH 01/35] On change of item rate, set margin amount on price list rate, instead of margin percentage (#8988) --- erpnext/public/js/controllers/transaction.js | 8 ++++---- erpnext/selling/sales_common.js | 10 +++++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 44bf21da3e..2d0d83b125 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -15,10 +15,10 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ // if rate is greater than price_list_rate, set margin // or set discount item.discount_percentage = 0; - item.margin_type = 'Percentage'; - item.margin_rate_or_amount = flt(Math.abs(1 - item.rate / item.price_list_rate) * 100.0, - precision("discount_percentage", item)); - item.rate_with_margin = item.rate; + item.margin_type = 'Amount'; + item.margin_rate_or_amount = flt(item.rate - item.price_list_rate, + precision("margin_rate_or_amount", item)); + item.rate_with_margin = item.rate; } else { item.discount_percentage = flt((1 - item.rate / item.price_list_rate) * 100.0, precision("discount_percentage", item)); diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js index 715434384b..1fcf334717 100644 --- a/erpnext/selling/sales_common.js +++ b/erpnext/selling/sales_common.js @@ -348,9 +348,13 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({ margin_type: function(doc, cdt, cdn){ // calculate the revised total margin and rate on margin type changes item = locals[cdt][cdn]; - this.apply_pricing_rule_on_item(item, doc,cdt, cdn) - this.calculate_taxes_and_totals(); - cur_frm.refresh_fields(); + if(!item.margin_type) { + frappe.model.set_value(cdt, cdn, "margin_rate_or_amount", 0); + } else { + this.apply_pricing_rule_on_item(item, doc,cdt, cdn) + this.calculate_taxes_and_totals(); + cur_frm.refresh_fields(); + } } }); From 88906cfc63a050639779fd45cdc2141ea44d4592 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 24 May 2017 09:37:26 +0600 Subject: [PATCH 02/35] bumped to version 8.0.37 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index ad827e5b27..076baeaac7 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.36' +__version__ = '8.0.37' def get_default_company(user=None): From 7a9bd41a7267025e1d9413aec7d5275d632f1dcd Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 24 May 2017 16:18:27 +0530 Subject: [PATCH 03/35] Improved currency exchange rate message --- erpnext/setup/utils.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/erpnext/setup/utils.py b/erpnext/setup/utils.py index 55a0fd3c01..46e4d5c4f5 100644 --- a/erpnext/setup/utils.py +++ b/erpnext/setup/utils.py @@ -91,8 +91,7 @@ def get_exchange_rate(from_currency, to_currency, transaction_date=None): response.raise_for_status() value = response.json()["rates"][to_currency] cache.setex(key, value, 6 * 60 * 60) - return flt(value) except: - frappe.msgprint(_("Unable to find exchange rate for {0} to {1} for key date {2}").format(from_currency, to_currency, transaction_date)) + frappe.msgprint(_("Unable to find exchange rate for {0} to {1} for key date {2}. Please create a Currency Exchange record manually").format(from_currency, to_currency, transaction_date)) return 0.0 \ No newline at end of file From 032374e76e72fc09919a85d5953960c2117678c3 Mon Sep 17 00:00:00 2001 From: Charles-Henri Decultot Date: Wed, 24 May 2017 12:59:42 +0200 Subject: [PATCH 04/35] Correction of the digest template (#8992) --- erpnext/setup/doctype/email_digest/templates/default.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/setup/doctype/email_digest/templates/default.html b/erpnext/setup/doctype/email_digest/templates/default.html index 78acbd9251..5a657d26a3 100644 --- a/erpnext/setup/doctype/email_digest/templates/default.html +++ b/erpnext/setup/doctype/email_digest/templates/default.html @@ -1,6 +1,6 @@ {% macro show_card(card) %}
-
{{ card.label }} +
{{ _(card.label) }} {% if card.count %} ({{ card.count }}) {% endif %}
From 2d79a641c27159ee263f9233e117343bb54b7b69 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 24 May 2017 12:41:14 +0530 Subject: [PATCH 05/35] Annual billing amount in party dashboard based on grand total --- erpnext/accounts/party.py | 37 ++++++++++++++++++-- erpnext/buying/doctype/supplier/supplier.py | 23 ++---------- erpnext/selling/doctype/customer/customer.py | 21 ++--------- 3 files changed, 40 insertions(+), 41 deletions(-) diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index f0c29bc36e..d54b5b9e85 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -7,10 +7,13 @@ import frappe import datetime from frappe import _, msgprint, scrub from frappe.defaults import get_user_permissions -from frappe.utils import add_days, getdate, formatdate, get_first_day, date_diff, add_years, get_timestamp +from frappe.utils import add_days, getdate, formatdate, get_first_day, date_diff, \ + add_years, get_timestamp, nowdate from frappe.geo.doctype.address.address import get_address_display, get_default_address from frappe.email.doctype.contact.contact import get_contact_details, get_default_contact from erpnext.exceptions import PartyFrozen, InvalidCurrency, PartyDisabled, InvalidAccountCurrency +from erpnext.accounts.utils import get_fiscal_year +from erpnext import get_default_currency class DuplicatePartyAccountError(frappe.ValidationError): pass @@ -359,4 +362,34 @@ def get_timeline_data(doctype, name): timestamp = get_timestamp(date) out.update({ timestamp: count }) - return out \ No newline at end of file + return out + +def get_dashboard_info(party_type, party): + current_fiscal_year = get_fiscal_year(nowdate(), as_dict=True) + party_account_currency = get_party_account_currency(party_type, party, frappe.db.get_default("company")) + company_default_currency = get_default_currency() + + if party_account_currency==company_default_currency: + total_field = "base_grand_total" + else: + total_field = "grand_total" + + doctype = "Sales Invoice" if party_type=="Customer" else "Purchase Invoice" + + billing_this_year = frappe.db.sql(""" + select sum({0}) + from `tab{1}` + where {2}=%s and docstatus=1 and posting_date between %s and %s + """.format(total_field, doctype, party_type.lower()), + (party, current_fiscal_year.year_start_date, current_fiscal_year.year_end_date)) + + total_unpaid = frappe.db.sql("""select sum(outstanding_amount) + from `tab{0}` + where {1}=%s and docstatus = 1""".format(doctype, party_type.lower()), party) + + info = {} + info["billing_this_year"] = billing_this_year[0][0] if billing_this_year else 0 + info["currency"] = party_account_currency + info["total_unpaid"] = total_unpaid[0][0] if total_unpaid else 0 + + return info \ No newline at end of file diff --git a/erpnext/buying/doctype/supplier/supplier.py b/erpnext/buying/doctype/supplier/supplier.py index 704e8285b1..3b6ae620d1 100644 --- a/erpnext/buying/doctype/supplier/supplier.py +++ b/erpnext/buying/doctype/supplier/supplier.py @@ -6,11 +6,9 @@ import frappe import frappe.defaults from frappe import msgprint, _ from frappe.model.naming import make_autoname -from frappe.geo.address_and_contact import (load_address_and_contact, - delete_contact_and_address) - +from frappe.geo.address_and_contact import load_address_and_contact, delete_contact_and_address from erpnext.utilities.transaction_base import TransactionBase -from erpnext.accounts.party import validate_party_accounts, get_timeline_data # keep this +from erpnext.accounts.party import validate_party_accounts, get_dashboard_info, get_timeline_data # keep this class Supplier(TransactionBase): def get_feed(self): @@ -22,22 +20,7 @@ class Supplier(TransactionBase): self.load_dashboard_info() def load_dashboard_info(self): - billing_this_year = frappe.db.sql(""" - select sum(credit_in_account_currency) - sum(debit_in_account_currency) - from `tabGL Entry` - where voucher_type='Purchase Invoice' and party_type = 'Supplier' - and party=%s and fiscal_year = %s""", - (self.name, frappe.db.get_default("fiscal_year"))) - - total_unpaid = frappe.db.sql("""select sum(outstanding_amount) - from `tabPurchase Invoice` - where supplier=%s and docstatus = 1""", self.name) - - - info = {} - info["billing_this_year"] = billing_this_year[0][0] if billing_this_year else 0 - info["total_unpaid"] = total_unpaid[0][0] if total_unpaid else 0 - + info = get_dashboard_info(self.doctype, self.name) self.set_onload('dashboard_info', info) def autoname(self): diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py index e4101af4bf..c0b3b84775 100644 --- a/erpnext/selling/doctype/customer/customer.py +++ b/erpnext/selling/doctype/customer/customer.py @@ -10,8 +10,7 @@ from frappe.utils import flt, cint, cstr from frappe.desk.reportview import build_match_conditions from erpnext.utilities.transaction_base import TransactionBase from frappe.geo.address_and_contact import load_address_and_contact, delete_contact_and_address -from erpnext.accounts.party import validate_party_accounts, get_timeline_data # keep this -from erpnext import get_default_currency +from erpnext.accounts.party import validate_party_accounts, get_dashboard_info, get_timeline_data # keep this class Customer(TransactionBase): def get_feed(self): @@ -23,25 +22,9 @@ class Customer(TransactionBase): self.load_dashboard_info() def load_dashboard_info(self): - billing_this_year = frappe.db.sql(""" - select sum(debit_in_account_currency) - sum(credit_in_account_currency), account_currency - from `tabGL Entry` - where voucher_type='Sales Invoice' and party_type = 'Customer' - and party=%s and fiscal_year = %s""", - (self.name, frappe.db.get_default("fiscal_year"))) - - total_unpaid = frappe.db.sql("""select sum(outstanding_amount) - from `tabSales Invoice` - where customer=%s and docstatus = 1""", self.name) - - info = {} - info["billing_this_year"] = billing_this_year[0][0] if billing_this_year else 0 - info["currency"] = billing_this_year[0][1] if billing_this_year else get_default_currency() - info["total_unpaid"] = total_unpaid[0][0] if total_unpaid else 0 - + info = get_dashboard_info(self.doctype, self.name) self.set_onload('dashboard_info', info) - def autoname(self): cust_master_name = frappe.defaults.get_global_default('cust_master_name') if cust_master_name == 'Customer Name': From 24f0b13b229f13a5318508249dd66ecd4a92da39 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 24 May 2017 13:01:26 +0530 Subject: [PATCH 06/35] Total unpaid amount in party is based on GLE --- erpnext/accounts/party.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index d54b5b9e85..0501d3870b 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -382,14 +382,17 @@ def get_dashboard_info(party_type, party): where {2}=%s and docstatus=1 and posting_date between %s and %s """.format(total_field, doctype, party_type.lower()), (party, current_fiscal_year.year_start_date, current_fiscal_year.year_end_date)) - - total_unpaid = frappe.db.sql("""select sum(outstanding_amount) - from `tab{0}` - where {1}=%s and docstatus = 1""".format(doctype, party_type.lower()), party) + + total_unpaid = frappe.db.sql(""" + select sum(debit_in_account_currency) - sum(credit_in_account_currency) + from `tabGL Entry` + where party_type = %s and party=%s""", (party_type, party)) info = {} info["billing_this_year"] = billing_this_year[0][0] if billing_this_year else 0 info["currency"] = party_account_currency info["total_unpaid"] = total_unpaid[0][0] if total_unpaid else 0 + if party_type == "Supplier": + info["total_unpaid"] = -1 * info["total_unpaid"] return info \ No newline at end of file From 799a9cabe793838d4282dec58e11c627c520e044 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 23 May 2017 16:36:33 +0530 Subject: [PATCH 07/35] Can't change valuation method in stock settings, if there are transactions against some items which does not have it's own valuation method --- .../doctype/stock_settings/stock_settings.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.py b/erpnext/stock/doctype/stock_settings/stock_settings.py index 68d64a2474..d9d9568e40 100644 --- a/erpnext/stock/doctype/stock_settings/stock_settings.py +++ b/erpnext/stock/doctype/stock_settings/stock_settings.py @@ -26,3 +26,19 @@ class StockSettings(Document): # show/hide barcode field frappe.make_property_setter({'fieldname': 'barcode', 'property': 'hidden', 'value': 0 if self.show_barcode_field else 1}) + + self.cant_change_valuation_method() + + def cant_change_valuation_method(self): + db_valuation_method = frappe.db.get_single_value("Stock Settings", "valuation_method") + + if db_valuation_method and db_valuation_method != self.valuation_method: + # check if there are any stock ledger entries against items + # which does not have it's own valuation method + sle = frappe.db.sql("""select name from `tabStock Ledger Entry` sle + where exists(select name from tabItem + where name=sle.item_code and (valuation_method is null or valuation_method='')) + """) + + if sle: + frappe.throw(_("Can't change valuation method, as there are transactions against some items which does not have it's own valuation method")) \ No newline at end of file From 258f7da778a695f7bb11544db2af577248f54e41 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 23 May 2017 15:36:03 +0530 Subject: [PATCH 08/35] Paid amount + Write Off Amount can not be greater than Grand Total in return POS --- erpnext/accounts/doctype/sales_invoice/sales_invoice.py | 8 ++++---- erpnext/patches/v7_2/update_assessment_modules.py | 6 ++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 6e3990ac8d..4b1837d4d7 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -411,10 +411,10 @@ class SalesInvoice(SellingController): throw(_("Customer {0} does not belong to project {1}").format(self.customer,self.project)) def validate_pos(self): - if flt(self.paid_amount) + flt(self.write_off_amount) \ - - flt(self.grand_total) > 1/(10**(self.precision("grand_total") + 1)) and self.is_return: - frappe.throw(_("""Paid amount + Write Off Amount can not be greater than Grand Total""")) - + if self.is_return: + if flt(self.paid_amount) + flt(self.write_off_amount) - flt(self.grand_total) < \ + 1/(10**(self.precision("grand_total") + 1)): + frappe.throw(_("Paid amount + Write Off Amount can not be greater than Grand Total")) def validate_item_code(self): for d in self.get('items'): diff --git a/erpnext/patches/v7_2/update_assessment_modules.py b/erpnext/patches/v7_2/update_assessment_modules.py index 9c00902f86..ec8577040e 100644 --- a/erpnext/patches/v7_2/update_assessment_modules.py +++ b/erpnext/patches/v7_2/update_assessment_modules.py @@ -7,13 +7,15 @@ def execute(): frappe.rename_doc("DocType", "Grade Interval", "Grading Scale Interval", force=True) frappe.reload_doc("schools", "doctype", "grading_scale_interval") - rename_field("Grading Scale Interval", "to_score", "threshold") + if "to_score" in frappe.db.get_table_columns("Grading Scale Interval"): + rename_field("Grading Scale Interval", "to_score", "threshold") frappe.rename_doc("DocType", "Assessment", "Assessment Plan", force=True) #Rename Assessment Results frappe.reload_doc("schools", "doctype", "assessment_plan") - rename_field("Assessment Plan", "grading_structure", "grading_scale") + if "grading_structure" in frappe.db.get_table_columns("Assessment Plan"): + rename_field("Assessment Plan", "grading_structure", "grading_scale") frappe.reload_doc("schools", "doctype", "assessment_result") frappe.reload_doc("schools", "doctype", "assessment_result_detail") From 2f0c34385b6d78af8e39ea48f1994a94e4ab067e Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 23 May 2017 21:51:32 +0530 Subject: [PATCH 09/35] Check if doctype exists before renaming --- .../patches/v7_2/update_assessment_modules.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/erpnext/patches/v7_2/update_assessment_modules.py b/erpnext/patches/v7_2/update_assessment_modules.py index ec8577040e..9075bbf87d 100644 --- a/erpnext/patches/v7_2/update_assessment_modules.py +++ b/erpnext/patches/v7_2/update_assessment_modules.py @@ -3,14 +3,17 @@ from frappe.model.utils.rename_field import rename_field def execute(): #Rename Grading Structure to Grading Scale - frappe.rename_doc("DocType", "Grading Structure", "Grading Scale", force=True) - frappe.rename_doc("DocType", "Grade Interval", "Grading Scale Interval", force=True) + if not frappe.db.exists("DocType", "Grading Scale"): + frappe.rename_doc("DocType", "Grading Structure", "Grading Scale", force=True) + if not frappe.db.exists("DocType", "Grading Scale Interval"): + frappe.rename_doc("DocType", "Grade Interval", "Grading Scale Interval", force=True) frappe.reload_doc("schools", "doctype", "grading_scale_interval") if "to_score" in frappe.db.get_table_columns("Grading Scale Interval"): rename_field("Grading Scale Interval", "to_score", "threshold") - frappe.rename_doc("DocType", "Assessment", "Assessment Plan", force=True) + if not frappe.db.exists("DocType", "Assessment Plan"): + frappe.rename_doc("DocType", "Assessment", "Assessment Plan", force=True) #Rename Assessment Results frappe.reload_doc("schools", "doctype", "assessment_plan") @@ -22,9 +25,10 @@ def execute(): frappe.reload_doc("schools", "doctype", "assessment_criteria") - for assessment in frappe.get_all("Assessment Plan", fields=["name", "grading_scale"], filters = [["docstatus", "!=", 2 ]]): - print assessment - for stud_result in frappe.db.sql("select * from `tabAssessment Result` where parent= %s", assessment.name, as_dict=True): + for assessment in frappe.get_all("Assessment Plan", + fields=["name", "grading_scale"], filters = [["docstatus", "!=", 2 ]]): + for stud_result in frappe.db.sql("select * from `tabAssessment Result` where parent= %s", + assessment.name, as_dict=True): if stud_result.result: assessment_result = frappe.new_doc("Assessment Result") assessment_result.student = stud_result.student From baa4afd67bb53e67623cad29737fbfe1e0a63727 Mon Sep 17 00:00:00 2001 From: mbauskar Date: Wed, 24 May 2017 13:07:16 +0530 Subject: [PATCH 10/35] [minor] removed the Grade Interval and Grading Structure doctype --- .../doctype/grade_interval/__init__.py | 0 .../grade_interval/grade_interval.json | 122 ----------- .../doctype/grade_interval/grade_interval.py | 11 - .../doctype/grading_structure/__init__.py | 0 .../grading_structure/grading_structure.js | 8 - .../grading_structure/grading_structure.json | 202 ------------------ .../grading_structure/grading_structure.py | 25 --- .../test_grading_structure.py | 12 -- 8 files changed, 380 deletions(-) delete mode 100644 erpnext/schools/doctype/grade_interval/__init__.py delete mode 100644 erpnext/schools/doctype/grade_interval/grade_interval.json delete mode 100644 erpnext/schools/doctype/grade_interval/grade_interval.py delete mode 100644 erpnext/schools/doctype/grading_structure/__init__.py delete mode 100644 erpnext/schools/doctype/grading_structure/grading_structure.js delete mode 100644 erpnext/schools/doctype/grading_structure/grading_structure.json delete mode 100644 erpnext/schools/doctype/grading_structure/grading_structure.py delete mode 100644 erpnext/schools/doctype/grading_structure/test_grading_structure.py diff --git a/erpnext/schools/doctype/grade_interval/__init__.py b/erpnext/schools/doctype/grade_interval/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/schools/doctype/grade_interval/grade_interval.json b/erpnext/schools/doctype/grade_interval/grade_interval.json deleted file mode 100644 index c9c59495d9..0000000000 --- a/erpnext/schools/doctype/grade_interval/grade_interval.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2016-08-26 03:11:09.591049", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "grade_code", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Grade Code", - "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, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "min_score", - "fieldtype": "Percent", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Min Score", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "1", - "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, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "grade_description", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Grade Description", - "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, - "unique": 0 - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "in_dialog": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2016-12-14 12:54:56.902465", - "modified_by": "Administrator", - "module": "Schools", - "name": "Grade Interval", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/schools/doctype/grade_interval/grade_interval.py b/erpnext/schools/doctype/grade_interval/grade_interval.py deleted file mode 100644 index c8ded136ec..0000000000 --- a/erpnext/schools/doctype/grade_interval/grade_interval.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -from __future__ import unicode_literals -import frappe -from frappe.model.document import Document - -class GradeInterval(Document): - def validate(self): - pass \ No newline at end of file diff --git a/erpnext/schools/doctype/grading_structure/__init__.py b/erpnext/schools/doctype/grading_structure/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/schools/doctype/grading_structure/grading_structure.js b/erpnext/schools/doctype/grading_structure/grading_structure.js deleted file mode 100644 index 36f45042c0..0000000000 --- a/erpnext/schools/doctype/grading_structure/grading_structure.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Grading Structure', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/schools/doctype/grading_structure/grading_structure.json b/erpnext/schools/doctype/grading_structure/grading_structure.json deleted file mode 100644 index 3c30f299d2..0000000000 --- a/erpnext/schools/doctype/grading_structure/grading_structure.json +++ /dev/null @@ -1,202 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 1, - "autoname": "field:grading_system_name", - "beta": 0, - "creation": "2016-08-26 03:06:53.922972", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "grading_system_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Grading System 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, - "unique": 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_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, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "description", - "fieldtype": "Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Description", - "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, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "grading_intervals_section", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Grading Intervals", - "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, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "grade_intervals", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Grade Intervals", - "length": 0, - "no_copy": 0, - "options": "Grade Interval", - "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, - "unique": 0 - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "in_dialog": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2016-12-14 12:35:39.690256", - "modified_by": "Administrator", - "module": "Schools", - "name": "Grading Structure", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "is_custom": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Academics User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "grading_system_name", - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/schools/doctype/grading_structure/grading_structure.py b/erpnext/schools/doctype/grading_structure/grading_structure.py deleted file mode 100644 index 1b5d6a8d2e..0000000000 --- a/erpnext/schools/doctype/grading_structure/grading_structure.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -from __future__ import unicode_literals -import frappe -from frappe.model.document import Document -from frappe import _ -from frappe.utils import cstr - -class GradingStructure(Document): - def validate(self): - grade_intervals = self.get("grade_intervals") - check_overlap(grade_intervals, self) - -#Check if any of the grade intervals for this grading structure overlap -def check_overlap(grade_intervals, parent_doc): - for interval1 in grade_intervals: - for interval2 in grade_intervals: - if interval1.name == interval2.name: - pass - else: - if (interval1.from_score <= interval2.from_score and interval1.to_score >= interval2.from_score) or (interval1.from_score <= interval2.to_score and interval1.to_score >= interval2.to_score): - frappe.throw(_("""The intervals for Grade Code {0} overlaps with the grade intervals for other grades. - Please check intervals {0} and {1} and try again""".format(interval1.grade_code, interval2.grade_code))) \ No newline at end of file diff --git a/erpnext/schools/doctype/grading_structure/test_grading_structure.py b/erpnext/schools/doctype/grading_structure/test_grading_structure.py deleted file mode 100644 index 0e36080678..0000000000 --- a/erpnext/schools/doctype/grading_structure/test_grading_structure.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt -from __future__ import unicode_literals - -import frappe -import unittest - -# test_records = frappe.get_test_records('Grading Structure') - -class TestGradingStructure(unittest.TestCase): - pass From d1552f97e47dc4a629df6f94bec997c636c4e98a Mon Sep 17 00:00:00 2001 From: mbauskar Date: Wed, 24 May 2017 13:17:56 +0530 Subject: [PATCH 11/35] [minor] moved a comment in item.js --- erpnext/stock/doctype/item/item.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js index 057c78a81f..86c6959448 100644 --- a/erpnext/stock/doctype/item/item.js +++ b/erpnext/stock/doctype/item/item.js @@ -44,8 +44,6 @@ frappe.ui.form.on("Item", { }, __("View")); } - // make sensitive fields(has_serial_no, is_stock_item, valuation_method) - // read only if any stock ledger entry exists if(!frm.doc.is_fixed_asset) { erpnext.item.make_dashboard(frm); } @@ -77,6 +75,8 @@ frappe.ui.form.on("Item", { erpnext.item.edit_prices_button(frm); + // make sensitive fields(has_serial_no, is_stock_item, valuation_method, has_batch_no) + // read only if any stock ledger entry exists if (!frm.doc.__islocal && frm.doc.is_stock_item) { frm.toggle_enable(['has_serial_no', 'is_stock_item', 'valuation_method', 'has_batch_no'], (frm.doc.__onload && frm.doc.__onload.sle_exists=="exists") ? false : true); From ff70f38eace6f24f87661fab20dfb57f53e95d51 Mon Sep 17 00:00:00 2001 From: mbauskar Date: Wed, 24 May 2017 16:55:24 +0530 Subject: [PATCH 12/35] [minor] patch to delete the schools deprecated doctypes --- erpnext/patches.txt | 1 + .../v8_0/delete_schools_depricated_doctypes.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 erpnext/patches/v8_0/delete_schools_depricated_doctypes.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index ac91f6038b..853efa1cc3 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -396,3 +396,4 @@ erpnext.patches.v8_0.merge_student_batch_and_student_group erpnext.patches.v8_0.rename_total_margin_to_rate_with_margin # 11-05-2017 erpnext.patches.v8_0.fix_status_for_invoices_with_negative_outstanding erpnext.patches.v8_0.make_payments_table_blank_for_non_pos_invoice +erpnext.patches.v8_0.delete_schools_depricated_doctypes diff --git a/erpnext/patches/v8_0/delete_schools_depricated_doctypes.py b/erpnext/patches/v8_0/delete_schools_depricated_doctypes.py new file mode 100644 index 0000000000..09a78ed3ca --- /dev/null +++ b/erpnext/patches/v8_0/delete_schools_depricated_doctypes.py @@ -0,0 +1,14 @@ +# Copyright (c) 2017, Web Notes Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +def execute(): + """ delete doctypes """ + + if frappe.db.exists("DocType", "Grading Structure"): + frappe.delete_doc("DocType", "Grading Structure", force=1) + + if frappe.db.exists("DocType", "Grade Interval"): + frappe.delete_doc("DocType", "Grade Interval", force=1) \ No newline at end of file From ca150cee8c11196656033c2ce29957565db0e43c Mon Sep 17 00:00:00 2001 From: nick9822 Date: Wed, 24 May 2017 17:22:26 +0530 Subject: [PATCH 13/35] Minor change: Alert to msgprint (#8966) * Minor change: Alert to msgprint * msgprint to frappe.msgprint --- erpnext/stock/doctype/material_request/material_request.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js index 58c16e1964..b386a478dc 100644 --- a/erpnext/stock/doctype/material_request/material_request.js +++ b/erpnext/stock/doctype/material_request/material_request.js @@ -33,7 +33,7 @@ frappe.ui.form.on("Material Request Item", { "qty": function(frm, doctype, name) { var d = locals[doctype][name]; if (flt(d.qty) < flt(d.min_order_qty)) { - alert(__("Warning: Material Requested Qty is less than Minimum Order Qty")); + frappe.msgprint(__("Warning: Material Requested Qty is less than Minimum Order Qty")); } } } From 331566d61229a0698b7d2daf319e51cbc74fd7e9 Mon Sep 17 00:00:00 2001 From: KanchanChauhan Date: Fri, 19 May 2017 15:14:31 +0530 Subject: [PATCH 14/35] Website Specification Labls should not be capitalised by default (#8798) --- erpnext/templates/generators/item.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/templates/generators/item.html b/erpnext/templates/generators/item.html index c0399a787a..de544930cc 100644 --- a/erpnext/templates/generators/item.html +++ b/erpnext/templates/generators/item.html @@ -87,7 +87,7 @@ {% for d in website_specifications -%} - + {%- endfor %} From 9283377f87b891563b844620a2fe4f9823e7e3f1 Mon Sep 17 00:00:00 2001 From: Abdulla P I Date: Fri, 19 May 2017 15:15:36 +0530 Subject: [PATCH 15/35] Update lead.py (#8789) * Update lead.py Import datetime to compare next contact date with now() * Update lead.py * Update lead.py As per the suggestion from Nabin,instead of Datetime,getdate and nowdate from frappe.utils imported --- erpnext/crm/doctype/lead/lead.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py index ccbb5369aa..aafc128e91 100644 --- a/erpnext/crm/doctype/lead/lead.py +++ b/erpnext/crm/doctype/lead/lead.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import frappe from frappe import _ -from frappe.utils import (cstr, validate_email_add, cint, comma_and, has_gravatar, now) +from frappe.utils import (cstr, validate_email_add, cint, comma_and, has_gravatar, now, getdate, nowdate) from frappe.model.mapper import get_mapped_doc from erpnext.controllers.selling_controller import SellingController @@ -46,7 +46,7 @@ class Lead(SellingController): if self.is_new() or not self.image: self.image = has_gravatar(self.email_id) - if self.contact_date and self.contact_date < now(): + if self.contact_date and getdate(self.contact_date) < getdate(nowdate()): frappe.throw(_("Next Contact Date cannot be in the past")) def on_update(self): From c320537e4ca682c6139fd5cb40fa0cf61a0cd2bb Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Fri, 19 May 2017 15:16:50 +0530 Subject: [PATCH 16/35] link the different doctype in the school module (#8844) --- erpnext/schools/doctype/course/course.js | 12 ++++++++++++ erpnext/schools/doctype/program/program.js | 15 +++++++++++++++ .../student_attendance_tool.js | 6 ++++++ .../doctype/student_group/student_group.js | 17 ++++++++++++++++- 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/erpnext/schools/doctype/course/course.js b/erpnext/schools/doctype/course/course.js index f84c59fcd2..c667eca2b7 100644 --- a/erpnext/schools/doctype/course/course.js +++ b/erpnext/schools/doctype/course/course.js @@ -1,18 +1,30 @@ frappe.ui.form.on("Course", "refresh", function(frm) { if(!cur_frm.doc.__islocal) { frm.add_custom_button(__("Program"), function() { + frappe.route_options = { + "Program Course.course": frm.doc.name + } frappe.set_route("List", "Program"); }); frm.add_custom_button(__("Student Group"), function() { + frappe.route_options = { + course: frm.doc.name + } frappe.set_route("List", "Student Group"); }); frm.add_custom_button(__("Course Schedule"), function() { + frappe.route_options = { + course: frm.doc.name + } frappe.set_route("List", "Course Schedule"); }); frm.add_custom_button(__("Assessment Plan"), function() { + frappe.route_options = { + course: frm.doc.name + } frappe.set_route("List", "Assessment Plan"); }); } diff --git a/erpnext/schools/doctype/program/program.js b/erpnext/schools/doctype/program/program.js index cc09d0ef4d..5146a19322 100644 --- a/erpnext/schools/doctype/program/program.js +++ b/erpnext/schools/doctype/program/program.js @@ -6,22 +6,37 @@ cur_frm.add_fetch('fee_structure', 'total_amount', 'amount'); frappe.ui.form.on("Program", "refresh", function(frm) { if(!frm.doc.__islocal) { frm.add_custom_button(__("Student Applicant"), function() { + frappe.route_options = { + program: frm.doc.name + } frappe.set_route("List", "Student Applicant"); }); frm.add_custom_button(__("Program Enrollment"), function() { + frappe.route_options = { + program: frm.doc.name + } frappe.set_route("List", "Program Enrollment"); }); frm.add_custom_button(__("Student Group"), function() { + frappe.route_options = { + program: frm.doc.name + } frappe.set_route("List", "Student Group"); }); frm.add_custom_button(__("Fee Structure"), function() { + frappe.route_options = { + program: frm.doc.name + } frappe.set_route("List", "Fee Structure"); }); frm.add_custom_button(__("Fees"), function() { + frappe.route_options = { + program: frm.doc.name + } frappe.set_route("List", "Fees"); }); } diff --git a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js index 6f8c6cd7da..11a79e134e 100644 --- a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js +++ b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js @@ -4,6 +4,12 @@ frappe.provide("schools") frappe.ui.form.on('Student Attendance Tool', { refresh: function(frm) { + if (frappe.route_options) { + frm.set_value("based_on", frappe.route_options.based_on); + frm.set_value("student_group", frappe.route_options.student_group); + frm.set_value("course_schedule", frappe.route_options.course_schedule); + frappe.route_options = null; + } frm.disable_save(); }, diff --git a/erpnext/schools/doctype/student_group/student_group.js b/erpnext/schools/doctype/student_group/student_group.js index ed9469015b..83fe0945cc 100644 --- a/erpnext/schools/doctype/student_group/student_group.js +++ b/erpnext/schools/doctype/student_group/student_group.js @@ -13,11 +13,23 @@ frappe.ui.form.on("Student Group", { refresh: function(frm) { if (!frm.doc.__islocal) { + frm.add_custom_button(__("Attendance"), function() { + frappe.route_options = { + based_on: "Student Group", + student_group: frm.doc.name + } + frappe.set_route("List", "Student Attendance Tool"); + }); frm.add_custom_button(__("Course Schedule"), function() { + frappe.route_options = { + student_group: frm.doc.name + } frappe.set_route("List", "Course Schedule"); }); - frm.add_custom_button(__("Assessment Plan"), function() { + frappe.route_options = { + student_group: frm.doc.name + } frappe.set_route("List", "Assessment Plan"); }); frm.add_custom_button(__("Update Email Group"), function() { @@ -30,6 +42,9 @@ frappe.ui.form.on("Student Group", { }); }); frm.add_custom_button(__("Newsletter"), function() { + frappe.route_options = { + "Newsletter Email Group.email_group": frm.doc.name + } frappe.set_route("List", "Newsletter"); }); } From ce9ac7885e15f9ed511b29e70f579a46ffb2799f Mon Sep 17 00:00:00 2001 From: Charles-Henri Decultot Date: Fri, 19 May 2017 12:32:30 +0200 Subject: [PATCH 17/35] Prompt for mandatory batch number in POS (#8928) * Prompt for mandatory batch number in POS * Whitespaces correction --- erpnext/accounts/page/pos/pos.js | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index 9261fa4f39..6a2e0cfe4b 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -398,7 +398,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.make_item_list(); this.make_discount_field() }, - + make_control: function() { this.frm = {} this.frm.doc = this.doc @@ -543,7 +543,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ me.toggle_totals_area(); }); }, - + bind_numeric_keypad: function() { var me = this; $(this.numeric_keypad).find('.pos-operation').on('click', function(){ @@ -572,7 +572,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ me.selected_field.closest('.pos-list-row').addClass('active'); } }) - + $(this.numeric_keypad).find('.numeric-del').click(function(){ me.selected_field = $(me.wrapper).find('.selected-item').find('.' + me.numeric_id) me.numeric_val = cstr(flt(me.selected_field.val())).slice(0, -1); @@ -580,7 +580,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ me.selected_field.trigger("change") // me.render_selected_item() }) - + $(this.numeric_keypad).find('.pos-pay').click(function(){ me.validate(); me.update_paid_amount_status(true); @@ -988,7 +988,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ })).tooltip().appendTo($wrap); } }); - + $wrap.append(`
@@ -1070,7 +1070,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ }); } }, - + bind_items_event: function() { var me = this; $(this.wrapper).on('click', '.pos-bill-item', function() { @@ -1107,7 +1107,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ var qty = flt($(this).parents(".pos-bill-item").find('.pos-item-qty').val()) - 1; me.update_qty(item_code, qty) }) - + $(this.wrapper).on("change", ".pos-item-disc", function () { var item_code = $(this).parents(".pos-selected-item-action").attr("data-item-code"); var discount = $(this).val(); @@ -1763,10 +1763,14 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ mandatory_batch_no: function () { var me = this; if (this.items[0].has_batch_no && !this.item_batch_no[this.items[0].item_code]) { - frappe.throw(__(repl("Error: Batch no is mandatory for item %(item)s", { - 'item': this.items[0].item_code - }))) - } + frappe.prompt([ + {'fieldname': 'batch', 'fieldtype': 'Select', 'label': __('Batch No'), 'reqd': 1, 'options':this.batch_no_data[this.items[0].item_code]} + ], + function(values){ + me.item_batch_no[me.items[0].item_code] = values.batch; + }, + __('Select Batch No')) + } }, apply_pricing_rule: function () { @@ -1788,7 +1792,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ item.pricing_rule = null; me.apply_pricing_rule_on_item(item) } - + if(item.discount_percentage > 0) { me.apply_pricing_rule_on_item(item) } From 818ad397c85eb37266133d194be89ec2cf8164f3 Mon Sep 17 00:00:00 2001 From: Gaurav Naik Date: Fri, 19 May 2017 16:03:05 +0530 Subject: [PATCH 18/35] Documentation for Allow Login using Mobile Number (#8918) --- .../assets/img/setup/users/user-login-email.png | Bin 0 -> 13676 bytes .../img/setup/users/user-login-mobile.png | Bin 0 -> 12278 bytes .../en/setting-up/settings/system-settings.md | 2 ++ .../users-and-permissions/adding-users.md | 5 ++++- 4 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 erpnext/docs/assets/img/setup/users/user-login-email.png create mode 100644 erpnext/docs/assets/img/setup/users/user-login-mobile.png diff --git a/erpnext/docs/assets/img/setup/users/user-login-email.png b/erpnext/docs/assets/img/setup/users/user-login-email.png new file mode 100644 index 0000000000000000000000000000000000000000..71050af56855ab3f81ab0aaa4d40552721853ed5 GIT binary patch literal 13676 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 R|0xBKl~j_b5i<$-{{W9T?`Z%4 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/setup/users/user-login-mobile.png b/erpnext/docs/assets/img/setup/users/user-login-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..1d7af14305298b31c2ba63b76ca82fe0211cd629 GIT binary patch literal 12278 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

qQ`j;{jbJXQvS?tMLW0V zi^7%jAwSNM0pnBNrjj$)Ot+A;F~2Ts`0u-Tw_oB@B8`_tty0`nAyl-eA!}2&4nGU7 z*H6moUbg^C%0XJQdNxibSx+J zStKB+M9_HJvEO$end|dIgUgkSU!HJJqi4JVKP9}sXy*^f;7?}n@I4r~)h9=wz`=>l zGD|W&S1C1f%b9NObf{kp?rvW!mMnQPWPA@fUOU-t)gUdo|4MS8wejMk1V4GQuA(yY zYN;vZa6H&=IlHT37lTQBiH?`yZM8s53z;U1^V#y4dbAIlXxcX}ai|mRyC*U0r;a^+ z4zMuM&7_B6Mt!qn=Ow z${M7DKTSuzWu=GO64K6?hki3^-f2dH4`~ z7<+eZ-5)iK^Jr}aFI`OEP9G25ln9%v8k3s}14^82WlpXSAT9JE*;0>ZA(kd5S*X!w z0C0s2X5VjHIXfzGdSWC~vMwJM?#=M)ExALS000!w{f0qaoRN|j z?);o5P1s1T;RyrLBoB=VcV?CJivSDn2X6^cx%~*(kLE$A{|+{I4cOkMb-MeYV)ZXC za7wl9dC$Xj^D2vW6~2_sCSqJMp($RV0VmToBP=Yo(u<~;?SttunOc`#@D`VZ3q5rt z#aTl6-K<4t7&ToByJe!*vM~bHa^_C&|NO;S^_8e~(LGq34-9@RrCnf7oJQ8vXT?48 zk`j9F_VNX5KDDZ~iKBz`pM74zzd~z!TWb6cO+1$yL#q=4BVFG6&QpM|r|vPeo?tu` zENa1=G-1C`S`T_$qgi^Wb)6H@6s3^2nmWflrNCSo4L>FLF}jZozlHE~c~{D8k&Qoou<15{0^B zZO@gYYE~;qBb?f!2mmA*MUa!fw{{{w1Y*-Od-cxQ<<&B93$V3H>H~Iuh8_XU(Sb`R z(t_ea9^<}BmTTVBLw{Tp>7ytlcEpqD_Xg=8{_;EpQ)hLlRIe`fZeTMen^jxU;k=^I zYfOEYId@2Im{N_!Rjd9&)7?Rw=o<<;zpKHj`-`f_Drnx!{S>GR23nnm@h)Zjc?vE? z=N7DY89u>fxU8D}CBQWsz?#iXHmW@Bg=W4Kh7+*rK%t1XjjnV447TRH-JB?!+ILcSTLYoWPVX#S=!P9{OyzsMgr6Qlpnl{}Ts zlwh%DJ--1=#c^E|gi$(`eWv`CF)|Gk;VYWuxlmqS4s97AvEw#HT&T*D&oOjWB`IP6 Setup > Settings > System Settings diff --git a/erpnext/docs/user/manual/en/setting-up/users-and-permissions/adding-users.md b/erpnext/docs/user/manual/en/setting-up/users-and-permissions/adding-users.md index 517c6746e6..6fb64df37e 100644 --- a/erpnext/docs/user/manual/en/setting-up/users-and-permissions/adding-users.md +++ b/erpnext/docs/user/manual/en/setting-up/users-and-permissions/adding-users.md @@ -20,7 +20,10 @@ To add a new user, click on "New" Add user details such as First Name, Last Name, Email etc. -The user's Email will become the user id. +The user's Email will become the user id. Mobile No can also be used to log in if you check the Allow Login using Mobile No checkbox under the Security section in System Settings. While Mobile No will be unique, it will not be treated as a user id. + +Email Login +Mobile No Login After adding these details, save the user. From 7e661437b1abb52b2a3595bb8bb52cb1a7b6249e Mon Sep 17 00:00:00 2001 From: Charles-Henri Decultot Date: Fri, 19 May 2017 12:34:10 +0200 Subject: [PATCH 19/35] View Attachments in portal (#8830) * View Attachments in portal * HTML beautify correction * Move option to shopping cart settings * new field in shopping cart settings for public attachments display in portal --- .../shopping_cart_settings.json | 75 ++++++++++++++++++- .../shopping_cart_settings.py | 4 + erpnext/templates/pages/order.html | 20 ++++- erpnext/templates/pages/order.py | 8 ++ 4 files changed, 105 insertions(+), 2 deletions(-) diff --git a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json index c5efdf8578..ed782ad1cf 100644 --- a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json +++ b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json @@ -13,6 +13,7 @@ "editable_grid": 0, "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -41,6 +42,67 @@ "unique": 0 }, { + "allow_bulk_edit": 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, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Attachments can be shown without enabling the shopping cart", + "fieldname": "show_attachments", + "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": "Show Public Attachments", + "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, + "unique": 0 + }, + { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -68,6 +130,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -97,6 +160,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -128,6 +192,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -157,6 +222,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -184,6 +250,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -214,6 +281,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -242,6 +310,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -272,6 +341,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -301,6 +371,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -333,6 +404,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -361,6 +433,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -402,7 +475,7 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2017-03-21 15:42:08.574497", + "modified": "2017-05-19 09:31:38.078110", "modified_by": "Administrator", "module": "Shopping Cart", "name": "Shopping Cart Settings", diff --git a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py index 4e24d2e6ee..aa4f16360d 100644 --- a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py +++ b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py @@ -89,3 +89,7 @@ def check_shopping_cart_enabled(): if not get_shopping_cart_settings().enabled: frappe.throw(_("You need to enable Shopping Cart"), ShoppingCartSetupError) +def show_attachments(): + return get_shopping_cart_settings().show_attachments + + diff --git a/erpnext/templates/pages/order.html b/erpnext/templates/pages/order.html index 71291783b0..da9eb33c89 100644 --- a/erpnext/templates/pages/order.html +++ b/erpnext/templates/pages/order.html @@ -86,6 +86,24 @@ {% endif %} {% endif %}

+ +{% if attachments %} +
+
+
+ {{ _("Attachments") }} +
+
+
+
+ {% for attachment in attachments %} +

+ {{ attachment.file_name }} +

+ {% endfor %} +
+
+
+{% endif %}
- {% endblock %} diff --git a/erpnext/templates/pages/order.py b/erpnext/templates/pages/order.py index 296b907282..b453c7e3e7 100644 --- a/erpnext/templates/pages/order.py +++ b/erpnext/templates/pages/order.py @@ -5,6 +5,7 @@ from __future__ import unicode_literals import frappe from frappe import _ +from erpnext.shopping_cart.doctype.shopping_cart_settings.shopping_cart_settings import show_attachments def get_context(context): context.no_cache = 1 @@ -13,6 +14,9 @@ def get_context(context): if hasattr(context.doc, "set_indicator"): context.doc.set_indicator() + if show_attachments(): + context.attachments = get_attachments(frappe.form_dict.doctype, frappe.form_dict.name) + context.parents = frappe.form_dict.parents context.payment_ref = frappe.db.get_value("Payment Request", {"reference_name": frappe.form_dict.name}, "name") @@ -21,3 +25,7 @@ def get_context(context): if not frappe.has_website_permission(context.doc): frappe.throw(_("Not Permitted"), frappe.PermissionError) + +def get_attachments(dt, dn): + return frappe.get_all("File", fields=["name", "file_name", "file_url", "is_private"], + filters = {"attached_to_name": dn, "attached_to_doctype": dt, "is_private":0}) From bf4915b285be46cac921a21b738fda84ee8940b1 Mon Sep 17 00:00:00 2001 From: Ayush AS Date: Fri, 19 May 2017 17:35:30 +0530 Subject: [PATCH 20/35] Added flt to convert string to float --- erpnext/controllers/taxes_and_totals.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index c1c1fd7cda..87c4719b08 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -462,9 +462,9 @@ class calculate_taxes_and_totals(object): if self.doc.is_pos: for payment in self.doc.get('payments'): - payment.base_amount = flt(payment.amount * self.doc.conversion_rate) - paid_amount += payment.amount - base_paid_amount += payment.base_amount + payment.base_amount = flt(flt(payment.amount) * self.doc.conversion_rate) + paid_amount += flt(payment.amount) + base_paid_amount += flt(payment.base_amount) elif not self.doc.is_return: self.doc.set('payments', []) From e4afab7fb0a58a75bc650158cf3c595b7a89c72e Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 19 May 2017 18:59:16 +0530 Subject: [PATCH 21/35] Update taxes_and_totals.py --- erpnext/controllers/taxes_and_totals.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index 87c4719b08..822d50bfdf 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -462,9 +462,10 @@ class calculate_taxes_and_totals(object): if self.doc.is_pos: for payment in self.doc.get('payments'): - payment.base_amount = flt(flt(payment.amount) * self.doc.conversion_rate) - paid_amount += flt(payment.amount) - base_paid_amount += flt(payment.base_amount) + payment.amount = flt(payment.amount) + payment.base_amount = payment.amount * flt(self.doc.conversion_rate) + paid_amount += payment.amount + base_paid_amount += payment.base_amount elif not self.doc.is_return: self.doc.set('payments', []) From 0cd792ebb215c6cbe72238fbc7595944728aa3ca Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 24 May 2017 17:31:58 +0530 Subject: [PATCH 22/35] Revert "Update taxes_and_totals.py" This reverts commit e4afab7fb0a58a75bc650158cf3c595b7a89c72e. --- erpnext/controllers/taxes_and_totals.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index 822d50bfdf..87c4719b08 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -462,10 +462,9 @@ class calculate_taxes_and_totals(object): if self.doc.is_pos: for payment in self.doc.get('payments'): - payment.amount = flt(payment.amount) - payment.base_amount = payment.amount * flt(self.doc.conversion_rate) - paid_amount += payment.amount - base_paid_amount += payment.base_amount + payment.base_amount = flt(flt(payment.amount) * self.doc.conversion_rate) + paid_amount += flt(payment.amount) + base_paid_amount += flt(payment.base_amount) elif not self.doc.is_return: self.doc.set('payments', []) From eb92d907bc2a549030c181db2e4e255e9a6f8f0a Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 24 May 2017 17:31:58 +0530 Subject: [PATCH 23/35] Revert "Added flt to convert string to float" This reverts commit bf4915b285be46cac921a21b738fda84ee8940b1. --- erpnext/controllers/taxes_and_totals.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index 87c4719b08..c1c1fd7cda 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -462,9 +462,9 @@ class calculate_taxes_and_totals(object): if self.doc.is_pos: for payment in self.doc.get('payments'): - payment.base_amount = flt(flt(payment.amount) * self.doc.conversion_rate) - paid_amount += flt(payment.amount) - base_paid_amount += flt(payment.base_amount) + payment.base_amount = flt(payment.amount * self.doc.conversion_rate) + paid_amount += payment.amount + base_paid_amount += payment.base_amount elif not self.doc.is_return: self.doc.set('payments', []) From 689da20e7b87f980c9930d5ec21703f746d2c0d2 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 24 May 2017 17:31:58 +0530 Subject: [PATCH 24/35] Revert "View Attachments in portal (#8830)" This reverts commit 7e661437b1abb52b2a3595bb8bb52cb1a7b6249e. --- .../shopping_cart_settings.json | 75 +------------------ .../shopping_cart_settings.py | 4 - erpnext/templates/pages/order.html | 20 +---- erpnext/templates/pages/order.py | 8 -- 4 files changed, 2 insertions(+), 105 deletions(-) diff --git a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json index ed782ad1cf..c5efdf8578 100644 --- a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json +++ b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json @@ -13,7 +13,6 @@ "editable_grid": 0, "fields": [ { - "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -42,67 +41,6 @@ "unique": 0 }, { - "allow_bulk_edit": 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, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Attachments can be shown without enabling the shopping cart", - "fieldname": "show_attachments", - "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": "Show Public Attachments", - "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, - "unique": 0 - }, - { - "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -130,7 +68,6 @@ "unique": 0 }, { - "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -160,7 +97,6 @@ "unique": 0 }, { - "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -192,7 +128,6 @@ "unique": 0 }, { - "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -222,7 +157,6 @@ "unique": 0 }, { - "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -250,7 +184,6 @@ "unique": 0 }, { - "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -281,7 +214,6 @@ "unique": 0 }, { - "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -310,7 +242,6 @@ "unique": 0 }, { - "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -341,7 +272,6 @@ "unique": 0 }, { - "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -371,7 +301,6 @@ "unique": 0 }, { - "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -404,7 +333,6 @@ "unique": 0 }, { - "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -433,7 +361,6 @@ "unique": 0 }, { - "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -475,7 +402,7 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2017-05-19 09:31:38.078110", + "modified": "2017-03-21 15:42:08.574497", "modified_by": "Administrator", "module": "Shopping Cart", "name": "Shopping Cart Settings", diff --git a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py index aa4f16360d..4e24d2e6ee 100644 --- a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py +++ b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py @@ -89,7 +89,3 @@ def check_shopping_cart_enabled(): if not get_shopping_cart_settings().enabled: frappe.throw(_("You need to enable Shopping Cart"), ShoppingCartSetupError) -def show_attachments(): - return get_shopping_cart_settings().show_attachments - - diff --git a/erpnext/templates/pages/order.html b/erpnext/templates/pages/order.html index da9eb33c89..71291783b0 100644 --- a/erpnext/templates/pages/order.html +++ b/erpnext/templates/pages/order.html @@ -86,24 +86,6 @@ {% endif %} {% endif %} - -{% if attachments %} -
-
-
- {{ _("Attachments") }} -
-
-
-
- {% for attachment in attachments %} -

- {{ attachment.file_name }} -

- {% endfor %} -
-
-
-{% endif %} + {% endblock %} diff --git a/erpnext/templates/pages/order.py b/erpnext/templates/pages/order.py index b453c7e3e7..296b907282 100644 --- a/erpnext/templates/pages/order.py +++ b/erpnext/templates/pages/order.py @@ -5,7 +5,6 @@ from __future__ import unicode_literals import frappe from frappe import _ -from erpnext.shopping_cart.doctype.shopping_cart_settings.shopping_cart_settings import show_attachments def get_context(context): context.no_cache = 1 @@ -14,9 +13,6 @@ def get_context(context): if hasattr(context.doc, "set_indicator"): context.doc.set_indicator() - if show_attachments(): - context.attachments = get_attachments(frappe.form_dict.doctype, frappe.form_dict.name) - context.parents = frappe.form_dict.parents context.payment_ref = frappe.db.get_value("Payment Request", {"reference_name": frappe.form_dict.name}, "name") @@ -25,7 +21,3 @@ def get_context(context): if not frappe.has_website_permission(context.doc): frappe.throw(_("Not Permitted"), frappe.PermissionError) - -def get_attachments(dt, dn): - return frappe.get_all("File", fields=["name", "file_name", "file_url", "is_private"], - filters = {"attached_to_name": dn, "attached_to_doctype": dt, "is_private":0}) From 54fcf85317e2a7d0c64925cf1ae1faef06c4fd60 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 24 May 2017 17:31:58 +0530 Subject: [PATCH 25/35] Revert "Documentation for Allow Login using Mobile Number (#8918)" This reverts commit 818ad397c85eb37266133d194be89ec2cf8164f3. --- .../assets/img/setup/users/user-login-email.png | Bin 13676 -> 0 bytes .../img/setup/users/user-login-mobile.png | Bin 12278 -> 0 bytes .../en/setting-up/settings/system-settings.md | 2 -- .../users-and-permissions/adding-users.md | 5 +---- 4 files changed, 1 insertion(+), 6 deletions(-) delete mode 100644 erpnext/docs/assets/img/setup/users/user-login-email.png delete mode 100644 erpnext/docs/assets/img/setup/users/user-login-mobile.png diff --git a/erpnext/docs/assets/img/setup/users/user-login-email.png b/erpnext/docs/assets/img/setup/users/user-login-email.png deleted file mode 100644 index 71050af56855ab3f81ab0aaa4d40552721853ed5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13676 zcmZ|01z20bwl*9}@d8DPOQE=y61=#(ySrO(r?}JN1a~V?+@YmNDFk;d?(PA?pB}mQ ze)pdLd9rr0ZT9RX@4RcxBw9sD8WWua9RL7e%F0Nn0RRY{aIr#t0pFguL}|lMpt;EC zx&Z(fcz*=}0L~_YA4GANRg^?oN5aKILnms&>;?ed0%RpbHM|#(SA5*nt-*9>((QU* zArI6`^T-YJB5#X>TgA|kUwnGK!BXrhPWuKVLocWjS+hT-xiaHc3LTLhb1zf6R?u!L z8=U?wl$j_7U~_2C%d#SBOT1+7C2UO*M=%^CsQBy zyG{d6y$A#HsPPFn$QU>jz7-^bE5~|hWn(7nBE*J!3*F12q^Q4`HXmsBEM1#Ga(BXe zSP)-7t^Fw6Q_q!9o$j~s6IMSnSYN2U#e!D$_=!i_B-DSbE9eS8x!}pD38D-M_0XkNQK@cC@}=3$$QKB}m>dUK^eFfS+dC+Y+r+%Za@G z!PiM)Ib&Xh+g*k%{Kgwr^21gIge$b-FN_J1p`56KjadPLefM~-TG9b;A9>vx>ukqC z?%t<|58N6_#WCOrQD@7qLUf#h$4Z#}QvVtH%Bp-vf7k!4_-Y z!8Vct@*J9h*}P|}(MV?c;``AXNn;Ws_yS(3I@~EbfGDRWdVS$g8@Ft}3sm1b#NEX& z0m+12FZ1ncE&WX=#vK{l+*{o*PloH1S-W3<71P>T&TKB~KtOdhU(2fPEX?Fmoh#HV z5qiusO-NXbz)IAt-IAlUtUl78o@O#-01oeBm(Ls&P{`}1opuit%~@mQG8_1fa^4cA zV`x#{4YjHKI6xFH!NvT-b#e}E)MIUNZN8xUq2f){s8+RqN|ttnSS;W_` zBpfKLuk2?3@c!3udy#9<1D3<$M_x>*-I`#_#rO3Bk9f^%24NP0H4HC9 zLqUx1!a)6nXyK2eI&8jJ`puXHTtXjjHUrETmM0gNSNZm;$?{SI%XG|Sj8w@f($yn< zjGwS1wEH7Fek){}uQY!EyuSMEe>jIvUUfYNnQ&ZuI=)EHZ9D7VRqnZ1Y-aT{3Ow8< z(=2Z|+MA8__PL+Lf2bo*-Qgir3@mr_|8w+Q4NioR&~S{Ohtr=h1 z2-=h>I|HC99q%l?=O6{1yCY`_J1QM0p5D?8&wd`xW19Asz|(f+Tg39)VeR8jdz^E_ z)!M%g^((82p54O`@*C?j2ltoDE_rhX#p38V!0>MIEv~Hb73WSQNT)(bBZHir9+3ih zQ}v~iR^0V;c6ArHbA+O3xp!sqb^Qx(V5QPr<`UTtI@H!1GBfNn$qkBF8MZ! zUkt-^!!Oyk4i5C#)95h1ZTCzc*npF>x-0sqMH5Fd7u3~vfk(oI6y?bqbG5%hY%in- z^@>&Qw!<^68o#U7J-ci&SNRP%U3sSE@cPU;rULd%$$A2P)W&ZN#Vd*g!*pv2F|Xz< zR<_bcZ9ae#BP|w|o&g;lcH)2-c_H>y|Bafw$;Su8ep+ed+pJe@?fWc(oyVQ_PvFA! zjI3phI;RidkB6coic-lFG;py1N*8rxuccV>;YPpu65WfEGk7?+%7O1S1W{q=Q@Q!Z z4P3dm+sr8>j+TJNT`OZ#D87nUy_bR+G3a;|=AY%{u`(WAKB9z&FJr7!&76wW{)~JM zd0uW^_Y>9;ygZ1w#lX<+evJ(vffRf3Ae7(DQC@$va$1d6io||K0tEW}euxw&1$_0V zx|S9&1c0n|uUTdv&dWh%ZZcnF`gSk-2jRZ^q|FUG9vh`4o4=bYqS7hZp6zti#rEDE z>5_2MXtM|Uu=Kr?|L->nzc}!fy8O~sTcALp2+Z-|;!5SgTvuJkMM#fYy* zI+==|@RyiO!X<)86GAMclJ)tEhTw1L7DcJMngIMQ_8csoMvhB8Dm6r?LSuzQZ5Fdk z@Z}wNzBOV|EAM5_3&u^i03+q>pslK&;Tw+vqvr=!; zOyblMIEXW|Zapn3j`_KRsM*U7Mbi-8OHf+(d$2Oc)!TsB`)n?LB}u3CvF5;?B^oZo zaNi+Plyb9Z?{SkE>j56TxSHukh_#Y}mdEZ~vad*sw3Q@=v{!H!nQ#}~M}-~hJeJAi zM#hsCX`r$-a6sZ^&x!k2nxTA92<){Jx%{qZU} zYDqWwYOSi71C&H7<-z2MPB*R9L7^ujp{Q0uvw!qG!VbvZp=wZn`dAQE%<;+kAP;(u!2E?!u3iC}-7+Mu?@3fF-X0_z{S^0cXPo+WqrHT+d zWVAyt((&~mk^A)H&HifJJsm)vK$tngfSLX!fMyHQjIuOa%gBH7{-^IzR~v^O0>Hm_ z{+NDIt5b7&L8I)&s=oTwdD<94pOsbA=h>d~SAe@NK(4Nl`|6X9uj)HzwvY{6`8-CG z(T?}bxf2#E|F#&3&;$!xolf`1pu@}2wNpfZ@%60o>FO=4xX*0C&t$wO){f!pWFet- zw20$-pix!D8&fg$LZ+tO8PA@@^A(<@F>dtl?Jc>_TgCFY%gPaz-PIWMfMakSR3#n& z6nGH|lZ-G3a+^yZOzUYi$#B{~>T-j7&Ij;cd53tr--nqKRUxaONL@S24b%YJ~;}e9=hS@HU(gcfBW%C+F|!kTk$2j5ez!H}mu_tjgRSIs zL2C^!>j(r}?Cu8)pJDCm!a-}Rp2s0pL$ykeA5NR*oJm3sJ;$bGga(5CED2D5iK3DH zVe;+v&JeqI>XrFojTc4>`+fDc@?@)=RNN%U{)DJOue$qZu$8y~S9HbD&$njA$^X^} zj(W0`shv@61CqFDgtvvglOrLD)yqQ!1qj+grd~Xl+1Wx~Ua3`2bC{gpH4ycGC{0Bg&~EB%Oc1}pXjr^JwHN98V}&& zx)MAYV^^hpQr@t-?AUfbd3`~8e^B0CmqF%We>M!LN!OPju7;y4Q_HlDW3}A@V0=Qy zt9tdvK79tb<;{7E?qOD?o!x^)^a}vBsjL(Y?$kTDS)lvD+Pk!W^m^hXy;sPqA(0dEO1QHtltRn4&BNEo zsb}o+28-kqvdf*eYD(n+sq{?+WbeqGNwh+P>5T}@3qI=MdX`}vANNNWCRWCRwIse` zb@dY5ivdg5!?J>aFeRY7S~4M%G@?;?alzu;R=C^-Rsi5v!LSEg%aU8uG89$5r)u^$ z=e`0Y^3AzG6{&uH?3-XPcyaRLpz21Xyl5ZPWcXq$xT>+9>Ma83kDmOu8{d`GN-bq` zMIw-`B?jQ7A(v5G_u-=N9jGhO-l@+|VM>otabMYDuP{+k6`5KuzP^YPA5Hdp)Ffsr zoUGE`RauV5a=2;Tm5;BmsyB-d?Kl0v0eiZBQ{7PVWa_mcWod5G7AtEDb4q1}!KZhG z>>86lH~#kf35OVykSQAek=~Q|chqEn`=)8k>~P@$R3Y0pU5sM^VAp`1IhNl)#Hzl1 z9rrj$(Esjv9^or^WLUL#U*lEZASe>{r#`*tk5fyf(4}YxyR~t82lnC)-?hB9WMfD&Jm{2KC-?aG@x)k_fM$1F|~khacC~ z@6tng9}MS&pIy)>A4xAfc)F^7#xzJ5_=KEyU?bik#?722#Gob^qXq~XJvrYAAHL@g zQk1W^R69K>KSz^q1$p|D>)3ztx3jtTm7jR#S z{sn$J(bt8VM|Gui!7}Uyw9|fxl^RTxER2*8oOZDS?+jt(K6vc?mlFL^({BQ`49xCr zcI*Ber@5p$@lJxwZgX=v>oomXcMU@qc4`Lh94H-|9iSIx+Et@u%xrZ>(17I4k=*K% z90iE!*lzl6Ed%s&j?mx03}@v{f127|Wo%1s?9SROuDtc*l}D_aeh$L2|A2#iG;KR9 zrv!y%cATD;ptiQ%+qyqmnKj+8AXK0ACU;vh$aM&z?%3?SpmgzF9=St1$J7rPgh2XR zSL+r4&{`EE+=cp9$M2{JkM&1{GdG#tqNbT^3Sr`~vlFk_wfCrnxboC0`O=wi&gs*40DteyvPz#B~FJf1l9-cTQ= zV=btgf)6p zSuXi_#b7ztGO{cL+CCj7?^Nq~uE(yVCar#b5gdaT8QXF+GuSV^R>ET!GBI++<;YN{ zQ!s0Xm$p?AE6?(#_bxNK89r>ixBfviSdp06v8JB{yNFqUKjWpL|5aR$7Gdb;`9vy)iDnKLi9t=)QA`CAlQWGUWPO%M?nQ`9{E@E;$b@$S#dy>~T(5b6qt+m`)bx z?7H*gw9|uo4VpR?(~@qPwVAGn9ptU|TWMtE+Msu1F41|d&C>@qXq^lqFFP9WZkg(U zRa?ilWXo|{Z$qmI!%|dG0c0hSUO)wd+YMeVMKRU<xL01W@hn)iB0xd?uIr!M8}K zVh%uG>0l&(=P~&wBaFcs<4gJn>^X5l?3ZtcG8anu{Q^|ftmrEb59G?apwRPUfi-V) z7(6+hWgSWZpsi>p0W&4pM7HRpN7Uv$1yZo{jhgO5ZRU^w8w6?Kl96Q%iI zdvMJ8H~jq7;6F$52}8k)|orgjhH2=lZv%A3}ocx2AgI z1Y)=(=teqzH-}vYl<%UeiqxxS&_m8lTHazpbxsPrjEony`i)^d%57}6G9{%}x2uK* zm{)huf7$RqTJ4`U7U$=ZRJC(*wDy;7HevAZ8s#2QYpCqzVCDM+ryEmt)4Ds;rfJ|G zDjD`pDHik(;J$9ScQlOEO>HkK{epq!9D`)F)lH9mjw+kvLZ?-*zVL{tHB|gwT)%GX z>K->7(AQ8LjwUBi_4}pz+ZI(*u}IYU!ycF1w6>l=XLr^1Y#LVWbvxI~umFn0F?~HJ z#NtUkI0lMx=PwVgn@ffL0bFMT1ly zBhH-^)LSyAhNv;3%9V&Ah$Ki@=%#H)k$rjhH4=~?C228L|8Dk=ER2)q=it~X^s=IHbohF3+MhvDa~3OaZDP{9X<{&HYP=Fm z*TqIV!_sbu`tVU`E%m}qgr(ZkyNiODq57LoK=*qUy;aow#%1*U!cG!Ue&g>GP_sdu z57k5MyaBmW?U9#3wX<7ulj}AI7v(4B?b*o-uM)RFmn@69Z4Aj;1NePYGKpRaao^)o1D~okpWKpj_1<` zH=81p#&k#SuVF6x_FM(^b`r#kFxfUfG*BC7_7_u|MuCCi;%P2{k^MT7oJCUPV3%5f zVt2g~1mzNdMb|OL+6*9>`b=#XN0N$h_vLWp7P?zUSo|( zl|Ew)T(AFM8c0+6U#R`h<)HvCjNCHk46}VwLY#0{o(xNQ?;EtAs zjuZjjxAb1Rtxklao*%3fAcJDq*@BTz`UobM$bk7yoVBb^5K;tk?yurM#2k*47Pfru zaH5koi&uwN77;VKI+VgzrRmpF)4q`ky)f zn&Sw(743h$T-$&$Q7rul3(%WGl!r9U$@CQ*ddwaOe?}cQhV>KRb&d2)HmPI^MZqU< z_V#`HdpR~F*4$97H!v3LLn-@^Ri|P9UqiaB;z2r*%81|F@#0>3?ZK%u$)}3U6ns+` z=};H%d?BBFD0qp7*}G@Q=B$Vkt7ZD-*}hc`FFZ~A_lO8rD22M+0O|EB>Xpj2CPCl* z#~*C@o2E(>jQHr`Vx}MVDi29lx&hkA*D6(E63LEE2`|!u7Gn?LzBT1 zQm7%{r;CMj&(A0eNz|&T+Uu09P~oF6{3ZUc^?5D{(sg3wS&RebKpnI~jBs|iBrPD{ zk%#&w{fKmg&WmTKFZ}^tEwo4V4EUnVtsm2Jf+5DlRu{K8jURaK6~v>~E&pe^f9KlX zsLRD9NM9>3VZ7aR7-pAeYu9|9T-~9R+XLpaM0fDmq@xY+JK1Q9WkphsM=W+DWY6pH zW_A0GUvQF@C?sr-r{1@ATKhpczOB(Zh+#>7VedxJ5XP=FEOibE{jO_{x1#)Ddew^Nsquc|%>6B$c-DL~Z zKAWD#Gd@{zyHKlgayYuid-lA0Y$C872m=B-@gA z^N?&l-?I9J@J96@bas)Cm_9KV-~AkrmXX>PyDOf0wULq`7^!S@@ETA)nK#M*yW4}w z{DCg`teDSgY(gF_S{6f#MWAI^?Qx&SxhA{AJl1k5{f)hG=DBG!t=H(Ko~B)3_U2|0 zmRn_M-oV{aq*9t>o?D7BJd4UsQ!|nw1c+pH2SV~#z$DCj(3-Eb!`4CF{nUFKnt(sd zY<#>y_Zv73{FMHC+P)5vUX-av*tQC%U2PhEOO|5&w2^bQKDIOgj-_<2kxKtDI{%%* zM^boco*R+=eBGZJU@ClmkJUk?SeD)3JwbFV*!8!-7^tXvbzVkGP)yUzpUvK_3N(6f zQT);=G9sP!Gik8N#B#zyP(2v{u&VB9wQvqWHe0=PJ2oaySIf#tk6}^VY8< zagIKYgk&zsDOG3V@)qZ@=L)wT#J5p83sj)gr*|`vudL)|eDFFS8EYX^h*cL)zS@<< zh?V!WN`!J;w27kxH-_9xhR2TIkdKUYw}A>CE@%PDqsH%4tk6PwE?rlbfj2;$wa3r^-t5fpPTzvcjD{slS8ARC8|~C@$I}ts?}PUX2j%; zstMF9iv~F%`9OO55A;!cHDLWENmT{8D0O$g5lo_NH}C|Aak!pF*0DxOOM$vw+I9%d zk=#i($wD_lD`^7cy{Zn(d@14HQ&?g?eGNphWEYiq_x+O91r9etN9L%Q=y$`_X zD4l-@WzJ4O&zv%xhOxYY&c`2jD#xg)0cX%Lq1%lI%A-ff z6bT(3PVA1#6?Tu9Pk($+TIyyfXiKp-=vjA-Hq^tK%^QJer}`mJIEYVpUrN_rxXyKV z_qsg5b3Ia-lvMa(-=6e00@0Kj*C>HC5!m{9{ny&=4D3)qcya$lzUn)CH@>eim^=%~ouM9I^bg`%47Jo+Z}K>t67InU>?%3}2%-|O&R_*5xI+T*d%0|a9M z`|&ygWU|aIwB&a+g&lMW^3TKOV7s6BBJQXBxb^~5rR`Ega*qwtu?BBe(#_uL%E7*D)LyX7G?7mN1DB-8^RO9aJQL5Sjli)eh z7r~u9_bbAzJe)jH5#{iLb~B%Di5gl+KD@einaHSFBm@J~!>k?_dQ2&BCj{3a$N$%P z-%WpR^)=FS+6KR+CV=>HmEYRpPQ2%AU16cf#lxwy!Tmon@r`U-2EU{^K}oxeo(SFT z4KAj-UOd0hYz97Il^Plg7_q#qnjEK?mcE#l_Wf~GL`N}M=6|5P*orXq*y>?L?|0AS$d5-lvx&~J z+#N`*{S0~-E%9rBXqB1-4ch0YgnIr&CMv#_V$~QbG@N~k(T?lq8X4ZVqUO`fAbchy zF`RHMO1HTNq%Yr;!^EhN5JdsOt_}&Z;|xfK(8iAwOY4o??!FS5y%{4cp|)zdR9lz8 zX)gXJH3hSQu#{EGu^3t4dk-s`fJ_@wo?SWKRVS{e~2TBKr+omwvSMFCc# zbjs-k+m8hmCNW-z~jlX2uA;X!53L2;Z!b?v=gby4-yuIGc3pQh~l1lftO9LV+Y zClej?@Q@P`iIOlf_m2r)~M8dh6}e` z;g_%mRV@D~K2q8V)ZPV#=qRZV1d7yf9H4U4P?D4ds>NmOvxy~;=&OIT&vq}7vyY1( zllfp1v7u!8_k3R=U!Sk@>k^q-z7UJruI?k>-PZGcsEAuQgfszwE=rk~oouIq2pTtB zo1Vo1EtN}Jw%`K6BWsltzuMPpbBK^fdzkjd&K}`Tp-@(*b8Ek`->pUN(L|M zS!4s9BdgUzX7k^?C7PsDjv<&eQE#fo&AhLO*+GsJpmRLX5x+e)t#4_o7;^rVlVN$Z zpItgoX>S1Oo+k_FJ3fnwYHWf|eel4kZBU%GqP2f_GB6x(b}@fss|P^saF}Bfm~}}7RcX6l88f> z>!1URv$G;G^G9R_>etHpnH-b3fmEd^>qAZ;jtU9H z*40d3GDkWY>@W?kPd2G_ba;d7mNXr#mYxkRKhx0U5#SFXXOot!=5$bi0GCN7{c>ZH zq9Ouw)*VtLfUST13I}^EIx0#sIm#xCP;pdB7MSG1{TpEr?pIO@ZCeg0i6#Bn@kurk zf8cjWyrYbz!@>Da@}I_>zsLUL#eW<4pEqE(uk(bT-jLrVj^$5@Liom_BidYu0)@3Y z6DSGl%J@vU9i<#tnCT{D^0nS^6FfJENAAKqga5CNOng`2cnQo;vi>s$!%t2|_`Vb) zeAK@)6_pj*bH{$SQmeWX6r~)9PbmgxhT>6y$guN4-WwsI^3yCYKHYIIVc3r>opa#E zj0jP@*5l1w`3r()qT!3zwa5TzzQ9`!*tky?w(82yUO0&aUfr{;Ka+i5?D>gH$(B8^ zj>vGRKAdz0L;3Fcc!d{+@Z{isN0BsB{$gOaw*^I5FzWs1F0!C!1lWG9OWT@K2{e!Z z4!gw#UmXYo>#LaO2%cXBWrYPj^6B}t7wXEOU}?YgAH=q;Mwwm_oa$(+4Ug6V+A@&m zD)%owhtxCM9EUB&QCc8WpIx8C82!LvUcJ-bYuT))oFd?`0!}lEnVxez55cDoqW@MQ zX=L&H`TY*BI+y)|9xmCb-sLbmS;z$;P_pz3!`}RsKsLv>b?DW8I5EHfe~8E%con9= zL^)Y%xL`Eo_S*&;(X|@l( zwv(ucE*GLv&(1m!Z#=S~a7^a!1UcYixd_B>H`cm93 z^^7;jVYS6h5QZQCpP?j+mMBE@3=>=TOk^LmiQ*(SYb4ouiL+8;;Mv+mPT?G)T02o* zgy_kDk6v<7=LthDvyqbKi@|cor}c`JpjN=5Zoe+qSWw&}c-l2T@u);Tf4B`KV@+2b z!KQ9+vXNkPzPU@B(hMaE*(20qO6?k^g?rYuK8J7mC`DoqZRL-6u`7XFe7V1j-fiXR z$wZ}`2!p!NZ}7jF`o9_bKfnLR)Bh0Un0ZfE^=QkV1*J>a=CoX7ODzRk-+c&+uHW)A zEBk9)+y_?W6%c7^y!tV|OrflgWppNzmtm9SUrmmHHlFBr13}7M^fPX1*AWbEC5mb` z)K^-F!&}pVX>2Gm8=(98<6aec4}#n*LYmn<4P8jDLk1TPA_IGSXD*Wp5e^?u&UPBu z-qKO2vidHo-8{}*s+kW$j3@}B6lXY$b%C}~?*+SDCV=XV@~yj<2kHW9>0Nx9KF7mP z(ns|safz61i{kGU{a}!Vh{djs9(Q=(%+UG3g5$fa22V$Kn)U;T!Fz~+#N#{HTCHU0 zRkkc6PqpV7Wg=z6s<(F1^w}{XA);RVw3Ayq&gB;KaPBwqdC%4KkJby7{sxO}&lb{; zkEyYowUqFqnC5cL1Dd<9?CC~=tc~n$QRHtp2bFla^xPMZgk*ntAIDQ>2(UT93Mc6^ zKB)is)*&uq&*Y61B9?duabcG^fXX;gT^SSIy=d`NLiLPvG`Fk9ByWgRl{? z8hw^x($57pMmNHq&XG8wFFux9dD$7#LN^%Gu4H?#aze4J~r^Da`b2|HsQV;9fCyTFPSrFNE^f>D^nWpedf?Fz9@ z?Df42*aY;2cS|yAg#8Y^W-Qor9^LCVvl6j^i}ovp_i4YPSW&!kDuAN~T?eIVsk{OE z(0!3_U4>T{x$p_K_YlK6U`tuCr-r6)aLPiJ5g9!&z+7x{T?r8;kLnMMo>U-<` zxJB~xgluFrs~+wdK;OrlvKFIj(Q$hEfw%axN;wOL98}zfA3axC_th>M6ubHDS5}mv zvI&zI+GGfdaLzX)CyTpsUlyI7c^+cp)|{{r$eVBe+|84! zCLPh=9JOMp8^p<7Kmj7v$8W4OC%>k~hCk5;5cA;+eNCe6ztt5LxWijs^K@R+$XnZ|;sR_~V*QURZUWIe4&4&JBjlRW3F%s%VFl4+?02w`=sG6vTJndRuaJE#1hLb$zcOifxK(5s=m7bk;~vM!hUqIL@mi_xoi$B&GS%U0if_&N8Brt*E=Iy=_=<9%sct3w#a!lB&5}Cdy z*3?D;Z}(#lgRm%V^YTTtVp*c`d|ip!i~NbQl0MYWWF>@HhFDu{{;+VeQ9-^%*DX(9 zqNIkazFk7{2|TdvW+^L}lkJOu+20~kA;apwNa6nmj{ijx|A{v5rk_!0(BDX9vtpUS R|0xBKl~j_b5i<$-{{W9T?`Z%4 diff --git a/erpnext/docs/assets/img/setup/users/user-login-mobile.png b/erpnext/docs/assets/img/setup/users/user-login-mobile.png deleted file mode 100644 index 1d7af14305298b31c2ba63b76ca82fe0211cd629..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12278 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

qQ`j;{jbJXQvS?tMLW0V zi^7%jAwSNM0pnBNrjj$)Ot+A;F~2Ts`0u-Tw_oB@B8`_tty0`nAyl-eA!}2&4nGU7 z*H6moUbg^C%0XJQdNxibSx+J zStKB+M9_HJvEO$end|dIgUgkSU!HJJqi4JVKP9}sXy*^f;7?}n@I4r~)h9=wz`=>l zGD|W&S1C1f%b9NObf{kp?rvW!mMnQPWPA@fUOU-t)gUdo|4MS8wejMk1V4GQuA(yY zYN;vZa6H&=IlHT37lTQBiH?`yZM8s53z;U1^V#y4dbAIlXxcX}ai|mRyC*U0r;a^+ z4zMuM&7_B6Mt!qn=Ow z${M7DKTSuzWu=GO64K6?hki3^-f2dH4`~ z7<+eZ-5)iK^Jr}aFI`OEP9G25ln9%v8k3s}14^82WlpXSAT9JE*;0>ZA(kd5S*X!w z0C0s2X5VjHIXfzGdSWC~vMwJM?#=M)ExALS000!w{f0qaoRN|j z?);o5P1s1T;RyrLBoB=VcV?CJivSDn2X6^cx%~*(kLE$A{|+{I4cOkMb-MeYV)ZXC za7wl9dC$Xj^D2vW6~2_sCSqJMp($RV0VmToBP=Yo(u<~;?SttunOc`#@D`VZ3q5rt z#aTl6-K<4t7&ToByJe!*vM~bHa^_C&|NO;S^_8e~(LGq34-9@RrCnf7oJQ8vXT?48 zk`j9F_VNX5KDDZ~iKBz`pM74zzd~z!TWb6cO+1$yL#q=4BVFG6&QpM|r|vPeo?tu` zENa1=G-1C`S`T_$qgi^Wb)6H@6s3^2nmWflrNCSo4L>FLF}jZozlHE~c~{D8k&Qoou<15{0^B zZO@gYYE~;qBb?f!2mmA*MUa!fw{{{w1Y*-Od-cxQ<<&B93$V3H>H~Iuh8_XU(Sb`R z(t_ea9^<}BmTTVBLw{Tp>7ytlcEpqD_Xg=8{_;EpQ)hLlRIe`fZeTMen^jxU;k=^I zYfOEYId@2Im{N_!Rjd9&)7?Rw=o<<;zpKHj`-`f_Drnx!{S>GR23nnm@h)Zjc?vE? z=N7DY89u>fxU8D}CBQWsz?#iXHmW@Bg=W4Kh7+*rK%t1XjjnV447TRH-JB?!+ILcSTLYoWPVX#S=!P9{OyzsMgr6Qlpnl{}Ts zlwh%DJ--1=#c^E|gi$(`eWv`CF)|Gk;VYWuxlmqS4s97AvEw#HT&T*D&oOjWB`IP6 Setup > Settings > System Settings diff --git a/erpnext/docs/user/manual/en/setting-up/users-and-permissions/adding-users.md b/erpnext/docs/user/manual/en/setting-up/users-and-permissions/adding-users.md index 6fb64df37e..517c6746e6 100644 --- a/erpnext/docs/user/manual/en/setting-up/users-and-permissions/adding-users.md +++ b/erpnext/docs/user/manual/en/setting-up/users-and-permissions/adding-users.md @@ -20,10 +20,7 @@ To add a new user, click on "New" Add user details such as First Name, Last Name, Email etc. -The user's Email will become the user id. Mobile No can also be used to log in if you check the Allow Login using Mobile No checkbox under the Security section in System Settings. While Mobile No will be unique, it will not be treated as a user id. - -Email Login -Mobile No Login +The user's Email will become the user id. After adding these details, save the user. From b3d4326dcc314590bc776b9a2b4931011e8f5265 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 24 May 2017 17:31:58 +0530 Subject: [PATCH 26/35] Revert "Prompt for mandatory batch number in POS (#8928)" This reverts commit ce9ac7885e15f9ed511b29e70f579a46ffb2799f. --- erpnext/accounts/page/pos/pos.js | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index 6a2e0cfe4b..9261fa4f39 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -398,7 +398,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.make_item_list(); this.make_discount_field() }, - + make_control: function() { this.frm = {} this.frm.doc = this.doc @@ -543,7 +543,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ me.toggle_totals_area(); }); }, - + bind_numeric_keypad: function() { var me = this; $(this.numeric_keypad).find('.pos-operation').on('click', function(){ @@ -572,7 +572,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ me.selected_field.closest('.pos-list-row').addClass('active'); } }) - + $(this.numeric_keypad).find('.numeric-del').click(function(){ me.selected_field = $(me.wrapper).find('.selected-item').find('.' + me.numeric_id) me.numeric_val = cstr(flt(me.selected_field.val())).slice(0, -1); @@ -580,7 +580,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ me.selected_field.trigger("change") // me.render_selected_item() }) - + $(this.numeric_keypad).find('.pos-pay').click(function(){ me.validate(); me.update_paid_amount_status(true); @@ -988,7 +988,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ })).tooltip().appendTo($wrap); } }); - + $wrap.append(`

@@ -1070,7 +1070,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ }); } }, - + bind_items_event: function() { var me = this; $(this.wrapper).on('click', '.pos-bill-item', function() { @@ -1107,7 +1107,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ var qty = flt($(this).parents(".pos-bill-item").find('.pos-item-qty').val()) - 1; me.update_qty(item_code, qty) }) - + $(this.wrapper).on("change", ".pos-item-disc", function () { var item_code = $(this).parents(".pos-selected-item-action").attr("data-item-code"); var discount = $(this).val(); @@ -1763,14 +1763,10 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ mandatory_batch_no: function () { var me = this; if (this.items[0].has_batch_no && !this.item_batch_no[this.items[0].item_code]) { - frappe.prompt([ - {'fieldname': 'batch', 'fieldtype': 'Select', 'label': __('Batch No'), 'reqd': 1, 'options':this.batch_no_data[this.items[0].item_code]} - ], - function(values){ - me.item_batch_no[me.items[0].item_code] = values.batch; - }, - __('Select Batch No')) - } + frappe.throw(__(repl("Error: Batch no is mandatory for item %(item)s", { + 'item': this.items[0].item_code + }))) + } }, apply_pricing_rule: function () { @@ -1792,7 +1788,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ item.pricing_rule = null; me.apply_pricing_rule_on_item(item) } - + if(item.discount_percentage > 0) { me.apply_pricing_rule_on_item(item) } From fdce7a0dc3f0bc96d3f891ce3eb0fdcfedd348b1 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 24 May 2017 17:31:58 +0530 Subject: [PATCH 27/35] Revert "link the different doctype in the school module (#8844)" This reverts commit c320537e4ca682c6139fd5cb40fa0cf61a0cd2bb. --- erpnext/schools/doctype/course/course.js | 12 ------------ erpnext/schools/doctype/program/program.js | 15 --------------- .../student_attendance_tool.js | 6 ------ .../doctype/student_group/student_group.js | 17 +---------------- 4 files changed, 1 insertion(+), 49 deletions(-) diff --git a/erpnext/schools/doctype/course/course.js b/erpnext/schools/doctype/course/course.js index c667eca2b7..f84c59fcd2 100644 --- a/erpnext/schools/doctype/course/course.js +++ b/erpnext/schools/doctype/course/course.js @@ -1,30 +1,18 @@ frappe.ui.form.on("Course", "refresh", function(frm) { if(!cur_frm.doc.__islocal) { frm.add_custom_button(__("Program"), function() { - frappe.route_options = { - "Program Course.course": frm.doc.name - } frappe.set_route("List", "Program"); }); frm.add_custom_button(__("Student Group"), function() { - frappe.route_options = { - course: frm.doc.name - } frappe.set_route("List", "Student Group"); }); frm.add_custom_button(__("Course Schedule"), function() { - frappe.route_options = { - course: frm.doc.name - } frappe.set_route("List", "Course Schedule"); }); frm.add_custom_button(__("Assessment Plan"), function() { - frappe.route_options = { - course: frm.doc.name - } frappe.set_route("List", "Assessment Plan"); }); } diff --git a/erpnext/schools/doctype/program/program.js b/erpnext/schools/doctype/program/program.js index 5146a19322..cc09d0ef4d 100644 --- a/erpnext/schools/doctype/program/program.js +++ b/erpnext/schools/doctype/program/program.js @@ -6,37 +6,22 @@ cur_frm.add_fetch('fee_structure', 'total_amount', 'amount'); frappe.ui.form.on("Program", "refresh", function(frm) { if(!frm.doc.__islocal) { frm.add_custom_button(__("Student Applicant"), function() { - frappe.route_options = { - program: frm.doc.name - } frappe.set_route("List", "Student Applicant"); }); frm.add_custom_button(__("Program Enrollment"), function() { - frappe.route_options = { - program: frm.doc.name - } frappe.set_route("List", "Program Enrollment"); }); frm.add_custom_button(__("Student Group"), function() { - frappe.route_options = { - program: frm.doc.name - } frappe.set_route("List", "Student Group"); }); frm.add_custom_button(__("Fee Structure"), function() { - frappe.route_options = { - program: frm.doc.name - } frappe.set_route("List", "Fee Structure"); }); frm.add_custom_button(__("Fees"), function() { - frappe.route_options = { - program: frm.doc.name - } frappe.set_route("List", "Fees"); }); } diff --git a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js index 11a79e134e..6f8c6cd7da 100644 --- a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js +++ b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js @@ -4,12 +4,6 @@ frappe.provide("schools") frappe.ui.form.on('Student Attendance Tool', { refresh: function(frm) { - if (frappe.route_options) { - frm.set_value("based_on", frappe.route_options.based_on); - frm.set_value("student_group", frappe.route_options.student_group); - frm.set_value("course_schedule", frappe.route_options.course_schedule); - frappe.route_options = null; - } frm.disable_save(); }, diff --git a/erpnext/schools/doctype/student_group/student_group.js b/erpnext/schools/doctype/student_group/student_group.js index 83fe0945cc..ed9469015b 100644 --- a/erpnext/schools/doctype/student_group/student_group.js +++ b/erpnext/schools/doctype/student_group/student_group.js @@ -13,23 +13,11 @@ frappe.ui.form.on("Student Group", { refresh: function(frm) { if (!frm.doc.__islocal) { - frm.add_custom_button(__("Attendance"), function() { - frappe.route_options = { - based_on: "Student Group", - student_group: frm.doc.name - } - frappe.set_route("List", "Student Attendance Tool"); - }); frm.add_custom_button(__("Course Schedule"), function() { - frappe.route_options = { - student_group: frm.doc.name - } frappe.set_route("List", "Course Schedule"); }); + frm.add_custom_button(__("Assessment Plan"), function() { - frappe.route_options = { - student_group: frm.doc.name - } frappe.set_route("List", "Assessment Plan"); }); frm.add_custom_button(__("Update Email Group"), function() { @@ -42,9 +30,6 @@ frappe.ui.form.on("Student Group", { }); }); frm.add_custom_button(__("Newsletter"), function() { - frappe.route_options = { - "Newsletter Email Group.email_group": frm.doc.name - } frappe.set_route("List", "Newsletter"); }); } From 79165905288a11f09fbef8659f5d6e7f9a472ad3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 24 May 2017 17:31:58 +0530 Subject: [PATCH 28/35] Revert "Update lead.py (#8789)" This reverts commit 9283377f87b891563b844620a2fe4f9823e7e3f1. --- erpnext/crm/doctype/lead/lead.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py index aafc128e91..ccbb5369aa 100644 --- a/erpnext/crm/doctype/lead/lead.py +++ b/erpnext/crm/doctype/lead/lead.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import frappe from frappe import _ -from frappe.utils import (cstr, validate_email_add, cint, comma_and, has_gravatar, now, getdate, nowdate) +from frappe.utils import (cstr, validate_email_add, cint, comma_and, has_gravatar, now) from frappe.model.mapper import get_mapped_doc from erpnext.controllers.selling_controller import SellingController @@ -46,7 +46,7 @@ class Lead(SellingController): if self.is_new() or not self.image: self.image = has_gravatar(self.email_id) - if self.contact_date and getdate(self.contact_date) < getdate(nowdate()): + if self.contact_date and self.contact_date < now(): frappe.throw(_("Next Contact Date cannot be in the past")) def on_update(self): From adfe84b04ff8518db69e7d51b0e2354e4260a61a Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 24 May 2017 17:31:58 +0530 Subject: [PATCH 29/35] Revert "Website Specification Labls should not be capitalised by default (#8798)" This reverts commit 331566d61229a0698b7d2daf319e51cbc74fd7e9. --- erpnext/templates/generators/item.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/templates/generators/item.html b/erpnext/templates/generators/item.html index de544930cc..c0399a787a 100644 --- a/erpnext/templates/generators/item.html +++ b/erpnext/templates/generators/item.html @@ -87,7 +87,7 @@
{{ d.label }}{{ d.label }} {{ d.description }}
{% for d in website_specifications -%} - + {%- endfor %} From d0ebd7f7c2f11cc086ce7c26a36a588a6783ce41 Mon Sep 17 00:00:00 2001 From: CH Date: Wed, 24 May 2017 13:49:53 +0200 Subject: [PATCH 30/35] POS translatable fields correction --- erpnext/public/js/pos/pos.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/public/js/pos/pos.html b/erpnext/public/js/pos/pos.html index 181a41f2d5..6065e603c7 100644 --- a/erpnext/public/js/pos/pos.html +++ b/erpnext/public/js/pos/pos.html @@ -68,12 +68,12 @@ - \ No newline at end of file + From a70b41fbb84f7307f163680fee7cfd0fc0078fb6 Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Sat, 20 May 2017 13:09:34 +0530 Subject: [PATCH 31/35] Remove Role 'All' from BOM --- erpnext/manufacturing/doctype/bom/bom.json | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.json b/erpnext/manufacturing/doctype/bom/bom.json index c42403c010..e507da40e3 100644 --- a/erpnext/manufacturing/doctype/bom/bom.json +++ b/erpnext/manufacturing/doctype/bom/bom.json @@ -1592,26 +1592,6 @@ "name": "BOM", "owner": "Administrator", "permissions": [ - { - "amend": 0, - "apply_user_permissions": 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": "All", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - }, { "amend": 0, "apply_user_permissions": 0, @@ -1662,4 +1642,4 @@ "sort_order": "DESC", "track_changes": 1, "track_seen": 0 -} \ No newline at end of file +} From 9bf4563b7a9c473c71f491e2676ff0ae22a40e16 Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Sat, 20 May 2017 13:11:45 +0530 Subject: [PATCH 32/35] Change modified time --- erpnext/manufacturing/doctype/bom/bom.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.json b/erpnext/manufacturing/doctype/bom/bom.json index e507da40e3..7dc6f2c358 100644 --- a/erpnext/manufacturing/doctype/bom/bom.json +++ b/erpnext/manufacturing/doctype/bom/bom.json @@ -1586,7 +1586,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-04-10 12:13:59.630780", + "modified": "2017-05-20 13:10:59.630780", "modified_by": "Administrator", "module": "Manufacturing", "name": "BOM", From 659a225f24691ac09127a8dbc54afc640948a8ad Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 24 May 2017 17:49:52 +0530 Subject: [PATCH 33/35] allow multiple items in purchase receipt (#8997) --- erpnext/stock/doctype/purchase_receipt/purchase_receipt.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index 055b9c47f9..c11965e256 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -74,7 +74,8 @@ class PurchaseReceipt(BuyingController): "Purchase Order Item": { "ref_dn_field": "purchase_order_item", "compare_fields": [["project", "="], ["uom", "="], ["item_code", "="]], - "is_child_table": True + "is_child_table": True, + "allow_duplicate_prev_row_id": True } }) From 2f17e70793827cfbd40021d0b203ccee53530dc9 Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Wed, 24 May 2017 18:35:35 +0530 Subject: [PATCH 34/35] [minor] removed the {next} for last page (#9002) --- .../en/stock/item/item-valuation-fifo-and-moving-average.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/erpnext/docs/user/manual/en/stock/item/item-valuation-fifo-and-moving-average.md b/erpnext/docs/user/manual/en/stock/item/item-valuation-fifo-and-moving-average.md index 9344870081..fc5ef00171 100644 --- a/erpnext/docs/user/manual/en/stock/item/item-valuation-fifo-and-moving-average.md +++ b/erpnext/docs/user/manual/en/stock/item/item-valuation-fifo-and-moving-average.md @@ -24,5 +24,3 @@ There are two major ways in which ERPNext values your items. * **Moving Average:** In this method, ERPNext assumes that the value of the item at any point is the average price of the units of that Item in stock. For example, if the value of an Item is X in a Warehouse with quantity Y and another quantity Y1 is added to the Warehouse at cost X1, the new value X2 would be: > New Value X2 = (X * Y + X1 * Y1) / (Y + Y1) - -{next} From 12ec71781db227f9356454fa78f0f00e32a7e78f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 24 May 2017 19:08:33 +0600 Subject: [PATCH 35/35] bumped to version 8.0.38 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 076baeaac7..235b1b0a01 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.37' +__version__ = '8.0.38' def get_default_company(user=None):
{{ d.label }}{{ d.label }} {{ d.description }}