DocLayer changes
This commit is contained in:
parent
8bf200f8f1
commit
d52805327e
4 changed files with 152 additions and 74 deletions
|
|
@ -8,14 +8,83 @@ cur_frm.cscript.doc_type = function(doc, dt, dn) {
|
|||
});
|
||||
}
|
||||
|
||||
cur_frm.cscript.onload = function(doc, dt, dn) {
|
||||
cur_frm.grids[0].grid.tbar_div.style.width = "30%";
|
||||
p = cur_frm.grids[0].grid.tbar_tab.children[0].children[0];
|
||||
p.removeChild(p.children[0])
|
||||
p.removeChild(p.children[0])
|
||||
}
|
||||
|
||||
cur_frm.cscript.refresh = function(doc, dt, dn) {
|
||||
//console.log(p)
|
||||
cur_frm.frm_head.timestamp_area.hidden = 1;
|
||||
cur_frm.frm_head.page_head.buttons.Save.hidden=1;
|
||||
cur_frm.page_layout.footer.hidden = 1;
|
||||
cur_frm.add_custom_button('Update', function() {
|
||||
if(cur_frm.fields_dict['doc_type'].value) {
|
||||
$c_obj(make_doclist(dt, dn), 'post', '', function(r, rt) {
|
||||
console.log(arguments);
|
||||
if(r.exc) {
|
||||
msgprint(r.exc);
|
||||
} else {
|
||||
cur_frm.frm_head.status_area.innerHTML =
|
||||
'<span style="padding: 2px; background-color: rgb(0, 170, 17); \
|
||||
color: rgb(255, 255, 255); font-weight: bold; margin-left: 0px; \
|
||||
font-size: 11px;">Saved</span>'
|
||||
console.log(arguments);
|
||||
}
|
||||
});
|
||||
}
|
||||
},1);
|
||||
cur_frm.frm_head.page_head.buttons.Update.className = "cupid-green";
|
||||
|
||||
cur_frm.add_custom_button('Reload', function() {
|
||||
cur_frm.cscript.doc_type(doc, dt, dn);
|
||||
}, 1);
|
||||
|
||||
cur_frm.add_custom_button('Reset to defaults', function() {
|
||||
cur_frm.confirm('This will remove the customizations defined for this form.\n\n'
|
||||
+ 'Are you sure you want to reset to defaults?');
|
||||
}, 1);
|
||||
}
|
||||
|
||||
cur_frm.confirm = function(msg) {
|
||||
var d = new wn.widgets.Dialog({
|
||||
title: 'Reset To Defaults',
|
||||
width: 300,
|
||||
fields: [
|
||||
{
|
||||
fieldtype: 'HTML',
|
||||
label: 'Please Confirm',
|
||||
fieldname: 'msg'
|
||||
},
|
||||
{
|
||||
fieldtype: 'Button',
|
||||
label: 'Proceed',
|
||||
fieldname: 'btn_proceed'
|
||||
},
|
||||
{
|
||||
fieldtype: 'Button',
|
||||
label: 'Cancel',
|
||||
fieldname: 'btn_cancel'
|
||||
}
|
||||
]
|
||||
});
|
||||
//d.set_value('msg', msg);
|
||||
d.fields_dict.btn_proceed.input.onclick = function() {
|
||||
this.set_working();
|
||||
$c_obj(make_doclist(dt, dn), 'delete', '', function(r, rt) {
|
||||
if(r.exc) {
|
||||
msgprint(r.exc);
|
||||
} else {
|
||||
console.log(arguments);
|
||||
}
|
||||
});
|
||||
this.done_working();
|
||||
cur_frm.confirm_dialog.hide();
|
||||
}
|
||||
d.fields_dict.btn_cancel.input.onclick = function() {
|
||||
cur_frm.confirm.dialog.hide();
|
||||
}
|
||||
|
||||
cur_frm.confirm.dialog = d;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -129,17 +129,17 @@ class DocType:
|
|||
# get a list of property setter docs
|
||||
diff_list = self.diff(this_doclist, ref_doclist, dt_doclist)
|
||||
|
||||
webnotes.msgprint('this doc')
|
||||
webnotes.msgprint([[d.name, d.idx, 'label' in d.fields and d.label or None] for d in this_doclist])
|
||||
webnotes.msgprint('ref doc')
|
||||
webnotes.msgprint([[d.name, d.idx, 'label' in d.fields and d.label or None] for d in ref_doclist])
|
||||
webnotes.msgprint('def doc')
|
||||
webnotes.msgprint([[d.name, d.idx, 'label' in d.fields and d.label or None] for d in dt_doclist])
|
||||
|
||||
self.set_properties(diff_list)
|
||||
|
||||
webnotes.msgprint('End of Post')
|
||||
webnotes.msgprint([[d.fields['property'], d.fields['value'], d.fields['doc_name'], d.fields['select_item'], 'delete' in d.fields and d.fields['delete'] or None] for d in diff_list])
|
||||
#webnotes.msgprint('End of Post')
|
||||
#webnotes.msgprint('this doc')
|
||||
#webnotes.msgprint([[d.name, d.idx, 'label' in d.fields and d.label or None] for d in this_doclist])
|
||||
#webnotes.msgprint('ref doc')
|
||||
#webnotes.msgprint([[d.name, d.idx, 'label' in d.fields and d.label or None] for d in ref_doclist])
|
||||
#webnotes.msgprint('def doc')
|
||||
#webnotes.msgprint([[d.name, d.idx, 'label' in d.fields and d.label or None] for d in dt_doclist])
|
||||
|
||||
#webnotes.msgprint([[d.fields['property'], d.fields['value'], d.fields['doc_name'], d.fields['select_item'], 'delete' in d.fields and d.fields['delete'] or None] for d in diff_list])
|
||||
|
||||
|
||||
def diff(self, new_dl, ref_dl, dt_dl):
|
||||
|
|
@ -178,11 +178,9 @@ class DocType:
|
|||
|
||||
defaults = {}
|
||||
for d in df_defaults:
|
||||
fieldname = d['fieldname']
|
||||
del d['fieldname']
|
||||
defaults[fieldname] = d
|
||||
defaults['idx'] = {'fieldtype' : 'Int', 'default' : 1, 'label' : 'idx'}
|
||||
defaults['previous_field'] = {'fieldtype' : 'Data', 'default' : None, 'label' : 'Previous Field'}
|
||||
defaults[d['fieldname']] = d
|
||||
defaults['idx'] = {'fieldname' : 'idx', 'fieldtype' : 'Int', 'default' : 1, 'label' : 'idx'}
|
||||
defaults['previous_field'] = {'fieldname' : 'previous_field', 'fieldtype' : 'Data', 'default' : None, 'label' : 'Previous Field'}
|
||||
return defaults
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
{
|
||||
'creation': '2011-11-16 16:45:16',
|
||||
'docstatus': 0,
|
||||
'modified': '2011-11-17 14:28:16',
|
||||
'modified': '2011-11-22 16:09:21',
|
||||
'modified_by': 'Administrator',
|
||||
'owner': 'Administrator'
|
||||
},
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
'read_only': 0,
|
||||
'section_style': 'Simple',
|
||||
'show_in_menu': 0,
|
||||
'version': 2
|
||||
'version': 3
|
||||
},
|
||||
|
||||
# These values are common for all DocField
|
||||
|
|
@ -216,19 +216,6 @@
|
|||
'search_index': 0
|
||||
},
|
||||
|
||||
# DocField
|
||||
{
|
||||
'doctype': 'DocField',
|
||||
'fieldname': 'no_copy',
|
||||
'fieldtype': 'Check',
|
||||
'label': 'No Copy',
|
||||
'oldfieldname': 'no_copy',
|
||||
'oldfieldtype': 'Check',
|
||||
'permlevel': 0,
|
||||
'reqd': 0,
|
||||
'width': '50px'
|
||||
},
|
||||
|
||||
# DocField
|
||||
{
|
||||
'colour': 'White:FFF',
|
||||
|
|
|
|||
|
|
@ -206,10 +206,9 @@ class _DocType:
|
|||
dt = doclist[0].name
|
||||
try:
|
||||
for f in webnotes.conn.sql("select doc_name, property, property_type, value from `tabProperty Setter` where doc_type=%s", dt, as_dict=1):
|
||||
#if not f['doc_name'] in property_dict:
|
||||
# property_dict[f['doc_name']] = []
|
||||
#property_dict[f['doc_name']].append(f)
|
||||
property_dict[f['doc_name']] = f
|
||||
if not f['doc_name'] in property_dict:
|
||||
property_dict[f['doc_name']] = []
|
||||
property_dict[f['doc_name']].append(f)
|
||||
except Exception, e:
|
||||
if e.args[0]==1146:
|
||||
# no override table
|
||||
|
|
@ -218,19 +217,21 @@ class _DocType:
|
|||
raise e
|
||||
|
||||
|
||||
change_idx = False
|
||||
|
||||
# loop over fields and override property
|
||||
for d in doclist:
|
||||
if d.doctype=='DocField' and d.name in property_dict:
|
||||
#for p in property_dict[d.name]:
|
||||
p = property_dict[d.name]
|
||||
if p['property_type']=='Check':
|
||||
d.fields[p['property']] = int(p['value'])
|
||||
elif p['property']=='previous_field':
|
||||
continue
|
||||
else:
|
||||
d.fields[p['property']] = p['value']
|
||||
for p in property_dict[d.name]:
|
||||
if p['property_type']=='Check':
|
||||
d.fields[p['property']] = int(p['value'])
|
||||
elif p['property']=='previous_field':
|
||||
change_idx = True
|
||||
continue
|
||||
else:
|
||||
d.fields[p['property']] = p['value']
|
||||
|
||||
self.change_doclist_idx(doclist, property_dict)
|
||||
if change_idx: self._change_doclist_idx(doclist, property_dict)
|
||||
|
||||
# override properties in the main doctype
|
||||
if dt in property_dict:
|
||||
|
|
@ -238,46 +239,69 @@ class _DocType:
|
|||
doclist[0].fields[p['property']] = p['value']
|
||||
|
||||
|
||||
def change_doclist_idx(self, doclist, property_dict):
|
||||
def _change_doclist_idx(self, doclist, property_dict):
|
||||
"""
|
||||
|
||||
1. Select docs in doclist of type DocField
|
||||
2. Sort this doclist according to idx
|
||||
3. Extract the name of docs in a list
|
||||
4. Arrange the property_dict entries of property "previous_field"
|
||||
and chain the set of fields according to value
|
||||
5. Move the docnames according to their previous field values
|
||||
6. Assign the new idx values to the doclist docs
|
||||
"""
|
||||
docfields = []
|
||||
sorted_doclist = sorted([dl for dl in doclist if dl.doctype=='DocField'], key=lambda dl: dl.idx)
|
||||
old_order = [d.name for d in sorted_doclist]
|
||||
property_list = []
|
||||
import webnotes
|
||||
for p in property_dict.values():
|
||||
if p['property']=='previous_field':
|
||||
property_list.append([p['value'], p['doc_name']])
|
||||
# Process doclist
|
||||
docfield_doclist = [d for d in doclist if d.doctype=='DocField']
|
||||
sorted_docfield_doclist = sorted(docfield_doclist, key=lambda df: df.idx)
|
||||
docfields = [d.name for d in sorted_docfield_doclist]
|
||||
|
||||
# Process property_dict
|
||||
previous_field_dict = {}
|
||||
for pl in property_dict.values():
|
||||
for p in pl:
|
||||
if p['property'] == 'previous_field':
|
||||
previous_field_dict[str(p['value'])] = str(p['doc_name'])
|
||||
|
||||
nf = [p for p in property_list if p[0] is None]
|
||||
i = 0
|
||||
if 'None' in previous_field_dict:
|
||||
prev_field = 'None'
|
||||
else:
|
||||
i = i + 1
|
||||
prev_field = docfields[i]
|
||||
|
||||
while previous_field_dict:
|
||||
get_next_docfield = 0
|
||||
|
||||
while(old_order):
|
||||
if nf:
|
||||
property_list.remove(nf[0])
|
||||
next_field = nf[0][1]
|
||||
if prev_field in previous_field_dict:
|
||||
this_field = previous_field_dict[prev_field]
|
||||
docfields.remove(this_field)
|
||||
|
||||
if prev_field == 'None':
|
||||
docfields.insert(0, this_field)
|
||||
else:
|
||||
docfields.insert(docfields.index(prev_field) + 1, this_field)
|
||||
|
||||
del previous_field_dict[prev_field]
|
||||
|
||||
if this_field in previous_field_dict:
|
||||
prev_field = this_field
|
||||
else:
|
||||
get_next_docfield = 1
|
||||
else:
|
||||
for o in old_order:
|
||||
if not (o in docfields):
|
||||
next_field = o
|
||||
old_order.remove(o)
|
||||
break
|
||||
else:
|
||||
old_order.remove(o)
|
||||
docfields.append(next_field)
|
||||
nf = property_list and [p for p in property_list if p[0]==next_field] or None
|
||||
|
||||
webnotes.msgprint(docfields)
|
||||
get_next_docfield = 1
|
||||
|
||||
if get_next_docfield:
|
||||
i = i + 1
|
||||
prev_field = docfields[i]
|
||||
vals = previous_field_dict.values()
|
||||
if prev_field in vals:
|
||||
i = i - 1
|
||||
keys = previous_field_dict.keys()
|
||||
prev_field = keys[vals.index(prev_field)]
|
||||
|
||||
for d in doclist:
|
||||
if d.doctype == 'DocField':
|
||||
if d.doctype=='DocField':
|
||||
d.idx = docfields.index(d.name) + 1
|
||||
|
||||
for d in sorted([dl for dl in doclist if dl.doctype=='DocField'], key=lambda dl: dl.idx):
|
||||
webnotes.msgprint(str(d.idx) + " | " + str(d.label))
|
||||
|
||||
|
||||
|
||||
def make_doclist(self):
|
||||
"""
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue