From aea1c2a1e3b0add047f7d1528c3df8f49324dab0 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 9 Mar 2017 12:46:51 +0530 Subject: [PATCH 1/3] [minor] allow sales order delivery date before order date --- erpnext/selling/doctype/sales_order/sales_order.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index acae0e539c..ab93d1468b 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -50,7 +50,9 @@ class SalesOrder(SellingController): # validate transaction date v/s delivery date if self.delivery_date: if getdate(self.transaction_date) > getdate(self.delivery_date): - frappe.throw(_("Expected Delivery Date cannot be before Sales Order Date")) + frappe.msgprint(_("Expected Delivery Date is be before Sales Order Date"), + indicator='orange', + title=_('Warning')) def validate_po(self): # validate p.o date v/s delivery date @@ -81,7 +83,8 @@ class SalesOrder(SellingController): unique_chk_list = set(check_list) if len(unique_chk_list) != len(check_list) and \ not cint(frappe.db.get_single_value("Selling Settings", "allow_multiple_items")): - frappe.msgprint(_("Warning: Same item has been entered multiple times.")) + frappe.msgprint(_("Same item has been entered multiple times"), + title=_("Warning"), indicator='orange') def product_bundle_has_stock_item(self, product_bundle): """Returns true if product bundle has stock item""" @@ -442,7 +445,7 @@ def make_sales_invoice(source_name, target_doc=None, ignore_permissions=False): target.amount = flt(source.amount) - flt(source.billed_amt) target.base_amount = target.amount * flt(source_parent.conversion_rate) target.qty = target.amount / flt(source.rate) if (source.rate and source.billed_amt) else source.qty - + item = frappe.db.get_value("Item", target.item_code, ["item_group", "selling_cost_center"], as_dict=1) target.cost_center = frappe.db.get_value("Project", source_parent.project, "cost_center") \ or item.selling_cost_center \ From 868bb26e2455a8dec6271fc05cf8700967e44a45 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 9 Mar 2017 18:11:11 +0530 Subject: [PATCH 2/3] [sample] add help for sample tasks and make them into notifications --- erpnext/setup/setup_wizard/domainify.py | 14 +-- erpnext/setup/setup_wizard/sample_data.py | 116 +++++++++++++----- erpnext/setup/setup_wizard/setup_wizard.py | 2 +- erpnext/setup/setup_wizard/tasks/explore.md | 14 +++ erpnext/setup/setup_wizard/tasks/go_live.md | 21 ++++ .../setup/setup_wizard/tasks/import_data.md | 8 ++ erpnext/setup/setup_wizard/tasks/masters.md | 14 +++ erpnext/setup/setup_wizard/tasks/purchase.md | 13 ++ erpnext/setup/setup_wizard/tasks/sales.md | 17 +++ .../setup_wizard/tasks/school_go_live.md | 20 +++ .../setup_wizard/tasks/school_import_data.md | 8 ++ .../setup_wizard/tasks/school_masters.md | 11 ++ .../setup_wizard/tasks/school_operations.md | 11 ++ .../setup/setup_wizard/tasks/task_alert.json | 28 +++++ erpnext/startup/notifications.py | 8 +- 15 files changed, 265 insertions(+), 40 deletions(-) create mode 100644 erpnext/setup/setup_wizard/tasks/explore.md create mode 100644 erpnext/setup/setup_wizard/tasks/go_live.md create mode 100644 erpnext/setup/setup_wizard/tasks/import_data.md create mode 100644 erpnext/setup/setup_wizard/tasks/masters.md create mode 100644 erpnext/setup/setup_wizard/tasks/purchase.md create mode 100644 erpnext/setup/setup_wizard/tasks/sales.md create mode 100644 erpnext/setup/setup_wizard/tasks/school_go_live.md create mode 100644 erpnext/setup/setup_wizard/tasks/school_import_data.md create mode 100644 erpnext/setup/setup_wizard/tasks/school_masters.md create mode 100644 erpnext/setup/setup_wizard/tasks/school_operations.md create mode 100644 erpnext/setup/setup_wizard/tasks/task_alert.json diff --git a/erpnext/setup/setup_wizard/domainify.py b/erpnext/setup/setup_wizard/domainify.py index 14e2f3354a..f6f8defcfa 100644 --- a/erpnext/setup/setup_wizard/domainify.py +++ b/erpnext/setup/setup_wizard/domainify.py @@ -22,8 +22,8 @@ def get_domain(domain): }, 'Retail': { - 'desktop_icons': ['POS', 'Item', 'Customer', 'Sales Invoice', 'Purchase Order', 'Warranty Claim', - 'Accounts', 'Buying', 'ToDo'], + 'desktop_icons': ['POS', 'Item', 'Customer', 'Sales Invoice', 'Purchase Order', + 'Warranty Claim', 'Accounts', 'Task', 'Buying', 'ToDo'], 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User'], 'properties': [ {'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'hidden', 'value': 1}, @@ -36,7 +36,7 @@ def get_domain(domain): }, 'Distribution': { - 'desktop_icons': ['Item', 'Customer', 'Supplier', 'Lead', 'Sales Order', + 'desktop_icons': ['Item', 'Customer', 'Supplier', 'Lead', 'Sales Order', 'Task', 'Sales Invoice', 'CRM', 'Selling', 'Buying', 'Stock', 'Accounts', 'HR', 'ToDo'], 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User'], 'set_value': [ @@ -46,8 +46,8 @@ def get_domain(domain): }, 'Services': { - 'desktop_icons': ['Project', 'Timesheet', 'Customer', 'Sales Order', 'Sales Invoice', 'Lead', 'Opportunity', - 'Expense Claim', 'Employee', 'HR', 'ToDo'], + 'desktop_icons': ['Project', 'Timesheet', 'Customer', 'Sales Order', 'Sales Invoice', + 'Lead', 'Opportunity', 'Task', 'Expense Claim', 'Employee', 'HR', 'ToDo'], 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User'], 'properties': [ {'doctype': 'Item', 'fieldname': 'is_stock_item', 'property': 'default', 'value': 0}, @@ -59,10 +59,10 @@ def get_domain(domain): }, 'Education': { 'desktop_icons': ['Student', 'Program', 'Course', 'Student Group', 'Instructor', - 'Fees', 'ToDo', 'Schools'], + 'Fees', 'Task', 'ToDo', 'Schools'], 'allow_roles': ['Academics User', 'Accounts User', 'Accounts Manager', 'Item Manager', 'Website Manager', 'HR User', 'HR Manager', 'Purchase User', 'Purchase Manager', - 'Student'], + 'Student', 'Projects User'], 'default_portal_role': 'Student' }, } diff --git a/erpnext/setup/setup_wizard/sample_data.py b/erpnext/setup/setup_wizard/sample_data.py index 955f6633ca..40b4f2e55c 100644 --- a/erpnext/setup/setup_wizard/sample_data.py +++ b/erpnext/setup/setup_wizard/sample_data.py @@ -6,9 +6,11 @@ from __future__ import unicode_literals import frappe from frappe.utils.make_random import add_random_children import frappe.utils -import random +import random, os, json +from frappe import _ +from markdown2 import markdown -def make_sample_data(): +def make_sample_data(args): """Create a few opportunities, quotes, material requests, issues, todos, projects to help the user get started""" items = frappe.get_all("Item", {'is_sales_item': 1}) @@ -22,7 +24,8 @@ def make_sample_data(): make_opportunity(items, customer) make_quote(items, customer) - make_projects() + make_projects(args.get('domain')) + import_email_alert() if items and warehouses: make_material_request(frappe.get_all("Item")) @@ -84,42 +87,99 @@ def make_material_request(items): def make_issue(): pass -def make_projects(): +def make_projects(domain): + current_date = frappe.utils.nowdate() project = frappe.get_doc({ "doctype": "Project", "project_name": "ERPNext Implementation", }) - current_date = frappe.utils.nowdate() - project.set("tasks", [ + + tasks = [ + { + "title": "Explore ERPNext", + "start_date": current_date, + "end_date": current_date, + "file": "explore.md" + }] + + if domain == 'Education': + tasks += [ { - "title": "Explore ERPNext", - "start_date": frappe.utils.add_days(current_date, 1), - "end_date": frappe.utils.add_days(current_date, 2) + "title": _("Setup Master Data"), + "start_date": current_date, + "end_date": frappe.utils.add_days(current_date, 1), + "file": "school_masters.md" }, { - "title": "Run Sales Cycle", - "start_date": frappe.utils.add_days(current_date, 2), - "end_date": frappe.utils.add_days(current_date, 3) + "title": _("Manage Operations"), + "start_date": current_date, + "end_date": frappe.utils.add_days(current_date, 2), + "file": "school_operations.md" }, { - "title": "Run Billing Cycle", - "start_date": frappe.utils.add_days(current_date, 3), - "end_date": frappe.utils.add_days(current_date, 4) - }, - { - "title": "Run Purchase Cycle", - "start_date": frappe.utils.add_days(current_date, 4), - "end_date": frappe.utils.add_days(current_date, 5) - }, - { - "title": "Import Data", - "start_date": frappe.utils.add_days(current_date, 5), - "end_date": frappe.utils.add_days(current_date, 6) + "title": _("Import Data"), + "start_date": current_date, + "end_date": frappe.utils.add_days(current_date, 3), + "file": "school_import_data.md" }, { "title": "Go Live!", - "start_date": frappe.utils.add_days(current_date, 6), - "end_date": frappe.utils.add_days(current_date, 7) - }]) + "start_date": current_date, + "end_date": frappe.utils.add_days(current_date, 4), + "file": "school_go_live.md" + }] + + else: + tasks += [ + { + "title": "Setup Master Data", + "start_date": current_date, + "end_date": frappe.utils.add_days(current_date, 1), + "file": "masters.md" + }, + { + "title": "Try a Sales Cycle", + "start_date": current_date, + "end_date": frappe.utils.add_days(current_date, 2), + "file": "sales.md" + }, + { + "title": "Try a Purchase Cycle", + "start_date": current_date, + "end_date": frappe.utils.add_days(current_date, 3), + "file": "purchase.md" + }, + { + "title": "Import Data", + "start_date": current_date, + "end_date": frappe.utils.add_days(current_date, 4), + "file": "import_data.md" + }, + { + "title": "Go Live!", + "start_date": current_date, + "end_date": frappe.utils.add_days(current_date, 5), + "file": "go_live.md" + }] + + for t in tasks: + with open (os.path.join(os.path.dirname(__file__), "tasks", t['file'])) as f: + t['description'] = markdown(f.read()) + del t['file'] + + project.append('tasks', t) project.insert(ignore_permissions=True) + +def import_email_alert(): + '''Import email alert for task start''' + with open (os.path.join(os.path.dirname(__file__), "tasks/task_alert.json")) as f: + email_alert = frappe.get_doc(json.loads(f.read())[0]) + email_alert.insert() + +def test_sample(): + frappe.db.sql('delete from `tabEmail Alert`') + frappe.db.sql('delete from tabProject') + frappe.db.sql('delete from tabTask') + make_projects('Education') + import_email_alert() \ No newline at end of file diff --git a/erpnext/setup/setup_wizard/setup_wizard.py b/erpnext/setup/setup_wizard/setup_wizard.py index 395ea51d3c..41b978c8c1 100644 --- a/erpnext/setup/setup_wizard/setup_wizard.py +++ b/erpnext/setup/setup_wizard/setup_wizard.py @@ -60,7 +60,7 @@ def setup_complete(args=None): if args.get("add_sample_data"): try: - make_sample_data() + make_sample_data(args) frappe.clear_cache() except: # clear message diff --git a/erpnext/setup/setup_wizard/tasks/explore.md b/erpnext/setup/setup_wizard/tasks/explore.md new file mode 100644 index 0000000000..eebde47dd9 --- /dev/null +++ b/erpnext/setup/setup_wizard/tasks/explore.md @@ -0,0 +1,14 @@ +Thanks for checking this out! ❀️ + +If you are evaluating an ERP system for the first time, this is going to be quite a task! But don't worry, ERPNext is awesome. + +First, let's just get familiar with the surroundings. ERPNext covers a *lot of features*, go to the home page and click on the "Explore" icon. Click on all the modules, and make a list of things you want to do. + +Whats more, you can also update it here: + +Things I like to do in ERPNext + +πŸ‘‡πŸ‘‡πŸ‘‡πŸ‘‡ + +1. +2. \ No newline at end of file diff --git a/erpnext/setup/setup_wizard/tasks/go_live.md b/erpnext/setup/setup_wizard/tasks/go_live.md new file mode 100644 index 0000000000..4e5c1d4ceb --- /dev/null +++ b/erpnext/setup/setup_wizard/tasks/go_live.md @@ -0,0 +1,21 @@ +Ready to go live with ERPNext? + +So lets be clear, + +1. You tried a few cycles in ERPNext +2. You have imported all your records - your model of your organization is complete. +3. You can see the Matrix πŸ™… + +Now lets bring the current "state" of your business into ERPNext. For this you need to do a few more things. + +Warning: This might be tricky, and you can always do this later and you might need the help of your accountant to help you with this. + +1. Sync up your **Chart of Accounts** +3. Add your opening stock using **Stock Reconciliation** +4. Add your open invoices (both sales and purchase) +3. Add your opening account balances by making a **Journal Entry** + +You are now set to go! 🏁 😎 + +If you need help for going live, sign up for an account at erpnext.com or find a partner to help you with this. + diff --git a/erpnext/setup/setup_wizard/tasks/import_data.md b/erpnext/setup/setup_wizard/tasks/import_data.md new file mode 100644 index 0000000000..b5ad91e55d --- /dev/null +++ b/erpnext/setup/setup_wizard/tasks/import_data.md @@ -0,0 +1,8 @@ +Ready for some real stuff? πŸ’ͺ Lets import some data! + +If you are already running a business, you most likely have your Items, Customers or Suppliers in some spreadsheet file somewhere. + +You can quickly get them into ERPNext by using the data import tool. Just type "data import" in the search bar to get started πŸ”Ž + +If you need help, just head to the user forum https://discuss.erpnext.com + diff --git a/erpnext/setup/setup_wizard/tasks/masters.md b/erpnext/setup/setup_wizard/tasks/masters.md new file mode 100644 index 0000000000..2e286deec8 --- /dev/null +++ b/erpnext/setup/setup_wizard/tasks/masters.md @@ -0,0 +1,14 @@ +πŸ’‘Tip: Your ERPNext account is a model of your real business 🏠 + +So what does a business exactly do? + +**You sell products (or services) to a customer** + +To start building a model of your business, you can start with just 2 things: + +1. Customers +2. Items + +Start adding them now! + +Hint: type "Item" in the search bar above πŸ”Ž \ No newline at end of file diff --git a/erpnext/setup/setup_wizard/tasks/purchase.md b/erpnext/setup/setup_wizard/tasks/purchase.md new file mode 100644 index 0000000000..491248d816 --- /dev/null +++ b/erpnext/setup/setup_wizard/tasks/purchase.md @@ -0,0 +1,13 @@ +Already figured out sales? Nice, now lets get to purchasing stuff. + +1. First add a few **Suppliers** +2. Find out what you need by making **Material Requests**. Think of them as stickies πŸ—’ on your refrigerator. +3. Now start placing orders via **Purchase Order**. +4. When your suppliers deliver, make **Purchase Receipts** + +Thats it! + +If you track inventory on your items, they will automatically be added to your stock. + +Now never run out of stock again! 😎 + diff --git a/erpnext/setup/setup_wizard/tasks/sales.md b/erpnext/setup/setup_wizard/tasks/sales.md new file mode 100644 index 0000000000..960a988d90 --- /dev/null +++ b/erpnext/setup/setup_wizard/tasks/sales.md @@ -0,0 +1,17 @@ +ERPNext covers most of what you need to start selling. πŸ”” + +Few terms to get familiar with: + +1. Potential customers are **Leads** +2. Deals in pipeline are **Opportunities** +3. Proposals sent to customers are **Quotations** +4. Confirmed orders are **Sales Orders** +5. Fulfilment (shipment or completion of services) is **Delivery Note** + +The first thing you should probably do is add 5 leads (contact information about prospects who can give you new business). Hint: just type "Lead" in the search bar on the top πŸ”Ž + +Find out if they have any need you can help with and make a few "Opportunities" + +Then send them proposals with "Quotation". Did you know, you can email them directly from ERPNext! 😎 + +See your sales go up up up! πŸ“ˆ \ No newline at end of file diff --git a/erpnext/setup/setup_wizard/tasks/school_go_live.md b/erpnext/setup/setup_wizard/tasks/school_go_live.md new file mode 100644 index 0000000000..e4705074bc --- /dev/null +++ b/erpnext/setup/setup_wizard/tasks/school_go_live.md @@ -0,0 +1,20 @@ +Ready to go live with ERPNext? + +So lets be clear, + +1. You tried a doing a few things in ERPNext +2. You have imported all your records - your model of your school is complete. +3. You can see the Matrix πŸ™… + +Now lets bring the current "state" of your institute into ERPNext -> This includes the standard organization stuff like accounts and inventory management. For this you need to do a few more things. + +Warning: This might be tricky, and you can always do this later and you might need the help of your accountant to help you with this. + +1. Sync up your **Chart of Accounts** +3. Add your opening stock using **Stock Reconciliation** +3. Add your opening account balances by making a **Journal Entry** + +You are now set to go! 🏁 😎 + +If you need help for going live, sign up for an account at erpnext.com or find a partner to help you with this. + diff --git a/erpnext/setup/setup_wizard/tasks/school_import_data.md b/erpnext/setup/setup_wizard/tasks/school_import_data.md new file mode 100644 index 0000000000..9074e9a957 --- /dev/null +++ b/erpnext/setup/setup_wizard/tasks/school_import_data.md @@ -0,0 +1,8 @@ +Ready for some real stuff? πŸ’ͺ Lets import some data! + +If you are already running a school, you most likely have your Students in some spreadsheet file somewhere. + +You can quickly get them into ERPNext by using the data import tool. Just type "data import" in the search bar to get started πŸ”Ž + +If you need help, just head to the user forum https://discuss.erpnext.com + diff --git a/erpnext/setup/setup_wizard/tasks/school_masters.md b/erpnext/setup/setup_wizard/tasks/school_masters.md new file mode 100644 index 0000000000..2e072d1c10 --- /dev/null +++ b/erpnext/setup/setup_wizard/tasks/school_masters.md @@ -0,0 +1,11 @@ +πŸ’‘Tip: Your ERPNext account is a model of your school or college 🏠 + +Lets start making things in ERPNext that are reprentative of your institution. + +1. Make a list of **Programs** that you offer +1. Add a few **Courses** that your programs cover +1. Create **Academic Terms** and **Academic Years** +1. Start adding **Students** +1. Group your students into **Batches** + +Now you are ready to run your school. Start by tracking attendance! πŸ– diff --git a/erpnext/setup/setup_wizard/tasks/school_operations.md b/erpnext/setup/setup_wizard/tasks/school_operations.md new file mode 100644 index 0000000000..6b49cd21cb --- /dev/null +++ b/erpnext/setup/setup_wizard/tasks/school_operations.md @@ -0,0 +1,11 @@ +ERPNext will help you manage your day-to-day operations πŸ“ + +1. Admissions +1. Attendance +1. Assessments +1. Fee collection +1. Time Table and scheduling + +Unless you have a dedicated team to set this up for you, we recommend using student attendance first! For that you need to create Student Batches and Student Groups. What is the difference? + +If all your students in a group have the same set of classes (like in a primary school) then you make batches. If your student in a particular program can select their courses, you need to create a Student Group for each course! πŸ‘©β€πŸ‘©β€πŸ‘§β€πŸ‘§πŸ‘¨β€πŸ‘¨β€πŸ‘§β€πŸ‘¦ \ No newline at end of file diff --git a/erpnext/setup/setup_wizard/tasks/task_alert.json b/erpnext/setup/setup_wizard/tasks/task_alert.json new file mode 100644 index 0000000000..9c8462a0a8 --- /dev/null +++ b/erpnext/setup/setup_wizard/tasks/task_alert.json @@ -0,0 +1,28 @@ +[ + { + "attach_print": 0, + "condition": "doc.status in ('Open', 'Overdue')", + "date_changed": "exp_end_date", + "days_in_advance": 0, + "docstatus": 0, + "doctype": "Email Alert", + "document_type": "Task", + "enabled": 1, + "event": "Days After", + "is_standard": 0, + "message": "

