diff --git a/erpnext/config/hr.py b/erpnext/config/hr.py index 575de697ee..22f17e72cc 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 1e5acadb53..e4d17bb5ae 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 82fed9db4e..f3c0cecf62 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 97807a3510..7e243b25cb 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 0f3dc48aa3..9e237e1aed 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 1188be5ad1..20b5057af5 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 0230126218..65eee1ffde 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 2f085925ea..0000000000 --- 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 1f09c26333..ddbf97f683 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 d031bd0ebd..30aa47a61d 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 dd36eef394..c04e1d5246 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 d38f2c247f..73d8d607f2 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 0000000000..9e8538db25 --- /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 f7b30a765f..0000000000 --- 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 8314c55b8b..0000000000 --- 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 cda8fd6f20..0000000000 --- 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 e6fec9d61c..0000000000 --- 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 5d8bab84b7..0000000000 --- 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 8d7d48f4bc..0000000000 --- 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 e69de29bb2..0000000000 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 cda8fd6f20..0000000000 --- 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 c19f2e2e22..0000000000 --- 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 88dc411a7c..0000000000 --- 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 93f4ad55ec..dce101ea91 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 14c409ba80..bc4909055a 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 e69de29bb2..0000000000 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 dd45049d27..0000000000 --- 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 c7eb1b8de4..0000000000 --- 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 894d95651f..0000000000 --- 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 1212218b92..226df0f956 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 d3c93eb24c..9892924007 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)