From ed37cef32a7a5a6bb16b8adef5af7d0b8f7c8063 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 9 Sep 2014 12:38:21 +0530 Subject: [PATCH 01/18] [refactor modules] --- .../job_applicant/get_job_applications.py | 2 +- erpnext/hr/doctype/salary_slip/salary_slip.py | 2 +- ...ix_naming_series_records_lost_by_reload.py | 2 +- ...custom_fields_for_india_specific_fields.py | 2 +- erpnext/patches/v4_0/import_country_codes.py | 2 +- .../v4_0/set_naming_series_property_setter.py | 2 +- .../patches/v4_2/add_currency_turkish_lira.py | 2 +- erpnext/selling/doctype/lead/get_leads.py | 2 +- .../doctype/backup_manager/backup_manager.py | 2 +- erpnext/setup/doctype/country/README.md | 1 - erpnext/setup/doctype/country/__init__.py | 1 - erpnext/setup/doctype/country/country.json | 107 ---------------- erpnext/setup/doctype/country/country.py | 10 -- erpnext/setup/doctype/country/test_country.py | 6 - .../setup/doctype/country/test_records.json | 6 - erpnext/setup/doctype/currency/README.md | 1 - erpnext/setup/doctype/currency/__init__.py | 1 - erpnext/setup/doctype/currency/currency.js | 9 -- erpnext/setup/doctype/currency/currency.json | 117 ------------------ erpnext/setup/doctype/currency/currency.py | 21 ---- .../setup/doctype/currency/test_currency.py | 7 -- .../setup/doctype/currency/test_records.json | 1 - .../doctype/email_digest/email_digest.py | 2 +- .../global_defaults/global_defaults.py | 2 +- .../doctype/naming_series/naming_series.py | 2 +- erpnext/setup/install.py | 33 ----- .../setup/page/setup_wizard/setup_wizard.py | 2 +- erpnext/stock/utils.py | 2 +- .../support/doctype/newsletter/newsletter.py | 2 +- .../support_email_settings.py | 2 +- .../support_ticket/get_support_mails.py | 4 +- 31 files changed, 18 insertions(+), 339 deletions(-) delete mode 100644 erpnext/setup/doctype/country/README.md delete mode 100644 erpnext/setup/doctype/country/__init__.py delete mode 100644 erpnext/setup/doctype/country/country.json delete mode 100644 erpnext/setup/doctype/country/country.py delete mode 100644 erpnext/setup/doctype/country/test_country.py delete mode 100644 erpnext/setup/doctype/country/test_records.json delete mode 100644 erpnext/setup/doctype/currency/README.md delete mode 100644 erpnext/setup/doctype/currency/__init__.py delete mode 100644 erpnext/setup/doctype/currency/currency.js delete mode 100644 erpnext/setup/doctype/currency/currency.json delete mode 100644 erpnext/setup/doctype/currency/currency.py delete mode 100644 erpnext/setup/doctype/currency/test_currency.py delete mode 100644 erpnext/setup/doctype/currency/test_records.json diff --git a/erpnext/hr/doctype/job_applicant/get_job_applications.py b/erpnext/hr/doctype/job_applicant/get_job_applications.py index e4a8d70cf53..f34f4818da7 100644 --- a/erpnext/hr/doctype/job_applicant/get_job_applications.py +++ b/erpnext/hr/doctype/job_applicant/get_job_applications.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import frappe from frappe.utils import cstr, cint -from frappe.utils.email_lib.receive import POP3Mailbox +from frappe.email.receive import POP3Mailbox from frappe.core.doctype.communication.communication import _make class JobsMailbox(POP3Mailbox): diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index 7c905a666cc..638500b996a 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -185,7 +185,7 @@ class SalarySlip(TransactionBase): def send_mail_funct(self): - from frappe.utils.email_lib import sendmail + from frappe.email import sendmail receiver = frappe.db.get_value("Employee", self.employee, "company_email") if receiver: diff --git a/erpnext/patches/repair_tools/fix_naming_series_records_lost_by_reload.py b/erpnext/patches/repair_tools/fix_naming_series_records_lost_by_reload.py index 981ffd0c29e..36fa277dead 100644 --- a/erpnext/patches/repair_tools/fix_naming_series_records_lost_by_reload.py +++ b/erpnext/patches/repair_tools/fix_naming_series_records_lost_by_reload.py @@ -7,7 +7,7 @@ import json import re from frappe.model.naming import make_autoname from frappe.utils import cint -from frappe.utils.email_lib import sendmail_to_system_managers +from frappe.email import sendmail_to_system_managers doctype_series_map = { 'Attendance': 'ATT-', diff --git a/erpnext/patches/v4_0/create_custom_fields_for_india_specific_fields.py b/erpnext/patches/v4_0/create_custom_fields_for_india_specific_fields.py index 9b07000554f..5bca5e69628 100644 --- a/erpnext/patches/v4_0/create_custom_fields_for_india_specific_fields.py +++ b/erpnext/patches/v4_0/create_custom_fields_for_india_specific_fields.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import frappe -from frappe.core.doctype.custom_field.custom_field import create_custom_field_if_values_exist +from frappe.custom.doctype.custom_field.custom_field import create_custom_field_if_values_exist def execute(): frappe.reload_doc("stock", "doctype", "purchase_receipt") diff --git a/erpnext/patches/v4_0/import_country_codes.py b/erpnext/patches/v4_0/import_country_codes.py index 4d1177ed5df..e2e9f9d1f46 100644 --- a/erpnext/patches/v4_0/import_country_codes.py +++ b/erpnext/patches/v4_0/import_country_codes.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import frappe -from frappe.country_info import get_all +from frappe.geo.country_info import get_all from erpnext.setup.install import import_country_and_currency def execute(): diff --git a/erpnext/patches/v4_0/set_naming_series_property_setter.py b/erpnext/patches/v4_0/set_naming_series_property_setter.py index 7161492cfa4..ffbfc24320d 100644 --- a/erpnext/patches/v4_0/set_naming_series_property_setter.py +++ b/erpnext/patches/v4_0/set_naming_series_property_setter.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import frappe -from frappe.core.doctype.property_setter.property_setter import make_property_setter +from frappe.custom.doctype.property_setter.property_setter import make_property_setter doctype_series_map = { 'Attendance': 'ATT-', diff --git a/erpnext/patches/v4_2/add_currency_turkish_lira.py b/erpnext/patches/v4_2/add_currency_turkish_lira.py index f5476619374..d768d58f3b2 100644 --- a/erpnext/patches/v4_2/add_currency_turkish_lira.py +++ b/erpnext/patches/v4_2/add_currency_turkish_lira.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import frappe -from frappe.country_info import get_country_info +from frappe.geo.country_info import get_country_info from erpnext.setup.install import add_country_and_currency def execute(): diff --git a/erpnext/selling/doctype/lead/get_leads.py b/erpnext/selling/doctype/lead/get_leads.py index b765db62372..a79ca6010e1 100644 --- a/erpnext/selling/doctype/lead/get_leads.py +++ b/erpnext/selling/doctype/lead/get_leads.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import frappe from frappe.utils import cstr, cint -from frappe.utils.email_lib.receive import POP3Mailbox +from frappe.email.receive import POP3Mailbox from frappe.core.doctype.communication.communication import _make def add_sales_communication(subject, content, sender, real_name, mail=None, diff --git a/erpnext/setup/doctype/backup_manager/backup_manager.py b/erpnext/setup/doctype/backup_manager/backup_manager.py index ff4e1150771..99cae9aa756 100644 --- a/erpnext/setup/doctype/backup_manager/backup_manager.py +++ b/erpnext/setup/doctype/backup_manager/backup_manager.py @@ -57,7 +57,7 @@ def take_backups_gdrive(): send_email(False, "Google Drive", error_message) def send_email(success, service_name, error_status=None): - from frappe.utils.email_lib import sendmail + from frappe.email import sendmail if success: subject = "Backup Upload Successful" message ="""

Backup Uploaded Successfully

Hi there, this is just to inform you diff --git a/erpnext/setup/doctype/country/README.md b/erpnext/setup/doctype/country/README.md deleted file mode 100644 index 0e3f46cddca..00000000000 --- a/erpnext/setup/doctype/country/README.md +++ /dev/null @@ -1 +0,0 @@ -Country Master. \ No newline at end of file diff --git a/erpnext/setup/doctype/country/__init__.py b/erpnext/setup/doctype/country/__init__.py deleted file mode 100644 index baffc488252..00000000000 --- a/erpnext/setup/doctype/country/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from __future__ import unicode_literals diff --git a/erpnext/setup/doctype/country/country.json b/erpnext/setup/doctype/country/country.json deleted file mode 100644 index 1798ca1893d..00000000000 --- a/erpnext/setup/doctype/country/country.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "allow_import": 1, - "autoname": "field:country_name", - "creation": "2013-01-19 10:23:30", - "docstatus": 0, - "doctype": "DocType", - "document_type": "Master", - "fields": [ - { - "fieldname": "country_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Country Name", - "oldfieldname": "country_name", - "oldfieldtype": "Data", - "permlevel": 0, - "reqd": 1 - }, - { - "fieldname": "date_format", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Date Format", - "permlevel": 0 - }, - { - "fieldname": "time_zones", - "fieldtype": "Text", - "in_list_view": 1, - "label": "Time Zones", - "permlevel": 0 - }, - { - "fieldname": "code", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Code", - "permlevel": 0 - } - ], - "icon": "icon-globe", - "idx": 1, - "in_create": 0, - "modified": "2014-05-27 03:49:08.984710", - "modified_by": "Administrator", - "module": "Setup", - "name": "Country", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "create": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Sales Master Manager", - "submit": 0, - "write": 1 - }, - { - "create": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Purchase Master Manager", - "submit": 0, - "write": 1 - }, - { - "apply_user_permissions": 1, - "create": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "submit": 0, - "write": 1 - }, - { - "create": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "submit": 0, - "write": 1 - }, - { - "apply_user_permissions": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "All" - } - ], - "read_only": 0 -} \ No newline at end of file diff --git a/erpnext/setup/doctype/country/country.py b/erpnext/setup/doctype/country/country.py deleted file mode 100644 index 5e16f51f8f7..00000000000 --- a/erpnext/setup/doctype/country/country.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals -import frappe - -from frappe.model.document import Document - -class Country(Document): - pass \ No newline at end of file diff --git a/erpnext/setup/doctype/country/test_country.py b/erpnext/setup/doctype/country/test_country.py deleted file mode 100644 index b2610667af4..00000000000 --- a/erpnext/setup/doctype/country/test_country.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -test_records = frappe.get_test_records('Country') \ No newline at end of file diff --git a/erpnext/setup/doctype/country/test_records.json b/erpnext/setup/doctype/country/test_records.json deleted file mode 100644 index 5a7c8a5568c..00000000000 --- a/erpnext/setup/doctype/country/test_records.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "country_name": "_Test Country", - "doctype": "Country" - } -] \ No newline at end of file diff --git a/erpnext/setup/doctype/currency/README.md b/erpnext/setup/doctype/currency/README.md deleted file mode 100644 index 3e1558e9d78..00000000000 --- a/erpnext/setup/doctype/currency/README.md +++ /dev/null @@ -1 +0,0 @@ -Currency Master with details about abbreviation, symbol etc. \ No newline at end of file diff --git a/erpnext/setup/doctype/currency/__init__.py b/erpnext/setup/doctype/currency/__init__.py deleted file mode 100644 index baffc488252..00000000000 --- a/erpnext/setup/doctype/currency/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from __future__ import unicode_literals diff --git a/erpnext/setup/doctype/currency/currency.js b/erpnext/setup/doctype/currency/currency.js deleted file mode 100644 index 79343e9ae6d..00000000000 --- a/erpnext/setup/doctype/currency/currency.js +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -cur_frm.cscript.refresh = function(doc) { - cur_frm.set_intro(""); - if(!cur_frm.doc.enabled) { - cur_frm.set_intro(__("This Currency is disabled. Enable to use in transactions")) - } -} \ No newline at end of file diff --git a/erpnext/setup/doctype/currency/currency.json b/erpnext/setup/doctype/currency/currency.json deleted file mode 100644 index ee7be19a537..00000000000 --- a/erpnext/setup/doctype/currency/currency.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "autoname": "field:currency_name", - "creation": "2013-01-28 10:06:02", - "description": "**Currency** Master", - "docstatus": 0, - "doctype": "DocType", - "fields": [ - { - "fieldname": "currency_name", - "fieldtype": "Data", - "label": "Currency Name", - "oldfieldname": "currency_name", - "oldfieldtype": "Data", - "permlevel": 0, - "reqd": 1 - }, - { - "fieldname": "enabled", - "fieldtype": "Check", - "in_list_view": 1, - "label": "Enabled", - "permlevel": 0 - }, - { - "description": "Sub-currency. For e.g. \"Cent\"", - "fieldname": "fraction", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Fraction", - "permlevel": 0 - }, - { - "description": "1 Currency = [?] Fraction\nFor e.g. 1 USD = 100 Cent", - "fieldname": "fraction_units", - "fieldtype": "Int", - "in_list_view": 1, - "label": "Fraction Units", - "permlevel": 0 - }, - { - "description": "A symbol for this currency. For e.g. $", - "fieldname": "symbol", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Symbol", - "permlevel": 0 - }, - { - "description": "How should this currency be formatted? If not set, will use system defaults", - "fieldname": "number_format", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Number Format", - "options": "\n#,###.##\n#.###,##\n# ###.##\n# ###,##\n#'###.##\n#, ###.##\n#,##,###.##\n#,###.###\n#.###\n#,###", - "permlevel": 0 - } - ], - "icon": "icon-bitcoin", - "idx": 1, - "in_create": 0, - "modified": "2014-06-18 03:49:09.038451", - "modified_by": "Administrator", - "module": "Setup", - "name": "Currency", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Accounts Manager", - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "create": 1, - "delete": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Sales Master Manager", - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "create": 1, - "delete": 0, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Purchase Master Manager", - "submit": 0, - "write": 1 - }, - { - "apply_user_permissions": 1, - "delete": 0, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "All" - } - ], - "read_only": 0 -} diff --git a/erpnext/setup/doctype/currency/currency.py b/erpnext/setup/doctype/currency/currency.py deleted file mode 100644 index abfbe1930c3..00000000000 --- a/erpnext/setup/doctype/currency/currency.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals -import frappe -from frappe import throw, _ - -from frappe.model.document import Document - -class Currency(Document): - def validate(self): - frappe.clear_cache() - -def validate_conversion_rate(currency, conversion_rate, conversion_rate_label, company): - """common validation for currency and price list currency""" - - company_currency = frappe.db.get_value("Company", company, "default_currency") - - if not conversion_rate: - throw(_("{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}.").format( - conversion_rate_label, currency, company_currency)) diff --git a/erpnext/setup/doctype/currency/test_currency.py b/erpnext/setup/doctype/currency/test_currency.py deleted file mode 100644 index f0c6cee2609..00000000000 --- a/erpnext/setup/doctype/currency/test_currency.py +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -# pre loaded - -import frappe -test_records = frappe.get_test_records('Currency') \ No newline at end of file diff --git a/erpnext/setup/doctype/currency/test_records.json b/erpnext/setup/doctype/currency/test_records.json deleted file mode 100644 index 0637a088a01..00000000000 --- a/erpnext/setup/doctype/currency/test_records.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py index 59a42cbbafb..90ea22f0c5d 100644 --- a/erpnext/setup/doctype/email_digest/email_digest.py +++ b/erpnext/setup/doctype/email_digest/email_digest.py @@ -9,7 +9,7 @@ from frappe.utils import fmt_money, formatdate, now_datetime, cstr, esc, \ from frappe.utils.dateutils import datetime_in_user_format from datetime import timedelta from dateutil.relativedelta import relativedelta -from frappe.utils.email_lib import sendmail +from frappe.email import sendmail from frappe.core.doctype.user.user import STANDARD_USERS content_sequence = [ diff --git a/erpnext/setup/doctype/global_defaults/global_defaults.py b/erpnext/setup/doctype/global_defaults/global_defaults.py index a8905f12624..e67ba44438c 100644 --- a/erpnext/setup/doctype/global_defaults/global_defaults.py +++ b/erpnext/setup/doctype/global_defaults/global_defaults.py @@ -6,7 +6,7 @@ from __future__ import unicode_literals import frappe import frappe.defaults from frappe.utils import cint -from frappe.core.doctype.property_setter.property_setter import make_property_setter +from frappe.custom.doctype.property_setter.property_setter import make_property_setter keydict = { # "key in defaults": "key in Global Defaults" diff --git a/erpnext/setup/doctype/naming_series/naming_series.py b/erpnext/setup/doctype/naming_series/naming_series.py index cb0d43780fd..92781390fcf 100644 --- a/erpnext/setup/doctype/naming_series/naming_series.py +++ b/erpnext/setup/doctype/naming_series/naming_series.py @@ -135,7 +135,7 @@ class NamingSeries(Document): msgprint(_("Please select prefix first")) def set_by_naming_series(doctype, fieldname, naming_series, hide_name_field=True): - from frappe.core.doctype.property_setter.property_setter import make_property_setter + from frappe.custom.doctype.property_setter.property_setter import make_property_setter if naming_series: make_property_setter(doctype, "naming_series", "hidden", 0, "Check") make_property_setter(doctype, "naming_series", "reqd", 1, "Check") diff --git a/erpnext/setup/install.py b/erpnext/setup/install.py index 0e8e58d9575..93f4ad55ecb 100644 --- a/erpnext/setup/install.py +++ b/erpnext/setup/install.py @@ -13,7 +13,6 @@ default_mail_footer = """

Date: Tue, 9 Sep 2014 16:15:35 +0530 Subject: [PATCH 02/18] [refactor] [frappe 5.0] --- .../journal_voucher/journal_voucher.py | 3 + .../report/general_ledger/general_ledger.py | 2 +- erpnext/accounts/utils.py | 2 +- .../quality_inspection/quality_inspection.py | 2 +- erpnext/buying/doctype/supplier/supplier.py | 2 + erpnext/config/desktop.py | 15 --- erpnext/config/setup.py | 2 +- erpnext/controllers/buying_controller.py | 4 + erpnext/controllers/queries.py | 4 +- erpnext/controllers/recurring_document.py | 2 +- erpnext/controllers/selling_controller.py | 4 + erpnext/home/__init__.py | 102 ------------------ erpnext/home/doctype/__init__.py | 1 - erpnext/home/doctype/feed/README.md | 1 - erpnext/home/doctype/feed/__init__.py | 1 - erpnext/home/doctype/feed/feed.json | 73 ------------- erpnext/home/doctype/feed/feed.py | 50 --------- erpnext/home/page/__init__.py | 1 - erpnext/home/page/activity/README.md | 1 - erpnext/home/page/activity/__init__.py | 1 - erpnext/home/page/activity/activity.css | 23 ---- erpnext/home/page/activity/activity.js | 88 --------------- erpnext/home/page/activity/activity.json | 20 ---- erpnext/home/page/activity/activity.py | 12 --- erpnext/hooks.py | 10 -- .../hr/doctype/expense_claim/expense_claim.py | 4 + .../leave_application/leave_application.py | 8 +- .../employee_leave_balance.py | 2 +- erpnext/projects/doctype/project/project.py | 4 +- erpnext/projects/doctype/task/task.py | 5 +- erpnext/projects/doctype/time_log/time_log.py | 2 +- .../daily_time_log_summary.py | 2 +- erpnext/projects/utils.py | 2 +- erpnext/selling/doctype/customer/customer.py | 2 + erpnext/selling/doctype/lead/lead.py | 3 + .../doctype/backup_manager/backup_manager.js | 32 +++--- .../doctype/email_digest/email_digest.py | 2 +- .../setup/page/setup_wizard/setup_wizard.py | 8 +- erpnext/startup/event_handlers.py | 17 --- .../stock/doctype/stock_entry/stock_entry.py | 4 + .../doctype/customer_issue/customer_issue.py | 2 + .../maintenance_visit/maintenance_visit.py | 2 + .../doctype/support_ticket/support_ticket.py | 5 +- erpnext/utilities/doctype/note/README.md | 1 - erpnext/utilities/doctype/note/__init__.py | 0 erpnext/utilities/doctype/note/note.json | 71 ------------ erpnext/utilities/doctype/note/note.py | 46 -------- erpnext/utilities/doctype/note/note_list.html | 16 --- erpnext/utilities/doctype/note/note_list.js | 3 - erpnext/utilities/doctype/note/test_note.py | 10 -- .../utilities/doctype/note/test_records.json | 7 -- erpnext/utilities/doctype/note_user/README.md | 1 - .../utilities/doctype/note_user/__init__.py | 0 .../doctype/note_user/note_user.json | 36 ------- .../utilities/doctype/note_user/note_user.py | 12 --- 55 files changed, 80 insertions(+), 655 deletions(-) delete mode 100644 erpnext/home/__init__.py delete mode 100644 erpnext/home/doctype/__init__.py delete mode 100644 erpnext/home/doctype/feed/README.md delete mode 100644 erpnext/home/doctype/feed/__init__.py delete mode 100644 erpnext/home/doctype/feed/feed.json delete mode 100644 erpnext/home/doctype/feed/feed.py delete mode 100644 erpnext/home/page/__init__.py delete mode 100644 erpnext/home/page/activity/README.md delete mode 100644 erpnext/home/page/activity/__init__.py delete mode 100644 erpnext/home/page/activity/activity.css delete mode 100644 erpnext/home/page/activity/activity.js delete mode 100644 erpnext/home/page/activity/activity.json delete mode 100644 erpnext/home/page/activity/activity.py delete mode 100644 erpnext/startup/event_handlers.py delete mode 100644 erpnext/utilities/doctype/note/README.md delete mode 100644 erpnext/utilities/doctype/note/__init__.py delete mode 100644 erpnext/utilities/doctype/note/note.json delete mode 100644 erpnext/utilities/doctype/note/note.py delete mode 100644 erpnext/utilities/doctype/note/note_list.html delete mode 100644 erpnext/utilities/doctype/note/note_list.js delete mode 100644 erpnext/utilities/doctype/note/test_note.py delete mode 100644 erpnext/utilities/doctype/note/test_records.json delete mode 100644 erpnext/utilities/doctype/note_user/README.md delete mode 100644 erpnext/utilities/doctype/note_user/__init__.py delete mode 100644 erpnext/utilities/doctype/note_user/note_user.json delete mode 100644 erpnext/utilities/doctype/note_user/note_user.py diff --git a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py index 7bf6fcc54ec..9f2385b9ae2 100644 --- a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py +++ b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py @@ -18,6 +18,9 @@ class JournalVoucher(AccountsController): self.credit_days_global = -1 self.is_approving_authority = -1 + def get_feed(self): + return self.voucher_type + def validate(self): if not self.is_opening: self.is_opening='No' diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py index 362f42e5e50..1e38cd7e90c 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.py +++ b/erpnext/accounts/report/general_ledger/general_ledger.py @@ -78,7 +78,7 @@ def get_conditions(filters): conditions.append("voucher_no=%(voucher_no)s") - from frappe.widgets.reportview import build_match_conditions + from frappe.desk.reportview import build_match_conditions match_conditions = build_match_conditions("GL Entry") if match_conditions: conditions.append(match_conditions) diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index c658cdd09ff..d28e8d714cb 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -7,7 +7,7 @@ import frappe from frappe.utils import nowdate, cstr, flt, now, getdate, add_months from frappe import throw, _ from frappe.utils import formatdate -import frappe.widgets.reportview +import frappe.desk.reportview class FiscalYearError(frappe.ValidationError): pass class BudgetError(frappe.ValidationError): pass diff --git a/erpnext/buying/doctype/quality_inspection/quality_inspection.py b/erpnext/buying/doctype/quality_inspection/quality_inspection.py index 3fc130a7ac1..da341086d7f 100644 --- a/erpnext/buying/doctype/quality_inspection/quality_inspection.py +++ b/erpnext/buying/doctype/quality_inspection/quality_inspection.py @@ -38,7 +38,7 @@ class QualityInspection(Document): def item_query(doctype, txt, searchfield, start, page_len, filters): if filters.get("from"): - from frappe.widgets.reportview import get_match_cond + from frappe.desk.reportview import get_match_cond filters.update({ "txt": txt, "mcond": get_match_cond(filters["from"]), diff --git a/erpnext/buying/doctype/supplier/supplier.py b/erpnext/buying/doctype/supplier/supplier.py index 240762eb2c8..baf8ce55853 100644 --- a/erpnext/buying/doctype/supplier/supplier.py +++ b/erpnext/buying/doctype/supplier/supplier.py @@ -13,6 +13,8 @@ from erpnext.accounts.party import create_party_account from erpnext.utilities.transaction_base import TransactionBase class Supplier(TransactionBase): + def get_feed(self): + return self.supplier_name def autoname(self): supp_master_name = frappe.defaults.get_global_default('supp_master_name') diff --git a/erpnext/config/desktop.py b/erpnext/config/desktop.py index 9f40ef33ab4..34f15995f79 100644 --- a/erpnext/config/desktop.py +++ b/erpnext/config/desktop.py @@ -7,13 +7,6 @@ def get_data(): "icon": "icon-money", "type": "module" }, - "Activity": { - "color": "#e67e22", - "icon": "icon-play", - "label": _("Activity"), - "link": "activity", - "type": "page" - }, "Buying": { "color": "#c0392b", "icon": "icon-shopping-cart", @@ -30,14 +23,6 @@ def get_data(): "icon": "icon-cogs", "type": "module" }, - "Notes": { - "color": "#95a5a6", - "doctype": "Note", - "icon": "icon-file-alt", - "label": _("Notes"), - "link": "List/Note", - "type": "list" - }, "POS": { "color": "#589494", "icon": "icon-th", diff --git a/erpnext/config/setup.py b/erpnext/config/setup.py index 8db9ef2914f..82fed9db4e7 100644 --- a/erpnext/config/setup.py +++ b/erpnext/config/setup.py @@ -1,5 +1,5 @@ from frappe import _ -from frappe.widgets.moduleview import add_setup_section +from frappe.desk.moduleview import add_setup_section def get_data(): data = [ diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 5f418c4df26..12d183cd2b4 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -18,6 +18,10 @@ class BuyingController(StockController): "other_charges": "templates/print_formats/includes/taxes.html", } + def get_feed(self): + return _("From {0} | {1} {2}").format(self.supplier_name, self.currency, + self.grand_total_import) + def validate(self): super(BuyingController, self).validate() if getattr(self, "supplier", None) and not self.supplier_name: diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index d5555324191..cbbd82cc01c 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import frappe -from frappe.widgets.reportview import get_match_cond +from frappe.desk.reportview import get_match_cond from frappe.model.db_query import DatabaseQuery def get_filters_cond(doctype, filters, conditions): @@ -276,7 +276,7 @@ def get_account_list(doctype, txt, searchfield, start, page_len, filters): if searchfield and txt: filter_list.append([doctype, searchfield, "like", "%%%s%%" % txt]) - return frappe.widgets.reportview.execute("Account", filters = filter_list, + return frappe.desk.reportview.execute("Account", filters = filter_list, fields = ["name", "parent_account"], limit_start=start, limit_page_length=page_len, as_list=True) diff --git a/erpnext/controllers/recurring_document.py b/erpnext/controllers/recurring_document.py index bdf8b2918a6..3395d0ca859 100644 --- a/erpnext/controllers/recurring_document.py +++ b/erpnext/controllers/recurring_document.py @@ -134,7 +134,7 @@ def notify_errors(doc, doctype, customer, owner): def assign_task_to_owner(doc, doctype, msg, users): for d in users: - from frappe.widgets.form import assign_to + from frappe.desk.form import assign_to args = { 'assign_to' : d, 'doctype' : doctype, diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 86d883784ba..0f3dc48aa3d 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -18,6 +18,10 @@ class SellingController(StockController): "other_charges": "templates/print_formats/includes/taxes.html", } + def get_feed(self): + return _("To {0} | {1} {2}").format(self.customer_name, self.currency, + self.grand_total_export) + def onload(self): if self.doctype in ("Sales Order", "Delivery Note", "Sales Invoice"): for item in self.get(self.fname): diff --git a/erpnext/home/__init__.py b/erpnext/home/__init__.py deleted file mode 100644 index 26a11a22bce..00000000000 --- a/erpnext/home/__init__.py +++ /dev/null @@ -1,102 +0,0 @@ -# ERPNext - web based ERP (http://erpnext.com) -# Copyright (C) 2012 Web Notes Technologies Pvt Ltd -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -from __future__ import unicode_literals -import frappe -from frappe import msgprint - -feed_dict = { - # Project - 'Project': ['[%(status)s]', '#000080'], - 'Task': ['[%(status)s] %(subject)s', '#000080'], - - # Sales - 'Lead': ['%(lead_name)s', '#000080'], - 'Quotation': ['[%(status)s] To %(customer_name)s worth %(currency)s %(grand_total_export)s', '#4169E1'], - 'Sales Order': ['[%(status)s] To %(customer_name)s worth %(currency)s %(grand_total_export)s', '#4169E1'], - - # Purchase - 'Supplier': ['%(supplier_name)s, %(supplier_type)s', '#6495ED'], - 'Purchase Order': ['[%(status)s] %(name)s To %(supplier_name)s for %(currency)s %(grand_total_import)s', '#4169E1'], - - # Stock - 'Delivery Note': ['[%(status)s] To %(customer_name)s', '#4169E1'], - 'Purchase Receipt': ['[%(status)s] From %(supplier)s', '#4169E1'], - - # Accounts - 'Journal Voucher': ['[%(voucher_type)s] %(name)s', '#4169E1'], - 'Purchase Invoice': ['To %(supplier_name)s for %(currency)s %(grand_total_import)s', '#4169E1'], - 'Sales Invoice': ['To %(customer_name)s for %(currency)s %(grand_total_export)s', '#4169E1'], - - # HR - 'Expense Claim': ['[%(approval_status)s] %(name)s by %(employee_name)s', '#4169E1'], - 'Salary Slip': ['%(employee_name)s for %(month)s %(fiscal_year)s', '#4169E1'], - 'Leave Transaction': ['%(leave_type)s for %(employee)s', '#4169E1'], - - # Support - 'Customer Issue': ['[%(status)s] %(description)s by %(customer_name)s', '#000080'], - 'Maintenance Visit': ['To %(customer_name)s', '#4169E1'], - 'Support Ticket': ["[%(status)s] %(subject)s", '#000080'], - - # Website - 'Web Page': ['%(title)s', '#000080'], - 'Blog': ['%(title)s', '#000080'] -} - -def make_feed(feedtype, doctype, name, owner, subject, color): - "makes a new Feed record" - #msgprint(subject) - from frappe.utils import get_fullname - - if feedtype in ('Login', 'Comment', 'Assignment'): - # delete old login, comment feed - frappe.db.sql("""delete from tabFeed where - datediff(curdate(), creation) > 7 and doc_type in ('Comment', 'Login', 'Assignment')""") - else: - # one feed per item - frappe.db.sql("""delete from tabFeed - where doc_type=%s and doc_name=%s - and ifnull(feed_type,'') != 'Comment'""", (doctype, name)) - - f = frappe.new_doc('Feed') - f.owner = owner - f.feed_type = feedtype - f.doc_type = doctype - f.doc_name = name - f.subject = subject - f.color = color - f.full_name = get_fullname(owner) - f.save(ignore_permissions=True) - -def update_feed(doc, method=None): - "adds a new feed" - if frappe.flags.in_patch: - return - - if method in ['on_update', 'on_submit']: - subject, color = feed_dict.get(doc.doctype, [None, None]) - if subject: - make_feed('', doc.doctype, doc.name, doc.owner, subject % doc.as_dict(), color) - -def make_comment_feed(doc, method): - """add comment to feed""" - comment = doc.comment - if len(comment) > 240: - comment = comment[:240] + "..." - - make_feed('Comment', doc.comment_doctype, doc.comment_docname, doc.comment_by, - '"' + comment + '"', '#6B24B3') - diff --git a/erpnext/home/doctype/__init__.py b/erpnext/home/doctype/__init__.py deleted file mode 100644 index baffc488252..00000000000 --- a/erpnext/home/doctype/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from __future__ import unicode_literals diff --git a/erpnext/home/doctype/feed/README.md b/erpnext/home/doctype/feed/README.md deleted file mode 100644 index 085e5758b04..00000000000 --- a/erpnext/home/doctype/feed/README.md +++ /dev/null @@ -1 +0,0 @@ -Activity Feed. \ No newline at end of file diff --git a/erpnext/home/doctype/feed/__init__.py b/erpnext/home/doctype/feed/__init__.py deleted file mode 100644 index baffc488252..00000000000 --- a/erpnext/home/doctype/feed/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from __future__ import unicode_literals diff --git a/erpnext/home/doctype/feed/feed.json b/erpnext/home/doctype/feed/feed.json deleted file mode 100644 index bef8aacfc0e..00000000000 --- a/erpnext/home/doctype/feed/feed.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "autoname": "hash", - "creation": "2012-07-03 13:29:42", - "docstatus": 0, - "doctype": "DocType", - "fields": [ - { - "fieldname": "feed_type", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Feed Type", - "options": "\nComment\nLogin", - "permlevel": 0 - }, - { - "fieldname": "doc_type", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Doc Type", - "permlevel": 0 - }, - { - "fieldname": "doc_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Doc Name", - "permlevel": 0 - }, - { - "fieldname": "subject", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Subject", - "permlevel": 0 - }, - { - "fieldname": "color", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Color", - "permlevel": 0 - }, - { - "fieldname": "full_name", - "fieldtype": "Data", - "label": "Full Name", - "permlevel": 0 - } - ], - "icon": "icon-rss", - "idx": 1, - "modified": "2014-06-18 03:49:10.882587", - "modified_by": "Administrator", - "module": "Home", - "name": "Feed", - "owner": "Administrator", - "permissions": [ - { - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager" - }, - { - "apply_user_permissions": 1, - "permlevel": 0, - "read": 1, - "role": "All" - } - ] -} diff --git a/erpnext/home/doctype/feed/feed.py b/erpnext/home/doctype/feed/feed.py deleted file mode 100644 index df8ccb2ef2a..00000000000 --- a/erpnext/home/doctype/feed/feed.py +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals -import frappe -import frappe.defaults -import frappe.permissions -from frappe.model.document import Document - -class Feed(Document): - pass - -def on_doctype_update(): - if not frappe.db.sql("""show index from `tabFeed` - where Key_name="feed_doctype_docname_index" """): - frappe.db.commit() - frappe.db.sql("""alter table `tabFeed` - add index feed_doctype_docname_index(doc_type, doc_name)""") - -def get_permission_query_conditions(user): - if not user: user = frappe.session.user - - if not frappe.permissions.apply_user_permissions("Feed", "read", user): - return "" - - user_permissions = frappe.defaults.get_user_permissions(user) - can_read = frappe.get_user(user).get_can_read() - - can_read_doctypes = ['"{}"'.format(doctype) for doctype in - list(set(can_read) - set(user_permissions.keys()))] - - if not can_read_doctypes: - return "" - - conditions = ["tabFeed.doc_type in ({})".format(", ".join(can_read_doctypes))] - - if user_permissions: - can_read_docs = [] - for doctype, names in user_permissions.items(): - for n in names: - can_read_docs.append('"{}|{}"'.format(doctype, n)) - - if can_read_docs: - conditions.append("concat_ws('|', tabFeed.doc_type, tabFeed.doc_name) in ({})".format( - ", ".join(can_read_docs))) - - return "(" + " or ".join(conditions) + ")" - -def has_permission(doc, user): - return frappe.has_permission(doc.doc_type, "read", doc.doc_name, user=user) diff --git a/erpnext/home/page/__init__.py b/erpnext/home/page/__init__.py deleted file mode 100644 index baffc488252..00000000000 --- a/erpnext/home/page/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from __future__ import unicode_literals diff --git a/erpnext/home/page/activity/README.md b/erpnext/home/page/activity/README.md deleted file mode 100644 index 59e0352d12e..00000000000 --- a/erpnext/home/page/activity/README.md +++ /dev/null @@ -1 +0,0 @@ -List of latest activities based on Feed. \ No newline at end of file diff --git a/erpnext/home/page/activity/__init__.py b/erpnext/home/page/activity/__init__.py deleted file mode 100644 index baffc488252..00000000000 --- a/erpnext/home/page/activity/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from __future__ import unicode_literals diff --git a/erpnext/home/page/activity/activity.css b/erpnext/home/page/activity/activity.css deleted file mode 100644 index 28b1b409110..00000000000 --- a/erpnext/home/page/activity/activity.css +++ /dev/null @@ -1,23 +0,0 @@ -#page-activity .label { - display: inline-block; - width: 100px; - margin-right: 7px; -} - -#page-activity .label-info { - cursor: pointer; -} - -#page-activity .user-info { - float: right; - color: #777; - font-size: 10px; -} - -#page-activity .date-sep { - margin: 0px -15px 11px -15px; - padding: 5px 0px; - border-bottom: 2px solid #aaa; - color: #555; - font-size: 10px; -} \ No newline at end of file diff --git a/erpnext/home/page/activity/activity.js b/erpnext/home/page/activity/activity.js deleted file mode 100644 index f50f6c89e5a..00000000000 --- a/erpnext/home/page/activity/activity.js +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.pages['activity'].onload = function(wrapper) { - frappe.ui.make_app_page({ - parent: wrapper, - title: __("Activity"), - single_column: true - }) - wrapper.appframe.add_module_icon("Activity"); - - var list = new frappe.ui.Listing({ - hide_refresh: true, - appframe: wrapper.appframe, - method: 'erpnext.home.page.activity.activity.get_feed', - parent: $(wrapper).find(".layout-main"), - render_row: function(row, data) { - new erpnext.ActivityFeed(row, data); - } - }); - list.run(); - - wrapper.appframe.set_title_right(__("Refresh"), function() { list.run(); }); - - // Build Report Button - if(frappe.boot.user.can_get_report.indexOf("Feed")!=-1) { - wrapper.appframe.add_button(__('Build Report'), function() { - frappe.set_route('Report', "Feed"); - }, 'icon-th'); - } -} - -erpnext.last_feed_date = false; -erpnext.ActivityFeed = Class.extend({ - init: function(row, data) { - this.scrub_data(data); - this.add_date_separator(row, data); - if(!data.add_class) data.add_class = "label-default"; - $(row).append(repl('
\ - \ - %(feed_type)s\ - %(link)s %(subject)s
', data)); - }, - scrub_data: function(data) { - data.by = frappe.user_info(data.owner).fullname; - data.imgsrc = frappe.utils.get_file_link(frappe.user_info(data.owner).image); - - // feedtype - if(!data.feed_type) { - data.feed_type = __(data.doc_type); - data.add_class = "label-info"; - data.onclick = repl('onclick="window.location.href=\'#!List/%(feed_type)s\';"', data) - } - - // color for comment - if(data.feed_type=='Comment') { - data.add_class = "label-danger"; - } - - if(data.feed_type=='Assignment') { - data.add_class = "label-warning"; - } - - // link - if(data.doc_name && data.feed_type!='Login') { - data.link = frappe.format(data.doc_name, {"fieldtype":"Link", "options":data.doc_type}) - } else { - data.link = ""; - } - }, - add_date_separator: function(row, data) { - var date = dateutil.str_to_obj(data.modified); - var last = erpnext.last_feed_date; - - if((last && dateutil.obj_to_str(last) != dateutil.obj_to_str(date)) || (!last)) { - var diff = dateutil.get_day_diff(dateutil.get_today(), dateutil.obj_to_str(date)); - if(diff < 1) { - pdate = 'Today'; - } else if(diff < 2) { - pdate = 'Yesterday'; - } else { - pdate = dateutil.global_date_format(date); - } - $(row).html(repl('
%(date)s
', {date: pdate})); - } - erpnext.last_feed_date = date; - } -}) diff --git a/erpnext/home/page/activity/activity.json b/erpnext/home/page/activity/activity.json deleted file mode 100644 index a65057e7782..00000000000 --- a/erpnext/home/page/activity/activity.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "creation": "2013-04-09 11:45:31.000000", - "docstatus": 0, - "doctype": "Page", - "icon": "icon-play", - "idx": 1, - "modified": "2013-07-11 14:40:20.000000", - "modified_by": "Administrator", - "module": "Home", - "name": "activity", - "owner": "Administrator", - "page_name": "activity", - "roles": [ - { - "role": "All" - } - ], - "standard": "Yes", - "title": "Activity" -} \ No newline at end of file diff --git a/erpnext/home/page/activity/activity.py b/erpnext/home/page/activity/activity.py deleted file mode 100644 index f8e12132c84..00000000000 --- a/erpnext/home/page/activity/activity.py +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals -import frappe -from frappe.utils import cint - -@frappe.whitelist() -def get_feed(limit_start, limit_page_length): - """get feed""" - return frappe.get_list("Feed", fields=["name", "feed_type", "doc_type", "subject", "owner", "modified"], - limit_start = limit_start, limit_page_length = limit_page_length) diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 166d83089ba..6c09030706c 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -20,7 +20,6 @@ notification_config = "erpnext.startup.notifications.get_notification_config" dump_report_map = "erpnext.startup.report_data_map.data_map" update_website_context = "erpnext.startup.webutils.update_website_context" -on_session_creation = "erpnext.startup.event_handlers.on_session_creation" before_tests = "erpnext.setup.utils.before_tests" website_generators = ["Item Group", "Item", "Sales Partner"] @@ -28,24 +27,15 @@ website_generators = ["Item Group", "Item", "Sales Partner"] standard_queries = "Customer:erpnext.selling.doctype.customer.customer.get_customer_list" permission_query_conditions = { - "Feed": "erpnext.home.doctype.feed.feed.get_permission_query_conditions", "Note": "erpnext.utilities.doctype.note.note.get_permission_query_conditions" } has_permission = { - "Feed": "erpnext.home.doctype.feed.feed.has_permission", "Note": "erpnext.utilities.doctype.note.note.has_permission" } doc_events = { - "*": { - "on_update": "erpnext.home.update_feed", - "on_submit": "erpnext.home.update_feed" - }, - "Comment": { - "on_update": "erpnext.home.make_comment_feed" - }, "Stock Entry": { "on_submit": "erpnext.stock.doctype.material_request.material_request.update_completed_qty", "on_cancel": "erpnext.stock.doctype.material_request.material_request.update_completed_qty" diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.py b/erpnext/hr/doctype/expense_claim/expense_claim.py index 560ee029007..4db9cbf94c6 100644 --- a/erpnext/hr/doctype/expense_claim/expense_claim.py +++ b/erpnext/hr/doctype/expense_claim/expense_claim.py @@ -11,6 +11,10 @@ from erpnext.hr.utils import set_employee_name class InvalidExpenseApproverError(frappe.ValidationError): pass class ExpenseClaim(Document): + def get_feed(self): + return _("{0}: From {0} for {1}").format(self.approval_status, + self.employee_name, self.total_claimed_amount) + def validate(self): self.validate_fiscal_year() self.validate_exp_details() diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py index 1751eb128d1..aacb7d464af 100755 --- a/erpnext/hr/doctype/leave_application/leave_application.py +++ b/erpnext/hr/doctype/leave_application/leave_application.py @@ -17,6 +17,10 @@ class LeaveApproverIdentityError(frappe.ValidationError): pass from frappe.model.document import Document class LeaveApplication(Document): + def get_feed(self): + return _("{0}: From {0} of type {1}").format(self.status, + self.employee_name, self.leave_type) + def validate(self): if not getattr(self, "__islocal", None) and frappe.db.exists(self.doctype, self.name): self.previous_doc = frappe.db.get_value(self.doctype, self.name, "*", as_dict=True) @@ -212,7 +216,7 @@ class LeaveApplication(Document): def notify(self, args): args = frappe._dict(args) - from frappe.core.page.messages.messages import post + from frappe.desk.page.messages.messages import post post(**{"txt": args.message, "contact": args.message_to, "subject": args.subject, "notify": cint(self.follow_via_email)}) @@ -249,7 +253,7 @@ def get_events(start, end): employee, company = employee.name, employee.company - from frappe.widgets.reportview import build_match_conditions + from frappe.desk.reportview import build_match_conditions match_conditions = build_match_conditions("Leave Application") # show department leaves for employee diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py index 4b9284804b5..f54b2e47b7b 100644 --- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +++ b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import frappe from frappe import _ -from frappe.widgets.reportview import execute as runreport +from frappe.desk.reportview import execute as runreport def execute(filters=None): if not filters: filters = {} diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py index 88e6e122feb..ce9b561f347 100644 --- a/erpnext/projects/doctype/project/project.py +++ b/erpnext/projects/doctype/project/project.py @@ -11,6 +11,8 @@ from erpnext.utilities.transaction_base import delete_events from frappe.model.document import Document class Project(Document): + def get_feed(self): + return self.status def get_gross_profit(self): pft, per_pft =0, 0 @@ -70,4 +72,4 @@ class Project(Document): @frappe.whitelist() def get_cost_center_name(project_name): - return frappe.db.get_value("Project", project_name, "cost_center") \ No newline at end of file + return frappe.db.get_value("Project", project_name, "cost_center") diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index 8d63f12e671..fe1ce7fd9c4 100644 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -11,6 +11,9 @@ from frappe import _ from frappe.model.document import Document class Task(Document): + def get_feed(self): + return '{0}: {1}'.format(_(self.status), self.subject) + def get_project_details(self): return { "project": self.project @@ -47,7 +50,7 @@ class Task(Document): @frappe.whitelist() def get_events(start, end, filters=None): - from frappe.widgets.reportview import build_match_conditions + from frappe.desk.reportview import build_match_conditions if not frappe.has_permission("Task"): frappe.msgprint(_("No Permission"), raise_exception=1) diff --git a/erpnext/projects/doctype/time_log/time_log.py b/erpnext/projects/doctype/time_log/time_log.py index eb8afc7729b..66783920371 100644 --- a/erpnext/projects/doctype/time_log/time_log.py +++ b/erpnext/projects/doctype/time_log/time_log.py @@ -61,7 +61,7 @@ class TimeLog(Document): @frappe.whitelist() def get_events(start, end): - from frappe.widgets.reportview import build_match_conditions + from frappe.desk.reportview import build_match_conditions if not frappe.has_permission("Time Log"): frappe.msgprint(_("No Permission"), raise_exception=1) diff --git a/erpnext/projects/report/daily_time_log_summary/daily_time_log_summary.py b/erpnext/projects/report/daily_time_log_summary/daily_time_log_summary.py index b8f746b15d1..fecdc2f1c36 100644 --- a/erpnext/projects/report/daily_time_log_summary/daily_time_log_summary.py +++ b/erpnext/projects/report/daily_time_log_summary/daily_time_log_summary.py @@ -75,7 +75,7 @@ def build_conditions(filters): if filters.get("to_date"): conditions += " and to_time <= timestamp(%(to_date)s, %(to_time)s)" - from frappe.widgets.reportview import build_match_conditions + from frappe.desk.reportview import build_match_conditions match_conditions = build_match_conditions("Time Log") if match_conditions: conditions += " and %s" % match_conditions diff --git a/erpnext/projects/utils.py b/erpnext/projects/utils.py index 6fee9b37858..b36519b8a84 100644 --- a/erpnext/projects/utils.py +++ b/erpnext/projects/utils.py @@ -12,7 +12,7 @@ def get_time_log_list(doctype, txt, searchfield, start, page_len, filters): @frappe.whitelist() def query_task(doctype, txt, searchfield, start, page_len, filters): - from frappe.widgets.reportview import build_match_conditions + from frappe.desk.reportview import build_match_conditions search_string = "%%%s%%" % txt order_by_string = "%s%%" % txt diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py index 362542e55a0..a43b44d08fc 100644 --- a/erpnext/selling/doctype/customer/customer.py +++ b/erpnext/selling/doctype/customer/customer.py @@ -12,6 +12,8 @@ from erpnext.utilities.transaction_base import TransactionBase from erpnext.accounts.party import create_party_account class Customer(TransactionBase): + def get_feed(self): + return self.customer_name def autoname(self): cust_master_name = frappe.defaults.get_global_default('cust_master_name') diff --git a/erpnext/selling/doctype/lead/lead.py b/erpnext/selling/doctype/lead/lead.py index 3c345efc475..667a39fa05d 100644 --- a/erpnext/selling/doctype/lead/lead.py +++ b/erpnext/selling/doctype/lead/lead.py @@ -11,6 +11,9 @@ from frappe.model.mapper import get_mapped_doc from erpnext.controllers.selling_controller import SellingController class Lead(SellingController): + def get_feed(self): + return '{0}: {1}'.format(_(self.status), self.lead_name) + def onload(self): customer = frappe.db.get_value("Customer", {"lead_name": self.name}) self.get("__onload").is_customer = customer diff --git a/erpnext/setup/doctype/backup_manager/backup_manager.js b/erpnext/setup/doctype/backup_manager/backup_manager.js index ee2b1a7fb4e..03c6bf9c421 100644 --- a/erpnext/setup/doctype/backup_manager/backup_manager.js +++ b/erpnext/setup/doctype/backup_manager/backup_manager.js @@ -4,17 +4,17 @@ $.extend(cur_frm.cscript, { refresh: function() { cur_frm.disable_save(); - - if(!(cint(cur_frm.doc.dropbox_access_allowed) || + + if(!(cint(cur_frm.doc.dropbox_access_allowed) || cint(cur_frm.doc.gdrive_access_allowed))) { cur_frm.set_intro(__("You can start by selecting backup frequency and granting access for sync")); } else { var services = { - "dropbox": __("Dropbox"), - "gdrive": __("Google Drive") + "dropbox": __("Dropbox") + // "gdrive": __("Google Drive") } var active_services = []; - + $.each(services, function(service, label) { var access_allowed = cint(cur_frm.doc[service + "_access_allowed"]); var frequency = cur_frm.doc["upload_backups_to_" + service]; @@ -22,27 +22,27 @@ $.extend(cur_frm.cscript, { active_services.push(label + " [" + frequency + "]"); } }); - + if(active_services.length > 0) { - cur_frm.set_intro(__("Backups will be uploaded to") + ": " + + cur_frm.set_intro(__("Backups will be uploaded to") + ": " + frappe.utils.comma_and(active_services)); } else { cur_frm.set_intro(""); } } - + }, - + validate_send_notifications_to: function() { if(!cur_frm.doc.send_notifications_to) { - msgprint(__("Please specify") + ": " + + msgprint(__("Please specify") + ": " + __(frappe.meta.get_label(cur_frm.doctype, "send_notifications_to"))); return false; } - + return true; }, - + allow_dropbox_access: function() { if(cur_frm.cscript.validate_send_notifications_to()) { return frappe.call({ @@ -59,7 +59,7 @@ $.extend(cur_frm.cscript, { }); } }, - + allow_gdrive_access: function() { if(cur_frm.cscript.validate_send_notifications_to()) { return frappe.call({ @@ -72,7 +72,7 @@ $.extend(cur_frm.cscript, { }); } }, - + validate_gdrive: function() { return frappe.call({ method: "erpnext.setup.doctype.backup_manager.backup_googledrive.gdrive_callback", @@ -81,11 +81,11 @@ $.extend(cur_frm.cscript, { }, }); }, - + upload_backups_to_dropbox: function() { cur_frm.save(); }, - + // upload_backups_to_gdrive: function() { // cur_frm.save(); // }, diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py index 90ea22f0c5d..c66d3de0f11 100644 --- a/erpnext/setup/doctype/email_digest/email_digest.py +++ b/erpnext/setup/doctype/email_digest/email_digest.py @@ -295,7 +295,7 @@ class EmailDigest(Document): filter_by_company=False) def get_calendar_events(self, user_id): - from frappe.core.doctype.event.event import get_events + from frappe.desk.doctype.event.event import get_events events = get_events(self.future_from_date.strftime("%Y-%m-%d"), self.future_to_date.strftime("%Y-%m-%d")) html = "" diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.py b/erpnext/setup/page/setup_wizard/setup_wizard.py index 2750e21248b..cc1cd23c5ef 100644 --- a/erpnext/setup/page/setup_wizard/setup_wizard.py +++ b/erpnext/setup/page/setup_wizard/setup_wizard.py @@ -227,9 +227,11 @@ def set_defaults(args): def create_feed_and_todo(): """update activty feed and create todo for creation of item, customer, vendor""" - from erpnext.home import make_feed - make_feed('Comment', 'ToDo', '', frappe.session['user'], - 'ERNext Setup Complete!', '#6B24B3') + frappe.get_doc({ + "doctype": "Feed", + "feedtype": "Comment", + "subject": "ERPNext Setup Complete!" + }).insert(ignore_permissions=True) def create_email_digest(): from frappe.utils.user import get_system_managers diff --git a/erpnext/startup/event_handlers.py b/erpnext/startup/event_handlers.py deleted file mode 100644 index 6dac990a685..00000000000 --- a/erpnext/startup/event_handlers.py +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt" - - -from __future__ import unicode_literals -import frappe -from frappe.utils import nowtime -from frappe.utils.user import get_user_fullname -from erpnext.home import make_feed - -def on_session_creation(login_manager): - """make feed""" - if frappe.session['user'] != 'Guest': - # create feed - make_feed('Login', 'User', login_manager.user, login_manager.user, - '%s logged in at %s' % (get_user_fullname(login_manager.user), nowtime()), - login_manager.user=='Administrator' and '#8CA2B3' or '#1B750D') diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index c3aab6acd71..74f88f2b132 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -26,6 +26,10 @@ form_grid_templates = { class StockEntry(StockController): fname = 'mtn_details' + + def get_feed(self): + return _("From {0} to {1}").format(self.from_warehouse, self.to_warehouse) + def onload(self): if self.docstatus==1: for item in self.get(self.fname): diff --git a/erpnext/support/doctype/customer_issue/customer_issue.py b/erpnext/support/doctype/customer_issue/customer_issue.py index 45adb0b8d22..9e6300ea164 100644 --- a/erpnext/support/doctype/customer_issue/customer_issue.py +++ b/erpnext/support/doctype/customer_issue/customer_issue.py @@ -12,6 +12,8 @@ from frappe.utils import today from erpnext.utilities.transaction_base import TransactionBase class CustomerIssue(TransactionBase): + def get_feed(self): + return _("{0}: From {1}").format(self.status, self.customer_name) def validate(self): if session['user'] != 'Guest' and not self.customer: diff --git a/erpnext/support/doctype/maintenance_visit/maintenance_visit.py b/erpnext/support/doctype/maintenance_visit/maintenance_visit.py index e16017df1d9..ef2fb41a29e 100644 --- a/erpnext/support/doctype/maintenance_visit/maintenance_visit.py +++ b/erpnext/support/doctype/maintenance_visit/maintenance_visit.py @@ -8,6 +8,8 @@ from frappe import _ from erpnext.utilities.transaction_base import TransactionBase class MaintenanceVisit(TransactionBase): + def get_feed(self): + return _("To {0}").format(self.customer_name) def get_item_details(self, item_code): return frappe.db.get_value("Item", item_code, ["item_name", "description"], as_dict=1) diff --git a/erpnext/support/doctype/support_ticket/support_ticket.py b/erpnext/support/doctype/support_ticket/support_ticket.py index 4cdc20ac0fe..1212218b92f 100644 --- a/erpnext/support/doctype/support_ticket/support_ticket.py +++ b/erpnext/support/doctype/support_ticket/support_ticket.py @@ -3,11 +3,14 @@ from __future__ import unicode_literals import frappe +from frappe import _ from erpnext.utilities.transaction_base import TransactionBase from frappe.utils import now, extract_email_id class SupportTicket(TransactionBase): + def get_feed(self): + return "{0}: {1}".format(_(self.status, self.subject)) def get_sender(self, comm): return frappe.db.get_value('Support Email Settings',None,'support_email') @@ -30,7 +33,7 @@ class SupportTicket(TransactionBase): self.set_lead_contact(self.raised_by) if self.status == "Closed": - from frappe.widgets.form.assign_to import clear + from frappe.desk.form.assign_to import clear clear(self.doctype, self.name) def set_lead_contact(self, email_id): diff --git a/erpnext/utilities/doctype/note/README.md b/erpnext/utilities/doctype/note/README.md deleted file mode 100644 index 95d7b332697..00000000000 --- a/erpnext/utilities/doctype/note/README.md +++ /dev/null @@ -1 +0,0 @@ -Shared Note. (Page with standard information, links, attachments). \ No newline at end of file diff --git a/erpnext/utilities/doctype/note/__init__.py b/erpnext/utilities/doctype/note/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/erpnext/utilities/doctype/note/note.json b/erpnext/utilities/doctype/note/note.json deleted file mode 100644 index 66d99f4cd36..00000000000 --- a/erpnext/utilities/doctype/note/note.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "allow_rename": 1, - "creation": "2013-05-24 13:41:00", - "description": "Note is a free page where users can share documents / notes", - "docstatus": 0, - "doctype": "DocType", - "document_type": "Transaction", - "fields": [ - { - "fieldname": "title", - "fieldtype": "Data", - "in_list_view": 0, - "label": "Title", - "permlevel": 0, - "print_hide": 1, - "reqd": 1 - }, - { - "description": "Help: To link to another record in the system, use \"#Form/Note/[Note Name]\" as the Link URL. (don't use \"http://\")", - "fieldname": "content", - "fieldtype": "Text Editor", - "in_list_view": 0, - "label": "Content", - "permlevel": 0 - }, - { - "fieldname": "share", - "fieldtype": "Section Break", - "label": "Share", - "permlevel": 0 - }, - { - "description": "Everyone can read", - "fieldname": "public", - "fieldtype": "Check", - "in_list_view": 1, - "label": "Public", - "permlevel": 0, - "print_hide": 1 - }, - { - "fieldname": "share_with", - "fieldtype": "Table", - "label": "Share With", - "options": "Note User", - "permlevel": 0, - "print_hide": 1 - } - ], - "icon": "icon-file-text", - "idx": 1, - "modified": "2014-07-30 03:24:38.302928", - "modified_by": "Administrator", - "module": "Utilities", - "name": "Note", - "owner": "Administrator", - "permissions": [ - { - "apply_user_permissions": 1, - "create": 1, - "delete": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "role": "All", - "write": 1 - } - ], - "read_only_onload": 1 -} \ No newline at end of file diff --git a/erpnext/utilities/doctype/note/note.py b/erpnext/utilities/doctype/note/note.py deleted file mode 100644 index 2db4137ddda..00000000000 --- a/erpnext/utilities/doctype/note/note.py +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -# For license information, please see license.txt - -from __future__ import unicode_literals -import frappe -from frappe import _ -from frappe.model.document import Document - -class Note(Document): - def autoname(self): - # replace forbidden characters - import re - self.name = re.sub("[%'\"#*?`]", "", self.title.strip()) - - def before_print(self): - self.print_heading = self.name - self.sub_heading = "" - -def get_permission_query_conditions(user): - if not user: user = frappe.session.user - - if user == "Administrator": - return "" - - return """(`tabNote`.public=1 or `tabNote`.owner="{user}" or exists ( - select name from `tabNote User` - where `tabNote User`.parent=`tabNote`.name - and `tabNote User`.user="{user}"))""".format(user=user) - -def has_permission(doc, ptype, user): - if doc.public == 1 or user == "Administrator": - return True - - if user == doc.owner: - return True - - note_user_map = dict((d.user, d) for d in doc.get("share_with")) - if user in note_user_map: - if ptype == "read": - return True - elif note_user_map.get(user).permission == "Edit": - return True - - return False diff --git a/erpnext/utilities/doctype/note/note_list.html b/erpnext/utilities/doctype/note/note_list.html deleted file mode 100644 index d3289d20e19..00000000000 --- a/erpnext/utilities/doctype/note/note_list.html +++ /dev/null @@ -1,16 +0,0 @@ -
-
-
- {%= list.get_avatar_and_id(doc) %} - - {% if(!doc.public) { %} - - - - {% } %} - -
-
-
diff --git a/erpnext/utilities/doctype/note/note_list.js b/erpnext/utilities/doctype/note/note_list.js deleted file mode 100644 index 161ebad4feb..00000000000 --- a/erpnext/utilities/doctype/note/note_list.js +++ /dev/null @@ -1,3 +0,0 @@ -frappe.listview_settings['Note'] = { - add_fields: ["title", "public"], -} diff --git a/erpnext/utilities/doctype/note/test_note.py b/erpnext/utilities/doctype/note/test_note.py deleted file mode 100644 index 997c57be174..00000000000 --- a/erpnext/utilities/doctype/note/test_note.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors and Contributors -# See license.txt - -import frappe -import unittest - -test_records = frappe.get_test_records('Note') - -class TestNote(unittest.TestCase): - pass diff --git a/erpnext/utilities/doctype/note/test_records.json b/erpnext/utilities/doctype/note/test_records.json deleted file mode 100644 index f3d7cff22ba..00000000000 --- a/erpnext/utilities/doctype/note/test_records.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - { - "doctype": "Note", - "name": "_Test Note 1", - "title": "Test Note Title" - } -] diff --git a/erpnext/utilities/doctype/note_user/README.md b/erpnext/utilities/doctype/note_user/README.md deleted file mode 100644 index a8e066d6520..00000000000 --- a/erpnext/utilities/doctype/note_user/README.md +++ /dev/null @@ -1 +0,0 @@ -User who can access / edit the parent Note. \ No newline at end of file diff --git a/erpnext/utilities/doctype/note_user/__init__.py b/erpnext/utilities/doctype/note_user/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/erpnext/utilities/doctype/note_user/note_user.json b/erpnext/utilities/doctype/note_user/note_user.json deleted file mode 100644 index e67a75cbceb..00000000000 --- a/erpnext/utilities/doctype/note_user/note_user.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "creation": "2013-05-24 14:24:48", - "description": "List of users who can edit a particular Note", - "docstatus": 0, - "doctype": "DocType", - "document_type": "Other", - "fields": [ - { - "fieldname": "user", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "in_list_view": 1, - "label": "User", - "options": "User", - "permlevel": 0, - "reqd": 1 - }, - { - "default": "Edit", - "fieldname": "permission", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Permission", - "options": "Edit\nRead", - "permlevel": 0 - } - ], - "idx": 1, - "istable": 1, - "modified": "2014-06-04 02:33:27.466061", - "modified_by": "Administrator", - "module": "Utilities", - "name": "Note User", - "owner": "Administrator", - "permissions": [] -} \ No newline at end of file diff --git a/erpnext/utilities/doctype/note_user/note_user.py b/erpnext/utilities/doctype/note_user/note_user.py deleted file mode 100644 index 1594f787cad..00000000000 --- a/erpnext/utilities/doctype/note_user/note_user.py +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -# For license information, please see license.txt - -from __future__ import unicode_literals -import frappe - -from frappe.model.document import Document - -class NoteUser(Document): - pass \ No newline at end of file From 9786faa862af9361eef2b01c3f543204443384a1 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 9 Sep 2014 17:33:27 +0530 Subject: [PATCH 03/18] [refactor] hooks.py fixes --- erpnext/hooks.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 6c09030706c..0230126218e 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -26,15 +26,6 @@ website_generators = ["Item Group", "Item", "Sales Partner"] standard_queries = "Customer:erpnext.selling.doctype.customer.customer.get_customer_list" -permission_query_conditions = { - "Note": "erpnext.utilities.doctype.note.note.get_permission_query_conditions" - } - -has_permission = { - "Note": "erpnext.utilities.doctype.note.note.has_permission" - } - - doc_events = { "Stock Entry": { "on_submit": "erpnext.stock.doctype.material_request.material_request.update_completed_qty", From 7b128dc15ba73ce2ddcf95e70d4e0db3788556f6 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 11 Sep 2014 11:40:01 +0530 Subject: [PATCH 04/18] [refactor] remove Home module --- erpnext/modules.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/modules.txt b/erpnext/modules.txt index 32547e957f9..68d095e1e14 100644 --- a/erpnext/modules.txt +++ b/erpnext/modules.txt @@ -1,6 +1,5 @@ Accounts Buying -Home HR Manufacturing Projects From ce00772ac0e4429bc1f83912d3f5a6446ea76418 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 11 Sep 2014 18:54:43 +0530 Subject: [PATCH 05/18] [cleanup] removed communication js, fields --- .../job_applicant/get_job_applications.py | 4 +- erpnext/selling/doctype/lead/get_leads.py | 4 +- erpnext/selling/doctype/lead/lead.js | 7 - erpnext/selling/doctype/lead/lead.json | 109 +- .../doctype/opportunity/opportunity.json | 32 +- .../selling/doctype/quotation/quotation.json | 1540 +++++++++-------- .../support_email_settings.py | 4 +- .../support_ticket/get_support_mails.py | 4 +- .../doctype/support_ticket/support_ticket.js | 23 - .../support_ticket/support_ticket.json | 58 +- .../utilities/doctype/contact/contact.json | 53 +- 11 files changed, 899 insertions(+), 939 deletions(-) diff --git a/erpnext/hr/doctype/job_applicant/get_job_applications.py b/erpnext/hr/doctype/job_applicant/get_job_applications.py index f34f4818da7..2f085925eaa 100644 --- a/erpnext/hr/doctype/job_applicant/get_job_applications.py +++ b/erpnext/hr/doctype/job_applicant/get_job_applications.py @@ -4,10 +4,10 @@ from __future__ import unicode_literals import frappe from frappe.utils import cstr, cint -from frappe.email.receive import POP3Mailbox +from frappe.email.receive import POP3Server from frappe.core.doctype.communication.communication import _make -class JobsMailbox(POP3Mailbox): +class JobsMailbox(POP3Server): def setup(self, args=None): self.settings = args or frappe.get_doc("Jobs Email Settings", "Jobs Email Settings") diff --git a/erpnext/selling/doctype/lead/get_leads.py b/erpnext/selling/doctype/lead/get_leads.py index a79ca6010e1..f7b30a765fa 100644 --- a/erpnext/selling/doctype/lead/get_leads.py +++ b/erpnext/selling/doctype/lead/get_leads.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import frappe from frappe.utils import cstr, cint -from frappe.email.receive import POP3Mailbox +from frappe.email.receive import POP3Server from frappe.core.doctype.communication.communication import _make def add_sales_communication(subject, content, sender, real_name, mail=None, @@ -37,7 +37,7 @@ def add_sales_communication(subject, content, sender, real_name, mail=None, doc = frappe.get_doc(parent_doctype, parent_name) mail.save_attachments_in_doc(doc) -class SalesMailbox(POP3Mailbox): +class SalesMailbox(POP3Server): def setup(self, args=None): self.settings = args or frappe.get_doc("Sales Email Settings", "Sales Email Settings") diff --git a/erpnext/selling/doctype/lead/lead.js b/erpnext/selling/doctype/lead/lead.js index ca6d0076417..8d036a4e252 100644 --- a/erpnext/selling/doctype/lead/lead.js +++ b/erpnext/selling/doctype/lead/lead.js @@ -34,13 +34,6 @@ erpnext.LeadController = frappe.ui.form.Controller.extend({ this.frm.appframe.add_button(__("Send SMS"), this.frm.cscript.send_sms, "icon-mobile-phone"); } - cur_frm.communication_view = new frappe.views.CommunicationList({ - list: frappe.get_list("Communication", {"parenttype": "Lead", "parent":this.frm.doc.name}), - parent: this.frm.fields_dict.communication_html.wrapper, - doc: this.frm.doc, - recipients: this.frm.doc.email_id - }); - if(!this.frm.doc.__islocal) { this.make_address_list(); } diff --git a/erpnext/selling/doctype/lead/lead.json b/erpnext/selling/doctype/lead/lead.json index 2d3d49c8f89..b78ca4fd6c5 100644 --- a/erpnext/selling/doctype/lead/lead.json +++ b/erpnext/selling/doctype/lead/lead.json @@ -58,11 +58,6 @@ "reqd": 0, "search_index": 1 }, - { - "fieldname": "cb6", - "fieldtype": "Column Break", - "permlevel": 0 - }, { "default": "Lead", "fieldname": "status", @@ -92,6 +87,12 @@ "reqd": 0, "search_index": 0 }, + { + "fieldname": "col_break123", + "fieldtype": "Column Break", + "permlevel": 0, + "width": "50%" + }, { "depends_on": "eval:doc.source == 'Customer'", "fieldname": "customer", @@ -115,14 +116,6 @@ "options": "Campaign", "permlevel": 0 }, - { - "fieldname": "communication_history", - "fieldtype": "Section Break", - "label": "Communication", - "options": "icon-comments", - "permlevel": 0, - "print_hide": 1 - }, { "default": "__user", "fieldname": "lead_owner", @@ -135,12 +128,6 @@ "permlevel": 0, "search_index": 1 }, - { - "fieldname": "col_break123", - "fieldtype": "Column Break", - "permlevel": 0, - "width": "50%" - }, { "allow_on_submit": 0, "fieldname": "contact_by", @@ -170,21 +157,6 @@ "reqd": 0, "width": "100px" }, - { - "fieldname": "sec_break123", - "fieldtype": "Section Break", - "options": "Simple", - "permlevel": 0 - }, - { - "allow_on_submit": 0, - "fieldname": "communication_html", - "fieldtype": "HTML", - "label": "Communication HTML", - "oldfieldname": "follow_up", - "oldfieldtype": "Table", - "permlevel": 0 - }, { "fieldname": "fold", "fieldtype": "Fold", @@ -355,20 +327,11 @@ "fieldtype": "Check", "label": "Blog Subscriber", "permlevel": 0 - }, - { - "fieldname": "communications", - "fieldtype": "Table", - "hidden": 1, - "label": "Communications", - "options": "Communication", - "permlevel": 0, - "print_hide": 1 } ], "icon": "icon-user", "idx": 1, - "modified": "2014-08-12 05:22:18.801092", + "modified": "2014-09-11 18:52:50.397563", "modified_by": "Administrator", "module": "Selling", "name": "Lead", @@ -376,6 +339,34 @@ "permissions": [ { "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "match": "", + "permlevel": 1, + "read": 1, + "report": 1, + "role": "All", + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, "create": 1, "delete": 1, "email": 1, @@ -389,7 +380,7 @@ }, { "amend": 0, - "apply_user_permissions": 1, + "cancel": 0, "create": 1, "delete": 0, "email": 1, @@ -397,9 +388,35 @@ "print": 1, "read": 1, "report": 1, - "role": "Sales User", + "role": "System Manager", "submit": 0, "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "match": "", + "permlevel": 1, + "read": 1, + "report": 1, + "role": "Sales Manager", + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "match": "", + "permlevel": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "submit": 0, + "write": 0 } ], "search_fields": "lead_name,lead_owner,status", diff --git a/erpnext/selling/doctype/opportunity/opportunity.json b/erpnext/selling/doctype/opportunity/opportunity.json index 513fbc8bdb5..fdda6470da2 100644 --- a/erpnext/selling/doctype/opportunity/opportunity.json +++ b/erpnext/selling/doctype/opportunity/opportunity.json @@ -134,26 +134,6 @@ "permlevel": 0, "read_only": 0 }, - { - "description": "Keep a track of communication related to this enquiry which will help for future reference.", - "fieldname": "communication_history", - "fieldtype": "Section Break", - "label": "Communication History", - "oldfieldtype": "Section Break", - "options": "icon-comments", - "permlevel": 0, - "read_only": 0 - }, - { - "allow_on_submit": 1, - "fieldname": "communication_html", - "fieldtype": "HTML", - "label": "Communication HTML", - "oldfieldname": "follow_up", - "oldfieldtype": "Table", - "permlevel": 0, - "read_only": 0 - }, { "fieldname": "fold", "fieldtype": "Fold", @@ -402,21 +382,12 @@ "print_hide": 1, "read_only": 1, "width": "150px" - }, - { - "fieldname": "communications", - "fieldtype": "Table", - "hidden": 1, - "label": "Communications", - "options": "Communication", - "permlevel": 0, - "print_hide": 1 } ], "icon": "icon-info-sign", "idx": 1, "is_submittable": 1, - "modified": "2014-08-12 05:21:51.282397", + "modified": "2014-09-11 18:53:14.037512", "modified_by": "Administrator", "module": "Selling", "name": "Opportunity", @@ -424,7 +395,6 @@ "permissions": [ { "amend": 1, - "apply_user_permissions": 1, "cancel": 1, "create": 1, "delete": 1, diff --git a/erpnext/selling/doctype/quotation/quotation.json b/erpnext/selling/doctype/quotation/quotation.json index 5d960e95568..107abc2ce72 100644 --- a/erpnext/selling/doctype/quotation/quotation.json +++ b/erpnext/selling/doctype/quotation/quotation.json @@ -1,925 +1,931 @@ { - "allow_import": 1, - "autoname": "naming_series:", - "creation": "2013-05-24 19:29:08", - "docstatus": 0, - "doctype": "DocType", - "document_type": "Transaction", + "allow_import": 1, + "autoname": "naming_series:", + "creation": "2013-05-24 19:29:08", + "docstatus": 0, + "doctype": "DocType", + "document_type": "Transaction", "fields": [ { - "fieldname": "customer_section", - "fieldtype": "Section Break", - "label": "Customer", - "options": "icon-user", + "fieldname": "customer_section", + "fieldtype": "Section Break", + "label": "Customer", + "options": "icon-user", "permlevel": 0 - }, + }, { - "fieldname": "column_break0", - "fieldtype": "Column Break", - "permlevel": 0, - "read_only": 0, + "fieldname": "column_break0", + "fieldtype": "Column Break", + "permlevel": 0, + "read_only": 0, "width": "50%" - }, + }, { - "fieldname": "naming_series", - "fieldtype": "Select", - "label": "Series", - "no_copy": 1, - "oldfieldname": "naming_series", - "oldfieldtype": "Select", - "options": "QTN-", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "label": "Series", + "no_copy": 1, + "oldfieldname": "naming_series", + "oldfieldtype": "Select", + "options": "QTN-", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, "reqd": 1 - }, + }, { - "default": "Customer", - "fieldname": "quotation_to", - "fieldtype": "Select", - "in_filter": 1, - "label": "Quotation To", - "oldfieldname": "quotation_to", - "oldfieldtype": "Select", - "options": "\nLead\nCustomer", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "report_hide": 0, + "default": "Customer", + "fieldname": "quotation_to", + "fieldtype": "Select", + "in_filter": 1, + "label": "Quotation To", + "oldfieldname": "quotation_to", + "oldfieldtype": "Select", + "options": "\nLead\nCustomer", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, + "report_hide": 0, "reqd": 1 - }, + }, { - "depends_on": "eval:doc.quotation_to == \"Customer\"", - "fieldname": "customer", - "fieldtype": "Link", - "hidden": 0, - "in_filter": 1, - "label": "Customer", - "oldfieldname": "customer", - "oldfieldtype": "Link", - "options": "Customer", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, + "depends_on": "eval:doc.quotation_to == \"Customer\"", + "fieldname": "customer", + "fieldtype": "Link", + "hidden": 0, + "in_filter": 1, + "label": "Customer", + "oldfieldname": "customer", + "oldfieldtype": "Link", + "options": "Customer", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, "search_index": 1 - }, + }, { - "depends_on": "eval:doc.quotation_to == \"Lead\"", - "fieldname": "lead", - "fieldtype": "Link", - "hidden": 0, - "in_filter": 1, - "label": "Lead", - "oldfieldname": "lead", - "oldfieldtype": "Link", - "options": "Lead", - "permlevel": 0, - "print_hide": 1, + "depends_on": "eval:doc.quotation_to == \"Lead\"", + "fieldname": "lead", + "fieldtype": "Link", + "hidden": 0, + "in_filter": 1, + "label": "Lead", + "oldfieldname": "lead", + "oldfieldtype": "Link", + "options": "Lead", + "permlevel": 0, + "print_hide": 1, "read_only": 0 - }, + }, { - "fieldname": "customer_name", - "fieldtype": "Data", - "hidden": 1, - "in_list_view": 1, - "label": "Customer / Lead Name", - "permlevel": 0, + "fieldname": "customer_name", + "fieldtype": "Data", + "hidden": 1, + "in_list_view": 1, + "label": "Customer / Lead Name", + "permlevel": 0, "read_only": 1 - }, + }, { - "fieldname": "address_display", - "fieldtype": "Small Text", - "hidden": 1, - "in_filter": 0, - "label": "Address", - "oldfieldname": "customer_address", - "oldfieldtype": "Small Text", - "permlevel": 0, - "print_hide": 0, - "read_only": 1, - "reqd": 0, + "fieldname": "address_display", + "fieldtype": "Small Text", + "hidden": 1, + "in_filter": 0, + "label": "Address", + "oldfieldname": "customer_address", + "oldfieldtype": "Small Text", + "permlevel": 0, + "print_hide": 0, + "read_only": 1, + "reqd": 0, "search_index": 0 - }, + }, { - "fieldname": "contact_display", - "fieldtype": "Small Text", - "hidden": 1, - "in_filter": 0, - "label": "Contact", - "permlevel": 0, - "print_hide": 0, + "fieldname": "contact_display", + "fieldtype": "Small Text", + "hidden": 1, + "in_filter": 0, + "label": "Contact", + "permlevel": 0, + "print_hide": 0, "read_only": 1 - }, + }, { - "fieldname": "contact_mobile", - "fieldtype": "Small Text", - "hidden": 1, - "label": "Mobile No", - "permlevel": 0, - "print_hide": 0, + "fieldname": "contact_mobile", + "fieldtype": "Small Text", + "hidden": 1, + "label": "Mobile No", + "permlevel": 0, + "print_hide": 0, "read_only": 1 - }, + }, { - "fieldname": "contact_email", - "fieldtype": "Small Text", - "hidden": 1, - "label": "Contact Email", - "permlevel": 0, - "print_hide": 1, + "fieldname": "contact_email", + "fieldtype": "Small Text", + "hidden": 1, + "label": "Contact Email", + "permlevel": 0, + "print_hide": 1, "read_only": 1 - }, + }, { - "fieldname": "column_break1", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "permlevel": 0, - "read_only": 0, + "fieldname": "column_break1", + "fieldtype": "Column Break", + "oldfieldtype": "Column Break", + "permlevel": 0, + "read_only": 0, "width": "50%" - }, + }, { - "fieldname": "amended_from", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Amended From", - "no_copy": 1, - "oldfieldname": "amended_from", - "oldfieldtype": "Data", - "options": "Quotation", - "permlevel": 0, - "print_hide": 1, - "read_only": 1, + "fieldname": "amended_from", + "fieldtype": "Link", + "ignore_user_permissions": 1, + "label": "Amended From", + "no_copy": 1, + "oldfieldname": "amended_from", + "oldfieldtype": "Data", + "options": "Quotation", + "permlevel": 0, + "print_hide": 1, + "read_only": 1, "width": "150px" - }, + }, { - "description": "Select the relevant company name if you have multiple companies.", - "fieldname": "company", - "fieldtype": "Link", - "in_filter": 1, - "label": "Company", - "oldfieldname": "company", - "oldfieldtype": "Link", - "options": "Company", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "reqd": 1, - "search_index": 0, + "description": "Select the relevant company name if you have multiple companies.", + "fieldname": "company", + "fieldtype": "Link", + "in_filter": 1, + "label": "Company", + "oldfieldname": "company", + "oldfieldtype": "Link", + "options": "Company", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, + "reqd": 1, + "search_index": 0, "width": "150px" - }, + }, { - "default": "Today", - "fieldname": "transaction_date", - "fieldtype": "Date", - "in_filter": 1, - "label": "Date", - "no_copy": 1, - "oldfieldname": "transaction_date", - "oldfieldtype": "Date", - "permlevel": 0, - "read_only": 0, - "reqd": 1, - "search_index": 1, + "default": "Today", + "fieldname": "transaction_date", + "fieldtype": "Date", + "in_filter": 1, + "label": "Date", + "no_copy": 1, + "oldfieldname": "transaction_date", + "oldfieldtype": "Date", + "permlevel": 0, + "read_only": 0, + "reqd": 1, + "search_index": 1, "width": "100px" - }, + }, { - "default": "Sales", - "fieldname": "order_type", - "fieldtype": "Select", - "in_filter": 1, - "label": "Order Type", - "oldfieldname": "order_type", - "oldfieldtype": "Select", - "options": "\nSales\nMaintenance\nShopping Cart", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "reqd": 1, + "default": "Sales", + "fieldname": "order_type", + "fieldtype": "Select", + "in_filter": 1, + "label": "Order Type", + "oldfieldname": "order_type", + "oldfieldtype": "Select", + "options": "\nSales\nMaintenance\nShopping Cart", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, + "reqd": 1, "search_index": 0 - }, + }, { - "fieldname": "section_break0", - "fieldtype": "Section Break", - "label": "Currency and Price List", - "options": "icon-tag", - "permlevel": 0, + "fieldname": "section_break0", + "fieldtype": "Section Break", + "label": "Currency and Price List", + "options": "icon-tag", + "permlevel": 0, "read_only": 0 - }, + }, { - "fieldname": "currency", - "fieldtype": "Link", - "in_filter": 1, - "label": "Currency", - "oldfieldname": "currency", - "oldfieldtype": "Select", - "options": "Currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "reqd": 1, - "search_index": 0, + "fieldname": "currency", + "fieldtype": "Link", + "in_filter": 1, + "label": "Currency", + "oldfieldname": "currency", + "oldfieldtype": "Select", + "options": "Currency", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, + "reqd": 1, + "search_index": 0, "width": "100px" - }, + }, { - "description": "Rate at which customer's currency is converted to company's base currency", - "fieldname": "conversion_rate", - "fieldtype": "Float", - "label": "Exchange Rate", - "oldfieldname": "conversion_rate", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "reqd": 1, + "description": "Rate at which customer's currency is converted to company's base currency", + "fieldname": "conversion_rate", + "fieldtype": "Float", + "label": "Exchange Rate", + "oldfieldname": "conversion_rate", + "oldfieldtype": "Currency", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, + "reqd": 1, "width": "100px" - }, + }, { - "fieldname": "column_break2", - "fieldtype": "Column Break", - "permlevel": 0, - "read_only": 0, + "fieldname": "column_break2", + "fieldtype": "Column Break", + "permlevel": 0, + "read_only": 0, "width": "50%" - }, + }, { - "fieldname": "selling_price_list", - "fieldtype": "Link", - "in_filter": 1, - "label": "Price List", - "oldfieldname": "price_list_name", - "oldfieldtype": "Select", - "options": "Price List", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "reqd": 1, - "search_index": 0, + "fieldname": "selling_price_list", + "fieldtype": "Link", + "in_filter": 1, + "label": "Price List", + "oldfieldname": "price_list_name", + "oldfieldtype": "Select", + "options": "Price List", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, + "reqd": 1, + "search_index": 0, "width": "100px" - }, + }, { - "fieldname": "price_list_currency", - "fieldtype": "Link", - "label": "Price List Currency", - "options": "Currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1, + "fieldname": "price_list_currency", + "fieldtype": "Link", + "label": "Price List Currency", + "options": "Currency", + "permlevel": 0, + "print_hide": 1, + "read_only": 1, "reqd": 1 - }, + }, { - "description": "Rate at which Price list currency is converted to company's base currency", - "fieldname": "plc_conversion_rate", - "fieldtype": "Float", - "label": "Price List Exchange Rate", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, + "description": "Rate at which Price list currency is converted to company's base currency", + "fieldname": "plc_conversion_rate", + "fieldtype": "Float", + "label": "Price List Exchange Rate", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, "reqd": 1 - }, + }, { - "fieldname": "ignore_pricing_rule", - "fieldtype": "Check", - "label": "Ignore Pricing Rule", - "no_copy": 1, - "permlevel": 1, + "fieldname": "ignore_pricing_rule", + "fieldtype": "Check", + "label": "Ignore Pricing Rule", + "no_copy": 1, + "permlevel": 1, "print_hide": 1 - }, + }, { - "fieldname": "items", - "fieldtype": "Section Break", - "label": "Items", - "oldfieldtype": "Section Break", - "options": "icon-shopping-cart", - "permlevel": 0, - "print_hide": 0, - "read_only": 0, + "fieldname": "items", + "fieldtype": "Section Break", + "label": "Items", + "oldfieldtype": "Section Break", + "options": "icon-shopping-cart", + "permlevel": 0, + "print_hide": 0, + "read_only": 0, "search_index": 0 - }, + }, { - "allow_on_submit": 1, - "fieldname": "quotation_details", - "fieldtype": "Table", - "label": "Quotation Items", - "oldfieldname": "quotation_details", - "oldfieldtype": "Table", - "options": "Quotation Item", - "permlevel": 0, - "read_only": 0, - "reqd": 0, + "allow_on_submit": 1, + "fieldname": "quotation_details", + "fieldtype": "Table", + "label": "Quotation Items", + "oldfieldname": "quotation_details", + "oldfieldtype": "Table", + "options": "Quotation Item", + "permlevel": 0, + "read_only": 0, + "reqd": 0, "width": "40px" - }, + }, { - "fieldname": "sec_break23", - "fieldtype": "Section Break", - "permlevel": 0, + "fieldname": "sec_break23", + "fieldtype": "Section Break", + "permlevel": 0, "read_only": 0 - }, + }, { - "fieldname": "net_total", - "fieldtype": "Currency", - "label": "Net Total (Company Currency)", - "no_copy": 0, - "oldfieldname": "net_total", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1, - "reqd": 0, + "fieldname": "net_total", + "fieldtype": "Currency", + "label": "Net Total (Company Currency)", + "no_copy": 0, + "oldfieldname": "net_total", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", + "permlevel": 0, + "print_hide": 1, + "read_only": 1, + "reqd": 0, "width": "100px" - }, + }, { - "fieldname": "column_break_28", - "fieldtype": "Column Break", + "fieldname": "column_break_28", + "fieldtype": "Column Break", "permlevel": 0 - }, + }, { - "fieldname": "net_total_export", - "fieldtype": "Currency", - "label": "Net Total", - "options": "currency", - "permlevel": 0, + "fieldname": "net_total_export", + "fieldtype": "Currency", + "label": "Net Total", + "options": "currency", + "permlevel": 0, "read_only": 1 - }, + }, { - "fieldname": "taxes", - "fieldtype": "Section Break", - "label": "Taxes and Charges", - "oldfieldtype": "Section Break", - "options": "icon-money", - "permlevel": 0, + "fieldname": "taxes", + "fieldtype": "Section Break", + "label": "Taxes and Charges", + "oldfieldtype": "Section Break", + "options": "icon-money", + "permlevel": 0, "read_only": 0 - }, + }, { - "fieldname": "taxes_and_charges", - "fieldtype": "Link", - "hidden": 0, - "label": "Taxes and Charges", - "oldfieldname": "charge", - "oldfieldtype": "Link", - "options": "Sales Taxes and Charges Master", - "permlevel": 0, - "print_hide": 1, + "fieldname": "taxes_and_charges", + "fieldtype": "Link", + "hidden": 0, + "label": "Taxes and Charges", + "oldfieldname": "charge", + "oldfieldtype": "Link", + "options": "Sales Taxes and Charges Master", + "permlevel": 0, + "print_hide": 1, "read_only": 0 - }, + }, { - "fieldname": "column_break_34", - "fieldtype": "Column Break", + "fieldname": "column_break_34", + "fieldtype": "Column Break", "permlevel": 0 - }, + }, { - "fieldname": "shipping_rule", - "fieldtype": "Link", - "hidden": 0, - "label": "Shipping Rule", - "oldfieldtype": "Button", - "options": "Shipping Rule", - "permlevel": 0, - "print_hide": 1, + "fieldname": "shipping_rule", + "fieldtype": "Link", + "hidden": 0, + "label": "Shipping Rule", + "oldfieldtype": "Button", + "options": "Shipping Rule", + "permlevel": 0, + "print_hide": 1, "read_only": 0 - }, + }, { - "fieldname": "section_break_36", - "fieldtype": "Section Break", + "fieldname": "section_break_36", + "fieldtype": "Section Break", "permlevel": 0 - }, + }, { - "fieldname": "other_charges", - "fieldtype": "Table", - "label": "Sales Taxes and Charges", - "oldfieldname": "other_charges", - "oldfieldtype": "Table", - "options": "Sales Taxes and Charges", - "permlevel": 0, + "fieldname": "other_charges", + "fieldtype": "Table", + "label": "Sales Taxes and Charges", + "oldfieldname": "other_charges", + "oldfieldtype": "Table", + "options": "Sales Taxes and Charges", + "permlevel": 0, "read_only": 0 - }, + }, { - "fieldname": "other_charges_calculation", - "fieldtype": "HTML", - "label": "Taxes and Charges Calculation", - "oldfieldtype": "HTML", - "permlevel": 0, - "print_hide": 1, + "fieldname": "other_charges_calculation", + "fieldtype": "HTML", + "label": "Taxes and Charges Calculation", + "oldfieldtype": "HTML", + "permlevel": 0, + "print_hide": 1, "read_only": 0 - }, + }, { - "fieldname": "section_break_39", - "fieldtype": "Section Break", + "fieldname": "section_break_39", + "fieldtype": "Section Break", "permlevel": 0 - }, + }, { - "fieldname": "other_charges_total", - "fieldtype": "Currency", - "label": "Taxes and Charges Total (Company Currency)", - "oldfieldname": "other_charges_total", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, + "fieldname": "other_charges_total", + "fieldtype": "Currency", + "label": "Taxes and Charges Total (Company Currency)", + "oldfieldname": "other_charges_total", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", + "permlevel": 0, + "print_hide": 1, "read_only": 1 - }, + }, { - "fieldname": "column_break_42", - "fieldtype": "Column Break", + "fieldname": "column_break_42", + "fieldtype": "Column Break", "permlevel": 0 - }, + }, { - "fieldname": "other_charges_total_export", - "fieldtype": "Currency", - "label": "Taxes and Charges Total", - "options": "currency", - "permlevel": 0, - "print_hide": 1, + "fieldname": "other_charges_total_export", + "fieldtype": "Currency", + "label": "Taxes and Charges Total", + "options": "currency", + "permlevel": 0, + "print_hide": 1, "read_only": 1 - }, + }, { - "fieldname": "discount_amount", - "fieldtype": "Currency", - "label": "Discount Amount", - "options": "Company:company:default_currency", + "fieldname": "discount_amount", + "fieldtype": "Currency", + "label": "Discount Amount", + "options": "Company:company:default_currency", "permlevel": 0 - }, + }, { - "fieldname": "totals", - "fieldtype": "Section Break", - "label": "Totals", - "oldfieldtype": "Section Break", - "options": "icon-money", - "permlevel": 0, - "print_hide": 1, + "fieldname": "totals", + "fieldtype": "Section Break", + "label": "Totals", + "oldfieldtype": "Section Break", + "options": "icon-money", + "permlevel": 0, + "print_hide": 1, "read_only": 0 - }, + }, { - "fieldname": "grand_total", - "fieldtype": "Currency", - "label": "Grand Total (Company Currency)", - "no_copy": 0, - "oldfieldname": "grand_total", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1, - "reqd": 0, + "fieldname": "grand_total", + "fieldtype": "Currency", + "label": "Grand Total (Company Currency)", + "no_copy": 0, + "oldfieldname": "grand_total", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", + "permlevel": 0, + "print_hide": 1, + "read_only": 1, + "reqd": 0, "width": "200px" - }, + }, { - "fieldname": "rounded_total", - "fieldtype": "Currency", - "label": "Rounded Total (Company Currency)", - "no_copy": 0, - "oldfieldname": "rounded_total", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1, + "fieldname": "rounded_total", + "fieldtype": "Currency", + "label": "Rounded Total (Company Currency)", + "no_copy": 0, + "oldfieldname": "rounded_total", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", + "permlevel": 0, + "print_hide": 1, + "read_only": 1, "width": "200px" - }, + }, { - "description": "In Words will be visible once you save the Quotation.", - "fieldname": "in_words", - "fieldtype": "Data", - "label": "In Words (Company Currency)", - "no_copy": 0, - "oldfieldname": "in_words", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 1, - "read_only": 1, + "description": "In Words will be visible once you save the Quotation.", + "fieldname": "in_words", + "fieldtype": "Data", + "label": "In Words (Company Currency)", + "no_copy": 0, + "oldfieldname": "in_words", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 1, + "read_only": 1, "width": "200px" - }, + }, { - "fieldname": "column_break3", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, + "fieldname": "column_break3", + "fieldtype": "Column Break", + "oldfieldtype": "Column Break", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, "width": "50%" - }, + }, { - "fieldname": "grand_total_export", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Grand Total", - "no_copy": 0, - "oldfieldname": "grand_total_export", - "oldfieldtype": "Currency", - "options": "currency", - "permlevel": 0, - "print_hide": 0, - "read_only": 1, - "reqd": 0, + "fieldname": "grand_total_export", + "fieldtype": "Currency", + "in_list_view": 1, + "label": "Grand Total", + "no_copy": 0, + "oldfieldname": "grand_total_export", + "oldfieldtype": "Currency", + "options": "currency", + "permlevel": 0, + "print_hide": 0, + "read_only": 1, + "reqd": 0, "width": "200px" - }, + }, { - "fieldname": "rounded_total_export", - "fieldtype": "Currency", - "label": "Rounded Total", - "no_copy": 0, - "oldfieldname": "rounded_total_export", - "oldfieldtype": "Currency", - "options": "currency", - "permlevel": 0, - "print_hide": 0, - "read_only": 1, - "reqd": 0, + "fieldname": "rounded_total_export", + "fieldtype": "Currency", + "label": "Rounded Total", + "no_copy": 0, + "oldfieldname": "rounded_total_export", + "oldfieldtype": "Currency", + "options": "currency", + "permlevel": 0, + "print_hide": 0, + "read_only": 1, + "reqd": 0, "width": "200px" - }, + }, { - "fieldname": "in_words_export", - "fieldtype": "Data", - "label": "In Words", - "no_copy": 0, - "oldfieldname": "in_words_export", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "read_only": 1, + "fieldname": "in_words_export", + "fieldtype": "Data", + "label": "In Words", + "no_copy": 0, + "oldfieldname": "in_words_export", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "read_only": 1, "width": "200px" - }, + }, { - "fieldname": "fold", - "fieldtype": "Fold", - "label": "Fold", + "fieldname": "fold", + "fieldtype": "Fold", + "label": "Fold", "permlevel": 0 - }, + }, { - "fieldname": "terms_section_break", - "fieldtype": "Section Break", - "label": "Terms and Conditions", - "oldfieldtype": "Section Break", - "options": "icon-legal", - "permlevel": 0, - "print_hide": 0, + "fieldname": "terms_section_break", + "fieldtype": "Section Break", + "label": "Terms and Conditions", + "oldfieldtype": "Section Break", + "options": "icon-legal", + "permlevel": 0, + "print_hide": 0, "read_only": 0 - }, + }, { - "fieldname": "tc_name", - "fieldtype": "Link", - "label": "Terms", - "oldfieldname": "tc_name", - "oldfieldtype": "Link", - "options": "Terms and Conditions", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, + "fieldname": "tc_name", + "fieldtype": "Link", + "label": "Terms", + "oldfieldname": "tc_name", + "oldfieldtype": "Link", + "options": "Terms and Conditions", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, "report_hide": 1 - }, + }, { - "fieldname": "terms", - "fieldtype": "Text Editor", - "label": "Term Details", - "oldfieldname": "terms", - "oldfieldtype": "Text Editor", - "permlevel": 0, + "fieldname": "terms", + "fieldtype": "Text Editor", + "label": "Term Details", + "oldfieldname": "terms", + "oldfieldtype": "Text Editor", + "permlevel": 0, "read_only": 0 - }, + }, { - "fieldname": "contact_section", - "fieldtype": "Section Break", - "label": "Contact Info", - "options": "icon-bullhorn", - "permlevel": 0, + "fieldname": "contact_section", + "fieldtype": "Section Break", + "label": "Contact Info", + "options": "icon-bullhorn", + "permlevel": 0, "read_only": 0 - }, + }, { - "description": "Add / Edit", - "fieldname": "territory", - "fieldtype": "Link", - "hidden": 0, - "in_filter": 1, - "label": "Territory", - "options": "Territory", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "reqd": 1, + "description": "Add / Edit", + "fieldname": "territory", + "fieldtype": "Link", + "hidden": 0, + "in_filter": 1, + "label": "Territory", + "options": "Territory", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, + "reqd": 1, "search_index": 0 - }, + }, { - "depends_on": "customer", - "description": "Add / Edit", - "fieldname": "customer_group", - "fieldtype": "Link", - "in_filter": 1, - "label": "Customer Group", - "oldfieldname": "customer_group", - "oldfieldtype": "Link", - "options": "Customer Group", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "reqd": 0, + "depends_on": "customer", + "description": "Add / Edit", + "fieldname": "customer_group", + "fieldtype": "Link", + "in_filter": 1, + "label": "Customer Group", + "oldfieldname": "customer_group", + "oldfieldtype": "Link", + "options": "Customer Group", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, + "reqd": 0, "search_index": 0 - }, + }, { - "fieldname": "shipping_address_name", - "fieldtype": "Link", - "hidden": 0, - "label": "Shipping Address", - "options": "Address", - "permlevel": 0, + "fieldname": "shipping_address_name", + "fieldtype": "Link", + "hidden": 0, + "label": "Shipping Address", + "options": "Address", + "permlevel": 0, "print_hide": 1 - }, + }, { - "fieldname": "shipping_address", - "fieldtype": "Small Text", - "hidden": 1, - "label": "Shipping Address", - "permlevel": 0, - "print_hide": 1, + "fieldname": "shipping_address", + "fieldtype": "Small Text", + "hidden": 1, + "label": "Shipping Address", + "permlevel": 0, + "print_hide": 1, "read_only": 1 - }, + }, { - "depends_on": "customer", - "fieldname": "col_break98", - "fieldtype": "Column Break", - "permlevel": 0, - "read_only": 0, + "depends_on": "customer", + "fieldname": "col_break98", + "fieldtype": "Column Break", + "permlevel": 0, + "read_only": 0, "width": "50%" - }, + }, { - "fieldname": "customer_address", - "fieldtype": "Link", - "hidden": 0, - "in_filter": 1, - "label": "Customer Address", - "options": "Address", - "permlevel": 0, - "print_hide": 1, + "fieldname": "customer_address", + "fieldtype": "Link", + "hidden": 0, + "in_filter": 1, + "label": "Customer Address", + "options": "Address", + "permlevel": 0, + "print_hide": 1, "read_only": 0 - }, + }, { - "depends_on": "eval:doc.customer", - "fieldname": "contact_person", - "fieldtype": "Link", - "hidden": 0, - "in_filter": 1, - "label": "Contact Person", - "oldfieldname": "contact_person", - "oldfieldtype": "Link", - "options": "Contact", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, + "depends_on": "eval:doc.customer", + "fieldname": "contact_person", + "fieldtype": "Link", + "hidden": 0, + "in_filter": 1, + "label": "Contact Person", + "oldfieldname": "contact_person", + "oldfieldtype": "Link", + "options": "Contact", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, "reqd": 0 - }, + }, { - "fieldname": "more_info", - "fieldtype": "Section Break", - "label": "More Info", - "oldfieldtype": "Section Break", - "options": "icon-file-text", - "permlevel": 0, - "print_hide": 1, + "fieldname": "more_info", + "fieldtype": "Section Break", + "label": "More Info", + "oldfieldtype": "Section Break", + "options": "icon-file-text", + "permlevel": 0, + "print_hide": 1, "read_only": 0 - }, + }, { - "fieldname": "campaign", - "fieldtype": "Link", - "hidden": 0, - "label": "Campaign", - "no_copy": 0, - "oldfieldname": "campaign", - "oldfieldtype": "Link", - "options": "Campaign", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, + "fieldname": "campaign", + "fieldtype": "Link", + "hidden": 0, + "label": "Campaign", + "no_copy": 0, + "oldfieldname": "campaign", + "oldfieldtype": "Link", + "options": "Campaign", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, "report_hide": 0 - }, + }, { - "fieldname": "source", - "fieldtype": "Select", - "hidden": 0, - "label": "Source", - "no_copy": 0, - "oldfieldname": "source", - "oldfieldtype": "Select", - "options": "\nExisting Customer\nReference\nAdvertisement\nCold Calling\nExhibition\nSupplier Reference\nMass Mailing\nCustomer's Vendor\nCampaign", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, + "fieldname": "source", + "fieldtype": "Select", + "hidden": 0, + "label": "Source", + "no_copy": 0, + "oldfieldname": "source", + "oldfieldtype": "Select", + "options": "\nExisting Customer\nReference\nAdvertisement\nCold Calling\nExhibition\nSupplier Reference\nMass Mailing\nCustomer's Vendor\nCampaign", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, "report_hide": 0 - }, + }, { - "allow_on_submit": 0, - "default": "Draft", - "fieldname": "status", - "fieldtype": "Select", - "in_filter": 1, - "in_list_view": 1, - "label": "Status", - "no_copy": 1, - "oldfieldname": "status", - "oldfieldtype": "Select", - "options": "Draft\nSubmitted\nOrdered\nLost\nCancelled", - "permlevel": 0, - "print_hide": 1, - "read_only": 1, - "reqd": 1, + "allow_on_submit": 0, + "default": "Draft", + "fieldname": "status", + "fieldtype": "Select", + "in_filter": 1, + "in_list_view": 1, + "label": "Status", + "no_copy": 1, + "oldfieldname": "status", + "oldfieldtype": "Select", + "options": "Draft\nSubmitted\nOrdered\nLost\nCancelled", + "permlevel": 0, + "print_hide": 1, + "read_only": 1, + "reqd": 1, "search_index": 0 - }, + }, { - "allow_on_submit": 1, - "fieldname": "order_lost_reason", - "fieldtype": "Small Text", - "label": "Quotation Lost Reason", - "no_copy": 1, - "oldfieldname": "order_lost_reason", - "oldfieldtype": "Small Text", - "permlevel": 0, - "print_hide": 1, + "allow_on_submit": 1, + "fieldname": "order_lost_reason", + "fieldtype": "Small Text", + "label": "Quotation Lost Reason", + "no_copy": 1, + "oldfieldname": "order_lost_reason", + "oldfieldtype": "Small Text", + "permlevel": 0, + "print_hide": 1, "read_only": 0 - }, + }, { - "fieldname": "column_break4", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, + "fieldname": "column_break4", + "fieldtype": "Column Break", + "oldfieldtype": "Column Break", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, "width": "50%" - }, + }, { - "allow_on_submit": 1, - "fieldname": "letter_head", - "fieldtype": "Link", - "label": "Letter Head", - "oldfieldname": "letter_head", - "oldfieldtype": "Select", - "options": "Letter Head", - "permlevel": 0, - "print_hide": 1, + "allow_on_submit": 1, + "fieldname": "letter_head", + "fieldtype": "Link", + "label": "Letter Head", + "oldfieldname": "letter_head", + "oldfieldtype": "Select", + "options": "Letter Head", + "permlevel": 0, + "print_hide": 1, "read_only": 0 - }, + }, { - "allow_on_submit": 1, - "fieldname": "select_print_heading", - "fieldtype": "Link", - "label": "Print Heading", - "no_copy": 1, - "oldfieldname": "select_print_heading", - "oldfieldtype": "Link", - "options": "Print Heading", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, + "allow_on_submit": 1, + "fieldname": "select_print_heading", + "fieldtype": "Link", + "label": "Print Heading", + "no_copy": 1, + "oldfieldname": "select_print_heading", + "oldfieldtype": "Link", + "options": "Print Heading", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, "report_hide": 1 - }, + }, { - "fieldname": "fiscal_year", - "fieldtype": "Link", - "in_filter": 1, - "label": "Fiscal Year", - "oldfieldname": "fiscal_year", - "oldfieldtype": "Select", - "options": "Fiscal Year", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "reqd": 1, + "fieldname": "fiscal_year", + "fieldtype": "Link", + "in_filter": 1, + "label": "Fiscal Year", + "oldfieldname": "fiscal_year", + "oldfieldtype": "Select", + "options": "Fiscal Year", + "permlevel": 0, + "print_hide": 1, + "read_only": 0, + "reqd": 1, "search_index": 0 - }, + }, { - "fieldname": "enq_det", - "fieldtype": "Text", - "hidden": 1, - "label": "Opportunity Item", - "no_copy": 0, - "oldfieldname": "enq_det", - "oldfieldtype": "Text", - "permlevel": 0, - "print_hide": 1, - "read_only": 1, + "fieldname": "enq_det", + "fieldtype": "Text", + "hidden": 1, + "label": "Opportunity Item", + "no_copy": 0, + "oldfieldname": "enq_det", + "oldfieldtype": "Text", + "permlevel": 0, + "print_hide": 1, + "read_only": 1, "report_hide": 0 - }, - { - "fieldname": "communication_history", - "fieldtype": "Section Break", - "label": "Communication History", - "oldfieldtype": "Section Break", - "options": "icon-comments", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "allow_on_submit": 1, - "depends_on": "eval:!doc.__islocal", - "fieldname": "communication_html", - "fieldtype": "HTML", - "label": "Communication HTML", - "oldfieldname": "follow_up", - "oldfieldtype": "Table", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "width": "40px" - }, - { - "fieldname": "communications", - "fieldtype": "Table", - "hidden": 1, - "label": "Communications", - "options": "Communication", - "permlevel": 0, - "print_hide": 1 } - ], - "hide_toolbar": 0, - "icon": "icon-shopping-cart", - "idx": 1, - "is_submittable": 1, - "max_attachments": 1, - "modified": "2014-09-09 05:35:33.413559", - "modified_by": "Administrator", - "module": "Selling", - "name": "Quotation", - "owner": "Administrator", + ], + "hide_toolbar": 0, + "icon": "icon-shopping-cart", + "idx": 1, + "is_submittable": 1, + "max_attachments": 1, + "modified": "2014-09-11 18:53:08.594908", + "modified_by": "Administrator", + "module": "Selling", + "name": "Quotation", + "owner": "Administrator", "permissions": [ { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Sales Manager", - "submit": 1, + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "submit": 1, "write": 1 - }, + }, { - "amend": 1, - "apply_user_permissions": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Sales User", - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "apply_user_permissions": 1, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Customer", - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "match": "", + "permlevel": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "submit": 0, "write": 0 - }, + }, { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Maintenance Manager", - "submit": 1, - "write": 1 - }, + "cancel": 0, + "delete": 0, + "email": 1, + "match": "", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Customer" + }, { - "amend": 1, - "apply_user_permissions": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Maintenance User", - "submit": 1, - "write": 1 - }, + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "match": "", + "permlevel": 1, + "read": 1, + "report": 1, + "role": "Sales Manager", + "submit": 0, + "write": 0 + }, { - "permlevel": 1, - "read": 1, - "role": "Sales Manager", + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales Manager", + "submit": 1, "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "match": "", + "permlevel": 1, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "submit": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance User", + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "match": "", + "permlevel": 1, + "read": 1, + "report": 1, + "role": "Maintenance User", + "submit": 0 } - ], - "read_only_onload": 1, - "search_fields": "status,transaction_date,customer,lead,order_type", - "sort_field": "modified", + ], + "read_only_onload": 1, + "search_fields": "status,transaction_date,customer,lead,order_type", + "sort_field": "modified", "sort_order": "DESC" -} \ No newline at end of file +} diff --git a/erpnext/support/doctype/support_email_settings/support_email_settings.py b/erpnext/support/doctype/support_email_settings/support_email_settings.py index 4b00c751908..c7eb1b8de4e 100644 --- a/erpnext/support/doctype/support_email_settings/support_email_settings.py +++ b/erpnext/support/doctype/support_email_settings/support_email_settings.py @@ -8,7 +8,7 @@ import frappe from frappe import _ from frappe.utils import cint from frappe.model.document import Document -from frappe.email.receive import POP3Mailbox +from frappe.email.receive import POP3Server import _socket, poplib class SupportEmailSettings(Document): @@ -32,7 +32,7 @@ class SupportEmailSettings(Document): frappe.msgprint(err_msg) raise - pop_mb = POP3Mailbox(inc_email) + pop_mb = POP3Server(inc_email) try: pop_mb.connect() diff --git a/erpnext/support/doctype/support_ticket/get_support_mails.py b/erpnext/support/doctype/support_ticket/get_support_mails.py index ee80a6c1819..894d95651f4 100644 --- a/erpnext/support/doctype/support_ticket/get_support_mails.py +++ b/erpnext/support/doctype/support_ticket/get_support_mails.py @@ -5,10 +5,10 @@ from __future__ import unicode_literals import frappe from frappe.utils import cstr, cint, decode_dict, today from frappe.email import sendmail -from frappe.email.receive import POP3Mailbox +from frappe.email.receive import POP3Server from frappe.core.doctype.communication.communication import _make -class SupportMailbox(POP3Mailbox): +class SupportMailbox(POP3Server): def setup(self, args=None): self.email_settings = frappe.get_doc("Support Email Settings", "Support Email Settings") self.settings = args or frappe._dict({ diff --git a/erpnext/support/doctype/support_ticket/support_ticket.js b/erpnext/support/doctype/support_ticket/support_ticket.js index d4531dc8b79..096fd270021 100644 --- a/erpnext/support/doctype/support_ticket/support_ticket.js +++ b/erpnext/support/doctype/support_ticket/support_ticket.js @@ -11,7 +11,6 @@ cur_frm.add_fetch("customer", "customer_name", "customer_name") $.extend(cur_frm.cscript, { refresh: function(doc) { erpnext.toggle_naming_series(); - cur_frm.cscript.make_listing(doc); if(!doc.__islocal) { if(cur_frm.fields_dict.status.get_status()=="Write") { if(doc.status!='Closed') cur_frm.add_custom_button('Close', @@ -26,28 +25,6 @@ $.extend(cur_frm.cscript, { refresh_field('status'); }, - make_listing: function(doc) { - var wrapper = cur_frm.fields_dict['thread_html'].wrapper; - - var comm_list = frappe.get_list("Communication", {"parent": doc.name, "parenttype":"Support Ticket"}) - - if(!comm_list.length) { - comm_list.push({ - "sender": doc.raised_by, - "creation": doc.creation, - "subject": doc.subject, - "content": doc.description}); - } - - cur_frm.communication_view = new frappe.views.CommunicationList({ - list: comm_list, - parent: wrapper, - doc: doc, - recipients: doc.raised_by - }) - - }, - 'Close Ticket': function() { cur_frm.cscript.set_status("Closed"); }, diff --git a/erpnext/support/doctype/support_ticket/support_ticket.json b/erpnext/support/doctype/support_ticket/support_ticket.json index 91bc884db80..3a66c5ba3a5 100644 --- a/erpnext/support/doctype/support_ticket/support_ticket.json +++ b/erpnext/support/doctype/support_ticket/support_ticket.json @@ -1,5 +1,6 @@ { - "autoname": "naming_series:", + "allow_attach": 1, + "autoname": "naming_series:", "creation": "2013-02-01 10:36:25", "docstatus": 0, "doctype": "DocType", @@ -67,13 +68,6 @@ "permlevel": 0, "reqd": 1 }, - { - "fieldname": "sb00", - "fieldtype": "Section Break", - "label": "Messages", - "options": "icon-comments", - "permlevel": 0 - }, { "depends_on": "eval:doc.__islocal", "fieldname": "description", @@ -84,14 +78,6 @@ "permlevel": 0, "reqd": 0 }, - { - "depends_on": "eval:!doc.__islocal", - "fieldname": "thread_html", - "fieldtype": "HTML", - "label": "Thread HTML", - "permlevel": 0, - "read_only": 1 - }, { "fieldname": "fold", "fieldtype": "Fold", @@ -228,20 +214,11 @@ "hidden": 1, "label": "Content Type", "permlevel": 0 - }, - { - "fieldname": "communications", - "fieldtype": "Table", - "hidden": 1, - "label": "Communications", - "options": "Communication", - "permlevel": 0, - "print_hide": 1 } ], "icon": "icon-ticket", "idx": 1, - "modified": "2014-08-12 05:25:45.420934", + "modified": "2014-09-11 18:53:21.140997", "modified_by": "Administrator", "module": "Support", "name": "Support Ticket", @@ -249,6 +226,7 @@ "permissions": [ { "amend": 0, + "cancel": 0, "create": 1, "delete": 0, "email": 1, @@ -262,7 +240,7 @@ }, { "amend": 0, - "apply_user_permissions": 1, + "cancel": 0, "create": 1, "delete": 0, "email": 1, @@ -276,7 +254,7 @@ }, { "amend": 0, - "apply_user_permissions": 1, + "cancel": 0, "create": 1, "delete": 1, "email": 1, @@ -287,6 +265,30 @@ "role": "Support Team", "submit": 0, "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "permlevel": 1, + "read": 1, + "report": 1, + "role": "Support Team", + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "permlevel": 2, + "read": 1, + "report": 1, + "role": "Support Team", + "submit": 0, + "write": 0 } ], "search_fields": "status,customer,subject,raised_by", diff --git a/erpnext/utilities/doctype/contact/contact.json b/erpnext/utilities/doctype/contact/contact.json index c52cfdca51d..02076753b27 100644 --- a/erpnext/utilities/doctype/contact/contact.json +++ b/erpnext/utilities/doctype/contact/contact.json @@ -66,21 +66,6 @@ "permlevel": 0, "reqd": 0 }, - { - "fieldname": "sb00", - "fieldtype": "Section Break", - "label": "Communication History", - "options": "icon-comments", - "permlevel": 0, - "print_hide": 1 - }, - { - "fieldname": "communication_html", - "fieldtype": "HTML", - "label": "Communication HTML", - "permlevel": 0, - "print_hide": 1 - }, { "fieldname": "contact_details", "fieldtype": "Section Break", @@ -187,28 +172,20 @@ "fieldtype": "Check", "label": "Unsubscribed", "permlevel": 0 - }, - { - "fieldname": "communications", - "fieldtype": "Table", - "hidden": 1, - "label": "Communications", - "options": "Communication", - "permlevel": 0, - "print_hide": 1 } ], "icon": "icon-user", "idx": 1, "in_create": 0, "in_dialog": 0, - "modified": "2014-07-30 05:44:25.767076", + "modified": "2014-09-11 18:53:17.311624", "modified_by": "Administrator", "module": "Utilities", "name": "Contact", "owner": "Administrator", "permissions": [ { + "cancel": 0, "create": 1, "delete": 1, "email": 1, @@ -222,6 +199,7 @@ }, { "amend": 0, + "cancel": 0, "create": 1, "delete": 1, "email": 1, @@ -234,6 +212,7 @@ "write": 1 }, { + "cancel": 0, "create": 1, "delete": 1, "email": 1, @@ -246,6 +225,7 @@ "write": 1 }, { + "cancel": 0, "create": 1, "delete": 0, "email": 1, @@ -258,6 +238,7 @@ "write": 1 }, { + "cancel": 0, "create": 1, "delete": 0, "email": 1, @@ -270,6 +251,7 @@ "write": 1 }, { + "cancel": 0, "create": 1, "delete": 0, "email": 1, @@ -282,6 +264,7 @@ "write": 1 }, { + "cancel": 0, "create": 1, "delete": 0, "email": 1, @@ -294,7 +277,7 @@ "write": 1 }, { - "apply_user_permissions": 1, + "cancel": 0, "create": 1, "delete": 0, "email": 1, @@ -307,7 +290,7 @@ "write": 1 }, { - "apply_user_permissions": 1, + "cancel": 0, "create": 1, "delete": 0, "email": 1, @@ -320,7 +303,7 @@ "write": 1 }, { - "apply_user_permissions": 1, + "cancel": 0, "create": 1, "delete": 0, "email": 1, @@ -333,7 +316,7 @@ "write": 1 }, { - "apply_user_permissions": 1, + "cancel": 0, "create": 1, "delete": 0, "email": 1, @@ -344,6 +327,18 @@ "role": "Accounts User", "submit": 0, "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "match": "", + "permlevel": 1, + "read": 1, + "report": 1, + "role": "All", + "submit": 0 } ] } \ No newline at end of file From e10cf021d97e1599076642a470064c3e57102e3b Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 12 Sep 2014 13:09:41 +0530 Subject: [PATCH 06/18] [email] remove communicationlist #561 --- .../purchase_common/purchase_common.js | 2 + erpnext/buying/doctype/supplier/supplier.js | 8 +- erpnext/buying/doctype/supplier/supplier.json | 388 ++++++------ .../hr/doctype/job_applicant/job_applicant.js | 11 +- erpnext/selling/doctype/customer/customer.js | 5 - .../selling/doctype/customer/customer.json | 578 +++++++++--------- erpnext/selling/doctype/lead/lead.js | 2 + .../doctype/opportunity/opportunity.js | 11 +- .../selling/doctype/quotation/quotation.js | 9 - erpnext/selling/sales_common.js | 4 +- .../doctype/support_ticket/support_ticket.js | 1 + erpnext/utilities/doctype/contact/contact.js | 12 +- 12 files changed, 482 insertions(+), 549 deletions(-) diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js index c2e76e2ab75..0b4b2c1f3c5 100644 --- a/erpnext/buying/doctype/purchase_common/purchase_common.js +++ b/erpnext/buying/doctype/purchase_common/purchase_common.js @@ -10,6 +10,8 @@ frappe.provide("erpnext.buying"); frappe.require("assets/erpnext/js/transaction.js"); {% include "public/js/controllers/accounts.js" %} +cur_frm.email_field = "contact_email"; + erpnext.buying.BuyingController = erpnext.TransactionController.extend({ onload: function() { this.setup_queries(); diff --git a/erpnext/buying/doctype/supplier/supplier.js b/erpnext/buying/doctype/supplier/supplier.js index b5c7fb1b271..53390675168 100644 --- a/erpnext/buying/doctype/supplier/supplier.js +++ b/erpnext/buying/doctype/supplier/supplier.js @@ -20,13 +20,7 @@ cur_frm.cscript.refresh = function(doc, dt, dn) { // make lists cur_frm.cscript.make_address(doc,dt,dn); cur_frm.cscript.make_contact(doc,dt,dn); - - cur_frm.communication_view = new frappe.views.CommunicationList({ - list: frappe.get_list("Communication", {"supplier": doc.name}), - parent: cur_frm.fields_dict.communication_html.wrapper, - doc: doc - }) - } + } } cur_frm.cscript.make_dashboard = function(doc) { diff --git a/erpnext/buying/doctype/supplier/supplier.json b/erpnext/buying/doctype/supplier/supplier.json index 1d2177849f4..2c2fbff5559 100644 --- a/erpnext/buying/doctype/supplier/supplier.json +++ b/erpnext/buying/doctype/supplier/supplier.json @@ -1,260 +1,244 @@ { - "allow_import": 1, - "allow_rename": 1, - "autoname": "naming_series:", - "creation": "2013-01-10 16:34:11", - "description": "Supplier of Goods or Services.", - "docstatus": 0, - "doctype": "DocType", - "document_type": "Master", + "allow_import": 1, + "allow_rename": 1, + "autoname": "naming_series:", + "creation": "2013-01-10 16:34:11", + "description": "Supplier of Goods or Services.", + "docstatus": 0, + "doctype": "DocType", + "document_type": "Master", "fields": [ { - "fieldname": "basic_info", - "fieldtype": "Section Break", - "label": "Basic Info", - "oldfieldtype": "Section Break", - "options": "icon-user", + "fieldname": "basic_info", + "fieldtype": "Section Break", + "label": "Basic Info", + "oldfieldtype": "Section Break", + "options": "icon-user", "permlevel": 0 - }, + }, { - "fieldname": "naming_series", - "fieldtype": "Select", - "label": "Series", - "no_copy": 1, - "oldfieldname": "naming_series", - "oldfieldtype": "Select", - "options": "SUPP-", + "fieldname": "naming_series", + "fieldtype": "Select", + "label": "Series", + "no_copy": 1, + "oldfieldname": "naming_series", + "oldfieldtype": "Select", + "options": "SUPP-", "permlevel": 0 - }, + }, { - "fieldname": "supplier_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Supplier Name", - "no_copy": 1, - "oldfieldname": "supplier_name", - "oldfieldtype": "Data", - "permlevel": 0, + "fieldname": "supplier_name", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Supplier Name", + "no_copy": 1, + "oldfieldname": "supplier_name", + "oldfieldtype": "Data", + "permlevel": 0, "reqd": 1 - }, + }, { - "fieldname": "column_break0", - "fieldtype": "Column Break", - "permlevel": 0, + "fieldname": "column_break0", + "fieldtype": "Column Break", + "permlevel": 0, "width": "50%" - }, + }, { - "fieldname": "supplier_type", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Supplier Type", - "oldfieldname": "supplier_type", - "oldfieldtype": "Link", - "options": "Supplier Type", - "permlevel": 0, + "fieldname": "supplier_type", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Supplier Type", + "oldfieldname": "supplier_type", + "oldfieldtype": "Link", + "options": "Supplier Type", + "permlevel": 0, "reqd": 1 - }, + }, { - "depends_on": "eval:!doc.__islocal", - "fieldname": "address_contacts", - "fieldtype": "Section Break", - "label": "Address & Contacts", - "oldfieldtype": "Column Break", - "options": "icon-map-marker", + "depends_on": "eval:!doc.__islocal", + "fieldname": "address_contacts", + "fieldtype": "Section Break", + "label": "Address & Contacts", + "oldfieldtype": "Column Break", + "options": "icon-map-marker", "permlevel": 0 - }, + }, { - "fieldname": "address_html", - "fieldtype": "HTML", - "label": "Address HTML", - "permlevel": 0, + "fieldname": "address_html", + "fieldtype": "HTML", + "label": "Address HTML", + "permlevel": 0, "read_only": 1 - }, + }, { - "fieldname": "column_break1", - "fieldtype": "Column Break", - "permlevel": 0, + "fieldname": "column_break1", + "fieldtype": "Column Break", + "permlevel": 0, "width": "50%" - }, + }, { - "fieldname": "contact_html", - "fieldtype": "HTML", - "label": "Contact HTML", - "permlevel": 0, + "fieldname": "contact_html", + "fieldtype": "HTML", + "label": "Contact HTML", + "permlevel": 0, "read_only": 1 - }, + }, { - "depends_on": "eval:!doc.__islocal", - "fieldname": "communication_history", - "fieldtype": "Section Break", - "label": "Communication History", - "options": "icon-comments", - "permlevel": 0, - "print_hide": 1 - }, - { - "fieldname": "communication_html", - "fieldtype": "HTML", - "label": "Communication HTML", - "permlevel": 0, - "print_hide": 1 - }, - { - "fieldname": "more_info", - "fieldtype": "Section Break", - "label": "More Info", - "oldfieldtype": "Section Break", - "options": "icon-file-text", + "fieldname": "more_info", + "fieldtype": "Section Break", + "label": "More Info", + "oldfieldtype": "Section Break", + "options": "icon-file-text", "permlevel": 0 - }, + }, { - "description": "Enter the company name under which Account Head will be created for this Supplier", - "fieldname": "company", - "fieldtype": "Link", - "in_filter": 1, - "label": "Company", - "oldfieldname": "company", - "oldfieldtype": "Link", - "options": "Company", - "permlevel": 0, - "reqd": 1, + "description": "Enter the company name under which Account Head will be created for this Supplier", + "fieldname": "company", + "fieldtype": "Link", + "in_filter": 1, + "label": "Company", + "oldfieldname": "company", + "oldfieldtype": "Link", + "options": "Company", + "permlevel": 0, + "reqd": 1, "search_index": 0 - }, + }, { - "fieldname": "default_currency", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Default Currency", - "no_copy": 1, - "options": "Currency", + "fieldname": "default_currency", + "fieldtype": "Link", + "ignore_user_permissions": 1, + "label": "Default Currency", + "no_copy": 1, + "options": "Currency", "permlevel": 0 - }, + }, { - "fieldname": "default_price_list", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Price List", - "options": "Price List", + "fieldname": "default_price_list", + "fieldtype": "Link", + "ignore_user_permissions": 1, + "label": "Price List", + "options": "Price List", "permlevel": 0 - }, + }, { - "fieldname": "default_taxes_and_charges", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Taxes and Charges", - "options": "Purchase Taxes and Charges Master", + "fieldname": "default_taxes_and_charges", + "fieldtype": "Link", + "ignore_user_permissions": 1, + "label": "Taxes and Charges", + "options": "Purchase Taxes and Charges Master", "permlevel": 0 - }, + }, { - "fieldname": "credit_days", - "fieldtype": "Int", - "label": "Credit Days", + "fieldname": "credit_days", + "fieldtype": "Int", + "label": "Credit Days", "permlevel": 0 - }, + }, { - "fieldname": "column_break2", - "fieldtype": "Column Break", - "permlevel": 0, + "fieldname": "column_break2", + "fieldtype": "Column Break", + "permlevel": 0, "width": "50%" - }, + }, { - "fieldname": "website", - "fieldtype": "Data", - "label": "Website", - "oldfieldname": "website", - "oldfieldtype": "Data", + "fieldname": "website", + "fieldtype": "Data", + "label": "Website", + "oldfieldname": "website", + "oldfieldtype": "Data", "permlevel": 0 - }, + }, { - "description": "Statutory info and other general information about your Supplier", - "fieldname": "supplier_details", - "fieldtype": "Text", - "label": "Supplier Details", - "oldfieldname": "supplier_details", - "oldfieldtype": "Code", + "description": "Statutory info and other general information about your Supplier", + "fieldname": "supplier_details", + "fieldtype": "Text", + "label": "Supplier Details", + "oldfieldname": "supplier_details", + "oldfieldtype": "Code", "permlevel": 0 - }, + }, { - "fieldname": "communications", - "fieldtype": "Table", - "hidden": 1, - "label": "Communications", - "options": "Communication", - "permlevel": 0, + "fieldname": "communications", + "fieldtype": "Table", + "hidden": 1, + "label": "Communications", + "options": "Communication", + "permlevel": 0, "print_hide": 1 } - ], - "icon": "icon-user", - "idx": 1, - "modified": "2014-09-10 17:53:09.286715", - "modified_by": "Administrator", - "module": "Buying", - "name": "Supplier", - "owner": "Administrator", + ], + "icon": "icon-user", + "idx": 1, + "modified": "2014-09-12 12:26:37.606976", + "modified_by": "Administrator", + "module": "Buying", + "name": "Supplier", + "owner": "Administrator", "permissions": [ { - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, "role": "Purchase User" - }, + }, { - "amend": 0, - "create": 0, - "delete": 0, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Purchase Manager", - "submit": 0, + "amend": 0, + "create": 0, + "delete": 0, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Manager", + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "create": 1, - "delete": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Purchase Master Manager", - "submit": 0, + "amend": 0, + "create": 1, + "delete": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Master Manager", + "submit": 0, "write": 1 - }, + }, { - "apply_user_permissions": 1, - "permlevel": 0, - "read": 1, + "apply_user_permissions": 1, + "permlevel": 0, + "read": 1, "role": "Material User" - }, + }, { - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, "role": "Material Manager" - }, + }, { - "apply_user_permissions": 1, - "permlevel": 0, - "read": 1, + "apply_user_permissions": 1, + "permlevel": 0, + "read": 1, "role": "Accounts User" - }, + }, { - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, "role": "Accounts Manager" } - ], - "search_fields": "supplier_name,supplier_type", + ], + "search_fields": "supplier_name,supplier_type", "title_field": "supplier_name" -} \ No newline at end of file +} diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.js b/erpnext/hr/doctype/job_applicant/job_applicant.js index 762bd966f38..63b58db2891 100644 --- a/erpnext/hr/doctype/job_applicant/job_applicant.js +++ b/erpnext/hr/doctype/job_applicant/job_applicant.js @@ -3,16 +3,9 @@ // For license information, please see license.txt +// for communication +cur_frm.email_field = "email_id"; cur_frm.cscript = { refresh: function(doc) { - cur_frm.cscript.make_listing(doc); - }, - make_listing: function(doc) { - cur_frm.communication_view = new frappe.views.CommunicationList({ - list: frappe.get_list("Communication", {"parent": doc.name, "parenttype": "Job Applicant"}), - parent: cur_frm.fields_dict['thread_html'].wrapper, - doc: doc, - recipients: doc.email_id - }) }, } diff --git a/erpnext/selling/doctype/customer/customer.js b/erpnext/selling/doctype/customer/customer.js index e5d2ca95826..9829ed249c6 100644 --- a/erpnext/selling/doctype/customer/customer.js +++ b/erpnext/selling/doctype/customer/customer.js @@ -34,11 +34,6 @@ cur_frm.cscript.refresh = function(doc, dt, dn) { // make lists cur_frm.cscript.make_address(doc, dt, dn); cur_frm.cscript.make_contact(doc, dt, dn); - - cur_frm.communication_view = new frappe.views.CommunicationList({ - parent: cur_frm.fields_dict.communication_html.wrapper, - doc: doc, - }); } } diff --git a/erpnext/selling/doctype/customer/customer.json b/erpnext/selling/doctype/customer/customer.json index 47286de547b..bb481faa757 100644 --- a/erpnext/selling/doctype/customer/customer.json +++ b/erpnext/selling/doctype/customer/customer.json @@ -1,377 +1,361 @@ { - "allow_import": 1, - "allow_rename": 1, - "autoname": "naming_series:", - "creation": "2013-06-11 14:26:44", - "description": "Buyer of Goods and Services.", - "docstatus": 0, - "doctype": "DocType", - "document_type": "Master", + "allow_import": 1, + "allow_rename": 1, + "autoname": "naming_series:", + "creation": "2013-06-11 14:26:44", + "description": "Buyer of Goods and Services.", + "docstatus": 0, + "doctype": "DocType", + "document_type": "Master", "fields": [ { - "fieldname": "basic_info", - "fieldtype": "Section Break", - "label": "Basic Info", - "oldfieldtype": "Section Break", - "options": "icon-user", - "permlevel": 0, + "fieldname": "basic_info", + "fieldtype": "Section Break", + "label": "Basic Info", + "oldfieldtype": "Section Break", + "options": "icon-user", + "permlevel": 0, "reqd": 0 - }, + }, { - "fieldname": "naming_series", - "fieldtype": "Select", - "label": "Series", - "no_copy": 1, - "options": "CUST-", - "permlevel": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "label": "Series", + "no_copy": 1, + "options": "CUST-", + "permlevel": 0, "print_hide": 0 - }, + }, { - "fieldname": "customer_name", - "fieldtype": "Data", - "hidden": 0, - "in_filter": 1, - "in_list_view": 1, - "label": "Full Name", - "no_copy": 1, - "oldfieldname": "customer_name", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "report_hide": 0, - "reqd": 1, + "fieldname": "customer_name", + "fieldtype": "Data", + "hidden": 0, + "in_filter": 1, + "in_list_view": 1, + "label": "Full Name", + "no_copy": 1, + "oldfieldname": "customer_name", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "report_hide": 0, + "reqd": 1, "search_index": 1 - }, + }, { - "fieldname": "customer_type", - "fieldtype": "Select", - "label": "Type", - "oldfieldname": "customer_type", - "oldfieldtype": "Select", - "options": "\nCompany\nIndividual", - "permlevel": 0, + "fieldname": "customer_type", + "fieldtype": "Select", + "label": "Type", + "oldfieldname": "customer_type", + "oldfieldtype": "Select", + "options": "\nCompany\nIndividual", + "permlevel": 0, "reqd": 1 - }, + }, { - "fieldname": "lead_name", - "fieldtype": "Link", - "hidden": 0, - "in_filter": 1, - "label": "From Lead", - "no_copy": 1, - "oldfieldname": "lead_name", - "oldfieldtype": "Link", - "options": "Lead", - "permlevel": 0, - "print_hide": 1, + "fieldname": "lead_name", + "fieldtype": "Link", + "hidden": 0, + "in_filter": 1, + "label": "From Lead", + "no_copy": 1, + "oldfieldname": "lead_name", + "oldfieldtype": "Link", + "options": "Lead", + "permlevel": 0, + "print_hide": 1, "report_hide": 1 - }, + }, { - "fieldname": "column_break0", - "fieldtype": "Column Break", - "permlevel": 0, + "fieldname": "column_break0", + "fieldtype": "Column Break", + "permlevel": 0, "width": "50%" - }, + }, { - "description": "Add / Edit", - "fieldname": "customer_group", - "fieldtype": "Link", - "hidden": 0, - "in_filter": 1, - "label": "Customer Group", - "oldfieldname": "customer_group", - "oldfieldtype": "Link", - "options": "Customer Group", - "permlevel": 0, - "print_hide": 0, - "reqd": 1, + "description": "Add / Edit", + "fieldname": "customer_group", + "fieldtype": "Link", + "hidden": 0, + "in_filter": 1, + "label": "Customer Group", + "oldfieldname": "customer_group", + "oldfieldtype": "Link", + "options": "Customer Group", + "permlevel": 0, + "print_hide": 0, + "reqd": 1, "search_index": 1 - }, + }, { - "description": "Add / Edit", - "fieldname": "territory", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Territory", - "oldfieldname": "territory", - "oldfieldtype": "Link", - "options": "Territory", - "permlevel": 0, - "print_hide": 1, + "description": "Add / Edit", + "fieldname": "territory", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Territory", + "oldfieldname": "territory", + "oldfieldtype": "Link", + "options": "Territory", + "permlevel": 0, + "print_hide": 1, "reqd": 1 - }, + }, { - "depends_on": "eval:!doc.__islocal", - "fieldname": "address_contacts", - "fieldtype": "Section Break", - "label": "Address & Contacts", - "options": "icon-map-marker", + "depends_on": "eval:!doc.__islocal", + "fieldname": "address_contacts", + "fieldtype": "Section Break", + "label": "Address & Contacts", + "options": "icon-map-marker", "permlevel": 0 - }, + }, { - "fieldname": "address_html", - "fieldtype": "HTML", - "label": "Address HTML", - "permlevel": 0, + "fieldname": "address_html", + "fieldtype": "HTML", + "label": "Address HTML", + "permlevel": 0, "read_only": 1 - }, + }, { - "fieldname": "column_break1", - "fieldtype": "Column Break", - "permlevel": 0, + "fieldname": "column_break1", + "fieldtype": "Column Break", + "permlevel": 0, "width": "50%" - }, + }, { - "fieldname": "contact_html", - "fieldtype": "HTML", - "label": "Contact HTML", - "oldfieldtype": "HTML", - "permlevel": 0, + "fieldname": "contact_html", + "fieldtype": "HTML", + "label": "Contact HTML", + "oldfieldtype": "HTML", + "permlevel": 0, "read_only": 1 - }, + }, { - "depends_on": "eval:!doc.__islocal", - "fieldname": "communication_history", - "fieldtype": "Section Break", - "label": "Communication History", - "options": "icon-comments", - "permlevel": 0, - "print_hide": 1 - }, - { - "fieldname": "communication_html", - "fieldtype": "HTML", - "label": "Communication HTML", - "permlevel": 0, - "print_hide": 1 - }, - { - "fieldname": "more_info", - "fieldtype": "Section Break", - "label": "More Info", - "oldfieldtype": "Section Break", - "options": "icon-file-text", + "fieldname": "more_info", + "fieldtype": "Section Break", + "label": "More Info", + "oldfieldtype": "Section Break", + "options": "icon-file-text", "permlevel": 0 - }, + }, { - "fieldname": "column_break2", - "fieldtype": "Column Break", - "permlevel": 0, + "fieldname": "column_break2", + "fieldtype": "Column Break", + "permlevel": 0, "width": "50%" - }, + }, { - "description": "To create an Account Head under a different company, select the company and save customer.", - "fieldname": "company", - "fieldtype": "Link", - "in_filter": 1, - "label": "Company", - "oldfieldname": "company", - "oldfieldtype": "Link", - "options": "Company", - "permlevel": 0, - "reqd": 1, + "description": "To create an Account Head under a different company, select the company and save customer.", + "fieldname": "company", + "fieldtype": "Link", + "in_filter": 1, + "label": "Company", + "oldfieldname": "company", + "oldfieldtype": "Link", + "options": "Company", + "permlevel": 0, + "reqd": 1, "search_index": 1 - }, + }, { - "description": "Your Customer's TAX registration numbers (if applicable) or any general information", - "fieldname": "customer_details", - "fieldtype": "Text", - "label": "Customer Details", - "oldfieldname": "customer_details", - "oldfieldtype": "Code", + "description": "Your Customer's TAX registration numbers (if applicable) or any general information", + "fieldname": "customer_details", + "fieldtype": "Text", + "label": "Customer Details", + "oldfieldname": "customer_details", + "oldfieldtype": "Code", "permlevel": 0 - }, + }, { - "fieldname": "column_break3", - "fieldtype": "Column Break", - "permlevel": 0, + "fieldname": "column_break3", + "fieldtype": "Column Break", + "permlevel": 0, "width": "50%" - }, + }, { - "fieldname": "default_currency", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Currency", - "no_copy": 1, - "options": "Currency", + "fieldname": "default_currency", + "fieldtype": "Link", + "ignore_user_permissions": 1, + "label": "Currency", + "no_copy": 1, + "options": "Currency", "permlevel": 0 - }, + }, { - "fieldname": "default_price_list", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Price List", - "options": "Price List", + "fieldname": "default_price_list", + "fieldtype": "Link", + "ignore_user_permissions": 1, + "label": "Price List", + "options": "Price List", "permlevel": 0 - }, + }, { - "fieldname": "default_taxes_and_charges", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Taxes and Charges", - "options": "Sales Taxes and Charges Master", + "fieldname": "default_taxes_and_charges", + "fieldtype": "Link", + "ignore_user_permissions": 1, + "label": "Taxes and Charges", + "options": "Sales Taxes and Charges Master", "permlevel": 0 - }, + }, { - "fieldname": "credit_days", - "fieldtype": "Int", - "label": "Credit Days", - "oldfieldname": "credit_days", - "oldfieldtype": "Int", + "fieldname": "credit_days", + "fieldtype": "Int", + "label": "Credit Days", + "oldfieldname": "credit_days", + "oldfieldtype": "Int", "permlevel": 1 - }, + }, { - "fieldname": "credit_limit", - "fieldtype": "Currency", - "label": "Credit Limit", - "oldfieldname": "credit_limit", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", + "fieldname": "credit_limit", + "fieldtype": "Currency", + "label": "Credit Limit", + "oldfieldname": "credit_limit", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", "permlevel": 1 - }, + }, { - "fieldname": "website", - "fieldtype": "Data", - "label": "Website", + "fieldname": "website", + "fieldtype": "Data", + "label": "Website", "permlevel": 0 - }, + }, { - "fieldname": "sales_team_section_break", - "fieldtype": "Section Break", - "label": "Sales Team", - "oldfieldtype": "Section Break", - "options": "icon-group", + "fieldname": "sales_team_section_break", + "fieldtype": "Section Break", + "label": "Sales Team", + "oldfieldtype": "Section Break", + "options": "icon-group", "permlevel": 0 - }, + }, { - "fieldname": "default_sales_partner", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Sales Partner", - "oldfieldname": "default_sales_partner", - "oldfieldtype": "Link", - "options": "Sales Partner", + "fieldname": "default_sales_partner", + "fieldtype": "Link", + "ignore_user_permissions": 1, + "label": "Sales Partner", + "oldfieldname": "default_sales_partner", + "oldfieldtype": "Link", + "options": "Sales Partner", "permlevel": 0 - }, + }, { - "fieldname": "default_commission_rate", - "fieldtype": "Float", - "label": "Commission Rate", - "oldfieldname": "default_commission_rate", - "oldfieldtype": "Currency", + "fieldname": "default_commission_rate", + "fieldtype": "Float", + "label": "Commission Rate", + "oldfieldname": "default_commission_rate", + "oldfieldtype": "Currency", "permlevel": 0 - }, + }, { - "fieldname": "sales_team", - "fieldtype": "Table", - "label": "Sales Team Details", - "oldfieldname": "sales_team", - "oldfieldtype": "Table", - "options": "Sales Team", + "fieldname": "sales_team", + "fieldtype": "Table", + "label": "Sales Team Details", + "oldfieldname": "sales_team", + "oldfieldtype": "Table", + "options": "Sales Team", "permlevel": 0 - }, + }, { - "fieldname": "communications", - "fieldtype": "Table", - "hidden": 1, - "label": "Communications", - "options": "Communication", - "permlevel": 0, + "fieldname": "communications", + "fieldtype": "Table", + "hidden": 1, + "label": "Communications", + "options": "Communication", + "permlevel": 0, "print_hide": 1 } - ], - "icon": "icon-user", - "idx": 1, - "modified": "2014-09-10 16:41:07.553182", - "modified_by": "Administrator", - "module": "Selling", - "name": "Customer", - "owner": "Administrator", + ], + "icon": "icon-user", + "idx": 1, + "modified": "2014-09-12 12:26:47.480965", + "modified_by": "Administrator", + "module": "Selling", + "name": "Customer", + "owner": "Administrator", "permissions": [ { - "amend": 0, - "apply_user_permissions": 1, - "create": 1, - "delete": 0, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Sales User", - "submit": 0, + "amend": 0, + "apply_user_permissions": 1, + "create": 1, + "delete": 0, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "submit": 0, "write": 1 - }, + }, { - "cancel": 0, - "delete": 0, - "permlevel": 1, - "read": 1, + "cancel": 0, + "delete": 0, + "permlevel": 1, + "read": 1, "role": "Sales User" - }, + }, { - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, "role": "Sales Manager" - }, + }, { - "amend": 0, - "create": 1, - "delete": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Sales Master Manager", - "set_user_permissions": 1, - "submit": 0, + "amend": 0, + "create": 1, + "delete": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales Master Manager", + "set_user_permissions": 1, + "submit": 0, "write": 1 - }, + }, { - "cancel": 0, - "delete": 0, - "permlevel": 1, - "read": 1, - "role": "Sales Master Manager", + "cancel": 0, + "delete": 0, + "permlevel": 1, + "read": 1, + "role": "Sales Master Manager", "write": 1 - }, + }, { - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, "role": "Material User" - }, + }, { - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, "role": "Material Manager" - }, + }, { - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, "role": "Accounts User" - }, + }, { - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, "role": "Accounts Manager" } - ], - "search_fields": "customer_name,customer_group,territory", + ], + "search_fields": "customer_name,customer_group,territory", "title_field": "customer_name" -} \ No newline at end of file +} diff --git a/erpnext/selling/doctype/lead/lead.js b/erpnext/selling/doctype/lead/lead.js index 8d036a4e252..75f3add24f5 100644 --- a/erpnext/selling/doctype/lead/lead.js +++ b/erpnext/selling/doctype/lead/lead.js @@ -4,6 +4,8 @@ {% include 'setup/doctype/contact_control/contact_control.js' %}; frappe.provide("erpnext"); +cur_frm.email_field = "email_id"; + erpnext.LeadController = frappe.ui.form.Controller.extend({ setup: function() { this.frm.fields_dict.customer.get_query = function(doc, cdt, cdn) { diff --git a/erpnext/selling/doctype/opportunity/opportunity.js b/erpnext/selling/doctype/opportunity/opportunity.js index af31d395153..df84d72b6b7 100644 --- a/erpnext/selling/doctype/opportunity/opportunity.js +++ b/erpnext/selling/doctype/opportunity/opportunity.js @@ -8,6 +8,8 @@ frappe.ui.form.on_change("Opportunity", "contact_person", erpnext.utils.get_cont frappe.provide("erpnext.selling"); +cur_frm.email_field = "contact_email"; + // TODO commonify this code erpnext.selling.Opportunity = frappe.ui.form.Controller.extend({ onload: function() { @@ -26,15 +28,6 @@ erpnext.selling.Opportunity = frappe.ui.form.Controller.extend({ set_multiple(cdt, cdn, { fiscal_year:sys_defaults.fiscal_year }); - if(!this.frm.doc.__islocal) { - cur_frm.communication_view = new frappe.views.CommunicationList({ - list: frappe.get_list("Communication", {"parent": this.frm.doc.name, "parenttype": "Opportunity"}), - parent: cur_frm.fields_dict.communication_html.wrapper, - doc: this.frm.doc, - recipients: this.frm.doc.contact_email - }); - } - if(this.frm.doc.customer && !this.frm.doc.customer_name) cur_frm.cscript.customer(this.frm.doc); this.setup_queries(); diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js index 8cff8d83276..5f25446ed29 100644 --- a/erpnext/selling/doctype/quotation/quotation.js +++ b/erpnext/selling/doctype/quotation/quotation.js @@ -53,15 +53,6 @@ erpnext.selling.QuotationController = erpnext.selling.SellingController.extend({ }, "icon-download", "btn-default"); } - if (!doc.__islocal) { - cur_frm.communication_view = new frappe.views.CommunicationList({ - list: frappe.get_list("Communication", {"parent": doc.name, "parenttype": "Quotation"}), - parent: cur_frm.fields_dict.communication_html.wrapper, - doc: doc, - recipients: doc.contact_email - }); - } - this.toggle_reqd_lead_customer(); }, diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js index 66e935ab6fd..a5460fcd270 100644 --- a/erpnext/selling/sales_common.js +++ b/erpnext/selling/sales_common.js @@ -13,6 +13,8 @@ frappe.require("assets/erpnext/js/transaction.js"); {% include "public/js/controllers/accounts.js" %} +cur_frm.email_field = "contact_email"; + erpnext.selling.SellingController = erpnext.TransactionController.extend({ onload: function() { this._super(); @@ -591,7 +593,7 @@ frappe.ui.form.on(cur_frm.doctype,"project_name", function(frm) { method:'erpnext.projects.doctype.project.project.get_cost_center_name' , args: { project_name: frm.doc.project_name }, callback: function(r, rt) { - if(!r.exc) { + if(!r.exc) { $.each(frm.doc[cur_frm.cscript.fname] || [], function(i, row) { frappe.model.set_value(row.doctype, row.name, "cost_center", r.message); msgprint(__("Cost Center For Item with Item Code '"+row.item_name+"' has been Changed to "+ r.message)); diff --git a/erpnext/support/doctype/support_ticket/support_ticket.js b/erpnext/support/doctype/support_ticket/support_ticket.js index 096fd270021..cd77be4150c 100644 --- a/erpnext/support/doctype/support_ticket/support_ticket.js +++ b/erpnext/support/doctype/support_ticket/support_ticket.js @@ -7,6 +7,7 @@ cur_frm.fields_dict.customer.get_query = function(doc,cdt,cdn) { frappe.provide("erpnext.support"); cur_frm.add_fetch("customer", "customer_name", "customer_name") +cur_frm.email_field = "raised_by"; $.extend(cur_frm.cscript, { refresh: function(doc) { diff --git a/erpnext/utilities/doctype/contact/contact.js b/erpnext/utilities/doctype/contact/contact.js index f2a2fdcef29..fe407d91701 100644 --- a/erpnext/utilities/doctype/contact/contact.js +++ b/erpnext/utilities/doctype/contact/contact.js @@ -3,16 +3,8 @@ {% include 'controllers/js/contact_address_common.js' %}; -cur_frm.cscript.refresh = function(doc) { - cur_frm.communication_view = new frappe.views.CommunicationList({ - list: frappe.get_list("Communication", {"parent": doc.name, "parenttype": "Contact"}), - parent: cur_frm.fields_dict.communication_html.wrapper, - doc: doc, - recipients: doc.email_id - }); -} - +cur_frm.email_field = "email_id"; cur_frm.cscript.hide_dialog = function() { if(cur_frm.contact_list) cur_frm.contact_list.run(); -} \ No newline at end of file +} From 7fb79f6062a8e87229eb06f9bb04b88f7fb16701 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 12 Sep 2014 15:04:25 +0530 Subject: [PATCH 07/18] #2092 --- .../doctype/naming_series/naming_series.py | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/erpnext/setup/doctype/naming_series/naming_series.py b/erpnext/setup/doctype/naming_series/naming_series.py index 92781390fcf..bd6b708e98f 100644 --- a/erpnext/setup/doctype/naming_series/naming_series.py +++ b/erpnext/setup/doctype/naming_series/naming_series.py @@ -12,15 +12,27 @@ from frappe.model.document import Document class NamingSeries(Document): def get_transactions(self, arg=None): + doctypes = list(set(frappe.db.sql_list("""select parent + from `tabDocField` where fieldname='naming_series'""") + + frappe.db.sql_list("""select dt from `tabCustom Field` + where fieldname='naming_series'"""))) + + prefixes = "" + for d in doctypes: + print d + try: + options = self.get_options(d) + except frappe.DoesNotExistError: + continue + + prefixes = prefixes + "\n" + options + + prefixes.replace("\n\n", "\n") + prefixes = "\n".join(sorted(prefixes.split())) + return { - "transactions": "\n".join([''] + sorted(list(set( - frappe.db.sql_list("""select parent - from `tabDocField` where fieldname='naming_series'""") - + frappe.db.sql_list("""select dt from `tabCustom Field` - where fieldname='naming_series'""") - )))), - "prefixes": "\n".join([''] + [i[0] for i in - frappe.db.sql("""select name from tabSeries order by name""")]) + "transactions": "\n".join([''] + sorted(doctypes)), + "prefixes": prefixes } def scrub_options_list(self, ol): @@ -110,8 +122,8 @@ class NamingSeries(Document): if not re.match("^[a-zA-Z0-9- /.#]*$", n): throw(_('Special Characters except "-" and "/" not allowed in naming series')) - def get_options(self, arg=''): - return frappe.get_meta(self.select_doc_for_series).get_field("naming_series").options + def get_options(self, arg=None): + return frappe.get_meta(arg or self.select_doc_for_series).get_field("naming_series").options def get_current(self, arg=None): """get series current""" From 5cdc8e560c84e76bc83629d7c893e1fcb733e463 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 15 Sep 2014 16:59:38 +0530 Subject: [PATCH 08/18] [mailbox] removed separate email settings for jobs, sales, support --- erpnext/config/hr.py | 2 +- erpnext/config/selling.py | 2 +- erpnext/config/setup.py | 15 --- erpnext/config/support.py | 2 +- erpnext/controllers/selling_controller.py | 7 -- erpnext/controllers/status_updater.py | 35 ------- erpnext/hooks.py | 8 +- .../job_applicant/get_job_applications.py | 47 ---------- .../hr/doctype/job_applicant/job_applicant.py | 8 +- .../v4_0/reset_permissions_for_masters.py | 4 +- erpnext/patches/v4_0/split_email_settings.py | 11 ++- .../patches/v4_1/set_outgoing_email_footer.py | 1 + .../v4_4}/__init__.py | 0 erpnext/patches/v4_4/make_email_accounts.py | 73 +++++++++++++++ erpnext/selling/doctype/lead/get_leads.py | 53 ----------- .../doctype/jobs_email_settings/README.md | 1 - .../jobs_email_settings.js | 15 --- .../jobs_email_settings.json | 73 --------------- .../jobs_email_settings.py | 19 ---- .../doctype/sales_email_settings/README.md | 1 - .../doctype/sales_email_settings/__init__.py | 0 .../sales_email_settings.js | 15 --- .../sales_email_settings.json | 73 --------------- .../sales_email_settings.py | 20 ---- erpnext/setup/install.py | 3 - erpnext/stock/doctype/serial_no/serial_no.py | 3 - .../support_email_settings/__init__.py | 0 .../support_email_settings.json | 92 ------------------- .../support_email_settings.py | 45 --------- .../support_ticket/get_support_mails.py | 87 ------------------ .../doctype/support_ticket/support_ticket.py | 19 +--- erpnext/templates/utils.py | 23 ++--- 32 files changed, 106 insertions(+), 651 deletions(-) delete mode 100644 erpnext/hr/doctype/job_applicant/get_job_applications.py rename erpnext/{setup/doctype/jobs_email_settings => patches/v4_4}/__init__.py (100%) create mode 100644 erpnext/patches/v4_4/make_email_accounts.py delete mode 100644 erpnext/selling/doctype/lead/get_leads.py delete mode 100644 erpnext/setup/doctype/jobs_email_settings/README.md delete mode 100644 erpnext/setup/doctype/jobs_email_settings/jobs_email_settings.js delete mode 100644 erpnext/setup/doctype/jobs_email_settings/jobs_email_settings.json delete mode 100644 erpnext/setup/doctype/jobs_email_settings/jobs_email_settings.py delete mode 100644 erpnext/setup/doctype/sales_email_settings/README.md delete mode 100644 erpnext/setup/doctype/sales_email_settings/__init__.py delete mode 100644 erpnext/setup/doctype/sales_email_settings/sales_email_settings.js delete mode 100644 erpnext/setup/doctype/sales_email_settings/sales_email_settings.json delete mode 100644 erpnext/setup/doctype/sales_email_settings/sales_email_settings.py delete mode 100644 erpnext/support/doctype/support_email_settings/__init__.py delete mode 100644 erpnext/support/doctype/support_email_settings/support_email_settings.json delete mode 100644 erpnext/support/doctype/support_email_settings/support_email_settings.py delete mode 100644 erpnext/support/doctype/support_ticket/get_support_mails.py diff --git a/erpnext/config/hr.py b/erpnext/config/hr.py index 575de697ee5..22f17e72cc8 100644 --- a/erpnext/config/hr.py +++ b/erpnext/config/hr.py @@ -155,7 +155,7 @@ def get_data(): }, { "type": "doctype", - "name": "Jobs Email Settings", + "name": "Email Account", "description": _("Setup incoming server for jobs email id. (e.g. jobs@example.com)") }, ] diff --git a/erpnext/config/selling.py b/erpnext/config/selling.py index 1e5acadb53f..e4d17bb5ae9 100644 --- a/erpnext/config/selling.py +++ b/erpnext/config/selling.py @@ -158,7 +158,7 @@ def get_data(): }, { "type": "doctype", - "name": "Sales Email Settings", + "name": "Email Account", "description": _("Setup incoming server for sales email id. (e.g. sales@example.com)") }, { diff --git a/erpnext/config/setup.py b/erpnext/config/setup.py index 82fed9db4e7..f3c0cecf624 100644 --- a/erpnext/config/setup.py +++ b/erpnext/config/setup.py @@ -73,21 +73,6 @@ def get_data(): "name": "Email Digest", "description": _("Create and manage daily, weekly and monthly email digests.") }, - { - "type": "doctype", - "name": "Support Email Settings", - "description": _("Setup incoming server for support email id. (e.g. support@example.com)") - }, - { - "type": "doctype", - "name": "Sales Email Settings", - "description": _("Setup incoming server for sales email id. (e.g. sales@example.com)") - }, - { - "type": "doctype", - "name": "Jobs Email Settings", - "description": _("Setup incoming server for jobs email id. (e.g. jobs@example.com)") - }, { "type": "doctype", "name": "SMS Settings", diff --git a/erpnext/config/support.py b/erpnext/config/support.py index 97807a35100..7e243b25cb3 100644 --- a/erpnext/config/support.py +++ b/erpnext/config/support.py @@ -49,7 +49,7 @@ def get_data(): "items": [ { "type": "doctype", - "name": "Support Email Settings", + "name": "Email Account", "description": _("Setup incoming server for support email id. (e.g. support@example.com)") }, ] diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 0f3dc48aa3d..9e237e1aed0 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -33,13 +33,6 @@ class SellingController(StockController): self.validate_max_discount() check_active_sales_items(self) - def get_sender(self, comm): - sender = None - if cint(frappe.db.get_value('Sales Email Settings', None, 'extract_emails')): - sender = frappe.db.get_value('Sales Email Settings', None, 'email_id') - - return sender or comm.sender or frappe.session.user - def set_missing_values(self, for_validate=False): super(SellingController, self).set_missing_values(for_validate) diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index 1188be5ad12..20b5057af58 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -8,28 +8,16 @@ from frappe import msgprint, _, throw from frappe.model.document import Document status_map = { - "Contact": [ - ["Replied", "communication_sent"], - ["Open", "communication_received"] - ], - "Job Applicant": [ - ["Replied", "communication_sent"], - ["Open", "communication_received"] - ], "Lead": [ - ["Replied", "communication_sent"], ["Converted", "has_customer"], ["Opportunity", "has_opportunity"], - ["Open", "communication_received"], ], "Opportunity": [ ["Draft", None], ["Submitted", "eval:self.docstatus==1"], ["Lost", "eval:self.status=='Lost'"], ["Quotation", "has_quotation"], - ["Replied", "communication_sent"], ["Cancelled", "eval:self.docstatus==2"], - ["Open", "communication_received"], ], "Quotation": [ ["Draft", None], @@ -46,10 +34,6 @@ status_map = { ["Stopped", "eval:self.status=='Stopped'"], ["Cancelled", "eval:self.docstatus==2"], ], - "Support Ticket": [ - ["Replied", "communication_sent"], - ["Open", "communication_received"] - ], } class StatusUpdater(Document): @@ -90,25 +74,6 @@ class StatusUpdater(Document): if update: frappe.db.set_value(self.doctype, self.name, "status", self.status) - def on_communication(self): - if not self.get("communications"): return - self.communication_set = True - self.get("communications").sort(key=lambda d: d.creation) - self.set_status(update=True) - del self.communication_set - - def communication_received(self): - if getattr(self, "communication_set", False): - last_comm = self.get("communications") - if last_comm: - return last_comm[-1].sent_or_received == "Received" - - def communication_sent(self): - if getattr(self, "communication_set", False): - last_comm = self.get("communications") - if last_comm: - return last_comm[-1].sent_or_received == "Sent" - def validate_qty(self): """ Validates qty at row level diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 0230126218e..65eee1ffde1 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -38,11 +38,6 @@ doc_events = { } scheduler_events = { - "all": [ - "erpnext.support.doctype.support_ticket.get_support_mails.get_support_mails", - "erpnext.hr.doctype.job_applicant.get_job_applications.get_job_applications", - "erpnext.selling.doctype.lead.get_leads.get_leads" - ], "daily": [ "erpnext.controllers.recurring_document.create_recurring_documents", "erpnext.stock.utils.reorder_item", @@ -57,3 +52,6 @@ scheduler_events = { ] } +default_mail_footer = """""" + diff --git a/erpnext/hr/doctype/job_applicant/get_job_applications.py b/erpnext/hr/doctype/job_applicant/get_job_applications.py deleted file mode 100644 index 2f085925eaa..00000000000 --- a/erpnext/hr/doctype/job_applicant/get_job_applications.py +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals -import frappe -from frappe.utils import cstr, cint -from frappe.email.receive import POP3Server -from frappe.core.doctype.communication.communication import _make - -class JobsMailbox(POP3Server): - def setup(self, args=None): - self.settings = args or frappe.get_doc("Jobs Email Settings", "Jobs Email Settings") - - def process_message(self, mail): - if mail.from_email == self.settings.email_id: - return - - name = frappe.db.get_value("Job Applicant", {"email_id": mail.from_email}, - "name") - if name: - applicant = frappe.get_doc("Job Applicant", name) - if applicant.status!="Rejected": - applicant.status = "Open" - applicant.ignore_permissions = True - applicant.save() - else: - name = (mail.from_real_name and (mail.from_real_name + " - ") or "") \ - + mail.from_email - applicant = frappe.get_doc({ - "creation": mail.date, - "doctype":"Job Applicant", - "applicant_name": name, - "email_id": mail.from_email, - "status": "Open" - }) - applicant.ignore_permissions = True - applicant.ignore_mandatory = True - applicant.insert() - - mail.save_attachments_in_doc(applicant) - - _make(content=mail.content, sender=mail.from_email, subject=mail.subject or "No Subject", - doctype="Job Applicant", name=applicant.name, sent_or_received="Received") - -def get_job_applications(): - if cint(frappe.db.get_value('Jobs Email Settings', None, 'extract_emails')): - JobsMailbox() \ No newline at end of file diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.py b/erpnext/hr/doctype/job_applicant/job_applicant.py index 1f09c263336..ddbf97f6834 100644 --- a/erpnext/hr/doctype/job_applicant/job_applicant.py +++ b/erpnext/hr/doctype/job_applicant/job_applicant.py @@ -5,13 +5,9 @@ from __future__ import unicode_literals import frappe -from erpnext.utilities.transaction_base import TransactionBase +from frappe.model.document import Document from frappe.utils import extract_email_id -class JobApplicant(TransactionBase): - - def get_sender(self, comm): - return frappe.db.get_value('Jobs Email Settings',None,'email_id') or comm.sender or frappe.session.user - +class JobApplicant(Document): def validate(self): self.set_status() diff --git a/erpnext/patches/v4_0/reset_permissions_for_masters.py b/erpnext/patches/v4_0/reset_permissions_for_masters.py index d031bd0ebd2..30aa47a61d2 100644 --- a/erpnext/patches/v4_0/reset_permissions_for_masters.py +++ b/erpnext/patches/v4_0/reset_permissions_for_masters.py @@ -10,9 +10,9 @@ def execute(): "Comment", "Communication", "Company", "Contact Us Settings", "Country", "Currency", "Currency Exchange", "Deduction Type", "Department", "Designation", "Earning Type", "Event", "Feed", "File Data", "Fiscal Year", - "HR Settings", "Industry Type", "Jobs Email Settings", "Leave Type", "Letter Head", + "HR Settings", "Industry Type", "Leave Type", "Letter Head", "Mode of Payment", "Module Def", "Naming Series", "POS Setting", "Print Heading", - "Report", "Role", "Sales Email Settings", "Selling Settings", "Stock Settings", "Supplier Type", "UOM"): + "Report", "Role", "Selling Settings", "Stock Settings", "Supplier Type", "UOM"): try: frappe.reset_perms(doctype) except: diff --git a/erpnext/patches/v4_0/split_email_settings.py b/erpnext/patches/v4_0/split_email_settings.py index dd36eef3947..c04e1d52461 100644 --- a/erpnext/patches/v4_0/split_email_settings.py +++ b/erpnext/patches/v4_0/split_email_settings.py @@ -5,6 +5,16 @@ from __future__ import unicode_literals import frappe def execute(): + print "WARNING!!!! Email Settings not migrated. Please setup your email again." + + # this will happen if you are migrating very old accounts + # comment out this line below and remember to create new Email Accounts + # for incoming and outgoing mails + raise Exception + + return + + frappe.reload_doc("core", "doctype", "outgoing_email_settings") frappe.reload_doc("support", "doctype", "support_email_settings") @@ -12,7 +22,6 @@ def execute(): map_outgoing_email_settings(email_settings) map_support_email_settings(email_settings) - frappe.delete_doc("DocType", "Email Settings") def map_outgoing_email_settings(email_settings): outgoing_email_settings = frappe.get_doc("Outgoing Email Settings") diff --git a/erpnext/patches/v4_1/set_outgoing_email_footer.py b/erpnext/patches/v4_1/set_outgoing_email_footer.py index d38f2c247fe..73d8d607f29 100644 --- a/erpnext/patches/v4_1/set_outgoing_email_footer.py +++ b/erpnext/patches/v4_1/set_outgoing_email_footer.py @@ -6,6 +6,7 @@ import frappe from erpnext.setup.install import default_mail_footer def execute(): + return mail_footer = frappe.db.get_default('mail_footer') or '' mail_footer += default_mail_footer frappe.db.set_value("Outgoing Email Settings", "Outgoing Email Settings", "footer", mail_footer) diff --git a/erpnext/setup/doctype/jobs_email_settings/__init__.py b/erpnext/patches/v4_4/__init__.py similarity index 100% rename from erpnext/setup/doctype/jobs_email_settings/__init__.py rename to erpnext/patches/v4_4/__init__.py diff --git a/erpnext/patches/v4_4/make_email_accounts.py b/erpnext/patches/v4_4/make_email_accounts.py new file mode 100644 index 00000000000..9e8538db258 --- /dev/null +++ b/erpnext/patches/v4_4/make_email_accounts.py @@ -0,0 +1,73 @@ +import frappe + +def execute(): + frappe.reload_doc("email", "doctype", "email_account") + + # outgoing + outgoing = frappe.get_doc("Outgoing Email Settings") + account = frappe.new_doc("Email Account") + mapping = { + "email_id": "mail_login", + "password": "mail_password", + "footer": "footer", + "smtp_server": "mail_server", + "smtp_port": "mail_port", + "use_tls": "use_ssl" + } + + for target_fieldname, source_fieldname in mapping.iteritems(): + account.set(target_fieldname, outgoing.get(source_fieldname)) + + account.enable_outgoing = 1 + account.enable_incoming = 0 + account.is_global = 1 + + account.insert() + + # support + support = frappe.get_doc("Support Email Settings") + account = frappe.new_doc("Email Account") + mapping = { + "enable_incoming": "sync_support_mails", + "email_id": "mail_login", + "password": "mail_password", + "pop3_server": "mail_server", + "use_ssl": "use_ssl", + "signature": "support_signature", + "enable_auto_reply": "send_autoreply", + "auto_reply_message": "support_autoreply" + } + + for target_fieldname, source_fieldname in mapping.iteritems(): + account.set(target_fieldname, support.get(source_fieldname)) + + account.enable_outgoing = 0 + account.is_global = 1 + + account.insert() + + # sales, jobs + for doctype in ("Sales Email Settings", "Jobs Email Settings"): + source = frappe.get_doc(doctype) + account = frappe.new_doc("Email Account") + mapping = { + "enable_incoming": "extract_emails", + "email_id": "username", + "password": "password", + "pop3_server": "host", + "use_ssl": "use_ssl", + } + + for target_fieldname, source_fieldname in mapping.iteritems(): + account.set(target_fieldname, source.get(source_fieldname)) + + account.enable_outgoing = 0 + account.is_global = 1 + account.append_to = "Lead" if doctype=="Sales Email Settings" else "Job Applicant" + + account.insert() + + for doctype in ("Outgoing Email Settings", "Support Email Settings", + "Sales Email Settings", "Jobs Email Settings"): + frappe.delete_doc("DocType", doctype) + diff --git a/erpnext/selling/doctype/lead/get_leads.py b/erpnext/selling/doctype/lead/get_leads.py deleted file mode 100644 index f7b30a765fa..00000000000 --- a/erpnext/selling/doctype/lead/get_leads.py +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals -import frappe -from frappe.utils import cstr, cint -from frappe.email.receive import POP3Server -from frappe.core.doctype.communication.communication import _make - -def add_sales_communication(subject, content, sender, real_name, mail=None, - status="Open", date=None): - lead_name = frappe.db.get_value("Lead", {"email_id": sender}) - contact_name = frappe.db.get_value("Contact", {"email_id": sender}) - - if not (lead_name or contact_name): - # none, create a new Lead - lead = frappe.get_doc({ - "doctype":"Lead", - "lead_name": real_name or sender, - "email_id": sender, - "status": status, - "source": "Email" - }) - lead.ignore_permissions = True - lead.ignore_mandatory = True - lead.insert() - lead_name = lead.name - - parent_doctype = "Contact" if contact_name else "Lead" - parent_name = contact_name or lead_name - - message = _make(content=content, sender=sender, subject=subject, - doctype = parent_doctype, name = parent_name, date=date, sent_or_received="Received") - - if mail: - # save attachments to parent if from mail - doc = frappe.get_doc(parent_doctype, parent_name) - mail.save_attachments_in_doc(doc) - -class SalesMailbox(POP3Server): - def setup(self, args=None): - self.settings = args or frappe.get_doc("Sales Email Settings", "Sales Email Settings") - - def process_message(self, mail): - if mail.from_email == self.settings.email_id: - return - - add_sales_communication(mail.subject, mail.content, mail.from_email, - mail.from_real_name, mail=mail, date=mail.date) - -def get_leads(): - if cint(frappe.db.get_value('Sales Email Settings', None, 'extract_emails')): - SalesMailbox() \ No newline at end of file diff --git a/erpnext/setup/doctype/jobs_email_settings/README.md b/erpnext/setup/doctype/jobs_email_settings/README.md deleted file mode 100644 index 8314c55b8bc..00000000000 --- a/erpnext/setup/doctype/jobs_email_settings/README.md +++ /dev/null @@ -1 +0,0 @@ -Settings to extract job applications via email (POP). \ No newline at end of file diff --git a/erpnext/setup/doctype/jobs_email_settings/jobs_email_settings.js b/erpnext/setup/doctype/jobs_email_settings/jobs_email_settings.js deleted file mode 100644 index cda8fd6f20e..00000000000 --- a/erpnext/setup/doctype/jobs_email_settings/jobs_email_settings.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -// For license information, please see license.txt - -cur_frm.cscript = { - refresh: function(doc) { - cur_frm.set_intro(""); - if(doc.extract_emails) { - cur_frm.set_intro(__("Active: Will extract emails from ") + doc.email_id); - } else { - cur_frm.set_intro(__("Not Active")); - } - } -} \ No newline at end of file diff --git a/erpnext/setup/doctype/jobs_email_settings/jobs_email_settings.json b/erpnext/setup/doctype/jobs_email_settings/jobs_email_settings.json deleted file mode 100644 index e6fec9d61c5..00000000000 --- a/erpnext/setup/doctype/jobs_email_settings/jobs_email_settings.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "creation": "2013-01-15 16:50:01.000000", - "description": "Email settings for jobs email id \"jobs@example.com\"", - "docstatus": 0, - "doctype": "DocType", - "fields": [ - { - "description": "Settings to extract Job Applicants from a mailbox e.g. \"jobs@example.com\"", - "fieldname": "pop3_mail_settings", - "fieldtype": "Section Break", - "label": "POP3 Mail Settings", - "permlevel": 0 - }, - { - "description": "Check to activate", - "fieldname": "extract_emails", - "fieldtype": "Check", - "label": "Extract Emails", - "permlevel": 0 - }, - { - "description": "Email Id where a job applicant will email e.g. \"jobs@example.com\"", - "fieldname": "email_id", - "fieldtype": "Data", - "label": "Email Id", - "permlevel": 0 - }, - { - "description": "POP3 server e.g. (pop.gmail.com)", - "fieldname": "host", - "fieldtype": "Data", - "label": "Host", - "permlevel": 0 - }, - { - "fieldname": "use_ssl", - "fieldtype": "Check", - "label": "Use SSL", - "permlevel": 0 - }, - { - "fieldname": "username", - "fieldtype": "Data", - "label": "Username", - "permlevel": 0 - }, - { - "fieldname": "password", - "fieldtype": "Password", - "label": "Password", - "permlevel": 0 - } - ], - "icon": "icon-cog", - "idx": 1, - "issingle": 1, - "modified": "2013-12-20 19:23:16.000000", - "modified_by": "Administrator", - "module": "Setup", - "name": "Jobs Email Settings", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "role": "System Manager", - "write": 1 - } - ] -} \ No newline at end of file diff --git a/erpnext/setup/doctype/jobs_email_settings/jobs_email_settings.py b/erpnext/setup/doctype/jobs_email_settings/jobs_email_settings.py deleted file mode 100644 index 5d8bab84b71..00000000000 --- a/erpnext/setup/doctype/jobs_email_settings/jobs_email_settings.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -# For license information, please see license.txt - -from __future__ import unicode_literals -import frappe -from frappe import _ -from frappe.utils import cint - -from frappe.model.document import Document - -class JobsEmailSettings(Document): - - def validate(self): - if cint(self.extract_emails) and not (self.email_id and self.host and \ - self.username and self.password): - - frappe.throw(_("""Host, Email and Password required if emails are to be pulled""")) diff --git a/erpnext/setup/doctype/sales_email_settings/README.md b/erpnext/setup/doctype/sales_email_settings/README.md deleted file mode 100644 index 8d7d48f4bc2..00000000000 --- a/erpnext/setup/doctype/sales_email_settings/README.md +++ /dev/null @@ -1 +0,0 @@ -Settings for creating new Communication, Leads from sales inbox like "sales@example.com" via POP3. \ No newline at end of file diff --git a/erpnext/setup/doctype/sales_email_settings/__init__.py b/erpnext/setup/doctype/sales_email_settings/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/erpnext/setup/doctype/sales_email_settings/sales_email_settings.js b/erpnext/setup/doctype/sales_email_settings/sales_email_settings.js deleted file mode 100644 index cda8fd6f20e..00000000000 --- a/erpnext/setup/doctype/sales_email_settings/sales_email_settings.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -// For license information, please see license.txt - -cur_frm.cscript = { - refresh: function(doc) { - cur_frm.set_intro(""); - if(doc.extract_emails) { - cur_frm.set_intro(__("Active: Will extract emails from ") + doc.email_id); - } else { - cur_frm.set_intro(__("Not Active")); - } - } -} \ No newline at end of file diff --git a/erpnext/setup/doctype/sales_email_settings/sales_email_settings.json b/erpnext/setup/doctype/sales_email_settings/sales_email_settings.json deleted file mode 100644 index c19f2e2e228..00000000000 --- a/erpnext/setup/doctype/sales_email_settings/sales_email_settings.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "creation": "2013-01-16 10:25:26.000000", - "description": "Email settings to extract Leads from sales email id e.g. \"sales@example.com\"", - "docstatus": 0, - "doctype": "DocType", - "fields": [ - { - "description": "Email settings to extract Leads from sales email id e.g. \"sales@example.com\"", - "fieldname": "pop3_mail_settings", - "fieldtype": "Section Break", - "label": "POP3 Mail Settings", - "permlevel": 0 - }, - { - "description": "Check to activate", - "fieldname": "extract_emails", - "fieldtype": "Check", - "label": "Extract Emails", - "permlevel": 0 - }, - { - "description": "Email Id where a job applicant will email e.g. \"jobs@example.com\"", - "fieldname": "email_id", - "fieldtype": "Data", - "label": "Email Id", - "permlevel": 0 - }, - { - "description": "POP3 server e.g. (pop.gmail.com)", - "fieldname": "host", - "fieldtype": "Data", - "label": "Host", - "permlevel": 0 - }, - { - "fieldname": "use_ssl", - "fieldtype": "Check", - "label": "Use SSL", - "permlevel": 0 - }, - { - "fieldname": "username", - "fieldtype": "Data", - "label": "Username", - "permlevel": 0 - }, - { - "fieldname": "password", - "fieldtype": "Password", - "label": "Password", - "permlevel": 0 - } - ], - "icon": "icon-cog", - "idx": 1, - "issingle": 1, - "modified": "2013-12-20 19:21:38.000000", - "modified_by": "Administrator", - "module": "Setup", - "name": "Sales Email Settings", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "role": "System Manager", - "write": 1 - } - ] -} \ No newline at end of file diff --git a/erpnext/setup/doctype/sales_email_settings/sales_email_settings.py b/erpnext/setup/doctype/sales_email_settings/sales_email_settings.py deleted file mode 100644 index 88dc411a7ca..00000000000 --- a/erpnext/setup/doctype/sales_email_settings/sales_email_settings.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -# For license information, please see license.txt - -from __future__ import unicode_literals -import frappe -from frappe import _ -from frappe.utils import cint - -from frappe.model.document import Document - -class SalesEmailSettings(Document): - - def validate(self): - if cint(self.extract_emails) and not (self.email_id and self.host and \ - self.username and self.password): - - frappe.msgprint(_("""Host, Email and Password required if emails are to be pulled"""), - raise_exception=True) \ No newline at end of file diff --git a/erpnext/setup/install.py b/erpnext/setup/install.py index 93f4ad55ecb..dce101ea916 100644 --- a/erpnext/setup/install.py +++ b/erpnext/setup/install.py @@ -52,6 +52,3 @@ def set_single_defaults(): pass frappe.db.set_default("date_format", "dd-mm-yyyy") - - frappe.db.set_value("Outgoing Email Settings", "Outgoing Email Settings", "footer", - default_mail_footer) diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py index 14c409ba801..bc4909055ae 100644 --- a/erpnext/stock/doctype/serial_no/serial_no.py +++ b/erpnext/stock/doctype/serial_no/serial_no.py @@ -192,9 +192,6 @@ class SerialNo(StockController): self.set_sales_details(last_sle.get("delivery_sle")) self.set_maintenance_status() - def on_communication(self): - return - def process_serial_no(sle): item_det = get_item_details(sle.item_code) validate_serial_no(sle, item_det) diff --git a/erpnext/support/doctype/support_email_settings/__init__.py b/erpnext/support/doctype/support_email_settings/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/erpnext/support/doctype/support_email_settings/support_email_settings.json b/erpnext/support/doctype/support_email_settings/support_email_settings.json deleted file mode 100644 index dd45049d27d..00000000000 --- a/erpnext/support/doctype/support_email_settings/support_email_settings.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "allow_copy": 1, - "creation": "2014-03-03 19:48:46.000000", - "description": "Email Settings for Outgoing and Incoming Emails.", - "docstatus": 0, - "doctype": "DocType", - "fields": [ - { - "description": "Check this to pull emails from your mailbox", - "fieldname": "sync_support_mails", - "fieldtype": "Check", - "label": "Sync Support Mails", - "permlevel": 0 - }, - { - "description": "Your support email id - must be a valid email - this is where your emails will come!", - "fieldname": "support_email", - "fieldtype": "Data", - "label": "Support Email", - "permlevel": 0 - }, - { - "description": "POP3 mail server (e.g. pop.gmail.com)", - "fieldname": "mail_server", - "fieldtype": "Data", - "label": "POP3 Mail Server", - "permlevel": 0 - }, - { - "fieldname": "use_ssl", - "fieldtype": "Check", - "label": "Use SSL", - "permlevel": 0 - }, - { - "fieldname": "mail_login", - "fieldtype": "Data", - "label": "User Name", - "permlevel": 0 - }, - { - "fieldname": "mail_password", - "fieldtype": "Password", - "label": "Support Password", - "permlevel": 0 - }, - { - "fieldname": "cb1", - "fieldtype": "Column Break", - "permlevel": 0 - }, - { - "description": "Signature to be appended at the end of every email", - "fieldname": "support_signature", - "fieldtype": "Text", - "label": "Signature", - "permlevel": 0 - }, - { - "default": "1", - "fieldname": "send_autoreply", - "fieldtype": "Check", - "label": "Send Autoreply", - "permlevel": 0 - }, - { - "description": "Autoreply when a new mail is received", - "fieldname": "support_autoreply", - "fieldtype": "Text", - "label": "Custom Autoreply Message", - "permlevel": 0 - } - ], - "icon": "icon-cog", - "idx": 1, - "in_create": 1, - "issingle": 1, - "modified": "2014-03-03 20:20:34.000000", - "modified_by": "Administrator", - "module": "Support", - "name": "Support Email Settings", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "permlevel": 0, - "read": 1, - "role": "System Manager", - "write": 1 - } - ] -} \ No newline at end of file diff --git a/erpnext/support/doctype/support_email_settings/support_email_settings.py b/erpnext/support/doctype/support_email_settings/support_email_settings.py deleted file mode 100644 index c7eb1b8de4e..00000000000 --- a/erpnext/support/doctype/support_email_settings/support_email_settings.py +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# MIT License. See license.txt - -# For license information, please see license.txt - -from __future__ import unicode_literals -import frappe -from frappe import _ -from frappe.utils import cint -from frappe.model.document import Document -from frappe.email.receive import POP3Server -import _socket, poplib - -class SupportEmailSettings(Document): - - def validate(self): - """ - Checks support ticket email settings - """ - if cint(self.sync_support_mails) and self.mail_server and not frappe.local.flags.in_patch: - inc_email = frappe._dict(self.as_dict()) - # inc_email.encode() - inc_email.host = self.mail_server - inc_email.use_ssl = self.use_ssl - try: - err_msg = _('User Name or Support Password missing. Please enter and try again.') - if not (self.mail_login and self.mail_password): - raise AttributeError, err_msg - inc_email.username = self.mail_login - inc_email.password = self.mail_password - except AttributeError, e: - frappe.msgprint(err_msg) - raise - - pop_mb = POP3Server(inc_email) - - try: - pop_mb.connect() - except _socket.error, e: - # Invalid mail server -- due to refusing connection - frappe.msgprint(_('Invalid Mail Server. Please rectify and try again.')) - raise - except poplib.error_proto, e: - frappe.msgprint(_('Invalid User Name or Support Password. Please rectify and try again.')) - raise diff --git a/erpnext/support/doctype/support_ticket/get_support_mails.py b/erpnext/support/doctype/support_ticket/get_support_mails.py deleted file mode 100644 index 894d95651f4..00000000000 --- a/erpnext/support/doctype/support_ticket/get_support_mails.py +++ /dev/null @@ -1,87 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals -import frappe -from frappe.utils import cstr, cint, decode_dict, today -from frappe.email import sendmail -from frappe.email.receive import POP3Server -from frappe.core.doctype.communication.communication import _make - -class SupportMailbox(POP3Server): - def setup(self, args=None): - self.email_settings = frappe.get_doc("Support Email Settings", "Support Email Settings") - self.settings = args or frappe._dict({ - "use_ssl": self.email_settings.use_ssl, - "host": self.email_settings.mail_server, - "username": self.email_settings.mail_login, - "password": self.email_settings.mail_password - }) - - def process_message(self, mail): - if mail.from_email == self.email_settings.get('support_email'): - return - thread_id = mail.get_thread_id() - new_ticket = False - - if not (thread_id and frappe.db.exists("Support Ticket", thread_id)): - new_ticket = True - - ticket = add_support_communication(mail.subject, mail.content, mail.from_email, - docname=None if new_ticket else thread_id, mail=mail) - - if new_ticket and cint(self.email_settings.send_autoreply) and \ - "mailer-daemon" not in mail.from_email.lower(): - self.send_auto_reply(ticket) - - def send_auto_reply(self, d): - signature = self.email_settings.get('support_signature') or '' - response = self.email_settings.get('support_autoreply') or (""" -A new Ticket has been raised for your query. If you have any additional information, please -reply back to this mail. - -### We will get back to you as soon as possible - ---- - -Original Query: - -""" + d.description + "\n\n---\n\n" + cstr(signature)) - - sendmail(\ - recipients = [cstr(d.raised_by)], \ - sender = cstr(self.email_settings.get('support_email')), \ - subject = '['+cstr(d.name)+'] ' + cstr(d.subject), \ - msg = cstr(response)) - -def get_support_mails(): - if cint(frappe.db.get_value('Support Email Settings', None, 'sync_support_mails')): - SupportMailbox() - -def add_support_communication(subject, content, sender, docname=None, mail=None): - if docname: - ticket = frappe.get_doc("Support Ticket", docname) - ticket.status = 'Open' - ticket.ignore_permissions = True - ticket.save() - else: - ticket = frappe.get_doc(decode_dict({ - "doctype":"Support Ticket", - "description": content, - "subject": subject, - "raised_by": sender, - "content_type": mail.content_type if mail else None, - "status": "Open", - })) - ticket.ignore_permissions = True - ticket.ignore_mandatory = True - ticket.insert() - - _make(content=content, sender=sender, subject = subject, - doctype="Support Ticket", name=ticket.name, - date=mail.date if mail else today(), sent_or_received="Received") - - if mail: - mail.save_attachments_in_doc(ticket) - - return ticket diff --git a/erpnext/support/doctype/support_ticket/support_ticket.py b/erpnext/support/doctype/support_ticket/support_ticket.py index 1212218b92f..226df0f956c 100644 --- a/erpnext/support/doctype/support_ticket/support_ticket.py +++ b/erpnext/support/doctype/support_ticket/support_ticket.py @@ -5,26 +5,13 @@ from __future__ import unicode_literals import frappe from frappe import _ -from erpnext.utilities.transaction_base import TransactionBase -from frappe.utils import now, extract_email_id +from frappe.model.document import Document +from frappe.utils import now -class SupportTicket(TransactionBase): +class SupportTicket(Document): def get_feed(self): return "{0}: {1}".format(_(self.status, self.subject)) - def get_sender(self, comm): - return frappe.db.get_value('Support Email Settings',None,'support_email') - - def get_subject(self, comm): - return '[' + self.name + '] ' + (comm.subject or 'No Subject Specified') - - def get_content(self, comm): - signature = frappe.db.get_value('Support Email Settings',None,'support_signature') - content = comm.content - if signature: - content += '

' + signature + '

' - return content - def get_portal_page(self): return "ticket" diff --git a/erpnext/templates/utils.py b/erpnext/templates/utils.py index d3c93eb24c5..98929240072 100644 --- a/erpnext/templates/utils.py +++ b/erpnext/templates/utils.py @@ -7,19 +7,14 @@ import frappe @frappe.whitelist(allow_guest=True) def send_message(subject="Website Query", message="", sender="", status="Open"): from frappe.templates.pages.contact import send_message as website_send_message - res = website_send_message(subject, message, sender) - if not res: - return + website_send_message(subject, message, sender) - if subject=="Support": - # create support ticket - from erpnext.support.doctype.support_ticket.get_support_mails import add_support_communication - add_support_communication(subject, message, sender, mail=None) - else: - # make lead / communication - from erpnext.selling.doctype.lead.get_leads import add_sales_communication - add_sales_communication(subject or "Website Query", message, sender, sender, - mail=None, status=status) - - return res + comm = frappe.get_doc({ + "doctype":"Communication", + "subject": subject, + "content": message, + "sender": sender, + "sent_or_received": "Received" + }) + comm.insert(ignore_permissions=True) From bf8715dba4621977896eef099ec30c4c2b2527d6 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 16 Sep 2014 14:57:31 +0530 Subject: [PATCH 09/18] [refactor] used frappe.sendmail --- erpnext/hr/doctype/salary_slip/salary_slip.py | 4 +--- .../doctype/backup_manager/backup_manager.py | 19 +++++++++---------- .../doctype/email_digest/email_digest.py | 5 ++--- erpnext/stock/utils.py | 9 ++++----- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index 638500b996a..f3ac6521a07 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -185,12 +185,10 @@ class SalarySlip(TransactionBase): def send_mail_funct(self): - from frappe.email import sendmail - receiver = frappe.db.get_value("Employee", self.employee, "company_email") if receiver: subj = 'Salary Slip - ' + cstr(self.month) +'/'+cstr(self.fiscal_year) - sendmail([receiver], subject=subj, msg = _("Please see attachment"), + frappe.sendmail([receiver], subject=subj, msg = _("Please see attachment"), attachments=[{ "fname": self.name + ".pdf", "fcontent": frappe.get_print_format(self.doctype, self.name, as_pdf = True) diff --git a/erpnext/setup/doctype/backup_manager/backup_manager.py b/erpnext/setup/doctype/backup_manager/backup_manager.py index 99cae9aa756..2695a4621a7 100644 --- a/erpnext/setup/doctype/backup_manager/backup_manager.py +++ b/erpnext/setup/doctype/backup_manager/backup_manager.py @@ -21,10 +21,10 @@ def take_backups_weekly(): def take_backups_if(freq): if frappe.db.get_value("Backup Manager", None, "upload_backups_to_dropbox")==freq: take_backups_dropbox() - + # if frappe.db.get_value("Backup Manager", None, "upload_backups_to_gdrive")==freq: # take_backups_gdrive() - + @frappe.whitelist() def take_backups_dropbox(): did_not_upload, error_log = [], [] @@ -32,7 +32,7 @@ def take_backups_dropbox(): from erpnext.setup.doctype.backup_manager.backup_dropbox import backup_to_dropbox did_not_upload, error_log = backup_to_dropbox() if did_not_upload: raise Exception - + send_email(True, "Dropbox") except Exception: file_and_error = [" - ".join(f) for f in zip(did_not_upload, error_log)] @@ -40,7 +40,7 @@ def take_backups_dropbox(): frappe.errprint(error_message) send_email(False, "Dropbox", error_message) -#backup to gdrive +#backup to gdrive @frappe.whitelist() def take_backups_gdrive(): did_not_upload, error_log = [], [] @@ -48,7 +48,7 @@ def take_backups_gdrive(): from erpnext.setup.doctype.backup_manager.backup_googledrive import backup_to_gdrive did_not_upload, error_log = backup_to_gdrive() if did_not_upload: raise Exception - + send_email(True, "Google Drive") except Exception: file_and_error = [" - ".join(f) for f in zip(did_not_upload, error_log)] @@ -57,10 +57,9 @@ def take_backups_gdrive(): send_email(False, "Google Drive", error_message) def send_email(success, service_name, error_status=None): - from frappe.email import sendmail if success: subject = "Backup Upload Successful" - message ="""

Backup Uploaded Successfully

Hi there, this is just to inform you + message ="""

Backup Uploaded Successfully

Hi there, this is just to inform you that your backup was successfully uploaded to your %s account. So relax!

""" % service_name @@ -71,9 +70,9 @@ def send_email(success, service_name, error_status=None):

Error message: %s

Please contact your system manager for more information.

""" % (service_name, error_status) - + if not frappe.db: frappe.connect() - + recipients = frappe.db.get_value("Backup Manager", None, "send_notifications_to").split(",") - sendmail(recipients, subject=subject, msg=message) + frappe.sendmail(recipients=recipients, subject=subject, msg=message) diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py index c66d3de0f11..89a87f7a914 100644 --- a/erpnext/setup/doctype/email_digest/email_digest.py +++ b/erpnext/setup/doctype/email_digest/email_digest.py @@ -9,7 +9,6 @@ from frappe.utils import fmt_money, formatdate, now_datetime, cstr, esc, \ from frappe.utils.dateutils import datetime_in_user_format from datetime import timedelta from dateutil.relativedelta import relativedelta -from frappe.email import sendmail from frappe.core.doctype.user.user import STANDARD_USERS content_sequence = [ @@ -83,10 +82,10 @@ class EmailDigest(Document): msg_for_this_receipient = self.get_msg_html(self.get_user_specific_content(user_id) + \ common_msg) if msg_for_this_receipient: - sendmail(recipients=user_id, + frappe.sendmail(recipients=user_id, subject="[ERPNext] [{frequency} Digest] {name}".format( frequency=self.frequency, name=self.name), - msg=msg_for_this_receipient) + msg=msg_for_this_receipient, bulk=True) def get_digest_msg(self): return self.get_msg_html(self.get_user_specific_content(frappe.session.user) + \ diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py index 31172902d35..c441ae7d2ad 100644 --- a/erpnext/stock/utils.py +++ b/erpnext/stock/utils.py @@ -6,7 +6,6 @@ from frappe import _ import json from frappe.utils import flt, cstr, nowdate, add_days, cint from frappe.defaults import get_global_default -from frappe.email import sendmail from erpnext.accounts.utils import get_fiscal_year, FiscalYearError class InvalidWarehouseCompany(frappe.ValidationError): pass @@ -336,11 +335,11 @@ def send_email_notification(mr_list): msg += "" + item.item_code + "" + item.warehouse + "" + \ cstr(item.qty) + "" + cstr(item.uom) + "" msg += "" - sendmail(email_list, subject='Auto Material Request Generation Notification', msg = msg) + frappe.sendmail(recipients=email_list, subject='Auto Material Request Generation Notification', msg = msg) def notify_errors(exceptions_list): subject = "[Important] [ERPNext] Error(s) while creating Material Requests based on Re-order Levels" - msg = """Dear System Manager, + content = """Dear System Manager, An error occured for certain Items while creating Material Requests based on Re-order level. @@ -353,5 +352,5 @@ Please rectify these issues: Regards, Administrator""" % ("\n\n".join(exceptions_list),) - from frappe.utils.user import get_system_managers - sendmail(get_system_managers(), subject=subject, msg=msg) + from frappe.email import sendmail_to_system_managers + sendmail_to_system_managers(subject, content) From c786802124ceb3c2dec84bab75de371821a338ba Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 17 Sep 2014 17:28:03 +0530 Subject: [PATCH 10/18] [communication] covert-wip --- erpnext/hooks.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 65eee1ffde1..577eaea2fa0 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -26,6 +26,8 @@ website_generators = ["Item Group", "Item", "Sales Partner"] standard_queries = "Customer:erpnext.selling.doctype.customer.customer.get_customer_list" +communication_covert_to = ["Lead", "Support Ticket", "Job Application"] + doc_events = { "Stock Entry": { "on_submit": "erpnext.stock.doctype.material_request.material_request.update_completed_qty", From 96c52c38e0de1bdbfc588d5ea628d985efeae32c Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 29 Sep 2014 11:44:22 +0530 Subject: [PATCH 11/18] [travis] checkout v5.0 of frappe --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1b4e3403f1a..344637ad5e6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,7 @@ install: - sudo apt-get install mariadb-server mariadb-common libmariadbclient-dev - wget http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.1/wkhtmltox-0.12.1_linux-precise-amd64.deb - sudo dpkg -i wkhtmltox-0.12.1_linux-precise-amd64.deb - - CFLAGS=-O0 pip install git+https://github.com/frappe/frappe.git@develop + - CFLAGS=-O0 pip install git+https://github.com/frappe/frappe.git@v5.0 - CFLAGS=-O0 pip install --editable . before_script: From 1c918687552313e553b3864fe9148f36df21bc7d Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 29 Sep 2014 12:09:55 +0530 Subject: [PATCH 12/18] [version] 5.0.0-alpha --- erpnext/__version__.py | 2 +- erpnext/hooks.py | 2 +- setup.py | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/erpnext/__version__.py b/erpnext/__version__.py index 5ee6158c526..a20415b7fcf 100644 --- a/erpnext/__version__.py +++ b/erpnext/__version__.py @@ -1 +1 @@ -__version__ = '4.3.0' +__version__ = '5.0.0-alpha' diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 577eaea2fa0..f9ac629922e 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -4,7 +4,7 @@ app_publisher = "Web Notes Technologies Pvt. Ltd. and Contributors" app_description = "Open Source Enterprise Resource Planning for Small and Midsized Organizations" app_icon = "icon-th" app_color = "#e74c3c" -app_version = "4.3.0" +app_version = "5.0.0-alpha" error_report_email = "support@erpnext.com" diff --git a/setup.py b/setup.py index 5cea41c6f2c..be7f892925e 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,6 @@ from setuptools import setup, find_packages -import os -version = "4.3.0" +version = "5.0.0-alpha" with open("requirements.txt", "r") as f: install_requires = f.readlines() From 66e08e39f7229f666ceba23852d7120e17ad20b6 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 29 Sep 2014 12:17:03 +0530 Subject: [PATCH 13/18] [fix] currency moved to frappe --- erpnext/controllers/accounts_controller.py | 10 +++++++++- erpnext/stock/get_item_details.py | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 7fa81c99267..0d189c741d3 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -146,7 +146,6 @@ class AccountsController(TransactionBase): self.currency = company_currency self.conversion_rate = 1.0 else: - from erpnext.setup.doctype.currency.currency import validate_conversion_rate validate_conversion_rate(self.currency, self.conversion_rate, self.meta.get_label("conversion_rate"), self.company) @@ -500,3 +499,12 @@ def get_taxes_and_charges(master_doctype, master_name, tax_parentfield): taxes_and_charges.append(tax) return taxes_and_charges + +def validate_conversion_rate(currency, conversion_rate, conversion_rate_label, company): + """common validation for currency and price list currency""" + + company_currency = frappe.db.get_value("Company", company, "default_currency") + + if not conversion_rate: + throw(_("{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}.").format( + conversion_rate_label, currency, company_currency)) diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index fffb52e835f..19f97247adf 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -8,6 +8,7 @@ from frappe.utils import flt, cint, add_days import json from erpnext.accounts.doctype.pricing_rule.pricing_rule import get_pricing_rule_for_item from erpnext.setup.utils import get_exchange_rate +from frappe.model.meta import get_field_precision @frappe.whitelist() def get_item_details(args): @@ -206,8 +207,7 @@ def validate_price_list(args): throw(_("Price List not selected")) def validate_conversion_rate(args, meta): - from erpnext.setup.doctype.currency.currency import validate_conversion_rate - from frappe.model.meta import get_field_precision + from erpnext.controllers.accounts_controller import validate_conversion_rate # validate currency conversion rate validate_conversion_rate(args.currency, args.conversion_rate, From 3ef0b7ce995fe5efa30edcc4aee9ffaff086143e Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 29 Sep 2014 12:48:31 +0530 Subject: [PATCH 14/18] [fix] support ticket feed --- erpnext/support/doctype/support_ticket/support_ticket.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/support/doctype/support_ticket/support_ticket.py b/erpnext/support/doctype/support_ticket/support_ticket.py index 226df0f956c..4e245717615 100644 --- a/erpnext/support/doctype/support_ticket/support_ticket.py +++ b/erpnext/support/doctype/support_ticket/support_ticket.py @@ -10,7 +10,7 @@ from frappe.utils import now class SupportTicket(Document): def get_feed(self): - return "{0}: {1}".format(_(self.status, self.subject)) + return "{0}: {1}".format(_(self.status), self.subject) def get_portal_page(self): return "ticket" From e1509162e13fb961a97914a2ee432409c89bf02f Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 29 Sep 2014 12:53:53 +0530 Subject: [PATCH 15/18] [fix] material request feed --- erpnext/stock/doctype/material_request/material_request.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index eeda2ce6133..abb89bec679 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -21,6 +21,9 @@ class MaterialRequest(BuyingController): tname = 'Material Request Item' fname = 'indent_details' + def get_feed(self): + return _("{1}: {2}").format(self.status, self.material_request_type) + def check_if_already_pulled(self): pass#if self.[d.sales_order_no for d in self.get('indent_details')] From 39764685f0934d674b526807030a768653dd0e2b Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 29 Sep 2014 13:00:36 +0530 Subject: [PATCH 16/18] [fix] material request feed --- erpnext/stock/doctype/material_request/material_request.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index abb89bec679..05ad09b1949 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -22,7 +22,7 @@ class MaterialRequest(BuyingController): fname = 'indent_details' def get_feed(self): - return _("{1}: {2}").format(self.status, self.material_request_type) + return _("{0}: {1}").format(self.status, self.material_request_type) def check_if_already_pulled(self): pass#if self.[d.sales_order_no for d in self.get('indent_details')] From 20fa996dfa2ebbe79d8a5076426a787d8f55169a Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 29 Sep 2014 13:58:40 +0530 Subject: [PATCH 17/18] [fix] quotation status --- erpnext/controllers/status_updater.py | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index 20b5057af58..a194538013a 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -26,7 +26,6 @@ status_map = { ["Ordered", "has_sales_order"], ["Replied", "communication_sent"], ["Cancelled", "eval:self.docstatus==2"], - ["Open", "communication_received"], ], "Sales Order": [ ["Draft", None], From e1446eb516d01e5ef9c7a01f0edf20d369950469 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 29 Sep 2014 14:09:50 +0530 Subject: [PATCH 18/18] [fix] quotation status --- erpnext/controllers/status_updater.py | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index a194538013a..9825b047628 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -24,7 +24,6 @@ status_map = { ["Submitted", "eval:self.docstatus==1"], ["Lost", "eval:self.status=='Lost'"], ["Ordered", "has_sales_order"], - ["Replied", "communication_sent"], ["Cancelled", "eval:self.docstatus==2"], ], "Sales Order": [