Modify move_file function

Hi Everyone,

I need some help, I have copied the move_file function and renamed it to movee_file.
Actually, my requirement is, I want to call this function via custom script on a button press and instead of passing file_list, I want to pass DocName so that every file attached to a particular document I can move them all by a single button press to a specified folder.

@frappe.whitelist()
def movee_file(file_list, new_parent, old_parent):
	if isinstance(file_list, basestring):
		file_list = json.loads(file_list)

	for file_obj in file_list:
		setup_folder_path(file_obj.get("name"), new_parent)

	# recalculate sizes
	frappe.get_doc("File", old_parent).save()
	frappe.get_doc("File", new_parent).save()

I appreciate if anyone can help me in this context.

Regards
Ruchin Sharma

hmm, that would be interesting,
right now i just check off the documents i want, select copy from menu
and then select paste from the menu to paste to the other folder,

Hi Everyone,
Now, I have moved one step further, now the error is coming File “FileName” not found

.JS Code


frappe.ui.form.on("Purchase Order","create_folder", function(frm, doctype, name) {
		        
				var data =  {
					"file_name": frm.doc.name,
					"fldr": "Home"
				};
				frappe.call({
                           method: "library_management.library_management.folder_script.createe_folder",
					//method: "frappe.core.doctype.file.file.create_new_folder",
					args: data,
                                        callback: function(r) { }
				})
			
		       var new_parents="Home/"+frm.doc.name;

                                           
				var data1 =  {
					"doc_name": frm.doc.name,
                                        "new_parent": new_parents,
					"old_parent": "Home/Attachments"
				};
				frappe.call({
                           method: "library_management.library_management.paste_files.movee_file",
					//method: "frappe.core.doctype.file.file.create_new_folder",
					args: data1,
                                        callback: function(r) { }
				})
			
		});

Python Code

@frappe.whitelist()
def movee_file(doc_name,new_parent,old_parent):
	file_list=frappe.db.sql("""SELECT file_name from tabFile where attached_to_name=%s""",doc_name):
		setup_folder_paths(file_list, new_parent)

	# recalculate sizes
	frappe.get_doc("File", old_parent).save()
	frappe.get_doc("File", new_parent).save()

Edit:
I tried this also, but same error.

file_list=frappe.db.sql("""SELECT name from tabFile where attached_to_name=%s""",doc_name):

Any help in this context will be appreciable

Regards
Ruchin Sharma

@ruchin78
mistake in sql
its not tabFile use `tabFile`

@Sangram
Thanks for your reply but before your reply I have done that also.
But, still the error is same.

Edit:
Here is my complete Python Code:

# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# MIT License. See license.txt


from __future__ import unicode_literals
import frappe
import logging
import string
import datetime
import re
import json
import os
import requests
import requests.exceptions
import StringIO
import mimetypes, imghdr
import urllib
import frappe, frappe.utils

from frappe.utils import getdate, flt,validate_email_add,cint
from frappe.model.naming import make_autoname
from frappe.model.document import Document
from frappe.model.mapper import get_mapped_doc
from frappe.utils.file_manager import delete_file_data_content, get_content_hash, get_random_filename
from frappe.utils import get_files_path
from frappe import _

from frappe.utils.nestedset import NestedSet
from frappe.utils import strip

_logger = logging.getLogger(frappe.__name__)

@frappe.whitelist()
def setup_folder_paths(filename, new_parent):
	file = frappe.get_doc("File", filename)
	file.folder = new_parent
	file.save()
	
	if file.is_folder:
		frappe.rename_doc("File", file.name, file.get_name_based_on_parent_folders(), ignore_permissions=True)

@frappe.whitelist()
def get_name_based_on_parent_folders(self):
		path = get_breadcrumbs(self.folder)
		folder_name = frappe.get_value("File", self.folder, "file_name")
		return "/".join([d.file_name for d in path] + [folder_name, self.file_name])

@frappe.whitelist()
def movee_file(doc_name,new_parent,old_parent):
	file_list=frappe.db.sql("""SELECT name from `tabFile` where attached_to_name=%s""",doc_name):
		setup_folder_paths(file_list.get("name"), new_parent)

	# recalculate sizes
	frappe.get_doc("File", old_parent).save()
	frappe.get_doc("File", new_parent).save()

Regards
Ruchin Sharma

@ruchin78
Better you send your full traceback

@Sangram

Please find below the console error:

Expected ‘none’, URL, or filter function but found ‘Alpha(’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:68:9
Unknown property ‘-moz-box-shadow’. Declaration dropped. desk.min.css:242:17
Unknown property ‘-moz-border-radius’. Declaration dropped. desk.min.css:290:20
Unknown property ‘-moz-box-shadow’. Declaration dropped. desk.min.css:293:17
Unknown property ‘-moz-border-radius’. Declaration dropped. desk.min.css:308:20
Unknown property ‘-moz-box-shadow’. Declaration dropped. desk.min.css:311:17
Expected ‘none’, URL, or filter function but found ‘Alpha(’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:322:131
Expected ‘none’, URL, or filter function but found ‘Alpha(’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:323:119
Expected ‘none’, URL, or filter function but found ‘Alpha(’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:324:37
Unknown property ‘-moz-border-radius-topleft’. Declaration dropped. desk.min.css:526:28
Unknown property ‘-moz-border-radius-topright’. Declaration dropped. desk.min.css:535:29
Unknown property ‘-moz-border-radius-bottomleft’. Declaration dropped. desk.min.css:544:31
Unknown property ‘-moz-border-radius-bottomright’. Declaration dropped. desk.min.css:553:32
Unknown property ‘-moz-box-shadow’. Declaration dropped. desk.min.css:602:17
Unknown property ‘zoom’. Declaration dropped. desk.min.css:689:52
Unknown property ‘zoom’. Declaration dropped. desk.min.css:691:107
Expected ‘none’, URL, or filter function but found ‘mask(’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:829:10
Error in parsing value for ‘font-size’. Declaration dropped. desk.min.css:878:12
Error in parsing value for ‘text-shadow’. Declaration dropped. desk.min.css:879:18
Unknown property ‘-moz-border-radius’. Declaration dropped. desk.min.css:882:20
Unknown property ‘-moz-border-radius’. Declaration dropped. desk.min.css:894:22
Unknown pseudo-class or pseudo-element ‘-webkit-inner-spin-button’. Ruleset ignored due to bad selector. desk.min.css:1056:22
Unknown pseudo-class or pseudo-element ‘-webkit-search-cancel-button’. Ruleset ignored due to bad selector. desk.min.css:1066:22
Unknown property ‘-moz-osx-font-smoothing’. Declaration dropped. desk.min.css:1185:25
Expected color but found ‘auto’. Expected color but found ‘-webkit-focus-ring-color’. Expected end of value but found ‘-webkit-focus-ring-color’. Error in parsing value for ‘outline’. Declaration dropped. desk.min.css:2004:15
Expected end of value but found '\9 '. Error in parsing value for ‘margin-top’. Declaration dropped. desk.min.css:3404:18
Expected color but found ‘auto’. Expected color but found ‘-webkit-focus-ring-color’. Expected end of value but found ‘-webkit-focus-ring-color’. Error in parsing value for ‘outline’. Declaration dropped. desk.min.css:3422:15
Unknown pseudo-class or pseudo-element ‘-ms-input-placeholder’. Ruleset ignored due to bad selector. desk.min.css:3466:14
Unknown pseudo-class or pseudo-element ‘-webkit-input-placeholder’. Ruleset ignored due to bad selector. desk.min.css:3469:15
Expected media feature name but found ‘-webkit-min-device-pixel-ratio’. desk.min.css:3485:19
Expected end of value but found '\9 '. Error in parsing value for ‘margin-top’. Declaration dropped. desk.min.css:3536:18
Unknown property ‘touch-action’. Declaration dropped. desk.min.css:3874:18
Unknown property ‘user-select’. Declaration dropped. desk.min.css:3879:21
Expected color but found ‘auto’. Expected color but found ‘-webkit-focus-ring-color’. Expected end of value but found ‘-webkit-focus-ring-color’. Error in parsing value for ‘outline’. Declaration dropped. desk.min.css:3891:15
Expected ‘none’, URL, or filter function but found ‘alpha(’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:3912:10
Expected ‘none’, URL, or filter function but found ‘progid’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:4372:10
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:5925:20
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:5926:25
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:5941:20
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:5942:25
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:5949:20
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:5950:25
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:5957:20
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:5958:25
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:5965:20
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:5966:25
Unknown property ‘zoom’. Declaration dropped. desk.min.css:5978:6
Expected ‘none’, URL, or filter function but found ‘alpha(’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:6574:10
Expected ‘none’, URL, or filter function but found ‘alpha(’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:6582:10
Expected ‘none’, URL, or filter function but found ‘alpha(’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:6651:10
Expected ‘none’, URL, or filter function but found ‘alpha(’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:6655:10
Expected ‘none’, URL, or filter function but found ‘alpha(’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:6723:10
Expected ‘none’, URL, or filter function but found ‘alpha(’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:6727:10
Expected media feature name but found ‘transform-3d’. desk.min.css:6959:16
Expected media feature name but found ‘-webkit-transform-3d’. desk.min.css:6959:32
Error in parsing value for ‘perspective’. Declaration dropped. desk.min.css:6968:25
Expected ‘none’, URL, or filter function but found ‘alpha(’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:7030:10
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:7034:20
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:7035:25
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:7036:20
Expected ‘none’, URL, or filter function but found ‘progid’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:7038:10
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:7044:20
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:7045:25
Error in parsing value for ‘background-image’. Declaration dropped. desk.min.css:7046:20
Expected ‘none’, URL, or filter function but found ‘progid’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:7048:10
Expected ‘none’, URL, or filter function but found ‘alpha(’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:7055:10
Expected end of value but found '\9 '. Error in parsing value for ‘background-color’. Declaration dropped. desk.min.css:7110:25
Unknown pseudo-class or pseudo-element ‘-webkit-input-placeholder’. Ruleset ignored due to bad selector. desk.min.css:7504:31
Unknown pseudo-class or pseudo-element ‘-ms-input-placeholder’. Ruleset ignored due to bad selector. desk.min.css:7510:30
Expected media feature name but found ‘-webkit-min-device-pixel-ratio’. desk.min.css:7560:19
Expected declaration but found ‘'. Skipped to next declaration. desk.min.css:7576:2
Unknown property ‘speak’. Declaration dropped. desk.min.css:7582:7
Unknown property ‘-moz-border-radius’. Declaration dropped. desk.min.css:7637:20
Unknown property ‘-moz-border-radius’. Declaration dropped. desk.min.css:7646:20
Unknown property ‘-moz-border-radius’. Declaration dropped. desk.min.css:7655:20
Unknown property ‘-moz-border-radius’. Declaration dropped. desk.min.css:7664:20
Unknown property ‘-moz-border-radius’. Declaration dropped. desk.min.css:7673:20
Expected declaration but found '
’. Skipped to next declaration. desk.min.css:7803:2
Expected declaration but found ‘'. Skipped to next declaration. desk.min.css:7807:2
Expected ‘none’, URL, or filter function but found ‘progid’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:7870:10
Expected ‘none’, URL, or filter function but found ‘progid’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:7878:10
Expected ‘none’, URL, or filter function but found ‘progid’. Error in parsing value for ‘filter’. Declaration dropped. desk.min.css:7886:10
Unknown property ‘-moz-osx-font-smoothing’. Declaration dropped. desk.min.css:9039:25
Unknown property ‘user-select’. Declaration dropped. desk.min.css:9043:13
Unknown property ‘-moz-box-shadow’. Declaration dropped. desk.min.css:9581:17
Expected ‘none’, URL, or filter function but found ‘alpha(’. Error in parsing value for ‘Filter’. Declaration dropped. desk.min.css:10016:10
Expected declaration but found '
’. Skipped to next declaration. desk.min.css:10069:2
Unknown property ‘speak’. Declaration dropped. desk.min.css:10071:7
Unknown property ‘whitespace’. Declaration dropped. desk.min.css:10132:12
Unknown property ‘appearance’. Declaration dropped. desk.min.css:11006:12
Error in parsing value for ‘border-radius’. Declaration dropped. desk.min.css:11063:19
Unknown property ‘whitespace’. Declaration dropped. desk.min.css:11135:12
Expected declaration but found ‘*’. Skipped to next declaration. desk.min.css:11368:4
Unknown property ‘speak’. Declaration dropped. desk.min.css:11370:9
Error in parsing value for ‘border-radius’. Declaration dropped. list.min.css:324:17
Expected ‘none’, URL, or filter function but found ‘alpha(’. Error in parsing value for ‘filter’. Declaration dropped. report.min.css:221:10
Expected ‘none’, URL, or filter function but found ‘alpha(’. Error in parsing value for ‘filter’. Declaration dropped. report.min.css:230:10
Expected ‘none’, URL, or filter function but found ‘alpha(’. Error in parsing value for ‘filter’. Declaration dropped. report.min.css:341:10
Expected media feature name but found ‘-webkit-min-device-pixel-ratio’. desk:101:8
Unknown property ‘font-color’. Declaration dropped. desk:110:11

Hi Everyone,
I am done with this, here is the code which will help everyone.

paste_file.py

# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# MIT License. See license.txt


from __future__ import unicode_literals
import frappe
import logging
import string
import datetime
import re
import json
import os
import requests
import requests.exceptions
import StringIO
import mimetypes, imghdr
import urllib
import frappe, frappe.utils

from frappe import msgprint, _
from frappe.utils import getdate, flt,validate_email_add,cint
from frappe.model.naming import make_autoname
from frappe.model.document import Document
from frappe.model.mapper import get_mapped_doc
from frappe.utils.file_manager import delete_file_data_content, get_content_hash, get_random_filename
from frappe.utils import get_files_path
from frappe import _

from frappe.utils.nestedset import NestedSet
from frappe.utils import strip

_logger = logging.getLogger(frappe.__name__)

@frappe.whitelist()
def setup_folder_paths(filename, new_parent):
	file = frappe.get_doc("File", filename)
	file.folder = new_parent
	file.save()
	
	if file.is_folder:
		frappe.rename_doc("File", file.name, file.get_name_based_on_parent_folders(), ignore_permissions=True)

@frappe.whitelist()
def get_name_based_on_parent_folders(self):
		path = get_breadcrumbs(self.folder)
		folder_name = frappe.get_value("File", self.folder, "file_name")
		return "/".join([d.file_name for d in path] + [folder_name, self.file_name])

@frappe.whitelist()
def movee_file(doc_name,new_parent,old_parent):
	file_list=frappe.db.sql("""SELECT name from `tabFile` where attached_to_name=%s""",doc_name)
	for f in file_list:
		setup_folder_paths(file_list.name, new_parent)
		frappe.msgprint(f[0]);
	# recalculate sizes
	frappe.get_doc("File", old_parent).save()
	frappe.get_doc("File", new_parent).save()

@frappe.whitelist 
def get_bom_detail(item_code):
	return frappe.db.sql("""select bom_no,parent from `tabBOM Item` where item_code=%s""", item_code, as_dict=1)

@frappe.whitelist()
def createe_folder(file_name, folder):
	""" create new folder under current parent folder """
	file = frappe.new_doc("File")
	file.file_name = file_name
	file.is_folder = 1
	file.folder = folder
	file.insert()		

Code written on a customer button of Purchase Order, name of button is create_folder:

frappe.ui.form.on("Purchase Order","create_folder", function(frm, doctype, name) {
		      var home_folder="Home";
				var data =  {
					"file_name": frm.doc.name,
                                        "folder": home_folder
				};
			frappe.call({
                              //method: "library_management.folder_scriptss.createe_folder",
                              method: "frappe.core.doctype.file.file.create_new_folder",
					args: data,
                                        callback: function(r) { }
				})
setTimeout(function(){
		       var new_parents="Home/"+frm.doc.name;

                                           
				var data1 =  {
					"doc_name": frm.doc.name,
                                        "new_parent": new_parents,
					"old_parent": "Home/Attachments"
				};
				frappe.call({
                           method: "library_management.library_management.paste_file.movee_file",
				args: data1,
                                        callback: function(r) { }
				})
}, 2000);
			
		});

I hope, it will help people.

@rmehta thanks for the inspiring me.

Regards
Ruchin Sharma

3 Likes