diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 4a984704a1f..1cede9047fb 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -183,7 +183,8 @@ doc_events = { scheduler_events = { "hourly": [ - "erpnext.controllers.recurring_document.create_recurring_documents" + "erpnext.controllers.recurring_document.create_recurring_documents", + 'erpnext.hr.doctype.daily_work_summary_settings.daily_work_summary_settings.trigger_emails' ], "daily": [ "erpnext.stock.reorder_item.reorder_item", diff --git a/erpnext/hr/doctype/daily_work_summary/__init__.py b/erpnext/hr/doctype/daily_work_summary/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.js b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.js new file mode 100644 index 00000000000..1ac173a8d3d --- /dev/null +++ b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.js @@ -0,0 +1,8 @@ +// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Daily Work Summary', { + refresh: function(frm) { + + } +}); diff --git a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.json b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.json new file mode 100644 index 00000000000..281a6abd169 --- /dev/null +++ b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.json @@ -0,0 +1,139 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2016-11-08 04:58:20.001780", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Company", + "length": 0, + "no_copy": 0, + "options": "Company", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "responses", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Responses", + "length": 0, + "no_copy": 0, + "options": "Daily Work Summary Response", + "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": 0, + "max_attachments": 0, + "modified": "2016-11-08 06:03:21.121442", + "modified_by": "Administrator", + "module": "HR", + "name": "Daily Work Summary", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "is_custom": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Employee", + "set_user_permissions": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "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": "HR 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", + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py new file mode 100644 index 00000000000..d3e92e9a74f --- /dev/null +++ b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py @@ -0,0 +1,45 @@ +# -*- 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 _ + +class DailyWorkSummary(Document): + def send_mails(self, settings): + '''Send emails to get daily work summary to all employees''' + frappe.sendmail(recipients = self.get_employee_emails(), message = settings.message, + subject = settings.subject, reference_doctype=self.doctype, reference_name=self.name) + + def send_summary(self): + '''Send summary of all replies''' + settings = frappe.get_doc('Daily Work Summary Settings') + + replies = frappe.get_doc('Communication', fields=['content', 'sender'], + filters=dict(reference_doctype=self.doctype, reference_name=self.name, + communication_type='Email', sent_or_received='Received')) + + message = frappe.render_template(template, dict(replies=replies, + original_message=settings.message)) + + frappe.sendmail(recipients = self.get_employee_emails(), message = message, + subject = _('Daily Work Summary for {0}').format(self.company), + reference_doctype=self.doctype, reference_name=self.name) + + def get_employee_emails(self): + return filter(None, [d.user_id for d in + frappe.get_all('Employee', fields=['user_id'], + filters={'status': 'Active', 'company': self.company})]) + +template = ''' +

Summary of replies:

+ +{% for reply in replies %} +
{{ frappe.db.get_value("Employee", reply.sender, "full_name") }}
+
+ {{ reply.content.split(original_message)[0].strip() }} +
+{% endfor %} +''' \ No newline at end of file diff --git a/erpnext/hr/doctype/daily_work_summary/test_daily_work_summary.py b/erpnext/hr/doctype/daily_work_summary/test_daily_work_summary.py new file mode 100644 index 00000000000..7cc2bc2cfc0 --- /dev/null +++ b/erpnext/hr/doctype/daily_work_summary/test_daily_work_summary.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest +import frappe.utils + +# test_records = frappe.get_test_records('Daily Work Summary') + +class TestDailyWorkSummary(unittest.TestCase): + def test_email_trigger(self): + settings, employees, emails = self.setup_and_prepare_test(frappe.utils.nowtime().split(':')[0]) + + for d in employees: + # check that email is sent to this employee + self.assertTrue(d.user_id in [d.recipient for d in emails + if settings.subject in d.message]) + + def test_email_trigger_failed(self): + hour = '00' + if frappe.utils.nowtime().split(':')[0]=='00': + hour = '01' + + settings, employees, emails = self.setup_and_prepare_test(hour) + + for d in employees: + # check that email is sent to this employee + self.assertFalse(d.user_id in [d.recipient for d in emails + if settings.subject in d.message]) + + def setup_and_prepare_test(self, hour): + frappe.db.sql('delete from `tabEmail Queue`') + + # setup email to trigger at this our + settings = frappe.get_doc('Daily Work Summary Settings') + settings.companies = [] + + settings.append('companies', dict(company='_Test Company', + send_emails_at=hour + ':00')) + settings.test_subject = 'this is a subject for testing summary emails' + settings.save() + + from erpnext.hr.doctype.daily_work_summary_settings.daily_work_summary_settings \ + import trigger_emails + trigger_emails() + + # check if emails are created + employees = frappe.get_all('Employee', fields = ['user_id'], + filters=dict(company='_Test Company', status='Active')) + + emails = frappe.get_all('Email Queue', fields=['recipient', 'message']) + + return settings, employees, emails \ No newline at end of file diff --git a/erpnext/hr/doctype/daily_work_summary_response/__init__.py b/erpnext/hr/doctype/daily_work_summary_response/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/hr/doctype/daily_work_summary_response/daily_work_summary_response.json b/erpnext/hr/doctype/daily_work_summary_response/daily_work_summary_response.json new file mode 100644 index 00000000000..b4295d4a496 --- /dev/null +++ b/erpnext/hr/doctype/daily_work_summary_response/daily_work_summary_response.json @@ -0,0 +1,95 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2016-11-08 04:56:39.588230", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "employee", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Employee", + "length": 0, + "no_copy": 0, + "options": "Employee", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "response", + "fieldtype": "Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Response", + "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-11-08 04:56:39.588230", + "modified_by": "Administrator", + "module": "HR", + "name": "Daily Work Summary Response", + "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/hr/doctype/daily_work_summary_response/daily_work_summary_response.py b/erpnext/hr/doctype/daily_work_summary_response/daily_work_summary_response.py new file mode 100644 index 00000000000..739eaa771a9 --- /dev/null +++ b/erpnext/hr/doctype/daily_work_summary_response/daily_work_summary_response.py @@ -0,0 +1,10 @@ +# -*- 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 DailyWorkSummaryResponse(Document): + pass diff --git a/erpnext/hr/doctype/daily_work_summary_settings/__init__.py b/erpnext/hr/doctype/daily_work_summary_settings/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/hr/doctype/daily_work_summary_settings/daily_work_summary_settings.js b/erpnext/hr/doctype/daily_work_summary_settings/daily_work_summary_settings.js new file mode 100644 index 00000000000..cb0b6086ac9 --- /dev/null +++ b/erpnext/hr/doctype/daily_work_summary_settings/daily_work_summary_settings.js @@ -0,0 +1,7 @@ +// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Daily Work Summary Settings', { + onload: function(frm) { + } +}); diff --git a/erpnext/hr/doctype/daily_work_summary_settings/daily_work_summary_settings.json b/erpnext/hr/doctype/daily_work_summary_settings/daily_work_summary_settings.json new file mode 100644 index 00000000000..00e90eaaa1a --- /dev/null +++ b/erpnext/hr/doctype/daily_work_summary_settings/daily_work_summary_settings.json @@ -0,0 +1,203 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2016-11-08 04:55:08.231715", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "select_companies", + "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": "Select Companies", + "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": "companies", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Companies", + "length": 0, + "no_copy": 0, + "options": "Daily Work Summary Settings Company", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "message_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": "Message", + "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, + "default": "What did you work on today?", + "fieldname": "subject", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Subject", + "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, + "default": "

Please share what did you do today. If you reply by midnight, your response will be recorded!

", + "fieldname": "message", + "fieldtype": "Text Editor", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Message", + "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": 1, + "istable": 0, + "max_attachments": 0, + "modified": "2016-11-08 05:48:53.068957", + "modified_by": "Administrator", + "module": "HR", + "name": "Daily Work Summary Settings", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "is_custom": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "HR Manager", + "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", + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/hr/doctype/daily_work_summary_settings/daily_work_summary_settings.py b/erpnext/hr/doctype/daily_work_summary_settings/daily_work_summary_settings.py new file mode 100644 index 00000000000..d36f348e9f0 --- /dev/null +++ b/erpnext/hr/doctype/daily_work_summary_settings/daily_work_summary_settings.py @@ -0,0 +1,20 @@ +# -*- 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 +import frappe.utils + +class DailyWorkSummarySettings(Document): + pass + +def trigger_emails(): + settings = frappe.get_doc('Daily Work Summary Settings') + for d in settings.companies: + # if current hour + if frappe.utils.nowtime().split(':')[0] == d.send_emails_at.split(':')[0]: + work_summary = frappe.get_doc(dict(doctype='Daily Work Summary', + company=d.company)).insert() + work_summary.send_mails(settings) \ No newline at end of file diff --git a/erpnext/hr/doctype/daily_work_summary_settings_company/__init__.py b/erpnext/hr/doctype/daily_work_summary_settings_company/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/hr/doctype/daily_work_summary_settings_company/daily_work_summary_settings_company.json b/erpnext/hr/doctype/daily_work_summary_settings_company/daily_work_summary_settings_company.json new file mode 100644 index 00000000000..be27fa3dcb3 --- /dev/null +++ b/erpnext/hr/doctype/daily_work_summary_settings_company/daily_work_summary_settings_company.json @@ -0,0 +1,97 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2016-11-08 05:44:02.502527", + "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": "company", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Company", + "length": 0, + "no_copy": 0, + "options": "Company", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "17:00", + "fieldname": "send_emails_at", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Send Emails At", + "length": 0, + "no_copy": 0, + "options": "00:00\n01:00\n02:00\n03:00\n04:00\n05:00\n06:00\n07:00\n08:00\n09:00\n10:00\n11:00\n12:00\n13:00\n14:00\n15:00\n16:00\n17:00\n18:00\n19:00\n20:00\n21:00\n22:00\n23:00", + "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": 1, + "max_attachments": 0, + "modified": "2016-11-08 05:46:09.198788", + "modified_by": "Administrator", + "module": "HR", + "name": "Daily Work Summary Settings Company", + "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/hr/doctype/daily_work_summary_settings_company/daily_work_summary_settings_company.py b/erpnext/hr/doctype/daily_work_summary_settings_company/daily_work_summary_settings_company.py new file mode 100644 index 00000000000..cd051b4457d --- /dev/null +++ b/erpnext/hr/doctype/daily_work_summary_settings_company/daily_work_summary_settings_company.py @@ -0,0 +1,10 @@ +# -*- 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 DailyWorkSummarySettingsCompany(Document): + pass diff --git a/erpnext/patches/v7_1/set_prefered_contact_email.py b/erpnext/patches/v7_1/set_prefered_contact_email.py index d083811c84e..3b68e22269a 100644 --- a/erpnext/patches/v7_1/set_prefered_contact_email.py +++ b/erpnext/patches/v7_1/set_prefered_contact_email.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals import frappe def execute(): + frappe.reload_doctype('User') for d in frappe.get_all("Employee"): employee = frappe.get_doc("Employee", d.name) if employee.company_email: @@ -13,5 +14,4 @@ def execute(): elif employee.user_id: employee.prefered_contact_email = "User ID" employee.prefered_email = employee.user_id - - employee.db_update() \ No newline at end of file + employee.db_update() diff --git a/erpnext/setup/install.py b/erpnext/setup/install.py index 9971baaaa1a..7b71675f754 100644 --- a/erpnext/setup/install.py +++ b/erpnext/setup/install.py @@ -27,7 +27,7 @@ def check_setup_wizard_not_completed(): def set_single_defaults(): for dt in ('Accounts Settings', 'Print Settings', 'HR Settings', 'Buying Settings', - 'Selling Settings', 'Stock Settings'): + 'Selling Settings', 'Stock Settings', 'Daily Work Summary Settings'): default_values = frappe.db.sql("""select fieldname, `default` from `tabDocField` where parent=%s""", dt) if default_values: