diff --git a/erpnext/patches/mar_2012/clean_property_setter.py b/erpnext/patches/mar_2012/clean_property_setter.py new file mode 100644 index 00000000000..12e0a9e3e38 --- /dev/null +++ b/erpnext/patches/mar_2012/clean_property_setter.py @@ -0,0 +1,52 @@ +import webnotes + +def execute(): + """ + * Remove unnecessary doctype properties + * Remove docfield property setters if fieldname doesn't exist + * Remove prev_field properties if value fieldname doesn't exist + """ + clean_doctype_properties() + clean_docfield_properties() + +def clean_doctype_properties(): + desc = webnotes.conn.sql("DESC `tabDocType`", as_dict=1) + property_list = '", "'.join([d.get('Field') for d in desc]) + webnotes.conn.sql("""\ + DELETE FROM `tabProperty Setter` + WHERE doctype_or_field = 'DocType' + AND property NOT IN ("%s")""" % property_list) + +def clean_docfield_properties(): + delete_list_1 = webnotes.conn.sql("""\ + SELECT name FROM `tabProperty Setter` ps + WHERE doctype_or_field = 'DocField' + AND NOT EXISTS ( + SELECT fieldname FROM `tabDocField` df + WHERE df.parent = ps.doc_type + AND df.fieldname = ps.field_name + ) AND NOT EXISTS ( + SELECT fieldname FROM `tabCustom Field` cf + WHERE cf.dt = ps.doc_type + AND cf.fieldname = ps.field_name + )""") + + delete_list_2 = webnotes.conn.sql("""\ + SELECT name FROM `tabProperty Setter` ps + WHERE doctype_or_field = 'DocField' + AND property = 'previous_field' + AND NOT EXISTS ( + SELECT fieldname FROM `tabDocField` df + WHERE df.parent = ps.doc_type + AND df.fieldname = ps.value + ) AND NOT EXISTS ( + SELECT fieldname FROM `tabCustom Field` cf + WHERE cf.dt = ps.doc_type + AND cf.fieldname = ps.value + )""") + + delete_list = [d[0] for d in delete_list_1] + [d[0] for d in delete_list_2] + + webnotes.conn.sql("""\ + DELETE FROM `tabProperty Setter` + WHERE NAME IN ("%s")""" % '", "'.join(delete_list)) diff --git a/erpnext/patches/mar_2012/cleanup_control_panel.py b/erpnext/patches/mar_2012/cleanup_control_panel.py new file mode 100644 index 00000000000..f26db152321 --- /dev/null +++ b/erpnext/patches/mar_2012/cleanup_control_panel.py @@ -0,0 +1,7 @@ +import webnotes +def execute(): + webnotes.conn.sql("""\ + DELETE FROM `tabSingles` + WHERE doctype = 'Control Panel' + AND field IN ("sync_with_gateway", "mail_password", "auto_email_id", + "mail_port", "outgoing_mail_server", "mail_login", "use_ssl")""") diff --git a/erpnext/patches/mar_2012/is_submittable_patch.py b/erpnext/patches/mar_2012/is_submittable_patch.py new file mode 100644 index 00000000000..d49160c0ee4 --- /dev/null +++ b/erpnext/patches/mar_2012/is_submittable_patch.py @@ -0,0 +1,23 @@ +# dont run this patch +def execute(): + import webnotes + import webnotes.model.doctype + from webnotes.utils import cint + from webnotes.model.doc import Document + from webnotes.model.code import get_obj + doctype_list = webnotes.conn.sql("SELECT name FROM `tabDocType`") + for dt in doctype_list: + doclist = webnotes.model.doctype.get(dt[0], form=0) + is_submittable = 0 + for d in doclist: + if d.doctype == 'DocPerm' and d.fields.get('permlevel') == 0 \ + and cint(d.fields.get('submit')) == 1: + is_submittable = 1 + break + if is_submittable: + dt_doc = Document('DocType', doclist[0].name) + dt_doc.is_submittable = 1 + dt_doc.save() + obj = get_obj(doc=dt_doc) + obj.make_amendable() + obj.on_update() diff --git a/erpnext/setup/doctype/permission_control/permission_control.py b/erpnext/setup/doctype/permission_control/permission_control.py index e21ac84b570..d261c41ab97 100644 --- a/erpnext/setup/doctype/permission_control/permission_control.py +++ b/erpnext/setup/doctype/permission_control/permission_control.py @@ -57,22 +57,31 @@ class DocType: # Get Perm Level, Perm type of Doctypes of Module and Role Selected # ------------------------------------------------------------------- def get_permissions(self,doctype): - ret = [] - - # Get permtype for the role selected - ptype = sql("select `role`,`permlevel`,`read`,`write`,`create`,`submit`,`cancel`,`amend` from tabDocPerm where `parent` = %s order by `permlevel` ASC",doctype,as_dict = 1) + import webnotes.model.doctype + doclist = webnotes.model.doctype.get(doctype, form=0) + + ptype = [{ + 'role': perm.role, + 'permlevel': cint(perm.permlevel), + 'read': cint(perm.read), + 'write': cint(perm.write), + 'create': cint(perm.create), + 'cancel': cint(perm.cancel), + 'submit': cint(perm.submit), + 'amend': cint(perm.amend) + } for perm in sorted(doclist, + key=lambda d: [d.fields.get('permlevel'), + d.fields.get('role')]) if perm.doctype=='DocPerm'] - # to convert 0L in 0 in values of dictionary - for p in ptype: - for key in p: - if key!='role': - p[key] = cint(p[key]) - ret.append(p) - - # fields list - fl = ['', 'owner'] + [l[0] for l in sql("select fieldname from tabDocField where parent=%s and fieldtype='Link' and ifnull(options,'')!=''", doctype)] - - return {'perms':ret, 'fields':fl} + fl = ['', 'owner'] + [d.fieldname for d in doclist \ + if d.doctype=='DocField' and d.fieldtype=='Link' \ + and cstr(d.options)!=''] + + return { + 'perms':ptype, + 'fields':fl, + 'is_submittable': doclist[0].fields.get('is_submittable') + } # get default values # ------------------ diff --git a/erpnext/setup/page/permission_engine/permission_engine.js b/erpnext/setup/page/permission_engine/permission_engine.js index 1d77e518868..5f5630c95d5 100644 --- a/erpnext/setup/page/permission_engine/permission_engine.js +++ b/erpnext/setup/page/permission_engine/permission_engine.js @@ -148,9 +148,13 @@ pscript.PermEngine.prototype.get_permissions = function() { // Get permissions if(r.message.perms.length) { me.get_results(r.message); + pscript.is_submittable = cint(r.message.is_submittable); } - else me.body.innerHTML = '