Task due today:

\n\n
\n{{ doc.description }}\n
\n\n
\n

\nThis is a notification for a task that is due today, and a sample Email Alert. In ERPNext you can setup email alerts on anything, Invoices, Orders, Leads, Opportunities, so you never miss a thing.\n

", + "method": null, + "modified": "2017-03-09 07:34:58.168370", + "module": null, + "name": "Task Due Alert", + "recipients": [ + { + "cc": null, + "condition": null, + "email_by_document_field": "owner" + } + ], + "subject": "{{ doc.subject }}", + "value_changed": null + } +] \ No newline at end of file diff --git a/erpnext/startup/notifications.py b/erpnext/startup/notifications.py index a1b90f96a2..ee8af025d1 100644 --- a/erpnext/startup/notifications.py +++ b/erpnext/startup/notifications.py @@ -8,7 +8,7 @@ def get_notification_config(): { "Issue": {"status": "Open"}, "Warranty Claim": {"status": "Open"}, - "Task": {"status": "Overdue"}, + "Task": {"status": ("in", ("Open", "Overdue"))}, "Project": {"status": "Open"}, "Item": {"total_projected_qty": ("<", 0)}, "Customer": {"status": "Open"}, @@ -23,11 +23,11 @@ def get_notification_config(): }, "Journal Entry": {"docstatus": 0}, "Sales Invoice": { - "outstanding_amount": (">", 0), - "docstatus": ("<", 2) + "outstanding_amount": (">", 0), + "docstatus": ("<", 2) }, "Purchase Invoice": { - "outstanding_amount": (">", 0), + "outstanding_amount": (">", 0), "docstatus": ("<", 2) }, "Payment Entry": {"docstatus": 0}, From 83aa5ee3df02c4888e5c9bae1dd0426710cd36b0 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 10 Mar 2017 12:47:29 +0530 Subject: [PATCH 3/3] [messages] cleanup --- erpnext/setup/setup_wizard/sample_data.py | 30 ++++++--------- erpnext/setup/setup_wizard/tasks/explore.md | 11 +----- erpnext/setup/setup_wizard/tasks/go_live.md | 21 +++++----- .../setup/setup_wizard/tasks/import_data.md | 9 ++--- erpnext/setup/setup_wizard/tasks/masters.md | 15 ++------ erpnext/setup/setup_wizard/tasks/purchase.md | 11 ++---- erpnext/setup/setup_wizard/tasks/sales.md | 21 +++------- .../setup_wizard/tasks/school_go_live.md | 20 ---------- .../setup_wizard/tasks/school_import_data.md | 9 ++--- .../setup_wizard/tasks/school_masters.md | 6 +-- .../setup_wizard/tasks/school_operations.md | 11 ------ .../setup/setup_wizard/tasks/task_alert.json | 38 +++++++++---------- 12 files changed, 63 insertions(+), 139 deletions(-) delete mode 100644 erpnext/setup/setup_wizard/tasks/school_go_live.md delete mode 100644 erpnext/setup/setup_wizard/tasks/school_operations.md diff --git a/erpnext/setup/setup_wizard/sample_data.py b/erpnext/setup/setup_wizard/sample_data.py index 40b4f2e55c..cfc6726d1c 100644 --- a/erpnext/setup/setup_wizard/sample_data.py +++ b/erpnext/setup/setup_wizard/sample_data.py @@ -105,46 +105,34 @@ def make_projects(domain): if domain == 'Education': tasks += [ { - "title": _("Setup Master Data"), + "title": _("Setup your School in ERPNext"), "start_date": current_date, "end_date": frappe.utils.add_days(current_date, 1), "file": "school_masters.md" }, { - "title": _("Manage Operations"), + "title": "Setup Master Data", "start_date": current_date, - "end_date": frappe.utils.add_days(current_date, 2), - "file": "school_operations.md" - }, - { - "title": _("Import Data"), - "start_date": current_date, - "end_date": frappe.utils.add_days(current_date, 3), - "file": "school_import_data.md" - }, - { - "title": "Go Live!", - "start_date": current_date, - "end_date": frappe.utils.add_days(current_date, 4), - "file": "school_go_live.md" + "end_date": frappe.utils.add_days(current_date, 1), + "file": "school_masters.md" }] else: tasks += [ { - "title": "Setup Master Data", + "title": "Setup Your Company", "start_date": current_date, "end_date": frappe.utils.add_days(current_date, 1), "file": "masters.md" }, { - "title": "Try a Sales Cycle", + "title": "Start Tracking your Sales", "start_date": current_date, "end_date": frappe.utils.add_days(current_date, 2), "file": "sales.md" }, { - "title": "Try a Purchase Cycle", + "title": "Start Managing Purchases", "start_date": current_date, "end_date": frappe.utils.add_days(current_date, 3), "file": "purchase.md" @@ -177,6 +165,10 @@ def import_email_alert(): email_alert = frappe.get_doc(json.loads(f.read())[0]) email_alert.insert() + # trigger the first message! + from frappe.email.doctype.email_alert.email_alert import trigger_daily_alerts + trigger_daily_alerts() + def test_sample(): frappe.db.sql('delete from `tabEmail Alert`') frappe.db.sql('delete from tabProject') diff --git a/erpnext/setup/setup_wizard/tasks/explore.md b/erpnext/setup/setup_wizard/tasks/explore.md index eebde47dd9..ce6cb60673 100644 --- a/erpnext/setup/setup_wizard/tasks/explore.md +++ b/erpnext/setup/setup_wizard/tasks/explore.md @@ -2,13 +2,6 @@ Thanks for checking this out! ❀️ If you are evaluating an ERP system for the first time, this is going to be quite a task! But don't worry, ERPNext is awesome. -First, let's just get familiar with the surroundings. ERPNext covers a *lot of features*, go to the home page and click on the "Explore" icon. Click on all the modules, and make a list of things you want to do. +First, get familiar with the surroundings. ERPNext covers a *lot of features*, go to the home page and click on the "Explore" icon. -Whats more, you can also update it here: - -Things I like to do in ERPNext - -πŸ‘‡πŸ‘‡πŸ‘‡πŸ‘‡ - -1. -2. \ No newline at end of file +All the best! \ No newline at end of file diff --git a/erpnext/setup/setup_wizard/tasks/go_live.md b/erpnext/setup/setup_wizard/tasks/go_live.md index 4e5c1d4ceb..0a934a436f 100644 --- a/erpnext/setup/setup_wizard/tasks/go_live.md +++ b/erpnext/setup/setup_wizard/tasks/go_live.md @@ -1,21 +1,18 @@ -Ready to go live with ERPNext? +Ready to go live with ERPNext? 🏁🏁🏁 -So lets be clear, - -1. You tried a few cycles in ERPNext -2. You have imported all your records - your model of your organization is complete. -3. You can see the Matrix πŸ™… - -Now lets bring the current "state" of your business into ERPNext. For this you need to do a few more things. - -Warning: This might be tricky, and you can always do this later and you might need the help of your accountant to help you with this. +Here are the steps: 1. Sync up your **Chart of Accounts** 3. Add your opening stock using **Stock Reconciliation** 4. Add your open invoices (both sales and purchase) 3. Add your opening account balances by making a **Journal Entry** -You are now set to go! 🏁 😎 - If you need help for going live, sign up for an account at erpnext.com or find a partner to help you with this. +Or you can watch these videos πŸ“Ί: + +Setup your chart of accounts: https://www.youtube.com/watch?v=AcfMCT7wLLo + +Add Open Stock: https://www.youtube.com/watch?v=nlHX0ZZ84Lw + +Add Opening Balances: https://www.youtube.com/watch?v=nlHX0ZZ84Lw diff --git a/erpnext/setup/setup_wizard/tasks/import_data.md b/erpnext/setup/setup_wizard/tasks/import_data.md index b5ad91e55d..c5b85c9673 100644 --- a/erpnext/setup/setup_wizard/tasks/import_data.md +++ b/erpnext/setup/setup_wizard/tasks/import_data.md @@ -1,8 +1,5 @@ -Ready for some real stuff? πŸ’ͺ Lets import some data! +Lets import some data! πŸ’ͺπŸ’ͺ -If you are already running a business, you most likely have your Items, Customers or Suppliers in some spreadsheet file somewhere. - -You can quickly get them into ERPNext by using the data import tool. Just type "data import" in the search bar to get started πŸ”Ž - -If you need help, just head to the user forum https://discuss.erpnext.com +If you are already running a business, you most likely have your Items, Customers or Suppliers in some spreadsheet file somewhere, import it into ERPNext with the Data Import Tool. +Watch this video to get started: https://www.youtube.com/watch?v=Ta2Xx3QoK3E diff --git a/erpnext/setup/setup_wizard/tasks/masters.md b/erpnext/setup/setup_wizard/tasks/masters.md index 2e286deec8..6ade15907c 100644 --- a/erpnext/setup/setup_wizard/tasks/masters.md +++ b/erpnext/setup/setup_wizard/tasks/masters.md @@ -1,14 +1,7 @@ -πŸ’‘Tip: Your ERPNext account is a model of your real business 🏠 +Start building a model of your business in ERPNext by adding your Items and Customers. -So what does a business exactly do? +These videos πŸ“Ί will help you get started: -**You sell products (or services) to a customer** +Adding Customers and Suppliers: https://www.youtube.com/watch?v=zsrrVDk6VBs -To start building a model of your business, you can start with just 2 things: - -1. Customers -2. Items - -Start adding them now! - -Hint: type "Item" in the search bar above πŸ”Ž \ No newline at end of file +Adding Items and Prices: https://www.youtube.com/watch?v=FcOsV-e8ymE \ No newline at end of file diff --git a/erpnext/setup/setup_wizard/tasks/purchase.md b/erpnext/setup/setup_wizard/tasks/purchase.md index 491248d816..3f3bc3b274 100644 --- a/erpnext/setup/setup_wizard/tasks/purchase.md +++ b/erpnext/setup/setup_wizard/tasks/purchase.md @@ -1,13 +1,10 @@ -Already figured out sales? Nice, now lets get to purchasing stuff. +How to manage your purchasing in ERPNext πŸ›’πŸ›’πŸ›’: -1. First add a few **Suppliers** -2. Find out what you need by making **Material Requests**. Think of them as stickies πŸ—’ on your refrigerator. +1. Add a few **Suppliers** +2. Find out what you need by making **Material Requests**. 3. Now start placing orders via **Purchase Order**. 4. When your suppliers deliver, make **Purchase Receipts** -Thats it! - -If you track inventory on your items, they will automatically be added to your stock. - Now never run out of stock again! 😎 +Watch this video πŸ“Ί to get an overview: https://www.youtube.com/watch?v=4TN9kPyfIqM \ No newline at end of file diff --git a/erpnext/setup/setup_wizard/tasks/sales.md b/erpnext/setup/setup_wizard/tasks/sales.md index 960a988d90..15268fa968 100644 --- a/erpnext/setup/setup_wizard/tasks/sales.md +++ b/erpnext/setup/setup_wizard/tasks/sales.md @@ -1,17 +1,8 @@ -ERPNext covers most of what you need to start selling. πŸ”” +Start managing your sales with ERPNext πŸ””πŸ””πŸ””: -Few terms to get familiar with: +1. Add potential business contacts as **Leads** +2. Udpate your deals in pipeline in **Opportunities** +3. Send proposals to your leads or customers with **Quotations** +4. Track confirmed orders with **Sales Orders** -1. Potential customers are **Leads** -2. Deals in pipeline are **Opportunities** -3. Proposals sent to customers are **Quotations** -4. Confirmed orders are **Sales Orders** -5. Fulfilment (shipment or completion of services) is **Delivery Note** - -The first thing you should probably do is add 5 leads (contact information about prospects who can give you new business). Hint: just type "Lead" in the search bar on the top πŸ”Ž - -Find out if they have any need you can help with and make a few "Opportunities" - -Then send them proposals with "Quotation". Did you know, you can email them directly from ERPNext! 😎 - -See your sales go up up up! πŸ“ˆ \ No newline at end of file +Watch this video πŸ“Ί to get an overview: https://www.youtube.com/watch?v=o9XCSZHJfpA diff --git a/erpnext/setup/setup_wizard/tasks/school_go_live.md b/erpnext/setup/setup_wizard/tasks/school_go_live.md deleted file mode 100644 index e4705074bc..0000000000 --- a/erpnext/setup/setup_wizard/tasks/school_go_live.md +++ /dev/null @@ -1,20 +0,0 @@ -Ready to go live with ERPNext? - -So lets be clear, - -1. You tried a doing a few things in ERPNext -2. You have imported all your records - your model of your school is complete. -3. You can see the Matrix πŸ™… - -Now lets bring the current "state" of your institute into ERPNext -> This includes the standard organization stuff like accounts and inventory management. For this you need to do a few more things. - -Warning: This might be tricky, and you can always do this later and you might need the help of your accountant to help you with this. - -1. Sync up your **Chart of Accounts** -3. Add your opening stock using **Stock Reconciliation** -3. Add your opening account balances by making a **Journal Entry** - -You are now set to go! 🏁 😎 - -If you need help for going live, sign up for an account at erpnext.com or find a partner to help you with this. - diff --git a/erpnext/setup/setup_wizard/tasks/school_import_data.md b/erpnext/setup/setup_wizard/tasks/school_import_data.md index 9074e9a957..c465b812c8 100644 --- a/erpnext/setup/setup_wizard/tasks/school_import_data.md +++ b/erpnext/setup/setup_wizard/tasks/school_import_data.md @@ -1,8 +1,5 @@ -Ready for some real stuff? πŸ’ͺ Lets import some data! +Lets import some data! πŸ’ͺπŸ’ͺ -If you are already running a school, you most likely have your Students in some spreadsheet file somewhere. - -You can quickly get them into ERPNext by using the data import tool. Just type "data import" in the search bar to get started πŸ”Ž - -If you need help, just head to the user forum https://discuss.erpnext.com +If you are already running a school, you most likely have your Students in some spreadsheet file somewhere. Import it into ERPNext with the Data Import Tool. +Watch this video to get started: https://www.youtube.com/watch?v=Ta2Xx3QoK3E \ No newline at end of file diff --git a/erpnext/setup/setup_wizard/tasks/school_masters.md b/erpnext/setup/setup_wizard/tasks/school_masters.md index 2e072d1c10..91039352b0 100644 --- a/erpnext/setup/setup_wizard/tasks/school_masters.md +++ b/erpnext/setup/setup_wizard/tasks/school_masters.md @@ -1,6 +1,4 @@ -πŸ’‘Tip: Your ERPNext account is a model of your school or college 🏠 - -Lets start making things in ERPNext that are reprentative of your institution. +Lets start making things in ERPNext that are representative of your institution. 1. Make a list of **Programs** that you offer 1. Add a few **Courses** that your programs cover @@ -8,4 +6,4 @@ Lets start making things in ERPNext that are reprentative of your institution. 1. Start adding **Students** 1. Group your students into **Batches** -Now you are ready to run your school. Start by tracking attendance! πŸ– +Watch this video to learn more about ERPNext Schools: https://www.youtube.com/watch?v=f6foQOyGzdA diff --git a/erpnext/setup/setup_wizard/tasks/school_operations.md b/erpnext/setup/setup_wizard/tasks/school_operations.md deleted file mode 100644 index 6b49cd21cb..0000000000 --- a/erpnext/setup/setup_wizard/tasks/school_operations.md +++ /dev/null @@ -1,11 +0,0 @@ -ERPNext will help you manage your day-to-day operations πŸ“ - -1. Admissions -1. Attendance -1. Assessments -1. Fee collection -1. Time Table and scheduling - -Unless you have a dedicated team to set this up for you, we recommend using student attendance first! For that you need to create Student Batches and Student Groups. What is the difference? - -If all your students in a group have the same set of classes (like in a primary school) then you make batches. If your student in a particular program can select their courses, you need to create a Student Group for each course! πŸ‘©β€πŸ‘©β€πŸ‘§β€πŸ‘§πŸ‘¨β€πŸ‘¨β€πŸ‘§β€πŸ‘¦ \ No newline at end of file diff --git a/erpnext/setup/setup_wizard/tasks/task_alert.json b/erpnext/setup/setup_wizard/tasks/task_alert.json index 9c8462a0a8..dca68455ca 100644 --- a/erpnext/setup/setup_wizard/tasks/task_alert.json +++ b/erpnext/setup/setup_wizard/tasks/task_alert.json @@ -1,28 +1,28 @@ [ { - "attach_print": 0, - "condition": "doc.status in ('Open', 'Overdue')", - "date_changed": "exp_end_date", - "days_in_advance": 0, - "docstatus": 0, - "doctype": "Email Alert", - "document_type": "Task", - "enabled": 1, - "event": "Days After", - "is_standard": 0, - "message": "

