Merge branch 'develop' into staging
This commit is contained in:
commit
f400a99f93
94 changed files with 3475 additions and 2479 deletions
|
|
@ -20,8 +20,13 @@
|
|||
<a href='https://frappe.io/docs'>
|
||||
<img src='https://img.shields.io/badge/docs-📖-7575FF.svg?style=flat-square'/>
|
||||
</a>
|
||||
<a href='https://www.codetriage.com/frappe/frappe'>
|
||||
<img src='https://www.codetriage.com/frappe/frappe/badges/users.svg'>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
Full-stack web application framework that uses Python and MariaDB on the server side and a tightly integrated client side library. Built for [ERPNext](https://erpnext.com)
|
||||
|
||||
### Table of Contents
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ from faker import Faker
|
|||
from .exceptions import *
|
||||
from .utils.jinja import (get_jenv, get_template, render_template, get_email_from_template, get_jloader)
|
||||
|
||||
__version__ = '10.1.45'
|
||||
__version__ = '10.1.46'
|
||||
__title__ = "Frappe Framework"
|
||||
|
||||
local = Local()
|
||||
|
|
@ -339,7 +339,7 @@ def throw(msg, exc=ValidationError, title=None):
|
|||
msgprint(msg, raise_exception=exc, title=title, indicator='red')
|
||||
|
||||
def emit_js(js, user=False, **kwargs):
|
||||
from frappe.async import publish_realtime
|
||||
from frappe.realtime import publish_realtime
|
||||
if user == False:
|
||||
user = session.user
|
||||
publish_realtime('eval_js', js, user=user, **kwargs)
|
||||
|
|
@ -1376,8 +1376,8 @@ def publish_progress(*args, **kwargs):
|
|||
:param doctype: Optional, for DocType
|
||||
:param name: Optional, for Document name
|
||||
"""
|
||||
import frappe.async
|
||||
return frappe.async.publish_progress(*args, **kwargs)
|
||||
import frappe.realtime
|
||||
return frappe.realtime.publish_progress(*args, **kwargs)
|
||||
|
||||
def publish_realtime(*args, **kwargs):
|
||||
"""Publish real-time updates
|
||||
|
|
@ -1390,9 +1390,9 @@ def publish_realtime(*args, **kwargs):
|
|||
:param docname: Transmit to doctype, docname
|
||||
:param after_commit: (default False) will emit after current transaction is committed
|
||||
"""
|
||||
import frappe.async
|
||||
import frappe.realtime
|
||||
|
||||
return frappe.async.publish_realtime(*args, **kwargs)
|
||||
return frappe.realtime.publish_realtime(*args, **kwargs)
|
||||
|
||||
def local_cache(namespace, key, generator, regenerate_if_none=False):
|
||||
"""A key value store for caching within a request
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ import frappe
|
|||
import frappe.handler
|
||||
import frappe.auth
|
||||
import frappe.api
|
||||
import frappe.async
|
||||
import frappe.utils.response
|
||||
import frappe.website.render
|
||||
from frappe.utils import get_site_name
|
||||
|
|
|
|||
|
|
@ -315,6 +315,45 @@ def mariadb(context):
|
|||
'--pager=less -SFX',
|
||||
"-A"])
|
||||
|
||||
@click.command('jupyter')
|
||||
@pass_context
|
||||
def jupyter(context):
|
||||
try:
|
||||
from pip import main
|
||||
except ImportError:
|
||||
from pip._internal import main
|
||||
|
||||
reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze'])
|
||||
installed_packages = [r.decode().split('==')[0] for r in reqs.split()]
|
||||
if 'jupyter' not in installed_packages:
|
||||
main(['install', 'jupyter'])
|
||||
site = get_site(context)
|
||||
frappe.init(site=site)
|
||||
jupyter_notebooks_path = os.path.abspath(frappe.get_site_path('jupyter_notebooks'))
|
||||
sites_path = os.path.abspath(frappe.get_site_path('..'))
|
||||
try:
|
||||
os.stat(jupyter_notebooks_path)
|
||||
except OSError:
|
||||
print('Creating folder to keep jupyter notebooks at {}'.format(jupyter_notebooks_path))
|
||||
os.mkdir(jupyter_notebooks_path)
|
||||
bin_path = os.path.abspath('../env/bin')
|
||||
print('''
|
||||
Stating Jupyter notebook
|
||||
Run the following in your first cell to connect notebook to frappe
|
||||
```
|
||||
import frappe
|
||||
frappe.init(site='{site}', sites_path='{sites_path}')
|
||||
frappe.connect()
|
||||
frappe.local.lang = frappe.db.get_default('lang')
|
||||
frappe.db.connect()
|
||||
```
|
||||
'''.format(site=site, sites_path=sites_path))
|
||||
os.execv('{0}/jupyter'.format(bin_path), [
|
||||
'{0}/jupyter'.format(bin_path),
|
||||
'notebook',
|
||||
jupyter_notebooks_path,
|
||||
])
|
||||
|
||||
@click.command('console')
|
||||
@pass_context
|
||||
def console(context):
|
||||
|
|
@ -335,10 +374,13 @@ def console(context):
|
|||
@click.option('--ui-tests', is_flag=True, default=False, help="Run UI Tests")
|
||||
@click.option('--module', help="Run tests in a module")
|
||||
@click.option('--profile', is_flag=True, default=False)
|
||||
@click.option('--skip-test-records', is_flag=True, default=False, help="Don't create test records")
|
||||
@click.option('--skip-before-tests', is_flag=True, default=False, help="Don't run before tests hook")
|
||||
@click.option('--junit-xml-output', help="Destination file path for junit xml report")
|
||||
@pass_context
|
||||
def run_tests(context, app=None, module=None, doctype=None, test=(),
|
||||
driver=None, profile=False, junit_xml_output=False, ui_tests = False, doctype_list_path=None):
|
||||
driver=None, profile=False, junit_xml_output=False, ui_tests = False,
|
||||
doctype_list_path=None, skip_test_records=False, skip_before_tests=False):
|
||||
"Run tests"
|
||||
import frappe.test_runner
|
||||
tests = test
|
||||
|
|
@ -346,6 +388,9 @@ def run_tests(context, app=None, module=None, doctype=None, test=(),
|
|||
site = get_site(context)
|
||||
frappe.init(site=site)
|
||||
|
||||
frappe.flags.skip_before_tests = skip_before_tests
|
||||
frappe.flags.skip_test_records = skip_test_records
|
||||
|
||||
ret = frappe.test_runner.main(app, module, doctype, context.verbose, tests=tests,
|
||||
force=context.force, profile=profile, junit_xml_output=junit_xml_output,
|
||||
ui_tests = ui_tests, doctype_list_path = doctype_list_path)
|
||||
|
|
@ -610,6 +655,7 @@ commands = [
|
|||
build,
|
||||
clear_cache,
|
||||
clear_website_cache,
|
||||
jupyter,
|
||||
console,
|
||||
destroy_all_sessions,
|
||||
execute,
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ def get_data():
|
|||
"items": [
|
||||
{
|
||||
"type": "doctype",
|
||||
"name": "Google Maps",
|
||||
"name": "Google Maps Settings",
|
||||
"description": _("Google Maps integration"),
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,7 +4,9 @@
|
|||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
from frappe import _
|
||||
import functools
|
||||
import re
|
||||
|
||||
def load_address_and_contact(doc, key=None):
|
||||
"""Loads address list and contact list in `__onload`"""
|
||||
|
|
@ -128,25 +130,20 @@ def delete_contact_and_address(doctype, docname):
|
|||
def filter_dynamic_link_doctypes(doctype, txt, searchfield, start, page_len, filters):
|
||||
if not txt: txt = ""
|
||||
|
||||
txt = txt.lower()
|
||||
txt = "%%%s%%" % (txt)
|
||||
|
||||
filters.update({
|
||||
"parent": ("like", txt)
|
||||
})
|
||||
|
||||
doctypes = frappe.db.get_all("DocField", filters=filters, fields=["parent"],
|
||||
distinct=True, as_list=True)
|
||||
|
||||
filters.pop("parent")
|
||||
doctypes = tuple([d for d in doctypes if re.search(txt+".*", _(d[0]), re.IGNORECASE)])
|
||||
|
||||
filters.update({
|
||||
"dt": ("not in", [d[0] for d in doctypes]),
|
||||
"dt": ("like", txt),
|
||||
"dt": ("not in", [d[0] for d in doctypes])
|
||||
})
|
||||
|
||||
_doctypes = frappe.db.get_all("Custom Field", filters=filters, fields=["dt"],
|
||||
as_list=True)
|
||||
|
||||
_doctypes = tuple([d for d in _doctypes if re.search(txt+".*", _(d[0]), re.IGNORECASE)])
|
||||
|
||||
all_doctypes = [d[0] for d in doctypes + _doctypes]
|
||||
valid_doctypes = []
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -94,7 +94,7 @@ def notify_mentions(doc):
|
|||
|
||||
subject = _("{0} mentioned you in a comment").format(sender_fullname)
|
||||
|
||||
recipients = [frappe.db.get_value("User", {"enabled": 1, "name": name, "user_type": "System User"})
|
||||
recipients = [frappe.db.get_value("User", {"enabled": 1, "name": name, "user_type": "System User"}, "email")
|
||||
for name in mentions]
|
||||
frappe.sendmail(
|
||||
recipients=recipients,
|
||||
|
|
|
|||
|
|
@ -144,8 +144,9 @@ const add_doctype_field_multicheck_control = (doctype, parent_wrapper) => {
|
|||
const options = fields
|
||||
.map(df => {
|
||||
return {
|
||||
label: df.label + (df.reqd ? ' (M)' : ''),
|
||||
label: df.label,
|
||||
value: df.fieldname,
|
||||
danger: df.reqd,
|
||||
checked: 1
|
||||
};
|
||||
});
|
||||
|
|
|
|||
|
|
@ -77,13 +77,13 @@ class DataExporter:
|
|||
self.add_main_header()
|
||||
|
||||
self.writer.writerow([''])
|
||||
self.tablerow = [self.data_keys.doctype, ""]
|
||||
self.labelrow = [_("Column Labels:"), "ID"]
|
||||
self.fieldrow = [self.data_keys.columns, self.name_field]
|
||||
self.mandatoryrow = [_("Mandatory:"), _("Yes")]
|
||||
self.typerow = [_('Type:'), 'Data (text)']
|
||||
self.inforow = [_('Info:'), '']
|
||||
self.columns = [self.name_field]
|
||||
self.tablerow = [self.data_keys.doctype]
|
||||
self.labelrow = [_("Column Labels:")]
|
||||
self.fieldrow = [self.data_keys.columns]
|
||||
self.mandatoryrow = [_("Mandatory:")]
|
||||
self.typerow = [_('Type:')]
|
||||
self.inforow = [_('Info:')]
|
||||
self.columns = []
|
||||
|
||||
self.build_field_columns(self.doctype)
|
||||
|
||||
|
|
@ -144,19 +144,26 @@ class DataExporter:
|
|||
_column_start_end = frappe._dict(start=0)
|
||||
|
||||
if dt==self.doctype:
|
||||
if (meta.get('autoname') and meta.get('autoname').lower()=='prompt') or (self.with_data):
|
||||
self._append_name_column()
|
||||
|
||||
# if importing only child table for new record, add parent field
|
||||
if meta.get('istable') and not self.with_data:
|
||||
self.append_field_column(frappe._dict({
|
||||
"fieldname": "parent",
|
||||
"parent": "",
|
||||
"label": "Parent",
|
||||
"fieldtype": "Data",
|
||||
"reqd": 1,
|
||||
"info": _("Parent is the name of the document to which the data will get added to.")
|
||||
}), True)
|
||||
|
||||
_column_start_end = frappe._dict(start=0)
|
||||
else:
|
||||
_column_start_end = frappe._dict(start=len(self.columns))
|
||||
|
||||
self.append_field_column(frappe._dict({
|
||||
"fieldname": "name",
|
||||
"parent": dt,
|
||||
"label": "ID",
|
||||
"fieldtype": "Data",
|
||||
"reqd": 1,
|
||||
"idx": 0,
|
||||
"info": _("Leave blank for new records")
|
||||
}), True)
|
||||
if self.with_data:
|
||||
self._append_name_column(dt)
|
||||
|
||||
for docfield in tablecolumns:
|
||||
self.append_field_column(docfield, True)
|
||||
|
|
@ -190,7 +197,8 @@ class DataExporter:
|
|||
return
|
||||
if docfield.hidden:
|
||||
return
|
||||
if self.select_columns and docfield.fieldname not in self.select_columns.get(docfield.parent, []):
|
||||
if self.select_columns and docfield.fieldname not in self.select_columns.get(docfield.parent, []) \
|
||||
and docfield.fieldname!="name":
|
||||
return
|
||||
|
||||
self.tablerow.append("")
|
||||
|
|
@ -337,3 +345,11 @@ class DataExporter:
|
|||
frappe.response['filecontent'] = xlsx_file.getvalue()
|
||||
frappe.response['type'] = 'binary'
|
||||
|
||||
def _append_name_column(self, dt=None):
|
||||
self.append_field_column(frappe._dict({
|
||||
"fieldname": "name" if dt else self.name_field,
|
||||
"parent": dt or "",
|
||||
"label": "ID",
|
||||
"fieldtype": "Data",
|
||||
"reqd": 1,
|
||||
}), True)
|
||||
|
|
|
|||
|
|
@ -3,6 +3,10 @@
|
|||
|
||||
frappe.ui.form.on('Data Import', {
|
||||
onload: function(frm) {
|
||||
if(frm.doc.__islocal) {
|
||||
frm.set_value("action", "");
|
||||
}
|
||||
|
||||
frm.set_query("reference_doctype", function() {
|
||||
return {
|
||||
"filters": {
|
||||
|
|
@ -33,7 +37,7 @@ frappe.ui.form.on('Data Import', {
|
|||
frm.disable_save();
|
||||
frm.dashboard.clear_headline();
|
||||
if (frm.doc.reference_doctype && !frm.doc.import_file) {
|
||||
frm.page.set_indicator(__('Please attach a file to import'), 'orange');
|
||||
frm.page.set_indicator(__('Attach file'), 'orange');
|
||||
} else {
|
||||
if (frm.doc.import_status) {
|
||||
const listview_settings = frappe.listview_settings['Data Import'];
|
||||
|
|
@ -53,6 +57,10 @@ frappe.ui.form.on('Data Import', {
|
|||
frappe.model.with_doctype(frm.doc.reference_doctype);
|
||||
}
|
||||
|
||||
if(frm.doc.action == "Insert new records" || frm.doc.action == "Update records") {
|
||||
frm.set_df_property("action", "read_only", 1);
|
||||
}
|
||||
|
||||
frm.add_custom_button(__("Help"), function() {
|
||||
frappe.help.show_video("6wiriRKPhmg");
|
||||
});
|
||||
|
|
@ -82,15 +90,18 @@ frappe.ui.form.on('Data Import', {
|
|||
}
|
||||
},
|
||||
|
||||
reference_doctype: function(frm) {
|
||||
if (frm.doc.reference_doctype) {
|
||||
frm.save();
|
||||
action: function(frm) {
|
||||
if(!frm.doc.action) return;
|
||||
if(!frm.doc.reference_doctype) {
|
||||
frappe.msgprint(__("Please select document type first."));
|
||||
frm.set_value("action", "");
|
||||
return;
|
||||
}
|
||||
},
|
||||
|
||||
overwrite: function(frm) {
|
||||
if (frm.doc.overwrite === 0) {
|
||||
frm.doc.only_update = 0;
|
||||
if(frm.doc.action == "Insert new records") {
|
||||
frm.doc.insert_new = 1;
|
||||
} else if (frm.doc.action == "Update records"){
|
||||
frm.doc.overwrite = 1;
|
||||
}
|
||||
frm.save();
|
||||
},
|
||||
|
|
@ -136,24 +147,22 @@ frappe.data_import.download_dialog = function(frm) {
|
|||
const filter_fields = df => frappe.model.is_value_type(df) && !df.hidden;
|
||||
const get_fields = dt => frappe.meta.get_docfields(dt).filter(filter_fields);
|
||||
|
||||
const get_doctypes = parentdt => {
|
||||
return [parentdt].concat(
|
||||
frappe.meta.get_table_fields(parentdt).map(df => df.options)
|
||||
);
|
||||
};
|
||||
|
||||
const get_doctype_checkbox_fields = () => {
|
||||
return dialog.fields.filter(df => df.fieldname.endsWith('_fields'))
|
||||
.map(df => dialog.fields_dict[df.fieldname]);
|
||||
};
|
||||
|
||||
const doctype_fields = get_fields(frm.doc.reference_doctype)
|
||||
.map(df => ({
|
||||
label: df.label + (df.reqd ? ' (M)' : ''),
|
||||
reqd: df.reqd ? 1 : 0,
|
||||
value: df.fieldname,
|
||||
checked: 1
|
||||
}));
|
||||
.map(df => {
|
||||
let reqd = (df.reqd || df.fieldname == 'naming_series') ? 1 : 0;
|
||||
return {
|
||||
label: df.label,
|
||||
reqd: reqd,
|
||||
danger: reqd,
|
||||
value: df.fieldname,
|
||||
checked: 1
|
||||
};
|
||||
});
|
||||
|
||||
let fields = [
|
||||
{
|
||||
|
|
@ -165,15 +174,14 @@ frappe.data_import.download_dialog = function(frm) {
|
|||
"onchange": function() {
|
||||
const fields = get_doctype_checkbox_fields();
|
||||
fields.map(f => f.toggle(true));
|
||||
if(this.value == 'Mandatory') {
|
||||
if(this.value == 'Mandatory' || this.value == 'Manually') {
|
||||
checkbox_toggle(true);
|
||||
fields.map(multicheck_field => {
|
||||
multicheck_field.options.map(option => {
|
||||
if(!option.reqd) return;
|
||||
$(dialog.body).find(`:checkbox[data-unit="${option.value}"]`)
|
||||
$(multicheck_field.$wrapper).find(`:checkbox[data-unit="${option.value}"]`)
|
||||
.prop('checked', false)
|
||||
.trigger('click')
|
||||
.prop('disabled', true);
|
||||
.trigger('click');
|
||||
});
|
||||
});
|
||||
} else if(this.value == 'All'){
|
||||
|
|
@ -189,11 +197,6 @@ frappe.data_import.download_dialog = function(frm) {
|
|||
"options": "Excel\nCSV",
|
||||
"default": "Excel"
|
||||
},
|
||||
{
|
||||
"label": __("Download with Data"),
|
||||
"fieldname": "with_data",
|
||||
"fieldtype": "Check"
|
||||
},
|
||||
{
|
||||
"label": __("Select All"),
|
||||
"fieldname": "select_all",
|
||||
|
|
@ -231,10 +234,11 @@ frappe.data_import.download_dialog = function(frm) {
|
|||
"options": frappe.meta.get_docfields(df.options)
|
||||
.filter(filter_fields)
|
||||
.map(df => ({
|
||||
label: df.label + (df.reqd ? ' (M)' : ''),
|
||||
label: df.label,
|
||||
reqd: df.reqd ? 1 : 0,
|
||||
value: df.fieldname,
|
||||
checked: 1
|
||||
checked: 1,
|
||||
danger: df.reqd
|
||||
})),
|
||||
"columns": 2,
|
||||
"hidden": 1
|
||||
|
|
@ -263,7 +267,7 @@ frappe.data_import.download_dialog = function(frm) {
|
|||
doctype: frm.doc.reference_doctype,
|
||||
parent_doctype: frm.doc.reference_doctype,
|
||||
select_columns: JSON.stringify(columns),
|
||||
with_data: data.with_data,
|
||||
with_data: frm.doc.overwrite,
|
||||
all_doctypes: true,
|
||||
file_type: data.file_type,
|
||||
template: true
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -43,17 +44,157 @@
|
|||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "action",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Action",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Insert new records\nUpdate records",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "0",
|
||||
"depends_on": "eval:!doc.overwrite",
|
||||
"description": "New data will be inserted.",
|
||||
"fieldname": "insert_new",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 1,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Insert new records",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 1,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "0",
|
||||
"depends_on": "eval:!doc.insert_new",
|
||||
"description": "If you are updating/overwriting already created records.",
|
||||
"fieldname": "overwrite",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 1,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Update records",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 1,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "0",
|
||||
"depends_on": "overwrite",
|
||||
"description": "If you don't want to create any new records while updating the older records.",
|
||||
"fieldname": "only_update",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Don't create new records",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"collapsible_depends_on": "",
|
||||
"columns": 0,
|
||||
"depends_on": "eval:(!doc.__islocal)",
|
||||
"fieldname": "section_break_4",
|
||||
"fieldname": "section_break_4",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
|
|
@ -74,16 +215,83 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "",
|
||||
"fieldname": "import_file",
|
||||
"fieldname": "import_file",
|
||||
"fieldtype": "Attach",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Attach file for Import",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "column_break_4",
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval: doc.import_status == \"Partially Successful\"",
|
||||
"description": "This is the template file generated with only the rows having some error. You should use this file for correction and import.",
|
||||
"fieldname": "error_file",
|
||||
"fieldtype": "Attach",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
|
|
@ -92,7 +300,7 @@
|
|||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Attach file for Import",
|
||||
"label": "Generated File",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
|
|
@ -105,16 +313,20 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"collapsible_depends_on": "",
|
||||
"columns": 0,
|
||||
"fieldname": "column_break_4",
|
||||
"fieldtype": "Column Break",
|
||||
"depends_on": "eval:(!doc.__islocal)",
|
||||
"fieldname": "section_break_6",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
|
|
@ -134,144 +346,17 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval: doc.import_status == \"Partially Successful\"",
|
||||
"description": "This is the template file generated with only the rows having some error. You should use this file for correction and import.",
|
||||
"fieldname": "error_file",
|
||||
"fieldtype": "Attach",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Generated File",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"collapsible_depends_on": "",
|
||||
"columns": 0,
|
||||
"depends_on": "eval:(!doc.__islocal)",
|
||||
"fieldname": "section_break_6",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "0",
|
||||
"depends_on": "",
|
||||
"description": "If you are updating/overwriting already created records.",
|
||||
"fieldname": "overwrite",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Update records",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "0",
|
||||
"depends_on": "overwrite",
|
||||
"description": "If you don't want to create any new records while updating the older records.",
|
||||
"fieldname": "only_update",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Don't create new records",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "If this is checked, rows with valid data will be imported and invalid rows will be dumped into a new file for you to import later.\n",
|
||||
"description": "If this is checked, rows with valid data will be imported and invalid rows will be dumped into a new file for you to import later.",
|
||||
"fieldname": "skip_errors",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
|
|
@ -294,10 +379,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -326,10 +413,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -358,10 +447,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -390,10 +481,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 1,
|
||||
|
|
@ -422,10 +515,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -454,10 +549,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 1,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -485,10 +582,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 1,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -517,10 +616,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 1,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -548,10 +649,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -578,10 +681,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -608,6 +713,7 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
|
|
@ -621,7 +727,7 @@
|
|||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 1,
|
||||
"modified": "2017-12-15 14:49:24.622128",
|
||||
"modified": "2018-08-28 15:05:56.787108",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Core",
|
||||
"name": "Data Import",
|
||||
|
|
@ -630,7 +736,6 @@
|
|||
"permissions": [
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
|
|
@ -657,5 +762,6 @@
|
|||
"sort_order": "DESC",
|
||||
"title_field": "",
|
||||
"track_changes": 1,
|
||||
"track_seen": 1
|
||||
}
|
||||
"track_seen": 1,
|
||||
"track_views": 0
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ from six.moves import range
|
|||
import requests
|
||||
import frappe, json, os
|
||||
import frappe.permissions
|
||||
import frappe.async
|
||||
|
||||
from frappe import _
|
||||
|
||||
|
|
@ -204,7 +203,7 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False,
|
|||
# importing the item variant where item code and item name will be blank.
|
||||
def main_doc_empty(row):
|
||||
if row:
|
||||
for i in range(3,1,-1):
|
||||
for i in range(3,0,-1):
|
||||
if len(row) > i and row[i]:
|
||||
return False
|
||||
return True
|
||||
|
|
|
|||
23
frappe/core/doctype/data_import/test_data_import.js
Normal file
23
frappe/core/doctype/data_import/test_data_import.js
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
/* eslint-disable */
|
||||
// rename this file from _test_[name] to test_[name] to activate
|
||||
// and remove above this line
|
||||
|
||||
QUnit.test("test: Data Import", function (assert) {
|
||||
let done = assert.async();
|
||||
|
||||
// number of asserts
|
||||
assert.expect(1);
|
||||
|
||||
frappe.run_serially([
|
||||
// insert a new Data Import
|
||||
() => frappe.tests.make('Data Import', [
|
||||
// values to be set
|
||||
{key: 'value'}
|
||||
]),
|
||||
() => {
|
||||
assert.equal(cur_frm.doc.key, 'value');
|
||||
},
|
||||
() => done()
|
||||
]);
|
||||
|
||||
});
|
||||
|
|
@ -35,7 +35,7 @@ class TestDataImport(unittest.TestCase):
|
|||
|
||||
exporter.export_data("Blog Category", all_doctypes=True, template=True)
|
||||
content = read_csv_content(frappe.response.result)
|
||||
content.append(["", "", "test-category", "Test Cateogry"])
|
||||
content.append(["", "test-category", "Test Cateogry"])
|
||||
importer.upload(content)
|
||||
self.assertTrue(frappe.db.get_value("Blog Category", "test-category", "title"), "Test Category")
|
||||
|
||||
|
|
@ -51,7 +51,7 @@ class TestDataImport(unittest.TestCase):
|
|||
def test_import_only_children(self):
|
||||
user_email = "test_import_userrole@example.com"
|
||||
if frappe.db.exists("User", user_email):
|
||||
frappe.delete_doc("User", user_email)
|
||||
frappe.delete_doc("User", user_email, force=True)
|
||||
|
||||
frappe.get_doc({"doctype": "User", "email": user_email, "first_name": "Test Import UserRole"}).insert()
|
||||
|
||||
|
|
@ -81,10 +81,9 @@ class TestDataImport(unittest.TestCase):
|
|||
content = read_csv_content(frappe.response.result)
|
||||
|
||||
content.append([None] * len(content[-2]))
|
||||
content[-1][1] = "EV00001"
|
||||
content[-1][2] = "__Test Event with children"
|
||||
content[-1][3] = "Private"
|
||||
content[-1][4] = "2014-01-01 10:00:00.000000"
|
||||
content[-1][1] = "__Test Event with children"
|
||||
content[-1][2] = "Private"
|
||||
content[-1][3] = "2014-01-01 10:00:00.000000"
|
||||
importer.upload(content)
|
||||
|
||||
frappe.get_doc("Event", {"subject":"__Test Event with children"})
|
||||
|
|
@ -96,6 +95,6 @@ class TestDataImport(unittest.TestCase):
|
|||
exporter.export_data("Event", all_doctypes=True, template=True, file_type="Excel")
|
||||
from frappe.utils.xlsxutils import read_xlsx_file_from_attached_file
|
||||
content = read_xlsx_file_from_attached_file(fcontent=frappe.response.filecontent)
|
||||
content.append(["", "EV00001", "_test", "Private", "05-11-2017 13:51:48", "0", "0", "", "1", "blue"])
|
||||
content.append(["", "_test", "Private", "05-11-2017 13:51:48", "0", "0", "", "1", "blue"])
|
||||
importer.upload(content)
|
||||
self.assertTrue(frappe.db.get_value("Event", "EV00001", "subject"), "_test")
|
||||
self.assertTrue(frappe.db.get_value("Event", {"subject": "_test"}, "name"))
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ class DocType(Document):
|
|||
self.permissions = []
|
||||
|
||||
self.scrub_field_names()
|
||||
self.scrub_options_in_select()
|
||||
self.set_default_in_list_view()
|
||||
self.set_default_translatable()
|
||||
self.validate_series()
|
||||
|
|
@ -194,6 +195,17 @@ class DocType(Document):
|
|||
# unique is automatically an index
|
||||
if d.unique: d.search_index = 0
|
||||
|
||||
def scrub_options_in_select(self):
|
||||
"""Strip options for whitespaces"""
|
||||
for field in self.fields:
|
||||
if field.fieldtype == "Select" and field.options is not None:
|
||||
options_list = []
|
||||
for i, option in enumerate(field.options.split("\n")):
|
||||
_option = option.strip()
|
||||
if i==0 or _option:
|
||||
options_list.append(_option)
|
||||
field.options = '\n'.join(options_list)
|
||||
|
||||
def validate_series(self, autoname=None, name=None):
|
||||
"""Validate if `autoname` property is correctly set."""
|
||||
if not autoname: autoname = self.autoname
|
||||
|
|
@ -446,9 +458,9 @@ class DocType(Document):
|
|||
# a DocType's name should not start with a number or underscore
|
||||
# and should only contain letters, numbers and underscore
|
||||
if six.PY2:
|
||||
is_a_valid_name = re.match("^(?![\W])[^\d_\s][\w -]+$", name)
|
||||
is_a_valid_name = re.match("^(?![\W])[^\d_\s][\w ]+$", name)
|
||||
else:
|
||||
is_a_valid_name = re.match("^(?![\W])[^\d_\s][\w -]+$", name, flags = re.ASCII)
|
||||
is_a_valid_name = re.match("^(?![\W])[^\d_\s][\w ]+$", name, flags = re.ASCII)
|
||||
if not is_a_valid_name:
|
||||
frappe.throw(_("DocType's name should start with a letter and it can only consist of letters, numbers, spaces and underscores"), frappe.NameError)
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -40,10 +41,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -72,10 +75,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -102,10 +107,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -134,10 +141,12 @@
|
|||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -165,10 +174,12 @@
|
|||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -196,10 +207,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
|
|
@ -227,10 +240,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -257,10 +272,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
|
|
@ -289,10 +306,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -318,10 +337,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -348,11 +369,13 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0,
|
||||
"width": "50%"
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -379,10 +402,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 1
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -410,10 +435,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -440,10 +467,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -470,10 +499,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -501,10 +532,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -532,10 +565,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -561,10 +596,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -592,10 +629,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 1,
|
||||
|
|
@ -622,10 +661,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -654,10 +695,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -684,10 +727,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -714,10 +759,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 1
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -745,10 +792,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -774,10 +823,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -802,10 +853,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -831,10 +884,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -861,10 +916,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 1,
|
||||
|
|
@ -891,10 +948,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -920,10 +979,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -951,10 +1012,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -982,10 +1045,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1011,10 +1076,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1041,10 +1108,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 1,
|
||||
|
|
@ -1072,10 +1141,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1103,10 +1174,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1133,10 +1206,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1162,10 +1237,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 1,
|
||||
|
|
@ -1192,10 +1269,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1224,10 +1303,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 1,
|
||||
|
|
@ -1255,10 +1336,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1285,10 +1368,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1316,10 +1401,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 1,
|
||||
|
|
@ -1348,10 +1435,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1378,10 +1467,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1409,10 +1500,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1441,11 +1534,13 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0,
|
||||
"width": "50%"
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1473,10 +1568,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 1,
|
||||
|
|
@ -1504,10 +1601,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1535,10 +1634,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1569,10 +1670,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1599,10 +1702,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1629,10 +1734,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1659,10 +1766,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1691,10 +1800,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1721,11 +1832,13 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0,
|
||||
"width": "50%"
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1753,10 +1866,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1784,10 +1899,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1814,10 +1931,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1845,10 +1964,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 1,
|
||||
|
|
@ -1875,10 +1996,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1906,10 +2029,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 1,
|
||||
|
|
@ -1936,10 +2061,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1967,10 +2094,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 1
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -1997,10 +2126,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -2026,10 +2157,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -2056,6 +2189,7 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
|
|
@ -2072,15 +2206,14 @@
|
|||
"istable": 0,
|
||||
"max_attachments": 5,
|
||||
"menu_index": 0,
|
||||
"modified": "2018-06-29 10:55:32.946017",
|
||||
"modified_by": "shridhar.p@zerodha.com",
|
||||
"modified": "2018-08-15 12:12:06.215199",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Core",
|
||||
"name": "User",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
|
|
@ -2100,7 +2233,6 @@
|
|||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 0,
|
||||
"delete": 0,
|
||||
|
|
@ -2127,6 +2259,5 @@
|
|||
"sort_order": "DESC",
|
||||
"title_field": "full_name",
|
||||
"track_changes": 1,
|
||||
"track_seen": 0,
|
||||
"track_views": 0
|
||||
"track_seen": 0
|
||||
}
|
||||
|
|
@ -252,20 +252,17 @@ class User(Document):
|
|||
|
||||
def send_welcome_mail_to_user(self):
|
||||
from frappe.utils import get_url
|
||||
|
||||
link = self.reset_password()
|
||||
app_title = None
|
||||
|
||||
method = frappe.get_hooks('get_site_info')
|
||||
subject = None
|
||||
method = frappe.get_hooks("welcome_email")
|
||||
if method:
|
||||
get_site_info = frappe.get_attr(method[0])
|
||||
site_info = get_site_info({})
|
||||
app_title = site_info.get('company', None)
|
||||
|
||||
if app_title:
|
||||
subject = _("Welcome to {0}").format(app_title)
|
||||
else:
|
||||
subject = _("Complete Registration")
|
||||
subject = frappe.get_attr(method[-1])()
|
||||
if not subject:
|
||||
site_name = frappe.db.get_default('site_name') or frappe.get_conf().get("site_name")
|
||||
if site_name:
|
||||
subject = _("Welcome to {0}".format(site_name))
|
||||
else:
|
||||
subject = _("Complete Registration")
|
||||
|
||||
self.send_login_mail(subject, "new_user",
|
||||
dict(
|
||||
|
|
@ -278,9 +275,6 @@ class User(Document):
|
|||
from frappe.utils.user import get_user_fullname
|
||||
from frappe.utils import get_url
|
||||
|
||||
mail_titles = frappe.get_hooks().get("login_mail_title", [])
|
||||
title = frappe.db.get_default('company') or (mail_titles and mail_titles[0]) or ""
|
||||
|
||||
full_name = get_user_fullname(frappe.session['user'])
|
||||
if full_name == "Guest":
|
||||
full_name = "Administrator"
|
||||
|
|
@ -288,7 +282,7 @@ class User(Document):
|
|||
args = {
|
||||
'first_name': self.first_name or self.last_name or "user",
|
||||
'user': self.name,
|
||||
'title': title,
|
||||
'title': subject,
|
||||
'login_url': get_url(),
|
||||
'user_fullname': full_name
|
||||
}
|
||||
|
|
@ -929,10 +923,10 @@ def notify_admin_access_to_system_manager(login_manager=None):
|
|||
def extract_mentions(txt):
|
||||
"""Find all instances of @name in the string.
|
||||
The mentions will be separated by non-word characters or may appear at the start of the string"""
|
||||
txt = txt.replace("<br>", "<br> ")
|
||||
txt = re.sub(r'(<[a-zA-Z\/][^>]*>)', '', txt)
|
||||
return re.findall(r'(?:[^\w\.\-\@]|^)@([\w\.\-\@]*)', txt)
|
||||
|
||||
|
||||
def handle_password_test_fail(result):
|
||||
suggestions = result['feedback']['suggestions'][0] if result['feedback']['suggestions'] else ''
|
||||
warning = result['feedback']['warning'] if 'warning' in result['feedback'] else ''
|
||||
|
|
@ -1045,7 +1039,7 @@ def update_roles(role_profile):
|
|||
user.set('roles', [])
|
||||
user.add_roles(*roles)
|
||||
|
||||
def create_contact(user):
|
||||
def create_contact(user, ignore_links=False):
|
||||
if user.name in ["Administrator", "Guest"]: return
|
||||
|
||||
if not frappe.db.get_value("Contact", {"email_id": user.email}):
|
||||
|
|
@ -1058,7 +1052,7 @@ def create_contact(user):
|
|||
"gender": user.gender,
|
||||
"phone": user.phone,
|
||||
"mobile_no": user.mobile_no
|
||||
}).insert(ignore_permissions=True)
|
||||
}).insert(ignore_permissions=True, ignore_links=ignore_links)
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
|
|
|
|||
|
|
@ -9,15 +9,6 @@ from frappe import _
|
|||
from frappe.utils import get_source_value
|
||||
|
||||
class DataMigrationRun(Document):
|
||||
|
||||
def validate(self):
|
||||
exists = frappe.db.exists('Data Migration Run', dict(
|
||||
status=('in', ['Fail', 'Error']),
|
||||
name=('!=', self.name)
|
||||
))
|
||||
if exists:
|
||||
frappe.throw(_('There are failed runs with the same Data Migration Plan'))
|
||||
|
||||
def run(self):
|
||||
self.begin()
|
||||
if self.total_pages > 0:
|
||||
|
|
@ -78,6 +69,7 @@ class DataMigrationRun(Document):
|
|||
self.db_set('status', 'Error', notify=True, commit=True)
|
||||
print('Data Migration Run failed')
|
||||
print(frappe.get_traceback())
|
||||
self.execute_postprocess('Error')
|
||||
raise e
|
||||
|
||||
def get_last_modified_condition(self):
|
||||
|
|
@ -132,6 +124,12 @@ class DataMigrationRun(Document):
|
|||
|
||||
self.db_set(fields, notify=True, commit=True)
|
||||
|
||||
self.execute_postprocess(status)
|
||||
|
||||
frappe.publish_realtime(self.trigger_name,
|
||||
{"progress_percent": 100}, user=frappe.session.user)
|
||||
|
||||
def execute_postprocess(self, status):
|
||||
# Execute post process
|
||||
postprocess_method_path = self.get_plan().postprocess_method
|
||||
|
||||
|
|
@ -147,9 +145,6 @@ class DataMigrationRun(Document):
|
|||
}
|
||||
})
|
||||
|
||||
frappe.publish_realtime(self.trigger_name,
|
||||
{"progress_percent": 100}, user=frappe.session.user)
|
||||
|
||||
def get_plan(self):
|
||||
if not hasattr(self, 'plan'):
|
||||
self.plan = frappe.get_doc('Data Migration Plan', self.data_migration_plan)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import warnings
|
|||
import datetime
|
||||
import frappe
|
||||
import frappe.defaults
|
||||
import frappe.async
|
||||
from time import time
|
||||
import re
|
||||
import frappe.model.meta
|
||||
|
|
@ -813,7 +812,7 @@ class Database:
|
|||
|
||||
def flush_realtime_log(self):
|
||||
for args in frappe.local.realtime_log:
|
||||
frappe.async.emit_via_redis(*args)
|
||||
frappe.realtime.emit_via_redis(*args)
|
||||
|
||||
frappe.local.realtime_log = []
|
||||
|
||||
|
|
|
|||
|
|
@ -47,6 +47,9 @@ def add(args=None):
|
|||
# if args.get("re_assign"):
|
||||
# remove_from_todo_if_already_assigned(args['doctype'], args['name'])
|
||||
|
||||
if not args.get('description'):
|
||||
args['description'] = _('Assignment')
|
||||
|
||||
d = frappe.get_doc({
|
||||
"doctype":"ToDo",
|
||||
"owner": args['assign_to'],
|
||||
|
|
|
|||
|
|
@ -39,6 +39,9 @@ class FormMeta(Meta):
|
|||
self.load_assets()
|
||||
|
||||
def load_assets(self):
|
||||
if self.get('__assets_loaded', False):
|
||||
return
|
||||
|
||||
self.add_search_fields()
|
||||
self.add_linked_document_type()
|
||||
|
||||
|
|
@ -51,6 +54,8 @@ class FormMeta(Meta):
|
|||
self.load_dashboard()
|
||||
self.load_kanban_meta()
|
||||
|
||||
self.set('__assets_loaded', True)
|
||||
|
||||
def as_dict(self, no_nulls=False):
|
||||
d = super(FormMeta, self).as_dict(no_nulls=no_nulls)
|
||||
|
||||
|
|
|
|||
|
|
@ -233,6 +233,7 @@ def delete_items():
|
|||
return failed
|
||||
|
||||
@frappe.whitelist()
|
||||
@frappe.read_only()
|
||||
def get_sidebar_stats(stats, doctype, filters=[]):
|
||||
cat_tags = frappe.db.sql("""select tag.parent as category, tag.tag_name as tag
|
||||
from `tabTag Doc Category` as docCat
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ from frappe import _
|
|||
from six import string_types
|
||||
import re
|
||||
|
||||
UNTRANSLATED_DOCTYPES = ["DocType", "Role"]
|
||||
|
||||
def sanitize_searchfield(searchfield):
|
||||
blacklisted_keywords = ['select', 'delete', 'drop', 'update', 'case', 'and', 'or', 'like']
|
||||
|
|
@ -109,8 +110,8 @@ def search_widget(doctype, txt, query=None, searchfield=None, start=0,
|
|||
|
||||
for f in search_fields:
|
||||
fmeta = meta.get_field(f.strip())
|
||||
if f == "name" or (fmeta and fmeta.fieldtype in ["Data", "Text", "Small Text", "Long Text",
|
||||
"Link", "Select", "Read Only", "Text Editor"]):
|
||||
if (doctype not in UNTRANSLATED_DOCTYPES) and (f == "name" or (fmeta and fmeta.fieldtype in ["Data", "Text", "Small Text", "Long Text",
|
||||
"Link", "Select", "Read Only", "Text Editor"])):
|
||||
or_filters.append([doctype, f.strip(), "like", "%{0}%".format(txt)])
|
||||
|
||||
if meta.get("fields", {"fieldname":"enabled", "fieldtype":"Check"}):
|
||||
|
|
@ -136,6 +137,9 @@ def search_widget(doctype, txt, query=None, searchfield=None, start=0,
|
|||
|
||||
ignore_permissions = True if doctype == "DocType" else (cint(ignore_user_permissions) and has_permission(doctype))
|
||||
|
||||
if doctype in UNTRANSLATED_DOCTYPES:
|
||||
page_length = None
|
||||
|
||||
values = frappe.get_list(doctype,
|
||||
filters=filters, fields=formatted_fields,
|
||||
or_filters = or_filters, limit_start = start,
|
||||
|
|
@ -144,6 +148,9 @@ def search_widget(doctype, txt, query=None, searchfield=None, start=0,
|
|||
ignore_permissions = ignore_permissions,
|
||||
as_list=not as_dict)
|
||||
|
||||
if doctype in UNTRANSLATED_DOCTYPES:
|
||||
values = tuple([v for v in list(values) if re.search(txt+".*", (_(v.name) if as_dict else _(v[0])), re.IGNORECASE)])
|
||||
|
||||
# remove _relevance from results
|
||||
if as_dict:
|
||||
for r in values:
|
||||
|
|
|
|||
|
|
@ -108,6 +108,7 @@ class AutoEmailReport(Document):
|
|||
new_row = []
|
||||
out.append(new_row)
|
||||
for df in columns:
|
||||
if not row.get(df.fieldname): continue
|
||||
new_row.append(frappe.format(row[df.fieldname], df, row))
|
||||
|
||||
return out
|
||||
|
|
|
|||
|
|
@ -1,6 +1,16 @@
|
|||
// Copyright (c) 2018, Frappe Technologies and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
this.frm.add_fetch('sender', 'email_id', 'sender_email');
|
||||
|
||||
this.frm.fields_dict.sender.get_query = function(){
|
||||
return {
|
||||
filters: {
|
||||
'enable_outgoing': 1
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
frappe.notification = {
|
||||
setup_fieldname_select: function(frm) {
|
||||
// get the doctype to update fields
|
||||
|
|
|
|||
|
|
@ -509,6 +509,68 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "sender",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Sender",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Email Account",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "sender_email",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Sender Email",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Email",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "section_break_9",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
|
|
@ -1062,7 +1124,7 @@
|
|||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"menu_index": 0,
|
||||
"modified": "2018-05-31 15:44:23.082691",
|
||||
"modified": "2018-08-29 14:32:02.179599",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Email",
|
||||
"name": "Notification",
|
||||
|
|
|
|||
|
|
@ -127,14 +127,19 @@ def get_context(context):
|
|||
doc.set(self.set_property_after_alert, self.property_value)
|
||||
|
||||
def send_an_email(self, doc, context):
|
||||
from email.utils import formataddr
|
||||
subject = self.subject
|
||||
if "{" in subject:
|
||||
subject = frappe.render_template(self.subject, context)
|
||||
|
||||
attachments = self.get_attachment(doc)
|
||||
recipients = self.get_list_of_recipients(doc, context)
|
||||
sender = None
|
||||
if self.sender and self.sender_email:
|
||||
sender = formataddr((self.sender, self.sender_email))
|
||||
|
||||
frappe.sendmail(recipients=recipients, subject=subject,
|
||||
sender=sender,
|
||||
message= frappe.render_template(self.message, context),
|
||||
reference_doctype = doc.doctype,
|
||||
reference_name = doc.name,
|
||||
|
|
|
|||
|
|
@ -283,7 +283,7 @@ class EmailServer:
|
|||
flags = []
|
||||
for flag in imaplib.ParseFlags(flag_string) or []:
|
||||
pattern = re.compile("\w+")
|
||||
match = re.search(pattern, flag)
|
||||
match = re.search(pattern, frappe.as_unicode(flag))
|
||||
flags.append(match.group(0))
|
||||
|
||||
if "Seen" in flags:
|
||||
|
|
|
|||
|
|
@ -2555,7 +2555,7 @@
|
|||
"currency": "USD",
|
||||
"currency_fraction": "Cent",
|
||||
"currency_fraction_units": 100,
|
||||
"smallest_currency_fraction_value": 0.05,
|
||||
"smallest_currency_fraction_value": 0.01,
|
||||
"currency_name": "US Dollar",
|
||||
"currency_symbol": "$",
|
||||
"date_format": "mm-dd-yyyy",
|
||||
|
|
|
|||
|
|
@ -1,193 +1,208 @@
|
|||
{
|
||||
"allow_copy": 0,
|
||||
"allow_import": 1,
|
||||
"allow_rename": 1,
|
||||
"autoname": "field:country_name",
|
||||
"beta": 0,
|
||||
"creation": "2013-01-19 10:23:30",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"editable_grid": 0,
|
||||
"allow_copy": 0,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 1,
|
||||
"allow_rename": 1,
|
||||
"autoname": "field:country_name",
|
||||
"beta": 0,
|
||||
"creation": "2013-01-19 10:23:30",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"editable_grid": 0,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "country_name",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Country Name",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "country_name",
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "country_name",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Country Name",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "country_name",
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 1
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "date_format",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Date Format",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "date_format",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Date Format",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "time_zones",
|
||||
"fieldtype": "Text",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Time Zones",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "time_zones",
|
||||
"fieldtype": "Text",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Time Zones",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "code",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Code",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "code",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Code",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"icon": "fa fa-globe",
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"menu_index": 0,
|
||||
"modified": "2016-12-29 14:40:34.951894",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Geo",
|
||||
"name": "Country",
|
||||
"owner": "Administrator",
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"icon": "fa fa-globe",
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"menu_index": 0,
|
||||
"modified": "2018-08-29 06:37:32.303570",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Geo",
|
||||
"name": "Country",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 0,
|
||||
"email": 1,
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"is_custom": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"amend": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 0,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 1,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"set_user_permissions": 1,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 0,
|
||||
"delete": 0,
|
||||
"email": 1,
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"is_custom": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "All",
|
||||
"set_user_permissions": 0,
|
||||
"share": 0,
|
||||
"submit": 0,
|
||||
"amend": 0,
|
||||
"cancel": 0,
|
||||
"create": 0,
|
||||
"delete": 0,
|
||||
"email": 1,
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "All",
|
||||
"set_user_permissions": 0,
|
||||
"share": 0,
|
||||
"submit": 0,
|
||||
"write": 0
|
||||
}
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"sort_field": "country_name",
|
||||
"sort_order": "ASC",
|
||||
"track_changes": 1,
|
||||
"track_seen": 0
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"show_name_in_global_search": 0,
|
||||
"sort_field": "country_name",
|
||||
"sort_order": "ASC",
|
||||
"track_changes": 1,
|
||||
"track_seen": 0,
|
||||
"track_views": 0
|
||||
}
|
||||
|
|
@ -1,322 +1,345 @@
|
|||
{
|
||||
"allow_copy": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"autoname": "field:currency_name",
|
||||
"beta": 0,
|
||||
"creation": "2013-01-28 10:06:02",
|
||||
"custom": 0,
|
||||
"description": "**Currency** Master",
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"editable_grid": 0,
|
||||
"allow_copy": 0,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 1,
|
||||
"allow_rename": 1,
|
||||
"autoname": "field:currency_name",
|
||||
"beta": 0,
|
||||
"creation": "2013-01-28 10:06:02",
|
||||
"custom": 0,
|
||||
"description": "**Currency** Master",
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"editable_grid": 0,
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "currency_name",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Currency Name",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "currency_name",
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "currency_name",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Currency Name",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "currency_name",
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 1
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "enabled",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Enabled",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "enabled",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Enabled",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "Sub-currency. For e.g. \"Cent\"",
|
||||
"fieldname": "fraction",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Fraction",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "Sub-currency. For e.g. \"Cent\"",
|
||||
"fieldname": "fraction",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Fraction",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "1 Currency = [?] Fraction\nFor e.g. 1 USD = 100 Cent",
|
||||
"fieldname": "fraction_units",
|
||||
"fieldtype": "Int",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Fraction Units",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "1 Currency = [?] Fraction\nFor e.g. 1 USD = 100 Cent",
|
||||
"fieldname": "fraction_units",
|
||||
"fieldtype": "Int",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Fraction Units",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "Smallest circulating fraction unit (coin). For e.g. 1 cent for USD and it should be entered as 0.01",
|
||||
"fieldname": "smallest_currency_fraction_value",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Smallest Currency Fraction Value",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "Smallest circulating fraction unit (coin). For e.g. 1 cent for USD and it should be entered as 0.01",
|
||||
"fieldname": "smallest_currency_fraction_value",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Smallest Currency Fraction Value",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "A symbol for this currency. For e.g. $",
|
||||
"fieldname": "symbol",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Symbol",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "A symbol for this currency. For e.g. $",
|
||||
"fieldname": "symbol",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Symbol",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "How should this currency be formatted? If not set, will use system defaults",
|
||||
"fieldname": "number_format",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Number Format",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "\n#,###.##\n#.###,##\n# ###.##\n# ###,##\n#'###.##\n#, ###.##\n#,##,###.##\n#,###.###\n#.###\n#,###",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "How should this currency be formatted? If not set, will use system defaults",
|
||||
"fieldname": "number_format",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Number Format",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "\n#,###.##\n#.###,##\n# ###.##\n# ###,##\n#'###.##\n#, ###.##\n#,##,###.##\n#,###.###\n#.###\n#,###",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"icon": "fa fa-bitcoin",
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-12-29 14:40:39.187557",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Geo",
|
||||
"name": "Currency",
|
||||
"owner": "Administrator",
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"icon": "fa fa-bitcoin",
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2018-08-29 06:37:19.908254",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Geo",
|
||||
"name": "Currency",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"is_custom": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"amend": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 1,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 0,
|
||||
"delete": 0,
|
||||
"email": 0,
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"is_custom": 0,
|
||||
"permlevel": 0,
|
||||
"print": 0,
|
||||
"read": 1,
|
||||
"report": 0,
|
||||
"role": "Accounts User",
|
||||
"set_user_permissions": 0,
|
||||
"share": 0,
|
||||
"submit": 0,
|
||||
"amend": 0,
|
||||
"cancel": 0,
|
||||
"create": 0,
|
||||
"delete": 0,
|
||||
"email": 0,
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 0,
|
||||
"read": 1,
|
||||
"report": 0,
|
||||
"role": "Accounts User",
|
||||
"set_user_permissions": 0,
|
||||
"share": 0,
|
||||
"submit": 0,
|
||||
"write": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 0,
|
||||
"delete": 0,
|
||||
"email": 0,
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"is_custom": 0,
|
||||
"permlevel": 0,
|
||||
"print": 0,
|
||||
"read": 1,
|
||||
"report": 0,
|
||||
"role": "Sales User",
|
||||
"set_user_permissions": 0,
|
||||
"share": 0,
|
||||
"submit": 0,
|
||||
"amend": 0,
|
||||
"cancel": 0,
|
||||
"create": 0,
|
||||
"delete": 0,
|
||||
"email": 0,
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 0,
|
||||
"read": 1,
|
||||
"report": 0,
|
||||
"role": "Sales User",
|
||||
"set_user_permissions": 0,
|
||||
"share": 0,
|
||||
"submit": 0,
|
||||
"write": 0
|
||||
},
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 0,
|
||||
"delete": 0,
|
||||
"email": 0,
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"is_custom": 0,
|
||||
"permlevel": 0,
|
||||
"print": 0,
|
||||
"read": 1,
|
||||
"report": 0,
|
||||
"role": "Purchase User",
|
||||
"set_user_permissions": 0,
|
||||
"share": 0,
|
||||
"submit": 0,
|
||||
"amend": 0,
|
||||
"cancel": 0,
|
||||
"create": 0,
|
||||
"delete": 0,
|
||||
"email": 0,
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 0,
|
||||
"read": 1,
|
||||
"report": 0,
|
||||
"role": "Purchase User",
|
||||
"set_user_permissions": 0,
|
||||
"share": 0,
|
||||
"submit": 0,
|
||||
"write": 0
|
||||
}
|
||||
],
|
||||
"quick_entry": 0,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1,
|
||||
"track_seen": 0
|
||||
],
|
||||
"quick_entry": 0,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"show_name_in_global_search": 0,
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1,
|
||||
"track_seen": 0,
|
||||
"track_views": 0
|
||||
}
|
||||
|
|
@ -5,7 +5,6 @@ from __future__ import unicode_literals
|
|||
import frappe
|
||||
from frappe import _
|
||||
import frappe.utils
|
||||
import frappe.async
|
||||
import frappe.sessions
|
||||
import frappe.utils.file_manager
|
||||
import frappe.desk.form.run_method
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ scheduler_events = {
|
|||
"frappe.desk.doctype.event.event.send_event_digest",
|
||||
"frappe.sessions.clear_expired_sessions",
|
||||
"frappe.email.doctype.notification.notification.trigger_daily_alerts",
|
||||
"frappe.async.remove_old_task_logs",
|
||||
"frappe.realtime.remove_old_task_logs",
|
||||
"frappe.utils.scheduler.disable_scheduler_on_expiry",
|
||||
"frappe.utils.scheduler.restrict_scheduler_events_if_dormant",
|
||||
"frappe.email.doctype.auto_email_report.auto_email_report.send_daily",
|
||||
|
|
|
|||
|
|
@ -1,32 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2017, Frappe Technologies and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.model.document import Document
|
||||
import datetime
|
||||
|
||||
class GoogleMaps(Document):
|
||||
def validate(self):
|
||||
if self.enabled:
|
||||
if not self.client_key:
|
||||
frappe.throw(_("Client key is required"))
|
||||
if not self.home_address:
|
||||
frappe.throw(_("Home Address is required"))
|
||||
|
||||
def round_timedelta(td, period):
|
||||
"""Round timedelta"""
|
||||
period_seconds = period.total_seconds()
|
||||
half_period_seconds = period_seconds / 2
|
||||
remainder = td.total_seconds() % period_seconds
|
||||
if remainder >= half_period_seconds:
|
||||
return datetime.timedelta(seconds=td.total_seconds() + (period_seconds - remainder))
|
||||
else:
|
||||
return datetime.timedelta(seconds=td.total_seconds() - remainder)
|
||||
|
||||
def format_address(address):
|
||||
"""Customer Address format """
|
||||
address = frappe.get_doc('Address', address)
|
||||
return '{}, {}, {}, {}'.format(address.address_line1, address.city, address.pincode, address.country)
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
// Copyright (c) 2017, Frappe Technologies and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on('Google Maps', {
|
||||
frappe.ui.form.on('Google Maps Settings', {
|
||||
});
|
||||
|
|
@ -14,6 +14,7 @@
|
|||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -40,10 +41,12 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -70,16 +73,18 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "home_address",
|
||||
"fieldtype": "Data",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
|
|
@ -90,6 +95,7 @@
|
|||
"label": "Home Address",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Address",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
|
|
@ -100,6 +106,7 @@
|
|||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
|
|
@ -113,16 +120,15 @@
|
|||
"issingle": 1,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-10-16 17:13:05.684227",
|
||||
"modified": "2018-08-21 14:53:09.170463",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Integrations",
|
||||
"name": "Google Maps",
|
||||
"name": "Google Maps Settings",
|
||||
"name_case": "",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"amend": 0,
|
||||
"apply_user_permissions": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
|
|
@ -148,5 +154,6 @@
|
|||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1,
|
||||
"track_seen": 0
|
||||
"track_seen": 0,
|
||||
"track_views": 0
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2017, Frappe Technologies and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.model.document import Document
|
||||
import googlemaps
|
||||
import datetime
|
||||
|
||||
class GoogleMapsSettings(Document):
|
||||
def validate(self):
|
||||
if self.enabled:
|
||||
if not self.client_key:
|
||||
frappe.throw(_("Client key is required"))
|
||||
if not self.home_address:
|
||||
frappe.throw(_("Home Address is required"))
|
||||
|
||||
def get_client(self):
|
||||
try:
|
||||
client = googlemaps.Client(key=self.client_key)
|
||||
except Exception as e:
|
||||
frappe.throw(e.message)
|
||||
|
||||
return client
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
// rename this file from _test_[name] to test_[name] to activate
|
||||
// and remove above this line
|
||||
|
||||
QUnit.test("test: Google Maps", function (assert) {
|
||||
QUnit.test("test: Google Maps Settings", function (assert) {
|
||||
let done = assert.async();
|
||||
|
||||
// number of asserts
|
||||
|
|
@ -10,7 +10,7 @@ QUnit.test("test: Google Maps", function (assert) {
|
|||
|
||||
frappe.run_serially([
|
||||
// insert a new Google Maps
|
||||
() => frappe.tests.make('Google Maps', [
|
||||
() => frappe.tests.make('Google Maps Settings', [
|
||||
// values to be set
|
||||
{key: 'value'}
|
||||
]),
|
||||
|
|
@ -4,5 +4,5 @@
|
|||
from __future__ import unicode_literals
|
||||
import unittest
|
||||
|
||||
class TestGoogleMaps(unittest.TestCase):
|
||||
class TestGoogleMapsSettings(unittest.TestCase):
|
||||
pass
|
||||
|
|
@ -451,10 +451,10 @@ class BaseDocument(object):
|
|||
# get a map of values ot fetch along with this link query
|
||||
# that are mapped as link_fieldname.source_fieldname in Options of
|
||||
# Readonly or Data or Text type fields
|
||||
fields_to_fetch = [
|
||||
_df for _df in self.meta.get_fields_to_fetch(df.fieldname)
|
||||
if not self.get(_df.fieldname)
|
||||
]
|
||||
|
||||
# NOTE: All fields will be replaced, if you want manual changes to stay
|
||||
# use `frm.add_fetch`
|
||||
fields_to_fetch = self.meta.get_fields_to_fetch(df.fieldname)
|
||||
|
||||
if not fields_to_fetch:
|
||||
# cache a single value type
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from frappe.model import default_fields
|
|||
from six import string_types
|
||||
|
||||
@frappe.whitelist()
|
||||
def make_mapped_doc(method, source_name, selected_children=None):
|
||||
def make_mapped_doc(method, source_name, selected_children=None, args=None):
|
||||
'''Returns the mapped document calling the given mapper method.
|
||||
Sets selected_children as flags for the `get_mapped_doc` method.
|
||||
|
||||
|
|
@ -22,6 +22,9 @@ def make_mapped_doc(method, source_name, selected_children=None):
|
|||
if selected_children:
|
||||
selected_children = json.loads(selected_children)
|
||||
|
||||
if args:
|
||||
frappe.flags.args = frappe._dict(json.loads(args))
|
||||
|
||||
frappe.flags.selected_children = selected_children or None
|
||||
|
||||
return method(source_name)
|
||||
|
|
|
|||
|
|
@ -9,13 +9,13 @@ execute:frappe.reload_doc('core', 'doctype', 'doctype', force=True) #2017-09-22
|
|||
execute:frappe.reload_doc('core', 'doctype', 'docfield', force=True) #2018-02-20
|
||||
execute:frappe.reload_doc('core', 'doctype', 'custom_docperm')
|
||||
execute:frappe.reload_doc('core', 'doctype', 'docperm') #2018-05-29
|
||||
frappe.patches.v8_0.drop_is_custom_from_docperm
|
||||
execute:frappe.reload_doc('core', 'doctype', 'module_def') #2017-09-22
|
||||
execute:frappe.reload_doc('core', 'doctype', 'version') #2017-04-01
|
||||
frappe.patches.v11_0.copy_fetch_data_from_options
|
||||
frappe.patches.v7_1.rename_scheduler_log_to_error_log
|
||||
frappe.patches.v6_1.rename_file_data
|
||||
frappe.patches.v7_0.re_route #2016-06-27
|
||||
frappe.patches.v8_0.drop_is_custom_from_docperm
|
||||
frappe.patches.v8_0.update_records_in_global_search #11-05-2017
|
||||
frappe.patches.v8_0.update_published_in_global_search
|
||||
frappe.patches.v11_0.replicate_old_user_permissions
|
||||
|
|
@ -223,3 +223,5 @@ frappe.patches.v11_0.replicate_old_user_permissions
|
|||
frappe.patches.v11_0.set_dropbox_file_backup
|
||||
frappe.patches.v11_0.get_docs_apps_if_not_present
|
||||
frappe.patches.v10_0.set_default_locking_time
|
||||
frappe.patches.v11_0.rename_google_maps_doctype
|
||||
frappe.patches.v10_0.modify_smallest_currency_fraction
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# MIT License. See license.txt
|
||||
|
||||
import frappe
|
||||
|
||||
def execute():
|
||||
frappe.db.set_value('Currency', 'USD', 'smallest_currency_fraction_value', '0.01')
|
||||
|
|
@ -24,8 +24,8 @@ def execute():
|
|||
|
||||
frappe.db.sql('''
|
||||
update `tabProperty Setter`
|
||||
set property="fetch_from"
|
||||
set property="fetch_from", name=concat(doc_type, '-', field_name, '-', property)
|
||||
where property="options" and value like '%.%'
|
||||
and property_type in ('Data', 'Read Only', 'Text', 'Small Text', 'Text Editor', 'Code', 'Link', 'Check')
|
||||
and field_name!='naming_series'
|
||||
''')
|
||||
''')
|
||||
|
|
@ -13,4 +13,4 @@ def execute():
|
|||
user.first_name = re.sub("[<>]+", '', frappe.safe_decode(user.first_name))
|
||||
if user.last_name:
|
||||
user.last_name = re.sub("[<>]+", '', frappe.safe_decode(user.last_name))
|
||||
create_contact(user)
|
||||
create_contact(user, ignore_links=True)
|
||||
|
|
|
|||
7
frappe/patches/v11_0/rename_google_maps_doctype.py
Normal file
7
frappe/patches/v11_0/rename_google_maps_doctype.py
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
import frappe
|
||||
from frappe.model.rename_doc import rename_doc
|
||||
|
||||
def execute():
|
||||
if frappe.db.exists("DocType","Google Maps") and not frappe.db.exists("DocType","Google Maps Settings"):
|
||||
rename_doc('DocType', 'Google Maps', 'Google Maps Settings')
|
||||
frappe.reload_doc('integrations', 'doctype', 'google_maps_settings')
|
||||
|
|
@ -5,7 +5,6 @@
|
|||
"public/less/website.less",
|
||||
"public/less/avatar.less",
|
||||
"node_modules/highlight.js/styles/zenburn.css",
|
||||
"public/js/lib/awesomplete/awesomplete.css",
|
||||
"public/less/form.less",
|
||||
"public/less/controls.less",
|
||||
"public/less/chat.less",
|
||||
|
|
@ -93,7 +92,6 @@
|
|||
],
|
||||
"css/desk.min.css": [
|
||||
"public/js/lib/datepicker/datepicker.min.css",
|
||||
"public/js/lib/awesomplete/awesomplete.css",
|
||||
"public/js/lib/summernote/summernote.css",
|
||||
"public/js/lib/leaflet/leaflet.css",
|
||||
"public/js/lib/leaflet/leaflet.draw.css",
|
||||
|
|
@ -150,6 +148,7 @@
|
|||
"public/js/frappe/format.js",
|
||||
"public/js/frappe/form/formatters.js",
|
||||
"public/js/frappe/dom.js",
|
||||
"public/js/frappe/event_emitter.js",
|
||||
"public/js/frappe/ui/messages.js",
|
||||
"public/js/frappe/ui/keyboard.js",
|
||||
"public/js/frappe/ui/colors.js",
|
||||
|
|
|
|||
36
frappe/public/js/frappe/event_emitter.js
Normal file
36
frappe/public/js/frappe/event_emitter.js
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
frappe.provide('frappe.utils');
|
||||
/**
|
||||
* Simple EventEmitter which uses jQuery's event system
|
||||
*/
|
||||
class EventEmitter {
|
||||
init() {
|
||||
this.jq = jQuery(this);
|
||||
}
|
||||
|
||||
trigger(evt, data) {
|
||||
!this.jq && this.init();
|
||||
this.jq.trigger(evt, data);
|
||||
}
|
||||
|
||||
once(evt, handler) {
|
||||
!this.jq && this.init();
|
||||
this.jq.one(evt, (e, data) => handler(data));
|
||||
}
|
||||
|
||||
on(evt, handler) {
|
||||
!this.jq && this.init();
|
||||
this.jq.bind(evt, (e, data) => handler(data));
|
||||
}
|
||||
|
||||
off(evt, handler) {
|
||||
!this.jq && this.init();
|
||||
this.jq.unbind(evt, (e, data) => handler(data));
|
||||
}
|
||||
}
|
||||
|
||||
frappe.utils.make_event_emitter = function(object) {
|
||||
Object.assign(object, EventEmitter.prototype);
|
||||
return object;
|
||||
};
|
||||
|
||||
export default EventEmitter;
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
frappe.ui.form.ControlFloat = frappe.ui.form.ControlInt.extend({
|
||||
parse: function(value) {
|
||||
value = this.eval_expression(value);
|
||||
return isNaN(parseFloat(value)) ? null : flt(value, this.get_precision());
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,19 @@ frappe.ui.form.ControlInt = frappe.ui.form.ControlData.extend({
|
|||
return false;
|
||||
});
|
||||
},
|
||||
eval_expression: function(value) {
|
||||
if (typeof value==='string' && value.match(/^[0-9+-/* ]+$/)) {
|
||||
try {
|
||||
return eval(value);
|
||||
} catch (e) {
|
||||
// bad expression
|
||||
return value;
|
||||
}
|
||||
} else {
|
||||
return value;
|
||||
}
|
||||
},
|
||||
parse: function(value) {
|
||||
return cint(value, null);
|
||||
return cint(this.eval_expression(value), null);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ frappe.ui.form.ControlMultiCheck = frappe.ui.form.Control.extend({
|
|||
this.select_options(this.selected_options);
|
||||
},
|
||||
|
||||
|
||||
set_options() {
|
||||
this.$load_state.show();
|
||||
this.$select_buttons.hide();
|
||||
|
|
@ -65,7 +66,10 @@ frappe.ui.form.ControlMultiCheck = frappe.ui.form.Control.extend({
|
|||
this.$load_state.hide();
|
||||
this.$checkbox_area.empty();
|
||||
this.options.forEach(option => {
|
||||
this.get_checkbox_element(option).appendTo(this.$checkbox_area);
|
||||
let checkbox = this.get_checkbox_element(option).appendTo(this.$checkbox_area);
|
||||
if (option.danger) {
|
||||
checkbox.find('.label-area').addClass('text-danger');
|
||||
}
|
||||
});
|
||||
if(this.df.select_all) {
|
||||
this.setup_select_all();
|
||||
|
|
|
|||
|
|
@ -170,7 +170,6 @@ frappe.ui.form.AssignToDialog = Class.extend({
|
|||
me.get_field("assign_to").$wrapper.toggle(false);
|
||||
} else {
|
||||
me.set_value("assign_to", "");
|
||||
me.set_value("notify", 1);
|
||||
me.get_field("notify").$wrapper.toggle(true);
|
||||
me.get_field("assign_to").$wrapper.toggle(true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -118,7 +118,6 @@ frappe.ui.form.Timeline = Class.extend({
|
|||
this.wrapper.toggle(true);
|
||||
this.list.empty();
|
||||
this.comment_area.val('');
|
||||
|
||||
var communications = this.get_communications(true);
|
||||
var views = this.get_view_logs();
|
||||
|
||||
|
|
@ -180,7 +179,6 @@ frappe.ui.form.Timeline = Class.extend({
|
|||
} else {
|
||||
var $edit_btn = $(this);
|
||||
var content = $timeline_item.find('.timeline-item-content').html();
|
||||
|
||||
$edit_btn
|
||||
.text("Save")
|
||||
.find('i')
|
||||
|
|
@ -300,7 +298,6 @@ frappe.ui.form.Timeline = Class.extend({
|
|||
c.original_content = c.content;
|
||||
c.content = frappe.utils.toggle_blockquote(c.content);
|
||||
}
|
||||
|
||||
if(!frappe.utils.is_html(c.content)) {
|
||||
c.content_html = frappe.markdown(__(c.content));
|
||||
} else {
|
||||
|
|
@ -314,7 +311,17 @@ frappe.ui.form.Timeline = Class.extend({
|
|||
// avoid adding <b> tag a 2nd time
|
||||
!c.content_html.match(/(^|\W)<b>(@[^\s]+)<\/b>/)
|
||||
) {
|
||||
c.content_html = c.content_html.replace(/(^|\W)(@[^\s]+)/g, "$1<b>$2</b>");
|
||||
/*
|
||||
Replace the email ids by only displaying the string which
|
||||
occurs before the second `@` to enhance the mentions.
|
||||
Eg.
|
||||
@abc@a-example.com will be converted to
|
||||
@abc with the below line of code.
|
||||
*/
|
||||
|
||||
c.content_html = c.content_html.replace(/(<[a][^>]*>)/g, "");
|
||||
// bold the @mentions
|
||||
c.content_html = c.content_html.replace(/(@[^\s@]*)@[^\s@|<]*/g, "<b>$1</b>");
|
||||
}
|
||||
|
||||
if (this.is_communication_or_comment(c)) {
|
||||
|
|
@ -670,7 +677,7 @@ frappe.ui.form.Timeline = Class.extend({
|
|||
var valid_users = Object.keys(frappe.boot.user_info)
|
||||
.filter(user => !["Administrator", "Guest"].includes(user));
|
||||
|
||||
return valid_users.map(user => frappe.boot.user_info[user].name);
|
||||
return valid_users.map(user => frappe.boot.user_info[user].email);
|
||||
},
|
||||
|
||||
setup_comment_like: function() {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<div class="media timeline-item {% if (data.user_content) { %} user-content {% } else { %} notification-content {% } %}" data-doctype="{{ data.doctype }}" data-name="{%= data.name %}">
|
||||
<div class="media timeline-item {% if (data.user_content) { %} user-content {% } else { %} notification-content {% } %}" data-doctype="{{ data.doctype }}" data-name="{%= data.name %}" data-communication-type = "{{ data.communication_type }}">
|
||||
{% if (data.user_content) { %}
|
||||
<span class="pull-left avatar avatar-medium hidden-xs" style="margin-top: 1px">
|
||||
{% if(data.user_info.image) { %}
|
||||
|
|
|
|||
|
|
@ -366,11 +366,11 @@ export default class Grid {
|
|||
return data;
|
||||
}
|
||||
get_modal_data() {
|
||||
return this.df.get_data().filter(data => {
|
||||
return this.df.get_data ? this.df.get_data().filter(data => {
|
||||
if (!this.deleted_docs || !in_list(this.deleted_docs, data.name)) {
|
||||
return data;
|
||||
}
|
||||
});
|
||||
}) : [];
|
||||
}
|
||||
set_column_disp(fieldname, show) {
|
||||
if($.isArray(fieldname)) {
|
||||
|
|
|
|||
|
|
@ -316,7 +316,7 @@ frappe.ui.form.Layout = Class.extend({
|
|||
fieldobj.perm = me.frm.perm;
|
||||
}
|
||||
}
|
||||
refresh && fieldobj.refresh && fieldobj.refresh();
|
||||
refresh && fieldobj.df && fieldobj.refresh && fieldobj.refresh();
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ frappe.ui.form.QuickEntryForm = Class.extend({
|
|||
|
||||
this.validate_for_prompt_autoname();
|
||||
|
||||
if (this.too_many_mandatory_fields() || this.has_child_table()
|
||||
if (this.has_child_table()
|
||||
|| !this.mandatory.length) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -212,7 +212,7 @@ frappe.ui.form.QuickEntryForm = Class.extend({
|
|||
|
||||
render_edit_in_full_page_link: function(){
|
||||
var me = this;
|
||||
var $link = $('<div style="padding-left: 7px; padding-top: 15px; padding-bottom: 10px;">' +
|
||||
var $link = $('<div style="padding-left: 7px; padding-top: 30px; padding-bottom: 10px;">' +
|
||||
'<button class="edit-full btn-default btn-sm">' + __("Edit in full page") + '</button></div>').appendTo(this.dialog.body);
|
||||
|
||||
$link.find('.edit-full').on('click', function() {
|
||||
|
|
|
|||
|
|
@ -84,7 +84,8 @@ window.format_number = function (v, format, decimals) {
|
|||
|
||||
v = flt(v, decimals, format);
|
||||
|
||||
if (v < 0) var is_negative = true;
|
||||
let is_negative = false;
|
||||
if (v < 0) is_negative = true;
|
||||
v = Math.abs(v);
|
||||
|
||||
v = v.toFixed(decimals);
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ function prettyDate(time, mini) {
|
|||
}
|
||||
|
||||
|
||||
frappe.provide("frappe.datetime");
|
||||
window.comment_when = function(datetime, mini) {
|
||||
var timestamp = frappe.datetime.str_to_user ?
|
||||
frappe.datetime.str_to_user(datetime) : datetime;
|
||||
|
|
@ -67,8 +68,8 @@ window.comment_when = function(datetime, mini) {
|
|||
+ '" title="' + timestamp + '">'
|
||||
+ prettyDate(datetime, mini) + '</span>';
|
||||
};
|
||||
frappe.datetime.comment_when = comment_when;
|
||||
|
||||
frappe.provide("frappe.datetime");
|
||||
frappe.datetime.refresh_when = function() {
|
||||
if (jQuery) {
|
||||
$(".frappe-timestamp").each(function() {
|
||||
|
|
|
|||
|
|
@ -301,6 +301,7 @@ $.extend(frappe.model, {
|
|||
args: {
|
||||
method: opts.method,
|
||||
source_name: opts.source_name,
|
||||
args: opts.args || null,
|
||||
selected_children: opts.frm ? opts.frm.get_selected() : null
|
||||
},
|
||||
freeze: true,
|
||||
|
|
|
|||
|
|
@ -177,4 +177,7 @@ $(window).on('hashchange', function() {
|
|||
|
||||
frappe.route();
|
||||
|
||||
frappe.route.trigger('change');
|
||||
});
|
||||
|
||||
frappe.utils.make_event_emitter(frappe.route);
|
||||
|
|
|
|||
|
|
@ -207,13 +207,20 @@ frappe.ui.BaseList = Class.extend({
|
|||
fieldtype = 'Data';
|
||||
condition = 'like';
|
||||
}
|
||||
if(df.fieldtype == "Select" && df.options) {
|
||||
|
||||
if (df.fieldtype === "Select" && df.options) {
|
||||
options = df.options.split("\n");
|
||||
if(options.length > 0 && options[0] != "") {
|
||||
options.unshift("");
|
||||
options = options.join("\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (df.fieldtype === 'Data' && df.options) {
|
||||
// don't format email / number in filters
|
||||
options = '';
|
||||
}
|
||||
|
||||
let f = me.page.add_field({
|
||||
fieldtype: fieldtype,
|
||||
label: __(df.label),
|
||||
|
|
|
|||
|
|
@ -265,7 +265,7 @@ frappe.hide_progress = function() {
|
|||
}
|
||||
|
||||
// Floating Message
|
||||
frappe.show_alert = function(message, seconds=7) {
|
||||
frappe.show_alert = function(message, seconds=7, actions={}) {
|
||||
if(typeof message==='string') {
|
||||
message = {
|
||||
message: message
|
||||
|
|
@ -306,6 +306,10 @@ frappe.show_alert = function(message, seconds=7) {
|
|||
return false;
|
||||
});
|
||||
|
||||
Object.keys(actions).map(key => {
|
||||
div.find(`[data-action=${key}]`).on('click', actions[key]);
|
||||
});
|
||||
|
||||
div.delay(seconds * 1000).fadeOut(300);
|
||||
return div;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -288,9 +288,13 @@ frappe.search.SearchDialog = Class.extend({
|
|||
}
|
||||
|
||||
if(result.image) {
|
||||
$result.append('<div class="result-image"><img data-name="' + result.label + '" src="'+ result.image +'" alt="' + result.label + '"></div>');
|
||||
$result.append('<a '+ get_link(result) +
|
||||
'><div class="result-image"><img data-name="' + result.label
|
||||
+ '" src="'+ result.image +'" alt="' + result.label + '"></div></a>');
|
||||
} else if (result.image === null) {
|
||||
$result.append('<div class="result-image"><div class="flex-text"><span>'+ frappe.get_abbr(result.label) +'</span></div></div>');
|
||||
$result.append('<a '+ get_link(result) +
|
||||
'><div class="result-image"><div class="flex-text"><span>'
|
||||
+ frappe.get_abbr(result.label) +'</span></div></div></a>');
|
||||
}
|
||||
|
||||
var title_html = '<a '+ get_link(result) +' class="module-section-link small">'+ result.label +'</a>';
|
||||
|
|
@ -303,7 +307,7 @@ frappe.search.SearchDialog = Class.extend({
|
|||
if(result.route_options) {
|
||||
frappe.route_options = result.route_options;
|
||||
}
|
||||
$result_text.on('click', (e) => {
|
||||
$result.on('click', (e) => {
|
||||
this.search_dialog.hide();
|
||||
if(result.onclick) {
|
||||
result.onclick(result.match);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
// MIT License. See license.txt
|
||||
|
||||
frappe.provide("frappe.views.calendar");
|
||||
|
|
@ -26,7 +26,7 @@ frappe.views.CalendarView = class CalendarView extends frappe.views.ListView {
|
|||
|
||||
setup_defaults() {
|
||||
super.setup_defaults();
|
||||
this.page_title = this.page_title + ' ' + __('Calendar');
|
||||
this.page_title = __('{0} Calendar', [this.page_title]);
|
||||
this.calendar_settings = frappe.views.calendar[this.doctype] || {};
|
||||
this.calendar_name = frappe.get_route()[3];
|
||||
}
|
||||
|
|
@ -49,13 +49,13 @@ frappe.views.CalendarView = class CalendarView extends frappe.views.ListView {
|
|||
}
|
||||
|
||||
this.load_lib
|
||||
.then(() => this.get_calendar_options())
|
||||
.then(() => this.get_calendar_preferences())
|
||||
.then(options => {
|
||||
this.calendar = new frappe.views.Calendar(options);
|
||||
});
|
||||
}
|
||||
|
||||
get_calendar_options() {
|
||||
get_calendar_preferences() {
|
||||
const options = {
|
||||
doctype: this.doctype,
|
||||
parent: this.$result,
|
||||
|
|
@ -97,9 +97,24 @@ frappe.views.CalendarView = class CalendarView extends frappe.views.ListView {
|
|||
frappe.views.Calendar = Class.extend({
|
||||
init: function(options) {
|
||||
$.extend(this, options);
|
||||
this.make_page();
|
||||
this.setup_options();
|
||||
this.make();
|
||||
this.get_default_options();
|
||||
},
|
||||
get_default_options: function() {
|
||||
return new Promise ((resolve) => {
|
||||
let defaultView = localStorage.getItem('cal_defaultView');
|
||||
let weekends = localStorage.getItem('cal_weekends');
|
||||
let defaults = {
|
||||
'defaultView': defaultView ? defaultView : "month",
|
||||
'weekends': weekends ? weekends : true
|
||||
};
|
||||
resolve(defaults);
|
||||
}).then(defaults => {
|
||||
this.make_page();
|
||||
this.setup_options(defaults);
|
||||
this.make();
|
||||
this.setup_view_mode_button(defaults);
|
||||
this.bind();
|
||||
});
|
||||
},
|
||||
make_page: function() {
|
||||
var me = this;
|
||||
|
|
@ -129,6 +144,33 @@ frappe.views.Calendar = Class.extend({
|
|||
this.$cal.fullCalendar(this.cal_options);
|
||||
this.set_css();
|
||||
},
|
||||
setup_view_mode_button: function(defaults) {
|
||||
var me = this;
|
||||
$(me.footnote_area).find('.btn-weekend').detach();
|
||||
let btnTitle = (defaults.weekends) ? __('Hide Weekends') : __('Show Weekends');
|
||||
const btn = `<button class="btn btn-default btn-xs btn-weekend">${btnTitle}</button>`;
|
||||
me.footnote_area.append(btn);
|
||||
},
|
||||
set_localStorage_option: function(option, value) {
|
||||
localStorage.removeItem(option);
|
||||
localStorage.setItem(option, value);
|
||||
},
|
||||
bind: function() {
|
||||
const me = this;
|
||||
let btn_group = me.$wrapper.find(".fc-button-group");
|
||||
btn_group.on("click", ".btn", function() {
|
||||
let value = ($(this).hasClass('fc-agendaWeek-button')) ? 'agendaWeek' : (($(this).hasClass('fc-agendaDay-button')) ? 'agendaDay' : 'month');
|
||||
me.set_localStorage_option("cal_defaultView", value);
|
||||
});
|
||||
|
||||
me.$wrapper.on("click", ".btn-weekend", function() {
|
||||
me.cal_options.weekends = !me.cal_options.weekends;
|
||||
me.$cal.fullCalendar('option', 'weekends', me.cal_options.weekends);
|
||||
me.set_localStorage_option("cal_weekends", me.cal_options.weekends);
|
||||
me.set_css();
|
||||
me.setup_view_mode_button(me.cal_options);
|
||||
});
|
||||
},
|
||||
set_css: function() {
|
||||
// flatify buttons
|
||||
this.$wrapper.find("button.fc-state-default")
|
||||
|
|
@ -166,19 +208,22 @@ frappe.views.Calendar = Class.extend({
|
|||
date._offset = moment.user_utc_offset;
|
||||
return frappe.datetime.convert_to_system_tz(date);
|
||||
},
|
||||
setup_options: function() {
|
||||
setup_options: function(defaults) {
|
||||
var me = this;
|
||||
this.cal_options = {
|
||||
locale: frappe.boot.user.language || "en",
|
||||
header: {
|
||||
left: 'title',
|
||||
center: '',
|
||||
right: 'prev,next month,agendaWeek,agendaDay'
|
||||
right: 'prev,today,next month,agendaWeek,agendaDay'
|
||||
},
|
||||
editable: true,
|
||||
selectable: true,
|
||||
selectHelper: true,
|
||||
forceEventDuration: true,
|
||||
defaultView: defaults.defaultView,
|
||||
weekends: defaults.weekends,
|
||||
nowIndicator: true,
|
||||
events: function(start, end, timezone, callback) {
|
||||
return frappe.call({
|
||||
method: me.get_events_method || "frappe.desk.calendar.get_events",
|
||||
|
|
|
|||
|
|
@ -719,7 +719,7 @@ frappe.views.ReportView = class ReportView extends frappe.views.ListView {
|
|||
setup_columns() {
|
||||
const hide_columns = ['docstatus'];
|
||||
const fields = this.fields.filter(f => !hide_columns.includes(f[0]));
|
||||
this.columns = fields.map(f => this.build_column(f));
|
||||
this.columns = fields.map(f => this.build_column(f)).filter(Boolean);
|
||||
}
|
||||
|
||||
build_column(c) {
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
transition: .3s cubic-bezier(.4,.2,.5,1.4);
|
||||
transform-origin: 1.43em -.43em;
|
||||
}
|
||||
|
||||
|
||||
.awesomplete > ul[hidden],
|
||||
.awesomplete > ul:empty {
|
||||
opacity: 0;
|
||||
|
|
@ -78,25 +78,25 @@
|
|||
padding: .2em .5em;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
.awesomplete > ul > li:hover {
|
||||
background: hsl(200, 40%, 80%);
|
||||
color: black;
|
||||
}
|
||||
|
||||
|
||||
.awesomplete > ul > li[aria-selected="true"] {
|
||||
background: hsl(205, 40%, 40%);
|
||||
color: white;
|
||||
}
|
||||
|
||||
|
||||
.awesomplete mark {
|
||||
background: hsl(65, 100%, 50%);
|
||||
}
|
||||
|
||||
|
||||
.awesomplete li:hover mark {
|
||||
background: hsl(68, 100%, 41%);
|
||||
}
|
||||
|
||||
|
||||
.awesomplete li[aria-selected="true"] mark {
|
||||
background: hsl(86, 100%, 21%);
|
||||
color: inherit;
|
||||
|
|
|
|||
80
frappe/public/less/awesomplete.less
Normal file
80
frappe/public/less/awesomplete.less
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
.awesomplete {
|
||||
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
|
||||
[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.visually-hidden {
|
||||
position: absolute;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
&> input {
|
||||
display: block;
|
||||
}
|
||||
|
||||
width: 100%;
|
||||
|
||||
&> ul:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&> ul {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
min-width: 100%;
|
||||
box-sizing: border-box;
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
background: #fff;
|
||||
transition: none;
|
||||
background-color: #fff;
|
||||
max-height: 200px;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
border-radius: 0px 0px 4px 4px;
|
||||
box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176);
|
||||
border: 1px solid @border-color;
|
||||
z-index: 1041 !important;
|
||||
text-shadow: none;
|
||||
|
||||
li[aria-selected="true"] mark, mark {
|
||||
padding: 0px;
|
||||
background-color: inherit;
|
||||
}
|
||||
|
||||
&> li {
|
||||
cursor: pointer;
|
||||
font-size: 12px;
|
||||
padding: 9px 11.8px;
|
||||
}
|
||||
|
||||
&> li .link-option {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
&> li:hover, &> li[aria-selected=true] {
|
||||
background-color: @btn-bg;
|
||||
color: @text-color;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 3px 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: @screen-sm) {
|
||||
&>ul {
|
||||
top: 26px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
@import "variables.less";
|
||||
@import "mixins.less";
|
||||
@import "common.less";
|
||||
@import "awesomplete.less";
|
||||
|
||||
.unit-checkbox {
|
||||
color: #36414c;
|
||||
|
|
@ -42,56 +43,3 @@
|
|||
z-index: 3;
|
||||
}
|
||||
|
||||
.awesomplete {
|
||||
width: 100%;
|
||||
|
||||
&> ul {
|
||||
z-index: 1041 !important;
|
||||
transition: none;
|
||||
background-color: #fff;
|
||||
max-height: 200px;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
border-radius: 0px 0px 4px 4px;
|
||||
box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176);
|
||||
border-color: @border-color;
|
||||
|
||||
&:before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
li[aria-selected="true"] mark, mark {
|
||||
padding: 0px;
|
||||
background-color: inherit;
|
||||
}
|
||||
|
||||
&> li {
|
||||
font-size: 12px;
|
||||
padding: 9px 11.8px;
|
||||
}
|
||||
|
||||
&> li .link-option {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
&> li:hover, &> li[aria-selected=true] {
|
||||
background-color: @btn-bg;
|
||||
color: @text-color;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 3px 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: @screen-sm) {
|
||||
&>ul {
|
||||
top: 26px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -206,60 +206,6 @@ textarea.form-control {
|
|||
display: none;
|
||||
}
|
||||
|
||||
.awesomplete {
|
||||
width: 100%;
|
||||
|
||||
&> ul {
|
||||
z-index: 1041 !important;
|
||||
transition: none;
|
||||
background-color: #fff;
|
||||
max-height: 200px;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
border-radius: 0px 0px 4px 4px;
|
||||
box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176);
|
||||
border-color: @border-color;
|
||||
|
||||
&:before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
li[aria-selected="true"] mark, mark {
|
||||
padding: 0px;
|
||||
background-color: inherit;
|
||||
}
|
||||
|
||||
&> li {
|
||||
font-size: 12px;
|
||||
padding: 9px 11.8px;
|
||||
}
|
||||
|
||||
&> li .link-option {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
&> li:hover, &> li[aria-selected=true] {
|
||||
background-color: @btn-bg;
|
||||
color: @text-color;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 3px 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: @screen-sm) {
|
||||
&>ul {
|
||||
top: 26px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.barcode-wrapper {
|
||||
text-align: center;
|
||||
}
|
||||
|
|
@ -1159,7 +1105,7 @@ img.no-image {
|
|||
width: 100%;
|
||||
}
|
||||
|
||||
img.no-image:before {
|
||||
.img-background() {
|
||||
content: " ";
|
||||
display: block;
|
||||
position: absolute;
|
||||
|
|
@ -1169,7 +1115,7 @@ img.no-image:before {
|
|||
background-color: @light-bg;
|
||||
}
|
||||
|
||||
img.no-image:after {
|
||||
.img-foreground() {
|
||||
content: "\f1c5";
|
||||
display: block;
|
||||
font-style: normal;
|
||||
|
|
@ -1183,4 +1129,22 @@ img.no-image:after {
|
|||
left: 0;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
img.no-image:before {
|
||||
.img-background();
|
||||
}
|
||||
|
||||
img.no-image:after {
|
||||
.img-foreground();
|
||||
}
|
||||
|
||||
img.img-loading:before {
|
||||
.img-background();
|
||||
}
|
||||
|
||||
img.img-loading:after {
|
||||
.img-foreground();
|
||||
font-family: 'Octicons';
|
||||
content: "\f00b";
|
||||
}
|
||||
|
|
@ -352,6 +352,12 @@ h6.uppercase, .h6.uppercase {
|
|||
}
|
||||
}
|
||||
|
||||
.timeline-item[data-communication-type="Comment"] {
|
||||
.reply {
|
||||
background-color: @light-yellow;
|
||||
}
|
||||
}
|
||||
|
||||
.timeline-items {
|
||||
position: relative;
|
||||
}
|
||||
|
|
|
|||
46
frappe/templates/includes/list/filters.js
Normal file
46
frappe/templates/includes/list/filters.js
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
function setup_list_filters() {
|
||||
const { web_form_doctype, web_form_name } = web_form_settings;
|
||||
|
||||
frappe.call('frappe.website.doctype.web_form.web_form.get_form_data', {
|
||||
doctype: web_form_doctype, web_form_name
|
||||
})
|
||||
.then((r) => {
|
||||
if (!r.message) return;
|
||||
const web_form = r.message.web_form;
|
||||
|
||||
web_form_filters = web_form.web_form_fields.filter(df => {
|
||||
return df.show_in_filter
|
||||
&& !['Text', 'Text Editor', 'Attach', 'Attach Image', 'Read Only'].includes(df.fieldtype)
|
||||
&& !df.readonly
|
||||
}).map(df => {
|
||||
const value = frappe.utils.get_query_params()[df.fieldname];
|
||||
const f = frappe.ui.form.make_control({
|
||||
df: {
|
||||
fieldname: df.fieldname,
|
||||
fieldtype: df.fieldtype,
|
||||
label: df.label,
|
||||
options: df.options,
|
||||
change: (e) => {
|
||||
const query_params = Object.assign(frappe.utils.get_query_params(), {
|
||||
[df.fieldname]: f.get_value()
|
||||
})
|
||||
const query_string = frappe.utils.make_query_string(query_params);
|
||||
window.location.replace(query_string)
|
||||
}
|
||||
},
|
||||
parent: $('.list-filters'),
|
||||
render_input: true
|
||||
});
|
||||
|
||||
$(f.wrapper).addClass('col-md-3');
|
||||
|
||||
if (value) {
|
||||
f.set_input(value);
|
||||
}
|
||||
|
||||
return f;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
frappe.ready(setup_list_filters);
|
||||
|
|
@ -25,7 +25,8 @@ def xmlrunner_wrapper(output):
|
|||
return _runner
|
||||
|
||||
def main(app=None, module=None, doctype=None, verbose=False, tests=(),
|
||||
force=False, profile=False, junit_xml_output=None, ui_tests=False, doctype_list_path=None):
|
||||
force=False, profile=False, junit_xml_output=None, ui_tests=False,
|
||||
doctype_list_path=None, skip_test_records=False):
|
||||
global unittest_runner
|
||||
|
||||
if doctype_list_path:
|
||||
|
|
@ -55,10 +56,11 @@ def main(app=None, module=None, doctype=None, verbose=False, tests=(),
|
|||
frappe.utils.scheduler.disable_scheduler()
|
||||
set_test_email_config()
|
||||
|
||||
if verbose:
|
||||
print('Running "before_tests" hooks')
|
||||
for fn in frappe.get_hooks("before_tests", app_name=app):
|
||||
frappe.get_attr(fn)()
|
||||
if not frappe.flags.skip_before_tests:
|
||||
if verbose:
|
||||
print('Running "before_tests" hooks')
|
||||
for fn in frappe.get_hooks("before_tests", app_name=app):
|
||||
frappe.get_attr(fn)()
|
||||
|
||||
if doctype:
|
||||
ret = run_tests_for_doctype(doctype, verbose, tests, force, profile)
|
||||
|
|
@ -243,6 +245,9 @@ def make_test_records(doctype, verbose=0, force=False):
|
|||
if not frappe.db:
|
||||
frappe.connect()
|
||||
|
||||
if frappe.flags.skip_test_records:
|
||||
return
|
||||
|
||||
for options in get_dependencies(doctype):
|
||||
if options == "[Select]":
|
||||
continue
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ class TestScheduler(TestCase):
|
|||
self.assertTrue("all" in frappe.flags.ran_schedulers)
|
||||
self.assertTrue("hourly" in frappe.flags.ran_schedulers)
|
||||
|
||||
del frappe.flags['enabled_events']
|
||||
frappe.flags.enabled_events = None
|
||||
|
||||
def test_enabled_events_day_change(self):
|
||||
val = json.dumps(["daily", "daily_long", "weekly", "weekly_long", "monthly", "monthly_long"])
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# MIT License. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import unittest
|
||||
import frappe
|
||||
from frappe.desk.search import search_link
|
||||
|
||||
from frappe.desk.search import search_widget
|
||||
|
||||
class TestSearch(unittest.TestCase):
|
||||
def test_search_field_sanitizer(self):
|
||||
|
|
@ -38,3 +38,15 @@ class TestSearch(unittest.TestCase):
|
|||
self.assertRaises(frappe.DataError,
|
||||
search_link, 'DocType', 'Customer', query=None, filters=None,
|
||||
page_length=20, searchfield=';')
|
||||
|
||||
#Search for the word "pay", part of the word "pays" (country) in french.
|
||||
def test_link_search_in_foreign_language(self):
|
||||
frappe.local.lang = 'fr'
|
||||
search_widget(doctype="DocType", txt="pay", page_length=20)
|
||||
output = frappe.response["values"]
|
||||
|
||||
result = [['found' for x in y if x=="Country"] for y in output]
|
||||
self.assertTrue(['found'] in result)
|
||||
|
||||
def tearDown(self):
|
||||
frappe.local.lang = 'en'
|
||||
|
|
|
|||
|
|
@ -452,13 +452,14 @@ def get_server_messages(app):
|
|||
"""Extracts all translatable strings (tagged with :func:`frappe._`) from Python modules
|
||||
inside an app"""
|
||||
messages = []
|
||||
file_extensions = ('.py', '.html', '.js', '.vue')
|
||||
for basepath, folders, files in os.walk(frappe.get_pymodule_path(app)):
|
||||
for dontwalk in (".git", "public", "locale"):
|
||||
if dontwalk in folders: folders.remove(dontwalk)
|
||||
|
||||
for f in files:
|
||||
f = frappe.as_unicode(f)
|
||||
if f.endswith(".py") or f.endswith(".html") or f.endswith(".js"):
|
||||
if f.endswith(file_extensions):
|
||||
messages.extend(get_messages_from_file(os.path.join(basepath, f)))
|
||||
|
||||
return messages
|
||||
|
|
@ -506,7 +507,7 @@ def extract_messages_from_code(code, is_py=False):
|
|||
:param code: code from which translatable files are to be extracted
|
||||
:param is_py: include messages in triple quotes e.g. `_('''message''')`"""
|
||||
try:
|
||||
code = render_include(code)
|
||||
code = frappe.as_unicode(render_include(code))
|
||||
except (TemplateError, ImportError, InvalidIncludePath):
|
||||
# Exception will occur when it encounters John Resig's microtemplating code
|
||||
pass
|
||||
|
|
|
|||
|
|
@ -202,7 +202,12 @@ def get_queue(queue, is_async=True):
|
|||
'''Returns a Queue object tied to a redis connection'''
|
||||
validate_queue(queue)
|
||||
|
||||
return Queue(queue, connection=get_redis_conn(), async=is_async)
|
||||
kwargs = {
|
||||
'connection': get_redis_conn(),
|
||||
'async': is_async
|
||||
}
|
||||
|
||||
return Queue(queue, **kwargs)
|
||||
|
||||
def validate_queue(queue, default_queue_list=None):
|
||||
if not default_queue_list:
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ def get_match_feedback(match, is_sole_match):
|
|||
_("Try to avoid repeated words and characters")
|
||||
],
|
||||
}
|
||||
if len(match.get("repeated_char")) == 1:
|
||||
if match.get("repeated_char") and len(match.get("repeated_char")) == 1:
|
||||
feedback = {
|
||||
"warning": _('Repeats like "aaa" are easy to guess'),
|
||||
"suggestions": [
|
||||
|
|
|
|||
|
|
@ -17,17 +17,64 @@ standard_format = "templates/print_formats/standard.html"
|
|||
|
||||
@frappe.whitelist()
|
||||
def download_multi_pdf(doctype, name, format=None):
|
||||
# name can include names of many docs of the same doctype.
|
||||
"""
|
||||
Concatenate multiple docs as PDF .
|
||||
|
||||
Returns a PDF compiled by concatenating multiple documents. The documents
|
||||
can be from a single DocType or multiple DocTypes
|
||||
|
||||
Note: The design may seem a little weird, but it exists exists to
|
||||
ensure backward compatibility. The correct way to use this function is to
|
||||
pass a dict to doctype as described below
|
||||
|
||||
NEW FUNCTIONALITY
|
||||
=================
|
||||
Parameters:
|
||||
doctype (dict):
|
||||
key (string): DocType name
|
||||
value (list): of strings of doc names which need to be concatenated and printed
|
||||
name (string):
|
||||
name of the pdf which is generated
|
||||
format:
|
||||
Print Format to be used
|
||||
|
||||
Returns:
|
||||
PDF: A PDF generated by the concatenation of the mentioned input docs
|
||||
|
||||
OLD FUNCTIONALITY - soon to be deprecated
|
||||
=========================================
|
||||
Parameters:
|
||||
doctype (string):
|
||||
name of the DocType to which the docs belong which need to be printed
|
||||
name (string or list):
|
||||
If string the name of the doc which needs to be printed
|
||||
If list the list of strings of doc names which needs to be printed
|
||||
format:
|
||||
Print Format to be used
|
||||
|
||||
Returns:
|
||||
PDF: A PDF generated by the concatenation of the mentioned input docs
|
||||
"""
|
||||
|
||||
import json
|
||||
result = json.loads(name)
|
||||
|
||||
# Concatenating pdf files
|
||||
output = PdfFileWriter()
|
||||
for i, ss in enumerate(result):
|
||||
output = frappe.get_print(doctype, ss, format, as_pdf = True, output = output)
|
||||
|
||||
frappe.local.response.filename = "{doctype}.pdf".format(doctype=doctype.replace(" ", "-").replace("/", "-"))
|
||||
if not isinstance(doctype, dict):
|
||||
result = json.loads(name)
|
||||
|
||||
# Concatenating pdf files
|
||||
for i, ss in enumerate(result):
|
||||
output = frappe.get_print(doctype, ss, format, as_pdf = True, output = output)
|
||||
frappe.local.response.filename = "{doctype}.pdf".format(doctype=doctype.replace(" ", "-").replace("/", "-"))
|
||||
else:
|
||||
for doctype_name in doctype:
|
||||
for doc_name in doctype[doctype_name]:
|
||||
try:
|
||||
output = frappe.get_print(doctype_name, doc_name, format, as_pdf = True, output = output)
|
||||
except Exception:
|
||||
frappe.log_error("Permission Error on doc {} of doctype {}".format(doc_name, doctype_name))
|
||||
frappe.local.response.filename = "{}.pdf".format(name)
|
||||
|
||||
frappe.local.response.filecontent = read_multi_pdf(output)
|
||||
frappe.local.response.type = "download"
|
||||
|
||||
|
|
|
|||
|
|
@ -214,7 +214,7 @@ def log(method, message=None):
|
|||
return message
|
||||
|
||||
def get_enabled_scheduler_events():
|
||||
if 'enabled_events' in frappe.flags:
|
||||
if 'enabled_events' in frappe.flags and frappe.flags.enabled_events:
|
||||
return frappe.flags.enabled_events
|
||||
|
||||
enabled_events = frappe.db.get_global("enabled_scheduler_events")
|
||||
|
|
|
|||
|
|
@ -65,6 +65,9 @@
|
|||
</p>
|
||||
</div>
|
||||
{% elif is_list %}
|
||||
<div class="list-filters row">
|
||||
<script>{% include "templates/includes/list/filters.js" %}</script>
|
||||
</div>
|
||||
{% if show_in_grid %}
|
||||
<div class="web-form-list">
|
||||
<div class="results"></div>
|
||||
|
|
|
|||
|
|
@ -380,7 +380,8 @@ def accept(web_form, data, for_payment=False):
|
|||
if df and df.fieldtype in ('Attach', 'Attach Image'):
|
||||
if value and 'data:' and 'base64' in value:
|
||||
files.append((fieldname, value))
|
||||
doc.set(fieldname, '')
|
||||
if not doc.name:
|
||||
doc.set(fieldname, '')
|
||||
continue
|
||||
|
||||
elif not value and doc.get(fieldname):
|
||||
|
|
@ -404,7 +405,9 @@ def accept(web_form, data, for_payment=False):
|
|||
if web_form.login_required and frappe.session.user=="Guest":
|
||||
frappe.throw(_("You must login to submit this form"))
|
||||
|
||||
doc.insert(ignore_permissions = True, ignore_mandatory = True if files else False)
|
||||
ignore_mandatory = True if files else False
|
||||
|
||||
doc.insert(ignore_permissions = True, ignore_mandatory = ignore_mandatory)
|
||||
|
||||
# add files
|
||||
if files:
|
||||
|
|
@ -516,7 +519,7 @@ def make_route_string(parameters):
|
|||
return (route_string, delimeter)
|
||||
|
||||
@frappe.whitelist(allow_guest=True)
|
||||
def get_form_data(doctype, docname, web_form_name):
|
||||
def get_form_data(doctype, docname=None, web_form_name=None):
|
||||
out = frappe._dict()
|
||||
|
||||
if docname:
|
||||
|
|
|
|||
|
|
@ -199,6 +199,38 @@
|
|||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "show_in_filter",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Show in filter",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
|
|
@ -489,7 +521,7 @@
|
|||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2018-07-31 12:43:36.847174",
|
||||
"modified": "2018-08-23 21:04:13.786287",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Website",
|
||||
"name": "Web Form Field",
|
||||
|
|
@ -503,6 +535,5 @@
|
|||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 0,
|
||||
"track_seen": 0,
|
||||
"track_views": 0
|
||||
"track_seen": 0
|
||||
}
|
||||
|
|
@ -49,7 +49,8 @@ export default function make_datatable(container, doctype) {
|
|||
|
||||
tablerow
|
||||
.css({cursor: 'pointer'})
|
||||
.click(() => {
|
||||
.click((e) => {
|
||||
if ($(e.target).is('[type=checkbox]')) return
|
||||
window.location.href = window.location.href + '?name=' + data[i].name;
|
||||
});
|
||||
for (let fieldname of colnames) {
|
||||
|
|
@ -62,7 +63,7 @@ export default function make_datatable(container, doctype) {
|
|||
|
||||
|
||||
const bind_events = () => {
|
||||
parent.find('input[type="checkbox"]:not(.select-all)').on('click', (e) => {
|
||||
parent.on('click', 'input[type="checkbox"]:not(.select-all)', (e) => {
|
||||
set_actions();
|
||||
e.stopPropagation();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -75,6 +75,15 @@ export default class WebForm {
|
|||
if(doc) {
|
||||
this.field_group.set_values(doc);
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
this.field_group.fields_list.forEach((field_instance) => {
|
||||
let instance_value = field_instance.value;
|
||||
if (instance_value != null && field_instance.df.fieldtype === "Attach" && instance_value.match(".(?:jpg|gif|jpeg|png)") ){
|
||||
field_instance.$input_wrapper.append(`<img src=${field_instance.get_value()} width="auto" height=200>`);
|
||||
}
|
||||
});
|
||||
}, 500);
|
||||
}
|
||||
|
||||
get_values() {
|
||||
|
|
|
|||
|
|
@ -30,19 +30,22 @@
|
|||
"showdown": "^1.8.6",
|
||||
"socket.io": "^2.0.4",
|
||||
"superagent": "^3.8.2",
|
||||
"touch": "^3.1.0"
|
||||
"touch": "^3.1.0",
|
||||
"vue": "^2.5.17"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-runtime": "^6.26.0",
|
||||
"chalk": "^2.3.2",
|
||||
"less": "^3.0.4",
|
||||
"node-sass": "^4.9.0",
|
||||
"rollup": "^0.55.3",
|
||||
"rollup": "^0.65.0",
|
||||
"rollup-plugin-buble": "^0.19.2",
|
||||
"rollup-plugin-commonjs": "^8.3.0",
|
||||
"rollup-plugin-multi-entry": "^2.0.2",
|
||||
"rollup-plugin-node-resolve": "^3.0.2",
|
||||
"rollup-plugin-postcss": "^1.4.0",
|
||||
"rollup-plugin-uglify": "^3.0.0"
|
||||
"rollup-plugin-uglify": "^3.0.0",
|
||||
"rollup-plugin-vue": "^4.3.2",
|
||||
"vue-template-compiler": "^2.5.17"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ bleach
|
|||
bleach-whitelist
|
||||
Pillow
|
||||
beautifulsoup4
|
||||
rq
|
||||
rq==0.12.0
|
||||
schedule
|
||||
cryptography
|
||||
pyopenssl
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const chalk = require('chalk');
|
||||
const log = console.log; // eslint-disable-line
|
||||
|
||||
|
|
@ -8,11 +9,13 @@ const node_resolve = require('rollup-plugin-node-resolve');
|
|||
const postcss = require('rollup-plugin-postcss');
|
||||
const buble = require('rollup-plugin-buble');
|
||||
const uglify = require('rollup-plugin-uglify');
|
||||
const vue = require('rollup-plugin-vue');
|
||||
const frappe_html = require('./frappe-html-plugin');
|
||||
|
||||
const production = process.env.FRAPPE_ENV === 'production';
|
||||
|
||||
const {
|
||||
apps_list,
|
||||
assets_path,
|
||||
bench_path,
|
||||
get_public_path,
|
||||
|
|
@ -35,6 +38,8 @@ function get_rollup_options_for_js(output_file, input_files) {
|
|||
multi_entry(),
|
||||
// .html -> .js
|
||||
frappe_html(),
|
||||
// .vue -> .js
|
||||
vue.default(),
|
||||
// ES6 -> ES5
|
||||
buble({
|
||||
objectAssign: 'Object.assign',
|
||||
|
|
@ -44,7 +49,13 @@ function get_rollup_options_for_js(output_file, input_files) {
|
|||
exclude: [path.resolve(bench_path, '**/*.css'), path.resolve(bench_path, '**/*.less')]
|
||||
}),
|
||||
commonjs(),
|
||||
node_resolve(),
|
||||
node_resolve({
|
||||
customResolveOptions: {
|
||||
paths: apps_list.map(app => {
|
||||
return path.resolve(get_app_path(app), '../node_modules');
|
||||
}).filter(fs.existsSync)
|
||||
}
|
||||
}),
|
||||
production && uglify()
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ io.on('connection', function (socket) {
|
|||
});
|
||||
// end frappe.chat
|
||||
|
||||
request.get(get_url(socket, '/api/method/frappe.async.get_user_info'))
|
||||
request.get(get_url(socket, '/api/method/frappe.realtime.get_user_info'))
|
||||
.type('form')
|
||||
.query({
|
||||
sid: sid
|
||||
|
|
@ -291,7 +291,7 @@ function get_url(socket, path) {
|
|||
function can_subscribe_doc(args) {
|
||||
if (!args) return;
|
||||
if (!args.doctype || !args.docname) return;
|
||||
request.get(get_url(args.socket, '/api/method/frappe.async.can_subscribe_doc'))
|
||||
request.get(get_url(args.socket, '/api/method/frappe.realtime.can_subscribe_doc'))
|
||||
.type('form')
|
||||
.query({
|
||||
sid: args.sid,
|
||||
|
|
|
|||
198
yarn.lock
198
yarn.lock
|
|
@ -2,6 +2,44 @@
|
|||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@babel/runtime@^7.0.0-beta.46":
|
||||
version "7.0.0-rc.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-rc.2.tgz#63082909bd27c39f92c27c641f278389ad30a478"
|
||||
dependencies:
|
||||
regenerator-runtime "^0.12.0"
|
||||
|
||||
"@types/estree@0.0.39":
|
||||
version "0.0.39"
|
||||
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
|
||||
|
||||
"@types/node@*":
|
||||
version "10.9.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.9.2.tgz#f0ab8dced5cd6c56b26765e1c0d9e4fdcc9f2a00"
|
||||
|
||||
"@vue/component-compiler-utils@^2.1.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-2.2.0.tgz#bbbb7ed38a9a8a7c93abe7ef2e54a90a04b631b4"
|
||||
dependencies:
|
||||
consolidate "^0.15.1"
|
||||
hash-sum "^1.0.2"
|
||||
lru-cache "^4.1.2"
|
||||
merge-source-map "^1.1.0"
|
||||
postcss "^6.0.20"
|
||||
postcss-selector-parser "^3.1.1"
|
||||
prettier "1.13.7"
|
||||
source-map "^0.5.6"
|
||||
vue-template-es2015-compiler "^1.6.0"
|
||||
|
||||
"@vue/component-compiler@^3.4.4":
|
||||
version "3.4.4"
|
||||
resolved "https://registry.yarnpkg.com/@vue/component-compiler/-/component-compiler-3.4.4.tgz#4bec11116116c292f1f865afc2d88421953fc393"
|
||||
dependencies:
|
||||
"@vue/component-compiler-utils" "^2.1.0"
|
||||
clean-css "^4.1.11"
|
||||
hash-sum "^1.0.2"
|
||||
postcss-modules-sync "^1.0.0"
|
||||
source-map "0.6.*"
|
||||
|
||||
abbrev@1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
|
||||
|
|
@ -233,6 +271,10 @@ block-stream@*:
|
|||
dependencies:
|
||||
inherits "~2.0.0"
|
||||
|
||||
bluebird@^3.1.1:
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
|
||||
|
||||
body-parser@1.18.2:
|
||||
version "1.18.2"
|
||||
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454"
|
||||
|
|
@ -367,12 +409,26 @@ chalk@^2.3.1:
|
|||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.2.0"
|
||||
|
||||
chalk@^2.4.1:
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
|
||||
dependencies:
|
||||
ansi-styles "^3.2.1"
|
||||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
clap@^1.0.9:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
|
||||
dependencies:
|
||||
chalk "^1.1.3"
|
||||
|
||||
clean-css@^4.1.11:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17"
|
||||
dependencies:
|
||||
source-map "~0.6.0"
|
||||
|
||||
cliui@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
|
||||
|
|
@ -487,6 +543,12 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0:
|
|||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
|
||||
|
||||
consolidate@^0.15.1:
|
||||
version "0.15.1"
|
||||
resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7"
|
||||
dependencies:
|
||||
bluebird "^3.1.1"
|
||||
|
||||
content-disposition@0.5.2:
|
||||
version "0.5.2"
|
||||
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
|
||||
|
|
@ -631,7 +693,11 @@ dashdash@^1.12.0:
|
|||
dependencies:
|
||||
assert-plus "^1.0.0"
|
||||
|
||||
debug@2.6.9, debug@~2.6.4, debug@~2.6.6:
|
||||
de-indent@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
|
||||
|
||||
debug@2.6.9, debug@^2.6.0, debug@~2.6.4, debug@~2.6.6:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||
dependencies:
|
||||
|
|
@ -671,6 +737,12 @@ destroy@~1.0.4:
|
|||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
|
||||
|
||||
dot-prop@^4.1.1:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
|
||||
dependencies:
|
||||
is-obj "^1.0.0"
|
||||
|
||||
double-ended-queue@^2.1.0-0:
|
||||
version "2.1.0-0"
|
||||
resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c"
|
||||
|
|
@ -1178,6 +1250,10 @@ has@^1.0.1:
|
|||
dependencies:
|
||||
function-bind "^1.0.2"
|
||||
|
||||
hash-sum@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04"
|
||||
|
||||
hawk@~3.1.3:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
|
||||
|
|
@ -1187,6 +1263,10 @@ hawk@~3.1.3:
|
|||
hoek "2.x.x"
|
||||
sntp "1.x.x"
|
||||
|
||||
he@^1.1.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
|
||||
|
||||
highlight.js@^9.12.0:
|
||||
version "9.12.0"
|
||||
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e"
|
||||
|
|
@ -1238,7 +1318,7 @@ iconv-lite@0.4.19:
|
|||
version "0.4.19"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
|
||||
|
||||
icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0:
|
||||
icss-replace-symbols@1.1.0, icss-replace-symbols@^1.0.2, icss-replace-symbols@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
|
||||
|
||||
|
|
@ -1391,6 +1471,10 @@ is-number@^3.0.0:
|
|||
dependencies:
|
||||
kind-of "^3.0.2"
|
||||
|
||||
is-obj@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
|
||||
|
||||
is-plain-obj@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
|
||||
|
|
@ -1629,6 +1713,13 @@ lru-cache@^4.0.1:
|
|||
pseudomap "^1.0.2"
|
||||
yallist "^2.1.2"
|
||||
|
||||
lru-cache@^4.1.2:
|
||||
version "4.1.3"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c"
|
||||
dependencies:
|
||||
pseudomap "^1.0.2"
|
||||
yallist "^2.1.2"
|
||||
|
||||
macaddress@^0.2.8:
|
||||
version "0.2.8"
|
||||
resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
|
||||
|
|
@ -1690,6 +1781,12 @@ merge-descriptors@1.0.1:
|
|||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
|
||||
|
||||
merge-source-map@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
|
||||
dependencies:
|
||||
source-map "^0.6.1"
|
||||
|
||||
methods@^1.1.1, methods@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
|
||||
|
|
@ -2217,20 +2314,31 @@ postcss-modules-extract-imports@1.1.0:
|
|||
dependencies:
|
||||
postcss "^6.0.1"
|
||||
|
||||
postcss-modules-local-by-default@1.2.0:
|
||||
postcss-modules-local-by-default@1.2.0, postcss-modules-local-by-default@^1.1.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
|
||||
dependencies:
|
||||
css-selector-tokenizer "^0.7.0"
|
||||
postcss "^6.0.1"
|
||||
|
||||
postcss-modules-scope@1.1.0:
|
||||
postcss-modules-scope@1.1.0, postcss-modules-scope@^1.0.2:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
|
||||
dependencies:
|
||||
css-selector-tokenizer "^0.7.0"
|
||||
postcss "^6.0.1"
|
||||
|
||||
postcss-modules-sync@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-modules-sync/-/postcss-modules-sync-1.0.0.tgz#619a719cf78dd16a4834135140b324cf77334be1"
|
||||
dependencies:
|
||||
generic-names "^1.0.2"
|
||||
icss-replace-symbols "^1.0.2"
|
||||
postcss "^5.2.5"
|
||||
postcss-modules-local-by-default "^1.1.1"
|
||||
postcss-modules-scope "^1.0.2"
|
||||
string-hash "^1.1.0"
|
||||
|
||||
postcss-modules-values@1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
|
||||
|
|
@ -2298,6 +2406,14 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
|
|||
indexes-of "^1.0.1"
|
||||
uniq "^1.0.1"
|
||||
|
||||
postcss-selector-parser@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865"
|
||||
dependencies:
|
||||
dot-prop "^4.1.1"
|
||||
indexes-of "^1.0.1"
|
||||
uniq "^1.0.1"
|
||||
|
||||
postcss-svgo@^2.1.1:
|
||||
version "2.1.6"
|
||||
resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
|
||||
|
|
@ -2335,7 +2451,7 @@ postcss@6.0.1:
|
|||
source-map "^0.5.6"
|
||||
supports-color "^3.2.3"
|
||||
|
||||
postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16:
|
||||
postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16, postcss@^5.2.5:
|
||||
version "5.2.18"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
|
||||
dependencies:
|
||||
|
|
@ -2352,6 +2468,14 @@ postcss@^6.0.1:
|
|||
source-map "^0.6.1"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
postcss@^6.0.20:
|
||||
version "6.0.23"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
|
||||
dependencies:
|
||||
chalk "^2.4.1"
|
||||
source-map "^0.6.1"
|
||||
supports-color "^5.4.0"
|
||||
|
||||
prepend-http@^1.0.0:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
|
||||
|
|
@ -2360,6 +2484,10 @@ preserve@^0.2.0:
|
|||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
|
||||
|
||||
prettier@1.13.7:
|
||||
version "1.13.7"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.13.7.tgz#850f3b8af784a49a6ea2d2eaa7ed1428a34b7281"
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
|
||||
|
|
@ -2416,6 +2544,10 @@ query-string@^4.1.0:
|
|||
object-assign "^4.1.0"
|
||||
strict-uri-encode "^1.0.0"
|
||||
|
||||
querystring@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
|
||||
|
||||
randomatic@^1.1.3:
|
||||
version "1.1.7"
|
||||
resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
|
||||
|
|
@ -2520,6 +2652,10 @@ regenerator-runtime@^0.11.0:
|
|||
version "0.11.1"
|
||||
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
|
||||
|
||||
regenerator-runtime@^0.12.0:
|
||||
version "0.12.1"
|
||||
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
|
||||
|
||||
regex-cache@^0.4.2:
|
||||
version "0.4.4"
|
||||
resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
|
||||
|
|
@ -2707,6 +2843,18 @@ rollup-plugin-uglify@^3.0.0:
|
|||
dependencies:
|
||||
uglify-es "^3.3.7"
|
||||
|
||||
rollup-plugin-vue@^4.3.2:
|
||||
version "4.3.2"
|
||||
resolved "https://registry.yarnpkg.com/rollup-plugin-vue/-/rollup-plugin-vue-4.3.2.tgz#0bdf0cf677565b0ac2358d590f177b6b4ded8cce"
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.0.0-beta.46"
|
||||
"@vue/component-compiler" "^3.4.4"
|
||||
"@vue/component-compiler-utils" "^2.1.0"
|
||||
debug "^2.6.0"
|
||||
hash-sum "^1.0.2"
|
||||
querystring "^0.2.0"
|
||||
rollup-pluginutils "^2.0.1"
|
||||
|
||||
rollup-pluginutils@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.0.1.tgz#7ec95b3573f6543a46a6461bd9a7c544525d0fc0"
|
||||
|
|
@ -2714,9 +2862,12 @@ rollup-pluginutils@^2.0.1:
|
|||
estree-walker "^0.3.0"
|
||||
micromatch "^2.3.11"
|
||||
|
||||
rollup@^0.55.3:
|
||||
version "0.55.5"
|
||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.55.5.tgz#2f88c300f7cf24b5ec2dca8a6aba73b04e087e93"
|
||||
rollup@^0.65.0:
|
||||
version "0.65.0"
|
||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.65.0.tgz#280db1252169b68fc3043028346b337dde453fba"
|
||||
dependencies:
|
||||
"@types/estree" "0.0.39"
|
||||
"@types/node" "*"
|
||||
|
||||
safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||
version "5.1.1"
|
||||
|
|
@ -2876,6 +3027,10 @@ sortablejs@^1.7.0:
|
|||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.7.0.tgz#80a2b2370abd568e1cec8c271131ef30a904fa28"
|
||||
|
||||
source-map@0.6.*, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||
|
||||
source-map@^0.4.2:
|
||||
version "0.4.4"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
|
||||
|
|
@ -2886,10 +3041,6 @@ source-map@^0.5.3, source-map@^0.5.6:
|
|||
version "0.5.7"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
|
||||
|
||||
source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||
|
||||
spdx-correct@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82"
|
||||
|
|
@ -2944,7 +3095,7 @@ strict-uri-encode@^1.0.0:
|
|||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
|
||||
|
||||
string-hash@^1.1.1:
|
||||
string-hash@^1.1.0, string-hash@^1.1.1:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
|
||||
|
||||
|
|
@ -3048,6 +3199,12 @@ supports-color@^5.3.0:
|
|||
dependencies:
|
||||
has-flag "^3.0.0"
|
||||
|
||||
supports-color@^5.4.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||
dependencies:
|
||||
has-flag "^3.0.0"
|
||||
|
||||
svgo@^0.7.0:
|
||||
version "0.7.2"
|
||||
resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
|
||||
|
|
@ -3201,6 +3358,21 @@ vlq@^1.0.0:
|
|||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.0.tgz#8101be90843422954c2b13eb27f2f3122bdcc806"
|
||||
|
||||
vue-template-compiler@^2.5.17:
|
||||
version "2.5.17"
|
||||
resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.17.tgz#52a4a078c327deb937482a509ae85c06f346c3cb"
|
||||
dependencies:
|
||||
de-indent "^1.0.2"
|
||||
he "^1.1.0"
|
||||
|
||||
vue-template-es2015-compiler@^1.6.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18"
|
||||
|
||||
vue@^2.5.17:
|
||||
version "2.5.17"
|
||||
resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.17.tgz#0f8789ad718be68ca1872629832ed533589c6ada"
|
||||
|
||||
whet.extend@~0.9.9:
|
||||
version "0.9.9"
|
||||
resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue