Merge branch 'live' into stable
This commit is contained in:
commit
59d1dc0c3b
9 changed files with 128 additions and 37 deletions
|
|
@ -80,7 +80,7 @@ class DocType:
|
|||
|
||||
self.change_modified_of_parent()
|
||||
|
||||
import webnotes.defs
|
||||
from webnotes import defs
|
||||
from webnotes.utils.transfer import in_transfer
|
||||
|
||||
if (not in_transfer) and getattr(webnotes.defs,'developer_mode', 0):
|
||||
|
|
|
|||
|
|
@ -76,7 +76,18 @@
|
|||
'fieldname': 'test_link',
|
||||
'fieldtype': 'Link',
|
||||
'idx': 2,
|
||||
'label': 'Test Link'
|
||||
'label': 'Test Link',
|
||||
'options': 'Profile'
|
||||
},
|
||||
|
||||
# DocField
|
||||
{
|
||||
'doctype': 'DocField',
|
||||
'fieldname': 'test_select',
|
||||
'fieldtype': 'Select',
|
||||
'idx': 2,
|
||||
'label': 'Test Select',
|
||||
'options': 'A\nB\nC'
|
||||
},
|
||||
|
||||
# DocField
|
||||
|
|
|
|||
|
|
@ -57,6 +57,8 @@ cookies = {}
|
|||
auto_masters = {}
|
||||
tenant_id = None
|
||||
|
||||
from webnotes.utils import cstr
|
||||
|
||||
#
|
||||
# Custom Class (no traceback)
|
||||
#
|
||||
|
|
@ -90,13 +92,13 @@ def errprint(msg):
|
|||
"""
|
||||
Append to the :data:`debug log`
|
||||
"""
|
||||
debug_log.append(str(msg or ''))
|
||||
debug_log.append(cstr(msg or ''))
|
||||
|
||||
def msgprint(msg, small=0, raise_exception=0):
|
||||
"""
|
||||
Append to the :data:`message_log`
|
||||
"""
|
||||
message_log.append((small and '__small:' or '')+str(msg or ''))
|
||||
message_log.append((small and '__small:' or '')+cstr(msg or ''))
|
||||
if raise_exception:
|
||||
raise ValidationError
|
||||
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ class DocList:
|
|||
"""
|
||||
from webnotes.model.meta import is_single
|
||||
|
||||
if (not is_single(self.doc.doctype)) and (not self.doc.fields.get('__islocal')):
|
||||
if (not is_single(self.doc.doctype)) and (not cint(self.doc.fields.get('__islocal'))):
|
||||
tmp = webnotes.conn.sql("""
|
||||
SELECT modified FROM `tab%s` WHERE name="%s" for update"""
|
||||
% (self.doc.doctype, self.doc.name))
|
||||
|
|
@ -130,7 +130,7 @@ class DocList:
|
|||
webnotes.msgprint("""[Link Validation] Could not find the following values: %s.
|
||||
Please correct and resave. Document Not Saved.""" % ', '.join(err_list), raise_exception=1)
|
||||
|
||||
def update_timestamps(self):
|
||||
def update_timestamps_and_docstatus(self):
|
||||
"""
|
||||
Update owner, creation, modified_by, modified, docstatus
|
||||
"""
|
||||
|
|
@ -156,7 +156,7 @@ class DocList:
|
|||
self.check_permission()
|
||||
if check_links:
|
||||
self.check_links()
|
||||
self.update_timestamps()
|
||||
self.update_timestamps_and_docstatus()
|
||||
|
||||
def run_method(self, method):
|
||||
"""
|
||||
|
|
@ -239,7 +239,10 @@ class DocList:
|
|||
"""
|
||||
Update after submit - some values changed after submit
|
||||
"""
|
||||
if self.doc.docstatus != 1:
|
||||
msgprint("Only to called after submit", raise_exception=1)
|
||||
self.to_docstatus = 1
|
||||
self.prepare_for_save(1)
|
||||
self.save_main()
|
||||
self.save_children()
|
||||
self.run_method('on_update_after_submit')
|
||||
|
|
|
|||
|
|
@ -295,7 +295,10 @@ def cstr(s):
|
|||
s = s.encode('utf-8', 'ignore')
|
||||
except:
|
||||
pass
|
||||
return str(s)
|
||||
try:
|
||||
return unicode(s)
|
||||
except UnicodeDecodeError:
|
||||
return unicode(s, 'utf-8')
|
||||
|
||||
def str_esc_quote(s):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -7,20 +7,86 @@ def upload():
|
|||
dn = form.getvalue('docname')
|
||||
at_id = form.getvalue('at_id')
|
||||
|
||||
webnotes.response['type'] = 'iframe'
|
||||
if not webnotes.form['filedata'].filename:
|
||||
webnotes.response['result'] = """
|
||||
<script type='text/javascript'>
|
||||
window.parent.frms['%s'].attachments.dialog.hide();
|
||||
window.parent.msgprint("Please select a file!");
|
||||
</script>""" % dt
|
||||
return
|
||||
|
||||
# save
|
||||
fid, fname = save_uploaded()
|
||||
|
||||
if fid:
|
||||
# save it in the form
|
||||
updated = add_file_list(dt, dn, fname, fid)
|
||||
|
||||
if fid and updated:
|
||||
# refesh the form!
|
||||
# with the new modified timestamp
|
||||
webnotes.response['result'] = """
|
||||
<script type='text/javascript'>
|
||||
window.parent.wn.widgets.form.file_upload_done('%s', '%s', '%s', '%s', '%s');
|
||||
window.parent.frms['%s'].show_doc('%s');
|
||||
window.parent.wn.widgets.form.file_upload_done('%(dt)s', '%(dn)s', '%(fid)s', '%(fname)s', '%(at_id)s', '%(mod)s');
|
||||
window.parent.frms['%(dt)s'].show_doc('%(dn)s');
|
||||
</script>
|
||||
""" % (dt, dn, fid, fname.replace("'", "\\'"), at_id, dt, dn)
|
||||
""" % {
|
||||
'dt': dt,
|
||||
'dn': dn,
|
||||
'fid': fid,
|
||||
'fname': fname.replace("'", "\\'"),
|
||||
'at_id': at_id,
|
||||
'mod': webnotes.conn.get_value(dt, dn, 'modified')
|
||||
}
|
||||
|
||||
# -------------------------------------------------------
|
||||
|
||||
def add_file_list(dt, dn, fname, fid):
|
||||
"""
|
||||
udpate file_list attribute of the record
|
||||
"""
|
||||
import webnotes
|
||||
try:
|
||||
# get the old file_list
|
||||
fl = webnotes.conn.get_value(dt, dn, 'file_list') or ''
|
||||
if fl:
|
||||
fl += '\n'
|
||||
|
||||
# add new file id
|
||||
fl += fname + ',' + fid
|
||||
|
||||
# save
|
||||
webnotes.conn.set_value(dt, dn, 'file_list', fl)
|
||||
|
||||
return True
|
||||
|
||||
except Exception, e:
|
||||
webnotes.response['result'] = """
|
||||
<script type='text/javascript'>
|
||||
window.parent.msgprint("Error while uploading: %s");
|
||||
</script>""" % str(e)
|
||||
|
||||
|
||||
def remove_file_list(dt, dn, fid):
|
||||
"""
|
||||
Remove fid from the give file_list
|
||||
"""
|
||||
import webnotes
|
||||
|
||||
# get the old file_list
|
||||
fl = webnotes.conn.get_value(dt, dn, 'file_list') or ''
|
||||
new_fl = []
|
||||
fl = fl.split('\n')
|
||||
for f in fl:
|
||||
if f.split(',')[1]!=fid:
|
||||
new_fl.append(f)
|
||||
|
||||
# update the file_list
|
||||
webnotes.conn.set_value(dt, dn, 'file_list', '\n'.join(new_fl))
|
||||
|
||||
# return the new timestamp
|
||||
return webnotes.conn.get_value(dt, dn, 'modified')
|
||||
|
||||
def make_thumbnail(blob, size):
|
||||
from PIL import Image
|
||||
import cStringIO
|
||||
|
|
|
|||
|
|
@ -197,6 +197,7 @@ def runserverobj():
|
|||
doclist = DocList()
|
||||
doclist.from_compressed(form.getvalue('docs'), dn)
|
||||
so = doclist.make_obj()
|
||||
doclist.check_if_latest()
|
||||
|
||||
check_guest_access(so.doc)
|
||||
|
||||
|
|
@ -288,6 +289,9 @@ def remove_attach():
|
|||
|
||||
fid = webnotes.form.getvalue('fid')
|
||||
webnotes.utils.file_manager.delete_file(fid, verbose=1)
|
||||
|
||||
# remove from dt dn
|
||||
return str(webnotes.utils.file_manager.remove_file_list(webnotes.form.getvalue('dt'), webnotes.form.getvalue('dn'), fid))
|
||||
|
||||
# Get Fields - Counterpart to $c_get_fields
|
||||
#===========================================================================================
|
||||
|
|
|
|||
|
|
@ -474,7 +474,9 @@ for(var i=0;i<cl.length;i++){this.render_one_comment(cl[i]);}}else{this.msg.inne
|
|||
this.render_one_comment=function(det){$a(this.wrapper,'div','social sidebar-comment-text','',det.comment);$a(this.wrapper,'div','sidebar-comment-info','',comment_when(det.creation)+' by '+det.comment_by_fullname);}
|
||||
this.add_comment=function(){if(!this.input.value)return;this.btn.set_working();wn.widgets.form.comments.add(this.input,me.doctype,me.docname,function(){me.btn.done_working();me.make_body();});}
|
||||
this.refresh();}
|
||||
wn.widgets.form.sidebar.Attachments=function(parent,sidebar,doctype,docname){var me=this;this.frm=sidebar.form;this.make=function(){if(this.wrapper)this.wrapper.innerHTML='';else this.wrapper=$a(parent,'div','sidebar-comment-wrapper');this.attach_wrapper=$a(this.wrapper,'div');var n=this.frm.doc.file_list?this.frm.doc.file_list.split('\n').length:0;if(n<this.frm.meta.max_attachments||!this.frm.meta.max_attachments){this.btn=$btn($a(this.wrapper,'div','sidebar-comment-message'),'Add',function(){me.add_attachment()});}
|
||||
wn.widgets.form.sidebar.Attachments=function(parent,sidebar,doctype,docname){var me=this;this.frm=sidebar.form;this.make=function(){if(this.wrapper)this.wrapper.innerHTML='';else this.wrapper=$a(parent,'div','sidebar-comment-wrapper');this.attach_wrapper=$a(this.wrapper,'div');if(this.frm.doc.__islocal){this.attach_wrapper.innerHTML='Attachments can be uploaded after saving'
|
||||
return;}
|
||||
var n=this.frm.doc.file_list?this.frm.doc.file_list.split('\n').length:0;if(n<this.frm.meta.max_attachments||!this.frm.meta.max_attachments){this.btn=$btn($a(this.wrapper,'div','sidebar-comment-message'),'Add',function(){me.add_attachment()});}
|
||||
this.render();}
|
||||
this.render=function(){this.attach_wrapper.innerHTML=''
|
||||
var doc=locals[me.frm.doctype][me.frm.docname];var fl=doc.file_list?doc.file_list.split('\n'):[];for(var i=0;i<fl.length;i++){new wn.widgets.form.sidebar.Attachment(this.attach_wrapper,fl[i],me.frm)}}
|
||||
|
|
@ -486,12 +488,11 @@ this.make();}
|
|||
wn.widgets.form.sidebar.Attachment=function(parent,filedet,frm){filedet=filedet.split(',')
|
||||
this.filename=filedet[0];this.fileid=filedet[1];this.frm=frm;var me=this;this.wrapper=$a(parent,'div','sidebar-comment-message');this.remove_fileid=function(){var doc=locals[me.frm.doctype][me.frm.docname];var fl=doc.file_list.split('\n');new_fl=[];for(var i=0;i<fl.length;i++){if(fl[i].split(',')[1]!=me.fileid)new_fl.push(fl[i]);}
|
||||
doc.file_list=new_fl.join('\n');}
|
||||
this.ln=$a(this.wrapper,'a','link_type',{fontSize:'11px'},this.filename);this.ln.href=outUrl+'?cmd=get_file&fname='+this.fileid;this.ln.target='_blank';this.del=$a(this.wrapper,'span','link_type',{marginLeft:'3px'},'[x]');this.del.onclick=function(){var yn=confirm("The document will be saved after the attachment is deleted for the changes to be permanent. Proceed?")
|
||||
if(yn){var callback=function(r,rt){$dh(me.wrapper);me.remove_fileid();var ret=me.frm.save('Save');if(ret=='Error')
|
||||
msgprint("error:The document was not saved. To make the removal permanent, you must save the document before closing.");}
|
||||
$c('webnotes.widgets.form.remove_attach',args={'fid':me.fileid},callback);}}}
|
||||
wn.widgets.form.file_upload_done=function(doctype,docname,fileid,filename,at_id){var at_id=cint(at_id);var doc=locals[doctype][docname];if(doc.file_list){var fl=doc.file_list.split('\n')
|
||||
this.ln=$a(this.wrapper,'a','link_type',{fontSize:'11px'},this.filename);this.ln.href=outUrl+'?cmd=get_file&fname='+this.fileid;this.ln.target='_blank';this.del=$a(this.wrapper,'span','link_type',{marginLeft:'3px'},'[x]');this.del.onclick=function(){var yn=confirm("Are you sure you want to delete the attachment?")
|
||||
if(yn){var callback=function(r,rt){locals[me.frm.doctype][me.frm.docname].modified=r.message;$dh(me.wrapper);me.remove_fileid();frm.refresh();}
|
||||
$c('webnotes.widgets.form.remove_attach',args={'fid':me.fileid,dt:me.frm.doctype,dn:me.frm.docname},callback);}}}
|
||||
wn.widgets.form.file_upload_done=function(doctype,docname,fileid,filename,at_id,new_timestamp){var at_id=cint(at_id);var doc=locals[doctype][docname];if(doc.file_list){var fl=doc.file_list.split('\n')
|
||||
fl.push(filename+','+fileid)
|
||||
doc.file_list=fl.join('\n');}
|
||||
else
|
||||
doc.file_list=filename+','+fileid;var frm=frms[doctype];frm.attachments.dialog.hide();frm.attachments.render();var do_save=confirm('File Uploaded Sucessfully. You must save this document for the uploaded file to be registred. Save this document now?');if(do_save){var ret=frm.save('Save');if(ret=='Error')msgprint("error:The document was not saved. To make the attachment permanent, you must save the document before closing.");}else{msgprint("error:The document was not saved. To make the attachment permanent, you must save the document before closing.");}}
|
||||
doc.file_list=filename+','+fileid;doc.modified=new_timestamp;var frm=frms[doctype];frm.attachments.dialog.hide();msgprint('File Uploaded Sucessfully.');frm.refresh();}
|
||||
|
|
@ -9,6 +9,12 @@ wn.widgets.form.sidebar.Attachments = function(parent, sidebar, doctype, docname
|
|||
// attachment
|
||||
this.attach_wrapper = $a(this.wrapper, 'div');
|
||||
|
||||
// no attachments if file is unsaved
|
||||
if(this.frm.doc.__islocal) {
|
||||
this.attach_wrapper.innerHTML = 'Attachments can be uploaded after saving'
|
||||
return;
|
||||
}
|
||||
|
||||
// no of attachments
|
||||
var n = this.frm.doc.file_list ? this.frm.doc.file_list.split('\n').length : 0;
|
||||
|
||||
|
|
@ -90,25 +96,24 @@ wn.widgets.form.sidebar.Attachment = function(parent, filedet, frm) {
|
|||
// remove
|
||||
this.del = $a(this.wrapper, 'span', 'link_type', {marginLeft:'3px'}, '[x]');
|
||||
this.del.onclick = function() {
|
||||
var yn = confirm("The document will be saved after the attachment is deleted for the changes to be permanent. Proceed?")
|
||||
var yn = confirm("Are you sure you want to delete the attachment?")
|
||||
if(yn) {
|
||||
var callback = function(r, rt) {
|
||||
// update timestamp
|
||||
locals[me.frm.doctype][me.frm.docname].modified = r.message;
|
||||
$dh(me.wrapper);
|
||||
me.remove_fileid();
|
||||
var ret=me.frm.save('Save');
|
||||
if(ret=='Error')
|
||||
msgprint("error:The document was not saved. To make the removal permanent, you must save the document before closing.");
|
||||
}
|
||||
|
||||
$c('webnotes.widgets.form.remove_attach', args = {'fid': me.fileid }, callback );
|
||||
|
||||
frm.refresh();
|
||||
}
|
||||
$c('webnotes.widgets.form.remove_attach',
|
||||
args = {'fid': me.fileid, dt: me.frm.doctype, dn: me.frm.docname }, callback );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// this function will be called after the upload is done
|
||||
// from webnotes.utils.file_manager
|
||||
wn.widgets.form.file_upload_done = function(doctype, docname, fileid, filename, at_id) {
|
||||
wn.widgets.form.file_upload_done = function(doctype, docname, fileid, filename, at_id, new_timestamp) {
|
||||
|
||||
var at_id = cint(at_id);
|
||||
|
||||
|
|
@ -122,16 +127,12 @@ wn.widgets.form.file_upload_done = function(doctype, docname, fileid, filename,
|
|||
else
|
||||
doc.file_list = filename + ',' + fileid;
|
||||
|
||||
// update timestamp
|
||||
doc.modified = new_timestamp;
|
||||
|
||||
// update file_list
|
||||
var frm = frms[doctype];
|
||||
frm.attachments.dialog.hide();
|
||||
frm.attachments.render();
|
||||
|
||||
var do_save = confirm('File Uploaded Sucessfully. You must save this document for the uploaded file to be registred. Save this document now?');
|
||||
if(do_save) {
|
||||
var ret = frm.save('Save');
|
||||
if(ret=='Error')msgprint("error:The document was not saved. To make the attachment permanent, you must save the document before closing.");
|
||||
} else {
|
||||
msgprint("error:The document was not saved. To make the attachment permanent, you must save the document before closing.");
|
||||
}
|
||||
msgprint('File Uploaded Sucessfully.');
|
||||
frm.refresh();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue