Merge branch 'shopping-cart' of https://github.com/frappe/erpnext into shopping-cart
diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json
index 3fc109b..849df18 100644
--- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json
+++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json
@@ -910,98 +910,8 @@
             },
             "is_group": 1
         },
-        "Passiva": {
+        "Passiva - Verbindlichkeiten": {
             "root_type": "Liability",
-            "A - Eigenkapital": {
-                "account_type": "Equity",
-                "is_group": 1,
-                "I - Gezeichnetes Kapital": {
-                    "account_type": "Equity",
-					"is_group": 1,
-					"Gezeichnetes Kapital": {
-						"account_type": "Equity",
-						"account_number": "2900"
-					},
-					"Ausstehende Einlagen auf das gezeichnete Kapital": {
-						"account_number": "2910",
-						"is_group": 1
-					}
-                },
-                "II - Kapitalr\u00fccklage": {
-                    "account_type": "Equity",
-					"is_group": 1,
-					"Kapitalr\u00fccklage": {
-						"account_number": "2920"
-					}
-                },
-                "III - Gewinnr\u00fccklagen": {
-                    "account_type": "Equity",
-                    "1 - gesetzliche R\u00fccklage": {
-                        "account_type": "Equity",
-						"is_group": 1,
-						"Gesetzliche R\u00fccklage": {
-							"account_number": "2930"
-						}
-                    },
-                    "2 - R\u00fccklage f. Anteile an einem herrschenden oder mehrheitlich beteiligten Unternehmen": {
-                        "account_type": "Equity",
-                        "is_group": 1
-                    },
-                    "3 - satzungsm\u00e4\u00dfige R\u00fccklagen": {
-                        "account_type": "Equity",
-						"is_group": 1,
-						"Satzungsm\u00e4\u00dfige R\u00fccklagen": {
-							"account_number": "2950"
-						}
-                    },
-                    "4 - andere Gewinnr\u00fccklagen": {
-                        "account_type": "Equity",
-                        "is_group": 1,
-                        "Gewinnr\u00fccklagen aus den \u00dcbergangsvorschriften BilMoG": {
-                            "is_group": 1,
-                            "Gewinnr\u00fccklagen (BilMoG)": {
-                                "account_number": "2963"
-                            },
-                            "Gewinnr\u00fccklagen aus Zuschreibung Sachanlageverm\u00f6gen (BilMoG)": {
-                                "account_number": "2964"
-                            },
-                            "Gewinnr\u00fccklagen aus Zuschreibung Finanzanlageverm\u00f6gen (BilMoG)": {
-                                "account_number": "2965"
-                            },
-                            "Gewinnr\u00fccklagen aus Aufl\u00f6sung der Sonderposten mit R\u00fccklageanteil (BilMoG)": {
-                                "account_number": "2966"
-                            }
-                        },
-                        "Latente Steuern (Gewinnr\u00fccklage Haben) aus erfolgsneutralen Verrechnungen": {
-                            "account_number": "2967"
-                        },
-                        "Latente Steuern (Gewinnr\u00fccklage Soll) aus erfolgsneutralen Verrechnungen": {
-                            "account_number": "2968"
-                        },
-                        "Rechnungsabgrenzungsposten (Gewinnr\u00fccklage Soll) aus erfolgsneutralen Verrechnungen": {
-                            "account_number": "2969"
-                        }
-                    },
-                    "is_group": 1
-                },
-                "IV - Gewinnvortrag/Verlustvortrag": {
-                    "account_type": "Equity",
-                    "is_group": 1,
-					"Gewinnvortrag vor Verwendung": {
-						"account_number": "2970"
-					},
-					"Verlustvortrag vor Verwendung": {
-						"account_number": "2978"
-					}
-                },
-                "V - Jahres\u00fcberschu\u00df/Jahresfehlbetrag": {
-                    "account_type": "Equity",
-                    "is_group": 1
-                },
-                "Einlagen stiller Gesellschafter": {
-                    "account_number": "9295"
-                }
-            },
             "B - R\u00fcckstellungen": {
                 "is_group": 1,
                 "1 - R\u00fcckstellungen f. Pensionen und \u00e4hnliche Verplicht.": {
@@ -1618,6 +1528,143 @@
             },
             "is_group": 1
         },
+        "Passiva - Eigenkapital": {
+            "root_type": "Equity",
+            "A - Eigenkapital": {
+                "account_type": "Equity",
+                "is_group": 1,
+                "I - Gezeichnetes Kapital": {
+                    "account_type": "Equity",
+                    "is_group": 1,
+                    "Gezeichnetes Kapital": {
+                        "account_number": "2900",
+                        "account_type": "Equity"
+                    },
+                    "Gesch\u00e4ftsguthaben der verbleibenden Mitglieder": {
+                        "account_number": "2901"
+                    },
+                    "Gesch\u00e4ftsguthaben der ausscheidenden Mitglieder": {
+                        "account_number": "2902"
+                    },
+                    "Gesch\u00e4ftsguthaben aus gek\u00fcndigten Gesch\u00e4ftsanteilen": {
+                        "account_number": "2903"
+                    },
+                    "R\u00fcckst\u00e4ndige f\u00e4llige Einzahlungen auf Gesch\u00e4ftsanteile, vermerkt": {
+                        "account_number": "2906"
+                    },
+                    "Gegenkonto R\u00fcckst\u00e4ndige f\u00e4llige Einzahlungen auf Gesch\u00e4ftsanteile, vermerkt": {
+                        "account_number": "2907"
+                    },
+                    "Kapitalerh\u00f6hung aus Gesellschaftsmitteln": {
+                        "account_number": "2908"
+                    },
+                    "Ausstehende Einlagen auf das gezeichnete Kapital, nicht eingefordert": {
+                        "account_number": "2910"
+                    }
+                },
+                "II - Kapitalr\u00fccklage": {
+                    "account_type": "Equity",
+                    "is_group": 1,
+                    "Kapitalr\u00fccklage": {
+                        "account_number": "2920"
+                    },
+                    "Kapitalr\u00fccklage durch Ausgabe von Anteilen \u00fcber Nennbetrag": {
+                        "account_number": "2925"
+                    },
+                    "Kapitalr\u00fccklage durch Ausgabe von Schuldverschreibungen": {
+                        "account_number": "2926"
+                    },
+                    "Kapitalr\u00fccklage durch Zuzahlungen gegen Gew\u00e4hrung eines Vorzugs": {
+                        "account_number": "2927"
+                    },
+                    "Kapitalr\u00fccklage durch Zuzahlungen in das Eigenkapital": {
+                        "account_number": "2928"
+                    },
+                    "Nachschusskapital (Gegenkonto 1299)": {
+                        "account_number": "2929"
+                    }
+                },
+                "III - Gewinnr\u00fccklagen": {
+                    "account_type": "Equity",
+                    "1 - gesetzliche R\u00fccklage": {
+                        "account_type": "Equity",
+                        "is_group": 1,
+                        "Gesetzliche R\u00fccklage": {
+                            "account_number": "2930"
+                        }
+                    },
+                    "2 - R\u00fccklage f. Anteile an einem herrschenden oder mehrheitlich beteiligten Unternehmen": {
+                        "account_type": "Equity",
+                        "is_group": 1,
+                        "R\u00fccklage f. Anteile an einem herrschenden oder mehrheitlich beteiligten Unternehmen": {
+                            "account_number": "2935"
+                        }
+                    },
+                    "3 - satzungsm\u00e4\u00dfige R\u00fccklagen": {
+                        "account_type": "Equity",
+                        "is_group": 1,
+                        "Satzungsm\u00e4\u00dfige R\u00fccklagen": {
+                            "account_number": "2950"
+                        }
+                    },
+                    "4 - andere Gewinnr\u00fccklagen": {
+                        "account_type": "Equity",
+                        "is_group": 1,
+                        "Andere Gewinnr\u00fccklagen": {
+                            "account_number": "2960"
+                        },
+                        "Andere Gewinnr\u00fccklagen aus dem Erwerb eigener Anteile": {
+                            "account_number": "2961"
+                        },
+                        "Eigenkapitalanteil von Wertaufholungen": {
+                            "account_number": "2962"
+                        },
+                        "Gewinnr\u00fccklagen aus den \u00dcbergangsvorschriften BilMoG": {
+                            "is_group": 1,
+                            "Gewinnr\u00fccklagen (BilMoG)": {
+                                "account_number": "2963"
+                            },
+                            "Gewinnr\u00fccklagen aus Zuschreibung Sachanlageverm\u00f6gen (BilMoG)": {
+                                "account_number": "2964"
+                            },
+                            "Gewinnr\u00fccklagen aus Zuschreibung Finanzanlageverm\u00f6gen (BilMoG)": {
+                                "account_number": "2965"
+                            },
+                            "Gewinnr\u00fccklagen aus Aufl\u00f6sung der Sonderposten mit R\u00fccklageanteil (BilMoG)": {
+                                "account_number": "2966"
+                            }
+                        },
+                        "Latente Steuern (Gewinnr\u00fccklage Haben) aus erfolgsneutralen Verrechnungen": {
+                            "account_number": "2967"
+                        },
+                        "Latente Steuern (Gewinnr\u00fccklage Soll) aus erfolgsneutralen Verrechnungen": {
+                            "account_number": "2968"
+                        },
+                        "Rechnungsabgrenzungsposten (Gewinnr\u00fccklage Soll) aus erfolgsneutralen Verrechnungen": {
+                            "account_number": "2969"
+                        }
+                    },
+                    "is_group": 1
+                },
+                "IV - Gewinnvortrag/Verlustvortrag": {
+                    "account_type": "Equity",
+                    "is_group": 1,
+                    "Gewinnvortrag vor Verwendung": {
+                        "account_number": "2970"
+                    },
+                    "Verlustvortrag vor Verwendung": {
+                        "account_number": "2978"
+                    }
+                },
+                "V - Jahres\u00fcberschu\u00df/Jahresfehlbetrag": {
+                    "account_type": "Equity",
+                    "is_group": 1
+                },
+                "Einlagen stiller Gesellschafter": {
+                    "account_number": "9295"
+                }
+            }
+        },
         "1 - Umsatzerl\u00f6se": {
             "root_type": "Income",
             "is_group": 1,
diff --git a/erpnext/crm/doctype/appointment/appointment.py b/erpnext/crm/doctype/appointment/appointment.py
index 63efeb3..2009ebf 100644
--- a/erpnext/crm/doctype/appointment/appointment.py
+++ b/erpnext/crm/doctype/appointment/appointment.py
@@ -126,7 +126,7 @@
 			add_assignemnt({
 				'doctype': self.doctype,
 				'name': self.name,
-				'assign_to': existing_assignee
+				'assign_to': [existing_assignee]
 			})
 			return
 		if self._assign:
@@ -139,7 +139,7 @@
 				add_assignemnt({
 					'doctype': self.doctype,
 					'name': self.name,
-					'assign_to': agent
+					'assign_to': [agent]
 				})
 			break
 
diff --git a/erpnext/manufacturing/doctype/job_card/job_card_calendar.js b/erpnext/manufacturing/doctype/job_card/job_card_calendar.js
index cf07698..f4877fd 100644
--- a/erpnext/manufacturing/doctype/job_card/job_card_calendar.js
+++ b/erpnext/manufacturing/doctype/job_card/job_card_calendar.js
@@ -8,7 +8,17 @@
 		"allDay": "allDay",
 		"progress": "progress"
 	},
-	gantt: true,
+	gantt: {
+		field_map: {
+			"start": "started_time",
+			"end": "started_time",
+			"id": "name",
+			"title": "subject",
+			"color": "color",
+			"allDay": "allDay",
+			"progress": "progress"
+		}
+	},
 	filters: [
 		{
 			"fieldtype": "Link",
diff --git a/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js b/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js
index 8cd0164..7beecac 100644
--- a/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js
+++ b/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js
@@ -27,9 +27,9 @@
 		value = default_formatter(value, row, column, data);
 		if (column.id == "item") {
 			if (data["enough_parts_to_build"] > 0) {
-				value = `<a style='color:green' href="#Form/Item/${data['item']}" data-doctype="Item">${data['item']}</a>`;
+				value = `<a style='color:green' href="/app/item/${data['item']}" data-doctype="Item">${data['item']}</a>`;
 			} else {
-				value = `<a style='color:red' href="#Form/Item/${data['item']}" data-doctype="Item">${data['item']}</a>`;
+				value = `<a style='color:red' href="/app/item/${data['item']}" data-doctype="Item">${data['item']}</a>`;
 			}
 		}
 		return value
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index e80bd64..a597b49 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -450,7 +450,6 @@
 erpnext.patches.v9_0.add_user_to_child_table_in_pos_profile
 erpnext.patches.v9_0.set_schedule_date_for_material_request_and_purchase_order
 erpnext.patches.v9_0.student_admission_childtable_migrate
-erpnext.patches.v9_0.fix_subscription_next_date #2017-10-23
 erpnext.patches.v9_0.add_healthcare_domain
 erpnext.patches.v9_0.set_variant_item_description
 erpnext.patches.v9_0.set_uoms_in_variant_field
diff --git a/erpnext/patches/v9_0/fix_subscription_next_date.py b/erpnext/patches/v9_0/fix_subscription_next_date.py
deleted file mode 100644
index 4595c8d..0000000
--- a/erpnext/patches/v9_0/fix_subscription_next_date.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import getdate
-from frappe.automation.doctype.auto_repeat.auto_repeat import get_next_schedule_date
-
-def execute():
-	frappe.reload_doc('accounts', 'doctype', 'subscription')
-	fields = ["name", "reference_doctype", "reference_document",
-			"start_date", "frequency", "repeat_on_day"]
-
-	for d in fields:
-		if not frappe.db.has_column('Subscription', d):
-			return
-
-	doctypes = ('Purchase Order', 'Sales Order', 'Purchase Invoice', 'Sales Invoice')
-	for data in frappe.get_all('Subscription',
-		fields = fields,
-		filters = {'reference_doctype': ('in', doctypes), 'docstatus': 1}):
-
-		recurring_id = frappe.db.get_value(data.reference_doctype, data.reference_document, "recurring_id")
-		if recurring_id:
-			frappe.db.sql("update `tab{0}` set subscription=%s where recurring_id=%s"
-				.format(data.reference_doctype), (data.name, recurring_id))
-
-		date_field = 'transaction_date'
-		if data.reference_doctype in ['Sales Invoice', 'Purchase Invoice']:
-			date_field = 'posting_date'
-
-		start_date = frappe.db.get_value(data.reference_doctype, data.reference_document, date_field)
-
-		if start_date and getdate(start_date) != getdate(data.start_date):
-			last_ref_date = frappe.db.sql("""
-				select {0}
-				from `tab{1}`
-				where subscription=%s and docstatus < 2
-				order by creation desc
-				limit 1
-			""".format(date_field, data.reference_doctype), data.name)[0][0]
-
-			next_schedule_date = get_next_schedule_date(last_ref_date, data.frequency, data.repeat_on_day)
-
-			frappe.db.set_value("Subscription", data.name, {
-				"start_date": start_date,
-				"next_schedule_date": next_schedule_date
-			}, None)
\ No newline at end of file
diff --git a/erpnext/public/js/help_links.js b/erpnext/public/js/help_links.js
index 66ff464..a436cac 100644
--- a/erpnext/public/js/help_links.js
+++ b/erpnext/public/js/help_links.js
@@ -2,13 +2,13 @@
 
 const docsUrl = 'https://erpnext.com/docs/';
 
-frappe.help.help_links['Form/Rename Tool'] = [
+frappe.help.help_links['rename tool'] = [
 	{ label: 'Bulk Rename', url: docsUrl + 'user/manual/en/setting-up/data/bulk-rename' },
 ]
 
 //Setup
 
-frappe.help.help_links['List/User'] = [
+frappe.help.help_links['user'] = [
 	{ label: 'New User', url: docsUrl + 'user/manual/en/setting-up/users-and-permissions/adding-users' },
 	{ label: 'Rename User', url: docsUrl + 'user/manual/en/setting-up/articles/rename-user' },
 ]
@@ -21,7 +21,7 @@
 	{ label: 'Password', url: docsUrl + 'user/manual/en/setting-up/articles/change-password' },
 ]
 
-frappe.help.help_links['Form/System Settings'] = [
+frappe.help.help_links['system-settings'] = [
 	{ label: 'Naming Series', url: docsUrl + 'user/manual/en/setting-up/settings/system-settings' },
 ]
 
@@ -30,64 +30,60 @@
 	{ label: 'Overwriting Data from Data Import Tool', url: docsUrl + 'user/manual/en/setting-up/articles/overwriting-data-from-data-import-tool' },
 ]
 
-frappe.help.help_links['module_setup'] = [
-	{ label: 'Role Permissions Manager', url: docsUrl + 'user/manual/en/setting-up/users-and-permissions/role-based-permissions' },
-]
-
-frappe.help.help_links['Form/Naming Series'] = [
+frappe.help.help_links['naming-series'] = [
 	{ label: 'Naming Series', url: docsUrl + 'user/manual/en/setting-up/settings/naming-series' },
 	{ label: 'Setting the Current Value for Naming Series', url: docsUrl + 'user/manual/en/setting-up/articles/naming-series-current-value' },
 ]
 
-frappe.help.help_links['Form/Global Defaults'] = [
+frappe.help.help_links['global-defaults'] = [
 	{ label: 'Global Settings', url: docsUrl + 'user/manual/en/setting-up/settings/global-defaults' },
 ]
 
-frappe.help.help_links['Form/Email Digest'] = [
+frappe.help.help_links['email-digest'] = [
 	{ label: 'Email Digest', url: docsUrl + 'user/manual/en/setting-up/email/email-digest' },
 ]
 
-frappe.help.help_links['List/Print Heading'] = [
+frappe.help.help_links['print-heading'] = [
 	{ label: 'Print Heading', url: docsUrl + 'user/manual/en/setting-up/print/print-headings' },
 ]
 
-frappe.help.help_links['List/Letter Head'] = [
+frappe.help.help_links['letter-head'] = [
 	{ label: 'Letter Head', url: docsUrl + 'user/manual/en/setting-up/print/letter-head' },
 ]
 
-frappe.help.help_links['List/Address Template'] = [
+frappe.help.help_links['address-template'] = [
 	{ label: 'Address Template', url: docsUrl + 'user/manual/en/setting-up/print/address-template' },
 ]
 
-frappe.help.help_links['List/Terms and Conditions'] = [
+frappe.help.help_links['terms-and-conditions'] = [
 	{ label: 'Terms and Conditions', url: docsUrl + 'user/manual/en/setting-up/print/terms-and-conditions' },
 ]
 
-frappe.help.help_links['List/Cheque Print Template'] = [
+frappe.help.help_links['cheque-print-template'] = [
 	{ label: 'Cheque Print Template', url: docsUrl + 'user/manual/en/setting-up/print/cheque-print-template' },
 ]
 
-frappe.help.help_links['List/Email Account'] = [
+frappe.help.help_links['email-account'] = [
 	{ label: 'Email Account', url: docsUrl + 'user/manual/en/setting-up/email/email-account' },
 ]
 
-frappe.help.help_links['List/Notification'] = [
+frappe.help.help_links['notification'] = [
 	{ label: 'Notification', url: docsUrl + 'user/manual/en/setting-up/email/notifications' },
 ]
 
-frappe.help.help_links['Form/Notification'] = [
+frappe.help.help_links['notification'] = [
 	{ label: 'Notification', url: docsUrl + 'user/manual/en/setting-up/email/notifications' },
 ]
 
-frappe.help.help_links['List/Email Digest'] = [
+frappe.help.help_links['email-digest'] = [
 	{ label: 'Email Digest', url: docsUrl + 'user/manual/en/setting-up/email/email-digest' },
 ]
 
-frappe.help.help_links['List/Auto Email Report'] = [
+frappe.help.help_links['auto-email-report'] = [
 	{ label: 'Auto Email Reports', url: docsUrl + 'user/manual/en/setting-up/email/email-reports' },
 ]
 
-frappe.help.help_links['Form/Print Settings'] = [
+frappe.help.help_links['print-settings'] = [
 	{ label: 'Print Settings', url: docsUrl + 'user/manual/en/setting-up/print/print-settings' },
 ]
 
@@ -95,66 +91,60 @@
 	{ label: 'Print Format Builder', url: docsUrl + 'user/manual/en/setting-up/print/print-settings' },
 ]
 
-frappe.help.help_links['List/Print Heading'] = [
+frappe.help.help_links['print-heading'] = [
 	{ label: 'Print Heading', url: docsUrl + 'user/manual/en/setting-up/print/print-headings' },
 ]
 
 //setup-integrations
 
-frappe.help.help_links['Form/PayPal Settings'] = [
+frappe.help.help_links['paypal-settings'] = [
 	{ label: 'PayPal Settings', url: docsUrl + 'user/manual/en/setting-up/integrations/paypal-integration' },
 ]
 
-frappe.help.help_links['Form/Razorpay Settings'] = [
+frappe.help.help_links['razorpay-settings'] = [
 	{ label: 'Razorpay Settings', url: docsUrl + 'user/manual/en/setting-up/integrations/razorpay-integration' },
 ]
 
-frappe.help.help_links['Form/Dropbox Settings'] = [
+frappe.help.help_links['dropbox-settings'] = [
 	{ label: 'Dropbox Settings', url: docsUrl + 'user/manual/en/setting-up/integrations/dropbox-backup' },
 ]
 
-frappe.help.help_links['Form/LDAP Settings'] = [
+frappe.help.help_links['ldap-settings'] = [
 	{ label: 'LDAP Settings', url: docsUrl + 'user/manual/en/setting-up/integrations/ldap-integration' },
 ]
 
-frappe.help.help_links['Form/Stripe Settings'] = [
+frappe.help.help_links['stripe-settings'] = [
 	{ label: 'Stripe Settings', url: docsUrl + 'user/manual/en/setting-up/integrations/stripe-integration' },
 ]
 
 //Sales
 
-frappe.help.help_links['Form/Quotation'] = [
+frappe.help.help_links['quotation'] = [
 	{ label: 'Quotation', url: docsUrl + 'user/manual/en/selling/quotation' },
 	{ label: 'Applying Discount', url: docsUrl + 'user/manual/en/selling/articles/applying-discount' },
 	{ label: 'Sales Person', url: docsUrl + 'user/manual/en/selling/articles/sales-persons-in-the-sales-transactions' },
 	{ label: 'Applying Margin', url: docsUrl + 'user/manual/en/selling/articles/adding-margin' },
 ]
 
-frappe.help.help_links['List/Customer'] = [
+frappe.help.help_links['customer'] = [
 	{ label: 'Customer', url: docsUrl + 'user/manual/en/CRM/customer' },
 	{ label: 'Credit Limit', url: docsUrl + 'user/manual/en/accounts/credit-limit' },
 ]
 
-frappe.help.help_links['Form/Customer'] = [
+frappe.help.help_links['customer'] = [
 	{ label: 'Customer', url: docsUrl + 'user/manual/en/CRM/customer' },
 	{ label: 'Credit Limit', url: docsUrl + 'user/manual/en/accounts/credit-limit' },
 ]
 
-frappe.help.help_links['List/Sales Taxes and Charges Template'] = [
+frappe.help.help_links['sales-taxes-and-charges-template'] = [
 	{ label: 'Setting Up Taxes', url: docsUrl + 'user/manual/en/setting-up/setting-up-taxes' },
 ]
 
-frappe.help.help_links['Form/Sales Taxes and Charges Template'] = [
+frappe.help.help_links['sales-taxes-and-charges-template'] = [
 	{ label: 'Setting Up Taxes', url: docsUrl + 'user/manual/en/setting-up/setting-up-taxes' },
 ]
 
-frappe.help.help_links['List/Sales Order'] = [
-	{ label: 'Sales Order', url: docsUrl + 'user/manual/en/selling/sales-order' },
-	{ label: 'Recurring Sales Order', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' },
-	{ label: 'Applying Discount', url: docsUrl + 'user/manual/en/selling/articles/applying-discount' },
-]
-
-frappe.help.help_links['Form/Sales Order'] = [
+frappe.help.help_links['sales-order'] = [
 	{ label: 'Sales Order', url: docsUrl + 'user/manual/en/selling/sales-order' },
 	{ label: 'Recurring Sales Order', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' },
 	{ label: 'Applying Discount', url: docsUrl + 'user/manual/en/selling/articles/applying-discount' },
@@ -164,43 +154,34 @@
 	{ label: 'Applying Margin', url: docsUrl + 'user/manual/en/selling/articles/adding-margin' },
 ]
 
-frappe.help.help_links['Form/Product Bundle'] = [
+frappe.help.help_links['product-bundle'] = [
 	{ label: 'Product Bundle', url: docsUrl + 'user/manual/en/selling/setup/product-bundle' },
 ]
 
-frappe.help.help_links['Form/Selling Settings'] = [
+frappe.help.help_links['selling-settings'] = [
 	{ label: 'Selling Settings', url: docsUrl + 'user/manual/en/selling/setup/selling-settings' },
 ]
 
 //Buying
 
-frappe.help.help_links['List/Supplier'] = [
+frappe.help.help_links['supplier'] = [
 	{ label: 'Supplier', url: docsUrl + 'user/manual/en/buying/supplier' },
 ]
 
-frappe.help.help_links['Form/Supplier'] = [
-	{ label: 'Supplier', url: docsUrl + 'user/manual/en/buying/supplier' },
-]
-
-frappe.help.help_links['Form/Request for Quotation'] = [
+frappe.help.help_links['request-for-quotation'] = [
 	{ label: 'Request for Quotation', url: docsUrl + 'user/manual/en/buying/request-for-quotation' },
 	{ label: 'RFQ Video', url: docsUrl + 'user/videos/learn/request-for-quotation.html' },
 ]
 
-frappe.help.help_links['Form/Supplier Quotation'] = [
+frappe.help.help_links['supplier-quotation'] = [
 	{ label: 'Supplier Quotation', url: docsUrl + 'user/manual/en/buying/supplier-quotation' },
 ]
 
-frappe.help.help_links['Form/Buying Settings'] = [
+frappe.help.help_links['buying-settings'] = [
 	{ label: 'Buying Settings', url: docsUrl + 'user/manual/en/buying/setup/buying-settings' },
 ]
 
-frappe.help.help_links['List/Purchase Order'] = [
-	{ label: 'Purchase Order', url: docsUrl + 'user/manual/en/buying/purchase-order' },
-	{ label: 'Recurring Purchase Order', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' },
-]
-
-frappe.help.help_links['Form/Purchase Order'] = [
+frappe.help.help_links['purchase-order'] = [
 	{ label: 'Purchase Order', url: docsUrl + 'user/manual/en/buying/purchase-order' },
 	{ label: 'Item UoM', url: docsUrl + 'user/manual/en/buying/articles/purchasing-in-different-unit' },
 	{ label: 'Supplier Item Code', url: docsUrl + 'user/manual/en/buying/articles/maintaining-suppliers-part-no-in-item' },
@@ -208,44 +189,44 @@
 	{ label: 'Subcontracting', url: docsUrl + 'user/manual/en/manufacturing/subcontracting' },
 ]
 
-frappe.help.help_links['List/Purchase Taxes and Charges Template'] = [
+frappe.help.help_links['purchase-taxes-and-charges-template'] = [
 	{ label: 'Setting Up Taxes', url: docsUrl + 'user/manual/en/setting-up/setting-up-taxes' },
 ]
 
-frappe.help.help_links['List/POS Profile'] = [
+frappe.help.help_links['pos-profile'] = [
 	{ label: 'POS Profile', url: docsUrl + 'user/manual/en/setting-up/pos-setting' },
 ]
 
-frappe.help.help_links['List/Price List'] = [
+frappe.help.help_links['price-list'] = [
 	{ label: 'Price List', url: docsUrl + 'user/manual/en/setting-up/price-lists' },
 ]
 
-frappe.help.help_links['List/Authorization Rule'] = [
+frappe.help.help_links['authorization-rule'] = [
 	{ label: 'Authorization Rule', url: docsUrl + 'user/manual/en/setting-up/authorization-rule' },
 ]
 
-frappe.help.help_links['Form/SMS Settings'] = [
+frappe.help.help_links['sms-settings'] = [
 	{ label: 'SMS Settings', url: docsUrl + 'user/manual/en/setting-up/sms-setting' },
 ]
 
-frappe.help.help_links['List/Stock Reconciliation'] = [
+frappe.help.help_links['stock-reconciliation'] = [
 	{ label: 'Stock Reconciliation', url: docsUrl + 'user/manual/en/setting-up/stock-reconciliation-for-non-serialized-item' },
 ]
 
-frappe.help.help_links['Tree/Territory'] = [
+frappe.help.help_links['territory/view/tree'] = [
 	{ label: 'Territory', url: docsUrl + 'user/manual/en/setting-up/territory' },
 ]
 
-frappe.help.help_links['Form/Dropbox Backup'] = [
+frappe.help.help_links['dropbox-backup'] = [
 	{ label: 'Dropbox Backup', url: docsUrl + 'user/manual/en/setting-up/third-party-backups' },
 	{ label: 'Setting Up Dropbox Backup', url: docsUrl + 'user/manual/en/setting-up/articles/setting-up-dropbox-backups' },
 ]
 
-frappe.help.help_links['List/Workflow'] = [
+frappe.help.help_links['workflow'] = [
 	{ label: 'Workflow', url: docsUrl + 'user/manual/en/setting-up/workflows' },
 ]
 
-frappe.help.help_links['List/Company'] = [
+frappe.help.help_links['company'] = [
 	{ label: 'Company', url: docsUrl + 'user/manual/en/setting-up/company-setup' },
 	{ label: 'Managing Multiple Companies', url: docsUrl + 'user/manual/en/setting-up/articles/managing-multiple-companies' },
 	{ label: 'Delete All Related Transactions for a Company', url: docsUrl + 'user/manual/en/setting-up/articles/delete-a-company-and-all-related-transactions' },
@@ -253,25 +234,25 @@
 
 //Accounts
 
-frappe.help.help_links['modules/Accounts'] = [
+frappe.help.help_links['space/Accounts'] = [
 	{ label: 'Introduction to Accounts', url: docsUrl + 'user/manual/en/accounts/' },
 	{ label: 'Chart of Accounts', url: docsUrl + 'user/manual/en/accounts/chart-of-accounts.html' },
 	{ label: 'Multi Currency Accounting', url: docsUrl + 'user/manual/en/accounts/multi-currency-accounting' },
 ]
 
-frappe.help.help_links['Tree/Account'] = [
+frappe.help.help_links['account/view/tree'] = [
 	{ label: 'Chart of Accounts', url: docsUrl + 'user/manual/en/accounts/chart-of-accounts' },
 	{ label: 'Managing Tree Mastes', url: docsUrl + 'user/manual/en/setting-up/articles/managing-tree-structure-masters' },
 ]
 
-frappe.help.help_links['Form/Sales Invoice'] = [
+frappe.help.help_links['sales-invoice'] = [
 	{ label: 'Sales Invoice', url: docsUrl + 'user/manual/en/accounts/sales-invoice' },
 	{ label: 'Accounts Opening Balance', url: docsUrl + 'user/manual/en/accounts/opening-accounts' },
 	{ label: 'Sales Return', url: docsUrl + 'user/manual/en/stock/sales-return' },
 	{ label: 'Recurring Sales Invoice', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' },
 ]
 
-frappe.help.help_links['List/Sales Invoice'] = [
+frappe.help.help_links['sales-invoice'] = [
 	{ label: 'Sales Invoice', url: docsUrl + 'user/manual/en/accounts/sales-invoice' },
 	{ label: 'Accounts Opening Balance', url: docsUrl + 'user/manual/en/accounts/opening-accounts' },
 	{ label: 'Sales Return', url: docsUrl + 'user/manual/en/stock/sales-return' },
@@ -282,43 +263,43 @@
 	{ label: 'Point of Sale Invoice', url: docsUrl + 'user/manual/en/accounts/point-of-sale-pos-invoice' },
 ]
 
-frappe.help.help_links['List/POS Profile'] = [
+frappe.help.help_links['pos-profile'] = [
 	{ label: 'Point of Sale Profile', url: docsUrl + 'user/manual/en/setting-up/pos-setting' },
 ]
 
-frappe.help.help_links['List/Purchase Invoice'] = [
+frappe.help.help_links['purchase-invoice'] = [
 	{ label: 'Purchase Invoice', url: docsUrl + 'user/manual/en/accounts/purchase-invoice' },
 	{ label: 'Accounts Opening Balance', url: docsUrl + 'user/manual/en/accounts/opening-accounts' },
 	{ label: 'Recurring Purchase Invoice', url: docsUrl + 'user/manual/en/accounts/recurring-orders-and-invoices' },
 ]
 
-frappe.help.help_links['List/Journal Entry'] = [
+frappe.help.help_links['journal-entry'] = [
 	{ label: 'Journal Entry', url: docsUrl + 'user/manual/en/accounts/journal-entry' },
 	{ label: 'Advance Payment Entry', url: docsUrl + 'user/manual/en/accounts/advance-payment-entry' },
 	{ label: 'Accounts Opening Balance', url: docsUrl + 'user/manual/en/accounts/opening-accounts' },
 ]
 
-frappe.help.help_links['List/Payment Entry'] = [
+frappe.help.help_links['payment-entry'] = [
 	{ label: 'Payment Entry', url: docsUrl + 'user/manual/en/accounts/payment-entry' },
 ]
 
-frappe.help.help_links['List/Payment Request'] = [
+frappe.help.help_links['payment-request'] = [
 	{ label: 'Payment Request', url: docsUrl + 'user/manual/en/accounts/payment-request' },
 ]
 
-frappe.help.help_links['List/Asset'] = [
+frappe.help.help_links['asset'] = [
 	{ label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' },
 ]
 
-frappe.help.help_links['List/Asset Category'] = [
+frappe.help.help_links['asset-category'] = [
 	{ label: 'Asset Category', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' },
 ]
 
-frappe.help.help_links['Tree/Cost Center'] = [
+frappe.help.help_links['cost-center/view/tree'] = [
 	{ label: 'Budgeting', url: docsUrl + 'user/manual/en/accounts/budgeting' },
 ]
 
-frappe.help.help_links['List/Item'] = [
+frappe.help.help_links['item'] = [
 	{ label: 'Item', url: docsUrl + 'user/manual/en/stock/item' },
 	{ label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' },
 	{ label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' },
@@ -329,61 +310,42 @@
 	{ label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' },
 ]
 
-frappe.help.help_links['Form/Item'] = [
-	{ label: 'Item', url: docsUrl + 'user/manual/en/stock/item' },
-	{ label: 'Item Price', url: docsUrl + 'user/manual/en/stock/item/item-price' },
-	{ label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' },
-	{ label: 'Item Wise Taxation', url: docsUrl + 'user/manual/en/accounts/item-wise-taxation' },
-	{ label: 'Managing Fixed Assets', url: docsUrl + 'user/manual/en/accounts/managing-fixed-assets' },
-	{ label: 'Item Codification', url: docsUrl + 'user/manual/en/stock/item/item-codification' },
-	{ label: 'Item Variants', url: docsUrl + 'user/manual/en/stock/item/item-variants' },
-	{ label: 'Item Valuation', url: docsUrl + 'user/manual/en/stock/item/item-valuation-fifo-and-moving-average' },
-]
-
-frappe.help.help_links['List/Purchase Receipt'] = [
+frappe.help.help_links['purchase-receipt'] = [
 	{ label: 'Purchase Receipt', url: docsUrl + 'user/manual/en/stock/purchase-receipt' },
 	{ label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' },
 ]
 
-frappe.help.help_links['List/Delivery Note'] = [
+frappe.help.help_links['delivery-note'] = [
 	{ label: 'Delivery Note', url: docsUrl + 'user/manual/en/stock/delivery-note' },
 	{ label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' },
 	{ label: 'Sales Return', url: docsUrl + 'user/manual/en/stock/sales-return' },
 ]
 
-frappe.help.help_links['Form/Delivery Note'] = [
+frappe.help.help_links['delivery-note'] = [
 	{ label: 'Delivery Note', url: docsUrl + 'user/manual/en/stock/delivery-note' },
 	{ label: 'Sales Return', url: docsUrl + 'user/manual/en/stock/sales-return' },
 	{ label: 'Barcode', url: docsUrl + 'user/manual/en/stock/articles/track-items-using-barcode' },
 	{ label: 'Subcontracting', url: docsUrl + 'user/manual/en/manufacturing/subcontracting' },
 ]
 
-frappe.help.help_links['List/Installation Note'] = [
+frappe.help.help_links['installation-note'] = [
 	{ label: 'Installation Note', url: docsUrl + 'user/manual/en/stock/installation-note' },
 ]
 
 
-frappe.help.help_links['Tree'] = [
-	{ label: 'Managing Tree Structure Masters', url: docsUrl + 'user/manual/en/setting-up/articles/managing-tree-structure-masters' },
-]
 
-frappe.help.help_links['List/Budget'] = [
+frappe.help.help_links['budget'] = [
 	{ label: 'Budgeting', url: docsUrl + 'user/manual/en/accounts/budgeting' },
 ]
 
 //Stock
 
-frappe.help.help_links['List/Material Request'] = [
+frappe.help.help_links['material-request'] = [
 	{ label: 'Material Request', url: docsUrl + 'user/manual/en/stock/material-request' },
 	{ label: 'Auto-creation of Material Request', url: docsUrl + 'user/manual/en/stock/articles/auto-creation-of-material-request' },
 ]
 
-frappe.help.help_links['Form/Material Request'] = [
-	{ label: 'Material Request', url: docsUrl + 'user/manual/en/stock/material-request' },
-	{ label: 'Auto-creation of Material Request', url: docsUrl + 'user/manual/en/stock/articles/auto-creation-of-material-request' },
-]
-
-frappe.help.help_links['Form/Stock Entry'] = [
+frappe.help.help_links['stock-entry'] = [
 	{ label: 'Stock Entry', url: docsUrl + 'user/manual/en/stock/stock-entry' },
 	{ label: 'Stock Entry Types', url: docsUrl + 'user/manual/en/stock/articles/stock-entry-purpose' },
 	{ label: 'Repack Entry', url: docsUrl + 'user/manual/en/stock/articles/repack-entry' },
@@ -391,136 +353,114 @@
 	{ label: 'Subcontracting', url: docsUrl + 'user/manual/en/manufacturing/subcontracting' },
 ]
 
-frappe.help.help_links['List/Stock Entry'] = [
-	{ label: 'Stock Entry', url: docsUrl + 'user/manual/en/stock/stock-entry' },
-]
-
-frappe.help.help_links['Tree/Warehouse'] = [
+frappe.help.help_links['warehouse/view/tree'] = [
 	{ label: 'Warehouse', url: docsUrl + 'user/manual/en/stock/warehouse' },
 ]
 
-frappe.help.help_links['List/Serial No'] = [
+frappe.help.help_links['serial-no'] = [
 	{ label: 'Serial No', url: docsUrl + 'user/manual/en/stock/serial-no' },
 ]
 
-frappe.help.help_links['Form/Serial No'] = [
-	{ label: 'Serial No', url: docsUrl + 'user/manual/en/stock/serial-no' },
-]
-
-frappe.help.help_links['Form/Batch'] = [
+frappe.help.help_links['batch'] = [
 	{ label: 'Batch', url: docsUrl + 'user/manual/en/stock/batch' },
 ]
 
-frappe.help.help_links['Form/Packing Slip'] = [
+frappe.help.help_links['packing-slip'] = [
 	{ label: 'Packing Slip', url: docsUrl + 'user/manual/en/stock/tools/packing-slip' },
 ]
 
-frappe.help.help_links['Form/Quality Inspection'] = [
+frappe.help.help_links['quality-inspection'] = [
 	{ label: 'Quality Inspection', url: docsUrl + 'user/manual/en/stock/tools/quality-inspection' },
 ]
 
-frappe.help.help_links['Form/Landed Cost Voucher'] = [
+frappe.help.help_links['landed-cost-voucher'] = [
 	{ label: 'Landed Cost Voucher', url: docsUrl + 'user/manual/en/stock/tools/landed-cost-voucher' },
 ]
 
-frappe.help.help_links['Tree/Item Group'] = [
+frappe.help.help_links['item-group/view/tree'] = [
 	{ label: 'Item Group', url: docsUrl + 'user/manual/en/stock/setup/item-group' },
 ]
 
-frappe.help.help_links['Form/Item Attribute'] = [
+frappe.help.help_links['item-attribute'] = [
 	{ label: 'Item Attribute', url: docsUrl + 'user/manual/en/stock/setup/item-attribute' },
 ]
 
-frappe.help.help_links['Form/UOM'] = [
+frappe.help.help_links['uom'] = [
 	{ label: 'Fractions in UOM', url: docsUrl + 'user/manual/en/stock/articles/managing-fractions-in-uom' },
 ]
 
-frappe.help.help_links['Form/Stock Reconciliation'] = [
+frappe.help.help_links['stock-reconciliation'] = [
 	{ label: 'Opening Stock Entry', url: docsUrl + 'user/manual/en/stock/opening-stock' },
 ]
 
 //CRM
 
-frappe.help.help_links['Form/Lead'] = [
+frappe.help.help_links['lead'] = [
 	{ label: 'Lead', url: docsUrl + 'user/manual/en/CRM/lead' },
 ]
 
-frappe.help.help_links['Form/Opportunity'] = [
+frappe.help.help_links['opportunity'] = [
 	{ label: 'Opportunity', url: docsUrl + 'user/manual/en/CRM/opportunity' },
 ]
 
-frappe.help.help_links['Form/Address'] = [
+frappe.help.help_links['address'] = [
 	{ label: 'Address', url: docsUrl + 'user/manual/en/CRM/address' },
 ]
 
-frappe.help.help_links['Form/Contact'] = [
+frappe.help.help_links['contact'] = [
 	{ label: 'Contact', url: docsUrl + 'user/manual/en/CRM/contact' },
 ]
 
-frappe.help.help_links['Form/Newsletter'] = [
+frappe.help.help_links['newsletter'] = [
 	{ label: 'Newsletter', url: docsUrl + 'user/manual/en/CRM/newsletter' },
 ]
 
-frappe.help.help_links['Form/Campaign'] = [
+frappe.help.help_links['campaign'] = [
 	{ label: 'Campaign', url: docsUrl + 'user/manual/en/CRM/setup/campaign' },
 ]
 
-frappe.help.help_links['Tree/Sales Person'] = [
+frappe.help.help_links['sales-person/view/tree'] = [
 	{ label: 'Sales Person', url: docsUrl + 'user/manual/en/CRM/setup/sales-person' },
 ]
 
-frappe.help.help_links['Form/Sales Person'] = [
+frappe.help.help_links['sales-person'] = [
 	{ label: 'Sales Person Target', url: docsUrl + 'user/manual/en/selling/setup/sales-person-target-allocation' },
 ]
 
-//Support
-
-frappe.help.help_links['List/Feedback Trigger'] = [
-	{ label: 'Feedback Trigger', url: docsUrl + 'user/manual/en/setting-up/feedback/setting-up-feedback' },
-]
-
-frappe.help.help_links['List/Feedback Request'] = [
-	{ label: 'Feedback Request', url: docsUrl + 'user/manual/en/setting-up/feedback/submit-feedback' },
-]
-
-frappe.help.help_links['List/Feedback Request'] = [
-	{ label: 'Feedback Request', url: docsUrl + 'user/manual/en/setting-up/feedback/submit-feedback' },
-]
-
 //Manufacturing
 
-frappe.help.help_links['Form/BOM'] = [
+frappe.help.help_links['bom'] = [
 	{ label: 'Bill of Material', url: docsUrl + 'user/manual/en/manufacturing/bill-of-materials' },
 	{ label: 'Nested BOM Structure', url: docsUrl + 'user/manual/en/manufacturing/articles/nested-bom-structure' },
 ]
 
-frappe.help.help_links['Form/Work Order'] = [
+frappe.help.help_links['work-order'] = [
 	{ label: 'Work Order', url: docsUrl + 'user/manual/en/manufacturing/work-order' },
 ]
 
-frappe.help.help_links['Form/Workstation'] = [
+frappe.help.help_links['workstation'] = [
 	{ label: 'Workstation', url: docsUrl + 'user/manual/en/manufacturing/workstation' },
 ]
 
-frappe.help.help_links['Form/Operation'] = [
+frappe.help.help_links['operation'] = [
 	{ label: 'Operation', url: docsUrl + 'user/manual/en/manufacturing/operation' },
 ]
 
-frappe.help.help_links['Form/BOM Update Tool'] = [
+frappe.help.help_links['bom-update-tool'] = [
 	{ label: 'BOM Update Tool', url: docsUrl + 'user/manual/en/manufacturing/tools/bom-update-tool' },
 ]
 
 //Customize
 
-frappe.help.help_links['Form/Customize Form'] = [
+frappe.help.help_links['customize-form'] = [
 	{ label: 'Custom Field', url: docsUrl + 'user/manual/en/customize-erpnext/custom-field' },
 	{ label: 'Customize Field', url: docsUrl + 'user/manual/en/customize-erpnext/customize-form' },
 ]
 
-frappe.help.help_links['Form/Custom Field'] = [
+frappe.help.help_links['custom-field'] = [
 	{ label: 'Custom Field', url: docsUrl + 'user/manual/en/customize-erpnext/custom-field' },
 ]
 
-frappe.help.help_links['Form/Custom Field'] = [
+frappe.help.help_links['custom-field'] = [
 	{ label: 'Custom Field', url: docsUrl + 'user/manual/en/customize-erpnext/custom-field' },
 ]
diff --git a/erpnext/public/js/telephony.js b/erpnext/public/js/telephony.js
index f9caade..6cb1207 100644
--- a/erpnext/public/js/telephony.js
+++ b/erpnext/public/js/telephony.js
@@ -11,7 +11,7 @@
 				.append(`
 					<span class="phone-btn">
 						<a class="btn-open no-decoration" title="${__('Make a call')}">
-							<i class="fa fa-phone"></i></a>
+							${frappe.utils.icon('call')}
 					</span>
 				`)
 				.find('.phone-btn')
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index 1cb71ae..842566b 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -327,7 +327,7 @@
 									if(r.message) {
 										frappe.msgprint({
 											message: __('Work Orders Created: {0}', [r.message.map(function(d) {
-													return repl('<a href="#Form/Work Order/%(name)s">%(name)s</a>', {name:d})
+													return repl('<a href="/app/work-order/%(name)s">%(name)s</a>', {name:d})
 												}).join(', ')]),
 											indicator: 'green'
 										})
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 04d85e5..9388e09 100755
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -14,7 +14,6 @@
 from frappe.desk.notifications import clear_doctype_notifications
 from frappe.contacts.doctype.address.address import get_company_address
 from erpnext.controllers.selling_controller import SellingController
-from frappe.automation.doctype.auto_repeat.auto_repeat import get_next_schedule_date
 from erpnext.selling.doctype.customer.customer import check_credit_limit
 from erpnext.stock.doctype.item.item import get_item_defaults
 from erpnext.setup.doctype.item_group.item_group import get_item_group_defaults
@@ -418,8 +417,7 @@
 	def on_recurring(self, reference_doc, auto_repeat_doc):
 
 		def _get_delivery_date(ref_doc_delivery_date, red_doc_transaction_date, transaction_date):
-			delivery_date = get_next_schedule_date(ref_doc_delivery_date,
-				auto_repeat_doc.frequency, auto_repeat_doc.start_date, cint(auto_repeat_doc.repeat_on_day))
+			delivery_date = auto_repeat_doc.get_next_schedule_date(schedule_date=ref_doc_delivery_date)
 
 			if delivery_date <= transaction_date:
 				delivery_date_diff = frappe.utils.date_diff(ref_doc_delivery_date, red_doc_transaction_date)
diff --git a/erpnext/stock/doctype/shipment/shipment.js b/erpnext/stock/doctype/shipment/shipment.js
index 5ccb7d2..7af16af 100644
--- a/erpnext/stock/doctype/shipment/shipment.js
+++ b/erpnext/stock/doctype/shipment/shipment.js
@@ -150,7 +150,9 @@
 							frm.set_value('pickup_contact_name', '');
 							frm.set_value('pickup_contact', '');
 						}
-						frappe.throw(__("Email or Phone/Mobile of the Contact are mandatory to continue.") + "</br>" + __("Please set Email/Phone for the contact") + ` <a href='#Form/Contact/${contact_name}'>${contact_name}</a>`);
+						frappe.throw(__("Email or Phone/Mobile of the Contact are mandatory to continue.") 
+							+ "</br>" + __("Please set Email/Phone for the contact") 
+							+ ` <a href='/app/contact/${contact_name}'>${contact_name}</a>`);
 					}
 					let contact_display = r.message.contact_display;
 					if (r.message.contact_email) {
@@ -242,7 +244,9 @@
 					frm.set_value('pickup_company', '');
 					frm.set_value('pickup_contact', '');
 				}
-				frappe.throw(__("Last Name, Email or Phone/Mobile of the user are mandatory to continue.") + "</br>" + __("Please first set Last Name, Email and Phone for the user") + ` <a href="#Form/User/${frappe.session.user}">${frappe.session.user}</a>`);
+				frappe.throw(__("Last Name, Email or Phone/Mobile of the user are mandatory to continue.") + "</br>" 
+					+ __("Please first set Last Name, Email and Phone for the user") 
+					+ ` <a href="/app/user/${frappe.session.user}">${frappe.session.user}</a>`);
 			}
 			let contact_display = r.full_name;
 			if (r.email) {