diff --git a/public/js/wn/router.js b/public/js/wn/router.js index 46648e4779..b28e7729ab 100644 --- a/public/js/wn/router.js +++ b/public/js/wn/router.js @@ -74,6 +74,7 @@ wn.get_route_str = function(route) { wn.set_route = function() { route = $.map(arguments, function(a) { return a ? encodeURIComponent(a) : null; }).join('/'); + window.location.hash = route; // Set favicon (app.js) diff --git a/public/js/wn/views/grid_report.js b/public/js/wn/views/grid_report.js index 034353eff3..195d5825c4 100644 --- a/public/js/wn/views/grid_report.js +++ b/public/js/wn/views/grid_report.js @@ -68,6 +68,9 @@ $.extend(wn.report_dump, { if(replace_dict[d.name]) { data.push(replace_dict[d.name]); delete replace_dict[d.name]; + } else if(doctype_data.modified_names.indexOf(d.name)!==-1) { + // if modified but not in replace_dict, then assume it as cancelled + // don't push in data } else { data.push(d); } @@ -155,13 +158,13 @@ wn.views.GridReport = Class.extend({ // refresh this.filter_inputs.refresh && this.filter_inputs.refresh.click(function() { - me.set_route(); + me.get_data(); }); // reset filters this.filter_inputs.reset_filters && this.filter_inputs.reset_filters.click(function() { me.init_filter_values(); - me.set_route(); + me.set_route(); }); // range @@ -387,7 +390,8 @@ wn.views.GridReport = Class.extend({ $(this.wrapper).trigger('apply_filters_from_route'); }, set_route: function() { - wn.set_route(wn.container.page.page_name, $.map(this.filter_inputs, function(v) { + var page_name = wn.container.page.page_name; + var filters_route = $.map(this.filter_inputs, function(v) { var opts = v.get(0).opts; if(opts.fieldtype === "Check") { var val = v.attr("checked") ? 1 : 0; @@ -397,7 +401,9 @@ wn.views.GridReport = Class.extend({ if(val && val != opts.default_value) return encodeURIComponent(opts.fieldname) + '=' + encodeURIComponent(val); - }).join('&&')); + }).join('&&'); + + wn.set_route(page_name, filters_route); }, options: { editable: false, @@ -634,7 +640,7 @@ wn.views.GridReport = Class.extend({ var me = this; $.each(filters, function(i, f) { me.filter_inputs[f] && me.filter_inputs[f].change(function() { - me.filter_inputs.refresh.click() + me.set_route(); }); }); } diff --git a/webnotes/utils/backups.py b/webnotes/utils/backups.py index 2157f4aec1..09021e78b9 100644 --- a/webnotes/utils/backups.py +++ b/webnotes/utils/backups.py @@ -100,33 +100,18 @@ class BackupGenerator: for item in self.__dict__.copy().items()) cmd_string = """mysqldump -u %(user)s -p%(password)s %(db_name)s | gzip -c > %(backup_path_db)s""" % args err, out = webnotes.utils.execute_in_shell(cmd_string) - - def get_recipients(self): - """ - Get recepient's email address - """ - #import webnotes.db - #webnotes.conn = webnotes.db.Database(use_default=1) - recipient_list = webnotes.conn.sql(\ - """SELECT parent FROM tabUserRole - WHERE role='System Manager' - AND parent!='Administrator' - AND parent IN - (SELECT email FROM tabProfile WHERE enabled=1)""") - return [i[0] for i in recipient_list] - def send_email(self): """ Sends the link to backup file located at erpnext/backups """ - from webnotes.utils.email_lib import sendmail + from webnotes.utils.email_lib import sendmail, get_system_managers backup_url = webnotes.conn.get_value('Website Settings', 'Website Settings', 'subdomain') or '' backup_url = os.path.join('http://' + backup_url, 'backups') - recipient_list = self.get_recipients() + recipient_list = get_system_managers() msg = """

Hello,

Your backups are ready to be downloaded.

diff --git a/webnotes/utils/email_lib/__init__.py b/webnotes/utils/email_lib/__init__.py index 40a005e579..063cbd8e03 100644 --- a/webnotes/utils/email_lib/__init__.py +++ b/webnotes/utils/email_lib/__init__.py @@ -51,3 +51,10 @@ def get_contact_list(): ) ) webnotes.response['cl'] = filter(None, [c[0] for c in cl]) + +def get_system_managers(): + return webnotes.conn.sql_list("""select parent FROM tabUserRole + WHERE role='System Manager' + AND parent!='Administrator' + AND parent IN + (SELECT email FROM tabProfile WHERE enabled=1)""") \ No newline at end of file diff --git a/webnotes/utils/remote_file_backup.py b/webnotes/utils/remote_file_backup.py deleted file mode 100644 index 7753294285..0000000000 --- a/webnotes/utils/remote_file_backup.py +++ /dev/null @@ -1,71 +0,0 @@ -# Copyright (c) 2012 Web Notes Technologies Pvt Ltd (http://erpnext.com) -# -# MIT License (MIT) -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# the rights to use, copy, modify, merge, publish, distribute, sublicense, -# and/or sell copies of the Software, and to permit persons to whom the -# Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -from __future__ import unicode_literals -import os -import webnotes - -def upload_to_dropbox(): - from dropbox import client, rest, session - from conf import dropbox_access_key, dropbox_secret_key - - from webnotes.utils.backups import new_backup - print "Taking backup..." - webnotes.connect() - backup = new_backup() - filename = backup.backup_path_db - print os.path.basename(filename) - - print "Starting session..." - sess = session.DropboxSession(dropbox_access_key, dropbox_secret_key, "app_folder") - - sess.set_token('rl8hpbk775mb77b','snmegusva4jt9t2') - client = client.DropboxClient(sess) - size = os.stat(filename).st_size - f = open(filename,'r') - - # create folder - print "Creating folder..." - try: - client.file_create_folder("erpnext") - except rest.ErrorResponse, e: - if e.status!=403: - raise e - - - if size > 4194304: - print "Uploading (chunked)..." - uploader = client.get_chunked_uploader(f, size) - while uploader.offset < size: - try: - uploader.upload_chunked() - except rest.ErrorResponse, e: - pass - else: - print "Uploading..." - response = client.put_file('erpnext/' + os.path.basename(filename), f, overwrite=True) - - -if __name__=="__main__": - upload_to_dropbox() - - \ No newline at end of file diff --git a/webnotes/widgets/report_dump.py b/webnotes/widgets/report_dump.py index a0f6394c43..99e20f241f 100644 --- a/webnotes/widgets/report_dump.py +++ b/webnotes/widgets/report_dump.py @@ -37,27 +37,30 @@ def get_data(doctypes, last_modified): for d in doctypes: args = data_map[d] dt = d.find("[") != -1 and d[:d.find("[")] or d + out[dt] = {} if args.get("from"): modified_table = "item." else: modified_table = "" + + conditions = order_by = "" + table = args.get("from") or ("`tab%s`" % dt) if d in last_modified: if not args.get("conditions"): args['conditions'] = [] args['conditions'].append(modified_table + "modified > '" + last_modified[d] + "'") + out[dt]["modified_names"] = webnotes.conn.sql_list("""select name from %s + where modified > %s""" % (table, "%s"), last_modified[d]) - conditions = order_by = "" if args.get("force_index"): conditions = " force index (%s) " % args["force_index"] if args.get("conditions"): conditions += " where " + " and ".join(args["conditions"]) if args.get("order_by"): order_by = " order by " + args["order_by"] - table = args.get("from") or ("`tab%s`" % dt) - out[dt] = {} out[dt]["data"] = [list(t) for t in webnotes.conn.sql("""select %s from %s %s %s""" \ % (",".join(args["columns"]), table, conditions, order_by))] diff --git a/wnf.py b/wnf.py index 71e6691800..ce204505e7 100755 --- a/wnf.py +++ b/wnf.py @@ -399,8 +399,7 @@ def run(): sync_all(options.force or 0) elif options.sync is not None: - import webnotes.model.sync - webnotes.model.sync.sync(options.sync[0], options.sync[1], options.force or 0) + webnotes.reload_doc(options.sync[0], "doctype", options.sync[1]) elif options.update: update_erpnext(options.update[0], options.update[1])