@@ -15,26 +15,30 @@ | |||||
.setup-wizard-slide .lead { | .setup-wizard-slide .lead { | ||||
margin-bottom: 10px; | margin-bottom: 10px; | ||||
font-weight: 500; | |||||
} | } | ||||
.setup-wizard-slide .form { | |||||
margin-top: 20px; | |||||
.setup-wizard-slide.with-form { | |||||
margin: 40px auto; | |||||
border: 1px solid #d1d8dd; | border: 1px solid #d1d8dd; | ||||
box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.1); | box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.1); | ||||
} | } | ||||
.setup-wizard-slide .footer { | .setup-wizard-slide .footer { | ||||
margin: 20px auto; | |||||
padding: 30px; | |||||
} | } | ||||
.setup-wizard-progress { | .setup-wizard-progress { | ||||
border-bottom: 1px solid #d1d8dd; | |||||
padding-bottom: 15px; | |||||
margin: -20px auto 20px; | |||||
padding: 15px; | |||||
} | } | ||||
.setup-wizard-slide .fa-fw { | .setup-wizard-slide .fa-fw { | ||||
vertical-align: middle; | vertical-align: middle; | ||||
font-size: 10px; | |||||
} | |||||
.setup-wizard-slide .fa-fw.active { | |||||
color: #5e64ff; | |||||
} | } | ||||
.setup-wizard-slide .icon-circle-blank { | .setup-wizard-slide .icon-circle-blank { | ||||
@@ -548,11 +548,10 @@ function load_frappe_slides() { | |||||
title: __("The First User: You"), | title: __("The First User: You"), | ||||
icon: "fa fa-user", | icon: "fa fa-user", | ||||
fields: [ | fields: [ | ||||
{"fieldname": "first_name", "label": __("First Name"), "fieldtype": "Data", | |||||
{"fieldname": "full_name", "label": __("Full Name"), "fieldtype": "Data", | |||||
reqd:1}, | reqd:1}, | ||||
{"fieldname": "last_name", "label": __("Last Name"), "fieldtype": "Data"}, | |||||
{"fieldname": "email", "label": __("Email Address"), "fieldtype": "Data", | {"fieldname": "email", "label": __("Email Address"), "fieldtype": "Data", | ||||
reqd:1, "description": __("You will use it to Login"), "options":"Email"}, | |||||
reqd:1, "description": __("Login id"), "options":"Email"}, | |||||
{"fieldname": "password", "label": __("Password"), "fieldtype": "Password", | {"fieldname": "password", "label": __("Password"), "fieldtype": "Password", | ||||
reqd:1}, | reqd:1}, | ||||
{fieldtype:"Attach Image", fieldname:"attach_user", | {fieldtype:"Attach Image", fieldname:"attach_user", | ||||
@@ -563,8 +562,10 @@ function load_frappe_slides() { | |||||
if(user!=="Administrator") { | if(user!=="Administrator") { | ||||
slide.form.fields_dict.password.$wrapper.toggle(false); | slide.form.fields_dict.password.$wrapper.toggle(false); | ||||
slide.form.fields_dict.email.$wrapper.toggle(false); | slide.form.fields_dict.email.$wrapper.toggle(false); | ||||
slide.form.fields_dict.first_name.set_input(frappe.boot.user.first_name); | |||||
slide.form.fields_dict.last_name.set_input(frappe.boot.user.last_name); | |||||
if(frappe.boot.user.first_name || frappe.boot.user.last_name) { | |||||
slide.form.fields_dict.full_name.set_input( | |||||
[frappe.boot.user.first_name, frappe.boot.user.last_name].join(' ').trim()); | |||||
} | |||||
var user_image = frappe.get_cookie("user_image"); | var user_image = frappe.get_cookie("user_image"); | ||||
if(user_image) { | if(user_image) { | ||||
@@ -5,7 +5,6 @@ from __future__ import unicode_literals | |||||
import frappe, json, os | import frappe, json, os | ||||
from frappe.utils import strip, cint | from frappe.utils import strip, cint | ||||
from frappe import _ | |||||
from frappe.translate import (set_default_language, get_dict, send_translations) | from frappe.translate import (set_default_language, get_dict, send_translations) | ||||
from frappe.geo.country_info import get_country_info | from frappe.geo.country_info import get_country_info | ||||
from frappe.utils.file_manager import save_file | from frappe.utils.file_manager import save_file | ||||
@@ -84,11 +83,14 @@ def update_user_name(args): | |||||
args['name'] = args.get("email") | args['name'] = args.get("email") | ||||
_mute_emails, frappe.flags.mute_emails = frappe.flags.mute_emails, True | _mute_emails, frappe.flags.mute_emails = frappe.flags.mute_emails, True | ||||
first_name, last_name = args.get('full_name'), '' | |||||
if ' ' in first_name: | |||||
first_name, last_name = first_name.split(' ', 1) | |||||
doc = frappe.get_doc({ | doc = frappe.get_doc({ | ||||
"doctype":"User", | "doctype":"User", | ||||
"email": args.get("email"), | "email": args.get("email"), | ||||
"first_name": args.get("first_name"), | |||||
"last_name": args.get("last_name") | |||||
"first_name": first_name, | |||||
"last_name": last_name | |||||
}) | }) | ||||
doc.flags.no_welcome_mail = True | doc.flags.no_welcome_mail = True | ||||
doc.insert() | doc.insert() | ||||
@@ -1,17 +1,17 @@ | |||||
<div class="container setup-wizard-slide {%= css_class %}" data-slide-name="{%= name %}"> | |||||
<div class="container setup-wizard-slide {%= css_class %} with-form" data-slide-name="{%= name %}"> | |||||
<div class="text-center setup-wizard-progress text-extra-muted"> | <div class="text-center setup-wizard-progress text-extra-muted"> | ||||
{% for (var i=0; i < slides_count; i++) { %} | {% for (var i=0; i < slides_count; i++) { %} | ||||
<i class="fa-fw {% if (i+1==step) { %} fa fa-circle {% } else { %} fa fa-circle-o {% } %}"></i> | |||||
<i class="fa fa-fw fa-circle{% if (i+1==step) { %} active {% } %}"></i> | |||||
{% } %} | {% } %} | ||||
</div> | </div> | ||||
<p class="text-center lead">{%= title %}</p> | <p class="text-center lead">{%= title %}</p> | ||||
<div class="row"> | <div class="row"> | ||||
<div class="col-sm-12"> | <div class="col-sm-12"> | ||||
{% if (help) { %} <p class="text-center">{%= help %}</p> {% } %} | |||||
<!-- {% if (help) { %} <p class="text-center">{%= help %}</p> {% } %} --> | |||||
<div class="form"></div> | <div class="form"></div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="footer text-center"> | |||||
<div class="footer text-right"> | |||||
<div> | <div> | ||||
<a class="prev-btn hide grey small">{%= __("Previous") %}</a> | <a class="prev-btn hide grey small">{%= __("Previous") %}</a> | ||||
<a class="next-btn hide btn btn-primary btn-sm">{%= __("Next") %}</a> | <a class="next-btn hide btn btn-primary btn-sm">{%= __("Next") %}</a> | ||||
@@ -665,3 +665,44 @@ fieldset[disabled] .form-control { | |||||
.note-editor.note-frame .note-editing-area .note-editable { | .note-editor.note-frame .note-editing-area .note-editable { | ||||
color: #36414C; | color: #36414C; | ||||
} | } | ||||
.c3 svg { | |||||
font-family: inherit; | |||||
font-size: 10px; | |||||
color: #36414C; | |||||
} | |||||
.c3-line { | |||||
stroke-width: 3px; | |||||
} | |||||
.c3-tooltip { | |||||
box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.1); | |||||
border-radius: 3px; | |||||
opacity: 1; | |||||
} | |||||
.c3-tooltip tr { | |||||
border: none; | |||||
} | |||||
.c3-tooltip th { | |||||
color: #8D99A6; | |||||
background-color: #ffffff; | |||||
font-size: 12px; | |||||
font-weight: normal; | |||||
padding: 2px 5px; | |||||
text-align: left; | |||||
border: 1px solid #d1d8dd; | |||||
} | |||||
.c3-tooltip td { | |||||
color: #36414C; | |||||
font-size: 11px; | |||||
padding: 3px 6px; | |||||
background-color: #fff; | |||||
border: 1px solid #d1d8dd; | |||||
} | |||||
.c3-tooltip td > span { | |||||
display: inline-block; | |||||
width: 10px; | |||||
height: 10px; | |||||
margin-right: 6px; | |||||
} | |||||
.c3-tooltip td.value { | |||||
text-align: right; | |||||
} |
@@ -322,15 +322,6 @@ body { | |||||
margin-top: 10px; | margin-top: 10px; | ||||
text-align: left; | text-align: left; | ||||
} | } | ||||
#page-setup-wizard .form-section:first-child .form-column:first-child .frappe-control:first-child { | |||||
border-top: 1px solid #d1d8dd; | |||||
} | |||||
#page-setup-wizard .form-section:last-child .form-column:last-child .frappe-control:last-child { | |||||
border-bottom: 1px solid #d1d8dd; | |||||
} | |||||
#page-setup-wizard .setup-wizard-slide .form { | |||||
border: none; | |||||
} | |||||
body[data-route^="Form"] .page-head .sub-heading { | body[data-route^="Form"] .page-head .sub-heading { | ||||
right: 90px; | right: 90px; | ||||
} | } | ||||
@@ -611,11 +611,6 @@ frappe.ui.form.ControlCurrency = frappe.ui.form.ControlFloat.extend({ | |||||
frappe.ui.form.ControlPercent = frappe.ui.form.ControlFloat; | frappe.ui.form.ControlPercent = frappe.ui.form.ControlFloat; | ||||
frappe.ui.form.ControlDate = frappe.ui.form.ControlData.extend({ | frappe.ui.form.ControlDate = frappe.ui.form.ControlData.extend({ | ||||
datepicker_options: { | |||||
language: "en", | |||||
autoClose: true, | |||||
todayButton: new Date() | |||||
}, | |||||
set_input: function(value) { | set_input: function(value) { | ||||
this._super(value); | this._super(value); | ||||
if(value && this.last_value !== this.value) { | if(value && this.last_value !== this.value) { | ||||
@@ -630,6 +625,12 @@ frappe.ui.form.ControlDate = frappe.ui.form.ControlData.extend({ | |||||
}, | }, | ||||
set_date_options: function() { | set_date_options: function() { | ||||
var me = this; | var me = this; | ||||
this.datepicker_options = { | |||||
language: "en", | |||||
autoClose: true, | |||||
todayButton: new Date() | |||||
}; | |||||
var date_format = | var date_format = | ||||
(frappe.boot.sysdefaults.date_format || 'yyyy-mm-dd'); | (frappe.boot.sysdefaults.date_format || 'yyyy-mm-dd'); | ||||
this.datepicker_options.dateFormat = date_format; | this.datepicker_options.dateFormat = date_format; | ||||
@@ -23,7 +23,7 @@ frappe.ui.Chart = Class.extend({ | |||||
data: {}, | data: {}, | ||||
axis: { | axis: { | ||||
x: { | x: { | ||||
type: 'category' // this needed to load string x value | |||||
type: this.opts.x_type || 'category' // this needed to load string x value | |||||
}, | }, | ||||
y: { | y: { | ||||
padding: { bottom: 10 } | padding: { bottom: 10 } | ||||
@@ -47,6 +47,27 @@ frappe.ui.Chart = Class.extend({ | |||||
chart_dict["data"]["type"] = this.opts.chart_type || "line"; | chart_dict["data"]["type"] = this.opts.chart_type || "line"; | ||||
if(this.opts.x_type==='timeseries') { | |||||
if(!chart_dict.axis.x.tick) { | |||||
chart_dict.axis.x.tick = {} | |||||
} | |||||
chart_dict.axis.x.tick.culling = {max: 15}; | |||||
chart_dict.axis.x.tick.format = frappe.boot.sysdefaults.date_format | |||||
.replace('yyyy', '%Y').replace('mm', '%m').replace('dd', '%d'); | |||||
}; | |||||
// set color | |||||
if(!chart_dict.data.colors) { | |||||
colors = ['#4E50A6', '#7679FB', '#A3A5FC', '#925191', '#5D3EA4', '#8D5FFA', | |||||
'#5E3AA8', '#7B933D', '#4F8EA8']; | |||||
chart_dict.data.colors = {}; | |||||
chart_dict.data.columns.forEach(function(d, i) { | |||||
if(d[0]!=='x') { | |||||
chart_dict.data.colors[d[0]] = colors[i-1]; | |||||
} | |||||
}); | |||||
} | |||||
return c3.generate(chart_dict); | return c3.generate(chart_dict); | ||||
}, | }, | ||||
@@ -75,8 +75,12 @@ frappe.ui.FieldGroup = frappe.ui.form.Layout.extend({ | |||||
} | } | ||||
} | } | ||||
if(errors.length && !ignore_errors) { | if(errors.length && !ignore_errors) { | ||||
msgprint('<b>' + __('Missing Values Required') + "</b><br>" | |||||
+ errors.join('<br>')); | |||||
msgprint({ | |||||
title: __('Missing Values Required'), | |||||
message: __('Following fields have missing values:') + | |||||
'<br><br><ul><li>' + errors.join('<li>') + '</ul>', | |||||
indicator: 'orange' | |||||
}); | |||||
return null; | return null; | ||||
} | } | ||||
return ret; | return ret; | ||||
@@ -671,7 +671,8 @@ frappe.views.GridReportWithPlot = frappe.views.GridReport.extend({ | |||||
this.chart = new frappe.ui.Chart({ | this.chart = new frappe.ui.Chart({ | ||||
wrapper: this.chart_area, | wrapper: this.chart_area, | ||||
data: chart_data | |||||
data: chart_data, | |||||
x_type: 'timeseries' | |||||
}); | }); | ||||
}, | }, | ||||
@@ -533,4 +533,53 @@ textarea.form-control { | |||||
.note-editor.note-frame .note-editing-area .note-editable { | .note-editor.note-frame .note-editing-area .note-editable { | ||||
color: @text-color; | color: @text-color; | ||||
} | |||||
} | |||||
.c3 svg { | |||||
font-family: inherit; | |||||
font-size: 10px; | |||||
color: @text-color; | |||||
} | |||||
.c3-line { | |||||
stroke-width: 3px; | |||||
} | |||||
.c3-tooltip { | |||||
box-shadow: 3px 3px 3px rgba(0,0,0,0.1); | |||||
border-radius: 3px; | |||||
opacity: 1; | |||||
} | |||||
.c3-tooltip tr { | |||||
border: none; | |||||
} | |||||
.c3-tooltip th { | |||||
color: @text-muted; | |||||
background-color: #ffffff; | |||||
font-size: 12px; | |||||
font-weight: normal; | |||||
padding: 2px 5px; | |||||
text-align: left; | |||||
border: 1px solid @border-color; | |||||
} | |||||
.c3-tooltip td { | |||||
color: @text-color; | |||||
font-size: 11px; | |||||
padding: 3px 6px; | |||||
background-color: #fff; | |||||
border: 1px solid @border-color; | |||||
} | |||||
.c3-tooltip td > span { | |||||
display: inline-block; | |||||
width: 10px; | |||||
height: 10px; | |||||
margin-right: 6px; | |||||
} | |||||
.c3-tooltip td.value { | |||||
text-align: right; } | |||||
@@ -392,20 +392,6 @@ body { | |||||
} | } | ||||
} | } | ||||
#page-setup-wizard { | |||||
.form-section:first-child .form-column:first-child .frappe-control:first-child { | |||||
border-top: 1px solid @border-color; | |||||
} | |||||
.form-section:last-child .form-column:last-child .frappe-control:last-child { | |||||
border-bottom: 1px solid @border-color; | |||||
} | |||||
.setup-wizard-slide .form { | |||||
border: none; | |||||
} | |||||
} | |||||
body[data-route^="Form"] { | body[data-route^="Form"] { | ||||
.page-head .sub-heading { | .page-head .sub-heading { | ||||
right: 90px; | right: 90px; | ||||