diff --git a/frappe/__init__.py b/frappe/__init__.py index 88d5b29ce5..acd6f79992 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -13,7 +13,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template -__version__ = '8.0.2' +__version__ = '8.0.3' __title__ = "Frappe Framework" local = Local() diff --git a/frappe/config/desktop.py b/frappe/config/desktop.py index 1d535e08ab..8acdd446ab 100644 --- a/frappe/config/desktop.py +++ b/frappe/config/desktop.py @@ -4,7 +4,8 @@ from frappe import _ def get_data(): return [ { - "module_name": 'Communication', + "module_name": 'Core', + "type": 'list', "label": _('Email Inbox'), "_label": _('Email Inbox'), "_id": 'Email Inbox', diff --git a/frappe/core/page/background_jobs/background_jobs.py b/frappe/core/page/background_jobs/background_jobs.py index bd1abc73c0..368c6550e9 100644 --- a/frappe/core/page/background_jobs/background_jobs.py +++ b/frappe/core/page/background_jobs/background_jobs.py @@ -22,7 +22,7 @@ def get_info(show_failed=False): jobs = [] def add_job(j, name): - if j.kwargs.get('site')==frappe.local.site or True: + if j.kwargs.get('site')==frappe.local.site: jobs.append({ 'job_name': j.kwargs.get('kwargs', {}).get('playbook_method') \ or str(j.kwargs.get('job_name')), @@ -47,5 +47,4 @@ def get_info(show_failed=False): if q.name == 'failed': for j in q.get_jobs()[:10]: add_job(j, q.name) - - return jobs \ No newline at end of file + return jobs diff --git a/frappe/desk/doctype/desktop_icon/desktop_icon.py b/frappe/desk/doctype/desktop_icon/desktop_icon.py index 69673e945d..adbe45029b 100644 --- a/frappe/desk/doctype/desktop_icon/desktop_icon.py +++ b/frappe/desk/doctype/desktop_icon/desktop_icon.py @@ -94,7 +94,7 @@ def get_desktop_icons(user=None): def add_user_icon(_doctype, label=None, link=None, type='link', standard=0): '''Add a new user desktop icon to the desktop''' - if not label: label = frappe._(_doctype) + if not label: label = _doctype if not link: link = 'List/{0}'.format(_doctype) # find if a standard icon exists diff --git a/frappe/desk/reportview.py b/frappe/desk/reportview.py index 92ca203982..e2ab217c3d 100644 --- a/frappe/desk/reportview.py +++ b/frappe/desk/reportview.py @@ -36,7 +36,8 @@ def get_form_params(): data["save_user_settings"] = json.loads(data["save_user_settings"]) else: data["save_user_settings"] = True - + + doctype = data["doctype"] fields = data["fields"] for field in fields: diff --git a/frappe/model/document.py b/frappe/model/document.py index a7d7a3a327..e78bcedc27 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -804,7 +804,9 @@ class Document(BaseDocument): self.notify_update() try: - frappe.enqueue('frappe.utils.global_search.update_global_search', now=frappe.flags.in_test, doc=self) + frappe.enqueue('frappe.utils.global_search.update_global_search', + now=frappe.flags.in_test or frappe.flags.in_install or frappe.flags.in_migrate, + doc=self) except redis.exceptions.ConnectionError: update_global_search(self) diff --git a/frappe/model/naming.py b/frappe/model/naming.py index ce0ecb2a6b..f6a947cf4b 100644 --- a/frappe/model/naming.py +++ b/frappe/model/naming.py @@ -187,29 +187,19 @@ def _set_amended_name(doc): doc.name = am_prefix + '-' + str(am_id) return doc.name -def append_number_if_name_exists(doctype, name): +def append_number_if_name_exists(doctype, name, fieldname='name', separator='-'): if frappe.db.exists(doctype, name): - last = frappe.db.sql("""select name from `tab{}` - where name regexp '^{}-[[:digit:]]+' - order by length(name) desc, name desc limit 1""".format(doctype, name)) + last = frappe.db.sql("""select name from `tab{doctype}` + where {fieldname} regexp '^{name}{separator}[[:digit:]]+' + order by length({fieldname}) desc, + {fieldname} desc limit 1""".format(doctype=doctype, + name=name, fieldname=fieldname, separator=separator)) if last: count = str(cint(last[0][0].rsplit("-", 1)[1]) + 1) else: count = "1" - name = "{0}-{1}".format(name, count) - - return name - -def de_duplicate(doctype, name): - original_name = name - count = 0 - while True: - if frappe.db.exists(doctype, name): - count += 1 - name = "{0}-{1}".format(original_name, count) - else: - break + name = "{0}{1}{2}".format(name, separator, count) return name diff --git a/frappe/patches.txt b/frappe/patches.txt index f471e439f8..00f8005194 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -173,3 +173,4 @@ frappe.patches.v7_2.update_communications frappe.patches.v8_0.deprecate_integration_broker frappe.patches.v8_0.setup_email_inbox #2017-03-29 frappe.patches.v8_0.newsletter_childtable_migrate +execute:frappe.db.sql("delete from `tabDesktop Icon` where module_name='Communication'") \ No newline at end of file diff --git a/frappe/public/css/desk.css b/frappe/public/css/desk.css index 0c3eda3276..15009748f7 100644 --- a/frappe/public/css/desk.css +++ b/frappe/public/css/desk.css @@ -386,6 +386,9 @@ fieldset[disabled] .form-control { .datepicker--cell.-selected-.-focus- { background: rgba(94, 100, 255, 0.9); } +.datepicker--button { + color: #5E64FF; +} .hidden-xs-inline, .hidden-xs-inline-block { display: none; diff --git a/frappe/public/css/list.css b/frappe/public/css/list.css index 098657ded5..c8866da49c 100644 --- a/frappe/public/css/list.css +++ b/frappe/public/css/list.css @@ -153,15 +153,13 @@ .filterable { cursor: pointer; display: inline-block; - overflow: hidden; text-overflow: ellipsis; - width: 100%; -} -.col-sm-2 .filterable { - max-width: 90px; } -.col-sm-3 .filterable { +.col-sm-2:not(.list-row-right) .filterable, +.col-sm-3:not(.list-row-right) .filterable { max-width: 145px; + overflow: hidden; + width: 100%; } .doclist-row .label { margin-right: 8px; diff --git a/frappe/public/js/frappe/desk.js b/frappe/public/js/frappe/desk.js index 57e21a04c2..f4703d3787 100644 --- a/frappe/public/js/frappe/desk.js +++ b/frappe/public/js/frappe/desk.js @@ -452,7 +452,7 @@ frappe.get_desktop_icons = function(show_hidden, show_global) { out.push(module); } - var show_module = function(module) { + var show_module = function(m) { var out = true; if(m.type==="page") { out = m.link in frappe.boot.page_info; @@ -469,7 +469,7 @@ frappe.get_desktop_icons = function(show_hidden, show_global) { out = frappe.boot.user.allow_modules.indexOf(m.module_name) !== -1 } } - if(m.hidden&& !show_hidden) { + if(m.hidden && !show_hidden) { out = false; } if(m.blocked && !show_global) { diff --git a/frappe/public/js/frappe/form/control.js b/frappe/public/js/frappe/form/control.js index d9fcfda072..9144ba9931 100644 --- a/frappe/public/js/frappe/form/control.js +++ b/frappe/public/js/frappe/form/control.js @@ -610,38 +610,40 @@ frappe.ui.form.ControlCurrency = frappe.ui.form.ControlFloat.extend({ frappe.ui.form.ControlPercent = frappe.ui.form.ControlFloat; frappe.ui.form.ControlDate = frappe.ui.form.ControlData.extend({ - set_input: function(value) { - this._super(value); - if(value && this.last_value && this.last_value !== this.value) { - this.datepicker.selectDate(new Date(value)); - } - }, make_input: function() { this._super(); this.set_date_options(); this.set_datepicker(); this.set_t_for_today(); }, + set_input: function(value) { + this._super(value); + if(value + && ((this.last_value && this.last_value !== this.value) + || (!this.datepicker.selectedDates.length))) { + this.datepicker.selectDate(new Date(value)); + } + }, set_date_options: function() { var me = this; var lang = frappe.boot.user.language; if(!$.fn.datepicker.language[lang]) { lang = 'en' - } + } this.datepicker_options = { language: lang, autoClose: true, - todayButton: new Date() + todayButton: new Date(), + dateFormat: (frappe.boot.sysdefaults.date_format || 'yyyy-mm-dd'), + onSelect: function(dateStr) { + if(me.setting_date_flag) return; + me.set_value(me.get_value()); + me.$input.trigger('change'); + }, + onShow: function() { + $('.datepicker--button:visible').text(__('Today')); + }, }; - - var date_format = - (frappe.boot.sysdefaults.date_format || 'yyyy-mm-dd'); - this.datepicker_options.dateFormat = date_format; - - this.datepicker_options.onSelect = function(dateStr) { - me.set_value(me.get_value()); - me.$input.trigger('change'); - } }, set_datepicker: function() { this.$input.datepicker(this.datepicker_options); @@ -689,11 +691,23 @@ frappe.ui.form.ControlTime = frappe.ui.form.ControlData.extend({ onSelect: function(dateObj) { me.set_value(dateObj); }, + onShow: function() { + $('.datepicker--button:visible').text(__('Now')); + }, todayButton: new Date() }); this.datepicker = this.$input.data('datepicker'); this.refresh(); - } + }, + set_input: function(value) { + this._super(value); + if(value + && ((this.last_value && this.last_value !== this.value) + || (!this.datepicker.selectedDates.length))) { + + this.datepicker.selectDate(moment(value, 'hh:mm:ss')._d); + } + }, }); frappe.ui.form.ControlDatetime = frappe.ui.form.ControlDate.extend({ @@ -701,6 +715,9 @@ frappe.ui.form.ControlDatetime = frappe.ui.form.ControlDate.extend({ this._super(); this.datepicker_options.timepicker = true; this.datepicker_options.timeFormat = "hh:ii:ss"; + this.datepicker_options.onShow = function() { + $('.datepicker--button:visible').text(__('Now')); + }; }, parse: function(value) { if(value) { @@ -1683,6 +1700,7 @@ frappe.ui.form.ControlTextEditor = frappe.ui.form.ControlCode.extend({ this.set_input('