# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals import json import os import random import frappe import frappe.utils from frappe import _ from frappe.utils.make_random import add_random_children def make_sample_data(domains, make_dependent = False): """Create a few opportunities, quotes, material requests, issues, todos, projects to help the user get started""" if make_dependent: items = frappe.get_all("Item", {'is_sales_item': 1}) customers = frappe.get_all("Customer") warehouses = frappe.get_all("Warehouse") if items and customers: for i in range(3): customer = random.choice(customers).name make_opportunity(items, customer) make_quote(items, customer) if items and warehouses: make_material_request(frappe.get_all("Item")) make_projects(domains) import_notification() def make_opportunity(items, customer): b = frappe.get_doc({ "doctype": "Opportunity", "opportunity_from": "Customer", "customer": customer, "opportunity_type": _("Sales"), "with_items": 1 }) add_random_children(b, "items", rows=len(items), randomize = { "qty": (1, 5), "item_code": ["Item"] }, unique="item_code") b.insert(ignore_permissions=True) b.add_comment('Comment', text="This is a dummy record") def make_quote(items, customer): qtn = frappe.get_doc({ "doctype": "Quotation", "quotation_to": "Customer", "party_name": customer, "order_type": "Sales" }) add_random_children(qtn, "items", rows=len(items), randomize = { "qty": (1, 5), "item_code": ["Item"] }, unique="item_code") qtn.insert(ignore_permissions=True) qtn.add_comment('Comment', text="This is a dummy record") def make_material_request(items): for i in items: mr = frappe.get_doc({ "doctype": "Material Request", "material_request_type": "Purchase", "schedule_date": frappe.utils.add_days(frappe.utils.nowdate(), 7), "items": [{ "schedule_date": frappe.utils.add_days(frappe.utils.nowdate(), 7), "item_code": i.name, "qty": 10 }] }) mr.insert() mr.submit() mr.add_comment('Comment', text="This is a dummy record") def make_issue(): pass def make_projects(domains): current_date = frappe.utils.nowdate() project = frappe.get_doc({ "doctype": "Project", "project_name": "ERPNext Implementation", }) tasks = [ { "title": "Explore ERPNext", "start_date": current_date, "end_date": current_date, "file": "explore.md" }] if 'Education' in domains: tasks += [ { "title": _("Setup your Institute in ERPNext"), "start_date": current_date, "end_date": frappe.utils.add_days(current_date, 1), "file": "education_masters.md" }, { "title": "Setup Master Data", "start_date": current_date, "end_date": frappe.utils.add_days(current_date, 1), "file": "education_masters.md" }] else: tasks += [ { "title": "Setup Your Company", "start_date": current_date, "end_date": frappe.utils.add_days(current_date, 1), "file": "masters.md" }, { "title": "Start Tracking your Sales", "start_date": current_date, "end_date": frappe.utils.add_days(current_date, 2), "file": "sales.md" }, { "title": "Start Managing Purchases", "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'] = frappe.utils.md_to_html(f.read()) del t['file'] project.append('tasks', t) project.insert(ignore_permissions=True) def import_notification(): '''Import notification for task start''' with open (os.path.join(os.path.dirname(__file__), "tasks/task_alert.json")) as f: notification = frappe.get_doc(json.loads(f.read())[0]) notification.insert() # trigger the first message! from frappe.email.doctype.notification.notification import trigger_daily_alerts trigger_daily_alerts() def test_sample(): frappe.db.sql('delete from `tabNotification`') frappe.db.sql('delete from tabProject') frappe.db.sql('delete from tabTask') make_projects('Education') import_notification()