Browse Source

Merge branch 'develop'

version-14
Nabin Hait 9 years ago
parent
commit
c811e3927d
14 changed files with 73 additions and 12 deletions
  1. +1
    -1
      frappe/__version__.py
  2. +4
    -1
      frappe/core/doctype/role/role.py
  3. +1
    -1
      frappe/core/page/data_import_tool/importer.py
  4. +8
    -1
      frappe/custom/doctype/customize_form/customize_form.py
  5. +23
    -1
      frappe/custom/doctype/customize_form_field/customize_form_field.json
  6. +1
    -1
      frappe/hooks.py
  7. +3
    -1
      frappe/model/meta.py
  8. +1
    -0
      frappe/patches.txt
  9. +3
    -0
      frappe/public/css/mobile.css
  10. +9
    -0
      frappe/public/js/frappe/desk.js
  11. +7
    -4
      frappe/public/js/frappe/views/reports/print_grid.html
  12. +4
    -0
      frappe/public/less/mobile.less
  13. +7
    -0
      frappe/sessions.py
  14. +1
    -1
      setup.py

+ 1
- 1
frappe/__version__.py View File

@@ -1,2 +1,2 @@
from __future__ import unicode_literals
__version__ = "6.4.6"
__version__ = "6.4.7"

+ 4
- 1
frappe/core/doctype/role/role.py View File

@@ -7,4 +7,7 @@ import frappe
from frappe.model.document import Document

class Role(Document):
pass
def after_insert(self):
# Add role to Administrator
if frappe.flags.in_install != "frappe":
frappe.get_doc("User", "Administrator").add_roles(self.name)

+ 1
- 1
frappe/core/page/data_import_tool/importer.py View File

@@ -41,7 +41,7 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False,
max_rows = 5000
if not data:
frappe.throw(_("No data found"))
elif len(data) > max_rows:
elif not via_console and len(data) > max_rows:
frappe.throw(_("Only allowed {0} rows in one import").format(max_rows))

def get_start_row():


+ 8
- 1
frappe/custom/doctype/customize_form/customize_form.py View File

@@ -46,7 +46,8 @@ class CustomizeForm(Document):
'depends_on': 'Data',
'description': 'Text',
'default': 'Text',
'precision': 'Select'
'precision': 'Select',
'read_only': 'Check'
}

allowed_fieldtype_change = (('Currency', 'Float', 'Percent'), ('Small Text', 'Data'),
@@ -140,6 +141,12 @@ class CustomizeForm(Document):
elif property == "unique":
update_db = True

elif (property == "read_only" and cint(df.get("read_only"))==0
and frappe.db.get_value("DocField", {"parent": self.doc_type, "fieldname": df.fieldname}, "read_only")==1):
# if docfield has read_only checked and user is trying to make it editable, don't allow it
frappe.msgprint(_("You cannot unset 'Read Only' for field {0}").format(df.label))
continue

self.make_property_setter(property=property, value=df.get(property),
property_type=self.docfield_properties[property], fieldname=df.fieldname)



+ 23
- 1
frappe/custom/doctype/customize_form_field/customize_form_field.json View File

@@ -334,6 +334,28 @@
"unique": 0,
"width": "50px"
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "read_only",
"fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Read Only",
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
@@ -687,7 +709,7 @@
"is_submittable": 0,
"issingle": 0,
"istable": 1,
"modified": "2015-09-04 02:49:57.129449",
"modified": "2015-10-01 07:59:15.490247",
"modified_by": "Administrator",
"module": "Custom",
"name": "Customize Form Field",


+ 1
- 1
frappe/hooks.py View File

@@ -26,7 +26,7 @@ to ERPNext.
"""

app_icon = "octicon octicon-circuit-board"
app_version = "6.4.6"
app_version = "6.4.7"
app_color = "orange"
github_link = "https://github.com/frappe/frappe"



+ 3
- 1
frappe/model/meta.py View File

@@ -319,8 +319,10 @@ def trim_tables():
doctype = doctype.name
columns = frappe.db.get_table_columns(doctype)
fields = [df.fieldname for df in frappe.get_meta(doctype).fields if df.fieldtype not in no_value_fields]
columns_to_remove = [f for f in list(set(columns) - set(fields)) if f not in ignore_fields]
columns_to_remove = [f for f in list(set(columns) - set(fields)) if f not in ignore_fields
and not f.startswith("_")]
if columns_to_remove:
print doctype, "columns removed:", columns_to_remove
columns_to_remove = ", ".join(["drop `{0}`".format(c) for c in columns_to_remove])
query = """alter table `tab{doctype}` {columns}""".format(
doctype=doctype, columns=columns_to_remove)


+ 1
- 0
frappe/patches.txt View File

@@ -93,3 +93,4 @@ frappe.patches.v6_0.fix_ghana_currency
frappe.patches.v6_2.ignore_user_permissions_if_missing
execute:frappe.db.sql("delete from tabSessions where user is null")
frappe.patches.v6_2.rename_backup_manager
execute:frappe.delete_doc("DocType", "Backup Manager")

+ 3
- 0
frappe/public/css/mobile.css View File

@@ -379,6 +379,9 @@ body {
position: relative;
padding-right: 10px;
}
.doclist-row .list-id {
font-weight: normal;
}
.doclist-row .list-row-id {
left: 18px;
text-align: left;


+ 9
- 0
frappe/public/js/frappe/desk.js View File

@@ -61,6 +61,15 @@ frappe.Application = Class.extend({

// ask to allow notifications
frappe.utils.if_notify_permitted();

// listen to csrf_update
frappe.realtime.on("csrf_generated", function(data) {
// handles the case when a user logs in again from another tab
// and it leads to invalid request in the current tab
if (data.csrf_token && data.sid===frappe.get_cookie("sid")) {
frappe.csrf_token = data.csrf_token;
}
});
},

load_bootinfo: function() {


+ 7
- 4
frappe/public/js/frappe/views/reports/print_grid.html View File

@@ -25,11 +25,14 @@
{% for (var i=0, l= data.length; i < l; i++) {
var row = data[i]; %}
<tr>
{% for(var c=0; c < columns_length; c++) { var col = columns[c]; %}
{% for(var c=0; c < columns_length; c++) { var col = columns[c];%}
{% if(col.name && col._id !== "_check") { %}
<td>{%= col.formatter
? col.formatter(i, c, row[col.id], col, row, true)
: row[col.id] %}</td>
{% var value = col.fieldname ? row[col.fieldname] : row[col.id]; %}
<td>{%= col.formatter
? col.formatter(i, c, value, col, row, true)
: value %}</td>
{% } %}
{% } %}
</tr>


+ 4
- 0
frappe/public/less/mobile.less View File

@@ -311,6 +311,10 @@
position: relative;
padding-right: 10px;

.list-id {
font-weight: normal;
}

.list-row-id {
left: 18px;
text-align: left;


+ 7
- 0
frappe/sessions.py View File

@@ -141,6 +141,13 @@ def generate_csrf_token():
frappe.local.session.data.csrf_token = frappe.generate_hash()
frappe.local.session_obj.update(force=True)

# send sid and csrf token to the user
# handles the case when a user logs in again from another tab
# and it leads to invalid request in the current tab
frappe.publish_realtime(event="csrf_generated",
message={"sid": frappe.local.session.sid, "csrf_token": frappe.local.session.data.csrf_token},
user=frappe.session.user)

class Session:
def __init__(self, user, resume=False, full_name=None, user_type=None):
self.sid = cstr(frappe.form_dict.get('sid') or


+ 1
- 1
setup.py View File

@@ -1,6 +1,6 @@
from setuptools import setup, find_packages

version = "6.4.6"
version = "6.4.7"

with open("requirements.txt", "r") as f:
install_requires = f.readlines()


Loading…
Cancel
Save