Merge branch 'staging' into develop

This commit is contained in:
Frappe Bot 2018-11-16 08:40:16 +00:00
commit 19d28a1686
8 changed files with 177 additions and 141 deletions

View file

@ -17,7 +17,7 @@ from faker import Faker
from .exceptions import *
from .utils.jinja import (get_jenv, get_template, render_template, get_email_from_template, get_jloader)
__version__ = '10.1.61'
__version__ = '10.1.63'
__title__ = "Frappe Framework"
local = Local()

View file

@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 1,
@ -15,6 +16,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -42,11 +44,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -75,11 +78,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -107,11 +111,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -137,16 +142,17 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "report.report_type",
"fetch_from": "report.report_type",
"fieldname": "report_type",
"fieldtype": "Read Only",
"hidden": 0,
@ -170,11 +176,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -201,11 +208,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -233,11 +241,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -267,11 +276,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -300,14 +310,15 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"collapsible": 1,
"columns": 0,
"depends_on": "eval:doc.report_type !== 'Report Builder'",
"fieldname": "report_filters",
@ -332,11 +343,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -363,11 +375,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -394,11 +407,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -425,11 +439,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -456,11 +471,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -487,11 +503,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -521,11 +538,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -551,11 +569,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -572,7 +591,7 @@
"label": "Frequency",
"length": 0,
"no_copy": 0,
"options": "Daily\nWeekly\nMonthly",
"options": "Daily\nWeekdays\nWeekly\nMonthly",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@ -583,11 +602,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -615,11 +635,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 1,
@ -646,11 +667,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -677,7 +699,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
}
],
@ -691,7 +713,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-05-16 22:42:57.093530",
"modified": "2018-11-13 01:59:17.816718",
"modified_by": "Administrator",
"module": "Email",
"name": "Auto Email Report",
@ -744,5 +766,6 @@
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View file

@ -3,17 +3,22 @@
# For license information, please see license.txt
from __future__ import unicode_literals
import frappe, json
import calendar
import json
from datetime import timedelta
import frappe
from frappe import _
from frappe.model.document import Document
from datetime import timedelta
import frappe.utils
from frappe.utils import now, global_date_format, format_time
from frappe.utils.xlsxutils import make_xlsx
from frappe.utils import (format_time, get_link_to_form, get_url_to_report,
global_date_format, now, now_datetime, validate_email_add)
from frappe.utils.csvutils import to_csv
from frappe.utils.xlsxutils import make_xlsx
max_reports_per_user = frappe.local.conf.max_reports_per_user or 3
class AutoEmailReport(Document):
def autoname(self):
self.name = _(self.report)
@ -31,7 +36,7 @@ class AutoEmailReport(Document):
valid = []
for email in self.email_to.split():
if email:
frappe.utils.validate_email_add(email, True)
validate_email_add(email, True)
valid.append(email)
self.email_to = '\n'.join(valid)
@ -55,7 +60,7 @@ class AutoEmailReport(Document):
if self.report_type=='Report Builder' and self.data_modified_till:
self.filters = json.loads(self.filters) if self.filters else {}
self.filters['modified'] = ('>', frappe.utils.now_datetime() - timedelta(hours=self.data_modified_till))
self.filters['modified'] = ('>', now_datetime() - timedelta(hours=self.data_modified_till))
columns, data = report.get_data(limit=self.no_of_rows or 100, user = self.user,
filters = self.filters, as_dict=True)
@ -94,11 +99,9 @@ class AutoEmailReport(Document):
'date_time': date_time,
'columns': columns,
'data': data,
'report_url': frappe.utils.get_url_to_report(self.report,
self.report_type, report_doctype),
'report_url': get_url_to_report(self.report, self.report_type, report_doctype),
'report_name': self.report,
'edit_report_settings': frappe.utils.get_link_to_form('Auto Email Report',
self.name)
'edit_report_settings': get_link_to_form('Auto Email Report', self.name)
})
@staticmethod
@ -169,15 +172,20 @@ def send_now(name):
def send_daily():
'''Check reports to be sent daily'''
now = frappe.utils.now_datetime()
for report in frappe.get_all('Auto Email Report',
{'enabled': 1, 'frequency': ('in', ('Daily', 'Weekly'))}):
current_day = calendar.day_name[now_datetime().weekday()]
enabled_reports = frappe.get_all('Auto Email Report',
filters={'enabled': 1, 'frequency': ('in', ('Daily', 'Weekdays', 'Weekly'))})
for report in enabled_reports:
auto_email_report = frappe.get_doc('Auto Email Report', report.name)
# if not correct weekday, skip
if auto_email_report.frequency=='Weekly':
if now.weekday()!={'Monday':0,'Tuesday':1,'Wednesday':2,
'Thursday':3,'Friday':4,'Saturday':5,'Sunday':6}[auto_email_report.day_of_week]:
if auto_email_report.frequency == "Weekdays":
if current_day in ("Saturday", "Sunday"):
continue
elif auto_email_report.frequency == 'Weekly':
if auto_email_report.day_of_week != current_day:
continue
auto_email_report.send()

View file

@ -12,7 +12,7 @@ source_link = "https://github.com/frappe/frappe"
app_license = "MIT"
develop_version = '12.x.x-develop'
staging_version = '11.0.3-beta.27'
staging_version = '11.0.3-beta.28'
app_email = "info@frappe.io"

View file

@ -6,7 +6,11 @@ frappe.views.BaseList = class BaseList {
}
show() {
this.init().then(() => this.refresh());
frappe.run_serially([
() => this.init(),
() => this.before_refresh(),
() => this.refresh()
]);
}
init() {
@ -344,6 +348,11 @@ frappe.views.BaseList = class BaseList {
};
}
before_refresh() {
// modify args here just before making the request
// see list_view.js
}
refresh() {
this.freeze(true);
// fetch data from server

View file

@ -34,7 +34,7 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
return;
}
this.init().then(() => this.refresh());
super.show();
}
get view_name() {
@ -48,25 +48,6 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
setup_defaults() {
super.setup_defaults();
if (frappe.route_options) {
// Priority 1: route filters
this.filters = this.parse_filters_from_route_options();
} else if (this.view_user_settings.filters) {
// Priority 2: saved filters
const saved_filters = this.view_user_settings.filters;
this.filters = this.validate_filters(saved_filters);
} else {
// Priority 3: filters in listview_settings
const filters = (this.settings.filters || []).map(f => {
if (f.length === 3) {
f = [this.doctype, f[0], f[1], f[2]];
}
return f;
});
this.filters = filters;
}
// initialize with saved order by
this.sort_by = this.view_user_settings.sort_by || 'modified';
this.sort_order = this.view_user_settings.sort_order || 'desc';
@ -283,6 +264,32 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
});
}
before_refresh() {
if (frappe.route_options) {
// Priority 1: route filters
this.filters = this.parse_filters_from_route_options();
} else if (this.view_user_settings.filters) {
// Priority 2: saved filters
const saved_filters = this.view_user_settings.filters;
this.filters = this.validate_filters(saved_filters);
} else {
// Priority 3: filters in listview_settings
this.filters = (this.settings.filters || []).map(f => {
if (f.length === 3) {
f = [this.doctype, f[0], f[1], f[2]];
}
return f;
});
}
if (this.filters.length) {
return this.filter_area.clear(false)
.then(() => this.filter_area.set(this.filters));
}
return Promise.resolve();
}
toggle_result_area() {
super.toggle_result_area();
this.toggle_actions_menu_button(

View file

@ -496,29 +496,25 @@ _f.Frm.prototype.render_form = function(is_a_different_doc) {
// clear layout message
this.layout.show_message();
// header must be refreshed before client methods
// because add_custom_button
this.refresh_header(is_a_different_doc);
// call trigger
this.script_manager.trigger("refresh");
// trigger global trigger
// to use this
$(document).trigger('form-refresh', [this]);
// fields
this.refresh_fields();
// call onload post render for callbacks to be fired
if(this.cscript.is_onload) {
this.script_manager.trigger("onload_post_render");
}
// update dashboard after refresh
frappe.timeout(0.1).then(() => this.dashboard.after_refresh());
frappe.run_serially([
// header must be refreshed before client methods
// because add_custom_button
() => this.refresh_header(is_a_different_doc),
// call trigger
() => this.script_manager.trigger("refresh"),
// trigger global trigger
// to use this
() => $(document).trigger('form-refresh', [this]),
// fields
() => this.refresh_fields(),
// call onload post render for callbacks to be fired
() => {
if(this.cscript.is_onload) {
return this.script_manager.trigger("onload_post_render");
}
},
() => this.dashboard.after_refresh()
]);
// focus on first input
if(this.is_new()) {

View file

@ -1,60 +1,53 @@
boto3
chardet
dropbox==9.1.0
gunicorn
jinja2
markdown2==2.3.5
PyMySQL
maxminddb-geolite2
python-dateutil
pytz
six
werkzeug
semantic_version
boto3==1.9.45
chardet==3.0.4
cssmin==0.2.0
dropbox==7.3.1
gunicorn==19.9.0
httplib2==0.12.0
jinja2==2.10
markdown2==2.3.6
markupsafe==1.1.0
PyMySQL==0.9.2
python-geoip==1.2
python-geoip-geolite2==2015.303
python-dateutil==2.7.5
pytz==2018.7
six==1.11.0
termcolor==1.1.0
werkzeug==0.14.1
semantic_version==2.6.0
rauth>=0.6.2
requests
redis
selenium
babel
ipython
requests==2.20.1
redis==2.10.6
selenium==3.141.0
babel==2.6.0
ipython==5.8.0
html2text==2016.9.19
email_reply_parser
click
email_reply_parser==0.5.9
click==7.0
num2words==0.5.5
watchdog==0.8.0
bleach==2.1.4
bleach-whitelist
Pillow
beautifulsoup4
bleach-whitelist==0.0.9
Pillow==5.3.0
beautifulsoup4==4.6.3
rq==0.12.0
schedule
cryptography
pyopenssl
ndg-httpsclient
pyasn1
zxcvbn-python
unittest-xml-reporting
oauthlib
pdfkit
PyJWT
PyPDF2
openpyxl
pyotp
pyqrcode
pypng
premailer
croniter
googlemaps
braintree
future
passlib
google-api-python-client
google-auth
google-auth-httplib2
google-auth-oauthlib
faker
stripe
psycopg2-binary
coverage
schedule==0.5.0
cryptography==2.4.1
pyopenssl==18.0.0
ndg-httpsclient==0.5.1
pyasn1==0.4.4
zxcvbn-python==4.4.24
unittest-xml-reporting==2.2.0
oauthlib==2.1.0
PyJWT==1.6.4
PyPDF2==1.26.0
openpyxl==2.5.10
pyotp==2.2.7
pyqrcode==1.2.1
pypng==0.0.18
premailer==3.2.0
croniter==0.3.26
googlemaps==3.0.2
urllib3==1.23
GitPython==2.1.11