Task due today:

\n\n
\n{{ doc.description }}\n
\n\n
\n

\nThis is a notification for a task that is due today, and a sample Email Alert. In ERPNext you can setup email alerts on anything, Invoices, Orders, Leads, Opportunities, so you never miss a thing.\n

", - "method": null, - "modified": "2017-03-09 07:34:58.168370", - "module": null, - "name": "Task Due Alert", + "attach_print": 0, + "condition": "doc.status in ('Open', 'Overdue')", + "date_changed": "exp_end_date", + "days_in_advance": 0, + "docstatus": 0, + "doctype": "Email Alert", + "document_type": "Task", + "enabled": 1, + "event": "Days After", + "is_standard": 0, + "message": "

Task due today:

\n\n
\n{{ doc.description }}\n
\n\n
\n

\nThis is a notification for a task that is due today, and a sample Email Alert. In ERPNext you can setup email alerts on anything, Invoices, Orders, Leads, Opportunities, so you never miss a thing.\n
To edit this, and setup other alerts, just type Email Alert in the search bar.

", + "method": null, + "modified": "2017-03-09 07:34:58.168370", + "module": null, + "name": "Task Due Alert", "recipients": [ { - "cc": null, - "condition": null, + "cc": null, + "condition": null, "email_by_document_field": "owner" } - ], - "subject": "{{ doc.subject }}", + ], + "subject": "{{ doc.subject }}", "value_changed": null } ] \ No newline at end of file